@wireai/activation 0.11.0 → 0.12.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.
Files changed (58) hide show
  1. package/AGENTS.md +51 -0
  2. package/CHANGELOG.md +58 -3
  3. package/INTEGRATION_PROMPT.md +13 -1
  4. package/README.md +73 -0
  5. package/dist/analytics/index.d.mts +17 -6
  6. package/dist/analytics/index.d.ts +17 -6
  7. package/dist/analytics/index.js +130 -35
  8. package/dist/analytics/index.js.map +1 -1
  9. package/dist/analytics/index.mjs +126 -36
  10. package/dist/analytics/index.mjs.map +1 -1
  11. package/dist/{currentSession-DdnUq2HQ.d.ts → currentSession-D6RiVtc8.d.ts} +88 -30
  12. package/dist/{currentSession-C0_odnIW.d.mts → currentSession-DsSDHqor.d.mts} +88 -30
  13. package/dist/index.d.mts +236 -36
  14. package/dist/index.d.ts +236 -36
  15. package/dist/index.js +281 -20
  16. package/dist/index.js.map +1 -1
  17. package/dist/index.mjs +269 -21
  18. package/dist/index.mjs.map +1 -1
  19. package/dist/questionnaire/index.d.mts +1 -1
  20. package/dist/questionnaire/index.d.ts +1 -1
  21. package/dist/questionnaire/index.js +49 -6
  22. package/dist/questionnaire/index.js.map +1 -1
  23. package/dist/questionnaire/index.mjs +49 -6
  24. package/dist/questionnaire/index.mjs.map +1 -1
  25. package/dist/reviews/index.d.mts +2 -2
  26. package/dist/reviews/index.d.ts +2 -2
  27. package/dist/reviews/index.js +73 -8
  28. package/dist/reviews/index.js.map +1 -1
  29. package/dist/reviews/index.mjs +73 -8
  30. package/dist/reviews/index.mjs.map +1 -1
  31. package/dist/{transport-BGW9uXZJ.d.mts → transport-CF_eHwzC.d.mts} +15 -1
  32. package/dist/{transport-jUJd5kxu.d.ts → transport-DsRe4epC.d.ts} +15 -1
  33. package/llms.txt +1 -0
  34. package/package.json +1 -1
  35. package/src/activation/useWireActivation.ts +12 -1
  36. package/src/activation/wireActivation.ts +36 -24
  37. package/src/analytics/analyticsFacade.ts +41 -20
  38. package/src/analytics/currentSession.ts +83 -0
  39. package/src/analytics/eventQueue.ts +9 -1
  40. package/src/analytics/index.ts +20 -1
  41. package/src/analytics/reportClientEvent.ts +38 -0
  42. package/src/analytics/screenTracking.ts +6 -1
  43. package/src/analytics/useAnalytics.ts +22 -1
  44. package/src/context/deviceId.ts +109 -0
  45. package/src/context/userContext.ts +18 -0
  46. package/src/index.ts +45 -1
  47. package/src/questionnaire/runtime.ts +12 -2
  48. package/src/questionnaire/useQuestionnaireGate.ts +9 -7
  49. package/src/revenuecat/index.ts +55 -0
  50. package/src/revenuecat/purchaseEvents.ts +167 -0
  51. package/src/revenuecat/revenueCatBridge.ts +221 -0
  52. package/src/revenuecat/types.ts +95 -0
  53. package/src/reviews/runtime.ts +92 -1
  54. package/src/reviews/transport.ts +21 -2
  55. package/src/reviews/useReviewGate.ts +12 -7
  56. package/src/session-analytics/lifecycle.ts +9 -2
  57. package/src/session-analytics/reportSessionStart.ts +15 -4
  58. package/src/session-analytics/useLifecycleEvents.ts +28 -2
@@ -1284,6 +1284,16 @@ var sameDecision = (a, b) => {
1284
1284
  return a.fire === b.fire && a.reason === b.reason;
1285
1285
  };
1286
1286
 
