@cross-deck/node 1.5.3 → 1.6.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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,37 @@ All notable changes to `@cross-deck/node` will be documented here. The
4
4
  format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [1.6.0] — 2026-06-10
8
+
9
+ Event Envelope v1 conformance — server-enforced contract (spec
10
+ `backend/docs/event-envelope-spec-v1.md`).
11
+
12
+ **Added:**
13
+
14
+ - **`envelopeVersion: 1`** (integer) on every batch POST body. Both the
15
+ queue-flush path (`EventQueue.flush()`) and the direct `ingest()` path
16
+ now emit this field. The server will reject payloads missing this field
17
+ once ingest enforcement lands.
18
+ - **`seq`** (number) on every wire event — per-session monotonic sequence
19
+ number. Captured synchronously with the event's `timestamp` at
20
+ `track()` / enqueue time. Counter starts at 0 when the `CrossdeckServer`
21
+ instance is constructed (session start) and increments once per event.
22
+ Matches spec §3: monotonic within a session, never reset between
23
+ background/foreground (Node has no such lifecycle; the instance lifetime
24
+ IS the session).
25
+ - **`context`** (object) on every wire event — standardized device/platform
26
+ context (spec §4), promoted out of `properties`. Common fields: `os`,
27
+ `osVersion`, `appVersion`, `sdkName`, `sdkVersion`, `locale`, `timezone`.
28
+ Node-specific: `nodeVersion`, `host`, `region` (the existing
29
+ `runtime.*` props, promoted).
30
+
31
+ **Changed:**
32
+
33
+ - `track()` no longer merges `runtime.*` keys into `properties`. Those
34
+ facts now live in the top-level `context` object on the wire event.
35
+ Super-properties registered via `server.register()` continue to appear
36
+ in `properties` unchanged (caller-supplied values are unaffected).
37
+
7
38
  ## [1.5.1] — 2026-05-27
8
39
 
9
40
  `crossdeck.contract_failed` is now single-fire to a dedicated
@@ -1,4 +1,4 @@
1
- import { w as CrossdeckServer } from '../crossdeck-server-BFTTwCEP.mjs';
1
+ import { w as CrossdeckServer } from '../crossdeck-server-C1Ue0rv4.mjs';
2
2
  import 'node:events';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { w as CrossdeckServer } from '../crossdeck-server-BFTTwCEP.js';
1
+ import { w as CrossdeckServer } from '../crossdeck-server-C1Ue0rv4.js';
2
2
  import 'node:events';
3
3
 
