@aurum-sdk/core 0.1.5 → 0.2.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/README.md +3 -3
- package/dist/{chunk-HPH3VJRX.js → chunk-NKWY4I4L.js} +553 -99
- package/dist/chunk-NKWY4I4L.js.map +1 -0
- package/dist/{chunk-5NXCRO5Q.mjs → chunk-NRC534B3.mjs} +537 -83
- package/dist/chunk-NRC534B3.mjs.map +1 -0
- package/dist/index.d.mts +9 -5
- package/dist/index.d.ts +9 -5
- package/dist/index.js +146 -581
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +69 -504
- package/dist/index.mjs.map +1 -1
- package/dist/widgets.d.mts +2 -54
- package/dist/widgets.d.ts +2 -54
- package/dist/widgets.js +18 -21
- package/dist/widgets.js.map +1 -1
- package/dist/widgets.mjs +5 -8
- package/dist/widgets.mjs.map +1 -1
- package/package.json +3 -3
- package/dist/chunk-5NXCRO5Q.mjs.map +0 -1
- package/dist/chunk-HPH3VJRX.js.map +0 -1
|
@@ -119,6 +119,325 @@ function sortWallets(wallets, options = {}) {
|
|
|
119
119
|
return result;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
+
// src/services/sentry.ts
|
|
123
|
+
import * as Sentry from "@sentry/browser";
|
|
124
|
+
var initialized = false;
|
|
125
|
+
var telemetryEnabled = true;
|
|
126
|
+
function getEnvironment() {
|
|
127
|
+
if (typeof window !== "undefined") {
|
|
128
|
+
const hostname = window.location.hostname;
|
|
129
|
+
if (hostname === "localhost" || hostname === "127.0.0.1") {
|
|
130
|
+
return "development";
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return "production";
|
|
134
|
+
}
|
|
135
|
+
function initSentry(enabled = true) {
|
|
136
|
+
telemetryEnabled = enabled;
|
|
137
|
+
if (initialized || !telemetryEnabled || false) return;
|
|
138
|
+
initialized = true;
|
|
139
|
+
Sentry.init({
|
|
140
|
+
dsn: "https://0bb16fd7057ac7b45ae0ab416cdbea8b@o4505953815494656.ingest.us.sentry.io/4509747448184832",
|
|
141
|
+
environment: getEnvironment(),
|
|
142
|
+
release: `@aurum-sdk/core@${"0.2.0"}`,
|
|
143
|
+
sendDefaultPii: false,
|
|
144
|
+
enableLogs: true
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
function getUrl() {
|
|
148
|
+
if (typeof window !== "undefined") {
|
|
149
|
+
return window.location.href;
|
|
150
|
+
}
|
|
151
|
+
return void 0;
|
|
152
|
+
}
|
|
153
|
+
var sentryLogger = {
|
|
154
|
+
info: (message, attributes) => {
|
|
155
|
+
if (telemetryEnabled) Sentry.logger.info(message, { url: getUrl(), ...attributes });
|
|
156
|
+
},
|
|
157
|
+
warn: (message, attributes) => {
|
|
158
|
+
if (telemetryEnabled) Sentry.logger.warn(message, { url: getUrl(), ...attributes });
|
|
159
|
+
},
|
|
160
|
+
error: (message, attributes) => {
|
|
161
|
+
if (telemetryEnabled) Sentry.logger.error(message, { url: getUrl(), ...attributes });
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
// src/wallet-adapters/AppKitAdapter.ts
|
|
166
|
+
import { getLogoDataUri } from "@aurum-sdk/logos";
|
|
167
|
+
import { WalletId as WalletId2, WalletName } from "@aurum-sdk/types";
|
|
168
|
+
|
|
169
|
+
// src/utils/isConfigError.ts
|
|
170
|
+
var isConfigError = (error) => {
|
|
171
|
+
const name = error?.name;
|
|
172
|
+
return name === "ConfigError";
|
|
173
|
+
};
|
|
174
|
+
var createConfigError = (adapterName) => {
|
|
175
|
+
const error = new Error(`Missing required project ID for ${adapterName}`);
|
|
176
|
+
error.name = "ConfigError";
|
|
177
|
+
return error;
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
// src/wallet-adapters/AppKitAdapter.ts
|
|
181
|
+
var AppKitAdapter = class {
|
|
182
|
+
constructor(config) {
|
|
183
|
+
this.id = WalletId2.WalletConnect;
|
|
184
|
+
this.name = WalletName.WalletConnect;
|
|
185
|
+
this.icon = getLogoDataUri(WalletId2.WalletConnect, "brand") ?? "";
|
|
186
|
+
this.hide = true;
|
|
187
|
+
this.downloadUrl = null;
|
|
188
|
+
this.wcDeepLinkUrl = null;
|
|
189
|
+
this.modal = null;
|
|
190
|
+
this.wagmiAdapter = null;
|
|
191
|
+
this.provider = null;
|
|
192
|
+
this.address = null;
|
|
193
|
+
this.accountsChangedCallback = null;
|
|
194
|
+
this.unsubscribeFunctions = [];
|
|
195
|
+
this.initPromise = null;
|
|
196
|
+
this.config = {
|
|
197
|
+
projectId: config.projectId,
|
|
198
|
+
appName: config.appName,
|
|
199
|
+
modalZIndex: config.modalZIndex,
|
|
200
|
+
theme: config.theme
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
async ensureInitialized() {
|
|
204
|
+
if (this.modal) return;
|
|
205
|
+
if (!this.initPromise) {
|
|
206
|
+
this.initPromise = this.initializeAppKit();
|
|
207
|
+
}
|
|
208
|
+
await this.initPromise;
|
|
209
|
+
}
|
|
210
|
+
async initializeAppKit() {
|
|
211
|
+
if (typeof window === "undefined") return;
|
|
212
|
+
const [{ createAppKit }, { WagmiAdapter }, { mainnet }] = await Promise.all([
|
|
213
|
+
import("@reown/appkit"),
|
|
214
|
+
import("@reown/appkit-adapter-wagmi"),
|
|
215
|
+
import("@reown/appkit/networks")
|
|
216
|
+
]);
|
|
217
|
+
const networks = [mainnet];
|
|
218
|
+
this.wagmiAdapter = new WagmiAdapter({
|
|
219
|
+
projectId: this.config.projectId,
|
|
220
|
+
networks,
|
|
221
|
+
ssr: true
|
|
222
|
+
});
|
|
223
|
+
this.modal = createAppKit({
|
|
224
|
+
adapters: [this.wagmiAdapter],
|
|
225
|
+
networks,
|
|
226
|
+
projectId: this.config.projectId,
|
|
227
|
+
metadata: {
|
|
228
|
+
name: this.config.appName,
|
|
229
|
+
description: this.config.appName,
|
|
230
|
+
url: window.location.origin,
|
|
231
|
+
icons: []
|
|
232
|
+
},
|
|
233
|
+
allowUnsupportedChain: true,
|
|
234
|
+
themeMode: this.config.theme,
|
|
235
|
+
themeVariables: {
|
|
236
|
+
"--apkt-z-index": this.config.modalZIndex + 1
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
this.setupEventListeners();
|
|
240
|
+
}
|
|
241
|
+
setupEventListeners() {
|
|
242
|
+
if (!this.modal) return;
|
|
243
|
+
const unsubscribeProviders = this.modal.subscribeProviders((state) => {
|
|
244
|
+
const eip155Provider = state["eip155"];
|
|
245
|
+
this.provider = eip155Provider || null;
|
|
246
|
+
if (!eip155Provider) {
|
|
247
|
+
this.address = null;
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
this.unsubscribeFunctions.push(unsubscribeProviders);
|
|
251
|
+
}
|
|
252
|
+
syncAddressFromWagmi() {
|
|
253
|
+
if (!this.wagmiAdapter?.wagmiConfig) return;
|
|
254
|
+
const { state } = this.wagmiAdapter.wagmiConfig;
|
|
255
|
+
if (state.current && state.connections) {
|
|
256
|
+
const connection = state.connections.get(state.current);
|
|
257
|
+
if (connection?.accounts?.[0]) {
|
|
258
|
+
this.address = connection.accounts[0];
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
async syncProviderFromModal() {
|
|
263
|
+
if (!this.modal) return;
|
|
264
|
+
try {
|
|
265
|
+
const getProvidersFn = this.modal.getProviders;
|
|
266
|
+
if (typeof getProvidersFn === "function") {
|
|
267
|
+
const providers = getProvidersFn.call(this.modal);
|
|
268
|
+
const eip155Provider = providers?.["eip155"];
|
|
269
|
+
if (eip155Provider) {
|
|
270
|
+
this.provider = eip155Provider;
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
if (this.wagmiAdapter?.wagmiConfig) {
|
|
275
|
+
const { state } = this.wagmiAdapter.wagmiConfig;
|
|
276
|
+
if (state.current && state.connections) {
|
|
277
|
+
const connection = state.connections.get(state.current);
|
|
278
|
+
const connector = connection?.connector;
|
|
279
|
+
if (connector && typeof connector.getProvider === "function") {
|
|
280
|
+
try {
|
|
281
|
+
const provider = await connector.getProvider();
|
|
282
|
+
if (provider) {
|
|
283
|
+
this.provider = provider;
|
|
284
|
+
}
|
|
285
|
+
} catch (error) {
|
|
286
|
+
sentryLogger.warn("Failed to get provider from wagmi connector", { error });
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
} catch (error) {
|
|
292
|
+
sentryLogger.warn("Failed to get provider from WalletConnect modal", { error });
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
isInstalled() {
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
async connect() {
|
|
299
|
+
if (!this.config.projectId) {
|
|
300
|
+
throw createConfigError("WalletConnect");
|
|
301
|
+
}
|
|
302
|
+
await this.ensureInitialized();
|
|
303
|
+
if (!this.modal) {
|
|
304
|
+
sentryLogger.error("WalletConnect modal is not available");
|
|
305
|
+
throw new Error("WalletConnect modal is not available");
|
|
306
|
+
}
|
|
307
|
+
const existingAddress = this.modal.getAddress();
|
|
308
|
+
if (this.modal.getIsConnectedState() && existingAddress) {
|
|
309
|
+
await this.syncProviderFromModal();
|
|
310
|
+
if (this.provider) {
|
|
311
|
+
this.address = existingAddress;
|
|
312
|
+
return {
|
|
313
|
+
address: existingAddress,
|
|
314
|
+
provider: this.provider,
|
|
315
|
+
walletId: this.id
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
await this.disconnect();
|
|
319
|
+
}
|
|
320
|
+
this.modal.open({ view: "AllWallets" });
|
|
321
|
+
return await this.waitForConnection();
|
|
322
|
+
}
|
|
323
|
+
waitForConnection(timeout = 6e4) {
|
|
324
|
+
return new Promise((resolve, reject) => {
|
|
325
|
+
const startTime = Date.now();
|
|
326
|
+
let unsubscribeState = null;
|
|
327
|
+
let isResolved = false;
|
|
328
|
+
const cleanup = () => {
|
|
329
|
+
unsubscribeState?.();
|
|
330
|
+
};
|
|
331
|
+
const checkConnection = async () => {
|
|
332
|
+
if (isResolved) return true;
|
|
333
|
+
this.syncAddressFromWagmi();
|
|
334
|
+
if (this.address && !this.provider) {
|
|
335
|
+
await this.syncProviderFromModal();
|
|
336
|
+
}
|
|
337
|
+
if (this.provider && this.address) {
|
|
338
|
+
try {
|
|
339
|
+
const accounts = await this.provider.request({ method: "eth_accounts" });
|
|
340
|
+
if (accounts && accounts.length > 0) {
|
|
341
|
+
isResolved = true;
|
|
342
|
+
cleanup();
|
|
343
|
+
this.modal?.close();
|
|
344
|
+
resolve({
|
|
345
|
+
address: this.address,
|
|
346
|
+
provider: this.provider,
|
|
347
|
+
walletId: this.id
|
|
348
|
+
});
|
|
349
|
+
return true;
|
|
350
|
+
}
|
|
351
|
+
return false;
|
|
352
|
+
} catch {
|
|
353
|
+
return false;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
return false;
|
|
357
|
+
};
|
|
358
|
+
unsubscribeState = this.modal.subscribeState(async (state) => {
|
|
359
|
+
if (await checkConnection()) return;
|
|
360
|
+
if (state.open === false && !this.address && !isResolved) {
|
|
361
|
+
cleanup();
|
|
362
|
+
reject(new Error("Connection rejected by user"));
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
const pollTimeout = async () => {
|
|
366
|
+
if (await checkConnection()) return;
|
|
367
|
+
if (Date.now() - startTime > timeout) {
|
|
368
|
+
cleanup();
|
|
369
|
+
reject(new Error("Connection timeout"));
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
setTimeout(pollTimeout, 500);
|
|
373
|
+
};
|
|
374
|
+
pollTimeout();
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
async tryRestoreConnection() {
|
|
378
|
+
await this.ensureInitialized();
|
|
379
|
+
if (!this.modal || !this.wagmiAdapter) return null;
|
|
380
|
+
try {
|
|
381
|
+
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
382
|
+
const wagmiConfig = this.wagmiAdapter.wagmiConfig;
|
|
383
|
+
if (wagmiConfig?.state?.current && wagmiConfig.state.connections) {
|
|
384
|
+
const connection = wagmiConfig.state.connections.get(wagmiConfig.state.current);
|
|
385
|
+
if (connection?.accounts?.[0]) {
|
|
386
|
+
this.address = connection.accounts[0];
|
|
387
|
+
if (this.provider && this.address) {
|
|
388
|
+
return {
|
|
389
|
+
address: this.address,
|
|
390
|
+
provider: this.provider,
|
|
391
|
+
walletId: this.id
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
return null;
|
|
397
|
+
} catch {
|
|
398
|
+
return null;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
async disconnect() {
|
|
402
|
+
if (!this.modal) {
|
|
403
|
+
this.address = null;
|
|
404
|
+
this.provider = null;
|
|
405
|
+
return;
|
|
406
|
+
}
|
|
407
|
+
await this.modal.disconnect("eip155");
|
|
408
|
+
const timeout = Date.now() + 2e3;
|
|
409
|
+
while (Date.now() < timeout && (this.modal.getIsConnectedState() || this.modal.getAddress())) {
|
|
410
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
411
|
+
}
|
|
412
|
+
this.address = null;
|
|
413
|
+
this.provider = null;
|
|
414
|
+
}
|
|
415
|
+
getProvider() {
|
|
416
|
+
return this.provider;
|
|
417
|
+
}
|
|
418
|
+
onAccountsChanged(callback) {
|
|
419
|
+
if (!this.provider?.on) return;
|
|
420
|
+
if (this.accountsChangedCallback) {
|
|
421
|
+
this.provider.removeListener?.("accountsChanged", this.accountsChangedCallback);
|
|
422
|
+
}
|
|
423
|
+
this.accountsChangedCallback = (accounts) => {
|
|
424
|
+
this.address = accounts[0] || null;
|
|
425
|
+
callback(accounts);
|
|
426
|
+
};
|
|
427
|
+
this.provider.on("accountsChanged", this.accountsChangedCallback);
|
|
428
|
+
}
|
|
429
|
+
removeListeners() {
|
|
430
|
+
if (this.provider?.removeListener && this.accountsChangedCallback) {
|
|
431
|
+
this.provider.removeListener("accountsChanged", this.accountsChangedCallback);
|
|
432
|
+
this.accountsChangedCallback = null;
|
|
433
|
+
}
|
|
434
|
+
this.unsubscribeFunctions.forEach((unsub) => unsub());
|
|
435
|
+
this.unsubscribeFunctions = [];
|
|
436
|
+
}
|
|
437
|
+
};
|
|
438
|
+
/** Internal identifier for distinguishing from WalletConnectAdapter */
|
|
439
|
+
AppKitAdapter.INTERNAL_ID = "appkit-modal";
|
|
440
|
+
|
|
122
441
|
// src/utils/platform/isMobile.ts
|
|
123
442
|
import MobileDetect from "mobile-detect";
|
|
124
443
|
function isMobile() {
|
|
@@ -735,62 +1054,6 @@ import { useEffect as useEffect4, useState as useState7 } from "react";
|
|
|
735
1054
|
|
|
736
1055
|
// src/contexts/EmailAuthContext.tsx
|
|
737
1056
|
import { createContext as createContext3, useContext as useContext3, useState as useState6 } from "react";
|
|
738
|
-
|
|
739
|
-
// src/services/sentry.ts
|
|
740
|
-
import * as Sentry from "@sentry/browser";
|
|
741
|
-
var initialized = false;
|
|
742
|
-
var telemetryEnabled = true;
|
|
743
|
-
function getEnvironment() {
|
|
744
|
-
if (typeof window !== "undefined") {
|
|
745
|
-
const hostname = window.location.hostname;
|
|
746
|
-
if (hostname === "localhost" || hostname === "127.0.0.1") {
|
|
747
|
-
return "development";
|
|
748
|
-
}
|
|
749
|
-
}
|
|
750
|
-
return "production";
|
|
751
|
-
}
|
|
752
|
-
function initSentry(enabled = true) {
|
|
753
|
-
telemetryEnabled = enabled;
|
|
754
|
-
if (initialized || !telemetryEnabled || false) return;
|
|
755
|
-
initialized = true;
|
|
756
|
-
Sentry.init({
|
|
757
|
-
dsn: "https://0bb16fd7057ac7b45ae0ab416cdbea8b@o4505953815494656.ingest.us.sentry.io/4509747448184832",
|
|
758
|
-
environment: getEnvironment(),
|
|
759
|
-
release: `@aurum-sdk/core@${"0.1.5"}`,
|
|
760
|
-
sendDefaultPii: false,
|
|
761
|
-
enableLogs: true
|
|
762
|
-
});
|
|
763
|
-
}
|
|
764
|
-
function getUrl() {
|
|
765
|
-
if (typeof window !== "undefined") {
|
|
766
|
-
return window.location.href;
|
|
767
|
-
}
|
|
768
|
-
return void 0;
|
|
769
|
-
}
|
|
770
|
-
var sentryLogger = {
|
|
771
|
-
info: (message, attributes) => {
|
|
772
|
-
if (telemetryEnabled) Sentry.logger.info(message, { url: getUrl(), ...attributes });
|
|
773
|
-
},
|
|
774
|
-
warn: (message, attributes) => {
|
|
775
|
-
if (telemetryEnabled) Sentry.logger.warn(message, { url: getUrl(), ...attributes });
|
|
776
|
-
},
|
|
777
|
-
error: (message, attributes) => {
|
|
778
|
-
if (telemetryEnabled) Sentry.logger.error(message, { url: getUrl(), ...attributes });
|
|
779
|
-
}
|
|
780
|
-
};
|
|
781
|
-
|
|
782
|
-
// src/utils/isConfigError.ts
|
|
783
|
-
var isConfigError = (error) => {
|
|
784
|
-
const name = error?.name;
|
|
785
|
-
return name === "ConfigError";
|
|
786
|
-
};
|
|
787
|
-
var createConfigError = (adapterName) => {
|
|
788
|
-
const error = new Error(`Missing required project ID for ${adapterName}`);
|
|
789
|
-
error.name = "ConfigError";
|
|
790
|
-
return error;
|
|
791
|
-
};
|
|
792
|
-
|
|
793
|
-
// src/contexts/EmailAuthContext.tsx
|
|
794
1057
|
import { jsx as jsx17 } from "react/jsx-runtime";
|
|
795
1058
|
var EmailAuthContext = createContext3(null);
|
|
796
1059
|
var useEmailAuth = () => {
|
|
@@ -1050,7 +1313,7 @@ var WalletButtonLabel = ({ type }) => {
|
|
|
1050
1313
|
};
|
|
1051
1314
|
|
|
1052
1315
|
// src/components/WalletButton/WalletButton.tsx
|
|
1053
|
-
import { WalletId as
|
|
1316
|
+
import { WalletId as WalletId3 } from "@aurum-sdk/types";
|
|
1054
1317
|
import { jsx as jsx23, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1055
1318
|
var WalletButton = ({
|
|
1056
1319
|
wallet,
|
|
@@ -1071,7 +1334,7 @@ var WalletButton = ({
|
|
|
1071
1334
|
/* @__PURE__ */ jsx23(WalletLogoWrapper, { id: wallet.id, size: iconSize, sizeSlot: "sm" }),
|
|
1072
1335
|
/* @__PURE__ */ jsx23(Text, { weight: "semibold", size: "md", children: wallet.name })
|
|
1073
1336
|
] }),
|
|
1074
|
-
wallet.id ===
|
|
1337
|
+
wallet.id === WalletId3.WalletConnect && !isLastUsed ? /* @__PURE__ */ jsx23(QrCode, { color: "var(--color-foreground)", size: 18 }) : /* @__PURE__ */ jsx23(WalletButtonLabel, { type: label })
|
|
1075
1338
|
] })
|
|
1076
1339
|
},
|
|
1077
1340
|
wallet.id
|
|
@@ -1172,12 +1435,12 @@ var WalletListStacked = ({ wallets, hasEmailAuth }) => {
|
|
|
1172
1435
|
};
|
|
1173
1436
|
|
|
1174
1437
|
// src/components/ConnectModal/SelectWallet.tsx
|
|
1175
|
-
import { WalletId as
|
|
1438
|
+
import { WalletId as WalletId4 } from "@aurum-sdk/types";
|
|
1176
1439
|
import { Fragment as Fragment3, jsx as jsx26, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1177
1440
|
var SelectWalletPage = () => {
|
|
1178
1441
|
const { displayedWallets } = useConnectModal();
|
|
1179
1442
|
const { onDismiss, brandConfig } = useWidgetContext();
|
|
1180
|
-
const hasEmailAuth = displayedWallets.some((wallet) => wallet.id ===
|
|
1443
|
+
const hasEmailAuth = displayedWallets.some((wallet) => wallet.id === WalletId4.Email);
|
|
1181
1444
|
const sortedWallets = useMemo3(() => sortWallets(displayedWallets), [displayedWallets]);
|
|
1182
1445
|
const isGridLayout = brandConfig.walletLayout === "grid";
|
|
1183
1446
|
return /* @__PURE__ */ jsxs11(Fragment3, { children: [
|
|
@@ -1385,7 +1648,7 @@ var ConnectionStatusBase = ({
|
|
|
1385
1648
|
};
|
|
1386
1649
|
|
|
1387
1650
|
// src/components/ConnectModal/ConnectionStatus/Desktop.tsx
|
|
1388
|
-
import { WalletId as
|
|
1651
|
+
import { WalletId as WalletId5 } from "@aurum-sdk/types";
|
|
1389
1652
|
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
1390
1653
|
var ConnectionStatusPage = () => {
|
|
1391
1654
|
const { selectedWallet } = useConnectModal();
|
|
@@ -1393,7 +1656,7 @@ var ConnectionStatusPage = () => {
|
|
|
1393
1656
|
ConnectionStatusBase,
|
|
1394
1657
|
{
|
|
1395
1658
|
pendingHeaderText: `Approve in ${selectedWallet?.name}`,
|
|
1396
|
-
pendingSubContent: /* @__PURE__ */ jsx31(Text, { align: "center", size: "sm", variant: "secondary", children: selectedWallet?.id ===
|
|
1659
|
+
pendingSubContent: /* @__PURE__ */ jsx31(Text, { align: "center", size: "sm", variant: "secondary", children: selectedWallet?.id === WalletId5.Ledger ? `Please wait for the Ledger Live modal to open` : `Please check your wallet to
|
|
1397
1660
|
approve the connection` })
|
|
1398
1661
|
}
|
|
1399
1662
|
);
|
|
@@ -1432,13 +1695,13 @@ import { useRef as useRef4, useEffect as useEffect7 } from "react";
|
|
|
1432
1695
|
import { QRCode } from "react-qrcode-logo";
|
|
1433
1696
|
|
|
1434
1697
|
// src/utils/generateQrCodeWalletLogo.tsx
|
|
1435
|
-
import { getLogoDataUri } from "@aurum-sdk/logos";
|
|
1436
|
-
import { WalletId as
|
|
1698
|
+
import { getLogoDataUri as getLogoDataUri2 } from "@aurum-sdk/logos";
|
|
1699
|
+
import { WalletId as WalletId6 } from "@aurum-sdk/types";
|
|
1437
1700
|
var generateQrCodeWalletLogo = (walletAdapter) => {
|
|
1438
|
-
if (walletAdapter && walletAdapter
|
|
1701
|
+
if (walletAdapter && !(walletAdapter instanceof AppKitAdapter) && walletAdapter.icon) {
|
|
1439
1702
|
return walletAdapter.icon;
|
|
1440
1703
|
}
|
|
1441
|
-
return
|
|
1704
|
+
return getLogoDataUri2(WalletId6.WalletConnect) ?? "";
|
|
1442
1705
|
};
|
|
1443
1706
|
|
|
1444
1707
|
// src/components/QRCodeDisplay/QREye.tsx
|
|
@@ -1597,7 +1860,6 @@ var QRCodeSkeleton = ({ size = 128 }) => {
|
|
|
1597
1860
|
};
|
|
1598
1861
|
|
|
1599
1862
|
// src/components/QRCodeDisplay/QRCodeDisplay.tsx
|
|
1600
|
-
import { WalletId as WalletId6 } from "@aurum-sdk/types";
|
|
1601
1863
|
import { jsx as jsx36, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1602
1864
|
var QRCodeDisplay = ({ uri, size = 256 }) => {
|
|
1603
1865
|
const { brandConfig } = useWidgetContext();
|
|
@@ -1606,12 +1868,12 @@ var QRCodeDisplay = ({ uri, size = 256 }) => {
|
|
|
1606
1868
|
const bgColor = brandConfig.theme === "light" ? "#ffffff" : "#121212";
|
|
1607
1869
|
const logoWalletRef = useRef4(null);
|
|
1608
1870
|
useEffect7(() => {
|
|
1609
|
-
if (selectedWallet && selectedWallet
|
|
1871
|
+
if (selectedWallet && !(selectedWallet instanceof AppKitAdapter)) {
|
|
1610
1872
|
logoWalletRef.current = selectedWallet;
|
|
1611
1873
|
}
|
|
1612
1874
|
}, [selectedWallet]);
|
|
1613
1875
|
const logoWallet = logoWalletRef.current || selectedWallet;
|
|
1614
|
-
const appKitAdapter = displayedWallets.find((
|
|
1876
|
+
const appKitAdapter = displayedWallets.find((w) => w instanceof AppKitAdapter);
|
|
1615
1877
|
const handleAppKitConnect = async () => {
|
|
1616
1878
|
if (appKitAdapter) {
|
|
1617
1879
|
connectWallet(appKitAdapter);
|
|
@@ -1663,7 +1925,7 @@ var QRCodeDisplay = ({ uri, size = 256 }) => {
|
|
|
1663
1925
|
|
|
1664
1926
|
// src/components/ConnectModal/QRCodePage.tsx
|
|
1665
1927
|
import { ChevronLeft as ChevronLeft2, X as X4, SquareArrowOutUpRight, CircleCheck as CircleCheck2 } from "lucide-react";
|
|
1666
|
-
import {
|
|
1928
|
+
import { WalletName as WalletName2 } from "@aurum-sdk/types";
|
|
1667
1929
|
import { Fragment as Fragment5, jsx as jsx37, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1668
1930
|
var QRCodePage = () => {
|
|
1669
1931
|
const { onDismiss } = useWidgetContext();
|
|
@@ -1672,7 +1934,7 @@ var QRCodePage = () => {
|
|
|
1672
1934
|
const [connectionUri, setConnectionUri] = useState10(null);
|
|
1673
1935
|
const originalWalletRef = useRef5(null);
|
|
1674
1936
|
useEffect8(() => {
|
|
1675
|
-
if (selectedWallet && selectedWallet
|
|
1937
|
+
if (selectedWallet && !(selectedWallet instanceof AppKitAdapter)) {
|
|
1676
1938
|
originalWalletRef.current = selectedWallet;
|
|
1677
1939
|
}
|
|
1678
1940
|
}, [selectedWallet]);
|
|
@@ -1680,7 +1942,7 @@ var QRCodePage = () => {
|
|
|
1680
1942
|
const goBackToHome = () => {
|
|
1681
1943
|
navigateTo(PAGE_IDS.SELECT_WALLET);
|
|
1682
1944
|
};
|
|
1683
|
-
const title = displayWallet?.name ===
|
|
1945
|
+
const title = displayWallet?.name === WalletName2.WalletConnect ? "Scan QR code" : `Scan with ${displayWallet?.name} app`;
|
|
1684
1946
|
useEffect8(() => {
|
|
1685
1947
|
const handleWalletConnectURI = (event) => {
|
|
1686
1948
|
setConnectionUri(event.detail.uri);
|
|
@@ -2160,8 +2422,198 @@ var registerGlobalCleanup = (cleanupFn) => {
|
|
|
2160
2422
|
return cleanup;
|
|
2161
2423
|
};
|
|
2162
2424
|
|
|
2425
|
+
// src/wallet-adapters/WalletConnectAdapter.ts
|
|
2426
|
+
import { getLogoDataUri as getLogoDataUri3 } from "@aurum-sdk/logos";
|
|
2427
|
+
import { WalletId as WalletId7, WalletName as WalletName3 } from "@aurum-sdk/types";
|
|
2428
|
+
var WalletConnectAdapter = class {
|
|
2429
|
+
constructor(config) {
|
|
2430
|
+
this.id = WalletId7.WalletConnect;
|
|
2431
|
+
this.name = WalletName3.WalletConnect;
|
|
2432
|
+
this.icon = getLogoDataUri3(WalletId7.WalletConnect, "brand") ?? "";
|
|
2433
|
+
this.hide = false;
|
|
2434
|
+
this.downloadUrl = null;
|
|
2435
|
+
this.wcDeepLinkUrl = null;
|
|
2436
|
+
this.provider = null;
|
|
2437
|
+
this.connectionUri = null;
|
|
2438
|
+
this.accountsChangedCallback = null;
|
|
2439
|
+
this.initPromise = null;
|
|
2440
|
+
this.config = {
|
|
2441
|
+
projectId: config.projectId,
|
|
2442
|
+
appName: config.appName
|
|
2443
|
+
};
|
|
2444
|
+
}
|
|
2445
|
+
async ensureInitialized() {
|
|
2446
|
+
if (this.provider) return;
|
|
2447
|
+
if (!this.initPromise) {
|
|
2448
|
+
this.initPromise = this.initializeProvider();
|
|
2449
|
+
}
|
|
2450
|
+
await this.initPromise;
|
|
2451
|
+
}
|
|
2452
|
+
async initializeProvider() {
|
|
2453
|
+
if (typeof window === "undefined") return;
|
|
2454
|
+
const { EthereumProvider } = await import("@walletconnect/ethereum-provider");
|
|
2455
|
+
this.provider = await EthereumProvider.init({
|
|
2456
|
+
projectId: this.config.projectId ?? "",
|
|
2457
|
+
optionalChains: [1],
|
|
2458
|
+
showQrModal: false,
|
|
2459
|
+
metadata: {
|
|
2460
|
+
name: this.config.appName,
|
|
2461
|
+
description: this.config.appName,
|
|
2462
|
+
url: window.location.origin,
|
|
2463
|
+
icons: []
|
|
2464
|
+
}
|
|
2465
|
+
});
|
|
2466
|
+
this.provider.on("display_uri", (uri) => {
|
|
2467
|
+
this.connectionUri = uri;
|
|
2468
|
+
if (typeof window !== "undefined") {
|
|
2469
|
+
window.dispatchEvent(new CustomEvent("walletconnect:uri", { detail: { uri } }));
|
|
2470
|
+
}
|
|
2471
|
+
});
|
|
2472
|
+
this.provider.on("connect", (session) => {
|
|
2473
|
+
if (typeof window !== "undefined") {
|
|
2474
|
+
window.dispatchEvent(new CustomEvent("walletconnect:connect", { detail: { session } }));
|
|
2475
|
+
}
|
|
2476
|
+
});
|
|
2477
|
+
this.provider.on("disconnect", () => {
|
|
2478
|
+
this.connectionUri = null;
|
|
2479
|
+
});
|
|
2480
|
+
this.provider.on("session_delete", () => {
|
|
2481
|
+
if (typeof window !== "undefined") {
|
|
2482
|
+
window.dispatchEvent(new CustomEvent("walletconnect:disconnect"));
|
|
2483
|
+
}
|
|
2484
|
+
});
|
|
2485
|
+
}
|
|
2486
|
+
isInstalled() {
|
|
2487
|
+
return true;
|
|
2488
|
+
}
|
|
2489
|
+
async connect() {
|
|
2490
|
+
if (!this.config.projectId) {
|
|
2491
|
+
throw createConfigError("WalletConnect");
|
|
2492
|
+
}
|
|
2493
|
+
try {
|
|
2494
|
+
await this.ensureInitialized();
|
|
2495
|
+
if (!this.provider) {
|
|
2496
|
+
sentryLogger.error("connect: WalletConnect is not available");
|
|
2497
|
+
throw new Error("WalletConnect is not available");
|
|
2498
|
+
}
|
|
2499
|
+
const accounts = await this.provider.enable();
|
|
2500
|
+
if (!accounts || accounts.length === 0 || !accounts[0]) {
|
|
2501
|
+
sentryLogger.error("connect: No accounts returned from WalletConnect");
|
|
2502
|
+
throw new Error("No accounts returned from WalletConnect");
|
|
2503
|
+
}
|
|
2504
|
+
return {
|
|
2505
|
+
address: accounts[0],
|
|
2506
|
+
provider: this.provider,
|
|
2507
|
+
walletId: this.id
|
|
2508
|
+
};
|
|
2509
|
+
} catch {
|
|
2510
|
+
this.connectionUri = null;
|
|
2511
|
+
throw new Error("Failed to connect to WalletConnect");
|
|
2512
|
+
}
|
|
2513
|
+
}
|
|
2514
|
+
getConnectionUri() {
|
|
2515
|
+
return this.connectionUri;
|
|
2516
|
+
}
|
|
2517
|
+
/**
|
|
2518
|
+
* Starts a WalletConnect session for headless/custom QR code flows.
|
|
2519
|
+
* Returns the URI immediately and a function to wait for the connection.
|
|
2520
|
+
*/
|
|
2521
|
+
async startSession(timeout = 1e4) {
|
|
2522
|
+
if (!this.config.projectId) {
|
|
2523
|
+
throw new Error("WalletConnect projectId is required");
|
|
2524
|
+
}
|
|
2525
|
+
await this.ensureInitialized();
|
|
2526
|
+
if (!this.provider) {
|
|
2527
|
+
sentryLogger.error("startSession: WalletConnect is not available");
|
|
2528
|
+
throw new Error("WalletConnect is not available");
|
|
2529
|
+
}
|
|
2530
|
+
this.connectionUri = null;
|
|
2531
|
+
const uriPromise = new Promise((resolve, reject) => {
|
|
2532
|
+
const timeoutId = setTimeout(() => {
|
|
2533
|
+
reject(new Error("Timeout waiting for WalletConnect URI"));
|
|
2534
|
+
}, timeout);
|
|
2535
|
+
this.provider.once("display_uri", (uri2) => {
|
|
2536
|
+
clearTimeout(timeoutId);
|
|
2537
|
+
this.connectionUri = uri2;
|
|
2538
|
+
resolve(uri2);
|
|
2539
|
+
});
|
|
2540
|
+
});
|
|
2541
|
+
const connectionPromise = (async () => {
|
|
2542
|
+
const accounts = await this.provider.enable();
|
|
2543
|
+
if (!accounts || accounts.length === 0 || !accounts[0]) {
|
|
2544
|
+
sentryLogger.error("startSession: No accounts returned from WalletConnect");
|
|
2545
|
+
throw new Error("No accounts returned from WalletConnect");
|
|
2546
|
+
}
|
|
2547
|
+
return {
|
|
2548
|
+
address: accounts[0],
|
|
2549
|
+
provider: this.provider,
|
|
2550
|
+
walletId: this.id
|
|
2551
|
+
};
|
|
2552
|
+
})();
|
|
2553
|
+
const uri = await uriPromise;
|
|
2554
|
+
return {
|
|
2555
|
+
uri,
|
|
2556
|
+
waitForConnection: async () => {
|
|
2557
|
+
try {
|
|
2558
|
+
return await connectionPromise;
|
|
2559
|
+
} catch {
|
|
2560
|
+
this.connectionUri = null;
|
|
2561
|
+
throw new Error("Failed to connect via WalletConnect");
|
|
2562
|
+
}
|
|
2563
|
+
}
|
|
2564
|
+
};
|
|
2565
|
+
}
|
|
2566
|
+
async tryRestoreConnection() {
|
|
2567
|
+
try {
|
|
2568
|
+
await this.ensureInitialized();
|
|
2569
|
+
if (!this.provider) {
|
|
2570
|
+
return null;
|
|
2571
|
+
}
|
|
2572
|
+
const accounts = this.provider.accounts;
|
|
2573
|
+
if (!accounts || accounts.length === 0 || !accounts[0]) {
|
|
2574
|
+
return null;
|
|
2575
|
+
}
|
|
2576
|
+
return {
|
|
2577
|
+
address: accounts[0],
|
|
2578
|
+
provider: this.provider,
|
|
2579
|
+
walletId: this.id
|
|
2580
|
+
};
|
|
2581
|
+
} catch {
|
|
2582
|
+
return null;
|
|
2583
|
+
}
|
|
2584
|
+
}
|
|
2585
|
+
async disconnect() {
|
|
2586
|
+
try {
|
|
2587
|
+
if (this.provider) {
|
|
2588
|
+
await this.provider.disconnect();
|
|
2589
|
+
}
|
|
2590
|
+
} finally {
|
|
2591
|
+
this.connectionUri = null;
|
|
2592
|
+
this.provider = null;
|
|
2593
|
+
this.initPromise = null;
|
|
2594
|
+
}
|
|
2595
|
+
}
|
|
2596
|
+
getProvider() {
|
|
2597
|
+
return this.provider;
|
|
2598
|
+
}
|
|
2599
|
+
// Called by Aurum when user connects wallet
|
|
2600
|
+
// Passes Aurum.ts --> syncStateFromAccountsChanged() to handle the provider accounts changed event
|
|
2601
|
+
onAccountsChanged(callback) {
|
|
2602
|
+
if (!this.provider?.on) return;
|
|
2603
|
+
if (this.accountsChangedCallback) {
|
|
2604
|
+
this.provider.removeListener?.("accountsChanged", this.accountsChangedCallback);
|
|
2605
|
+
}
|
|
2606
|
+
this.accountsChangedCallback = callback;
|
|
2607
|
+
this.provider.on("accountsChanged", this.accountsChangedCallback);
|
|
2608
|
+
}
|
|
2609
|
+
removeListeners() {
|
|
2610
|
+
if (!this.provider?.removeListener || !this.accountsChangedCallback) return;
|
|
2611
|
+
this.provider.removeListener("accountsChanged", this.accountsChangedCallback);
|
|
2612
|
+
this.accountsChangedCallback = null;
|
|
2613
|
+
}
|
|
2614
|
+
};
|
|
2615
|
+
|
|
2163
2616
|
// src/hooks/useConnectSelectedWallet.tsx
|
|
2164
|
-
import { WalletId as WalletId8 } from "@aurum-sdk/types";
|
|
2165
2617
|
var useConnectSelectedWallet = () => {
|
|
2166
2618
|
const { navigateTo } = useNavigation();
|
|
2167
2619
|
const connectInstalledWallet = async ({ adapter, onConnect, setSuccess }) => {
|
|
@@ -2181,7 +2633,7 @@ var useConnectSelectedWallet = () => {
|
|
|
2181
2633
|
}
|
|
2182
2634
|
};
|
|
2183
2635
|
const connectUninstalledWalletQRCode = async ({ displayedWallets, onConnect, setSuccess }) => {
|
|
2184
|
-
const walletConnectAdapter = displayedWallets?.find((
|
|
2636
|
+
const walletConnectAdapter = displayedWallets?.find((w) => w instanceof WalletConnectAdapter);
|
|
2185
2637
|
if (!walletConnectAdapter) {
|
|
2186
2638
|
sentryLogger.error("connectUninstalledWalletQRCode: WalletConnect adapter not found");
|
|
2187
2639
|
throw new Error("WalletConnect adapter not found");
|
|
@@ -2207,7 +2659,7 @@ var useConnectSelectedWallet = () => {
|
|
|
2207
2659
|
onConnect,
|
|
2208
2660
|
setSuccess
|
|
2209
2661
|
}) => {
|
|
2210
|
-
const walletConnectAdapter = displayedWallets?.find((
|
|
2662
|
+
const walletConnectAdapter = displayedWallets?.find((w) => w instanceof WalletConnectAdapter);
|
|
2211
2663
|
if (!walletConnectAdapter) {
|
|
2212
2664
|
sentryLogger.error("connectWithMobileDeepLink: WalletConnect adapter not found");
|
|
2213
2665
|
throw new Error("WalletConnect adapter not found");
|
|
@@ -2269,7 +2721,7 @@ var useConnectSelectedWallet = () => {
|
|
|
2269
2721
|
};
|
|
2270
2722
|
|
|
2271
2723
|
// src/contexts/ConnectModalContext.tsx
|
|
2272
|
-
import { WalletId as
|
|
2724
|
+
import { WalletId as WalletId8 } from "@aurum-sdk/types";
|
|
2273
2725
|
import { jsx as jsx43 } from "react/jsx-runtime";
|
|
2274
2726
|
var ConnectModalContext = createContext4(null);
|
|
2275
2727
|
var useConnectModal = () => {
|
|
@@ -2304,12 +2756,12 @@ var ConnectModalProvider = ({ children, displayedWallets, onConnect }) => {
|
|
|
2304
2756
|
const isDesktop = !isOnMobile;
|
|
2305
2757
|
const hasDeepLink = Boolean(wallet.wcDeepLinkUrl);
|
|
2306
2758
|
if (isDesktop) {
|
|
2307
|
-
if (wallet
|
|
2759
|
+
if (wallet instanceof AppKitAdapter)
|
|
2308
2760
|
return await connectAppKit({ adapter: wallet, onConnect, setSuccess: setQrSuccess });
|
|
2309
2761
|
if (!wallet.isInstalled() && !hasDeepLink) {
|
|
2310
2762
|
return await redirectToDownloadPage();
|
|
2311
2763
|
}
|
|
2312
|
-
if (wallet.id ===
|
|
2764
|
+
if (wallet.id === WalletId8.WalletConnect || !wallet.isInstalled())
|
|
2313
2765
|
return await connectUninstalledWalletQRCode({
|
|
2314
2766
|
adapter: wallet,
|
|
2315
2767
|
displayedWallets,
|
|
@@ -2319,11 +2771,11 @@ var ConnectModalProvider = ({ children, displayedWallets, onConnect }) => {
|
|
|
2319
2771
|
return await connectInstalledWallet({ adapter: wallet, onConnect, setSuccess });
|
|
2320
2772
|
}
|
|
2321
2773
|
if (isOnMobile) {
|
|
2322
|
-
if (wallet.id ===
|
|
2323
|
-
const appkitAdapter = displayedWallets?.find((
|
|
2774
|
+
if (wallet.id === WalletId8.WalletConnect) {
|
|
2775
|
+
const appkitAdapter = displayedWallets?.find((w) => w instanceof AppKitAdapter);
|
|
2324
2776
|
if (!appkitAdapter) {
|
|
2325
|
-
sentryLogger.error("
|
|
2326
|
-
throw new Error("
|
|
2777
|
+
sentryLogger.error("WalletConnect modal adapter not found");
|
|
2778
|
+
throw new Error("WalletConnect modal adapter not found");
|
|
2327
2779
|
}
|
|
2328
2780
|
return await connectAppKit({ adapter: appkitAdapter, onConnect, setSuccess: setQrSuccess });
|
|
2329
2781
|
}
|
|
@@ -2431,9 +2883,11 @@ export {
|
|
|
2431
2883
|
initSentry,
|
|
2432
2884
|
sentryLogger,
|
|
2433
2885
|
createConfigError,
|
|
2886
|
+
AppKitAdapter,
|
|
2434
2887
|
isMobile,
|
|
2888
|
+
WalletConnectAdapter,
|
|
2435
2889
|
ConnectUIProviders,
|
|
2436
2890
|
ConnectPages,
|
|
2437
2891
|
generateCompleteStyles
|
|
2438
2892
|
};
|
|
2439
|
-
//# sourceMappingURL=chunk-
|
|
2893
|
+
//# sourceMappingURL=chunk-NRC534B3.mjs.map
|