@aomi-labs/react 0.3.10 → 0.3.11
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/dist/index.cjs +57 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -6
- package/dist/index.d.ts +8 -6
- package/dist/index.js +57 -16
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -135,10 +135,12 @@ type WalletHandlerApi = {
|
|
|
135
135
|
pendingRequests: WalletRequest[];
|
|
136
136
|
/** Replace pending requests with the session's authoritative snapshot. */
|
|
137
137
|
setRequests: (requests: WalletRequest[]) => void;
|
|
138
|
+
/** Mark a request as in-flight so it is not replayed while awaiting backend ack. */
|
|
139
|
+
startRequest: (id: string) => void;
|
|
138
140
|
/** Complete a request successfully — sends response to backend via ClientSession */
|
|
139
|
-
resolveRequest: (id: string, result: WalletRequestResult) => void
|
|
141
|
+
resolveRequest: (id: string, result: WalletRequestResult) => Promise<void>;
|
|
140
142
|
/** Fail a request — sends error to backend via ClientSession */
|
|
141
|
-
rejectRequest: (id: string, error?: string) => void
|
|
143
|
+
rejectRequest: (id: string, error?: string) => Promise<void>;
|
|
142
144
|
};
|
|
143
145
|
declare function useWalletHandler({ getSession, }: WalletHandlerConfig): WalletHandlerApi;
|
|
144
146
|
|
|
@@ -193,10 +195,10 @@ type AomiRuntimeApi = {
|
|
|
193
195
|
pendingWalletRequests: WalletRequest[];
|
|
194
196
|
/** Mark a wallet request as being processed */
|
|
195
197
|
startWalletRequest: (id: string) => void;
|
|
196
|
-
/** Complete a wallet request
|
|
197
|
-
resolveWalletRequest: (id: string, result: WalletRequestResult) => void
|
|
198
|
-
/** Fail a wallet request
|
|
199
|
-
rejectWalletRequest: (id: string, error?: string) => void
|
|
198
|
+
/** Complete a wallet request after the backend acknowledges the response */
|
|
199
|
+
resolveWalletRequest: (id: string, result: WalletRequestResult) => Promise<void>;
|
|
200
|
+
/** Fail a wallet request after the backend acknowledges the error */
|
|
201
|
+
rejectWalletRequest: (id: string, error?: string) => Promise<void>;
|
|
200
202
|
/** Subscribe to inbound events by type. Returns unsubscribe function. */
|
|
201
203
|
subscribe: (type: string, callback: EventSubscriber) => () => void;
|
|
202
204
|
/** Send a system command to the backend */
|
package/dist/index.d.ts
CHANGED
|
@@ -135,10 +135,12 @@ type WalletHandlerApi = {
|
|
|
135
135
|
pendingRequests: WalletRequest[];
|
|
136
136
|
/** Replace pending requests with the session's authoritative snapshot. */
|
|
137
137
|
setRequests: (requests: WalletRequest[]) => void;
|
|
138
|
+
/** Mark a request as in-flight so it is not replayed while awaiting backend ack. */
|
|
139
|
+
startRequest: (id: string) => void;
|
|
138
140
|
/** Complete a request successfully — sends response to backend via ClientSession */
|
|
139
|
-
resolveRequest: (id: string, result: WalletRequestResult) => void
|
|
141
|
+
resolveRequest: (id: string, result: WalletRequestResult) => Promise<void>;
|
|
140
142
|
/** Fail a request — sends error to backend via ClientSession */
|
|
141
|
-
rejectRequest: (id: string, error?: string) => void
|
|
143
|
+
rejectRequest: (id: string, error?: string) => Promise<void>;
|
|
142
144
|
};
|
|
143
145
|
declare function useWalletHandler({ getSession, }: WalletHandlerConfig): WalletHandlerApi;
|
|
144
146
|
|
|
@@ -193,10 +195,10 @@ type AomiRuntimeApi = {
|
|
|
193
195
|
pendingWalletRequests: WalletRequest[];
|
|
194
196
|
/** Mark a wallet request as being processed */
|
|
195
197
|
startWalletRequest: (id: string) => void;
|
|
196
|
-
/** Complete a wallet request
|
|
197
|
-
resolveWalletRequest: (id: string, result: WalletRequestResult) => void
|
|
198
|
-
/** Fail a wallet request
|
|
199
|
-
rejectWalletRequest: (id: string, error?: string) => void
|
|
198
|
+
/** Complete a wallet request after the backend acknowledges the response */
|
|
199
|
+
resolveWalletRequest: (id: string, result: WalletRequestResult) => Promise<void>;
|
|
200
|
+
/** Fail a wallet request after the backend acknowledges the error */
|
|
201
|
+
rejectWalletRequest: (id: string, error?: string) => Promise<void>;
|
|
200
202
|
/** Subscribe to inbound events by type. Returns unsubscribe function. */
|
|
201
203
|
subscribe: (type: string, callback: EventSubscriber) => () => void;
|
|
202
204
|
/** Send a system command to the backend */
|
package/dist/index.js
CHANGED
|
@@ -1442,41 +1442,84 @@ function useWalletHandler({
|
|
|
1442
1442
|
}) {
|
|
1443
1443
|
const [pendingRequests, setPendingRequests] = useState5([]);
|
|
1444
1444
|
const requestsRef = useRef6(pendingRequests);
|
|
1445
|
-
const
|
|
1446
|
-
|
|
1447
|
-
|
|
1445
|
+
const inFlightRequestSetRef = useRef6(/* @__PURE__ */ new Set());
|
|
1446
|
+
const suppressedRequestSetRef = useRef6(/* @__PURE__ */ new Set());
|
|
1447
|
+
const syncVisibleRequests = useCallback6(() => {
|
|
1448
|
+
setPendingRequests(
|
|
1449
|
+
requestsRef.current.filter(
|
|
1450
|
+
(request) => !suppressedRequestSetRef.current.has(request.id)
|
|
1451
|
+
)
|
|
1452
|
+
);
|
|
1448
1453
|
}, []);
|
|
1454
|
+
const setRequests = useCallback6((requests) => {
|
|
1455
|
+
const incomingIds = new Set(requests.map((request) => request.id));
|
|
1456
|
+
for (const id of suppressedRequestSetRef.current) {
|
|
1457
|
+
if (!incomingIds.has(id) && !inFlightRequestSetRef.current.has(id)) {
|
|
1458
|
+
suppressedRequestSetRef.current.delete(id);
|
|
1459
|
+
}
|
|
1460
|
+
}
|
|
1461
|
+
const preservedInFlight = requestsRef.current.filter(
|
|
1462
|
+
(request) => inFlightRequestSetRef.current.has(request.id) && !incomingIds.has(request.id)
|
|
1463
|
+
);
|
|
1464
|
+
requestsRef.current = [...requests, ...preservedInFlight];
|
|
1465
|
+
syncVisibleRequests();
|
|
1466
|
+
}, [syncVisibleRequests]);
|
|
1467
|
+
const startRequest = useCallback6((id) => {
|
|
1468
|
+
if (!requestsRef.current.some((request) => request.id === id)) {
|
|
1469
|
+
return;
|
|
1470
|
+
}
|
|
1471
|
+
inFlightRequestSetRef.current.add(id);
|
|
1472
|
+
suppressedRequestSetRef.current.add(id);
|
|
1473
|
+
syncVisibleRequests();
|
|
1474
|
+
}, [syncVisibleRequests]);
|
|
1449
1475
|
const resolveRequest = useCallback6(
|
|
1450
|
-
(id, result) => {
|
|
1476
|
+
async (id, result) => {
|
|
1451
1477
|
const session = getSession();
|
|
1452
1478
|
if (!session) {
|
|
1453
1479
|
console.error("[wallet-handler] No session available to resolve request");
|
|
1454
1480
|
return;
|
|
1455
1481
|
}
|
|
1456
|
-
|
|
1457
|
-
|
|
1482
|
+
startRequest(id);
|
|
1483
|
+
try {
|
|
1484
|
+
await session.resolve(id, result);
|
|
1485
|
+
} catch (err) {
|
|
1458
1486
|
console.error("[wallet-handler] Failed to resolve request:", err);
|
|
1459
|
-
}
|
|
1487
|
+
} finally {
|
|
1488
|
+
requestsRef.current = requestsRef.current.filter(
|
|
1489
|
+
(request) => request.id !== id
|
|
1490
|
+
);
|
|
1491
|
+
inFlightRequestSetRef.current.delete(id);
|
|
1492
|
+
syncVisibleRequests();
|
|
1493
|
+
}
|
|
1460
1494
|
},
|
|
1461
|
-
[getSession,
|
|
1495
|
+
[getSession, startRequest, syncVisibleRequests]
|
|
1462
1496
|
);
|
|
1463
1497
|
const rejectRequest = useCallback6(
|
|
1464
|
-
(id, error) => {
|
|
1498
|
+
async (id, error) => {
|
|
1465
1499
|
const session = getSession();
|
|
1466
1500
|
if (!session) {
|
|
1467
1501
|
console.error("[wallet-handler] No session available to reject request");
|
|
1468
1502
|
return;
|
|
1469
1503
|
}
|
|
1470
|
-
|
|
1471
|
-
|
|
1504
|
+
startRequest(id);
|
|
1505
|
+
try {
|
|
1506
|
+
await session.reject(id, error);
|
|
1507
|
+
} catch (err) {
|
|
1472
1508
|
console.error("[wallet-handler] Failed to reject request:", err);
|
|
1473
|
-
}
|
|
1509
|
+
} finally {
|
|
1510
|
+
requestsRef.current = requestsRef.current.filter(
|
|
1511
|
+
(request) => request.id !== id
|
|
1512
|
+
);
|
|
1513
|
+
inFlightRequestSetRef.current.delete(id);
|
|
1514
|
+
syncVisibleRequests();
|
|
1515
|
+
}
|
|
1474
1516
|
},
|
|
1475
|
-
[getSession,
|
|
1517
|
+
[getSession, startRequest, syncVisibleRequests]
|
|
1476
1518
|
);
|
|
1477
1519
|
return {
|
|
1478
1520
|
pendingRequests,
|
|
1479
1521
|
setRequests,
|
|
1522
|
+
startRequest,
|
|
1480
1523
|
resolveRequest,
|
|
1481
1524
|
rejectRequest
|
|
1482
1525
|
};
|
|
@@ -1822,9 +1865,7 @@ function AomiRuntimeCore({
|
|
|
1822
1865
|
clearAllNotifications: notificationContext.clearAll,
|
|
1823
1866
|
// Wallet API
|
|
1824
1867
|
pendingWalletRequests: walletHandler.pendingRequests,
|
|
1825
|
-
startWalletRequest:
|
|
1826
|
-
},
|
|
1827
|
-
// No-op: ClientSession manages processing state
|
|
1868
|
+
startWalletRequest: walletHandler.startRequest,
|
|
1828
1869
|
resolveWalletRequest: walletHandler.resolveRequest,
|
|
1829
1870
|
rejectWalletRequest: walletHandler.rejectRequest,
|
|
1830
1871
|
// Event API
|