4
4
  /**
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "generatedAt": "2026-05-27T15:20:14.974Z",
3
+ "generatedAt": "2026-06-10T12:59:27.493Z",
4
4
  "sdk": "@cross-deck/node",
5
- "sdkVersion": "1.5.3",
6
- "bundledIn": "@cross-deck/node@1.5.3",
5
+ "sdkVersion": "1.6.0",
6
+ "bundledIn": "@cross-deck/node@1.6.0",
7
7
  "count": 10,
8
8
  "contracts": [
9
9
  {
@@ -126,7 +126,7 @@
126
126
  "legal/security/index.html#diagnostic",
127
127
  "legal/sdk-data/index.html#b-diagnostic"
128
128
  ],
129
- "bundledIn": "@cross-deck/node@1.5.3"
129
+ "bundledIn": "@cross-deck/node@1.6.0"
130
130
  },
131
131
  {
132
132
  "id": "documentation-honesty",
@@ -158,7 +158,7 @@
158
158
  ],
159
159
  "registeredAt": "2026-05-26",
160
160
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 — phase 7.1",
161
- "bundledIn": "@cross-deck/node@1.5.3"
161
+ "bundledIn": "@cross-deck/node@1.6.0"
162
162
  },
163
163
  {
164
164
  "id": "error-envelope-shape",
@@ -197,7 +197,7 @@
197
197
  ],
198
198
  "registeredAt": "2026-05-26",
199
199
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 — phase 8 (codifies existing contract)",
200
- "bundledIn": "@cross-deck/node@1.5.3"
200
+ "bundledIn": "@cross-deck/node@1.6.0"
201
201
  },
202
202
  {
203
203
  "id": "flush-interval-parity",
@@ -242,7 +242,7 @@
242
242
  ],
243
243
  "registeredAt": "2026-05-26",
244
244
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 — phase 3.3",
245
- "bundledIn": "@cross-deck/node@1.5.3"
245
+ "bundledIn": "@cross-deck/node@1.6.0"
246
246
  },
247
247
  {
248
248
  "id": "idempotency-key-deterministic",
@@ -347,7 +347,7 @@
347
347
  ],
348
348
  "registeredAt": "2026-05-26",
349
349
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 — phase 2.2.a + 2.2.b + 2.2.c",
350
- "bundledIn": "@cross-deck/node@1.5.3"
350
+ "bundledIn": "@cross-deck/node@1.6.0"
351
351
  },
352
352
  {
353
353
  "id": "node-pii-scrubber",
@@ -386,7 +386,7 @@
386
386
  ],
387
387
  "registeredAt": "2026-05-26",
388
388
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 — phase 3.1",
389
- "bundledIn": "@cross-deck/node@1.5.3"
389
+ "bundledIn": "@cross-deck/node@1.6.0"
390
390
  },
391
391
  {
392
392
  "id": "node-shutdown-awaits-flush",
@@ -419,7 +419,7 @@
419
419
  ],
420
420
  "registeredAt": "2026-05-26",
421
421
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 — phase 5.4",
422
- "bundledIn": "@cross-deck/node@1.5.3"
422
+ "bundledIn": "@cross-deck/node@1.6.0"
423
423
  },
424
424
  {
425
425
  "id": "sdk-error-codes-catalogue",
@@ -433,9 +433,14 @@
433
433
  "codeRef": [
434
434
  "sdks/web/src/error-codes.ts",
435
435
  "sdks/node/src/error-codes.ts",
436
+ "sdks/web/src/_contract-verifiers.ts",
436
437
  "backend/src/api/v1-errors.ts"
437
438
  ],
438
439
  "testRef": [
440
+ {
441
+ "file": "sdks/web/tests/contract-verifiers.test.ts",
442
+ "name": "sdk-error-codes-catalogue covers every backend wire code with remediation"
443
+ },
439
444
  {
440
445
  "file": "sdks/web/tests/error-codes-backfill.test.ts",
441
446
  "name": "includes backend code"
@@ -459,7 +464,7 @@
459
464
  ],
460
465
  "registeredAt": "2026-05-26",
461
466
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 — phase 6.2",
462
- "bundledIn": "@cross-deck/node@1.5.3"
467
+ "bundledIn": "@cross-deck/node@1.6.0"
463
468
  },
464
469
  {
465
470
  "id": "sync-purchases-funnel-parity",
@@ -492,7 +497,7 @@
492
497
  ],
493
498
  "registeredAt": "2026-05-26",
494
499
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 — phase 3.5",
495
- "bundledIn": "@cross-deck/node@1.5.3"
500
+ "bundledIn": "@cross-deck/node@1.6.0"
496
501
  },
497
502
  {
498
503
  "id": "verifier-timestamp-mandatory",
@@ -546,7 +551,7 @@
546
551
  ],
547
552
  "registeredAt": "2026-05-26",
548
553
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 — phase 7.2",
549
- "bundledIn": "@cross-deck/node@1.5.3"
554
+ "bundledIn": "@cross-deck/node@1.6.0"
550
555
  }
551
556
  ]
552
557
  }
@@ -173,8 +173,8 @@ declare const CrossdeckContracts: {
173
173
  readonly byId: (id: string) => Contract | undefined;
174
174
  readonly byPillar: (pillar: ContractPillar) => readonly Contract[];
175
175
  readonly withStatus: (status: ContractStatus) => readonly Contract[];
176
- readonly sdkVersion: "1.5.3";
177
- readonly bundledIn: "@cross-deck/node@1.5.3";
176
+ readonly sdkVersion: "1.6.0";
177
+ readonly bundledIn: "@cross-deck/node@1.6.0";
178
178
  /**
179
179
  * Resolve a failing test back to the contract it exercises.
180
180
  * Used by test-framework hooks to find the contract id of a
@@ -1312,6 +1312,8 @@ declare class CrossdeckServer extends EventEmitter {
1312
1312
  private readonly processAnonymousId;
1313
1313
  private readonly runtime;
1314
1314
  private readonly runtimeProperties;
1315
+ /** Envelope v1 §4 context object — built once at SDK init, reused on every event. */
1316
+ private readonly eventContext;
1315
1317
  private readonly breadcrumbs;
