@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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import React__default, { ReactNode } from 'react';
|
|
3
3
|
import { a as WireFeatures, b as WireFeaturesConfig } from '../types-BpwiRpA8.mjs';
|
|
4
|
-
import { C as CoachmarkStorage, a as CoachmarkStep, G as GestureKind, T as TargetRect, P as Placement } from '../types-
|
|
4
|
+
import { C as CoachmarkStorage, a as CoachmarkStep, G as GestureKind, T as TargetRect, P as Placement } from '../types-D_0B0yay.mjs';
|
|
5
5
|
import { View } from 'react-native';
|
|
6
6
|
|
|
7
7
|
interface CoachmarkProviderProps {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import React__default, { ReactNode } from 'react';
|
|
3
3
|
import { a as WireFeatures, b as WireFeaturesConfig } from '../types-BpwiRpA8.js';
|
|
4
|
-
import { C as CoachmarkStorage, a as CoachmarkStep, G as GestureKind, T as TargetRect, P as Placement } from '../types-
|
|
4
|
+
import { C as CoachmarkStorage, a as CoachmarkStep, G as GestureKind, T as TargetRect, P as Placement } from '../types-D_0B0yay.js';
|
|
5
5
|
import { View } from 'react-native';
|
|
6
6
|
|
|
7
7
|
interface CoachmarkProviderProps {
|
package/dist/coachmarks/index.js
CHANGED
|
@@ -219,9 +219,54 @@ var isCoachmarkTesting = () => coachmarkRuntime().testing;
|
|
|
219
219
|
var coachmarkGateKey = (tourId) => `wire_coachmark_${tourId}_seen`;
|
|
220
220
|
var showcaseGateKey = (showcaseId) => `wire_showcase_${showcaseId}_seen`;
|
|
221
221
|
var SEEN_VALUE = "1";
|
|
222
|
+
var GATE_PROBE_KEY = "wire_gate_probe";
|
|
223
|
+
var ASYNC_GATE_STORAGE_WARNED_SLOT = /* @__PURE__ */ Symbol.for(
|
|
224
|
+
"@wireai/activation:asyncGateStorageWarned"
|
|
225
|
+
);
|
|
226
|
+
var asyncGateWarnGlobal = globalThis;
|
|
227
|
+
var closedGateStorage = Object.freeze({
|
|
228
|
+
getItem: () => SEEN_VALUE,
|
|
229
|
+
setItem: () => {
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
var syncGateAdapters = /* @__PURE__ */ new WeakSet();
|
|
233
|
+
var asyncGateAdapters = /* @__PURE__ */ new WeakSet();
|
|
234
|
+
var warnAsyncGateStorage = () => {
|
|
235
|
+
if (asyncGateWarnGlobal[ASYNC_GATE_STORAGE_WARNED_SLOT]) return;
|
|
236
|
+
if (typeof __DEV__ === "undefined" || !__DEV__) return;
|
|
237
|
+
if (typeof console === "undefined" || !console.warn) return;
|
|
238
|
+
asyncGateWarnGlobal[ASYNC_GATE_STORAGE_WARNED_SLOT] = true;
|
|
239
|
+
console.warn(
|
|
240
|
+
"[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."
|
|
241
|
+
);
|
|
242
|
+
};
|
|
243
|
+
var validateGateStorage = (storage) => {
|
|
244
|
+
if (!storage) return null;
|
|
245
|
+
if (syncGateAdapters.has(storage)) return storage;
|
|
246
|
+
if (asyncGateAdapters.has(storage)) return closedGateStorage;
|
|
247
|
+
let probed;
|
|
248
|
+
try {
|
|
249
|
+
probed = storage.getItem(GATE_PROBE_KEY);
|
|
250
|
+
} catch {
|
|
251
|
+
syncGateAdapters.add(storage);
|
|
252
|
+
return storage;
|
|
253
|
+
}
|
|
254
|
+
if (probed != null && typeof probed.then === "function") {
|
|
255
|
+
asyncGateAdapters.add(storage);
|
|
256
|
+
try {
|
|
257
|
+
probed.then(void 0, () => {
|
|
258
|
+
});
|
|
259
|
+
} catch {
|
|
260
|
+
}
|
|
261
|
+
warnAsyncGateStorage();
|
|
262
|
+
return closedGateStorage;
|
|
263
|
+
}
|
|
264
|
+
syncGateAdapters.add(storage);
|
|
265
|
+
return storage;
|
|
266
|
+
};
|
|
222
267
|
var hasSeenGate = (key, storageOverride, testingOverride) => {
|
|
223
268
|
if (testingOverride != null ? testingOverride : isCoachmarkTesting()) return false;
|
|
224
|
-
const storage = storageOverride != null ? storageOverride : getCoachmarkStorage();
|
|
269
|
+
const storage = validateGateStorage(storageOverride != null ? storageOverride : getCoachmarkStorage());
|
|
225
270
|
if (!storage) return false;
|
|
226
271
|
try {
|
|
227
272
|
return storage.getItem(key) === SEEN_VALUE;
|
|
@@ -231,7 +276,7 @@ var hasSeenGate = (key, storageOverride, testingOverride) => {
|
|
|
231
276
|
};
|
|
232
277
|
var markSeenGate = (key, storageOverride, testingOverride) => {
|
|
233
278
|
if (testingOverride != null ? testingOverride : isCoachmarkTesting()) return;
|
|
234
|
-
const storage = storageOverride != null ? storageOverride : getCoachmarkStorage();
|
|
279
|
+
const storage = validateGateStorage(storageOverride != null ? storageOverride : getCoachmarkStorage());
|
|
235
280
|
if (!storage) return;
|
|
236
281
|
try {
|
|
237
282
|
storage.setItem(key, SEEN_VALUE);
|