@xyo-network/react-chain-provider 1.20.9 → 1.20.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/browser/contexts/gateway/Provider.d.ts.map +1 -1
- package/dist/browser/hooks/client/helpers/findCaveat.d.ts +2 -2
- package/dist/browser/hooks/client/helpers/findCaveat.d.ts.map +1 -1
- package/dist/browser/hooks/client/permissions/usePermissions.d.ts +2 -6
- package/dist/browser/hooks/client/permissions/usePermissions.d.ts.map +1 -1
- package/dist/browser/hooks/client/permissions/usePermissionsAccounts.d.ts +2 -1
- package/dist/browser/hooks/client/permissions/usePermissionsAccounts.d.ts.map +1 -1
- package/dist/browser/hooks/client/useClientFromWallet.d.ts +2 -11
- package/dist/browser/hooks/client/useClientFromWallet.d.ts.map +1 -1
- package/dist/browser/hooks/client/useGatewayFromWallet.d.ts +2 -5
- package/dist/browser/hooks/client/useGatewayFromWallet.d.ts.map +1 -1
- package/dist/browser/hooks/helpers/getXyoClient.d.ts +2 -5
- package/dist/browser/hooks/helpers/getXyoClient.d.ts.map +1 -1
- package/dist/browser/index.mjs +167 -348
- package/dist/browser/index.mjs.map +1 -1
- package/dist/browser/types/GatewayFromWallet.d.ts +2 -7
- package/dist/browser/types/GatewayFromWallet.d.ts.map +1 -1
- package/package.json +19 -17
- package/src/contexts/gateway/Provider.tsx +1 -1
- package/src/hooks/client/helpers/findCaveat.ts +2 -20
- package/src/hooks/client/permissions/usePermissions.ts +2 -14
- package/src/hooks/client/permissions/usePermissionsAccounts.ts +2 -38
- package/src/hooks/client/useClientFromWallet.ts +2 -98
- package/src/hooks/client/useGatewayFromWallet.ts +2 -30
- package/src/hooks/helpers/getXyoClient.ts +2 -46
- package/src/types/GatewayFromWallet.ts +2 -8
package/dist/browser/index.mjs
CHANGED
|
@@ -27,9 +27,9 @@ var ConnectedAccount = /* @__PURE__ */ __name(({ address }) => {
|
|
|
27
27
|
// src/components/connected/ConnectAccountsStack.tsx
|
|
28
28
|
import { Alert, AlertTitle, Button, Stack as Stack2, Typography as Typography2 } from "@mui/material";
|
|
29
29
|
import { ButtonEx } from "@xylabs/react-button";
|
|
30
|
-
import { isDefined as
|
|
30
|
+
import { isDefined as isDefined5, isUndefined as isUndefined5 } from "@xylabs/sdk-js";
|
|
31
31
|
import { ErrorRender as ErrorRender2 } from "@xyo-network/react-error";
|
|
32
|
-
import React5, { useEffect as
|
|
32
|
+
import React5, { useEffect as useEffect5 } from "react";
|
|
33
33
|
|
|
34
34
|
// src/hooks/account/helpers/formatAccountBalanceHistory.ts
|
|
35
35
|
import { hexToBigInt } from "@xylabs/sdk-js";
|
|
@@ -155,306 +155,17 @@ var useAccountBalanceHistory = /* @__PURE__ */ __name((address, viewer, maxPage
|
|
|
155
155
|
]);
|
|
156
156
|
}, "useAccountBalanceHistory");
|
|
157
157
|
|
|
158
|
-
// src/hooks/client/useClientFromWallet.ts
|
|
159
|
-
import { isNull as isNull2 } from "@xylabs/sdk-js";
|
|
160
|
-
import { useCallback, useEffect, useSyncExternalStore } from "react";
|
|
161
|
-
|
|
162
|
-
// src/hooks/helpers/getXyoClient.ts
|
|
163
|
-
import { isUndefined as isUndefined2 } from "@xylabs/sdk-js";
|
|
164
|
-
var CLIENT_LISTENER_TIMEOUT = 500;
|
|
165
|
-
var hasXyoClient = /* @__PURE__ */ __name(() => {
|
|
166
|
-
return "client" in globalThis.xyo;
|
|
167
|
-
}, "hasXyoClient");
|
|
168
|
-
var listenForClientInjection = /* @__PURE__ */ __name((onClientReady, timeout, onTimeout) => {
|
|
169
|
-
let resolved = false;
|
|
170
|
-
const listener = /* @__PURE__ */ __name(() => {
|
|
171
|
-
onClientReady();
|
|
172
|
-
resolved = true;
|
|
173
|
-
}, "listener");
|
|
174
|
-
globalThis.addEventListener("xyo:plugin-ready", listener);
|
|
175
|
-
setTimeout(() => {
|
|
176
|
-
if (!resolved) {
|
|
177
|
-
globalThis.removeEventListener("xyo:plugin-ready", listener);
|
|
178
|
-
onTimeout();
|
|
179
|
-
}
|
|
180
|
-
}, timeout);
|
|
181
|
-
}, "listenForClientInjection");
|
|
182
|
-
async function getXyoClient(timeout = CLIENT_LISTENER_TIMEOUT) {
|
|
183
|
-
if (isUndefined2(globalThis.xyo)) {
|
|
184
|
-
return null;
|
|
185
|
-
}
|
|
186
|
-
return hasXyoClient() ? globalThis.xyo.client : await new Promise((resolve) => {
|
|
187
|
-
listenForClientInjection(() => {
|
|
188
|
-
resolve(globalThis.xyo.client);
|
|
189
|
-
}, timeout, () => {
|
|
190
|
-
resolve(null);
|
|
191
|
-
});
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
__name(getXyoClient, "getXyoClient");
|
|
195
|
-
|
|
196
|
-
// src/hooks/helpers/transaction/Confirmation.ts
|
|
197
|
-
import { assertEx as assertEx2, delay, forget, isDefined as isDefined2, isNull } from "@xylabs/sdk-js";
|
|
198
|
-
var TransactionConfirmationStatus = class _TransactionConfirmationStatus {
|
|
199
|
-
static {
|
|
200
|
-
__name(this, "TransactionConfirmationStatus");
|
|
201
|
-
}
|
|
202
|
-
_params;
|
|
203
|
-
active = false;
|
|
204
|
-
constructor(params) {
|
|
205
|
-
this._params = params;
|
|
206
|
-
}
|
|
207
|
-
get exp() {
|
|
208
|
-
return assertEx2(this.transaction[0].exp, () => "exp is not found, transaction is not set");
|
|
209
|
-
}
|
|
210
|
-
get nbf() {
|
|
211
|
-
return assertEx2(this.transaction[0].nbf, () => "nbf is not found, transaction is not set");
|
|
212
|
-
}
|
|
213
|
-
get onStatusUpdate() {
|
|
214
|
-
return this._params.onStatusUpdate;
|
|
215
|
-
}
|
|
216
|
-
get params() {
|
|
217
|
-
return this._params;
|
|
218
|
-
}
|
|
219
|
-
get transaction() {
|
|
220
|
-
return this.params.transaction;
|
|
221
|
-
}
|
|
222
|
-
get txHash() {
|
|
223
|
-
return this.params.txHash;
|
|
224
|
-
}
|
|
225
|
-
get viewer() {
|
|
226
|
-
return this.params.viewer;
|
|
227
|
-
}
|
|
228
|
-
static create(params) {
|
|
229
|
-
return new _TransactionConfirmationStatus(params);
|
|
230
|
-
}
|
|
231
|
-
async start() {
|
|
232
|
-
this.active = true;
|
|
233
|
-
try {
|
|
234
|
-
const currentBlockNumber = await this.viewer.currentBlockNumber();
|
|
235
|
-
while (isDefined2(currentBlockNumber) && this.active) {
|
|
236
|
-
await this.checkBlock(currentBlockNumber);
|
|
237
|
-
await delay(1e3);
|
|
238
|
-
}
|
|
239
|
-
} catch (error) {
|
|
240
|
-
await this.stop();
|
|
241
|
-
forget(this.onStatusUpdate?.({
|
|
242
|
-
error: error instanceof Error ? error : new Error("Unknown error occurred"),
|
|
243
|
-
confirmed: false,
|
|
244
|
-
blockNumber: 0,
|
|
245
|
-
progress: 0,
|
|
246
|
-
remainingBlocks: 0
|
|
247
|
-
}));
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
stop() {
|
|
251
|
-
this.active = false;
|
|
252
|
-
}
|
|
253
|
-
async checkBlock(blockNumber) {
|
|
254
|
-
if (blockNumber < this.nbf) {
|
|
255
|
-
await this.stop();
|
|
256
|
-
forget(this.onStatusUpdate?.({
|
|
257
|
-
error: new Error(`Block number: ${blockNumber} is before ${this.nbf}`),
|
|
258
|
-
confirmed: false,
|
|
259
|
-
blockNumber,
|
|
260
|
-
progress: 0,
|
|
261
|
-
remainingBlocks: this.exp - blockNumber
|
|
262
|
-
}));
|
|
263
|
-
}
|
|
264
|
-
if (blockNumber > this.exp) {
|
|
265
|
-
forget(this.onStatusUpdate?.({
|
|
266
|
-
confirmed: false,
|
|
267
|
-
blockNumber,
|
|
268
|
-
progress: 100,
|
|
269
|
-
remainingBlocks: 0
|
|
270
|
-
}));
|
|
271
|
-
return;
|
|
272
|
-
}
|
|
273
|
-
if (blockNumber < this.exp) {
|
|
274
|
-
await this.checkConfirmation(blockNumber);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
async checkConfirmation(blockNumber) {
|
|
278
|
-
const remainingBlocks = this.exp - blockNumber;
|
|
279
|
-
const progress = Math.round((blockNumber - this.nbf) / (this.exp - this.nbf) * 100);
|
|
280
|
-
const tx = await this.viewer.transaction.byHash?.(this.txHash);
|
|
281
|
-
if (isNull(tx)) {
|
|
282
|
-
this.onStatusUpdate?.({
|
|
283
|
-
confirmed: false,
|
|
284
|
-
blockNumber,
|
|
285
|
-
progress,
|
|
286
|
-
remainingBlocks
|
|
287
|
-
});
|
|
288
|
-
} else {
|
|
289
|
-
this.onStatusUpdate?.({
|
|
290
|
-
confirmed: true,
|
|
291
|
-
blockNumber,
|
|
292
|
-
progress,
|
|
293
|
-
remainingBlocks
|
|
294
|
-
});
|
|
295
|
-
await this.stop();
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
};
|
|
299
|
-
|
|
300
|
-
// src/hooks/client/useClientFromWallet.ts
|
|
301
|
-
var currentState = {
|
|
302
|
-
client: void 0,
|
|
303
|
-
error: null,
|
|
304
|
-
isLoading: false,
|
|
305
|
-
timedout: false
|
|
306
|
-
};
|
|
307
|
-
var listeners = /* @__PURE__ */ new Set();
|
|
308
|
-
var emitChange = /* @__PURE__ */ __name(() => {
|
|
309
|
-
for (const listener of listeners) listener();
|
|
310
|
-
}, "emitChange");
|
|
311
|
-
var updateState = /* @__PURE__ */ __name((newState) => {
|
|
312
|
-
currentState = {
|
|
313
|
-
...currentState,
|
|
314
|
-
...newState
|
|
315
|
-
};
|
|
316
|
-
emitChange();
|
|
317
|
-
}, "updateState");
|
|
318
|
-
var initializeClient = /* @__PURE__ */ __name(async (timeout) => {
|
|
319
|
-
if (currentState.isLoading || currentState.client) return;
|
|
320
|
-
updateState({
|
|
321
|
-
isLoading: true,
|
|
322
|
-
error: null
|
|
323
|
-
});
|
|
324
|
-
try {
|
|
325
|
-
const client = await getXyoClient(timeout);
|
|
326
|
-
if (client === null) {
|
|
327
|
-
updateState({
|
|
328
|
-
client: null,
|
|
329
|
-
timedout: true,
|
|
330
|
-
isLoading: false
|
|
331
|
-
});
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
updateState({
|
|
335
|
-
client,
|
|
336
|
-
isLoading: false,
|
|
337
|
-
error: null
|
|
338
|
-
});
|
|
339
|
-
} catch (error) {
|
|
340
|
-
console.error("Error initializing XyoClient", error);
|
|
341
|
-
updateState({
|
|
342
|
-
error,
|
|
343
|
-
isLoading: false
|
|
344
|
-
});
|
|
345
|
-
}
|
|
346
|
-
}, "initializeClient");
|
|
347
|
-
var subscribe = /* @__PURE__ */ __name((listener, timeout) => {
|
|
348
|
-
listeners.add(listener);
|
|
349
|
-
void initializeClient(timeout);
|
|
350
|
-
return () => {
|
|
351
|
-
listeners.delete(listener);
|
|
352
|
-
};
|
|
353
|
-
}, "subscribe");
|
|
354
|
-
var getSnapshot = /* @__PURE__ */ __name(() => currentState, "getSnapshot");
|
|
355
|
-
var useClientFromWallet = /* @__PURE__ */ __name((timeout) => {
|
|
356
|
-
const subscribeWithTimeout = useCallback((listener) => subscribe(listener, timeout), [
|
|
357
|
-
timeout
|
|
358
|
-
]);
|
|
359
|
-
const clientState = useSyncExternalStore(subscribeWithTimeout, getSnapshot);
|
|
360
|
-
useEffect(() => {
|
|
361
|
-
let listener = /* @__PURE__ */ __name(() => {
|
|
362
|
-
updateState({
|
|
363
|
-
client: globalThis.xyo?.client,
|
|
364
|
-
isLoading: false,
|
|
365
|
-
error: null
|
|
366
|
-
});
|
|
367
|
-
emitChange();
|
|
368
|
-
}, "listener");
|
|
369
|
-
if (clientState.timedout && isNull2(clientState.client) && !clientState.isLoading) {
|
|
370
|
-
globalThis.addEventListener("xyo:plugin-ready", listener);
|
|
371
|
-
}
|
|
372
|
-
return () => {
|
|
373
|
-
globalThis.removeEventListener("xyo:plugin-ready", listener);
|
|
374
|
-
};
|
|
375
|
-
});
|
|
376
|
-
return clientState;
|
|
377
|
-
}, "useClientFromWallet");
|
|
378
|
-
var useClient = useClientFromWallet;
|
|
379
|
-
|
|
380
158
|
// src/hooks/client/permissions/usePermissions.ts
|
|
381
|
-
|
|
382
|
-
const { client, isLoading, error, timedout } = useClientFromWallet();
|
|
383
|
-
const permissions = client?.permissions;
|
|
384
|
-
return {
|
|
385
|
-
permissions,
|
|
386
|
-
isLoading,
|
|
387
|
-
error,
|
|
388
|
-
timedout
|
|
389
|
-
};
|
|
390
|
-
}, "usePermissions");
|
|
391
|
-
|
|
392
|
-
// src/hooks/client/permissions/usePermissionsAccounts.ts
|
|
393
|
-
import { usePromise as usePromise2 } from "@xylabs/react-promise";
|
|
394
|
-
import { isArray, isDefined as isDefined4, isDefinedNotNull, isString } from "@xylabs/sdk-js";
|
|
395
|
-
|
|
396
|
-
// src/hooks/client/helpers/findCaveat.ts
|
|
397
|
-
import { isDefined as isDefined3 } from "@xylabs/sdk-js";
|
|
398
|
-
var findCaveat = /* @__PURE__ */ __name(async (permissions, targetCapability, targetCaveatType) => {
|
|
399
|
-
const existingPermissions = await permissions.getPermissions();
|
|
400
|
-
if (isDefined3(existingPermissions) && existingPermissions.length > 0) {
|
|
401
|
-
const foundPermissions = existingPermissions.find((p) => p.parentCapability === targetCapability);
|
|
402
|
-
if (isDefined3(foundPermissions)) {
|
|
403
|
-
return foundPermissions.caveats?.find((caveat) => caveat.type === targetCaveatType)?.value ?? [];
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
return existingPermissions;
|
|
407
|
-
}, "findCaveat");
|
|
159
|
+
import { usePermissions } from "@xyo-network/react-chain-client";
|
|
408
160
|
|
|
409
161
|
// src/hooks/client/permissions/usePermissionsAccounts.ts
|
|
410
|
-
|
|
411
|
-
if (isDefined4(restrictedAccounts)) {
|
|
412
|
-
if (isArray(restrictedAccounts) && restrictedAccounts.every(isString)) {
|
|
413
|
-
return restrictedAccounts;
|
|
414
|
-
}
|
|
415
|
-
throw new Error(`Unrecognized format for restrictReturnedAccounts caveat found on permissions.
|
|
162
|
+
import { useAccountPermissions } from "@xyo-network/react-chain-client";
|
|
416
163
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
return [];
|
|
420
|
-
}, "validateRestrictedAccounts");
|
|
421
|
-
var useAccountPermissions = /* @__PURE__ */ __name(() => {
|
|
422
|
-
const { permissions, error } = usePermissions();
|
|
423
|
-
return usePromise2(async () => {
|
|
424
|
-
if (isDefinedNotNull(error)) throw error;
|
|
425
|
-
if (isDefined4(permissions)) {
|
|
426
|
-
const restrictedAccounts = await findCaveat(
|
|
427
|
-
permissions,
|
|
428
|
-
// TODO - extract to constant in protocol package
|
|
429
|
-
"xyoWallet_getAccounts",
|
|
430
|
-
"restrictReturnedAccounts"
|
|
431
|
-
);
|
|
432
|
-
return validateRestrictedAccounts(restrictedAccounts);
|
|
433
|
-
}
|
|
434
|
-
}, [
|
|
435
|
-
permissions
|
|
436
|
-
]);
|
|
437
|
-
}, "useAccountPermissions");
|
|
164
|
+
// src/hooks/client/useClientFromWallet.ts
|
|
165
|
+
import { useClient, useClientFromWallet } from "@xyo-network/react-chain-client";
|
|
438
166
|
|
|
439
167
|
// src/hooks/client/useGatewayFromWallet.ts
|
|
440
|
-
import {
|
|
441
|
-
var useGatewayFromWallet = /* @__PURE__ */ __name((gatewayName, timeout) => {
|
|
442
|
-
const { client, isLoading, error, timedout } = useClientFromWallet(timeout);
|
|
443
|
-
const resolveGateway = /* @__PURE__ */ __name(() => {
|
|
444
|
-
if (isNull3(client)) return null;
|
|
445
|
-
if (timedout && !isLoading && isDefined5(gatewayName)) {
|
|
446
|
-
return null;
|
|
447
|
-
}
|
|
448
|
-
return client?.gateways?.[gatewayName];
|
|
449
|
-
}, "resolveGateway");
|
|
450
|
-
return {
|
|
451
|
-
gateway: gatewayName ? resolveGateway() : void 0,
|
|
452
|
-
isLoading,
|
|
453
|
-
error,
|
|
454
|
-
timedout
|
|
455
|
-
};
|
|
456
|
-
}, "useGatewayFromWallet");
|
|
457
|
-
var useGateway = useGatewayFromWallet;
|
|
168
|
+
import { useGateway, useGatewayFromWallet } from "@xyo-network/react-chain-client";
|
|
458
169
|
|
|
459
170
|
// src/contexts/current-block/context.ts
|
|
460
171
|
import { createContextEx } from "@xylabs/react-shared";
|
|
@@ -464,16 +175,16 @@ var XL1CurrentBlockContext = createContextEx();
|
|
|
464
175
|
import React2, { useMemo } from "react";
|
|
465
176
|
|
|
466
177
|
// src/contexts/current-block/usePollCurrentBlock.ts
|
|
467
|
-
import { isDefinedNotNull
|
|
468
|
-
import { startTransition, useEffect
|
|
178
|
+
import { isDefinedNotNull, isUndefinedOrNull } from "@xylabs/sdk-js";
|
|
179
|
+
import { startTransition, useEffect, useState } from "react";
|
|
469
180
|
var DEFAULT_POLL_INTERVAL = 1e4;
|
|
470
181
|
var usePollCurrentBlock = /* @__PURE__ */ __name((viewer, interval = DEFAULT_POLL_INTERVAL, pause = false) => {
|
|
471
182
|
const [currentBlock, setCurrentBlock] = useState(null);
|
|
472
183
|
const [error, setError] = useState();
|
|
473
|
-
|
|
184
|
+
useEffect(() => {
|
|
474
185
|
let isMounted = true;
|
|
475
186
|
const fetchBlock = /* @__PURE__ */ __name(async () => {
|
|
476
|
-
if (
|
|
187
|
+
if (isDefinedNotNull(viewer)) {
|
|
477
188
|
try {
|
|
478
189
|
const block = await viewer.currentBlock();
|
|
479
190
|
if (isMounted) {
|
|
@@ -482,7 +193,7 @@ var usePollCurrentBlock = /* @__PURE__ */ __name((viewer, interval = DEFAULT_POL
|
|
|
482
193
|
if (isUndefinedOrNull(existingBlock)) {
|
|
483
194
|
return block;
|
|
484
195
|
}
|
|
485
|
-
if (
|
|
196
|
+
if (isDefinedNotNull(block) && existingBlock?.[0].block !== block[0].block) {
|
|
486
197
|
return block;
|
|
487
198
|
}
|
|
488
199
|
return existingBlock;
|
|
@@ -552,7 +263,8 @@ import { createContextEx as createContextEx2 } from "@xylabs/react-shared";
|
|
|
552
263
|
var GatewayContext = createContextEx2();
|
|
553
264
|
|
|
554
265
|
// src/contexts/gateway/Provider.tsx
|
|
555
|
-
import { isDefinedNotNull as
|
|
266
|
+
import { isDefinedNotNull as isDefinedNotNull2, isNull } from "@xylabs/sdk-js";
|
|
267
|
+
import { useGatewayFromWallet as useGatewayFromWallet2 } from "@xyo-network/react-chain-client";
|
|
556
268
|
import { ErrorRender } from "@xyo-network/react-error";
|
|
557
269
|
import React4, { useMemo as useMemo3 } from "react";
|
|
558
270
|
|
|
@@ -562,12 +274,12 @@ var InPageGatewaysContext = createContextEx3();
|
|
|
562
274
|
|
|
563
275
|
// src/contexts/in-page-gateways/Provider.tsx
|
|
564
276
|
import { DefaultNetworks as DefaultNetworks2 } from "@xyo-network/xl1-sdk";
|
|
565
|
-
import React3, { startTransition as startTransition2, useCallback
|
|
277
|
+
import React3, { startTransition as startTransition2, useCallback, useEffect as useEffect2, useMemo as useMemo2, useState as useState2 } from "react";
|
|
566
278
|
var InPageGatewaysProvider = /* @__PURE__ */ __name(({ account, children }) => {
|
|
567
279
|
const [gateways, setGateways] = useState2({});
|
|
568
280
|
const [errors, setErrors] = useState2({});
|
|
569
281
|
const [previousAccount, setPreviousAccount] = useState2(account);
|
|
570
|
-
const clearAll =
|
|
282
|
+
const clearAll = useCallback(() => {
|
|
571
283
|
setGateways({});
|
|
572
284
|
setErrors({});
|
|
573
285
|
}, []);
|
|
@@ -575,7 +287,7 @@ var InPageGatewaysProvider = /* @__PURE__ */ __name(({ account, children }) => {
|
|
|
575
287
|
clearAll();
|
|
576
288
|
setPreviousAccount(account);
|
|
577
289
|
}
|
|
578
|
-
|
|
290
|
+
useEffect2(() => {
|
|
579
291
|
let cancelled = false;
|
|
580
292
|
const buildAll = /* @__PURE__ */ __name(async () => {
|
|
581
293
|
const results = await Promise.allSettled(DefaultNetworks2.map(async (network) => {
|
|
@@ -632,12 +344,12 @@ var useProvidedInPageGateways = /* @__PURE__ */ __name((required = true) => useC
|
|
|
632
344
|
|
|
633
345
|
// src/contexts/gateway/Provider.tsx
|
|
634
346
|
var GatewayProvider = /* @__PURE__ */ __name(({ gatewayName, children }) => {
|
|
635
|
-
const { gateway: gatewayFromWallet, error: gatewayFromWalletError } =
|
|
347
|
+
const { gateway: gatewayFromWallet, error: gatewayFromWalletError } = useGatewayFromWallet2(gatewayName);
|
|
636
348
|
const { gateways: allGateways, errors: allGatewayErrors, clearAll } = useProvidedInPageGateways(true);
|
|
637
349
|
const gatewayFromConfig = gatewayName ? allGateways[gatewayName] : void 0;
|
|
638
350
|
const gatewayFromConfigError = gatewayName ? allGatewayErrors[gatewayName] : void 0;
|
|
639
351
|
const { defaultGateway, gateways } = useMemo3(() => {
|
|
640
|
-
if (
|
|
352
|
+
if (isNull(gatewayFromWallet)) {
|
|
641
353
|
return {
|
|
642
354
|
defaultGateway: gatewayFromConfig,
|
|
643
355
|
gateways: {
|
|
@@ -645,7 +357,7 @@ var GatewayProvider = /* @__PURE__ */ __name(({ gatewayName, children }) => {
|
|
|
645
357
|
walletGateway: null
|
|
646
358
|
}
|
|
647
359
|
};
|
|
648
|
-
} else if (
|
|
360
|
+
} else if (isDefinedNotNull2(gatewayFromWallet)) {
|
|
649
361
|
return {
|
|
650
362
|
defaultGateway: gatewayFromWallet,
|
|
651
363
|
gateways: {
|
|
@@ -710,9 +422,116 @@ var useViewerFromGateway = /* @__PURE__ */ __name(() => {
|
|
|
710
422
|
return defaultGateway?.connection?.viewer;
|
|
711
423
|
}, "useViewerFromGateway");
|
|
712
424
|
|
|
425
|
+
// src/hooks/helpers/getXyoClient.ts
|
|
426
|
+
import { getXyoClient, listenForClientInjection } from "@xyo-network/react-chain-client";
|
|
427
|
+
|
|
428
|
+
// src/hooks/helpers/transaction/Confirmation.ts
|
|
429
|
+
import { assertEx as assertEx2, delay, forget, isDefined as isDefined2, isNull as isNull2 } from "@xylabs/sdk-js";
|
|
430
|
+
var TransactionConfirmationStatus = class _TransactionConfirmationStatus {
|
|
431
|
+
static {
|
|
432
|
+
__name(this, "TransactionConfirmationStatus");
|
|
433
|
+
}
|
|
434
|
+
_params;
|
|
435
|
+
active = false;
|
|
436
|
+
constructor(params) {
|
|
437
|
+
this._params = params;
|
|
438
|
+
}
|
|
439
|
+
get exp() {
|
|
440
|
+
return assertEx2(this.transaction[0].exp, () => "exp is not found, transaction is not set");
|
|
441
|
+
}
|
|
442
|
+
get nbf() {
|
|
443
|
+
return assertEx2(this.transaction[0].nbf, () => "nbf is not found, transaction is not set");
|
|
444
|
+
}
|
|
445
|
+
get onStatusUpdate() {
|
|
446
|
+
return this._params.onStatusUpdate;
|
|
447
|
+
}
|
|
448
|
+
get params() {
|
|
449
|
+
return this._params;
|
|
450
|
+
}
|
|
451
|
+
get transaction() {
|
|
452
|
+
return this.params.transaction;
|
|
453
|
+
}
|
|
454
|
+
get txHash() {
|
|
455
|
+
return this.params.txHash;
|
|
456
|
+
}
|
|
457
|
+
get viewer() {
|
|
458
|
+
return this.params.viewer;
|
|
459
|
+
}
|
|
460
|
+
static create(params) {
|
|
461
|
+
return new _TransactionConfirmationStatus(params);
|
|
462
|
+
}
|
|
463
|
+
async start() {
|
|
464
|
+
this.active = true;
|
|
465
|
+
try {
|
|
466
|
+
const currentBlockNumber = await this.viewer.currentBlockNumber();
|
|
467
|
+
while (isDefined2(currentBlockNumber) && this.active) {
|
|
468
|
+
await this.checkBlock(currentBlockNumber);
|
|
469
|
+
await delay(1e3);
|
|
470
|
+
}
|
|
471
|
+
} catch (error) {
|
|
472
|
+
await this.stop();
|
|
473
|
+
forget(this.onStatusUpdate?.({
|
|
474
|
+
error: error instanceof Error ? error : new Error("Unknown error occurred"),
|
|
475
|
+
confirmed: false,
|
|
476
|
+
blockNumber: 0,
|
|
477
|
+
progress: 0,
|
|
478
|
+
remainingBlocks: 0
|
|
479
|
+
}));
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
stop() {
|
|
483
|
+
this.active = false;
|
|
484
|
+
}
|
|
485
|
+
async checkBlock(blockNumber) {
|
|
486
|
+
if (blockNumber < this.nbf) {
|
|
487
|
+
await this.stop();
|
|
488
|
+
forget(this.onStatusUpdate?.({
|
|
489
|
+
error: new Error(`Block number: ${blockNumber} is before ${this.nbf}`),
|
|
490
|
+
confirmed: false,
|
|
491
|
+
blockNumber,
|
|
492
|
+
progress: 0,
|
|
493
|
+
remainingBlocks: this.exp - blockNumber
|
|
494
|
+
}));
|
|
495
|
+
}
|
|
496
|
+
if (blockNumber > this.exp) {
|
|
497
|
+
forget(this.onStatusUpdate?.({
|
|
498
|
+
confirmed: false,
|
|
499
|
+
blockNumber,
|
|
500
|
+
progress: 100,
|
|
501
|
+
remainingBlocks: 0
|
|
502
|
+
}));
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
505
|
+
if (blockNumber < this.exp) {
|
|
506
|
+
await this.checkConfirmation(blockNumber);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
async checkConfirmation(blockNumber) {
|
|
510
|
+
const remainingBlocks = this.exp - blockNumber;
|
|
511
|
+
const progress = Math.round((blockNumber - this.nbf) / (this.exp - this.nbf) * 100);
|
|
512
|
+
const tx = await this.viewer.transaction.byHash?.(this.txHash);
|
|
513
|
+
if (isNull2(tx)) {
|
|
514
|
+
this.onStatusUpdate?.({
|
|
515
|
+
confirmed: false,
|
|
516
|
+
blockNumber,
|
|
517
|
+
progress,
|
|
518
|
+
remainingBlocks
|
|
519
|
+
});
|
|
520
|
+
} else {
|
|
521
|
+
this.onStatusUpdate?.({
|
|
522
|
+
confirmed: true,
|
|
523
|
+
blockNumber,
|
|
524
|
+
progress,
|
|
525
|
+
remainingBlocks
|
|
526
|
+
});
|
|
527
|
+
await this.stop();
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
};
|
|
531
|
+
|
|
713
532
|
// src/hooks/useAddressBalance.ts
|
|
714
|
-
import { usePromise as
|
|
715
|
-
import { isUndefined as
|
|
533
|
+
import { usePromise as usePromise2 } from "@xylabs/react-promise";
|
|
534
|
+
import { isUndefined as isUndefined2, isUndefinedOrNull as isUndefinedOrNull2 } from "@xylabs/sdk-js";
|
|
716
535
|
import { ShiftedBigInt } from "@xyo-network/xl1-sdk";
|
|
717
536
|
import { useMemo as useMemo4, useRef, useState as useState3 } from "react";
|
|
718
537
|
var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh, reset) => {
|
|
@@ -727,8 +546,8 @@ var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh, reset)
|
|
|
727
546
|
setLoading(false);
|
|
728
547
|
}
|
|
729
548
|
const balancePromiseRef = useRef(null);
|
|
730
|
-
|
|
731
|
-
if (
|
|
549
|
+
usePromise2(async () => {
|
|
550
|
+
if (isUndefined2(viewer) || isUndefined2(address)) return;
|
|
732
551
|
setLoading(true);
|
|
733
552
|
setBalancesError(void 0);
|
|
734
553
|
const currentPromise = viewer.account.balance.accountBalance(address);
|
|
@@ -786,22 +605,22 @@ var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh, reset)
|
|
|
786
605
|
}, "useAddressBalance");
|
|
787
606
|
|
|
788
607
|
// src/hooks/useConfirmTransactionBase.ts
|
|
789
|
-
import { usePromise as
|
|
790
|
-
import { forget as forget2, isDefined as
|
|
608
|
+
import { usePromise as usePromise3 } from "@xylabs/react-promise";
|
|
609
|
+
import { forget as forget2, isDefined as isDefined3, isHash } from "@xylabs/sdk-js";
|
|
791
610
|
import { PayloadBuilder } from "@xyo-network/sdk-js";
|
|
792
|
-
import { useEffect as
|
|
611
|
+
import { useEffect as useEffect3, useState as useState4 } from "react";
|
|
793
612
|
var useConfirmTransactionBase = /* @__PURE__ */ __name((transaction, onBroadcast, onStatusUpdate, runner, viewer) => {
|
|
794
613
|
const [status, setStatus] = useState4();
|
|
795
614
|
const onStatusUpdateLocal = /* @__PURE__ */ __name((newStatus) => {
|
|
796
615
|
setStatus(newStatus);
|
|
797
616
|
onStatusUpdate?.(newStatus);
|
|
798
617
|
}, "onStatusUpdateLocal");
|
|
799
|
-
const [transactionConfirmationStatus, transactionConfirmationError] =
|
|
800
|
-
const hasRunner =
|
|
618
|
+
const [transactionConfirmationStatus, transactionConfirmationError] = usePromise3(async () => {
|
|
619
|
+
const hasRunner = isDefined3(runner);
|
|
801
620
|
if (transaction && viewer) {
|
|
802
621
|
const hash = hasRunner ? await runner.broadcastTransaction(transaction) : await PayloadBuilder.hash(transaction[0]);
|
|
803
622
|
if (isHash(hash)) {
|
|
804
|
-
if (hasRunner &&
|
|
623
|
+
if (hasRunner && isDefined3(onBroadcast)) onBroadcast(hash);
|
|
805
624
|
const params = {
|
|
806
625
|
onStatusUpdate: onStatusUpdateLocal,
|
|
807
626
|
transaction,
|
|
@@ -820,7 +639,7 @@ var useConfirmTransactionBase = /* @__PURE__ */ __name((transaction, onBroadcast
|
|
|
820
639
|
runner,
|
|
821
640
|
viewer
|
|
822
641
|
]);
|
|
823
|
-
|
|
642
|
+
useEffect3(() => {
|
|
824
643
|
return () => {
|
|
825
644
|
if (transactionConfirmationStatus) {
|
|
826
645
|
forget2(transactionConfirmationStatus.stop());
|
|
@@ -839,13 +658,13 @@ var useConfirmTransactionBase = /* @__PURE__ */ __name((transaction, onBroadcast
|
|
|
839
658
|
import { asAddress } from "@xylabs/sdk-js";
|
|
840
659
|
import { assertEx as assertEx3 } from "@xylabs/sdk-js";
|
|
841
660
|
import { MainNetwork } from "@xyo-network/xl1-sdk";
|
|
842
|
-
import { useCallback as
|
|
661
|
+
import { useCallback as useCallback2, useState as useState5 } from "react";
|
|
843
662
|
var useConnectAccount = /* @__PURE__ */ __name((gatewayName = MainNetwork.id, timeout) => {
|
|
844
663
|
const [connectError, setConnectError] = useState5();
|
|
845
664
|
const { gateway, error, timedout } = useGatewayFromWallet(gatewayName, timeout);
|
|
846
665
|
const [accountPermissions, accountPermissionsError] = useAccountPermissions();
|
|
847
666
|
const [address, setAddress] = useState5();
|
|
848
|
-
const connectSigner =
|
|
667
|
+
const connectSigner = useCallback2(async () => {
|
|
849
668
|
try {
|
|
850
669
|
setConnectError(void 0);
|
|
851
670
|
const assertedGateway = assertEx3(gateway, () => `Gateway ${gatewayName} is not available`);
|
|
@@ -870,11 +689,11 @@ var useConnectAccount = /* @__PURE__ */ __name((gatewayName = MainNetwork.id, ti
|
|
|
870
689
|
}, "useConnectAccount");
|
|
871
690
|
|
|
872
691
|
// src/hooks/useCurrentBlock.ts
|
|
873
|
-
import { usePromise as
|
|
874
|
-
import { isDefinedNotNull as
|
|
692
|
+
import { usePromise as usePromise4 } from "@xylabs/react-promise";
|
|
693
|
+
import { isDefinedNotNull as isDefinedNotNull3 } from "@xylabs/sdk-js";
|
|
875
694
|
var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
|
|
876
|
-
return
|
|
877
|
-
if (
|
|
695
|
+
return usePromise4(async () => {
|
|
696
|
+
if (isDefinedNotNull3(viewer) && refresh > 0) {
|
|
878
697
|
const block = await viewer.currentBlock();
|
|
879
698
|
return block;
|
|
880
699
|
}
|
|
@@ -885,8 +704,8 @@ var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
|
|
|
885
704
|
}, "useCurrentBlock");
|
|
886
705
|
var useCurrentBlockFromGateway = /* @__PURE__ */ __name((refresh = 1) => {
|
|
887
706
|
const viewer = useViewerFromGateway();
|
|
888
|
-
return
|
|
889
|
-
if (
|
|
707
|
+
return usePromise4(async () => {
|
|
708
|
+
if (isDefinedNotNull3(viewer) && refresh > 0) {
|
|
890
709
|
const block = await viewer.currentBlock();
|
|
891
710
|
return block;
|
|
892
711
|
}
|
|
@@ -897,12 +716,12 @@ var useCurrentBlockFromGateway = /* @__PURE__ */ __name((refresh = 1) => {
|
|
|
897
716
|
}, "useCurrentBlockFromGateway");
|
|
898
717
|
|
|
899
718
|
// src/hooks/useNetwork.ts
|
|
900
|
-
import { isUndefined as
|
|
719
|
+
import { isUndefined as isUndefined3 } from "@xylabs/sdk-js";
|
|
901
720
|
import { SimpleXyoNetwork } from "@xyo-network/xl1-sdk";
|
|
902
721
|
import { useMemo as useMemo5 } from "react";
|
|
903
722
|
var useNetwork = /* @__PURE__ */ __name((id) => {
|
|
904
723
|
const network = useMemo5(() => {
|
|
905
|
-
if (
|
|
724
|
+
if (isUndefined3(id)) return;
|
|
906
725
|
return new SimpleXyoNetwork(id);
|
|
907
726
|
}, [
|
|
908
727
|
id
|
|
@@ -911,10 +730,10 @@ var useNetwork = /* @__PURE__ */ __name((id) => {
|
|
|
911
730
|
}, "useNetwork");
|
|
912
731
|
|
|
913
732
|
// src/hooks/useSigner.ts
|
|
914
|
-
import { usePromise as
|
|
733
|
+
import { usePromise as usePromise5 } from "@xylabs/react-promise";
|
|
915
734
|
import { SimpleXyoSigner } from "@xyo-network/xl1-sdk";
|
|
916
735
|
var useSigner = /* @__PURE__ */ __name((_provider, account) => {
|
|
917
|
-
return
|
|
736
|
+
return usePromise5(async () => account ? await SimpleXyoSigner.create({
|
|
918
737
|
account
|
|
919
738
|
}) : void 0, [
|
|
920
739
|
account
|
|
@@ -922,11 +741,11 @@ var useSigner = /* @__PURE__ */ __name((_provider, account) => {
|
|
|
922
741
|
}, "useSigner");
|
|
923
742
|
|
|
924
743
|
// src/hooks/viewer/useCheckRpc.ts
|
|
925
|
-
import { usePromise as
|
|
926
|
-
import { delay as delay2, isDefined as
|
|
744
|
+
import { usePromise as usePromise6 } from "@xylabs/react-promise";
|
|
745
|
+
import { delay as delay2, isDefined as isDefined4, isUndefined as isUndefined4 } from "@xylabs/sdk-js";
|
|
927
746
|
import { basicRemoteViewerLocator as basicRemoteViewerLocator2 } from "@xyo-network/chain-orchestration";
|
|
928
747
|
import { LocalNetwork, SequenceNetwork, XyoViewerMoniker } from "@xyo-network/xl1-sdk";
|
|
929
|
-
import { useEffect as
|
|
748
|
+
import { useEffect as useEffect4, useState as useState6 } from "react";
|
|
930
749
|
var INTERVAL = 5e3;
|
|
931
750
|
var localRpcEndpoint = `${LocalNetwork.url}/rpc`;
|
|
932
751
|
var sequenceRpcEndpoint = `${SequenceNetwork.url}/rpc`;
|
|
@@ -941,8 +760,8 @@ var useCheckSequenceRpc = /* @__PURE__ */ __name(() => {
|
|
|
941
760
|
var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
|
|
942
761
|
const [isLocalProducer, setIsLocalProducer] = useState6(false);
|
|
943
762
|
const [error, setError] = useState6();
|
|
944
|
-
const [viewer] =
|
|
945
|
-
if (
|
|
763
|
+
const [viewer] = usePromise6(async () => {
|
|
764
|
+
if (isUndefined4(endpoint)) return;
|
|
946
765
|
const locator = await basicRemoteViewerLocator2(endpoint, {
|
|
947
766
|
rpc: {
|
|
948
767
|
protocol: "http",
|
|
@@ -954,14 +773,14 @@ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
|
|
|
954
773
|
}, [
|
|
955
774
|
endpoint
|
|
956
775
|
]);
|
|
957
|
-
|
|
958
|
-
if (
|
|
776
|
+
useEffect4(() => {
|
|
777
|
+
if (isUndefined4(viewer)) return;
|
|
959
778
|
void (async () => {
|
|
960
779
|
setError(void 0);
|
|
961
780
|
while (!isLocalProducer) {
|
|
962
781
|
try {
|
|
963
782
|
const block = await viewer.currentBlock();
|
|
964
|
-
setIsLocalProducer(
|
|
783
|
+
setIsLocalProducer(isDefined4(block));
|
|
965
784
|
} catch (err) {
|
|
966
785
|
setError(err);
|
|
967
786
|
setIsLocalProducer(false);
|
|
@@ -980,7 +799,7 @@ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
|
|
|
980
799
|
}, "useCheckRpc");
|
|
981
800
|
|
|
982
801
|
// src/hooks/viewer/ViewerWithDataLake.ts
|
|
983
|
-
import { isNull as
|
|
802
|
+
import { isNull as isNull3 } from "@xylabs/sdk-js";
|
|
984
803
|
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/sdk-js";
|
|
985
804
|
import { addDataLakePayloads, addDataLakePayloadsToPayloads, DataLakeViewerMoniker, JsonRpcXyoViewer } from "@xyo-network/xl1-sdk";
|
|
986
805
|
var ViewerWithDataLake = class extends JsonRpcXyoViewer {
|
|
@@ -1010,7 +829,7 @@ var ViewerWithDataLake = class extends JsonRpcXyoViewer {
|
|
|
1010
829
|
await PayloadBuilder2.addHashMeta(transaction[0]),
|
|
1011
830
|
await PayloadBuilder2.addHashMeta(transaction[1])
|
|
1012
831
|
] : null;
|
|
1013
|
-
return
|
|
832
|
+
return isNull3(transaction) ? transaction : (await addDataLakePayloads([
|
|
1014
833
|
await PayloadBuilder2.addHashMeta(transaction[0]),
|
|
1015
834
|
await PayloadBuilder2.addHashMeta(transaction[1])
|
|
1016
835
|
], this.dataLakeViewer))[0];
|
|
@@ -1040,16 +859,16 @@ var DefaultNoWalletInstalledComponent = /* @__PURE__ */ __name(() => /* @__PURE_
|
|
|
1040
859
|
}, "Get XL1 Wallet")), "DefaultNoWalletInstalledComponent");
|
|
1041
860
|
var ConnectAccountsStack = /* @__PURE__ */ __name(({ AccountComponent = ConnectedAccount, ConnectComponent = DefaultConnectComponent, NoWalletInstalledComponent = DefaultNoWalletInstalledComponent, onAccountConnected, onCancel, timeout, ...props }) => {
|
|
1042
861
|
const { address, connectSigner, error, timedout } = useConnectAccount(void 0, timeout);
|
|
1043
|
-
|
|
1044
|
-
if (
|
|
862
|
+
useEffect5(() => {
|
|
863
|
+
if (isDefined5(error) && isDefined5(onCancel)) {
|
|
1045
864
|
onCancel();
|
|
1046
865
|
}
|
|
1047
866
|
}, [
|
|
1048
867
|
error,
|
|
1049
868
|
onCancel
|
|
1050
869
|
]);
|
|
1051
|
-
|
|
1052
|
-
if (
|
|
870
|
+
useEffect5(() => {
|
|
871
|
+
if (isDefined5(address) && isDefined5(onAccountConnected)) {
|
|
1053
872
|
onAccountConnected(address);
|
|
1054
873
|
}
|
|
1055
874
|
}, [
|
|
@@ -1061,11 +880,11 @@ var ConnectAccountsStack = /* @__PURE__ */ __name(({ AccountComponent = Connecte
|
|
|
1061
880
|
alignItems: "start",
|
|
1062
881
|
spacing: 2,
|
|
1063
882
|
...props
|
|
1064
|
-
},
|
|
883
|
+
}, isDefined5(address) ? /* @__PURE__ */ React5.createElement(AccountComponent, {
|
|
1065
884
|
address
|
|
1066
|
-
}) : null,
|
|
885
|
+
}) : null, isUndefined5(address) && !timedout ? /* @__PURE__ */ React5.createElement(ConnectComponent, {
|
|
1067
886
|
onClick: /* @__PURE__ */ __name(() => void connectSigner(), "onClick")
|
|
1068
|
-
}, "Connect") : null,
|
|
887
|
+
}, "Connect") : null, isUndefined5(address) && timedout ? /* @__PURE__ */ React5.createElement(NoWalletInstalledComponent, null) : null, /* @__PURE__ */ React5.createElement(ErrorRender2, {
|
|
1069
888
|
error,
|
|
1070
889
|
scope: "ConnectSigner:error"
|
|
1071
890
|
}));
|