import type { Bundle } from '../bundleIo.js'; import { type Wave } from '../model.js'; import { type Actor } from './actors.js'; export interface ReturnedContent { requestId: string; timestamp: string; ip: string; size: number; actions: string[]; /** The actor block that sent the call, or '' when it came from no isolated block. */ actorId: string; /** The action the reply is attributed to (the batch's first data-access action). */ action: string; } export interface ResponseSummary { /** * Most common reply size in the reference set: the guest's auth replies on the wave days plus * its data-access replies on baseline days, excluding blocks also active on the wave days. * Learned from replies that are NOT under test. */ emptySize: number | null; /** True when the reference set was empty and the size was taken from the replies under test. */ emptySizeInferred: boolean; band: number; /** All of the wave guest's data-access calls on the wave days, from any IP. */ dataAccessCalls: number; /** Data-access and auth calls on the wave days whose REQUEST_ID joined to a Sites size. */ joined: number; /** Data-access calls on the wave days whose REQUEST_ID joined to a Sites size. */ dataAccessJoined: number; /** Replies in the reference set the empty size was learned from. */ referenceReplies: number; returnedContent: ReturnedContent[]; blankRequestIdsDropped: number; /** Data-access and auth calls on the wave days whose REQUEST_ID had no Sites size that day. */ unmatchedCalls: number; /** Data-access and auth calls whose REQUEST_ID was shared with other rows, so never joined. */ ambiguousCalls: number; /** Empty-reply size learned per action from the reference set (smallest recurring size). */ emptySizeByAction: Record; /** Data-access actions seen on baseline days from blocks absent on the wave days: ordinary traffic. */ baselineActions: string[]; /** Joined data-access calls whose action had no empty size of its own, judged against emptySize. */ judgedAgainstFallback: number; /** Guest controller calls on the wave days with an ACTION_MESSAGE that parsed to no action. */ unparsedCalls: number; } /** * Joins AuraRequest to Sites on REQUEST_ID to get reply sizes. Sites repeats a request id * across rows, so it is reduced to one size (the maximum) per non-blank id BEFORE the join; * joining the raw rows multiplied one action's count into the millions. Blank ids are dropped: * as a key they would match every other blank (timeline/JoinKeys.ts rule). * * Every data-access call the wave guest made on the wave days is tested, whichever IP sent it: * an actor that rotates addresses never forms a block, and must still be assessed. The empty * size is learned from a separate reference set so a scanner receiving identical non-empty * replies cannot set its own "empty" baseline. */ export declare function analyseResponses(b: Bundle, wave: Wave, actors: Actor[]): Promise; //# sourceMappingURL=responses.d.ts.map