@usergist/feedback-react-native 0.1.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 (242) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +231 -0
  4. package/UserGistFeedback.podspec +31 -0
  5. package/UserGistFeedbackExtension.podspec +23 -0
  6. package/android/build.gradle +92 -0
  7. package/android/consumer-rules.pro +5 -0
  8. package/android/src/main/AndroidManifest.xml +31 -0
  9. package/android/src/main/java/studio/usergist/feedback/UserGistFirebaseMessagingService.kt +153 -0
  10. package/android/src/main/java/studio/usergist/feedback/UserGistPushModule.kt +344 -0
  11. package/android/src/main/java/studio/usergist/feedback/UserGistPushPackage.kt +18 -0
  12. package/dist/NativeUserGistPush.d.ts +35 -0
  13. package/dist/NativeUserGistPush.d.ts.map +1 -0
  14. package/dist/NativeUserGistPush.js +13 -0
  15. package/dist/NativeUserGistPush.js.map +1 -0
  16. package/dist/Provider.d.ts +7 -0
  17. package/dist/Provider.d.ts.map +1 -0
  18. package/dist/Provider.js +300 -0
  19. package/dist/Provider.js.map +1 -0
  20. package/dist/Push.d.ts +103 -0
  21. package/dist/Push.d.ts.map +1 -0
  22. package/dist/Push.js +225 -0
  23. package/dist/Push.js.map +1 -0
  24. package/dist/UserGist.d.ts +210 -0
  25. package/dist/UserGist.d.ts.map +1 -0
  26. package/dist/UserGist.js +1246 -0
  27. package/dist/UserGist.js.map +1 -0
  28. package/dist/index.d.ts +11 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +4 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/internal/consent.d.ts +17 -0
  33. package/dist/internal/consent.d.ts.map +1 -0
  34. package/dist/internal/consent.js +98 -0
  35. package/dist/internal/consent.js.map +1 -0
  36. package/dist/internal/context.d.ts +12 -0
  37. package/dist/internal/context.d.ts.map +1 -0
  38. package/dist/internal/context.js +70 -0
  39. package/dist/internal/context.js.map +1 -0
  40. package/dist/internal/debug.d.ts +14 -0
  41. package/dist/internal/debug.d.ts.map +1 -0
  42. package/dist/internal/debug.js +73 -0
  43. package/dist/internal/debug.js.map +1 -0
  44. package/dist/internal/engine.d.ts +93 -0
  45. package/dist/internal/engine.d.ts.map +1 -0
  46. package/dist/internal/engine.js +904 -0
  47. package/dist/internal/engine.js.map +1 -0
  48. package/dist/internal/events.d.ts +49 -0
  49. package/dist/internal/events.d.ts.map +1 -0
  50. package/dist/internal/events.js +71 -0
  51. package/dist/internal/events.js.map +1 -0
  52. package/dist/internal/frequency-cap.d.ts +15 -0
  53. package/dist/internal/frequency-cap.d.ts.map +1 -0
  54. package/dist/internal/frequency-cap.js +84 -0
  55. package/dist/internal/frequency-cap.js.map +1 -0
  56. package/dist/internal/identity.d.ts +14 -0
  57. package/dist/internal/identity.d.ts.map +1 -0
  58. package/dist/internal/identity.js +113 -0
  59. package/dist/internal/identity.js.map +1 -0
  60. package/dist/internal/inapp-matcher.d.ts +13 -0
  61. package/dist/internal/inapp-matcher.d.ts.map +1 -0
  62. package/dist/internal/inapp-matcher.js +65 -0
  63. package/dist/internal/inapp-matcher.js.map +1 -0
  64. package/dist/internal/inapp-rules-cache.d.ts +16 -0
  65. package/dist/internal/inapp-rules-cache.d.ts.map +1 -0
  66. package/dist/internal/inapp-rules-cache.js +88 -0
  67. package/dist/internal/inapp-rules-cache.js.map +1 -0
  68. package/dist/internal/instruction-dedupe.d.ts +16 -0
  69. package/dist/internal/instruction-dedupe.d.ts.map +1 -0
  70. package/dist/internal/instruction-dedupe.js +52 -0
  71. package/dist/internal/instruction-dedupe.js.map +1 -0
  72. package/dist/internal/lifecycle.d.ts +12 -0
  73. package/dist/internal/lifecycle.d.ts.map +1 -0
  74. package/dist/internal/lifecycle.js +97 -0
  75. package/dist/internal/lifecycle.js.map +1 -0
  76. package/dist/internal/modal-coordinator.d.ts +4 -0
  77. package/dist/internal/modal-coordinator.d.ts.map +1 -0
  78. package/dist/internal/modal-coordinator.js +43 -0
  79. package/dist/internal/modal-coordinator.js.map +1 -0
  80. package/dist/internal/modal-queue.d.ts +9 -0
  81. package/dist/internal/modal-queue.d.ts.map +1 -0
  82. package/dist/internal/modal-queue.js +32 -0
  83. package/dist/internal/modal-queue.js.map +1 -0
  84. package/dist/internal/mutation-queue.d.ts +23 -0
  85. package/dist/internal/mutation-queue.d.ts.map +1 -0
  86. package/dist/internal/mutation-queue.js +66 -0
  87. package/dist/internal/mutation-queue.js.map +1 -0
  88. package/dist/internal/prompt-answers.d.ts +6 -0
  89. package/dist/internal/prompt-answers.d.ts.map +1 -0
  90. package/dist/internal/prompt-answers.js +10 -0
  91. package/dist/internal/prompt-answers.js.map +1 -0
  92. package/dist/internal/prompt-flow.d.ts +8 -0
  93. package/dist/internal/prompt-flow.d.ts.map +1 -0
  94. package/dist/internal/prompt-flow.js +26 -0
  95. package/dist/internal/prompt-flow.js.map +1 -0
  96. package/dist/internal/queue.d.ts +17 -0
  97. package/dist/internal/queue.d.ts.map +1 -0
  98. package/dist/internal/queue.js +172 -0
  99. package/dist/internal/queue.js.map +1 -0
  100. package/dist/internal/requests.d.ts +22 -0
  101. package/dist/internal/requests.d.ts.map +1 -0
  102. package/dist/internal/requests.js +146 -0
  103. package/dist/internal/requests.js.map +1 -0
  104. package/dist/internal/rules-cache.d.ts +16 -0
  105. package/dist/internal/rules-cache.d.ts.map +1 -0
  106. package/dist/internal/rules-cache.js +86 -0
  107. package/dist/internal/rules-cache.js.map +1 -0
  108. package/dist/internal/storage.d.ts +36 -0
  109. package/dist/internal/storage.d.ts.map +1 -0
  110. package/dist/internal/storage.js +213 -0
  111. package/dist/internal/storage.js.map +1 -0
  112. package/dist/internal/survey-completion.d.ts +10 -0
  113. package/dist/internal/survey-completion.d.ts.map +1 -0
  114. package/dist/internal/survey-completion.js +11 -0
  115. package/dist/internal/survey-completion.js.map +1 -0
  116. package/dist/internal/survey-matcher.d.ts +21 -0
  117. package/dist/internal/survey-matcher.d.ts.map +1 -0
  118. package/dist/internal/survey-matcher.js +139 -0
  119. package/dist/internal/survey-matcher.js.map +1 -0
  120. package/dist/internal/survey-rules-cache.d.ts +17 -0
  121. package/dist/internal/survey-rules-cache.d.ts.map +1 -0
  122. package/dist/internal/survey-rules-cache.js +91 -0
  123. package/dist/internal/survey-rules-cache.js.map +1 -0
  124. package/dist/internal/survey-store.d.ts +19 -0
  125. package/dist/internal/survey-store.d.ts.map +1 -0
  126. package/dist/internal/survey-store.js +59 -0
  127. package/dist/internal/survey-store.js.map +1 -0
  128. package/dist/internal/transport.d.ts +210 -0
  129. package/dist/internal/transport.d.ts.map +1 -0
  130. package/dist/internal/transport.js +498 -0
  131. package/dist/internal/transport.js.map +1 -0
  132. package/dist/internal/trigger-matcher.d.ts +21 -0
  133. package/dist/internal/trigger-matcher.d.ts.map +1 -0
  134. package/dist/internal/trigger-matcher.js +114 -0
  135. package/dist/internal/trigger-matcher.js.map +1 -0
  136. package/dist/internal/types.d.ts +89 -0
  137. package/dist/internal/types.d.ts.map +1 -0
  138. package/dist/internal/types.js +2 -0
  139. package/dist/internal/types.js.map +1 -0
  140. package/dist/internal/user-state.d.ts +11 -0
  141. package/dist/internal/user-state.d.ts.map +1 -0
  142. package/dist/internal/user-state.js +118 -0
  143. package/dist/internal/user-state.js.map +1 -0
  144. package/dist/native/events.d.ts +27 -0
  145. package/dist/native/events.d.ts.map +1 -0
  146. package/dist/native/events.js +12 -0
  147. package/dist/native/events.js.map +1 -0
  148. package/dist/native/push-bridge.d.ts +20 -0
  149. package/dist/native/push-bridge.d.ts.map +1 -0
  150. package/dist/native/push-bridge.js +92 -0
  151. package/dist/native/push-bridge.js.map +1 -0
  152. package/dist/preview/PromptShell.d.ts +9 -0
  153. package/dist/preview/PromptShell.d.ts.map +1 -0
  154. package/dist/preview/PromptShell.js +128 -0
  155. package/dist/preview/PromptShell.js.map +1 -0
  156. package/dist/preview/SurveyShell.d.ts +15 -0
  157. package/dist/preview/SurveyShell.d.ts.map +1 -0
  158. package/dist/preview/SurveyShell.js +197 -0
  159. package/dist/preview/SurveyShell.js.map +1 -0
  160. package/dist/preview/index.d.ts +4 -0
  161. package/dist/preview/index.d.ts.map +1 -0
  162. package/dist/preview/index.js +16 -0
  163. package/dist/preview/index.js.map +1 -0
  164. package/dist/ui/InAppMessageView.d.ts +12 -0
  165. package/dist/ui/InAppMessageView.d.ts.map +1 -0
  166. package/dist/ui/InAppMessageView.js +260 -0
  167. package/dist/ui/InAppMessageView.js.map +1 -0
  168. package/dist/ui/PromptSheet.d.ts +12 -0
  169. package/dist/ui/PromptSheet.d.ts.map +1 -0
  170. package/dist/ui/PromptSheet.js +285 -0
  171. package/dist/ui/PromptSheet.js.map +1 -0
  172. package/dist/ui/QuestionImageHeader.d.ts +12 -0
  173. package/dist/ui/QuestionImageHeader.d.ts.map +1 -0
  174. package/dist/ui/QuestionImageHeader.js +22 -0
  175. package/dist/ui/QuestionImageHeader.js.map +1 -0
  176. package/dist/ui/SurveyView.d.ts +25 -0
  177. package/dist/ui/SurveyView.d.ts.map +1 -0
  178. package/dist/ui/SurveyView.js +478 -0
  179. package/dist/ui/SurveyView.js.map +1 -0
  180. package/dist/ui/animations.d.ts +4 -0
  181. package/dist/ui/animations.d.ts.map +1 -0
  182. package/dist/ui/animations.js +24 -0
  183. package/dist/ui/animations.js.map +1 -0
  184. package/dist/ui/questions/MultipleChoiceQuestion.d.ts +12 -0
  185. package/dist/ui/questions/MultipleChoiceQuestion.d.ts.map +1 -0
  186. package/dist/ui/questions/MultipleChoiceQuestion.js +41 -0
  187. package/dist/ui/questions/MultipleChoiceQuestion.js.map +1 -0
  188. package/dist/ui/questions/NpsQuestion.d.ts +14 -0
  189. package/dist/ui/questions/NpsQuestion.d.ts.map +1 -0
  190. package/dist/ui/questions/NpsQuestion.js +73 -0
  191. package/dist/ui/questions/NpsQuestion.js.map +1 -0
  192. package/dist/ui/questions/RatingQuestion.d.ts +21 -0
  193. package/dist/ui/questions/RatingQuestion.d.ts.map +1 -0
  194. package/dist/ui/questions/RatingQuestion.js +91 -0
  195. package/dist/ui/questions/RatingQuestion.js.map +1 -0
  196. package/dist/ui/questions/ShortTextQuestion.d.ts +12 -0
  197. package/dist/ui/questions/ShortTextQuestion.d.ts.map +1 -0
  198. package/dist/ui/questions/ShortTextQuestion.js +25 -0
  199. package/dist/ui/questions/ShortTextQuestion.js.map +1 -0
  200. package/dist/ui/requests/BoardView.d.ts +9 -0
  201. package/dist/ui/requests/BoardView.d.ts.map +1 -0
  202. package/dist/ui/requests/BoardView.js +270 -0
  203. package/dist/ui/requests/BoardView.js.map +1 -0
  204. package/dist/ui/requests/CommentsSection.d.ts +7 -0
  205. package/dist/ui/requests/CommentsSection.d.ts.map +1 -0
  206. package/dist/ui/requests/CommentsSection.js +254 -0
  207. package/dist/ui/requests/CommentsSection.js.map +1 -0
  208. package/dist/ui/requests/DetailView.d.ts +8 -0
  209. package/dist/ui/requests/DetailView.d.ts.map +1 -0
  210. package/dist/ui/requests/DetailView.js +206 -0
  211. package/dist/ui/requests/DetailView.js.map +1 -0
  212. package/dist/ui/requests/RequestsHost.d.ts +12 -0
  213. package/dist/ui/requests/RequestsHost.d.ts.map +1 -0
  214. package/dist/ui/requests/RequestsHost.js +58 -0
  215. package/dist/ui/requests/RequestsHost.js.map +1 -0
  216. package/dist/ui/requests/StatusPill.d.ts +6 -0
  217. package/dist/ui/requests/StatusPill.d.ts.map +1 -0
  218. package/dist/ui/requests/StatusPill.js +25 -0
  219. package/dist/ui/requests/StatusPill.js.map +1 -0
  220. package/dist/ui/requests/SubmitView.d.ts +8 -0
  221. package/dist/ui/requests/SubmitView.d.ts.map +1 -0
  222. package/dist/ui/requests/SubmitView.js +94 -0
  223. package/dist/ui/requests/SubmitView.js.map +1 -0
  224. package/dist/ui/requests/shared.d.ts +21 -0
  225. package/dist/ui/requests/shared.d.ts.map +1 -0
  226. package/dist/ui/requests/shared.js +74 -0
  227. package/dist/ui/requests/shared.js.map +1 -0
  228. package/dist/ui/survey-questions.d.ts +20 -0
  229. package/dist/ui/survey-questions.d.ts.map +1 -0
  230. package/dist/ui/survey-questions.js +211 -0
  231. package/dist/ui/survey-questions.js.map +1 -0
  232. package/dist/ui/theme.d.ts +15 -0
  233. package/dist/ui/theme.d.ts.map +1 -0
  234. package/dist/ui/theme.js +31 -0
  235. package/dist/ui/theme.js.map +1 -0
  236. package/ios/Extension/UserGistNotificationService.swift +292 -0
  237. package/ios/UserGistPush.h +16 -0
  238. package/ios/UserGistPush.mm +158 -0
  239. package/ios/UserGistPushImpl.swift +399 -0
  240. package/ios/UserGistPushSwizzle.m +168 -0
  241. package/package.json +89 -0
  242. package/react-native.config.js +16 -0
