@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.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as AliasIdentityInput, a as AliasResult, b as AuditDecision, c as AuditEntry, B as Breadcrumb, d as BreadcrumbCategory, e as BreadcrumbLevel, C as CROSSDECK_API_VERSION, f as CapturedError, g as Contract, h as ContractAppliesTo, i as ContractFailureInput, j as ContractPillar, k as ContractStatus, l as ContractTestRef, m as CrossdeckAuthenticationError, n as CrossdeckConfigurationError, o as CrossdeckContracts, p as CrossdeckError, q as CrossdeckErrorPayload, r as CrossdeckErrorType, s as CrossdeckInternalError, t as CrossdeckNetworkError, u as CrossdeckPermissionError, v as CrossdeckRateLimitError, w as CrossdeckServer, x as CrossdeckServerOptions, y as CrossdeckValidationError, D as DEFAULT_BASE_URL, z as DEFAULT_TIMEOUT_MS, E as Diagnostics, F as EntitlementCacheOptions, G as EntitlementMutationResult, H as EntitlementStore, I as EntitlementsListResponse, J as EntitlementsListener, K as Environment, L as ErrorCaptureConfig, M as ErrorLevel, N as EventProperties, O as ForgetResult, P as GrantDuration, Q as GrantEntitlementInput, R as GroupMembership, S as HeartbeatResponse, T as HttpRequestInfo, U as HttpResponseInfo, V as HttpRetriesConfig, W as IdentifyOptions, X as IdentityHints, Y as IngestOptions, Z as IngestResponse, _ as PublicEntitlement, $ as PurchaseResult, a0 as RequestOptions, a1 as RevokeEntitlementInput, a2 as RuntimeHost, a3 as RuntimeInfo, a4 as ServerEvent, a5 as StackFrame, a6 as StoredEntitlements, a7 as SyncPurchaseInput, a8 as makeCrossdeckError } from './crossdeck-server-
|
|
1
|
+
export { A as AliasIdentityInput, a as AliasResult, b as AuditDecision, c as AuditEntry, B as Breadcrumb, d as BreadcrumbCategory, e as BreadcrumbLevel, C as CROSSDECK_API_VERSION, f as CapturedError, g as Contract, h as ContractAppliesTo, i as ContractFailureInput, j as ContractPillar, k as ContractStatus, l as ContractTestRef, m as CrossdeckAuthenticationError, n as CrossdeckConfigurationError, o as CrossdeckContracts, p as CrossdeckError, q as CrossdeckErrorPayload, r as CrossdeckErrorType, s as CrossdeckInternalError, t as CrossdeckNetworkError, u as CrossdeckPermissionError, v as CrossdeckRateLimitError, w as CrossdeckServer, x as CrossdeckServerOptions, y as CrossdeckValidationError, D as DEFAULT_BASE_URL, z as DEFAULT_TIMEOUT_MS, E as Diagnostics, F as EntitlementCacheOptions, G as EntitlementMutationResult, H as EntitlementStore, I as EntitlementsListResponse, J as EntitlementsListener, K as Environment, L as ErrorCaptureConfig, M as ErrorLevel, N as EventProperties, O as ForgetResult, P as GrantDuration, Q as GrantEntitlementInput, R as GroupMembership, S as HeartbeatResponse, T as HttpRequestInfo, U as HttpResponseInfo, V as HttpRetriesConfig, W as IdentifyOptions, X as IdentityHints, Y as IngestOptions, Z as IngestResponse, _ as PublicEntitlement, $ as PurchaseResult, a0 as RequestOptions, a1 as RevokeEntitlementInput, a2 as RuntimeHost, a3 as RuntimeInfo, a4 as ServerEvent, a5 as StackFrame, a6 as StoredEntitlements, a7 as SyncPurchaseInput, a8 as makeCrossdeckError } from './crossdeck-server-CY4PZk-j.mjs';
|
|
2
2
|
import 'node:events';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -17,7 +17,7 @@ import 'node:events';
|
|
|
17
17
|
*
|
|
18
18
|
* Do NOT edit by hand — `node scripts/sync-sdk-versions.mjs`.
|
|
19
19
|
*/
|
|
20
|
-
declare const SDK_VERSION = "1.
|
|
20
|
+
declare const SDK_VERSION = "1.5.1";
|
|
21
21
|
declare const SDK_NAME = "@cross-deck/node";
|
|
22
22
|
|
|
23
23
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as AliasIdentityInput, a as AliasResult, b as AuditDecision, c as AuditEntry, B as Breadcrumb, d as BreadcrumbCategory, e as BreadcrumbLevel, C as CROSSDECK_API_VERSION, f as CapturedError, g as Contract, h as ContractAppliesTo, i as ContractFailureInput, j as ContractPillar, k as ContractStatus, l as ContractTestRef, m as CrossdeckAuthenticationError, n as CrossdeckConfigurationError, o as CrossdeckContracts, p as CrossdeckError, q as CrossdeckErrorPayload, r as CrossdeckErrorType, s as CrossdeckInternalError, t as CrossdeckNetworkError, u as CrossdeckPermissionError, v as CrossdeckRateLimitError, w as CrossdeckServer, x as CrossdeckServerOptions, y as CrossdeckValidationError, D as DEFAULT_BASE_URL, z as DEFAULT_TIMEOUT_MS, E as Diagnostics, F as EntitlementCacheOptions, G as EntitlementMutationResult, H as EntitlementStore, I as EntitlementsListResponse, J as EntitlementsListener, K as Environment, L as ErrorCaptureConfig, M as ErrorLevel, N as EventProperties, O as ForgetResult, P as GrantDuration, Q as GrantEntitlementInput, R as GroupMembership, S as HeartbeatResponse, T as HttpRequestInfo, U as HttpResponseInfo, V as HttpRetriesConfig, W as IdentifyOptions, X as IdentityHints, Y as IngestOptions, Z as IngestResponse, _ as PublicEntitlement, $ as PurchaseResult, a0 as RequestOptions, a1 as RevokeEntitlementInput, a2 as RuntimeHost, a3 as RuntimeInfo, a4 as ServerEvent, a5 as StackFrame, a6 as StoredEntitlements, a7 as SyncPurchaseInput, a8 as makeCrossdeckError } from './crossdeck-server-
|
|
1
|
+
export { A as AliasIdentityInput, a as AliasResult, b as AuditDecision, c as AuditEntry, B as Breadcrumb, d as BreadcrumbCategory, e as BreadcrumbLevel, C as CROSSDECK_API_VERSION, f as CapturedError, g as Contract, h as ContractAppliesTo, i as ContractFailureInput, j as ContractPillar, k as ContractStatus, l as ContractTestRef, m as CrossdeckAuthenticationError, n as CrossdeckConfigurationError, o as CrossdeckContracts, p as CrossdeckError, q as CrossdeckErrorPayload, r as CrossdeckErrorType, s as CrossdeckInternalError, t as CrossdeckNetworkError, u as CrossdeckPermissionError, v as CrossdeckRateLimitError, w as CrossdeckServer, x as CrossdeckServerOptions, y as CrossdeckValidationError, D as DEFAULT_BASE_URL, z as DEFAULT_TIMEOUT_MS, E as Diagnostics, F as EntitlementCacheOptions, G as EntitlementMutationResult, H as EntitlementStore, I as EntitlementsListResponse, J as EntitlementsListener, K as Environment, L as ErrorCaptureConfig, M as ErrorLevel, N as EventProperties, O as ForgetResult, P as GrantDuration, Q as GrantEntitlementInput, R as GroupMembership, S as HeartbeatResponse, T as HttpRequestInfo, U as HttpResponseInfo, V as HttpRetriesConfig, W as IdentifyOptions, X as IdentityHints, Y as IngestOptions, Z as IngestResponse, _ as PublicEntitlement, $ as PurchaseResult, a0 as RequestOptions, a1 as RevokeEntitlementInput, a2 as RuntimeHost, a3 as RuntimeInfo, a4 as ServerEvent, a5 as StackFrame, a6 as StoredEntitlements, a7 as SyncPurchaseInput, a8 as makeCrossdeckError } from './crossdeck-server-CY4PZk-j.js';
|
|
2
2
|
import 'node:events';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -17,7 +17,7 @@ import 'node:events';
|
|
|
17
17
|
*
|
|
18
18
|
* Do NOT edit by hand — `node scripts/sync-sdk-versions.mjs`.
|
|
19
19
|
*/
|
|
20
|
-
declare const SDK_VERSION = "1.
|
|
20
|
+
declare const SDK_VERSION = "1.5.1";
|
|
21
21
|
declare const SDK_NAME = "@cross-deck/node";
|
|
22
22
|
|
|
23
23
|
/**
|
package/dist/index.mjs
CHANGED
|
@@ -316,10 +316,85 @@ function byteLength(s) {
|
|
|
316
316
|
return s.length * 4;
|
|
317
317
|
}
|
|
318
318
|
|
|
319
|
+
// src/_diagnostic-telemetry.ts
|
|
320
|
+
import * as https from "https";
|
|
321
|
+
|
|
319
322
|
// src/_version.ts
|
|
320
|
-
var SDK_VERSION = "1.
|
|
323
|
+
var SDK_VERSION = "1.5.1";
|
|
321
324
|
var SDK_NAME = "@cross-deck/node";
|
|
322
325
|
|
|
326
|
+
// src/_diagnostic-telemetry.ts
|
|
327
|
+
var DIAGNOSTIC_TELEMETRY_ENDPOINT = "https://api.cross-deck.com/v1/sdk/diagnostic";
|
|
328
|
+
var DIAGNOSTIC_TELEMETRY_PUBLISHABLE_KEY = "cd_pub_RELIABILITY_PLACEHOLDER_TO_BE_PROVISIONED";
|
|
329
|
+
function isDiagnosticTelemetryEnabled() {
|
|
330
|
+
return !DIAGNOSTIC_TELEMETRY_PUBLISHABLE_KEY.startsWith(
|
|
331
|
+
"cd_pub_RELIABILITY_PLACEHOLDER"
|
|
332
|
+
);
|
|
333
|
+
}
|
|
334
|
+
var DIAGNOSTIC_TELEMETRY_ALLOWED_KEYS = /* @__PURE__ */ new Set([
|
|
335
|
+
"contract_id",
|
|
336
|
+
"sdk_version",
|
|
337
|
+
"sdk_platform",
|
|
338
|
+
"failure_reason",
|
|
339
|
+
"run_context",
|
|
340
|
+
"run_id",
|
|
341
|
+
"test_file",
|
|
342
|
+
"test_name",
|
|
343
|
+
"device_class"
|
|
344
|
+
]);
|
|
345
|
+
function filterDiagnosticPayload(payload) {
|
|
346
|
+
const filtered = {};
|
|
347
|
+
for (const [k, v] of Object.entries(payload)) {
|
|
348
|
+
if (DIAGNOSTIC_TELEMETRY_ALLOWED_KEYS.has(k) && typeof v === "string") {
|
|
349
|
+
filtered[k] = v;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return filtered;
|
|
353
|
+
}
|
|
354
|
+
function sendDiagnosticTelemetry(payload) {
|
|
355
|
+
if (!isDiagnosticTelemetryEnabled()) return;
|
|
356
|
+
const filtered = filterDiagnosticPayload(payload);
|
|
357
|
+
if (Object.keys(filtered).length === 0) return;
|
|
358
|
+
const body = JSON.stringify(filtered);
|
|
359
|
+
let parsed;
|
|
360
|
+
try {
|
|
361
|
+
parsed = new URL(DIAGNOSTIC_TELEMETRY_ENDPOINT);
|
|
362
|
+
} catch {
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
try {
|
|
366
|
+
const req = https.request({
|
|
367
|
+
method: "POST",
|
|
368
|
+
hostname: parsed.hostname,
|
|
369
|
+
port: parsed.port || 443,
|
|
370
|
+
path: parsed.pathname + parsed.search,
|
|
371
|
+
// Short timeout — reliability telemetry must never stall the
|
|
372
|
+
// host server. A failed POST is acceptable; a hung POST is not.
|
|
373
|
+
timeout: 5e3,
|
|
374
|
+
headers: {
|
|
375
|
+
"Content-Type": "application/json",
|
|
376
|
+
"Content-Length": Buffer.byteLength(body, "utf8").toString(),
|
|
377
|
+
Authorization: `Bearer ${DIAGNOSTIC_TELEMETRY_PUBLISHABLE_KEY}`,
|
|
378
|
+
"Crossdeck-Sdk-Version": `${SDK_NAME}@${SDK_VERSION}`
|
|
379
|
+
}
|
|
380
|
+
});
|
|
381
|
+
req.on("error", () => {
|
|
382
|
+
});
|
|
383
|
+
req.on("timeout", () => {
|
|
384
|
+
try {
|
|
385
|
+
req.destroy();
|
|
386
|
+
} catch {
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
req.on("response", (res) => {
|
|
390
|
+
res.resume();
|
|
391
|
+
});
|
|
392
|
+
req.write(body);
|
|
393
|
+
req.end();
|
|
394
|
+
} catch {
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
323
398
|
// src/http.ts
|
|
324
399
|
var DEFAULT_BASE_URL = "https://api.cross-deck.com/v1";
|
|
325
400
|
var DEFAULT_TIMEOUT_MS = 15e3;
|
|
@@ -2959,14 +3034,17 @@ var CrossdeckServer = class extends EventEmitter {
|
|
|
2959
3034
|
* auto-fill, the event would be rejected at queue enqueue.
|
|
2960
3035
|
*/
|
|
2961
3036
|
/**
|
|
2962
|
-
* Emit `crossdeck.contract_failed`
|
|
2963
|
-
*
|
|
2964
|
-
*
|
|
2965
|
-
*
|
|
2966
|
-
*
|
|
3037
|
+
* Emit `crossdeck.contract_failed` to the Crossdeck reliability
|
|
3038
|
+
* endpoint — single-fire, one-way, never visible in the customer's
|
|
3039
|
+
* dashboard. Goes over a dedicated HTTP path with the reliability
|
|
3040
|
+
* publishable key embedded at build time; the customer's track()
|
|
3041
|
+
* pipeline never carries `crossdeck.*` events. This is the
|
|
3042
|
+
* independent-controller flow described in Privacy Policy §6
|
|
3043
|
+
* ("Flow B"). The wire shape is fixed by the schema-lock contract
|
|
3044
|
+
* at `contracts/diagnostics/contract-failed-payload-schema-lock.json`.
|
|
2967
3045
|
*/
|
|
2968
3046
|
reportContractFailure(input) {
|
|
2969
|
-
const
|
|
3047
|
+
const payload = {
|
|
2970
3048
|
contract_id: input.contractId,
|
|
2971
3049
|
sdk_version: SDK_VERSION,
|
|
2972
3050
|
sdk_platform: "node",
|
|
@@ -2975,20 +3053,13 @@ var CrossdeckServer = class extends EventEmitter {
|
|
|
2975
3053
|
run_id: input.runId
|
|
2976
3054
|
};
|
|
2977
3055
|
if (input.testRef) {
|
|
2978
|
-
|
|
2979
|
-
|
|
3056
|
+
payload.test_file = input.testRef.file;
|
|
3057
|
+
payload.test_name = input.testRef.name;
|
|
2980
3058
|
}
|
|
2981
|
-
if (input.
|
|
2982
|
-
|
|
2983
|
-
if (props[k] === void 0) props[k] = v;
|
|
2984
|
-
}
|
|
3059
|
+
if (input.deviceClass) {
|
|
3060
|
+
payload.device_class = input.deviceClass;
|
|
2985
3061
|
}
|
|
2986
|
-
|
|
2987
|
-
name: "crossdeck.contract_failed",
|
|
2988
|
-
properties: props
|
|
2989
|
-
// No identity hint — these events are about the SDK / dogfood
|
|
2990
|
-
// run itself, not a specific end-user.
|
|
2991
|
-
});
|
|
3062
|
+
sendDiagnosticTelemetry(payload);
|
|
2992
3063
|
}
|
|
2993
3064
|
track(event) {
|
|
2994
3065
|
if (!event.name) {
|
|
@@ -4320,9 +4391,131 @@ function normaliseSecrets(input) {
|
|
|
4320
4391
|
}
|
|
4321
4392
|
|
|
4322
4393
|
// src/_contracts-bundled.ts
|
|
4323
|
-
var BUNDLED_IN = "@cross-deck/node@1.5.
|
|
4324
|
-
var SDK_VERSION2 = "1.5.
|
|
4394
|
+
var BUNDLED_IN = "@cross-deck/node@1.5.1";
|
|
4395
|
+
var SDK_VERSION2 = "1.5.1";
|
|
4325
4396
|
var BUNDLED_CONTRACTS = Object.freeze([
|
|
4397
|
+
{
|
|
4398
|
+
"id": "contract-failed-payload-schema-lock",
|
|
4399
|
+
"pillar": "diagnostics",
|
|
4400
|
+
"status": "enforced",
|
|
4401
|
+
"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.",
|
|
4402
|
+
"appliesTo": [
|
|
4403
|
+
"web",
|
|
4404
|
+
"node",
|
|
4405
|
+
"swift",
|
|
4406
|
+
"android",
|
|
4407
|
+
"react-native"
|
|
4408
|
+
],
|
|
4409
|
+
"allowedFields": {
|
|
4410
|
+
"required": [
|
|
4411
|
+
"contract_id",
|
|
4412
|
+
"sdk_version",
|
|
4413
|
+
"sdk_platform",
|
|
4414
|
+
"failure_reason",
|
|
4415
|
+
"run_context",
|
|
4416
|
+
"run_id"
|
|
4417
|
+
],
|
|
4418
|
+
"optional": [
|
|
4419
|
+
"test_file",
|
|
4420
|
+
"test_name",
|
|
4421
|
+
"device_class",
|
|
4422
|
+
"verification_phase"
|
|
4423
|
+
],
|
|
4424
|
+
"forbidden": [
|
|
4425
|
+
"anonymousId",
|
|
4426
|
+
"developerUserId",
|
|
4427
|
+
"crossdeckCustomerId",
|
|
4428
|
+
"email",
|
|
4429
|
+
"ip",
|
|
4430
|
+
"user_agent",
|
|
4431
|
+
"message",
|
|
4432
|
+
"stack",
|
|
4433
|
+
"stack_trace",
|
|
4434
|
+
"frames",
|
|
4435
|
+
"exception_message",
|
|
4436
|
+
"url",
|
|
4437
|
+
"path",
|
|
4438
|
+
"screen",
|
|
4439
|
+
"title",
|
|
4440
|
+
"label",
|
|
4441
|
+
"text",
|
|
4442
|
+
"ariaLabel",
|
|
4443
|
+
"accessibilityLabel",
|
|
4444
|
+
"contentDescription",
|
|
4445
|
+
"session_id",
|
|
4446
|
+
"sessionId"
|
|
4447
|
+
]
|
|
4448
|
+
},
|
|
4449
|
+
"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.",
|
|
4450
|
+
"codeRef": [
|
|
4451
|
+
"sdks/web/src/crossdeck.ts",
|
|
4452
|
+
"sdks/node/src/crossdeck-server.ts",
|
|
4453
|
+
"sdks/swift/Sources/Crossdeck/Crossdeck.swift",
|
|
4454
|
+
"sdks/swift/Sources/Crossdeck/_DiagnosticTelemetry.swift",
|
|
4455
|
+
"sdks/android/crossdeck/src/main/kotlin/com/crossdeck/Crossdeck.kt",
|
|
4456
|
+
"sdks/android/crossdeck/src/main/kotlin/com/crossdeck/_DiagnosticTelemetry.kt",
|
|
4457
|
+
"sdks/react-native/src/crossdeck.ts",
|
|
4458
|
+
"backend/src/api/v1-sdk-diagnostic.ts",
|
|
4459
|
+
"sdks/web/src/_diagnostic-telemetry.ts",
|
|
4460
|
+
"sdks/node/src/_diagnostic-telemetry.ts",
|
|
4461
|
+
"sdks/react-native/src/_diagnostic-telemetry.ts"
|
|
4462
|
+
],
|
|
4463
|
+
"testRef": [
|
|
4464
|
+
{
|
|
4465
|
+
"file": "sdks/web/tests/contract-failed-schema-lock.test.ts",
|
|
4466
|
+
"name": "reportContractFailure payload conforms to schema-lock"
|
|
4467
|
+
},
|
|
4468
|
+
{
|
|
4469
|
+
"file": "sdks/node/tests/contract-failed-schema-lock.test.ts",
|
|
4470
|
+
"name": "reportContractFailure payload conforms to schema-lock"
|
|
4471
|
+
},
|
|
4472
|
+
{
|
|
4473
|
+
"file": "sdks/swift/Tests/CrossdeckTests/ContractFailedSchemaLockTests.swift",
|
|
4474
|
+
"name": "test_reportContractFailure_payloadFieldsAreInAllowList"
|
|
4475
|
+
},
|
|
4476
|
+
{
|
|
4477
|
+
"file": "sdks/swift/Tests/CrossdeckTests/ContractFailedSchemaLockTests.swift",
|
|
4478
|
+
"name": "test_reportContractFailure_doesNotEnterCustomerTrackPipeline"
|
|
4479
|
+
},
|
|
4480
|
+
{
|
|
4481
|
+
"file": "sdks/android/crossdeck/src/test/kotlin/com/crossdeck/ContractFailedSchemaLockTest.kt",
|
|
4482
|
+
"name": "reportContractFailure payload conforms to schema-lock"
|
|
4483
|
+
},
|
|
4484
|
+
{
|
|
4485
|
+
"file": "sdks/android/crossdeck/src/test/kotlin/com/crossdeck/ContractFailedSchemaLockTest.kt",
|
|
4486
|
+
"name": "reportContractFailure does not enter customer track pipeline"
|
|
4487
|
+
},
|
|
4488
|
+
{
|
|
4489
|
+
"file": "sdks/react-native/tests/contract-failed-schema-lock.test.ts",
|
|
4490
|
+
"name": "reportContractFailure payload conforms to schema-lock"
|
|
4491
|
+
},
|
|
4492
|
+
{
|
|
4493
|
+
"file": "backend/tests/unit/v1-sdk-diagnostic.test.ts",
|
|
4494
|
+
"name": "forbidden fields are enumerated in the schema-lock contract"
|
|
4495
|
+
},
|
|
4496
|
+
{
|
|
4497
|
+
"file": "backend/tests/unit/v1-sdk-diagnostic.test.ts",
|
|
4498
|
+
"name": "required fields are enumerated in the schema-lock contract"
|
|
4499
|
+
},
|
|
4500
|
+
{
|
|
4501
|
+
"file": "backend/tests/unit/v1-sdk-diagnostic.test.ts",
|
|
4502
|
+
"name": "regression guard: never returns a raw IP"
|
|
4503
|
+
},
|
|
4504
|
+
{
|
|
4505
|
+
"file": "backend/tests/unit/v1-sdk-diagnostic.test.ts",
|
|
4506
|
+
"name": "verification_phase is in the optional field set"
|
|
4507
|
+
}
|
|
4508
|
+
],
|
|
4509
|
+
"registeredAt": "2026-05-27",
|
|
4510
|
+
"firstRegisteredIn": "Diagnostic telemetry single-fire + schema-lock \u2014 independent-controller flow",
|
|
4511
|
+
"privacyReferences": [
|
|
4512
|
+
"legal/privacy/index.html#sdk-diagnostic",
|
|
4513
|
+
"legal/customer-disclosure/index.html#flow-b",
|
|
4514
|
+
"legal/security/index.html#diagnostic",
|
|
4515
|
+
"legal/sdk-data/index.html#b-diagnostic"
|
|
4516
|
+
],
|
|
4517
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4518
|
+
},
|
|
4326
4519
|
{
|
|
4327
4520
|
"id": "documentation-honesty",
|
|
4328
4521
|
"pillar": "webhooks",
|
|
@@ -4353,7 +4546,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4353
4546
|
],
|
|
4354
4547
|
"registeredAt": "2026-05-26",
|
|
4355
4548
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 7.1",
|
|
4356
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4549
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4357
4550
|
},
|
|
4358
4551
|
{
|
|
4359
4552
|
"id": "error-envelope-shape",
|
|
@@ -4392,7 +4585,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4392
4585
|
],
|
|
4393
4586
|
"registeredAt": "2026-05-26",
|
|
4394
4587
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 8 (codifies existing contract)",
|
|
4395
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4588
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4396
4589
|
},
|
|
4397
4590
|
{
|
|
4398
4591
|
"id": "flush-interval-parity",
|
|
@@ -4437,7 +4630,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4437
4630
|
],
|
|
4438
4631
|
"registeredAt": "2026-05-26",
|
|
4439
4632
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.3",
|
|
4440
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4633
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4441
4634
|
},
|
|
4442
4635
|
{
|
|
4443
4636
|
"id": "idempotency-key-deterministic",
|
|
@@ -4542,7 +4735,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4542
4735
|
],
|
|
4543
4736
|
"registeredAt": "2026-05-26",
|
|
4544
4737
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 2.2.a + 2.2.b + 2.2.c",
|
|
4545
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4738
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4546
4739
|
},
|
|
4547
4740
|
{
|
|
4548
4741
|
"id": "node-pii-scrubber",
|
|
@@ -4581,7 +4774,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4581
4774
|
],
|
|
4582
4775
|
"registeredAt": "2026-05-26",
|
|
4583
4776
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.1",
|
|
4584
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4777
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4585
4778
|
},
|
|
4586
4779
|
{
|
|
4587
4780
|
"id": "node-shutdown-awaits-flush",
|
|
@@ -4614,7 +4807,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4614
4807
|
],
|
|
4615
4808
|
"registeredAt": "2026-05-26",
|
|
4616
4809
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 5.4",
|
|
4617
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4810
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4618
4811
|
},
|
|
4619
4812
|
{
|
|
4620
4813
|
"id": "sdk-error-codes-catalogue",
|
|
@@ -4654,7 +4847,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4654
4847
|
],
|
|
4655
4848
|
"registeredAt": "2026-05-26",
|
|
4656
4849
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 6.2",
|
|
4657
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4850
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4658
4851
|
},
|
|
4659
4852
|
{
|
|
4660
4853
|
"id": "sync-purchases-funnel-parity",
|
|
@@ -4687,7 +4880,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4687
4880
|
],
|
|
4688
4881
|
"registeredAt": "2026-05-26",
|
|
4689
4882
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.5",
|
|
4690
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4883
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4691
4884
|
},
|
|
4692
4885
|
{
|
|
4693
4886
|
"id": "verifier-timestamp-mandatory",
|
|
@@ -4741,7 +4934,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4741
4934
|
],
|
|
4742
4935
|
"registeredAt": "2026-05-26",
|
|
4743
4936
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 7.2",
|
|
4744
|
-
"bundledIn": "@cross-deck/node@1.5.
|
|
4937
|
+
"bundledIn": "@cross-deck/node@1.5.1"
|
|
4745
4938
|
}
|
|
4746
4939
|
]);
|
|
4747
4940
|
|