@magic-sdk/provider 29.4.1-canary.913.16658556087.0 → 29.4.1

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/cjs/index.js CHANGED
@@ -1,2447 +1,6 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __commonJS = (cb, mod) => function __require() {
9
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
10
- };
11
- var __export = (target, all) => {
12
- for (var name in all)
13
- __defProp(target, name, { get: all[name], enumerable: true });
14
- };
15
- var __copyProps = (to, from, except, desc) => {
16
- if (from && typeof from === "object" || typeof from === "function") {
17
- for (let key2 of __getOwnPropNames(from))
18
- if (!__hasOwnProp.call(to, key2) && key2 !== except)
19
- __defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable });
20
- }
21
- return to;
22
- };
23
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
- // If the importer is in node compatibility mode or this is not an ESM
25
- // file that has been converted to a CommonJS file using a Babel-
26
- // compatible transform (i.e. "__esModule" has not been set), then set
27
- // "default" to the CommonJS "module.exports" for node compatibility.
28
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
- mod
30
- ));
31
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
32
-
33
- // node_modules/eventemitter3/index.js
34
- var require_eventemitter3 = __commonJS({
35
- "node_modules/eventemitter3/index.js"(exports, module2) {
36
- "use strict";
37
- var has = Object.prototype.hasOwnProperty;
38
- var prefix = "~";
39
- function Events() {
40
- }
41
- if (Object.create) {
42
- Events.prototype = /* @__PURE__ */ Object.create(null);
43
- if (!new Events().__proto__) prefix = false;
44
- }
45
- function EE(fn, context, once) {
46
- this.fn = fn;
47
- this.context = context;
48
- this.once = once || false;
49
- }
50
- function addListener(emitter, event, fn, context, once) {
51
- if (typeof fn !== "function") {
52
- throw new TypeError("The listener must be a function");
53
- }
54
- var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;
55
- if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;
56
- else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);
57
- else emitter._events[evt] = [emitter._events[evt], listener];
58
- return emitter;
59
- }
60
- function clearEvent(emitter, evt) {
61
- if (--emitter._eventsCount === 0) emitter._events = new Events();
62
- else delete emitter._events[evt];
63
- }
64
- function EventEmitter2() {
65
- this._events = new Events();
66
- this._eventsCount = 0;
67
- }
68
- EventEmitter2.prototype.eventNames = function eventNames() {
69
- var names = [], events, name;
70
- if (this._eventsCount === 0) return names;
71
- for (name in events = this._events) {
72
- if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
73
- }
74
- if (Object.getOwnPropertySymbols) {
75
- return names.concat(Object.getOwnPropertySymbols(events));
76
- }
77
- return names;
78
- };
79
- EventEmitter2.prototype.listeners = function listeners(event) {
80
- var evt = prefix ? prefix + event : event, handlers = this._events[evt];
81
- if (!handlers) return [];
82
- if (handlers.fn) return [handlers.fn];
83
- for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
84
- ee[i] = handlers[i].fn;
85
- }
86
- return ee;
87
- };
88
- EventEmitter2.prototype.listenerCount = function listenerCount(event) {
89
- var evt = prefix ? prefix + event : event, listeners = this._events[evt];
90
- if (!listeners) return 0;
91
- if (listeners.fn) return 1;
92
- return listeners.length;
93
- };
94
- EventEmitter2.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
95
- var evt = prefix ? prefix + event : event;
96
- if (!this._events[evt]) return false;
97
- var listeners = this._events[evt], len = arguments.length, args, i;
98
- if (listeners.fn) {
99
- if (listeners.once) this.removeListener(event, listeners.fn, void 0, true);
100
- switch (len) {
101
- case 1:
102
- return listeners.fn.call(listeners.context), true;
103
- case 2:
104
- return listeners.fn.call(listeners.context, a1), true;
105
- case 3:
106
- return listeners.fn.call(listeners.context, a1, a2), true;
107
- case 4:
108
- return listeners.fn.call(listeners.context, a1, a2, a3), true;
109
- case 5:
110
- return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
111
- case 6:
112
- return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
113
- }
114
- for (i = 1, args = new Array(len - 1); i < len; i++) {
115
- args[i - 1] = arguments[i];
116
- }
117
- listeners.fn.apply(listeners.context, args);
118
- } else {
119
- var length2 = listeners.length, j;
120
- for (i = 0; i < length2; i++) {
121
- if (listeners[i].once) this.removeListener(event, listeners[i].fn, void 0, true);
122
- switch (len) {
123
- case 1:
124
- listeners[i].fn.call(listeners[i].context);
125
- break;
126
- case 2:
127
- listeners[i].fn.call(listeners[i].context, a1);
128
- break;
129
- case 3:
130
- listeners[i].fn.call(listeners[i].context, a1, a2);
131
- break;
132
- case 4:
133
- listeners[i].fn.call(listeners[i].context, a1, a2, a3);
134
- break;
135
- default:
136
- if (!args) for (j = 1, args = new Array(len - 1); j < len; j++) {
137
- args[j - 1] = arguments[j];
138
- }
139
- listeners[i].fn.apply(listeners[i].context, args);
140
- }
141
- }
142
- }
143
- return true;
144
- };
145
- EventEmitter2.prototype.on = function on(event, fn, context) {
146
- return addListener(this, event, fn, context, false);
147
- };
148
- EventEmitter2.prototype.once = function once(event, fn, context) {
149
- return addListener(this, event, fn, context, true);
150
- };
151
- EventEmitter2.prototype.removeListener = function removeListener(event, fn, context, once) {
152
- var evt = prefix ? prefix + event : event;
153
- if (!this._events[evt]) return this;
154
- if (!fn) {
155
- clearEvent(this, evt);
156
- return this;
157
- }
158
- var listeners = this._events[evt];
159
- if (listeners.fn) {
160
- if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {
161
- clearEvent(this, evt);
162
- }
163
- } else {
164
- for (var i = 0, events = [], length2 = listeners.length; i < length2; i++) {
165
- if (listeners[i].fn !== fn || once && !listeners[i].once || context && listeners[i].context !== context) {
166
- events.push(listeners[i]);
167
- }
168
- }
169
- if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
170
- else clearEvent(this, evt);
171
- }
172
- return this;
173
- };
174
- EventEmitter2.prototype.removeAllListeners = function removeAllListeners(event) {
175
- var evt;
176
- if (event) {
177
- evt = prefix ? prefix + event : event;
178
- if (this._events[evt]) clearEvent(this, evt);
179
- } else {
180
- this._events = new Events();
181
- this._eventsCount = 0;
182
- }
183
- return this;
184
- };
185
- EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;
186
- EventEmitter2.prototype.addListener = EventEmitter2.prototype.on;
187
- EventEmitter2.prefixed = prefix;
188
- EventEmitter2.EventEmitter = EventEmitter2;
189
- if ("undefined" !== typeof module2) {
190
- module2.exports = EventEmitter2;
191
- }
192
- }
193
- });
194
-
195
- // src/index.ts
196
- var index_exports = {};
197
- __export(index_exports, {
198
- Extension: () => Extension,
199
- MagicExtensionError: () => MagicExtensionError,
200
- MagicExtensionWarning: () => MagicExtensionWarning,
201
- MagicRPCError: () => MagicRPCError,
202
- MagicSDKError: () => MagicSDKError,
203
- MagicSDKWarning: () => MagicSDKWarning,
204
- SDKBase: () => SDKBase,
205
- STORE_KEY_PRIVATE_KEY: () => STORE_KEY_PRIVATE_KEY,
206
- STORE_KEY_PUBLIC_JWK: () => STORE_KEY_PUBLIC_JWK,
207
- TypedEmitter: () => TypedEmitter,
208
- ViewController: () => ViewController,
209
- clearKeys: () => clearKeys,
210
- createDeprecationWarning: () => createDeprecationWarning,
211
- createDuplicateIframeWarning: () => createDuplicateIframeWarning,
212
- createExtensionNotInitializedError: () => createExtensionNotInitializedError,
213
- createIncompatibleExtensionsError: () => createIncompatibleExtensionsError,
214
- createInvalidArgumentError: () => createInvalidArgumentError,
215
- createJwt: () => createJwt,
216
- createMalformedResponseError: () => createMalformedResponseError,
217
- createMissingApiKeyError: () => createMissingApiKeyError,
218
- createModalNotReadyError: () => createModalNotReadyError,
219
- createPromiEvent: () => createPromiEvent,
220
- createPromise: () => createPromise,
221
- createReactNativeEndpointConfigurationWarning: () => createReactNativeEndpointConfigurationWarning,
222
- createSDK: () => createSDK,
223
- createSynchronousWeb3MethodWarning: () => createSynchronousWeb3MethodWarning,
224
- createTypedEmitter: () => createTypedEmitter,
225
- createURL: () => createURL,
226
- decodeJSON: () => decodeJSON,
227
- encodeJSON: () => encodeJSON,
228
- getPayloadId: () => getPayloadId,
229
- isEmpty: () => isEmpty,
230
- isJsonRpcErrorCode: () => isJsonRpcErrorCode,
231
- isJsonRpcRequestPayload: () => isJsonRpcRequestPayload,
232
- isJsonRpcResponsePayload: () => isJsonRpcResponsePayload,
233
- isMagicPayloadMethod: () => isMagicPayloadMethod,
234
- isMajorVersionAtLeast: () => isMajorVersionAtLeast,
235
- isPromiEvent: () => isPromiEvent,
236
- isWebCryptoSupported: () => isWebCryptoSupported,
237
- storage: () => storage_exports,
238
- uuid: () => uuid
239
- });
240
- module.exports = __toCommonJS(index_exports);
241
-
242
- // src/util/semver.js
243
- function createCommonjsModule(e) {
244
- const r = { exports: {} };
245
- return e(r, r.exports), r.exports;
246
- }
247
- var MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER || 9007199254740991;
248
- var constants = { SEMVER_SPEC_VERSION: "2.0.0", MAX_LENGTH: 256, MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1, MAX_SAFE_COMPONENT_LENGTH: 16 };
249
- var debug = "object" == typeof process && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...e) => console.error("SEMVER", ...e) : () => {
250
- };
251
- var debug_1 = debug;
252
- var re_1 = createCommonjsModule(function(e, r) {
253
- const { MAX_SAFE_COMPONENT_LENGTH: t2 } = constants, s = (r = e.exports = {}).re = [], i = r.src = [], o = r.t = {};
254
- let a = 0;
255
- const n = (e2, r2, t3) => {
256
- const n2 = a++;
257
- debug_1(n2, r2), o[e2] = n2, i[n2] = r2, s[n2] = new RegExp(r2, t3 ? "g" : void 0);
258
- };
259
- n("NUMERICIDENTIFIER", "0|[1-9]\\d*"), n("NUMERICIDENTIFIERLOOSE", "[0-9]+"), n("NONNUMERICIDENTIFIER", "\\d*[a-zA-Z-][a-zA-Z0-9-]*"), n("MAINVERSION", `(${i[o.NUMERICIDENTIFIER]})\\.(${i[o.NUMERICIDENTIFIER]})\\.(${i[o.NUMERICIDENTIFIER]})`), n("MAINVERSIONLOOSE", `(${i[o.NUMERICIDENTIFIERLOOSE]})\\.(${i[o.NUMERICIDENTIFIERLOOSE]})\\.(${i[o.NUMERICIDENTIFIERLOOSE]})`), n("PRERELEASEIDENTIFIER", `(?:${i[o.NUMERICIDENTIFIER]}|${i[o.NONNUMERICIDENTIFIER]})`), n("PRERELEASEIDENTIFIERLOOSE", `(?:${i[o.NUMERICIDENTIFIERLOOSE]}|${i[o.NONNUMERICIDENTIFIER]})`), n("PRERELEASE", `(?:-(${i[o.PRERELEASEIDENTIFIER]}(?:\\.${i[o.PRERELEASEIDENTIFIER]})*))`), n("PRERELEASELOOSE", `(?:-?(${i[o.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${i[o.PRERELEASEIDENTIFIERLOOSE]})*))`), n("BUILDIDENTIFIER", "[0-9A-Za-z-]+"), n("BUILD", `(?:\\+(${i[o.BUILDIDENTIFIER]}(?:\\.${i[o.BUILDIDENTIFIER]})*))`), n("FULLPLAIN", `v?${i[o.MAINVERSION]}${i[o.PRERELEASE]}?${i[o.BUILD]}?`), n("FULL", `^${i[o.FULLPLAIN]}$`), n("LOOSEPLAIN", `[v=\\s]*${i[o.MAINVERSIONLOOSE]}${i[o.PRERELEASELOOSE]}?${i[o.BUILD]}?`), n("LOOSE", `^${i[o.LOOSEPLAIN]}$`), n("GTLT", "((?:<|>)?=?)"), n("XRANGEIDENTIFIERLOOSE", `${i[o.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`), n("XRANGEIDENTIFIER", `${i[o.NUMERICIDENTIFIER]}|x|X|\\*`), n("XRANGEPLAIN", `[v=\\s]*(${i[o.XRANGEIDENTIFIER]})(?:\\.(${i[o.XRANGEIDENTIFIER]})(?:\\.(${i[o.XRANGEIDENTIFIER]})(?:${i[o.PRERELEASE]})?${i[o.BUILD]}?)?)?`), n("XRANGEPLAINLOOSE", `[v=\\s]*(${i[o.XRANGEIDENTIFIERLOOSE]})(?:\\.(${i[o.XRANGEIDENTIFIERLOOSE]})(?:\\.(${i[o.XRANGEIDENTIFIERLOOSE]})(?:${i[o.PRERELEASELOOSE]})?${i[o.BUILD]}?)?)?`), n("XRANGE", `^${i[o.GTLT]}\\s*${i[o.XRANGEPLAIN]}$`), n("XRANGELOOSE", `^${i[o.GTLT]}\\s*${i[o.XRANGEPLAINLOOSE]}$`), n("COERCE", `(^|[^\\d])(\\d{1,${t2}})(?:\\.(\\d{1,${t2}}))?(?:\\.(\\d{1,${t2}}))?(?:$|[^\\d])`), n("COERCERTL", i[o.COERCE], true), n("LONETILDE", "(?:~>?)"), n("TILDETRIM", `(\\s*)${i[o.LONETILDE]}\\s+`, true), r.tildeTrimReplace = "$1~", n("TILDE", `^${i[o.LONETILDE]}${i[o.XRANGEPLAIN]}$`), n("TILDELOOSE", `^${i[o.LONETILDE]}${i[o.XRANGEPLAINLOOSE]}$`), n("LONECARET", "(?:\\^)"), n("CARETTRIM", `(\\s*)${i[o.LONECARET]}\\s+`, true), r.caretTrimReplace = "$1^", n("CARET", `^${i[o.LONECARET]}${i[o.XRANGEPLAIN]}$`), n("CARETLOOSE", `^${i[o.LONECARET]}${i[o.XRANGEPLAINLOOSE]}$`), n("COMPARATORLOOSE", `^${i[o.GTLT]}\\s*(${i[o.LOOSEPLAIN]})$|^$`), n("COMPARATOR", `^${i[o.GTLT]}\\s*(${i[o.FULLPLAIN]})$|^$`), n("COMPARATORTRIM", `(\\s*)${i[o.GTLT]}\\s*(${i[o.LOOSEPLAIN]}|${i[o.XRANGEPLAIN]})`, true), r.comparatorTrimReplace = "$1$2$3", n("HYPHENRANGE", `^\\s*(${i[o.XRANGEPLAIN]})\\s+-\\s+(${i[o.XRANGEPLAIN]})\\s*$`), n("HYPHENRANGELOOSE", `^\\s*(${i[o.XRANGEPLAINLOOSE]})\\s+-\\s+(${i[o.XRANGEPLAINLOOSE]})\\s*$`), n("STAR", "(<|>)?=?\\s*\\*"), n("GTE0", "^\\s*>=\\s*0.0.0\\s*$"), n("GTE0PRE", "^\\s*>=\\s*0.0.0-0\\s*$");
260
- });
261
- var numeric = /^[0-9]+$/;
262
- var compareIdentifiers$1 = (e, r) => {
263
- const t2 = numeric.test(e), s = numeric.test(r);
264
- return t2 && s && (e = +e, r = +r), e === r ? 0 : t2 && !s ? -1 : s && !t2 ? 1 : e < r ? -1 : 1;
265
- };
266
- var rcompareIdentifiers = (e, r) => compareIdentifiers$1(r, e);
267
- var identifiers = { compareIdentifiers: compareIdentifiers$1, rcompareIdentifiers };
268
- var { MAX_LENGTH: MAX_LENGTH$1, MAX_SAFE_INTEGER } = constants;
269
- var { re: re$4, t: t$4 } = re_1;
270
- var { compareIdentifiers } = identifiers;
271
- var SemVer = class _SemVer {
272
- constructor(e, r) {
273
- if (r && "object" == typeof r || (r = { loose: !!r, includePrerelease: false }), e instanceof _SemVer) {
274
- if (e.loose === !!r.loose && e.includePrerelease === !!r.includePrerelease) return e;
275
- e = e.version;
276
- } else if ("string" != typeof e) throw new TypeError(`Invalid Version: ${e}`);
277
- if (e.length > MAX_LENGTH$1) throw new TypeError(`version is longer than ${MAX_LENGTH$1} characters`);
278
- debug_1("SemVer", e, r), this.options = r, this.loose = !!r.loose, this.includePrerelease = !!r.includePrerelease;
279
- const t2 = e.trim().match(r.loose ? re$4[t$4.LOOSE] : re$4[t$4.FULL]);
280
- if (!t2) throw new TypeError(`Invalid Version: ${e}`);
281
- if (this.raw = e, this.major = +t2[1], this.minor = +t2[2], this.patch = +t2[3], this.major > MAX_SAFE_INTEGER || this.major < 0) throw new TypeError("Invalid major version");
282
- if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) throw new TypeError("Invalid minor version");
283
- if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) throw new TypeError("Invalid patch version");
284
- t2[4] ? this.prerelease = t2[4].split(".").map((e2) => {
285
- if (/^[0-9]+$/.test(e2)) {
286
- const r2 = +e2;
287
- if (r2 >= 0 && r2 < MAX_SAFE_INTEGER) return r2;
288
- }
289
- return e2;
290
- }) : this.prerelease = [], this.build = t2[5] ? t2[5].split(".") : [], this.format();
291
- }
292
- format() {
293
- return this.version = `${this.major}.${this.minor}.${this.patch}`, this.prerelease.length && (this.version += `-${this.prerelease.join(".")}`), this.version;
294
- }
295
- toString() {
296
- return this.version;
297
- }
298
- compare(e) {
299
- if (debug_1("SemVer.compare", this.version, this.options, e), !(e instanceof _SemVer)) {
300
- if ("string" == typeof e && e === this.version) return 0;
301
- e = new _SemVer(e, this.options);
302
- }
303
- return e.version === this.version ? 0 : this.compareMain(e) || this.comparePre(e);
304
- }
305
- compareMain(e) {
306
- return e instanceof _SemVer || (e = new _SemVer(e, this.options)), compareIdentifiers(this.major, e.major) || compareIdentifiers(this.minor, e.minor) || compareIdentifiers(this.patch, e.patch);
307
- }
308
- comparePre(e) {
309
- if (e instanceof _SemVer || (e = new _SemVer(e, this.options)), this.prerelease.length && !e.prerelease.length) return -1;
310
- if (!this.prerelease.length && e.prerelease.length) return 1;
311
- if (!this.prerelease.length && !e.prerelease.length) return 0;
312
- let r = 0;
313
- do {
314
- const t2 = this.prerelease[r], s = e.prerelease[r];
315
- if (debug_1("prerelease compare", r, t2, s), void 0 === t2 && void 0 === s) return 0;
316
- if (void 0 === s) return 1;
317
- if (void 0 === t2) return -1;
318
- if (t2 !== s) return compareIdentifiers(t2, s);
319
- } while (++r);
320
- }
321
- compareBuild(e) {
322
- e instanceof _SemVer || (e = new _SemVer(e, this.options));
323
- let r = 0;
324
- do {
325
- const t2 = this.build[r], s = e.build[r];
326
- if (debug_1("prerelease compare", r, t2, s), void 0 === t2 && void 0 === s) return 0;
327
- if (void 0 === s) return 1;
328
- if (void 0 === t2) return -1;
329
- if (t2 !== s) return compareIdentifiers(t2, s);
330
- } while (++r);
331
- }
332
- inc(e, r) {
333
- switch (e) {
334
- case "premajor":
335
- this.prerelease.length = 0, this.patch = 0, this.minor = 0, this.major++, this.inc("pre", r);
336
- break;
337
- case "preminor":
338
- this.prerelease.length = 0, this.patch = 0, this.minor++, this.inc("pre", r);
339
- break;
340
- case "prepatch":
341
- this.prerelease.length = 0, this.inc("patch", r), this.inc("pre", r);
342
- break;
343
- case "prerelease":
344
- 0 === this.prerelease.length && this.inc("patch", r), this.inc("pre", r);
345
- break;
346
- case "major":
347
- 0 === this.minor && 0 === this.patch && 0 !== this.prerelease.length || this.major++, this.minor = 0, this.patch = 0, this.prerelease = [];
348
- break;
349
- case "minor":
350
- 0 === this.patch && 0 !== this.prerelease.length || this.minor++, this.patch = 0, this.prerelease = [];
351
- break;
352
- case "patch":
353
- 0 === this.prerelease.length && this.patch++, this.prerelease = [];
354
- break;
355
- case "pre":
356
- if (0 === this.prerelease.length) this.prerelease = [0];
357
- else {
358
- let e2 = this.prerelease.length;
359
- for (; --e2 >= 0; ) "number" == typeof this.prerelease[e2] && (this.prerelease[e2]++, e2 = -2);
360
- -1 === e2 && this.prerelease.push(0);
361
- }
362
- r && (this.prerelease[0] === r ? isNaN(this.prerelease[1]) && (this.prerelease = [r, 0]) : this.prerelease = [r, 0]);
363
- break;
364
- default:
365
- throw new Error(`invalid increment argument: ${e}`);
366
- }
367
- return this.format(), this.raw = this.version, this;
368
- }
369
- };
370
- var compare = (e, r, t2) => new SemVer(e, t2).compare(new SemVer(r, t2));
371
- var compare_1 = compare;
372
- var eq = (e, r, t2) => 0 === compare_1(e, r, t2);
373
- var eq_1 = eq;
374
- var neq = (e, r, t2) => 0 !== compare_1(e, r, t2);
375
- var neq_1 = neq;
376
- var gt = (e, r, t2) => compare_1(e, r, t2) > 0;
377
- var gt_1 = gt;
378
- var gte = (e, r, t2) => compare_1(e, r, t2) >= 0;
379
- var gte_1 = gte;
380
- var lt = (e, r, t2) => compare_1(e, r, t2) < 0;
381
- var lt_1 = lt;
382
- var lte = (e, r, t2) => compare_1(e, r, t2) <= 0;
383
- var lte_1 = lte;
384
- var cmp = (e, r, t2, s) => {
385
- switch (r) {
386
- case "===":
387
- return "object" == typeof e && (e = e.version), "object" == typeof t2 && (t2 = t2.version), e === t2;
388
- case "!==":
389
- return "object" == typeof e && (e = e.version), "object" == typeof t2 && (t2 = t2.version), e !== t2;
390
- case "":
391
- case "=":
392
- case "==":
393
- return eq_1(e, t2, s);
394
- case "!=":
395
- return neq_1(e, t2, s);
396
- case ">":
397
- return gt_1(e, t2, s);
398
- case ">=":
399
- return gte_1(e, t2, s);
400
- case "<":
401
- return lt_1(e, t2, s);
402
- case "<=":
403
- return lte_1(e, t2, s);
404
- default:
405
- throw new TypeError(`Invalid operator: ${r}`);
406
- }
407
- };
408
- var cmp_1 = cmp;
409
- var ANY = Symbol("SemVer ANY");
410
- var Comparator = class _Comparator {
411
- static get ANY() {
412
- return ANY;
413
- }
414
- constructor(e, r) {
415
- if (r && "object" == typeof r || (r = { loose: !!r, includePrerelease: false }), e instanceof _Comparator) {
416
- if (e.loose === !!r.loose) return e;
417
- e = e.value;
418
- }
419
- debug_1("comparator", e, r), this.options = r, this.loose = !!r.loose, this.parse(e), this.semver === ANY ? this.value = "" : this.value = this.operator + this.semver.version, debug_1("comp", this);
420
- }
421
- parse(e) {
422
- const r = this.options.loose ? re$3[t$3.COMPARATORLOOSE] : re$3[t$3.COMPARATOR], t2 = e.match(r);
423
- if (!t2) throw new TypeError(`Invalid comparator: ${e}`);
424
- this.operator = void 0 !== t2[1] ? t2[1] : "", "=" === this.operator && (this.operator = ""), t2[2] ? this.semver = new SemVer(t2[2], this.options.loose) : this.semver = ANY;
425
- }
426
- toString() {
427
- return this.value;
428
- }
429
- test(e) {
430
- if (debug_1("Comparator.test", e, this.options.loose), this.semver === ANY || e === ANY) return true;
431
- if ("string" == typeof e) try {
432
- e = new SemVer(e, this.options);
433
- } catch (e2) {
434
- return false;
435
- }
436
- return cmp_1(e, this.operator, this.semver, this.options);
437
- }
438
- intersects(e, r) {
439
- if (!(e instanceof _Comparator)) throw new TypeError("a Comparator is required");
440
- if (r && "object" == typeof r || (r = { loose: !!r, includePrerelease: false }), "" === this.operator) return "" === this.value || new Range(e.value, r).test(this.value);
441
- if ("" === e.operator) return "" === e.value || new Range(this.value, r).test(e.semver);
442
- const t2 = !(">=" !== this.operator && ">" !== this.operator || ">=" !== e.operator && ">" !== e.operator), s = !("<=" !== this.operator && "<" !== this.operator || "<=" !== e.operator && "<" !== e.operator), i = this.semver.version === e.semver.version, o = !(">=" !== this.operator && "<=" !== this.operator || ">=" !== e.operator && "<=" !== e.operator), a = cmp_1(this.semver, "<", e.semver, r) && (">=" === this.operator || ">" === this.operator) && ("<=" === e.operator || "<" === e.operator), n = cmp_1(this.semver, ">", e.semver, r) && ("<=" === this.operator || "<" === this.operator) && (">=" === e.operator || ">" === e.operator);
443
- return t2 || s || i && o || a || n;
444
- }
445
- };
446
- var { re: re$3, t: t$3 } = re_1;
447
- var Range = class _Range {
448
- constructor(e, r) {
449
- if (r && "object" == typeof r || (r = { loose: !!r, includePrerelease: false }), e instanceof _Range) return e.loose === !!r.loose && e.includePrerelease === !!r.includePrerelease ? e : new _Range(e.raw, r);
450
- if (e instanceof Comparator) return this.raw = e.value, this.set = [[e]], this.format(), this;
451
- if (this.options = r, this.loose = !!r.loose, this.includePrerelease = !!r.includePrerelease, this.raw = e, this.set = e.split(/\s*\|\|\s*/).map((e2) => this.parseRange(e2.trim())).filter((e2) => e2.length), !this.set.length) throw new TypeError(`Invalid SemVer Range: ${e}`);
452
- this.format();
453
- }
454
- format() {
455
- return this.range = this.set.map((e) => e.join(" ").trim()).join("||").trim(), this.range;
456
- }
457
- toString() {
458
- return this.range;
459
- }
460
- parseRange(e) {
461
- const { loose: r } = this.options;
462
- e = e.trim();
463
- const t2 = r ? re$2[t$2.HYPHENRANGELOOSE] : re$2[t$2.HYPHENRANGE];
464
- e = e.replace(t2, hyphenReplace(this.options.includePrerelease)), debug_1("hyphen replace", e), e = e.replace(re$2[t$2.COMPARATORTRIM], comparatorTrimReplace), debug_1("comparator trim", e, re$2[t$2.COMPARATORTRIM]), e = (e = (e = e.replace(re$2[t$2.TILDETRIM], tildeTrimReplace)).replace(re$2[t$2.CARETTRIM], caretTrimReplace)).split(/\s+/).join(" ");
465
- const s = r ? re$2[t$2.COMPARATORLOOSE] : re$2[t$2.COMPARATOR];
466
- return e.split(" ").map((e2) => parseComparator(e2, this.options)).join(" ").split(/\s+/).map((e2) => replaceGTE0(e2, this.options)).filter(this.options.loose ? (e2) => !!e2.match(s) : () => true).map((e2) => new Comparator(e2, this.options));
467
- }
468
- intersects(e, r) {
469
- if (!(e instanceof _Range)) throw new TypeError("a Range is required");
470
- return this.set.some((t2) => isSatisfiable(t2, r) && e.set.some((e2) => isSatisfiable(e2, r) && t2.every((t3) => e2.every((e3) => t3.intersects(e3, r)))));
471
- }
472
- test(e) {
473
- if (!e) return false;
474
- if ("string" == typeof e) try {
475
- e = new SemVer(e, this.options);
476
- } catch (e2) {
477
- return false;
478
- }
479
- for (let r = 0; r < this.set.length; r++) if (testSet(this.set[r], e, this.options)) return true;
480
- return false;
481
- }
482
- };
483
- var { re: re$2, t: t$2, comparatorTrimReplace, tildeTrimReplace, caretTrimReplace } = re_1;
484
- var isSatisfiable = (e, r) => {
485
- let t2 = true;
486
- const s = e.slice();
487
- let i = s.pop();
488
- for (; t2 && s.length; ) t2 = s.every((e2) => i.intersects(e2, r)), i = s.pop();
489
- return t2;
490
- };
491
- var parseComparator = (e, r) => (debug_1("comp", e, r), e = replaceCarets(e, r), debug_1("caret", e), e = replaceTildes(e, r), debug_1("tildes", e), e = replaceXRanges(e, r), debug_1("xrange", e), e = replaceStars(e, r), debug_1("stars", e), e);
492
- var isX = (e) => !e || "x" === e.toLowerCase() || "*" === e;
493
- var replaceTildes = (e, r) => e.trim().split(/\s+/).map((e2) => replaceTilde(e2, r)).join(" ");
494
- var replaceTilde = (e, r) => {
495
- const t2 = r.loose ? re$2[t$2.TILDELOOSE] : re$2[t$2.TILDE];
496
- return e.replace(t2, (r2, t3, s, i, o) => {
497
- let a;
498
- return debug_1("tilde", e, r2, t3, s, i, o), isX(t3) ? a = "" : isX(s) ? a = `>=${t3}.0.0 <${+t3 + 1}.0.0-0` : isX(i) ? a = `>=${t3}.${s}.0 <${t3}.${+s + 1}.0-0` : o ? (debug_1("replaceTilde pr", o), a = `>=${t3}.${s}.${i}-${o} <${t3}.${+s + 1}.0-0`) : a = `>=${t3}.${s}.${i} <${t3}.${+s + 1}.0-0`, debug_1("tilde return", a), a;
499
- });
500
- };
501
- var replaceCarets = (e, r) => e.trim().split(/\s+/).map((e2) => replaceCaret(e2, r)).join(" ");
502
- var replaceCaret = (e, r) => {
503
- debug_1("caret", e, r);
504
- const t2 = r.loose ? re$2[t$2.CARETLOOSE] : re$2[t$2.CARET], s = r.includePrerelease ? "-0" : "";
505
- return e.replace(t2, (r2, t3, i, o, a) => {
506
- let n;
507
- return debug_1("caret", e, r2, t3, i, o, a), isX(t3) ? n = "" : isX(i) ? n = `>=${t3}.0.0${s} <${+t3 + 1}.0.0-0` : isX(o) ? n = "0" === t3 ? `>=${t3}.${i}.0${s} <${t3}.${+i + 1}.0-0` : `>=${t3}.${i}.0${s} <${+t3 + 1}.0.0-0` : a ? (debug_1("replaceCaret pr", a), n = "0" === t3 ? "0" === i ? `>=${t3}.${i}.${o}-${a} <${t3}.${i}.${+o + 1}-0` : `>=${t3}.${i}.${o}-${a} <${t3}.${+i + 1}.0-0` : `>=${t3}.${i}.${o}-${a} <${+t3 + 1}.0.0-0`) : (debug_1("no pr"), n = "0" === t3 ? "0" === i ? `>=${t3}.${i}.${o}${s} <${t3}.${i}.${+o + 1}-0` : `>=${t3}.${i}.${o}${s} <${t3}.${+i + 1}.0-0` : `>=${t3}.${i}.${o} <${+t3 + 1}.0.0-0`), debug_1("caret return", n), n;
508
- });
509
- };
510
- var replaceXRanges = (e, r) => (debug_1("replaceXRanges", e, r), e.split(/\s+/).map((e2) => replaceXRange(e2, r)).join(" "));
511
- var replaceXRange = (e, r) => {
512
- e = e.trim();
513
- const t2 = r.loose ? re$2[t$2.XRANGELOOSE] : re$2[t$2.XRANGE];
514
- return e.replace(t2, (t3, s, i, o, a, n) => {
515
- debug_1("xRange", e, t3, s, i, o, a, n);
516
- const E = isX(i), p = E || isX(o), l = p || isX(a), c = l;
517
- return "=" === s && c && (s = ""), n = r.includePrerelease ? "-0" : "", E ? t3 = ">" === s || "<" === s ? "<0.0.0-0" : "*" : s && c ? (p && (o = 0), a = 0, ">" === s ? (s = ">=", p ? (i = +i + 1, o = 0, a = 0) : (o = +o + 1, a = 0)) : "<=" === s && (s = "<", p ? i = +i + 1 : o = +o + 1), "<" === s && (n = "-0"), t3 = `${s + i}.${o}.${a}${n}`) : p ? t3 = `>=${i}.0.0${n} <${+i + 1}.0.0-0` : l && (t3 = `>=${i}.${o}.0${n} <${i}.${+o + 1}.0-0`), debug_1("xRange return", t3), t3;
518
- });
519
- };
520
- var replaceStars = (e, r) => (debug_1("replaceStars", e, r), e.trim().replace(re$2[t$2.STAR], ""));
521
- var replaceGTE0 = (e, r) => (debug_1("replaceGTE0", e, r), e.trim().replace(re$2[r.includePrerelease ? t$2.GTE0PRE : t$2.GTE0], ""));
522
- var hyphenReplace = (e) => (r, t2, s, i, o, a, n, E, p, l, c, $, h) => `${t2 = isX(s) ? "" : isX(i) ? `>=${s}.0.0${e ? "-0" : ""}` : isX(o) ? `>=${s}.${i}.0${e ? "-0" : ""}` : a ? `>=${t2}` : `>=${t2}${e ? "-0" : ""}`} ${E = isX(p) ? "" : isX(l) ? `<${+p + 1}.0.0-0` : isX(c) ? `<${p}.${+l + 1}.0-0` : $ ? `<=${p}.${l}.${c}-${$}` : e ? `<${p}.${l}.${+c + 1}-0` : `<=${E}`}`.trim();
523
- var testSet = (e, r, t2) => {
524
- for (let t3 = 0; t3 < e.length; t3++) if (!e[t3].test(r)) return false;
525
- if (r.prerelease.length && !t2.includePrerelease) {
526
- for (let t3 = 0; t3 < e.length; t3++) if (debug_1(e[t3].semver), e[t3].semver !== Comparator.ANY && e[t3].semver.prerelease.length > 0) {
527
- const s = e[t3].semver;
528
- if (s.major === r.major && s.minor === r.minor && s.patch === r.patch) return true;
529
- }
530
- return false;
531
- }
532
- return true;
533
- };
534
- var satisfies = (e, r, t2) => {
535
- try {
536
- r = new Range(r, t2);
537
- } catch (e2) {
538
- return false;
539
- }
540
- return r.test(e);
541
- };
542
- var { MAX_LENGTH } = constants;
543
- var { re: re$1, t: t$1 } = re_1;
544
- var parse = (e, r) => {
545
- if (r && "object" == typeof r || (r = { loose: !!r, includePrerelease: false }), e instanceof SemVer) return e;
546
- if ("string" != typeof e) return null;
547
- if (e.length > MAX_LENGTH) return null;
548
- if (!(r.loose ? re$1[t$1.LOOSE] : re$1[t$1.FULL]).test(e)) return null;
549
- try {
550
- return new SemVer(e, r);
551
- } catch (e2) {
552
- return null;
553
- }
554
- };
555
- var parse_1 = parse;
556
- var { re, t } = re_1;
557
- var coerce = (e, r) => {
558
- if (e instanceof SemVer) return e;
559
- if ("number" == typeof e && (e = String(e)), "string" != typeof e) return null;
560
- let s = null;
561
- if ((r = r || {}).rtl) {
562
- let r2;
563
- for (; (r2 = re[t.COERCERTL].exec(e)) && (!s || s.index + s[0].length !== e.length); ) s && r2.index + r2[0].length === s.index + s[0].length || (s = r2), re[t.COERCERTL].lastIndex = r2.index + r2[1].length + r2[2].length;
564
- re[t.COERCERTL].lastIndex = -1;
565
- } else s = e.match(re[t.COERCE]);
566
- return null === s ? null : parse_1(`${s[2]}.${s[3] || "0"}.${s[4] || "0"}`, r);
567
- };
568
-
569
- // src/util/base64-json.ts
570
- function percentToByte(p) {
571
- return String.fromCharCode(parseInt(p.slice(1), 16));
572
- }
573
- function byteToPercent(b) {
574
- return `%${`00${b.charCodeAt(0).toString(16)}`.slice(-2)}`;
575
- }
576
- function btoaUTF8(str) {
577
- return btoa(encodeURIComponent(str).replace(/%[0-9A-F]{2}/g, percentToByte));
578
- }
579
- function atobUTF8(str) {
580
- return decodeURIComponent(Array.from(atob(str), byteToPercent).join(""));
581
- }
582
- function encodeJSON(options) {
583
- return btoaUTF8(JSON.stringify(options));
584
- }
585
- function decodeJSON(queryString) {
586
- return JSON.parse(atobUTF8(queryString));
587
- }
588
-
589
- // src/core/sdk-exceptions.ts
590
- var import_types2 = require("@magic-sdk/types");
591
-
592
- // src/util/type-guards.ts
593
- var import_types = require("@magic-sdk/types");
594
- function isUndefined(value) {
595
- return typeof value === "undefined";
596
- }
597
- function isNull(value) {
598
- return value === null;
599
- }
600
- function isNil(value) {
601
- return isNull(value) || isUndefined(value);
602
- }
603
- function isJsonRpcRequestPayload(value) {
604
- if (isNil(value)) return false;
605
- return !isUndefined(value.jsonrpc) && !isUndefined(value.id) && !isUndefined(value.method) && !isUndefined(value.params);
606
- }
607
- function isJsonRpcResponsePayload(value) {
608
- if (isNil(value)) return false;
609
- return !isUndefined(value.jsonrpc) && !isUndefined(value.id) && (!isUndefined(value.result) || !isUndefined(value.error));
610
- }
611
- function isMagicPayloadMethod(value) {
612
- if (isNil(value)) return false;
613
- return typeof value === "string" && Object.values(import_types.MagicPayloadMethod).includes(value);
614
- }
615
- function isJsonRpcErrorCode(value) {
616
- if (isNil(value)) return false;
617
- return typeof value === "number" && Object.values(import_types.RPCErrorCode).includes(value);
618
- }
619
- function isEmpty(value) {
620
- if (!value) return true;
621
- for (const key2 in value) {
622
- if (Object.hasOwnProperty.call(value, key2)) {
623
- return false;
624
- }
625
- }
626
- return true;
627
- }
628
-
629
- // src/core/sdk-environment.ts
630
- var SDKEnvironment = {};
631
- function createSDK(SDKBaseCtor, environment) {
632
- Object.assign(SDKEnvironment, environment);
633
- return SDKBaseCtor;
634
- }
635
- var sdkNameToEnvName = {
636
- "magic-sdk": "magic-sdk",
637
- "@magic-sdk/react-native": "magic-sdk-rn",
638
- "@magic-sdk/react-native-bare": "magic-sdk-rn-bare",
639
- "@magic-sdk/react-native-expo": "magic-sdk-rn-expo"
640
- };
641
-
642
- // src/core/sdk-exceptions.ts
643
- var MagicSDKError = class _MagicSDKError extends Error {
644
- constructor(code, rawMessage) {
645
- super(`Magic SDK Error: [${code}] ${rawMessage}`);
646
- this.code = code;
647
- this.rawMessage = rawMessage;
648
- Object.setPrototypeOf(this, _MagicSDKError.prototype);
649
- }
650
- __proto__ = Error;
651
- };
652
- var MagicRPCError = class _MagicRPCError extends Error {
653
- __proto__ = Error;
654
- code;
655
- rawMessage;
656
- data;
657
- constructor(sourceError) {
658
- super();
659
- const codeNormalized = Number(sourceError?.code);
660
- this.rawMessage = sourceError?.message || "Internal error";
661
- this.code = isJsonRpcErrorCode(codeNormalized) ? codeNormalized : import_types2.RPCErrorCode.InternalError;
662
- this.message = `Magic RPC Error: [${this.code}] ${this.rawMessage}`;
663
- this.data = sourceError?.data || void 0;
664
- Object.setPrototypeOf(this, _MagicRPCError.prototype);
665
- }
666
- };
667
- var MagicSDKWarning = class {
668
- constructor(code, rawMessage) {
669
- this.code = code;
670
- this.rawMessage = rawMessage;
671
- this.message = `Magic SDK Warning: [${code}] ${rawMessage}`;
672
- }
673
- message;
674
- /**
675
- * Logs this warning to the console.
676
- */
677
- log() {
678
- console.warn(this.message);
679
- }
680
- };
681
- var MagicExtensionError = class _MagicExtensionError extends Error {
682
- constructor(ext, code, rawMessage, data) {
683
- super(`Magic Extension Error (${ext.name}): [${code}] ${rawMessage}`);
684
- this.code = code;
685
- this.rawMessage = rawMessage;
686
- this.data = data;
687
- Object.setPrototypeOf(this, _MagicExtensionError.prototype);
688
- }
689
- __proto__ = Error;
690
- };
691
- var MagicExtensionWarning = class {
692
- constructor(ext, code, rawMessage) {
693
- this.code = code;
694
- this.rawMessage = rawMessage;
695
- this.message = `Magic Extension Warning (${ext.name}): [${code}] ${rawMessage}`;
696
- }
697
- message;
698
- /**
699
- * Logs this warning to the console.
700
- */
701
- log() {
702
- console.warn(this.message);
703
- }
704
- };
705
- function createMissingApiKeyError() {
706
- return new MagicSDKError(
707
- import_types2.SDKErrorCode.MissingApiKey,
708
- "Please provide an API key that you acquired from the Magic developer dashboard."
709
- );
710
- }
711
- function createModalNotReadyError() {
712
- return new MagicSDKError(import_types2.SDKErrorCode.ModalNotReady, "Modal is not ready");
713
- }
714
- function createMalformedResponseError() {
715
- return new MagicSDKError(import_types2.SDKErrorCode.MalformedResponse, "Response from the Magic iframe is malformed.");
716
- }
717
- function createExtensionNotInitializedError(member) {
718
- return new MagicSDKError(
719
- import_types2.SDKErrorCode.ExtensionNotInitialized,
720
- `Extensions must be initialized with a Magic SDK instance before \`Extension.${member}\` can be accessed. Do not invoke \`Extension.${member}\` inside an extension constructor.`
721
- );
722
- }
723
- function createIncompatibleExtensionsError(extensions) {
724
- let msg = `Some extensions are incompatible with \`${SDKEnvironment.sdkName}@${SDKEnvironment.version}\`:`;
725
- extensions.filter((ext) => typeof ext.compat !== "undefined" && ext.compat !== null).forEach((ext) => {
726
- const compat = ext.compat[SDKEnvironment.sdkName];
727
- if (typeof compat === "string") {
728
- msg += `
729
- - Extension \`${ext.name}\` supports version(s) \`${compat}\``;
730
- } else if (!compat) {
731
- msg += `
732
- - Extension \`${ext.name}\` does not support ${SDKEnvironment.platform} environments.`;
733
- }
734
- });
735
- return new MagicSDKError(import_types2.SDKErrorCode.IncompatibleExtensions, msg);
736
- }
737
- function createInvalidArgumentError(options) {
738
- const ordinalSuffix = (i) => {
739
- const iAdjusted = i + 1;
740
- const j = iAdjusted % 10;
741
- const k = iAdjusted % 100;
742
- if (j === 1 && k !== 11) return `${iAdjusted}st`;
743
- if (j === 2 && k !== 12) return `${iAdjusted}nd`;
744
- if (j === 3 && k !== 13) return `${iAdjusted}rd`;
745
- return `${iAdjusted}th`;
746
- };
747
- return new MagicSDKError(
748
- import_types2.SDKErrorCode.InvalidArgument,
749
- `Invalid ${ordinalSuffix(options.argument)} argument given to \`${options.procedure}\`.
750
- Expected: \`${options.expected}\`
751
- Received: \`${options.received}\``
752
- );
753
- }
754
- function createDuplicateIframeWarning() {
755
- return new MagicSDKWarning(import_types2.SDKWarningCode.DuplicateIframe, "Duplicate iframes found.");
756
- }
757
- function createSynchronousWeb3MethodWarning() {
758
- return new MagicSDKWarning(
759
- import_types2.SDKWarningCode.SyncWeb3Method,
760
- "Non-async web3 methods are deprecated in web3 > 1.0 and are not supported by the Magic web3 provider. Please use an async method instead."
761
- );
762
- }
763
- function createReactNativeEndpointConfigurationWarning() {
764
- return new MagicSDKWarning(
765
- import_types2.SDKWarningCode.ReactNativeEndpointConfiguration,
766
- `CUSTOM DOMAINS ARE NOT SUPPORTED WHEN USING MAGIC SDK WITH REACT NATIVE! The \`endpoint\` parameter SHOULD NOT be provided. The Magic \`<iframe>\` is automatically wrapped by a WebView pointed at \`${SDKEnvironment.defaultEndpoint}\`. Changing this default behavior will lead to unexpected results and potentially security-threatening bugs.`
767
- );
768
- }
769
- function createDeprecationWarning(options) {
770
- const { method, removalVersions, useInstead } = options;
771
- const removalVersion = removalVersions[SDKEnvironment.sdkName];
772
- const useInsteadSuffix = useInstead ? ` Use \`${useInstead}\` instead.` : "";
773
- const message = `\`${method}\` will be removed from \`${SDKEnvironment.sdkName}\` in version \`${removalVersion}\`.${useInsteadSuffix}`;
774
- return new MagicSDKWarning(import_types2.SDKWarningCode.DeprecationNotice, message);
775
- }
776
-
777
- // src/modules/auth.ts
778
- var import_types6 = require("@magic-sdk/types");
779
-
780
- // src/modules/base-module.ts
781
- var import_types5 = require("@magic-sdk/types");
782
-
783
- // src/core/json-rpc.ts
784
- var import_types3 = require("@magic-sdk/types");
785
-
786
- // src/util/get-payload-id.ts
787
- function* createIntGenerator() {
788
- let index = 0;
789
- while (true) {
790
- if (index < Number.MAX_SAFE_INTEGER) yield ++index;
791
- else index = 0;
792
- }
793
- }
794
- var intGenerator = createIntGenerator();
795
- function getPayloadId() {
796
- return intGenerator.next().value;
797
- }
798
-
799
- // src/util/storage.ts
800
- var storage_exports = {};
801
- __export(storage_exports, {
802
- clear: () => clear,
803
- getItem: () => getItem,
804
- iterate: () => iterate,
805
- key: () => key,
806
- keys: () => keys,
807
- length: () => length,
808
- removeItem: () => removeItem,
809
- setItem: () => setItem
810
- });
811
- var lf;
812
- function proxyLocalForageMethod(method) {
813
- return async (...args) => {
814
- if (!lf) lf = await SDKEnvironment.configureStorage();
815
- await lf.ready();
816
- return lf[method](...args);
817
- };
818
- }
819
- var getItem = proxyLocalForageMethod("getItem");
820
- var setItem = proxyLocalForageMethod("setItem");
821
- var removeItem = proxyLocalForageMethod("removeItem");
822
- var clear = proxyLocalForageMethod("clear");
823
- var length = proxyLocalForageMethod("length");
824
- var key = proxyLocalForageMethod("key");
825
- var keys = proxyLocalForageMethod("keys");
826
- var iterate = proxyLocalForageMethod("iterate");
827
-
828
- // src/util/uuid.ts
829
- function uuid() {
830
- const u = window.crypto.getRandomValues(new Uint8Array(16));
831
- u[6] = u[6] & 15 | 64;
832
- u[8] = u[8] & 191 | 128;
833
- let uid = "";
834
- uid += u[0].toString(16);
835
- uid += u[1].toString(16);
836
- uid += u[2].toString(16);
837
- uid += u[3].toString(16);
838
- uid += "-";
839
- uid += u[4].toString(16);
840
- uid += u[5].toString(16);
841
- uid += "-";
842
- uid += u[6].toString(16);
843
- uid += u[7].toString(16);
844
- uid += "-";
845
- uid += u[8].toString(16);
846
- uid += u[9].toString(16);
847
- uid += "-";
848
- uid += u[10].toString(16);
849
- uid += u[11].toString(16);
850
- uid += u[12].toString(16);
851
- uid += u[13].toString(16);
852
- uid += u[14].toString(16);
853
- uid += u[15].toString(16);
854
- return uid;
855
- }
856
-
857
- // src/util/web-crypto.ts
858
- var STORE_KEY_PRIVATE_KEY = "STORE_KEY_PRIVATE_KEY";
859
- var STORE_KEY_PUBLIC_JWK = "STORE_KEY_PUBLIC_JWK";
860
- var ALGO_NAME = "ECDSA";
861
- var ALGO_CURVE = "P-256";
862
- var EC_GEN_PARAMS = {
863
- name: ALGO_NAME,
864
- namedCurve: ALGO_CURVE
865
- };
866
- function isWebCryptoSupported() {
867
- const hasCrypto = typeof window !== "undefined" && !!window.crypto;
868
- const hasSubtleCrypto = hasCrypto && !!window.crypto.subtle;
869
- return hasCrypto && hasSubtleCrypto;
870
- }
871
- function clearKeys() {
872
- removeItem(STORE_KEY_PUBLIC_JWK);
873
- removeItem(STORE_KEY_PRIVATE_KEY);
874
- }
875
- async function createJwt() {
876
- const publicJwk = await getPublicKey();
877
- if (!publicJwk) {
878
- console.info("unable to create public key or webcrypto is unsupported");
879
- return void 0;
880
- }
881
- const { subtle } = window.crypto;
882
- const privateJwk = await getItem(STORE_KEY_PRIVATE_KEY);
883
- if (!privateJwk || !subtle) {
884
- console.info("unable to find private key or webcrypto unsupported");
885
- return void 0;
886
- }
887
- const claims = {
888
- iat: Math.floor((/* @__PURE__ */ new Date()).getTime() / 1e3),
889
- jti: uuid()
890
- };
891
- const headers = {
892
- typ: "dpop+jwt",
893
- alg: "ES256",
894
- jwk: publicJwk
895
- };
896
- const jws = {
897
- protected: strToUrlBase64(JSON.stringify(headers)),
898
- claims: strToUrlBase64(JSON.stringify(claims))
899
- };
900
- const data = strToUint8(`${jws.protected}.${jws.claims}`);
901
- const sigType = { name: ALGO_NAME, hash: { name: "SHA-256" } };
902
- const sig = uint8ToUrlBase64(new Uint8Array(await subtle.sign(sigType, privateJwk, data)));
903
- return `${jws.protected}.${jws.claims}.${sig}`;
904
- }
905
- async function getPublicKey() {
906
- if (!isWebCryptoSupported()) {
907
- console.info("webcrypto is not supported");
908
- return void 0;
909
- }
910
- if (!await getItem(STORE_KEY_PUBLIC_JWK)) {
911
- await generateWCKP();
912
- }
913
- return getItem(STORE_KEY_PUBLIC_JWK);
914
- }
915
- async function generateWCKP() {
916
- const { subtle } = window.crypto;
917
- const kp = await subtle.generateKey(
918
- EC_GEN_PARAMS,
919
- false,
920
- // need to export the public key, while keep private key non-extractable
921
- ["sign"]
922
- );
923
- const jwkPublicKey = await subtle.exportKey("jwk", kp.publicKey);
924
- await setItem(STORE_KEY_PRIVATE_KEY, kp.privateKey);
925
- await setItem(STORE_KEY_PUBLIC_JWK, jwkPublicKey);
926
- }
927
- function strToUrlBase64(str) {
928
- return binToUrlBase64(utf8ToBinaryString(str));
929
- }
930
- function strToUint8(str) {
931
- return new TextEncoder().encode(str);
932
- }
933
- function binToUrlBase64(bin) {
934
- return btoa(bin).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+/g, "");
935
- }
936
- function utf8ToBinaryString(str) {
937
- const escstr = encodeURIComponent(str);
938
- return escstr.replace(/%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode(parseInt(p1, 16)));
939
- }
940
- function uint8ToUrlBase64(uint8) {
941
- let bin = "";
942
- uint8.forEach((code) => {
943
- bin += String.fromCharCode(code);
944
- });
945
- return binToUrlBase64(bin);
946
- }
947
-
948
- // src/core/json-rpc.ts
949
- var payloadPreprocessedSymbol = Symbol("Payload pre-processed by Magic SDK");
950
- function markPayloadAsPreprocessed(payload) {
951
- Object.defineProperty(payload, payloadPreprocessedSymbol, {
952
- value: true,
953
- enumerable: false
954
- });
955
- return payload;
956
- }
957
- function isPayloadPreprocessed(payload) {
958
- return !!payload[payloadPreprocessedSymbol];
959
- }
960
- function standardizeJsonRpcRequestPayload(payload) {
961
- if (!isPayloadPreprocessed(payload)) {
962
- payload.jsonrpc = payload.jsonrpc ?? "2.0";
963
- payload.id = getPayloadId();
964
- payload.method = payload.method ?? "noop";
965
- payload.params = payload.params ?? [];
966
- markPayloadAsPreprocessed(payload);
967
- }
968
- return payload;
969
- }
970
- function createJsonRpcRequestPayload(method, params = []) {
971
- return markPayloadAsPreprocessed({
972
- params,
973
- method,
974
- jsonrpc: "2.0",
975
- id: getPayloadId()
976
- });
977
- }
978
- var JsonRpcResponse = class _JsonRpcResponse {
979
- _jsonrpc;
980
- _id;
981
- _result;
982
- _error;
983
- constructor(responseOrPayload) {
984
- if (responseOrPayload instanceof _JsonRpcResponse) {
985
- this._jsonrpc = responseOrPayload.payload.jsonrpc;
986
- this._id = responseOrPayload.payload.id;
987
- this._result = responseOrPayload.payload.result;
988
- this._error = responseOrPayload.payload.error;
989
- } else if (isJsonRpcResponsePayload(responseOrPayload)) {
990
- this._jsonrpc = responseOrPayload.jsonrpc;
991
- this._id = responseOrPayload.id;
992
- this._result = responseOrPayload.result;
993
- this._error = responseOrPayload.error;
994
- } else {
995
- this._jsonrpc = responseOrPayload.jsonrpc;
996
- this._id = responseOrPayload.id;
997
- this._result = void 0;
998
- this._error = void 0;
999
- }
1000
- }
1001
- applyError(error) {
1002
- this._error = error;
1003
- return this;
1004
- }
1005
- applyResult(result) {
1006
- this._result = result;
1007
- return this;
1008
- }
1009
- get hasError() {
1010
- if (this._error?.code === import_types3.RPCErrorCode.DpopInvalidated) {
1011
- clearKeys();
1012
- }
1013
- return typeof this._error !== "undefined" && this._error !== null;
1014
- }
1015
- get hasResult() {
1016
- return typeof this._result !== "undefined";
1017
- }
1018
- get payload() {
1019
- return {
1020
- jsonrpc: this._jsonrpc,
1021
- id: this._id,
1022
- result: this._result,
1023
- error: this._error
1024
- };
1025
- }
1026
- };
1027
-
1028
- // src/util/promise-tools.ts
1029
- var import_types4 = require("@magic-sdk/types");
1030
-
1031
- // src/util/events.ts
1032
- var import_eventemitter3 = __toESM(require_eventemitter3());
1033
- var TypedEmitter = class extends import_eventemitter3.default {
1034
- };
1035
- function createTypedEmitter() {
1036
- const emitter = new TypedEmitter();
1037
- const createChainingEmitterMethod2 = (method, source) => {
1038
- return (...args) => {
1039
- emitter[method].apply(emitter, args);
1040
- return source;
1041
- };
1042
- };
1043
- const createBoundEmitterMethod2 = (method) => {
1044
- return (...args) => {
1045
- return emitter[method].apply(emitter, args);
1046
- };
1047
- };
1048
- return {
1049
- emitter,
1050
- createChainingEmitterMethod: createChainingEmitterMethod2,
1051
- createBoundEmitterMethod: createBoundEmitterMethod2
1052
- };
1053
- }
1054
-
1055
- // src/util/promise-tools.ts
1056
- var promiEventBrand = Symbol("isPromiEvent");
1057
- function isPromiEvent(value) {
1058
- return !!value[promiEventBrand];
1059
- }
1060
- function createPromiEvent(executor) {
1061
- const promise = createPromise(executor);
1062
- const { createBoundEmitterMethod: createBoundEmitterMethod2, createChainingEmitterMethod: createChainingEmitterMethod2 } = createTypedEmitter();
1063
- const thenSymbol = Symbol("Promise.then");
1064
- const catchSymbol = Symbol("Promise.catch");
1065
- const finallySymbol = Symbol("Promise.finally");
1066
- const createChainingPromiseMethod = (method, source) => (...args) => {
1067
- const nextPromise = source[method].apply(source, args);
1068
- return promiEvent(nextPromise);
1069
- };
1070
- const promiEvent = (source) => {
1071
- return Object.assign(source, {
1072
- [promiEventBrand]: true,
1073
- [thenSymbol]: source[thenSymbol] || source.then,
1074
- [catchSymbol]: source[catchSymbol] || source.catch,
1075
- [finallySymbol]: source[finallySymbol] || source.finally,
1076
- then: createChainingPromiseMethod(thenSymbol, source),
1077
- catch: createChainingPromiseMethod(catchSymbol, source),
1078
- finally: createChainingPromiseMethod(finallySymbol, source),
1079
- on: createChainingEmitterMethod2("on", source),
1080
- once: createChainingEmitterMethod2("once", source),
1081
- addListener: createChainingEmitterMethod2("addListener", source),
1082
- off: createChainingEmitterMethod2("off", source),
1083
- removeListener: createChainingEmitterMethod2("removeListener", source),
1084
- removeAllListeners: createChainingEmitterMethod2("removeAllListeners", source),
1085
- emit: createBoundEmitterMethod2("emit"),
1086
- eventNames: createBoundEmitterMethod2("eventNames"),
1087
- listeners: createBoundEmitterMethod2("listeners"),
1088
- listenerCount: createBoundEmitterMethod2("listenerCount")
1089
- });
1090
- };
1091
- const result = promiEvent(
1092
- promise.then(
1093
- (resolved) => {
1094
- result.emit("done", resolved);
1095
- result.emit("settled");
1096
- return resolved;
1097
- },
1098
- (err) => {
1099
- result.emit("error", err);
1100
- result.emit("settled");
1101
- throw err;
1102
- }
1103
- )
1104
- );
1105
- result.on(import_types4.UserEventsOnReceived.ClosedByUser, () => {
1106
- result.emit(import_types4.UserEventsEmit.ClosedByUser);
1107
- });
1108
- return result;
1109
- }
1110
- function createPromise(executor) {
1111
- return new Promise((resolve, reject) => {
1112
- const result = executor(resolve, reject);
1113
- Promise.resolve(result).catch(reject);
1114
- });
1115
- }
1116
-
1117
- // src/modules/base-module.ts
1118
- var BaseModule = class {
1119
- constructor(sdk) {
1120
- this.sdk = sdk;
1121
- }
1122
- /**
1123
- * The `ViewController` for the SDK instance registered to this module.
1124
- */
1125
- get overlay() {
1126
- return this.sdk.overlay;
1127
- }
1128
- /**
1129
- * Emits promisified requests to the Magic `<iframe>` context.
1130
- */
1131
- request(payload) {
1132
- if (this.sdk.thirdPartyWallets.isConnected && !import_types5.routeToMagicMethods.includes(payload.method)) {
1133
- const promiEvent2 = createPromiEvent((resolve, reject) => {
1134
- this.sdk.thirdPartyWallets.requestOverride(payload).then(resolve).catch(reject);
1135
- });
1136
- return promiEvent2;
1137
- }
1138
- const responsePromise = this.overlay.post(
1139
- import_types5.MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,
1140
- standardizeJsonRpcRequestPayload(payload)
1141
- );
1142
- const promiEvent = createPromiEvent((resolve, reject) => {
1143
- responsePromise.then((res) => {
1144
- cleanupEvents();
1145
- if (res.hasError) reject(new MagicRPCError(res.payload.error));
1146
- else if (res.hasResult) resolve(res.payload.result);
1147
- else throw createMalformedResponseError();
1148
- }).catch((err) => {
1149
- cleanupEvents();
1150
- reject(err);
1151
- });
1152
- });
1153
- const cleanupEvents = this.overlay.on(import_types5.MagicIncomingWindowMessage.MAGIC_HANDLE_EVENT, (evt) => {
1154
- const { response } = evt.data;
1155
- if (response.id === payload.id && response.result?.event) {
1156
- const { event, params = [] } = response.result;
1157
- promiEvent.emit(event, ...params);
1158
- }
1159
- });
1160
- return promiEvent;
1161
- }
1162
- // Creates an intermediary event which takes a typed event and a payload ID
1163
- createIntermediaryEvent(eventType, payloadId) {
1164
- const e = (args) => {
1165
- const res = createJsonRpcRequestPayload(import_types5.MagicPayloadMethod.IntermediaryEvent, [{ payloadId, eventType, args }]);
1166
- this.request(res);
1167
- };
1168
- return e;
1169
- }
1170
- };
1171
-
1172
- // src/util/version-check.ts
1173
- function isMajorVersionAtLeast(version, majorVersion) {
1174
- const [major] = version.split(".").map(Number);
1175
- return major >= majorVersion;
1176
- }
1177
-
1178
- // src/modules/auth.ts
1179
- var ProductConsolidationMethodRemovalVersions = {
1180
- "magic-sdk": "v18.0.0",
1181
- "@magic-sdk/react-native": "v14.0.0",
1182
- "@magic-sdk/react-native-bare": "v19.0.0",
1183
- "@magic-sdk/react-native-expo": "v19.0.0"
1184
- };
1185
- var AuthModule = class extends BaseModule {
1186
- /**
1187
- * Initiate the "magic link" login flow for a user. If the flow is successful,
1188
- * this method will return a Decentralized ID token (with a default lifespan
1189
- * of 15 minutes).
1190
- */
1191
- loginWithMagicLink(configuration) {
1192
- const isRNMobilePackage = SDKEnvironment.sdkName === "@magic-sdk/react-native" || SDKEnvironment.sdkName === "@magic-sdk/react-native-bare" || SDKEnvironment.sdkName === "@magic-sdk/react-native-expo";
1193
- if (isRNMobilePackage && isMajorVersionAtLeast(SDKEnvironment.version, 19)) {
1194
- throw new Error(
1195
- "loginWithMagicLink() is deprecated for this package, please utilize a passcode method like loginWithSMS or loginWithEmailOTP instead."
1196
- );
1197
- } else if (isRNMobilePackage) {
1198
- createDeprecationWarning({
1199
- method: "auth.loginWithMagicLink()",
1200
- removalVersions: ProductConsolidationMethodRemovalVersions,
1201
- useInstead: "auth.loginWithEmailOTP()"
1202
- }).log();
1203
- }
1204
- const { email, showUI = true, redirectURI, overrides, lifespan } = configuration;
1205
- const requestPayload = createJsonRpcRequestPayload(
1206
- this.sdk.testMode ? import_types6.MagicPayloadMethod.LoginWithMagicLinkTestMode : import_types6.MagicPayloadMethod.LoginWithMagicLink,
1207
- [{ email, showUI, redirectURI, overrides, lifespan }]
1208
- );
1209
- return this.request(requestPayload);
1210
- }
1211
- /**
1212
- * Initiate an SMS login flow for a user. If successful,
1213
- * this method will return a Decenteralized ID token (with a default lifespan
1214
- * of 15 minutes)
1215
- */
1216
- loginWithSMS(configuration) {
1217
- const { phoneNumber, showUI = true, lifespan } = configuration;
1218
- const requestPayload = createJsonRpcRequestPayload(
1219
- this.sdk.testMode ? import_types6.MagicPayloadMethod.LoginWithSmsTestMode : import_types6.MagicPayloadMethod.LoginWithSms,
1220
- [{ phoneNumber, showUI, lifespan }]
1221
- );
1222
- const handle = this.request(requestPayload);
1223
- if (!showUI && handle) {
1224
- handle.on(import_types6.LoginWithSmsOTPEventEmit.VerifySmsOtp, (otp) => {
1225
- this.createIntermediaryEvent(import_types6.LoginWithSmsOTPEventEmit.VerifySmsOtp, requestPayload.id)(otp);
1226
- });
1227
- handle.on(import_types6.LoginWithSmsOTPEventEmit.Cancel, () => {
1228
- this.createIntermediaryEvent(import_types6.LoginWithSmsOTPEventEmit.Cancel, requestPayload.id)();
1229
- });
1230
- }
1231
- return handle;
1232
- }
1233
- /**
1234
- * Initiate an Email with OTP login flow for a user. If successful,
1235
- * this method will return a Decenteralized ID token (with a default lifespan
1236
- * of 15 minutes)
1237
- */
1238
- loginWithEmailOTP(configuration) {
1239
- const { email, showUI, deviceCheckUI, overrides, lifespan } = configuration;
1240
- const requestPayload = createJsonRpcRequestPayload(
1241
- this.sdk.testMode ? import_types6.MagicPayloadMethod.LoginWithEmailOTPTestMode : import_types6.MagicPayloadMethod.LoginWithEmailOTP,
1242
- [{ email, showUI, deviceCheckUI, overrides, lifespan }]
1243
- );
1244
- const handle = this.request(requestPayload);
1245
- if (!deviceCheckUI && handle) {
1246
- handle.on(import_types6.DeviceVerificationEventEmit.Retry, () => {
1247
- this.createIntermediaryEvent(import_types6.DeviceVerificationEventEmit.Retry, requestPayload.id)();
1248
- });
1249
- }
1250
- if (!showUI && handle) {
1251
- handle.on(import_types6.LoginWithEmailOTPEventEmit.VerifyEmailOtp, (otp) => {
1252
- this.createIntermediaryEvent(import_types6.LoginWithEmailOTPEventEmit.VerifyEmailOtp, requestPayload.id)(otp);
1253
- });
1254
- handle.on(import_types6.LoginWithEmailOTPEventEmit.VerifyMFACode, (mfa) => {
1255
- this.createIntermediaryEvent(import_types6.LoginWithEmailOTPEventEmit.VerifyMFACode, requestPayload.id)(mfa);
1256
- });
1257
- handle.on(import_types6.LoginWithEmailOTPEventEmit.LostDevice, () => {
1258
- this.createIntermediaryEvent(import_types6.LoginWithEmailOTPEventEmit.LostDevice, requestPayload.id)();
1259
- });
1260
- handle.on(import_types6.LoginWithEmailOTPEventEmit.VerifyRecoveryCode, (recoveryCode) => {
1261
- this.createIntermediaryEvent(
1262
- import_types6.LoginWithEmailOTPEventEmit.VerifyRecoveryCode,
1263
- requestPayload.id
1264
- )(recoveryCode);
1265
- });
1266
- handle.on(import_types6.LoginWithEmailOTPEventEmit.Cancel, () => {
1267
- this.createIntermediaryEvent(import_types6.LoginWithEmailOTPEventEmit.Cancel, requestPayload.id)();
1268
- });
1269
- }
1270
- return handle;
1271
- }
1272
- /**
1273
- * Log a user in with a special one-time-use credential token. This is
1274
- * currently used during magic link flows with a configured redirect to
1275
- * hydrate the user session at the end of the flow. If the flow is successful,
1276
- * this method will return a Decentralized ID token (with a default lifespan
1277
- * of 15 minutes).
1278
- *
1279
- * If no argument is provided, a credential is automatically parsed from
1280
- * `window.location.search`.
1281
- */
1282
- loginWithCredential(configuration) {
1283
- const { credentialOrQueryString, lifespan } = configuration || {};
1284
- let credentialResolved = credentialOrQueryString ?? "";
1285
- if (!credentialOrQueryString && SDKEnvironment.platform === "web") {
1286
- credentialResolved = window.location.search;
1287
- const urlWithoutQuery = window.location.origin + window.location.pathname;
1288
- window.history.replaceState(null, "", urlWithoutQuery);
1289
- }
1290
- const requestPayload = createJsonRpcRequestPayload(
1291
- this.sdk.testMode ? import_types6.MagicPayloadMethod.LoginWithCredentialTestMode : import_types6.MagicPayloadMethod.LoginWithCredential,
1292
- [credentialResolved, lifespan]
1293
- );
1294
- return this.request(requestPayload);
1295
- }
1296
- // Custom Auth
1297
- setAuthorizationToken(jwt) {
1298
- const requestPayload = createJsonRpcRequestPayload(import_types6.MagicPayloadMethod.SetAuthorizationToken, [{ jwt }]);
1299
- return this.request(requestPayload);
1300
- }
1301
- updateEmailWithUI(configuration) {
1302
- const { email, showUI = true } = configuration;
1303
- const requestPayload = createJsonRpcRequestPayload(
1304
- this.sdk.testMode ? import_types6.MagicPayloadMethod.UpdateEmailTestMode : import_types6.MagicPayloadMethod.UpdateEmail,
1305
- [{ email, showUI }]
1306
- );
1307
- const handle = this.request(requestPayload);
1308
- if (!showUI) {
1309
- handle.on(import_types6.RecencyCheckEventEmit.Retry, () => {
1310
- this.createIntermediaryEvent(import_types6.RecencyCheckEventEmit.Retry, requestPayload.id)();
1311
- });
1312
- handle.on(import_types6.RecencyCheckEventEmit.Cancel, () => {
1313
- this.createIntermediaryEvent(import_types6.RecencyCheckEventEmit.Cancel, requestPayload.id)();
1314
- });
1315
- handle.on(import_types6.RecencyCheckEventEmit.VerifyEmailOtp, (otp) => {
1316
- this.createIntermediaryEvent(import_types6.RecencyCheckEventEmit.VerifyEmailOtp, requestPayload.id)(otp);
1317
- });
1318
- handle.on(import_types6.RecencyCheckEventEmit.VerifyMFACode, (mfa) => {
1319
- this.createIntermediaryEvent(import_types6.RecencyCheckEventEmit.VerifyMFACode, requestPayload.id)(mfa);
1320
- });
1321
- handle.on(import_types6.UpdateEmailEventEmit.RetryWithNewEmail, (newEmail) => {
1322
- this.createIntermediaryEvent(import_types6.UpdateEmailEventEmit.RetryWithNewEmail, requestPayload.id)(newEmail);
1323
- });
1324
- handle.on(import_types6.UpdateEmailEventEmit.Cancel, () => {
1325
- this.createIntermediaryEvent(import_types6.UpdateEmailEventEmit.Cancel, requestPayload.id)();
1326
- });
1327
- handle.on(import_types6.UpdateEmailEventEmit.VerifyEmailOtp, (otp) => {
1328
- this.createIntermediaryEvent(import_types6.UpdateEmailEventEmit.VerifyEmailOtp, requestPayload.id)(otp);
1329
- });
1330
- }
1331
- return handle;
1332
- }
1333
- };
1334
-
1335
- // src/modules/user.ts
1336
- var import_types7 = require("@magic-sdk/types");
1337
-
1338
- // src/util/device-share-web-crypto.ts
1339
- var DEVICE_SHARE_KEY = "ds";
1340
- var ENCRYPTION_KEY_KEY = "ek";
1341
- var INITIALIZATION_VECTOR_KEY = "iv";
1342
- var ALGO_NAME2 = "AES-GCM";
1343
- var ALGO_LENGTH = 256;
1344
- async function clearDeviceShares() {
1345
- const keysToRemove = [];
1346
- await iterate((value, key2, iterationNumber) => {
1347
- if (key2.startsWith(`${DEVICE_SHARE_KEY}_`)) {
1348
- keysToRemove.push(key2);
1349
- }
1350
- });
1351
- for (const key2 of keysToRemove) {
1352
- await removeItem(key2);
1353
- }
1354
- }
1355
- function arrayBufferToBase64(buffer) {
1356
- let binary = "";
1357
- const bytes = new Uint8Array(buffer);
1358
- const len = bytes.byteLength;
1359
- for (let i = 0; i < len; i++) {
1360
- binary += String.fromCharCode(bytes[i]);
1361
- }
1362
- return window.btoa(binary);
1363
- }
1364
- function base64ToArrayBuffer(base64) {
1365
- const binaryString = window.atob(base64);
1366
- const len = binaryString.length;
1367
- const bytes = new Uint8Array(len);
1368
- for (let i = 0; i < len; i++) {
1369
- bytes[i] = binaryString.charCodeAt(i);
1370
- }
1371
- return bytes.buffer;
1372
- }
1373
- async function getOrCreateInitVector() {
1374
- if (!isWebCryptoSupported()) {
1375
- console.info("webcrypto is not supported");
1376
- return void 0;
1377
- }
1378
- const { crypto } = window;
1379
- const existingIv = await getItem(INITIALIZATION_VECTOR_KEY);
1380
- if (existingIv) {
1381
- return existingIv;
1382
- }
1383
- const iv = crypto.getRandomValues(new Uint8Array(12));
1384
- return iv;
1385
- }
1386
- async function getOrCreateEncryptionKey() {
1387
- if (!isWebCryptoSupported()) {
1388
- console.info("webcrypto is not supported");
1389
- return void 0;
1390
- }
1391
- const { subtle } = window.crypto;
1392
- const existingKey = await getItem(ENCRYPTION_KEY_KEY);
1393
- if (existingKey) {
1394
- return existingKey;
1395
- }
1396
- const key2 = await subtle.generateKey(
1397
- { name: ALGO_NAME2, length: ALGO_LENGTH },
1398
- false,
1399
- // non-extractable
1400
- ["encrypt", "decrypt"]
1401
- );
1402
- return key2;
1403
- }
1404
- async function encryptAndPersistDeviceShare(deviceShareBase64, networkHash) {
1405
- const iv = await getOrCreateInitVector();
1406
- const encryptionKey = await getOrCreateEncryptionKey();
1407
- if (!iv || !encryptionKey || !deviceShareBase64) {
1408
- return;
1409
- }
1410
- const decodedDeviceShare = base64ToArrayBuffer(deviceShareBase64);
1411
- const { subtle } = window.crypto;
1412
- const encryptedData = await subtle.encrypt(
1413
- {
1414
- name: ALGO_NAME2,
1415
- iv
1416
- },
1417
- encryptionKey,
1418
- decodedDeviceShare
1419
- );
1420
- const encryptedDeviceShare = arrayBufferToBase64(encryptedData);
1421
- await setItem(`${DEVICE_SHARE_KEY}_${networkHash}`, encryptedDeviceShare);
1422
- await setItem(ENCRYPTION_KEY_KEY, encryptionKey);
1423
- await setItem(INITIALIZATION_VECTOR_KEY, iv);
1424
- }
1425
- async function getDecryptedDeviceShare(networkHash) {
1426
- const encryptedDeviceShare = await getItem(`${DEVICE_SHARE_KEY}_${networkHash}`);
1427
- const iv = await getItem(INITIALIZATION_VECTOR_KEY);
1428
- const encryptionKey = await getItem(ENCRYPTION_KEY_KEY);
1429
- if (!iv || !encryptedDeviceShare || !encryptionKey || !isWebCryptoSupported()) {
1430
- return void 0;
1431
- }
1432
- const { subtle } = window.crypto;
1433
- const ab = await subtle.decrypt({ name: ALGO_NAME2, iv }, encryptionKey, base64ToArrayBuffer(encryptedDeviceShare));
1434
- return arrayBufferToBase64(ab);
1435
- }
1436
-
1437
- // src/util/url.ts
1438
- function createURL(url, base) {
1439
- return base ? new URL(url, base) : new URL(url);
1440
- }
1441
-
1442
- // src/modules/user.ts
1443
- var UserModule = class extends BaseModule {
1444
- getIdToken(configuration) {
1445
- const requestPayload = createJsonRpcRequestPayload(
1446
- this.sdk.testMode ? import_types7.MagicPayloadMethod.GetIdTokenTestMode : import_types7.MagicPayloadMethod.GetIdToken,
1447
- [configuration]
1448
- );
1449
- return this.request(requestPayload);
1450
- }
1451
- generateIdToken(configuration) {
1452
- const requestPayload = createJsonRpcRequestPayload(
1453
- this.sdk.testMode ? import_types7.MagicPayloadMethod.GenerateIdTokenTestMode : import_types7.MagicPayloadMethod.GenerateIdToken,
1454
- [configuration]
1455
- );
1456
- return this.request(requestPayload);
1457
- }
1458
- getInfo() {
1459
- const requestPayload = createJsonRpcRequestPayload(import_types7.MagicPayloadMethod.GetInfo, []);
1460
- return this.request(requestPayload);
1461
- }
1462
- isLoggedIn() {
1463
- return createPromiEvent(async (resolve, reject) => {
1464
- try {
1465
- let cachedIsLoggedIn = false;
1466
- if (this.sdk.useStorageCache) {
1467
- cachedIsLoggedIn = await getItem(this.localForageIsLoggedInKey) === "true";
1468
- if (cachedIsLoggedIn) {
1469
- resolve(true);
1470
- }
1471
- }
1472
- const requestPayload = createJsonRpcRequestPayload(
1473
- this.sdk.testMode ? import_types7.MagicPayloadMethod.IsLoggedInTestMode : import_types7.MagicPayloadMethod.IsLoggedIn
1474
- );
1475
- const isLoggedInResponse = await this.request(requestPayload);
1476
- if (this.sdk.useStorageCache) {
1477
- if (isLoggedInResponse) {
1478
- setItem(this.localForageIsLoggedInKey, true);
1479
- } else {
1480
- removeItem(this.localForageIsLoggedInKey);
1481
- }
1482
- if (cachedIsLoggedIn && !isLoggedInResponse) {
1483
- this.emitUserLoggedOut(true);
1484
- }
1485
- }
1486
- resolve(isLoggedInResponse);
1487
- } catch (err) {
1488
- reject(err);
1489
- }
1490
- });
1491
- }
1492
- logout() {
1493
- removeItem(this.localForageIsLoggedInKey);
1494
- clearDeviceShares();
1495
- return createPromiEvent(async (resolve, reject) => {
1496
- try {
1497
- const requestPayload = createJsonRpcRequestPayload(
1498
- this.sdk.testMode ? import_types7.MagicPayloadMethod.LogoutTestMode : import_types7.MagicPayloadMethod.Logout
1499
- );
1500
- const response = await this.request(requestPayload);
1501
- if (this.sdk.useStorageCache) {
1502
- this.emitUserLoggedOut(response);
1503
- }
1504
- resolve(response);
1505
- } catch (err) {
1506
- reject(err);
1507
- }
1508
- });
1509
- }
1510
- /* Request email address from logged in user */
1511
- requestInfoWithUI(scope) {
1512
- const requestPayload = createJsonRpcRequestPayload(import_types7.MagicPayloadMethod.RequestUserInfoWithUI, scope ? [scope] : []);
1513
- return this.request(requestPayload);
1514
- }
1515
- showSettings(configuration) {
1516
- const { showUI = true } = configuration || {};
1517
- const requestPayload = createJsonRpcRequestPayload(
1518
- this.sdk.testMode ? import_types7.MagicPayloadMethod.UserSettingsTestMode : import_types7.MagicPayloadMethod.UserSettings,
1519
- [configuration]
1520
- );
1521
- const handle = this.request(requestPayload);
1522
- if (!showUI && handle) {
1523
- handle.on(import_types7.RecoveryFactorEventEmit.SendNewPhoneNumber, (phone_number) => {
1524
- this.createIntermediaryEvent(
1525
- import_types7.RecoveryFactorEventEmit.SendNewPhoneNumber,
1526
- requestPayload.id
1527
- )(phone_number);
1528
- });
1529
- handle.on(import_types7.RecoveryFactorEventEmit.SendOtpCode, (otp) => {
1530
- this.createIntermediaryEvent(import_types7.RecoveryFactorEventEmit.SendOtpCode, requestPayload.id)(otp);
1531
- });
1532
- handle.on(import_types7.RecoveryFactorEventEmit.StartEditPhoneNumber, () => {
1533
- this.createIntermediaryEvent(import_types7.RecoveryFactorEventEmit.StartEditPhoneNumber, requestPayload.id)();
1534
- });
1535
- handle.on(import_types7.RecoveryFactorEventEmit.Cancel, () => {
1536
- this.createIntermediaryEvent(import_types7.RecoveryFactorEventEmit.Cancel, requestPayload.id)();
1537
- });
1538
- handle.on(import_types7.RecencyCheckEventEmit.VerifyEmailOtp, (otp) => {
1539
- this.createIntermediaryEvent(import_types7.RecencyCheckEventEmit.VerifyEmailOtp, requestPayload.id)(otp);
1540
- });
1541
- }
1542
- return handle;
1543
- }
1544
- recoverAccount(configuration) {
1545
- const { email, showUI } = configuration;
1546
- const requestPayload = createJsonRpcRequestPayload(
1547
- this.sdk.testMode ? import_types7.MagicPayloadMethod.RecoverAccountTestMode : import_types7.MagicPayloadMethod.RecoverAccount,
1548
- [{ email, showUI }]
1549
- );
1550
- const handle = this.request(
1551
- requestPayload
1552
- );
1553
- if (!showUI && handle) {
1554
- handle.on(import_types7.RecoverAccountEventEmit.Cancel, () => {
1555
- this.createIntermediaryEvent(import_types7.RecoverAccountEventEmit.Cancel, requestPayload.id)();
1556
- });
1557
- handle.on(import_types7.RecoverAccountEventEmit.ResendSms, () => {
1558
- this.createIntermediaryEvent(import_types7.RecoverAccountEventEmit.ResendSms, requestPayload.id)();
1559
- });
1560
- handle.on(import_types7.RecoverAccountEventEmit.VerifyOtp, (otp) => {
1561
- this.createIntermediaryEvent(import_types7.RecoverAccountEventEmit.VerifyOtp, requestPayload.id)(otp);
1562
- });
1563
- handle.on(import_types7.RecoverAccountEventEmit.UpdateEmail, (newEmail) => {
1564
- this.createIntermediaryEvent(import_types7.RecoverAccountEventEmit.UpdateEmail, requestPayload.id)(newEmail);
1565
- });
1566
- handle.on(import_types7.UpdateEmailEventEmit.Cancel, () => {
1567
- this.createIntermediaryEvent(import_types7.UpdateEmailEventEmit.Cancel, requestPayload.id)();
1568
- });
1569
- handle.on(import_types7.UpdateEmailEventEmit.RetryWithNewEmail, (newEmail) => {
1570
- this.createIntermediaryEvent(import_types7.UpdateEmailEventEmit.RetryWithNewEmail, requestPayload.id)(newEmail);
1571
- });
1572
- handle.on(import_types7.UpdateEmailEventEmit.VerifyEmailOtp, (otp) => {
1573
- this.createIntermediaryEvent(import_types7.UpdateEmailEventEmit.VerifyEmailOtp, requestPayload.id)(otp);
1574
- });
1575
- }
1576
- return handle;
1577
- }
1578
- revealPrivateKey() {
1579
- const requestPayload = createJsonRpcRequestPayload(import_types7.MagicPayloadMethod.RevealPK);
1580
- return this.request(requestPayload);
1581
- }
1582
- onUserLoggedOut(callback) {
1583
- this.userLoggedOutCallbacks.push(callback);
1584
- }
1585
- enableMFA(configuration) {
1586
- const { showUI = true } = configuration;
1587
- const requestPayload = createJsonRpcRequestPayload(import_types7.MagicPayloadMethod.EnableMFA, [{ showUI }]);
1588
- const handle = this.request(requestPayload);
1589
- if (!showUI && handle) {
1590
- handle.on(import_types7.EnableMFAEventEmit.VerifyMFACode, (totp) => {
1591
- this.createIntermediaryEvent(import_types7.EnableMFAEventEmit.VerifyMFACode, requestPayload.id)(totp);
1592
- });
1593
- handle.on(import_types7.EnableMFAEventEmit.Cancel, () => {
1594
- this.createIntermediaryEvent(import_types7.EnableMFAEventEmit.Cancel, requestPayload.id)();
1595
- });
1596
- }
1597
- return handle;
1598
- }
1599
- disableMFA(configuration) {
1600
- const { showUI = true } = configuration;
1601
- const requestPayload = createJsonRpcRequestPayload(import_types7.MagicPayloadMethod.DisableMFA, [{ showUI }]);
1602
- const handle = this.request(requestPayload);
1603
- if (!showUI && handle) {
1604
- handle.on(import_types7.DisableMFAEventEmit.VerifyMFACode, (totp) => {
1605
- this.createIntermediaryEvent(import_types7.DisableMFAEventEmit.VerifyMFACode, requestPayload.id)(totp);
1606
- });
1607
- handle.on(import_types7.DisableMFAEventEmit.LostDevice, (recoveryCode) => {
1608
- this.createIntermediaryEvent(import_types7.DisableMFAEventEmit.LostDevice, requestPayload.id)(recoveryCode);
1609
- });
1610
- handle.on(import_types7.DisableMFAEventEmit.Cancel, () => {
1611
- this.createIntermediaryEvent(import_types7.DisableMFAEventEmit.Cancel, requestPayload.id)();
1612
- });
1613
- }
1614
- return handle;
1615
- }
1616
- // Private members
1617
- emitUserLoggedOut(loggedOut) {
1618
- this.userLoggedOutCallbacks.forEach((callback) => {
1619
- callback(loggedOut);
1620
- });
1621
- }
1622
- localForageIsLoggedInKey = "magic_auth_is_logged_in";
1623
- userLoggedOutCallbacks = [];
1624
- };
1625
-
1626
- // src/modules/wallet.ts
1627
- var import_types8 = require("@magic-sdk/types");
1628
- var WalletModule = class extends BaseModule {
1629
- /* Prompt Magic's Login Form */
1630
- connectWithUI(options) {
1631
- const promiEvent = createPromiEvent(async (resolve, reject) => {
1632
- try {
1633
- const loginRequestPayload = createJsonRpcRequestPayload(import_types8.MagicPayloadMethod.Login, [
1634
- {
1635
- enabledWallets: this.sdk.thirdPartyWallets.enabledWallets,
1636
- ...options
1637
- }
1638
- ]);
1639
- const loginRequest = this.request(loginRequestPayload);
1640
- this.sdk.thirdPartyWallets.eventListeners.forEach(({ event, callback }) => {
1641
- loginRequest.on(event, () => callback(loginRequestPayload.id));
1642
- });
1643
- loginRequest.on("id-token-created", (params) => {
1644
- promiEvent.emit("id-token-created", params);
1645
- });
1646
- const result = await loginRequest;
1647
- if (result.error) reject(result);
1648
- resolve(result);
1649
- } catch (error) {
1650
- reject(error);
1651
- }
1652
- });
1653
- return promiEvent;
1654
- }
1655
- /* Prompt Magic's Wallet UI (not available for users logged in with third party wallets) */
1656
- showUI(config) {
1657
- return this.request(createJsonRpcRequestPayload(import_types8.MagicPayloadMethod.ShowUI, [config]));
1658
- }
1659
- showAddress() {
1660
- return this.request(createJsonRpcRequestPayload(import_types8.MagicPayloadMethod.ShowAddress));
1661
- }
1662
- showSendTokensUI() {
1663
- return this.request(createJsonRpcRequestPayload(import_types8.MagicPayloadMethod.ShowSendTokensUI));
1664
- }
1665
- showOnRamp() {
1666
- return this.request(createJsonRpcRequestPayload(import_types8.MagicPayloadMethod.ShowOnRamp));
1667
- }
1668
- showNFTs() {
1669
- return this.request(createJsonRpcRequestPayload(import_types8.MagicPayloadMethod.ShowNFTs));
1670
- }
1671
- showBalances() {
1672
- return this.request(createJsonRpcRequestPayload(import_types8.MagicPayloadMethod.ShowBalances));
1673
- }
1674
- sendGaslessTransaction(address, transaction) {
1675
- return this.request(
1676
- createJsonRpcRequestPayload(import_types8.MagicPayloadMethod.SendGaslessTransaction, [address, transaction])
1677
- );
1678
- }
1679
- };
1680
-
1681
- // src/modules/third-party-wallets.ts
1682
- var import_types9 = require("@magic-sdk/types");
1683
- var ThirdPartyWalletsModule = class extends BaseModule {
1684
- eventListeners = [];
1685
- enabledWallets = {};
1686
- isConnected = false;
1687
- resetThirdPartyWalletState() {
1688
- localStorage.removeItem(import_types9.LocalStorageKeys.PROVIDER);
1689
- localStorage.removeItem(import_types9.LocalStorageKeys.ADDRESS);
1690
- localStorage.removeItem(import_types9.LocalStorageKeys.CHAIN_ID);
1691
- this.isConnected = false;
1692
- }
1693
- requestOverride(payload) {
1694
- if (payload.method === import_types9.MagicPayloadMethod.Login) {
1695
- this.resetThirdPartyWalletState();
1696
- return super.request(payload);
1697
- }
1698
- if (payload.method === import_types9.MagicPayloadMethod.GetInfo) {
1699
- return this.getInfo(payload);
1700
- }
1701
- if (payload.method === import_types9.MagicPayloadMethod.IsLoggedIn) {
1702
- return this.isLoggedIn(payload);
1703
- }
1704
- if (payload.method === import_types9.MagicPayloadMethod.Logout) {
1705
- return this.logout(payload);
1706
- }
1707
- switch (localStorage.getItem(import_types9.LocalStorageKeys.PROVIDER)) {
1708
- case "web3modal":
1709
- return this.web3modalRequest(payload);
1710
- // Fallback to default request
1711
- default:
1712
- this.resetThirdPartyWalletState();
1713
- return super.request(payload);
1714
- }
1715
- }
1716
- /* Core Method Overrides */
1717
- isLoggedIn(payload) {
1718
- switch (localStorage.getItem(import_types9.LocalStorageKeys.PROVIDER)) {
1719
- case "web3modal":
1720
- return this.web3modalIsLoggedIn();
1721
- default:
1722
- this.resetThirdPartyWalletState();
1723
- return super.request(payload);
1724
- }
1725
- }
1726
- getInfo(payload) {
1727
- switch (localStorage.getItem(import_types9.LocalStorageKeys.PROVIDER)) {
1728
- case "web3modal":
1729
- return this.web3modalGetInfo();
1730
- default:
1731
- this.resetThirdPartyWalletState();
1732
- return super.request(payload);
1733
- }
1734
- }
1735
- logout(payload) {
1736
- const provider = localStorage.getItem(import_types9.LocalStorageKeys.PROVIDER);
1737
- this.resetThirdPartyWalletState();
1738
- switch (provider) {
1739
- case "web3modal": {
1740
- return this.web3modalLogout();
1741
- }
1742
- default:
1743
- return super.request(payload);
1744
- }
1745
- }
1746
- /* Web3Modal Methods */
1747
- web3modalRequest(payload) {
1748
- return createPromiEvent((resolve, reject) => {
1749
- this.sdk.web3modal.modal.getWalletProvider().request(payload).then(resolve).catch(reject);
1750
- });
1751
- }
1752
- web3modalIsLoggedIn() {
1753
- return createPromiEvent((resolve) => {
1754
- const walletStatus = this.sdk.web3modal.modal.getStatus();
1755
- if (walletStatus === "connected") {
1756
- resolve(true);
1757
- }
1758
- if (walletStatus === "disconnected") {
1759
- this.resetThirdPartyWalletState();
1760
- resolve(false);
1761
- }
1762
- if (walletStatus === "reconnecting") {
1763
- const unsubscribeFromProviderEvents = this.sdk.web3modal.modal.subscribeProvider(({ status }) => {
1764
- if (status === "connected") {
1765
- unsubscribeFromProviderEvents();
1766
- resolve(true);
1767
- }
1768
- if (status === "disconnected") {
1769
- unsubscribeFromProviderEvents();
1770
- this.resetThirdPartyWalletState();
1771
- resolve(false);
1772
- }
1773
- });
1774
- }
1775
- });
1776
- }
1777
- formatWeb3modalGetInfoResponse() {
1778
- const walletType = this.sdk.web3modal.modal.getWalletInfo()?.name;
1779
- const userAddress = this.sdk.web3modal.modal.getAddress();
1780
- return {
1781
- publicAddress: userAddress,
1782
- email: null,
1783
- issuer: `did:ethr:${userAddress}`,
1784
- phoneNumber: null,
1785
- isMfaEnabled: false,
1786
- recoveryFactors: [],
1787
- walletType: walletType || "web3modal",
1788
- firstLoginAt: null
1789
- };
1790
- }
1791
- web3modalGetInfo() {
1792
- return createPromiEvent((resolve, reject) => {
1793
- const walletStatus = this.sdk.web3modal.modal.getStatus();
1794
- if (walletStatus === "connected") {
1795
- resolve(this.formatWeb3modalGetInfoResponse());
1796
- }
1797
- if (walletStatus === "disconnected") {
1798
- this.resetThirdPartyWalletState();
1799
- reject("Magic RPC Error: [-32603] Internal error: User denied account access.");
1800
- }
1801
- if (walletStatus === "reconnecting") {
1802
- const unsubscribeFromProviderEvents = this.sdk.web3modal.modal.subscribeProvider(({ status }) => {
1803
- if (status === "connected") {
1804
- unsubscribeFromProviderEvents();
1805
- resolve(this.formatWeb3modalGetInfoResponse());
1806
- }
1807
- if (status === "disconnected") {
1808
- unsubscribeFromProviderEvents();
1809
- this.resetThirdPartyWalletState();
1810
- reject("Magic RPC Error: [-32603] Internal error: User denied account access.");
1811
- }
1812
- });
1813
- }
1814
- });
1815
- }
1816
- web3modalLogout() {
1817
- return createPromiEvent(async (resolve) => {
1818
- try {
1819
- await this.sdk.web3modal.modal.disconnect();
1820
- } catch (error) {
1821
- console.error(error);
1822
- }
1823
- resolve(true);
1824
- });
1825
- }
1826
- };
1827
-
1828
- // src/modules/rpc-provider.ts
1829
- var import_types10 = require("@magic-sdk/types");
1830
- var { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter();
1831
- var RPCProviderModule = class extends BaseModule {
1832
- // Implements EIP 1193:
1833
- // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md
1834
- isMagic = true;
1835
- sendAsync(payload, onRequestComplete) {
1836
- if (!onRequestComplete) {
1837
- throw createInvalidArgumentError({
1838
- procedure: "Magic.rpcProvider.sendAsync",
1839
- argument: 1,
1840
- expected: "function",
1841
- received: onRequestComplete === null ? "null" : typeof onRequestComplete
1842
- });
1843
- }
1844
- if (Array.isArray(payload)) {
1845
- this.overlay.post(
1846
- import_types10.MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,
1847
- payload.map((p) => {
1848
- const standardizedPayload = standardizeJsonRpcRequestPayload(p);
1849
- this.prefixPayloadMethodForTestMode(standardizedPayload);
1850
- return standardizedPayload;
1851
- })
1852
- ).then((batchResponse) => {
1853
- onRequestComplete(
1854
- null,
1855
- batchResponse.map((response) => ({
1856
- ...response.payload,
1857
- error: response.hasError ? new MagicRPCError(response.payload.error) : null
1858
- }))
1859
- );
1860
- });
1861
- } else {
1862
- const finalPayload = standardizeJsonRpcRequestPayload(payload);
1863
- this.prefixPayloadMethodForTestMode(finalPayload);
1864
- this.overlay.post(import_types10.MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST, finalPayload).then((response) => {
1865
- onRequestComplete(
1866
- response.hasError ? new MagicRPCError(response.payload.error) : null,
1867
- response.payload
1868
- );
1869
- });
1870
- }
1871
- }
1872
- send(payloadOrMethod, onRequestCompleteOrParams) {
1873
- if (typeof payloadOrMethod === "string") {
1874
- const payload = createJsonRpcRequestPayload(
1875
- payloadOrMethod,
1876
- Array.isArray(onRequestCompleteOrParams) ? onRequestCompleteOrParams : []
1877
- );
1878
- return this.request(payload);
1879
- }
1880
- if (Array.isArray(payloadOrMethod) || !!onRequestCompleteOrParams) {
1881
- this.sendAsync(payloadOrMethod, onRequestCompleteOrParams);
1882
- return;
1883
- }
1884
- const warning = createSynchronousWeb3MethodWarning();
1885
- warning.log();
1886
- return new JsonRpcResponse(payloadOrMethod).applyError({
1887
- code: -32603,
1888
- message: warning.rawMessage
1889
- }).payload;
1890
- }
1891
- enable() {
1892
- const requestPayload = createJsonRpcRequestPayload(import_types10.MagicPayloadMethod.Login);
1893
- return this.request(requestPayload);
1894
- }
1895
- /**
1896
- * Here, we wrap `BaseModule.request` with an additional check
1897
- * to determine if the RPC method requires a test-mode prefix.
1898
- */
1899
- request(payload) {
1900
- this.prefixPayloadMethodForTestMode(payload);
1901
- return super.request(payload);
1902
- }
1903
- /**
1904
- * Prefixes Ethereum RPC methods with a `testMode` identifier. This is done so
1905
- * that Magic's <iframe> can handle signing methods using test-specific keys.
1906
- */
1907
- prefixPayloadMethodForTestMode(payload) {
1908
- const testModePrefix = "testMode/eth/";
1909
- if (this.sdk.testMode) {
1910
- payload.method = `${testModePrefix}${payload.method}`;
1911
- }
1912
- }
1913
- on = createChainingEmitterMethod("on", this);
1914
- once = createChainingEmitterMethod("once", this);
1915
- addListener = createChainingEmitterMethod("addListener", this);
1916
- off = createChainingEmitterMethod("off", this);
1917
- removeListener = createChainingEmitterMethod("removeListener", this);
1918
- removeAllListeners = createChainingEmitterMethod("removeAllListeners", this);
1919
- emit = createBoundEmitterMethod("emit");
1920
- eventNames = createBoundEmitterMethod("eventNames");
1921
- listeners = createBoundEmitterMethod("listeners");
1922
- listenerCount = createBoundEmitterMethod("listenerCount");
1923
- };
1924
-
1925
- // src/modules/base-extension.ts
1926
- var sdkAccessFields = ["request", "overlay", "sdk"];
1927
- function getPrototypeChain(instance) {
1928
- let currentProto = Object.getPrototypeOf(instance);
1929
- const protos = [currentProto];
1930
- while (currentProto !== BaseModule.prototype) {
1931
- currentProto = Object.getPrototypeOf(currentProto);
1932
- protos.push(currentProto);
1933
- }
1934
- return protos;
1935
- }
1936
- var BaseExtension = class extends BaseModule {
1937
- /**
1938
- * A structure describing the platform and version compatibility of this
1939
- * extension.
1940
- */
1941
- compat;
1942
- __sdk_access_field_descriptors__ = /* @__PURE__ */ new Map();
1943
- __is_initialized__ = false;
1944
- utils = {
1945
- createPromiEvent,
1946
- isPromiEvent,
1947
- encodeJSON,
1948
- decodeJSON,
1949
- createJsonRpcRequestPayload,
1950
- standardizeJsonRpcRequestPayload,
1951
- storage: storage_exports
1952
- };
1953
- constructor() {
1954
- super(void 0);
1955
- const allSources = [this, ...getPrototypeChain(this)];
1956
- sdkAccessFields.forEach((prop) => {
1957
- const allDescriptors = allSources.map((source) => Object.getOwnPropertyDescriptor(source, prop));
1958
- const sourceIndex = allDescriptors.findIndex((x) => Boolean(x));
1959
- const isPrototypeField = sourceIndex > 0;
1960
- const descriptor = allDescriptors[sourceIndex];
1961
- if (descriptor) {
1962
- this.__sdk_access_field_descriptors__.set(prop, { descriptor, isPrototypeField });
1963
- Object.defineProperty(this, prop, {
1964
- configurable: true,
1965
- get: () => {
1966
- throw createExtensionNotInitializedError(prop);
1967
- }
1968
- });
1969
- }
1970
- });
1971
- }
1972
- /**
1973
- * Registers a Magic SDK instance with this Extension.
1974
- *
1975
- * @internal
1976
- */
1977
- init(sdk) {
1978
- if (this.__is_initialized__) return;
1979
- sdkAccessFields.forEach((prop) => {
1980
- if (this.__sdk_access_field_descriptors__.has(prop)) {
1981
- const { descriptor, isPrototypeField } = this.__sdk_access_field_descriptors__.get(prop);
1982
- if (isPrototypeField) {
1983
- delete this[prop];
1984
- } else {
1985
- Object.defineProperty(this, prop, descriptor);
1986
- }
1987
- }
1988
- });
1989
- this.sdk = sdk;
1990
- this.__is_initialized__ = true;
1991
- }
1992
- /**
1993
- * Creates a deprecation warning wrapped with a native Magic SDK warning type.
1994
- * Best practice is to warn users of upcoming deprecations at least one major
1995
- * version before the change is implemented. You can use this method to
1996
- * communicate deprecations in a manner consistent with Magic SDK core code.
1997
- */
1998
- createDeprecationWarning(options) {
1999
- const { method, removalVersion, useInstead } = options;
2000
- const useInsteadSuffix = useInstead ? ` Use \`${useInstead}\` instead.` : "";
2001
- const message = `\`${method}\` will be removed from this Extension in version \`${removalVersion}\`.${useInsteadSuffix}`;
2002
- return new MagicExtensionWarning(this, "DEPRECATION_NOTICE", message);
2003
- }
2004
- /**
2005
- * Creates a warning wrapped with a native Magic SDK warning type. This
2006
- * maintains consistency in warning messaging for consumers of Magic SDK and
2007
- * this Extension.
2008
- */
2009
- createWarning(code, message) {
2010
- return new MagicExtensionWarning(this, code, message);
2011
- }
2012
- /**
2013
- * Creates an error wrapped with a native Magic SDK error type. This maintains
2014
- * consistency in error handling for consumers of Magic SDK and this
2015
- * Extension.
2016
- */
2017
- createError(code, message, data) {
2018
- return new MagicExtensionError(this, code, message, data);
2019
- }
2020
- };
2021
- var InternalExtension = class extends BaseExtension {
2022
- };
2023
- var Extension = class {
2024
- /**
2025
- * This is a special constructor used to mark "official" extensions. These
2026
- * extensions are designed for special interaction with the Magic iframe using
2027
- * custom JSON RPC methods, business logic, and global configurations. This is
2028
- * intended for internal-use only (and provides no useful advantage to
2029
- * open-source extension developers over the regular `Extension` class).
2030
- *
2031
- * @internal
2032
- */
2033
- static Internal = InternalExtension;
2034
- };
2035
-
2036
- // src/modules/nft.ts
2037
- var import_types11 = require("@magic-sdk/types");
2038
- var NFTModule = class extends BaseModule {
2039
- /* Start an NFT Purchase flow with Sardine */
2040
- purchase(options) {
2041
- const requestPayload = createJsonRpcRequestPayload(import_types11.MagicPayloadMethod.NFTPurchase, [options]);
2042
- return this.request(requestPayload);
2043
- }
2044
- /* Start an NFT Checkout flow with Paypal */
2045
- checkout(options) {
2046
- const isThirdPartyWalletConnected = this.sdk.thirdPartyWallets.isConnected;
2047
- const requestPayload = createJsonRpcRequestPayload(import_types11.MagicPayloadMethod.NFTCheckout, [
2048
- {
2049
- ...options,
2050
- walletProvider: isThirdPartyWalletConnected ? "web3modal" : "magic"
2051
- }
2052
- ]);
2053
- const promiEvent = this.request(requestPayload);
2054
- if (isThirdPartyWalletConnected) {
2055
- promiEvent.on(import_types11.NftCheckoutIntermediaryEvents.Initiated, async (rawTransaction) => {
2056
- try {
2057
- const hash = await this.request({
2058
- method: "eth_sendTransaction",
2059
- params: [rawTransaction]
2060
- });
2061
- this.createIntermediaryEvent(import_types11.NftCheckoutIntermediaryEvents.Success, requestPayload.id)(hash);
2062
- } catch (error) {
2063
- this.createIntermediaryEvent(import_types11.NftCheckoutIntermediaryEvents.Failure, requestPayload.id)();
2064
- }
2065
- });
2066
- promiEvent.on(import_types11.NftCheckoutIntermediaryEvents.Disconnect, () => {
2067
- this.sdk.thirdPartyWallets.resetThirdPartyWalletState();
2068
- promiEvent.emit("disconnect");
2069
- });
2070
- }
2071
- return promiEvent;
2072
- }
2073
- /* Start an NFT Transfer flow */
2074
- transfer(options) {
2075
- const requestPayload = createJsonRpcRequestPayload(import_types11.MagicPayloadMethod.NFTTransfer, [options]);
2076
- return this.request(requestPayload);
2077
- }
2078
- };
2079
-
2080
- // src/core/sdk.ts
2081
- function checkExtensionCompat(ext) {
2082
- if (ext.compat && ext.compat[SDKEnvironment.sdkName] != null) {
2083
- return typeof ext.compat[SDKEnvironment.sdkName] === "string" ? satisfies(coerce(SDKEnvironment.version), ext.compat[SDKEnvironment.sdkName]) : !!ext.compat[SDKEnvironment.sdkName];
2084
- }
2085
- return true;
2086
- }
2087
- function getNetworkHash(apiKey, network, extConfig) {
2088
- if (!network && !extConfig) {
2089
- return `${apiKey}_eth_mainnet`;
2090
- }
2091
- if (extConfig) {
2092
- return `${apiKey}_${JSON.stringify(extConfig)}`;
2093
- }
2094
- if (network) {
2095
- if (typeof network === "string") {
2096
- return `${apiKey}_eth_${network}`;
2097
- }
2098
- return `${apiKey}_${network.rpcUrl}_${network.chainId}_${network.chainType}`;
2099
- }
2100
- return `${apiKey}_unknown`;
2101
- }
2102
- function prepareExtensions(options) {
2103
- const extensions = options?.extensions ?? [];
2104
- const extConfig = {};
2105
- const incompatibleExtensions = [];
2106
- if (Array.isArray(extensions)) {
2107
- extensions.forEach((ext) => {
2108
- if (checkExtensionCompat(ext)) {
2109
- ext.init(this);
2110
- if (ext.name) {
2111
- this[ext.name] = ext;
2112
- }
2113
- if (ext instanceof Extension.Internal) {
2114
- if (!isEmpty(ext.config)) extConfig[ext.name] = ext.config;
2115
- }
2116
- } else {
2117
- incompatibleExtensions.push(ext);
2118
- }
2119
- });
2120
- } else {
2121
- Object.keys(extensions).forEach((name) => {
2122
- if (checkExtensionCompat(extensions[name])) {
2123
- extensions[name].init(this);
2124
- const ext = extensions[name];
2125
- this[name] = ext;
2126
- if (ext instanceof Extension.Internal) {
2127
- if (!isEmpty(ext.config)) extConfig[extensions[name].name] = ext.config;
2128
- }
2129
- } else {
2130
- incompatibleExtensions.push(extensions[name]);
2131
- }
2132
- });
2133
- }
2134
- if (incompatibleExtensions.length) {
2135
- throw createIncompatibleExtensionsError(incompatibleExtensions);
2136
- }
2137
- return extConfig;
2138
- }
2139
- var SDKBase = class _SDKBase {
2140
- /**
2141
- * Creates an instance of Magic SDK.
2142
- */
2143
- constructor(apiKey, options) {
2144
- this.apiKey = apiKey;
2145
- if (!apiKey) throw createMissingApiKeyError();
2146
- if (SDKEnvironment.platform === "react-native" && options?.endpoint) {
2147
- createReactNativeEndpointConfigurationWarning().log();
2148
- }
2149
- const { defaultEndpoint, version } = SDKEnvironment;
2150
- this.testMode = !!options?.testMode;
2151
- this.useStorageCache = !!options?.useStorageCache;
2152
- this.endpoint = createURL(options?.endpoint ?? defaultEndpoint).origin;
2153
- this.auth = new AuthModule(this);
2154
- this.user = new UserModule(this);
2155
- this.wallet = new WalletModule(this);
2156
- this.nft = new NFTModule(this);
2157
- this.thirdPartyWallets = new ThirdPartyWalletsModule(this);
2158
- this.rpcProvider = new RPCProviderModule(this);
2159
- const extConfig = prepareExtensions.call(this, options);
2160
- this.parameters = encodeJSON({
2161
- API_KEY: this.apiKey,
2162
- DOMAIN_ORIGIN: window.location ? window.location.origin : "",
2163
- ETH_NETWORK: options?.network,
2164
- host: createURL(this.endpoint).host,
2165
- sdk: sdkNameToEnvName[SDKEnvironment.sdkName],
2166
- version,
2167
- ext: isEmpty(extConfig) ? void 0 : extConfig,
2168
- locale: options?.locale || "en_US",
2169
- authConfig: options?.authConfig ? { ...options.authConfig } : void 0,
2170
- ...SDKEnvironment.bundleId ? { bundleId: SDKEnvironment.bundleId } : {},
2171
- meta: options?.meta
2172
- });
2173
- this.networkHash = getNetworkHash(this.apiKey, options?.network, isEmpty(extConfig) ? void 0 : extConfig);
2174
- if (!options?.deferPreload) this.preload();
2175
- }
2176
- static __overlays__ = /* @__PURE__ */ new Map();
2177
- endpoint;
2178
- parameters;
2179
- networkHash;
2180
- testMode;
2181
- useStorageCache;
2182
- /**
2183
- * Contains methods for starting a Magic SDK authentication flow.
2184
- */
2185
- auth;
2186
- /**
2187
- * Contains methods for interacting with user data, checking login
2188
- * status, generating cryptographically-secure ID tokens, and more.
2189
- */
2190
- user;
2191
- /**
2192
- * Contains methods previously under the `ConnectExtension`, including
2193
- * login, show wallet UI, request user info, and more.
2194
- */
2195
- wallet;
2196
- /**
2197
- * Contains methods for interacting with NFTs, including purchase.
2198
- */
2199
- nft;
2200
- /**
2201
- * Contains internal methods for third-party wallets.
2202
- */
2203
- thirdPartyWallets;
2204
- /**
2205
- * Contains a Web3-compliant provider. Pass this module to your Web3/Ethers
2206
- * instance for automatic compatibility with Ethereum methods.
2207
- */
2208
- rpcProvider;
2209
- /**
2210
- * Represents the view controller associated with this `MagicSDK` instance.
2211
- */
2212
- get overlay() {
2213
- if (!_SDKBase.__overlays__.has(this.parameters)) {
2214
- const controller = new SDKEnvironment.ViewController(this.endpoint, this.parameters, this.networkHash);
2215
- controller.init();
2216
- _SDKBase.__overlays__.set(this.parameters, controller);
2217
- }
2218
- return _SDKBase.__overlays__.get(this.parameters);
2219
- }
2220
- /**
2221
- * Preloads the Magic view, allowing for faster initial requests in browser
2222
- * environments. Awaiting the returned promise will signal when the Magic view
2223
- * has completed loading and is ready for requests.
2224
- */
2225
- async preload() {
2226
- await this.overlay.waitForReady();
2227
- }
2228
- };
2229
-
2230
- // src/core/view-controller.ts
2231
- var import_types12 = require("@magic-sdk/types");
2232
-
2233
- // src/util/view-controller-utils.ts
2234
- function getRequestPayloadFromBatch(requestPayload, id) {
2235
- return id && Array.isArray(requestPayload) ? requestPayload.find((p) => p.id === id) : requestPayload;
2236
- }
2237
- function standardizeResponse(requestPayload, event) {
2238
- const id = event.data.response?.id;
2239
- const requestPayloadResolved = getRequestPayloadFromBatch(requestPayload, id);
2240
- if (id && requestPayloadResolved) {
2241
- const response = new JsonRpcResponse(requestPayloadResolved).applyResult(event.data.response.result).applyError(event.data.response.error);
2242
- return { id, response };
2243
- }
2244
- return {};
2245
- }
2246
- async function createMagicRequest(msgType, payload, networkHash) {
2247
- const rt = await getItem("rt");
2248
- let jwt;
2249
- if (SDKEnvironment.platform === "web") {
2250
- try {
2251
- jwt = await getItem("jwt") ?? await createJwt();
2252
- } catch (e) {
2253
- console.error("webcrypto error", e);
2254
- }
2255
- }
2256
- const request = { msgType, payload };
2257
- if (jwt) {
2258
- request.jwt = jwt;
2259
- }
2260
- if (jwt && rt) {
2261
- request.rt = rt;
2262
- }
2263
- const decryptedDeviceShare = await getDecryptedDeviceShare(networkHash);
2264
- if (decryptedDeviceShare) {
2265
- request.deviceShare = decryptedDeviceShare;
2266
- }
2267
- return request;
2268
- }
2269
- async function persistMagicEventRefreshToken(event) {
2270
- if (!event.data.rt) {
2271
- return;
2272
- }
2273
- await setItem("rt", event.data.rt);
2274
- }
2275
- function debounce(func, delay) {
2276
- let timeoutId = null;
2277
- return function(...args) {
2278
- if (timeoutId) {
2279
- clearTimeout(timeoutId);
2280
- }
2281
- timeoutId = setTimeout(() => {
2282
- func(...args);
2283
- }, delay);
2284
- };
2285
- }
2286
-
2287
- // src/core/view-controller.ts
2288
- var SECOND = 1e3;
2289
- var MINUTE = 60 * SECOND;
2290
- var PING_INTERVAL = 5 * MINUTE;
2291
- var INITIAL_HEARTBEAT_DELAY = 60 * MINUTE;
2292
- var ViewController = class {
2293
- /**
2294
- * Create an instance of `ViewController`
2295
- *
2296
- * @param endpoint - The URL for the relevant iframe context.
2297
- * @param parameters - The unique, encoded query parameters for the
2298
- * relevant iframe context.
2299
- * @param networkHash - The hash of the network that this sdk instance is connected to
2300
- * for multi-chain scenarios
2301
- */
2302
- constructor(endpoint, parameters, networkHash) {
2303
- this.endpoint = endpoint;
2304
- this.parameters = parameters;
2305
- this.networkHash = networkHash;
2306
- this.listen();
2307
- }
2308
- isReadyForRequest = false;
2309
- messageHandlers = /* @__PURE__ */ new Set();
2310
- isConnectedToInternet = true;
2311
- lastPongTime = null;
2312
- heartbeatIntervalTimer = null;
2313
- /* istanbul ignore next */
2314
- heartbeatDebounce = debounce(() => {
2315
- if (this.endpoint === "https://auth.magic.link/") {
2316
- this.heartBeatCheck();
2317
- }
2318
- }, INITIAL_HEARTBEAT_DELAY);
2319
- async post(msgType, payload) {
2320
- return createPromise(async (resolve, reject) => {
2321
- if (!this.isConnectedToInternet) {
2322
- const error = createModalNotReadyError();
2323
- reject(error);
2324
- }
2325
- if (!await this.checkRelayerExistsInDOM()) {
2326
- this.isReadyForRequest = false;
2327
- await this.reloadRelayer();
2328
- }
2329
- if (!this.isReadyForRequest) {
2330
- await this.waitForReady();
2331
- }
2332
- const batchData = [];
2333
- const batchIds = Array.isArray(payload) ? payload.map((p) => p.id) : [];
2334
- const msg = await createMagicRequest(`${msgType}-${this.parameters}`, payload, this.networkHash);
2335
- await this._post(msg);
2336
- const acknowledgeResponse = (removeEventListener) => (event) => {
2337
- const { id, response } = standardizeResponse(payload, event);
2338
- persistMagicEventRefreshToken(event);
2339
- if (response?.payload.error?.message === "User denied account access.") {
2340
- clearDeviceShares();
2341
- } else if (event.data.deviceShare) {
2342
- const { deviceShare } = event.data;
2343
- encryptAndPersistDeviceShare(deviceShare, this.networkHash);
2344
- }
2345
- if (id && response && Array.isArray(payload) && batchIds.includes(id)) {
2346
- batchData.push(response);
2347
- if (batchData.length === payload.length) {
2348
- removeEventListener();
2349
- resolve(batchData);
2350
- }
2351
- } else if (id && response && !Array.isArray(payload) && id === payload.id) {
2352
- removeEventListener();
2353
- resolve(response);
2354
- }
2355
- };
2356
- const removeResponseListener = this.on(
2357
- import_types12.MagicIncomingWindowMessage.MAGIC_HANDLE_RESPONSE,
2358
- acknowledgeResponse(() => removeResponseListener())
2359
- );
2360
- });
2361
- }
2362
- /**
2363
- * Listen for events received with the given `msgType`.
2364
- *
2365
- * @param msgType - The `msgType` encoded with the event data.
2366
- * @param handler - A handler function to execute on each event received.
2367
- * @return A `void` function to remove the attached event.
2368
- */
2369
- on(msgType, handler) {
2370
- const boundHandler = handler.bind(window);
2371
- const listener = (event) => {
2372
- if (event.data.msgType === `${msgType}-${this.parameters}`) boundHandler(event);
2373
- };
2374
- this.messageHandlers.add(listener);
2375
- return () => this.messageHandlers.delete(listener);
2376
- }
2377
- waitForReady() {
2378
- return new Promise((resolve) => {
2379
- const unsubscribe = this.on(import_types12.MagicIncomingWindowMessage.MAGIC_OVERLAY_READY, () => {
2380
- this.isReadyForRequest = true;
2381
- resolve();
2382
- unsubscribe();
2383
- });
2384
- });
2385
- }
2386
- /**
2387
- * Listen for messages sent from the underlying Magic `<WebView>`.
2388
- */
2389
- listen() {
2390
- this.on(import_types12.MagicIncomingWindowMessage.MAGIC_HIDE_OVERLAY, () => {
2391
- this.hideOverlay();
2392
- });
2393
- this.on(import_types12.MagicIncomingWindowMessage.MAGIC_SHOW_OVERLAY, () => {
2394
- this.showOverlay();
2395
- });
2396
- this.on(import_types12.MagicIncomingWindowMessage.MAGIC_SEND_PRODUCT_ANNOUNCEMENT, (event) => {
2397
- if (event.data.response.result.product_announcement) {
2398
- new MagicSDKWarning(import_types12.SDKWarningCode.ProductAnnouncement, event.data.response.result.product_announcement).log();
2399
- }
2400
- });
2401
- }
2402
- /**
2403
- * Sends periodic pings to check the connection.
2404
- * If no pong is received or it’s stale, the iframe is reloaded.
2405
- */
2406
- /* istanbul ignore next */
2407
- heartBeatCheck() {
2408
- let firstPing = true;
2409
- const sendPing = async () => {
2410
- const message = {
2411
- msgType: `${import_types12.MagicOutgoingWindowMessage.MAGIC_PING}-${this.parameters}`,
2412
- payload: []
2413
- };
2414
- await this._post(message);
2415
- };
2416
- this.heartbeatIntervalTimer = setInterval(async () => {
2417
- if (!this.lastPongTime) {
2418
- if (!firstPing) {
2419
- this.reloadRelayer();
2420
- firstPing = true;
2421
- return;
2422
- }
2423
- } else {
2424
- const timeSinceLastPong = Date.now() - this.lastPongTime;
2425
- if (timeSinceLastPong > PING_INTERVAL * 2) {
2426
- this.reloadRelayer();
2427
- firstPing = true;
2428
- return;
2429
- }
2430
- }
2431
- await sendPing();
2432
- firstPing = false;
2433
- }, PING_INTERVAL);
2434
- }
2435
- // Debounce revival mechanism
2436
- // Kill any existing PingPong interval
2437
- /* istanbul ignore next */
2438
- stopHeartBeat() {
2439
- this.heartbeatDebounce();
2440
- this.lastPongTime = null;
2441
- if (this.heartbeatIntervalTimer) {
2442
- clearInterval(this.heartbeatIntervalTimer);
2443
- this.heartbeatIntervalTimer = null;
2444
- }
2445
- }
2446
- };
1
+ "use strict";var Gt=Object.create;var ie=Object.defineProperty;var Kt=Object.getOwnPropertyDescriptor;var jt=Object.getOwnPropertyNames;var Vt=Object.getPrototypeOf,Bt=Object.prototype.hasOwnProperty;var Ht=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),st=(r,e)=>{for(var t in e)ie(r,t,{get:e[t],enumerable:!0})},ot=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of jt(e))!Bt.call(r,n)&&n!==t&&ie(r,n,{get:()=>e[n],enumerable:!(s=Kt(e,n))||s.enumerable});return r};var Xt=(r,e,t)=>(t=r!=null?Gt(Vt(r)):{},ot(e||!r||!r.__esModule?ie(t,"default",{value:r,enumerable:!0}):t,r)),zt=r=>ot(ie({},"__esModule",{value:!0}),r);var xt=Ht((Un,Xe)=>{"use strict";var tn=Object.prototype.hasOwnProperty,P="~";function ne(){}Object.create&&(ne.prototype=Object.create(null),new ne().__proto__||(P=!1));function rn(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function St(r,e,t,s,n){if(typeof t!="function")throw new TypeError("The listener must be a function");var o=new rn(t,s||r,n),i=P?P+e:e;return r._events[i]?r._events[i].fn?r._events[i]=[r._events[i],o]:r._events[i].push(o):(r._events[i]=o,r._eventsCount++),r}function Ee(r,e){--r._eventsCount===0?r._events=new ne:delete r._events[e]}function T(){this._events=new ne,this._eventsCount=0}T.prototype.eventNames=function(){var e=[],t,s;if(this._eventsCount===0)return e;for(s in t=this._events)tn.call(t,s)&&e.push(P?s.slice(1):s);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};T.prototype.listeners=function(e){var t=P?P+e:e,s=this._events[t];if(!s)return[];if(s.fn)return[s.fn];for(var n=0,o=s.length,i=new Array(o);n<o;n++)i[n]=s[n].fn;return i};T.prototype.listenerCount=function(e){var t=P?P+e:e,s=this._events[t];return s?s.fn?1:s.length:0};T.prototype.emit=function(e,t,s,n,o,i){var a=P?P+e:e;if(!this._events[a])return!1;var c=this._events[a],u=arguments.length,d,m;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),u){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,s),!0;case 4:return c.fn.call(c.context,t,s,n),!0;case 5:return c.fn.call(c.context,t,s,n,o),!0;case 6:return c.fn.call(c.context,t,s,n,o,i),!0}for(m=1,d=new Array(u-1);m<u;m++)d[m-1]=arguments[m];c.fn.apply(c.context,d)}else{var w=c.length,S;for(m=0;m<w;m++)switch(c[m].once&&this.removeListener(e,c[m].fn,void 0,!0),u){case 1:c[m].fn.call(c[m].context);break;case 2:c[m].fn.call(c[m].context,t);break;case 3:c[m].fn.call(c[m].context,t,s);break;case 4:c[m].fn.call(c[m].context,t,s,n);break;default:if(!d)for(S=1,d=new Array(u-1);S<u;S++)d[S-1]=arguments[S];c[m].fn.apply(c[m].context,d)}}return!0};T.prototype.on=function(e,t,s){return St(this,e,t,s,!1)};T.prototype.once=function(e,t,s){return St(this,e,t,s,!0)};T.prototype.removeListener=function(e,t,s,n){var o=P?P+e:e;if(!this._events[o])return this;if(!t)return Ee(this,o),this;var i=this._events[o];if(i.fn)i.fn===t&&(!n||i.once)&&(!s||i.context===s)&&Ee(this,o);else{for(var a=0,c=[],u=i.length;a<u;a++)(i[a].fn!==t||n&&!i[a].once||s&&i[a].context!==s)&&c.push(i[a]);c.length?this._events[o]=c.length===1?c[0]:c:Ee(this,o)}return this};T.prototype.removeAllListeners=function(e){var t;return e?(t=P?P+e:e,this._events[t]&&Ee(this,t)):(this._events=new ne,this._eventsCount=0),this};T.prototype.off=T.prototype.removeListener;T.prototype.addListener=T.prototype.on;T.prefixed=P;T.EventEmitter=T;typeof Xe<"u"&&(Xe.exports=T)});var hn={};st(hn,{Extension:()=>Ne,MagicExtensionError:()=>ee,MagicExtensionWarning:()=>K,MagicRPCError:()=>q,MagicSDKError:()=>L,MagicSDKWarning:()=>O,SDKBase:()=>Me,STORE_KEY_PRIVATE_KEY:()=>he,STORE_KEY_PUBLIC_JWK:()=>re,TypedEmitter:()=>fe,ViewController:()=>Ce,clearKeys:()=>Be,createDeprecationWarning:()=>Ke,createDuplicateIframeWarning:()=>Fr,createExtensionNotInitializedError:()=>Ue,createIncompatibleExtensionsError:()=>Fe,createInvalidArgumentError:()=>We,createJwt:()=>He,createMalformedResponseError:()=>qe,createMissingApiKeyError:()=>ke,createModalNotReadyError:()=>De,createPromiEvent:()=>I,createPromise:()=>ye,createReactNativeEndpointConfigurationWarning:()=>Ge,createSDK:()=>yt,createSynchronousWeb3MethodWarning:()=>Je,createTypedEmitter:()=>se,createURL:()=>Te,decodeJSON:()=>Le,encodeJSON:()=>Z,getPayloadId:()=>pe,isEmpty:()=>G,isJsonRpcErrorCode:()=>_e,isJsonRpcRequestPayload:()=>qr,isJsonRpcResponsePayload:()=>Oe,isMagicPayloadMethod:()=>Ur,isMajorVersionAtLeast:()=>Ye,isPromiEvent:()=>ze,isWebCryptoSupported:()=>j,storage:()=>te,uuid:()=>Ve});module.exports=zt(hn);function Yt(r){let e={exports:{}};return r(e,e.exports),e.exports}var Qt=Number.MAX_SAFE_INTEGER||9007199254740991;var $e={SEMVER_SPEC_VERSION:"2.0.0",MAX_LENGTH:256,MAX_SAFE_INTEGER:Qt,MAX_SAFE_COMPONENT_LENGTH:16},Zt=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error("SEMVER",...r):()=>{},f=Zt,Q=Yt(function(r,e){let{MAX_SAFE_COMPONENT_LENGTH:t}=$e,s=(e=r.exports={}).re=[],n=e.src=[],o=e.t={},i=0,a=(c,u,d)=>{let m=i++;f(m,u),o[c]=m,n[m]=u,s[m]=new RegExp(u,d?"g":void 0)};a("NUMERICIDENTIFIER","0|[1-9]\\d*"),a("NUMERICIDENTIFIERLOOSE","[0-9]+"),a("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*"),a("MAINVERSION",`(${n[o.NUMERICIDENTIFIER]})\\.(${n[o.NUMERICIDENTIFIER]})\\.(${n[o.NUMERICIDENTIFIER]})`),a("MAINVERSIONLOOSE",`(${n[o.NUMERICIDENTIFIERLOOSE]})\\.(${n[o.NUMERICIDENTIFIERLOOSE]})\\.(${n[o.NUMERICIDENTIFIERLOOSE]})`),a("PRERELEASEIDENTIFIER",`(?:${n[o.NUMERICIDENTIFIER]}|${n[o.NONNUMERICIDENTIFIER]})`),a("PRERELEASEIDENTIFIERLOOSE",`(?:${n[o.NUMERICIDENTIFIERLOOSE]}|${n[o.NONNUMERICIDENTIFIER]})`),a("PRERELEASE",`(?:-(${n[o.PRERELEASEIDENTIFIER]}(?:\\.${n[o.PRERELEASEIDENTIFIER]})*))`),a("PRERELEASELOOSE",`(?:-?(${n[o.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${n[o.PRERELEASEIDENTIFIERLOOSE]})*))`),a("BUILDIDENTIFIER","[0-9A-Za-z-]+"),a("BUILD",`(?:\\+(${n[o.BUILDIDENTIFIER]}(?:\\.${n[o.BUILDIDENTIFIER]})*))`),a("FULLPLAIN",`v?${n[o.MAINVERSION]}${n[o.PRERELEASE]}?${n[o.BUILD]}?`),a("FULL",`^${n[o.FULLPLAIN]}$`),a("LOOSEPLAIN",`[v=\\s]*${n[o.MAINVERSIONLOOSE]}${n[o.PRERELEASELOOSE]}?${n[o.BUILD]}?`),a("LOOSE",`^${n[o.LOOSEPLAIN]}$`),a("GTLT","((?:<|>)?=?)"),a("XRANGEIDENTIFIERLOOSE",`${n[o.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),a("XRANGEIDENTIFIER",`${n[o.NUMERICIDENTIFIER]}|x|X|\\*`),a("XRANGEPLAIN",`[v=\\s]*(${n[o.XRANGEIDENTIFIER]})(?:\\.(${n[o.XRANGEIDENTIFIER]})(?:\\.(${n[o.XRANGEIDENTIFIER]})(?:${n[o.PRERELEASE]})?${n[o.BUILD]}?)?)?`),a("XRANGEPLAINLOOSE",`[v=\\s]*(${n[o.XRANGEIDENTIFIERLOOSE]})(?:\\.(${n[o.XRANGEIDENTIFIERLOOSE]})(?:\\.(${n[o.XRANGEIDENTIFIERLOOSE]})(?:${n[o.PRERELEASELOOSE]})?${n[o.BUILD]}?)?)?`),a("XRANGE",`^${n[o.GTLT]}\\s*${n[o.XRANGEPLAIN]}$`),a("XRANGELOOSE",`^${n[o.GTLT]}\\s*${n[o.XRANGEPLAINLOOSE]}$`),a("COERCE",`(^|[^\\d])(\\d{1,${t}})(?:\\.(\\d{1,${t}}))?(?:\\.(\\d{1,${t}}))?(?:$|[^\\d])`),a("COERCERTL",n[o.COERCE],!0),a("LONETILDE","(?:~>?)"),a("TILDETRIM",`(\\s*)${n[o.LONETILDE]}\\s+`,!0),e.tildeTrimReplace="$1~",a("TILDE",`^${n[o.LONETILDE]}${n[o.XRANGEPLAIN]}$`),a("TILDELOOSE",`^${n[o.LONETILDE]}${n[o.XRANGEPLAINLOOSE]}$`),a("LONECARET","(?:\\^)"),a("CARETTRIM",`(\\s*)${n[o.LONECARET]}\\s+`,!0),e.caretTrimReplace="$1^",a("CARET",`^${n[o.LONECARET]}${n[o.XRANGEPLAIN]}$`),a("CARETLOOSE",`^${n[o.LONECARET]}${n[o.XRANGEPLAINLOOSE]}$`),a("COMPARATORLOOSE",`^${n[o.GTLT]}\\s*(${n[o.LOOSEPLAIN]})$|^$`),a("COMPARATOR",`^${n[o.GTLT]}\\s*(${n[o.FULLPLAIN]})$|^$`),a("COMPARATORTRIM",`(\\s*)${n[o.GTLT]}\\s*(${n[o.LOOSEPLAIN]}|${n[o.XRANGEPLAIN]})`,!0),e.comparatorTrimReplace="$1$2$3",a("HYPHENRANGE",`^\\s*(${n[o.XRANGEPLAIN]})\\s+-\\s+(${n[o.XRANGEPLAIN]})\\s*$`),a("HYPHENRANGELOOSE",`^\\s*(${n[o.XRANGEPLAINLOOSE]})\\s+-\\s+(${n[o.XRANGEPLAINLOOSE]})\\s*$`),a("STAR","(<|>)?=?\\s*\\*"),a("GTE0","^\\s*>=\\s*0.0.0\\s*$"),a("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")}),it=/^[0-9]+$/,Et=(r,e)=>{let t=it.test(r),s=it.test(e);return t&&s&&(r=+r,e=+e),r===e?0:t&&!s?-1:s&&!t?1:r<e?-1:1},er=(r,e)=>Et(e,r),tr={compareIdentifiers:Et,rcompareIdentifiers:er},{MAX_LENGTH:at,MAX_SAFE_INTEGER:ae}=$e,{re:ct,t:lt}=Q,{compareIdentifiers:H}=tr,N=class r{constructor(e,t){if(t&&typeof t=="object"||(t={loose:!!t,includePrerelease:!1}),e instanceof r){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid Version: ${e}`);if(e.length>at)throw new TypeError(`version is longer than ${at} characters`);f("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let s=e.trim().match(t.loose?ct[lt.LOOSE]:ct[lt.FULL]);if(!s)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+s[1],this.minor=+s[2],this.patch=+s[3],this.major>ae||this.major<0)throw new TypeError("Invalid major version");if(this.minor>ae||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>ae||this.patch<0)throw new TypeError("Invalid patch version");s[4]?this.prerelease=s[4].split(".").map(n=>{if(/^[0-9]+$/.test(n)){let o=+n;if(o>=0&&o<ae)return o}return n}):this.prerelease=[],this.build=s[5]?s[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(e){if(f("SemVer.compare",this.version,this.options,e),!(e instanceof r)){if(typeof e=="string"&&e===this.version)return 0;e=new r(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof r||(e=new r(e,this.options)),H(this.major,e.major)||H(this.minor,e.minor)||H(this.patch,e.patch)}comparePre(e){if(e instanceof r||(e=new r(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let s=this.prerelease[t],n=e.prerelease[t];if(f("prerelease compare",t,s,n),s===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(s===void 0)return-1;if(s!==n)return H(s,n)}while(++t)}compareBuild(e){e instanceof r||(e=new r(e,this.options));let t=0;do{let s=this.build[t],n=e.build[t];if(f("prerelease compare",t,s,n),s===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(s===void 0)return-1;if(s!==n)return H(s,n)}while(++t)}inc(e,t){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t),this.inc("pre",t);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",t),this.inc("pre",t);break;case"major":this.minor===0&&this.patch===0&&this.prerelease.length!==0||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":this.patch===0&&this.prerelease.length!==0||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":if(this.prerelease.length===0)this.prerelease=[0];else{let s=this.prerelease.length;for(;--s>=0;)typeof this.prerelease[s]=="number"&&(this.prerelease[s]++,s=-2);s===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}},rr=(r,e,t)=>new N(r,t).compare(new N(e,t)),J=rr,nr=(r,e,t)=>J(r,e,t)===0,sr=nr,or=(r,e,t)=>J(r,e,t)!==0,ir=or,ar=(r,e,t)=>J(r,e,t)>0,cr=ar,lr=(r,e,t)=>J(r,e,t)>=0,dr=lr,ur=(r,e,t)=>J(r,e,t)<0,pr=ur,mr=(r,e,t)=>J(r,e,t)<=0,hr=mr,Er=(r,e,t,s)=>{switch(e){case"===":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r===t;case"!==":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r!==t;case"":case"=":case"==":return sr(r,t,s);case"!=":return ir(r,t,s);case">":return cr(r,t,s);case">=":return dr(r,t,s);case"<":return pr(r,t,s);case"<=":return hr(r,t,s);default:throw new TypeError(`Invalid operator: ${e}`)}},Ae=Er,X=Symbol("SemVer ANY"),z=class r{static get ANY(){return X}constructor(e,t){if(t&&typeof t=="object"||(t={loose:!!t,includePrerelease:!1}),e instanceof r){if(e.loose===!!t.loose)return e;e=e.value}f("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===X?this.value="":this.value=this.operator+this.semver.version,f("comp",this)}parse(e){let t=this.options.loose?dt[ut.COMPARATORLOOSE]:dt[ut.COMPARATOR],s=e.match(t);if(!s)throw new TypeError(`Invalid comparator: ${e}`);this.operator=s[1]!==void 0?s[1]:"",this.operator==="="&&(this.operator=""),s[2]?this.semver=new N(s[2],this.options.loose):this.semver=X}toString(){return this.value}test(e){if(f("Comparator.test",e,this.options.loose),this.semver===X||e===X)return!0;if(typeof e=="string")try{e=new N(e,this.options)}catch{return!1}return Ae(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof r))throw new TypeError("a Comparator is required");if(t&&typeof t=="object"||(t={loose:!!t,includePrerelease:!1}),this.operator==="")return this.value===""||new Y(e.value,t).test(this.value);if(e.operator==="")return e.value===""||new Y(this.value,t).test(e.semver);let s=!(this.operator!==">="&&this.operator!==">"||e.operator!==">="&&e.operator!==">"),n=!(this.operator!=="<="&&this.operator!=="<"||e.operator!=="<="&&e.operator!=="<"),o=this.semver.version===e.semver.version,i=!(this.operator!==">="&&this.operator!=="<="||e.operator!==">="&&e.operator!=="<="),a=Ae(this.semver,"<",e.semver,t)&&(this.operator===">="||this.operator===">")&&(e.operator==="<="||e.operator==="<"),c=Ae(this.semver,">",e.semver,t)&&(this.operator==="<="||this.operator==="<")&&(e.operator===">="||e.operator===">");return s||n||o&&i||a||c}},{re:dt,t:ut}=Q,Y=class r{constructor(e,t){if(t&&typeof t=="object"||(t={loose:!!t,includePrerelease:!1}),e instanceof r)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new r(e.raw,t);if(e instanceof z)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(s=>this.parseRange(s.trim())).filter(s=>s.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let{loose:t}=this.options;e=e.trim();let s=t?R[g.HYPHENRANGELOOSE]:R[g.HYPHENRANGE];e=e.replace(s,Mr(this.options.includePrerelease)),f("hyphen replace",e),e=e.replace(R[g.COMPARATORTRIM],fr),f("comparator trim",e,R[g.COMPARATORTRIM]),e=(e=(e=e.replace(R[g.TILDETRIM],gr)).replace(R[g.CARETTRIM],yr)).split(/\s+/).join(" ");let n=t?R[g.COMPARATORLOOSE]:R[g.COMPARATOR];return e.split(" ").map(o=>Rr(o,this.options)).join(" ").split(/\s+/).map(o=>xr(o,this.options)).filter(this.options.loose?o=>!!o.match(n):()=>!0).map(o=>new z(o,this.options))}intersects(e,t){if(!(e instanceof r))throw new TypeError("a Range is required");return this.set.some(s=>pt(s,t)&&e.set.some(n=>pt(n,t)&&s.every(o=>n.every(i=>o.intersects(i,t)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new N(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(Cr(this.set[t],e,this.options))return!0;return!1}},{re:R,t:g,comparatorTrimReplace:fr,tildeTrimReplace:gr,caretTrimReplace:yr}=Q,pt=(r,e)=>{let t=!0,s=r.slice(),n=s.pop();for(;t&&s.length;)t=s.every(o=>n.intersects(o,e)),n=s.pop();return t},Rr=(r,e)=>(f("comp",r,e),r=Ir(r,e),f("caret",r),r=vr(r,e),f("tildes",r),r=Pr(r,e),f("xrange",r),r=Sr(r,e),f("stars",r),r),b=r=>!r||r.toLowerCase()==="x"||r==="*",vr=(r,e)=>r.trim().split(/\s+/).map(t=>Tr(t,e)).join(" "),Tr=(r,e)=>{let t=e.loose?R[g.TILDELOOSE]:R[g.TILDE];return r.replace(t,(s,n,o,i,a)=>{let c;return f("tilde",r,s,n,o,i,a),b(n)?c="":b(o)?c=`>=${n}.0.0 <${+n+1}.0.0-0`:b(i)?c=`>=${n}.${o}.0 <${n}.${+o+1}.0-0`:a?(f("replaceTilde pr",a),c=`>=${n}.${o}.${i}-${a} <${n}.${+o+1}.0-0`):c=`>=${n}.${o}.${i} <${n}.${+o+1}.0-0`,f("tilde return",c),c})},Ir=(r,e)=>r.trim().split(/\s+/).map(t=>br(t,e)).join(" "),br=(r,e)=>{f("caret",r,e);let t=e.loose?R[g.CARETLOOSE]:R[g.CARET],s=e.includePrerelease?"-0":"";return r.replace(t,(n,o,i,a,c)=>{let u;return f("caret",r,n,o,i,a,c),b(o)?u="":b(i)?u=`>=${o}.0.0${s} <${+o+1}.0.0-0`:b(a)?u=o==="0"?`>=${o}.${i}.0${s} <${o}.${+i+1}.0-0`:`>=${o}.${i}.0${s} <${+o+1}.0.0-0`:c?(f("replaceCaret pr",c),u=o==="0"?i==="0"?`>=${o}.${i}.${a}-${c} <${o}.${i}.${+a+1}-0`:`>=${o}.${i}.${a}-${c} <${o}.${+i+1}.0-0`:`>=${o}.${i}.${a}-${c} <${+o+1}.0.0-0`):(f("no pr"),u=o==="0"?i==="0"?`>=${o}.${i}.${a}${s} <${o}.${i}.${+a+1}-0`:`>=${o}.${i}.${a}${s} <${o}.${+i+1}.0-0`:`>=${o}.${i}.${a} <${+o+1}.0.0-0`),f("caret return",u),u})},Pr=(r,e)=>(f("replaceXRanges",r,e),r.split(/\s+/).map(t=>wr(t,e)).join(" ")),wr=(r,e)=>{r=r.trim();let t=e.loose?R[g.XRANGELOOSE]:R[g.XRANGE];return r.replace(t,(s,n,o,i,a,c)=>{f("xRange",r,s,n,o,i,a,c);let u=b(o),d=u||b(i),m=d||b(a),w=m;return n==="="&&w&&(n=""),c=e.includePrerelease?"-0":"",u?s=n===">"||n==="<"?"<0.0.0-0":"*":n&&w?(d&&(i=0),a=0,n===">"?(n=">=",d?(o=+o+1,i=0,a=0):(i=+i+1,a=0)):n==="<="&&(n="<",d?o=+o+1:i=+i+1),n==="<"&&(c="-0"),s=`${n+o}.${i}.${a}${c}`):d?s=`>=${o}.0.0${c} <${+o+1}.0.0-0`:m&&(s=`>=${o}.${i}.0${c} <${o}.${+i+1}.0-0`),f("xRange return",s),s})},Sr=(r,e)=>(f("replaceStars",r,e),r.trim().replace(R[g.STAR],"")),xr=(r,e)=>(f("replaceGTE0",r,e),r.trim().replace(R[e.includePrerelease?g.GTE0PRE:g.GTE0],"")),Mr=r=>(e,t,s,n,o,i,a,c,u,d,m,w,S)=>`${t=b(s)?"":b(n)?`>=${s}.0.0${r?"-0":""}`:b(o)?`>=${s}.${n}.0${r?"-0":""}`:i?`>=${t}`:`>=${t}${r?"-0":""}`} ${c=b(u)?"":b(d)?`<${+u+1}.0.0-0`:b(m)?`<${u}.${+d+1}.0-0`:w?`<=${u}.${d}.${m}-${w}`:r?`<${u}.${d}.${+m+1}-0`:`<=${c}`}`.trim(),Cr=(r,e,t)=>{for(let s=0;s<r.length;s++)if(!r[s].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let s=0;s<r.length;s++)if(f(r[s].semver),r[s].semver!==z.ANY&&r[s].semver.prerelease.length>0){let n=r[s].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0},ft=(r,e,t)=>{try{e=new Y(e,t)}catch{return!1}return e.test(r)};var{MAX_LENGTH:Nr}=$e,{re:mt,t:ht}=Q,Ar=(r,e)=>{if(e&&typeof e=="object"||(e={loose:!!e,includePrerelease:!1}),r instanceof N)return r;if(typeof r!="string"||r.length>Nr||!(e.loose?mt[ht.LOOSE]:mt[ht.FULL]).test(r))return null;try{return new N(r,e)}catch{return null}},$r=Ar,{re:ce,t:le}=Q,gt=(r,e)=>{if(r instanceof N)return r;if(typeof r=="number"&&(r=String(r)),typeof r!="string")return null;let t=null;if((e=e||{}).rtl){let s;for(;(s=ce[le.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)t&&s.index+s[0].length===t.index+t[0].length||(t=s),ce[le.COERCERTL].lastIndex=s.index+s[1].length+s[2].length;ce[le.COERCERTL].lastIndex=-1}else t=r.match(ce[le.COERCE]);return t===null?null:$r(`${t[2]}.${t[3]||"0"}.${t[4]||"0"}`,e)};function Lr(r){return String.fromCharCode(parseInt(r.slice(1),16))}function Or(r){return`%${`00${r.charCodeAt(0).toString(16)}`.slice(-2)}`}function _r(r){return btoa(encodeURIComponent(r).replace(/%[0-9A-F]{2}/g,Lr))}function kr(r){return decodeURIComponent(Array.from(atob(r),Or).join(""))}function Z(r){return _r(JSON.stringify(r))}function Le(r){return JSON.parse(kr(r))}var x=require("@magic-sdk/types");var de=require("@magic-sdk/types");function $(r){return typeof r>"u"}function Dr(r){return r===null}function ue(r){return Dr(r)||$(r)}function qr(r){return ue(r)?!1:!$(r.jsonrpc)&&!$(r.id)&&!$(r.method)&&!$(r.params)}function Oe(r){return ue(r)?!1:!$(r.jsonrpc)&&!$(r.id)&&(!$(r.result)||!$(r.error))}function Ur(r){return ue(r)?!1:typeof r=="string"&&Object.values(de.MagicPayloadMethod).includes(r)}function _e(r){return ue(r)?!1:typeof r=="number"&&Object.values(de.RPCErrorCode).includes(r)}function G(r){if(!r)return!0;for(let e in r)if(Object.hasOwnProperty.call(r,e))return!1;return!0}var E={};function yt(r,e){return Object.assign(E,e),r}var Rt={"magic-sdk":"magic-sdk","@magic-sdk/react-native":"magic-sdk-rn","@magic-sdk/react-native-bare":"magic-sdk-rn-bare","@magic-sdk/react-native-expo":"magic-sdk-rn-expo"};var L=class r extends Error{constructor(t,s){super(`Magic SDK Error: [${t}] ${s}`);this.code=t;this.rawMessage=s;Object.setPrototypeOf(this,r.prototype)}__proto__=Error},q=class r extends Error{__proto__=Error;code;rawMessage;data;constructor(e){super();let t=Number(e?.code);this.rawMessage=e?.message||"Internal error",this.code=_e(t)?t:x.RPCErrorCode.InternalError,this.message=`Magic RPC Error: [${this.code}] ${this.rawMessage}`,this.data=e?.data||void 0,Object.setPrototypeOf(this,r.prototype)}},O=class{constructor(e,t){this.code=e;this.rawMessage=t;this.message=`Magic SDK Warning: [${e}] ${t}`}message;log(){console.warn(this.message)}},ee=class r extends Error{constructor(t,s,n,o){super(`Magic Extension Error (${t.name}): [${s}] ${n}`);this.code=s;this.rawMessage=n;this.data=o;Object.setPrototypeOf(this,r.prototype)}__proto__=Error},K=class{constructor(e,t,s){this.code=t;this.rawMessage=s;this.message=`Magic Extension Warning (${e.name}): [${t}] ${s}`}message;log(){console.warn(this.message)}};function ke(){return new L(x.SDKErrorCode.MissingApiKey,"Please provide an API key that you acquired from the Magic developer dashboard.")}function De(){return new L(x.SDKErrorCode.ModalNotReady,"Modal is not ready")}function qe(){return new L(x.SDKErrorCode.MalformedResponse,"Response from the Magic iframe is malformed.")}function Ue(r){return new L(x.SDKErrorCode.ExtensionNotInitialized,`Extensions must be initialized with a Magic SDK instance before \`Extension.${r}\` can be accessed. Do not invoke \`Extension.${r}\` inside an extension constructor.`)}function Fe(r){let e=`Some extensions are incompatible with \`${E.sdkName}@${E.version}\`:`;return r.filter(t=>typeof t.compat<"u"&&t.compat!==null).forEach(t=>{let s=t.compat[E.sdkName];typeof s=="string"?e+=`
2
+ - Extension \`${t.name}\` supports version(s) \`${s}\``:s||(e+=`
3
+ - Extension \`${t.name}\` does not support ${E.platform} environments.`)}),new L(x.SDKErrorCode.IncompatibleExtensions,e)}function We(r){let e=t=>{let s=t+1,n=s%10,o=s%100;return n===1&&o!==11?`${s}st`:n===2&&o!==12?`${s}nd`:n===3&&o!==13?`${s}rd`:`${s}th`};return new L(x.SDKErrorCode.InvalidArgument,`Invalid ${e(r.argument)} argument given to \`${r.procedure}\`.
4
+ Expected: \`${r.expected}\`
5
+ Received: \`${r.received}\``)}function Fr(){return new O(x.SDKWarningCode.DuplicateIframe,"Duplicate iframes found.")}function Je(){return new O(x.SDKWarningCode.SyncWeb3Method,"Non-async web3 methods are deprecated in web3 > 1.0 and are not supported by the Magic web3 provider. Please use an async method instead.")}function Ge(){return new O(x.SDKWarningCode.ReactNativeEndpointConfiguration,`CUSTOM DOMAINS ARE NOT SUPPORTED WHEN USING MAGIC SDK WITH REACT NATIVE! The \`endpoint\` parameter SHOULD NOT be provided. The Magic \`<iframe>\` is automatically wrapped by a WebView pointed at \`${E.defaultEndpoint}\`. Changing this default behavior will lead to unexpected results and potentially security-threatening bugs.`)}function Ke(r){let{method:e,removalVersions:t,useInstead:s}=r,n=t[E.sdkName],o=s?` Use \`${s}\` instead.`:"",i=`\`${e}\` will be removed from \`${E.sdkName}\` in version \`${n}\`.${o}`;return new O(x.SDKWarningCode.DeprecationNotice,i)}var p=require("@magic-sdk/types");var F=require("@magic-sdk/types");var bt=require("@magic-sdk/types");function*Wr(){let r=0;for(;;)r<Number.MAX_SAFE_INTEGER?yield++r:r=0}var Jr=Wr();function pe(){return Jr.next().value}var te={};st(te,{clear:()=>Gr,getItem:()=>v,iterate:()=>je,key:()=>jr,keys:()=>Vr,length:()=>Kr,removeItem:()=>_,setItem:()=>C});var me;function U(r){return async(...e)=>(me||(me=await E.configureStorage()),await me.ready(),me[r](...e))}var v=U("getItem"),C=U("setItem"),_=U("removeItem"),Gr=U("clear"),Kr=U("length"),jr=U("key"),Vr=U("keys"),je=U("iterate");function Ve(){let r=window.crypto.getRandomValues(new Uint8Array(16));r[6]=r[6]&15|64,r[8]=r[8]&191|128;let e="";return e+=r[0].toString(16),e+=r[1].toString(16),e+=r[2].toString(16),e+=r[3].toString(16),e+="-",e+=r[4].toString(16),e+=r[5].toString(16),e+="-",e+=r[6].toString(16),e+=r[7].toString(16),e+="-",e+=r[8].toString(16),e+=r[9].toString(16),e+="-",e+=r[10].toString(16),e+=r[11].toString(16),e+=r[12].toString(16),e+=r[13].toString(16),e+=r[14].toString(16),e+=r[15].toString(16),e}var he="STORE_KEY_PRIVATE_KEY",re="STORE_KEY_PUBLIC_JWK",Tt="ECDSA",Br="P-256",Hr={name:Tt,namedCurve:Br};function j(){let r=typeof window<"u"&&!!window.crypto,e=r&&!!window.crypto.subtle;return r&&e}function Be(){_(re),_(he)}async function He(){let r=await Xr();if(!r){console.info("unable to create public key or webcrypto is unsupported");return}let{subtle:e}=window.crypto,t=await v(he);if(!t||!e){console.info("unable to find private key or webcrypto unsupported");return}let s={iat:Math.floor(new Date().getTime()/1e3),jti:Ve()},o={protected:vt(JSON.stringify({typ:"dpop+jwt",alg:"ES256",jwk:r})),claims:vt(JSON.stringify(s))},i=Yr(`${o.protected}.${o.claims}`),a={name:Tt,hash:{name:"SHA-256"}},c=Zr(new Uint8Array(await e.sign(a,t,i)));return`${o.protected}.${o.claims}.${c}`}async function Xr(){if(!j()){console.info("webcrypto is not supported");return}return await v(re)||await zr(),v(re)}async function zr(){let{subtle:r}=window.crypto,e=await r.generateKey(Hr,!1,["sign"]),t=await r.exportKey("jwk",e.publicKey);await C(he,e.privateKey),await C(re,t)}function vt(r){return It(Qr(r))}function Yr(r){return new TextEncoder().encode(r)}function It(r){return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+/g,"")}function Qr(r){return encodeURIComponent(r).replace(/%([0-9A-F]{2})/g,(t,s)=>String.fromCharCode(parseInt(s,16)))}function Zr(r){let e="";return r.forEach(t=>{e+=String.fromCharCode(t)}),It(e)}var Pt=Symbol("Payload pre-processed by Magic SDK");function wt(r){return Object.defineProperty(r,Pt,{value:!0,enumerable:!1}),r}function en(r){return!!r[Pt]}function W(r){return en(r)||(r.jsonrpc=r.jsonrpc??"2.0",r.id=pe(),r.method=r.method??"noop",r.params=r.params??[],wt(r)),r}function h(r,e=[]){return wt({params:e,method:r,jsonrpc:"2.0",id:pe()})}var V=class r{_jsonrpc;_id;_result;_error;constructor(e){e instanceof r?(this._jsonrpc=e.payload.jsonrpc,this._id=e.payload.id,this._result=e.payload.result,this._error=e.payload.error):Oe(e)?(this._jsonrpc=e.jsonrpc,this._id=e.id,this._result=e.result,this._error=e.error):(this._jsonrpc=e.jsonrpc,this._id=e.id,this._result=void 0,this._error=void 0)}applyError(e){return this._error=e,this}applyResult(e){return this._result=e,this}get hasError(){return this._error?.code===bt.RPCErrorCode.DpopInvalidated&&Be(),typeof this._error<"u"&&this._error!==null}get hasResult(){return typeof this._result<"u"}get payload(){return{jsonrpc:this._jsonrpc,id:this._id,result:this._result,error:this._error}}};var ge=require("@magic-sdk/types");var Mt=Xt(xt()),fe=class extends Mt.default{};function se(){let r=new fe;return{emitter:r,createChainingEmitterMethod:(s,n)=>(...o)=>(r[s].apply(r,o),n),createBoundEmitterMethod:s=>(...n)=>r[s].apply(r,n)}}var Ct=Symbol("isPromiEvent");function ze(r){return!!r[Ct]}function I(r){let e=ye(r),{createBoundEmitterMethod:t,createChainingEmitterMethod:s}=se(),n=Symbol("Promise.then"),o=Symbol("Promise.catch"),i=Symbol("Promise.finally"),a=(d,m)=>(...w)=>{let S=m[d].apply(m,w);return c(S)},c=d=>Object.assign(d,{[Ct]:!0,[n]:d[n]||d.then,[o]:d[o]||d.catch,[i]:d[i]||d.finally,then:a(n,d),catch:a(o,d),finally:a(i,d),on:s("on",d),once:s("once",d),addListener:s("addListener",d),off:s("off",d),removeListener:s("removeListener",d),removeAllListeners:s("removeAllListeners",d),emit:t("emit"),eventNames:t("eventNames"),listeners:t("listeners"),listenerCount:t("listenerCount")}),u=c(e.then(d=>(u.emit("done",d),u.emit("settled"),d),d=>{throw u.emit("error",d),u.emit("settled"),d}));return u.on(ge.UserEventsOnReceived.ClosedByUser,()=>{u.emit(ge.UserEventsEmit.ClosedByUser)}),u}function ye(r){return new Promise((e,t)=>{let s=r(e,t);Promise.resolve(s).catch(t)})}var y=class{constructor(e){this.sdk=e}get overlay(){return this.sdk.overlay}request(e){if(this.sdk.thirdPartyWallets.isConnected&&!F.routeToMagicMethods.includes(e.method))return I((i,a)=>{this.sdk.thirdPartyWallets.requestOverride(e).then(i).catch(a)});let t=this.overlay.post(F.MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,W(e)),s=I((o,i)=>{t.then(a=>{if(n(),a.hasError)i(new q(a.payload.error));else if(a.hasResult)o(a.payload.result);else throw qe()}).catch(a=>{n(),i(a)})}),n=this.overlay.on(F.MagicIncomingWindowMessage.MAGIC_HANDLE_EVENT,o=>{let{response:i}=o.data;if(i.id===e.id&&i.result?.event){let{event:a,params:c=[]}=i.result;s.emit(a,...c)}});return s}createIntermediaryEvent(e,t){return n=>{let o=h(F.MagicPayloadMethod.IntermediaryEvent,[{payloadId:t,eventType:e,args:n}]);this.request(o)}}};function Ye(r,e){let[t]=r.split(".").map(Number);return t>=e}var nn={"magic-sdk":"v18.0.0","@magic-sdk/react-native":"v14.0.0","@magic-sdk/react-native-bare":"v19.0.0","@magic-sdk/react-native-expo":"v19.0.0"},Re=class extends y{loginWithMagicLink(e){let t=E.sdkName==="@magic-sdk/react-native"||E.sdkName==="@magic-sdk/react-native-bare"||E.sdkName==="@magic-sdk/react-native-expo";if(t&&Ye(E.version,19))throw new Error("loginWithMagicLink() is deprecated for this package, please utilize a passcode method like loginWithSMS or loginWithEmailOTP instead.");t&&Ke({method:"auth.loginWithMagicLink()",removalVersions:nn,useInstead:"auth.loginWithEmailOTP()"}).log();let{email:s,showUI:n=!0,redirectURI:o,overrides:i,lifespan:a}=e,c=h(this.sdk.testMode?p.MagicPayloadMethod.LoginWithMagicLinkTestMode:p.MagicPayloadMethod.LoginWithMagicLink,[{email:s,showUI:n,redirectURI:o,overrides:i,lifespan:a}]);return this.request(c)}loginWithSMS(e){let{phoneNumber:t,showUI:s=!0,lifespan:n}=e,o=h(this.sdk.testMode?p.MagicPayloadMethod.LoginWithSmsTestMode:p.MagicPayloadMethod.LoginWithSms,[{phoneNumber:t,showUI:s,lifespan:n}]),i=this.request(o);return!s&&i&&(i.on(p.LoginWithSmsOTPEventEmit.VerifySmsOtp,a=>{this.createIntermediaryEvent(p.LoginWithSmsOTPEventEmit.VerifySmsOtp,o.id)(a)}),i.on(p.LoginWithSmsOTPEventEmit.Cancel,()=>{this.createIntermediaryEvent(p.LoginWithSmsOTPEventEmit.Cancel,o.id)()})),i}loginWithEmailOTP(e){let{email:t,showUI:s,deviceCheckUI:n,overrides:o,lifespan:i}=e,a=h(this.sdk.testMode?p.MagicPayloadMethod.LoginWithEmailOTPTestMode:p.MagicPayloadMethod.LoginWithEmailOTP,[{email:t,showUI:s,deviceCheckUI:n,overrides:o,lifespan:i}]),c=this.request(a);return!n&&c&&c.on(p.DeviceVerificationEventEmit.Retry,()=>{this.createIntermediaryEvent(p.DeviceVerificationEventEmit.Retry,a.id)()}),!s&&c&&(c.on(p.LoginWithEmailOTPEventEmit.VerifyEmailOtp,u=>{this.createIntermediaryEvent(p.LoginWithEmailOTPEventEmit.VerifyEmailOtp,a.id)(u)}),c.on(p.LoginWithEmailOTPEventEmit.VerifyMFACode,u=>{this.createIntermediaryEvent(p.LoginWithEmailOTPEventEmit.VerifyMFACode,a.id)(u)}),c.on(p.LoginWithEmailOTPEventEmit.LostDevice,()=>{this.createIntermediaryEvent(p.LoginWithEmailOTPEventEmit.LostDevice,a.id)()}),c.on(p.LoginWithEmailOTPEventEmit.VerifyRecoveryCode,u=>{this.createIntermediaryEvent(p.LoginWithEmailOTPEventEmit.VerifyRecoveryCode,a.id)(u)}),c.on(p.LoginWithEmailOTPEventEmit.Cancel,()=>{this.createIntermediaryEvent(p.LoginWithEmailOTPEventEmit.Cancel,a.id)()})),c}loginWithCredential(e){let{credentialOrQueryString:t,lifespan:s}=e||{},n=t??"";if(!t&&E.platform==="web"){n=window.location.search;let i=window.location.origin+window.location.pathname;window.history.replaceState(null,"",i)}let o=h(this.sdk.testMode?p.MagicPayloadMethod.LoginWithCredentialTestMode:p.MagicPayloadMethod.LoginWithCredential,[n,s]);return this.request(o)}setAuthorizationToken(e){let t=h(p.MagicPayloadMethod.SetAuthorizationToken,[{jwt:e}]);return this.request(t)}updateEmailWithUI(e){let{email:t,showUI:s=!0}=e,n=h(this.sdk.testMode?p.MagicPayloadMethod.UpdateEmailTestMode:p.MagicPayloadMethod.UpdateEmail,[{email:t,showUI:s}]),o=this.request(n);return s||(o.on(p.RecencyCheckEventEmit.Retry,()=>{this.createIntermediaryEvent(p.RecencyCheckEventEmit.Retry,n.id)()}),o.on(p.RecencyCheckEventEmit.Cancel,()=>{this.createIntermediaryEvent(p.RecencyCheckEventEmit.Cancel,n.id)()}),o.on(p.RecencyCheckEventEmit.VerifyEmailOtp,i=>{this.createIntermediaryEvent(p.RecencyCheckEventEmit.VerifyEmailOtp,n.id)(i)}),o.on(p.RecencyCheckEventEmit.VerifyMFACode,i=>{this.createIntermediaryEvent(p.RecencyCheckEventEmit.VerifyMFACode,n.id)(i)}),o.on(p.UpdateEmailEventEmit.RetryWithNewEmail,i=>{this.createIntermediaryEvent(p.UpdateEmailEventEmit.RetryWithNewEmail,n.id)(i)}),o.on(p.UpdateEmailEventEmit.Cancel,()=>{this.createIntermediaryEvent(p.UpdateEmailEventEmit.Cancel,n.id)()}),o.on(p.UpdateEmailEventEmit.VerifyEmailOtp,i=>{this.createIntermediaryEvent(p.UpdateEmailEventEmit.VerifyEmailOtp,n.id)(i)})),o}};var l=require("@magic-sdk/types");var Qe="ds",Ze="ek",et="iv",tt="AES-GCM",sn=256;async function ve(){let r=[];await je((e,t,s)=>{t.startsWith(`${Qe}_`)&&r.push(t)});for(let e of r)await _(e)}function Nt(r){let e="",t=new Uint8Array(r),s=t.byteLength;for(let n=0;n<s;n++)e+=String.fromCharCode(t[n]);return window.btoa(e)}function At(r){let e=window.atob(r),t=e.length,s=new Uint8Array(t);for(let n=0;n<t;n++)s[n]=e.charCodeAt(n);return s.buffer}async function on(){if(!j()){console.info("webcrypto is not supported");return}let{crypto:r}=window,e=await v(et);return e||r.getRandomValues(new Uint8Array(12))}async function an(){if(!j()){console.info("webcrypto is not supported");return}let{subtle:r}=window.crypto,e=await v(Ze);return e||await r.generateKey({name:tt,length:sn},!1,["encrypt","decrypt"])}async function $t(r,e){let t=await on(),s=await an();if(!t||!s||!r)return;let n=At(r),{subtle:o}=window.crypto,i=await o.encrypt({name:tt,iv:t},s,n),a=Nt(i);await C(`${Qe}_${e}`,a),await C(Ze,s),await C(et,t)}async function Lt(r){let e=await v(`${Qe}_${r}`),t=await v(et),s=await v(Ze);if(!t||!e||!s||!j())return;let{subtle:n}=window.crypto,o=await n.decrypt({name:tt,iv:t},s,At(e));return Nt(o)}function Te(r,e){return e?new URL(r,e):new URL(r)}var Ie=class extends y{getIdToken(e){let t=h(this.sdk.testMode?l.MagicPayloadMethod.GetIdTokenTestMode:l.MagicPayloadMethod.GetIdToken,[e]);return this.request(t)}generateIdToken(e){let t=h(this.sdk.testMode?l.MagicPayloadMethod.GenerateIdTokenTestMode:l.MagicPayloadMethod.GenerateIdToken,[e]);return this.request(t)}getInfo(){let e=h(l.MagicPayloadMethod.GetInfo,[]);return this.request(e)}isLoggedIn(){return I(async(e,t)=>{try{let s=!1;this.sdk.useStorageCache&&(s=await v(this.localForageIsLoggedInKey)==="true",s&&e(!0));let n=h(this.sdk.testMode?l.MagicPayloadMethod.IsLoggedInTestMode:l.MagicPayloadMethod.IsLoggedIn),o=await this.request(n);this.sdk.useStorageCache&&(o?C(this.localForageIsLoggedInKey,!0):_(this.localForageIsLoggedInKey),s&&!o&&this.emitUserLoggedOut(!0)),e(o)}catch(s){t(s)}})}logout(){return _(this.localForageIsLoggedInKey),ve(),I(async(e,t)=>{try{let s=h(this.sdk.testMode?l.MagicPayloadMethod.LogoutTestMode:l.MagicPayloadMethod.Logout),n=await this.request(s);this.sdk.useStorageCache&&this.emitUserLoggedOut(n),e(n)}catch(s){t(s)}})}requestInfoWithUI(e){let t=h(l.MagicPayloadMethod.RequestUserInfoWithUI,e?[e]:[]);return this.request(t)}showSettings(e){let{showUI:t=!0}=e||{},s=h(this.sdk.testMode?l.MagicPayloadMethod.UserSettingsTestMode:l.MagicPayloadMethod.UserSettings,[e]),n=this.request(s);return!t&&n&&(n.on(l.RecoveryFactorEventEmit.SendNewPhoneNumber,o=>{this.createIntermediaryEvent(l.RecoveryFactorEventEmit.SendNewPhoneNumber,s.id)(o)}),n.on(l.RecoveryFactorEventEmit.SendOtpCode,o=>{this.createIntermediaryEvent(l.RecoveryFactorEventEmit.SendOtpCode,s.id)(o)}),n.on(l.RecoveryFactorEventEmit.StartEditPhoneNumber,()=>{this.createIntermediaryEvent(l.RecoveryFactorEventEmit.StartEditPhoneNumber,s.id)()}),n.on(l.RecoveryFactorEventEmit.Cancel,()=>{this.createIntermediaryEvent(l.RecoveryFactorEventEmit.Cancel,s.id)()}),n.on(l.RecencyCheckEventEmit.VerifyEmailOtp,o=>{this.createIntermediaryEvent(l.RecencyCheckEventEmit.VerifyEmailOtp,s.id)(o)})),n}recoverAccount(e){let{email:t,showUI:s}=e,n=h(this.sdk.testMode?l.MagicPayloadMethod.RecoverAccountTestMode:l.MagicPayloadMethod.RecoverAccount,[{email:t,showUI:s}]),o=this.request(n);return!s&&o&&(o.on(l.RecoverAccountEventEmit.Cancel,()=>{this.createIntermediaryEvent(l.RecoverAccountEventEmit.Cancel,n.id)()}),o.on(l.RecoverAccountEventEmit.ResendSms,()=>{this.createIntermediaryEvent(l.RecoverAccountEventEmit.ResendSms,n.id)()}),o.on(l.RecoverAccountEventEmit.VerifyOtp,i=>{this.createIntermediaryEvent(l.RecoverAccountEventEmit.VerifyOtp,n.id)(i)}),o.on(l.RecoverAccountEventEmit.UpdateEmail,i=>{this.createIntermediaryEvent(l.RecoverAccountEventEmit.UpdateEmail,n.id)(i)}),o.on(l.UpdateEmailEventEmit.Cancel,()=>{this.createIntermediaryEvent(l.UpdateEmailEventEmit.Cancel,n.id)()}),o.on(l.UpdateEmailEventEmit.RetryWithNewEmail,i=>{this.createIntermediaryEvent(l.UpdateEmailEventEmit.RetryWithNewEmail,n.id)(i)}),o.on(l.UpdateEmailEventEmit.VerifyEmailOtp,i=>{this.createIntermediaryEvent(l.UpdateEmailEventEmit.VerifyEmailOtp,n.id)(i)})),o}revealPrivateKey(){let e=h(l.MagicPayloadMethod.RevealPK);return this.request(e)}onUserLoggedOut(e){this.userLoggedOutCallbacks.push(e)}enableMFA(e){let{showUI:t=!0}=e,s=h(l.MagicPayloadMethod.EnableMFA,[{showUI:t}]),n=this.request(s);return!t&&n&&(n.on(l.EnableMFAEventEmit.VerifyMFACode,o=>{this.createIntermediaryEvent(l.EnableMFAEventEmit.VerifyMFACode,s.id)(o)}),n.on(l.EnableMFAEventEmit.Cancel,()=>{this.createIntermediaryEvent(l.EnableMFAEventEmit.Cancel,s.id)()})),n}disableMFA(e){let{showUI:t=!0}=e,s=h(l.MagicPayloadMethod.DisableMFA,[{showUI:t}]),n=this.request(s);return!t&&n&&(n.on(l.DisableMFAEventEmit.VerifyMFACode,o=>{this.createIntermediaryEvent(l.DisableMFAEventEmit.VerifyMFACode,s.id)(o)}),n.on(l.DisableMFAEventEmit.LostDevice,o=>{this.createIntermediaryEvent(l.DisableMFAEventEmit.LostDevice,s.id)(o)}),n.on(l.DisableMFAEventEmit.Cancel,()=>{this.createIntermediaryEvent(l.DisableMFAEventEmit.Cancel,s.id)()})),n}emitUserLoggedOut(e){this.userLoggedOutCallbacks.forEach(t=>{t(e)})}localForageIsLoggedInKey="magic_auth_is_logged_in";userLoggedOutCallbacks=[]};var k=require("@magic-sdk/types");var be=class extends y{connectWithUI(e){let t=I(async(s,n)=>{try{let o=h(k.MagicPayloadMethod.Login,[{enabledWallets:this.sdk.thirdPartyWallets.enabledWallets,...e}]),i=this.request(o);this.sdk.thirdPartyWallets.eventListeners.forEach(({event:c,callback:u})=>{i.on(c,()=>u(o.id))}),i.on("id-token-created",c=>{t.emit("id-token-created",c)});let a=await i;a.error&&n(a),s(a)}catch(o){n(o)}});return t}showUI(e){return this.request(h(k.MagicPayloadMethod.ShowUI,[e]))}showAddress(){return this.request(h(k.MagicPayloadMethod.ShowAddress))}showSendTokensUI(){return this.request(h(k.MagicPayloadMethod.ShowSendTokensUI))}showOnRamp(){return this.request(h(k.MagicPayloadMethod.ShowOnRamp))}showNFTs(){return this.request(h(k.MagicPayloadMethod.ShowNFTs))}showBalances(){return this.request(h(k.MagicPayloadMethod.ShowBalances))}sendGaslessTransaction(e,t){return this.request(h(k.MagicPayloadMethod.SendGaslessTransaction,[e,t]))}};var M=require("@magic-sdk/types");var Pe=class extends y{eventListeners=[];enabledWallets={};isConnected=!1;resetThirdPartyWalletState(){localStorage.removeItem(M.LocalStorageKeys.PROVIDER),localStorage.removeItem(M.LocalStorageKeys.ADDRESS),localStorage.removeItem(M.LocalStorageKeys.CHAIN_ID),this.isConnected=!1}requestOverride(e){if(e.method===M.MagicPayloadMethod.Login)return this.resetThirdPartyWalletState(),super.request(e);if(e.method===M.MagicPayloadMethod.GetInfo)return this.getInfo(e);if(e.method===M.MagicPayloadMethod.IsLoggedIn)return this.isLoggedIn(e);if(e.method===M.MagicPayloadMethod.Logout)return this.logout(e);switch(localStorage.getItem(M.LocalStorageKeys.PROVIDER)){case"web3modal":return this.web3modalRequest(e);default:return this.resetThirdPartyWalletState(),super.request(e)}}isLoggedIn(e){switch(localStorage.getItem(M.LocalStorageKeys.PROVIDER)){case"web3modal":return this.web3modalIsLoggedIn();default:return this.resetThirdPartyWalletState(),super.request(e)}}getInfo(e){switch(localStorage.getItem(M.LocalStorageKeys.PROVIDER)){case"web3modal":return this.web3modalGetInfo();default:return this.resetThirdPartyWalletState(),super.request(e)}}logout(e){let t=localStorage.getItem(M.LocalStorageKeys.PROVIDER);switch(this.resetThirdPartyWalletState(),t){case"web3modal":return this.web3modalLogout();default:return super.request(e)}}web3modalRequest(e){return I((t,s)=>{this.sdk.web3modal.modal.getWalletProvider().request(e).then(t).catch(s)})}web3modalIsLoggedIn(){return I(e=>{let t=this.sdk.web3modal.modal.getStatus();if(t==="connected"&&e(!0),t==="disconnected"&&(this.resetThirdPartyWalletState(),e(!1)),t==="reconnecting"){let s=this.sdk.web3modal.modal.subscribeProvider(({status:n})=>{n==="connected"&&(s(),e(!0)),n==="disconnected"&&(s(),this.resetThirdPartyWalletState(),e(!1))})}})}formatWeb3modalGetInfoResponse(){let e=this.sdk.web3modal.modal.getWalletInfo()?.name,t=this.sdk.web3modal.modal.getAddress();return{publicAddress:t,email:null,issuer:`did:ethr:${t}`,phoneNumber:null,isMfaEnabled:!1,recoveryFactors:[],walletType:e||"web3modal",firstLoginAt:null}}web3modalGetInfo(){return I((e,t)=>{let s=this.sdk.web3modal.modal.getStatus();if(s==="connected"&&e(this.formatWeb3modalGetInfoResponse()),s==="disconnected"&&(this.resetThirdPartyWalletState(),t("Magic RPC Error: [-32603] Internal error: User denied account access.")),s==="reconnecting"){let n=this.sdk.web3modal.modal.subscribeProvider(({status:o})=>{o==="connected"&&(n(),e(this.formatWeb3modalGetInfoResponse())),o==="disconnected"&&(n(),this.resetThirdPartyWalletState(),t("Magic RPC Error: [-32603] Internal error: User denied account access."))})}})}web3modalLogout(){return I(async e=>{try{await this.sdk.web3modal.modal.disconnect()}catch(t){console.error(t)}e(!0)})}};var oe=require("@magic-sdk/types");var{createBoundEmitterMethod:we,createChainingEmitterMethod:B}=se(),Se=class extends y{isMagic=!0;sendAsync(e,t){if(!t)throw We({procedure:"Magic.rpcProvider.sendAsync",argument:1,expected:"function",received:t===null?"null":typeof t});if(Array.isArray(e))this.overlay.post(oe.MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,e.map(s=>{let n=W(s);return this.prefixPayloadMethodForTestMode(n),n})).then(s=>{t(null,s.map(n=>({...n.payload,error:n.hasError?new q(n.payload.error):null})))});else{let s=W(e);this.prefixPayloadMethodForTestMode(s),this.overlay.post(oe.MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,s).then(n=>{t(n.hasError?new q(n.payload.error):null,n.payload)})}}send(e,t){if(typeof e=="string"){let n=h(e,Array.isArray(t)?t:[]);return this.request(n)}if(Array.isArray(e)||t){this.sendAsync(e,t);return}let s=Je();return s.log(),new V(e).applyError({code:-32603,message:s.rawMessage}).payload}enable(){let e=h(oe.MagicPayloadMethod.Login);return this.request(e)}request(e){return this.prefixPayloadMethodForTestMode(e),super.request(e)}prefixPayloadMethodForTestMode(e){let t="testMode/eth/";this.sdk.testMode&&(e.method=`${t}${e.method}`)}on=B("on",this);once=B("once",this);addListener=B("addListener",this);off=B("off",this);removeListener=B("removeListener",this);removeAllListeners=B("removeAllListeners",this);emit=we("emit");eventNames=we("eventNames");listeners=we("listeners");listenerCount=we("listenerCount")};var D=require("@magic-sdk/types");var xe=class extends y{purchase(e){let t=h(D.MagicPayloadMethod.NFTPurchase,[e]);return this.request(t)}checkout(e){let t=this.sdk.thirdPartyWallets.isConnected,s=h(D.MagicPayloadMethod.NFTCheckout,[{...e,walletProvider:t?"web3modal":"magic"}]),n=this.request(s);return t&&(n.on(D.NftCheckoutIntermediaryEvents.Initiated,async o=>{try{let i=await this.request({method:"eth_sendTransaction",params:[o]});this.createIntermediaryEvent(D.NftCheckoutIntermediaryEvents.Success,s.id)(i)}catch{this.createIntermediaryEvent(D.NftCheckoutIntermediaryEvents.Failure,s.id)()}}),n.on(D.NftCheckoutIntermediaryEvents.Disconnect,()=>{this.sdk.thirdPartyWallets.resetThirdPartyWalletState(),n.emit("disconnect")})),n}transfer(e){let t=h(D.MagicPayloadMethod.NFTTransfer,[e]);return this.request(t)}};function Ot(r){return r.compat&&r.compat[E.sdkName]!=null?typeof r.compat[E.sdkName]=="string"?ft(gt(E.version),r.compat[E.sdkName]):!!r.compat[E.sdkName]:!0}function cn(r,e,t){return!e&&!t?`${r}_eth_mainnet`:t?`${r}_${JSON.stringify(t)}`:e?typeof e=="string"?`${r}_eth_${e}`:`${r}_${e.rpcUrl}_${e.chainId}_${e.chainType}`:`${r}_unknown`}function ln(r){let e=r?.extensions??[],t={},s=[];if(Array.isArray(e)?e.forEach(n=>{Ot(n)?(n.init(this),n.name&&(this[n.name]=n),G(n.config)||(t[n.name]=n.config)):s.push(n)}):Object.keys(e).forEach(n=>{if(Ot(e[n])){e[n].init(this);let o=e[n];this[n]=o,G(o.config)||(t[e[n].name]=o.config)}else s.push(e[n])}),s.length)throw Fe(s);return t}var Me=class r{constructor(e,t){this.apiKey=e;if(!e)throw ke();E.platform==="react-native"&&t?.endpoint&&Ge().log();let{defaultEndpoint:s,version:n}=E;this.testMode=!!t?.testMode,this.useStorageCache=!!t?.useStorageCache,this.endpoint=Te(t?.endpoint??s).origin,this.auth=new Re(this),this.user=new Ie(this),this.wallet=new be(this),this.nft=new xe(this),this.thirdPartyWallets=new Pe(this),this.rpcProvider=new Se(this);let o=ln.call(this,t);this.parameters=Z({API_KEY:this.apiKey,DOMAIN_ORIGIN:window.location?window.location.origin:"",ETH_NETWORK:t?.network,host:Te(this.endpoint).host,sdk:Rt[E.sdkName],version:n,ext:G(o)?void 0:o,locale:t?.locale||"en_US",authConfig:t?.authConfig?{...t.authConfig}:void 0,...E.bundleId?{bundleId:E.bundleId}:{},meta:t?.meta}),this.networkHash=cn(this.apiKey,t?.network,G(o)?void 0:o),t?.deferPreload||this.preload()}static __overlays__=new Map;endpoint;parameters;networkHash;testMode;useStorageCache;auth;user;wallet;nft;thirdPartyWallets;rpcProvider;get overlay(){if(!r.__overlays__.has(this.parameters)){let e=new E.ViewController(this.endpoint,this.parameters,this.networkHash);e.init(),r.__overlays__.set(this.parameters,e)}return r.__overlays__.get(this.parameters)}async preload(){await this.overlay.waitForReady()}};var A=require("@magic-sdk/types");function dn(r,e){return e&&Array.isArray(r)?r.find(t=>t.id===e):r}function _t(r,e){let t=e.data.response?.id,s=dn(r,t);if(t&&s){let n=new V(s).applyResult(e.data.response.result).applyError(e.data.response.error);return{id:t,response:n}}return{}}async function kt(r,e,t){let s=await v("rt"),n;if(E.platform==="web")try{n=await v("jwt")??await He()}catch(a){console.error("webcrypto error",a)}let o={msgType:r,payload:e};n&&(o.jwt=n),n&&s&&(o.rt=s);let i=await Lt(t);return i&&(o.deviceShare=i),o}async function Dt(r){r.data.rt&&await C("rt",r.data.rt)}function qt(r,e){let t=null;return function(...s){t&&clearTimeout(t),t=setTimeout(()=>{r(...s)},e)}}var un=1e3,Ft=60*un,Ut=5*Ft,pn=60*Ft,Ce=class{constructor(e,t,s){this.endpoint=e;this.parameters=t;this.networkHash=s;this.listen()}isReadyForRequest=!1;messageHandlers=new Set;isConnectedToInternet=!0;lastPongTime=null;heartbeatIntervalTimer=null;heartbeatDebounce=qt(()=>{this.endpoint==="https://auth.magic.link/"&&this.heartBeatCheck()},pn);async post(e,t){return ye(async(s,n)=>{if(!this.isConnectedToInternet){let d=De();n(d)}await this.checkRelayerExistsInDOM()||(this.isReadyForRequest=!1,await this.reloadRelayer()),this.isReadyForRequest||await this.waitForReady();let o=[],i=Array.isArray(t)?t.map(d=>d.id):[],a=await kt(`${e}-${this.parameters}`,t,this.networkHash);await this._post(a);let c=d=>m=>{let{id:w,response:S}=_t(t,m);if(Dt(m),S?.payload.error?.message==="User denied account access.")ve();else if(m.data.deviceShare){let{deviceShare:Jt}=m.data;$t(Jt,this.networkHash)}w&&S&&Array.isArray(t)&&i.includes(w)?(o.push(S),o.length===t.length&&(d(),s(o))):w&&S&&!Array.isArray(t)&&w===t.id&&(d(),s(S))},u=this.on(A.MagicIncomingWindowMessage.MAGIC_HANDLE_RESPONSE,c(()=>u()))})}on(e,t){let s=t.bind(window),n=o=>{o.data.msgType===`${e}-${this.parameters}`&&s(o)};return this.messageHandlers.add(n),()=>this.messageHandlers.delete(n)}waitForReady(){return new Promise(e=>{let t=this.on(A.MagicIncomingWindowMessage.MAGIC_OVERLAY_READY,()=>{this.isReadyForRequest=!0,e(),t()})})}listen(){this.on(A.MagicIncomingWindowMessage.MAGIC_HIDE_OVERLAY,()=>{this.hideOverlay()}),this.on(A.MagicIncomingWindowMessage.MAGIC_SHOW_OVERLAY,()=>{this.showOverlay()}),this.on(A.MagicIncomingWindowMessage.MAGIC_SEND_PRODUCT_ANNOUNCEMENT,e=>{e.data.response.result.product_announcement&&new O(A.SDKWarningCode.ProductAnnouncement,e.data.response.result.product_announcement).log()})}heartBeatCheck(){let e=!0,t=async()=>{let s={msgType:`${A.MagicOutgoingWindowMessage.MAGIC_PING}-${this.parameters}`,payload:[]};await this._post(s)};this.heartbeatIntervalTimer=setInterval(async()=>{if(this.lastPongTime){if(Date.now()-this.lastPongTime>Ut*2){this.reloadRelayer(),e=!0;return}}else if(!e){this.reloadRelayer(),e=!0;return}await t(),e=!1},Ut)}stopHeartBeat(){this.heartbeatDebounce(),this.lastPongTime=null,this.heartbeatIntervalTimer&&(clearInterval(this.heartbeatIntervalTimer),this.heartbeatIntervalTimer=null)}};var Wt=["request","overlay","sdk"];function mn(r){let e=Object.getPrototypeOf(r),t=[e];for(;e!==y.prototype;)e=Object.getPrototypeOf(e),t.push(e);return t}var rt=class extends y{compat;__sdk_access_field_descriptors__=new Map;__is_initialized__=!1;utils={createPromiEvent:I,isPromiEvent:ze,encodeJSON:Z,decodeJSON:Le,createJsonRpcRequestPayload:h,standardizeJsonRpcRequestPayload:W,storage:te};constructor(){super(void 0);let e=[this,...mn(this)];Wt.forEach(t=>{let s=e.map(a=>Object.getOwnPropertyDescriptor(a,t)),n=s.findIndex(a=>!!a),o=n>0,i=s[n];i&&(this.__sdk_access_field_descriptors__.set(t,{descriptor:i,isPrototypeField:o}),Object.defineProperty(this,t,{configurable:!0,get:()=>{throw Ue(t)}}))})}init(e){this.__is_initialized__||(Wt.forEach(t=>{if(this.__sdk_access_field_descriptors__.has(t)){let{descriptor:s,isPrototypeField:n}=this.__sdk_access_field_descriptors__.get(t);n?delete this[t]:Object.defineProperty(this,t,s)}}),this.sdk=e,this.__is_initialized__=!0)}createDeprecationWarning(e){let{method:t,removalVersion:s,useInstead:n}=e,o=n?` Use \`${n}\` instead.`:"",i=`\`${t}\` will be removed from this Extension in version \`${s}\`.${o}`;return new K(this,"DEPRECATION_NOTICE",i)}createWarning(e,t){return new K(this,e,t)}createError(e,t,s){return new ee(this,e,t,s)}},nt=class extends rt{},Ne=class{static Internal=nt};
2447
6
  //# sourceMappingURL=index.js.map