Implement managed browser security, individual agents and observability

This commit is contained in:
Karl committed 2026-10-13 16:58:15 +02:00
1 parent ff482ebe23
commit ea448de2d4
172 files changed
+5404 -347

No files matched your search

+21
View File
@@ -0,0 +1,21 @@
'use strict';
const {z}=require('zod');
const {FileFactsSchema}=require('./transfer-facts.cjs');
// Network bodies are not independently identified files: they may contain passwords,
// OAuth tokens, multipart form secrets or binary credential envelopes. No digest field.
const RequestFactsSchema=z.object({bytes:FileFactsSchema.shape.bytes,detectedType:FileFactsSchema.shape.detectedType}).strict();
function requestTransferFacts(value){return value?RequestFactsSchema.parse(value):undefined;}
function requestFactsForTransfer(transfer){return RequestFactsSchema.parse({bytes:transfer.size,detectedType:transfer.detectedType});}
function migrateQueuedRequestFacts(queue){
if(!Array.isArray(queue))throw Error('Invalid security event queue');
return queue.map(event=>{
if(!event||!['upload.authorized','upload.block'].includes(event.kind))return event;
const {file,request,...rest}=event;
// Preserve delivery identity and decision, but discard old generic-body digest.
// Invalid legacy facts do not become a new loosely typed logging channel.
const candidate=request||file;
const parsed=RequestFactsSchema.safeParse(candidate?{bytes:candidate.bytes,detectedType:candidate.detectedType}:undefined);
return {...rest,...(parsed.success?{request:parsed.data}:{})};
});
}
module.exports={RequestFactsSchema,requestTransferFacts,requestFactsForTransfer,migrateQueuedRequestFacts};