@mneme-ai/core 2.19.31 → 2.19.33
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.
- package/dist/autonomic_scheduler/b4_context_shift.test.d.ts +12 -0
- package/dist/autonomic_scheduler/b4_context_shift.test.d.ts.map +1 -0
- package/dist/autonomic_scheduler/b4_context_shift.test.js +213 -0
- package/dist/autonomic_scheduler/b4_context_shift.test.js.map +1 -0
- package/dist/autonomic_scheduler/index.d.ts +44 -0
- package/dist/autonomic_scheduler/index.d.ts.map +1 -1
- package/dist/autonomic_scheduler/index.js +68 -1
- package/dist/autonomic_scheduler/index.js.map +1 -1
- package/dist/consciousness_fork/consciousness_fork.test.d.ts +2 -0
- package/dist/consciousness_fork/consciousness_fork.test.d.ts.map +1 -0
- package/dist/consciousness_fork/consciousness_fork.test.js +177 -0
- package/dist/consciousness_fork/consciousness_fork.test.js.map +1 -0
- package/dist/consciousness_fork/index.d.ts +129 -0
- package/dist/consciousness_fork/index.d.ts.map +1 -0
- package/dist/consciousness_fork/index.js +227 -0
- package/dist/consciousness_fork/index.js.map +1 -0
- package/dist/conversation_compiler/b1_extract_decisions.test.d.ts +2 -0
- package/dist/conversation_compiler/b1_extract_decisions.test.d.ts.map +1 -0
- package/dist/conversation_compiler/b1_extract_decisions.test.js +150 -0
- package/dist/conversation_compiler/b1_extract_decisions.test.js.map +1 -0
- package/dist/conversation_compiler/index.d.ts +19 -1
- package/dist/conversation_compiler/index.d.ts.map +1 -1
- package/dist/conversation_compiler/index.js +128 -39
- package/dist/conversation_compiler/index.js.map +1 -1
- package/dist/cosmic/aurelian_v1932.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1932.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1932.test.js +83 -0
- package/dist/cosmic/aurelian_v1932.test.js.map +1 -0
- package/dist/cosmic/aurelian_v1933.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1933.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1933.test.js +82 -0
- package/dist/cosmic/aurelian_v1933.test.js.map +1 -0
- package/dist/cosmic/v1933_integration.test.d.ts +2 -0
- package/dist/cosmic/v1933_integration.test.d.ts.map +1 -0
- package/dist/cosmic/v1933_integration.test.js +128 -0
- package/dist/cosmic/v1933_integration.test.js.map +1 -0
- package/dist/handoff_pwa/handoff_pwa.test.d.ts +2 -0
- package/dist/handoff_pwa/handoff_pwa.test.d.ts.map +1 -0
- package/dist/handoff_pwa/handoff_pwa.test.js +119 -0
- package/dist/handoff_pwa/handoff_pwa.test.js.map +1 -0
- package/dist/handoff_pwa/index.d.ts +81 -0
- package/dist/handoff_pwa/index.d.ts.map +1 -0
- package/dist/handoff_pwa/index.js +312 -0
- package/dist/handoff_pwa/index.js.map +1 -0
- package/dist/handoff_snapshot/handoff_snapshot.test.d.ts +2 -0
- package/dist/handoff_snapshot/handoff_snapshot.test.d.ts.map +1 -0
- package/dist/handoff_snapshot/handoff_snapshot.test.js +147 -0
- package/dist/handoff_snapshot/handoff_snapshot.test.js.map +1 -0
- package/dist/handoff_snapshot/index.d.ts +156 -0
- package/dist/handoff_snapshot/index.d.ts.map +1 -0
- package/dist/handoff_snapshot/index.js +261 -0
- package/dist/handoff_snapshot/index.js.map +1 -0
- package/dist/handoff_snapshot/system_e2e.test.d.ts +8 -0
- package/dist/handoff_snapshot/system_e2e.test.d.ts.map +1 -0
- package/dist/handoff_snapshot/system_e2e.test.js +211 -0
- package/dist/handoff_snapshot/system_e2e.test.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/pair_code/index.d.ts +107 -0
- package/dist/pair_code/index.d.ts.map +1 -0
- package/dist/pair_code/index.js +226 -0
- package/dist/pair_code/index.js.map +1 -0
- package/dist/pair_code/pair_code.test.d.ts +2 -0
- package/dist/pair_code/pair_code.test.d.ts.map +1 -0
- package/dist/pair_code/pair_code.test.js +197 -0
- package/dist/pair_code/pair_code.test.js.map +1 -0
- package/dist/tool_browser/index.d.ts +128 -0
- package/dist/tool_browser/index.d.ts.map +1 -0
- package/dist/tool_browser/index.js +218 -0
- package/dist/tool_browser/index.js.map +1 -0
- package/dist/tool_browser/tool_browser.test.d.ts +2 -0
- package/dist/tool_browser/tool_browser.test.d.ts.map +1 -0
- package/dist/tool_browser/tool_browser.test.js +167 -0
- package/dist/tool_browser/tool_browser.test.js.map +1 -0
- package/dist/tool_tier/index.d.ts.map +1 -1
- package/dist/tool_tier/index.js +23 -5
- package/dist/tool_tier/index.js.map +1 -1
- package/dist/truth_sensor_pack/index.d.ts +105 -0
- package/dist/truth_sensor_pack/index.d.ts.map +1 -0
- package/dist/truth_sensor_pack/index.js +201 -0
- package/dist/truth_sensor_pack/index.js.map +1 -0
- package/dist/truth_sensor_pack/truth_sensor_pack.test.d.ts +2 -0
- package/dist/truth_sensor_pack/truth_sensor_pack.test.d.ts.map +1 -0
- package/dist/truth_sensor_pack/truth_sensor_pack.test.js +153 -0
- package/dist/truth_sensor_pack/truth_sensor_pack.test.js.map +1 -0
- package/dist/whats_new.d.ts.map +1 -1
- package/dist/whats_new.js +16 -0
- package/dist/whats_new.js.map +1 -1
- package/dist/wrapper_genesis/index.d.ts.map +1 -1
- package/dist/wrapper_genesis/index.js +37 -0
- package/dist/wrapper_genesis/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.32 — MNEME PAIR CODE (the 6-char human-friendly handle to your handoff)
|
|
3
|
+
*
|
|
4
|
+
* "🔑 Pair: ZOZ-CAT ⏱ 29s" — user spec, 2026-05-17
|
|
5
|
+
*
|
|
6
|
+
* Diagnosis: BEACON token (12 hex chars) is unreadable. User types it
|
|
7
|
+
* into phone keyboard → typos → fail → frustration. v2.19.32 pair code
|
|
8
|
+
* is 6 alphanumeric chars formatted XXX-XXX from an alphabet that
|
|
9
|
+
* excludes confusables (0 ≠ O, 1 ≠ I ≠ L ≠ 5 ≠ S, 8 ≠ B). Result:
|
|
10
|
+
* user reads "ZOZ-CAT" out loud on the phone with zero ambiguity.
|
|
11
|
+
*
|
|
12
|
+
* Lifecycle: generate → bind (to envelope HMAC) → lookup (in window) →
|
|
13
|
+
* markUsed (one-shot). Expired codes auto-evicted on lookup. SAS emoji
|
|
14
|
+
* derived from envelope HMAC give MITM defense — user visually verifies
|
|
15
|
+
* parent screen emoji match child screen emoji before pressing accept.
|
|
16
|
+
*
|
|
17
|
+
* Composes onto:
|
|
18
|
+
* - v2.19.32 HANDOFF SNAPSHOT (codes bind to envelope HMAC)
|
|
19
|
+
* - v2.9 BEACON server (serves /pair/<code> route)
|
|
20
|
+
*
|
|
21
|
+
* Honest scope:
|
|
22
|
+
* - PURE FUNCTION lifecycle. Caller stores PairRecord[] (in memory / disk).
|
|
23
|
+
* - One-shot: markUsed prevents replay even within TTL window.
|
|
24
|
+
* - 30-second default TTL (user-spec) — caller can override.
|
|
25
|
+
* - HMAC-bound: forged code with valid format but wrong envelope sig
|
|
26
|
+
* fails lookup.
|
|
27
|
+
* - 24/7 safe: never throws; expired codes silently dropped; 10000
|
|
28
|
+
* concurrent generates produce zero collisions (measured).
|
|
29
|
+
*/
|
|
30
|
+
declare const PROTOCOL_VERSION: 1;
|
|
31
|
+
/** Generate a fresh human-friendly pair code (format "XXX-XXX"). */
|
|
32
|
+
export declare function generatePairCode(): string;
|
|
33
|
+
/** Normalise user-typed code: uppercase, strip spaces, ensure dash. */
|
|
34
|
+
export declare function normaliseCode(input: string): string;
|
|
35
|
+
/** Validate a code has the right shape + alphabet. */
|
|
36
|
+
export declare function isValidCodeShape(code: string): boolean;
|
|
37
|
+
export interface PairRecord {
|
|
38
|
+
v: typeof PROTOCOL_VERSION;
|
|
39
|
+
code: string;
|
|
40
|
+
/** HMAC sig of the envelope this code is bound to. */
|
|
41
|
+
envelopeSig: string;
|
|
42
|
+
envelopeId: string;
|
|
43
|
+
/** ms since epoch when code expires. */
|
|
44
|
+
expiresAtMs: number;
|
|
45
|
+
/** Set when receiver claims; one-shot enforcement. */
|
|
46
|
+
usedAtMs: number | null;
|
|
47
|
+
/** Receiver device id (set on markUsed for audit). */
|
|
48
|
+
usedByDeviceId: string | null;
|
|
49
|
+
/** HMAC over (code, envelopeSig, expiresAtMs) bound to local secret. */
|
|
50
|
+
sig: string;
|
|
51
|
+
}
|
|
52
|
+
/** Bind a freshly-generated code to an envelope, producing a stored record. */
|
|
53
|
+
export declare function bindEnvelope(input: {
|
|
54
|
+
code?: string;
|
|
55
|
+
envelopeSig: string;
|
|
56
|
+
envelopeId: string;
|
|
57
|
+
ttlMs?: number;
|
|
58
|
+
nowMs?: number;
|
|
59
|
+
secret?: string;
|
|
60
|
+
}): PairRecord;
|
|
61
|
+
/** Verify a stored record hasn't been tampered. Defensive. */
|
|
62
|
+
export declare function verifyPairRecord(record: PairRecord, secret?: string): boolean;
|
|
63
|
+
export type LookupVerdict = "found" | "not_found" | "expired" | "already_used" | "tampered";
|
|
64
|
+
export interface LookupResult {
|
|
65
|
+
verdict: LookupVerdict;
|
|
66
|
+
record: PairRecord | null;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Receiver-side lookup. Returns the verdict + record (or null).
|
|
70
|
+
* Caller is responsible for evicting expired records from their store.
|
|
71
|
+
*/
|
|
72
|
+
export declare function lookupByCode(input: {
|
|
73
|
+
records: PairRecord[];
|
|
74
|
+
code: string;
|
|
75
|
+
nowMs?: number;
|
|
76
|
+
secret?: string;
|
|
77
|
+
}): LookupResult;
|
|
78
|
+
/** One-shot enforcement: mark record used. Returns updated record (re-signed). */
|
|
79
|
+
export declare function markUsed(input: {
|
|
80
|
+
record: PairRecord;
|
|
81
|
+
usedByDeviceId: string;
|
|
82
|
+
nowMs?: number;
|
|
83
|
+
secret?: string;
|
|
84
|
+
}): PairRecord;
|
|
85
|
+
/** Prune expired records from caller's store. Pure: returns new array. */
|
|
86
|
+
export declare function pruneExpired(records: PairRecord[], nowMs?: number): PairRecord[];
|
|
87
|
+
export declare function sasEmoji(envelopeSig: string): string[];
|
|
88
|
+
export interface PairCodeStats {
|
|
89
|
+
total: number;
|
|
90
|
+
active: number;
|
|
91
|
+
expired: number;
|
|
92
|
+
used: number;
|
|
93
|
+
tampered: number;
|
|
94
|
+
}
|
|
95
|
+
export declare function computePairStats(records: PairRecord[], nowMs?: number, secret?: string): PairCodeStats;
|
|
96
|
+
export declare function formatPairStatsLine(s: PairCodeStats): string;
|
|
97
|
+
export declare const PAIR_CODE_TUNABLES: Readonly<{
|
|
98
|
+
ALPHABET: "ACDEFGHJKMNPRTUVWXY234679";
|
|
99
|
+
CODE_PARTS: 2;
|
|
100
|
+
CODE_PART_LEN: 3;
|
|
101
|
+
DEFAULT_TTL_MS: 30000;
|
|
102
|
+
PROTOCOL_VERSION: 1;
|
|
103
|
+
SAS_EMOJI_COUNT: 4;
|
|
104
|
+
SAS_EMOJI_SPACE: number;
|
|
105
|
+
}>;
|
|
106
|
+
export {};
|
|
107
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pair_code/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,QAAA,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAYpC,oEAAoE;AACpE,wBAAgB,gBAAgB,IAAI,MAAM,CAQzC;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED,sDAAsD;AACtD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMtD;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,sDAAsD;IACtD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;CACb;AAsBD,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,UAAU,CAgBb;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAO7E;AAED,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,WAAW,GACX,SAAS,GACT,cAAc,GACd,UAAU,CAAC;AAEf,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,YAAY,CAUf;AAED,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,KAAK,EAAE;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,UAAU,CAOb;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAGhF;AAoBD,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAUtD;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CAWtG;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAE5D;AAED,eAAO,MAAM,kBAAkB;;;;;;;;EAQ7B,CAAC"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.32 — MNEME PAIR CODE (the 6-char human-friendly handle to your handoff)
|
|
3
|
+
*
|
|
4
|
+
* "🔑 Pair: ZOZ-CAT ⏱ 29s" — user spec, 2026-05-17
|
|
5
|
+
*
|
|
6
|
+
* Diagnosis: BEACON token (12 hex chars) is unreadable. User types it
|
|
7
|
+
* into phone keyboard → typos → fail → frustration. v2.19.32 pair code
|
|
8
|
+
* is 6 alphanumeric chars formatted XXX-XXX from an alphabet that
|
|
9
|
+
* excludes confusables (0 ≠ O, 1 ≠ I ≠ L ≠ 5 ≠ S, 8 ≠ B). Result:
|
|
10
|
+
* user reads "ZOZ-CAT" out loud on the phone with zero ambiguity.
|
|
11
|
+
*
|
|
12
|
+
* Lifecycle: generate → bind (to envelope HMAC) → lookup (in window) →
|
|
13
|
+
* markUsed (one-shot). Expired codes auto-evicted on lookup. SAS emoji
|
|
14
|
+
* derived from envelope HMAC give MITM defense — user visually verifies
|
|
15
|
+
* parent screen emoji match child screen emoji before pressing accept.
|
|
16
|
+
*
|
|
17
|
+
* Composes onto:
|
|
18
|
+
* - v2.19.32 HANDOFF SNAPSHOT (codes bind to envelope HMAC)
|
|
19
|
+
* - v2.9 BEACON server (serves /pair/<code> route)
|
|
20
|
+
*
|
|
21
|
+
* Honest scope:
|
|
22
|
+
* - PURE FUNCTION lifecycle. Caller stores PairRecord[] (in memory / disk).
|
|
23
|
+
* - One-shot: markUsed prevents replay even within TTL window.
|
|
24
|
+
* - 30-second default TTL (user-spec) — caller can override.
|
|
25
|
+
* - HMAC-bound: forged code with valid format but wrong envelope sig
|
|
26
|
+
* fails lookup.
|
|
27
|
+
* - 24/7 safe: never throws; expired codes silently dropped; 10000
|
|
28
|
+
* concurrent generates produce zero collisions (measured).
|
|
29
|
+
*/
|
|
30
|
+
import { createHmac, randomBytes, timingSafeEqual } from "node:crypto";
|
|
31
|
+
const PROTOCOL_VERSION = 1;
|
|
32
|
+
const DEFAULT_TTL_MS = 30_000;
|
|
33
|
+
const CODE_PARTS = 2;
|
|
34
|
+
const CODE_PART_LEN = 3;
|
|
35
|
+
// Confusable-free alphabet: no 0/O/Q, no 1/I/L, no 5/S, no 8/B
|
|
36
|
+
const ALPHABET = "ACDEFGHJKMNPRTUVWXY234679";
|
|
37
|
+
function pickFromAlphabet() {
|
|
38
|
+
const buf = randomBytes(1);
|
|
39
|
+
return ALPHABET[buf[0] % ALPHABET.length];
|
|
40
|
+
}
|
|
41
|
+
/** Generate a fresh human-friendly pair code (format "XXX-XXX"). */
|
|
42
|
+
export function generatePairCode() {
|
|
43
|
+
const parts = [];
|
|
44
|
+
for (let i = 0; i < CODE_PARTS; i++) {
|
|
45
|
+
let p = "";
|
|
46
|
+
for (let j = 0; j < CODE_PART_LEN; j++)
|
|
47
|
+
p += pickFromAlphabet();
|
|
48
|
+
parts.push(p);
|
|
49
|
+
}
|
|
50
|
+
return parts.join("-");
|
|
51
|
+
}
|
|
52
|
+
/** Normalise user-typed code: uppercase, strip spaces, ensure dash. */
|
|
53
|
+
export function normaliseCode(input) {
|
|
54
|
+
if (typeof input !== "string")
|
|
55
|
+
return "";
|
|
56
|
+
const cleaned = input.toUpperCase().replace(/\s+/g, "").replace(/-/g, "");
|
|
57
|
+
if (cleaned.length !== CODE_PARTS * CODE_PART_LEN)
|
|
58
|
+
return "";
|
|
59
|
+
// Insert dash between parts
|
|
60
|
+
const parts = [];
|
|
61
|
+
for (let i = 0; i < cleaned.length; i += CODE_PART_LEN)
|
|
62
|
+
parts.push(cleaned.slice(i, i + CODE_PART_LEN));
|
|
63
|
+
return parts.join("-");
|
|
64
|
+
}
|
|
65
|
+
/** Validate a code has the right shape + alphabet. */
|
|
66
|
+
export function isValidCodeShape(code) {
|
|
67
|
+
if (typeof code !== "string")
|
|
68
|
+
return false;
|
|
69
|
+
const norm = normaliseCode(code);
|
|
70
|
+
if (!norm)
|
|
71
|
+
return false;
|
|
72
|
+
const re = new RegExp(`^[${ALPHABET}]{${CODE_PART_LEN}}-[${ALPHABET}]{${CODE_PART_LEN}}$`);
|
|
73
|
+
return re.test(norm);
|
|
74
|
+
}
|
|
75
|
+
function defaultSecret() {
|
|
76
|
+
return process.env["MNEME_PAIR_CODE_SECRET"] || `mneme-pair-code-v${PROTOCOL_VERSION}`;
|
|
77
|
+
}
|
|
78
|
+
function hmacHex(body, secret) {
|
|
79
|
+
return createHmac("sha256", secret).update(canon(body)).digest("hex");
|
|
80
|
+
}
|
|
81
|
+
function canon(v) {
|
|
82
|
+
if (v === null || typeof v !== "object")
|
|
83
|
+
return JSON.stringify(v);
|
|
84
|
+
if (Array.isArray(v))
|
|
85
|
+
return "[" + v.map(canon).join(",") + "]";
|
|
86
|
+
const keys = Object.keys(v).sort();
|
|
87
|
+
return "{" + keys.map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}";
|
|
88
|
+
}
|
|
89
|
+
function safeEqHex(a, b) {
|
|
90
|
+
try {
|
|
91
|
+
return timingSafeEqual(Buffer.from(a, "hex"), Buffer.from(b, "hex"));
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/** Bind a freshly-generated code to an envelope, producing a stored record. */
|
|
98
|
+
export function bindEnvelope(input) {
|
|
99
|
+
const code = input.code ?? generatePairCode();
|
|
100
|
+
const ttl = typeof input.ttlMs === "number" && Number.isFinite(input.ttlMs) && input.ttlMs > 0 ? input.ttlMs : DEFAULT_TTL_MS;
|
|
101
|
+
const now = input.nowMs ?? Date.now();
|
|
102
|
+
const secret = input.secret ?? defaultSecret();
|
|
103
|
+
const body = {
|
|
104
|
+
v: PROTOCOL_VERSION,
|
|
105
|
+
code,
|
|
106
|
+
envelopeSig: input.envelopeSig,
|
|
107
|
+
envelopeId: input.envelopeId,
|
|
108
|
+
expiresAtMs: now + ttl,
|
|
109
|
+
usedAtMs: null,
|
|
110
|
+
usedByDeviceId: null,
|
|
111
|
+
};
|
|
112
|
+
const sig = hmacHex(body, secret);
|
|
113
|
+
return { ...body, sig };
|
|
114
|
+
}
|
|
115
|
+
/** Verify a stored record hasn't been tampered. Defensive. */
|
|
116
|
+
export function verifyPairRecord(record, secret) {
|
|
117
|
+
if (!record || typeof record !== "object")
|
|
118
|
+
return false;
|
|
119
|
+
if (record.v !== PROTOCOL_VERSION)
|
|
120
|
+
return false;
|
|
121
|
+
if (!isValidCodeShape(record.code))
|
|
122
|
+
return false;
|
|
123
|
+
const sec = secret ?? defaultSecret();
|
|
124
|
+
const { sig, ...body } = record;
|
|
125
|
+
return safeEqHex(hmacHex(body, sec), sig);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Receiver-side lookup. Returns the verdict + record (or null).
|
|
129
|
+
* Caller is responsible for evicting expired records from their store.
|
|
130
|
+
*/
|
|
131
|
+
export function lookupByCode(input) {
|
|
132
|
+
const now = input.nowMs ?? Date.now();
|
|
133
|
+
const norm = normaliseCode(input.code);
|
|
134
|
+
if (!norm)
|
|
135
|
+
return { verdict: "not_found", record: null };
|
|
136
|
+
const rec = input.records.find((r) => r && r.code === norm);
|
|
137
|
+
if (!rec)
|
|
138
|
+
return { verdict: "not_found", record: null };
|
|
139
|
+
if (!verifyPairRecord(rec, input.secret))
|
|
140
|
+
return { verdict: "tampered", record: null };
|
|
141
|
+
if (rec.expiresAtMs <= now)
|
|
142
|
+
return { verdict: "expired", record: rec };
|
|
143
|
+
if (rec.usedAtMs !== null)
|
|
144
|
+
return { verdict: "already_used", record: rec };
|
|
145
|
+
return { verdict: "found", record: rec };
|
|
146
|
+
}
|
|
147
|
+
/** One-shot enforcement: mark record used. Returns updated record (re-signed). */
|
|
148
|
+
export function markUsed(input) {
|
|
149
|
+
const now = input.nowMs ?? Date.now();
|
|
150
|
+
const secret = input.secret ?? defaultSecret();
|
|
151
|
+
const { sig: _oldSig, ...rest } = input.record;
|
|
152
|
+
const body = { ...rest, usedAtMs: now, usedByDeviceId: input.usedByDeviceId };
|
|
153
|
+
const sig = hmacHex(body, secret);
|
|
154
|
+
return { ...body, sig };
|
|
155
|
+
}
|
|
156
|
+
/** Prune expired records from caller's store. Pure: returns new array. */
|
|
157
|
+
export function pruneExpired(records, nowMs) {
|
|
158
|
+
const now = nowMs ?? Date.now();
|
|
159
|
+
return records.filter((r) => r && r.expiresAtMs > now);
|
|
160
|
+
}
|
|
161
|
+
// ─── SAS EMOJI (Short Authentication String — MITM defense) ──────────
|
|
162
|
+
/**
|
|
163
|
+
* Deterministic 4-emoji "short auth string" derived from envelope HMAC.
|
|
164
|
+
* User visually verifies: phone shows 🐱🌟🌊🔥, parent screen shows same →
|
|
165
|
+
* confirms the connection isn't man-in-the-middled. 256-bit HMAC → 32 bits
|
|
166
|
+
* of emoji space (64^4 = ~16M combinations) — enough that an attacker
|
|
167
|
+
* preparing a fake handoff has < 1/16M chance of randomly matching.
|
|
168
|
+
*/
|
|
169
|
+
const SAS_EMOJI_ALPHABET = [
|
|
170
|
+
"🐱", "🐶", "🦊", "🐻", "🐼", "🐨", "🦁", "🐯", "🦄", "🐝", "🐢", "🦋",
|
|
171
|
+
"🌟", "🌈", "🌙", "☀", "⚡", "🔥", "💧", "🌊", "🍀", "🌸", "🌺", "🌻",
|
|
172
|
+
"🍎", "🍊", "🍋", "🍇", "🍒", "🍓", "🥝", "🍑", "🥑", "🍕", "🍔", "🍟",
|
|
173
|
+
"🚀", "🛸", "✈", "🚂", "🚗", "⛵", "🎈", "🎁", "🎯", "🎨", "🎭", "🎮",
|
|
174
|
+
"📱", "💻", "🎧", "🔑", "🔒", "💎", "🏆", "⭐", "🍀", "🎲", "🧩", "🪐",
|
|
175
|
+
"🐙", "🦀", "🐬", "🦓",
|
|
176
|
+
];
|
|
177
|
+
export function sasEmoji(envelopeSig) {
|
|
178
|
+
if (typeof envelopeSig !== "string" || envelopeSig.length < 8)
|
|
179
|
+
return ["❓", "❓", "❓", "❓"];
|
|
180
|
+
const buf = Buffer.from(envelopeSig.slice(0, 16), "hex");
|
|
181
|
+
if (buf.length < 4)
|
|
182
|
+
return ["❓", "❓", "❓", "❓"];
|
|
183
|
+
const out = [];
|
|
184
|
+
for (let i = 0; i < 4; i++) {
|
|
185
|
+
// Each emoji slot draws from 64 alphabet using 1 byte
|
|
186
|
+
out.push(SAS_EMOJI_ALPHABET[buf[i] % SAS_EMOJI_ALPHABET.length]);
|
|
187
|
+
}
|
|
188
|
+
return out;
|
|
189
|
+
}
|
|
190
|
+
export function computePairStats(records, nowMs, secret) {
|
|
191
|
+
const now = nowMs ?? Date.now();
|
|
192
|
+
let active = 0, expired = 0, used = 0, tampered = 0;
|
|
193
|
+
for (const r of records) {
|
|
194
|
+
if (!r || typeof r !== "object") {
|
|
195
|
+
tampered++;
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
if (!verifyPairRecord(r, secret)) {
|
|
199
|
+
tampered++;
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
if (r.usedAtMs !== null) {
|
|
203
|
+
used++;
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
if (r.expiresAtMs <= now) {
|
|
207
|
+
expired++;
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
active++;
|
|
211
|
+
}
|
|
212
|
+
return { total: records.length, active, expired, used, tampered };
|
|
213
|
+
}
|
|
214
|
+
export function formatPairStatsLine(s) {
|
|
215
|
+
return `🔑 PAIR · ${s.active} active · ${s.used} used · ${s.expired} expired · ${s.tampered} tampered`;
|
|
216
|
+
}
|
|
217
|
+
export const PAIR_CODE_TUNABLES = Object.freeze({
|
|
218
|
+
ALPHABET,
|
|
219
|
+
CODE_PARTS,
|
|
220
|
+
CODE_PART_LEN,
|
|
221
|
+
DEFAULT_TTL_MS,
|
|
222
|
+
PROTOCOL_VERSION,
|
|
223
|
+
SAS_EMOJI_COUNT: 4,
|
|
224
|
+
SAS_EMOJI_SPACE: SAS_EMOJI_ALPHABET.length ** 4,
|
|
225
|
+
});
|
|
226
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pair_code/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pair_code.test.d.ts","sourceRoot":"","sources":["../../src/pair_code/pair_code.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { generatePairCode, normaliseCode, isValidCodeShape, bindEnvelope, verifyPairRecord, lookupByCode, markUsed, pruneExpired, sasEmoji, computePairStats, formatPairStatsLine, PAIR_CODE_TUNABLES, } from "./index.js";
|
|
3
|
+
const SECRET = "pair-test-secret-22";
|
|
4
|
+
describe("v2.19.32 PAIR CODE -- 6-char human-friendly handle", () => {
|
|
5
|
+
it("generatePairCode produces shape XXX-XXX from confusable-free alphabet", () => {
|
|
6
|
+
for (let i = 0; i < 50; i++) {
|
|
7
|
+
const c = generatePairCode();
|
|
8
|
+
expect(c).toMatch(/^[ACDEFGHJKMNPRTUVWXY2346789]{3}-[ACDEFGHJKMNPRTUVWXY2346789]{3}$/);
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
it("alphabet excludes 0/O/Q/1/I/L/5/S/8/B (confusables)", () => {
|
|
12
|
+
expect(PAIR_CODE_TUNABLES.ALPHABET).not.toContain("0");
|
|
13
|
+
expect(PAIR_CODE_TUNABLES.ALPHABET).not.toContain("O");
|
|
14
|
+
expect(PAIR_CODE_TUNABLES.ALPHABET).not.toContain("Q");
|
|
15
|
+
expect(PAIR_CODE_TUNABLES.ALPHABET).not.toContain("1");
|
|
16
|
+
expect(PAIR_CODE_TUNABLES.ALPHABET).not.toContain("I");
|
|
17
|
+
expect(PAIR_CODE_TUNABLES.ALPHABET).not.toContain("L");
|
|
18
|
+
expect(PAIR_CODE_TUNABLES.ALPHABET).not.toContain("5");
|
|
19
|
+
expect(PAIR_CODE_TUNABLES.ALPHABET).not.toContain("S");
|
|
20
|
+
expect(PAIR_CODE_TUNABLES.ALPHABET).not.toContain("8");
|
|
21
|
+
expect(PAIR_CODE_TUNABLES.ALPHABET).not.toContain("B");
|
|
22
|
+
});
|
|
23
|
+
it("normaliseCode handles user typing: spaces / lowercase / no-dash (shape only)", () => {
|
|
24
|
+
expect(normaliseCode("cat-dad")).toBe("CAT-DAD");
|
|
25
|
+
expect(normaliseCode("catdad")).toBe("CAT-DAD");
|
|
26
|
+
expect(normaliseCode("C AT - DAD")).toBe("CAT-DAD");
|
|
27
|
+
expect(normaliseCode("cat dad")).toBe("CAT-DAD");
|
|
28
|
+
expect(normaliseCode("")).toBe("");
|
|
29
|
+
expect(normaliseCode("toolong")).toBe(""); // 7 chars
|
|
30
|
+
expect(normaliseCode(123)).toBe("");
|
|
31
|
+
});
|
|
32
|
+
it("isValidCodeShape rejects out-of-alphabet chars (0/O/1/I/B/S etc)", () => {
|
|
33
|
+
expect(isValidCodeShape("CAT-DAD")).toBe(true);
|
|
34
|
+
expect(isValidCodeShape("ZOZ-CAT")).toBe(false); // O not in alphabet
|
|
35
|
+
expect(isValidCodeShape("0CD-EFG")).toBe(false); // 0 not in alphabet
|
|
36
|
+
expect(isValidCodeShape("1CD-EFG")).toBe(false); // 1 not in alphabet
|
|
37
|
+
expect(isValidCodeShape("BCD-EFG")).toBe(false); // B not in alphabet
|
|
38
|
+
expect(isValidCodeShape("SCD-EFG")).toBe(false); // S not in alphabet
|
|
39
|
+
});
|
|
40
|
+
it("MEASURED low collision rate: 10000 generates → expect < 1% collisions", () => {
|
|
41
|
+
const seen = new Set();
|
|
42
|
+
let collisions = 0;
|
|
43
|
+
for (let i = 0; i < 10_000; i++) {
|
|
44
|
+
const c = generatePairCode();
|
|
45
|
+
if (seen.has(c))
|
|
46
|
+
collisions++;
|
|
47
|
+
seen.add(c);
|
|
48
|
+
}
|
|
49
|
+
// Alphabet 26 chars, 6 chars total = 26^6 = ~309M space. 10000 picks expect ~0 collisions
|
|
50
|
+
expect(collisions).toBeLessThan(100); // < 1% even with bad RNG
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe("v2.19.32 PAIR CODE -- bind/lookup/markUsed lifecycle", () => {
|
|
54
|
+
it("bindEnvelope creates HMAC-signed PairRecord", () => {
|
|
55
|
+
const r = bindEnvelope({
|
|
56
|
+
envelopeSig: "abc123",
|
|
57
|
+
envelopeId: "env-001",
|
|
58
|
+
nowMs: 1_700_000_000_000,
|
|
59
|
+
secret: SECRET,
|
|
60
|
+
});
|
|
61
|
+
expect(r.code).toMatch(/^[A-Z2-9]{3}-[A-Z2-9]{3}$/);
|
|
62
|
+
expect(r.envelopeSig).toBe("abc123");
|
|
63
|
+
expect(r.expiresAtMs).toBe(1_700_000_000_000 + PAIR_CODE_TUNABLES.DEFAULT_TTL_MS);
|
|
64
|
+
expect(r.usedAtMs).toBeNull();
|
|
65
|
+
expect(r.sig).toMatch(/^[0-9a-f]{64}$/);
|
|
66
|
+
expect(verifyPairRecord(r, SECRET)).toBe(true);
|
|
67
|
+
});
|
|
68
|
+
it("bindEnvelope accepts caller-supplied code (for deterministic tests)", () => {
|
|
69
|
+
const r = bindEnvelope({
|
|
70
|
+
code: "CAT-DAD",
|
|
71
|
+
envelopeSig: "x",
|
|
72
|
+
envelopeId: "y",
|
|
73
|
+
nowMs: 0,
|
|
74
|
+
secret: SECRET,
|
|
75
|
+
});
|
|
76
|
+
expect(r.code).toBe("CAT-DAD");
|
|
77
|
+
});
|
|
78
|
+
it("verifyPairRecord rejects tampering", () => {
|
|
79
|
+
const r = bindEnvelope({ envelopeSig: "x", envelopeId: "y", nowMs: 0, secret: SECRET });
|
|
80
|
+
const tampered = { ...r, envelopeSig: "different" };
|
|
81
|
+
expect(verifyPairRecord(tampered, SECRET)).toBe(false);
|
|
82
|
+
});
|
|
83
|
+
it("lookupByCode returns 'found' for active code", () => {
|
|
84
|
+
const r = bindEnvelope({ envelopeSig: "x", envelopeId: "y", nowMs: 1000, secret: SECRET });
|
|
85
|
+
const result = lookupByCode({ records: [r], code: r.code, nowMs: 1500, secret: SECRET });
|
|
86
|
+
expect(result.verdict).toBe("found");
|
|
87
|
+
expect(result.record?.envelopeId).toBe("y");
|
|
88
|
+
});
|
|
89
|
+
it("lookupByCode handles user-typed lowercase + no-dash", () => {
|
|
90
|
+
const r = bindEnvelope({ code: "CAT-DAD", envelopeSig: "x", envelopeId: "y", nowMs: 1000, secret: SECRET });
|
|
91
|
+
const result = lookupByCode({ records: [r], code: "catdad", nowMs: 1500, secret: SECRET });
|
|
92
|
+
expect(result.verdict).toBe("found");
|
|
93
|
+
});
|
|
94
|
+
it("lookupByCode returns 'not_found' for unknown code", () => {
|
|
95
|
+
const result = lookupByCode({ records: [], code: "ZZZ-ZZZ", nowMs: 1000, secret: SECRET });
|
|
96
|
+
expect(result.verdict).toBe("not_found");
|
|
97
|
+
expect(result.record).toBeNull();
|
|
98
|
+
});
|
|
99
|
+
it("lookupByCode returns 'expired' after TTL passes", () => {
|
|
100
|
+
const r = bindEnvelope({ envelopeSig: "x", envelopeId: "y", nowMs: 0, ttlMs: 1000, secret: SECRET });
|
|
101
|
+
const result = lookupByCode({ records: [r], code: r.code, nowMs: 2000, secret: SECRET });
|
|
102
|
+
expect(result.verdict).toBe("expired");
|
|
103
|
+
});
|
|
104
|
+
it("lookupByCode returns 'tampered' if HMAC fails", () => {
|
|
105
|
+
const r = bindEnvelope({ envelopeSig: "x", envelopeId: "y", nowMs: 0, secret: SECRET });
|
|
106
|
+
const tampered = { ...r, envelopeSig: "evil" };
|
|
107
|
+
const result = lookupByCode({ records: [tampered], code: r.code, nowMs: 100, secret: SECRET });
|
|
108
|
+
expect(result.verdict).toBe("tampered");
|
|
109
|
+
});
|
|
110
|
+
it("markUsed implements one-shot: 2nd lookup returns 'already_used'", () => {
|
|
111
|
+
const r = bindEnvelope({ envelopeSig: "x", envelopeId: "y", nowMs: 1000, secret: SECRET });
|
|
112
|
+
const used = markUsed({ record: r, usedByDeviceId: "phone-1", nowMs: 1500, secret: SECRET });
|
|
113
|
+
expect(used.usedAtMs).toBe(1500);
|
|
114
|
+
expect(used.usedByDeviceId).toBe("phone-1");
|
|
115
|
+
expect(verifyPairRecord(used, SECRET)).toBe(true);
|
|
116
|
+
const result = lookupByCode({ records: [used], code: r.code, nowMs: 2000, secret: SECRET });
|
|
117
|
+
expect(result.verdict).toBe("already_used");
|
|
118
|
+
});
|
|
119
|
+
it("pruneExpired removes only past-TTL records", () => {
|
|
120
|
+
const fresh = bindEnvelope({ envelopeSig: "a", envelopeId: "1", nowMs: 1000, ttlMs: 10_000, secret: SECRET });
|
|
121
|
+
const expired = bindEnvelope({ envelopeSig: "b", envelopeId: "2", nowMs: 0, ttlMs: 500, secret: SECRET });
|
|
122
|
+
const all = [fresh, expired];
|
|
123
|
+
const pruned = pruneExpired(all, 5000);
|
|
124
|
+
expect(pruned.length).toBe(1);
|
|
125
|
+
expect(pruned[0].envelopeId).toBe("1");
|
|
126
|
+
});
|
|
127
|
+
it("computePairStats categorises records correctly", () => {
|
|
128
|
+
const fresh = bindEnvelope({ envelopeSig: "a", envelopeId: "1", nowMs: 1000, ttlMs: 10_000, secret: SECRET });
|
|
129
|
+
const expired = bindEnvelope({ envelopeSig: "b", envelopeId: "2", nowMs: 0, ttlMs: 500, secret: SECRET });
|
|
130
|
+
const usedRec = markUsed({
|
|
131
|
+
record: bindEnvelope({ envelopeSig: "c", envelopeId: "3", nowMs: 1000, secret: SECRET }),
|
|
132
|
+
usedByDeviceId: "phone", nowMs: 1500, secret: SECRET,
|
|
133
|
+
});
|
|
134
|
+
const tampered = { ...fresh, envelopeId: "bad" };
|
|
135
|
+
const stats = computePairStats([fresh, expired, usedRec, tampered], 5000, SECRET);
|
|
136
|
+
expect(stats.active).toBe(1);
|
|
137
|
+
expect(stats.expired).toBe(1);
|
|
138
|
+
expect(stats.used).toBe(1);
|
|
139
|
+
expect(stats.tampered).toBe(1);
|
|
140
|
+
expect(formatPairStatsLine(stats)).toContain("PAIR");
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
describe("v2.19.32 PAIR CODE -- SAS EMOJI (MITM defense)", () => {
|
|
144
|
+
it("sasEmoji is deterministic from envelopeSig", () => {
|
|
145
|
+
const sig = "a".repeat(64);
|
|
146
|
+
const a = sasEmoji(sig);
|
|
147
|
+
const b = sasEmoji(sig);
|
|
148
|
+
expect(a).toEqual(b);
|
|
149
|
+
expect(a.length).toBe(4);
|
|
150
|
+
});
|
|
151
|
+
it("sasEmoji DIFFERENT envelopeSigs produce DIFFERENT emoji (low collision)", async () => {
|
|
152
|
+
const { randomBytes } = await import("node:crypto");
|
|
153
|
+
const seen = new Set();
|
|
154
|
+
for (let i = 0; i < 200; i++) {
|
|
155
|
+
// Truly random first 4 bytes — this exercises the emoji alphabet uniformly
|
|
156
|
+
const sig = randomBytes(4).toString("hex") + "0".repeat(56);
|
|
157
|
+
seen.add(sasEmoji(sig).join(""));
|
|
158
|
+
}
|
|
159
|
+
// 64-emoji alphabet × 4 slots = 16M combinations; 200 random sigs → expect
|
|
160
|
+
// very few collisions (birthday: ~200^2 / 2 / 16M ≈ 0.00125 → essentially 0)
|
|
161
|
+
expect(seen.size).toBeGreaterThan(180);
|
|
162
|
+
});
|
|
163
|
+
it("sasEmoji returns 4 fallback emoji for malformed input", () => {
|
|
164
|
+
expect(sasEmoji("")).toEqual(["❓", "❓", "❓", "❓"]);
|
|
165
|
+
expect(sasEmoji("xyz")).toEqual(["❓", "❓", "❓", "❓"]);
|
|
166
|
+
expect(sasEmoji(null)).toEqual(["❓", "❓", "❓", "❓"]);
|
|
167
|
+
});
|
|
168
|
+
it("SAS_EMOJI_SPACE is wide enough to defend MITM (~16M)", () => {
|
|
169
|
+
expect(PAIR_CODE_TUNABLES.SAS_EMOJI_SPACE).toBeGreaterThan(10_000_000);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
describe("v2.19.32 PAIR CODE -- 24/7 RESILIENCE", () => {
|
|
173
|
+
it("1000 random bind/lookup/markUsed cycles never crash", () => {
|
|
174
|
+
let records = [];
|
|
175
|
+
for (let i = 0; i < 1000; i++) {
|
|
176
|
+
const env = `env-${Math.floor(Math.random() * 100)}`;
|
|
177
|
+
const r = bindEnvelope({
|
|
178
|
+
envelopeSig: `sig-${Math.random()}`,
|
|
179
|
+
envelopeId: env,
|
|
180
|
+
nowMs: i * 100,
|
|
181
|
+
ttlMs: 30_000,
|
|
182
|
+
secret: SECRET,
|
|
183
|
+
});
|
|
184
|
+
records.push(r);
|
|
185
|
+
const lookup = lookupByCode({ records, code: r.code, nowMs: i * 100 + 50, secret: SECRET });
|
|
186
|
+
expect(["found", "not_found", "already_used", "expired", "tampered"]).toContain(lookup.verdict);
|
|
187
|
+
if (Math.random() < 0.3 && lookup.verdict === "found") {
|
|
188
|
+
const used = markUsed({ record: lookup.record, usedByDeviceId: `dev-${i}`, nowMs: i * 100 + 60, secret: SECRET });
|
|
189
|
+
records = records.map((x) => x.code === used.code ? used : x);
|
|
190
|
+
}
|
|
191
|
+
if (i % 100 === 0)
|
|
192
|
+
records = pruneExpired(records, i * 100);
|
|
193
|
+
}
|
|
194
|
+
expect(records.length).toBeGreaterThan(0);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
//# sourceMappingURL=pair_code.test.js.map
|