@cross-deck/node 1.10.1 → 1.11.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 +15 -0
- package/dist/auto-events/index.d.mts +1 -1
- package/dist/auto-events/index.d.ts +1 -1
- package/dist/{crossdeck-server-BpBVFC4O.d.mts → crossdeck-server-DAQX_7rm.d.mts} +18 -2
- package/dist/{crossdeck-server-BpBVFC4O.d.ts → crossdeck-server-DAQX_7rm.d.ts} +18 -2
- package/dist/index.cjs +19 -15
- 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 +19 -15
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.11.0] — 2026-06-30
|
|
10
|
+
|
|
11
|
+
**Added — block `reference` and `supportEmail` on the trust surface (still v2 preview).**
|
|
12
|
+
`resolve()` and `gate()` now surface two fields on a block:
|
|
13
|
+
|
|
14
|
+
- `reference` — a short, opaque, human-quotable support handle (the "Ray ID", `xxxx-xxxx`).
|
|
15
|
+
Show it on your suspended screen; Crossdeck stores the same string on the block event, so
|
|
16
|
+
support resolves a quoted reference to the exact block in the admin Caught feed.
|
|
17
|
+
- `supportEmail` — the email you registered with Crossdeck at signup, so your suspended
|
|
18
|
+
screen's "Contact support" reaches the real operator by default instead of a placeholder.
|
|
19
|
+
|
|
20
|
+
Both were typed on `ResolveResult` / `GateVerdict` but the client previously **dropped**
|
|
21
|
+
them when building the result object — now passed through. Additive, non-breaking. Opaque +
|
|
22
|
+
non-PII (never the score or rule logic).
|
|
23
|
+
|
|
9
24
|
## [1.10.1] — 2026-06-30
|
|
10
25
|
|
|
11
26
|
**Fixed — the blocking surface now works for the documented paths (still v2 preview).**
|
|
@@ -183,8 +183,8 @@ declare const CrossdeckContracts: {
|
|
|
183
183
|
readonly byId: (id: string) => Contract | undefined;
|
|
184
184
|
readonly byPillar: (pillar: ContractPillar) => readonly Contract[];
|
|
185
185
|
readonly withStatus: (status: ContractStatus) => readonly Contract[];
|
|
186
|
-
readonly sdkVersion: "1.
|
|
187
|
-
readonly bundledIn: "@cross-deck/node@1.
|
|
186
|
+
readonly sdkVersion: "1.11.0";
|
|
187
|
+
readonly bundledIn: "@cross-deck/node@1.11.0";
|
|
188
188
|
/**
|
|
189
189
|
* Resolve a failing test back to the contract it exercises.
|
|
190
190
|
* Used by test-framework hooks to find the contract id of a
|
|
@@ -472,6 +472,18 @@ interface BlockVerdict {
|
|
|
472
472
|
blockReason: string | null;
|
|
473
473
|
/** The exact rule that fired: `"domain:spartan.net"` | `"ip:1.2.3.4"` | `"manual"` | null. */
|
|
474
474
|
blockedKey: string | null;
|
|
475
|
+
/**
|
|
476
|
+
* Human-quotable support handle for this verdict (the "Ray ID"), formatted `xxxx-xxxx`.
|
|
477
|
+
* Show it on your suspended screen ("reference: blocklist:domain · a1f9-7c2e"); Crossdeck
|
|
478
|
+
* stores the same string on the block event, so support resolves it in the Caught feed.
|
|
479
|
+
*/
|
|
480
|
+
reference?: string | null;
|
|
481
|
+
/**
|
|
482
|
+
* The recorded support contact (the project owner's signup email), present only when
|
|
483
|
+
* blocked — render it as the suspended screen's "Contact support" so appeals reach the
|
|
484
|
+
* real operator by default. Override with a dedicated address if you have one.
|
|
485
|
+
*/
|
|
486
|
+
supportEmail?: string | null;
|
|
475
487
|
/**
|
|
476
488
|
* True when this is the fail-open default (Crossdeck unreachable / identity unresolved).
|
|
477
489
|
* `blocked` is `false`; log it for observability, never treat it as a real "not blocked".
|
|
@@ -546,6 +558,10 @@ interface GateVerdict {
|
|
|
546
558
|
blockReason: string | null;
|
|
547
559
|
/** The exact rule/key that fired, when blocked. */
|
|
548
560
|
blockedKey: string | null;
|
|
561
|
+
/** Human-quotable support handle (the "Ray ID"), formatted `xxxx-xxxx` — show it on the blocked screen. */
|
|
562
|
+
reference?: string | null;
|
|
563
|
+
/** Recorded support contact (project owner's signup email), present only on `block` — the blocked screen's "Contact support" default. */
|
|
564
|
+
supportEmail?: string | null;
|
|
549
565
|
/** True when this is the fail-open default (Crossdeck unreachable). `allow` is `true`. */
|
|
550
566
|
degraded?: boolean;
|
|
551
567
|
}
|
|
@@ -183,8 +183,8 @@ declare const CrossdeckContracts: {
|
|
|
183
183
|
readonly byId: (id: string) => Contract | undefined;
|
|
184
184
|
readonly byPillar: (pillar: ContractPillar) => readonly Contract[];
|
|
185
185
|
readonly withStatus: (status: ContractStatus) => readonly Contract[];
|
|
186
|
-
readonly sdkVersion: "1.
|
|
187
|
-
readonly bundledIn: "@cross-deck/node@1.
|
|
186
|
+
readonly sdkVersion: "1.11.0";
|
|
187
|
+
readonly bundledIn: "@cross-deck/node@1.11.0";
|
|
188
188
|
/**
|
|
189
189
|
* Resolve a failing test back to the contract it exercises.
|
|
190
190
|
* Used by test-framework hooks to find the contract id of a
|
|
@@ -472,6 +472,18 @@ interface BlockVerdict {
|
|
|
472
472
|
blockReason: string | null;
|
|
473
473
|
/** The exact rule that fired: `"domain:spartan.net"` | `"ip:1.2.3.4"` | `"manual"` | null. */
|
|
474
474
|
blockedKey: string | null;
|
|
475
|
+
/**
|
|
476
|
+
* Human-quotable support handle for this verdict (the "Ray ID"), formatted `xxxx-xxxx`.
|
|
477
|
+
* Show it on your suspended screen ("reference: blocklist:domain · a1f9-7c2e"); Crossdeck
|
|
478
|
+
* stores the same string on the block event, so support resolves it in the Caught feed.
|
|
479
|
+
*/
|
|
480
|
+
reference?: string | null;
|
|
481
|
+
/**
|
|
482
|
+
* The recorded support contact (the project owner's signup email), present only when
|
|
483
|
+
* blocked — render it as the suspended screen's "Contact support" so appeals reach the
|
|
484
|
+
* real operator by default. Override with a dedicated address if you have one.
|
|
485
|
+
*/
|
|
486
|
+
supportEmail?: string | null;
|
|
475
487
|
/**
|
|
476
488
|
* True when this is the fail-open default (Crossdeck unreachable / identity unresolved).
|
|
477
489
|
* `blocked` is `false`; log it for observability, never treat it as a real "not blocked".
|
|
@@ -546,6 +558,10 @@ interface GateVerdict {
|
|
|
546
558
|
blockReason: string | null;
|
|
547
559
|
/** The exact rule/key that fired, when blocked. */
|
|
548
560
|
blockedKey: string | null;
|
|
561
|
+
/** Human-quotable support handle (the "Ray ID"), formatted `xxxx-xxxx` — show it on the blocked screen. */
|
|
562
|
+
reference?: string | null;
|
|
563
|
+
/** Recorded support contact (project owner's signup email), present only on `block` — the blocked screen's "Contact support" default. */
|
|
564
|
+
supportEmail?: string | null;
|
|
549
565
|
/** True when this is the fail-open default (Crossdeck unreachable). `allow` is `true`. */
|
|
550
566
|
degraded?: boolean;
|
|
551
567
|
}
|
package/dist/index.cjs
CHANGED
|
@@ -387,7 +387,7 @@ function byteLength(s) {
|
|
|
387
387
|
var https = __toESM(require("https"));
|
|
388
388
|
|
|
389
389
|
// src/_version.ts
|
|
390
|
-
var SDK_VERSION = "1.
|
|
390
|
+
var SDK_VERSION = "1.11.0";
|
|
391
391
|
var SDK_NAME = "@cross-deck/node";
|
|
392
392
|
|
|
393
393
|
// src/_diagnostic-telemetry.ts
|
|
@@ -3207,6 +3207,8 @@ var CrossdeckServer = class extends import_node_events.EventEmitter {
|
|
|
3207
3207
|
blocked: raw.blocked === true,
|
|
3208
3208
|
blockReason: raw.blockReason ?? null,
|
|
3209
3209
|
blockedKey: raw.blockedKey ?? null,
|
|
3210
|
+
reference: raw.reference ?? null,
|
|
3211
|
+
supportEmail: raw.supportEmail ?? null,
|
|
3210
3212
|
status: typeof raw.status === "string" ? raw.status : "active",
|
|
3211
3213
|
entitlements: Array.isArray(raw.entitlements) ? raw.entitlements.filter((e) => typeof e === "string") : [],
|
|
3212
3214
|
crossdeckCustomerId: raw.crossdeckCustomerId ?? raw.user?.id ?? null,
|
|
@@ -3316,7 +3318,9 @@ var CrossdeckServer = class extends import_node_events.EventEmitter {
|
|
|
3316
3318
|
action,
|
|
3317
3319
|
allow: raw.allow !== false && action !== "block",
|
|
3318
3320
|
blockReason: raw.blockReason ?? null,
|
|
3319
|
-
blockedKey: raw.blockedKey ?? null
|
|
3321
|
+
blockedKey: raw.blockedKey ?? null,
|
|
3322
|
+
reference: raw.reference ?? null,
|
|
3323
|
+
supportEmail: raw.supportEmail ?? null
|
|
3320
3324
|
};
|
|
3321
3325
|
} catch (err) {
|
|
3322
3326
|
this.debug.emit(
|
|
@@ -4774,8 +4778,8 @@ function normaliseSecrets(input) {
|
|
|
4774
4778
|
}
|
|
4775
4779
|
|
|
4776
4780
|
// src/_contracts-bundled.ts
|
|
4777
|
-
var BUNDLED_IN = "@cross-deck/node@1.
|
|
4778
|
-
var SDK_VERSION2 = "1.
|
|
4781
|
+
var BUNDLED_IN = "@cross-deck/node@1.11.0";
|
|
4782
|
+
var SDK_VERSION2 = "1.11.0";
|
|
4779
4783
|
var BUNDLED_CONTRACTS = Object.freeze([
|
|
4780
4784
|
{
|
|
4781
4785
|
"id": "contract-failed-payload-schema-lock",
|
|
@@ -4897,7 +4901,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4897
4901
|
"legal/security/index.html#diagnostic",
|
|
4898
4902
|
"legal/sdk-data/index.html#b-diagnostic"
|
|
4899
4903
|
],
|
|
4900
|
-
"bundledIn": "@cross-deck/node@1.
|
|
4904
|
+
"bundledIn": "@cross-deck/node@1.11.0"
|
|
4901
4905
|
},
|
|
4902
4906
|
{
|
|
4903
4907
|
"id": "documentation-honesty",
|
|
@@ -4929,7 +4933,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4929
4933
|
],
|
|
4930
4934
|
"registeredAt": "2026-05-26",
|
|
4931
4935
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 7.1",
|
|
4932
|
-
"bundledIn": "@cross-deck/node@1.
|
|
4936
|
+
"bundledIn": "@cross-deck/node@1.11.0"
|
|
4933
4937
|
},
|
|
4934
4938
|
{
|
|
4935
4939
|
"id": "error-envelope-shape",
|
|
@@ -4968,7 +4972,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
4968
4972
|
],
|
|
4969
4973
|
"registeredAt": "2026-05-26",
|
|
4970
4974
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 8 (codifies existing contract)",
|
|
4971
|
-
"bundledIn": "@cross-deck/node@1.
|
|
4975
|
+
"bundledIn": "@cross-deck/node@1.11.0"
|
|
4972
4976
|
},
|
|
4973
4977
|
{
|
|
4974
4978
|
"id": "flush-interval-parity",
|
|
@@ -5013,7 +5017,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
5013
5017
|
],
|
|
5014
5018
|
"registeredAt": "2026-05-26",
|
|
5015
5019
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.3",
|
|
5016
|
-
"bundledIn": "@cross-deck/node@1.
|
|
5020
|
+
"bundledIn": "@cross-deck/node@1.11.0"
|
|
5017
5021
|
},
|
|
5018
5022
|
{
|
|
5019
5023
|
"id": "idempotency-key-deterministic",
|
|
@@ -5118,7 +5122,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
5118
5122
|
],
|
|
5119
5123
|
"registeredAt": "2026-05-26",
|
|
5120
5124
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 2.2.a + 2.2.b + 2.2.c",
|
|
5121
|
-
"bundledIn": "@cross-deck/node@1.
|
|
5125
|
+
"bundledIn": "@cross-deck/node@1.11.0"
|
|
5122
5126
|
},
|
|
5123
5127
|
{
|
|
5124
5128
|
"id": "invalid-input-rejected-natively",
|
|
@@ -5174,7 +5178,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
5174
5178
|
],
|
|
5175
5179
|
"registeredAt": "2026-06-11",
|
|
5176
5180
|
"firstRegisteredIn": "swift trap-on-input class fix \u2014 first machine-tested Swift release",
|
|
5177
|
-
"bundledIn": "@cross-deck/node@1.
|
|
5181
|
+
"bundledIn": "@cross-deck/node@1.11.0"
|
|
5178
5182
|
},
|
|
5179
5183
|
{
|
|
5180
5184
|
"id": "node-pii-scrubber",
|
|
@@ -5213,7 +5217,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
5213
5217
|
],
|
|
5214
5218
|
"registeredAt": "2026-05-26",
|
|
5215
5219
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.1",
|
|
5216
|
-
"bundledIn": "@cross-deck/node@1.
|
|
5220
|
+
"bundledIn": "@cross-deck/node@1.11.0"
|
|
5217
5221
|
},
|
|
5218
5222
|
{
|
|
5219
5223
|
"id": "node-shutdown-awaits-flush",
|
|
@@ -5246,7 +5250,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
5246
5250
|
],
|
|
5247
5251
|
"registeredAt": "2026-05-26",
|
|
5248
5252
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 5.4",
|
|
5249
|
-
"bundledIn": "@cross-deck/node@1.
|
|
5253
|
+
"bundledIn": "@cross-deck/node@1.11.0"
|
|
5250
5254
|
},
|
|
5251
5255
|
{
|
|
5252
5256
|
"id": "sdk-error-codes-catalogue",
|
|
@@ -5291,7 +5295,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
5291
5295
|
],
|
|
5292
5296
|
"registeredAt": "2026-05-26",
|
|
5293
5297
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 6.2",
|
|
5294
|
-
"bundledIn": "@cross-deck/node@1.
|
|
5298
|
+
"bundledIn": "@cross-deck/node@1.11.0"
|
|
5295
5299
|
},
|
|
5296
5300
|
{
|
|
5297
5301
|
"id": "sync-purchases-funnel-parity",
|
|
@@ -5324,7 +5328,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
5324
5328
|
],
|
|
5325
5329
|
"registeredAt": "2026-05-26",
|
|
5326
5330
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.5",
|
|
5327
|
-
"bundledIn": "@cross-deck/node@1.
|
|
5331
|
+
"bundledIn": "@cross-deck/node@1.11.0"
|
|
5328
5332
|
},
|
|
5329
5333
|
{
|
|
5330
5334
|
"id": "verifier-timestamp-mandatory",
|
|
@@ -5378,7 +5382,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
5378
5382
|
],
|
|
5379
5383
|
"registeredAt": "2026-05-26",
|
|
5380
5384
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 7.2",
|
|
5381
|
-
"bundledIn": "@cross-deck/node@1.
|
|
5385
|
+
"bundledIn": "@cross-deck/node@1.11.0"
|
|
5382
5386
|
}
|
|
5383
5387
|
]);
|
|
5384
5388
|
|