@xyo-network/react-chain-provider 1.8.3 → 1.8.4

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.
@@ -1,13 +1,8 @@
1
- import { JsonRpcXyoViewer } from '@xyo-network/xl1-rpc';
2
1
  /**
3
2
  * Creates a JsonRpcXyoViewer instance based on the provided networkId.
4
3
  * @param networkId - a network id like 'sequence', 'local', etc.
5
- * @returns An instance of JsonRpcXyoViewer if the networkId is found in walletConnections,
4
+ * @returns An instance of XyoViewer if the networkId is found in wallet gateways
6
5
  * otherwise undefined.
7
6
  */
8
- export declare const useViewerFromWallet: (networkId?: string) => JsonRpcXyoViewer | undefined;
9
- /**
10
- * TODO - Decide on PostMessageRpcTransport vs PostMessageBus
11
- * Potentially hide the PostMessageBus instead the PostMessageRpcTransport
12
- */
7
+ export declare const useViewerFromWallet: (networkId?: string) => import("@xyo-network/xl1-protocol").XyoViewer | undefined;
13
8
  //# sourceMappingURL=useViewerFromWallet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useViewerFromWallet.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/useViewerFromWallet.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAEjB,MAAM,sBAAsB,CAAA;AAO7B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,YAAY,MAAM,iCAcrD,CAAA;AAED;;;GAGG"}
1
+ {"version":3,"file":"useViewerFromWallet.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/useViewerFromWallet.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,YAAY,MAAM,8DAoBrD,CAAA"}
@@ -183,26 +183,33 @@ var useHttpRpcViewer = /* @__PURE__ */ __name((url) => {
183
183
  }, "useHttpRpcViewer");
184
184
 
185
185
  // src/hooks/viewer/useViewerFromWallet.ts
186
+ import { usePromise as usePromise3 } from "@xylabs/react-promise";
186
187
  import { isDefined as isDefined2, isTruthy, isUndefined as isUndefined6 } from "@xylabs/typeof";
