@xyo-network/react-chain-provider 1.15.0 → 1.15.2
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/hooks/UseConnectAccount.stories.d.ts +9 -0
- package/dist/browser/hooks/UseConnectAccount.stories.d.ts.map +1 -0
- package/dist/browser/hooks/index.d.ts +1 -0
- package/dist/browser/hooks/index.d.ts.map +1 -1
- package/dist/browser/hooks/useConnectAccount.d.ts +11 -0
- package/dist/browser/hooks/useConnectAccount.d.ts.map +1 -0
- package/dist/browser/index.mjs +54 -25
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +12 -11
- package/src/hooks/UseConnectAccount.stories.tsx +35 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useAddressBalance.ts +1 -1
- package/src/hooks/useConnectAccount.ts +27 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Meta } from '@storybook/react-vite';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
declare const _default: Meta;
|
|
4
|
+
export default _default;
|
|
5
|
+
declare const Default: import("storybook/internal/csf").AnnotatedStoryFn<import("@storybook/react-vite").ReactRenderer, import("@mui/material").ButtonOwnProps & Omit<import("@mui/material").ButtonBaseOwnProps, "classes"> & import("@mui/material/OverridableComponent").CommonProps & Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "loading" | "className" | "style" | "classes" | "action" | "centerRipple" | "children" | "disabled" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "sx" | "tabIndex" | "TouchRippleProps" | "touchRippleRef" | "color" | "disableElevation" | "disableFocusRipple" | "endIcon" | "fullWidth" | "href" | "loadingIndicator" | "loadingPosition" | "size" | "startIcon" | "variant"> & {
|
|
6
|
+
component?: React.ElementType;
|
|
7
|
+
}>;
|
|
8
|
+
export { Default };
|
|
9
|
+
//# sourceMappingURL=UseConnectAccount.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UseConnectAccount.stories.d.ts","sourceRoot":"","sources":["../../../src/hooks/UseConnectAccount.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAW,MAAM,uBAAuB,CAAA;AAG1D,OAAO,KAAK,MAAM,OAAO,CAAA;wBAoBpB,IAAI;AAHT,wBAGS;AAIT,QAAA,MAAM,OAAO;;EAAoB,CAAA;AAGjC,OAAO,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './helpers/index.ts';
|
|
2
2
|
export * from './useAddressBalance.ts';
|
|
3
3
|
export * from './useClient.ts';
|
|
4
|
+
export * from './useConnectAccount.ts';
|
|
4
5
|
export * from './useCurrentBlock.ts';
|
|
5
6
|
export * from './useGateway.ts';
|
|
6
7
|
export * from './useHttpRpcRunner.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { GatewayName } from '@xyo-network/xl1-protocol';
|
|
2
|
+
export declare const useConnectAccount: (gatewayName?: GatewayName) => {
|
|
3
|
+
address: string | undefined;
|
|
4
|
+
connectSigner: () => Promise<import("@xylabs/typeof").Brand<import("@xylabs/typeof").Brand<Lowercase<string>, {
|
|
5
|
+
readonly __hex: true;
|
|
6
|
+
}>, {
|
|
7
|
+
readonly __address: true;
|
|
8
|
+
}>>;
|
|
9
|
+
error: Error | null;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=useConnectAccount.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConnectAccount.d.ts","sourceRoot":"","sources":["../../../src/hooks/useConnectAccount.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAK5D,eAAO,MAAM,iBAAiB,GAAI,cAAa,WAA4B;;;;;;;;CAmB1E,CAAA"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -32,7 +32,7 @@ __name(getXyoClient, "getXyoClient");
|
|
|
32
32
|
|
|
33
33
|
// src/hooks/useAddressBalance.ts
|
|
34
34
|
import { isUndefined, isUndefinedOrNull } from "@xylabs/typeof";
|
|
35
|
-
import { ShiftedBigInt } from "@xyo-network/xl1-
|
|
35
|
+
import { ShiftedBigInt } from "@xyo-network/xl1-protocol";
|
|
36
36
|
import { useEffect, useMemo, useState } from "react";
|
|
37
37
|
var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh) => {
|
|
38
38
|
const [balancesResult, setBalancesResult] = useState();
|
|
@@ -151,6 +151,44 @@ var useClient = /* @__PURE__ */ __name(() => {
|
|
|
151
151
|
return useSyncExternalStore(subscribe, getSnapshot);
|
|
152
152
|
}, "useClient");
|
|
153
153
|
|
|
154
|
+
// src/hooks/useConnectAccount.ts
|
|
155
|
+
import { isUndefined as isUndefined2 } from "@xylabs/typeof";
|
|
156
|
+
import { MainNetwork } from "@xyo-network/chain-network-model";
|
|
157
|
+
import { useCallback, useState as useState2 } from "react";
|
|
158
|
+
|
|
159
|
+
// src/hooks/useGateway.ts
|
|
160
|
+
var useGateway = /* @__PURE__ */ __name((gatewayName) => {
|
|
161
|
+
const { client, isLoading, error } = useClient();
|
|
162
|
+
return {
|
|
163
|
+
gateway: gatewayName ? client?.gateways?.[gatewayName] : void 0,
|
|
164
|
+
isLoading,
|
|
165
|
+
error
|
|
166
|
+
};
|
|
167
|
+
}, "useGateway");
|
|
168
|
+
|
|
169
|
+
// src/hooks/useConnectAccount.ts
|
|
170
|
+
var useConnectAccount = /* @__PURE__ */ __name((gatewayName = MainNetwork.id) => {
|
|
171
|
+
const { gateway, error } = useGateway(gatewayName);
|
|
172
|
+
const [address, setAddress] = useState2();
|
|
173
|
+
const connectSigner = useCallback(async () => {
|
|
174
|
+
if (isUndefined2(gateway)) {
|
|
175
|
+
throw new Error(`Gateway ${gatewayName} is not available`);
|
|
176
|
+
}
|
|
177
|
+
const signer = await gateway.signer();
|
|
178
|
+
const address2 = await signer.address();
|
|
179
|
+
setAddress(address2);
|
|
180
|
+
return address2;
|
|
181
|
+
}, [
|
|
182
|
+
gateway,
|
|
183
|
+
gatewayName
|
|
184
|
+
]);
|
|
185
|
+
return {
|
|
186
|
+
address,
|
|
187
|
+
connectSigner,
|
|
188
|
+
error
|
|
189
|
+
};
|
|
190
|
+
}, "useConnectAccount");
|
|
191
|
+
|
|
154
192
|
// src/hooks/useCurrentBlock.ts
|
|
155
193
|
import { usePromise } from "@xylabs/react-promise";
|
|
156
194
|
var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
|
|
@@ -165,23 +203,13 @@ var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
|
|
|
165
203
|
]);
|
|
166
204
|
}, "useCurrentBlock");
|
|
167
205
|
|
|
168
|
-
// src/hooks/useGateway.ts
|
|
169
|
-
var useGateway = /* @__PURE__ */ __name((gatewayName) => {
|
|
170
|
-
const { client, isLoading, error } = useClient();
|
|
171
|
-
return {
|
|
172
|
-
gateway: gatewayName ? client?.gateways?.[gatewayName] : void 0,
|
|
173
|
-
isLoading,
|
|
174
|
-
error
|
|
175
|
-
};
|
|
176
|
-
}, "useGateway");
|
|
177
|
-
|
|
178
206
|
// src/hooks/useHttpRpcRunner.ts
|
|
179
|
-
import { isUndefined as
|
|
207
|
+
import { isUndefined as isUndefined3 } from "@xylabs/typeof";
|
|
180
208
|
import { AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner } from "@xyo-network/xl1-rpc";
|
|
181
209
|
import { useMemo as useMemo2 } from "react";
|
|
182
210
|
var useHttpRpcRunner = /* @__PURE__ */ __name((url) => {
|
|
183
211
|
return useMemo2(() => {
|
|
184
|
-
if (
|
|
212
|
+
if (isUndefined3(url)) {
|
|
185
213
|
return;
|
|
186
214
|
}
|
|
187
215
|
const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas);
|
|
@@ -192,12 +220,12 @@ var useHttpRpcRunner = /* @__PURE__ */ __name((url) => {
|
|
|
192
220
|
}, "useHttpRpcRunner");
|
|
193
221
|
|
|
194
222
|
// src/hooks/useNetwork.ts
|
|
195
|
-
import { isUndefined as
|
|
223
|
+
import { isUndefined as isUndefined4 } from "@xylabs/typeof";
|
|
196
224
|
import { MemoryXyoNetwork } from "@xyo-network/xl1-rpc";
|
|
197
225
|
import { useMemo as useMemo3 } from "react";
|
|
198
226
|
var useNetwork = /* @__PURE__ */ __name((id) => {
|
|
199
227
|
const network = useMemo3(() => {
|
|
200
|
-
if (
|
|
228
|
+
if (isUndefined4(id)) return;
|
|
201
229
|
return new MemoryXyoNetwork(id);
|
|
202
230
|
}, [
|
|
203
231
|
id
|
|
@@ -216,10 +244,10 @@ var useSigner = /* @__PURE__ */ __name((_provider, account) => {
|
|
|
216
244
|
|
|
217
245
|
// src/hooks/viewer/useCheckRpc.ts
|
|
218
246
|
import { delay } from "@xylabs/delay";
|
|
219
|
-
import { isDefined, isUndefined as
|
|
247
|
+
import { isDefined, isUndefined as isUndefined5 } from "@xylabs/typeof";
|
|
220
248
|
import { LocalNetwork, SequenceNetwork } from "@xyo-network/chain-network-model";
|
|
221
249
|
import { HttpRpcTransport as HttpRpcTransport2, JsonRpcXyoViewer, XyoViewerRpcSchemas } from "@xyo-network/xl1-rpc";
|
|
222
|
-
import { useEffect as useEffect2, useMemo as useMemo5, useState as
|
|
250
|
+
import { useEffect as useEffect2, useMemo as useMemo5, useState as useState3 } from "react";
|
|
223
251
|
var INTERVAL = 5e3;
|
|
224
252
|
var localRpcEndpoint = `${LocalNetwork.url}/rpc`;
|
|
225
253
|
var sequenceRpcEndpoint = `${SequenceNetwork.url}/rpc`;
|
|
@@ -232,10 +260,10 @@ var useCheckSequenceRpc = /* @__PURE__ */ __name(() => {
|
|
|
232
260
|
return isLocalProducer;
|
|
233
261
|
}, "useCheckSequenceRpc");
|
|
234
262
|
var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
|
|
235
|
-
const [isLocalProducer, setIsLocalProducer] =
|
|
236
|
-
const [error, setError] =
|
|
263
|
+
const [isLocalProducer, setIsLocalProducer] = useState3(false);
|
|
264
|
+
const [error, setError] = useState3();
|
|
237
265
|
const viewer = useMemo5(() => {
|
|
238
|
-
if (
|
|
266
|
+
if (isUndefined5(endpoint)) return;
|
|
239
267
|
const transport = new HttpRpcTransport2(endpoint, XyoViewerRpcSchemas);
|
|
240
268
|
const viewer2 = new JsonRpcXyoViewer(transport);
|
|
241
269
|
return viewer2;
|
|
@@ -243,7 +271,7 @@ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
|
|
|
243
271
|
endpoint
|
|
244
272
|
]);
|
|
245
273
|
useEffect2(() => {
|
|
246
|
-
if (
|
|
274
|
+
if (isUndefined5(viewer)) return;
|
|
247
275
|
void (async () => {
|
|
248
276
|
setError(void 0);
|
|
249
277
|
while (!isLocalProducer) {
|
|
@@ -267,12 +295,12 @@ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
|
|
|
267
295
|
}, "useCheckRpc");
|
|
268
296
|
|
|
269
297
|
// src/hooks/viewer/useHttpRpcViewer.ts
|
|
270
|
-
import { isUndefined as
|
|
298
|
+
import { isUndefined as isUndefined6 } from "@xylabs/typeof";
|
|
271
299
|
import { HttpRpcTransport as HttpRpcTransport3, JsonRpcXyoViewer as JsonRpcXyoViewer2, XyoViewerRpcSchemas as XyoViewerRpcSchemas2 } from "@xyo-network/xl1-rpc";
|
|
272
300
|
import { useMemo as useMemo6 } from "react";
|
|
273
301
|
var useHttpRpcViewer = /* @__PURE__ */ __name((url) => {
|
|
274
302
|
const resolvedViewer = useMemo6(() => {
|
|
275
|
-
if (
|
|
303
|
+
if (isUndefined6(url)) {
|
|
276
304
|
return;
|
|
277
305
|
}
|
|
278
306
|
const transport = new HttpRpcTransport3(`${url}/rpc`, XyoViewerRpcSchemas2);
|
|
@@ -285,7 +313,7 @@ var useHttpRpcViewer = /* @__PURE__ */ __name((url) => {
|
|
|
285
313
|
|
|
286
314
|
// src/hooks/viewer/useViewerFromWallet.ts
|
|
287
315
|
import { usePromise as usePromise2 } from "@xylabs/react-promise";
|
|
288
|
-
import { isDefined as isDefined3, isTruthy, isUndefined as
|
|
316
|
+
import { isDefined as isDefined3, isTruthy, isUndefined as isUndefined7 } from "@xylabs/typeof";
|
|
289
317
|
import { useEffect as useEffect3, useMemo as useMemo7 } from "react";
|
|
290
318
|
|
|
291
319
|
// src/hooks/viewer/resolveGateway.ts
|
|
@@ -328,7 +356,7 @@ var useViewerFromWallet = /* @__PURE__ */ __name((networkId) => {
|
|
|
328
356
|
networkId
|
|
329
357
|
]);
|
|
330
358
|
const [gatewayViewer, rpcError] = usePromise2(async () => {
|
|
331
|
-
if (
|
|
359
|
+
if (isUndefined7(networkGateway)) return;
|
|
332
360
|
const connection = await networkGateway.connection();
|
|
333
361
|
return connection.viewer;
|
|
334
362
|
}, [
|
|
@@ -351,6 +379,7 @@ export {
|
|
|
351
379
|
useCheckRpc,
|
|
352
380
|
useCheckSequenceRpc,
|
|
353
381
|
useClient,
|
|
382
|
+
useConnectAccount,
|
|
354
383
|
useCurrentBlock,
|
|
355
384
|
useGateway,
|
|
356
385
|
useHttpRpcRunner,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/helpers/getXyoClient.ts","../../src/hooks/useAddressBalance.ts","../../src/hooks/useClient.ts","../../src/hooks/useCurrentBlock.ts","../../src/hooks/useGateway.ts","../../src/hooks/useHttpRpcRunner.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useSigner.ts","../../src/hooks/viewer/useCheckRpc.ts","../../src/hooks/viewer/useHttpRpcViewer.ts","../../src/hooks/viewer/useViewerFromWallet.ts","../../src/hooks/viewer/resolveGateway.ts"],"sourcesContent":["import type { XyoClient } from '@xyo-network/xl1-protocol'\n\nconst CLIENT_LISTENER_TIMEOUT = 5000\n\nconst hasXyoClient = () => {\n return 'client' in globalThis.xyo\n}\n\nexport const listenForClientInjection = (onClientReady: () => void, onTimeout: () => void) => {\n let resolved = false\n const listener: EventListener = () => {\n onClientReady()\n resolved = true\n }\n globalThis.addEventListener('xyo:plugin-ready', listener)\n setTimeout(() => {\n if (!resolved) {\n onTimeout()\n }\n }, CLIENT_LISTENER_TIMEOUT)\n}\n\nexport async function getXyoClient(): Promise<XyoClient | undefined> {\n return hasXyoClient()\n ? globalThis.xyo.client\n // listen for the XyoWallet to be injected\n : await new Promise<XyoClient | undefined>((resolve, reject) => {\n listenForClientInjection(\n () => {\n resolve(globalThis.xyo.client)\n },\n () => {\n reject(new Error('XYO Client not installed'))\n },\n )\n })\n}\n","import type { Address } from '@xylabs/hex'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'\nimport type { AttoXL1, XyoViewer } from '@xyo-network/xl1-protocol'\nimport { ShiftedBigInt } from '@xyo-network/xl1-wrappers'\nimport {\n useEffect, useMemo, useState,\n} from 'react'\n\nexport const useAddressBalance = (\n // address to get balance for\n address?: Address,\n // viewer to use for fetching balance\n viewer?: XyoViewer,\n // refresh balance trigger\n refresh?: number,\n) => {\n const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()\n const [loading, setLoading] = useState(false)\n const [balancesError, setBalancesError] = useState<Error>()\n\n useEffect(() => {\n let isCurrent = true\n if (isUndefined(viewer) || isUndefined(address)) return\n // Ensure the render is the current one before setting the state.\n // This solves the issue of overlapping calls where a previous call takes\n // longer than a subsequent one and returns a state value. Now, the latest\n // result is always returned.\n (viewer.accountBalance(address) as Promise<AttoXL1>).then((result) => {\n if (isCurrent) {\n setBalancesResult(result as AttoXL1)\n setLoading(false)\n }\n })\n .catch((err) => {\n if (isCurrent) {\n console.error('Error in queued call:', err)\n setBalancesResult(undefined)\n setBalancesError(err)\n setLoading(false)\n }\n })\n\n return () => {\n isCurrent = false\n }\n }, [address, viewer, refresh])\n\n useMemo(() => {\n if (balancesError) {\n setLoading(false)\n }\n }, [balancesError])\n\n const shiftedBigInt = useMemo(() => {\n if (typeof balancesResult !== 'bigint') return\n return new ShiftedBigInt(balancesResult, {\n places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,\n })\n }, [balancesResult])\n\n const balanceIntlFriendly = useMemo(() => {\n return shiftedBigInt?.toFullString()\n }, [shiftedBigInt])\n\n const shortBalanceIntlFriendly = useMemo(() => {\n return isUndefinedOrNull(balancesResult)\n ? undefined\n : (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()\n }, [shiftedBigInt])\n\n return {\n address,\n balanceForAddress: balancesResult,\n balanceIntlFriendly,\n shortBalanceIntlFriendly,\n error: balancesError,\n loading,\n }\n}\n","import type { XyoClient } from '@xyo-network/xl1-protocol'\nimport { useSyncExternalStore } from 'react'\n\nimport { getXyoClient } from './helpers/index.ts'\n\ninterface ClientState {\n client?: XyoClient\n error: Error | null\n isLoading: boolean\n}\n\nlet currentState: ClientState = {\n client: undefined,\n error: null,\n isLoading: false,\n}\n\nconst listeners = new Set<() => void>()\n\nconst emitChange = () => {\n for (const listener of listeners) listener()\n}\n\nconst updateState = (newState: Partial<ClientState>) => {\n currentState = { ...currentState, ...newState }\n emitChange()\n}\n\nconst initializeClient = async () => {\n if (currentState.isLoading || currentState.client) return\n\n updateState({ isLoading: true, error: null })\n\n try {\n const client = await getXyoClient()\n updateState({\n client, isLoading: false, error: null,\n })\n } catch (error) {\n updateState({ error: error as Error, isLoading: false })\n }\n}\n\nconst subscribe = (listener: () => void) => {\n listeners.add(listener)\n\n void initializeClient()\n\n return () => {\n listeners.delete(listener)\n }\n}\n\nconst getSnapshot = (): ClientState => currentState\n\nexport const useClient = () => {\n return useSyncExternalStore(subscribe, getSnapshot)\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\n\nexport const useCurrentBlock = (refresh = 1, viewer?: XyoViewer) => {\n return usePromise(async () => {\n if (viewer && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import type { GatewayName } from '@xyo-network/xl1-protocol'\n\nimport { useClient } from './useClient.ts'\n\nexport const useGateway = (gatewayName?: GatewayName) => {\n const {\n client, isLoading, error,\n } = useClient()\n return {\n gateway: gatewayName ? client?.gateways?.[gatewayName] : undefined,\n isLoading,\n error,\n }\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { RpcTransport, XyoRunnerRpcSchemas } from '@xyo-network/xl1-rpc'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcRunner = (url?: string) => {\n return useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoRunner(transport as RpcTransport<typeof XyoRunnerRpcSchemas>)\n }, [url])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { DefaultNetworkIds } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoNetwork } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useNetwork = (id?: DefaultNetworkIds) => {\n const network = useMemo(() => {\n if (isUndefined(id)) return\n return new MemoryXyoNetwork(id)\n }, [id])\n\n return network\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type { XyoConnection, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoConnection, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new MemoryXyoSigner(account) : undefined, [account])\n}\n","import { delay } from '@xylabs/delay'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { LocalNetwork, SequenceNetwork } from '@xyo-network/chain-network-model'\nimport {\n HttpRpcTransport, JsonRpcXyoViewer, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport {\n useEffect, useMemo, useState,\n} from 'react'\n\nconst INTERVAL = 5000 // 5 seconds\n\nconst localRpcEndpoint: string = `${LocalNetwork.url}/rpc`\nconst sequenceRpcEndpoint: string = `${SequenceNetwork.url}/rpc`\n\nexport const useCheckLocalRpc = () => {\n const isLocalProducer = useCheckRpc(localRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckSequenceRpc = () => {\n const isLocalProducer = useCheckRpc(sequenceRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckRpc = (endpoint?: string) => {\n const [isLocalProducer, setIsLocalProducer] = useState(false)\n const [error, setError] = useState<Error>()\n\n const viewer = useMemo(() => {\n if (isUndefined(endpoint)) return\n\n const transport = new HttpRpcTransport(endpoint, XyoViewerRpcSchemas)\n const viewer = new JsonRpcXyoViewer(transport)\n return viewer\n }, [endpoint])\n\n useEffect(() => {\n if (isUndefined(viewer)) return\n\n void (async () => {\n setError(undefined)\n while (!isLocalProducer) {\n try {\n const block = await viewer.currentBlock()\n setIsLocalProducer(isDefined(block))\n } catch (err) {\n setError(err as Error)\n setIsLocalProducer(false)\n }\n await delay(INTERVAL)\n }\n })()\n }, [viewer])\n\n return { isLocalProducer, error }\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport {\n HttpRpcTransport, JsonRpcXyoViewer, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcViewer = (url?: string) => {\n const resolvedViewer = useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, XyoViewerRpcSchemas)\n return new JsonRpcXyoViewer(transport)\n }, [url])\n\n return resolvedViewer\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n isDefined, isTruthy, isUndefined,\n} from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport { useEffect, useMemo } from 'react'\n\nimport { resolveGateway } from './resolveGateway.ts'\n\n/**\n * Creates a JsonRpcXyoViewer instance based on the provided networkId.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns An instance of XyoViewer if the networkId is found in wallet gateways\n * otherwise undefined.\n */\nexport const useViewerFromWallet = (networkId?: GatewayName) => {\n const networkGateway = useMemo(() => {\n if (isDefined(networkId)) {\n return resolveGateway(networkId)\n }\n }, [networkId])\n\n const [gatewayViewer, rpcError] = usePromise(async () => {\n if (isUndefined(networkGateway)) return\n const connection = await networkGateway.connection()\n return connection.viewer\n }, [networkGateway])\n\n useEffect(() => {\n if (isTruthy(rpcError)) {\n console.error('Error creating viewer from wallet:', rpcError)\n }\n }, [rpcError])\n\n return gatewayViewer\n}\n","import { isDefined } from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport type {\n RpcTransport,\n XyoRunnerRpcSchemas, XyoSignerRpcSchemas,\n XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport {\n JsonRpcXyoRunner, JsonRpcXyoViewer, LegacyPostMessageRpcTransport, MemoryXyoGateway, RpcXyoSigner, XyoBaseConnection,\n} from '@xyo-network/xl1-rpc'\n\n/**\n * Check the global xyo object for gateways on the injected client.\n * @returns The gateways from the global xyo object, or undefined if it does not exist.\n */\nconst gateways = () => globalThis.xyo?.client?.gateways\n\n/**\n * Builds a gateway from the connection if it exists in the global xyo object.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.\n */\nconst buildGatewayFromConnection = (networkId: GatewayName) => {\n const connections = globalThis.xyo?.connections\n if (isDefined(connections) && isDefined(connections[networkId])) {\n // use the legacy post message transport to ensure compatibility with older implementations\n const legacyPostMessageRpcTransport = new LegacyPostMessageRpcTransport(networkId, globalThis.xyo.walletExtensionId() ?? '')\n const signer = new RpcXyoSigner(legacyPostMessageRpcTransport as RpcTransport<typeof XyoSignerRpcSchemas>)\n const viewer = new JsonRpcXyoViewer(legacyPostMessageRpcTransport as RpcTransport<typeof XyoViewerRpcSchemas>)\n const runner = new JsonRpcXyoRunner(legacyPostMessageRpcTransport as RpcTransport<typeof XyoRunnerRpcSchemas>)\n const connection = new XyoBaseConnection({ viewer, runner })\n return new MemoryXyoGateway(signer, connection)\n }\n}\n\n/**\n * Retrieves a gateway from the wallet based on the provided networkId.\n * Includes fallback logic to build a gateway from the connection if it does not exist in\n * the global xyo object.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.\n */\nexport const resolveGateway = (networkId: GatewayName) => {\n const networkGateway = gateways()?.[networkId]\n if (isDefined(networkGateway)) {\n return networkGateway\n }\n const builtGateway = buildGatewayFromConnection(networkId)\n if (isDefined(builtGateway)) {\n return builtGateway\n }\n // If no gateway is found, log a warning\n console.warn(`No gateway found for networkId: ${networkId}`)\n}\n"],"mappings":";;;;AAEA,IAAMA,0BAA0B;AAEhC,IAAMC,eAAe,6BAAA;AACnB,SAAO,YAAYC,WAAWC;AAChC,GAFqB;AAId,IAAMC,2BAA2B,wBAACC,eAA2BC,cAAAA;AAClE,MAAIC,WAAW;AACf,QAAMC,WAA0B,6BAAA;AAC9BH,kBAAAA;AACAE,eAAW;EACb,GAHgC;AAIhCL,aAAWO,iBAAiB,oBAAoBD,QAAAA;AAChDE,aAAW,MAAA;AACT,QAAI,CAACH,UAAU;AACbD,gBAAAA;IACF;EACF,GAAGN,uBAAAA;AACL,GAZwC;AAcxC,eAAsBW,eAAAA;AACpB,SAAOV,aAAAA,IACHC,WAAWC,IAAIS,SAEf,MAAM,IAAIC,QAA+B,CAACC,SAASC,WAAAA;AACjDX,6BACE,MAAA;AACEU,cAAQZ,WAAWC,IAAIS,MAAM;IAC/B,GACA,MAAA;AACEG,aAAO,IAAIC,MAAM,0BAAA,CAAA;IACnB,CAAA;EAEJ,CAAA;AACN;AAdsBL;;;ACrBtB,SAASM,aAAaC,yBAAyB;AAE/C,SAASC,qBAAqB;AAC9B,SACEC,WAAWC,SAASC,gBACf;AAEA,IAAMC,oBAAoB,wBAE/BC,SAEAC,QAEAC,YAAAA;AAEA,QAAM,CAACC,gBAAgBC,iBAAAA,IAAqBC,SAAAA;AAC5C,QAAM,CAACC,SAASC,UAAAA,IAAcF,SAAS,KAAA;AACvC,QAAM,CAACG,eAAeC,gBAAAA,IAAoBJ,SAAAA;AAE1CK,YAAU,MAAA;AACR,QAAIC,YAAY;AAChB,QAAIC,YAAYX,MAAAA,KAAWW,YAAYZ,OAAAA,EAAU;AAKhDC,WAAOY,eAAeb,OAAAA,EAA8Bc,KAAK,CAACC,WAAAA;AACzD,UAAIJ,WAAW;AACbP,0BAAkBW,MAAAA;AAClBR,mBAAW,KAAA;MACb;IACF,CAAA,EACGS,MAAM,CAACC,QAAAA;AACN,UAAIN,WAAW;AACbO,gBAAQC,MAAM,yBAAyBF,GAAAA;AACvCb,0BAAkBgB,MAAAA;AAClBX,yBAAiBQ,GAAAA;AACjBV,mBAAW,KAAA;MACb;IACF,CAAA;AAEF,WAAO,MAAA;AACLI,kBAAY;IACd;EACF,GAAG;IAACX;IAASC;IAAQC;GAAQ;AAE7BmB,UAAQ,MAAA;AACN,QAAIb,eAAe;AACjBD,iBAAW,KAAA;IACb;EACF,GAAG;IAACC;GAAc;AAElB,QAAMc,gBAAgBD,QAAQ,MAAA;AAC5B,QAAI,OAAOlB,mBAAmB,SAAU;AACxC,WAAO,IAAIoB,cAAcpB,gBAAgB;MACvCqB,QAAQ;MAAIC,YAAY;MAAIC,eAAe;MAAGC,aAAa;MAAGC,QAAQC,UAAUC;IAClF,CAAA;EACF,GAAG;IAAC3B;GAAe;AAEnB,QAAM4B,sBAAsBV,QAAQ,MAAA;AAClC,WAAOC,eAAeU,aAAAA;EACxB,GAAG;IAACV;GAAc;AAElB,QAAMW,2BAA2BZ,QAAQ,MAAA;AACvC,WAAOa,kBAAkB/B,cAAAA,IACrBiB,SACCjB,iBAAiB,kBAAsBA,iBAAiB,KAAM,aAAamB,eAAea,cAAAA;EACjG,GAAG;IAACb;GAAc;AAElB,SAAO;IACLtB;IACAoC,mBAAmBjC;IACnB4B;IACAE;IACAd,OAAOX;IACPF;EACF;AACF,GAtEiC;;;ACPjC,SAAS+B,4BAA4B;AAUrC,IAAIC,eAA4B;EAC9BC,QAAQC;EACRC,OAAO;EACPC,WAAW;AACb;AAEA,IAAMC,YAAY,oBAAIC,IAAAA;AAEtB,IAAMC,aAAa,6BAAA;AACjB,aAAWC,YAAYH,UAAWG,UAAAA;AACpC,GAFmB;AAInB,IAAMC,cAAc,wBAACC,aAAAA;AACnBV,iBAAe;IAAE,GAAGA;IAAc,GAAGU;EAAS;AAC9CH,aAAAA;AACF,GAHoB;AAKpB,IAAMI,mBAAmB,mCAAA;AACvB,MAAIX,aAAaI,aAAaJ,aAAaC,OAAQ;AAEnDQ,cAAY;IAAEL,WAAW;IAAMD,OAAO;EAAK,CAAA;AAE3C,MAAI;AACF,UAAMF,SAAS,MAAMW,aAAAA;AACrBH,gBAAY;MACVR;MAAQG,WAAW;MAAOD,OAAO;IACnC,CAAA;EACF,SAASA,OAAO;AACdM,gBAAY;MAAEN;MAAuBC,WAAW;IAAM,CAAA;EACxD;AACF,GAbyB;AAezB,IAAMS,YAAY,wBAACL,aAAAA;AACjBH,YAAUS,IAAIN,QAAAA;AAEd,OAAKG,iBAAAA;AAEL,SAAO,MAAA;AACLN,cAAUU,OAAOP,QAAAA;EACnB;AACF,GARkB;AAUlB,IAAMQ,cAAc,6BAAmBhB,cAAnB;AAEb,IAAMiB,YAAY,6BAAA;AACvB,SAAOC,qBAAqBL,WAAWG,WAAAA;AACzC,GAFyB;;;ACvDzB,SAASG,kBAAkB;AAGpB,IAAMC,kBAAkB,wBAACC,UAAU,GAAGC,WAAAA;AAC3C,SAAOC,WAAW,YAAA;AAChB,QAAID,UAAUD,UAAU,GAAG;AACzB,YAAMG,QAAQ,MAAMF,OAAOG,aAAY;AACvC,aAAOD;IACT;EACF,GAAG;IAACF;IAAQD;GAAQ;AACtB,GAP+B;;;ACCxB,IAAMK,aAAa,wBAACC,gBAAAA;AACzB,QAAM,EACJC,QAAQC,WAAWC,MAAK,IACtBC,UAAAA;AACJ,SAAO;IACLC,SAASL,cAAcC,QAAQK,WAAWN,WAAAA,IAAeO;IACzDL;IACAC;EACF;AACF,GAT0B;;;ACJ1B,SAASK,eAAAA,oBAAmB;AAE5B,SACEC,eAAeC,kBAAkBC,wBAC5B;AACP,SAASC,WAAAA,gBAAe;AAEjB,IAAMC,mBAAmB,wBAACC,QAAAA;AAC/B,SAAOC,SAAQ,MAAA;AACb,QAAIC,aAAYF,GAAAA,GAAM;AACpB;IACF;AACA,UAAMG,YAAY,IAAIC,iBAAiB,GAAGJ,GAAAA,QAAWK,aAAAA;AACrD,WAAO,IAAIC,iBAAiBH,SAAAA;EAC9B,GAAG;IAACH;GAAI;AACV,GARgC;;;ACPhC,SAASO,eAAAA,oBAAmB;AAE5B,SAASC,wBAAwB;AACjC,SAASC,WAAAA,gBAAe;AAEjB,IAAMC,aAAa,wBAACC,OAAAA;AACzB,QAAMC,UAAUC,SAAQ,MAAA;AACtB,QAAIC,aAAYH,EAAAA,EAAK;AACrB,WAAO,IAAII,iBAAiBJ,EAAAA;EAC9B,GAAG;IAACA;GAAG;AAEP,SAAOC;AACT,GAP0B;;;ACH1B,SAASI,uBAAuB;AAChC,SAASC,WAAAA,gBAAe;AAEjB,IAAMC,YAAY,wBAACC,WAA2BC,YAAAA;AACnD,SAAOC,SAA+B,MAAMD,UAAU,IAAIE,gBAAgBF,OAAAA,IAAWG,QAAW;IAACH;GAAQ;AAC3G,GAFyB;;;ACLzB,SAASI,aAAa;AACtB,SAASC,WAAWC,eAAAA,oBAAmB;AACvC,SAASC,cAAcC,uBAAuB;AAC9C,SACEC,oBAAAA,mBAAkBC,kBAAkBC,2BAC/B;AACP,SACEC,aAAAA,YAAWC,WAAAA,UAASC,YAAAA,iBACf;AAEP,IAAMC,WAAW;AAEjB,IAAMC,mBAA2B,GAAGC,aAAaC,GAAG;AACpD,IAAMC,sBAA8B,GAAGC,gBAAgBF,GAAG;AAEnD,IAAMG,mBAAmB,6BAAA;AAC9B,QAAMC,kBAAkBC,YAAYP,gBAAAA;AACpC,SAAOM;AACT,GAHgC;AAKzB,IAAME,sBAAsB,6BAAA;AACjC,QAAMF,kBAAkBC,YAAYJ,mBAAAA;AACpC,SAAOG;AACT,GAHmC;AAK5B,IAAMC,cAAc,wBAACE,aAAAA;AAC1B,QAAM,CAACH,iBAAiBI,kBAAAA,IAAsBC,UAAS,KAAA;AACvD,QAAM,CAACC,OAAOC,QAAAA,IAAYF,UAAAA;AAE1B,QAAMG,SAASC,SAAQ,MAAA;AACrB,QAAIC,aAAYP,QAAAA,EAAW;AAE3B,UAAMQ,YAAY,IAAIC,kBAAiBT,UAAUU,mBAAAA;AACjD,UAAML,UAAS,IAAIM,iBAAiBH,SAAAA;AACpC,WAAOH;EACT,GAAG;IAACL;GAAS;AAEbY,EAAAA,WAAU,MAAA;AACR,QAAIL,aAAYF,MAAAA,EAAS;AAEzB,UAAM,YAAA;AACJD,eAASS,MAAAA;AACT,aAAO,CAAChB,iBAAiB;AACvB,YAAI;AACF,gBAAMiB,QAAQ,MAAMT,OAAOU,aAAY;AACvCd,6BAAmBe,UAAUF,KAAAA,CAAAA;QAC/B,SAASG,KAAK;AACZb,mBAASa,GAAAA;AACThB,6BAAmB,KAAA;QACrB;AACA,cAAMiB,MAAM5B,QAAAA;MACd;IACF,GAAA;EACF,GAAG;IAACe;GAAO;AAEX,SAAO;IAAER;IAAiBM;EAAM;AAClC,GA/B2B;;;ACzB3B,SAASgB,eAAAA,oBAAmB;AAC5B,SACEC,oBAAAA,mBAAkBC,oBAAAA,mBAAkBC,uBAAAA,4BAC/B;AACP,SAASC,WAAAA,gBAAe;AAEjB,IAAMC,mBAAmB,wBAACC,QAAAA;AAC/B,QAAMC,iBAAiBC,SAAQ,MAAA;AAC7B,QAAIC,aAAYH,GAAAA,GAAM;AACpB;IACF;AACA,UAAMI,YAAY,IAAIC,kBAAiB,GAAGL,GAAAA,QAAWM,oBAAAA;AACrD,WAAO,IAAIC,kBAAiBH,SAAAA;EAC9B,GAAG;IAACJ;GAAI;AAER,SAAOC;AACT,GAVgC;;;ACNhC,SAASO,cAAAA,mBAAkB;AAC3B,SACEC,aAAAA,YAAWC,UAAUC,eAAAA,oBAChB;AAEP,SAASC,aAAAA,YAAWC,WAAAA,gBAAe;;;ACLnC,SAASC,aAAAA,kBAAiB;AAO1B,SACEC,oBAAAA,mBAAkBC,oBAAAA,mBAAkBC,+BAA+BC,kBAAkBC,cAAcC,yBAC9F;AAMP,IAAMC,WAAW,6BAAMC,WAAWC,KAAKC,QAAQH,UAA9B;AAOjB,IAAMI,6BAA6B,wBAACC,cAAAA;AAClC,QAAMC,cAAcL,WAAWC,KAAKI;AACpC,MAAIC,WAAUD,WAAAA,KAAgBC,WAAUD,YAAYD,SAAAA,CAAU,GAAG;AAE/D,UAAMG,gCAAgC,IAAIC,8BAA8BJ,WAAWJ,WAAWC,IAAIQ,kBAAiB,KAAM,EAAA;AACzH,UAAMC,SAAS,IAAIC,aAAaJ,6BAAAA;AAChC,UAAMK,SAAS,IAAIC,kBAAiBN,6BAAAA;AACpC,UAAMO,SAAS,IAAIC,kBAAiBR,6BAAAA;AACpC,UAAMS,aAAa,IAAIC,kBAAkB;MAAEL;MAAQE;IAAO,CAAA;AAC1D,WAAO,IAAII,iBAAiBR,QAAQM,UAAAA;EACtC;AACF,GAXmC;AAoB5B,IAAMG,iBAAiB,wBAACf,cAAAA;AAC7B,QAAMgB,iBAAiBrB,SAAAA,IAAaK,SAAAA;AACpC,MAAIE,WAAUc,cAAAA,GAAiB;AAC7B,WAAOA;EACT;AACA,QAAMC,eAAelB,2BAA2BC,SAAAA;AAChD,MAAIE,WAAUe,YAAAA,GAAe;AAC3B,WAAOA;EACT;AAEAC,UAAQC,KAAK,mCAAmCnB,SAAAA,EAAW;AAC7D,GAX8B;;;AD3BvB,IAAMoB,sBAAsB,wBAACC,cAAAA;AAClC,QAAMC,iBAAiBC,SAAQ,MAAA;AAC7B,QAAIC,WAAUH,SAAAA,GAAY;AACxB,aAAOI,eAAeJ,SAAAA;IACxB;EACF,GAAG;IAACA;GAAU;AAEd,QAAM,CAACK,eAAeC,QAAAA,IAAYC,YAAW,YAAA;AAC3C,QAAIC,aAAYP,cAAAA,EAAiB;AACjC,UAAMQ,aAAa,MAAMR,eAAeQ,WAAU;AAClD,WAAOA,WAAWC;EACpB,GAAG;IAACT;GAAe;AAEnBU,EAAAA,WAAU,MAAA;AACR,QAAIC,SAASN,QAAAA,GAAW;AACtBO,cAAQC,MAAM,sCAAsCR,QAAAA;IACtD;EACF,GAAG;IAACA;GAAS;AAEb,SAAOD;AACT,GApBmC;","names":["CLIENT_LISTENER_TIMEOUT","hasXyoClient","globalThis","xyo","listenForClientInjection","onClientReady","onTimeout","resolved","listener","addEventListener","setTimeout","getXyoClient","client","Promise","resolve","reject","Error","isUndefined","isUndefinedOrNull","ShiftedBigInt","useEffect","useMemo","useState","useAddressBalance","address","viewer","refresh","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","setBalancesError","useEffect","isCurrent","isUndefined","accountBalance","then","result","catch","err","console","error","undefined","useMemo","shiftedBigInt","ShiftedBigInt","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","balanceIntlFriendly","toFullString","shortBalanceIntlFriendly","isUndefinedOrNull","toShortString","balanceForAddress","useSyncExternalStore","currentState","client","undefined","error","isLoading","listeners","Set","emitChange","listener","updateState","newState","initializeClient","getXyoClient","subscribe","add","delete","getSnapshot","useClient","useSyncExternalStore","usePromise","useCurrentBlock","refresh","viewer","usePromise","block","currentBlock","useGateway","gatewayName","client","isLoading","error","useClient","gateway","gateways","undefined","isUndefined","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoRunner","useMemo","useHttpRpcRunner","url","useMemo","isUndefined","transport","HttpRpcTransport","AllRpcSchemas","JsonRpcXyoRunner","isUndefined","MemoryXyoNetwork","useMemo","useNetwork","id","network","useMemo","isUndefined","MemoryXyoNetwork","MemoryXyoSigner","useMemo","useSigner","_provider","account","useMemo","MemoryXyoSigner","undefined","delay","isDefined","isUndefined","LocalNetwork","SequenceNetwork","HttpRpcTransport","JsonRpcXyoViewer","XyoViewerRpcSchemas","useEffect","useMemo","useState","INTERVAL","localRpcEndpoint","LocalNetwork","url","sequenceRpcEndpoint","SequenceNetwork","useCheckLocalRpc","isLocalProducer","useCheckRpc","useCheckSequenceRpc","endpoint","setIsLocalProducer","useState","error","setError","viewer","useMemo","isUndefined","transport","HttpRpcTransport","XyoViewerRpcSchemas","JsonRpcXyoViewer","useEffect","undefined","block","currentBlock","isDefined","err","delay","isUndefined","HttpRpcTransport","JsonRpcXyoViewer","XyoViewerRpcSchemas","useMemo","useHttpRpcViewer","url","resolvedViewer","useMemo","isUndefined","transport","HttpRpcTransport","XyoViewerRpcSchemas","JsonRpcXyoViewer","usePromise","isDefined","isTruthy","isUndefined","useEffect","useMemo","isDefined","JsonRpcXyoRunner","JsonRpcXyoViewer","LegacyPostMessageRpcTransport","MemoryXyoGateway","RpcXyoSigner","XyoBaseConnection","gateways","globalThis","xyo","client","buildGatewayFromConnection","networkId","connections","isDefined","legacyPostMessageRpcTransport","LegacyPostMessageRpcTransport","walletExtensionId","signer","RpcXyoSigner","viewer","JsonRpcXyoViewer","runner","JsonRpcXyoRunner","connection","XyoBaseConnection","MemoryXyoGateway","resolveGateway","networkGateway","builtGateway","console","warn","useViewerFromWallet","networkId","networkGateway","useMemo","isDefined","resolveGateway","gatewayViewer","rpcError","usePromise","isUndefined","connection","viewer","useEffect","isTruthy","console","error"]}
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/helpers/getXyoClient.ts","../../src/hooks/useAddressBalance.ts","../../src/hooks/useClient.ts","../../src/hooks/useConnectAccount.ts","../../src/hooks/useGateway.ts","../../src/hooks/useCurrentBlock.ts","../../src/hooks/useHttpRpcRunner.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useSigner.ts","../../src/hooks/viewer/useCheckRpc.ts","../../src/hooks/viewer/useHttpRpcViewer.ts","../../src/hooks/viewer/useViewerFromWallet.ts","../../src/hooks/viewer/resolveGateway.ts"],"sourcesContent":["import type { XyoClient } from '@xyo-network/xl1-protocol'\n\nconst CLIENT_LISTENER_TIMEOUT = 5000\n\nconst hasXyoClient = () => {\n return 'client' in globalThis.xyo\n}\n\nexport const listenForClientInjection = (onClientReady: () => void, onTimeout: () => void) => {\n let resolved = false\n const listener: EventListener = () => {\n onClientReady()\n resolved = true\n }\n globalThis.addEventListener('xyo:plugin-ready', listener)\n setTimeout(() => {\n if (!resolved) {\n onTimeout()\n }\n }, CLIENT_LISTENER_TIMEOUT)\n}\n\nexport async function getXyoClient(): Promise<XyoClient | undefined> {\n return hasXyoClient()\n ? globalThis.xyo.client\n // listen for the XyoWallet to be injected\n : await new Promise<XyoClient | undefined>((resolve, reject) => {\n listenForClientInjection(\n () => {\n resolve(globalThis.xyo.client)\n },\n () => {\n reject(new Error('XYO Client not installed'))\n },\n )\n })\n}\n","import type { Address } from '@xylabs/hex'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'\nimport type { AttoXL1, XyoViewer } from '@xyo-network/xl1-protocol'\nimport { ShiftedBigInt } from '@xyo-network/xl1-protocol'\nimport {\n useEffect, useMemo, useState,\n} from 'react'\n\nexport const useAddressBalance = (\n // address to get balance for\n address?: Address,\n // viewer to use for fetching balance\n viewer?: XyoViewer,\n // refresh balance trigger\n refresh?: number,\n) => {\n const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()\n const [loading, setLoading] = useState(false)\n const [balancesError, setBalancesError] = useState<Error>()\n\n useEffect(() => {\n let isCurrent = true\n if (isUndefined(viewer) || isUndefined(address)) return\n // Ensure the render is the current one before setting the state.\n // This solves the issue of overlapping calls where a previous call takes\n // longer than a subsequent one and returns a state value. Now, the latest\n // result is always returned.\n (viewer.accountBalance(address) as Promise<AttoXL1>).then((result) => {\n if (isCurrent) {\n setBalancesResult(result as AttoXL1)\n setLoading(false)\n }\n })\n .catch((err) => {\n if (isCurrent) {\n console.error('Error in queued call:', err)\n setBalancesResult(undefined)\n setBalancesError(err)\n setLoading(false)\n }\n })\n\n return () => {\n isCurrent = false\n }\n }, [address, viewer, refresh])\n\n useMemo(() => {\n if (balancesError) {\n setLoading(false)\n }\n }, [balancesError])\n\n const shiftedBigInt = useMemo(() => {\n if (typeof balancesResult !== 'bigint') return\n return new ShiftedBigInt(balancesResult, {\n places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,\n })\n }, [balancesResult])\n\n const balanceIntlFriendly = useMemo(() => {\n return shiftedBigInt?.toFullString()\n }, [shiftedBigInt])\n\n const shortBalanceIntlFriendly = useMemo(() => {\n return isUndefinedOrNull(balancesResult)\n ? undefined\n : (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()\n }, [shiftedBigInt])\n\n return {\n address,\n balanceForAddress: balancesResult,\n balanceIntlFriendly,\n shortBalanceIntlFriendly,\n error: balancesError,\n loading,\n }\n}\n","import type { XyoClient } from '@xyo-network/xl1-protocol'\nimport { useSyncExternalStore } from 'react'\n\nimport { getXyoClient } from './helpers/index.ts'\n\ninterface ClientState {\n client?: XyoClient\n error: Error | null\n isLoading: boolean\n}\n\nlet currentState: ClientState = {\n client: undefined,\n error: null,\n isLoading: false,\n}\n\nconst listeners = new Set<() => void>()\n\nconst emitChange = () => {\n for (const listener of listeners) listener()\n}\n\nconst updateState = (newState: Partial<ClientState>) => {\n currentState = { ...currentState, ...newState }\n emitChange()\n}\n\nconst initializeClient = async () => {\n if (currentState.isLoading || currentState.client) return\n\n updateState({ isLoading: true, error: null })\n\n try {\n const client = await getXyoClient()\n updateState({\n client, isLoading: false, error: null,\n })\n } catch (error) {\n updateState({ error: error as Error, isLoading: false })\n }\n}\n\nconst subscribe = (listener: () => void) => {\n listeners.add(listener)\n\n void initializeClient()\n\n return () => {\n listeners.delete(listener)\n }\n}\n\nconst getSnapshot = (): ClientState => currentState\n\nexport const useClient = () => {\n return useSyncExternalStore(subscribe, getSnapshot)\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport { MainNetwork } from '@xyo-network/chain-network-model'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport { useCallback, useState } from 'react'\n\nimport { useGateway } from './useGateway.ts'\n\nexport const useConnectAccount = (gatewayName: GatewayName = MainNetwork.id) => {\n const { gateway, error } = useGateway(gatewayName)\n\n // Store the address in state for convenience\n const [address, setAddress] = useState<string>()\n\n const connectSigner = useCallback(async () => {\n if (isUndefined(gateway)) {\n throw new Error(`Gateway ${gatewayName} is not available`)\n }\n const signer = await gateway.signer()\n const address = await signer.address()\n setAddress(address)\n return address\n }, [gateway, gatewayName])\n\n return {\n address, connectSigner, error,\n }\n}\n","import type { GatewayName } from '@xyo-network/xl1-protocol'\n\nimport { useClient } from './useClient.ts'\n\nexport const useGateway = (gatewayName?: GatewayName) => {\n const {\n client, isLoading, error,\n } = useClient()\n return {\n gateway: gatewayName ? client?.gateways?.[gatewayName] : undefined,\n isLoading,\n error,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\n\nexport const useCurrentBlock = (refresh = 1, viewer?: XyoViewer) => {\n return usePromise(async () => {\n if (viewer && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { RpcTransport, XyoRunnerRpcSchemas } from '@xyo-network/xl1-rpc'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcRunner = (url?: string) => {\n return useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoRunner(transport as RpcTransport<typeof XyoRunnerRpcSchemas>)\n }, [url])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { DefaultNetworkIds } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoNetwork } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useNetwork = (id?: DefaultNetworkIds) => {\n const network = useMemo(() => {\n if (isUndefined(id)) return\n return new MemoryXyoNetwork(id)\n }, [id])\n\n return network\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type { XyoConnection, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoConnection, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new MemoryXyoSigner(account) : undefined, [account])\n}\n","import { delay } from '@xylabs/delay'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { LocalNetwork, SequenceNetwork } from '@xyo-network/chain-network-model'\nimport {\n HttpRpcTransport, JsonRpcXyoViewer, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport {\n useEffect, useMemo, useState,\n} from 'react'\n\nconst INTERVAL = 5000 // 5 seconds\n\nconst localRpcEndpoint: string = `${LocalNetwork.url}/rpc`\nconst sequenceRpcEndpoint: string = `${SequenceNetwork.url}/rpc`\n\nexport const useCheckLocalRpc = () => {\n const isLocalProducer = useCheckRpc(localRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckSequenceRpc = () => {\n const isLocalProducer = useCheckRpc(sequenceRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckRpc = (endpoint?: string) => {\n const [isLocalProducer, setIsLocalProducer] = useState(false)\n const [error, setError] = useState<Error>()\n\n const viewer = useMemo(() => {\n if (isUndefined(endpoint)) return\n\n const transport = new HttpRpcTransport(endpoint, XyoViewerRpcSchemas)\n const viewer = new JsonRpcXyoViewer(transport)\n return viewer\n }, [endpoint])\n\n useEffect(() => {\n if (isUndefined(viewer)) return\n\n void (async () => {\n setError(undefined)\n while (!isLocalProducer) {\n try {\n const block = await viewer.currentBlock()\n setIsLocalProducer(isDefined(block))\n } catch (err) {\n setError(err as Error)\n setIsLocalProducer(false)\n }\n await delay(INTERVAL)\n }\n })()\n }, [viewer])\n\n return { isLocalProducer, error }\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport {\n HttpRpcTransport, JsonRpcXyoViewer, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcViewer = (url?: string) => {\n const resolvedViewer = useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, XyoViewerRpcSchemas)\n return new JsonRpcXyoViewer(transport)\n }, [url])\n\n return resolvedViewer\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n isDefined, isTruthy, isUndefined,\n} from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport { useEffect, useMemo } from 'react'\n\nimport { resolveGateway } from './resolveGateway.ts'\n\n/**\n * Creates a JsonRpcXyoViewer instance based on the provided networkId.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns An instance of XyoViewer if the networkId is found in wallet gateways\n * otherwise undefined.\n */\nexport const useViewerFromWallet = (networkId?: GatewayName) => {\n const networkGateway = useMemo(() => {\n if (isDefined(networkId)) {\n return resolveGateway(networkId)\n }\n }, [networkId])\n\n const [gatewayViewer, rpcError] = usePromise(async () => {\n if (isUndefined(networkGateway)) return\n const connection = await networkGateway.connection()\n return connection.viewer\n }, [networkGateway])\n\n useEffect(() => {\n if (isTruthy(rpcError)) {\n console.error('Error creating viewer from wallet:', rpcError)\n }\n }, [rpcError])\n\n return gatewayViewer\n}\n","import { isDefined } from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport type {\n RpcTransport,\n XyoRunnerRpcSchemas, XyoSignerRpcSchemas,\n XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport {\n JsonRpcXyoRunner, JsonRpcXyoViewer, LegacyPostMessageRpcTransport, MemoryXyoGateway, RpcXyoSigner, XyoBaseConnection,\n} from '@xyo-network/xl1-rpc'\n\n/**\n * Check the global xyo object for gateways on the injected client.\n * @returns The gateways from the global xyo object, or undefined if it does not exist.\n */\nconst gateways = () => globalThis.xyo?.client?.gateways\n\n/**\n * Builds a gateway from the connection if it exists in the global xyo object.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.\n */\nconst buildGatewayFromConnection = (networkId: GatewayName) => {\n const connections = globalThis.xyo?.connections\n if (isDefined(connections) && isDefined(connections[networkId])) {\n // use the legacy post message transport to ensure compatibility with older implementations\n const legacyPostMessageRpcTransport = new LegacyPostMessageRpcTransport(networkId, globalThis.xyo.walletExtensionId() ?? '')\n const signer = new RpcXyoSigner(legacyPostMessageRpcTransport as RpcTransport<typeof XyoSignerRpcSchemas>)\n const viewer = new JsonRpcXyoViewer(legacyPostMessageRpcTransport as RpcTransport<typeof XyoViewerRpcSchemas>)\n const runner = new JsonRpcXyoRunner(legacyPostMessageRpcTransport as RpcTransport<typeof XyoRunnerRpcSchemas>)\n const connection = new XyoBaseConnection({ viewer, runner })\n return new MemoryXyoGateway(signer, connection)\n }\n}\n\n/**\n * Retrieves a gateway from the wallet based on the provided networkId.\n * Includes fallback logic to build a gateway from the connection if it does not exist in\n * the global xyo object.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.\n */\nexport const resolveGateway = (networkId: GatewayName) => {\n const networkGateway = gateways()?.[networkId]\n if (isDefined(networkGateway)) {\n return networkGateway\n }\n const builtGateway = buildGatewayFromConnection(networkId)\n if (isDefined(builtGateway)) {\n return builtGateway\n }\n // If no gateway is found, log a warning\n console.warn(`No gateway found for networkId: ${networkId}`)\n}\n"],"mappings":"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","names":["CLIENT_LISTENER_TIMEOUT","hasXyoClient","globalThis","xyo","listenForClientInjection","onClientReady","onTimeout","resolved","listener","addEventListener","setTimeout","getXyoClient","client","Promise","resolve","reject","Error","isUndefined","isUndefinedOrNull","ShiftedBigInt","useEffect","useMemo","useState","useAddressBalance","address","viewer","refresh","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","setBalancesError","useEffect","isCurrent","isUndefined","accountBalance","then","result","catch","err","console","error","undefined","useMemo","shiftedBigInt","ShiftedBigInt","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","balanceIntlFriendly","toFullString","shortBalanceIntlFriendly","isUndefinedOrNull","toShortString","balanceForAddress","useSyncExternalStore","currentState","client","undefined","error","isLoading","listeners","Set","emitChange","listener","updateState","newState","initializeClient","getXyoClient","subscribe","add","delete","getSnapshot","useClient","useSyncExternalStore","isUndefined","MainNetwork","useCallback","useState","useGateway","gatewayName","client","isLoading","error","useClient","gateway","gateways","undefined","useConnectAccount","gatewayName","MainNetwork","id","gateway","error","useGateway","address","setAddress","useState","connectSigner","useCallback","isUndefined","Error","signer","usePromise","useCurrentBlock","refresh","viewer","usePromise","block","currentBlock","isUndefined","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoRunner","useMemo","useHttpRpcRunner","url","useMemo","isUndefined","transport","HttpRpcTransport","AllRpcSchemas","JsonRpcXyoRunner","isUndefined","MemoryXyoNetwork","useMemo","useNetwork","id","network","useMemo","isUndefined","MemoryXyoNetwork","MemoryXyoSigner","useMemo","useSigner","_provider","account","useMemo","MemoryXyoSigner","undefined","delay","isDefined","isUndefined","LocalNetwork","SequenceNetwork","HttpRpcTransport","JsonRpcXyoViewer","XyoViewerRpcSchemas","useEffect","useMemo","useState","INTERVAL","localRpcEndpoint","LocalNetwork","url","sequenceRpcEndpoint","SequenceNetwork","useCheckLocalRpc","isLocalProducer","useCheckRpc","useCheckSequenceRpc","endpoint","setIsLocalProducer","useState","error","setError","viewer","useMemo","isUndefined","transport","HttpRpcTransport","XyoViewerRpcSchemas","JsonRpcXyoViewer","useEffect","undefined","block","currentBlock","isDefined","err","delay","isUndefined","HttpRpcTransport","JsonRpcXyoViewer","XyoViewerRpcSchemas","useMemo","useHttpRpcViewer","url","resolvedViewer","useMemo","isUndefined","transport","HttpRpcTransport","XyoViewerRpcSchemas","JsonRpcXyoViewer","usePromise","isDefined","isTruthy","isUndefined","useEffect","useMemo","isDefined","JsonRpcXyoRunner","JsonRpcXyoViewer","LegacyPostMessageRpcTransport","MemoryXyoGateway","RpcXyoSigner","XyoBaseConnection","gateways","globalThis","xyo","client","buildGatewayFromConnection","networkId","connections","isDefined","legacyPostMessageRpcTransport","LegacyPostMessageRpcTransport","walletExtensionId","signer","RpcXyoSigner","viewer","JsonRpcXyoViewer","runner","JsonRpcXyoRunner","connection","XyoBaseConnection","MemoryXyoGateway","resolveGateway","networkGateway","builtGateway","console","warn","useViewerFromWallet","networkId","networkGateway","useMemo","isDefined","resolveGateway","gatewayViewer","rpcError","usePromise","isUndefined","connection","viewer","useEffect","isTruthy","console","error"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@xyo-network/react-chain-provider",
|
|
4
|
-
"version": "1.15.
|
|
4
|
+
"version": "1.15.2",
|
|
5
5
|
"description": "XYO Layer One API",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -43,27 +43,28 @@
|
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@xylabs/delay": "~5.0.11",
|
|
45
45
|
"@xylabs/hex": "~5.0.11",
|
|
46
|
-
"@xylabs/react-promise": "~7.
|
|
46
|
+
"@xylabs/react-promise": "~7.1.1",
|
|
47
47
|
"@xylabs/typeof": "~5.0.11",
|
|
48
|
-
"@xyo-network/account-model": "~5.1.
|
|
49
|
-
"@xyo-network/chain-network-model": "~1.15.
|
|
50
|
-
"@xyo-network/xl1-protocol": "~1.12.
|
|
51
|
-
"@xyo-network/xl1-rpc": "~1.15.
|
|
52
|
-
"@xyo-network/xl1-wrappers": "~1.15.
|
|
48
|
+
"@xyo-network/account-model": "~5.1.3",
|
|
49
|
+
"@xyo-network/chain-network-model": "~1.15.2",
|
|
50
|
+
"@xyo-network/xl1-protocol": "~1.12.40",
|
|
51
|
+
"@xyo-network/xl1-rpc": "~1.15.2",
|
|
52
|
+
"@xyo-network/xl1-wrappers": "~1.15.2",
|
|
53
53
|
"react": "~19.1.1"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@emotion/react": "~11.14.0",
|
|
57
57
|
"@emotion/styled": "~11.14.1",
|
|
58
58
|
"@mui/material": "~7.3.2",
|
|
59
|
-
"@storybook/react-vite": "~9.1.
|
|
60
|
-
"@types/react": "~19.1.
|
|
59
|
+
"@storybook/react-vite": "~9.1.8",
|
|
60
|
+
"@types/react": "~19.1.15",
|
|
61
61
|
"@xylabs/ts-scripts-yarn3": "~7.1.7",
|
|
62
62
|
"@xylabs/tsconfig": "~7.1.7",
|
|
63
63
|
"@xylabs/tsconfig-dom": "~7.1.7",
|
|
64
64
|
"@xylabs/tsconfig-react": "~7.1.7",
|
|
65
|
-
"@xyo-network/react-chain-model": "~1.15.
|
|
66
|
-
"
|
|
65
|
+
"@xyo-network/react-chain-model": "~1.15.2",
|
|
66
|
+
"@xyo-network/react-error": "~7.3.2",
|
|
67
|
+
"eslint": "^9.36.0",
|
|
67
68
|
"typescript": "~5.9.2"
|
|
68
69
|
},
|
|
69
70
|
"packageManager": "yarn@4.6.0",
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ButtonProps } from '@mui/material'
|
|
2
|
+
import {
|
|
3
|
+
Button, Chip, Stack,
|
|
4
|
+
} from '@mui/material'
|
|
5
|
+
import type { Meta, StoryFn } from '@storybook/react-vite'
|
|
6
|
+
import { isDefined } from '@xylabs/typeof'
|
|
7
|
+
import { ErrorRender } from '@xyo-network/react-error'
|
|
8
|
+
import React from 'react'
|
|
9
|
+
|
|
10
|
+
import { useConnectAccount } from './useConnectAccount.ts'
|
|
11
|
+
|
|
12
|
+
const ConnectComponent: React.FC<ButtonProps> = (props) => {
|
|
13
|
+
const {
|
|
14
|
+
address, connectSigner, error,
|
|
15
|
+
} = useConnectAccount()
|
|
16
|
+
return (
|
|
17
|
+
<Stack direction="row" spacing={2}>
|
|
18
|
+
<Button onClick={() => void connectSigner()} variant="contained" {...props}>Connect</Button>
|
|
19
|
+
{isDefined(address) && <Chip label={address} />}
|
|
20
|
+
<ErrorRender error={error} scope="ConnectSigner:error" />
|
|
21
|
+
</Stack>
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default {
|
|
26
|
+
title: 'Provider/Hooks/useConnectAccount',
|
|
27
|
+
component: ConnectComponent,
|
|
28
|
+
} as Meta
|
|
29
|
+
|
|
30
|
+
const Template: StoryFn<typeof ConnectComponent> = args => <ConnectComponent {...args} />
|
|
31
|
+
|
|
32
|
+
const Default = Template.bind({})
|
|
33
|
+
Default.args = {}
|
|
34
|
+
|
|
35
|
+
export { Default }
|
package/src/hooks/index.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Address } from '@xylabs/hex'
|
|
2
2
|
import { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'
|
|
3
3
|
import type { AttoXL1, XyoViewer } from '@xyo-network/xl1-protocol'
|
|
4
|
-
import { ShiftedBigInt } from '@xyo-network/xl1-
|
|
4
|
+
import { ShiftedBigInt } from '@xyo-network/xl1-protocol'
|
|
5
5
|
import {
|
|
6
6
|
useEffect, useMemo, useState,
|
|
7
7
|
} from 'react'
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { isUndefined } from '@xylabs/typeof'
|
|
2
|
+
import { MainNetwork } from '@xyo-network/chain-network-model'
|
|
3
|
+
import type { GatewayName } from '@xyo-network/xl1-protocol'
|
|
4
|
+
import { useCallback, useState } from 'react'
|
|
5
|
+
|
|
6
|
+
import { useGateway } from './useGateway.ts'
|
|
7
|
+
|
|
8
|
+
export const useConnectAccount = (gatewayName: GatewayName = MainNetwork.id) => {
|
|
9
|
+
const { gateway, error } = useGateway(gatewayName)
|
|
10
|
+
|
|
11
|
+
// Store the address in state for convenience
|
|
12
|
+
const [address, setAddress] = useState<string>()
|
|
13
|
+
|
|
14
|
+
const connectSigner = useCallback(async () => {
|
|
15
|
+
if (isUndefined(gateway)) {
|
|
16
|
+
throw new Error(`Gateway ${gatewayName} is not available`)
|
|
17
|
+
}
|
|
18
|
+
const signer = await gateway.signer()
|
|
19
|
+
const address = await signer.address()
|
|
20
|
+
setAddress(address)
|
|
21
|
+
return address
|
|
22
|
+
}, [gateway, gatewayName])
|
|
23
|
+
|
|
24
|
+
return {
|
|
25
|
+
address, connectSigner, error,
|
|
26
|
+
}
|
|
27
|
+
}
|