@wireai/activation 0.12.0 → 0.12.1
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 +13 -10
- package/CHANGELOG.md +130 -0
- package/INTEGRATION_PROMPT.md +14 -3
- package/README.md +40 -2
- package/dist/analytics/index.d.mts +5 -4
- package/dist/analytics/index.d.ts +5 -4
- package/dist/analytics/index.js +39 -24
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/index.mjs +39 -24
- package/dist/analytics/index.mjs.map +1 -1
- package/dist/coachmarks/index.d.mts +16 -0
- package/dist/coachmarks/index.d.ts +16 -0
- package/dist/coachmarks/index.js +19 -13
- package/dist/coachmarks/index.js.map +1 -1
- package/dist/coachmarks/index.mjs +19 -13
- package/dist/coachmarks/index.mjs.map +1 -1
- package/dist/{currentSession-DsSDHqor.d.mts → currentSession-BlCeDP0f.d.mts} +59 -5
- package/dist/{currentSession-D6RiVtc8.d.ts → currentSession-BxEB37xt.d.ts} +59 -5
- package/dist/index.d.mts +10 -20
- package/dist/index.d.ts +10 -20
- package/dist/index.js +301 -187
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +300 -188
- package/dist/index.mjs.map +1 -1
- package/dist/questionnaire/index.js +41 -19
- package/dist/questionnaire/index.js.map +1 -1
- package/dist/questionnaire/index.mjs +41 -19
- package/dist/questionnaire/index.mjs.map +1 -1
- package/dist/reviews/index.js +41 -19
- package/dist/reviews/index.js.map +1 -1
- package/dist/reviews/index.mjs +41 -19
- package/dist/reviews/index.mjs.map +1 -1
- package/dist/showcase/index.js +15 -6
- package/dist/showcase/index.js.map +1 -1
- package/dist/showcase/index.mjs +15 -6
- package/dist/showcase/index.mjs.map +1 -1
- package/llms.txt +2 -0
- package/package.json +1 -1
- package/src/WireOnboarding.tsx +140 -5
- package/src/activation/wireActivation.ts +8 -1
- package/src/analytics/analyticsFacade.ts +15 -11
- package/src/analytics/reportClientEvent.ts +11 -7
- package/src/coachmarks/runtime.ts +53 -17
- package/src/config/wireConfigFromEnv.ts +46 -2
- package/src/context/deviceId.ts +82 -18
- package/src/index.ts +9 -1
- package/src/questionnaire/runtime.ts +1 -0
- package/src/questionnaire/useQuestionnaireGate.ts +8 -3
- package/src/reviews/runtime.ts +68 -7
- package/src/reviews/useReviewGate.ts +8 -3
- package/src/session-analytics/useLifecycleEvents.ts +57 -27
- package/src/session-analytics/useSessionStart.ts +37 -1
- package/src/types.ts +41 -4
package/dist/analytics/index.mjs
CHANGED
|
@@ -412,17 +412,17 @@ var buildEventsRequest = (target, events) => {
|
|
|
412
412
|
}
|
|
413
413
|
};
|
|
414
414
|
var warnOnSkippedEvents = (res) => {
|
|
415
|
+
if (typeof __DEV__ === "undefined" || !__DEV__) return;
|
|
416
|
+
if (typeof console === "undefined" || !console.warn) return;
|
|
415
417
|
try {
|
|
416
418
|
const json = res == null ? void 0 : res.json;
|
|
417
419
|
if (typeof json !== "function") return;
|
|
418
420
|
void Promise.resolve(json.call(res)).then((body) => {
|
|
419
421
|
const skipped = body == null ? void 0 : body.skipped;
|
|
420
422
|
if (typeof skipped !== "number" || skipped <= 0) return;
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
);
|
|
425
|
-
}
|
|
423
|
+
console.warn(
|
|
424
|
+
`[wireai] the server ACCEPTED the /v1/events POST but DISCARDED ${skipped} event(s) (skipped in the response body) \u2014 they are gone, not retried. The usual cause is an event with a missing or empty session_id.`
|
|
425
|
+
);
|
|
426
426
|
}).catch(() => {
|
|
427
427
|
});
|
|
428
428
|
} catch {
|
|
@@ -1117,6 +1117,31 @@ var autoDeviceKeyRegistry = () => {
|
|
|
1117
1117
|
deviceKeyGlobal[AUTO_DEVICE_KEY_SLOT] = created;
|
|
1118
1118
|
return created;
|
|
1119
1119
|
};
|
|
1120
|
+
var startHydration = (registry, appId, storage, minted) => {
|
|
1121
|
+
if (!registry.pending) registry.pending = /* @__PURE__ */ new Map();
|
|
1122
|
+
const existing = registry.pending.get(appId);
|
|
1123
|
+
if (existing) return existing;
|
|
1124
|
+
const slot = deviceIdStorageKey(appId);
|
|
1125
|
+
const settled = () => {
|
|
1126
|
+
var _a2;
|
|
1127
|
+
return (_a2 = registry.keys.get(appId)) != null ? _a2 : minted;
|
|
1128
|
+
};
|
|
1129
|
+
let run;
|
|
1130
|
+
try {
|
|
1131
|
+
run = Promise.resolve(storage.getItem(slot)).then((saved) => {
|
|
1132
|
+
const persisted = typeof saved === "string" && saved.trim() ? saved.trim() : void 0;
|
|
1133
|
+
if (persisted) {
|
|
1134
|
+
registry.keys.set(appId, persisted);
|
|
1135
|
+
return persisted;
|
|
1136
|
+
}
|
|
1137
|
+
return Promise.resolve(storage.setItem(slot, minted)).then(settled, settled);
|
|
1138
|
+
}).catch(settled);
|
|
1139
|
+
} catch {
|
|
1140
|
+
run = Promise.resolve(settled());
|
|
1141
|
+
}
|
|
1142
|
+
registry.pending.set(appId, run);
|
|
1143
|
+
return run;
|
|
1144
|
+
};
|
|
1120
1145
|
var resolveAutoDeviceKey = (opts = {}) => {
|
|
1121
1146
|
var _a2, _b;
|
|
1122
1147
|
const registry = autoDeviceKeyRegistry();
|
|
@@ -1129,25 +1154,16 @@ var resolveAutoDeviceKey = (opts = {}) => {
|
|
|
1129
1154
|
const storage = opts.storage;
|
|
1130
1155
|
if (storage && !registry.hydrating.has(appId)) {
|
|
1131
1156
|
registry.hydrating.add(appId);
|
|
1132
|
-
|
|
1133
|
-
const minted = id;
|
|
1134
|
-
try {
|
|
1135
|
-
void Promise.resolve(storage.getItem(slot)).then((saved) => {
|
|
1136
|
-
const persisted = typeof saved === "string" && saved.trim() ? saved.trim() : void 0;
|
|
1137
|
-
if (persisted) registry.keys.set(appId, persisted);
|
|
1138
|
-
else void Promise.resolve(storage.setItem(slot, minted)).catch(() => {
|
|
1139
|
-
});
|
|
1140
|
-
}).catch(() => {
|
|
1141
|
-
});
|
|
1142
|
-
} catch {
|
|
1143
|
-
}
|
|
1157
|
+
void startHydration(registry, appId, storage, id);
|
|
1144
1158
|
}
|
|
1145
1159
|
return (_b = registry.keys.get(appId)) != null ? _b : id;
|
|
1146
1160
|
};
|
|
1147
1161
|
var resetAutoDeviceKeys = () => {
|
|
1162
|
+
var _a2;
|
|
1148
1163
|
const registry = autoDeviceKeyRegistry();
|
|
1149
1164
|
registry.keys.clear();
|
|
1150
1165
|
registry.hydrating.clear();
|
|
1166
|
+
(_a2 = registry.pending) == null ? void 0 : _a2.clear();
|
|
1151
1167
|
};
|
|
1152
1168
|
|
|
1153
1169
|
// src/analytics/analyticsFacade.ts
|
|
@@ -1157,11 +1173,10 @@ var warnInDev2 = (message) => {
|
|
|
1157
1173
|
}
|
|
1158
1174
|
};
|
|
1159
1175
|
var createAnalytics = (config, options = {}) => {
|
|
1160
|
-
var _a2, _b, _c
|
|
1161
|
-
const instanceSessionId = (_a2 = config.sessionId) != null ? _a2 : makeSessionId();
|
|
1176
|
+
var _a2, _b, _c;
|
|
1162
1177
|
const resolveSessionId = () => {
|
|
1163
|
-
var _a3
|
|
1164
|
-
return (
|
|
1178
|
+
var _a3;
|
|
1179
|
+
return (_a3 = config.sessionId) != null ? _a3 : ensureCurrentSessionId();
|
|
1165
1180
|
};
|
|
1166
1181
|
if (config.sessionId) {
|
|
1167
1182
|
warnInDev2(
|
|
@@ -1169,8 +1184,8 @@ var createAnalytics = (config, options = {}) => {
|
|
|
1169
1184
|
);
|
|
1170
1185
|
}
|
|
1171
1186
|
const detectedAppVersion = detectAppVersion();
|
|
1172
|
-
let userContext = { ...(
|
|
1173
|
-
const hostDeviceKeyAtInit = typeof ((
|
|
1187
|
+
let userContext = { ...(_a2 = config.userContext) != null ? _a2 : {} };
|
|
1188
|
+
const hostDeviceKeyAtInit = typeof ((_b = config.userContext) == null ? void 0 : _b.deviceKey) === "string" && config.userContext.deviceKey.trim() ? config.userContext.deviceKey.trim() : void 0;
|
|
1174
1189
|
const autoDeviceKeyOptions = {
|
|
1175
1190
|
appId: config.appId,
|
|
1176
1191
|
// A host-supplied deviceKey opts out of minting AND persisting (unchanged contract).
|
|
@@ -1193,7 +1208,7 @@ var createAnalytics = (config, options = {}) => {
|
|
|
1193
1208
|
envelope,
|
|
1194
1209
|
...options
|
|
1195
1210
|
});
|
|
1196
|
-
let boundUserId = sanitizeUserId((
|
|
1211
|
+
let boundUserId = sanitizeUserId((_c = config.userContext) == null ? void 0 : _c.userId);
|
|
1197
1212
|
const storageKey = analyticsUserIdStorageKey(config.appId);
|
|
1198
1213
|
if (config.storage) {
|
|
1199
1214
|
void config.storage.getItem(storageKey).then((saved) => {
|