@cross-deck/web 1.6.3 → 1.7.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 +46 -29
- package/dist/contracts.json +12 -12
- package/dist/crossdeck.umd.min.js +2 -2
- package/dist/crossdeck.umd.min.js.map +1 -1
- package/dist/error-codes.json +1 -1
- package/dist/index.cjs +110 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.mjs +110 -23
- package/dist/index.mjs.map +1 -1
- package/dist/react.cjs +99 -12
- package/dist/react.cjs.map +1 -1
- package/dist/react.mjs +99 -12
- package/dist/react.mjs.map +1 -1
- package/dist/vue.cjs +99 -12
- package/dist/vue.cjs.map +1 -1
- package/dist/vue.mjs +99 -12
- package/dist/vue.mjs.map +1 -1
- package/package.json +1 -1
package/dist/error-codes.json
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -99,7 +99,7 @@ function typeMapForStatus(status) {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
// src/_version.ts
|
|
102
|
-
var SDK_VERSION = "1.
|
|
102
|
+
var SDK_VERSION = "1.7.0";
|
|
103
103
|
var SDK_NAME = "@cross-deck/web";
|
|
104
104
|
|
|
105
105
|
// src/http.ts
|
|
@@ -1015,9 +1015,13 @@ var EventQueue = class {
|
|
|
1015
1015
|
const env = this.cfg.envelope();
|
|
1016
1016
|
const result = await this.cfg.http.request("POST", "/events", {
|
|
1017
1017
|
body: {
|
|
1018
|
-
//
|
|
1019
|
-
//
|
|
1020
|
-
//
|
|
1018
|
+
// Event Envelope v1 batch envelope (backend/docs/
|
|
1019
|
+
// event-envelope-spec-v1.md §1). `envelopeVersion` is the
|
|
1020
|
+
// schema/wire version the server parses against ("can I parse
|
|
1021
|
+
// this?") and is DISTINCT from `sdk.version` ("which build is in
|
|
1022
|
+
// the wild?") — two questions, two fields, never conflated. The
|
|
1023
|
+
// backend refuses payloads with a missing/unknown envelopeVersion.
|
|
1024
|
+
envelopeVersion: 1,
|
|
1021
1025
|
appId: env.appId,
|
|
1022
1026
|
environment: env.environment,
|
|
1023
1027
|
sdk: env.sdk,
|
|
@@ -1472,6 +1476,15 @@ var AutoTracker = class {
|
|
|
1472
1476
|
this.cleanups = [];
|
|
1473
1477
|
/** Last time we flushed lastActivityAt to storage (throttle gate). */
|
|
1474
1478
|
this.lastPersistAt = 0;
|
|
1479
|
+
/**
|
|
1480
|
+
* Event Envelope v1 §3 — per-session monotonic sequence counter.
|
|
1481
|
+
* The single owner of the seq counter lives here, alongside all other
|
|
1482
|
+
* session state. Incremented atomically at track() time (via nextSeq()),
|
|
1483
|
+
* reset to 0 whenever a new session boundary is crossed (startNewSession
|
|
1484
|
+
* path + resetSession). Persists across background/foreground within a
|
|
1485
|
+
* session — only a real session boundary (not a tab hide/show) resets it.
|
|
1486
|
+
*/
|
|
1487
|
+
this._sessionSeq = 0;
|
|
1475
1488
|
/**
|
|
1476
1489
|
* Stable per-page-view identifier. Minted at every `page.viewed`
|
|
1477
1490
|
* emission and attached to every subsequent event until the next
|
|
@@ -1556,6 +1569,20 @@ var AutoTracker = class {
|
|
|
1556
1569
|
get currentAcquisition() {
|
|
1557
1570
|
return this.session?.acquisition ?? EMPTY_ACQUISITION;
|
|
1558
1571
|
}
|
|
1572
|
+
/**
|
|
1573
|
+
* Event Envelope v1 §3 — return the next seq value for the current session
|
|
1574
|
+
* and advance the counter. Called SYNCHRONOUSLY at track() time, before any
|
|
1575
|
+
* async dispatch, so the seq assignment order is deterministic (call order,
|
|
1576
|
+
* not scheduler luck). The counter is reset to 0 at every session boundary;
|
|
1577
|
+
* it is NOT reset by tab hide/show (spec §3 clause 1: backgrounding does not
|
|
1578
|
+
* reset seq). When no session is active (Node, before init, after uninstall),
|
|
1579
|
+
* returns 0 and leaves the counter unchanged — fallback, not an error.
|
|
1580
|
+
*/
|
|
1581
|
+
nextSeq() {
|
|
1582
|
+
const seq = this._sessionSeq;
|
|
1583
|
+
this._sessionSeq += 1;
|
|
1584
|
+
return seq;
|
|
1585
|
+
}
|
|
1559
1586
|
// ---------- sessions ----------
|
|
1560
1587
|
installSessionTracking() {
|
|
1561
1588
|
const now = Date.now();
|
|
@@ -1607,6 +1634,7 @@ var AutoTracker = class {
|
|
|
1607
1634
|
}
|
|
1608
1635
|
startNewSession() {
|
|
1609
1636
|
const now = Date.now();
|
|
1637
|
+
this._sessionSeq = 0;
|
|
1610
1638
|
return {
|
|
1611
1639
|
sessionId: mintSessionId(),
|
|
1612
1640
|
startedAt: now,
|
|
@@ -2335,6 +2363,40 @@ function writeJson(storage, key, value) {
|
|
|
2335
2363
|
}
|
|
2336
2364
|
}
|
|
2337
2365
|
|
|
2366
|
+
// src/internal-opt-out.ts
|
|
2367
|
+
var INTERNAL_OPT_OUT_PROPERTY = "$crossdeck_internal";
|
|
2368
|
+
var STORAGE_KEY = "crossdeck.internalOptOut";
|
|
2369
|
+
function localStore() {
|
|
2370
|
+
try {
|
|
2371
|
+
return typeof localStorage !== "undefined" ? localStorage : null;
|
|
2372
|
+
} catch {
|
|
2373
|
+
return null;
|
|
2374
|
+
}
|
|
2375
|
+
}
|
|
2376
|
+
function processInternalOptOutUrl() {
|
|
2377
|
+
try {
|
|
2378
|
+
const search = typeof location !== "undefined" ? location.search : "";
|
|
2379
|
+
const params = new URLSearchParams(search || "");
|
|
2380
|
+
if (!params.has("crossdeck_internal")) return;
|
|
2381
|
+
const store = localStore();
|
|
2382
|
+
if (!store) return;
|
|
2383
|
+
const v = params.get("crossdeck_internal");
|
|
2384
|
+
if (v === "1" || v === "true") {
|
|
2385
|
+
store.setItem(STORAGE_KEY, "1");
|
|
2386
|
+
} else if (v === "0" || v === "false") {
|
|
2387
|
+
store.removeItem(STORAGE_KEY);
|
|
2388
|
+
}
|
|
2389
|
+
} catch {
|
|
2390
|
+
}
|
|
2391
|
+
}
|
|
2392
|
+
function isInternalOptOut() {
|
|
2393
|
+
try {
|
|
2394
|
+
return localStore()?.getItem(STORAGE_KEY) === "1";
|
|
2395
|
+
} catch {
|
|
2396
|
+
return false;
|
|
2397
|
+
}
|
|
2398
|
+
}
|
|
2399
|
+
|
|
2338
2400
|
// src/web-vitals.ts
|
|
2339
2401
|
var WebVitalsTracker = class {
|
|
2340
2402
|
constructor(cfg, report) {
|
|
@@ -3695,18 +3757,18 @@ function isInAppFrame(filename) {
|
|
|
3695
3757
|
if (/\/crossdeck\.umd\.min\.js$/.test(filename)) return false;
|
|
3696
3758
|
return true;
|
|
3697
3759
|
}
|
|
3698
|
-
function fingerprintError(message, frames,
|
|
3760
|
+
function fingerprintError(message, frames, location2) {
|
|
3699
3761
|
const inAppFrames = frames.filter((f) => f.in_app).slice(0, 3);
|
|
3700
3762
|
const parts = [
|
|
3701
3763
|
(message || "").slice(0, 200),
|
|
3702
3764
|
...inAppFrames.map((f) => `${f.function}@${f.filename}:${f.lineno}`)
|
|
3703
3765
|
];
|
|
3704
|
-
if (inAppFrames.length === 0 &&
|
|
3766
|
+
if (inAppFrames.length === 0 && location2) {
|
|
3705
3767
|
const loc = [
|
|
3706
|
-
|
|
3707
|
-
|
|
3708
|
-
|
|
3709
|
-
|
|
3768
|
+
location2.errorType ?? "",
|
|
3769
|
+
location2.filename ?? "",
|
|
3770
|
+
location2.lineno ?? "",
|
|
3771
|
+
location2.colno ?? ""
|
|
3710
3772
|
].join(":");
|
|
3711
3773
|
if (loc !== ":::") parts.push(loc);
|
|
3712
3774
|
}
|
|
@@ -4552,6 +4614,7 @@ var CrossdeckClient = class {
|
|
|
4552
4614
|
persistIdentity ? effectiveStorage : new MemoryStorage(),
|
|
4553
4615
|
opts.storagePrefix
|
|
4554
4616
|
);
|
|
4617
|
+
processInternalOptOutUrl();
|
|
4555
4618
|
const consent = new ConsentManager({ respectDnt: options.respectDnt === true });
|
|
4556
4619
|
if (consent.isDntDenied) {
|
|
4557
4620
|
debug.emit(
|
|
@@ -5205,8 +5268,27 @@ var CrossdeckClient = class {
|
|
|
5205
5268
|
);
|
|
5206
5269
|
}
|
|
5207
5270
|
}
|
|
5271
|
+
const seq = s.autoTracker?.nextSeq() ?? 0;
|
|
5272
|
+
const occurrenceTimestamp = Date.now();
|
|
5208
5273
|
s.autoTracker?.markActivity();
|
|
5209
|
-
const
|
|
5274
|
+
const wireContext = {};
|
|
5275
|
+
const di = s.deviceInfo;
|
|
5276
|
+
if (di.os) wireContext.os = di.os;
|
|
5277
|
+
if (di.osVersion) wireContext.osVersion = di.osVersion;
|
|
5278
|
+
const appVer = s.options.appVersion;
|
|
5279
|
+
if (appVer) wireContext.appVersion = appVer;
|
|
5280
|
+
wireContext.sdkName = SDK_NAME;
|
|
5281
|
+
wireContext.sdkVersion = s.options.sdkVersion;
|
|
5282
|
+
if (di.locale) wireContext.locale = di.locale;
|
|
5283
|
+
if (di.timezone) wireContext.timezone = di.timezone;
|
|
5284
|
+
if (di.browser) wireContext.browser = di.browser;
|
|
5285
|
+
if (di.browserVersion) wireContext.browserVersion = di.browserVersion;
|
|
5286
|
+
const enriched = {};
|
|
5287
|
+
if (di.screenWidth !== void 0) enriched.screenWidth = di.screenWidth;
|
|
5288
|
+
if (di.screenHeight !== void 0) enriched.screenHeight = di.screenHeight;
|
|
5289
|
+
if (di.viewportWidth !== void 0) enriched.viewportWidth = di.viewportWidth;
|
|
5290
|
+
if (di.viewportHeight !== void 0) enriched.viewportHeight = di.viewportHeight;
|
|
5291
|
+
if (di.devicePixelRatio !== void 0) enriched.devicePixelRatio = di.devicePixelRatio;
|
|
5210
5292
|
const sessionId = s.autoTracker?.currentSessionId;
|
|
5211
5293
|
if (sessionId) enriched.sessionId = sessionId;
|
|
5212
5294
|
const pageviewId = s.autoTracker?.currentPageviewId;
|
|
@@ -5237,11 +5319,16 @@ var CrossdeckClient = class {
|
|
|
5237
5319
|
enriched.$groups = groupIds;
|
|
5238
5320
|
}
|
|
5239
5321
|
Object.assign(enriched, validation.properties);
|
|
5322
|
+
if (isInternalOptOut()) {
|
|
5323
|
+
enriched[INTERNAL_OPT_OUT_PROPERTY] = true;
|
|
5324
|
+
}
|
|
5240
5325
|
const finalProperties = s.scrubPii ? scrubPiiFromProperties(enriched) : enriched;
|
|
5241
5326
|
const event = {
|
|
5242
5327
|
eventId: this.mintEventId(),
|
|
5243
5328
|
name,
|
|
5244
|
-
timestamp:
|
|
5329
|
+
timestamp: occurrenceTimestamp,
|
|
5330
|
+
seq,
|
|
5331
|
+
context: wireContext,
|
|
5245
5332
|
properties: finalProperties
|
|
5246
5333
|
};
|
|
5247
5334
|
Object.assign(event, this.identityHintForEvent());
|
|
@@ -5596,8 +5683,8 @@ function installUnloadFlush(onUnload) {
|
|
|
5596
5683
|
}
|
|
5597
5684
|
|
|
5598
5685
|
// src/_contracts-bundled.ts
|
|
5599
|
-
var BUNDLED_IN = "@cross-deck/web@1.
|
|
5600
|
-
var SDK_VERSION2 = "1.
|
|
5686
|
+
var BUNDLED_IN = "@cross-deck/web@1.7.0";
|
|
5687
|
+
var SDK_VERSION2 = "1.7.0";
|
|
5601
5688
|
var BUNDLED_CONTRACTS = Object.freeze([
|
|
5602
5689
|
{
|
|
5603
5690
|
"id": "contract-failed-payload-schema-lock",
|
|
@@ -5719,7 +5806,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
5719
5806
|
"legal/security/index.html#diagnostic",
|
|
5720
5807
|
"legal/sdk-data/index.html#b-diagnostic"
|
|
5721
5808
|
],
|
|
5722
|
-
"bundledIn": "@cross-deck/web@1.
|
|
5809
|
+
"bundledIn": "@cross-deck/web@1.7.0",
|
|
5723
5810
|
"runtimeVerified": true
|
|
5724
5811
|
},
|
|
5725
5812
|
{
|
|
@@ -5759,7 +5846,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
5759
5846
|
],
|
|
5760
5847
|
"registeredAt": "2026-05-26",
|
|
5761
5848
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 8 (codifies existing contract)",
|
|
5762
|
-
"bundledIn": "@cross-deck/web@1.
|
|
5849
|
+
"bundledIn": "@cross-deck/web@1.7.0",
|
|
5763
5850
|
"runtimeVerified": true
|
|
5764
5851
|
},
|
|
5765
5852
|
{
|
|
@@ -5805,7 +5892,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
5805
5892
|
],
|
|
5806
5893
|
"registeredAt": "2026-05-26",
|
|
5807
5894
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.3",
|
|
5808
|
-
"bundledIn": "@cross-deck/web@1.
|
|
5895
|
+
"bundledIn": "@cross-deck/web@1.7.0",
|
|
5809
5896
|
"runtimeVerified": true
|
|
5810
5897
|
},
|
|
5811
5898
|
{
|
|
@@ -5911,7 +5998,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
5911
5998
|
],
|
|
5912
5999
|
"registeredAt": "2026-05-26",
|
|
5913
6000
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 2.2.a + 2.2.b + 2.2.c",
|
|
5914
|
-
"bundledIn": "@cross-deck/web@1.
|
|
6001
|
+
"bundledIn": "@cross-deck/web@1.7.0",
|
|
5915
6002
|
"runtimeVerified": true
|
|
5916
6003
|
},
|
|
5917
6004
|
{
|
|
@@ -5939,7 +6026,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
5939
6026
|
],
|
|
5940
6027
|
"registeredAt": "2026-05-26",
|
|
5941
6028
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 5.5",
|
|
5942
|
-
"bundledIn": "@cross-deck/web@1.
|
|
6029
|
+
"bundledIn": "@cross-deck/web@1.7.0",
|
|
5943
6030
|
"runtimeVerified": false
|
|
5944
6031
|
},
|
|
5945
6032
|
{
|
|
@@ -6019,7 +6106,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
6019
6106
|
],
|
|
6020
6107
|
"registeredAt": "2026-05-26",
|
|
6021
6108
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 1.3 (web/RN) + dogfood-gap fix (swift + android)",
|
|
6022
|
-
"bundledIn": "@cross-deck/web@1.
|
|
6109
|
+
"bundledIn": "@cross-deck/web@1.7.0",
|
|
6023
6110
|
"runtimeVerified": true
|
|
6024
6111
|
},
|
|
6025
6112
|
{
|
|
@@ -6065,7 +6152,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
6065
6152
|
],
|
|
6066
6153
|
"registeredAt": "2026-05-26",
|
|
6067
6154
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 6.2",
|
|
6068
|
-
"bundledIn": "@cross-deck/web@1.
|
|
6155
|
+
"bundledIn": "@cross-deck/web@1.7.0",
|
|
6069
6156
|
"runtimeVerified": true
|
|
6070
6157
|
},
|
|
6071
6158
|
{
|
|
@@ -6107,7 +6194,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
6107
6194
|
],
|
|
6108
6195
|
"registeredAt": "2026-05-26",
|
|
6109
6196
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.2",
|
|
6110
|
-
"bundledIn": "@cross-deck/web@1.
|
|
6197
|
+
"bundledIn": "@cross-deck/web@1.7.0",
|
|
6111
6198
|
"runtimeVerified": true
|
|
6112
6199
|
},
|
|
6113
6200
|
{
|
|
@@ -6141,7 +6228,7 @@ var BUNDLED_CONTRACTS = Object.freeze([
|
|
|
6141
6228
|
],
|
|
6142
6229
|
"registeredAt": "2026-05-26",
|
|
6143
6230
|
"firstRegisteredIn": "bank-grade reconciliation v1.4.0 \u2014 phase 3.5",
|
|
6144
|
-
"bundledIn": "@cross-deck/web@1.
|
|
6231
|
+
"bundledIn": "@cross-deck/web@1.7.0",
|
|
6145
6232
|
"runtimeVerified": false
|
|
6146
6233
|
}
|
|
6147
6234
|
]);
|