187
- import { JsonRpcXyoViewer as JsonRpcXyoViewer3, PostMessageRpcTransport } from "@xyo-network/xl1-rpc";
188
- import { useMemo as useMemo7 } from "react";
189
- var walletConnections = /* @__PURE__ */ __name(() => globalThis.xyo?.connections, "walletConnections");
188
+ import { useEffect as useEffect2, useMemo as useMemo7 } from "react";
189
+ var gateways = /* @__PURE__ */ __name(() => globalThis.xyo?.client?.gateways, "gateways");
190
190
  var useViewerFromWallet = /* @__PURE__ */ __name((networkId) => {
191
- const networkConnection = useMemo7(() => {
192
- if (isTruthy(networkId) && isDefined2(walletConnections()) && isDefined2(walletConnections()?.[networkId])) {
193
- return networkId;
191
+ const networkGateway = useMemo7(() => {
192
+ if (isDefined2(networkId) && isDefined2(gateways()?.[networkId])) {
193
+ return gateways()?.[networkId];
194
194
  }
195
195
  }, [
196
196
  networkId
197
197
  ]);
198
- const rpcProvider = useMemo7(() => {
199
- if (isUndefined6(networkConnection)) return;
200
- const transport = new PostMessageRpcTransport(networkConnection);
201
- return new JsonRpcXyoViewer3(transport);
198
+ const [gatewayViewer, rpcError] = usePromise3(async () => {
199
+ if (isUndefined6(networkGateway)) return;
200
+ const connection = await networkGateway.connection();
201
+ return connection.viewer;
202
202
  }, [
203
- networkConnection
203
+ networkGateway
204
204
  ]);
205
- return rpcProvider;
205
+ useEffect2(() => {
206
+ if (isTruthy(rpcError)) {
207
+ console.error("Error creating viewer from wallet:", rpcError);
208
+ }
209
+ }, [
210
+ rpcError
211
+ ]);
212
+ return gatewayViewer;
206
213
  }, "useViewerFromWallet");
207
214
  export {
208
215
  useAddressBalance,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useAddressBalance.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"],"sourcesContent":["import type { Address } from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'\nimport { ShiftedBigInt } from '@xyo-network/chain-wrappers'\nimport type { AttoXL1, XyoViewer } from '@xyo-network/xl1-protocol'\nimport { useMemo, useState } 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\n const [, balancesError] = usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n setLoading(true)\n setBalancesResult(undefined)\n const balance = await viewer.accountBalance(address)\n setBalancesResult(balance as AttoXL1)\n setLoading(false)\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 { 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 {\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)\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 { XyoConnectionProvider, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoConnectionProvider, 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 {\n isDefined, isTruthy, isUndefined,\n} from '@xylabs/typeof'\nimport {\n JsonRpcXyoViewer,\n PostMessageRpcTransport,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\n// NOTE: Eventually this value will come from a context or similar, but for now we are using a global\n// Get known wallet connections from the global Xyo object\nconst walletConnections = () => globalThis.xyo?.connections\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 JsonRpcXyoViewer if the networkId is found in walletConnections,\n * otherwise undefined.\n */\nexport const useViewerFromWallet = (networkId?: string) => {\n const networkConnection = useMemo(() => {\n if (isTruthy(networkId) && isDefined(walletConnections()) && isDefined(walletConnections()?.[networkId])) {\n return networkId\n }\n }, [networkId])\n\n const rpcProvider = useMemo(() => {\n if (isUndefined(networkConnection)) return\n const transport = new PostMessageRpcTransport(networkConnection)\n return new JsonRpcXyoViewer(transport)\n }, [networkConnection])\n\n return rpcProvider\n}\n\n/**\n * TODO - Decide on PostMessageRpcTransport vs PostMessageBus\n * Potentially hide the PostMessageBus instead the PostMessageRpcTransport\n */\n"],"mappings":"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","names":["usePromise","isUndefined","isUndefinedOrNull","ShiftedBigInt","useMemo","useState","useAddressBalance","address","viewer","refresh","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","usePromise","isUndefined","undefined","balance","accountBalance","useMemo","shiftedBigInt","ShiftedBigInt","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","balanceIntlFriendly","toFullString","shortBalanceIntlFriendly","isUndefinedOrNull","toShortString","balanceForAddress","error","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","isDefined","isTruthy","isUndefined","JsonRpcXyoViewer","PostMessageRpcTransport","useMemo","walletConnections","globalThis","xyo","connections","useViewerFromWallet","networkId","networkConnection","useMemo","isTruthy","isDefined","rpcProvider","isUndefined","transport","PostMessageRpcTransport","JsonRpcXyoViewer"]}
1
+ {"version":3,"sources":["../../src/hooks/useAddressBalance.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"],"sourcesContent":["import type { Address } from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'\nimport { ShiftedBigInt } from '@xyo-network/chain-wrappers'\nimport type { AttoXL1, XyoViewer } from '@xyo-network/xl1-protocol'\nimport { useMemo, useState } 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\n const [, balancesError] = usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n setLoading(true)\n setBalancesResult(undefined)\n const balance = await viewer.accountBalance(address)\n setBalancesResult(balance as AttoXL1)\n setLoading(false)\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 { 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 {\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)\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 { XyoConnectionProvider, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoConnectionProvider, 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 { useEffect, useMemo } from 'react'\n\nconst gateways = () => globalThis.xyo?.client?.gateways\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?: string) => {\n const networkGateway = useMemo(() => {\n if (isDefined(networkId) && isDefined(gateways()?.[networkId])) {\n return gateways()?.[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"],"mappings":"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","names":["usePromise","isUndefined","isUndefinedOrNull","ShiftedBigInt","useMemo","useState","useAddressBalance","address","viewer","refresh","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","usePromise","isUndefined","undefined","balance","accountBalance","useMemo","shiftedBigInt","ShiftedBigInt","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","balanceIntlFriendly","toFullString","shortBalanceIntlFriendly","isUndefinedOrNull","toShortString","balanceForAddress","error","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","gateways","globalThis","xyo","client","useViewerFromWallet","networkId","networkGateway","useMemo","isDefined","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.8.3",
4
+ "version": "1.8.4",
5
5
  "description": "XYO Layer One API",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -41,15 +41,15 @@
41
41
  "src"
42
42
  ],
43
43
  "dependencies": {
44
- "@xylabs/delay": "^4.15.0",
45
- "@xylabs/hex": "^4.15.0",
44
+ "@xylabs/delay": "^4.15.3",
45
+ "@xylabs/hex": "^4.15.3",
46
46
  "@xylabs/react-promise": "^6.4.0",
47
- "@xylabs/typeof": "^4.15.0",
47
+ "@xylabs/typeof": "^4.15.3",
48
48
  "@xyo-network/account-model": "^4.3.0",
49
- "@xyo-network/chain-network-model": "^1.8.3",
50
- "@xyo-network/chain-wrappers": "^1.8.3",
49
+ "@xyo-network/chain-network-model": "^1.8.4",
50
+ "@xyo-network/chain-wrappers": "^1.8.4",
51
51
  "@xyo-network/xl1-protocol": "^1.7.33",
52
- "@xyo-network/xl1-rpc": "^1.8.3",
52
+ "@xyo-network/xl1-rpc": "^1.8.4",
53
53
  "react": "^19.1.1"
54
54
  },
55
55
  "devDependencies": {
@@ -57,11 +57,11 @@
57
57
  "@emotion/styled": "^11.14.1",
58
58
  "@mui/material": "^7.2.0",
59
59
  "@storybook/react-vite": "^9.0.18",
60
- "@types/react": "^19.1.8",
61
- "@xylabs/ts-scripts-yarn3": "^7.0.1",
62
- "@xylabs/tsconfig-react": "^7.0.1",
63
- "@xyo-network/chain-network-model": "^1.8.3",
64
- "@xyo-network/react-chain-model": "^1.8.3",
60
+ "@types/react": "^19.1.9",
61
+ "@xylabs/ts-scripts-yarn3": "^7.0.2",
62
+ "@xylabs/tsconfig-react": "^7.0.2",
63
+ "@xyo-network/chain-network-model": "^1.8.4",
64
+ "@xyo-network/react-chain-model": "^1.8.4",
65
65
  "knip": "^5.62.0",
66
66
  "typescript": "^5.8.3"
67
67
  },
@@ -1,39 +1,35 @@
1
+ import { usePromise } from '@xylabs/react-promise'
1
2
  import {
2
3
  isDefined, isTruthy, isUndefined,
3
4
  } from '@xylabs/typeof'
4
- import {
5
- JsonRpcXyoViewer,
6
- PostMessageRpcTransport,
7
- } from '@xyo-network/xl1-rpc'
8
- import { useMemo } from 'react'
5
+ import { useEffect, useMemo } from 'react'
9
6
 
10
- // NOTE: Eventually this value will come from a context or similar, but for now we are using a global
11
- // Get known wallet connections from the global Xyo object
12
- const walletConnections = () => globalThis.xyo?.connections
7
+ const gateways = () => globalThis.xyo?.client?.gateways
13
8
 
14
9
  /**
15
10
  * Creates a JsonRpcXyoViewer instance based on the provided networkId.
16
11
  * @param networkId - a network id like 'sequence', 'local', etc.
17
- * @returns An instance of JsonRpcXyoViewer if the networkId is found in walletConnections,
12
+ * @returns An instance of XyoViewer if the networkId is found in wallet gateways
18
13
  * otherwise undefined.
19
14
  */
20
15
  export const useViewerFromWallet = (networkId?: string) => {
21
- const networkConnection = useMemo(() => {
22
- if (isTruthy(networkId) && isDefined(walletConnections()) && isDefined(walletConnections()?.[networkId])) {
23
- return networkId
16
+ const networkGateway = useMemo(() => {
17
+ if (isDefined(networkId) && isDefined(gateways()?.[networkId])) {
18
+ return gateways()?.[networkId]
24
19
  }
25
20
  }, [networkId])
26
21
 
27
- const rpcProvider = useMemo(() => {
28
- if (isUndefined(networkConnection)) return
29
- const transport = new PostMessageRpcTransport(networkConnection)
30
- return new JsonRpcXyoViewer(transport)
31
- }, [networkConnection])
22
+ const [gatewayViewer, rpcError] = usePromise(async () => {
23
+ if (isUndefined(networkGateway)) return
24
+ const connection = await networkGateway.connection()
25
+ return connection.viewer
26
+ }, [networkGateway])
32
27
 
33
- return rpcProvider
34
- }
28
+ useEffect(() => {
29
+ if (isTruthy(rpcError)) {
30
+ console.error('Error creating viewer from wallet:', rpcError)
31
+ }
32
+ }, [rpcError])
35
33
 
36
- /**
37
- * TODO - Decide on PostMessageRpcTransport vs PostMessageBus
38
- * Potentially hide the PostMessageBus instead the PostMessageRpcTransport
39
- */
34
+ return gatewayViewer
35
+ }