@xyo-network/react-chain-provider 1.15.2 → 1.15.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +241 -7
  2. package/dist/browser/components/connected/ConnectAccountsStack.d.ts +14 -0
  3. package/dist/browser/components/connected/ConnectAccountsStack.d.ts.map +1 -0
  4. package/dist/browser/components/connected/ConnectAccountsStack.stories.d.ts +6 -0
  5. package/dist/browser/components/connected/ConnectAccountsStack.stories.d.ts.map +1 -0
  6. package/dist/browser/components/connected/account/Connected.d.ts +5 -0
  7. package/dist/browser/components/connected/account/Connected.d.ts.map +1 -0
  8. package/dist/browser/components/connected/account/index.d.ts +2 -0
  9. package/dist/browser/components/connected/account/index.d.ts.map +1 -0
  10. package/dist/browser/components/connected/index.d.ts +3 -0
  11. package/dist/browser/components/connected/index.d.ts.map +1 -0
  12. package/dist/browser/components/index.d.ts +2 -0
  13. package/dist/browser/components/index.d.ts.map +1 -0
  14. package/dist/browser/hooks/client/helpers/findCaveat.d.ts +4 -0
  15. package/dist/browser/hooks/client/helpers/findCaveat.d.ts.map +1 -0
  16. package/dist/browser/hooks/client/helpers/index.d.ts +2 -0
  17. package/dist/browser/hooks/client/helpers/index.d.ts.map +1 -0
  18. package/dist/browser/hooks/client/index.d.ts +4 -0
  19. package/dist/browser/hooks/client/index.d.ts.map +1 -0
  20. package/dist/browser/hooks/client/permissions/index.d.ts +3 -0
  21. package/dist/browser/hooks/client/permissions/index.d.ts.map +1 -0
  22. package/dist/browser/hooks/client/permissions/usePermissions.d.ts +7 -0
  23. package/dist/browser/hooks/client/permissions/usePermissions.d.ts.map +1 -0
  24. package/dist/browser/hooks/client/permissions/usePermissionsAccounts.d.ts +2 -0
  25. package/dist/browser/hooks/client/permissions/usePermissionsAccounts.d.ts.map +1 -0
  26. package/dist/browser/hooks/{useClient.d.ts → client/useClient.d.ts} +2 -1
  27. package/dist/browser/hooks/client/useClient.d.ts.map +1 -0
  28. package/dist/browser/hooks/{useGateway.d.ts → client/useGateway.d.ts} +2 -1
  29. package/dist/browser/hooks/client/useGateway.d.ts.map +1 -0
  30. package/dist/browser/hooks/helpers/getXyoClient.d.ts +4 -2
  31. package/dist/browser/hooks/helpers/getXyoClient.d.ts.map +1 -1
  32. package/dist/browser/hooks/index.d.ts +1 -2
  33. package/dist/browser/hooks/index.d.ts.map +1 -1
  34. package/dist/browser/hooks/useConnectAccount.d.ts +4 -2
  35. package/dist/browser/hooks/useConnectAccount.d.ts.map +1 -1
  36. package/dist/browser/hooks/useCurrentBlock.d.ts +1 -1
  37. package/dist/browser/hooks/useCurrentBlock.d.ts.map +1 -1
  38. package/dist/browser/hooks/viewer/UseStepRewardWeightTest.stories.d.ts +12 -0
  39. package/dist/browser/hooks/viewer/UseStepRewardWeightTest.stories.d.ts.map +1 -0
  40. package/dist/browser/hooks/viewer/useViewerFromWallet.d.ts +1 -1
  41. package/dist/browser/hooks/viewer/useViewerFromWallet.d.ts.map +1 -1
  42. package/dist/browser/hooks/viewer/useViewerFromWallet.stories.d.ts.map +1 -1
  43. package/dist/browser/index.d.ts +1 -0
  44. package/dist/browser/index.d.ts.map +1 -1
  45. package/dist/browser/index.mjs +233 -144
  46. package/dist/browser/index.mjs.map +1 -1
  47. package/package.json +31 -22
  48. package/src/components/connected/ConnectAccountsStack.stories.tsx +16 -0
  49. package/src/components/connected/ConnectAccountsStack.tsx +41 -0
  50. package/src/components/connected/account/Connected.tsx +19 -0
  51. package/src/components/connected/account/index.ts +1 -0
  52. package/src/components/connected/index.ts +2 -0
  53. package/src/components/index.ts +1 -0
  54. package/src/hooks/client/helpers/findCaveat.ts +19 -0
  55. package/src/hooks/client/helpers/index.ts +1 -0
  56. package/src/hooks/client/index.ts +3 -0
  57. package/src/hooks/client/permissions/index.ts +2 -0
  58. package/src/hooks/client/permissions/usePermissions.ts +14 -0
  59. package/src/hooks/client/permissions/usePermissionsAccounts.ts +38 -0
  60. package/src/hooks/{useClient.ts → client/useClient.ts} +15 -7
  61. package/src/hooks/{useGateway.ts → client/useGateway.ts} +4 -3
  62. package/src/hooks/helpers/getXyoClient.ts +9 -6
  63. package/src/hooks/index.ts +1 -2
  64. package/src/hooks/useConnectAccount.ts +11 -10
  65. package/src/hooks/useCurrentBlock.ts +3 -2
  66. package/src/hooks/viewer/UseStepRewardWeightTest.stories.tsx +82 -0
  67. package/src/hooks/viewer/useViewerFromWallet.stories.tsx +15 -8
  68. package/src/hooks/viewer/useViewerFromWallet.ts +12 -22
  69. package/src/index.ts +1 -0
  70. package/dist/browser/hooks/UseConnectAccount.stories.d.ts +0 -9
  71. package/dist/browser/hooks/UseConnectAccount.stories.d.ts.map +0 -1
  72. package/dist/browser/hooks/useClient.d.ts.map +0 -1
  73. package/dist/browser/hooks/useGateway.d.ts.map +0 -1
  74. package/dist/browser/hooks/viewer/resolveGateway.d.ts +0 -11
  75. package/dist/browser/hooks/viewer/resolveGateway.d.ts.map +0 -1
  76. package/src/hooks/UseConnectAccount.stories.tsx +0 -35
  77. package/src/hooks/viewer/resolveGateway.ts +0 -54
