@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.
- package/README.md +33 -10
- package/lib/module/client.js +184 -11
- package/lib/module/client.js.map +1 -1
- package/lib/module/constants.js +5 -0
- package/lib/module/constants.js.map +1 -1
- package/lib/module/index.js +2 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/mock/makeRtpPayload.js +3 -0
- package/lib/module/mock/makeRtpPayload.js.map +1 -1
- package/lib/module/mock/mockTransport.js +9 -2
- package/lib/module/mock/mockTransport.js.map +1 -1
- package/lib/module/react/RtpProvider.js +13 -3
- package/lib/module/react/RtpProvider.js.map +1 -1
- package/lib/module/validate.js +42 -0
- package/lib/module/validate.js.map +1 -1
- package/lib/typescript/src/client.d.ts +12 -3
- package/lib/typescript/src/client.d.ts.map +1 -1
- package/lib/typescript/src/constants.d.ts +5 -0
- package/lib/typescript/src/constants.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/mock/makeRtpPayload.d.ts.map +1 -1
- package/lib/typescript/src/mock/mockTransport.d.ts +7 -1
- package/lib/typescript/src/mock/mockTransport.d.ts.map +1 -1
- package/lib/typescript/src/react/RtpProvider.d.ts +6 -2
- package/lib/typescript/src/react/RtpProvider.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +11 -0
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/validate.d.ts +11 -0
- package/lib/typescript/src/validate.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/client.ts +202 -13
- package/src/constants.ts +5 -0
- package/src/index.tsx +3 -1
- package/src/mock/makeRtpPayload.ts +3 -0
- package/src/mock/mockTransport.ts +18 -2
- package/src/react/RtpProvider.tsx +40 -5
- package/src/types.ts +11 -0
- 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:
|
|
55
|
+
amount: number; // minor unit (e.g. kobo); integer, no floats
|
|
56
56
|
currency: string; // ISO 4217, e.g. "NGN"
|
|
57
|
-
|
|
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.
|
|
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
|
-
`
|
|
208
|
-
|
|
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
|
|
267
|
-
sheet is open
|
|
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
|
package/lib/module/client.js
CHANGED
|
@@ -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/
|
|
11
|
-
* Every external effect is injected so the same contract can be
|
|
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
|
-
|
|
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
|
|
167
|
-
|
|
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
|
|
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
|
|
197
|
-
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
|
package/lib/module/client.js.map
CHANGED
|
@@ -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":[]}
|
package/lib/module/constants.js
CHANGED
|
@@ -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":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -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
|
package/lib/module/index.js.map
CHANGED
|
@@ -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;
|
|
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,
|
|
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
|
-
|
|
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:
|
|
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":";;
|
|
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":";;AAAA,OAAOA,KAAK,IACVC,aAAa,EACbC,WAAW,EACXC,UAAU,EACVC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;
|
|
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":";;AAAA,OAAOA,KAAK,IACVC,aAAa,EACbC,WAAW,EACXC,UAAU,EACVC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AAQd,SAASC,UAAU,QAAQ,iBAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAG1C,MAAMC,WAAW,GAAG,oBAAoB;;AAExC;AACA;AACA;AACA;AACA;;AA6CA,OAAO,MAAMC,UAAU,gBAAGX,aAAa,CAAyB,IAAI,CAAC;;AAErE;AACA;AACA;AACA;AACA,OAAO,SAASY,WAAWA,CAAC;EAC1BC,MAAM;EACNC,eAAe;EACfC,OAAO;EACPC,iBAAiB;EACjBC;AACgB,CAAC,EAAE;EACnB,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGb,QAAQ,CAAoB,IAAI,CAAC;EAC/D,MAAM,CAACc,MAAM,EAAEC,SAAS,CAAC,GAAGf,QAAQ,CAAmB,IAAI,CAAC;EAC5D,MAAM,CAACgB,UAAU,EAAEC,aAAa,CAAC,GAAGjB,QAAQ,CAAmB,IAAI,CAAC;;EAEpE;EACA,MAAMkB,WAAW,GAAGnB,MAAM,CAAgB,IAAI,CAAC;EAE/C,MAAMoB,OAAO,GAAGxB,WAAW,CACzB,MAAOyB,OAAgB,IAAK;IAC1BV,iBAAiB,GAAGU,OAAO,CAAC;IAC5B,OAAOb,MAAM,CAACY,OAAO,CAACC,OAAO,CAAC;EAChC,CAAC,EACD,CAACb,MAAM,EAAEG,iBAAiB,CAC5B,CAAC;;EAED;EACAb,SAAS,CAAC,MAAM;IACd,MAAMwB,UAAU,GAAGd,MAAM,CAACe,EAAE,CAAC,SAAS,EAAGC,GAAG,IAAK;MAC/CL,WAAW,CAACM,OAAO,GAAGD,GAAG,CAACE,EAAE;MAC5BZ,UAAU,CAACU,GAAG,CAAC;IACjB,CAAC,CAAC;IAEF,MAAMG,QAAQ,GAAGnB,MAAM,CAACe,EAAE,CAAC,OAAO,EAAE,CAAC;MAAEG,EAAE;MAAEX,MAAM,EAAEa;IAAK,CAAC,KAAK;MAC5D,IAAIT,WAAW,CAACM,OAAO,IAAIC,EAAE,KAAKP,WAAW,CAACM,OAAO,EAAE;QACrD;MACF;MACAT,SAAS,CAACY,IAAI,CAAC;IACjB,CAAC,CAAC;IAEF,MAAMC,SAAS,GAAGrB,MAAM,CAACe,EAAE,CAAC,QAAQ,EAAGO,MAAM,IAAK;MAChDZ,aAAa,CAACY,MAAM,CAAC;IACvB,CAAC,CAAC;IAEF,OAAO,MAAM;MACXR,UAAU,CAAC,CAAC;MACZK,QAAQ,CAAC,CAAC;MACVE,SAAS,CAAC,CAAC;IACb,CAAC;EACH,CAAC,EAAE,CAACrB,MAAM,CAAC,CAAC;;EAEZ;EACAV,SAAS,CAAC,MAAM;IACd,IAAIiC,SAAS,GAAG,KAAK;IACrB,eAAeC,KAAKA,CAAA,EAAG;MACrB,IAAI,CAACtB,OAAO,EAAE;QACZ;MACF;MACA,MAAMuB,GAAG,GAAG,MAAMvB,OAAO,CAACwB,OAAO,CAAC7B,WAAW,CAAC;MAC9C,IAAI,CAAC4B,GAAG,IAAIF,SAAS,EAAE;QACrB;MACF;MACA,MAAMrB,OAAO,CAACyB,UAAU,CAAC9B,WAAW,CAAC;MACrCG,MAAM,CAACY,OAAO,CAACgB,IAAI,CAACC,KAAK,CAACJ,GAAG,CAAC,CAAC;IACjC;IACAD,KAAK,CAAC,CAAC;IACP,OAAO,MAAM;MACXD,SAAS,GAAG,IAAI;IAClB,CAAC;EACH,CAAC,EAAE,CAACvB,MAAM,EAAEE,OAAO,CAAC,CAAC;;EAErB;EACAZ,SAAS,CAAC,MAAM;IACd,IAAIW,eAAe,EAAE;MACnBD,MAAM,CAAC8B,UAAU,CAAC,CAAC;IACrB;EACF,CAAC,EAAE,CAAC9B,MAAM,EAAEC,eAAe,CAAC,CAAC;EAE7B,MAAM8B,MAAM,GAAG3C,WAAW,CACxB,MAAO4C,UAA0B,IAAK;IACpC,MAAMd,EAAE,GAAGb,OAAO,EAAEa,EAAE,IAAIP,WAAW,CAACM,OAAO;IAC7C,IAAI,CAACC,EAAE,EAAE;MACP,OAAOe,SAAS;IAClB;IACA,OAAOjC,MAAM,CAAC+B,MAAM,CAAC;MAAEb,EAAE;MAAEc;IAAW,CAAC,CAAC;EAC1C,CAAC,EACD,CAAChC,MAAM,EAAEK,OAAO,CAClB,CAAC;EAED,MAAM6B,OAAO,GAAG9C,WAAW,CACzB,MAAO+C,MAAe,IAAK;IACzB,MAAMjB,EAAE,GAAGb,OAAO,EAAEa,EAAE,IAAIP,WAAW,CAACM,OAAO;IAC7C,IAAI,CAACC,EAAE,EAAE;MACP,OAAOe,SAAS;IAClB;IACA,OAAOjC,MAAM,CAACkC,OAAO,CAAC;MAAEhB,EAAE;MAAEiB;IAAO,CAAC,CAAC;EACvC,CAAC,EACD,CAACnC,MAAM,EAAEK,OAAO,CAClB,CAAC;EAED,MAAM+B,QAAQ,GAAGhD,WAAW,CAC1B,MAAO8B,EAAW,IAAK;IACrB,MAAMmB,MAAM,GAAGnB,EAAE,IAAIb,OAAO,EAAEa,EAAE,IAAIP,WAAW,CAACM,OAAO;IACvD,IAAI,CAACoB,MAAM,EAAE;MACX,OAAOJ,SAAS;IAClB;IACA,OAAOjC,MAAM,CAACoC,QAAQ,CAACC,MAAM,CAAC;EAChC,CAAC,EACD,CAACrC,MAAM,EAAEK,OAAO,CAClB,CAAC;EAED,MAAMiC,OAAO,GAAGlD,WAAW,CAAC,MAAM;IAChCkB,UAAU,CAAC,IAAI,CAAC;IAChBE,SAAS,CAAC,IAAI,CAAC;IACfE,aAAa,CAAC,IAAI,CAAC;IACnBC,WAAW,CAACM,OAAO,GAAG,IAAI;EAC5B,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMsB,OAAO,GAAGhC,MAAM,KAAKb,UAAU,CAAC8C,KAAK;EAC3C,MAAMC,SAAS,GAAGlC,MAAM,KAAKb,UAAU,CAACgD,UAAU;EAElD,MAAMC,KAAK,GAAGpD,OAAO,CACnB,OAAO;IACLc,OAAO;IACPE,MAAM;IACNgC,OAAO;IACPE,SAAS;IACTV,MAAM;IACNG,OAAO;IACPE,QAAQ;IACRE,OAAO;IACP1B,OAAO;IACPH;EACF,CAAC,CAAC,EACF,CACEJ,OAAO,EACPE,MAAM,EACNgC,OAAO,EACPE,SAAS,EACTV,MAAM,EACNG,OAAO,EACPE,QAAQ,EACRE,OAAO,EACP1B,OAAO,EACPH,UAAU,CAEd,CAAC;EAED,oBAAOb,IAAA,CAACE,UAAU,CAAC8C,QAAQ;IAACD,KAAK,EAAEA,KAAM;IAAAvC,QAAA,EAAEA;EAAQ,CAAsB,CAAC;AAC5E;;AAEA;AACA;AACA;AACA,OAAO,SAASyC,MAAMA,CAAA,EAAoB;EACxC,MAAMC,OAAO,GAAGzD,UAAU,CAACS,UAAU,CAAC;EACtC,IAAI,CAACgD,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CACb,2DACF,CAAC;EACH;EACA,OAAOD,OAAO;AAChB","ignoreList":[]}
|