@exfil/canary 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +387 -0
  3. package/SECURITY.md +50 -0
  4. package/dist/entities.d.ts +43 -0
  5. package/dist/entities.d.ts.map +1 -0
  6. package/dist/entities.js +218 -0
  7. package/dist/entities.js.map +1 -0
  8. package/dist/index.d.ts +14 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +183 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/logger.d.ts +29 -0
  13. package/dist/logger.d.ts.map +1 -0
  14. package/dist/logger.js +50 -0
  15. package/dist/logger.js.map +1 -0
  16. package/dist/persistence.d.ts +48 -0
  17. package/dist/persistence.d.ts.map +1 -0
  18. package/dist/persistence.js +296 -0
  19. package/dist/persistence.js.map +1 -0
  20. package/dist/proxy/DownstreamManager.d.ts +55 -0
  21. package/dist/proxy/DownstreamManager.d.ts.map +1 -0
  22. package/dist/proxy/DownstreamManager.js +110 -0
  23. package/dist/proxy/DownstreamManager.js.map +1 -0
  24. package/dist/proxy/ProxyServer.d.ts +60 -0
  25. package/dist/proxy/ProxyServer.d.ts.map +1 -0
  26. package/dist/proxy/ProxyServer.js +480 -0
  27. package/dist/proxy/ProxyServer.js.map +1 -0
  28. package/dist/proxy/auditor/DualAuditor.d.ts +27 -0
  29. package/dist/proxy/auditor/DualAuditor.d.ts.map +1 -0
  30. package/dist/proxy/auditor/DualAuditor.js +44 -0
  31. package/dist/proxy/auditor/DualAuditor.js.map +1 -0
  32. package/dist/proxy/auditor/LLMAuditor.d.ts +16 -0
  33. package/dist/proxy/auditor/LLMAuditor.d.ts.map +1 -0
  34. package/dist/proxy/auditor/LLMAuditor.js +221 -0
  35. package/dist/proxy/auditor/LLMAuditor.js.map +1 -0
  36. package/dist/proxy/auditor/types.d.ts +54 -0
  37. package/dist/proxy/auditor/types.d.ts.map +1 -0
  38. package/dist/proxy/auditor/types.js +11 -0
  39. package/dist/proxy/auditor/types.js.map +1 -0
  40. package/dist/proxy/types.d.ts +71 -0
  41. package/dist/proxy/types.d.ts.map +1 -0
  42. package/dist/proxy/types.js +8 -0
  43. package/dist/proxy/types.js.map +1 -0
  44. package/dist/scanner.d.ts +37 -0
  45. package/dist/scanner.d.ts.map +1 -0
  46. package/dist/scanner.js +57 -0
  47. package/dist/scanner.js.map +1 -0
  48. package/dist/server.d.ts +59 -0
  49. package/dist/server.d.ts.map +1 -0
  50. package/dist/server.js +711 -0
  51. package/dist/server.js.map +1 -0
  52. package/dist/simhash.d.ts +65 -0
  53. package/dist/simhash.d.ts.map +1 -0
  54. package/dist/simhash.js +151 -0
  55. package/dist/simhash.js.map +1 -0
  56. package/dist/state.d.ts +86 -0
  57. package/dist/state.d.ts.map +1 -0
  58. package/dist/state.js +136 -0
  59. package/dist/state.js.map +1 -0
  60. package/dist/token.d.ts +70 -0
  61. package/dist/token.d.ts.map +1 -0
  62. package/dist/token.js +146 -0
  63. package/dist/token.js.map +1 -0
  64. package/dist/types.d.ts +190 -0
  65. package/dist/types.d.ts.map +1 -0
  66. package/dist/types.js +12 -0
  67. package/dist/types.js.map +1 -0
  68. package/package.json +52 -0
  69. package/proxy.example.json +53 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * v1.6 — SimHash fingerprinting for semantic/structural leakage detection.
