@wireai/activation 0.14.3 → 0.15.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/AGENTS.md +1 -1
- package/CHANGELOG.md +73 -0
- package/README.md +11 -7
- package/dist/analytics/index.d.mts +5 -5
- package/dist/analytics/index.d.ts +5 -5
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/index.mjs.map +1 -1
- package/dist/coachmarks/index.d.mts +1 -1
- package/dist/coachmarks/index.d.ts +1 -1
- package/dist/coachmarks/index.js +47 -2
- package/dist/coachmarks/index.js.map +1 -1
- package/dist/coachmarks/index.mjs +47 -2
- package/dist/coachmarks/index.mjs.map +1 -1
- package/dist/{currentSession-CW_5Mq4O.d.ts → currentSession-CFSRZ2wg.d.ts} +10 -4
- package/dist/{currentSession-CUvTOchb.d.mts → currentSession-orZy5p1e.d.mts} +10 -4
- package/dist/{decision-Bgo17oH7.d.mts → decision-3vWLuBlO.d.ts} +11 -2
- package/dist/{decision-Bkh_LigV.d.ts → decision-yBj2AyPW.d.mts} +11 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/questionnaire/index.d.mts +3 -3
- package/dist/questionnaire/index.d.ts +3 -3
- package/dist/questionnaire/index.js +48 -3
- package/dist/questionnaire/index.js.map +1 -1
- package/dist/questionnaire/index.mjs +48 -3
- package/dist/questionnaire/index.mjs.map +1 -1
- package/dist/reviews/index.d.mts +10 -6
- package/dist/reviews/index.d.ts +10 -6
- package/dist/reviews/index.js +167 -18
- package/dist/reviews/index.js.map +1 -1
- package/dist/reviews/index.mjs +167 -18
- package/dist/reviews/index.mjs.map +1 -1
- package/dist/showcase/index.d.mts +1 -1
- package/dist/showcase/index.d.ts +1 -1
- package/dist/showcase/index.js +47 -2
- package/dist/showcase/index.js.map +1 -1
- package/dist/showcase/index.mjs +47 -2
- package/dist/showcase/index.mjs.map +1 -1
- package/dist/{transport-j5gFfJhK.d.mts → transport-s5QxA-ci.d.mts} +18 -13
- package/dist/{transport-B_0SgCBe.d.ts → transport-xqqSFqxs.d.ts} +18 -13
- package/dist/{types-Cju-1_jT.d.mts → types-Byx306Kv.d.mts} +25 -10
- package/dist/{types-BcmagF6K.d.mts → types-D_0B0yay.d.mts} +7 -2
- package/dist/{types-BcmagF6K.d.ts → types-D_0B0yay.d.ts} +7 -2
- package/dist/{types-h2BZvl1t.d.ts → types-tdATL5z0.d.ts} +25 -10
- package/package.json +1 -1
- package/src/WireOnboarding.tsx +4 -1
- package/src/coachmarks/runtime.ts +103 -2
- package/src/coachmarks/types.ts +7 -2
- package/src/context/deviceId.ts +32 -0
- package/src/reviews/ReviewGate.tsx +86 -37
- package/src/reviews/decision.ts +11 -1
- package/src/reviews/idempotency.ts +71 -0
- package/src/reviews/index.ts +4 -2
- package/src/reviews/runtime.ts +5 -3
- package/src/reviews/transport.ts +17 -12
- package/src/reviews/types.ts +7 -0
- package/src/types.ts +10 -4
- package/src/utils/submitResult.ts +17 -9
package/dist/showcase/index.mjs
CHANGED
|
@@ -383,9 +383,54 @@ var getCoachmarkStorage = () => coachmarkRuntime().storage;
|
|
|
383
383
|
var isCoachmarkTesting = () => coachmarkRuntime().testing;
|
|
384
384
|
var showcaseGateKey = (showcaseId) => `wire_showcase_${showcaseId}_seen`;
|
|
385
385
|
var SEEN_VALUE = "1";
|
|
386
|
+
var GATE_PROBE_KEY = "wire_gate_probe";
|
|
387
|
+
var ASYNC_GATE_STORAGE_WARNED_SLOT = /* @__PURE__ */ Symbol.for(
|
|
388
|
+
"@wireai/activation:asyncGateStorageWarned"
|
|
389
|
+
);
|
|
390
|
+
var asyncGateWarnGlobal = globalThis;
|
|
391
|
+
var closedGateStorage = Object.freeze({
|
|
392
|
+
getItem: () => SEEN_VALUE,
|
|
393
|
+
setItem: () => {
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
var syncGateAdapters = /* @__PURE__ */ new WeakSet();
|
|
397
|
+
var asyncGateAdapters = /* @__PURE__ */ new WeakSet();
|
|
398
|
+
var warnAsyncGateStorage = () => {
|
|
399
|
+
if (asyncGateWarnGlobal[ASYNC_GATE_STORAGE_WARNED_SLOT]) return;
|
|
400
|
+
if (typeof __DEV__ === "undefined" || !__DEV__) return;
|
|
401
|
+
if (typeof console === "undefined" || !console.warn) return;
|
|
402
|
+
asyncGateWarnGlobal[ASYNC_GATE_STORAGE_WARNED_SLOT] = true;
|
|
403
|
+
console.warn(
|
|
404
|
+
"[wireai] the gate storage's getItem returned a Promise \u2014 an async adapter (e.g. AsyncStorage) cannot drive the once-per-user gates, so coachmark tours, showcases and the review/questionnaire gates are all DISABLED (fail closed: nothing shows, nothing fires) until a synchronous adapter is provided. Pass a sync adapter (e.g. MMKV: `{ getItem: (k) => mmkv.getString(k) ?? null, setItem: (k, v) => mmkv.set(k, v) }`) to CoachmarkProvider or the gate's `storage` prop."
|
|
405
|
+
);
|
|
406
|
+
};
|
|
407
|
+
var validateGateStorage = (storage) => {
|
|
408
|
+
if (!storage) return null;
|
|
409
|
+
if (syncGateAdapters.has(storage)) return storage;
|
|
410
|
+
if (asyncGateAdapters.has(storage)) return closedGateStorage;
|
|
411
|
+
let probed;
|
|
412
|
+
try {
|
|
413
|
+
probed = storage.getItem(GATE_PROBE_KEY);
|
|
414
|
+
} catch {
|
|
415
|
+
syncGateAdapters.add(storage);
|
|
416
|
+
return storage;
|
|
417
|
+
}
|
|
418
|
+
if (probed != null && typeof probed.then === "function") {
|
|
419
|
+
asyncGateAdapters.add(storage);
|
|
420
|
+
try {
|
|
421
|
+
probed.then(void 0, () => {
|
|
422
|
+
});
|
|
423
|
+
} catch {
|
|
424
|
+
}
|
|
425
|
+
warnAsyncGateStorage();
|
|
426
|
+
return closedGateStorage;
|
|
427
|
+
}
|
|
428
|
+
syncGateAdapters.add(storage);
|
|
429
|
+
return storage;
|
|
430
|
+
};
|
|
386
431
|
var hasSeenGate = (key, storageOverride, testingOverride) => {
|
|
387
432
|
if (testingOverride != null ? testingOverride : isCoachmarkTesting()) return false;
|
|
388
|
-
const storage = storageOverride != null ? storageOverride : getCoachmarkStorage();
|
|
433
|
+
const storage = validateGateStorage(storageOverride != null ? storageOverride : getCoachmarkStorage());
|
|
389
434
|
if (!storage) return false;
|
|
390
435
|
try {
|
|
391
436
|
return storage.getItem(key) === SEEN_VALUE;
|
|
@@ -395,7 +440,7 @@ var hasSeenGate = (key, storageOverride, testingOverride) => {
|
|
|
395
440
|
};
|
|
396
441
|
var markSeenGate = (key, storageOverride, testingOverride) => {
|
|
397
442
|
if (testingOverride != null ? testingOverride : isCoachmarkTesting()) return;
|
|
398
|
-
const storage = storageOverride != null ? storageOverride : getCoachmarkStorage();
|
|
443
|
+
const storage = validateGateStorage(storageOverride != null ? storageOverride : getCoachmarkStorage());
|
|
399
444
|
if (!storage) return;
|
|
400
445
|
try {
|
|
401
446
|
storage.setItem(key, SEEN_VALUE);
|