@inno-isw/react-native-rtp 0.1.0 → 0.2.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 (39) hide show
  1. package/README.md +33 -10
  2. package/lib/module/client.js +184 -11
  3. package/lib/module/client.js.map +1 -1
  4. package/lib/module/constants.js +5 -0
  5. package/lib/module/constants.js.map +1 -1
  6. package/lib/module/index.js +2 -2
  7. package/lib/module/index.js.map +1 -1
  8. package/lib/module/mock/makeRtpPayload.js +3 -0
  9. package/lib/module/mock/makeRtpPayload.js.map +1 -1
  10. package/lib/module/mock/mockTransport.js +9 -2
  11. package/lib/module/mock/mockTransport.js.map +1 -1
  12. package/lib/module/react/RtpProvider.js +13 -3
  13. package/lib/module/react/RtpProvider.js.map +1 -1
  14. package/lib/module/validate.js +42 -0
  15. package/lib/module/validate.js.map +1 -1
  16. package/lib/typescript/src/client.d.ts +12 -3
  17. package/lib/typescript/src/client.d.ts.map +1 -1
  18. package/lib/typescript/src/constants.d.ts +5 -0
  19. package/lib/typescript/src/constants.d.ts.map +1 -1
  20. package/lib/typescript/src/index.d.ts +2 -2
  21. package/lib/typescript/src/index.d.ts.map +1 -1
  22. package/lib/typescript/src/mock/makeRtpPayload.d.ts.map +1 -1
  23. package/lib/typescript/src/mock/mockTransport.d.ts +7 -1
  24. package/lib/typescript/src/mock/mockTransport.d.ts.map +1 -1
  25. package/lib/typescript/src/react/RtpProvider.d.ts +6 -2
  26. package/lib/typescript/src/react/RtpProvider.d.ts.map +1 -1
  27. package/lib/typescript/src/types.d.ts +11 -0
  28. package/lib/typescript/src/types.d.ts.map +1 -1
  29. package/lib/typescript/src/validate.d.ts +11 -0
  30. package/lib/typescript/src/validate.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/src/client.ts +202 -13
  33. package/src/constants.ts +5 -0
  34. package/src/index.tsx +3 -1
  35. package/src/mock/makeRtpPayload.ts +3 -0
  36. package/src/mock/mockTransport.ts +18 -2
  37. package/src/react/RtpProvider.tsx +40 -5
  38. package/src/types.ts +11 -0
  39. package/src/validate.ts +48 -0
package/README.md CHANGED
@@ -52,16 +52,24 @@ interface RtpPayload {
52
52
  version?: string; // schema version; unknown values are ignored
53
53
  type: 'RTP'; // discriminator
54
54
  rtpId: string; // stable id — the idempotency key
55
- amount: string; // decimal string, e.g. "5000.00"
55
+ amount: number; // minor unit (e.g. kobo); integer, no floats
56
56
  currency: string; // ISO 4217, e.g. "NGN"
57
- merchant: { name: string; accountNumber?: string; bank?: string; logoUrl?: string };
57
+ payer: { name: string; accountNumber?: string; bank?: string; logoUrl?: string };
58
+ payee: { name: string; accountNumber?: string; bank?: string; logoUrl?: string };
59
+ narration?: string;
58
60
  transactionRef?: string;
61
+ orderNumber?: string; // merchant/issuer order no. (≠ transactionRef)
62
+ deepLink?: string; // secure transaction / deep-link reference
63
+ actionMessage?: string; // instruction shown to the customer
59
64
  expiresAt: string; // ISO 8601
60
65
  recipient?: string; // alias the request is addressed to
61
66
  [key: string]: unknown; // forward-compatible passthrough
62
67
  }
63
68
  ```
64
69
 
70
+ > `payer` is the party being asked to pay (your customer); `payee` is the party
71
+ > that receives the money (the merchant).
72
+
65
73
  > Unknown fields are **ignored, not rejected**, so older SDKs keep working when
66
74
  > the backend adds fields.
67
75
 
@@ -154,7 +162,7 @@ Inside your screen, render your own sheet (e.g. QTM's `QTBottomSheet`):
154
162
 
155
163
  ```tsx
