@cross-deck/node 1.5.0 → 1.5.1
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 +53 -0
- package/README.md +58 -0
- package/dist/auto-events/index.d.mts +1 -1
- package/dist/auto-events/index.d.ts +1 -1
- package/dist/contracts.json +135 -13
- package/dist/{crossdeck-server-oAaKBnUU.d.mts → crossdeck-server-CY4PZk-j.d.mts} +28 -11
- package/dist/{crossdeck-server-oAaKBnUU.d.ts → crossdeck-server-CY4PZk-j.d.ts} +28 -11
- package/dist/index.cjs +233 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.mjs +223 -30
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
|
|
20
30
|
// src/index.ts
|
|
@@ -364,10 +374,85 @@ function byteLength(s) {
|
|
|
364
374
|
return s.length * 4;
|
|
365
375
|
}
|
|
366
376
|
|
|
377
|
+
// src/_diagnostic-telemetry.ts
|
|
378
|
+
var https = __toESM(require("https"));
|
|
379
|
+
|
|
367
380
|
// src/_version.ts
|
|
368
|
-
var SDK_VERSION = "1.
|
|
381
|
+
var SDK_VERSION = "1.5.1";
|
|
369
382
|
var SDK_NAME = "@cross-deck/node";
|
|
370
383
|
|
|
384
|
+
// src/_diagnostic-telemetry.ts
|
|
385
|
+
var DIAGNOSTIC_TELEMETRY_ENDPOINT = "https://api.cross-deck.com/v1/sdk/diagnostic";
|
|
386
|
+
var DIAGNOSTIC_TELEMETRY_PUBLISHABLE_KEY = "cd_pub_RELIABILITY_PLACEHOLDER_TO_BE_PROVISIONED";
|
|
387
|
+
function isDiagnosticTelemetryEnabled() {
|
|
388
|
+
return !DIAGNOSTIC_TELEMETRY_PUBLISHABLE_KEY.startsWith(
|
|
389
|
+
"cd_pub_RELIABILITY_PLACEHOLDER"
|
|
390
|
+
);
|
|
391
|
+
}
|
|
392
|
+
var DIAGNOSTIC_TELEMETRY_ALLOWED_KEYS = /* @__PURE__ */ new Set([
|
|
393
|
+
"contract_id",
|
|
394
|
+
"sdk_version",
|
|
395
|
+
"sdk_platform",
|
|
396
|
+
"failure_reason",
|
|
397
|
+
"run_context",
|
|
398
|
+
"run_id",
|
|
399
|
+
"test_file",
|
|
400
|
+
"test_name",
|
|
401
|
+
"device_class"
|
|
402
|
+
]);
|
|
403
|
+
function filterDiagnosticPayload(payload) {
|
|
404
|
+
const filtered = {};
|
|
405
|
+
for (const [k, v] of Object.entries(payload)) {
|
|
406
|
+
if (DIAGNOSTIC_TELEMETRY_ALLOWED_KEYS.has(k) && typeof v === "string") {
|
|
407
|
+
filtered[k] = v;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return filtered;
|
|
411
|
+
}
|
|
412
|
+
function sendDiagnosticTelemetry(payload) {
|
|
413
|
+
if (!isDiagnosticTelemetryEnabled()) return;
|
|
414
|
+
const filtered = filterDiagnosticPayload(payload);
|
|
415
|
+
if (Object.keys(filtered).length === 0) return;
|
|
416
|
+
const body = JSON.stringify(filtered);
|
|
417
|
+
let parsed;
|
|
418
|
+
try {
|
|
419
|
+
parsed = new URL(DIAGNOSTIC_TELEMETRY_ENDPOINT);
|
|
420
|
+
} catch {
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
try {
|
|
424
|
+
const req = https.request({
|
|
425
|
+
method: "POST",
|
|
426
|
+
hostname: parsed.hostname,
|
|
427
|
+
port: parsed.port || 443,
|
|
428
|
+
path: parsed.pathname + parsed.search,
|
|
429
|
+
// Short timeout — reliability telemetry must never stall the
|
|
430
|
+
// host server. A failed POST is acceptable; a hung POST is not.
|
|
431
|
+
timeout: 5e3,
|
|
432
|
+
headers: {
|
|
433
|
+
"Content-Type": "application/json",
|
|
434
|
+
"Content-Length": Buffer.byteLength(body, "utf8").toString(),
|
|
435
|
+
Authorization: `Bearer ${DIAGNOSTIC_TELEMETRY_PUBLISHABLE_KEY}`,
|
|
436
|
+
"Crossdeck-Sdk-Version": `${SDK_NAME}@${SDK_VERSION}`
|
|
437
|
+
}
|
|
438
|
+
});
|
|
439
|
+
req.on("error", () => {
|
|
440
|
+
});
|
|
441
|
+
req.on("timeout", () => {
|
|
442
|
+
try {
|
|
443
|
+
req.destroy();
|
|
444
|
+
} catch {
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
req.on("response", (res) => {
|
|
448
|
+
res.resume();
|
|
449
|
+
});
|
|
450
|
+
req.write(body);
|
|
451
|
+
req.end();
|
|
452
|
+
} catch {
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
371
456
|
// src/http.ts
|
|
372
457
|
var DEFAULT_BASE_URL = "https://api.cross-deck.com/v1";
|
|
373
458
|
var DEFAULT_TIMEOUT_MS = 15e3;
|
|
@@ -3007,14 +3092,17 @@ var CrossdeckServer = class extends import_node_events.EventEmitter {
|
|
|
3007
3092
|
* auto-fill, the event would be rejected at queue enqueue.
|
|
3008
3093
|
*/
|
|
3009
3094
|
/**
|
|
3010
|
-
* Emit `crossdeck.contract_failed`
|
|
3011
|
-
*
|
|
3012
|
-
*
|
|
3013
|
-
*
|
|
3014
|
-
*
|
|
3095
|
+
* Emit `crossdeck.contract_failed` to the Crossdeck reliability
|
|
3096
|
+
* endpoint — single-fire, one-way, never visible in the customer's
|
|
3097
|
+
* dashboard. Goes over a dedicated HTTP path with the reliability
|
|
3098
|
+
* publishable key embedded at build time; the customer's track()
|
|
3099
|
+
* pipeline never carries `crossdeck.*` events. This is the
|
|
3100
|
+
* independent-controller flow described in Privacy Policy §6
|
|
3101
|
+
* ("Flow B"). The wire shape is fixed by the schema-lock contract
|
|
3102
|
+
* at `contracts/diagnostics/contract-failed-payload-schema-lock.json`.
|
|
3015
3103
|
*/
|
|
3016
3104
|
reportContractFailure(input) {
|
|
3017
|
-
const
|
|
3105
|
+
const payload = {
|
|
3018
3106
|
contract_id: input.contractId,
|
|
3019
3107
|
sdk_version: SDK_VERSION,
|
|
3020
3108
|
sdk_platform: "node",
|
|
@@ -3023,20 +3111,13 @@ var CrossdeckServer = class extends import_node_events.EventEmitter {
|
|
|
3023
3111
|
run_id: input.runId
|
|
3024
3112
|
};
|
|
3025
3113
|
if (input.testRef) {
|
|
3026
|
-
|
|
3027
|
-
|
|
3114
|
+
payload.test_file = input.testRef.file;
|
|
3115
|
+
payload.test_name = input.testRef.name;
|
|
3028
3116
|
}
|
|
3029
|
-
if (input.
|
|
3030
|
-
|
|
3031
|
-
if (props[k] === void 0) props[k] = v;
|
|
3032
|
-
}
|
|
3117
|
+
if (input.deviceClass) {
|
|
3118
|
+
payload.device_class = input.deviceClass;
|
|
3033
3119
|
}
|
|
3034
|
-
|
|
3035
|
-
name: "crossdeck.contract_failed",
|
|
3036
|
-
properties: props
|
|
3037
|
-
// No identity hint — these events are about the SDK / dogfood
|
|
3038
|
-
// run itself, not a specific end-user.
|
|
3039
|
-
});
|
|
3120
|
+
sendDiagnosticTelemetry(payload);
|
|
3040
3121
|
}
|
|
3041
3122
|
track(event) {
|
|
3042
3123
|
if (!event.name) {
|
|
@@ -4368,9 +4449,131 @@ function normaliseSecrets(input) {
|
|
|
4368
4449
|
}
|
|
4369
4450
|
|
|
4370
4451
|
// src/_contracts-bundled.ts
|
|
4371
|
-
var BUNDLED_IN = "@cross-deck/node@1.5.
|
|
4372
|
-
var SDK_VERSION2 = "1.5.
|
|
4452
|
+
var BUNDLED_IN = "@cross-deck/node@1.5.1";
|
|
4453
|
+
var SDK_VERSION2 = "1.5.1";
|
|
4373
4454
|
var BUNDLED_CONTRACTS = Object.freeze([
|
|
4455
|
+
{
|
|
4456
|
+
"id": "contract-failed-payload-schema-lock",
|
|
4457
|
+
"pillar": "diagnostics",
|
|
4458
|
+
"status": "enforced",
|
|
4459
|
+
"claim": "The `crossdeck.contract_failed` event payload contains ONLY the named diagnostic fields and never any end-user personal data. The wire shape is fixed \u2014 adding a new field requires (1) a pull request that updates this contract's `allowedFields` set, (2) a Privacy Policy \xA76 amendment, and (3) the Customer Disclosure Template / SDK Data Collection Reference \xA7B updates. Per-SDK assertion tests enforce the field set on every release. The `verification_phase` field is a categorical bucket \u2014 values are restricted to `boot` (the SDK self-test ran on Crossdeck.start) or `hot_path` (a verifier observed a real customer-triggered operation). The categorical nature is what preserves the diagnostic-only-not-personal classification. This is the structural guarantee that backs the independent-controller lawful basis in the Privacy Policy: the payload remains diagnostic-only, not personal, so the legitimate-interest analysis stays valid as the SDK evolves.",
|
|
4460
|
+
"appliesTo": [
|
|
4461
|
+
"web",
|
|
4462
|
+
"node",
|
|
4463
|
+
"swift",
|
|
4464
|
+
"android",
|
|
4465
|
+
"react-native"
|
|
4466
|
+
],
|
|
4467
|
+
"allowedFields": {
|
|
4468
|
+
"required": [
|
|
4469
|
+
"contract_id",
|
|
4470
|
+
"sdk_version",
|
|
4471
|
+
"sdk_platform",
|
|
4472
|
+
"failure_reason",
|
|
4473
|
+
"run_context",
|
|
4474
|
+
"run_id"
|
|
4475
|
+
],
|
|
4476
|
+
"optional": [
|
|
4477
|
+
"test_file",
|
|
4478
|
+
"test_name",
|
|
4479
|
+
"device_class",
|
|
4480
|
+
"verification_phase"
|
|
4481
|
+
],
|
|
4482
|
+
"forbidden": [
|
|
4483
|
+
"anonymousId",
|
|
4484
|
+
"developerUserId",
|
|
4485
|
+
"crossdeckCustomerId",
|
|
4486
|
+
"email",
|
|
4487
|
+
"ip",
|
|
4488
|
+
"user_agent",
|
|
4489
|
+
"message",
|
|
4490
|
+
"stack",
|
|
4491
|
+
"stack_trace",
|
|
4492
|
+
"frames",
|
|
4493
|
+
"exception_message",
|
|
4494
|
+
"url",
|
|
4495
|
+
"path",
|
|
4496
|
+
"screen",
|
|
4497
|
+
"title",
|
|
4498
|
+
"label",
|
|
4499
|
+
"text",
|
|
4500
|
+
"ariaLabel",
|
|
4501
|
+
"accessibilityLabel",
|
|
4502
|
+
"contentDescription",
|
|
4503
|
+
"session_id",
|
|
4504
|
+
"sessionId"
|
|
4505
|
+
]
|
|
4506
|
+
},
|
|
4507
|
+
"transport": "Telemetry is single-fire to the Crossdeck reliability endpoint only \u2014 NOT the customer's appId. The customer's track() pipeline never carries `crossdeck.*` events; the customer's dashboard never shows individual contract failures. Operational telemetry flows one-way to the Crossdeck operations team for SDK reliability purposes (legitimate interest, independent-controller flow per Privacy Policy \xA76). The reliability endpoint is hardcoded at SDK build time; the publishable key for the reliability project is embedded as a constant and rejects writes that don't match the schema.",
|
|
4508
|
+
"codeRef": [
|
|
4509
|
+
"sdks/web/src/crossdeck.ts",
|
|
4510
|
+
"sdks/node/src/crossdeck-server.ts",
|
|
4511
|
+
"sdks/swift/Sources/Crossdeck/Crossdeck.swift",
|
|
4512
|
+
"sdks/swift/Sources/Crossdeck/_DiagnosticTelemetry.swift",
|
|
4513
|
+
"sdks/android/crossdeck/src/main/kotlin/com/crossdeck/Crossdeck.kt",
|
|
4514
|
+
"sdks/android/crossdeck/src/main/kotlin/com/crossdeck/_DiagnosticTelemetry.kt",
|
|
4515
|
+
"sdks/react-native/src/crossdeck.ts",
|
|
4516
|
+
"backend/src/api/v1-sdk-diagnostic.ts",
|
|
4517
|
+
"sdks/web/src/_diagnostic-telemetry.ts",
|
|
4518
|
+
"sdks/node/src/_diagnostic-telemetry.ts",
|
|
4519
|
+
"sdks/react-native/src/_diagnostic-telemetry.ts"
|
|
4520
|
+
],
|
|
4521
|
+
"testRef": [
|
|
4522
|
+
{
|
|
4523
|
+
"file": "sdks/web/tests/contract-failed-schema-lock.test.ts",
|
|
4524
|
+
"name": "reportContractFailure payload conforms to schema-lock"
|
|
4525
|
+
},
|
|
4526
|
+
{
|
|
4527
|
+
"file": "sdks/node/tests/contract-failed-schema-lock.test.ts",
|
|
4528
|
+
"name": "reportContractFailure payload conforms to schema-lock"
|
|
4529
|
+
},
|
|
4530
|
+
{
|
|
4531
|
+
"file": "sdks/swift/Tests/CrossdeckTests/ContractFailedSchemaLockTests.swift",
|
|
4532
|
+
"name": "test_reportContractFailure_payloadFieldsAreInAllowList"
|
|
4533
|
+
},
|
|
4534
|
+
{
|
|
4535
|
+
"file": "sdks/swift/Tests/CrossdeckTests/ContractFailedSchemaLockTests.swift",
|
|
4536
|
+
"name": "test_reportContractFailure_doesNotEnterCustomerTrackPipeline"
|
|
4537
|
+
},
|
|
4538
|
+
{
|
|
4539
|
+
"file": "sdks/android/crossdeck/src/test/kotlin/com/crossdeck/ContractFailedSchemaLockTest.kt",
|
|
4540
|
+
"name": "reportContractFailure payload conforms to schema-lock"
|
|
4541
|
+
},
|
|
4542
|
+
{
|
|
4543
|
+
"file": "sdks/android/crossdeck/src/test/kotlin/com/crossdeck/ContractFailedSchemaLockTest.kt",
|
|
4544
|
+
"name": "reportContractFailure does not enter customer track pipeline"
|
|
4545
|
+
},
|
|
4546
|
+
{
|
|
4547
|
+
"file": "sdks/react-native/tests/contract-failed-schema-lock.test.ts",
|
|
4548
|
+
"name": "reportContractFailure payload conforms to schema-lock"
|
|
4549
|
+
},
|
|
4550
|
+
{
|
|
4551
|
+
"file": "backend/tests/unit/v1-sdk-diagnostic.test.ts",
|
|
4552
|
+
"name": "forbidden fields are enumerated in the schema-lock contract"
|
|
4553
|
+
},
|
|
4554
|
+
{
|
|
4555
|
+
"file": "backend/tests/unit/v1-sdk-diagnostic.test.ts",
|
|
4556
|
+
"name": "required fields are enumerated in the schema-lock contract"
|
|
4557
|
+
},
|
|
4558
|
+
{
|
|
4559
|
+
"file": "backend/tests/unit/v1-sdk-diagnostic.test.ts",
|
|
4560
|
+
"name": "regression guard: never returns a raw IP"
|
|
4561
|
+
},
|
|
4562
|
+
{
|
|
4563
|
+
"file": "backend/tests/unit/v1-sdk-diagnostic.test.ts",
|
|
4564
|
+
"name": "verification_phase is in the optional field set"
|
|
4565
|
+
}
|
|
4566
|
+
],
|
|
4567
|
+
"registeredAt": "2026-05-27",
|
|
4568
|
+
"firstRegisteredIn": "Diagnostic telemetry single-fire + schema-lock \u2014 independent-controller flow",
|
|
4569
|
+
"privacyReferences": [
|
|
4570
|
+
"legal/privacy/index.html#sdk-diagnostic",
|
|
4571
|
+
"legal/customer-disclosure/index.html#flow-b",
|
|
4572
|
+
"legal/security/index.html#diagnostic",
|
|
4573
|
+
"legal/sdk-data/index.html#b-diagnostic"
|
|
4574
|
+
],
|
|
4575
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4576
|
+
},
|
|
4374
4577
|
{
|
|
4375
4578
|
"id": "documentation-honesty",
|
|
4376
4579
|
"pillar": "webhooks",
|
|
@@ -4401,7 +4604,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4401
4604
|
],
|
|
4402
4605
|
"registeredAt": "2026-05-26",
|
|
4403
4606
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 7.1",
|
|
4404
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4607
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4405
4608
|
},
|
|
4406
4609
|
{
|
|
4407
4610
|
"id": "error-envelope-shape",
|
|
@@ -4440,7 +4643,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4440
4643
|
],
|
|
4441
4644
|
"registeredAt": "2026-05-26",
|
|
4442
4645
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 8 (codifies existing contract)",
|
|
4443
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4646
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4444
4647
|
},
|
|
4445
4648
|
{
|
|
4446
4649
|
"id": "flush-interval-parity",
|
|
@@ -4485,7 +4688,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4485
4688
|
],
|
|
4486
4689
|
"registeredAt": "2026-05-26",
|
|
4487
4690
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.3",
|
|
4488
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4691
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4489
4692
|
},
|
|
4490
4693
|
{
|
|
4491
4694
|
"id": "idempotency-key-deterministic",
|
|
@@ -4590,7 +4793,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4590
4793
|
],
|
|
4591
4794
|
"registeredAt": "2026-05-26",
|
|
4592
4795
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 2.2.a + 2.2.b + 2.2.c",
|
|
4593
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4796
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4594
4797
|
},
|
|
4595
4798
|
{
|
|
4596
4799
|
"id": "node-pii-scrubber",
|
|
@@ -4629,7 +4832,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4629
4832
|
],
|
|
4630
4833
|
"registeredAt": "2026-05-26",
|
|
4631
4834
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.1",
|
|
4632
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4835
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4633
4836
|
},
|
|
4634
4837
|
{
|
|
4635
4838
|
"id": "node-shutdown-awaits-flush",
|
|
@@ -4662,7 +4865,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4662
4865
|
],
|
|
4663
4866
|
"registeredAt": "2026-05-26",
|
|
4664
4867
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 5.4",
|
|
4665
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4868
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4666
4869
|
},
|
|
4667
4870
|
{
|
|
4668
4871
|
"id": "sdk-error-codes-catalogue",
|
|
@@ -4702,7 +4905,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4702
4905
|
],
|
|
4703
4906
|
"registeredAt": "2026-05-26",
|
|
4704
4907
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 6.2",
|
|
4705
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4908
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4706
4909
|
},
|
|
4707
4910
|
{
|
|
4708
4911
|
"id": "sync-purchases-funnel-parity",
|
|
@@ -4735,7 +4938,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4735
4938
|
],
|
|
4736
4939
|
"registeredAt": "2026-05-26",
|
|
4737
4940
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.5",
|
|
4738
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4941
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4739
4942
|
},
|
|
4740
4943
|
{
|
|
4741
4944
|
"id": "verifier-timestamp-mandatory",
|
|
@@ -4789,7 +4992,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4789
4992
|
],
|
|
4790
4993
|
"registeredAt": "2026-05-26",
|
|
4791
4994
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 7.2",
|
|
4792
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4995
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4793
4996
|
}
|
|
4794
4997
|
]);
|
|
4795
4998
|
|