@xyo-network/react-chain-provider 1.7.11 → 1.7.13
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/README.md +1 -1
- package/dist/browser/hooks/viewer/index.d.ts +1 -0
- package/dist/browser/hooks/viewer/index.d.ts.map +1 -1
- package/dist/browser/hooks/viewer/useCheckRpc.d.ts +13 -0
- package/dist/browser/hooks/viewer/useCheckRpc.d.ts.map +1 -0
- package/dist/browser/hooks/viewer/useHttpRpcViewer.d.ts.map +1 -1
- package/dist/browser/index.mjs +70 -15
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +14 -12
- package/src/hooks/viewer/index.ts +1 -0
- package/src/hooks/viewer/useCheckRpc.ts +57 -0
- package/src/hooks/viewer/useHttpRpcViewer.ts +2 -2
package/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const useCheckLocalRpc: () => {
|
|
2
|
+
isLocalProducer: boolean;
|
|
3
|
+
error: Error | undefined;
|
|
4
|
+
};
|
|
5
|
+
export declare const useCheckSequenceRpc: () => {
|
|
6
|
+
isLocalProducer: boolean;
|
|
7
|
+
error: Error | undefined;
|
|
8
|
+
};
|
|
9
|
+
export declare const useCheckRpc: (endpoint?: string) => {
|
|
10
|
+
isLocalProducer: boolean;
|
|
11
|
+
error: Error | undefined;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=useCheckRpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCheckRpc.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/useCheckRpc.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,gBAAgB;;;CAG5B,CAAA;AAED,eAAO,MAAM,mBAAmB;;;CAG/B,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM;;;CA+B5C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHttpRpcViewer.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/useHttpRpcViewer.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"useHttpRpcViewer.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/useHttpRpcViewer.ts"],"names":[],"mappings":"AACA,OAAO,EACa,gBAAgB,EACnC,MAAM,sBAAsB,CAAA;AAG7B,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,iCAU5C,CAAA"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -113,17 +113,69 @@ var useSigner = /* @__PURE__ */ __name((_provider, account) => {
|
|
|
113
113
|
]);
|
|
114
114
|
}, "useSigner");
|
|
115
115
|
|
|
116
|
+
// src/hooks/viewer/useCheckRpc.ts
|
|
117
|
+
import { delay } from "@xylabs/delay";
|
|
118
|
+
import { isDefined, isUndefined as isUndefined4 } from "@xylabs/typeof";
|
|
119
|
+
import { LocalNetwork, SequenceNetwork } from "@xyo-network/chain-network-model";
|
|
120
|
+
import { HttpRpcTransport as HttpRpcTransport2, JsonRpcXyoViewer, XyoViewerRpcSchemas } from "@xyo-network/xl1-rpc";
|
|
121
|
+
import { useEffect, useMemo as useMemo5, useState as useState2 } from "react";
|
|
122
|
+
var INTERVAL = 5e3;
|
|
123
|
+
var localRpcEndpoint = `${LocalNetwork.url}/rpc`;
|
|
124
|
+
var sequenceRpcEndpoint = `${SequenceNetwork.url}/rpc`;
|
|
125
|
+
var useCheckLocalRpc = /* @__PURE__ */ __name(() => {
|
|
126
|
+
const isLocalProducer = useCheckRpc(localRpcEndpoint);
|
|
127
|
+
return isLocalProducer;
|
|
128
|
+
}, "useCheckLocalRpc");
|
|
129
|
+
var useCheckSequenceRpc = /* @__PURE__ */ __name(() => {
|
|
130
|
+
const isLocalProducer = useCheckRpc(sequenceRpcEndpoint);
|
|
131
|
+
return isLocalProducer;
|
|
132
|
+
}, "useCheckSequenceRpc");
|
|
133
|
+
var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
|
|
134
|
+
const [isLocalProducer, setIsLocalProducer] = useState2(false);
|
|
135
|
+
const [error, setError] = useState2();
|
|
136
|
+
const viewer = useMemo5(() => {
|
|
137
|
+
if (isUndefined4(endpoint)) return;
|
|
138
|
+
const transport = new HttpRpcTransport2(endpoint, XyoViewerRpcSchemas);
|
|
139
|
+
const viewer2 = new JsonRpcXyoViewer(transport);
|
|
140
|
+
return viewer2;
|
|
141
|
+
}, [
|
|
142
|
+
endpoint
|
|
143
|
+
]);
|
|
144
|
+
useEffect(() => {
|
|
145
|
+
if (isUndefined4(viewer)) return;
|
|
146
|
+
void (async () => {
|
|
147
|
+
setError(void 0);
|
|
148
|
+
while (!isLocalProducer) {
|
|
149
|
+
try {
|
|
150
|
+
const block = await viewer.currentBlock();
|
|
151
|
+
setIsLocalProducer(isDefined(block));
|
|
152
|
+
} catch (err) {
|
|
153
|
+
setError(err);
|
|
154
|
+
setIsLocalProducer(false);
|
|
155
|
+
}
|
|
156
|
+
await delay(INTERVAL);
|
|
157
|
+
}
|
|
158
|
+
})();
|
|
159
|
+
}, [
|
|
160
|
+
viewer
|
|
161
|
+
]);
|
|
162
|
+
return {
|
|
163
|
+
isLocalProducer,
|
|
164
|
+
error
|
|
165
|
+
};
|
|
166
|
+
}, "useCheckRpc");
|
|
167
|
+
|
|
116
168
|
// src/hooks/viewer/useHttpRpcViewer.ts
|
|
117
|
-
import { isUndefined as
|
|
118
|
-
import {
|
|
119
|
-
import { useMemo as
|
|
169
|
+
import { isUndefined as isUndefined5 } from "@xylabs/typeof";
|
|
170
|
+
import { HttpRpcTransport as HttpRpcTransport3, JsonRpcXyoViewer as JsonRpcXyoViewer2, XyoViewerRpcSchemas as XyoViewerRpcSchemas2 } from "@xyo-network/xl1-rpc";
|
|
171
|
+
import { useMemo as useMemo6 } from "react";
|
|
120
172
|
var useHttpRpcViewer = /* @__PURE__ */ __name((url) => {
|
|
121
|
-
const resolvedViewer =
|
|
122
|
-
if (
|
|
173
|
+
const resolvedViewer = useMemo6(() => {
|
|
174
|
+
if (isUndefined5(url)) {
|
|
123
175
|
return;
|
|
124
176
|
}
|
|
125
|
-
const transport = new
|
|
126
|
-
return new
|
|
177
|
+
const transport = new HttpRpcTransport3(`${url}/rpc`, XyoViewerRpcSchemas2);
|
|
178
|
+
return new JsonRpcXyoViewer2(transport);
|
|
127
179
|
}, [
|
|
128
180
|
url
|
|
129
181
|
]);
|
|
@@ -131,22 +183,22 @@ var useHttpRpcViewer = /* @__PURE__ */ __name((url) => {
|
|
|
131
183
|
}, "useHttpRpcViewer");
|
|
132
184
|
|
|
133
185
|
// src/hooks/viewer/useViewerFromWallet.ts
|
|
134
|
-
import { isDefined, isTruthy, isUndefined as
|
|
135
|
-
import { JsonRpcXyoViewer as
|
|
136
|
-
import { useMemo as
|
|
186
|
+
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";
|
|
137
189
|
var walletConnections = /* @__PURE__ */ __name(() => globalThis.xyo?.connections, "walletConnections");
|
|
138
190
|
var useViewerFromWallet = /* @__PURE__ */ __name((networkId) => {
|
|
139
|
-
const networkConnection =
|
|
140
|
-
if (isTruthy(networkId) &&
|
|
191
|
+
const networkConnection = useMemo7(() => {
|
|
192
|
+
if (isTruthy(networkId) && isDefined2(walletConnections()) && isDefined2(walletConnections()?.[networkId])) {
|
|
141
193
|
return networkId;
|
|
142
194
|
}
|
|
143
195
|
}, [
|
|
144
196
|
networkId
|
|
145
197
|
]);
|
|
146
|
-
const rpcProvider =
|
|
147
|
-
if (
|
|
198
|
+
const rpcProvider = useMemo7(() => {
|
|
199
|
+
if (isUndefined6(networkConnection)) return;
|
|
148
200
|
const transport = new PostMessageRpcTransport(networkConnection);
|
|
149
|
-
return new
|
|
201
|
+
return new JsonRpcXyoViewer3(transport);
|
|
150
202
|
}, [
|
|
151
203
|
networkConnection
|
|
152
204
|
]);
|
|
@@ -154,6 +206,9 @@ var useViewerFromWallet = /* @__PURE__ */ __name((networkId) => {
|
|
|
154
206
|
}, "useViewerFromWallet");
|
|
155
207
|
export {
|
|
156
208
|
useAddressBalance,
|
|
209
|
+
useCheckLocalRpc,
|
|
210
|
+
useCheckRpc,
|
|
211
|
+
useCheckSequenceRpc,
|
|
157
212
|
useCurrentBlock,
|
|
158
213
|
useHttpRpcRunner,
|
|
159
214
|
useHttpRpcViewer,
|
|
@@ -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/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 { isUndefined } from '@xylabs/typeof'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoViewer,\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`, AllRpcSchemas)\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"],"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","isUndefined","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoViewer","useMemo","useHttpRpcViewer","url","resolvedViewer","useMemo","isUndefined","transport","HttpRpcTransport","AllRpcSchemas","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 {\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"],"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"]}
|
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.7.
|
|
4
|
+
"version": "1.7.13",
|
|
5
5
|
"description": "XYO Layer One API",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -41,25 +41,27 @@
|
|
|
41
41
|
"src"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@xylabs/
|
|
44
|
+
"@xylabs/delay": "^4.13.23",
|
|
45
|
+
"@xylabs/hex": "^4.13.23",
|
|
45
46
|
"@xylabs/react-promise": "^6.3.13",
|
|
46
|
-
"@xylabs/typeof": "^4.13.
|
|
47
|
-
"@xyo-network/account-model": "^4.1.
|
|
48
|
-
"@xyo-network/chain-
|
|
49
|
-
"@xyo-network/
|
|
50
|
-
"@xyo-network/xl1-
|
|
47
|
+
"@xylabs/typeof": "^4.13.23",
|
|
48
|
+
"@xyo-network/account-model": "^4.1.7",
|
|
49
|
+
"@xyo-network/chain-network-model": "^1.7.13",
|
|
50
|
+
"@xyo-network/chain-wrappers": "^1.7.13",
|
|
51
|
+
"@xyo-network/xl1-protocol": "^1.7.19",
|
|
52
|
+
"@xyo-network/xl1-rpc": "^1.7.13",
|
|
51
53
|
"react": "^19.1.0"
|
|
52
54
|
},
|
|
53
55
|
"devDependencies": {
|
|
54
56
|
"@emotion/react": "^11.14.0",
|
|
55
57
|
"@emotion/styled": "^11.14.1",
|
|
56
58
|
"@mui/material": "^7.2.0",
|
|
57
|
-
"@storybook/react-vite": "^9.0.
|
|
59
|
+
"@storybook/react-vite": "^9.0.18",
|
|
58
60
|
"@types/react": "^19.1.8",
|
|
59
|
-
"@xylabs/ts-scripts-yarn3": "^7.0.
|
|
60
|
-
"@xylabs/tsconfig-react": "^7.0.
|
|
61
|
-
"@xyo-network/chain-network-model": "^1.7.
|
|
62
|
-
"@xyo-network/react-chain-model": "^1.7.
|
|
61
|
+
"@xylabs/ts-scripts-yarn3": "^7.0.1",
|
|
62
|
+
"@xylabs/tsconfig-react": "^7.0.1",
|
|
63
|
+
"@xyo-network/chain-network-model": "^1.7.13",
|
|
64
|
+
"@xyo-network/react-chain-model": "^1.7.13",
|
|
63
65
|
"knip": "^5.62.0",
|
|
64
66
|
"typescript": "^5.8.3"
|
|
65
67
|
},
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { delay } from '@xylabs/delay'
|
|
2
|
+
import { isDefined, isUndefined } from '@xylabs/typeof'
|
|
3
|
+
import { LocalNetwork, SequenceNetwork } from '@xyo-network/chain-network-model'
|
|
4
|
+
import {
|
|
5
|
+
HttpRpcTransport, JsonRpcXyoViewer, XyoViewerRpcSchemas,
|
|
6
|
+
} from '@xyo-network/xl1-rpc'
|
|
7
|
+
import {
|
|
8
|
+
useEffect, useMemo, useState,
|
|
9
|
+
} from 'react'
|
|
10
|
+
|
|
11
|
+
const INTERVAL = 5000 // 5 seconds
|
|
12
|
+
|
|
13
|
+
const localRpcEndpoint: string = `${LocalNetwork.url}/rpc`
|
|
14
|
+
const sequenceRpcEndpoint: string = `${SequenceNetwork.url}/rpc`
|
|
15
|
+
|
|
16
|
+
export const useCheckLocalRpc = () => {
|
|
17
|
+
const isLocalProducer = useCheckRpc(localRpcEndpoint)
|
|
18
|
+
return isLocalProducer
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const useCheckSequenceRpc = () => {
|
|
22
|
+
const isLocalProducer = useCheckRpc(sequenceRpcEndpoint)
|
|
23
|
+
return isLocalProducer
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const useCheckRpc = (endpoint?: string) => {
|
|
27
|
+
const [isLocalProducer, setIsLocalProducer] = useState(false)
|
|
28
|
+
const [error, setError] = useState<Error>()
|
|
29
|
+
|
|
30
|
+
const viewer = useMemo(() => {
|
|
31
|
+
if (isUndefined(endpoint)) return
|
|
32
|
+
|
|
33
|
+
const transport = new HttpRpcTransport(endpoint, XyoViewerRpcSchemas)
|
|
34
|
+
const viewer = new JsonRpcXyoViewer(transport)
|
|
35
|
+
return viewer
|
|
36
|
+
}, [endpoint])
|
|
37
|
+
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
if (isUndefined(viewer)) return
|
|
40
|
+
|
|
41
|
+
void (async () => {
|
|
42
|
+
setError(undefined)
|
|
43
|
+
while (!isLocalProducer) {
|
|
44
|
+
try {
|
|
45
|
+
const block = await viewer.currentBlock()
|
|
46
|
+
setIsLocalProducer(isDefined(block))
|
|
47
|
+
} catch (err) {
|
|
48
|
+
setError(err as Error)
|
|
49
|
+
setIsLocalProducer(false)
|
|
50
|
+
}
|
|
51
|
+
await delay(INTERVAL)
|
|
52
|
+
}
|
|
53
|
+
})()
|
|
54
|
+
}, [viewer])
|
|
55
|
+
|
|
56
|
+
return { isLocalProducer, error }
|
|
57
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isUndefined } from '@xylabs/typeof'
|
|
2
2
|
import {
|
|
3
|
-
|
|
3
|
+
HttpRpcTransport, JsonRpcXyoViewer, XyoViewerRpcSchemas,
|
|
4
4
|
} from '@xyo-network/xl1-rpc'
|
|
5
5
|
import { useMemo } from 'react'
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ export const useHttpRpcViewer = (url?: string) => {
|
|
|
9
9
|
if (isUndefined(url)) {
|
|
10
10
|
return
|
|
11
11
|
}
|
|
12
|
-
const transport = new HttpRpcTransport(`${url}/rpc`,
|
|
12
|
+
const transport = new HttpRpcTransport(`${url}/rpc`, XyoViewerRpcSchemas)
|
|
13
13
|
return new JsonRpcXyoViewer(transport)
|
|
14
14
|
}, [url])
|
|
15
15
|
|