@xyo-network/react-chain-provider 1.6.1 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.mjs +69 -40
- package/dist/browser/index.mjs.map +1 -1
- package/dist/types/hooks/useCurrentBlock.d.ts +3 -1
- package/dist/types/hooks/useCurrentBlock.d.ts.map +1 -1
- package/dist/types/hooks/useHostViewer.d.ts +11 -2
- package/dist/types/hooks/useHostViewer.d.ts.map +1 -1
- package/dist/types/hooks/useNetwork.d.ts +6 -1
- package/dist/types/hooks/useNetwork.d.ts.map +1 -1
- package/dist/types/hooks/useRunner.d.ts +3 -2
- package/dist/types/hooks/useRunner.d.ts.map +1 -1
- package/dist/types/hooks/useViewer.d.ts +3 -2
- package/dist/types/hooks/useViewer.d.ts.map +1 -1
- package/package.json +11 -9
- package/src/global.d.ts +10 -0
- package/src/hooks/useCurrentBlock.ts +6 -3
- package/src/hooks/useHostViewer.stories.tsx +18 -3
- package/src/hooks/useHostViewer.ts +27 -4
- package/src/hooks/useNetwork.ts +13 -7
- package/src/hooks/useRunner.ts +8 -8
- package/src/hooks/useViewer.stories.tsx +64 -0
- package/src/hooks/useViewer.ts +18 -8
package/dist/browser/index.mjs
CHANGED
|
@@ -65,25 +65,58 @@ var useAddressBalance = /* @__PURE__ */ __name((address, viewer, networkId, refr
|
|
|
65
65
|
import { usePromise as usePromise2 } from "@xylabs/react-promise";
|
|
66
66
|
|
|
67
67
|
// src/hooks/useViewer.ts
|
|
68
|
-
import {
|
|
69
|
-
import { AllRpcSchemas, HttpRpcTransport, JsonRpcXyoViewer } from "@xyo-network/xl1-rpc";
|
|
68
|
+
import { isDefined as isDefined2, isUndefined as isUndefined3 } from "@xylabs/typeof";
|
|
69
|
+
import { AllRpcSchemas, HttpRpcTransport, JsonRpcXyoViewer as JsonRpcXyoViewer2 } from "@xyo-network/xl1-rpc";
|
|
70
|
+
import { useMemo as useMemo3 } from "react";
|
|
71
|
+
|
|
72
|
+
// src/hooks/useHostViewer.ts
|
|
73
|
+
import { isDefined, isTruthy, isUndefined as isUndefined2 } from "@xylabs/typeof";
|
|
74
|
+
import { JsonRpcXyoViewer, PostMessageRpcTransport } from "@xyo-network/xl1-rpc";
|
|
70
75
|
import { useMemo as useMemo2 } from "react";
|
|
71
|
-
var
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (
|
|
75
|
-
return;
|
|
76
|
+
var walletConnections = globalThis.xyo?.connections;
|
|
77
|
+
var useHostViewerBase = /* @__PURE__ */ __name((networkId) => {
|
|
78
|
+
const networkConnection = useMemo2(() => {
|
|
79
|
+
if (isTruthy(networkId) && isDefined(walletConnections) && isDefined(walletConnections[networkId])) {
|
|
80
|
+
return networkId;
|
|
76
81
|
}
|
|
77
|
-
|
|
82
|
+
}, [
|
|
83
|
+
networkId
|
|
84
|
+
]);
|
|
85
|
+
const rpcProvider = useMemo2(() => {
|
|
86
|
+
if (isUndefined2(networkConnection)) return;
|
|
87
|
+
const transport = new PostMessageRpcTransport(networkConnection);
|
|
78
88
|
return new JsonRpcXyoViewer(transport);
|
|
79
89
|
}, [
|
|
80
|
-
|
|
90
|
+
networkConnection
|
|
91
|
+
]);
|
|
92
|
+
return rpcProvider;
|
|
93
|
+
}, "useHostViewerBase");
|
|
94
|
+
var useHostViewer = useHostViewerBase;
|
|
95
|
+
|
|
96
|
+
// src/hooks/useViewer.ts
|
|
97
|
+
var useViewerBase = /* @__PURE__ */ __name((id, url) => {
|
|
98
|
+
const hostViewer = useHostViewerBase(id);
|
|
99
|
+
const resolvedViewer = useMemo3(() => {
|
|
100
|
+
if (isUndefined3(url)) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (isDefined2(hostViewer)) {
|
|
104
|
+
console.debug("Using host viewer:", hostViewer);
|
|
105
|
+
return hostViewer;
|
|
106
|
+
}
|
|
107
|
+
const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas);
|
|
108
|
+
return new JsonRpcXyoViewer2(transport);
|
|
109
|
+
}, [
|
|
110
|
+
url,
|
|
111
|
+
hostViewer
|
|
81
112
|
]);
|
|
82
|
-
|
|
113
|
+
return resolvedViewer;
|
|
114
|
+
}, "useViewerBase");
|
|
115
|
+
var useViewer = useViewerBase;
|
|
83
116
|
|
|
84
117
|
// src/hooks/useCurrentBlock.ts
|
|
85
|
-
var
|
|
86
|
-
const viewer =
|
|
118
|
+
var useCurrentBlockBase = /* @__PURE__ */ __name((refresh = 1, id, url) => {
|
|
119
|
+
const viewer = useViewerBase(id, url);
|
|
87
120
|
return usePromise2(async () => {
|
|
88
121
|
if (viewer && refresh > 0) {
|
|
89
122
|
const block = await viewer.currentBlock();
|
|
@@ -93,49 +126,40 @@ var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1) => {
|
|
|
93
126
|
viewer,
|
|
94
127
|
refresh
|
|
95
128
|
]);
|
|
96
|
-
}, "
|
|
97
|
-
|
|
98
|
-
// src/hooks/useHostViewer.ts
|
|
99
|
-
import { JsonRpcXyoViewer as JsonRpcXyoViewer2, PostMessageRpcTransport } from "@xyo-network/xl1-rpc";
|
|
100
|
-
import { useMemo as useMemo3 } from "react";
|
|
101
|
-
var useHostViewer = /* @__PURE__ */ __name((_provider) => {
|
|
102
|
-
const rpcProvider = useMemo3(() => {
|
|
103
|
-
const transport = new PostMessageRpcTransport();
|
|
104
|
-
return new JsonRpcXyoViewer2(transport);
|
|
105
|
-
}, []);
|
|
106
|
-
return rpcProvider;
|
|
107
|
-
}, "useHostViewer");
|
|
129
|
+
}, "useCurrentBlockBase");
|
|
130
|
+
var useCurrentBlock = useCurrentBlockBase;
|
|
108
131
|
|
|
109
132
|
// src/hooks/useNetwork.ts
|
|
110
|
-
import {
|
|
133
|
+
import { isUndefined as isUndefined4 } from "@xylabs/typeof";
|
|
111
134
|
import { MemoryXyoNetwork } from "@xyo-network/xl1-rpc";
|
|
112
135
|
import { useMemo as useMemo4 } from "react";
|
|
113
|
-
var
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
return new MemoryXyoNetwork(activeNetwork.id);
|
|
136
|
+
var useNetworkBase = /* @__PURE__ */ __name((id) => {
|
|
137
|
+
const network = useMemo4(() => {
|
|
138
|
+
if (isUndefined4(id)) return;
|
|
139
|
+
return new MemoryXyoNetwork(id);
|
|
118
140
|
}, [
|
|
119
|
-
|
|
141
|
+
id
|
|
120
142
|
]);
|
|
121
|
-
|
|
143
|
+
return network;
|
|
144
|
+
}, "useNetworkBase");
|
|
145
|
+
var useNetwork = useNetworkBase;
|
|
122
146
|
|
|
123
147
|
// src/hooks/useRunner.ts
|
|
124
|
-
import {
|
|
148
|
+
import { isUndefined as isUndefined5 } from "@xylabs/typeof";
|
|
125
149
|
import { AllRpcSchemas as AllRpcSchemas2, HttpRpcTransport as HttpRpcTransport2, JsonRpcXyoRunner } from "@xyo-network/xl1-rpc";
|
|
126
150
|
import { useMemo as useMemo5 } from "react";
|
|
127
|
-
var
|
|
128
|
-
const { activeNetwork } = useChainNetwork3();
|
|
151
|
+
var useRunnerBase = /* @__PURE__ */ __name((url) => {
|
|
129
152
|
return useMemo5(() => {
|
|
130
|
-
if (
|
|
153
|
+
if (isUndefined5(url)) {
|
|
131
154
|
return;
|
|
132
155
|
}
|
|
133
|
-
const transport = new HttpRpcTransport2(`${
|
|
156
|
+
const transport = new HttpRpcTransport2(`${url}/rpc`, AllRpcSchemas2);
|
|
134
157
|
return new JsonRpcXyoRunner(transport);
|
|
135
158
|
}, [
|
|
136
|
-
|
|
159
|
+
url
|
|
137
160
|
]);
|
|
138
|
-
}, "
|
|
161
|
+
}, "useRunnerBase");
|
|
162
|
+
var useRunner = useRunnerBase;
|
|
139
163
|
|
|
140
164
|
// src/hooks/useSigner.ts
|
|
141
165
|
import { MemoryXyoSigner } from "@xyo-network/xl1-rpc";
|
|
@@ -148,10 +172,15 @@ var useSigner = /* @__PURE__ */ __name((_provider, account) => {
|
|
|
148
172
|
export {
|
|
149
173
|
useAddressBalance,
|
|
150
174
|
useCurrentBlock,
|
|
175
|
+
useCurrentBlockBase,
|
|
151
176
|
useHostViewer,
|
|
177
|
+
useHostViewerBase,
|
|
152
178
|
useNetwork,
|
|
179
|
+
useNetworkBase,
|
|
153
180
|
useRunner,
|
|
181
|
+
useRunnerBase,
|
|
154
182
|
useSigner,
|
|
155
|
-
useViewer
|
|
183
|
+
useViewer,
|
|
184
|
+
useViewerBase
|
|
156
185
|
};
|
|
157
186
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useAddressBalance.ts","../../src/hooks/useCurrentBlock.ts","../../src/hooks/useViewer.ts","../../src/hooks/useHostViewer.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useRunner.ts","../../src/hooks/useSigner.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 {\n AttoXL1, NetworkId, XyoViewer,\n} 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 // network ID to trigger a balance refresh\n networkId?: NetworkId,\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, networkId, 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'\n\nimport { useViewer } from './useViewer.ts'\n\nexport const useCurrentBlock = (refresh = 1) => {\n const viewer = useViewer()\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 { useChainNetwork } from '@xyo-network/react-chain-network'\nimport type { XyoProvider } from '@xyo-network/xl1-protocol'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoViewer,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useViewer = (_provider?: XyoProvider) => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) {\n return\n }\n const transport = new HttpRpcTransport(`${activeNetwork.url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoViewer(transport)\n }, [activeNetwork])\n}\n","import type { XyoProvider } from '@xyo-network/xl1-protocol'\nimport {\n JsonRpcXyoViewer,\n PostMessageRpcTransport,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHostViewer = (_provider?: XyoProvider) => {\n const rpcProvider = useMemo(() => {\n const transport = new PostMessageRpcTransport()\n return new JsonRpcXyoViewer(transport)\n }, [])\n\n return rpcProvider\n}\n","import { useChainNetwork } from '@xyo-network/react-chain-network'\nimport { MemoryXyoNetwork } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useNetwork = () => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) return\n return new MemoryXyoNetwork(activeNetwork.id)\n }, [activeNetwork])\n}\n","import { useChainNetwork } from '@xyo-network/react-chain-network'\nimport type { XyoProvider } from '@xyo-network/xl1-protocol'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useRunner = (_provider?: XyoProvider) => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) {\n return\n }\n const transport = new HttpRpcTransport(`${activeNetwork.url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoRunner(transport)\n }, [activeNetwork])\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type { XyoProvider, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoProvider, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new MemoryXyoSigner(account) : undefined, [account])\n}\n"],"mappings":"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","names":["usePromise","isUndefined","isUndefinedOrNull","ShiftedBigInt","useMemo","useState","useAddressBalance","address","viewer","networkId","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","useChainNetwork","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoViewer","useMemo","useViewer","_provider","activeNetwork","useChainNetwork","useMemo","transport","HttpRpcTransport","url","AllRpcSchemas","JsonRpcXyoViewer","useCurrentBlock","refresh","viewer","useViewer","usePromise","block","currentBlock","JsonRpcXyoViewer","PostMessageRpcTransport","useMemo","useHostViewer","_provider","rpcProvider","useMemo","transport","PostMessageRpcTransport","JsonRpcXyoViewer","useChainNetwork","MemoryXyoNetwork","useMemo","useNetwork","activeNetwork","useChainNetwork","useMemo","MemoryXyoNetwork","id","useChainNetwork","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoRunner","useMemo","useRunner","_provider","activeNetwork","useChainNetwork","useMemo","transport","HttpRpcTransport","url","AllRpcSchemas","JsonRpcXyoRunner","MemoryXyoSigner","useMemo","useSigner","_provider","account","useMemo","MemoryXyoSigner","undefined"]}
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useAddressBalance.ts","../../src/hooks/useCurrentBlock.ts","../../src/hooks/useViewer.ts","../../src/hooks/useHostViewer.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useRunner.ts","../../src/hooks/useSigner.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 {\n AttoXL1, NetworkId, XyoViewer,\n} 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 // network ID to trigger a balance refresh\n networkId?: NetworkId,\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, networkId, 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'\n\nimport { useViewerBase } from './useViewer.ts'\n\nexport const useCurrentBlockBase = (refresh = 1, id?: string, url?: string) => {\n const viewer = useViewerBase(id, url)\n return usePromise(async () => {\n if (viewer && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n\n/** @deprecated - use useCurrentBlockBase instead but note this hook no longer relies on useChainNetwork */\nexport const useCurrentBlock = useCurrentBlockBase\n","import { isDefined, isUndefined } from '@xylabs/typeof'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoViewer,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nimport { useHostViewerBase } from './useHostViewer.ts'\n\nexport const useViewerBase = (id?: string, url?: string) => {\n const hostViewer = useHostViewerBase(id)\n\n const resolvedViewer = useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n if (isDefined(hostViewer)) {\n console.debug('Using host viewer:', hostViewer)\n return hostViewer\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoViewer(transport)\n }, [url, hostViewer])\n\n return resolvedViewer\n}\n\n/** @deprecated - use useViewerBase instead but note this hook no longer relies on useChainNetwork */\nexport const useViewer = useViewerBase\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// 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 useHostViewerBase = (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 * @deprecated - use useHostViewerBase instead but note this hook no longer relies on useChainNetwork\n */\nexport const useHostViewer = useHostViewerBase\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 useNetworkBase = (id?: DefaultNetworkIds) => {\n const network = useMemo(() => {\n if (isUndefined(id)) return\n return new MemoryXyoNetwork(id)\n }, [id])\n\n return network\n}\n\n/**\n * @deprecated - use useNetworkBase instead but note this hook no longer relies on useChainNetwork\n */\nexport const useNetwork = useNetworkBase\n","import { isUndefined } from '@xylabs/typeof'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useRunnerBase = (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\n/** @deprecated - use useRunnerBase instead but note this hook no longer relies on useChainNetwork */\nexport const useRunner = useRunnerBase\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type { XyoProvider, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoProvider, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new MemoryXyoSigner(account) : undefined, [account])\n}\n"],"mappings":";;;;AACA,SAASA,kBAAkB;AAC3B,SAASC,aAAaC,yBAAyB;AAC/C,SAASC,qBAAqB;AAI9B,SAASC,SAASC,gBAAgB;AAE3B,IAAMC,oBAAoB,wBAE/BC,SAEAC,QAEAC,WAEAC,YAAAA;AAEA,QAAM,CAACC,gBAAgBC,iBAAAA,IAAqBC,SAAAA;AAC5C,QAAM,CAACC,SAASC,UAAAA,IAAcF,SAAS,KAAA;AAEvC,QAAM,CAAA,EAAGG,aAAAA,IAAiBC,WAAW,YAAA;AACnC,QAAIC,YAAYV,MAAAA,KAAWU,YAAYX,OAAAA,EAAU;AACjDQ,eAAW,IAAA;AACXH,sBAAkBO,MAAAA;AAClB,UAAMC,UAAU,MAAMZ,OAAOa,eAAed,OAAAA;AAC5CK,sBAAkBQ,OAAAA;AAClBL,eAAW,KAAA;EACb,GAAG;IAACR;IAASC;IAAQC;IAAWC;GAAQ;AAExCY,UAAQ,MAAA;AACN,QAAIN,eAAe;AACjBD,iBAAW,KAAA;IACb;EACF,GAAG;IAACC;GAAc;AAElB,QAAMO,gBAAgBD,QAAQ,MAAA;AAC5B,QAAI,OAAOX,mBAAmB,SAAU;AACxC,WAAO,IAAIa,cAAcb,gBAAgB;MACvCc,QAAQ;MAAIC,YAAY;MAAIC,eAAe;MAAGC,aAAa;MAAGC,QAAQC,UAAUC;IAClF,CAAA;EACF,GAAG;IAACpB;GAAe;AAEnB,QAAMqB,sBAAsBV,QAAQ,MAAA;AAClC,WAAOC,eAAeU,aAAAA;EACxB,GAAG;IAACV;GAAc;AAElB,QAAMW,2BAA2BZ,QAAQ,MAAA;AACvC,WAAOa,kBAAkBxB,cAAAA,IACrBQ,SACCR,iBAAiB,kBAAsBA,iBAAiB,KAAM,aAAaY,eAAea,cAAAA;EACjG,GAAG;IAACb;GAAc;AAElB,SAAO;IACLhB;IACA8B,mBAAmB1B;IACnBqB;IACAE;IACAI,OAAOtB;IACPF;EACF;AACF,GArDiC;;;ACTjC,SAASyB,cAAAA,mBAAkB;;;ACA3B,SAASC,aAAAA,YAAWC,eAAAA,oBAAmB;AACvC,SACEC,eAAeC,kBAAkBC,oBAAAA,yBAC5B;AACP,SAASC,WAAAA,gBAAe;;;ACJxB,SACEC,WAAWC,UAAUC,eAAAA,oBAChB;AACP,SACEC,kBACAC,+BACK;AACP,SAASC,WAAAA,gBAAe;AAGxB,IAAMC,oBAAoBC,WAAWC,KAAKC;AAQnC,IAAMC,oBAAoB,wBAACC,cAAAA;AAChC,QAAMC,oBAAoBC,SAAQ,MAAA;AAChC,QAAIC,SAASH,SAAAA,KAAcI,UAAUT,iBAAAA,KAAsBS,UAAUT,kBAAkBK,SAAAA,CAAU,GAAG;AAClG,aAAOA;IACT;EACF,GAAG;IAACA;GAAU;AAEd,QAAMK,cAAcH,SAAQ,MAAA;AAC1B,QAAII,aAAYL,iBAAAA,EAAoB;AACpC,UAAMM,YAAY,IAAIC,wBAAwBP,iBAAAA;AAC9C,WAAO,IAAIQ,iBAAiBF,SAAAA;EAC9B,GAAG;IAACN;GAAkB;AAEtB,SAAOI;AACT,GAdiC;AAmB1B,IAAMK,gBAAgBX;;;AD7BtB,IAAMY,gBAAgB,wBAACC,IAAaC,QAAAA;AACzC,QAAMC,aAAaC,kBAAkBH,EAAAA;AAErC,QAAMI,iBAAiBC,SAAQ,MAAA;AAC7B,QAAIC,aAAYL,GAAAA,GAAM;AACpB;IACF;AACA,QAAIM,WAAUL,UAAAA,GAAa;AACzBM,cAAQC,MAAM,sBAAsBP,UAAAA;AACpC,aAAOA;IACT;AACA,UAAMQ,YAAY,IAAIC,iBAAiB,GAAGV,GAAAA,QAAWW,aAAAA;AACrD,WAAO,IAAIC,kBAAiBH,SAAAA;EAC9B,GAAG;IAACT;IAAKC;GAAW;AAEpB,SAAOE;AACT,GAhB6B;AAmBtB,IAAMU,YAAYf;;;ADvBlB,IAAMgB,sBAAsB,wBAACC,UAAU,GAAGC,IAAaC,QAAAA;AAC5D,QAAMC,SAASC,cAAcH,IAAIC,GAAAA;AACjC,SAAOG,YAAW,YAAA;AAChB,QAAIF,UAAUH,UAAU,GAAG;AACzB,YAAMM,QAAQ,MAAMH,OAAOI,aAAY;AACvC,aAAOD;IACT;EACF,GAAG;IAACH;IAAQH;GAAQ;AACtB,GARmC;AAW5B,IAAMQ,kBAAkBT;;;AGf/B,SAASU,eAAAA,oBAAmB;AAE5B,SAASC,wBAAwB;AACjC,SAASC,WAAAA,gBAAe;AAEjB,IAAMC,iBAAiB,wBAACC,OAAAA;AAC7B,QAAMC,UAAUC,SAAQ,MAAA;AACtB,QAAIC,aAAYH,EAAAA,EAAK;AACrB,WAAO,IAAII,iBAAiBJ,EAAAA;EAC9B,GAAG;IAACA;GAAG;AAEP,SAAOC;AACT,GAP8B;AAYvB,IAAMI,aAAaN;;;ACjB1B,SAASO,eAAAA,oBAAmB;AAC5B,SACEC,iBAAAA,gBAAeC,oBAAAA,mBAAkBC,wBAC5B;AACP,SAASC,WAAAA,gBAAe;AAEjB,IAAMC,gBAAgB,wBAACC,QAAAA;AAC5B,SAAOC,SAAQ,MAAA;AACb,QAAIC,aAAYF,GAAAA,GAAM;AACpB;IACF;AACA,UAAMG,YAAY,IAAIC,kBAAiB,GAAGJ,GAAAA,QAAWK,cAAAA;AACrD,WAAO,IAAIC,iBAAiBH,SAAAA;EAC9B,GAAG;IAACH;GAAI;AACV,GAR6B;AAWtB,IAAMO,YAAYR;;;ACfzB,SAASS,uBAAuB;AAChC,SAASC,WAAAA,gBAAe;AAEjB,IAAMC,YAAY,wBAACC,WAAyBC,YAAAA;AACjD,SAAOC,SAA+B,MAAMD,UAAU,IAAIE,gBAAgBF,OAAAA,IAAWG,QAAW;IAACH;GAAQ;AAC3G,GAFyB;","names":["usePromise","isUndefined","isUndefinedOrNull","ShiftedBigInt","useMemo","useState","useAddressBalance","address","viewer","networkId","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","isDefined","isUndefined","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoViewer","useMemo","isDefined","isTruthy","isUndefined","JsonRpcXyoViewer","PostMessageRpcTransport","useMemo","walletConnections","globalThis","xyo","connections","useHostViewerBase","networkId","networkConnection","useMemo","isTruthy","isDefined","rpcProvider","isUndefined","transport","PostMessageRpcTransport","JsonRpcXyoViewer","useHostViewer","useViewerBase","id","url","hostViewer","useHostViewerBase","resolvedViewer","useMemo","isUndefined","isDefined","console","debug","transport","HttpRpcTransport","AllRpcSchemas","JsonRpcXyoViewer","useViewer","useCurrentBlockBase","refresh","id","url","viewer","useViewerBase","usePromise","block","currentBlock","useCurrentBlock","isUndefined","MemoryXyoNetwork","useMemo","useNetworkBase","id","network","useMemo","isUndefined","MemoryXyoNetwork","useNetwork","isUndefined","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoRunner","useMemo","useRunnerBase","url","useMemo","isUndefined","transport","HttpRpcTransport","AllRpcSchemas","JsonRpcXyoRunner","useRunner","MemoryXyoSigner","useMemo","useSigner","_provider","account","useMemo","MemoryXyoSigner","undefined"]}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const useCurrentBlockBase: (refresh?: number, id?: string, url?: string) => [import("@xyo-network/xl1-protocol").HydratedBlock | undefined, Error | undefined, import("@xylabs/react-promise").UsePromiseState | undefined];
|
|
2
|
+
/** @deprecated - use useCurrentBlockBase instead but note this hook no longer relies on useChainNetwork */
|
|
3
|
+
export declare const useCurrentBlock: (refresh?: number, id?: string, url?: string) => [import("@xyo-network/xl1-protocol").HydratedBlock | undefined, Error | undefined, import("@xylabs/react-promise").UsePromiseState | undefined];
|
|
2
4
|
//# sourceMappingURL=useCurrentBlock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCurrentBlock.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCurrentBlock.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"useCurrentBlock.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCurrentBlock.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB,GAAI,gBAAW,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,oJAQzE,CAAA;AAED,2GAA2G;AAC3G,eAAO,MAAM,eAAe,0BAX0B,MAAM,QAAQ,MAAM,oJAWxB,CAAA"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
import type { XyoProvider } from '@xyo-network/xl1-protocol';
|
|
2
1
|
import { JsonRpcXyoViewer } from '@xyo-network/xl1-rpc';
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Creates a JsonRpcXyoViewer instance based on the provided networkId.
|
|
4
|
+
* @param networkId - a network id like 'sequence', 'local', etc.
|
|
5
|
+
* @returns An instance of JsonRpcXyoViewer if the networkId is found in walletConnections,
|
|
6
|
+
* otherwise undefined.
|
|
7
|
+
*/
|
|
8
|
+
export declare const useHostViewerBase: (networkId?: string) => JsonRpcXyoViewer | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated - use useHostViewerBase instead but note this hook no longer relies on useChainNetwork
|
|
11
|
+
*/
|
|
12
|
+
export declare const useHostViewer: (networkId?: string) => JsonRpcXyoViewer | undefined;
|
|
4
13
|
//# sourceMappingURL=useHostViewer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHostViewer.d.ts","sourceRoot":"","sources":["../../../src/hooks/useHostViewer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useHostViewer.d.ts","sourceRoot":"","sources":["../../../src/hooks/useHostViewer.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAEjB,MAAM,sBAAsB,CAAA;AAM7B;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,YAAY,MAAM,iCAcnD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,eAnBoB,MAAM,iCAmBN,CAAA"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import type { DefaultNetworkIds } from '@xyo-network/xl1-protocol';
|
|
1
2
|
import { MemoryXyoNetwork } from '@xyo-network/xl1-rpc';
|
|
2
|
-
export declare const
|
|
3
|
+
export declare const useNetworkBase: (id?: DefaultNetworkIds) => MemoryXyoNetwork | undefined;
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated - use useNetworkBase instead but note this hook no longer relies on useChainNetwork
|
|
6
|
+
*/
|
|
7
|
+
export declare const useNetwork: (id?: DefaultNetworkIds) => MemoryXyoNetwork | undefined;
|
|
3
8
|
//# sourceMappingURL=useNetwork.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNetwork.d.ts","sourceRoot":"","sources":["../../../src/hooks/useNetwork.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAGvD,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"useNetwork.d.ts","sourceRoot":"","sources":["../../../src/hooks/useNetwork.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAGvD,eAAO,MAAM,cAAc,GAAI,KAAK,iBAAiB,iCAOpD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,QAZa,iBAAiB,iCAYb,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { XyoProvider } from '@xyo-network/xl1-protocol';
|
|
2
1
|
import { JsonRpcXyoRunner } from '@xyo-network/xl1-rpc';
|
|
3
|
-
export declare const
|
|
2
|
+
export declare const useRunnerBase: (url?: string) => JsonRpcXyoRunner | undefined;
|
|
3
|
+
/** @deprecated - use useRunnerBase instead but note this hook no longer relies on useChainNetwork */
|
|
4
|
+
export declare const useRunner: (url?: string) => JsonRpcXyoRunner | undefined;
|
|
4
5
|
//# sourceMappingURL=useRunner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRunner.d.ts","sourceRoot":"","sources":["../../../src/hooks/useRunner.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"useRunner.d.ts","sourceRoot":"","sources":["../../../src/hooks/useRunner.ts"],"names":[],"mappings":"AACA,OAAO,EAC4B,gBAAgB,EAClD,MAAM,sBAAsB,CAAA;AAG7B,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,iCAQzC,CAAA;AAED,qGAAqG;AACrG,eAAO,MAAM,SAAS,SAXc,MAAM,iCAWJ,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { XyoProvider } from '@xyo-network/xl1-protocol';
|
|
2
1
|
import { JsonRpcXyoViewer } from '@xyo-network/xl1-rpc';
|
|
3
|
-
export declare const
|
|
2
|
+
export declare const useViewerBase: (id?: string, url?: string) => JsonRpcXyoViewer | undefined;
|
|
3
|
+
/** @deprecated - use useViewerBase instead but note this hook no longer relies on useChainNetwork */
|
|
4
|
+
export declare const useViewer: (id?: string, url?: string) => JsonRpcXyoViewer | undefined;
|
|
4
5
|
//# sourceMappingURL=useViewer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useViewer.d.ts","sourceRoot":"","sources":["../../../src/hooks/useViewer.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"useViewer.d.ts","sourceRoot":"","sources":["../../../src/hooks/useViewer.ts"],"names":[],"mappings":"AACA,OAAO,EAC4B,gBAAgB,EAClD,MAAM,sBAAsB,CAAA;AAK7B,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,MAAM,MAAM,iCAgBtD,CAAA;AAED,qGAAqG;AACrG,eAAO,MAAM,SAAS,QAnBa,MAAM,QAAQ,MAAM,iCAmBjB,CAAA"}
|
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.6.
|
|
4
|
+
"version": "1.6.2",
|
|
5
5
|
"description": "XYO Layer One API",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -34,23 +34,25 @@
|
|
|
34
34
|
"module": "dist/browser/index.mjs",
|
|
35
35
|
"types": "dist/types/index.d.ts",
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@xylabs/hex": "^4.12.
|
|
37
|
+
"@xylabs/hex": "^4.12.44",
|
|
38
38
|
"@xylabs/react-promise": "^6.3.7",
|
|
39
|
-
"@xylabs/typeof": "^4.12.
|
|
39
|
+
"@xylabs/typeof": "^4.12.44",
|
|
40
40
|
"@xyo-network/account-model": "^4.0.2",
|
|
41
|
-
"@xyo-network/chain-wrappers": "^1.6.
|
|
42
|
-
"@xyo-network/
|
|
43
|
-
"@xyo-network/xl1-
|
|
44
|
-
"@xyo-network/xl1-rpc": "^1.6.1",
|
|
41
|
+
"@xyo-network/chain-wrappers": "^1.6.2",
|
|
42
|
+
"@xyo-network/xl1-protocol": "^1.6.1",
|
|
43
|
+
"@xyo-network/xl1-rpc": "^1.6.2",
|
|
45
44
|
"react": "^19.1.0"
|
|
46
45
|
},
|
|
47
46
|
"devDependencies": {
|
|
48
47
|
"@emotion/react": "^11.14.0",
|
|
49
48
|
"@emotion/styled": "^11.14.1",
|
|
50
49
|
"@mui/material": "^7.2.0",
|
|
50
|
+
"@storybook/react-vite": "^9.0.16",
|
|
51
51
|
"@types/react": "^19.1.8",
|
|
52
|
-
"@xylabs/ts-scripts-yarn3": "^6.5.
|
|
53
|
-
"@xylabs/tsconfig-react": "^6.5.
|
|
52
|
+
"@xylabs/ts-scripts-yarn3": "^6.5.18",
|
|
53
|
+
"@xylabs/tsconfig-react": "^6.5.18",
|
|
54
|
+
"@xyo-network/chain-network-model": "^1.6.2",
|
|
55
|
+
"@xyo-network/react-chain-model": "^1.6.2",
|
|
54
56
|
"knip": "^5.61.3",
|
|
55
57
|
"typescript": "^5.8.3"
|
|
56
58
|
},
|
package/src/global.d.ts
ADDED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { usePromise } from '@xylabs/react-promise'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { useViewerBase } from './useViewer.ts'
|
|
4
4
|
|
|
5
|
-
export const
|
|
6
|
-
const viewer =
|
|
5
|
+
export const useCurrentBlockBase = (refresh = 1, id?: string, url?: string) => {
|
|
6
|
+
const viewer = useViewerBase(id, url)
|
|
7
7
|
return usePromise(async () => {
|
|
8
8
|
if (viewer && refresh > 0) {
|
|
9
9
|
const block = await viewer.currentBlock()
|
|
@@ -11,3 +11,6 @@ export const useCurrentBlock = (refresh = 1) => {
|
|
|
11
11
|
}
|
|
12
12
|
}, [viewer, refresh])
|
|
13
13
|
}
|
|
14
|
+
|
|
15
|
+
/** @deprecated - use useCurrentBlockBase instead but note this hook no longer relies on useChainNetwork */
|
|
16
|
+
export const useCurrentBlock = useCurrentBlockBase
|
|
@@ -2,14 +2,19 @@ import {
|
|
|
2
2
|
Alert, Button, Stack,
|
|
3
3
|
} from '@mui/material'
|
|
4
4
|
import type { StoryFn } from '@storybook/react-vite'
|
|
5
|
-
import { isDefined } from '@xylabs/typeof'
|
|
5
|
+
import { isDefined, isUndefined } from '@xylabs/typeof'
|
|
6
|
+
import { SequenceNetwork } from '@xyo-network/chain-network-model'
|
|
6
7
|
import type { HydratedBlock } from '@xyo-network/xl1-protocol'
|
|
7
8
|
import React, { useState } from 'react'
|
|
8
9
|
|
|
9
|
-
import {
|
|
10
|
+
import { useHostViewerBase } from './useHostViewer.ts'
|
|
11
|
+
|
|
12
|
+
const wallet = globalThis.xyo?.walletExtensionId?.()
|
|
13
|
+
const inIframe = globalThis.self !== window.top
|
|
10
14
|
|
|
11
15
|
const UseHostViewerStoryTemplate: React.FC = () => {
|
|
12
|
-
const
|
|
16
|
+
const defaultDestination = SequenceNetwork.id
|
|
17
|
+
const viewer = useHostViewerBase(defaultDestination)
|
|
13
18
|
const [error, setError] = useState<Error | null>(null)
|
|
14
19
|
const [result, setResult] = useState<HydratedBlock | null | undefined>()
|
|
15
20
|
|
|
@@ -28,6 +33,16 @@ const UseHostViewerStoryTemplate: React.FC = () => {
|
|
|
28
33
|
|
|
29
34
|
return (
|
|
30
35
|
<Stack gap={2} alignItems="center">
|
|
36
|
+
{inIframe && (
|
|
37
|
+
<Alert severity="warning">
|
|
38
|
+
This story is running in an iframe. Please run it in a standalone browser window to test the wallet extension.
|
|
39
|
+
</Alert>
|
|
40
|
+
)}
|
|
41
|
+
{isUndefined(wallet) && (
|
|
42
|
+
<Alert severity="warning">
|
|
43
|
+
No wallet extension found. Please install the Xyo Wallet Chrome Extension.
|
|
44
|
+
</Alert>
|
|
45
|
+
)}
|
|
31
46
|
<Button variant="contained" onClick={() => void handleClick()} disabled={!isDefined(viewer)}>
|
|
32
47
|
Get Current Block
|
|
33
48
|
</Button>
|
|
@@ -1,15 +1,38 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
isDefined, isTruthy, isUndefined,
|
|
3
|
+
} from '@xylabs/typeof'
|
|
2
4
|
import {
|
|
3
5
|
JsonRpcXyoViewer,
|
|
4
6
|
PostMessageRpcTransport,
|
|
5
7
|
} from '@xyo-network/xl1-rpc'
|
|
6
8
|
import { useMemo } from 'react'
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
// Get known wallet connections from the global Xyo object
|
|
11
|
+
const walletConnections = globalThis.xyo?.connections
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Creates a JsonRpcXyoViewer instance based on the provided networkId.
|
|
15
|
+
* @param networkId - a network id like 'sequence', 'local', etc.
|
|
16
|
+
* @returns An instance of JsonRpcXyoViewer if the networkId is found in walletConnections,
|
|
17
|
+
* otherwise undefined.
|
|
18
|
+
*/
|
|
19
|
+
export const useHostViewerBase = (networkId?: string) => {
|
|
20
|
+
const networkConnection = useMemo(() => {
|
|
21
|
+
if (isTruthy(networkId) && isDefined(walletConnections) && isDefined(walletConnections[networkId])) {
|
|
22
|
+
return networkId
|
|
23
|
+
}
|
|
24
|
+
}, [networkId])
|
|
25
|
+
|
|
9
26
|
const rpcProvider = useMemo(() => {
|
|
10
|
-
|
|
27
|
+
if (isUndefined(networkConnection)) return
|
|
28
|
+
const transport = new PostMessageRpcTransport(networkConnection)
|
|
11
29
|
return new JsonRpcXyoViewer(transport)
|
|
12
|
-
}, [])
|
|
30
|
+
}, [networkConnection])
|
|
13
31
|
|
|
14
32
|
return rpcProvider
|
|
15
33
|
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @deprecated - use useHostViewerBase instead but note this hook no longer relies on useChainNetwork
|
|
37
|
+
*/
|
|
38
|
+
export const useHostViewer = useHostViewerBase
|
package/src/hooks/useNetwork.ts
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isUndefined } from '@xylabs/typeof'
|
|
2
|
+
import type { DefaultNetworkIds } from '@xyo-network/xl1-protocol'
|
|
2
3
|
import { MemoryXyoNetwork } from '@xyo-network/xl1-rpc'
|
|
3
4
|
import { useMemo } from 'react'
|
|
4
5
|
|
|
5
|
-
export const
|
|
6
|
-
const
|
|
6
|
+
export const useNetworkBase = (id?: DefaultNetworkIds) => {
|
|
7
|
+
const network = useMemo(() => {
|
|
8
|
+
if (isUndefined(id)) return
|
|
9
|
+
return new MemoryXyoNetwork(id)
|
|
10
|
+
}, [id])
|
|
7
11
|
|
|
8
|
-
return
|
|
9
|
-
if (!activeNetwork) return
|
|
10
|
-
return new MemoryXyoNetwork(activeNetwork.id)
|
|
11
|
-
}, [activeNetwork])
|
|
12
|
+
return network
|
|
12
13
|
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated - use useNetworkBase instead but note this hook no longer relies on useChainNetwork
|
|
17
|
+
*/
|
|
18
|
+
export const useNetwork = useNetworkBase
|
package/src/hooks/useRunner.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { XyoProvider } from '@xyo-network/xl1-protocol'
|
|
1
|
+
import { isUndefined } from '@xylabs/typeof'
|
|
3
2
|
import {
|
|
4
3
|
AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,
|
|
5
4
|
} from '@xyo-network/xl1-rpc'
|
|
6
5
|
import { useMemo } from 'react'
|
|
7
6
|
|
|
8
|
-
export const
|
|
9
|
-
const { activeNetwork } = useChainNetwork()
|
|
10
|
-
|
|
7
|
+
export const useRunnerBase = (url?: string) => {
|
|
11
8
|
return useMemo(() => {
|
|
12
|
-
if (
|
|
9
|
+
if (isUndefined(url)) {
|
|
13
10
|
return
|
|
14
11
|
}
|
|
15
|
-
const transport = new HttpRpcTransport(`${
|
|
12
|
+
const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas)
|
|
16
13
|
return new JsonRpcXyoRunner(transport)
|
|
17
|
-
}, [
|
|
14
|
+
}, [url])
|
|
18
15
|
}
|
|
16
|
+
|
|
17
|
+
/** @deprecated - use useRunnerBase instead but note this hook no longer relies on useChainNetwork */
|
|
18
|
+
export const useRunner = useRunnerBase
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Alert, Button, Stack,
|
|
3
|
+
} from '@mui/material'
|
|
4
|
+
import type { Meta, StoryFn } from '@storybook/react-vite'
|
|
5
|
+
import { isDefined, isUndefined } from '@xylabs/typeof'
|
|
6
|
+
import { SequenceNetwork } from '@xyo-network/chain-network-model'
|
|
7
|
+
import type { HydratedBlock } from '@xyo-network/xl1-protocol'
|
|
8
|
+
import React, { useState } from 'react'
|
|
9
|
+
|
|
10
|
+
import { useViewerBase } from './useViewer.ts'
|
|
11
|
+
|
|
12
|
+
const wallet = globalThis.xyo?.walletExtensionId?.()
|
|
13
|
+
const inIframe = globalThis.self !== window.top
|
|
14
|
+
|
|
15
|
+
const UseViewerStoryTemplate: React.FC = () => {
|
|
16
|
+
const viewer = useViewerBase(SequenceNetwork.id, SequenceNetwork.url)
|
|
17
|
+
const [error, setError] = useState<Error | null>(null)
|
|
18
|
+
const [result, setResult] = useState<HydratedBlock | null | undefined>()
|
|
19
|
+
|
|
20
|
+
const handleClick = async () => {
|
|
21
|
+
if (isDefined(viewer)) {
|
|
22
|
+
try {
|
|
23
|
+
const block = await viewer.currentBlock()
|
|
24
|
+
setError(null)
|
|
25
|
+
setResult(block)
|
|
26
|
+
} catch (err) {
|
|
27
|
+
setError(err as Error)
|
|
28
|
+
setResult(undefined)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<Stack gap={2} alignItems="center">
|
|
35
|
+
{inIframe && (
|
|
36
|
+
<Alert severity="warning">
|
|
37
|
+
This story is running in an iframe. Please run it in a standalone browser window to test the wallet extension.
|
|
38
|
+
</Alert>
|
|
39
|
+
)}
|
|
40
|
+
<Alert severity="info">
|
|
41
|
+
{isUndefined(wallet) ? 'No wallet extension found. Falling back to the default viewer.' : 'Wallet extension found. Using it for viewer.'}
|
|
42
|
+
</Alert>
|
|
43
|
+
<Button variant="contained" onClick={() => void handleClick()} disabled={!isDefined(viewer)}>
|
|
44
|
+
Get Current Block
|
|
45
|
+
</Button>
|
|
46
|
+
<pre>
|
|
47
|
+
{JSON.stringify(result, null, 2)}
|
|
48
|
+
</pre>
|
|
49
|
+
{error && <Alert severity="error">{error.message}</Alert>}
|
|
50
|
+
</Stack>
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export default {
|
|
55
|
+
title: 'provider/useViewer',
|
|
56
|
+
component: UseViewerStoryTemplate,
|
|
57
|
+
} as Meta
|
|
58
|
+
|
|
59
|
+
export const Template: StoryFn<typeof UseViewerStoryTemplate> = args => <UseViewerStoryTemplate {...args} />
|
|
60
|
+
|
|
61
|
+
const Default = Template.bind({})
|
|
62
|
+
Default.args = {}
|
|
63
|
+
|
|
64
|
+
export { Default }
|
package/src/hooks/useViewer.ts
CHANGED
|
@@ -1,18 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { XyoProvider } from '@xyo-network/xl1-protocol'
|
|
1
|
+
import { isDefined, isUndefined } from '@xylabs/typeof'
|
|
3
2
|
import {
|
|
4
3
|
AllRpcSchemas, HttpRpcTransport, JsonRpcXyoViewer,
|
|
5
4
|
} from '@xyo-network/xl1-rpc'
|
|
6
5
|
import { useMemo } from 'react'
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
const { activeNetwork } = useChainNetwork()
|
|
7
|
+
import { useHostViewerBase } from './useHostViewer.ts'
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
export const useViewerBase = (id?: string, url?: string) => {
|
|
10
|
+
const hostViewer = useHostViewerBase(id)
|
|
11
|
+
|
|
12
|
+
const resolvedViewer = useMemo(() => {
|
|
13
|
+
if (isUndefined(url)) {
|
|
13
14
|
return
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
+
if (isDefined(hostViewer)) {
|
|
17
|
+
console.debug('Using host viewer:', hostViewer)
|
|
18
|
+
return hostViewer
|
|
19
|
+
}
|
|
20
|
+
const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas)
|
|
16
21
|
return new JsonRpcXyoViewer(transport)
|
|
17
|
-
}, [
|
|
22
|
+
}, [url, hostViewer])
|
|
23
|
+
|
|
24
|
+
return resolvedViewer
|
|
18
25
|
}
|
|
26
|
+
|
|
27
|
+
/** @deprecated - use useViewerBase instead but note this hook no longer relies on useChainNetwork */
|
|
28
|
+
export const useViewer = useViewerBase
|