@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.
@@ -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"}
@@ -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-wrappers";
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 isUndefined2 } from "@xylabs/typeof";
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 (isUndefined2(url)) {
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 isUndefined3 } from "@xylabs/typeof";
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 (isUndefined3(id)) return;
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 isUndefined4 } from "@xylabs/typeof";
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 useState2 } from "react";
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] = useState2(false);
236
- const [error, setError] = useState2();
263
+ const [isLocalProducer, setIsLocalProducer] = useState3(false);
264
+ const [error, setError] = useState3();
237
265
  const viewer = useMemo5(() => {
238
- if (isUndefined4(endpoint)) return;
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 (isUndefined4(viewer)) return;
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 isUndefined5 } from "@xylabs/typeof";
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 (isUndefined5(url)) {
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 isUndefined6 } from "@xylabs/typeof";
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 (isUndefined6(networkGateway)) return;
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.0",
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.0.4",
46
+ "@xylabs/react-promise": "~7.1.1",
47
47
  "@xylabs/typeof": "~5.0.11",
48
- "@xyo-network/account-model": "~5.1.2",
49
- "@xyo-network/chain-network-model": "~1.15.0",
50
- "@xyo-network/xl1-protocol": "~1.12.32",
51
- "@xyo-network/xl1-rpc": "~1.15.0",
52
- "@xyo-network/xl1-wrappers": "~1.15.0",
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.5",
60
- "@types/react": "~19.1.13",
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.0",
66
- "eslint": "^9.35.0",
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 }
@@ -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,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-wrappers'
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
+ }