3
+ *
4
+ * Algorithm:
5
+ * 1. Normalise text → lowercase words.
6
+ * 2. Build word-bigram shingles.
7
+ * 3. Hash each shingle with FNV-1a-32 using two different offset bases to
8
+ * produce a 64-bit shingle hash (no external dependencies; the inner
9
+ * loop stays in 32-bit integers via Math.imul for JIT-friendliness).
10
+ * 4. For each of the 64 bit positions, accumulate a signed vote:
11
+ * +1 if that bit is set in the shingle hash, -1 otherwise.
12
+ * 5. The final fingerprint bit is 1 iff the vote is positive.
13
+ *
14
+ * Detection:
15
+ * Hamming distance ≤ SIMHASH_THRESHOLD (12) is treated as "similar".
16
+ * At threshold 10 this catches documents with ≈75%+ bigram overlap —
17
+ * covering paraphrasing that preserves most key identifiers and phrases
18
+ * while changing surrounding prose. Heavy paraphrasing (< 25% overlap)
19
+ * will not be caught; that requires embedding-based detection (v2.0).
20
+ *
21
+ * Security:
22
+ * The SimHash fingerprint is structural metadata, not sensitive content.
23
+ * BigInt is not JSON-serialisable, so the fingerprint is automatically
24
+ * excluded from persistence (RC-1 — same treatment as `sequence`).
25
+ */
26
+ /**
27
+ * Minimum number of word-bigram shingles required before fingerprinting.
28
+ * Requires at least 7 words in the tokenised text.
29
+ */
30
+ export declare const MIN_SHINGLES = 5;
31
+ /**
32
+ * Maximum Hamming distance (out of 64 bits) treated as "similar".
33
+ * Corresponds to roughly ≥ 80% bigram overlap between the two texts.
34
+ *
35
+ * Practical detection coverage at this threshold:
36
+ * - Verbatim inclusion in a larger document (e.g. prepended routing header) → ✓ detected
37
+ * - Near-duplicate with minor additions or one word changed → ✓ detected
38
+ * - Heavy paraphrasing with word reordering → ✗ not detected
39
+ * - Semantic similarity without shared bigrams → ✗ not detected (v2.0)
40
+ *
41
+ * Unrelated documents have expected Hamming distance ~28–32 bits, giving
42
+ * comfortable separation from the threshold of 12.
43
+ */
44
+ export declare const SIMHASH_THRESHOLD = 12;
45
+ /**
46
+ * Computes the 64-bit SimHash fingerprint of `text`.
47
+ *
48
+ * Returns `null` when the text yields fewer than MIN_SHINGLES word bigrams
49
+ * (requires at least 7 words), because short texts produce fingerprints
50
+ * with unacceptably high false-positive rates.
51
+ *
52
+ * @param text Raw content string (pre-embedding).
53
+ * @returns 64-bit SimHash as a bigint, or null.
54
+ */
55
+ export declare function computeSimHash(text: string): bigint | null;
56
+ /**
57
+ * Counts the number of differing bits between two 64-bit SimHash fingerprints.
58
+ */
59
+ export declare function hammingDistance(a: bigint, b: bigint): number;
60
+ /**
61
+ * Returns true when two fingerprints are similar enough to indicate the
62
+ * underlying texts share significant content (Hamming distance ≤ SIMHASH_THRESHOLD).
63
+ */
64
+ export declare function isSimilar(a: bigint, b: bigint): boolean;
65
+ //# sourceMappingURL=simhash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simhash.d.ts","sourceRoot":"","sources":["../src/simhash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAcH;;;GAGG;AACH,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,KAAK,CAAC;AA2CpC;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgC1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEvD"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * v1.6 — SimHash fingerprinting for semantic/structural leakage detection.
3
+ *
4
+ * Algorithm:
5
+ * 1. Normalise text → lowercase words.
6
+ * 2. Build word-bigram shingles.
7
+ * 3. Hash each shingle with FNV-1a-32 using two different offset bases to
8
+ * produce a 64-bit shingle hash (no external dependencies; the inner
9
+ * loop stays in 32-bit integers via Math.imul for JIT-friendliness).
10
+ * 4. For each of the 64 bit positions, accumulate a signed vote:
11
+ * +1 if that bit is set in the shingle hash, -1 otherwise.
12
+ * 5. The final fingerprint bit is 1 iff the vote is positive.
13
+ *
14
+ * Detection:
15
+ * Hamming distance ≤ SIMHASH_THRESHOLD (12) is treated as "similar".
16
+ * At threshold 10 this catches documents with ≈75%+ bigram overlap —
17
+ * covering paraphrasing that preserves most key identifiers and phrases
18
+ * while changing surrounding prose. Heavy paraphrasing (< 25% overlap)
19
+ * will not be caught; that requires embedding-based detection (v2.0).
20
+ *
21
+ * Security:
22
+ * The SimHash fingerprint is structural metadata, not sensitive content.
23
+ * BigInt is not JSON-serialisable, so the fingerprint is automatically
24
+ * excluded from persistence (RC-1 — same treatment as `sequence`).
25
+ */
26
+ // ---------------------------------------------------------------------------
27
+ // FNV-1a 32-bit constants
28
+ // ---------------------------------------------------------------------------
29
+ const FNV_PRIME_32 = 0x01000193;
30
+ const FNV_OFFSET_A = 0x811c9dc5; // standard FNV-1a offset basis
31
+ const FNV_OFFSET_B = 0x84222325; // alternate basis for the high 32 bits
32
+ // ---------------------------------------------------------------------------
33
+ // Configuration
34
+ // ---------------------------------------------------------------------------
35
+ /**
36
+ * Minimum number of word-bigram shingles required before fingerprinting.
37
+ * Requires at least 7 words in the tokenised text.
38
+ */
39
+ export const MIN_SHINGLES = 5;
40
+ /**
41
+ * Maximum Hamming distance (out of 64 bits) treated as "similar".
42
+ * Corresponds to roughly ≥ 80% bigram overlap between the two texts.
43
+ *
44
+ * Practical detection coverage at this threshold:
45
+ * - Verbatim inclusion in a larger document (e.g. prepended routing header) → ✓ detected
46
+ * - Near-duplicate with minor additions or one word changed → ✓ detected
47
+ * - Heavy paraphrasing with word reordering → ✗ not detected
48
+ * - Semantic similarity without shared bigrams → ✗ not detected (v2.0)
49
+ *
50
+ * Unrelated documents have expected Hamming distance ~28–32 bits, giving
51
+ * comfortable separation from the threshold of 12.
52
+ */
53
+ export const SIMHASH_THRESHOLD = 12;
54
+ // ---------------------------------------------------------------------------
55
+ // Internal helpers
56
+ // ---------------------------------------------------------------------------
57
+ /**
58
+ * FNV-1a 32-bit hash of a string with a configurable offset basis.
59
+ *
60
+ * Stays in 32-bit unsigned integers throughout using `Math.imul` for the
61
+ * multiplication step. Returns a non-negative 32-bit integer.
62
+ */
63
+ function fnv1a32(s, offsetBasis) {
64
+ let hash = offsetBasis;
65
+ for (let i = 0; i < s.length; i++) {
66
+ hash ^= s.charCodeAt(i);
67
+ hash = Math.imul(hash, FNV_PRIME_32);
68
+ }
69
+ return hash >>> 0; // coerce to unsigned 32-bit
70
+ }
71
+ /**
72
+ * Produces a 64-bit shingle hash as a BigInt by running FNV-1a-32 twice
73
+ * with different offset bases and combining the two 32-bit halves.
74
+ */
75
+ function shingleHash64(shingle) {
76
+ const lo = fnv1a32(shingle, FNV_OFFSET_A);
77
+ const hi = fnv1a32(shingle, FNV_OFFSET_B);
78
+ return (BigInt(hi) << 32n) | BigInt(lo);
79
+ }
80
+ /**
81
+ * Normalises text and extracts lowercase word tokens.
82
+ * Non-alphanumeric runs are treated as delimiters.
83
+ */
84
+ function tokenise(text) {
85
+ return text.toLowerCase().match(/[a-z0-9]+/g) ?? [];
86
+ }
87
+ // ---------------------------------------------------------------------------
88
+ // Public API
89
+ // ---------------------------------------------------------------------------
90
+ /**
91
+ * Computes the 64-bit SimHash fingerprint of `text`.
92
+ *
93
+ * Returns `null` when the text yields fewer than MIN_SHINGLES word bigrams
94
+ * (requires at least 7 words), because short texts produce fingerprints
95
+ * with unacceptably high false-positive rates.
96
+ *
97
+ * @param text Raw content string (pre-embedding).
98
+ * @returns 64-bit SimHash as a bigint, or null.
99
+ */
100
+ export function computeSimHash(text) {
101
+ const words = tokenise(text);
102
+ if (words.length < MIN_SHINGLES + 2)
103
+ return null; // need ≥ 7 words for 6 bigrams
104
+ // votes[i] is the running signed sum for bit position i (0 = LSB).
105
+ // Int32Array avoids boxing 64 JS number objects.
106
+ const votes = new Int32Array(64);
107
+ let shingleCount = 0;
108
+ for (let i = 0; i < words.length - 1; i++) {
109
+ const shingle = `${words[i]} ${words[i + 1]}`;
110
+ const h = shingleHash64(shingle);
111
+ for (let bit = 0; bit < 64; bit++) {
112
+ if ((h >> BigInt(bit)) & 1n) {
113
+ votes[bit] += 1;
114
+ }
115
+ else {
116
+ votes[bit] -= 1;
117
+ }
118
+ }
119
+ shingleCount += 1;
120
+ }
121
+ if (shingleCount < MIN_SHINGLES)
122
+ return null;
123
+ // Build the fingerprint: bit i = 1 iff votes[i] > 0.
124
+ let fingerprint = 0n;
125
+ for (let bit = 0; bit < 64; bit++) {
126
+ if (votes[bit] > 0) {
127
+ fingerprint |= 1n << BigInt(bit);
128
+ }
129
+ }
130
+ return fingerprint;
131
+ }
132
+ /**
133
+ * Counts the number of differing bits between two 64-bit SimHash fingerprints.
134
+ */
135
+ export function hammingDistance(a, b) {
136
+ let x = a ^ b;
137
+ let dist = 0;
138
+ while (x !== 0n) {
139
+ x &= x - 1n; // clear lowest set bit (Brian Kernighan's method)
140
+ dist += 1;
141
+ }
142
+ return dist;
143
+ }
144
+ /**
145
+ * Returns true when two fingerprints are similar enough to indicate the
146
+ * underlying texts share significant content (Hamming distance ≤ SIMHASH_THRESHOLD).
147
+ */
148
+ export function isSimilar(a, b) {
149
+ return hammingDistance(a, b) <= SIMHASH_THRESHOLD;
150
+ }
151
+ //# sourceMappingURL=simhash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simhash.js","sourceRoot":"","sources":["../src/simhash.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * In-memory session state management.
3
+ *
4
+ * All functions operate on a plain `SessionState` value — there is no
5
+ * singleton. The server holds one instance and passes it around explicitly.
6
+ */
7
+ import type { CanaryToken, EntityCanary, LeakageEvent, SessionState, SourceType, EmbedPosition, DetectionMethod, ActionTaken } from './types.js';
8
+ /**
9
+ * Creates a brand-new session with empty state.
10
+ *
11
+ * @returns A freshly initialised `SessionState`.
12
+ */
13
+ export declare function createSession(): SessionState;
14
+ /** Arguments for registering a new token. */
15
+ export interface RegisterTokenArgs {
16
+ token_id: string;
17
+ sequence: string;
18
+ source_type: SourceType;
19
+ source_server?: string;
20
+ source_tool?: string;
21
+ source_call_id?: string;
22
+ embed_position: EmbedPosition;
23
+ ttl_ms: number;
24
+ /** v1.1: Named entities extracted from the wrapped content. */
25
+ entity_canaries?: EntityCanary[];
26
+ /** v1.6: SimHash fingerprint of the wrapped content. */
27
+ simhash?: bigint | null;
28
+ }
29
+ /**
30
+ * Registers a newly generated token in session state.
31
+ *
32
+ * @param state Session to mutate.
33
+ * @param args Token data (including the sequence — stored in-memory only).
34
+ * @returns The stored `CanaryToken`.
35
+ */
36
+ export declare function registerToken(state: SessionState, args: RegisterTokenArgs): CanaryToken;
37
+ /**
38
+ * Looks up a token by its ID regardless of expiry status.
39
+ *
40
+ * @param state Session to search.
41
+ * @param token_id ID to look up.
42
+ * @returns The token, or `undefined` if not found.
43
+ */
44
+ export declare function lookupToken(state: SessionState, token_id: string): CanaryToken | undefined;
45
+ /**
46
+ * Returns all non-expired tokens in the session.
47
+ *
48
+ * @param state Session to filter.
49
+ * @returns Array of active (non-expired) tokens.
50
+ */
51
+ export declare function getActiveTokens(state: SessionState): CanaryToken[];
52
+ /**
53
+ * Returns true if `token` has passed its expiry time.
54
+ *
55
+ * @param token Token to check.
56
+ */
57
+ export declare function isTokenExpired(token: CanaryToken): boolean;
58
+ /**
59
+ * Removes all expired tokens from session state in-place.
60
+ * Called by the background expiry sweep.
61
+ *
62
+ * @param state Session to prune.
63
+ * @returns Number of tokens removed.
64
+ */
65
+ export declare function pruneExpiredTokens(state: SessionState): number;
66
+ /** Arguments for recording a leakage event. */
67
+ export interface RecordLeakageArgs {
68
+ token_id: string;
69
+ detection_method: DetectionMethod;
70
+ target_server?: string;
71
+ target_tool?: string;
72
+ target_call_id?: string;
73
+ turn_number?: number;
74
+ action_taken: ActionTaken;
75
+ webhook_attempted: boolean;
76
+ webhook_delivered: boolean | null;
77
+ }
78
+ /**
79
+ * Records a leakage event and marks the associated token as leaked.
80
+ *
81
+ * @param state Session to mutate.
82
+ * @param args Event details.
83
+ * @returns The stored `LeakageEvent`.
84
+ */
85
+ export declare function recordLeakage(state: SessionState, args: RecordLeakageArgs): LeakageEvent;
86
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,aAAa,EACb,eAAe,EACf,WAAW,EACZ,MAAM,YAAY,CAAC;AAMpB;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,YAAY,CAQ5C;AAMD,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,UAAU,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,aAAa,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IACjC,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,iBAAiB,GACtB,WAAW,CAoBb;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,GACf,WAAW,GAAG,SAAS,CAEzB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,EAAE,CASlE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE1D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAU9D;AAMD,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,WAAW,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,iBAAiB,GACtB,YAAY,CAyBd"}
package/dist/state.js ADDED
@@ -0,0 +1,136 @@
1
+ /**
2
+ * In-memory session state management.
3
+ *
4
+ * All functions operate on a plain `SessionState` value — there is no
5
+ * singleton. The server holds one instance and passes it around explicitly.
6
+ */
7
+ import { randomBytes } from 'crypto';
8
+ // ---------------------------------------------------------------------------
9
+ // Session lifecycle
10
+ // ---------------------------------------------------------------------------
11
+ /**
12
+ * Creates a brand-new session with empty state.
13
+ *
14
+ * @returns A freshly initialised `SessionState`.
15
+ */
16
+ export function createSession() {
17
+ return {
18
+ session_id: randomBytes(16).toString('hex'),
19
+ created_at: Date.now(),
20
+ tokens: new Map(),
21
+ leakage_events: new Map(),
22
+ token_counter: 0,
23
+ };
24
+ }
25
+ /**
26
+ * Registers a newly generated token in session state.
27
+ *
28
+ * @param state Session to mutate.
29
+ * @param args Token data (including the sequence — stored in-memory only).
30
+ * @returns The stored `CanaryToken`.
31
+ */
32
+ export function registerToken(state, args) {
33
+ const now = Date.now();
34
+ const token = {
35
+ token_id: args.token_id,
36
+ sequence: args.sequence,
37
+ source_type: args.source_type,
38
+ source_server: args.source_server,
39
+ source_tool: args.source_tool,
40
+ source_call_id: args.source_call_id,
41
+ embed_position: args.embed_position,
42
+ created_at: now,
43
+ expires_at: now + args.ttl_ms,
44
+ leaked: false,
45
+ leakage_event_ids: [],
46
+ entity_canaries: args.entity_canaries ?? [],
47
+ simhash: args.simhash ?? null,
48
+ };
49
+ state.tokens.set(token.token_id, token);
50
+ state.token_counter += 1;
51
+ return token;
52
+ }
53
+ /**
54
+ * Looks up a token by its ID regardless of expiry status.
55
+ *
56
+ * @param state Session to search.
57
+ * @param token_id ID to look up.
58
+ * @returns The token, or `undefined` if not found.
59
+ */
60
+ export function lookupToken(state, token_id) {
61
+ return state.tokens.get(token_id);
62
+ }
63
+ /**
64
+ * Returns all non-expired tokens in the session.
65
+ *
66
+ * @param state Session to filter.
67
+ * @returns Array of active (non-expired) tokens.
68
+ */
69
+ export function getActiveTokens(state) {
70
+ const now = Date.now();
71
+ const active = [];
72
+ for (const token of state.tokens.values()) {
73
+ if (token.expires_at > now) {
74
+ active.push(token);
75
+ }
76
+ }
77
+ return active;
78
+ }
79
+ /**
80
+ * Returns true if `token` has passed its expiry time.
81
+ *
82
+ * @param token Token to check.
83
+ */
84
+ export function isTokenExpired(token) {
85
+ return Date.now() >= token.expires_at;
86
+ }
87
+ /**
88
+ * Removes all expired tokens from session state in-place.
89
+ * Called by the background expiry sweep.
90
+ *
91
+ * @param state Session to prune.
92
+ * @returns Number of tokens removed.
93
+ */
94
+ export function pruneExpiredTokens(state) {
95
+ const now = Date.now();
96
+ let removed = 0;
97
+ for (const [id, token] of state.tokens) {
98
+ if (token.expires_at <= now) {
99
+ state.tokens.delete(id);
100
+ removed += 1;
101
+ }
102
+ }
103
+ return removed;
104
+ }
105
+ /**
106
+ * Records a leakage event and marks the associated token as leaked.
107
+ *
108
+ * @param state Session to mutate.
109
+ * @param args Event details.
110
+ * @returns The stored `LeakageEvent`.
111
+ */
112
+ export function recordLeakage(state, args) {
113
+ const event_id = randomBytes(16).toString('hex');
114
+ const event = {
115
+ event_id,
116
+ token_id: args.token_id,
117
+ detected_at: Date.now(),
118
+ detection_method: args.detection_method,
119
+ target_server: args.target_server,
120
+ target_tool: args.target_tool,
121
+ target_call_id: args.target_call_id,
122
+ turn_number: args.turn_number,
123
+ action_taken: args.action_taken,
124
+ webhook_attempted: args.webhook_attempted,
125
+ webhook_delivered: args.webhook_delivered,
126
+ };
127
+ state.leakage_events.set(event_id, event);
128
+ // Mark the token as leaked and link the event.
129
+ const token = state.tokens.get(args.token_id);
130
+ if (token) {
131
+ token.leaked = true;
132
+ token.leakage_event_ids.push(event_id);
133
+ }
134
+ return event;
135
+ }
136
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Token generation, embedding, and detection utilities.
3
+ *
4
+ * Tokens are composed of invisible Unicode characters:
5
+ * U+2060 WORD JOINER (anchor) +
6
+ * 40 × Variation Selector characters (U+FE00–U+FE0F, 4 bits each) +
7
+ * U+2060 WORD JOINER (anchor)
8
+ *
9
+ * This gives 160 bits of entropy per token (40 nibbles × 4 bits).
10
+ * The token sequence is NEVER returned in tool outputs.
11
+ */
12
+ import type { EmbedPosition } from './types.js';
13
+ /**
14
+ * Generates a fresh invisible Unicode canary sequence.
15
+ *
16
+ * Uses 20 crypto-random bytes: each byte is split into two 4-bit nibbles,
17
+ * each nibble maps to one Variation Selector character (U+FE00–U+FE0F).
18
+ *
19
+ * @returns 42-character string (anchor + 40 VS chars + anchor). NEVER expose.
20
+ */
21
+ export declare function generateTokenSequence(): string;
22
+ /**
23
+ * Generates an opaque token identifier (32 lowercase hex chars).
24
+ *
25
+ * @returns 32-char lowercase hex string.
26
+ */
27
+ export declare function generateTokenId(): string;
28
+ /**
29
+ * Embeds a canary sequence into `content` at the specified position.
30
+ *
31
+ * - 'prefix': sequence prepended before all content.
32
+ * - 'suffix': sequence appended after all content.
33
+ * - 'both': sequence prepended AND appended.
34
+ * - 'random_word_boundary': sequence inserted at a random word boundary
35
+ * (space or start/end); falls back to prefix when
36
+ * no whitespace is found.
37
+ *
38
+ * @param content The original content string.
39
+ * @param sequence The generated canary sequence (invisible Unicode).
40
+ * @param position Where to embed.
41
+ * @returns Content with the canary sequence embedded.
42
+ */
43
+ export declare function embedToken(content: string, sequence: string, position: EmbedPosition): string;
44
+ /**
45
+ * Builds a RegExp that matches `sequence` literally anywhere in a string.
46
+ * Each code point is escaped individually to be regex-safe.
47
+ *
48
+ * @param sequence The canary sequence to search for.
49
+ * @returns A global RegExp for the sequence.
50
+ */
51
+ export declare function buildTokenRegex(sequence: string): RegExp;
52
+ /**
53
+ * Fast check: returns true if `content` contains `sequence`.
54
+ *
55
+ * Uses String.prototype.includes for O(n) performance before falling back
56
+ * to a regex scan — includes() is sufficient here since we own the sequence
57
+ * format and it contains no ambiguous surrogate pairs.
58
+ *
59
+ * @param content The string to search within.
60
+ * @param sequence The canary sequence to find.
61
+ */
62
+ export declare function containsSequence(content: string, sequence: string): boolean;
63
+ /**
64
+ * Counts the number of non-overlapping occurrences of `sequence` in `content`.
65
+ *
66
+ * @param content The string to search within.
67
+ * @param sequence The canary sequence to count.
68
+ */
69
+ export declare function countOccurrences(content: string, sequence: string): number;
70
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQhD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAW9C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,aAAa,GACtB,MAAM,CAiCR;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI1E"}