@@ -1,12 +1,45 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
+ // src/components/connected/account/Connected.tsx
5
+ import { Stack, Tooltip, Typography } from "@mui/material";
6
+ import { EthAddressWrapper } from "@xylabs/eth-address";
7
+ import { BlockiesAvatarAddress } from "@xyo-network/react-chain-blockies";
8
+ import React from "react";
9
+ var ConnectedAccount = /* @__PURE__ */ __name(({ address }) => {
10
+ const shortenedAddress = `${EthAddressWrapper.fromString(address)?.toShortString(4)}`;
11
+ return /* @__PURE__ */ React.createElement(Stack, {
12
+ direction: "row",
13
+ alignItems: "center",
14
+ spacing: 1
15
+ }, /* @__PURE__ */ React.createElement(BlockiesAvatarAddress, {
16
+ address,
17
+ size: 21
18
+ }), /* @__PURE__ */ React.createElement(Tooltip, {
19
+ title: address
20
+ }, /* @__PURE__ */ React.createElement(Typography, {
21
+ color: "textSecondary",
22
+ variant: "caption",
23
+ fontFamily: "monospace"
24
+ }, shortenedAddress)));
25
+ }, "ConnectedAccount");
26
+
27
+ // src/components/connected/ConnectAccountsStack.tsx
28
+ import { Stack as Stack2 } from "@mui/material";
29
+ import { ButtonEx } from "@xylabs/react-button";
30
+ import { isDefined as isDefined5 } from "@xylabs/typeof";
31
+ import { ErrorRender } from "@xyo-network/react-error";
32
+ import React2 from "react";
33
+
34
+ // src/hooks/client/useClient.ts
35
+ import { useSyncExternalStore } from "react";
36
+
4
37
  // src/hooks/helpers/getXyoClient.ts
5
- var CLIENT_LISTENER_TIMEOUT = 5e3;
38
+ var CLIENT_LISTENER_TIMEOUT = 500;
6
39
  var hasXyoClient = /* @__PURE__ */ __name(() => {
7
40
  return "client" in globalThis.xyo;
8
41
  }, "hasXyoClient");
