@wireai/activation 0.14.2 → 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 +144 -0
- package/README.md +23 -9
- 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 +13 -5
- package/dist/coachmarks/index.d.ts +13 -5
- package/dist/coachmarks/index.js +252 -58
- package/dist/coachmarks/index.js.map +1 -1
- package/dist/coachmarks/index.mjs +204 -9
- 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 +282 -48
- package/dist/showcase/index.js.map +1 -1
- package/dist/showcase/index.mjs +248 -12
- 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/metro/index.js +16 -5
- package/package.json +1 -1
- package/src/WireOnboarding.tsx +4 -1
- package/src/coachmarks/GestureHint.tsx +16 -7
- package/src/coachmarks/SpotlightOverlay.tsx +19 -13
- package/src/coachmarks/index.ts +7 -2
- package/src/coachmarks/reanimated.ts +342 -0
- 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/showcase/FeatureShowcase.tsx +25 -9
- package/src/showcase/blazejOnboarding.ts +136 -0
- package/src/showcase/index.ts +8 -4
- package/src/types.ts +10 -4
- package/src/utils/submitResult.ts +17 -9
package/src/types.ts
CHANGED
|
@@ -256,8 +256,11 @@ export type WireOnboardingProps = {
|
|
|
256
256
|
*
|
|
257
257
|
* SINCE 0.12.2, leaving it out no longer silently empties the funnel: when you pass `storage` and
|
|
258
258
|
* this prop carries no `device_key`, the kit injects its OWN per-install key — the same one the
|
|
259
|
-
* analytics surfaces mint and persist — so the default wiring joins.
|
|
260
|
-
* verbatim and is never touched
|
|
259
|
+
* analytics surfaces mint and persist — so the default wiring joins. A `device_key` you DO pass
|
|
260
|
+
* wins verbatim and is never touched, provided it is a string with at least one non-whitespace
|
|
261
|
+
* character (`resolveIdentity`) — this map also accepts numbers and booleans, and a non-string or
|
|
262
|
+
* all-whitespace value is not a usable join key, so it is read as absent and the auto key is
|
|
263
|
+
* merged over it. See `autoJoinKey` for the opt-out and the two cases where the kit
|
|
261
264
|
* still cannot fill the gap (no `storage`, or you opted out), which keep warning in dev.
|
|
262
265
|
*
|
|
263
266
|
* Never hand-write `userContext={{ deviceKey }}`: the server's device lookup reads `device_key`,
|
|
@@ -284,8 +287,11 @@ export type WireOnboardingProps = {
|
|
|
284
287
|
* `autoJoinKey={false}` if you genuinely want an UNLINKED onboarding session; that restores the
|
|
285
288
|
* pre-0.12.2 behavior exactly (nothing injected) and the dev warning fires again.
|
|
286
289
|
*
|
|
287
|
-
* Two things this flag does NOT do. It never overrides a `device_key` you
|
|
288
|
-
* key always wins, whatever this is set to
|
|
290
|
+
* Two things this flag does NOT do. It never overrides a `device_key` you actually supplied — a
|
|
291
|
+
* host-supplied key always wins, whatever this is set to, where "supplied" means a string with at
|
|
292
|
+
* least one non-whitespace character (`resolveIdentity`); a non-string or an all-whitespace value
|
|
293
|
+
* is read as absent and the auto key is merged over it. And it cannot conjure a key without
|
|
294
|
+
* `storage`: with no
|
|
289
295
|
* persistence the kit's id is minted fresh every launch, and a per-launch key corrupts
|
|
290
296
|
* `min_sessions` instead of merely leaving the join empty, so the kit declines to inject and warns
|
|
291
297
|
* in dev instead.
|
|
@@ -21,19 +21,27 @@
|
|
|
21
21
|
*
|
|
22
22
|
* `submitReview` was a boolean for exactly one unpublished release, and the boolean WAS the bug.
|
|
23
23
|
* `false` meant both "nothing reached the server" and "the server answered non-2xx", and the caller
|
|
24
|
-
* treats `false` as "still owed" and re-posts.
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
24
|
+
* treats `false` as "still owed" and re-posts. At the time neither body carried a client id, so
|
|
25
|
+
* there was NO idempotency key on the wire on either surface: a 502 returned AFTER the insert
|
|
26
|
+
* commits meant the re-post wrote a SECOND row. A response of any status proves the server was
|
|
27
|
+
* reached, and that is a different question from whether it liked the payload — which is why the
|
|
28
|
+
* three values stay, on both surfaces, whatever the wire gains.
|
|
29
29
|
*
|
|
30
30
|
* ── THE RESIDUAL, STATED HONESTLY ─────────────────────────────────────────────────────────────
|
|
31
31
|
*
|
|
32
32
|
* `unsent` is not proof the server never got it. A connection dropped after the request was written
|
|
33
33
|
* — or after the row committed — surfaces as a thrown/rejected `fetch`, exactly like an offline
|
|
34
|
-
* device.
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
34
|
+
* device. Closing that window needs a client-minted idempotency key the server upserts on, and AS
|
|
35
|
+
* OF 2026-08-19 THE TWO SURFACES DIFFER — do not read this paragraph as one fact about both:
|
|
36
|
+
*
|
|
37
|
+
* • REVIEWS — closed. `CreateReviewRequest` takes an optional `idempotency_key` and the server
|
|
38
|
+
* upserts a derived row on it, so a `ReviewGate` re-post merges instead of duplicating. It is a
|
|
39
|
+
* capability, not a guarantee: the server honours the key only when the post also carries a
|
|
40
|
+
* unit to scope it to (`meta.device_key`, else `session_id`), so a caller that strips both is
|
|
41
|
+
* back to the old behaviour.
|
|
42
|
+
* • QUESTIONNAIRES — still open, and still exactly as this paragraph used to read for both. The
|
|
43
|
+
* response body carries no client id and the server has no idempotency path for it at all, so
|
|
44
|
+
* retrying only on `unsent` there is SAFER, not SAFE. Prefer losing a row over inventing one: a
|
|
45
|
+
* lost detractor is a gap in the data, a duplicated one is a lie in the data.
|
|
38
46
|
*/
|
|
39
47
|
export type SubmitResult = "accepted" | "rejected" | "unsent";
|