@wireai/activation 0.13.0 → 0.13.2
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 +3 -1
- package/CHANGELOG.md +116 -3
- package/README.md +82 -0
- package/dist/analytics/index.d.mts +2 -2
- package/dist/analytics/index.d.ts +2 -2
- package/dist/analytics/index.js +61 -2
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/index.mjs +61 -2
- package/dist/analytics/index.mjs.map +1 -1
- package/dist/{currentSession-_GynvhzT.d.mts → currentSession-ClkLjcJ0.d.mts} +298 -13
- package/dist/{currentSession-D7zabMXK.d.ts → currentSession-DOVZEWJl.d.ts} +298 -13
- package/dist/index.d.mts +195 -4
- package/dist/index.d.ts +195 -4
- package/dist/index.js +909 -340
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +693 -145
- package/dist/index.mjs.map +1 -1
- package/dist/questionnaire/index.js.map +1 -1
- package/dist/questionnaire/index.mjs.map +1 -1
- package/dist/reviews/index.js +12 -1
- package/dist/reviews/index.js.map +1 -1
- package/dist/reviews/index.mjs +12 -1
- package/dist/reviews/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/OnboardingFlow.tsx +131 -0
- package/src/WireOnboarding.tsx +63 -2
- package/src/analytics/analyticsEvent.ts +16 -1
- package/src/analytics/eventQueue.ts +2 -0
- package/src/analytics/reportClientEvent.ts +68 -12
- package/src/cards/PermissionCard.tsx +438 -0
- package/src/cards/index.ts +7 -0
- package/src/illustrations/defaultIllustrations.tsx +44 -3
- package/src/index.ts +38 -0
- package/src/permissions/index.ts +64 -0
- package/src/permissions/permissionCopy.ts +87 -0
- package/src/permissions/permissionEvents.ts +76 -0
- package/src/permissions/permissionMemory.ts +88 -0
- package/src/permissions/placement.ts +88 -0
- package/src/permissions/types.ts +131 -0
- package/src/session/persistedSession.ts +10 -3
- package/src/types.ts +66 -4
package/dist/analytics/index.mjs
CHANGED
|
@@ -400,13 +400,24 @@ var init_Constants = __esm({
|
|
|
400
400
|
|
|
401
401
|
// src/analytics/reportClientEvent.ts
|
|
402
402
|
var makeSessionId = () => `wire_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;
|
|
403
|
+
var toWireEvents = (events) => events.map((event) => {
|
|
404
|
+
if (typeof event.ts !== "number") return event;
|
|
405
|
+
const { ts, ...rest } = event;
|
|
406
|
+
if (!Number.isFinite(ts)) return rest;
|
|
407
|
+
try {
|
|
408
|
+
return { ...rest, ts: new Date(ts).toISOString() };
|
|
409
|
+
} catch {
|
|
410
|
+
return rest;
|
|
411
|
+
}
|
|
412
|
+
});
|
|
403
413
|
var buildEventsRequest = (target, events) => {
|
|
404
414
|
if (!(target == null ? void 0 : target.serverUrl) || events.length === 0) return null;
|
|
405
415
|
try {
|
|
406
416
|
const url = `${target.serverUrl.replace(/\/$/, "")}/v1/events`;
|
|
407
417
|
const headers = { "Content-Type": "application/json" };
|
|
408
418
|
if (target.apiKey) headers.Authorization = `Bearer ${target.apiKey}`;
|
|
409
|
-
|
|
419
|
+
const body = JSON.stringify({ events: toWireEvents(events) });
|
|
420
|
+
return { url, init: { method: "POST", headers, body } };
|
|
410
421
|
} catch {
|
|
411
422
|
return null;
|
|
412
423
|
}
|
|
@@ -418,7 +429,13 @@ var readEventsAck = async (res) => {
|
|
|
418
429
|
const body = await Promise.resolve(json.call(res));
|
|
419
430
|
const skipped = body == null ? void 0 : body.skipped;
|
|
420
431
|
if (typeof skipped !== "number" || !Number.isFinite(skipped)) return void 0;
|
|
421
|
-
const reasons = Array.isArray(body == null ? void 0 : body.errors) ? body.errors.map((e) =>
|
|
432
|
+
const reasons = Array.isArray(body == null ? void 0 : body.errors) ? body.errors.map((e) => {
|
|
433
|
+
const entry = e;
|
|
434
|
+
const reason = entry == null ? void 0 : entry.reason;
|
|
435
|
+
if (typeof reason !== "string") return void 0;
|
|
436
|
+
const field = entry == null ? void 0 : entry.field;
|
|
437
|
+
return typeof field === "string" && field.length > 0 ? `${reason} (field: ${field})` : reason;
|
|
438
|
+
}).filter((r) => typeof r === "string") : [];
|
|
422
439
|
return { written: typeof (body == null ? void 0 : body.written) === "number" ? body.written : void 0, skipped, reasons };
|
|
423
440
|
} catch {
|
|
424
441
|
return void 0;
|
|
@@ -596,6 +613,43 @@ var useScreenTracking = (navigationRef, options = {}) => {
|
|
|
596
613
|
}, [navigationRef]);
|
|
597
614
|
};
|
|
598
615
|
|
|
616
|
+
// src/permissions/permissionEvents.ts
|
|
617
|
+
var WIRE_PERMISSION_EVENTS = {
|
|
618
|
+
/** The priming screen became visible. The denominator for every rate below. */
|
|
619
|
+
screenShown: "wire_permission_screen_shown",
|
|
620
|
+
/** The user tapped the primary, so the OS dialog is about to open. The rationale worked. */
|
|
621
|
+
primerAccepted: "wire_permission_primer_accepted",
|
|
622
|
+
/** The OS granted it. */
|
|
623
|
+
granted: "wire_permission_granted",
|
|
624
|
+
/** The OS refused it (a permanently blocked answer reports here too, with `status: "blocked"`). */
|
|
625
|
+
denied: "wire_permission_denied",
|
|
626
|
+
/** The user took the secondary. The one native prompt was NOT spent. */
|
|
627
|
+
skipped: "wire_permission_skipped",
|
|
628
|
+
/** A blocked user was redirected to the OS settings page. */
|
|
629
|
+
settingsOpened: "wire_permission_settings_opened"
|
|
630
|
+
};
|
|
631
|
+
var permissionEventName = (stage) => {
|
|
632
|
+
switch (stage) {
|
|
633
|
+
case "shown":
|
|
634
|
+
return WIRE_PERMISSION_EVENTS.screenShown;
|
|
635
|
+
case "accepted":
|
|
636
|
+
return WIRE_PERMISSION_EVENTS.primerAccepted;
|
|
637
|
+
case "granted":
|
|
638
|
+
return WIRE_PERMISSION_EVENTS.granted;
|
|
639
|
+
case "denied":
|
|
640
|
+
return WIRE_PERMISSION_EVENTS.denied;
|
|
641
|
+
case "skipped":
|
|
642
|
+
return WIRE_PERMISSION_EVENTS.skipped;
|
|
643
|
+
case "settings":
|
|
644
|
+
return WIRE_PERMISSION_EVENTS.settingsOpened;
|
|
645
|
+
default: {
|
|
646
|
+
const _exhaustive = stage;
|
|
647
|
+
return _exhaustive;
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
};
|
|
651
|
+
var permissionEventProps = (permission, status) => status ? { permission, status } : { permission };
|
|
652
|
+
|
|
599
653
|
// src/analytics/analyticsEvent.ts
|
|
600
654
|
var WIRE_ONBOARDING_EVENTS = {
|
|
601
655
|
started: "wire_onboarding_started",
|
|
@@ -628,6 +682,11 @@ var toAnalyticsEvent = (event) => {
|
|
|
628
682
|
};
|
|
629
683
|
case "fallback":
|
|
630
684
|
return { name: WIRE_ONBOARDING_EVENTS.fallback, params: { reason: event.reason } };
|
|
685
|
+
case "permission":
|
|
686
|
+
return {
|
|
687
|
+
name: permissionEventName(event.stage),
|
|
688
|
+
params: permissionEventProps(event.permission, event.status)
|
|
689
|
+
};
|
|
631
690
|
default: {
|
|
632
691
|
const _exhaustive = event;
|
|
633
692
|
return _exhaustive;
|