@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.
- package/README.md +241 -7
- package/dist/browser/components/connected/ConnectAccountsStack.d.ts +14 -0
- package/dist/browser/components/connected/ConnectAccountsStack.d.ts.map +1 -0
- package/dist/browser/components/connected/ConnectAccountsStack.stories.d.ts +6 -0
- package/dist/browser/components/connected/ConnectAccountsStack.stories.d.ts.map +1 -0
- package/dist/browser/components/connected/account/Connected.d.ts +5 -0
- package/dist/browser/components/connected/account/Connected.d.ts.map +1 -0
- package/dist/browser/components/connected/account/index.d.ts +2 -0
- package/dist/browser/components/connected/account/index.d.ts.map +1 -0
- package/dist/browser/components/connected/index.d.ts +3 -0
- package/dist/browser/components/connected/index.d.ts.map +1 -0
- package/dist/browser/components/index.d.ts +2 -0
- package/dist/browser/components/index.d.ts.map +1 -0
- package/dist/browser/hooks/client/helpers/findCaveat.d.ts +4 -0
- package/dist/browser/hooks/client/helpers/findCaveat.d.ts.map +1 -0
- package/dist/browser/hooks/client/helpers/index.d.ts +2 -0
- package/dist/browser/hooks/client/helpers/index.d.ts.map +1 -0
- package/dist/browser/hooks/client/index.d.ts +4 -0
- package/dist/browser/hooks/client/index.d.ts.map +1 -0
- package/dist/browser/hooks/client/permissions/index.d.ts +3 -0
- package/dist/browser/hooks/client/permissions/index.d.ts.map +1 -0
- package/dist/browser/hooks/client/permissions/usePermissions.d.ts +7 -0
- package/dist/browser/hooks/client/permissions/usePermissions.d.ts.map +1 -0
- package/dist/browser/hooks/client/permissions/usePermissionsAccounts.d.ts +2 -0
- package/dist/browser/hooks/client/permissions/usePermissionsAccounts.d.ts.map +1 -0
- package/dist/browser/hooks/{useClient.d.ts → client/useClient.d.ts} +2 -1
- package/dist/browser/hooks/client/useClient.d.ts.map +1 -0
- package/dist/browser/hooks/{useGateway.d.ts → client/useGateway.d.ts} +2 -1
- package/dist/browser/hooks/client/useGateway.d.ts.map +1 -0
- package/dist/browser/hooks/helpers/getXyoClient.d.ts +4 -2
- package/dist/browser/hooks/helpers/getXyoClient.d.ts.map +1 -1
- package/dist/browser/hooks/index.d.ts +1 -2
- package/dist/browser/hooks/index.d.ts.map +1 -1
- package/dist/browser/hooks/useConnectAccount.d.ts +4 -2
- package/dist/browser/hooks/useConnectAccount.d.ts.map +1 -1
- package/dist/browser/hooks/useCurrentBlock.d.ts +1 -1
- package/dist/browser/hooks/useCurrentBlock.d.ts.map +1 -1
- package/dist/browser/hooks/viewer/UseStepRewardWeightTest.stories.d.ts +12 -0
- package/dist/browser/hooks/viewer/UseStepRewardWeightTest.stories.d.ts.map +1 -0
- package/dist/browser/hooks/viewer/useViewerFromWallet.d.ts +1 -1
- package/dist/browser/hooks/viewer/useViewerFromWallet.d.ts.map +1 -1
- package/dist/browser/hooks/viewer/useViewerFromWallet.stories.d.ts.map +1 -1
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.mjs +233 -144
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +31 -22
- package/src/components/connected/ConnectAccountsStack.stories.tsx +16 -0
- package/src/components/connected/ConnectAccountsStack.tsx +41 -0
- package/src/components/connected/account/Connected.tsx +19 -0
- package/src/components/connected/account/index.ts +1 -0
- package/src/components/connected/index.ts +2 -0
- package/src/components/index.ts +1 -0
- package/src/hooks/client/helpers/findCaveat.ts +19 -0
- package/src/hooks/client/helpers/index.ts +1 -0
- package/src/hooks/client/index.ts +3 -0
- package/src/hooks/client/permissions/index.ts +2 -0
- package/src/hooks/client/permissions/usePermissions.ts +14 -0
- package/src/hooks/client/permissions/usePermissionsAccounts.ts +38 -0
- package/src/hooks/{useClient.ts → client/useClient.ts} +15 -7
- package/src/hooks/{useGateway.ts → client/useGateway.ts} +4 -3
- package/src/hooks/helpers/getXyoClient.ts +9 -6
- package/src/hooks/index.ts +1 -2
- package/src/hooks/useConnectAccount.ts +11 -10
- package/src/hooks/useCurrentBlock.ts +3 -2
- package/src/hooks/viewer/UseStepRewardWeightTest.stories.tsx +82 -0
- package/src/hooks/viewer/useViewerFromWallet.stories.tsx +15 -8
- package/src/hooks/viewer/useViewerFromWallet.ts +12 -22
- package/src/index.ts +1 -0
- package/dist/browser/hooks/UseConnectAccount.stories.d.ts +0 -9
- package/dist/browser/hooks/UseConnectAccount.stories.d.ts.map +0 -1
- package/dist/browser/hooks/useClient.d.ts.map +0 -1
- package/dist/browser/hooks/useGateway.d.ts.map +0 -1
- package/dist/browser/hooks/viewer/resolveGateway.d.ts +0 -11
- package/dist/browser/hooks/viewer/resolveGateway.d.ts.map +0 -1
- package/src/hooks/UseConnectAccount.stories.tsx +0 -35
- package/src/hooks/viewer/resolveGateway.ts +0 -54
package/dist/browser/index.mjs
CHANGED
|
@@ -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 =
|
|
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
|
-
},
|
|
53
|
+
}, timeout);
|
|
21
54
|
}, "listenForClientInjection");
|
|
22
|
-
async function getXyoClient() {
|
|
23
|
-
return hasXyoClient() ? globalThis.xyo.client : await new Promise((resolve
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
160
|
-
|
|
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
|
-
|
|
175
|
-
|
|
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
|
|
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
|
|
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 (
|
|
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
|
|
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 (
|
|
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
|
|
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 (
|
|
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 (
|
|
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(
|
|
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
|
|
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 (
|
|
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
|
|
316
|
-
import { isDefined as
|
|
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
|
|
352
|
-
|
|
353
|
-
|
|
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"]}
|