9
- var listenForClientInjection = /* @__PURE__ */ __name((onClientReady, onTimeout) => {
42
+ var listenForClientInjection = /* @__PURE__ */ __name((onClientReady, timeout, onTimeout) => {
10
43
  let resolved = false;
11
44
  const listener = /* @__PURE__ */ __name(() => {
12
45
  onClientReady();
@@ -17,19 +50,148 @@ var listenForClientInjection = /* @__PURE__ */ __name((onClientReady, onTimeout)
17
50
  if (!resolved) {
18
51
  onTimeout();
19
52
  }
20
- }, CLIENT_LISTENER_TIMEOUT);
53
+ }, timeout);
21
54
  }, "listenForClientInjection");
22
- async function getXyoClient() {
23
- return hasXyoClient() ? globalThis.xyo.client : await new Promise((resolve, reject) => {
55
+ async function getXyoClient(timeout = CLIENT_LISTENER_TIMEOUT) {
56
+ return hasXyoClient() ? globalThis.xyo.client : await new Promise((resolve) => {
24
57
  listenForClientInjection(() => {
25
58
  resolve(globalThis.xyo.client);
26
- }, () => {
27
- reject(new Error("XYO Client not installed"));
59
+ }, timeout, () => {
60
+ resolve(null);
28
61
  });
29
62
  });
30
63
  }
31
64
  __name(getXyoClient, "getXyoClient");
32
65
 
66
+ // src/hooks/client/useClient.ts
67
+ var currentState = {
68
+ client: void 0,
69
+ error: null,
70
+ isLoading: false,
71
+ timedout: false
72
+ };
73
+ var listeners = /* @__PURE__ */ new Set();
74
+ var emitChange = /* @__PURE__ */ __name(() => {
75
+ for (const listener of listeners) listener();
76
+ }, "emitChange");
77
+ var updateState = /* @__PURE__ */ __name((newState) => {
78
+ currentState = {
79
+ ...currentState,
80
+ ...newState
81
+ };
82
+ emitChange();
83
+ }, "updateState");
84
+ var initializeClient = /* @__PURE__ */ __name(async (timeout) => {
85
+ if (currentState.isLoading || currentState.client) return;
86
+ updateState({
87
+ isLoading: true,
88
+ error: null
89
+ });
90
+ try {
91
+ const client = await getXyoClient(timeout);
92
+ if (client === null) {
93
+ updateState({
94
+ timedout: true,
95
+ isLoading: false
96
+ });
97
+ return;
98
+ }
99
+ updateState({
100
+ client,
101
+ isLoading: false,
102
+ error: null
103
+ });
104
+ } catch (error) {
105
+ console.error("Error initializing XyoClient", error);
106
+ updateState({
107
+ error,
108
+ isLoading: false
109
+ });
110
+ }
111
+ }, "initializeClient");
112
+ var subscribe = /* @__PURE__ */ __name((listener, timeout) => {
113
+ listeners.add(listener);
114
+ void initializeClient(timeout);
115
+ return () => {
116
+ listeners.delete(listener);
117
+ };
118
+ }, "subscribe");
119
+ var getSnapshot = /* @__PURE__ */ __name(() => currentState, "getSnapshot");
120
+ var useClient = /* @__PURE__ */ __name((timeout) => {
121
+ const subscribeWithTimeout = /* @__PURE__ */ __name((listener) => subscribe(listener, timeout), "subscribeWithTimeout");
122
+ return useSyncExternalStore(subscribeWithTimeout, getSnapshot);
123
+ }, "useClient");
124
+
125
+ // src/hooks/client/permissions/usePermissions.ts
126
+ var usePermissions = /* @__PURE__ */ __name(() => {
127
+ const { client, isLoading, error, timedout } = useClient();
128
+ const permissions = client?.permissions;
129
+ return {
130
+ permissions,
131
+ isLoading,
132
+ error,
133
+ timedout
134
+ };
135
+ }, "usePermissions");
136
+
137
+ // src/hooks/client/permissions/usePermissionsAccounts.ts
138
+ import { usePromise } from "@xylabs/react-promise";
139
+ import { isArray, isDefined as isDefined2, isDefinedNotNull, isString } from "@xylabs/typeof";
140
+
141
+ // src/hooks/client/helpers/findCaveat.ts
142
+ import { isDefined } from "@xylabs/typeof";
143
+ var findCaveat = /* @__PURE__ */ __name(async (permissions, targetCapability, targetCaveatType) => {
144
+ const existingPermissions = await permissions.getPermissions();
145
+ if (isDefined(existingPermissions) && existingPermissions.length > 0) {
146
+ const foundPermissions = existingPermissions.find((p) => p.parentCapability === targetCapability);
147
+ if (isDefined(foundPermissions)) {
148
+ return foundPermissions.caveats?.find((caveat) => caveat.type === targetCaveatType)?.value ?? [];
149
+ }
150
+ }
151
+ return existingPermissions;
152
+ }, "findCaveat");
153
+
154
+ // src/hooks/client/permissions/usePermissionsAccounts.ts
155
+ var validateRestrictedAccounts = /* @__PURE__ */ __name((restrictedAccounts) => {
156
+ if (isDefined2(restrictedAccounts)) {
157
+ if (isArray(restrictedAccounts) && restrictedAccounts.every(isString)) {
158
+ return restrictedAccounts;
159
+ }
160
+ throw new Error(`Unrecognized format for restrictReturnedAccounts caveat found on permissions.
161
+
162
+ Should be an array of strings: ${JSON.stringify(restrictedAccounts)}`);
163
+ }
164
+ return [];
165
+ }, "validateRestrictedAccounts");
166
+ var useAccountPermissions = /* @__PURE__ */ __name(() => {
167
+ const { permissions, error } = usePermissions();
168
+ return usePromise(async () => {
169
+ if (isDefinedNotNull(error)) throw error;
170
+ if (isDefined2(permissions)) {
171
+ const restrictedAccounts = await findCaveat(
172
+ permissions,
173
+ // TODO - extract to constant in protocol package
174
+ "xyoWallet_getAccounts",
175
+ "restrictReturnedAccounts"
176
+ );
177
+ return validateRestrictedAccounts(restrictedAccounts);
178
+ }
179
+ }, [
180
+ permissions
181
+ ]);
182
+ }, "useAccountPermissions");
183
+
184
+ // src/hooks/client/useGateway.ts
185
+ var useGateway = /* @__PURE__ */ __name((gatewayName, timeout) => {
186
+ const { client, isLoading, error, timedout } = useClient(timeout);
187
+ return {
188
+ gateway: gatewayName ? client?.gateways?.[gatewayName] : void 0,
189
+ isLoading,
190
+ error,
191
+ timedout
192
+ };
193
+ }, "useGateway");
194
+
33
195
  // src/hooks/useAddressBalance.ts
34
196
  import { isUndefined, isUndefinedOrNull } from "@xylabs/typeof";
35
197
  import { ShiftedBigInt } from "@xyo-network/xl1-protocol";
@@ -101,80 +263,17 @@ var useAddressBalance = /* @__PURE__ */ __name((address, viewer, refresh) => {
101
263
  };
102
264
  }, "useAddressBalance");
103
265
 
104
- // src/hooks/useClient.ts
105
- import { useSyncExternalStore } from "react";
106
- var currentState = {
107
- client: void 0,
108
- error: null,
109
- isLoading: false
110
- };
111
- var listeners = /* @__PURE__ */ new Set();
112
- var emitChange = /* @__PURE__ */ __name(() => {
113
- for (const listener of listeners) listener();
114
- }, "emitChange");
115
- var updateState = /* @__PURE__ */ __name((newState) => {
116
- currentState = {
117
- ...currentState,
118
- ...newState
119
- };
120
- emitChange();
121
- }, "updateState");
122
- var initializeClient = /* @__PURE__ */ __name(async () => {
123
- if (currentState.isLoading || currentState.client) return;
124
- updateState({
125
- isLoading: true,
126
- error: null
127
- });
128
- try {
129
- const client = await getXyoClient();
130
- updateState({
131
- client,
132
- isLoading: false,
133
- error: null
134
- });
135
- } catch (error) {
136
- updateState({
137
- error,
138
- isLoading: false
139
- });
140
- }
141
- }, "initializeClient");
142
- var subscribe = /* @__PURE__ */ __name((listener) => {
143
- listeners.add(listener);
144
- void initializeClient();
145
- return () => {
146
- listeners.delete(listener);
147
- };
148
- }, "subscribe");
149
- var getSnapshot = /* @__PURE__ */ __name(() => currentState, "getSnapshot");
150
- var useClient = /* @__PURE__ */ __name(() => {
151
- return useSyncExternalStore(subscribe, getSnapshot);
152
- }, "useClient");
153
-
154
266
  // src/hooks/useConnectAccount.ts
155
- import { isUndefined as isUndefined2 } from "@xylabs/typeof";
267
+ import { assertEx } from "@xylabs/assert";
156
268
  import { MainNetwork } from "@xyo-network/chain-network-model";
157
269
  import { useCallback, useState as useState2 } from "react";
158
-
159
- // src/hooks/useGateway.ts
160
- var useGateway = /* @__PURE__ */ __name((gatewayName) => {
161
- const { client, isLoading, error } = useClient();
162
- return {
163
- gateway: gatewayName ? client?.gateways?.[gatewayName] : void 0,
164
- isLoading,
165
- error
166
- };
167
- }, "useGateway");
168
-
169
- // src/hooks/useConnectAccount.ts
170
- var useConnectAccount = /* @__PURE__ */ __name((gatewayName = MainNetwork.id) => {
171
- const { gateway, error } = useGateway(gatewayName);
270
+ var useConnectAccount = /* @__PURE__ */ __name((gatewayName = MainNetwork.id, timeout) => {
271
+ const { gateway, error, timedout } = useGateway(gatewayName, timeout);
272
+ const [accountPermissions, accountPermissionsError] = useAccountPermissions();
172
273
  const [address, setAddress] = useState2();
173
274
  const connectSigner = useCallback(async () => {
174
- if (isUndefined2(gateway)) {
175
- throw new Error(`Gateway ${gatewayName} is not available`);
176
- }
177
- const signer = await gateway.signer();
275
+ const assertedGateway = assertEx(gateway, () => `Gateway ${gatewayName} is not available`);
276
+ const signer = await assertedGateway.signer();
178
277
  const address2 = await signer.address();
179
278
  setAddress(address2);
180
279
  return address2;
@@ -183,17 +282,20 @@ var useConnectAccount = /* @__PURE__ */ __name((gatewayName = MainNetwork.id) =>
183
282
  gatewayName
184
283
  ]);
185
284
  return {
186
- address,
285
+ address: accountPermissions?.[0] ?? address,
187
286
  connectSigner,
188
- error
287
+ error: error ?? accountPermissionsError,
288
+ gateway,
289
+ timedout
189
290
  };
190
291
  }, "useConnectAccount");
191
292
 
192
293
  // src/hooks/useCurrentBlock.ts
193
- import { usePromise } from "@xylabs/react-promise";
294
+ import { usePromise as usePromise2 } from "@xylabs/react-promise";
295
+ import { isDefinedNotNull as isDefinedNotNull2 } from "@xylabs/typeof";
194
296
  var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
195
- return usePromise(async () => {
196
- if (viewer && refresh > 0) {
297
+ return usePromise2(async () => {
298
+ if (isDefinedNotNull2(viewer) && refresh > 0) {
197
299
  const block = await viewer.currentBlock();
198
300
  return block;
199
301
  }
@@ -204,12 +306,12 @@ var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
204
306
  }, "useCurrentBlock");
205
307
 
206
308
  // src/hooks/useHttpRpcRunner.ts
207
- import { isUndefined as isUndefined3 } from "@xylabs/typeof";
309
+ import { isUndefined as isUndefined2 } from "@xylabs/typeof";
208
310
  import { AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner } from "@xyo-network/xl1-rpc";
209
311
  import { useMemo as useMemo2 } from "react";
210
312
  var useHttpRpcRunner = /* @__PURE__ */ __name((url) => {
211
313
  return useMemo2(() => {
212
- if (isUndefined3(url)) {
314
+ if (isUndefined2(url)) {
213
315
  return;
214
316
  }
215
317
  const transport = new HttpRpcTransport(`${url}/rpc`, AllRpcSchemas);
@@ -220,12 +322,12 @@ var useHttpRpcRunner = /* @__PURE__ */ __name((url) => {
220
322
  }, "useHttpRpcRunner");
221
323
 
222
324
  // src/hooks/useNetwork.ts
223
- import { isUndefined as isUndefined4 } from "@xylabs/typeof";
325
+ import { isUndefined as isUndefined3 } from "@xylabs/typeof";
224
326
  import { MemoryXyoNetwork } from "@xyo-network/xl1-rpc";
225
327
  import { useMemo as useMemo3 } from "react";
226
328
  var useNetwork = /* @__PURE__ */ __name((id) => {
227
329
  const network = useMemo3(() => {
228
- if (isUndefined4(id)) return;
330
+ if (isUndefined3(id)) return;
229
331
  return new MemoryXyoNetwork(id);
230
332
  }, [
231
333
  id
@@ -244,7 +346,7 @@ var useSigner = /* @__PURE__ */ __name((_provider, account) => {
244
346
 
245
347
  // src/hooks/viewer/useCheckRpc.ts
246
348
  import { delay } from "@xylabs/delay";
247
- import { isDefined, isUndefined as isUndefined5 } from "@xylabs/typeof";
349
+ import { isDefined as isDefined3, isUndefined as isUndefined4 } from "@xylabs/typeof";
248
350
  import { LocalNetwork, SequenceNetwork } from "@xyo-network/chain-network-model";
249
351
  import { HttpRpcTransport as HttpRpcTransport2, JsonRpcXyoViewer, XyoViewerRpcSchemas } from "@xyo-network/xl1-rpc";
250
352
  import { useEffect as useEffect2, useMemo as useMemo5, useState as useState3 } from "react";
@@ -263,7 +365,7 @@ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
263
365
  const [isLocalProducer, setIsLocalProducer] = useState3(false);
264
366
  const [error, setError] = useState3();
265
367
  const viewer = useMemo5(() => {
266
- if (isUndefined5(endpoint)) return;
368
+ if (isUndefined4(endpoint)) return;
267
369
  const transport = new HttpRpcTransport2(endpoint, XyoViewerRpcSchemas);
268
370
  const viewer2 = new JsonRpcXyoViewer(transport);
269
371
  return viewer2;
@@ -271,13 +373,13 @@ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
271
373
  endpoint
272
374
  ]);
273
375
  useEffect2(() => {
274
- if (isUndefined5(viewer)) return;
376
+ if (isUndefined4(viewer)) return;
275
377
  void (async () => {
276
378
  setError(void 0);
277
379
  while (!isLocalProducer) {
278
380
  try {
279
381
  const block = await viewer.currentBlock();
280
- setIsLocalProducer(isDefined(block));
382
+ setIsLocalProducer(isDefined3(block));
281
383
  } catch (err) {
282
384
  setError(err);
283
385
  setIsLocalProducer(false);
@@ -295,12 +397,12 @@ var useCheckRpc = /* @__PURE__ */ __name((endpoint) => {
295
397
  }, "useCheckRpc");
296
398
 
297
399
  // src/hooks/viewer/useHttpRpcViewer.ts
298
- import { isUndefined as isUndefined6 } from "@xylabs/typeof";
400
+ import { isUndefined as isUndefined5 } from "@xylabs/typeof";
299
401
  import { HttpRpcTransport as HttpRpcTransport3, JsonRpcXyoViewer as JsonRpcXyoViewer2, XyoViewerRpcSchemas as XyoViewerRpcSchemas2 } from "@xyo-network/xl1-rpc";
300
402
  import { useMemo as useMemo6 } from "react";
301
403
  var useHttpRpcViewer = /* @__PURE__ */ __name((url) => {
302
404
  const resolvedViewer = useMemo6(() => {
303
- if (isUndefined6(url)) {
405
+ if (isUndefined5(url)) {
304
406
  return;
305
407
  }
306
408
  const transport = new HttpRpcTransport3(`${url}/rpc`, XyoViewerRpcSchemas2);
@@ -312,68 +414,54 @@ var useHttpRpcViewer = /* @__PURE__ */ __name((url) => {
312
414
  }, "useHttpRpcViewer");
313
415
 
314
416
  // src/hooks/viewer/useViewerFromWallet.ts
315
- import { usePromise as usePromise2 } from "@xylabs/react-promise";
316
- import { isDefined as isDefined3, isTruthy, isUndefined as isUndefined7 } from "@xylabs/typeof";
317
- import { useEffect as useEffect3, useMemo as useMemo7 } from "react";
318
-
319
- // src/hooks/viewer/resolveGateway.ts
320
- import { isDefined as isDefined2 } from "@xylabs/typeof";
321
- import { JsonRpcXyoRunner as JsonRpcXyoRunner2, JsonRpcXyoViewer as JsonRpcXyoViewer3, LegacyPostMessageRpcTransport, MemoryXyoGateway, RpcXyoSigner, XyoBaseConnection } from "@xyo-network/xl1-rpc";
322
- var gateways = /* @__PURE__ */ __name(() => globalThis.xyo?.client?.gateways, "gateways");
323
- var buildGatewayFromConnection = /* @__PURE__ */ __name((networkId) => {
324
- const connections = globalThis.xyo?.connections;
325
- if (isDefined2(connections) && isDefined2(connections[networkId])) {
326
- const legacyPostMessageRpcTransport = new LegacyPostMessageRpcTransport(networkId, globalThis.xyo.walletExtensionId() ?? "");
327
- const signer = new RpcXyoSigner(legacyPostMessageRpcTransport);
328
- const viewer = new JsonRpcXyoViewer3(legacyPostMessageRpcTransport);
329
- const runner = new JsonRpcXyoRunner2(legacyPostMessageRpcTransport);
330
- const connection = new XyoBaseConnection({
331
- viewer,
332
- runner
333
- });
334
- return new MemoryXyoGateway(signer, connection);
335
- }
336
- }, "buildGatewayFromConnection");
337
- var resolveGateway = /* @__PURE__ */ __name((networkId) => {
338
- const networkGateway = gateways()?.[networkId];
339
- if (isDefined2(networkGateway)) {
340
- return networkGateway;
341
- }
342
- const builtGateway = buildGatewayFromConnection(networkId);
343
- if (isDefined2(builtGateway)) {
344
- return builtGateway;
345
- }
346
- console.warn(`No gateway found for networkId: ${networkId}`);
347
- }, "resolveGateway");
348
-
349
- // src/hooks/viewer/useViewerFromWallet.ts
417
+ import { usePromise as usePromise3 } from "@xylabs/react-promise";
418
+ import { isDefined as isDefined4, isDefinedNotNull as isDefinedNotNull3 } from "@xylabs/typeof";
350
419
  var useViewerFromWallet = /* @__PURE__ */ __name((networkId) => {
351
- const networkGateway = useMemo7(() => {
352
- if (isDefined3(networkId)) {
353
- return resolveGateway(networkId);
420
+ const { gateway, error, isLoading } = useGateway(networkId);
421
+ return usePromise3(async () => {
422
+ if (isDefinedNotNull3(error)) return null;
423
+ if (isLoading) return;
424
+ if (isDefined4(gateway) && isDefined4(networkId)) {
425
+ const connection = await gateway?.connection();
426
+ return connection?.viewer;
354
427
  }
355
428
  }, [
429
+ gateway,
356
430
  networkId
357
431
  ]);
358
- const [gatewayViewer, rpcError] = usePromise2(async () => {
359
- if (isUndefined7(networkGateway)) return;
360
- const connection = await networkGateway.connection();
361
- return connection.viewer;
362
- }, [
363
- networkGateway
364
- ]);
365
- useEffect3(() => {
366
- if (isTruthy(rpcError)) {
367
- console.error("Error creating viewer from wallet:", rpcError);
368
- }
369
- }, [
370
- rpcError
371
- ]);
372
- return gatewayViewer;
373
432
  }, "useViewerFromWallet");
433
+
434
+ // src/components/connected/ConnectAccountsStack.tsx
435
+ var DefaultConnectComponent = /* @__PURE__ */ __name((props) => /* @__PURE__ */ React2.createElement(ButtonEx, {
436
+ variant: "contained",
437
+ size: "small",
438
+ ...props
439
+ }), "DefaultConnectComponent");
440
+ var ConnectAccountsStack = /* @__PURE__ */ __name(({ AccountComponent = ConnectedAccount, ConnectComponent = DefaultConnectComponent, timeout, ...props }) => {
441
+ const { address, connectSigner, error, timedout } = useConnectAccount(void 0, timeout);
442
+ return /* @__PURE__ */ React2.createElement(Stack2, {
443
+ direction: "row",
444
+ alignItems: "start",
445
+ spacing: 2,
446
+ ...props
447
+ }, isDefined5(address) ? /* @__PURE__ */ React2.createElement(AccountComponent, {
448
+ address
449
+ }) : /* @__PURE__ */ React2.createElement(ConnectComponent, {
450
+ onClick: /* @__PURE__ */ __name(() => void connectSigner(), "onClick")
451
+ }, "Connect"), /* @__PURE__ */ React2.createElement(ErrorRender, {
452
+ error: timedout ? new Error("Gateway Not Found") : void 0,
453
+ scope: "ConnectSigner:notFound"
454
+ }), /* @__PURE__ */ React2.createElement(ErrorRender, {
455
+ error,
456
+ scope: "ConnectSigner:error"
457
+ }));
458
+ }, "ConnectAccountsStack");
374
459
  export {
460
+ ConnectAccountsStack,
461
+ ConnectedAccount,
375
462
  getXyoClient,
376
463
  listenForClientInjection,
464
+ useAccountPermissions,
377
465
  useAddressBalance,
378
466
  useCheckLocalRpc,
379
467
  useCheckRpc,
@@ -385,6 +473,7 @@ export {
385
473
  useHttpRpcRunner,
386
474
  useHttpRpcViewer,
387
475
  useNetwork,
476
+ usePermissions,
388
477
  useSigner,
389
478
  useViewerFromWallet
390
479
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/helpers/getXyoClient.ts","../../src/hooks/useAddressBalance.ts","../../src/hooks/useClient.ts","../../src/hooks/useConnectAccount.ts","../../src/hooks/useGateway.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 { XyoClient } from '@xyo-network/xl1-protocol'\n\nconst CLIENT_LISTENER_TIMEOUT = 5000\n\nconst hasXyoClient = () => {\n return 'client' in globalThis.xyo\n}\n\nexport const listenForClientInjection = (onClientReady: () => void, onTimeout: () => void) => {\n let resolved = false\n const listener: EventListener = () => {\n onClientReady()\n resolved = true\n }\n globalThis.addEventListener('xyo:plugin-ready', listener)\n setTimeout(() => {\n if (!resolved) {\n onTimeout()\n }\n }, CLIENT_LISTENER_TIMEOUT)\n}\n\nexport async function getXyoClient(): Promise<XyoClient | undefined> {\n return hasXyoClient()\n ? globalThis.xyo.client\n // listen for the XyoWallet to be injected\n : await new Promise<XyoClient | undefined>((resolve, reject) => {\n listenForClientInjection(\n () => {\n resolve(globalThis.xyo.client)\n },\n () => {\n reject(new Error('XYO Client not installed'))\n },\n )\n })\n}\n","import type { Address } from '@xylabs/hex'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'\nimport type { AttoXL1, XyoViewer } from '@xyo-network/xl1-protocol'\nimport { ShiftedBigInt } from '@xyo-network/xl1-protocol'\nimport {\n useEffect, useMemo, useState,\n} 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 const [balancesError, setBalancesError] = useState<Error>()\n\n useEffect(() => {\n let isCurrent = true\n if (isUndefined(viewer) || isUndefined(address)) return\n // Ensure the render is the current one before setting the state.\n // This solves the issue of overlapping calls where a previous call takes\n // longer than a subsequent one and returns a state value. Now, the latest\n // result is always returned.\n (viewer.accountBalance(address) as Promise<AttoXL1>).then((result) => {\n if (isCurrent) {\n setBalancesResult(result as AttoXL1)\n setLoading(false)\n }\n })\n .catch((err) => {\n if (isCurrent) {\n console.error('Error in queued call:', err)\n setBalancesResult(undefined)\n setBalancesError(err)\n setLoading(false)\n }\n })\n\n return () => {\n isCurrent = false\n }\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 type { XyoClient } from '@xyo-network/xl1-protocol'\nimport { useSyncExternalStore } from 'react'\n\nimport { getXyoClient } from './helpers/index.ts'\n\ninterface ClientState {\n client?: XyoClient\n error: Error | null\n isLoading: boolean\n}\n\nlet currentState: ClientState = {\n client: undefined,\n error: null,\n isLoading: false,\n}\n\nconst listeners = new Set<() => void>()\n\nconst emitChange = () => {\n for (const listener of listeners) listener()\n}\n\nconst updateState = (newState: Partial<ClientState>) => {\n currentState = { ...currentState, ...newState }\n emitChange()\n}\n\nconst initializeClient = async () => {\n if (currentState.isLoading || currentState.client) return\n\n updateState({ isLoading: true, error: null })\n\n try {\n const client = await getXyoClient()\n updateState({\n client, isLoading: false, error: null,\n })\n } catch (error) {\n updateState({ error: error as Error, isLoading: false })\n }\n}\n\nconst subscribe = (listener: () => void) => {\n listeners.add(listener)\n\n void initializeClient()\n\n return () => {\n listeners.delete(listener)\n }\n}\n\nconst getSnapshot = (): ClientState => currentState\n\nexport const useClient = () => {\n return useSyncExternalStore(subscribe, getSnapshot)\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport { MainNetwork } from '@xyo-network/chain-network-model'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport { useCallback, useState } from 'react'\n\nimport { useGateway } from './useGateway.ts'\n\nexport const useConnectAccount = (gatewayName: GatewayName = MainNetwork.id) => {\n const { gateway, error } = useGateway(gatewayName)\n\n // Store the address in state for convenience\n const [address, setAddress] = useState<string>()\n\n const connectSigner = useCallback(async () => {\n if (isUndefined(gateway)) {\n throw new Error(`Gateway ${gatewayName} is not available`)\n }\n const signer = await gateway.signer()\n const address = await signer.address()\n setAddress(address)\n return address\n }, [gateway, gatewayName])\n\n return {\n address, connectSigner, error,\n }\n}\n","import type { GatewayName } from '@xyo-network/xl1-protocol'\n\nimport { useClient } from './useClient.ts'\n\nexport const useGateway = (gatewayName?: GatewayName) => {\n const {\n client, isLoading, error,\n } = useClient()\n return {\n gateway: gatewayName ? client?.gateways?.[gatewayName] : undefined,\n isLoading,\n error,\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 type { RpcTransport, XyoRunnerRpcSchemas } from '@xyo-network/xl1-rpc'\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 as RpcTransport<typeof XyoRunnerRpcSchemas>)\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 { XyoConnection, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoConnection, 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 type {\n RpcTransport,\n XyoRunnerRpcSchemas, XyoSignerRpcSchemas,\n XyoViewerRpcSchemas,\n} from '@xyo-network/xl1-rpc'\nimport {\n JsonRpcXyoRunner, JsonRpcXyoViewer, LegacyPostMessageRpcTransport, MemoryXyoGateway, RpcXyoSigner, XyoBaseConnection,\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, globalThis.xyo.walletExtensionId() ?? '')\n const signer = new RpcXyoSigner(legacyPostMessageRpcTransport as RpcTransport<typeof XyoSignerRpcSchemas>)\n const viewer = new JsonRpcXyoViewer(legacyPostMessageRpcTransport as RpcTransport<typeof XyoViewerRpcSchemas>)\n const runner = new JsonRpcXyoRunner(legacyPostMessageRpcTransport as RpcTransport<typeof XyoRunnerRpcSchemas>)\n const connection = new XyoBaseConnection({ 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":["CLIENT_LISTENER_TIMEOUT","hasXyoClient","globalThis","xyo","listenForClientInjection","onClientReady","onTimeout","resolved","listener","addEventListener","setTimeout","getXyoClient","client","Promise","resolve","reject","Error","isUndefined","isUndefinedOrNull","ShiftedBigInt","useEffect","useMemo","useState","useAddressBalance","address","viewer","refresh","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","setBalancesError","useEffect","isCurrent","isUndefined","accountBalance","then","result","catch","err","console","error","undefined","useMemo","shiftedBigInt","ShiftedBigInt","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","balanceIntlFriendly","toFullString","shortBalanceIntlFriendly","isUndefinedOrNull","toShortString","balanceForAddress","useSyncExternalStore","currentState","client","undefined","error","isLoading","listeners","Set","emitChange","listener","updateState","newState","initializeClient","getXyoClient","subscribe","add","delete","getSnapshot","useClient","useSyncExternalStore","isUndefined","MainNetwork","useCallback","useState","useGateway","gatewayName","client","isLoading","error","useClient","gateway","gateways","undefined","useConnectAccount","gatewayName","MainNetwork","id","gateway","error","useGateway","address","setAddress","useState","connectSigner","useCallback","isUndefined","Error","signer","usePromise","useCurrentBlock","refresh","viewer","usePromise","block","currentBlock","isUndefined","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoRunner","useMemo","useHttpRpcRunner","url","useMemo","isUndefined","transport","HttpRpcTransport","AllRpcSchemas","JsonRpcXyoRunner","isUndefined","MemoryXyoNetwork","useMemo","useNetwork","id","network","useMemo","isUndefined","MemoryXyoNetwork","MemoryXyoSigner","useMemo","useSigner","_provider","account","useMemo","MemoryXyoSigner","undefined","delay","isDefined","isUndefined","LocalNetwork","SequenceNetwork","HttpRpcTransport","JsonRpcXyoViewer","XyoViewerRpcSchemas","useEffect","useMemo","useState","INTERVAL","localRpcEndpoint","LocalNetwork","url","sequenceRpcEndpoint","SequenceNetwork","useCheckLocalRpc","isLocalProducer","useCheckRpc","useCheckSequenceRpc","endpoint","setIsLocalProducer","useState","error","setError","viewer","useMemo","isUndefined","transport","HttpRpcTransport","XyoViewerRpcSchemas","JsonRpcXyoViewer","useEffect","undefined","block","currentBlock","isDefined","err","delay","isUndefined","HttpRpcTransport","JsonRpcXyoViewer","XyoViewerRpcSchemas","useMemo","useHttpRpcViewer","url","resolvedViewer","useMemo","isUndefined","transport","HttpRpcTransport","XyoViewerRpcSchemas","JsonRpcXyoViewer","usePromise","isDefined","isTruthy","isUndefined","useEffect","useMemo","isDefined","JsonRpcXyoRunner","JsonRpcXyoViewer","LegacyPostMessageRpcTransport","MemoryXyoGateway","RpcXyoSigner","XyoBaseConnection","gateways","globalThis","xyo","client","buildGatewayFromConnection","networkId","connections","isDefined","legacyPostMessageRpcTransport","LegacyPostMessageRpcTransport","walletExtensionId","signer","RpcXyoSigner","viewer","JsonRpcXyoViewer","runner","JsonRpcXyoRunner","connection","XyoBaseConnection","MemoryXyoGateway","resolveGateway","networkGateway","builtGateway","console","warn","useViewerFromWallet","networkId","networkGateway","useMemo","isDefined","resolveGateway","gatewayViewer","rpcError","usePromise","isUndefined","connection","viewer","useEffect","isTruthy","console","error"]}
1
+ {"version":3,"sources":["../../src/components/connected/account/Connected.tsx","../../src/components/connected/ConnectAccountsStack.tsx","../../src/hooks/client/useClient.ts","../../src/hooks/helpers/getXyoClient.ts","../../src/hooks/client/permissions/usePermissions.ts","../../src/hooks/client/permissions/usePermissionsAccounts.ts","../../src/hooks/client/helpers/findCaveat.ts","../../src/hooks/client/useGateway.ts","../../src/hooks/useAddressBalance.ts","../../src/hooks/useConnectAccount.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 {\n Stack, Tooltip, Typography,\n} from '@mui/material'\nimport { EthAddressWrapper } from '@xylabs/eth-address'\nimport { BlockiesAvatarAddress } from '@xyo-network/react-chain-blockies'\nimport React from 'react'\n\nexport const ConnectedAccount: React.FC<{ address: string }> = ({ address }) => {\n const shortenedAddress = `${EthAddressWrapper.fromString(address)?.toShortString(4)}`\n\n return (\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <BlockiesAvatarAddress address={address} size={21} />\n <Tooltip title={address}>\n <Typography color=\"textSecondary\" variant=\"caption\" fontFamily=\"monospace\">{shortenedAddress}</Typography>\n </Tooltip>\n </Stack>\n )\n}\n","import type { StackProps } from '@mui/material'\nimport { Stack } from '@mui/material'\nimport type { ButtonExProps } from '@xylabs/react-button'\nimport { ButtonEx } from '@xylabs/react-button'\nimport { isDefined } from '@xylabs/typeof'\nimport { ErrorRender } from '@xyo-network/react-error'\nimport type { ComponentType, MouseEventHandler } from 'react'\nimport React from 'react'\n\nimport { useConnectAccount } from '../../hooks/index.ts'\nimport { ConnectedAccount } from './account/index.ts'\n\nconst DefaultConnectComponent: React.FC<ButtonExProps> = props => (\n <ButtonEx variant=\"contained\" size=\"small\" {...props} />\n)\n\nexport interface ConnectClientAccountsStackProps extends StackProps {\n AccountComponent: ComponentType<{ account?: string }>\n ConnectComponent: ComponentType<{ onClick?: MouseEventHandler<HTMLElement> }>\n timeout?: number\n}\n\nexport const ConnectAccountsStack: React.FC<ConnectClientAccountsStackProps> = ({\n AccountComponent = ConnectedAccount, ConnectComponent = DefaultConnectComponent, timeout, ...props\n}) => {\n const {\n address, connectSigner, error, timedout,\n } = useConnectAccount(undefined, timeout)\n\n return (\n <Stack direction=\"row\" alignItems=\"start\" spacing={2} {...props}>\n {isDefined(address)\n ? <AccountComponent address={address} />\n : (\n <ConnectComponent onClick={() => void connectSigner()}>Connect</ConnectComponent>\n )}\n <ErrorRender error={timedout ? new Error('Gateway Not Found') : undefined} scope=\"ConnectSigner:notFound\" />\n <ErrorRender error={error} scope=\"ConnectSigner:error\" />\n </Stack>\n )\n}\n","import type { XyoClient } from '@xyo-network/xl1-protocol'\nimport { useSyncExternalStore } from 'react'\n\nimport { getXyoClient } from '../helpers/index.ts'\n\ninterface ClientState {\n client?: XyoClient\n error: Error | null\n isLoading: boolean\n timedout: boolean\n}\n\nlet currentState: ClientState = {\n client: undefined,\n error: null,\n isLoading: false,\n timedout: false,\n}\n\nconst listeners = new Set<() => void>()\n\nconst emitChange = () => {\n for (const listener of listeners) listener()\n}\n\nconst updateState = (newState: Partial<ClientState>) => {\n currentState = { ...currentState, ...newState }\n emitChange()\n}\n\nconst initializeClient = async (timeout?: number) => {\n if (currentState.isLoading || currentState.client) return\n\n updateState({ isLoading: true, error: null })\n\n try {\n const client = await getXyoClient(timeout)\n if (client === null) {\n updateState({ timedout: true, isLoading: false })\n return\n }\n updateState({\n client, isLoading: false, error: null,\n })\n } catch (error) {\n console.error('Error initializing XyoClient', error)\n updateState({ error: error as Error, isLoading: false })\n }\n}\n\nconst subscribe = (listener: () => void, timeout?: number) => {\n listeners.add(listener)\n\n void initializeClient(timeout)\n\n return () => {\n listeners.delete(listener)\n }\n}\n\nconst getSnapshot = (): ClientState => currentState\n\nexport const useClient = (timeout?: number) => {\n const subscribeWithTimeout = (listener: () => void) => subscribe(listener, timeout)\n return useSyncExternalStore(subscribeWithTimeout, getSnapshot)\n}\n","import type { XyoClient } from '@xyo-network/xl1-protocol'\n\nconst CLIENT_LISTENER_TIMEOUT = 500\n\nconst hasXyoClient = () => {\n return 'client' in globalThis.xyo\n}\n\nexport const listenForClientInjection = (onClientReady: () => void, timeout: number, onTimeout: () => void) => {\n let resolved = false\n const listener: EventListener = () => {\n onClientReady()\n resolved = true\n }\n globalThis.addEventListener('xyo:plugin-ready', listener)\n setTimeout(() => {\n if (!resolved) {\n onTimeout()\n }\n }, timeout)\n}\n\ntype ReturnType = XyoClient | undefined | null\n\nexport async function getXyoClient(timeout = CLIENT_LISTENER_TIMEOUT): Promise<ReturnType> {\n return hasXyoClient()\n ? globalThis.xyo.client\n // listen for the XyoWallet to be injected\n : await new Promise<ReturnType>((resolve) => {\n listenForClientInjection(\n () => {\n resolve(globalThis.xyo.client)\n },\n timeout,\n () => {\n resolve(null)\n },\n )\n })\n}\n","import { useClient } from '../useClient.ts'\n\nexport const usePermissions = () => {\n const {\n client, isLoading, error, timedout,\n } = useClient()\n const permissions = client?.permissions\n return {\n permissions,\n isLoading,\n error,\n timedout,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n isArray, isDefined, isDefinedNotNull, isString,\n} from '@xylabs/typeof'\nimport type { JsonValue } from '@xyo-network/xl1-rpc'\n\nimport { findCaveat } from '../helpers/index.ts'\nimport { usePermissions } from './usePermissions.ts'\n\nconst validateRestrictedAccounts = (restrictedAccounts: JsonValue): readonly string [] => {\n if (isDefined(restrictedAccounts)) {\n if (isArray(restrictedAccounts) && restrictedAccounts.every(isString)) {\n return restrictedAccounts\n }\n throw new Error(\n `Unrecognized format for restrictReturnedAccounts caveat found on permissions. \\n\n Should be an array of strings: ${JSON.stringify(restrictedAccounts)}`,\n )\n }\n return []\n}\n\nexport const useAccountPermissions = () => {\n const { permissions, error } = usePermissions()\n\n return usePromise(async () => {\n if (isDefinedNotNull(error)) throw error\n if (isDefined(permissions)) {\n const restrictedAccounts = await findCaveat(\n permissions,\n // TODO - extract to constant in protocol package\n 'xyoWallet_getAccounts',\n 'restrictReturnedAccounts',\n )\n return validateRestrictedAccounts(restrictedAccounts)\n }\n }, [permissions])\n}\n","import { isDefined } from '@xylabs/typeof'\nimport type { CaveatTypes, XyoPermissions } from '@xyo-network/xl1-protocol'\nimport type { ParentCapability } from '@xyo-network/xl1-rpc'\n\nexport const findCaveat = async (\n permissions: XyoPermissions,\n targetCapability: ParentCapability,\n targetCaveatType: CaveatTypes,\n) => {\n const existingPermissions = await permissions.getPermissions()\n if (isDefined(existingPermissions) && existingPermissions.length > 0) {\n const foundPermissions = existingPermissions\n .find(p => p.parentCapability === targetCapability)\n if (isDefined(foundPermissions)) {\n return foundPermissions.caveats?.find(caveat => caveat.type === targetCaveatType)?.value ?? []\n }\n }\n return existingPermissions\n}\n","import type { GatewayName } from '@xyo-network/xl1-protocol'\n\nimport { useClient } from './useClient.ts'\n\nexport const useGateway = (gatewayName?: GatewayName, timeout?: number) => {\n const {\n client, isLoading, error, timedout,\n } = useClient(timeout)\n return {\n gateway: gatewayName ? client?.gateways?.[gatewayName] : undefined,\n isLoading,\n error,\n timedout,\n }\n}\n","import type { Address } from '@xylabs/hex'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'\nimport type { AttoXL1, XyoViewer } from '@xyo-network/xl1-protocol'\nimport { ShiftedBigInt } from '@xyo-network/xl1-protocol'\nimport {\n useEffect, useMemo, useState,\n} 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 const [balancesError, setBalancesError] = useState<Error>()\n\n useEffect(() => {\n let isCurrent = true\n if (isUndefined(viewer) || isUndefined(address)) return\n // Ensure the render is the current one before setting the state.\n // This solves the issue of overlapping calls where a previous call takes\n // longer than a subsequent one and returns a state value. Now, the latest\n // result is always returned.\n (viewer.accountBalance(address) as Promise<AttoXL1>).then((result) => {\n if (isCurrent) {\n setBalancesResult(result as AttoXL1)\n setLoading(false)\n }\n })\n .catch((err) => {\n if (isCurrent) {\n console.error('Error in queued call:', err)\n setBalancesResult(undefined)\n setBalancesError(err)\n setLoading(false)\n }\n })\n\n return () => {\n isCurrent = false\n }\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 { assertEx } from '@xylabs/assert'\nimport { MainNetwork } from '@xyo-network/chain-network-model'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\nimport { useCallback, useState } from 'react'\n\nimport { useAccountPermissions, useGateway } from './client/index.ts'\n\nexport const useConnectAccount = (gatewayName: GatewayName = MainNetwork.id, timeout?: number) => {\n const {\n gateway, error, timedout,\n } = useGateway(gatewayName, timeout)\n\n const [accountPermissions, accountPermissionsError] = useAccountPermissions()\n\n const [address, setAddress] = useState<string>()\n\n const connectSigner = useCallback(async () => {\n const assertedGateway = assertEx(gateway, () => `Gateway ${gatewayName} is not available`)\n const signer = await assertedGateway.signer()\n const address = await signer.address()\n setAddress(address)\n return address\n }, [gateway, gatewayName])\n\n return {\n address: accountPermissions?.[0] ?? address, connectSigner, error: error ?? accountPermissionsError, gateway, timedout,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { isDefinedNotNull } from '@xylabs/typeof'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\n\nexport const useCurrentBlock = (refresh = 1, viewer?: XyoViewer | null) => {\n return usePromise(async () => {\n if (isDefinedNotNull(viewer) && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport type { RpcTransport, XyoRunnerRpcSchemas } from '@xyo-network/xl1-rpc'\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 as RpcTransport<typeof XyoRunnerRpcSchemas>)\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 { XyoConnection, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoConnection, 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 { isDefined, isDefinedNotNull } from '@xylabs/typeof'\nimport type { GatewayName } from '@xyo-network/xl1-protocol'\n\nimport { useGateway } from '../client/index.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 {\n gateway, error, isLoading,\n } = useGateway(networkId)\n\n return usePromise(async () => {\n if (isDefinedNotNull(error)) return null\n if (isLoading) return\n if (isDefined(gateway) && isDefined(networkId)) {\n const connection = await gateway?.connection()\n return connection?.viewer\n }\n }, [gateway, networkId])\n}\n"],"mappings":"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","names":["Stack","Tooltip","Typography","EthAddressWrapper","BlockiesAvatarAddress","React","ConnectedAccount","address","shortenedAddress","EthAddressWrapper","fromString","toShortString","Stack","direction","alignItems","spacing","BlockiesAvatarAddress","size","Tooltip","title","Typography","color","variant","fontFamily","Stack","ButtonEx","isDefined","ErrorRender","React","useSyncExternalStore","CLIENT_LISTENER_TIMEOUT","hasXyoClient","globalThis","xyo","listenForClientInjection","onClientReady","timeout","onTimeout","resolved","listener","addEventListener","setTimeout","getXyoClient","client","Promise","resolve","currentState","client","undefined","error","isLoading","timedout","listeners","Set","emitChange","listener","updateState","newState","initializeClient","timeout","getXyoClient","console","subscribe","add","delete","getSnapshot","useClient","subscribeWithTimeout","useSyncExternalStore","usePermissions","client","isLoading","error","timedout","useClient","permissions","usePromise","isArray","isDefined","isDefinedNotNull","isString","isDefined","findCaveat","permissions","targetCapability","targetCaveatType","existingPermissions","getPermissions","isDefined","length","foundPermissions","find","p","parentCapability","caveats","caveat","type","value","validateRestrictedAccounts","restrictedAccounts","isDefined","isArray","every","isString","Error","JSON","stringify","useAccountPermissions","permissions","error","usePermissions","usePromise","isDefinedNotNull","findCaveat","useGateway","gatewayName","timeout","client","isLoading","error","timedout","useClient","gateway","gateways","undefined","isUndefined","isUndefinedOrNull","ShiftedBigInt","useEffect","useMemo","useState","useAddressBalance","address","viewer","refresh","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","setBalancesError","useEffect","isCurrent","isUndefined","accountBalance","then","result","catch","err","console","error","undefined","useMemo","shiftedBigInt","ShiftedBigInt","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","balanceIntlFriendly","toFullString","shortBalanceIntlFriendly","isUndefinedOrNull","toShortString","balanceForAddress","assertEx","MainNetwork","useCallback","useState","useConnectAccount","gatewayName","MainNetwork","id","timeout","gateway","error","timedout","useGateway","accountPermissions","accountPermissionsError","useAccountPermissions","address","setAddress","useState","connectSigner","useCallback","assertedGateway","assertEx","signer","usePromise","isDefinedNotNull","useCurrentBlock","refresh","viewer","usePromise","isDefinedNotNull","block","currentBlock","isUndefined","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoRunner","useMemo","useHttpRpcRunner","url","useMemo","isUndefined","transport","HttpRpcTransport","AllRpcSchemas","JsonRpcXyoRunner","isUndefined","MemoryXyoNetwork","useMemo","useNetwork","id","network","useMemo","isUndefined","MemoryXyoNetwork","MemoryXyoSigner","useMemo","useSigner","_provider","account","useMemo","MemoryXyoSigner","undefined","delay","isDefined","isUndefined","LocalNetwork","SequenceNetwork","HttpRpcTransport","JsonRpcXyoViewer","XyoViewerRpcSchemas","useEffect","useMemo","useState","INTERVAL","localRpcEndpoint","LocalNetwork","url","sequenceRpcEndpoint","SequenceNetwork","useCheckLocalRpc","isLocalProducer","useCheckRpc","useCheckSequenceRpc","endpoint","setIsLocalProducer","useState","error","setError","viewer","useMemo","isUndefined","transport","HttpRpcTransport","XyoViewerRpcSchemas","JsonRpcXyoViewer","useEffect","undefined","block","currentBlock","isDefined","err","delay","isUndefined","HttpRpcTransport","JsonRpcXyoViewer","XyoViewerRpcSchemas","useMemo","useHttpRpcViewer","url","resolvedViewer","useMemo","isUndefined","transport","HttpRpcTransport","XyoViewerRpcSchemas","JsonRpcXyoViewer","usePromise","isDefined","isDefinedNotNull","useViewerFromWallet","networkId","gateway","error","isLoading","useGateway","usePromise","isDefinedNotNull","isDefined","connection","viewer","DefaultConnectComponent","props","React","ButtonEx","variant","size","ConnectAccountsStack","AccountComponent","ConnectedAccount","ConnectComponent","timeout","address","connectSigner","error","timedout","useConnectAccount","undefined","Stack","direction","alignItems","spacing","isDefined","onClick","ErrorRender","Error","scope"]}