@xyo-network/react-chain-provider 1.6.0 → 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 +75 -34
- package/dist/browser/index.mjs.map +1 -1
- package/dist/types/hooks/index.d.ts +1 -0
- package/dist/types/hooks/index.d.ts.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 +13 -0
- package/dist/types/hooks/useHostViewer.d.ts.map +1 -0
- 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 +15 -10
- package/src/global.d.ts +10 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useCurrentBlock.ts +6 -3
- package/src/hooks/useHostViewer.stories.tsx +67 -0
- package/src/hooks/useHostViewer.ts +38 -0
- 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
|
|
81
91
|
]);
|
|
82
|
-
|
|
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
|
|
112
|
+
]);
|
|
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,53 +126,61 @@ var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1) => {
|
|
|
93
126
|
viewer,
|
|
94
127
|
refresh
|
|
95
128
|
]);
|
|
96
|
-
}, "
|
|
129
|
+
}, "useCurrentBlockBase");
|
|
130
|
+
var useCurrentBlock = useCurrentBlockBase;
|
|
97
131
|
|
|
98
132
|
// src/hooks/useNetwork.ts
|
|
99
|
-
import {
|
|
133
|
+
import { isUndefined as isUndefined4 } from "@xylabs/typeof";
|
|
100
134
|
import { MemoryXyoNetwork } from "@xyo-network/xl1-rpc";
|
|
101
|
-
import { useMemo as
|
|
102
|
-
var
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
return new MemoryXyoNetwork(activeNetwork.id);
|
|
135
|
+
import { useMemo as useMemo4 } from "react";
|
|
136
|
+
var useNetworkBase = /* @__PURE__ */ __name((id) => {
|
|
137
|
+
const network = useMemo4(() => {
|
|
138
|
+
if (isUndefined4(id)) return;
|
|
139
|
+
return new MemoryXyoNetwork(id);
|
|
107
140
|
}, [
|
|
108
|
-
|
|
141
|
+
id
|
|
109
142
|
]);
|
|
110
|
-
|
|
143
|
+
return network;
|
|
144
|
+
}, "useNetworkBase");
|
|
145
|
+
var useNetwork = useNetworkBase;
|
|
111
146
|
|
|
112
147
|
// src/hooks/useRunner.ts
|
|
113
|
-
import {
|
|
148
|
+
import { isUndefined as isUndefined5 } from "@xylabs/typeof";
|
|
114
149
|
import { AllRpcSchemas as AllRpcSchemas2, HttpRpcTransport as HttpRpcTransport2, JsonRpcXyoRunner } from "@xyo-network/xl1-rpc";
|
|
115
|
-
import { useMemo as
|
|
116
|
-
var
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (!activeNetwork) {
|
|
150
|
+
import { useMemo as useMemo5 } from "react";
|
|
151
|
+
var useRunnerBase = /* @__PURE__ */ __name((url) => {
|
|
152
|
+
return useMemo5(() => {
|
|
153
|
+
if (isUndefined5(url)) {
|
|
120
154
|
return;
|
|
121
155
|
}
|
|
122
|
-
const transport = new HttpRpcTransport2(`${
|
|
156
|
+
const transport = new HttpRpcTransport2(`${url}/rpc`, AllRpcSchemas2);
|
|
123
157
|
return new JsonRpcXyoRunner(transport);
|
|
124
158
|
}, [
|
|
125
|
-
|
|
159
|
+
url
|
|
126
160
|
]);
|
|
127
|
-
}, "
|
|
161
|
+
}, "useRunnerBase");
|
|
162
|
+
var useRunner = useRunnerBase;
|
|
128
163
|
|
|
129
164
|
// src/hooks/useSigner.ts
|
|
130
165
|
import { MemoryXyoSigner } from "@xyo-network/xl1-rpc";
|
|
131
|
-
import { useMemo as
|
|
166
|
+
import { useMemo as useMemo6 } from "react";
|
|
132
167
|
var useSigner = /* @__PURE__ */ __name((_provider, account) => {
|
|
133
|
-
return
|
|
168
|
+
return useMemo6(() => account ? new MemoryXyoSigner(account) : void 0, [
|
|
134
169
|
account
|
|
135
170
|
]);
|
|
136
171
|
}, "useSigner");
|
|
137
172
|
export {
|
|
138
173
|
useAddressBalance,
|
|
139
174
|
useCurrentBlock,
|
|
175
|
+
useCurrentBlockBase,
|
|
176
|
+
useHostViewer,
|
|
177
|
+
useHostViewerBase,
|
|
140
178
|
useNetwork,
|
|
179
|
+
useNetworkBase,
|
|
141
180
|
useRunner,
|
|
181
|
+
useRunnerBase,
|
|
142
182
|
useSigner,
|
|
143
|
-
useViewer
|
|
183
|
+
useViewer,
|
|
184
|
+
useViewerBase
|
|
144
185
|
};
|
|
145
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/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 { 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","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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { JsonRpcXyoViewer } from '@xyo-network/xl1-rpc';
|
|
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;
|
|
13
|
+
//# sourceMappingURL=useHostViewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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,20 +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.
|
|
40
|
-
"@xyo-network/account-model": "^4.0.
|
|
41
|
-
"@xyo-network/chain-wrappers": "^1.6.
|
|
42
|
-
"@xyo-network/
|
|
43
|
-
"@xyo-network/xl1-
|
|
44
|
-
"@xyo-network/xl1-rpc": "^1.6.0",
|
|
39
|
+
"@xylabs/typeof": "^4.12.44",
|
|
40
|
+
"@xyo-network/account-model": "^4.0.2",
|
|
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": {
|
|
47
|
+
"@emotion/react": "^11.14.0",
|
|
48
|
+
"@emotion/styled": "^11.14.1",
|
|
49
|
+
"@mui/material": "^7.2.0",
|
|
50
|
+
"@storybook/react-vite": "^9.0.16",
|
|
48
51
|
"@types/react": "^19.1.8",
|
|
49
|
-
"@xylabs/ts-scripts-yarn3": "^6.5.
|
|
50
|
-
"@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",
|
|
51
56
|
"knip": "^5.61.3",
|
|
52
57
|
"typescript": "^5.8.3"
|
|
53
58
|
},
|
package/src/global.d.ts
ADDED
package/src/hooks/index.ts
CHANGED
|
@@ -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
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Alert, Button, Stack,
|
|
3
|
+
} from '@mui/material'
|
|
4
|
+
import type { 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 { useHostViewerBase } from './useHostViewer.ts'
|
|
11
|
+
|
|
12
|
+
const wallet = globalThis.xyo?.walletExtensionId?.()
|
|
13
|
+
const inIframe = globalThis.self !== window.top
|
|
14
|
+
|
|
15
|
+
const UseHostViewerStoryTemplate: React.FC = () => {
|
|
16
|
+
const defaultDestination = SequenceNetwork.id
|
|
17
|
+
const viewer = useHostViewerBase(defaultDestination)
|
|
18
|
+
const [error, setError] = useState<Error | null>(null)
|
|
19
|
+
const [result, setResult] = useState<HydratedBlock | null | undefined>()
|
|
20
|
+
|
|
21
|
+
const handleClick = async () => {
|
|
22
|
+
if (isDefined(viewer)) {
|
|
23
|
+
try {
|
|
24
|
+
const block = await viewer.currentBlock()
|
|
25
|
+
setError(null)
|
|
26
|
+
setResult(block)
|
|
27
|
+
} catch (err) {
|
|
28
|
+
setError(err as Error)
|
|
29
|
+
setResult(undefined)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return (
|
|
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
|
+
)}
|
|
46
|
+
<Button variant="contained" onClick={() => void handleClick()} disabled={!isDefined(viewer)}>
|
|
47
|
+
Get Current Block
|
|
48
|
+
</Button>
|
|
49
|
+
<pre>
|
|
50
|
+
{JSON.stringify(result, null, 2)}
|
|
51
|
+
</pre>
|
|
52
|
+
{error && <Alert severity="error">{error.message}</Alert>}
|
|
53
|
+
</Stack>
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export default {
|
|
58
|
+
title: 'provider/useHostViewer',
|
|
59
|
+
component: UseHostViewerStoryTemplate,
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export const Template: StoryFn<typeof UseHostViewerStoryTemplate> = args => <UseHostViewerStoryTemplate {...args} />
|
|
63
|
+
|
|
64
|
+
const Default = Template.bind({})
|
|
65
|
+
Default.args = {}
|
|
66
|
+
|
|
67
|
+
export { Default }
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isDefined, isTruthy, isUndefined,
|
|
3
|
+
} from '@xylabs/typeof'
|
|
4
|
+
import {
|
|
5
|
+
JsonRpcXyoViewer,
|
|
6
|
+
PostMessageRpcTransport,
|
|
7
|
+
} from '@xyo-network/xl1-rpc'
|
|
8
|
+
import { useMemo } from 'react'
|
|
9
|
+
|
|
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
|
+
|
|
26
|
+
const rpcProvider = useMemo(() => {
|
|
27
|
+
if (isUndefined(networkConnection)) return
|
|
28
|
+
const transport = new PostMessageRpcTransport(networkConnection)
|
|
29
|
+
return new JsonRpcXyoViewer(transport)
|
|
30
|
+
}, [networkConnection])
|
|
31
|
+
|
|
32
|
+
return rpcProvider
|
|
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
|