@aksumite/react-providers 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +181 -0
- package/dist/index.d.ts +181 -0
- package/dist/index.js +946 -0
- package/dist/index.mjs +916 -0
- package/package.json +40 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,946 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __defProps = Object.defineProperties;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
7
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
9
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
10
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
12
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
13
|
+
var __spreadValues = (a, b) => {
|
|
14
|
+
for (var prop in b || (b = {}))
|
|
15
|
+
if (__hasOwnProp.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
if (__getOwnPropSymbols)
|
|
18
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
19
|
+
if (__propIsEnum.call(b, prop))
|
|
20
|
+
__defNormalProp(a, prop, b[prop]);
|
|
21
|
+
}
|
|
22
|
+
return a;
|
|
23
|
+
};
|
|
24
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
25
|
+
var __export = (target, all) => {
|
|
26
|
+
for (var name in all)
|
|
27
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
28
|
+
};
|
|
29
|
+
var __copyProps = (to, from, except, desc) => {
|
|
30
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
31
|
+
for (let key of __getOwnPropNames(from))
|
|
32
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
33
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
34
|
+
}
|
|
35
|
+
return to;
|
|
36
|
+
};
|
|
37
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
38
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
39
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
40
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
41
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
42
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
43
|
+
mod
|
|
44
|
+
));
|
|
45
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
46
|
+
var __async = (__this, __arguments, generator) => {
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
var fulfilled = (value) => {
|
|
49
|
+
try {
|
|
50
|
+
step(generator.next(value));
|
|
51
|
+
} catch (e) {
|
|
52
|
+
reject(e);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
var rejected = (value) => {
|
|
56
|
+
try {
|
|
57
|
+
step(generator.throw(value));
|
|
58
|
+
} catch (e) {
|
|
59
|
+
reject(e);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
63
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
// src/index.ts
|
|
68
|
+
var src_exports = {};
|
|
69
|
+
__export(src_exports, {
|
|
70
|
+
Context: () => Context,
|
|
71
|
+
ExtensionAccountsContext: () => ExtensionAccountsContext,
|
|
72
|
+
ExtensionAccountsProvider: () => ExtensionAccountsProvider,
|
|
73
|
+
ExtensionsContext: () => ExtensionsContext,
|
|
74
|
+
ExtensionsProvider: () => ExtensionsProvider,
|
|
75
|
+
LocalAccountsContext: () => LocalAccountsContext,
|
|
76
|
+
TransactionManagerProvider: () => TransactionManagerProvider,
|
|
77
|
+
UserAccountsProvider: () => UserAccountsProvider,
|
|
78
|
+
defaultExtensionAccountsContext: () => defaultExtensionAccountsContext,
|
|
79
|
+
defaultExtensionsContext: () => defaultExtensionsContext,
|
|
80
|
+
defaultHandleImportExtension: () => defaultHandleImportExtension,
|
|
81
|
+
useExtensionAccounts: () => useExtensionAccounts,
|
|
82
|
+
useExtensions: () => useExtensions,
|
|
83
|
+
useTransactionManager: () => useTransactionManager,
|
|
84
|
+
useUserAccounts: () => useUserAccounts
|
|
85
|
+
});
|
|
86
|
+
module.exports = __toCommonJS(src_exports);
|
|
87
|
+
|
|
88
|
+
// src/ExtensionAccountsProvider/provider.tsx
|
|
89
|
+
var import_react3 = require("react");
|
|
90
|
+
var import_sdk_utils5 = require("@aksumite/sdk-utils");
|
|
91
|
+
var import_react_hooks = require("@mitratrade/react-hooks");
|
|
92
|
+
|
|
93
|
+
// src/ExtensionsProvider/provider.tsx
|
|
94
|
+
var import_react = require("react");
|
|
95
|
+
var import_sdk_utils2 = require("@aksumite/sdk-utils");
|
|
96
|
+
var import_extensions = require("@polkadot-cloud/assets/extensions");
|
|
97
|
+
|
|
98
|
+
// src/ExtensionsProvider/constants.ts
|
|
99
|
+
var defaultExtensionsContext = {
|
|
100
|
+
checkingInjectedWeb3: false,
|
|
101
|
+
extensionsStatus: {},
|
|
102
|
+
setExtensionStatus: (id, status) => {
|
|
103
|
+
},
|
|
104
|
+
removeExtensionStatus: (id) => {
|
|
105
|
+
},
|
|
106
|
+
extensionInstalled: (id) => false,
|
|
107
|
+
extensionCanConnect: (id) => false,
|
|
108
|
+
extensionHasFeature: (id, feature) => false
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
// src/ExtensionsProvider/utils.ts
|
|
112
|
+
var import_sdk_utils = require("@aksumite/sdk-utils");
|
|
113
|
+
function hasMetaMask() {
|
|
114
|
+
if (!window.ethereum) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
return window.ethereum.isMetaMask;
|
|
118
|
+
}
|
|
119
|
+
var getWalletSnaps = () => __async(void 0, null, function* () {
|
|
120
|
+
var _a;
|
|
121
|
+
const ethRequest = !!((_a = window == null ? void 0 : window.ethereum) == null ? void 0 : _a.request);
|
|
122
|
+
if (ethRequest) {
|
|
123
|
+
const response = yield (0, import_sdk_utils.withTimeout)(
|
|
124
|
+
window.ethereum.request,
|
|
125
|
+
[
|
|
126
|
+
{
|
|
127
|
+
method: "wallet_getSnaps"
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
200
|
|
131
|
+
);
|
|
132
|
+
return response;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
var polkadexSnapAvailable = () => __async(void 0, null, function* () {
|
|
136
|
+
if (!hasMetaMask())
|
|
137
|
+
return false;
|
|
138
|
+
try {
|
|
139
|
+
yield getWalletSnaps();
|
|
140
|
+
return true;
|
|
141
|
+
} catch (e) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
// src/ExtensionsProvider/provider.tsx
|
|
147
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
148
|
+
var ExtensionsContext = (0, import_react.createContext)(
|
|
149
|
+
defaultExtensionsContext
|
|
150
|
+
);
|
|
151
|
+
var ExtensionsProvider = ({ children }) => {
|
|
152
|
+
const [checkingInjectedWeb3, setCheckingInjectedWeb3] = (0, import_react.useState)(true);
|
|
153
|
+
const checkingInjectedWeb3Ref = (0, import_react.useRef)(checkingInjectedWeb3);
|
|
154
|
+
const intervalInitialisedRef = (0, import_react.useRef)(false);
|
|
155
|
+
const [extensionsStatus, setExtensionsStatus] = (0, import_react.useState)({});
|
|
156
|
+
const extensionsStatusRef = (0, import_react.useRef)(extensionsStatus);
|
|
157
|
+
const injectCounter = (0, import_react.useRef)(0);
|
|
158
|
+
const setExtensionStatus = (id, status) => {
|
|
159
|
+
(0, import_sdk_utils2.setStateWithRef)(
|
|
160
|
+
__spreadProps(__spreadValues({}, extensionsStatusRef.current), {
|
|
161
|
+
[id]: status
|
|
162
|
+
}),
|
|
163
|
+
setExtensionsStatus,
|
|
164
|
+
extensionsStatusRef
|
|
165
|
+
);
|
|
166
|
+
};
|
|
167
|
+
const removeExtensionStatus = (id) => {
|
|
168
|
+
const newExtensionsStatus = __spreadValues({}, extensionsStatusRef.current);
|
|
169
|
+
delete newExtensionsStatus[id];
|
|
170
|
+
(0, import_sdk_utils2.setStateWithRef)(
|
|
171
|
+
newExtensionsStatus,
|
|
172
|
+
setExtensionsStatus,
|
|
173
|
+
extensionsStatusRef
|
|
174
|
+
);
|
|
175
|
+
};
|
|
176
|
+
const getExtensionsStatus = (0, import_react.useCallback)(
|
|
177
|
+
(snapAvailable) => {
|
|
178
|
+
const { injectedWeb3 } = window;
|
|
179
|
+
const newExtensionsStatus = __spreadValues({}, extensionsStatus);
|
|
180
|
+
if (snapAvailable)
|
|
181
|
+
newExtensionsStatus["metamask-polkadex-snap"] = "installed";
|
|
182
|
+
import_extensions.ExtensionsArray.forEach((e) => {
|
|
183
|
+
if (injectedWeb3[e.id] !== void 0) {
|
|
184
|
+
newExtensionsStatus[e.id] = "installed";
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
return newExtensionsStatus;
|
|
188
|
+
},
|
|
189
|
+
[extensionsStatus]
|
|
190
|
+
);
|
|
191
|
+
const handleSnapInjection = (0, import_react.useCallback)(
|
|
192
|
+
(hasInjectedWeb3) => __async(void 0, null, function* () {
|
|
193
|
+
const snapAvailable = yield polkadexSnapAvailable();
|
|
194
|
+
if (hasInjectedWeb3 || snapAvailable)
|
|
195
|
+
(0, import_sdk_utils2.setStateWithRef)(
|
|
196
|
+
getExtensionsStatus(snapAvailable),
|
|
197
|
+
setExtensionsStatus,
|
|
198
|
+
extensionsStatusRef
|
|
199
|
+
);
|
|
200
|
+
(0, import_sdk_utils2.setStateWithRef)(false, setCheckingInjectedWeb3, checkingInjectedWeb3Ref);
|
|
201
|
+
}),
|
|
202
|
+
[getExtensionsStatus]
|
|
203
|
+
);
|
|
204
|
+
const handleClearInterval = (0, import_react.useCallback)(
|
|
205
|
+
(interval, hasInjectedWeb3) => {
|
|
206
|
+
clearInterval(interval);
|
|
207
|
+
handleSnapInjection(hasInjectedWeb3);
|
|
208
|
+
},
|
|
209
|
+
[handleSnapInjection]
|
|
210
|
+
);
|
|
211
|
+
const extensionInstalled = (id) => extensionsStatus[id] !== void 0;
|
|
212
|
+
const extensionCanConnect = (id) => extensionInstalled(id) && extensionsStatus[id] !== "connected";
|
|
213
|
+
const extensionHasFeature = (id, feature) => {
|
|
214
|
+
const features = import_extensions.Extensions[id].features;
|
|
215
|
+
if (features === "*" || features.includes(feature))
|
|
216
|
+
return true;
|
|
217
|
+
else
|
|
218
|
+
return false;
|
|
219
|
+
};
|
|
220
|
+
const checkEveryMs = 500;
|
|
221
|
+
const totalChecks = 10;
|
|
222
|
+
(0, import_react.useEffect)(() => {
|
|
223
|
+
let injectedWeb3Interval;
|
|
224
|
+
if (!intervalInitialisedRef.current) {
|
|
225
|
+
intervalInitialisedRef.current = true;
|
|
226
|
+
injectedWeb3Interval = setInterval(() => {
|
|
227
|
+
injectCounter.current++;
|
|
228
|
+
if (injectCounter.current === totalChecks)
|
|
229
|
+
handleClearInterval(injectedWeb3Interval, false);
|
|
230
|
+
else {
|
|
231
|
+
const injectedWeb3 = (window == null ? void 0 : window.injectedWeb3) || null;
|
|
232
|
+
if (injectedWeb3 !== null)
|
|
233
|
+
handleClearInterval(injectedWeb3Interval, true);
|
|
234
|
+
}
|
|
235
|
+
}, checkEveryMs);
|
|
236
|
+
}
|
|
237
|
+
return () => {
|
|
238
|
+
clearInterval(injectedWeb3Interval);
|
|
239
|
+
};
|
|
240
|
+
}, [handleClearInterval]);
|
|
241
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
242
|
+
ExtensionsContext.Provider,
|
|
243
|
+
{
|
|
244
|
+
value: {
|
|
245
|
+
extensionsStatus: extensionsStatusRef.current,
|
|
246
|
+
checkingInjectedWeb3: checkingInjectedWeb3Ref.current,
|
|
247
|
+
setExtensionStatus,
|
|
248
|
+
removeExtensionStatus,
|
|
249
|
+
extensionInstalled,
|
|
250
|
+
extensionCanConnect,
|
|
251
|
+
extensionHasFeature
|
|
252
|
+
},
|
|
253
|
+
children
|
|
254
|
+
}
|
|
255
|
+
);
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
// src/ExtensionsProvider/useExtensions.tsx
|
|
259
|
+
var import_react2 = require("react");
|
|
260
|
+
var useExtensions = () => {
|
|
261
|
+
var _a;
|
|
262
|
+
const state = (0, import_react2.useContext)(ExtensionsContext);
|
|
263
|
+
if (!ExtensionsContext) {
|
|
264
|
+
const error = new Error("ExtensionsContext context is undefined");
|
|
265
|
+
error.name = "ContextError";
|
|
266
|
+
(_a = Error == null ? void 0 : Error.captureStackTrace) == null ? void 0 : _a.call(Error, error, import_react2.useContext);
|
|
267
|
+
throw error;
|
|
268
|
+
}
|
|
269
|
+
return __spreadValues({}, state);
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
// src/ExtensionAccountsProvider/useImportExtension.tsx
|
|
273
|
+
var import_keyring2 = __toESM(require("@polkadot/keyring"));
|
|
274
|
+
var import_sdk_utils4 = require("@aksumite/sdk-utils");
|
|
275
|
+
|
|
276
|
+
// src/ExtensionAccountsProvider/constants.ts
|
|
277
|
+
var defaultExtensionAccountsContext = {
|
|
278
|
+
connectExtensionAccounts: () => Promise.resolve(false),
|
|
279
|
+
extensionAccountsSynced: "unsynced",
|
|
280
|
+
extensionAccounts: []
|
|
281
|
+
};
|
|
282
|
+
var defaultHandleImportExtension = {
|
|
283
|
+
newAccounts: [],
|
|
284
|
+
meta: {
|
|
285
|
+
removedActiveAccount: null
|
|
286
|
+
}
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
// src/ExtensionAccountsProvider/utils.ts
|
|
290
|
+
var import_keyring = __toESM(require("@polkadot/keyring"));
|
|
291
|
+
var import_sdk_utils3 = require("@aksumite/sdk-utils");
|
|
292
|
+
var getActiveAccountLocal = (network, ss58) => {
|
|
293
|
+
const keyring = new import_keyring.default();
|
|
294
|
+
keyring.setSS58Format(ss58);
|
|
295
|
+
let account = (0, import_sdk_utils3.localStorageOrDefault)(`${network}_active_account`, null);
|
|
296
|
+
if (account !== null) {
|
|
297
|
+
account = keyring.addFromAddress(account).address;
|
|
298
|
+
}
|
|
299
|
+
return account;
|
|
300
|
+
};
|
|
301
|
+
var addToLocalExtensions = (id) => {
|
|
302
|
+
const localExtensions = (0, import_sdk_utils3.localStorageOrDefault)(
|
|
303
|
+
`active_extensions`,
|
|
304
|
+
[],
|
|
305
|
+
true
|
|
306
|
+
);
|
|
307
|
+
if (Array.isArray(localExtensions)) {
|
|
308
|
+
if (!localExtensions.includes(id)) {
|
|
309
|
+
localExtensions.push(id);
|
|
310
|
+
localStorage.setItem(
|
|
311
|
+
"active_extensions",
|
|
312
|
+
JSON.stringify(localExtensions)
|
|
313
|
+
);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
var extensionIsLocal = (id) => {
|
|
318
|
+
const localExtensions = (0, import_sdk_utils3.localStorageOrDefault)(
|
|
319
|
+
`active_extensions`,
|
|
320
|
+
[],
|
|
321
|
+
true
|
|
322
|
+
);
|
|
323
|
+
let foundExtensionLocally = false;
|
|
324
|
+
if (Array.isArray(localExtensions)) {
|
|
325
|
+
foundExtensionLocally = localExtensions.find((l) => l === id) !== void 0;
|
|
326
|
+
}
|
|
327
|
+
return foundExtensionLocally;
|
|
328
|
+
};
|
|
329
|
+
var removeFromLocalExtensions = (id) => {
|
|
330
|
+
let localExtensions = (0, import_sdk_utils3.localStorageOrDefault)(
|
|
331
|
+
`active_extensions`,
|
|
332
|
+
[],
|
|
333
|
+
true
|
|
334
|
+
);
|
|
335
|
+
if (Array.isArray(localExtensions)) {
|
|
336
|
+
localExtensions = localExtensions.filter((l) => l !== id);
|
|
337
|
+
localStorage.setItem("active_extensions", JSON.stringify(localExtensions));
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
// src/ExtensionAccountsProvider/useImportExtension.tsx
|
|
342
|
+
var useImportExtension = () => {
|
|
343
|
+
const { setExtensionStatus } = useExtensions();
|
|
344
|
+
const handleImportExtension = (id, currentAccounts, extension, newAccounts, forget, {
|
|
345
|
+
network,
|
|
346
|
+
ss58
|
|
347
|
+
}) => {
|
|
348
|
+
setExtensionStatus(id, "connected");
|
|
349
|
+
addToLocalExtensions(id);
|
|
350
|
+
if (newAccounts.length) {
|
|
351
|
+
return handleInjectedAccounts(
|
|
352
|
+
id,
|
|
353
|
+
currentAccounts,
|
|
354
|
+
extension,
|
|
355
|
+
newAccounts,
|
|
356
|
+
forget,
|
|
357
|
+
{ network, ss58 }
|
|
358
|
+
);
|
|
359
|
+
}
|
|
360
|
+
return defaultHandleImportExtension;
|
|
361
|
+
};
|
|
362
|
+
const handleInjectedAccounts = (id, currentAccounts, extension, newAccounts, forget, {
|
|
363
|
+
ss58,
|
|
364
|
+
network
|
|
365
|
+
}) => {
|
|
366
|
+
var _a;
|
|
367
|
+
const keyring = new import_keyring2.default();
|
|
368
|
+
keyring.setSS58Format(ss58);
|
|
369
|
+
newAccounts = newAccounts.filter(
|
|
370
|
+
({ address }) => (0, import_sdk_utils4.isValidAddress)(address) || (0, import_sdk_utils4.isValidEvmAddress)(address)
|
|
371
|
+
);
|
|
372
|
+
newAccounts.forEach((account) => __async(void 0, null, function* () {
|
|
373
|
+
if ((0, import_sdk_utils4.isValidEvmAddress)(account.address))
|
|
374
|
+
return account;
|
|
375
|
+
const { address } = keyring.addFromAddress(account.address);
|
|
376
|
+
account.address = address;
|
|
377
|
+
return account;
|
|
378
|
+
}));
|
|
379
|
+
const goneFromExtension = currentAccounts.filter((j) => j.source === id).filter((j) => !newAccounts.find((i) => i.address === j.address));
|
|
380
|
+
const activeGoneFromExtension = goneFromExtension.find(
|
|
381
|
+
({ address }) => address === getActiveAccountLocal(network, ss58)
|
|
382
|
+
);
|
|
383
|
+
forget(goneFromExtension);
|
|
384
|
+
newAccounts = newAccounts.filter(
|
|
385
|
+
(i) => !currentAccounts.find(
|
|
386
|
+
(j) => j.address === i.address && j.source !== "external"
|
|
387
|
+
)
|
|
388
|
+
);
|
|
389
|
+
newAccounts = newAccounts.map(({ address, name, type }) => ({
|
|
390
|
+
address,
|
|
391
|
+
source: id,
|
|
392
|
+
name,
|
|
393
|
+
signer: extension.signer,
|
|
394
|
+
type
|
|
395
|
+
}));
|
|
396
|
+
return {
|
|
397
|
+
newAccounts,
|
|
398
|
+
meta: {
|
|
399
|
+
removedActiveAccount: (_a = activeGoneFromExtension == null ? void 0 : activeGoneFromExtension.address) != null ? _a : null
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
};
|
|
403
|
+
const getActiveExtensionAccount = ({
|
|
404
|
+
network,
|
|
405
|
+
ss58
|
|
406
|
+
}, accounts) => {
|
|
407
|
+
var _a;
|
|
408
|
+
return (_a = accounts.find(
|
|
409
|
+
({ address }) => address === getActiveAccountLocal(network, ss58)
|
|
410
|
+
)) != null ? _a : null;
|
|
411
|
+
};
|
|
412
|
+
const connectActiveExtensionAccount = (account, callback) => {
|
|
413
|
+
if (account !== null) {
|
|
414
|
+
callback(account);
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
return {
|
|
418
|
+
handleImportExtension,
|
|
419
|
+
getActiveExtensionAccount,
|
|
420
|
+
connectActiveExtensionAccount
|
|
421
|
+
};
|
|
422
|
+
};
|
|
423
|
+
|
|
424
|
+
// src/ExtensionAccountsProvider/provider.tsx
|
|
425
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
426
|
+
var ExtensionAccountsContext = (0, import_react3.createContext)(
|
|
427
|
+
defaultExtensionAccountsContext
|
|
428
|
+
);
|
|
429
|
+
var ExtensionAccountsProvider = ({
|
|
430
|
+
children,
|
|
431
|
+
network,
|
|
432
|
+
ss58,
|
|
433
|
+
dappName,
|
|
434
|
+
activeAccount,
|
|
435
|
+
setActiveAccount,
|
|
436
|
+
onExtensionEnabled
|
|
437
|
+
}) => {
|
|
438
|
+
const {
|
|
439
|
+
handleImportExtension,
|
|
440
|
+
getActiveExtensionAccount,
|
|
441
|
+
connectActiveExtensionAccount
|
|
442
|
+
} = useImportExtension();
|
|
443
|
+
const {
|
|
444
|
+
extensionsStatus,
|
|
445
|
+
setExtensionStatus,
|
|
446
|
+
removeExtensionStatus,
|
|
447
|
+
checkingInjectedWeb3,
|
|
448
|
+
extensionHasFeature
|
|
449
|
+
} = useExtensions();
|
|
450
|
+
const [extensionAccounts, setExtensionAccounts] = (0, import_react3.useState)([]);
|
|
451
|
+
const extensionAccountsRef = (0, import_react3.useRef)(extensionAccounts);
|
|
452
|
+
const [extensionAccountsSynced, setExtensionAccountsSynced] = (0, import_react3.useState)("unsynced");
|
|
453
|
+
const [extensionsInitialised, setExtensionsInitialised] = (0, import_react3.useState)(
|
|
454
|
+
[]
|
|
455
|
+
);
|
|
456
|
+
const extensionsInitialisedRef = (0, import_react3.useRef)(extensionsInitialised);
|
|
457
|
+
const unsubs = (0, import_react3.useRef)({});
|
|
458
|
+
const maybeSetActiveAccount = (0, import_react3.useCallback)(
|
|
459
|
+
(address) => {
|
|
460
|
+
if (typeof setActiveAccount === "function")
|
|
461
|
+
setActiveAccount(address != null ? address : null);
|
|
462
|
+
},
|
|
463
|
+
[setActiveAccount]
|
|
464
|
+
);
|
|
465
|
+
const maybeOnExtensionEnabled = (id) => {
|
|
466
|
+
if (typeof onExtensionEnabled === "function")
|
|
467
|
+
onExtensionEnabled(id);
|
|
468
|
+
};
|
|
469
|
+
const connectToAccount = (0, import_react3.useCallback)(
|
|
470
|
+
(account) => {
|
|
471
|
+
var _a;
|
|
472
|
+
maybeSetActiveAccount((_a = account == null ? void 0 : account.address) != null ? _a : null);
|
|
473
|
+
},
|
|
474
|
+
[maybeSetActiveAccount]
|
|
475
|
+
);
|
|
476
|
+
const connectExtensionAccounts = (id) => __async(void 0, null, function* () {
|
|
477
|
+
const extensionKeys = Object.keys(extensionsStatus);
|
|
478
|
+
const exists = extensionKeys.find((key) => key === id) || void 0;
|
|
479
|
+
if (!exists) {
|
|
480
|
+
updateInitialisedExtensions(
|
|
481
|
+
`unknown_extension_${extensionsInitialisedRef.current.length + 1}`
|
|
482
|
+
);
|
|
483
|
+
} else {
|
|
484
|
+
try {
|
|
485
|
+
const { enable } = window.injectedWeb3[id];
|
|
486
|
+
const extension = yield enable(dappName);
|
|
487
|
+
if (extension !== void 0) {
|
|
488
|
+
maybeOnExtensionEnabled(id);
|
|
489
|
+
const handleAccounts = (a) => {
|
|
490
|
+
const { newAccounts, meta } = handleImportExtension(
|
|
491
|
+
id,
|
|
492
|
+
extensionAccountsRef.current,
|
|
493
|
+
extension,
|
|
494
|
+
a,
|
|
495
|
+
forgetAccounts,
|
|
496
|
+
{ network, ss58 }
|
|
497
|
+
);
|
|
498
|
+
if (!activeAccount) {
|
|
499
|
+
const activeExtensionAccount = getActiveExtensionAccount(
|
|
500
|
+
{ network, ss58 },
|
|
501
|
+
newAccounts
|
|
502
|
+
);
|
|
503
|
+
if ((activeExtensionAccount == null ? void 0 : activeExtensionAccount.address) !== meta.removedActiveAccount && meta.removedActiveAccount !== null)
|
|
504
|
+
connectActiveExtensionAccount(
|
|
505
|
+
activeExtensionAccount,
|
|
506
|
+
connectToAccount
|
|
507
|
+
);
|
|
508
|
+
}
|
|
509
|
+
addExtensionAccount(newAccounts);
|
|
510
|
+
updateInitialisedExtensions(id);
|
|
511
|
+
};
|
|
512
|
+
if (!extensionHasFeature(id, "subscribeAccounts")) {
|
|
513
|
+
const accounts = yield extension.accounts.get();
|
|
514
|
+
handleAccounts(accounts);
|
|
515
|
+
} else {
|
|
516
|
+
const unsub = extension.accounts.subscribe((accounts) => {
|
|
517
|
+
if (accounts)
|
|
518
|
+
handleAccounts(accounts);
|
|
519
|
+
});
|
|
520
|
+
addToUnsubscribe(id, unsub);
|
|
521
|
+
}
|
|
522
|
+
return true;
|
|
523
|
+
}
|
|
524
|
+
} catch (err) {
|
|
525
|
+
handleExtensionError(id, String(err));
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
return false;
|
|
529
|
+
});
|
|
530
|
+
const handleExtensionError = (0, import_react3.useCallback)(
|
|
531
|
+
(id, err) => {
|
|
532
|
+
if (err.startsWith("Error")) {
|
|
533
|
+
removeFromLocalExtensions(id);
|
|
534
|
+
if (err.substring(0, 17) === "NotInstalledError") {
|
|
535
|
+
removeExtensionStatus(id);
|
|
536
|
+
} else {
|
|
537
|
+
setExtensionStatus(id, "not_authenticated");
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
updateInitialisedExtensions(id);
|
|
541
|
+
},
|
|
542
|
+
[removeExtensionStatus, setExtensionStatus]
|
|
543
|
+
);
|
|
544
|
+
const forgetAccounts = (0, import_react3.useCallback)(
|
|
545
|
+
(forget) => {
|
|
546
|
+
if (forget.length) {
|
|
547
|
+
for (const { address } of forget) {
|
|
548
|
+
if (extensionAccountsRef.current.find((a) => a.address === address)) {
|
|
549
|
+
const unsub = unsubs.current[address];
|
|
550
|
+
if (unsub) {
|
|
551
|
+
unsub();
|
|
552
|
+
delete unsubs.current[address];
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
(0, import_sdk_utils5.setStateWithRef)(
|
|
557
|
+
[...extensionAccountsRef.current].filter(
|
|
558
|
+
(a) => forget.find((s) => s.address === a.address) === void 0
|
|
559
|
+
),
|
|
560
|
+
setExtensionAccounts,
|
|
561
|
+
extensionAccountsRef
|
|
562
|
+
);
|
|
563
|
+
if (activeAccount) {
|
|
564
|
+
if (forget.find(({ address }) => address === activeAccount) !== void 0)
|
|
565
|
+
maybeSetActiveAccount(null);
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
},
|
|
569
|
+
[activeAccount, maybeSetActiveAccount]
|
|
570
|
+
);
|
|
571
|
+
const connectActiveExtensions = (0, import_react3.useCallback)(() => __async(void 0, null, function* () {
|
|
572
|
+
var _a;
|
|
573
|
+
const extensionKeys = Object.keys(extensionsStatus);
|
|
574
|
+
if (!extensionKeys.length)
|
|
575
|
+
return;
|
|
576
|
+
const total = (_a = extensionKeys == null ? void 0 : extensionKeys.length) != null ? _a : 0;
|
|
577
|
+
let activeWalletAccount = null;
|
|
578
|
+
let i = 0;
|
|
579
|
+
for (const id of extensionKeys) {
|
|
580
|
+
i++;
|
|
581
|
+
const isLocal = extensionIsLocal(id != null ? id : "0");
|
|
582
|
+
if (!id || !isLocal) {
|
|
583
|
+
updateInitialisedExtensions(
|
|
584
|
+
id || `unknown_extension_${extensionsInitialisedRef.current.length + 1}`
|
|
585
|
+
);
|
|
586
|
+
} else {
|
|
587
|
+
try {
|
|
588
|
+
const { enable } = window.injectedWeb3[id];
|
|
589
|
+
const extension = yield enable(dappName);
|
|
590
|
+
if (extension !== void 0) {
|
|
591
|
+
const handleAccounts = (accounts) => {
|
|
592
|
+
const { newAccounts, meta } = handleImportExtension(
|
|
593
|
+
id,
|
|
594
|
+
extensionAccountsRef.current,
|
|
595
|
+
extension,
|
|
596
|
+
accounts,
|
|
597
|
+
forgetAccounts,
|
|
598
|
+
{
|
|
599
|
+
network,
|
|
600
|
+
ss58
|
|
601
|
+
}
|
|
602
|
+
);
|
|
603
|
+
if (newAccounts.length) {
|
|
604
|
+
if (!activeWalletAccount)
|
|
605
|
+
activeWalletAccount = getActiveExtensionAccount(
|
|
606
|
+
{ network, ss58 },
|
|
607
|
+
newAccounts
|
|
608
|
+
);
|
|
609
|
+
}
|
|
610
|
+
if (i === total && !activeAccount) {
|
|
611
|
+
const activeAccountRemoved = (activeWalletAccount == null ? void 0 : activeWalletAccount.address) !== meta.removedActiveAccount && meta.removedActiveAccount !== null;
|
|
612
|
+
if (!activeAccountRemoved) {
|
|
613
|
+
connectActiveExtensionAccount(
|
|
614
|
+
activeWalletAccount,
|
|
615
|
+
connectToAccount
|
|
616
|
+
);
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
addExtensionAccount(newAccounts);
|
|
620
|
+
updateInitialisedExtensions(id);
|
|
621
|
+
};
|
|
622
|
+
if (!extensionHasFeature(id, "subscribeAccounts")) {
|
|
623
|
+
const accounts = yield extension.accounts.get();
|
|
624
|
+
handleAccounts(accounts);
|
|
625
|
+
} else {
|
|
626
|
+
const unsub = extension.accounts.subscribe((accounts) => {
|
|
627
|
+
if (accounts)
|
|
628
|
+
handleAccounts(accounts);
|
|
629
|
+
});
|
|
630
|
+
addToUnsubscribe(id, unsub);
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
} catch (err) {
|
|
634
|
+
handleExtensionError(id, String(err));
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
}), [
|
|
639
|
+
activeAccount,
|
|
640
|
+
connectActiveExtensionAccount,
|
|
641
|
+
connectToAccount,
|
|
642
|
+
dappName,
|
|
643
|
+
extensionHasFeature,
|
|
644
|
+
extensionsStatus,
|
|
645
|
+
forgetAccounts,
|
|
646
|
+
getActiveExtensionAccount,
|
|
647
|
+
handleExtensionError,
|
|
648
|
+
handleImportExtension,
|
|
649
|
+
network,
|
|
650
|
+
ss58
|
|
651
|
+
]);
|
|
652
|
+
const updateInitialisedExtensions = (id) => {
|
|
653
|
+
if (!extensionsInitialisedRef.current.includes(id)) {
|
|
654
|
+
(0, import_sdk_utils5.setStateWithRef)(
|
|
655
|
+
[...extensionsInitialisedRef.current].concat(id),
|
|
656
|
+
setExtensionsInitialised,
|
|
657
|
+
extensionsInitialisedRef
|
|
658
|
+
);
|
|
659
|
+
}
|
|
660
|
+
};
|
|
661
|
+
const addExtensionAccount = (a) => {
|
|
662
|
+
(0, import_sdk_utils5.setStateWithRef)(
|
|
663
|
+
[...extensionAccountsRef.current].concat(a),
|
|
664
|
+
setExtensionAccounts,
|
|
665
|
+
extensionAccountsRef
|
|
666
|
+
);
|
|
667
|
+
};
|
|
668
|
+
const addToUnsubscribe = (id, unsub) => {
|
|
669
|
+
unsubs.current[id] = unsub;
|
|
670
|
+
};
|
|
671
|
+
const unsubscribe = () => {
|
|
672
|
+
Object.values(unsubs.current).forEach((unsub) => {
|
|
673
|
+
unsub();
|
|
674
|
+
});
|
|
675
|
+
};
|
|
676
|
+
(0, import_react3.useEffect)(() => {
|
|
677
|
+
if (!checkingInjectedWeb3 && extensionAccountsSynced === "unsynced") {
|
|
678
|
+
unsubscribe();
|
|
679
|
+
(0, import_sdk_utils5.setStateWithRef)([], setExtensionAccounts, extensionAccountsRef);
|
|
680
|
+
(0, import_sdk_utils5.setStateWithRef)([], setExtensionsInitialised, extensionsInitialisedRef);
|
|
681
|
+
if (Object.keys(extensionsStatus).length) {
|
|
682
|
+
const localExtensions = (0, import_sdk_utils5.localStorageOrDefault)(
|
|
683
|
+
`active_extensions`,
|
|
684
|
+
[],
|
|
685
|
+
true
|
|
686
|
+
);
|
|
687
|
+
if (Object.keys(extensionsStatus).length && localExtensions.length) {
|
|
688
|
+
setExtensionAccountsSynced("syncing");
|
|
689
|
+
connectActiveExtensions();
|
|
690
|
+
} else
|
|
691
|
+
setExtensionAccountsSynced("synced");
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
return () => unsubscribe();
|
|
695
|
+
}, [
|
|
696
|
+
extensionsStatus,
|
|
697
|
+
checkingInjectedWeb3,
|
|
698
|
+
extensionAccountsSynced,
|
|
699
|
+
connectActiveExtensions
|
|
700
|
+
]);
|
|
701
|
+
(0, import_react_hooks.useEffectIgnoreInitial)(() => {
|
|
702
|
+
setExtensionAccountsSynced("unsynced");
|
|
703
|
+
}, [ss58]);
|
|
704
|
+
(0, import_react_hooks.useEffectIgnoreInitial)(() => {
|
|
705
|
+
if (!checkingInjectedWeb3 && extensionsInitialised.length === Object.keys(extensionsStatus).length) {
|
|
706
|
+
setExtensionAccountsSynced("synced");
|
|
707
|
+
}
|
|
708
|
+
}, [checkingInjectedWeb3, extensionsInitialised]);
|
|
709
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
710
|
+
ExtensionAccountsContext.Provider,
|
|
711
|
+
{
|
|
712
|
+
value: {
|
|
713
|
+
connectExtensionAccounts,
|
|
714
|
+
extensionAccountsSynced,
|
|
715
|
+
extensionAccounts: extensionAccountsRef.current
|
|
716
|
+
},
|
|
717
|
+
children
|
|
718
|
+
}
|
|
719
|
+
);
|
|
720
|
+
};
|
|
721
|
+
|
|
722
|
+
// src/ExtensionAccountsProvider/useExtensionAccounts.tsx
|
|
723
|
+
var import_react4 = require("react");
|
|
724
|
+
var useExtensionAccounts = () => {
|
|
725
|
+
var _a;
|
|
726
|
+
const state = (0, import_react4.useContext)(ExtensionAccountsContext);
|
|
727
|
+
if (!ExtensionAccountsContext) {
|
|
728
|
+
const error = new Error("ExtensionAccountsContext context is undefined");
|
|
729
|
+
error.name = "ContextError";
|
|
730
|
+
(_a = Error == null ? void 0 : Error.captureStackTrace) == null ? void 0 : _a.call(Error, error, import_react4.useContext);
|
|
731
|
+
throw error;
|
|
732
|
+
}
|
|
733
|
+
return __spreadValues({}, state);
|
|
734
|
+
};
|
|
735
|
+
|
|
736
|
+
// src/LocalAccountsProvider/provider.tsx
|
|
737
|
+
var import_react5 = require("react");
|
|
738
|
+
var import_local_wallets = require("@aksumite/local-wallets");
|
|
739
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
740
|
+
var wallet = new import_local_wallets.BrowserWallet();
|
|
741
|
+
var LocalAccountsContext = (0, import_react5.createContext)(
|
|
742
|
+
{
|
|
743
|
+
wallet,
|
|
744
|
+
isReady: false,
|
|
745
|
+
localAddresses: []
|
|
746
|
+
}
|
|
747
|
+
);
|
|
748
|
+
var UserAccountsProvider = ({
|
|
749
|
+
children
|
|
750
|
+
}) => {
|
|
751
|
+
const [localAddresses, setLocalAddresses] = (0, import_react5.useState)([]);
|
|
752
|
+
(0, import_react5.useEffect)(() => {
|
|
753
|
+
if (!wallet.isReady()) {
|
|
754
|
+
wallet.init().then(() => {
|
|
755
|
+
wallet.subscribeAddresses((addresses) => {
|
|
756
|
+
setLocalAddresses(addresses);
|
|
757
|
+
});
|
|
758
|
+
});
|
|
759
|
+
}
|
|
760
|
+
});
|
|
761
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
762
|
+
LocalAccountsContext.Provider,
|
|
763
|
+
{
|
|
764
|
+
value: {
|
|
765
|
+
wallet,
|
|
766
|
+
isReady: wallet.isReady(),
|
|
767
|
+
localAddresses
|
|
768
|
+
},
|
|
769
|
+
children
|
|
770
|
+
}
|
|
771
|
+
);
|
|
772
|
+
};
|
|
773
|
+
|
|
774
|
+
// src/LocalAccountsProvider/useLocalAccounts.tsx
|
|
775
|
+
var import_react6 = require("react");
|
|
776
|
+
var useUserAccounts = () => {
|
|
777
|
+
var _a;
|
|
778
|
+
const state = (0, import_react6.useContext)(LocalAccountsContext);
|
|
779
|
+
if (!LocalAccountsContext) {
|
|
780
|
+
const error = new Error("UserAccountsContext context is undefined");
|
|
781
|
+
error.name = "ContextError";
|
|
782
|
+
(_a = Error == null ? void 0 : Error.captureStackTrace) == null ? void 0 : _a.call(Error, error, import_react6.useContext);
|
|
783
|
+
throw error;
|
|
784
|
+
}
|
|
785
|
+
return __spreadValues({}, state);
|
|
786
|
+
};
|
|
787
|
+
|
|
788
|
+
// src/TransactionManagerProvider/provider.tsx
|
|
789
|
+
var import_react7 = require("react");
|
|
790
|
+
|
|
791
|
+
// src/TransactionManagerProvider/utils.ts
|
|
792
|
+
var getStatus = (status) => {
|
|
793
|
+
const statusMap = {
|
|
794
|
+
isError: "error",
|
|
795
|
+
isBroadcast: "broadcasted",
|
|
796
|
+
isInBlock: "inblock",
|
|
797
|
+
isFinalized: "finalized"
|
|
798
|
+
};
|
|
799
|
+
for (const key of Object.keys(statusMap).reverse())
|
|
800
|
+
if (status[key])
|
|
801
|
+
return statusMap[key];
|
|
802
|
+
return "ongoing";
|
|
803
|
+
};
|
|
804
|
+
|
|
805
|
+
// src/TransactionManagerProvider/provider.tsx
|
|
806
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
807
|
+
var TransactionManagerProvider = ({
|
|
808
|
+
children
|
|
809
|
+
}) => {
|
|
810
|
+
const [txQueue, _setTxQueue] = (0, import_react7.useState)([]);
|
|
811
|
+
const [txStatus, _setTxStatus] = (0, import_react7.useState)([]);
|
|
812
|
+
const stRef = (0, import_react7.useRef)(txStatus);
|
|
813
|
+
const txRef = (0, import_react7.useRef)(txQueue);
|
|
814
|
+
const setStQueue = (0, import_react7.useCallback)((st) => {
|
|
815
|
+
stRef.current = st;
|
|
816
|
+
_setTxStatus(st);
|
|
817
|
+
}, []);
|
|
818
|
+
const setTxQueue = (0, import_react7.useCallback)((txs) => {
|
|
819
|
+
txRef.current = txs;
|
|
820
|
+
_setTxQueue(txs);
|
|
821
|
+
}, []);
|
|
822
|
+
const updateTxStatus = (0, import_react7.useCallback)(
|
|
823
|
+
(extrinsic, hash, result) => {
|
|
824
|
+
const updatedTxStatus = stRef.current.map((e) => {
|
|
825
|
+
if (e.hash === hash) {
|
|
826
|
+
if (e.error)
|
|
827
|
+
return e;
|
|
828
|
+
let error = "";
|
|
829
|
+
const { status, isError, dispatchError } = result;
|
|
830
|
+
const { isFinalized, isInBlock, isBroadcast } = status;
|
|
831
|
+
if (dispatchError) {
|
|
832
|
+
if (dispatchError.isModule) {
|
|
833
|
+
const { docs, name, section } = extrinsic.registry.findMetaError(
|
|
834
|
+
dispatchError.asModule
|
|
835
|
+
);
|
|
836
|
+
error = `${section}.${name}: ${docs.join(" ")}`;
|
|
837
|
+
} else {
|
|
838
|
+
error = dispatchError.toString();
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
const statusText = getStatus({
|
|
842
|
+
isError,
|
|
843
|
+
isBroadcast,
|
|
844
|
+
isInBlock,
|
|
845
|
+
isFinalized
|
|
846
|
+
});
|
|
847
|
+
return {
|
|
848
|
+
hash,
|
|
849
|
+
result: [...e.result, result],
|
|
850
|
+
status: statusText,
|
|
851
|
+
error
|
|
852
|
+
};
|
|
853
|
+
}
|
|
854
|
+
return e;
|
|
855
|
+
});
|
|
856
|
+
setStQueue(updatedTxStatus);
|
|
857
|
+
if (!result || result.isError || result.dispatchError || result.status.isFinalized) {
|
|
858
|
+
const validTxs = txRef.current.filter(
|
|
859
|
+
(t) => t.hash.toHex().toString() !== hash
|
|
860
|
+
);
|
|
861
|
+
setTxQueue(validTxs);
|
|
862
|
+
}
|
|
863
|
+
},
|
|
864
|
+
[setStQueue, setTxQueue]
|
|
865
|
+
);
|
|
866
|
+
const sendExtrinsicToChain = (0, import_react7.useCallback)(
|
|
867
|
+
(ext) => __async(void 0, null, function* () {
|
|
868
|
+
const hash = ext.hash.toHex().toString();
|
|
869
|
+
try {
|
|
870
|
+
yield ext.send((result) => updateTxStatus(ext, hash, result));
|
|
871
|
+
} catch (error) {
|
|
872
|
+
throw new Error(error);
|
|
873
|
+
}
|
|
874
|
+
}),
|
|
875
|
+
[updateTxStatus]
|
|
876
|
+
);
|
|
877
|
+
const addToTxQueue = (tx) => {
|
|
878
|
+
setTxQueue([...txQueue, tx]);
|
|
879
|
+
setStQueue([
|
|
880
|
+
...txStatus,
|
|
881
|
+
{
|
|
882
|
+
hash: tx.hash.toHex().toString(),
|
|
883
|
+
result: [],
|
|
884
|
+
status: "ongoing"
|
|
885
|
+
}
|
|
886
|
+
]);
|
|
887
|
+
};
|
|
888
|
+
const getTxStatus = (0, import_react7.useCallback)(
|
|
889
|
+
(hash) => {
|
|
890
|
+
return txStatus.find((s) => s.hash === hash);
|
|
891
|
+
},
|
|
892
|
+
[txStatus]
|
|
893
|
+
);
|
|
894
|
+
(0, import_react7.useEffect)(() => {
|
|
895
|
+
if (txQueue.length) {
|
|
896
|
+
const started = txStatus.filter((s) => !s.error).find((s) => s.status === "broadcasted" || s.status === "inblock");
|
|
897
|
+
if (!started)
|
|
898
|
+
sendExtrinsicToChain(txQueue[0]);
|
|
899
|
+
}
|
|
900
|
+
}, [txStatus, txQueue, sendExtrinsicToChain]);
|
|
901
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Provider, { value: { addToTxQueue, getTxStatus, txStatus }, children });
|
|
902
|
+
};
|
|
903
|
+
var Context = (0, import_react7.createContext)({
|
|
904
|
+
addToTxQueue: () => {
|
|
905
|
+
},
|
|
906
|
+
getTxStatus: () => void 0,
|
|
907
|
+
txStatus: []
|
|
908
|
+
});
|
|
909
|
+
var Provider = ({
|
|
910
|
+
value,
|
|
911
|
+
children
|
|
912
|
+
}) => {
|
|
913
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Context.Provider, { value, children });
|
|
914
|
+
};
|
|
915
|
+
|
|
916
|
+
// src/TransactionManagerProvider/useTransactionManager.ts
|
|
917
|
+
var import_react8 = require("react");
|
|
918
|
+
var useTransactionManager = () => {
|
|
919
|
+
var _a;
|
|
920
|
+
const state = (0, import_react8.useContext)(Context);
|
|
921
|
+
if (!state) {
|
|
922
|
+
const error = new Error("useTransactionManager context is undefined");
|
|
923
|
+
error.name = "ContextError";
|
|
924
|
+
(_a = Error == null ? void 0 : Error.captureStackTrace) == null ? void 0 : _a.call(Error, error, import_react8.useContext);
|
|
925
|
+
throw error;
|
|
926
|
+
}
|
|
927
|
+
return __spreadValues({}, state);
|
|
928
|
+
};
|
|
929
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
930
|
+
0 && (module.exports = {
|
|
931
|
+
Context,
|
|
932
|
+
ExtensionAccountsContext,
|
|
933
|
+
ExtensionAccountsProvider,
|
|
934
|
+
ExtensionsContext,
|
|
935
|
+
ExtensionsProvider,
|
|
936
|
+
LocalAccountsContext,
|
|
937
|
+
TransactionManagerProvider,
|
|
938
|
+
UserAccountsProvider,
|
|
939
|
+
defaultExtensionAccountsContext,
|
|
940
|
+
defaultExtensionsContext,
|
|
941
|
+
defaultHandleImportExtension,
|
|
942
|
+
useExtensionAccounts,
|
|
943
|
+
useExtensions,
|
|
944
|
+
useTransactionManager,
|
|
945
|
+
useUserAccounts
|
|
946
|
+
});
|