1287
+ // src/analytics/reportClientEvent.ts
1288
+ var makeSessionId = () => `wire_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;
1289
+
1290
+ // src/analytics/currentSession.ts
1291
+ var CURRENT_SESSION_ID_SLOT = /* @__PURE__ */ Symbol.for(
1292
+ "@wireai/activation:currentSessionId"
1293
+ );
1294
+ var globalSlot = globalThis;
1295
+ var getCurrentSessionId = () => globalSlot[CURRENT_SESSION_ID_SLOT];
1296
+
1287
1297
  // src/reviews/runtime.ts
1288
1298
  var resolveStorage = (override) => override != null ? override : getCoachmarkStorage();
1289
1299
  var readInt = (storage, key) => {
@@ -1303,11 +1313,46 @@ var writeInt = (storage, key, value) => {
1303
1313
  } catch {
1304
1314
  }
1305
1315
  };
1316
+ var readStr = (storage, key) => {
1317
+ if (!storage) return void 0;
1318
+ try {
1319
+ const raw = storage.getItem(key);
1320
+ return typeof raw === "string" && raw.length > 0 ? raw : void 0;
1321
+ } catch {
1322
+ return void 0;
1323
+ }
1324
+ };
1325
+ var PROCESS_OPEN_ID_SLOT = /* @__PURE__ */ Symbol.for("@wireai/activation:processOpenId");
1326
+ var openIdGlobal = globalThis;
1327
+ var currentOpenId = () => {
1328
+ const live = getCurrentSessionId();
1329
+ if (live) return live;
1330
+ const existing = openIdGlobal[PROCESS_OPEN_ID_SLOT];
1331
+ if (existing) return existing;
1332
+ const created = makeSessionId();
1333
+ openIdGlobal[PROCESS_OPEN_ID_SLOT] = created;
1334
+ return created;
1335
+ };
1336
+ var bumpSessionCount = (storage, sessionsKey, openKey, openId = currentOpenId()) => {
1337
+ const lastOpen = readStr(storage, openKey);
1338
+ const stored = readInt(storage, sessionsKey);
1339
+ if (lastOpen === openId) return stored > 0 ? stored : 1;
1340
+ const next = stored + 1;
1341
+ writeInt(storage, sessionsKey, next);
1342
+ if (storage) {
1343
+ try {
1344
+ storage.setItem(openKey, openId);
1345
+ } catch {
1346
+ }
1347
+ }
1348
+ return next;
1349
+ };
1306
1350
 
1307
1351
  // src/questionnaire/runtime.ts
1308
1352
  var questionnaireSeenKey = (id, version) => version ? `wire_questionnaire_${id}_${version}_seen` : `wire_questionnaire_${id}_seen`;
1309
1353
  var questionnaireLastShownKey = (id) => `wire_questionnaire_${id}_last`;
1310
1354
  var questionnaireSessionsKey = (id) => `wire_questionnaire_${id}_sessions`;
1355
+ var questionnaireSessionOpenKey = (id) => `wire_questionnaire_${id}_open`;
1311
1356
 
1312
1357
  // src/questionnaire/useQuestionnaireGate.ts
1313
1358
  var useStableValue2 = (value, isEqual) => {
@@ -1334,12 +1379,10 @@ var useQuestionnaireGate = ({
1334
1379
  );
1335
1380
  const lastKey = questionnaireLastShownKey(config.id);
1336
1381
  const sessionsKey = questionnaireSessionsKey(config.id);
1337
- const sessions = useState(() => {
1338
- const store = resolveStorage(storage);
1339
- const next = readInt(store, sessionsKey) + 1;
1340
- writeInt(store, sessionsKey, next);
1341
- return next;
1342
- })[0];
1382
+ const sessionOpenKey = questionnaireSessionOpenKey(config.id);
1383
+ const sessions = useState(
1384
+ () => bumpSessionCount(resolveStorage(storage), sessionsKey, sessionOpenKey)
1385
+ )[0];
1343
1386
  const hasServerDecision = decision != null;
1344
1387
  const timeoutMs = config.timeoutFallbackMs;
1345
1388
  const waits = !hasServerDecision && timeoutMs != null && timeoutMs > 0;