@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,498 @@
1
+ // HTTPS transport with retry + exponential backoff + jitter.
2
+ //
3
+ // We do NOT gzip in JS for v0 — RN does not ship zlib. This is noted in the
4
+ // README as a deferred improvement that will move to a tiny native module.
5
+ //
6
+ // Cancelable: `reset()` aborts all inflight requests via AbortController.
7
+ // Circuit breaker: opens temporarily on a 429/5xx streak of 5.
8
+ import { reportError, debugLog } from './debug.js';
9
+ import { USERGIST_SDK_VERSION } from './context.js';
10
+ const MAX_ATTEMPTS = 5;
11
+ const BASE_DELAY_MS = 1000;
12
+ const MAX_DELAY_MS = 16_000;
13
+ const CIRCUIT_OPEN_MS = 30_000;
14
+ const CIRCUIT_FAILURE_THRESHOLD = 5;
15
+ // React Native's fetch has no default timeout. Without this a black-holed
16
+ // socket (captive portal, dead cell) leaves the request pending indefinitely,
17
+ // hanging flush and enablePush(). A per-request timeout aborts and — because
18
+ // the parent controller is NOT the one that fired — is treated as a retryable
19
+ // failure that also feeds the circuit breaker.
20
+ const REQUEST_TIMEOUT_MS = 15_000;
21
+ function sleep(ms, signal) {
22
+ return new Promise((resolve, reject) => {
23
+ if (signal?.aborted) {
24
+ reject(new DOMExceptionLike('Aborted', 'AbortError'));
25
+ return;
26
+ }
27
+ const t = setTimeout(() => {
28
+ signal?.removeEventListener?.('abort', onAbort);
29
+ resolve();
30
+ }, ms);
31
+ const onAbort = () => {
32
+ clearTimeout(t);
33
+ reject(new DOMExceptionLike('Aborted', 'AbortError'));
34
+ };
35
+ signal?.addEventListener?.('abort', onAbort, { once: true });
36
+ });
37
+ }
38
+ class DOMExceptionLike extends Error {
39
+ name;
40
+ constructor(message, name) {
41
+ super(message);
42
+ this.name = name;
43
+ }
44
+ }
45
+ function backoff(attempt) {
46
+ const base = Math.min(BASE_DELAY_MS * 2 ** attempt, MAX_DELAY_MS);
47
+ const jitter = base * 0.2 * (Math.random() * 2 - 1);
48
+ return Math.max(0, base + jitter);
49
+ }
50
+ function retryAfterMs(value) {
51
+ if (!value)
52
+ return null;
53
+ const seconds = Number(value);
54
+ const raw = Number.isFinite(seconds)
55
+ ? seconds * 1_000
56
+ : Date.parse(value) - Date.now();
57
+ if (!Number.isFinite(raw))
58
+ return null;
59
+ return Math.max(0, Math.min(raw, 60_000));
60
+ }
61
+ export class PermanentHttpError extends Error {
62
+ status;
63
+ constructor(status) {
64
+ super(`http-${status}`);
65
+ this.status = status;
66
+ this.name = 'PermanentHttpError';
67
+ }
68
+ }
69
+ export function createTransport(cfg) {
70
+ let abortController = new AbortController();
71
+ let consecutiveFailures = 0;
72
+ let circuitOpenUntil = 0;
73
+ let subjectToken = null;
74
+ function resetCircuit() {
75
+ consecutiveFailures = 0;
76
+ circuitOpenUntil = 0;
77
+ }
78
+ function recordFailure(status) {
79
+ if (status === 429 || status >= 500) {
80
+ consecutiveFailures += 1;
81
+ if (consecutiveFailures >= CIRCUIT_FAILURE_THRESHOLD) {
82
+ circuitOpenUntil = Date.now() + CIRCUIT_OPEN_MS;
83
+ debugLog('transport circuit opened', { until: circuitOpenUntil });
84
+ }
85
+ }
86
+ }
87
+ function isCircuitOpen() {
88
+ return Date.now() < circuitOpenUntil;
89
+ }
90
+ async function request(opts) {
91
+ const requestSubjectToken = opts.subjectTokenOverride ?? subjectToken;
92
+ if (opts.requiresSubject !== false && !requestSubjectToken) {
93
+ throw new Error('subject-session-unavailable');
94
+ }
95
+ if (isCircuitOpen()) {
96
+ throw new Error('circuit-open');
97
+ }
98
+ const url = `${cfg.apiUrl.replace(/\/+$/, '')}${opts.path}`;
99
+ let attempt = 0;
100
+ // eslint-disable-next-line no-constant-condition
101
+ while (true) {
102
+ try {
103
+ debugLog('http →', { method: opts.method, path: opts.path, attempt });
104
+ // Compose a per-request timeout with the shared cancel controller so a
105
+ // hung socket can't block forever. Cleaned up in `finally` regardless
106
+ // of outcome so we don't leak timers or listeners.
107
+ const timeoutCtrl = new AbortController();
108
+ const onParentAbort = () => timeoutCtrl.abort();
109
+ abortController.signal.addEventListener('abort', onParentAbort);
110
+ const timeoutId = setTimeout(() => timeoutCtrl.abort(), REQUEST_TIMEOUT_MS);
111
+ let res;
112
+ try {
113
+ res = await fetch(url, {
114
+ method: opts.method,
115
+ headers: {
116
+ Authorization: `Bearer ${cfg.writeKey}`,
117
+ 'Content-Type': 'application/json',
118
+ Accept: 'application/json',
119
+ 'X-UserGist-SDK-Version': `rn-${USERGIST_SDK_VERSION}`,
120
+ ...(requestSubjectToken
121
+ ? { 'X-UserGist-Subject-Token': requestSubjectToken }
122
+ : {}),
123
+ },
124
+ body: opts.body == null ? undefined : JSON.stringify(opts.body),
125
+ signal: timeoutCtrl.signal,
126
+ });
127
+ }
128
+ finally {
129
+ clearTimeout(timeoutId);
130
+ abortController.signal.removeEventListener('abort', onParentAbort);
131
+ }
132
+ debugLog('http ←', {
133
+ method: opts.method,
134
+ path: opts.path,
135
+ status: res.status,
136
+ attempt,
137
+ });
138
+ if (res.ok) {
139
+ resetCircuit();
140
+ const text = await res.text();
141
+ if (!text)
142
+ return {};
143
+ const parsed = JSON.parse(text);
144
+ // Unwrap the API envelope `{success, data, error}` if present.
145
+ if (parsed &&
146
+ typeof parsed === 'object' &&
147
+ 'success' in parsed &&
148
+ parsed.success === true &&
149
+ 'data' in parsed) {
150
+ return parsed.data;
151
+ }
152
+ return parsed;
153
+ }
154
+ // Non-2xx
155
+ if (res.status >= 400 && res.status < 500 && res.status !== 429) {
156
+ // client error — don't retry
157
+ throw new PermanentHttpError(res.status);
158
+ }
159
+ recordFailure(res.status);
160
+ if (!opts.idempotent)
161
+ throw new Error(`http-${res.status}`);
162
+ if (attempt >= MAX_ATTEMPTS - 1)
163
+ throw new Error(`http-${res.status}`);
164
+ await sleep(retryAfterMs(res.headers.get('Retry-After')) ?? backoff(attempt), abortController.signal);
165
+ attempt += 1;
166
+ }
167
+ catch (e) {
168
+ if (e instanceof PermanentHttpError)
169
+ throw e;
170
+ const name = e?.name;
171
+ if (name === 'AbortError') {
172
+ // A real cancel (cancelAll / reset) aborts the parent controller —
173
+ // propagate it. Otherwise this abort was our per-request timeout, so
174
+ // record a failure and fall through to the retry logic below.
175
+ if (abortController.signal.aborted)
176
+ throw e;
177
+ recordFailure(0);
178
+ }
179
+ if (!opts.idempotent)
180
+ throw e;
181
+ if (attempt >= MAX_ATTEMPTS - 1)
182
+ throw e;
183
+ await sleep(backoff(attempt), abortController.signal);
184
+ attempt += 1;
185
+ }
186
+ }
187
+ }
188
+ return {
189
+ setSubjectToken(token) {
190
+ subjectToken = token;
191
+ },
192
+ session: ({ anonymousId, currentToken }) => request({
193
+ method: 'POST',
194
+ path: '/v1/sdk/session',
195
+ body: { anonymousId },
196
+ idempotent: false,
197
+ requiresSubject: false,
198
+ ...(currentToken ? { subjectTokenOverride: currentToken } : {}),
199
+ }),
200
+ revokeSession: () => request({
201
+ method: 'POST',
202
+ path: '/v1/sdk/session/revoke',
203
+ idempotent: true,
204
+ }),
205
+ instructions: (after) => request({
206
+ method: 'GET',
207
+ path: `/v1/sdk/instructions?after=${encodeURIComponent(String(after))}&limit=100`,
208
+ idempotent: true,
209
+ }),
210
+ acknowledgeInstructions: (ids) => request({
211
+ method: 'POST',
212
+ path: '/v1/sdk/instructions/ack',
213
+ body: { ids },
214
+ idempotent: true,
215
+ }),
216
+ ingest: (batch) => request({
217
+ method: 'POST',
218
+ path: '/v1/sdk/ingest',
219
+ body: batch,
220
+ idempotent: true,
221
+ }),
222
+ armedTriggers: async ({ anonymousId, externalId }) => {
223
+ const params = new URLSearchParams({ anonymousId });
224
+ if (externalId)
225
+ params.append('externalId', externalId);
226
+ return request({
227
+ method: 'GET',
228
+ path: `/v1/sdk/armed-triggers?${params.toString()}`,
229
+ idempotent: true,
230
+ });
231
+ },
232
+ armedSurveys: async ({ anonymousId, externalId }) => {
233
+ const params = new URLSearchParams({ anonymousId });
234
+ if (externalId)
235
+ params.append('externalId', externalId);
236
+ return request({
237
+ method: 'GET',
238
+ path: `/v1/sdk/armed-surveys?${params.toString()}`,
239
+ idempotent: true,
240
+ });
241
+ },
242
+ armedInAppMessages: async ({ anonymousId, externalId }) => {
243
+ const params = new URLSearchParams({ anonymousId });
244
+ if (externalId)
245
+ params.append('externalId', externalId);
246
+ return request({
247
+ method: 'GET',
248
+ path: `/v1/sdk/armed-inapp-messages?${params.toString()}`,
249
+ idempotent: true,
250
+ });
251
+ },
252
+ consent: (p) => request({
253
+ method: 'POST',
254
+ path: '/v1/sdk/consent',
255
+ body: p,
256
+ idempotent: true,
257
+ }),
258
+ identify: (p, identifySubjectToken) => request({
259
+ method: 'POST',
260
+ path: '/v1/sdk/identify',
261
+ body: p,
262
+ idempotent: true,
263
+ subjectTokenOverride: identifySubjectToken,
264
+ }),
265
+ submitResponse: (p) => request({
266
+ method: 'POST',
267
+ path: '/v1/sdk/responses',
268
+ body: p,
269
+ idempotent: true,
270
+ }),
271
+ pushRegisterToken: (p) => request({
272
+ method: 'POST',
273
+ path: '/v1/sdk/push/register-token',
274
+ body: p,
275
+ idempotent: true,
276
+ }),
277
+ pushInvalidateToken: (p) => request({
278
+ method: 'POST',
279
+ path: '/v1/sdk/push/invalidate-token',
280
+ body: p,
281
+ idempotent: true,
282
+ }),
283
+ pushRebind: (p) => request({
284
+ method: 'POST',
285
+ path: '/v1/sdk/push/rebind',
286
+ body: p,
287
+ idempotent: true,
288
+ }),
289
+ pushDelivered: (p) => request({
290
+ method: 'POST',
291
+ path: '/v1/sdk/push/delivered',
292
+ body: p,
293
+ idempotent: true,
294
+ }),
295
+ pushDisplayed: (p) => request({
296
+ method: 'POST',
297
+ path: '/v1/sdk/push/displayed',
298
+ body: p,
299
+ idempotent: true,
300
+ }),
301
+ pushDismissed: (p) => request({
302
+ method: 'POST',
303
+ path: '/v1/sdk/push/dismissed',
304
+ body: p,
305
+ idempotent: true,
306
+ }),
307
+ pushSilentAck: (p) => request({
308
+ method: 'POST',
309
+ path: '/v1/sdk/push/silent-ack',
310
+ body: p,
311
+ idempotent: true,
312
+ }),
313
+ pushAppOpen: (p) => request({
314
+ method: 'POST',
315
+ path: '/v1/sdk/push/app-open',
316
+ body: p,
317
+ idempotent: true,
318
+ }),
319
+ pushChannelSubscription: (p) => request({
320
+ method: 'POST',
321
+ path: '/v1/sdk/push/channels/subscription',
322
+ body: p,
323
+ idempotent: true,
324
+ }),
325
+ pushChannelsList: () => request({
326
+ method: 'GET',
327
+ path: '/v1/sdk/push/channels',
328
+ idempotent: true,
329
+ }),
330
+ surveysAvailable: ({ anonymousId, externalId }) => {
331
+ const params = new URLSearchParams({ anonymousId });
332
+ if (externalId)
333
+ params.append('externalId', externalId);
334
+ return request({
335
+ method: 'GET',
336
+ path: `/v1/sdk/surveys/available?${params.toString()}`,
337
+ idempotent: true,
338
+ });
339
+ },
340
+ surveyGet: ({ surveyId, anonymousId, externalId, language }) => {
341
+ const params = new URLSearchParams({ anonymousId });
342
+ if (externalId)
343
+ params.append('externalId', externalId);
344
+ if (language)
345
+ params.append('language', language);
346
+ return request({
347
+ method: 'GET',
348
+ path: `/v1/sdk/surveys/${surveyId}?${params.toString()}`,
349
+ idempotent: true,
350
+ });
351
+ },
352
+ surveyCreateAttempt: (surveyId, body) => request({
353
+ method: 'POST',
354
+ path: `/v1/sdk/surveys/${surveyId}/attempts`,
355
+ body,
356
+ idempotent: true,
357
+ }),
358
+ surveyUpdateProgress: (attemptId, body) => request({
359
+ method: 'PATCH',
360
+ path: `/v1/sdk/surveys/attempts/${attemptId}`,
361
+ body,
362
+ idempotent: true,
363
+ }),
364
+ surveySubmitAnswers: (attemptId, body) => request({
365
+ method: 'POST',
366
+ path: `/v1/sdk/surveys/attempts/${attemptId}/responses`,
367
+ body,
368
+ idempotent: true,
369
+ }),
370
+ surveyComplete: (attemptId, body) => request({
371
+ method: 'POST',
372
+ path: `/v1/sdk/surveys/attempts/${attemptId}/complete`,
373
+ body,
374
+ idempotent: true,
375
+ }),
376
+ surveyAbandon: (attemptId) => request({
377
+ method: 'POST',
378
+ path: `/v1/sdk/surveys/attempts/${attemptId}/abandon`,
379
+ idempotent: true,
380
+ }),
381
+ surveyResolveLink: (body) => request({
382
+ method: 'POST',
383
+ path: '/v1/sdk/surveys/resolve-link',
384
+ body,
385
+ idempotent: true,
386
+ }),
387
+ // ---------- feature requests ----------
388
+ requestBranding: () => request({
389
+ method: 'GET',
390
+ path: '/v1/sdk/request-branding',
391
+ idempotent: true,
392
+ }),
393
+ requestsList: ({ anonymousId, externalId, sort, statuses, mine, q, cursor, limit }) => {
394
+ const params = new URLSearchParams({ anonymousId });
395
+ if (externalId)
396
+ params.append('externalId', externalId);
397
+ if (sort)
398
+ params.append('sort', sort);
399
+ if (statuses)
400
+ for (const s of statuses)
401
+ params.append('statuses', s);
402
+ if (mine)
403
+ params.append('mine', mine);
404
+ if (q)
405
+ params.append('q', q);
406
+ if (cursor)
407
+ params.append('cursor', cursor);
408
+ if (limit !== undefined)
409
+ params.append('limit', String(limit));
410
+ return request({
411
+ method: 'GET',
412
+ path: `/v1/sdk/requests?${params.toString()}`,
413
+ idempotent: true,
414
+ });
415
+ },
416
+ requestsSearch: ({ q, anonymousId, externalId, limit }) => {
417
+ const params = new URLSearchParams({ q, anonymousId });
418
+ if (externalId)
419
+ params.append('externalId', externalId);
420
+ if (limit !== undefined)
421
+ params.append('limit', String(limit));
422
+ return request({
423
+ method: 'GET',
424
+ path: `/v1/sdk/requests/search?${params.toString()}`,
425
+ idempotent: true,
426
+ });
427
+ },
428
+ requestGet: ({ requestId, anonymousId, externalId }) => {
429
+ const params = new URLSearchParams({ anonymousId });
430
+ if (externalId)
431
+ params.append('externalId', externalId);
432
+ return request({
433
+ method: 'GET',
434
+ path: `/v1/sdk/requests/${requestId}?${params.toString()}`,
435
+ idempotent: true,
436
+ });
437
+ },
438
+ requestSubmit: ({ idempotencyKey, anonymousId, externalId, title, description }) => request({
439
+ method: 'POST',
440
+ path: '/v1/sdk/requests',
441
+ body: { idempotencyKey, anonymousId, externalId, title, description },
442
+ idempotent: true,
443
+ }),
444
+ requestVote: ({ requestId, anonymousId, externalId, vote }) => request({
445
+ method: 'POST',
446
+ path: `/v1/sdk/requests/${requestId}/vote`,
447
+ body: { anonymousId, externalId, vote },
448
+ idempotent: true,
449
+ }),
450
+ requestFollow: ({ requestId, anonymousId, externalId, follow }) => request({
451
+ method: 'POST',
452
+ path: `/v1/sdk/requests/${requestId}/follow`,
453
+ body: { anonymousId, externalId, follow },
454
+ idempotent: true,
455
+ }),
456
+ requestCommentsList: ({ requestId, anonymousId, externalId }) => {
457
+ const params = new URLSearchParams({ anonymousId });
458
+ if (externalId)
459
+ params.append('externalId', externalId);
460
+ return request({
461
+ method: 'GET',
462
+ path: `/v1/sdk/requests/${requestId}/comments?${params.toString()}`,
463
+ idempotent: true,
464
+ });
465
+ },
466
+ requestCommentPost: ({ requestId, idempotencyKey, anonymousId, externalId, body }) => request({
467
+ method: 'POST',
468
+ path: `/v1/sdk/requests/${requestId}/comments`,
469
+ body: { idempotencyKey, anonymousId, externalId, body },
470
+ idempotent: true,
471
+ }),
472
+ requestCommentEdit: ({ requestId, commentId, anonymousId, body }) => request({
473
+ method: 'PATCH',
474
+ path: `/v1/sdk/requests/${requestId}/comments/${commentId}`,
475
+ body: { anonymousId, body },
476
+ idempotent: true,
477
+ }),
478
+ requestCommentDelete: ({ requestId, commentId, anonymousId }) => {
479
+ const params = new URLSearchParams({ anonymousId });
480
+ return request({
481
+ method: 'DELETE',
482
+ path: `/v1/sdk/requests/${requestId}/comments/${commentId}?${params.toString()}`,
483
+ idempotent: true,
484
+ });
485
+ },
486
+ cancelAll() {
487
+ try {
488
+ abortController.abort();
489
+ }
490
+ catch (e) {
491
+ reportError('transport.cancelAll failed', e);
492
+ }
493
+ abortController = new AbortController();
494
+ resetCircuit();
495
+ },
496
+ };
497
+ }
498
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/internal/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { RulesCache } from './rules-cache.js';
2
+ import type { FrequencyCapManager } from './frequency-cap.js';
3
+ import type { UserStateStore } from './user-state.js';
4
+ import type { ConsentManager } from './consent.js';
5
+ import type { EventBus } from './events.js';
6
+ export interface TriggerMatcher {
7
+ /** Returns the locally rendered prompt id, or null when the server decides. */
8
+ readonly evaluate: (eventName: string) => string | null;
9
+ /** Commits a reserved cap only after the UI presenter confirms rendering. */
10
+ readonly recordShown: (promptId: string, at?: number) => void;
11
+ /** Releases process-local reservations during reset. */
12
+ readonly resetPending: () => void;
13
+ }
14
+ export declare function createTriggerMatcher(params: {
15
+ readonly rulesCache: RulesCache;
16
+ readonly frequencyCaps: FrequencyCapManager;
17
+ readonly userState: UserStateStore;
18
+ readonly consent: ConsentManager;
19
+ readonly events: EventBus;
20
+ }): TriggerMatcher;
21
+ //# sourceMappingURL=trigger-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-matcher.d.ts","sourceRoot":"","sources":["../../src/internal/trigger-matcher.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAG3C,MAAM,WAAW,cAAc;IAC7B,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IACvD,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7D,wDAAwD;IACxD,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAA;CAClC;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAA;IAC3C,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAA;IAClC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;CAC1B,GAAG,cAAc,CAoGjB"}
@@ -0,0 +1,114 @@
1
+ // Client-side trigger matcher. Runs synchronously on every `track()`.
2
+ //
3
+ // Pipeline:
4
+ // 1. Look up armed triggers for eventName.
5
+ // 2. Evaluate segment locally via sdk-core.evaluateSerializedSegmentRules.
6
+ // 3. Check local frequency caps.
7
+ // 4. Check consent for feedback.
8
+ // 5. If all pass: emit showPrompt + record frequency cap.
9
+ //
10
+ // Server reconciles asynchronously via ingest — if the client fires the wrong
11
+ // prompt, the server flags it but we don't roll back.
12
+ import { evaluateSerializedSegmentRules } from '@usergist/sdk-core/mobile';
13
+ import { debugLog, logTrace } from './debug.js';
14
+ export function createTriggerMatcher(params) {
15
+ const { rulesCache, frequencyCaps, userState, consent, events } = params;
16
+ const pendingPromptIds = new Set();
17
+ function tryFire(trigger, eventName) {
18
+ if (trigger.clientSideEligible === false) {
19
+ logTrace({
20
+ eventName,
21
+ promptId: trigger.promptId,
22
+ outcome: 'blocked-no-trigger',
23
+ reason: 'server-authoritative',
24
+ at: new Date().toISOString(),
25
+ });
26
+ return false;
27
+ }
28
+ // Consent
29
+ if (!consent.allowsFeedback()) {
30
+ logTrace({
31
+ eventName,
32
+ promptId: trigger.promptId,
33
+ outcome: 'blocked-by-consent',
34
+ at: new Date().toISOString(),
35
+ });
36
+ return false;
37
+ }
38
+ // Segment
39
+ const user = userState.buildForEval();
40
+ if (!evaluateSerializedSegmentRules(trigger.segmentRules ?? null, user)) {
41
+ logTrace({
42
+ eventName,
43
+ promptId: trigger.promptId,
44
+ outcome: 'blocked-by-segment',
45
+ at: new Date().toISOString(),
46
+ });
47
+ return false;
48
+ }
49
+ // Frequency cap
50
+ if (pendingPromptIds.has(trigger.promptId)) {
51
+ return false;
52
+ }
53
+ const cap = frequencyCaps.canShow(trigger.promptId, trigger.frequency);
54
+ if (!cap.ok) {
55
+ logTrace({
56
+ eventName,
57
+ promptId: trigger.promptId,
58
+ outcome: 'blocked-by-cap',
59
+ reason: cap.reason,
60
+ at: new Date().toISOString(),
61
+ });
62
+ return false;
63
+ }
64
+ // Fire
65
+ pendingPromptIds.add(trigger.promptId);
66
+ const shownAt = Date.now();
67
+ debugLog('[usergist:analyze] prompt-show', {
68
+ promptId: trigger.promptId,
69
+ questionsCount: trigger.prompt.questions.length,
70
+ triggerEventName: eventName,
71
+ });
72
+ events.emit('showPrompt', {
73
+ promptId: trigger.promptId,
74
+ prompt: trigger.prompt,
75
+ theme: trigger.prompt.theme,
76
+ shownAt,
77
+ triggerEventName: eventName,
78
+ });
79
+ logTrace({
80
+ eventName,
81
+ promptId: trigger.promptId,
82
+ outcome: 'fired',
83
+ at: new Date(shownAt).toISOString(),
84
+ });
85
+ return true;
86
+ }
87
+ return {
88
+ evaluate(eventName) {
89
+ const candidates = rulesCache.getForEvent(eventName);
90
+ if (candidates.length === 0) {
91
+ logTrace({
92
+ eventName,
93
+ outcome: 'blocked-no-trigger',
94
+ at: new Date().toISOString(),
95
+ });
96
+ return null;
97
+ }
98
+ // Fire the first matching trigger. Spec says one prompt at a time.
99
+ for (const t of candidates) {
100
+ if (tryFire(t, eventName))
101
+ return t.promptId;
102
+ }
103
+ return null;
104
+ },
105
+ recordShown(promptId, at) {
106
+ pendingPromptIds.delete(promptId);
107
+ frequencyCaps.recordShown(promptId, at);
108
+ },
109
+ resetPending() {
110
+ pendingPromptIds.clear();
111
+ },
112
+ };
113
+ }
114
+ //# sourceMappingURL=trigger-matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-matcher.js","sourceRoot":"","sources":["../../src/internal/trigger-matcher.ts"],"names":[],"mappings":"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"}