@@ -0,0 +1,88 @@
1
+ // Armed in-app messages cache. Pulled at boot + on foreground +
2
+ // every triggerSyncIntervalMs. Mirrors `rules-cache.ts` (feedback).
3
+ import { STORAGE_KEYS } from './storage.js';
4
+ import { reportError, debugLog } from './debug.js';
5
+ export function createInAppRulesCache(storage, transport, defaultSyncMs) {
6
+ let messages = [];
7
+ let byEvent = {};
8
+ let fetchedAt = 0;
9
+ let hydrated = false;
10
+ let inflight = null;
11
+ function indexByEvent(list) {
12
+ const map = {};
13
+ for (const m of list) {
14
+ if (!m.eventName)
15
+ continue;
16
+ const bucket = map[m.eventName] ?? [];
17
+ bucket.push(m);
18
+ map[m.eventName] = bucket;
19
+ }
20
+ const out = {};
21
+ for (const k of Object.keys(map))
22
+ out[k] = map[k] ?? [];
23
+ return out;
24
+ }
25
+ return {
26
+ async hydrate() {
27
+ if (hydrated)
28
+ return;
29
+ try {
30
+ const stored = await storage.getJson(STORAGE_KEYS.inAppRulesCache);
31
+ if (stored?.messages) {
32
+ messages = stored.messages;
33
+ byEvent = indexByEvent(messages);
34
+ fetchedAt = Date.parse(stored.fetchedAt);
35
+ }
36
+ }
37
+ catch (e) {
38
+ reportError('inAppRulesCache.hydrate failed', e);
39
+ }
40
+ hydrated = true;
41
+ },
42
+ async refresh({ anonymousId, externalId, force }) {
43
+ const now = Date.now();
44
+ if (!force && now - fetchedAt < defaultSyncMs && messages.length > 0) {
45
+ return messages;
46
+ }
47
+ if (inflight)
48
+ return inflight;
49
+ inflight = (async () => {
50
+ try {
51
+ const res = await transport.armedInAppMessages({ anonymousId, externalId });
52
+ messages = res.messages;
53
+ byEvent = indexByEvent(messages);
54
+ fetchedAt = Date.now();
55
+ const cache = {
56
+ messages,
57
+ fetchedAt: new Date(fetchedAt).toISOString(),
58
+ serverTime: res.serverTime,
59
+ nextSyncMs: res.nextSyncMs,
60
+ };
61
+ await storage.setJson(STORAGE_KEYS.inAppRulesCache, cache);
62
+ debugLog('inAppRulesCache refreshed', {
63
+ count: messages.length,
64
+ events: messages.map((m) => m.eventName),
65
+ });
66
+ return messages;
67
+ }
68
+ catch (e) {
69
+ reportError('inAppRulesCache.refresh failed', e);
70
+ return messages;
71
+ }
72
+ finally {
73
+ inflight = null;
74
+ }
75
+ })();
76
+ return inflight;
77
+ },
78
+ getForEvent: (eventName) => byEvent[eventName] ?? [],
79
+ all: () => messages,
80
+ async clear() {
81
+ messages = [];
82
+ byEvent = {};
83
+ fetchedAt = 0;
84
+ await storage.remove(STORAGE_KEYS.inAppRulesCache);
85
+ },
86
+ };
87
+ }
88
+ //# sourceMappingURL=inapp-rules-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inapp-rules-cache.js","sourceRoot":"","sources":["../../src/internal/inapp-rules-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type StorageScope } from './storage.js';
2
+ export interface LocalInstructionDedupe {
3
+ readonly hydrate: () => Promise<void>;
4
+ readonly remember: (key: string) => void;
5
+ readonly consume: (key: string) => boolean;
6
+ readonly clear: () => Promise<void>;
7
+ readonly size: () => number;
8
+ readonly has: (key: string) => boolean;
9
+ }
10
+ /**
11
+ * Persists locally rendered campaign/event pairs until the matching server
12
+ * instruction is consumed. This prevents an app restart between ingest and
13
+ * instruction polling from replaying a prompt, survey, or in-app message.
14
+ */
15
+ export declare function createLocalInstructionDedupe(storage: StorageScope): LocalInstructionDedupe;
16
+ //# sourceMappingURL=instruction-dedupe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction-dedupe.d.ts","sourceRoot":"","sources":["../../src/internal/instruction-dedupe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAI9D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;CACvC;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,YAAY,GACpB,sBAAsB,CA6CxB"}
@@ -0,0 +1,52 @@
1
+ import { STORAGE_KEYS } from './storage.js';
2
+ const MAX_KEYS = 200;
3
+ /**
4
+ * Persists locally rendered campaign/event pairs until the matching server
5
+ * instruction is consumed. This prevents an app restart between ingest and
6
+ * instruction polling from replaying a prompt, survey, or in-app message.
7
+ */
8
+ export function createLocalInstructionDedupe(storage) {
9
+ const keys = new Set();
10
+ let persistence = Promise.resolve();
11
+ function schedulePersist() {
12
+ const snapshot = [...keys];
13
+ persistence = persistence.then(() => storage.setJson(STORAGE_KEYS.localInstructionDedupe, snapshot));
14
+ }
15
+ return {
16
+ async hydrate() {
17
+ const stored = await storage.getJson(STORAGE_KEYS.localInstructionDedupe);
18
+ if (!Array.isArray(stored))
19
+ return;
20
+ keys.clear();
21
+ for (const value of stored.slice(-MAX_KEYS)) {
22
+ if (typeof value === 'string' && value.length > 0)
23
+ keys.add(value);
24
+ }
25
+ },
26
+ remember(key) {
27
+ keys.delete(key);
28
+ keys.add(key);
29
+ while (keys.size > MAX_KEYS) {
30
+ const oldest = keys.values().next().value;
31
+ if (typeof oldest !== 'string')
32
+ break;
33
+ keys.delete(oldest);
34
+ }
35
+ schedulePersist();
36
+ },
37
+ consume(key) {
38
+ if (!keys.delete(key))
39
+ return false;
40
+ schedulePersist();
41
+ return true;
42
+ },
43
+ async clear() {
44
+ keys.clear();
45
+ schedulePersist();
46
+ await persistence;
47
+ },
48
+ size: () => keys.size,
49
+ has: (key) => keys.has(key),
50
+ };
51
+ }
52
+ //# sourceMappingURL=instruction-dedupe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction-dedupe.js","sourceRoot":"","sources":["../../src/internal/instruction-dedupe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAqB,MAAM,cAAc,CAAA;AAE9D,MAAM,QAAQ,GAAG,GAAG,CAAA;AAWpB;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAC1C,OAAqB;IAErB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,IAAI,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;IAEnC,SAAS,eAAe;QACtB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;QAC1B,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAClC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAC/D,CAAA;IACH,CAAC;IAED,OAAO;QACL,KAAK,CAAC,OAAO;YACX,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAClC,YAAY,CAAC,sBAAsB,CACpC,CAAA;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,OAAM;YAClC,IAAI,CAAC,KAAK,EAAE,CAAA;YACZ,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACpE,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,GAAG;YACV,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAChB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACb,OAAO,IAAI,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA;gBACzC,IAAI,OAAO,MAAM,KAAK,QAAQ;oBAAE,MAAK;gBACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACrB,CAAC;YACD,eAAe,EAAE,CAAA;QACnB,CAAC;QACD,OAAO,CAAC,GAAG;YACT,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAA;YACnC,eAAe,EAAE,CAAA;YACjB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,KAAK,CAAC,KAAK;YACT,IAAI,CAAC,KAAK,EAAE,CAAA;YACZ,eAAe,EAAE,CAAA;YACjB,MAAM,WAAW,CAAA;QACnB,CAAC;QACD,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI;QACrB,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;KAC5B,CAAA;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface LifecycleManager {
2
+ readonly start: () => void;
3
+ readonly stop: () => void;
4
+ readonly isForeground: () => boolean;
5
+ }
6
+ export declare function createLifecycleManager(params: {
7
+ readonly onForeground: () => void;
8
+ readonly onBackground: () => void;
9
+ readonly onSyncTick: () => void;
10
+ readonly syncIntervalMs: number;
11
+ }): LifecycleManager;
12
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/internal/lifecycle.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,OAAO,CAAA;CACrC;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAA;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAA;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAA;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAChC,GAAG,gBAAgB,CAyEnB"}
@@ -0,0 +1,97 @@
1
+ // App lifecycle manager.
2
+ // - Subscribes to AppState.
3
+ // - On foreground: refresh armed triggers + flush queue.
4
+ // - On background: final flush attempt (best-effort).
5
+ // - While foregrounded: periodically refresh triggers every syncIntervalMs.
6
+ import { reportError } from './debug.js';
7
+ function loadAppState() {
8
+ try {
9
+ const rn = require('react-native');
10
+ return rn?.AppState ?? null;
11
+ }
12
+ catch {
13
+ return null;
14
+ }
15
+ }
16
+ export function createLifecycleManager(params) {
17
+ const { onForeground, onBackground, onSyncTick, syncIntervalMs } = params;
18
+ let subscription = null;
19
+ let timer = null;
20
+ let foreground = true;
21
+ let started = false;
22
+ function handleChange(next) {
23
+ const wasForeground = foreground;
24
+ foreground = next === 'active';
25
+ if (!wasForeground && foreground) {
26
+ try {
27
+ onForeground();
28
+ }
29
+ catch (e) {
30
+ reportError('lifecycle.onForeground failed', e);
31
+ }
32
+ ensureTimer();
33
+ }
34
+ else if (wasForeground && !foreground) {
35
+ try {
36
+ onBackground();
37
+ }
38
+ catch (e) {
39
+ reportError('lifecycle.onBackground failed', e);
40
+ }
41
+ stopTimer();
42
+ }
43
+ }
44
+ function ensureTimer() {
45
+ if (timer)
46
+ return;
47
+ timer = setInterval(() => {
48
+ try {
49
+ onSyncTick();
50
+ }
51
+ catch (e) {
52
+ reportError('lifecycle.onSyncTick failed', e);
53
+ }
54
+ }, syncIntervalMs);
55
+ }
56
+ function stopTimer() {
57
+ if (timer) {
58
+ clearInterval(timer);
59
+ timer = null;
60
+ }
61
+ }
62
+ return {
63
+ start() {
64
+ if (started)
65
+ return;
66
+ started = true;
67
+ const appState = loadAppState();
68
+ if (appState?.addEventListener) {
69
+ try {
70
+ subscription = appState.addEventListener('change', handleChange);
71
+ }
72
+ catch (e) {
73
+ reportError('lifecycle.subscribe failed', e);
74
+ }
75
+ foreground = (appState.currentState ?? 'active') === 'active';
76
+ }
77
+ if (foreground)
78
+ ensureTimer();
79
+ },
80
+ stop() {
81
+ started = false;
82
+ stopTimer();
83
+ try {
84
+ if (typeof subscription === 'function')
85
+ subscription();
86
+ else if (subscription && typeof subscription.remove === 'function')
87
+ subscription.remove();
88
+ }
89
+ catch (e) {
90
+ reportError('lifecycle.unsubscribe failed', e);
91
+ }
92
+ subscription = null;
93
+ },
94
+ isForeground: () => foreground,
95
+ };
96
+ }
97
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/internal/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type ModalSurface = 'prompt' | 'survey' | 'inapp' | 'requests';
2
+ /** FIFO ownership for the SDK's native Modal surfaces. */
3
+ export declare function useModalSlot(surface: ModalSurface, requested: boolean): boolean;
4
+ //# sourceMappingURL=modal-coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal-coordinator.d.ts","sourceRoot":"","sources":["../../src/internal/modal-coordinator.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAA;AAyBrE,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAa/E"}
@@ -0,0 +1,43 @@
1
+ import { useEffect, useState } from 'react';
2
+ let active = null;
3
+ let waiting = [];
4
+ const listeners = new Set();
5
+ function notify() {
6
+ for (const listener of listeners)
7
+ listener();
8
+ }
9
+ function request(surface) {
10
+ if (active === surface || waiting.includes(surface))
11
+ return;
12
+ if (!active)
13
+ active = surface;
14
+ else
15
+ waiting = [...waiting, surface];
16
+ notify();
17
+ }
18
+ function release(surface) {
19
+ waiting = waiting.filter((item) => item !== surface);
20
+ if (active !== surface)
21
+ return;
22
+ active = waiting[0] ?? null;
23
+ waiting = waiting.slice(1);
24
+ notify();
25
+ }
26
+ /** FIFO ownership for the SDK's native Modal surfaces. */
27
+ export function useModalSlot(surface, requested) {
28
+ const [, setVersion] = useState(0);
29
+ useEffect(() => {
30
+ const listener = () => setVersion((value) => value + 1);
31
+ listeners.add(listener);
32
+ if (requested)
33
+ request(surface);
34
+ else
35
+ release(surface);
36
+ return () => {
37
+ listeners.delete(listener);
38
+ release(surface);
39
+ };
40
+ }, [requested, surface]);
41
+ return requested && active === surface;
42
+ }
43
+ //# sourceMappingURL=modal-coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal-coordinator.js","sourceRoot":"","sources":["../../src/internal/modal-coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAI3C,IAAI,MAAM,GAAwB,IAAI,CAAA;AACtC,IAAI,OAAO,GAAmB,EAAE,CAAA;AAChC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAA;AAEvC,SAAS,MAAM;IACb,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,QAAQ,EAAE,CAAA;AAC9C,CAAC;AAED,SAAS,OAAO,CAAC,OAAqB;IACpC,IAAI,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAM;IAC3D,IAAI,CAAC,MAAM;QAAE,MAAM,GAAG,OAAO,CAAA;;QACxB,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,CAAA;IACpC,MAAM,EAAE,CAAA;AACV,CAAC;AAED,SAAS,OAAO,CAAC,OAAqB;IACpC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAA;IACpD,IAAI,MAAM,KAAK,OAAO;QAAE,OAAM;IAC9B,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IAC3B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC1B,MAAM,EAAE,CAAA;AACV,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,YAAY,CAAC,OAAqB,EAAE,SAAkB;IACpE,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAClC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QAC7D,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACvB,IAAI,SAAS;YAAE,OAAO,CAAC,OAAO,CAAC,CAAA;;YAC1B,OAAO,CAAC,OAAO,CAAC,CAAA;QACrB,OAAO,GAAG,EAAE;YACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC1B,OAAO,CAAC,OAAO,CAAC,CAAA;QAClB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;IACxB,OAAO,SAAS,IAAI,MAAM,KAAK,OAAO,CAAA;AACxC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type ModalTask = (release: () => void) => void;
2
+ export interface ModalQueue {
3
+ readonly enqueue: (task: ModalTask) => void;
4
+ readonly clearPending: () => void;
5
+ readonly pendingCount: () => number;
6
+ }
7
+ /** FIFO for prompt, survey, and in-app presentations. */
8
+ export declare function createModalQueue(): ModalQueue;
9
+ //# sourceMappingURL=modal-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal-queue.d.ts","sourceRoot":"","sources":["../../src/internal/modal-queue.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;AAErD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAA;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,MAAM,CAAA;CACpC;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,IAAI,UAAU,CA4B7C"}
@@ -0,0 +1,32 @@
1
+ /** FIFO for prompt, survey, and in-app presentations. */
2
+ export function createModalQueue() {
3
+ const pending = [];
4
+ let active = false;
5
+ function drain() {
6
+ if (active)
7
+ return;
8
+ const task = pending.shift();
9
+ if (!task)
10
+ return;
11
+ active = true;
12
+ let released = false;
13
+ task(() => {
14
+ if (released)
15
+ return;
16
+ released = true;
17
+ active = false;
18
+ drain();
19
+ });
20
+ }
21
+ return {
22
+ enqueue(task) {
23
+ pending.push(task);
24
+ drain();
25
+ },
26
+ clearPending() {
27
+ pending.length = 0;
28
+ },
29
+ pendingCount: () => pending.length,
30
+ };
31
+ }
32
+ //# sourceMappingURL=modal-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal-queue.js","sourceRoot":"","sources":["../../src/internal/modal-queue.ts"],"names":[],"mappings":"AAQA,yDAAyD;AACzD,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAgB,EAAE,CAAA;IAC/B,IAAI,MAAM,GAAG,KAAK,CAAA;IAElB,SAAS,KAAK;QACZ,IAAI,MAAM;YAAE,OAAM;QAClB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAA;QAC5B,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,MAAM,GAAG,IAAI,CAAA;QACb,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,IAAI,CAAC,GAAG,EAAE;YACR,IAAI,QAAQ;gBAAE,OAAM;YACpB,QAAQ,GAAG,IAAI,CAAA;YACf,MAAM,GAAG,KAAK,CAAA;YACd,KAAK,EAAE,CAAA;QACT,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL,OAAO,CAAC,IAAI;YACV,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAClB,KAAK,EAAE,CAAA;QACT,CAAC;QACD,YAAY;YACV,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;QACpB,CAAC;QACD,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM;KACnC,CAAA;AACH,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type StorageScope } from './storage.js';
2
+ export type MutationPurpose = 'essential' | 'feedback' | 'survey';
3
+ export type MutationKind = 'identify' | 'feedback-response' | 'survey-complete' | 'survey-abandon';
4
+ export interface PendingMutation {
5
+ readonly id: string;
6
+ readonly kind: MutationKind;
7
+ readonly purpose: MutationPurpose;
8
+ readonly payload: Readonly<Record<string, unknown>>;
9
+ readonly createdAt: string;
10
+ readonly dedupeKey?: string;
11
+ }
12
+ export interface MutationQueue {
13
+ readonly hydrate: () => Promise<void>;
14
+ readonly enqueue: (kind: MutationKind, purpose: MutationPurpose, payload: Readonly<Record<string, unknown>>, dedupeKey?: string) => Promise<string>;
15
+ readonly peek: () => PendingMutation | null;
16
+ readonly remove: (id: string) => Promise<void>;
17
+ readonly removePurpose: (purpose: MutationPurpose) => Promise<void>;
18
+ readonly has: (id: string) => boolean;
19
+ readonly clear: () => Promise<void>;
20
+ readonly size: () => number;
21
+ }
22
+ export declare function createMutationQueue(storage: StorageScope): MutationQueue;
23
+ //# sourceMappingURL=mutation-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-queue.d.ts","sourceRoot":"","sources":["../../src/internal/mutation-queue.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAG9D,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAA;AACjE,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,mBAAmB,GACnB,iBAAiB,GACjB,gBAAgB,CAAA;AAEpB,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAOD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,CAChB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC1C,SAAS,CAAC,EAAE,MAAM,KACf,OAAO,CAAC,MAAM,CAAC,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,eAAe,GAAG,IAAI,CAAA;IAC3C,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnE,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAA;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAA;CAC5B;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CA4DxE"}
@@ -0,0 +1,66 @@
1
+ import { generateEventId } from './identity.js';
2
+ import { STORAGE_KEYS } from './storage.js';
3
+ import { reportError } from './debug.js';
4
+ export function createMutationQueue(storage) {
5
+ let items = [];
6
+ let hydrated = false;
7
+ let serial = Promise.resolve();
8
+ function mutate(fn) {
9
+ const next = serial.then(async () => {
10
+ const previous = items;
11
+ try {
12
+ fn();
13
+ await storage.setJsonStrict(STORAGE_KEYS.mutationQueue, {
14
+ version: 1,
15
+ items,
16
+ });
17
+ }
18
+ catch (error) {
19
+ items = previous;
20
+ throw error;
21
+ }
22
+ });
23
+ serial = next.catch((error) => {
24
+ reportError('mutation queue persistence failed', error);
25
+ });
26
+ return next;
27
+ }
28
+ return {
29
+ async hydrate() {
30
+ if (hydrated)
31
+ return;
32
+ const stored = await storage.getJson(STORAGE_KEYS.mutationQueue);
33
+ if (stored?.version === 1 && Array.isArray(stored.items))
34
+ items = stored.items;
35
+ hydrated = true;
36
+ },
37
+ async enqueue(kind, purpose, payload, dedupeKey) {
38
+ let id = generateEventId();
39
+ await mutate(() => {
40
+ const existing = dedupeKey
41
+ ? items.find((item) => item.dedupeKey === dedupeKey)
42
+ : undefined;
43
+ if (existing) {
44
+ id = existing.id;
45
+ return;
46
+ }
47
+ const next = { id, kind, purpose, payload, createdAt: new Date().toISOString(), dedupeKey };
48
+ items = purpose === 'essential' ? [next, ...items] : [...items, next];
49
+ });
50
+ return id;
51
+ },
52
+ peek: () => items[0] ?? null,
53
+ async remove(id) {
54
+ await mutate(() => { items = items.filter((item) => item.id !== id); });
55
+ },
56
+ async removePurpose(purpose) {
57
+ await mutate(() => { items = items.filter((item) => item.purpose !== purpose); });
58
+ },
59
+ has: (id) => items.some((item) => item.id === id),
60
+ async clear() {
61
+ await mutate(() => { items = []; });
62
+ },
63
+ size: () => items.length,
64
+ };
65
+ }
66
+ //# sourceMappingURL=mutation-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-queue.js","sourceRoot":"","sources":["../../src/internal/mutation-queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ResponseEmission } from './types.js';
2
+ export type PromptAnswerValue = number | string | ReadonlyArray<string> | null;
3
+ export type PromptAnswerRecord = Readonly<Record<string, PromptAnswerValue>>;
4
+ export declare function withPromptAnswer(current: PromptAnswerRecord, questionId: string, value: PromptAnswerValue): PromptAnswerRecord;
5
+ export declare function promptResponseAnswers(current: PromptAnswerRecord): ResponseEmission['answers'];
6
+ //# sourceMappingURL=prompt-answers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-answers.d.ts","sourceRoot":"","sources":["../../src/internal/prompt-answers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;AAC9E,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAA;AAE5E,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,kBAAkB,EAC3B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,GACvB,kBAAkB,CAEpB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,kBAAkB,GAC1B,gBAAgB,CAAC,SAAS,CAAC,CAK7B"}
@@ -0,0 +1,10 @@
1
+ export function withPromptAnswer(current, questionId, value) {
2
+ return { ...current, [questionId]: value };
3
+ }
4
+ export function promptResponseAnswers(current) {
5
+ return Object.keys(current).map((questionId) => ({
6
+ questionId,
7
+ value: current[questionId] ?? null,
8
+ }));
9
+ }
10
+ //# sourceMappingURL=prompt-answers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-answers.js","sourceRoot":"","sources":["../../src/internal/prompt-answers.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,gBAAgB,CAC9B,OAA2B,EAC3B,UAAkB,EAClB,KAAwB;IAExB,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAA2B;IAE3B,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC/C,UAAU;QACV,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI;KACnC,CAAC,CAAC,CAAA;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Question } from '@usergist/sdk-core/mobile';
2
+ /** Tap selections advance immediately unless the current question has more input. */
3
+ export declare function promptShouldAutoAdvance(question: Question): boolean;
4
+ /** Questions that need a deliberate Next action after their answer is selected. */
5
+ export declare function promptNeedsExplicitNext(question: Question): boolean;
6
+ /** Explicit Next is gated when its question first requires a primary answer. */
7
+ export declare function promptNextRequiresAnswer(question: Question): boolean;
8
+ //# sourceMappingURL=prompt-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-flow.d.ts","sourceRoot":"","sources":["../../src/internal/prompt-flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAMzD,qFAAqF;AACrF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAKnE;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAInE;AAED,gFAAgF;AAChF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAEpE"}
@@ -0,0 +1,26 @@
1
+ function hasNpsFollowUp(question) {
2
+ return question.type === 'nps' && Boolean(question.followUp);
3
+ }
4
+ /** Tap selections advance immediately unless the current question has more input. */
5
+ export function promptShouldAutoAdvance(question) {
6
+ if (question.type === 'rating')
7
+ return true;
8
+ if (question.type === 'nps')
9
+ return !hasNpsFollowUp(question);
10
+ if (question.type === 'multiple_choice')
11
+ return !question.multiSelect;
12
+ return false;
13
+ }
14
+ /** Questions that need a deliberate Next action after their answer is selected. */
15
+ export function promptNeedsExplicitNext(question) {
16
+ if (question.type === 'short_text')
17
+ return true;
18
+ if (question.type === 'nps')
19
+ return hasNpsFollowUp(question);
20
+ return question.type === 'multiple_choice' && Boolean(question.multiSelect);
21
+ }
22
+ /** Explicit Next is gated when its question first requires a primary answer. */
23
+ export function promptNextRequiresAnswer(question) {
24
+ return question.type === 'short_text' || hasNpsFollowUp(question);
25
+ }
26
+ //# sourceMappingURL=prompt-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-flow.js","sourceRoot":"","sources":["../../src/internal/prompt-flow.ts"],"names":[],"mappings":"AAEA,SAAS,cAAc,CAAC,QAAkB;IACxC,OAAO,QAAQ,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC9D,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,uBAAuB,CAAC,QAAkB;IACxD,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC3C,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;IAC7D,IAAI,QAAQ,CAAC,IAAI,KAAK,iBAAiB;QAAE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAA;IACrE,OAAO,KAAK,CAAA;AACd,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,uBAAuB,CAAC,QAAkB;IACxD,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAA;IAC/C,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAA;IAC5D,OAAO,QAAQ,CAAC,IAAI,KAAK,iBAAiB,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC7E,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,wBAAwB,CAAC,QAAkB;IACzD,OAAO,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAA;AACnE,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type StorageScope } from './storage.js';
2
+ import type { QueuedEvent } from './types.js';
3
+ export interface EventQueue {
4
+ readonly hydrate: () => Promise<void>;
5
+ readonly enqueue: (e: QueuedEvent) => void;
6
+ readonly peek: (n: number) => ReadonlyArray<QueuedEvent>;
7
+ readonly drop: (n: number) => void;
8
+ readonly remove: (eventIds: ReadonlyArray<string>) => void;
9
+ readonly removePurpose: (purpose: QueuedEvent['purpose']) => void;
10
+ readonly restore: (events: ReadonlyArray<QueuedEvent>) => void;
11
+ readonly size: () => number;
12
+ readonly clear: () => Promise<void>;
13
+ readonly snapshot: () => ReadonlyArray<QueuedEvent>;
14
+ readonly onOverflow: (cb: (dropped: number) => void) => () => void;
15
+ }
16
+ export declare function createEventQueue(storage: StorageScope, maxSize: number): EventQueue;
17
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/internal/queue.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAuB7C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;IAC1C,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,aAAa,CAAC,WAAW,CAAC,CAAA;IACxD,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IAC1D,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,KAAK,IAAI,CAAA;IACjE,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,aAAa,CAAC,WAAW,CAAC,CAAA;IACnD,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;CACnE;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,MAAM,GACd,UAAU,CAsJZ"}