export type DirectDmPreCryptoGuardPolicy = {
allowedKinds: readonly number[];
maxFutureSkewSec: number;
maxCiphertextBytes: number;
maxPlaintextBytes: number;
rateLimit: {
windowMs: number;
maxPerSenderPerWindow: number;
maxGlobalPerWindow: number;
maxTrackedSenderKeys: number;
};
};
export type DirectDmPreCryptoGuardPolicyOverrides = Partial<
Omit<DirectDmPreCryptoGuardPolicy, "rateLimit" >
> & {
rateLimit?: Partial<DirectDmPreCryptoGuardPolicy["rateLimit" ]>;
};
/** Shared policy object for DM-style pre-crypto guardrails. */
export function createDirectDmPreCryptoGuardPolicy(
overrides: DirectDmPreCryptoGuardPolicyOverrides = {},
): DirectDmPreCryptoGuardPolicy {
return {
allowedKinds: overrides.allowedKinds ?? [4 ],
maxFutureSkewSec: overrides.maxFutureSkewSec ?? 120 ,
maxCiphertextBytes: overrides.maxCiphertextBytes ?? 16 * 1024 ,
maxPlaintextBytes: overrides.maxPlaintextBytes ?? 8 * 1024 ,
rateLimit: {
windowMs: overrides.rateLimit?.windowMs ?? 60 _000 ,
maxPerSenderPerWindow: overrides.rateLimit?.maxPerSenderPerWindow ?? 20 ,
maxGlobalPerWindow: overrides.rateLimit?.maxGlobalPerWindow ?? 200 ,
maxTrackedSenderKeys: overrides.rateLimit?.maxTrackedSenderKeys ?? 4096 ,
},
};
}
Messung V0.5 in Prozent C=98 H=100 G=98
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-09)
¤
*© Formatika GbR, Deutschland