@xyo-network/react-chain-provider 1.10.0 → 1.10.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/hooks/viewer/resolveGateway.d.ts +11 -0
- package/dist/browser/hooks/viewer/resolveGateway.d.ts.map +1 -0
- package/dist/browser/index.mjs +38 -3
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +15 -15
- package/src/global.d.ts +1 -0
- package/src/hooks/viewer/resolveGateway.ts +49 -0
- package/src/hooks/viewer/useViewerFromWallet.ts +3 -3
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { GatewayName } from '@xyo-network/xl1-protocol';
|
|
2
|
+
import { MemoryXyoGateway } from '@xyo-network/xl1-rpc';
|
|
3
|
+
/**
|
|
4
|
+
* Retrieves a gateway from the wallet based on the provided networkId.
|
|
5
|
+
* Includes fallback logic to build a gateway from the connection if it does not exist in
|
|
6
|
+
* the global xyo object.
|
|
7
|
+
* @param networkId - a network id like 'sequence', 'local', etc.
|
|
8
|
+
* @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.
|
|
9
|
+
*/
|
|
10
|
+
export declare const resolveGateway: (networkId: GatewayName) => import("@xyo-network/xl1-protocol").XyoGatewayProvider | MemoryXyoGateway | undefined;
|
|
11
|
+
//# sourceMappingURL=resolveGateway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveGateway.d.ts","sourceRoot":"","sources":["../../../../src/hooks/viewer/resolveGateway.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAC8D,gBAAgB,EACpF,MAAM,sBAAsB,CAAA;AA0B7B;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,WAAW,WAAW,0FAWpD,CAAA"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -168,16 +168,51 @@ var useHttpRpcViewer = (url) => {
|
|
|
168
168
|
// src/hooks/viewer/useViewerFromWallet.ts
|
|
169
169
|
import { usePromise as usePromise3 } from "@xylabs/react-promise";
|
|
170
170
|
import {
|
|
171
|
-
isDefined as
|
|
171
|
+
isDefined as isDefined3,
|
|
172
172
|
isTruthy,
|
|
173
173
|
isUndefined as isUndefined6
|
|
174
174
|
} from "@xylabs/typeof";
|
|
175
175
|
import { useEffect as useEffect2, useMemo as useMemo7 } from "react";
|
|
176
|
+
|
|
177
|
+
// src/hooks/viewer/resolveGateway.ts
|
|
178
|
+
import { isDefined as isDefined2 } from "@xylabs/typeof";
|
|
179
|
+
import {
|
|
180
|
+
JsonRpcXyoRunner as JsonRpcXyoRunner2,
|
|
181
|
+
JsonRpcXyoViewer as JsonRpcXyoViewer3,
|
|
182
|
+
LegacyPostMessageRpcTransport,
|
|
183
|
+
MemoryXyoGateway,
|
|
184
|
+
RpcXyoSigner,
|
|
185
|
+
XyoConnection
|
|
186
|
+
} from "@xyo-network/xl1-rpc";
|
|
176
187
|
var gateways = () => globalThis.xyo?.client?.gateways;
|
|
188
|
+
var buildGatewayFromConnection = (networkId) => {
|
|
189
|
+
const connections = globalThis.xyo?.connections;
|
|
190
|
+
if (isDefined2(connections) && isDefined2(connections[networkId])) {
|
|
191
|
+
const legacyPostMessageRpcTransport = new LegacyPostMessageRpcTransport(networkId, void 0, globalThis.xyo.walletExtensionId() ?? "");
|
|
192
|
+
const signer = new RpcXyoSigner(legacyPostMessageRpcTransport);
|
|
193
|
+
const viewer = new JsonRpcXyoViewer3(legacyPostMessageRpcTransport);
|
|
194
|
+
const runner = new JsonRpcXyoRunner2(legacyPostMessageRpcTransport);
|
|
195
|
+
const connection = new XyoConnection({ viewer, runner });
|
|
196
|
+
return new MemoryXyoGateway(signer, connection);
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
var resolveGateway = (networkId) => {
|
|
200
|
+
const networkGateway = gateways()?.[networkId];
|
|
201
|
+
if (isDefined2(networkGateway)) {
|
|
202
|
+
return networkGateway;
|
|
203
|
+
}
|
|
204
|
+
const builtGateway = buildGatewayFromConnection(networkId);
|
|
205
|
+
if (isDefined2(builtGateway)) {
|
|
206
|
+
return builtGateway;
|
|
207
|
+
}
|
|
208
|
+
console.warn(`No gateway found for networkId: ${networkId}`);
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
// src/hooks/viewer/useViewerFromWallet.ts
|
|
177
212
|
var useViewerFromWallet = (networkId) => {
|
|
178
213
|
const networkGateway = useMemo7(() => {
|
|
179
|
-
if (
|
|
180
|
-
return
|
|
214
|
+
if (isDefined3(networkId)) {
|
|
215
|
+
return resolveGateway(networkId);
|
|
181
216
|
}
|
|
182
217
|
}, [networkId]);
|
|
183
218
|
const [gatewayViewer, rpcError] = usePromise3(async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useAddressBalance.ts","../../src/hooks/useCurrentBlock.ts","../../src/hooks/useHttpRpcRunner.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useSigner.ts","../../src/hooks/viewer/useCheckRpc.ts","../../src/hooks/viewer/useHttpRpcViewer.ts","../../src/hooks/viewer/useViewerFromWallet.ts"],"sourcesContent":["import type { Address } from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'\nimport { ShiftedBigInt } from '@xyo-network/chain-wrappers'\nimport type { AttoXL1, XyoViewer } from '@xyo-network/xl1-protocol'\nimport { useMemo, useState } from 'react'\n\nexport const useAddressBalance = (\n // address to get balance for\n address?: Address,\n // viewer to use for fetching balance\n viewer?: XyoViewer,\n // refresh balance trigger\n refresh?: number,\n) => {\n const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()\n const [loading, setLoading] = useState(false)\n\n const [, balancesError] = usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n setLoading(true)\n setBalancesResult(undefined)\n const balance = await viewer.accountBalance(address)\n setBalancesResult(balance as AttoXL1)\n setLoading(false)\n }, [address, viewer, refresh])\n\n useMemo(() => {\n if (balancesError) {\n setLoading(false)\n }\n }, [balancesError])\n\n const shiftedBigInt = useMemo(() => {\n if (typeof balancesResult !== 'bigint') return\n return new ShiftedBigInt(balancesResult, {\n places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,\n })\n }, [balancesResult])\n\n const balanceIntlFriendly = useMemo(() => {\n return shiftedBigInt?.toFullString()\n }, [shiftedBigInt])\n\n const shortBalanceIntlFriendly = useMemo(() => {\n return isUndefinedOrNull(balancesResult)\n ? undefined\n : (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()\n }, [shiftedBigInt])\n\n return {\n address,\n balanceForAddress: balancesResult,\n balanceIntlFriendly,\n shortBalanceIntlFriendly,\n error: balancesError,\n loading,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\n\nexport const useCurrentBlock = (refresh = 1, viewer?: XyoViewer) => {\n return usePromise(async () => {\n if (viewer && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcRunner = (url?: string) => {\n return useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoRunner(transport)\n }, [url])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { DefaultNetworkIds } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoNetwork } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useNetwork = (id?: DefaultNetworkIds) => {\n const network = useMemo(() => {\n if (isUndefined(id)) return\n return new MemoryXyoNetwork(id)\n }, [id])\n\n return network\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type { XyoConnectionProvider, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoConnectionProvider, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new MemoryXyoSigner(account) : undefined, [account])\n}\n","import { delay } from '@xylabs/delay'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { LocalNetwork, SequenceNetwork } from '@xyo-network/chain-network-model'\nimport {\n HttpRpcTransport, JsonRpcXyoViewer, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport {\n useEffect, useMemo, useState,\n} from 'react'\n\nconst INTERVAL = 5000 // 5 seconds\n\nconst localRpcEndpoint: string = `${LocalNetwork.url}/rpc`\nconst sequenceRpcEndpoint: string = `${SequenceNetwork.url}/rpc`\n\nexport const useCheckLocalRpc = () => {\n const isLocalProducer = useCheckRpc(localRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckSequenceRpc = () => {\n const isLocalProducer = useCheckRpc(sequenceRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckRpc = (endpoint?: string) => {\n const [isLocalProducer, setIsLocalProducer] = useState(false)\n const [error, setError] = useState<Error>()\n\n const viewer = useMemo(() => {\n if (isUndefined(endpoint)) return\n\n const transport = new HttpRpcTransport(endpoint, XyoViewerRpcSchemas)\n const viewer = new JsonRpcXyoViewer(transport)\n return viewer\n }, [endpoint])\n\n useEffect(() => {\n if (isUndefined(viewer)) return\n\n void (async () => {\n setError(undefined)\n while (!isLocalProducer) {\n try {\n const block = await viewer.currentBlock()\n setIsLocalProducer(isDefined(block))\n } catch (err) {\n setError(err as Error)\n setIsLocalProducer(false)\n }\n await delay(INTERVAL)\n }\n })()\n }, [viewer])\n\n return { isLocalProducer, error }\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport {\n HttpRpcTransport, JsonRpcXyoViewer, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcViewer = (url?: string) => {\n const resolvedViewer = useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, XyoViewerRpcSchemas)\n return new JsonRpcXyoViewer(transport)\n }, [url])\n\n return resolvedViewer\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n isDefined, isTruthy, isUndefined,\n} from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport { useEffect, useMemo } from 'react'\n\nconst gateways = () => globalThis.xyo?.client?.gateways\n\n/**\n * Creates a JsonRpcXyoViewer instance based on the provided networkId.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns An instance of XyoViewer if the networkId is found in wallet gateways\n * otherwise undefined.\n */\nexport const useViewerFromWallet = (networkId?: GatewayName) => {\n const networkGateway = useMemo(() => {\n if (isDefined(networkId) && isDefined(gateways()?.[networkId])) {\n return gateways()?.[networkId]\n }\n }, [networkId])\n\n const [gatewayViewer, rpcError] = usePromise(async () => {\n if (isUndefined(networkGateway)) return\n const connection = await networkGateway.connection()\n return connection.viewer\n }, [networkGateway])\n\n useEffect(() => {\n if (isTruthy(rpcError)) {\n console.error('Error creating viewer from wallet:', rpcError)\n }\n }, [rpcError])\n\n return gatewayViewer\n}\n"],"mappings":";AACA,SAAS,kBAAkB;AAC3B,SAAS,aAAa,yBAAyB;AAC/C,SAAS,qBAAqB;AAE9B,SAAS,SAAS,gBAAgB;AAE3B,IAAM,oBAAoB,CAE/B,SAEA,QAEA,YACG;AACH,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAyB;AACrE,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAE5C,QAAM,CAAC,EAAE,aAAa,IAAI,WAAW,YAAY;AAC/C,QAAI,YAAY,MAAM,KAAK,YAAY,OAAO,EAAG;AACjD,eAAW,IAAI;AACf,sBAAkB,MAAS;AAC3B,UAAM,UAAU,MAAM,OAAO,eAAe,OAAO;AACnD,sBAAkB,OAAkB;AACpC,eAAW,KAAK;AAAA,EAClB,GAAG,CAAC,SAAS,QAAQ,OAAO,CAAC;AAE7B,UAAQ,MAAM;AACZ,QAAI,eAAe;AACjB,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,aAAa,CAAC;AAElB,QAAM,gBAAgB,QAAQ,MAAM;AAClC,QAAI,OAAO,mBAAmB,SAAU;AACxC,WAAO,IAAI,cAAc,gBAAgB;AAAA,MACvC,QAAQ;AAAA,MAAI,YAAY;AAAA,MAAI,eAAe;AAAA,MAAG,aAAa;AAAA,MAAG,QAAQ,UAAU;AAAA,IAClF,CAAC;AAAA,EACH,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,sBAAsB,QAAQ,MAAM;AACxC,WAAO,eAAe,aAAa;AAAA,EACrC,GAAG,CAAC,aAAa,CAAC;AAElB,QAAM,2BAA2B,QAAQ,MAAM;AAC7C,WAAO,kBAAkB,cAAc,IACnC,SACC,iBAAiB,kBAAsB,iBAAiB,KAAM,aAAa,eAAe,cAAc;AAAA,EAC/G,GAAG,CAAC,aAAa,CAAC;AAElB,SAAO;AAAA,IACL;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,EACF;AACF;;;AC1DA,SAAS,cAAAA,mBAAkB;AAGpB,IAAM,kBAAkB,CAAC,UAAU,GAAG,WAAuB;AAClE,SAAOA,YAAW,YAAY;AAC5B,QAAI,UAAU,UAAU,GAAG;AACzB,YAAM,QAAQ,MAAM,OAAO,aAAa;AACxC,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC,QAAQ,OAAO,CAAC;AACtB;;;ACVA,SAAS,eAAAC,oBAAmB;AAC5B;AAAA,EACE;AAAA,EAAe;AAAA,EAAkB;AAAA,OAC5B;AACP,SAAS,WAAAC,gBAAe;AAEjB,IAAM,mBAAmB,CAAC,QAAiB;AAChD,SAAOA,SAAQ,MAAM;AACnB,QAAID,aAAY,GAAG,GAAG;AACpB;AAAA,IACF;AACA,UAAM,YAAY,IAAI,iBAAiB,GAAG,GAAG,QAAQ,aAAa;AAClE,WAAO,IAAI,iBAAiB,SAAS;AAAA,EACvC,GAAG,CAAC,GAAG,CAAC;AACV;;;ACdA,SAAS,eAAAE,oBAAmB;AAE5B,SAAS,wBAAwB;AACjC,SAAS,WAAAC,gBAAe;AAEjB,IAAM,aAAa,CAAC,OAA2B;AACpD,QAAM,UAAUA,SAAQ,MAAM;AAC5B,QAAID,aAAY,EAAE,EAAG;AACrB,WAAO,IAAI,iBAAiB,EAAE;AAAA,EAChC,GAAG,CAAC,EAAE,CAAC;AAEP,SAAO;AACT;;;ACVA,SAAS,uBAAuB;AAChC,SAAS,WAAAE,gBAAe;AAEjB,IAAM,YAAY,CAAC,WAAmC,YAA8B;AACzF,SAAOA,SAA+B,MAAM,UAAU,IAAI,gBAAgB,OAAO,IAAI,QAAW,CAAC,OAAO,CAAC;AAC3G;;;ACPA,SAAS,aAAa;AACtB,SAAS,WAAW,eAAAC,oBAAmB;AACvC,SAAS,cAAc,uBAAuB;AAC9C;AAAA,EACE,oBAAAC;AAAA,EAAkB;AAAA,EAAkB;AAAA,OAC/B;AACP;AAAA,EACE;AAAA,EAAW,WAAAC;AAAA,EAAS,YAAAC;AAAA,OACf;AAEP,IAAM,WAAW;AAEjB,IAAM,mBAA2B,GAAG,aAAa,GAAG;AACpD,IAAM,sBAA8B,GAAG,gBAAgB,GAAG;AAEnD,IAAM,mBAAmB,MAAM;AACpC,QAAM,kBAAkB,YAAY,gBAAgB;AACpD,SAAO;AACT;AAEO,IAAM,sBAAsB,MAAM;AACvC,QAAM,kBAAkB,YAAY,mBAAmB;AACvD,SAAO;AACT;AAEO,IAAM,cAAc,CAAC,aAAsB;AAChD,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,UAAS,KAAK;AAC5D,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAgB;AAE1C,QAAM,SAASD,SAAQ,MAAM;AAC3B,QAAIF,aAAY,QAAQ,EAAG;AAE3B,UAAM,YAAY,IAAIC,kBAAiB,UAAU,mBAAmB;AACpE,UAAMG,UAAS,IAAI,iBAAiB,SAAS;AAC7C,WAAOA;AAAA,EACT,GAAG,CAAC,QAAQ,CAAC;AAEb,YAAU,MAAM;AACd,QAAIJ,aAAY,MAAM,EAAG;AAEzB,UAAM,YAAY;AAChB,eAAS,MAAS;AAClB,aAAO,CAAC,iBAAiB;AACvB,YAAI;AACF,gBAAM,QAAQ,MAAM,OAAO,aAAa;AACxC,6BAAmB,UAAU,KAAK,CAAC;AAAA,QACrC,SAAS,KAAK;AACZ,mBAAS,GAAY;AACrB,6BAAmB,KAAK;AAAA,QAC1B;AACA,cAAM,MAAM,QAAQ;AAAA,MACtB;AAAA,IACF,GAAG;AAAA,EACL,GAAG,CAAC,MAAM,CAAC;AAEX,SAAO,EAAE,iBAAiB,MAAM;AAClC;;;ACxDA,SAAS,eAAAK,oBAAmB;AAC5B;AAAA,EACE,oBAAAC;AAAA,EAAkB,oBAAAC;AAAA,EAAkB,uBAAAC;AAAA,OAC/B;AACP,SAAS,WAAAC,gBAAe;AAEjB,IAAM,mBAAmB,CAAC,QAAiB;AAChD,QAAM,iBAAiBA,SAAQ,MAAM;AACnC,QAAIJ,aAAY,GAAG,GAAG;AACpB;AAAA,IACF;AACA,UAAM,YAAY,IAAIC,kBAAiB,GAAG,GAAG,QAAQE,oBAAmB;AACxE,WAAO,IAAID,kBAAiB,SAAS;AAAA,EACvC,GAAG,CAAC,GAAG,CAAC;AAER,SAAO;AACT;;;AChBA,SAAS,cAAAG,mBAAkB;AAC3B;AAAA,EACE,aAAAC;AAAA,EAAW;AAAA,EAAU,eAAAC;AAAA,OAChB;AAEP,SAAS,aAAAC,YAAW,WAAAC,gBAAe;AAEnC,IAAM,WAAW,MAAM,WAAW,KAAK,QAAQ;AAQxC,IAAM,sBAAsB,CAAC,cAA4B;AAC9D,QAAM,iBAAiBA,SAAQ,MAAM;AACnC,QAAIH,WAAU,SAAS,KAAKA,WAAU,SAAS,IAAI,SAAS,CAAC,GAAG;AAC9D,aAAO,SAAS,IAAI,SAAS;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,CAAC,eAAe,QAAQ,IAAID,YAAW,YAAY;AACvD,QAAIE,aAAY,cAAc,EAAG;AACjC,UAAM,aAAa,MAAM,eAAe,WAAW;AACnD,WAAO,WAAW;AAAA,EACpB,GAAG,CAAC,cAAc,CAAC;AAEnB,EAAAC,WAAU,MAAM;AACd,QAAI,SAAS,QAAQ,GAAG;AACtB,cAAQ,MAAM,sCAAsC,QAAQ;AAAA,IAC9D;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,SAAO;AACT;","names":["usePromise","isUndefined","useMemo","isUndefined","useMemo","useMemo","isUndefined","HttpRpcTransport","useMemo","useState","viewer","isUndefined","HttpRpcTransport","JsonRpcXyoViewer","XyoViewerRpcSchemas","useMemo","usePromise","isDefined","isUndefined","useEffect","useMemo"]}
|
|
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","../../src/hooks/viewer/resolveGateway.ts"],"sourcesContent":["import type { Address } from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'\nimport { ShiftedBigInt } from '@xyo-network/chain-wrappers'\nimport type { AttoXL1, XyoViewer } from '@xyo-network/xl1-protocol'\nimport { useMemo, useState } from 'react'\n\nexport const useAddressBalance = (\n // address to get balance for\n address?: Address,\n // viewer to use for fetching balance\n viewer?: XyoViewer,\n // refresh balance trigger\n refresh?: number,\n) => {\n const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()\n const [loading, setLoading] = useState(false)\n\n const [, balancesError] = usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n setLoading(true)\n setBalancesResult(undefined)\n const balance = await viewer.accountBalance(address)\n setBalancesResult(balance as AttoXL1)\n setLoading(false)\n }, [address, viewer, refresh])\n\n useMemo(() => {\n if (balancesError) {\n setLoading(false)\n }\n }, [balancesError])\n\n const shiftedBigInt = useMemo(() => {\n if (typeof balancesResult !== 'bigint') return\n return new ShiftedBigInt(balancesResult, {\n places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,\n })\n }, [balancesResult])\n\n const balanceIntlFriendly = useMemo(() => {\n return shiftedBigInt?.toFullString()\n }, [shiftedBigInt])\n\n const shortBalanceIntlFriendly = useMemo(() => {\n return isUndefinedOrNull(balancesResult)\n ? undefined\n : (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()\n }, [shiftedBigInt])\n\n return {\n address,\n balanceForAddress: balancesResult,\n balanceIntlFriendly,\n shortBalanceIntlFriendly,\n error: balancesError,\n loading,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\n\nexport const useCurrentBlock = (refresh = 1, viewer?: XyoViewer) => {\n return usePromise(async () => {\n if (viewer && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcRunner = (url?: string) => {\n return useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoRunner(transport)\n }, [url])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { DefaultNetworkIds } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoNetwork } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useNetwork = (id?: DefaultNetworkIds) => {\n const network = useMemo(() => {\n if (isUndefined(id)) return\n return new MemoryXyoNetwork(id)\n }, [id])\n\n return network\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type { XyoConnectionProvider, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoConnectionProvider, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new MemoryXyoSigner(account) : undefined, [account])\n}\n","import { delay } from '@xylabs/delay'\nimport { isDefined, isUndefined } from '@xylabs/typeof'\nimport { LocalNetwork, SequenceNetwork } from '@xyo-network/chain-network-model'\nimport {\n HttpRpcTransport, JsonRpcXyoViewer, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport {\n useEffect, useMemo, useState,\n} from 'react'\n\nconst INTERVAL = 5000 // 5 seconds\n\nconst localRpcEndpoint: string = `${LocalNetwork.url}/rpc`\nconst sequenceRpcEndpoint: string = `${SequenceNetwork.url}/rpc`\n\nexport const useCheckLocalRpc = () => {\n const isLocalProducer = useCheckRpc(localRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckSequenceRpc = () => {\n const isLocalProducer = useCheckRpc(sequenceRpcEndpoint)\n return isLocalProducer\n}\n\nexport const useCheckRpc = (endpoint?: string) => {\n const [isLocalProducer, setIsLocalProducer] = useState(false)\n const [error, setError] = useState<Error>()\n\n const viewer = useMemo(() => {\n if (isUndefined(endpoint)) return\n\n const transport = new HttpRpcTransport(endpoint, XyoViewerRpcSchemas)\n const viewer = new JsonRpcXyoViewer(transport)\n return viewer\n }, [endpoint])\n\n useEffect(() => {\n if (isUndefined(viewer)) return\n\n void (async () => {\n setError(undefined)\n while (!isLocalProducer) {\n try {\n const block = await viewer.currentBlock()\n setIsLocalProducer(isDefined(block))\n } catch (err) {\n setError(err as Error)\n setIsLocalProducer(false)\n }\n await delay(INTERVAL)\n }\n })()\n }, [viewer])\n\n return { isLocalProducer, error }\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport {\n HttpRpcTransport, JsonRpcXyoViewer, XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useHttpRpcViewer = (url?: string) => {\n const resolvedViewer = useMemo(() => {\n if (isUndefined(url)) {\n return\n }\n const transport = new HttpRpcTransport(`${url}/rpc`, XyoViewerRpcSchemas)\n return new JsonRpcXyoViewer(transport)\n }, [url])\n\n return resolvedViewer\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n isDefined, isTruthy, isUndefined,\n} from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport { useEffect, useMemo } from 'react'\n\nimport { resolveGateway } from './resolveGateway.ts'\n\n/**\n * Creates a JsonRpcXyoViewer instance based on the provided networkId.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns An instance of XyoViewer if the networkId is found in wallet gateways\n * otherwise undefined.\n */\nexport const useViewerFromWallet = (networkId?: GatewayName) => {\n const networkGateway = useMemo(() => {\n if (isDefined(networkId)) {\n return resolveGateway(networkId)\n }\n }, [networkId])\n\n const [gatewayViewer, rpcError] = usePromise(async () => {\n if (isUndefined(networkGateway)) return\n const connection = await networkGateway.connection()\n return connection.viewer\n }, [networkGateway])\n\n useEffect(() => {\n if (isTruthy(rpcError)) {\n console.error('Error creating viewer from wallet:', rpcError)\n }\n }, [rpcError])\n\n return gatewayViewer\n}\n","import { isDefined } from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport {\n JsonRpcXyoRunner, JsonRpcXyoViewer, LegacyPostMessageRpcTransport, MemoryXyoGateway, RpcXyoSigner, XyoConnection,\n} from '@xyo-network/xl1-rpc'\n\n/**\n * Check the global xyo object for gateways on the injected client.\n * @returns The gateways from the global xyo object, or undefined if it does not exist.\n */\nconst gateways = () => globalThis.xyo?.client?.gateways\n\n/**\n * Builds a gateway from the connection if it exists in the global xyo object.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.\n */\nconst buildGatewayFromConnection = (networkId: GatewayName) => {\n const connections = globalThis.xyo?.connections\n if (isDefined(connections) && isDefined(connections[networkId])) {\n // use the legacy post message transport to ensure compatibility with older implementations\n const legacyPostMessageRpcTransport = new LegacyPostMessageRpcTransport(networkId, undefined, globalThis.xyo.walletExtensionId() ?? '')\n const signer = new RpcXyoSigner(legacyPostMessageRpcTransport)\n const viewer = new JsonRpcXyoViewer(legacyPostMessageRpcTransport)\n const runner = new JsonRpcXyoRunner(legacyPostMessageRpcTransport)\n const connection = new XyoConnection({ viewer, runner })\n return new MemoryXyoGateway(signer, connection)\n }\n}\n\n/**\n * Retrieves a gateway from the wallet based on the provided networkId.\n * Includes fallback logic to build a gateway from the connection if it does not exist in\n * the global xyo object.\n * @param networkId - a network id like 'sequence', 'local', etc.\n * @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.\n */\nexport const resolveGateway = (networkId: GatewayName) => {\n const networkGateway = gateways()?.[networkId]\n if (isDefined(networkGateway)) {\n return networkGateway\n }\n const builtGateway = buildGatewayFromConnection(networkId)\n if (isDefined(builtGateway)) {\n return builtGateway\n }\n // If no gateway is found, log a warning\n console.warn(`No gateway found for networkId: ${networkId}`)\n}\n"],"mappings":"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","names":["usePromise","isUndefined","useMemo","isUndefined","useMemo","useMemo","isUndefined","HttpRpcTransport","useMemo","useState","viewer","isUndefined","HttpRpcTransport","JsonRpcXyoViewer","XyoViewerRpcSchemas","useMemo","usePromise","isDefined","isUndefined","useEffect","useMemo","isDefined","JsonRpcXyoRunner","JsonRpcXyoViewer","useMemo","isDefined","usePromise","isUndefined","useEffect"]}
|
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.10.
|
|
4
|
+
"version": "1.10.2",
|
|
5
5
|
"description": "XYO Layer One API",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -41,29 +41,29 @@
|
|
|
41
41
|
"src"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@xylabs/delay": "~5.0.
|
|
45
|
-
"@xylabs/hex": "~5.0.
|
|
44
|
+
"@xylabs/delay": "~5.0.3",
|
|
45
|
+
"@xylabs/hex": "~5.0.3",
|
|
46
46
|
"@xylabs/react-promise": "~7.0.0",
|
|
47
|
-
"@xylabs/typeof": "~5.0.
|
|
48
|
-
"@xyo-network/account-model": "~5.0.
|
|
49
|
-
"@xyo-network/chain-network-model": "~1.10.
|
|
50
|
-
"@xyo-network/chain-wrappers": "~1.10.
|
|
47
|
+
"@xylabs/typeof": "~5.0.3",
|
|
48
|
+
"@xyo-network/account-model": "~5.0.1",
|
|
49
|
+
"@xyo-network/chain-network-model": "~1.10.2",
|
|
50
|
+
"@xyo-network/chain-wrappers": "~1.10.2",
|
|
51
51
|
"@xyo-network/xl1-protocol": "~1.9.3",
|
|
52
|
-
"@xyo-network/xl1-rpc": "~1.10.
|
|
52
|
+
"@xyo-network/xl1-rpc": "~1.10.2",
|
|
53
53
|
"react": "~19.1.1"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@emotion/react": "~11.14.0",
|
|
57
57
|
"@emotion/styled": "~11.14.1",
|
|
58
|
-
"@mui/material": "~7.3.
|
|
58
|
+
"@mui/material": "~7.3.1",
|
|
59
59
|
"@storybook/react-vite": "~9.1.1",
|
|
60
60
|
"@types/react": "~19.1.9",
|
|
61
|
-
"@xylabs/ts-scripts-yarn3": "~7.0
|
|
62
|
-
"@xylabs/tsconfig": "~7.0
|
|
63
|
-
"@xylabs/tsconfig-dom": "~7.0
|
|
64
|
-
"@xylabs/tsconfig-react": "~7.0
|
|
65
|
-
"@xyo-network/chain-network-model": "~1.10.
|
|
66
|
-
"@xyo-network/react-chain-model": "~1.10.
|
|
61
|
+
"@xylabs/ts-scripts-yarn3": "~7.1.0",
|
|
62
|
+
"@xylabs/tsconfig": "~7.1.0",
|
|
63
|
+
"@xylabs/tsconfig-dom": "~7.1.0",
|
|
64
|
+
"@xylabs/tsconfig-react": "~7.1.0",
|
|
65
|
+
"@xyo-network/chain-network-model": "~1.10.2",
|
|
66
|
+
"@xyo-network/react-chain-model": "~1.10.2",
|
|
67
67
|
"typescript": "~5.9.2"
|
|
68
68
|
},
|
|
69
69
|
"packageManager": "yarn@4.6.0",
|
package/src/global.d.ts
CHANGED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { isDefined } from '@xylabs/typeof'
|
|
2
|
+
import type { GatewayName } from '@xyo-network/xl1-protocol'
|
|
3
|
+
import {
|
|
4
|
+
JsonRpcXyoRunner, JsonRpcXyoViewer, LegacyPostMessageRpcTransport, MemoryXyoGateway, RpcXyoSigner, XyoConnection,
|
|
5
|
+
} from '@xyo-network/xl1-rpc'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Check the global xyo object for gateways on the injected client.
|
|
9
|
+
* @returns The gateways from the global xyo object, or undefined if it does not exist.
|
|
10
|
+
*/
|
|
11
|
+
const gateways = () => globalThis.xyo?.client?.gateways
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Builds a gateway from the connection if it exists in the global xyo object.
|
|
15
|
+
* @param networkId - a network id like 'sequence', 'local', etc.
|
|
16
|
+
* @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.
|
|
17
|
+
*/
|
|
18
|
+
const buildGatewayFromConnection = (networkId: GatewayName) => {
|
|
19
|
+
const connections = globalThis.xyo?.connections
|
|
20
|
+
if (isDefined(connections) && isDefined(connections[networkId])) {
|
|
21
|
+
// use the legacy post message transport to ensure compatibility with older implementations
|
|
22
|
+
const legacyPostMessageRpcTransport = new LegacyPostMessageRpcTransport(networkId, undefined, globalThis.xyo.walletExtensionId() ?? '')
|
|
23
|
+
const signer = new RpcXyoSigner(legacyPostMessageRpcTransport)
|
|
24
|
+
const viewer = new JsonRpcXyoViewer(legacyPostMessageRpcTransport)
|
|
25
|
+
const runner = new JsonRpcXyoRunner(legacyPostMessageRpcTransport)
|
|
26
|
+
const connection = new XyoConnection({ viewer, runner })
|
|
27
|
+
return new MemoryXyoGateway(signer, connection)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Retrieves a gateway from the wallet based on the provided networkId.
|
|
33
|
+
* Includes fallback logic to build a gateway from the connection if it does not exist in
|
|
34
|
+
* the global xyo object.
|
|
35
|
+
* @param networkId - a network id like 'sequence', 'local', etc.
|
|
36
|
+
* @returns A MemoryXyoGateway instance if the connection exists, otherwise undefined.
|
|
37
|
+
*/
|
|
38
|
+
export const resolveGateway = (networkId: GatewayName) => {
|
|
39
|
+
const networkGateway = gateways()?.[networkId]
|
|
40
|
+
if (isDefined(networkGateway)) {
|
|
41
|
+
return networkGateway
|
|
42
|
+
}
|
|
43
|
+
const builtGateway = buildGatewayFromConnection(networkId)
|
|
44
|
+
if (isDefined(builtGateway)) {
|
|
45
|
+
return builtGateway
|
|
46
|
+
}
|
|
47
|
+
// If no gateway is found, log a warning
|
|
48
|
+
console.warn(`No gateway found for networkId: ${networkId}`)
|
|
49
|
+
}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
import type { GatewayName } from '@xyo-network/xl1-protocol'
|
|
6
6
|
import { useEffect, useMemo } from 'react'
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
import { resolveGateway } from './resolveGateway.ts'
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Creates a JsonRpcXyoViewer instance based on the provided networkId.
|
|
@@ -15,8 +15,8 @@ const gateways = () => globalThis.xyo?.client?.gateways
|
|
|
15
15
|
*/
|
|
16
16
|
export const useViewerFromWallet = (networkId?: GatewayName) => {
|
|
17
17
|
const networkGateway = useMemo(() => {
|
|
18
|
-
if (isDefined(networkId)
|
|
19
|
-
return
|
|
18
|
+
if (isDefined(networkId)) {
|
|
19
|
+
return resolveGateway(networkId)
|
|
20
20
|
}
|
|
21
21
|
}, [networkId])
|
|
22
22
|
|