1316
1318
  private readonly eventQueue;
1317
1319
  private readonly errorTracker;
@@ -1329,6 +1331,23 @@ declare class CrossdeckServer extends EventEmitter {
1329
1331
  */
1330
1332
  private readonly entitlementStore;
1331
1333
  private readonly debug;
1334
+ /**
1335
+ * Event Envelope v1 §3 — per-session monotonic sequence counter.
1336
+ *
1337
+ * Node has no mobile "session" lifecycle (no app launch / background /
1338
+ * foreground). We model a session as the SDK instance lifetime: the
1339
+ * counter starts at 0 on construction and increments once per
1340
+ * `track()` call. `session.started` is the boot-telemetry event
1341
+ * (the first `track()` called from `emitBootTelemetryEvent()`), so
1342
+ * the seq will be 0 for that event, matching the spec's "reset to 0
1343
+ * at session.started" clause — by construction, it's the zeroth event
1344
+ * of this instance's lifecycle.
1345
+ *
1346
+ * The counter persists for the entire process lifetime of the SDK
1347
+ * instance (spec §3 clause 1: background/foreground does not reset).
1348
+ * A new `CrossdeckServer` construction is the only reset (new session).
1349
+ */
1350
+ private sessionSeq;
1332
1351
  /**
1333
1352
  * Alias map — `developerUserId` / `anonymousId` → canonical
1334
1353
  * `crossdeckCustomerId`. Populated by `getEntitlements()` so a
@@ -173,8 +173,8 @@ declare const CrossdeckContracts: {
173
173
  readonly byId: (id: string) => Contract | undefined;
174
174
  readonly byPillar: (pillar: ContractPillar) => readonly Contract[];
175
175
  readonly withStatus: (status: ContractStatus) => readonly Contract[];
176
- readonly sdkVersion: "1.5.3";
177
- readonly bundledIn: "@cross-deck/node@1.5.3";
176
+ readonly sdkVersion: "1.6.0";
177
+ readonly bundledIn: "@cross-deck/node@1.6.0";
178
178
  /**
179
179
  * Resolve a failing test back to the contract it exercises.
180
180
  * Used by test-framework hooks to find the contract id of a
@@ -1312,6 +1312,8 @@ declare class CrossdeckServer extends EventEmitter {
1312
1312
  private readonly processAnonymousId;
1313
1313
  private readonly runtime;
1314
1314
  private readonly runtimeProperties;
1315
+ /** Envelope v1 §4 context object — built once at SDK init, reused on every event. */
1316
+ private readonly eventContext;
1315
1317
  private readonly breadcrumbs;
1316
1318
  private readonly eventQueue;
1317
1319
  private readonly errorTracker;
@@ -1329,6 +1331,23 @@ declare class CrossdeckServer extends EventEmitter {
1329
1331
  */
1330
1332
  private readonly entitlementStore;
1331
1333
  private readonly debug;
1334
+ /**
1335
+ * Event Envelope v1 §3 — per-session monotonic sequence counter.
1336
+ *
1337
+ * Node has no mobile "session" lifecycle (no app launch / background /
1338
+ * foreground). We model a session as the SDK instance lifetime: the
1339
+ * counter starts at 0 on construction and increments once per
1340
+ * `track()` call. `session.started` is the boot-telemetry event
1341
+ * (the first `track()` called from `emitBootTelemetryEvent()`), so
1342
+ * the seq will be 0 for that event, matching the spec's "reset to 0
1343
+ * at session.started" clause — by construction, it's the zeroth event
1344
+ * of this instance's lifecycle.
1345
+ *
1346
+ * The counter persists for the entire process lifetime of the SDK
1347
+ * instance (spec §3 clause 1: background/foreground does not reset).
1348
+ * A new `CrossdeckServer` construction is the only reset (new session).
1349
+ */
1350
+ private sessionSeq;
1332
1351
  /**
1333
1352
  * Alias map — `developerUserId` / `anonymousId` → canonical
1334
1353
  * `crossdeckCustomerId`. Populated by `getEntitlements()` so a
package/dist/index.cjs CHANGED
@@ -378,7 +378,7 @@ function byteLength(s) {
378
378
  var https = __toESM(require("https"));
379
379
 
380
380
  // src/_version.ts
381
- var SDK_VERSION = "1.5.3";
381
+ var SDK_VERSION = "1.6.0";
382
382
  var SDK_NAME = "@cross-deck/node";
383
383
 
384
384
  // src/_diagnostic-telemetry.ts
@@ -962,6 +962,11 @@ var EventQueue = class {
962
962
  try {
963
963
  const env = this.cfg.envelope();
964
964
  const body = {
965
+ // Event Envelope v1 §1 — schema/wire version the server uses to
966
+ // decide whether it can parse this payload. Integer 1; only bumped
967
+ // on a breaking wire change. Distinct from sdk.version (which
968
+ // answers "which build?") — two questions, two fields.
969
+ envelopeVersion: 1,
965
970
  events: batch,
966
971
  sdk: env.sdk
967
972
  };
@@ -1946,6 +1951,25 @@ function runtimeInfoToProperties(info) {
1946
1951
  if (info.appVersion) out.appVersion = info.appVersion;
1947
1952
  return out;
1948
1953
  }
1954
+ function buildEventContext(info, sdkName, sdkVersion) {
1955
+ const ctx = {
1956
+ // Common fields (spec §4, all platforms)
1957
+ os: info.platform,
1958
+ osVersion: info.platformRelease,
1959
+ appVersion: info.appVersion ?? null,
1960
+ sdkName,
1961
+ sdkVersion,
1962
+ // locale / timezone: Node has no process-level locale by default;
1963
+ // surface them from the environment if available, otherwise null.
1964
+ locale: typeof process !== "undefined" && process.env["LANG"] || null,
1965
+ timezone: typeof Intl !== "undefined" && Intl.DateTimeFormat().resolvedOptions().timeZone || null,
1966
+ // Node-specific runtime context (spec §4 Node section)
1967
+ nodeVersion: info.nodeVersion,
1968
+ host: info.host,
1969
+ region: info.region ?? null
1970
+ };
1971
+ return ctx;
1972
+ }
1949
1973
 
1950
1974
  // src/flush-on-exit.ts
1951
1975
  var SIGNALS = ["SIGTERM", "SIGINT"];
@@ -2613,6 +2637,8 @@ var CrossdeckServer = class extends import_node_events.EventEmitter {
2613
2637
  processAnonymousId;
2614
2638
  runtime;
2615
2639
  runtimeProperties;
2640
+ /** Envelope v1 §4 context object — built once at SDK init, reused on every event. */
2641
+ eventContext;
2616
2642
  breadcrumbs;
2617
2643
  eventQueue;
2618
2644
  errorTracker;
@@ -2630,6 +2656,23 @@ var CrossdeckServer = class extends import_node_events.EventEmitter {
2630
2656
  */
2631
2657
  entitlementStore;
2632
2658
  debug;
2659
+ /**
2660
+ * Event Envelope v1 §3 — per-session monotonic sequence counter.
2661
+ *
2662
+ * Node has no mobile "session" lifecycle (no app launch / background /
2663
+ * foreground). We model a session as the SDK instance lifetime: the
2664
+ * counter starts at 0 on construction and increments once per
2665
+ * `track()` call. `session.started` is the boot-telemetry event
2666
+ * (the first `track()` called from `emitBootTelemetryEvent()`), so
2667
+ * the seq will be 0 for that event, matching the spec's "reset to 0
2668
+ * at session.started" clause — by construction, it's the zeroth event
2669
+ * of this instance's lifecycle.
2670
+ *
2671
+ * The counter persists for the entire process lifetime of the SDK
2672
+ * instance (spec §3 clause 1: background/foreground does not reset).
2673
+ * A new `CrossdeckServer` construction is the only reset (new session).
2674
+ */
2675
+ sessionSeq = 0;
2633
2676
  /**
2634
2677
  * Alias map — `developerUserId` / `anonymousId` → canonical
2635
2678
  * `crossdeckCustomerId`. Populated by `getEntitlements()` so a
@@ -2689,6 +2732,7 @@ var CrossdeckServer = class extends import_node_events.EventEmitter {
2689
2732
  appVersion: options.appVersion
2690
2733
  });
2691
2734
  this.runtimeProperties = runtimeInfoToProperties(this.runtime);
2735
+ this.eventContext = buildEventContext(this.runtime, SDK_NAME, this.sdkVersion);
2692
2736
  this.breadcrumbs = new BreadcrumbBuffer(options.breadcrumbsMaxSize ?? 50);
2693
2737
  this.superProps = new SuperPropertyStore();
2694
2738
  this.entitlementCache = new EntitlementCache({
@@ -3140,7 +3184,6 @@ var CrossdeckServer = class extends import_node_events.EventEmitter {
3140
3184
  }
3141
3185
  }
3142
3186
  const properties = {
3143
- ...this.runtimeProperties,
3144
3187
  ...this.superProps.getSuperProperties(),
3145
3188
  ...sanitized
3146
3189
  };
@@ -3149,10 +3192,14 @@ var CrossdeckServer = class extends import_node_events.EventEmitter {
3149
3192
  properties.$groups = groupIds;
3150
3193
  }
3151
3194
  const identity = this.resolveIdentity(event);
3195
+ const seq = this.sessionSeq++;
3196
+ const timestamp = event.timestamp ?? Date.now();
3152
3197
  const queued = {
3153
3198
  eventId: event.eventId ?? mintId("evt", 8),
3154
3199
  name: event.name,
3155
- timestamp: event.timestamp ?? Date.now(),
3200
+ timestamp,
3201
+ seq,
3202
+ context: this.eventContext,
3156
3203
  properties,
3157
3204
  ...identity
3158
3205
  };
@@ -3191,6 +3238,8 @@ var CrossdeckServer = class extends import_node_events.EventEmitter {
3191
3238
  }
3192
3239
  const normalized = events.map((event) => this.normalizeIngestEvent(event));
3193
3240
  const body = {
3241
+ // Event Envelope v1 §1 — wire version (parity with the queue path).
3242
+ envelopeVersion: 1,
3194
3243
  events: normalized,
3195
3244
  sdk: { name: SDK_NAME, version: this.sdkVersion },
3196
3245
  // Match the queue's batch envelope (see event-queue.ts) — backend
@@ -4449,8 +4498,8 @@ function normaliseSecrets(input) {
4449
4498
  }
4450
4499
 
4451
4500
  // src/_contracts-bundled.ts
4452
- var BUNDLED_IN = "@cross-deck/node@1.5.3";
4453
- var SDK_VERSION2 = "1.5.3";
4501
+ var BUNDLED_IN = "@cross-deck/node@1.6.0";
4502
+ var SDK_VERSION2 = "1.6.0";
4454
4503
  var BUNDLED_CONTRACTS = Object.freeze([
4455
4504
  {
4456
4505
  "id": "contract-failed-payload-schema-lock",
@@ -4572,7 +4621,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
4572
4621
  "legal/security/index.html#diagnostic",
4573
4622
  "legal/sdk-data/index.html#b-diagnostic"
4574
4623
  ],
4575
- "bundledIn": "@cross-deck/node@1.5.3"
4624
+ "bundledIn": "@cross-deck/node@1.6.0"
4576
4625
  },
4577
4626
  {
4578
4627
  "id": "documentation-honesty",
@@ -4604,7 +4653,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
4604
4653
  ],
4605
4654
  "registeredAt": "2026-05-26",
4606
4655
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 7.1",
4607
- "bundledIn": "@cross-deck/node@1.5.3"
4656
+ "bundledIn": "@cross-deck/node@1.6.0"
4608
4657
  },
4609
4658
  {
4610
4659
  "id": "error-envelope-shape",
@@ -4643,7 +4692,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
4643
4692
  ],
4644
4693
  "registeredAt": "2026-05-26",
4645
4694
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 8 (codifies existing contract)",
4646
- "bundledIn": "@cross-deck/node@1.5.3"
4695
+ "bundledIn": "@cross-deck/node@1.6.0"
4647
4696
  },
4648
4697
  {
4649
4698
  "id": "flush-interval-parity",
@@ -4688,7 +4737,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
4688
4737
  ],
4689
4738
  "registeredAt": "2026-05-26",
4690
4739
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.3",
4691
- "bundledIn": "@cross-deck/node@1.5.3"
4740
+ "bundledIn": "@cross-deck/node@1.6.0"
4692
4741
  },
4693
4742
  {
4694
4743
  "id": "idempotency-key-deterministic",
@@ -4793,7 +4842,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
4793
4842
  ],
4794
4843
  "registeredAt": "2026-05-26",
4795
4844
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 2.2.a + 2.2.b + 2.2.c",
4796
- "bundledIn": "@cross-deck/node@1.5.3"
4845
+ "bundledIn": "@cross-deck/node@1.6.0"
4797
4846
  },
4798
4847
  {
4799
4848
  "id": "node-pii-scrubber",
@@ -4832,7 +4881,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
4832
4881
  ],
4833
4882
  "registeredAt": "2026-05-26",
4834
4883
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.1",
4835
- "bundledIn": "@cross-deck/node@1.5.3"
4884
+ "bundledIn": "@cross-deck/node@1.6.0"
4836
4885
  },
4837
4886
  {
4838
4887
  "id": "node-shutdown-awaits-flush",
@@ -4865,7 +4914,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
4865
4914
  ],
4866
4915
  "registeredAt": "2026-05-26",
4867
4916
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 5.4",
4868
- "bundledIn": "@cross-deck/node@1.5.3"
4917
+ "bundledIn": "@cross-deck/node@1.6.0"
4869
4918
  },
4870
4919
  {
4871
4920
  "id": "sdk-error-codes-catalogue",
@@ -4879,9 +4928,14 @@ var BUNDLED_CONTRACTS = Object.freeze([
4879
4928
  "codeRef": [
4880
4929
  "sdks/web/src/error-codes.ts",
4881
4930
  "sdks/node/src/error-codes.ts",
4931
+ "sdks/web/src/_contract-verifiers.ts",
4882
4932
  "backend/src/api/v1-errors.ts"
4883
4933
  ],
4884
4934
  "testRef": [
4935
+ {
4936
+ "file": "sdks/web/tests/contract-verifiers.test.ts",
4937
+ "name": "sdk-error-codes-catalogue covers every backend wire code with remediation"
4938
+ },
4885
4939
  {
4886
4940
  "file": "sdks/web/tests/error-codes-backfill.test.ts",
4887
4941
  "name": "includes backend code"
@@ -4905,7 +4959,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
4905
4959
  ],
4906
4960
  "registeredAt": "2026-05-26",
4907
4961
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 6.2",
4908
- "bundledIn": "@cross-deck/node@1.5.3"
4962
+ "bundledIn": "@cross-deck/node@1.6.0"
4909
4963
  },
4910
4964
  {
4911
4965
  "id": "sync-purchases-funnel-parity",
@@ -4938,7 +4992,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
4938
4992
  ],
4939
4993
  "registeredAt": "2026-05-26",
4940
4994
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.5",
4941
- "bundledIn": "@cross-deck/node@1.5.3"
4995
+ "bundledIn": "@cross-deck/node@1.6.0"
4942
4996
  },
4943
4997
  {
4944
4998
  "id": "verifier-timestamp-mandatory",
@@ -4992,7 +5046,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
4992
5046
  ],
4993
5047
  "registeredAt": "2026-05-26",
4994
5048
  "firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 7.2",
4995
- "bundledIn": "@cross-deck/node@1.5.3"
5049
+ "bundledIn": "@cross-deck/node@1.6.0"
4996
5050
  }
4997
5051
  ]);
4998
5052