156
164
  function Dashboard() {
157
- const { request, status, isReady, accept, decline, dismiss, lastResult } =
165
+ const { request, status, isReady, isLoading, accept, decline, dismiss, lastResult } =
158
166
  useRtp();
159
167
 
160
168
  return (
@@ -162,9 +170,11 @@ function Dashboard() {
162
170
  <YourDashboard />
163
171
 
164
172
  <QTBottomSheet isOpen={status !== null} onClose={dismiss}>
173
+ {isLoading && <ActivityIndicator />}
174
+
165
175
  {request && (
166
176
  <>
167
- <Text>{request.merchant.name}</Text>
177
+ <Text>{request.payee.name}</Text>
168
178
  <Text>{request.currency} {request.amount}</Text>
169
179
  <Text>{request.transactionRef}</Text>
170
180
  </>
@@ -196,16 +206,20 @@ The SDK computes status; the app only renders it.
196
206
  | Status | Meaning |
197
207
  | --- | --- |
198
208
  | `RECEIVED` | Payload arrived and passed validation. |
209
+ | `RETRIEVING` | Details are being fetched from the backend (`retrieve`). |
199
210
  | `AWAITING_AUTH` | Valid, but the user is logged out (auth gate). |
200
211
  | `READY` | Valid, authenticated, actionable — show Accept / Decline. |
201
212
  | `PROCESSING` | Accept/decline in flight. |
213
+ | `PENDING` | Backend accepted the action but a final decision is still pending. |
202
214
  | `ACCEPTED` | Backend confirmed acceptance. |
203
215
  | `DECLINED` | Backend confirmed (or user initiated) a decline. |
204
216
  | `EXPIRED` | Past `expiresAt`; no longer actionable. |
205
217
  | `FAILED` | Terminal failure. See `RtpError` for the reason. |
206
218
 
207
- `RtpError` values: `INVALID_PAYLOAD`, `RECIPIENT_MISMATCH`, `NETWORK_ERROR`,
208
- `BACKEND_REJECTED`, `UNKNOWN`.
219
+ `ACCEPTED`, `DECLINED`, `EXPIRED` and `FAILED` are terminal; `PENDING` is not.
220
+
221
+ `RtpError` values: `INVALID_PAYLOAD`, `RECIPIENT_MISMATCH`, `RETRIEVE_FAILED`,
222
+ `NETWORK_ERROR`, `BACKEND_REJECTED`, `UNKNOWN`.
209
223
 
210
224
  ---
211
225
 
@@ -216,8 +230,8 @@ function.
216
230
 
217
231
  | Event | Payload | Fires when |
218
232
  | --- | --- | --- |
219
- | `request` | `RtpRequest` | A request becomes actionable (`READY`). |
220
- | `state` | `{ id, status }` | Any status transition. |
233
+ | `request` | `RtpRequest` | A request becomes actionable (`READY`), or its details were refreshed. |
234
+ | `state` | `{ id, status }` | Any status transition, including the in-place `EXPIRED` below. |
221
235
  | `result` | `RtpResult` | A terminal outcome (`ACCEPTED`/`DECLINED`/`EXPIRED`/`FAILED`). |
222
236
 
223
237
  ```ts
@@ -236,6 +250,7 @@ off();
236
250
  | --- | --- |
237
251
  | `isRtp(payload)` | Type guard for decoded RTP payloads. |
238
252
  | `receive(payload)` | Validate, de-dupe, apply the auth gate/expiry, and emit. Returns an outcome. |
253
+ | `retrieve(id)` | Fetch/refresh authorization details and reconcile the backend status. |
239
254
  | `accept({ id, credential })` | Authorize a request. `credential` is **opaque** — the SDK forwards it untouched. |
240
255
  | `decline({ id, reason })` | Decline a request. |
241
256
  | `getStatus(id)` | Current normalized status. |
@@ -263,8 +278,16 @@ its own credential type and posts it opaquely.
263
278
 
264
279
  - **Duplicate delivery** — the same `rtpId` arriving via foreground *and*
265
280
  background (or a double tap) emits `request` exactly once.
266
- - **Expiry re-checked on every transition** — a request can expire while the
267
- sheet is open; `accept` refuses and reports `EXPIRED`.
281
+ - **Expiry fires on its own** — a timer is armed at `expiresAt`, so a request
282
+ that lapses while the sheet is open transitions to `EXPIRED` in place (a
283
+ `state` + `result` event) instead of waiting for the next user action.
284
+ - **Expiry re-checked on every transition** — `accept`/`decline`/`retrieve`
285
+ refuse an already-lapsed request and report `EXPIRED`.
286
+ - **Backend status is never assumed** — an unrecognised status from
287
+ `accept`/`retrieve` fails closed (`FAILED` / `BACKEND_REJECTED`) rather than
288
+ being reported as an approved payment.
289
+ - **Retrieve failure is contained** — a failed `retrieve` emits `FAILED` with
290
+ `RETRIEVE_FAILED`; the request is not silently dropped.
268
291
  - **Recipient mismatch** — if `payload.recipient` doesn't match `getCurrentUser()`,
269
292
  the request fails with `RECIPIENT_MISMATCH` instead of being shown.
270
293
  - **Logged-out → login resume** — a request received while logged out sits in
@@ -2,14 +2,50 @@
2
2
 
3
3
  import { RTP_ERROR, RTP_EVENT, RTP_STATUS } from "./constants.js";
4
4
  import { createEmitter, defaultNow, noopLogger } from "./emitter.js";
5
- import { findValidationErrors, isExpired, isRtpPayload, toRtpRequest } from "./validate.js";
5
+ import { findValidationErrors, isExpired, isRtpPayload, mergeRequest, toRequestPatch, toRtpRequest } from "./validate.js";
6
+ /** Statuses after which a request is finished with. */
7
+ const TERMINAL_STATUSES = new Set([RTP_STATUS.ACCEPTED, RTP_STATUS.DECLINED, RTP_STATUS.EXPIRED, RTP_STATUS.FAILED]);
8
+
9
+ /**
10
+ * Map a backend status string onto the normalized SDK status.
11
+ *
12
+ * Unknown values are deliberately **not** treated as success — they map to
13
+ * `undefined` so the caller can decide, rather than silently reporting an
14
+ * approved payment for a status the client does not understand.
15
+ */
16
+ export function normalizeBackendStatus(raw) {
17
+ if (typeof raw !== 'string') {
18
+ return undefined;
19
+ }
20
+ switch (raw.toUpperCase()) {
21
+ case 'ACCEPTED':
22
+ case 'APPROVED':
23
+ case 'SUCCESS':
24
+ case 'SUCCESSFUL':
25
+ return RTP_STATUS.ACCEPTED;
26
+ case 'DECLINED':
27
+ case 'USER_DECLINED':
28
+ return RTP_STATUS.DECLINED;
29
+ case 'EXPIRED':
30
+ return RTP_STATUS.EXPIRED;
31
+ case 'PENDING':
32
+ case 'PROCESSING':
33
+ return RTP_STATUS.PENDING;
34
+ case 'FAILED':
35
+ case 'REJECTED':
36
+ return RTP_STATUS.FAILED;
37
+ default:
38
+ return undefined;
39
+ }
40
+ }
41
+
6
42
  /**
7
43
  * Create a portable Request-to-Pay client.
8
44
  *
9
45
  * The client owns validation, de-duplication, expiry, status computation and
10
- * the accept/decline/status calls. It owns no UI, no navigation and no crypto.
11
- * Every external effect is injected so the same contract can be re-implemented
12
- * on other platforms.
46
+ * the accept/decline/retrieve calls. It owns no UI, no navigation and no
47
+ * crypto. Every external effect is injected so the same contract can be
48
+ * re-implemented on other platforms.
13
49
  */
14
50
  export function createRtpClient(options) {
15
51
  const {
@@ -25,11 +61,53 @@ export function createRtpClient(options) {
25
61
  }
26
62
  const emitter = createEmitter();
27
63
  const entries = new Map();
64
+
65
+ // --- expiry scheduling --------------------------------------------------
66
+ // Expiry is not only evaluated lazily: an inactive timer fires at `expiresAt`
67
+ // so a request cannot remain actionable after it has lapsed (INDV-3807/3808).
68
+ let expiryTimer;
69
+ let expiryTimerId;
70
+ function clearExpiryTimer() {
71
+ if (expiryTimer !== undefined) {
72
+ clearTimeout(expiryTimer);
73
+ }
74
+ expiryTimer = undefined;
75
+ expiryTimerId = undefined;
76
+ }
77
+ function scheduleExpiry(entry) {
78
+ clearExpiryTimer();
79
+ const expiry = new Date(entry.request.expiresAt).getTime();
80
+ if (Number.isNaN(expiry)) {
81
+ return;
82
+ }
83
+ const id = entry.request.id;
84
+ expiryTimerId = id;
85
+ expiryTimer = setTimeout(() => {
86
+ const current = entries.get(id);
87
+ if (!current || TERMINAL_STATUSES.has(current.status)) {
88
+ return;
89
+ }
90
+ logger('[react-native-rtp] request expired:', id);
91
+ emitResult({
92
+ id,
93
+ status: RTP_STATUS.EXPIRED
94
+ });
95
+ }, Math.max(0, expiry - now()));
96
+
97
+ // Never keep a Node process (e.g. Jest) alive for a pending expiry.
98
+ const handle = expiryTimer;
99
+ if (typeof handle?.unref === 'function') {
100
+ handle.unref();
101
+ }
102
+ }
28
103
  function setStatus(id, status) {
29
104
  const entry = entries.get(id);
30
105
  if (entry) {
31
106
  entry.status = status;
32
107
  }
108
+ if (TERMINAL_STATUSES.has(status) && expiryTimerId === id) {
109
+ clearExpiryTimer();
110
+ }
33
111
  emitter.emit(RTP_EVENT.STATE, {
34
112
  id,
35
113
  status
@@ -74,10 +152,11 @@ export function createRtpClient(options) {
74
152
  };
75
153
  }
76
154
  const request = toRtpRequest(payload);
77
- entries.set(id, {
155
+ const entry = {
78
156
  request,
79
157
  status: RTP_STATUS.RECEIVED
80
- });
158
+ };
159
+ entries.set(id, entry);
81
160
  if (isExpired(request, now())) {
82
161
  const result = emitResult({
83
162
  id,
@@ -92,6 +171,7 @@ export function createRtpClient(options) {
92
171
  const currentUser = getCurrentUser();
93
172
  if (!currentUser) {
94
173
  setStatus(id, RTP_STATUS.AWAITING_AUTH);
174
+ scheduleExpiry(entry);
95
175
  return {
96
176
  handled: true,
97
177
  request,
@@ -108,6 +188,7 @@ export function createRtpClient(options) {
108
188
  };
109
189
  }
110
190
  setStatus(id, RTP_STATUS.READY);
191
+ scheduleExpiry(entry);
111
192
  emitter.emit(RTP_EVENT.REQUEST, request);
112
193
  return {
113
194
  handled: true,
@@ -116,6 +197,82 @@ export function createRtpClient(options) {
116
197
  };
117
198
  }
118
199
 
200
+ /**
201
+ * Fetch (or refresh) authorization details for a request from the backend,
202
+ * and reconcile the backend status. This is the "retrieve details" step the
203
+ * authorization page needs before it can be trusted (INDV-3804).
204
+ */
205
+ async function retrieve(id) {
206
+ const entry = entries.get(id);
207
+ if (!entry) {
208
+ return fail(id, RTP_ERROR.UNKNOWN);
209
+ }
210
+ if (isExpired(entry.request, now())) {
211
+ return emitResult({
212
+ id,
213
+ status: RTP_STATUS.EXPIRED
214
+ });
215
+ }
216
+ if (TERMINAL_STATUSES.has(entry.status)) {
217
+ return {
218
+ id,
219
+ status: entry.status
220
+ };
221
+ }
222
+ setStatus(id, RTP_STATUS.RETRIEVING);
223
+ try {
224
+ const headers = await getAuthHeaders();
225
+ const res = await transport.get(`${basePath}/${id}`, headers);
226
+ const data = res?.data ?? {};
227
+ const mapped = normalizeBackendStatus(data.status);
228
+ if (mapped === RTP_STATUS.EXPIRED || mapped === RTP_STATUS.DECLINED || mapped === RTP_STATUS.FAILED) {
229
+ return emitResult({
230
+ id,
231
+ status: mapped,
232
+ data,
233
+ error: mapped === RTP_STATUS.FAILED ? RTP_ERROR.BACKEND_REJECTED : undefined
234
+ });
235
+ }
236
+ if (mapped === RTP_STATUS.ACCEPTED) {
237
+ return emitResult({
238
+ id,
239
+ status: RTP_STATUS.ACCEPTED,
240
+ data
241
+ });
242
+ }
243
+ if (mapped === RTP_STATUS.PENDING) {
244
+ return emitResult({
245
+ id,
246
+ status: RTP_STATUS.PENDING,
247
+ data
248
+ });
249
+ }
250
+
251
+ // Merge any returned details (a full payload, or nested under `request`).
252
+ const incoming = data.request ?? data;
253
+ if (incoming && typeof incoming === 'object') {
254
+ entry.request = mergeRequest(entry.request, toRequestPatch(incoming));
255
+ }
256
+ if (isExpired(entry.request, now())) {
257
+ return emitResult({
258
+ id,
259
+ status: RTP_STATUS.EXPIRED
260
+ });
261
+ }
262
+ setStatus(id, RTP_STATUS.READY);
263
+ scheduleExpiry(entry);
264
+ emitter.emit(RTP_EVENT.REQUEST, entry.request);
265
+ return {
266
+ id,
267
+ status: RTP_STATUS.READY,
268
+ data
269
+ };
270
+ } catch (err) {
271
+ logger('[react-native-rtp] retrieve failed:', err);
272
+ return fail(id, RTP_ERROR.RETRIEVE_FAILED);
273
+ }
274
+ }
275
+
119
276
  /**
120
277
  * Called by the host after a successful login to release any requests that
121
278
  * were waiting on the auth gate.
@@ -139,6 +296,7 @@ export function createRtpClient(options) {
139
296
  continue;
140
297
  }
141
298
  setStatus(id, RTP_STATUS.READY);
299
+ scheduleExpiry(entry);
142
300
  emitter.emit(RTP_EVENT.REQUEST, entry.request);
143
301
  }
144
302
  }
@@ -163,12 +321,19 @@ export function createRtpClient(options) {
163
321
  const res = await transport.post(`${basePath}/${id}/accept`, {
164
322
  credential
165
323
  }, headers);
166
- const backendStatus = res?.data?.status;
167
- const status = backendStatus === 'DECLINED' ? RTP_STATUS.DECLINED : backendStatus === 'FAILED' ? RTP_STATUS.FAILED : RTP_STATUS.ACCEPTED;
324
+ const data = res?.data ?? {};
325
+
326
+ // If the backend returned a status we recognise, honour it. If it
327
+ // returned no status at all, the accept call itself succeeded. If it
328
+ // returned a status we do NOT understand, fail closed rather than
329
+ // showing the customer an approved payment we cannot vouch for.
330
+ const hasStatus = data.status !== undefined && data.status !== null;
331
+ const mapped = normalizeBackendStatus(data.status);
332
+ const status = hasStatus ? mapped ?? RTP_STATUS.FAILED : RTP_STATUS.ACCEPTED;
168
333
  return emitResult({
169
334
  id,
170
335
  status,
171
- data: res?.data,
336
+ data,
172
337
  error: status === RTP_STATUS.FAILED ? RTP_ERROR.BACKEND_REJECTED : undefined
173
338
  });
174
339
  } catch (err) {
@@ -191,10 +356,14 @@ export function createRtpClient(options) {
191
356
  const res = await transport.post(`${basePath}/${id}/decline`, {
192
357
  reason
193
358
  }, headers);
359
+ const data = res?.data ?? {};
360
+ const mapped = normalizeBackendStatus(data.status);
361
+ const status = mapped === RTP_STATUS.EXPIRED || mapped === RTP_STATUS.FAILED ? mapped : RTP_STATUS.DECLINED;
194
362
  return emitResult({
195
363
  id,
196
- status: RTP_STATUS.DECLINED,
197
- data: res?.data
364
+ status,
365
+ data,
366
+ error: status === RTP_STATUS.FAILED ? RTP_ERROR.BACKEND_REJECTED : undefined
198
367
  });
199
368
  } catch (err) {
200
369
  logger('[react-native-rtp] decline failed:', err);
@@ -204,12 +373,16 @@ export function createRtpClient(options) {
204
373
  return {
205
374
  isRtp: isRtpPayload,
206
375
  receive,
376
+ retrieve,
207
377
  resumeAuth,
208
378
  accept,
209
379
  decline,
210
380
  getStatus: id => entries.get(id)?.status,
211
381
  getRequest: id => entries.get(id)?.request,
212
382
  acknowledge: id => {
383
+ if (expiryTimerId === id) {
384
+ clearExpiryTimer();
385
+ }
213
386
  entries.delete(id);
214
387
  },
215
388
  on: emitter.on
@@ -1 +1 @@
1
- {"version":3,"names":["RTP_ERROR","RTP_EVENT","RTP_STATUS","createEmitter","defaultNow","noopLogger","findValidationErrors","isExpired","isRtpPayload","toRtpRequest","createRtpClient","options","transport","getAuthHeaders","getCurrentUser","now","logger","basePath","Error","emitter","entries","Map","setStatus","id","status","entry","get","emit","STATE","emitResult","result","RESULT","fail","error","FAILED","receive","payload","handled","rtpId","existing","request","errors","length","join","INVALID_PAYLOAD","set","RECEIVED","EXPIRED","currentUser","AWAITING_AUTH","recipient","RECIPIENT_MISMATCH","READY","REQUEST","resumeAuth","accept","params","credential","UNKNOWN","PROCESSING","headers","res","post","backendStatus","data","DECLINED","ACCEPTED","BACKEND_REJECTED","undefined","err","NETWORK_ERROR","decline","reason","isRtp","getStatus","getRequest","acknowledge","delete","on"],"sourceRoot":"../../src","sources":["client.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["RTP_ERROR","RTP_EVENT","RTP_STATUS","createEmitter","defaultNow","noopLogger","findValidationErrors","isExpired","isRtpPayload","mergeRequest","toRequestPatch","toRtpRequest","TERMINAL_STATUSES","Set","ACCEPTED","DECLINED","EXPIRED","FAILED","normalizeBackendStatus","raw","undefined","toUpperCase","PENDING","createRtpClient","options","transport","getAuthHeaders","getCurrentUser","now","logger","basePath","Error","emitter","entries","Map","expiryTimer","expiryTimerId","clearExpiryTimer","clearTimeout","scheduleExpiry","entry","expiry","Date","request","expiresAt","getTime","Number","isNaN","id","setTimeout","current","get","has","status","emitResult","Math","max","handle","unref","setStatus","emit","STATE","result","RESULT","fail","error","receive","payload","handled","rtpId","existing","errors","length","join","INVALID_PAYLOAD","RECEIVED","set","currentUser","AWAITING_AUTH","recipient","RECIPIENT_MISMATCH","READY","REQUEST","retrieve","UNKNOWN","RETRIEVING","headers","res","data","mapped","BACKEND_REJECTED","incoming","err","RETRIEVE_FAILED","resumeAuth","accept","params","credential","PROCESSING","post","hasStatus","NETWORK_ERROR","decline","reason","isRtp","getStatus","getRequest","acknowledge","delete","on"],"sourceRoot":"../../src","sources":["client.ts"],"mappings":"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","ignoreList":[]}
@@ -9,6 +9,8 @@
9
9
  export const RTP_STATUS = {
10
10
  /** Payload arrived and passed validation, but is not yet actionable. */
11
11
  RECEIVED: 'RECEIVED',
12
+ /** Authorization details are being fetched from the backend. */
13
+ RETRIEVING: 'RETRIEVING',
12
14
  /** Expired before it could be actioned. */
13
15
  EXPIRED: 'EXPIRED',
14
16
  /** Valid, but the user is not authenticated yet (login gate). */
@@ -17,6 +19,8 @@ export const RTP_STATUS = {
17
19
  READY: 'READY',
18
20
  /** Accept/decline in flight. */
19
21
  PROCESSING: 'PROCESSING',
22
+ /** Backend accepted the action but a final decision is still pending. */
23
+ PENDING: 'PENDING',
20
24
  /** Backend confirmed acceptance. */
21
25
  ACCEPTED: 'ACCEPTED',
22
26
  /** Backend confirmed (or user initiated) a decline. */
@@ -37,6 +41,7 @@ export const RTP_EVENT = {
37
41
  export const RTP_ERROR = {
38
42
  INVALID_PAYLOAD: 'INVALID_PAYLOAD',
39
43
  RECIPIENT_MISMATCH: 'RECIPIENT_MISMATCH',
44
+ RETRIEVE_FAILED: 'RETRIEVE_FAILED',
40
45
  NETWORK_ERROR: 'NETWORK_ERROR',
41
46
  BACKEND_REJECTED: 'BACKEND_REJECTED',
42
47
  UNKNOWN: 'UNKNOWN'
@@ -1 +1 @@
1
- {"version":3,"names":["RTP_STATUS","RECEIVED","EXPIRED","AWAITING_AUTH","READY","PROCESSING","ACCEPTED","DECLINED","FAILED","RTP_EVENT","REQUEST","STATE","RESULT","RTP_ERROR","INVALID_PAYLOAD","RECIPIENT_MISMATCH","NETWORK_ERROR","BACKEND_REJECTED","UNKNOWN"],"sourceRoot":"../../src","sources":["constants.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,UAAU,GAAG;EACxB;EACAC,QAAQ,EAAE,UAAU;EACpB;EACAC,OAAO,EAAE,SAAS;EAClB;EACAC,aAAa,EAAE,eAAe;EAC9B;EACAC,KAAK,EAAE,OAAO;EACd;EACAC,UAAU,EAAE,YAAY;EACxB;EACAC,QAAQ,EAAE,UAAU;EACpB;EACAC,QAAQ,EAAE,UAAU;EACpB;EACAC,MAAM,EAAE;AACV,CAAU;AAIV;AACA,OAAO,MAAMC,SAAS,GAAG;EACvB;EACAC,OAAO,EAAE,SAAS;EAClB;EACAC,KAAK,EAAE,OAAO;EACd;EACAC,MAAM,EAAE;AACV,CAAU;AAIV;AACA,OAAO,MAAMC,SAAS,GAAG;EACvBC,eAAe,EAAE,iBAAiB;EAClCC,kBAAkB,EAAE,oBAAoB;EACxCC,aAAa,EAAE,eAAe;EAC9BC,gBAAgB,EAAE,kBAAkB;EACpCC,OAAO,EAAE;AACX,CAAU","ignoreList":[]}
1
+ {"version":3,"names":["RTP_STATUS","RECEIVED","RETRIEVING","EXPIRED","AWAITING_AUTH","READY","PROCESSING","PENDING","ACCEPTED","DECLINED","FAILED","RTP_EVENT","REQUEST","STATE","RESULT","RTP_ERROR","INVALID_PAYLOAD","RECIPIENT_MISMATCH","RETRIEVE_FAILED","NETWORK_ERROR","BACKEND_REJECTED","UNKNOWN"],"sourceRoot":"../../src","sources":["constants.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,UAAU,GAAG;EACxB;EACAC,QAAQ,EAAE,UAAU;EACpB;EACAC,UAAU,EAAE,YAAY;EACxB;EACAC,OAAO,EAAE,SAAS;EAClB;EACAC,aAAa,EAAE,eAAe;EAC9B;EACAC,KAAK,EAAE,OAAO;EACd;EACAC,UAAU,EAAE,YAAY;EACxB;EACAC,OAAO,EAAE,SAAS;EAClB;EACAC,QAAQ,EAAE,UAAU;EACpB;EACAC,QAAQ,EAAE,UAAU;EACpB;EACAC,MAAM,EAAE;AACV,CAAU;AAIV;AACA,OAAO,MAAMC,SAAS,GAAG;EACvB;EACAC,OAAO,EAAE,SAAS;EAClB;EACAC,KAAK,EAAE,OAAO;EACd;EACAC,MAAM,EAAE;AACV,CAAU;AAIV;AACA,OAAO,MAAMC,SAAS,GAAG;EACvBC,eAAe,EAAE,iBAAiB;EAClCC,kBAAkB,EAAE,oBAAoB;EACxCC,eAAe,EAAE,iBAAiB;EAClCC,aAAa,EAAE,eAAe;EAC9BC,gBAAgB,EAAE,kBAAkB;EACpCC,OAAO,EAAE;AACX,CAAU","ignoreList":[]}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
 
3
3
  // Core (platform-agnostic)
4
- export { createRtpClient } from "./client.js";
4
+ export { createRtpClient, normalizeBackendStatus } from "./client.js";
5
5
  export { RTP_STATUS, RTP_EVENT, RTP_ERROR } from "./constants.js";
6
- export { isRtpPayload, findValidationErrors, toRtpRequest, isExpired } from "./validate.js";
6
+ export { isRtpPayload, findValidationErrors, toRtpRequest, toRequestPatch, mergeRequest, isExpired } from "./validate.js";
7
7
  export { mapPushToRtp } from "./push.js";
8
8
 
9
9
  // Types
@@ -1 +1 @@
1
- {"version":3,"names":["createRtpClient","RTP_STATUS","RTP_EVENT","RTP_ERROR","isRtpPayload","findValidationErrors","toRtpRequest","isExpired","mapPushToRtp","RtpProvider","useRtp","RtpContext","createMockTransport","makeRtpPayload","makeExpiredPayload"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA,SAASA,eAAe,QAAQ,aAAU;AAC1C,SAASC,UAAU,EAAEC,SAAS,EAAEC,SAAS,QAAQ,gBAAa;AAE9D,SACEC,YAAY,EACZC,oBAAoB,EACpBC,YAAY,EACZC,SAAS,QACJ,eAAY;AACnB,SAASC,YAAY,QAAQ,WAAQ;;AAGrC;;AAiBA;AACA,SAASC,WAAW,EAAEC,MAAM,EAAEC,UAAU,QAAQ,wBAAqB;AAGrE;AACA,SAASC,mBAAmB,QAAQ,yBAAsB;AAM1D,SAASC,cAAc,EAAEC,kBAAkB,QAAQ,0BAAuB","ignoreList":[]}
1
+ {"version":3,"names":["createRtpClient","normalizeBackendStatus","RTP_STATUS","RTP_EVENT","RTP_ERROR","isRtpPayload","findValidationErrors","toRtpRequest","toRequestPatch","mergeRequest","isExpired","mapPushToRtp","RtpProvider","useRtp","RtpContext","createMockTransport","makeRtpPayload","makeExpiredPayload"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA,SAASA,eAAe,EAAEC,sBAAsB,QAAQ,aAAU;AAClE,SAASC,UAAU,EAAEC,SAAS,EAAEC,SAAS,QAAQ,gBAAa;AAE9D,SACEC,YAAY,EACZC,oBAAoB,EACpBC,YAAY,EACZC,cAAc,EACdC,YAAY,EACZC,SAAS,QACJ,eAAY;AACnB,SAASC,YAAY,QAAQ,WAAQ;;AAGrC;;AAiBA;AACA,SAASC,WAAW,EAAEC,MAAM,EAAEC,UAAU,QAAQ,wBAAqB;AAGrE;AACA,SAASC,mBAAmB,QAAQ,yBAAsB;AAM1D,SAASC,cAAc,EAAEC,kBAAkB,QAAQ,0BAAuB","ignoreList":[]}
@@ -24,6 +24,9 @@ export function makeRtpPayload(overrides = {}) {
24
24
  currency: 'NGN',
25
25
  narration: 'Payment for invoice 1042',
26
26
  transactionRef: `TRX-${from}-${counter}`,
27
+ orderNumber: `ORD-${from}-${counter}`,
28
+ deepLink: `quickteller://rtp/${from}-${counter}`,
29
+ actionMessage: 'Review and approve this payment request',
27
30
  recipient: 'john.doe@quickteller.com',
28
31
  expiresAt: new Date(from + expiresInMs).toISOString(),
29
32
  payer: {
@@ -1 +1 @@
1
- {"version":3,"names":["MINUTE","counter","makeRtpPayload","overrides","payer","payee","expiresInMs","from","Date","now","rest","version","type","rtpId","amount","currency","narration","transactionRef","recipient","expiresAt","toISOString","name","accountNumber","bank","makeExpiredPayload"],"sourceRoot":"../../../src","sources":["mock/makeRtpPayload.ts"],"mappings":";;AAEA;AACA,MAAMA,MAAM,GAAG,MAAM;AAErB,IAAIC,OAAO,GAAG,CAAC;AAaf;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAC5BC,SAAkC,GAAG,CAAC,CAAC,EAC3B;EACZ,MAAM;IACJC,KAAK;IACLC,KAAK;IACLC,WAAW,GAAG,EAAE,GAAGN,MAAM;IACzBO,IAAI,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IACjB,GAAGC;EACL,CAAC,GAAGP,SAAS;EAEbF,OAAO,IAAI,CAAC;EAEZ,OAAO;IACLU,OAAO,EAAE,KAAK;IACdC,IAAI,EAAE,KAAK;IACXC,KAAK,EAAE,OAAON,IAAI,IAAIN,OAAO,EAAE;IAC/Ba,MAAM,EAAE,MAAM;IACdC,QAAQ,EAAE,KAAK;IACfC,SAAS,EAAE,0BAA0B;IACrCC,cAAc,EAAE,OAAOV,IAAI,IAAIN,OAAO,EAAE;IACxCiB,SAAS,EAAE,0BAA0B;IACrCC,SAAS,EAAE,IAAIX,IAAI,CAACD,IAAI,GAAGD,WAAW,CAAC,CAACc,WAAW,CAAC,CAAC;IACrDhB,KAAK,EAAE;MACLiB,IAAI,EAAE,kBAAkB;MACxBC,aAAa,EAAE,YAAY;MAC3BC,IAAI,EAAE,iBAAiB;MACvB,GAAGnB;IACL,CAAC;IACDC,KAAK,EAAE;MACLgB,IAAI,EAAE,mBAAmB;MACzBC,aAAa,EAAE,YAAY;MAC3B,GAAGjB;IACL,CAAC;IACD,GAAGK;EACL,CAAC;AACH;;AAEA;AACA,OAAO,SAASc,kBAAkBA,CAChCrB,SAAkC,GAAG,CAAC,CAAC,EAC3B;EACZ,OAAOD,cAAc,CAAC;IAAE,GAAGC,SAAS;IAAEG,WAAW,EAAE,CAACN;EAAO,CAAC,CAAC;AAC/D","ignoreList":[]}
1
+ {"version":3,"names":["MINUTE","counter","makeRtpPayload","overrides","payer","payee","expiresInMs","from","Date","now","rest","version","type","rtpId","amount","currency","narration","transactionRef","orderNumber","deepLink","actionMessage","recipient","expiresAt","toISOString","name","accountNumber","bank","makeExpiredPayload"],"sourceRoot":"../../../src","sources":["mock/makeRtpPayload.ts"],"mappings":";;AAEA;AACA,MAAMA,MAAM,GAAG,MAAM;AAErB,IAAIC,OAAO,GAAG,CAAC;AAaf;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAC5BC,SAAkC,GAAG,CAAC,CAAC,EAC3B;EACZ,MAAM;IACJC,KAAK;IACLC,KAAK;IACLC,WAAW,GAAG,EAAE,GAAGN,MAAM;IACzBO,IAAI,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IACjB,GAAGC;EACL,CAAC,GAAGP,SAAS;EAEbF,OAAO,IAAI,CAAC;EAEZ,OAAO;IACLU,OAAO,EAAE,KAAK;IACdC,IAAI,EAAE,KAAK;IACXC,KAAK,EAAE,OAAON,IAAI,IAAIN,OAAO,EAAE;IAC/Ba,MAAM,EAAE,MAAM;IACdC,QAAQ,EAAE,KAAK;IACfC,SAAS,EAAE,0BAA0B;IACrCC,cAAc,EAAE,OAAOV,IAAI,IAAIN,OAAO,EAAE;IACxCiB,WAAW,EAAE,OAAOX,IAAI,IAAIN,OAAO,EAAE;IACrCkB,QAAQ,EAAE,qBAAqBZ,IAAI,IAAIN,OAAO,EAAE;IAChDmB,aAAa,EAAE,yCAAyC;IACxDC,SAAS,EAAE,0BAA0B;IACrCC,SAAS,EAAE,IAAId,IAAI,CAACD,IAAI,GAAGD,WAAW,CAAC,CAACiB,WAAW,CAAC,CAAC;IACrDnB,KAAK,EAAE;MACLoB,IAAI,EAAE,kBAAkB;MACxBC,aAAa,EAAE,YAAY;MAC3BC,IAAI,EAAE,iBAAiB;MACvB,GAAGtB;IACL,CAAC;IACDC,KAAK,EAAE;MACLmB,IAAI,EAAE,mBAAmB;MACzBC,aAAa,EAAE,YAAY;MAC3B,GAAGpB;IACL,CAAC;IACD,GAAGK;EACL,CAAC;AACH;;AAEA;AACA,OAAO,SAASiB,kBAAkBA,CAChCxB,SAAkC,GAAG,CAAC,CAAC,EAC3B;EACZ,OAAOD,cAAc,CAAC;IAAE,GAAGC,SAAS;IAAEG,WAAW,EAAE,CAACN;EAAO,CAAC,CAAC;AAC/D","ignoreList":[]}
@@ -13,7 +13,10 @@ export function createMockTransport(options = {}) {
13
13
  latencyMs = 250,
14
14
  failAccept = false,
15
15
  failDecline = false,
16
- acceptStatus = 'ACCEPTED'
16
+ failRetrieve = false,
17
+ acceptStatus = 'ACCEPTED',
18
+ retrieveStatus = 'READY',
19
+ retrieveRequest
17
20
  } = options;
18
21
  const calls = [];
19
22
  const delay = () => new Promise(resolve => setTimeout(resolve, latencyMs));
@@ -62,11 +65,15 @@ export function createMockTransport(options = {}) {
62
65
  headers
63
66
  });
64
67
  await delay();
68
+ if (failRetrieve) {
69
+ throw new Error('Mock network failure on retrieve');
70
+ }
65
71
  return {
66
72
  status: 200,
67
73
  data: {
68
74
  id: extractId(path),
69
- status: 'PENDING'
75
+ status: retrieveStatus,
76
+ request: retrieveRequest
70
77
  }
71
78
  };
72
79
  }
@@ -1 +1 @@
1
- {"version":3,"names":["extractId","path","parts","split","length","createMockTransport","options","latencyMs","failAccept","failDecline","acceptStatus","calls","delay","Promise","resolve","setTimeout","transport","post","body","headers","push","method","endsWith","Error","status","data","id","get","reset"],"sourceRoot":"../../../src","sources":["mock/mockTransport.ts"],"mappings":";;AA4BA,MAAMA,SAAS,GAAIC,IAAY,IAAa;EAC1C,MAAMC,KAAK,GAAGD,IAAI,CAACE,KAAK,CAAC,GAAG,CAAC;EAC7B,OAAOD,KAAK,CAACA,KAAK,CAACE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE;AACtC,CAAC;;AAED;AACA;AACA;AACA,OAAO,SAASC,mBAAmBA,CACjCC,OAA6B,GAAG,CAAC,CAAC,EACnB;EACf,MAAM;IACJC,SAAS,GAAG,GAAG;IACfC,UAAU,GAAG,KAAK;IAClBC,WAAW,GAAG,KAAK;IACnBC,YAAY,GAAG;EACjB,CAAC,GAAGJ,OAAO;EAEX,MAAMK,KAAqB,GAAG,EAAE;EAChC,MAAMC,KAAK,GAAGA,CAAA,KACZ,IAAIC,OAAO,CAAQC,OAAO,IAAKC,UAAU,CAACD,OAAO,EAAEP,SAAS,CAAC,CAAC;EAEhE,MAAMS,SAAuB,GAAG;IAC9B,MAAMC,IAAIA,CACRhB,IAAY,EACZiB,IAAc,EACdC,OAAgC,EACH;MAC7BR,KAAK,CAACS,IAAI,CAAC;QAAEC,MAAM,EAAE,MAAM;QAAEpB,IAAI;QAAEiB,IAAI;QAAEC;MAAQ,CAAC,CAAC;MACnD,MAAMP,KAAK,CAAC,CAAC;MAEb,IAAIX,IAAI,CAACqB,QAAQ,CAAC,SAAS,CAAC,EAAE;QAC5B,IAAId,UAAU,EAAE;UACd,MAAM,IAAIe,KAAK,CAAC,gCAAgC,CAAC;QACnD;QACA,OAAO;UACLC,MAAM,EAAE,GAAG;UACXC,IAAI,EAAE;YAAEC,EAAE,EAAE1B,SAAS,CAACC,IAAI,CAAC;YAAEuB,MAAM,EAAEd;UAAa;QACpD,CAAC;MACH;MAEA,IAAIT,IAAI,CAACqB,QAAQ,CAAC,UAAU,CAAC,EAAE;QAC7B,IAAIb,WAAW,EAAE;UACf,MAAM,IAAIc,KAAK,CAAC,iCAAiC,CAAC;QACpD;QACA,OAAO;UACLC,MAAM,EAAE,GAAG;UACXC,IAAI,EAAE;YAAEC,EAAE,EAAE1B,SAAS,CAACC,IAAI,CAAC;YAAEuB,MAAM,EAAE;UAAW;QAClD,CAAC;MACH;MAEA,OAAO;QAAEA,MAAM,EAAE,GAAG;QAAEC,IAAI,EAAE,CAAC;MAAO,CAAC;IACvC,CAAC;IAED,MAAME,GAAGA,CACP1B,IAAY,EACZkB,OAAgC,EACH;MAC7BR,KAAK,CAACS,IAAI,CAAC;QAAEC,MAAM,EAAE,KAAK;QAAEpB,IAAI;QAAEkB;MAAQ,CAAC,CAAC;MAC5C,MAAMP,KAAK,CAAC,CAAC;MACb,OAAO;QACLY,MAAM,EAAE,GAAG;QACXC,IAAI,EAAE;UAAEC,EAAE,EAAE1B,SAAS,CAACC,IAAI,CAAC;UAAEuB,MAAM,EAAE;QAAU;MACjD,CAAC;IACH;EACF,CAAC;EAED,OAAO;IACLR,SAAS;IACTL,KAAK;IACLiB,KAAK,EAAEA,CAAA,KAAM;MACXjB,KAAK,CAACP,MAAM,GAAG,CAAC;IAClB;EACF,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["extractId","path","parts","split","length","createMockTransport","options","latencyMs","failAccept","failDecline","failRetrieve","acceptStatus","retrieveStatus","retrieveRequest","calls","delay","Promise","resolve","setTimeout","transport","post","body","headers","push","method","endsWith","Error","status","data","id","get","request","reset"],"sourceRoot":"../../../src","sources":["mock/mockTransport.ts"],"mappings":";;AAkCA,MAAMA,SAAS,GAAIC,IAAY,IAAa;EAC1C,MAAMC,KAAK,GAAGD,IAAI,CAACE,KAAK,CAAC,GAAG,CAAC;EAC7B,OAAOD,KAAK,CAACA,KAAK,CAACE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE;AACtC,CAAC;;AAED;AACA;AACA;AACA,OAAO,SAASC,mBAAmBA,CACjCC,OAA6B,GAAG,CAAC,CAAC,EACnB;EACf,MAAM;IACJC,SAAS,GAAG,GAAG;IACfC,UAAU,GAAG,KAAK;IAClBC,WAAW,GAAG,KAAK;IACnBC,YAAY,GAAG,KAAK;IACpBC,YAAY,GAAG,UAAU;IACzBC,cAAc,GAAG,OAAO;IACxBC;EACF,CAAC,GAAGP,OAAO;EAEX,MAAMQ,KAAqB,GAAG,EAAE;EAChC,MAAMC,KAAK,GAAGA,CAAA,KACZ,IAAIC,OAAO,CAAQC,OAAO,IAAKC,UAAU,CAACD,OAAO,EAAEV,SAAS,CAAC,CAAC;EAEhE,MAAMY,SAAuB,GAAG;IAC9B,MAAMC,IAAIA,CACRnB,IAAY,EACZoB,IAAc,EACdC,OAAgC,EACH;MAC7BR,KAAK,CAACS,IAAI,CAAC;QAAEC,MAAM,EAAE,MAAM;QAAEvB,IAAI;QAAEoB,IAAI;QAAEC;MAAQ,CAAC,CAAC;MACnD,MAAMP,KAAK,CAAC,CAAC;MAEb,IAAId,IAAI,CAACwB,QAAQ,CAAC,SAAS,CAAC,EAAE;QAC5B,IAAIjB,UAAU,EAAE;UACd,MAAM,IAAIkB,KAAK,CAAC,gCAAgC,CAAC;QACnD;QACA,OAAO;UACLC,MAAM,EAAE,GAAG;UACXC,IAAI,EAAE;YAAEC,EAAE,EAAE7B,SAAS,CAACC,IAAI,CAAC;YAAE0B,MAAM,EAAEhB;UAAa;QACpD,CAAC;MACH;MAEA,IAAIV,IAAI,CAACwB,QAAQ,CAAC,UAAU,CAAC,EAAE;QAC7B,IAAIhB,WAAW,EAAE;UACf,MAAM,IAAIiB,KAAK,CAAC,iCAAiC,CAAC;QACpD;QACA,OAAO;UACLC,MAAM,EAAE,GAAG;UACXC,IAAI,EAAE;YAAEC,EAAE,EAAE7B,SAAS,CAACC,IAAI,CAAC;YAAE0B,MAAM,EAAE;UAAW;QAClD,CAAC;MACH;MAEA,OAAO;QAAEA,MAAM,EAAE,GAAG;QAAEC,IAAI,EAAE,CAAC;MAAO,CAAC;IACvC,CAAC;IAED,MAAME,GAAGA,CACP7B,IAAY,EACZqB,OAAgC,EACH;MAC7BR,KAAK,CAACS,IAAI,CAAC;QAAEC,MAAM,EAAE,KAAK;QAAEvB,IAAI;QAAEqB;MAAQ,CAAC,CAAC;MAC5C,MAAMP,KAAK,CAAC,CAAC;MACb,IAAIL,YAAY,EAAE;QAChB,MAAM,IAAIgB,KAAK,CAAC,kCAAkC,CAAC;MACrD;MACA,OAAO;QACLC,MAAM,EAAE,GAAG;QACXC,IAAI,EAAE;UACJC,EAAE,EAAE7B,SAAS,CAACC,IAAI,CAAC;UACnB0B,MAAM,EAAEf,cAAc;UACtBmB,OAAO,EAAElB;QACX;MACF,CAAC;IACH;EACF,CAAC;EAED,OAAO;IACLM,SAAS;IACTL,KAAK;IACLkB,KAAK,EAAEA,CAAA,KAAM;MACXlB,KAAK,CAACV,MAAM,GAAG,CAAC;IAClB;EACF,CAAC;AACH","ignoreList":[]}
@@ -30,9 +30,9 @@ export function RtpProvider({
30
30
 
31
31
  // Keep the latest request id so async resume/drain can target it.
32
32
  const activeIdRef = useRef(null);
33
- const receive = useCallback(payload => {
33
+ const receive = useCallback(async payload => {
34
34
  onIncomingPayload?.(payload);
35
- client.receive(payload);
35
+ return client.receive(payload);
36
36
  }, [client, onIncomingPayload]);
37
37
 
38
38
  // Subscribe to client events exactly once per client.
@@ -106,6 +106,13 @@ export function RtpProvider({
106
106
  reason
107
107
  });
108
108
  }, [client, request]);
109
+ const retrieve = useCallback(async id => {
110
+ const target = id ?? request?.id ?? activeIdRef.current;
111
+ if (!target) {
112
+ return undefined;
113
+ }
114
+ return client.retrieve(target);
115
+ }, [client, request]);
109
116
  const dismiss = useCallback(() => {
110
117
  setRequest(null);
111
118
  setStatus(null);
@@ -113,16 +120,19 @@ export function RtpProvider({
113
120
  activeIdRef.current = null;
114
121
  }, []);
115
122
  const isReady = status === RTP_STATUS.READY;
123
+ const isLoading = status === RTP_STATUS.RETRIEVING;
116
124
  const value = useMemo(() => ({
117
125
  request,
118
126
  status,
119
127
  isReady,
128
+ isLoading,
120
129
  accept,
121
130
  decline,
131
+ retrieve,
122
132
  dismiss,
123
133
  receive,
124
134
  lastResult
125
- }), [request, status, isReady, accept, decline, dismiss, receive, lastResult]);
135
+ }), [request, status, isReady, isLoading, accept, decline, retrieve, dismiss, receive, lastResult]);
126
136
  return /*#__PURE__*/_jsx(RtpContext.Provider, {
127
137
  value: value,
128
138
  children: children
@@ -1 +1 @@
1
- {"version":3,"names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","RTP_STATUS","jsx","_jsx","STORAGE_KEY","RtpContext","RtpProvider","client","isAuthenticated","storage","onIncomingPayload","children","request","setRequest","status","setStatus","lastResult","setLastResult","activeIdRef","receive","payload","offRequest","on","req","current","id","offState","next","offResult","result","cancelled","drain","raw","getItem","removeItem","JSON","parse","resumeAuth","accept","credential","undefined","decline","reason","dismiss","isReady","READY","value","Provider","useRtp","context","Error"],"sourceRoot":"../../../src","sources":["react/RtpProvider.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","RTP_STATUS","jsx","_jsx","STORAGE_KEY","RtpContext","RtpProvider","client","isAuthenticated","storage","onIncomingPayload","children","request","setRequest","status","setStatus","lastResult","setLastResult","activeIdRef","receive","payload","offRequest","on","req","current","id","offState","next","offResult","result","cancelled","drain","raw","getItem","removeItem","JSON","parse","resumeAuth","accept","credential","undefined","decline","reason","retrieve","target","dismiss","isReady","READY","isLoading","RETRIEVING","value","Provider","useRtp","context","Error"],"sourceRoot":"../../../src","sources":["react/RtpProvider.tsx"],"mappings":"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","ignoreList":[]}