@magic-sdk/provider 29.0.6-canary.872.14229698017.0 → 29.0.6-canary.873.14250540163.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +2 -2
- package/dist/es/index.js +3 -3
- package/dist/es/index.js.map +2 -2
- package/dist/es/index.mjs +3 -3
- package/dist/es/index.mjs.map +2 -2
- package/package.json +2 -2
package/dist/cjs/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../node_modules/eventemitter3/index.js", "../../src/index.ts", "../../src/util/semver.js", "../../src/util/base64-json.ts", "../../src/core/sdk-exceptions.ts", "../../src/util/type-guards.ts", "../../src/core/sdk-environment.ts", "../../src/modules/auth.ts", "../../src/modules/base-module.ts", "../../src/util/get-payload-id.ts", "../../src/core/json-rpc.ts", "../../src/util/promise-tools.ts", "../../src/util/events.ts", "../../src/util/version-check.ts", "../../src/modules/user.ts", "../../src/util/storage.ts", "../../src/util/uuid.ts", "../../src/util/web-crypto.ts", "../../src/util/device-share-web-crypto.ts", "../../src/util/url.ts", "../../src/modules/wallet.ts", "../../src/modules/third-party-wallets.ts", "../../src/modules/rpc-provider.ts", "../../src/modules/base-extension.ts", "../../src/modules/nft.ts", "../../src/core/sdk.ts", "../../src/core/view-controller.ts", "../../src/util/view-controller-utils.ts"],
|
|
4
|
-
"sourcesContent": ["'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n", "/* istanbul ignore file */\n\nexport { SDKBase } from './core/sdk';\nexport type { MagicSDKAdditionalConfiguration, MagicSDKExtensionsOption } from './core/sdk';\nexport { createSDK } from './core/sdk-environment';\nexport { ViewController } from './core/view-controller';\nexport * from './core/sdk-exceptions';\nexport { Extension } from './modules/base-extension';\nexport type { WithExtensions, InstanceWithExtensions } from './modules/base-extension';\nexport * from './util';\n", "/* eslint-disable */\n/* istanbul ignore file */\n\n// DO NOT CHANGE THIS FILE.\n//\n// We have to bundle `semver` ourselves due to a long-standing cyclic dependency\n// which causes Rollup to break the `satisfies` function.\n//\n// See:\n// - https://github.com/magiclabs/magic-js/issues/198\n// - https://github.com/rollup/plugins/issues/879\n// - https://github.com/npm/node-semver/issues/318\n// - https://github.com/npm/node-semver/issues/381\n\nfunction createCommonjsModule(e){const r={exports:{}};return e(r,r.exports),r.exports}const SEMVER_SPEC_VERSION=\"2.0.0\",MAX_LENGTH$2=256,MAX_SAFE_INTEGER$1=Number.MAX_SAFE_INTEGER||9007199254740991,MAX_SAFE_COMPONENT_LENGTH=16,constants={SEMVER_SPEC_VERSION:\"2.0.0\",MAX_LENGTH:256,MAX_SAFE_INTEGER:MAX_SAFE_INTEGER$1,MAX_SAFE_COMPONENT_LENGTH:16},debug=\"object\"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error(\"SEMVER\",...e):()=>{},debug_1=debug,re_1=createCommonjsModule(function(e,r){const{MAX_SAFE_COMPONENT_LENGTH:t}=constants,s=(r=e.exports={}).re=[],i=r.src=[],o=r.t={};let a=0;const n=(e,r,t)=>{const n=a++;debug_1(n,r),o[e]=n,i[n]=r,s[n]=new RegExp(r,t?\"g\":void 0)};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,${t}})`+`(?:\\\\.(\\\\d{1,${t}}))?`+`(?:\\\\.(\\\\d{1,${t}}))?`+\"(?:$|[^\\\\d])\"),n(\"COERCERTL\",i[o.COERCE],!0),n(\"LONETILDE\",\"(?:~>?)\"),n(\"TILDETRIM\",`(\\\\s*)${i[o.LONETILDE]}\\\\s+`,!0),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+`,!0),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]})`,!0),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*$\")}),numeric=/^[0-9]+$/,compareIdentifiers$1=(e,r)=>{const t=numeric.test(e),s=numeric.test(r);return t&&s&&(e=+e,r=+r),e===r?0:t&&!s?-1:s&&!t?1:e<r?-1:1},rcompareIdentifiers=(e,r)=>compareIdentifiers$1(r,e),identifiers={compareIdentifiers:compareIdentifiers$1,rcompareIdentifiers:rcompareIdentifiers},{MAX_LENGTH:MAX_LENGTH$1,MAX_SAFE_INTEGER:MAX_SAFE_INTEGER}=constants,{re:re$4,t:t$4}=re_1,{compareIdentifiers:compareIdentifiers}=identifiers;class SemVer{constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof SemVer){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(\"string\"!=typeof e)throw new TypeError(`Invalid Version: ${e}`);if(e.length>MAX_LENGTH$1)throw new TypeError(`version is longer than ${MAX_LENGTH$1} characters`);debug_1(\"SemVer\",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;const t=e.trim().match(r.loose?re$4[t$4.LOOSE]:re$4[t$4.FULL]);if(!t)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+t[1],this.minor=+t[2],this.patch=+t[3],this.major>MAX_SAFE_INTEGER||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>MAX_SAFE_INTEGER||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>MAX_SAFE_INTEGER||this.patch<0)throw new TypeError(\"Invalid patch version\");t[4]?this.prerelease=t[4].split(\".\").map(e=>{if(/^[0-9]+$/.test(e)){const r=+e;if(r>=0&&r<MAX_SAFE_INTEGER)return r}return e}):this.prerelease=[],this.build=t[5]?t[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(debug_1(\"SemVer.compare\",this.version,this.options,e),!(e instanceof SemVer)){if(\"string\"==typeof e&&e===this.version)return 0;e=new SemVer(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){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)}comparePre(e){if(e instanceof SemVer||(e=new SemVer(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 r=0;do{const t=this.prerelease[r],s=e.prerelease[r];if(debug_1(\"prerelease compare\",r,t,s),void 0===t&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===t)return-1;if(t!==s)return compareIdentifiers(t,s)}while(++r)}compareBuild(e){e instanceof SemVer||(e=new SemVer(e,this.options));let r=0;do{const t=this.build[r],s=e.build[r];if(debug_1(\"prerelease compare\",r,t,s),void 0===t&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===t)return-1;if(t!==s)return compareIdentifiers(t,s)}while(++r)}inc(e,r){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",r);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",r);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",r),this.inc(\"pre\",r);break;case\"prerelease\":0===this.prerelease.length&&this.inc(\"patch\",r),this.inc(\"pre\",r);break;case\"major\":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case\"pre\":if(0===this.prerelease.length)this.prerelease=[0];else{let e=this.prerelease.length;for(;--e>=0;)\"number\"==typeof this.prerelease[e]&&(this.prerelease[e]++,e=-2);-1===e&&this.prerelease.push(0)}r&&(this.prerelease[0]===r?isNaN(this.prerelease[1])&&(this.prerelease=[r,0]):this.prerelease=[r,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}}const compare=(e,r,t)=>new SemVer(e,t).compare(new SemVer(r,t)),compare_1=compare,eq=(e,r,t)=>0===compare_1(e,r,t),eq_1=eq,neq=(e,r,t)=>0!==compare_1(e,r,t),neq_1=neq,gt=(e,r,t)=>compare_1(e,r,t)>0,gt_1=gt,gte=(e,r,t)=>compare_1(e,r,t)>=0,gte_1=gte,lt=(e,r,t)=>compare_1(e,r,t)<0,lt_1=lt,lte=(e,r,t)=>compare_1(e,r,t)<=0,lte_1=lte,cmp=(e,r,t,s)=>{switch(r){case\"===\":return\"object\"==typeof e&&(e=e.version),\"object\"==typeof t&&(t=t.version),e===t;case\"!==\":return\"object\"==typeof e&&(e=e.version),\"object\"==typeof t&&(t=t.version),e!==t;case\"\":case\"=\":case\"==\":return eq_1(e,t,s);case\"!=\":return neq_1(e,t,s);case\">\":return gt_1(e,t,s);case\">=\":return gte_1(e,t,s);case\"<\":return lt_1(e,t,s);case\"<=\":return lte_1(e,t,s);default:throw new TypeError(`Invalid operator: ${r}`)}},cmp_1=cmp,ANY=Symbol(\"SemVer ANY\");class Comparator{static get ANY(){return ANY}constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof Comparator){if(e.loose===!!r.loose)return e;e=e.value}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)}parse(e){const r=this.options.loose?re$3[t$3.COMPARATORLOOSE]:re$3[t$3.COMPARATOR],t=e.match(r);if(!t)throw new TypeError(`Invalid comparator: ${e}`);this.operator=void 0!==t[1]?t[1]:\"\",\"=\"===this.operator&&(this.operator=\"\"),t[2]?this.semver=new SemVer(t[2],this.options.loose):this.semver=ANY}toString(){return this.value}test(e){if(debug_1(\"Comparator.test\",e,this.options.loose),this.semver===ANY||e===ANY)return!0;if(\"string\"==typeof e)try{e=new SemVer(e,this.options)}catch(e){return!1}return cmp_1(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Comparator))throw new TypeError(\"a Comparator is required\");if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),\"\"===this.operator)return\"\"===this.value||new Range(e.value,r).test(this.value);if(\"\"===e.operator)return\"\"===e.value||new Range(this.value,r).test(e.semver);const t=!(\">=\"!==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);return t||s||i&&o||a||n}}const{re:re$3,t:t$3}=re_1;class Range{constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof Range)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new Range(e.raw,r);if(e instanceof Comparator)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(e=>this.parseRange(e.trim())).filter(e=>e.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){const{loose:r}=this.options;e=e.trim();const t=r?re$2[t$2.HYPHENRANGELOOSE]:re$2[t$2.HYPHENRANGE];e=e.replace(t,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(\" \");const s=r?re$2[t$2.COMPARATORLOOSE]:re$2[t$2.COMPARATOR];return e.split(\" \").map(e=>parseComparator(e,this.options)).join(\" \").split(/\\s+/).map(e=>replaceGTE0(e,this.options)).filter(this.options.loose?e=>!!e.match(s):()=>!0).map(e=>new Comparator(e,this.options))}intersects(e,r){if(!(e instanceof Range))throw new TypeError(\"a Range is required\");return this.set.some(t=>isSatisfiable(t,r)&&e.set.some(e=>isSatisfiable(e,r)&&t.every(t=>e.every(e=>t.intersects(e,r)))))}test(e){if(!e)return!1;if(\"string\"==typeof e)try{e=new SemVer(e,this.options)}catch(e){return!1}for(let r=0;r<this.set.length;r++)if(testSet(this.set[r],e,this.options))return!0;return!1}}const{re:re$2,t:t$2,comparatorTrimReplace:comparatorTrimReplace,tildeTrimReplace:tildeTrimReplace,caretTrimReplace:caretTrimReplace}=re_1,isSatisfiable=(e,r)=>{let t=!0;const s=e.slice();let i=s.pop();for(;t&&s.length;)t=s.every(e=>i.intersects(e,r)),i=s.pop();return t},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),isX=e=>!e||\"x\"===e.toLowerCase()||\"*\"===e,replaceTildes=(e,r)=>e.trim().split(/\\s+/).map(e=>replaceTilde(e,r)).join(\" \"),replaceTilde=(e,r)=>{const t=r.loose?re$2[t$2.TILDELOOSE]:re$2[t$2.TILDE];return e.replace(t,(r,t,s,i,o)=>{let a;return debug_1(\"tilde\",e,r,t,s,i,o),isX(t)?a=\"\":isX(s)?a=`>=${t}.0.0 <${+t+1}.0.0-0`:isX(i)?a=`>=${t}.${s}.0 <${t}.${+s+1}.0-0`:o?(debug_1(\"replaceTilde pr\",o),a=`>=${t}.${s}.${i}-${o} <${t}.${+s+1}.0-0`):a=`>=${t}.${s}.${i} <${t}.${+s+1}.0-0`,debug_1(\"tilde return\",a),a})},replaceCarets=(e,r)=>e.trim().split(/\\s+/).map(e=>replaceCaret(e,r)).join(\" \"),replaceCaret=(e,r)=>{debug_1(\"caret\",e,r);const t=r.loose?re$2[t$2.CARETLOOSE]:re$2[t$2.CARET],s=r.includePrerelease?\"-0\":\"\";return e.replace(t,(r,t,i,o,a)=>{let n;return debug_1(\"caret\",e,r,t,i,o,a),isX(t)?n=\"\":isX(i)?n=`>=${t}.0.0${s} <${+t+1}.0.0-0`:isX(o)?n=\"0\"===t?`>=${t}.${i}.0${s} <${t}.${+i+1}.0-0`:`>=${t}.${i}.0${s} <${+t+1}.0.0-0`:a?(debug_1(\"replaceCaret pr\",a),n=\"0\"===t?\"0\"===i?`>=${t}.${i}.${o}-${a} <${t}.${i}.${+o+1}-0`:`>=${t}.${i}.${o}-${a} <${t}.${+i+1}.0-0`:`>=${t}.${i}.${o}-${a} <${+t+1}.0.0-0`):(debug_1(\"no pr\"),n=\"0\"===t?\"0\"===i?`>=${t}.${i}.${o}${s} <${t}.${i}.${+o+1}-0`:`>=${t}.${i}.${o}${s} <${t}.${+i+1}.0-0`:`>=${t}.${i}.${o} <${+t+1}.0.0-0`),debug_1(\"caret return\",n),n})},replaceXRanges=(e,r)=>(debug_1(\"replaceXRanges\",e,r),e.split(/\\s+/).map(e=>replaceXRange(e,r)).join(\" \")),replaceXRange=(e,r)=>{e=e.trim();const t=r.loose?re$2[t$2.XRANGELOOSE]:re$2[t$2.XRANGE];return e.replace(t,(t,s,i,o,a,n)=>{debug_1(\"xRange\",e,t,s,i,o,a,n);const E=isX(i),p=E||isX(o),l=p||isX(a),c=l;return\"=\"===s&&c&&(s=\"\"),n=r.includePrerelease?\"-0\":\"\",E?t=\">\"===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\"),t=`${s+i}.${o}.${a}${n}`):p?t=`>=${i}.0.0${n} <${+i+1}.0.0-0`:l&&(t=`>=${i}.${o}.0${n} <${i}.${+o+1}.0-0`),debug_1(\"xRange return\",t),t})},replaceStars=(e,r)=>(debug_1(\"replaceStars\",e,r),e.trim().replace(re$2[t$2.STAR],\"\")),replaceGTE0=(e,r)=>(debug_1(\"replaceGTE0\",e,r),e.trim().replace(re$2[r.includePrerelease?t$2.GTE0PRE:t$2.GTE0],\"\")),hyphenReplace=e=>(r,t,s,i,o,a,n,E,p,l,c,$,h)=>`${t=isX(s)?\"\":isX(i)?`>=${s}.0.0${e?\"-0\":\"\"}`:isX(o)?`>=${s}.${i}.0${e?\"-0\":\"\"}`:a?`>=${t}`:`>=${t}${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(),testSet=(e,r,t)=>{for(let t=0;t<e.length;t++)if(!e[t].test(r))return!1;if(r.prerelease.length&&!t.includePrerelease){for(let t=0;t<e.length;t++)if(debug_1(e[t].semver),e[t].semver!==Comparator.ANY&&e[t].semver.prerelease.length>0){const s=e[t].semver;if(s.major===r.major&&s.minor===r.minor&&s.patch===r.patch)return!0}return!1}return!0};export const satisfies=(e,r,t)=>{try{r=new Range(r,t)}catch(e){return!1}return r.test(e)};const satisfies_1=satisfies,{MAX_LENGTH:MAX_LENGTH}=constants,{re:re$1,t:t$1}=re_1,parse=(e,r)=>{if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof SemVer)return e;if(\"string\"!=typeof e)return null;if(e.length>MAX_LENGTH)return null;if(!(r.loose?re$1[t$1.LOOSE]:re$1[t$1.FULL]).test(e))return null;try{return new SemVer(e,r)}catch(e){return null}},parse_1=parse,{re:re,t:t}=re_1;export const coerce=(e,r)=>{if(e instanceof SemVer)return e;if(\"number\"==typeof e&&(e=String(e)),\"string\"!=typeof e)return null;let s=null;if((r=r||{}).rtl){let r;for(;(r=re[t.COERCERTL].exec(e))&&(!s||s.index+s[0].length!==e.length);)s&&r.index+r[0].length===s.index+s[0].length||(s=r),re[t.COERCERTL].lastIndex=r.index+r[1].length+r[2].length;re[t.COERCERTL].lastIndex=-1}else s=e.match(re[t.COERCE]);return null===s?null:parse_1(`${s[2]}.${s[3]||\"0\"}.${s[4]||\"0\"}`,r)};\n", "function percentToByte(p: string) {\n return String.fromCharCode(parseInt(p.slice(1), 16));\n}\n\nfunction byteToPercent(b: string) {\n return `%${`00${b.charCodeAt(0).toString(16)}`.slice(-2)}`;\n}\n\n/**\n * Encodes a Base64 string. Safe for UTF-8 characters.\n * Original source is from the `universal-base64` NPM package.\n *\n * @source https://github.com/blakeembrey/universal-base64/blob/master/src/browser.ts\n */\nfunction btoaUTF8(str: string): string {\n return btoa(encodeURIComponent(str).replace(/%[0-9A-F]{2}/g, percentToByte));\n}\n\n/**\n * Decodes a Base64 string. Safe for UTF-8 characters.\n * Original source is from the `universal-base64` NPM package.\n *\n * @source https://github.com/blakeembrey/universal-base64/blob/master/src/browser.ts\n */\nfunction atobUTF8(str: string): string {\n return decodeURIComponent(Array.from(atob(str), byteToPercent).join(''));\n}\n\n/**\n * Given a JSON-serializable object, encode as a Base64 string.\n */\nexport function encodeJSON<T>(options: T): string {\n return btoaUTF8(JSON.stringify(options));\n}\n\n/**\n * Given a Base64 JSON string, decode a JavaScript object.\n */\nexport function decodeJSON<T>(queryString: string): T {\n return JSON.parse(atobUTF8(queryString));\n}\n", "import { JsonRpcError, RPCErrorCode, SDKErrorCode, SDKWarningCode } from '@magic-sdk/types';\nimport { isJsonRpcErrorCode } from '../util/type-guards';\nimport { SDKEnvironment } from './sdk-environment';\nimport { BaseExtension } from '../modules/base-extension';\n\n// --- Error/warning classes\n\n/**\n * This error type represents internal SDK errors. This could be developer\n * mistakes (or Magic's mistakes), or execution errors unrelated to standard\n * JavaScript exceptions.\n */\nexport class MagicSDKError extends Error {\n __proto__ = Error;\n\n constructor(\n public code: SDKErrorCode,\n public rawMessage: string,\n ) {\n super(`Magic SDK Error: [${code}] ${rawMessage}`);\n Object.setPrototypeOf(this, MagicSDKError.prototype);\n }\n}\n\n/**\n * This error type communicates exceptions that occur during execution in the\n * Magic `<iframe>` context.\n */\nexport class MagicRPCError extends Error {\n __proto__ = Error;\n\n public code: RPCErrorCode | number;\n public rawMessage: string;\n public data: any;\n\n constructor(sourceError?: JsonRpcError | null) {\n super();\n\n const codeNormalized = Number(sourceError?.code);\n this.rawMessage = sourceError?.message || 'Internal error';\n this.code = isJsonRpcErrorCode(codeNormalized) ? codeNormalized : RPCErrorCode.InternalError;\n this.message = `Magic RPC Error: [${this.code}] ${this.rawMessage}`;\n this.data = sourceError?.data || undefined;\n\n Object.setPrototypeOf(this, MagicRPCError.prototype);\n }\n}\n\n/**\n * In contrast to `SDKError` objects, this \"warning\" type communicates important\n * context that does not rise to the level of an exception. These should be\n * logged rather than thrown.\n */\nexport class MagicSDKWarning {\n public message: string;\n\n constructor(\n public code: SDKWarningCode,\n public rawMessage: string,\n ) {\n this.message = `Magic SDK Warning: [${code}] ${rawMessage}`;\n }\n\n /**\n * Logs this warning to the console.\n */\n public log() {\n console.warn(this.message);\n }\n}\n\n/**\n * This error type is reserved for communicating errors that arise during\n * execution of Magic SDK Extension methods. Compare this to the `SDKError`\n * type, specifically in context of Extensions.\n */\nexport class MagicExtensionError<TData = any> extends Error {\n __proto__ = Error;\n\n constructor(\n ext: BaseExtension<string>,\n public code: string | number,\n public rawMessage: string,\n public data: TData,\n ) {\n super(`Magic Extension Error (${ext.name}): [${code}] ${rawMessage}`);\n Object.setPrototypeOf(this, MagicExtensionError.prototype);\n }\n}\n\n/**\n * In contrast to `MagicExtensionError` objects, this \"warning\" type\n * communicates important context that does not rise to the level of an\n * exception. These should be logged rather than thrown.\n */\nexport class MagicExtensionWarning {\n public message: string;\n\n constructor(\n ext: BaseExtension<string>,\n public code: string | number,\n public rawMessage: string,\n ) {\n this.message = `Magic Extension Warning (${ext.name}): [${code}] ${rawMessage}`;\n }\n\n /**\n * Logs this warning to the console.\n */\n public log() {\n console.warn(this.message);\n }\n}\n\n// --- SDK error factories\n\nexport function createMissingApiKeyError() {\n return new MagicSDKError(\n SDKErrorCode.MissingApiKey,\n 'Please provide an API key that you acquired from the Magic developer dashboard.',\n );\n}\n\nexport function createModalNotReadyError() {\n return new MagicSDKError(SDKErrorCode.ModalNotReady, 'Modal is not ready');\n}\n\nexport function createMalformedResponseError() {\n return new MagicSDKError(SDKErrorCode.MalformedResponse, 'Response from the Magic iframe is malformed.');\n}\n\nexport function createExtensionNotInitializedError(member: string) {\n return new MagicSDKError(\n SDKErrorCode.ExtensionNotInitialized,\n `Extensions must be initialized with a Magic SDK instance before \\`Extension.${member}\\` can be accessed. Do not invoke \\`Extension.${member}\\` inside an extension constructor.`,\n );\n}\n\nexport function createIncompatibleExtensionsError(extensions: BaseExtension<string>[]) {\n let msg = `Some extensions are incompatible with \\`${SDKEnvironment.sdkName}@${SDKEnvironment.version}\\`:`;\n\n extensions\n .filter(ext => typeof ext.compat !== 'undefined' && ext.compat !== null)\n .forEach(ext => {\n const compat = ext.compat![SDKEnvironment.sdkName];\n\n /* istanbul ignore else */\n if (typeof compat === 'string') {\n msg += `\\n - Extension \\`${ext.name}\\` supports version(s) \\`${compat}\\``;\n } else if (!compat) {\n msg += `\\n - Extension \\`${ext.name}\\` does not support ${SDKEnvironment.platform} environments.`;\n }\n\n // Else case is irrelevant here here\n // (we filter out extensions with missing `compat` field)\n });\n\n return new MagicSDKError(SDKErrorCode.IncompatibleExtensions, msg);\n}\n\nexport function createInvalidArgumentError(options: {\n procedure: string;\n argument: number;\n expected: string;\n received: string;\n}) {\n /**\n * Parses the argument index (given by `argument`) to attach the correct ordinal suffix.\n * (i.e.: 1st, 2nd, 3rd, 4th, etc.)\n */\n const ordinalSuffix = (i: number) => {\n const iAdjusted = i + 1; // Argument is zero-indexed.\n const j = iAdjusted % 10;\n const k = iAdjusted % 100;\n if (j === 1 && k !== 11) return `${iAdjusted}st`;\n if (j === 2 && k !== 12) return `${iAdjusted}nd`;\n if (j === 3 && k !== 13) return `${iAdjusted}rd`;\n return `${iAdjusted}th`;\n };\n\n return new MagicSDKError(\n SDKErrorCode.InvalidArgument,\n `Invalid ${ordinalSuffix(options.argument)} argument given to \\`${options.procedure}\\`.\\n` +\n ` Expected: \\`${options.expected}\\`\\n` +\n ` Received: \\`${options.received}\\``,\n );\n}\n\n// --- SDK warning factories\n\nexport function createDuplicateIframeWarning() {\n return new MagicSDKWarning(SDKWarningCode.DuplicateIframe, 'Duplicate iframes found.');\n}\n\nexport function createSynchronousWeb3MethodWarning() {\n return new MagicSDKWarning(\n SDKWarningCode.SyncWeb3Method,\n '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.',\n );\n}\n\nexport function createReactNativeEndpointConfigurationWarning() {\n return new MagicSDKWarning(\n SDKWarningCode.ReactNativeEndpointConfiguration,\n `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.`,\n );\n}\n\nexport function createDeprecationWarning(options: {\n method: string;\n removalVersions: {\n [P in\n | 'magic-sdk'\n | '@magic-sdk/react-native'\n | '@magic-sdk/react-native-bare'\n | '@magic-sdk/react-native-expo']: string;\n };\n useInstead?: string;\n}) {\n const { method, removalVersions, useInstead } = options;\n\n const removalVersion = removalVersions[SDKEnvironment.sdkName];\n const useInsteadSuffix = useInstead ? ` Use \\`${useInstead}\\` instead.` : '';\n const message = `\\`${method}\\` will be removed from \\`${SDKEnvironment.sdkName}\\` in version \\`${removalVersion}\\`.${useInsteadSuffix}`;\n\n return new MagicSDKWarning(SDKWarningCode.DeprecationNotice, message);\n}\n", "/**\n * This file contains our type guards.\n *\n * Type guards are a feature of TypeScript which narrow the type signature of\n * intesection types (types that can be one thing or another).\n *\n * @see\n * https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types\n */\n\nimport { JsonRpcRequestPayload, JsonRpcResponsePayload, MagicPayloadMethod, RPCErrorCode } from '@magic-sdk/types';\n\n/**\n * Assert `value` is `undefined`.\n */\nfunction isUndefined(value: any): value is undefined {\n return typeof value === 'undefined';\n}\n\n/**\n * Assert `value` is `null`.\n */\nfunction isNull(value: any): value is null {\n return value === null;\n}\n\n/**\n * Assert `value` is `null` or `undefined`.\n */\nfunction isNil(value: any): value is null | undefined {\n return isNull(value) || isUndefined(value);\n}\n\n/**\n * Assert `value` is a `JsonRpcRequestPayload` object.\n */\nexport function isJsonRpcRequestPayload(value?: JsonRpcRequestPayload): value is JsonRpcRequestPayload {\n if (isNil(value)) return false;\n return (\n !isUndefined(value.jsonrpc) && !isUndefined(value.id) && !isUndefined(value.method) && !isUndefined(value.params)\n );\n}\n\n/**\n * Assert `value` is a `JsonRpcResponsePayload` object.\n */\nexport function isJsonRpcResponsePayload(value: any): value is JsonRpcResponsePayload {\n if (isNil(value)) return false;\n return (\n !isUndefined(value.jsonrpc) && !isUndefined(value.id) && (!isUndefined(value.result) || !isUndefined(value.error))\n );\n}\n\n/**\n * Assert `value` is a Magic SDK payload method identifier.\n */\nexport function isMagicPayloadMethod(value?: any): value is MagicPayloadMethod {\n if (isNil(value)) return false;\n return typeof value === 'string' && Object.values(MagicPayloadMethod).includes(value as any);\n}\n\n/**\n * Assert `value` is an expected JSON RPC error code.\n */\nexport function isJsonRpcErrorCode(value?: any): value is RPCErrorCode {\n if (isNil(value)) return false;\n return typeof value === 'number' && Object.values(RPCErrorCode).includes(value);\n}\n\n/**\n * Assert `value` is an empty, plain object.\n */\nexport function isEmpty(value?: any): value is {} {\n if (!value) return true;\n\n for (const key in value) {\n /* istanbul ignore else */\n if (Object.hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n\n return true;\n}\n", "import type localForage from 'localforage';\nimport type { ViewController } from './view-controller';\nimport type { SDKBase } from './sdk';\nimport type { WithExtensions } from '../modules/base-extension';\n\ntype ConstructorOf<C> = { new (...args: any[]): C };\n\n/**\n * A structure containing details about the current environment.\n * This is guaranteed to be populated before the SDK is instantiated.\n */\nexport interface SDKEnvironment {\n sdkName: 'magic-sdk' | '@magic-sdk/react-native' | '@magic-sdk/react-native-bare' | '@magic-sdk/react-native-expo';\n version: string;\n platform: 'web' | 'react-native';\n defaultEndpoint: string;\n ViewController: ConstructorOf<ViewController>;\n configureStorage: () => Promise<typeof localForage>;\n bundleId?: string | null;\n}\n\nexport const SDKEnvironment: SDKEnvironment = {} as any;\n\nexport function createSDK<SDK extends SDKBase>(\n SDKBaseCtor: ConstructorOf<SDK>,\n environment: SDKEnvironment,\n): WithExtensions<SDK> {\n Object.assign(SDKEnvironment, environment);\n return SDKBaseCtor as any;\n}\n\nexport const sdkNameToEnvName = {\n 'magic-sdk': 'magic-sdk' as const,\n '@magic-sdk/react-native': 'magic-sdk-rn' as const,\n '@magic-sdk/react-native-bare': 'magic-sdk-rn-bare' as const,\n '@magic-sdk/react-native-expo': 'magic-sdk-rn-expo' as const,\n};\n", "import {\n MagicPayloadMethod,\n LoginWithMagicLinkConfiguration,\n LoginWithSmsConfiguration,\n LoginWithEmailOTPConfiguration,\n LoginWithEmailOTPEventHandlers,\n LoginWithMagicLinkEventHandlers,\n UpdateEmailConfiguration,\n DeviceVerificationEventEmit,\n LoginWithEmailOTPEventEmit,\n UpdateEmailEventHandlers,\n UpdateEmailEventEmit,\n RecencyCheckEventEmit,\n LoginWithSmsOTPEventEmit,\n LoginWithSmsOTPEventHandlers,\n LoginWithCredentialConfiguration,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { SDKEnvironment } from '../core/sdk-environment';\nimport { isMajorVersionAtLeast } from '../util/version-check';\nimport { createDeprecationWarning } from '../core/sdk-exceptions';\n\nexport const ProductConsolidationMethodRemovalVersions = {\n 'magic-sdk': 'v18.0.0',\n '@magic-sdk/react-native': 'v14.0.0',\n '@magic-sdk/react-native-bare': 'v19.0.0',\n '@magic-sdk/react-native-expo': 'v19.0.0',\n};\n\nexport class AuthModule extends BaseModule {\n /**\n * Initiate the \"magic link\" login flow for a user. If the flow is successful,\n * this method will return a Decentralized ID token (with a default lifespan\n * of 15 minutes).\n */\n public loginWithMagicLink(configuration: LoginWithMagicLinkConfiguration) {\n const isRNMobilePackage =\n SDKEnvironment.sdkName === '@magic-sdk/react-native' ||\n SDKEnvironment.sdkName === '@magic-sdk/react-native-bare' ||\n SDKEnvironment.sdkName === '@magic-sdk/react-native-expo';\n\n // RN SDK major version is greater than or equal to v19\n if (isRNMobilePackage && isMajorVersionAtLeast(SDKEnvironment.version, 19)) {\n throw new Error(\n 'loginWithMagicLink() is deprecated for this package, please utlize a passcode method like loginWithSMS or loginWithEmailOTP instead.',\n );\n } else if (isRNMobilePackage) {\n // RN SDK major version is less than v19\n createDeprecationWarning({\n method: 'auth.loginWithMagicLink()',\n removalVersions: ProductConsolidationMethodRemovalVersions,\n useInstead: 'auth.loginWithEmailOTP()',\n }).log();\n }\n\n const { email, showUI = true, redirectURI, overrides, lifespan } = configuration;\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithMagicLinkTestMode : MagicPayloadMethod.LoginWithMagicLink,\n [{ email, showUI, redirectURI, overrides, lifespan }],\n );\n return this.request<string | null, LoginWithMagicLinkEventHandlers>(requestPayload);\n }\n\n /**\n * Initiate an SMS login flow for a user. If successful,\n * this method will return a Decenteralized ID token (with a default lifespan\n * of 15 minutes)\n */\n public loginWithSMS(configuration: LoginWithSmsConfiguration) {\n const { phoneNumber, showUI = true, lifespan } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithSmsTestMode : MagicPayloadMethod.LoginWithSms,\n [{ phoneNumber, showUI, lifespan }],\n );\n\n const handle = this.request<string | null, LoginWithSmsOTPEventHandlers>(requestPayload);\n\n if (!showUI && handle) {\n handle.on(LoginWithSmsOTPEventEmit.VerifySmsOtp, (otp: string) => {\n this.createIntermediaryEvent(LoginWithSmsOTPEventEmit.VerifySmsOtp, requestPayload.id as string)(otp);\n });\n\n handle.on(LoginWithSmsOTPEventEmit.Cancel, () => {\n this.createIntermediaryEvent(LoginWithSmsOTPEventEmit.Cancel, requestPayload.id as string)();\n });\n }\n\n return handle;\n }\n\n /**\n * Initiate an Email with OTP login flow for a user. If successful,\n * this method will return a Decenteralized ID token (with a default lifespan\n * of 15 minutes)\n */\n public loginWithEmailOTP(configuration: LoginWithEmailOTPConfiguration) {\n const { email, showUI, deviceCheckUI, overrides, lifespan } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithEmailOTPTestMode : MagicPayloadMethod.LoginWithEmailOTP,\n [{ email, showUI, deviceCheckUI, overrides, lifespan }],\n );\n const handle = this.request<string | null, LoginWithEmailOTPEventHandlers>(requestPayload);\n if (!deviceCheckUI && handle) {\n handle.on(DeviceVerificationEventEmit.Retry, () => {\n this.createIntermediaryEvent(DeviceVerificationEventEmit.Retry, requestPayload.id as any)();\n });\n }\n if (!showUI && handle) {\n handle.on(LoginWithEmailOTPEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.VerifyEmailOtp, requestPayload.id as any)(otp);\n });\n handle.on(LoginWithEmailOTPEventEmit.VerifyMFACode, (mfa: string) => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.VerifyMFACode, requestPayload.id as string)(mfa);\n });\n handle.on(LoginWithEmailOTPEventEmit.LostDevice, () => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.LostDevice, requestPayload.id as string)();\n });\n handle.on(LoginWithEmailOTPEventEmit.VerifyRecoveryCode, (recoveryCode: string) => {\n this.createIntermediaryEvent(\n LoginWithEmailOTPEventEmit.VerifyRecoveryCode,\n requestPayload.id as string,\n )(recoveryCode);\n });\n handle.on(LoginWithEmailOTPEventEmit.Cancel, () => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.Cancel, requestPayload.id as any)();\n });\n }\n return handle;\n }\n\n /**\n * Log a user in with a special one-time-use credential token. This is\n * currently used during magic link flows with a configured redirect to\n * hydrate the user session at the end of the flow. If the flow is successful,\n * this method will return a Decentralized ID token (with a default lifespan\n * of 15 minutes).\n *\n * If no argument is provided, a credential is automatically parsed from\n * `window.location.search`.\n */\n public loginWithCredential(configuration?: LoginWithCredentialConfiguration) {\n const { credentialOrQueryString, lifespan } = configuration || {};\n let credentialResolved = credentialOrQueryString ?? '';\n\n if (!credentialOrQueryString && SDKEnvironment.platform === 'web') {\n credentialResolved = window.location.search;\n\n // Remove the query from the redirect callback as a precaution.\n const urlWithoutQuery = window.location.origin + window.location.pathname;\n window.history.replaceState(null, '', urlWithoutQuery);\n }\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithCredentialTestMode : MagicPayloadMethod.LoginWithCredential,\n [credentialResolved, lifespan],\n );\n\n return this.request<string | null>(requestPayload);\n }\n\n // Custom Auth\n public setAuthorizationToken(jwt: string) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.SetAuthorizationToken, [{ jwt }]);\n return this.request<boolean>(requestPayload);\n }\n\n public updateEmailWithUI(configuration: UpdateEmailConfiguration) {\n const { email, showUI = true } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.UpdateEmailTestMode : MagicPayloadMethod.UpdateEmail,\n [{ email, showUI }],\n );\n\n const handle = this.request<string | null, UpdateEmailEventHandlers>(requestPayload);\n\n if (!showUI) {\n handle.on(RecencyCheckEventEmit.Retry, () => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.Retry, requestPayload.id as any)();\n });\n handle.on(RecencyCheckEventEmit.Cancel, () => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.Cancel, requestPayload.id as any)();\n });\n handle.on(RecencyCheckEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyEmailOtp, requestPayload.id as string)(otp);\n });\n handle.on(RecencyCheckEventEmit.VerifyMFACode, (mfa: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyMFACode, requestPayload.id as string)(mfa);\n });\n handle.on(UpdateEmailEventEmit.RetryWithNewEmail, (newEmail?) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.RetryWithNewEmail, requestPayload.id as any)(newEmail);\n });\n handle.on(UpdateEmailEventEmit.Cancel, () => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.Cancel, requestPayload.id as any)();\n });\n handle.on(UpdateEmailEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.VerifyEmailOtp, requestPayload.id as any)(otp);\n });\n }\n return handle;\n }\n}\n", "import {\n JsonRpcRequestPayload,\n MagicOutgoingWindowMessage,\n MagicIncomingWindowMessage,\n MagicPayloadMethod,\n IntermediaryEvents,\n routeToMagicMethods,\n} from '@magic-sdk/types';\nimport { createMalformedResponseError, MagicRPCError } from '../core/sdk-exceptions';\nimport type { SDKBase } from '../core/sdk';\nimport { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createPromiEvent } from '../util/promise-tools';\nimport type { ViewController } from '../core/view-controller';\nimport type { EventsDefinition } from '../util/events';\n\nexport class BaseModule {\n constructor(protected sdk: SDKBase) {}\n\n /**\n * The `ViewController` for the SDK instance registered to this module.\n */\n protected get overlay(): ViewController {\n return (this.sdk as any).overlay;\n }\n\n /**\n * Emits promisified requests to the Magic `<iframe>` context.\n */\n protected request<ResultType = any, Events extends EventsDefinition = void>(payload: Partial<JsonRpcRequestPayload>) {\n if (this.sdk.thirdPartyWallets.isConnected && !routeToMagicMethods.includes(payload.method as MagicPayloadMethod)) {\n const promiEvent = createPromiEvent<ResultType, Events>((resolve, reject) => {\n this.sdk.thirdPartyWallets.requestOverride(payload).then(resolve).catch(reject);\n });\n return promiEvent;\n }\n\n const responsePromise = this.overlay.post<ResultType>(\n MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,\n standardizeJsonRpcRequestPayload(payload),\n );\n\n // PromiEvent-ify the response.\n const promiEvent = createPromiEvent<ResultType, Events>((resolve, reject) => {\n responsePromise\n .then(res => {\n cleanupEvents();\n if (res.hasError) reject(new MagicRPCError(res.payload.error));\n else if (res.hasResult) resolve(res.payload.result as ResultType);\n else throw createMalformedResponseError();\n })\n .catch(err => {\n cleanupEvents();\n reject(err);\n });\n });\n\n // Listen for events from the `<iframe>` associated with the current payload\n // and emit those to `PromiEvent` subscribers.\n const cleanupEvents = this.overlay.on(MagicIncomingWindowMessage.MAGIC_HANDLE_EVENT, evt => {\n const { response } = evt.data;\n\n if (response.id === payload.id && response.result?.event) {\n const { event, params = [] } = response.result;\n promiEvent.emit(event, ...params);\n }\n });\n\n return promiEvent;\n }\n\n // Creates an intermediary event which takes a typed event and a payload ID\n protected createIntermediaryEvent<T = Function>(eventType: IntermediaryEvents, payloadId: string) {\n const e = (args: any) => {\n const res = createJsonRpcRequestPayload(MagicPayloadMethod.IntermediaryEvent, [{ payloadId, eventType, args }]);\n this.request(res);\n };\n return e as unknown as T;\n }\n}\n", "function* createIntGenerator(): Generator<number, number, void> {\n let index = 0;\n\n while (true) {\n /* istanbul ignore next */\n if (index < Number.MAX_SAFE_INTEGER) yield ++index;\n else index = 0;\n }\n}\n\nconst intGenerator = createIntGenerator();\n\n/**\n * Get an integer ID for attaching to a JSON RPC request payload.\n */\nexport function getPayloadId(): number {\n return intGenerator.next().value;\n}\n", "import { JsonRpcRequestPayload, JsonRpcResponsePayload, JsonRpcError } from '@magic-sdk/types';\nimport { isJsonRpcResponsePayload } from '../util/type-guards';\nimport { getPayloadId } from '../util/get-payload-id';\n\nconst payloadPreprocessedSymbol = Symbol('Payload pre-processed by Magic SDK');\n\n/**\n * To avoid \"pre-processing\" a payload more than once (and needlessly\n * incrementing our payload ID generator), we attach a symbol to detect a\n * payloads we've already visited.\n */\nfunction markPayloadAsPreprocessed<T extends Partial<JsonRpcRequestPayload>>(payload: T): T {\n Object.defineProperty(payload, payloadPreprocessedSymbol, {\n value: true,\n enumerable: false,\n });\n\n return payload;\n}\n\n/**\n * Returns `true` if the payload has been visited by our \"pre-processing,\" in\n * `standardizeJsonRpcRequestPayload(...)`.\n */\nfunction isPayloadPreprocessed<T extends Partial<JsonRpcRequestPayload>>(payload: T) {\n return !!(payload as any)[payloadPreprocessedSymbol];\n}\n\n/**\n * Returns a full `JsonRpcRequestPayload` from a potentially incomplete payload\n * object. This method mutates the given `payload` to preserve compatibility\n * with external libraries that perform their own `JsonRpcRequestPayload.id`\n * check to associate responses (such as `web3`).\n *\n * This function is no-op if the payload has already been processed before.\n */\nexport function standardizeJsonRpcRequestPayload(payload: Partial<JsonRpcRequestPayload>) {\n if (!isPayloadPreprocessed(payload)) {\n payload.jsonrpc = payload.jsonrpc ?? '2.0';\n payload.id = getPayloadId();\n payload.method = payload.method ?? 'noop';\n payload.params = payload.params ?? [];\n\n markPayloadAsPreprocessed(payload);\n }\n\n return payload as JsonRpcRequestPayload;\n}\n\n/**\n * Build a valid JSON RPC payload for emitting to the Magic SDK iframe relayer.\n */\nexport function createJsonRpcRequestPayload(method: string, params: any[] = []): JsonRpcRequestPayload {\n return markPayloadAsPreprocessed({\n params,\n method,\n jsonrpc: '2.0',\n id: getPayloadId(),\n });\n}\n\n/**\n * Formats and standardizes a JSON RPC 2.0 response from a number of potential\n * sources.\n */\nexport class JsonRpcResponse<ResultType = any> {\n private readonly _jsonrpc: string;\n private readonly _id: string | number | null;\n private _result?: ResultType | null;\n private _error?: JsonRpcError | null;\n\n constructor(responsePayload: JsonRpcResponsePayload);\n constructor(response: JsonRpcResponse<ResultType>);\n constructor(requestPayload: JsonRpcRequestPayload);\n constructor(responseOrPayload: JsonRpcResponsePayload | JsonRpcResponse<ResultType> | JsonRpcRequestPayload) {\n if (responseOrPayload instanceof JsonRpcResponse) {\n this._jsonrpc = responseOrPayload.payload.jsonrpc;\n this._id = responseOrPayload.payload.id;\n this._result = responseOrPayload.payload.result;\n this._error = responseOrPayload.payload.error;\n } else if (isJsonRpcResponsePayload(responseOrPayload)) {\n this._jsonrpc = responseOrPayload.jsonrpc;\n this._id = responseOrPayload.id;\n this._result = responseOrPayload.result;\n this._error = responseOrPayload.error;\n } else {\n this._jsonrpc = responseOrPayload.jsonrpc;\n this._id = responseOrPayload.id;\n this._result = undefined;\n this._error = undefined;\n }\n }\n\n public applyError(error?: JsonRpcError | null) {\n this._error = error;\n return this;\n }\n\n public applyResult(result?: ResultType | null) {\n this._result = result;\n return this;\n }\n\n public get hasError() {\n return typeof this._error !== 'undefined' && this._error !== null;\n }\n\n public get hasResult() {\n return typeof this._result !== 'undefined';\n }\n\n public get payload(): JsonRpcResponsePayload {\n return {\n jsonrpc: this._jsonrpc,\n id: this._id,\n result: this._result,\n error: this._error,\n };\n }\n}\n", "import { UserEventsEmit, UserEventsOnReceived } from '@magic-sdk/types';\nimport { TypedEmitter, EventsDefinition, createTypedEmitter } from './events';\n\n/**\n * Extends `Promise` with a polymorphic `this` type to accomodate arbitrary\n * `Promise` API extensions.\n */\ninterface ExtendedPromise<T> extends Promise<T> {\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): ExtendedPromise<TResult1 | TResult2> & this;\n\n catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,\n ): ExtendedPromise<T | TResult> & this;\n\n finally(onfinally?: (() => void) | undefined | null): ExtendedPromise<T> & this;\n}\n\n/**\n * A `Promise` and `EventEmitter` all in one!\n */\nexport type PromiEvent<TResult, TEvents extends EventsDefinition = void> = ExtendedPromise<TResult> &\n TypedEmitter<TEvents extends void ? DefaultEvents<TResult> : TEvents & DefaultEvents<TResult>>;\n\n/**\n * Default events attached to every `PromiEvent`.\n */\ntype DefaultEvents<TResult> = {\n done: (result: TResult) => void;\n error: (reason: any) => void;\n settled: () => void;\n [UserEventsEmit.ClosedByUser]: () => void;\n};\n\n/**\n * A `Promise` executor with can be optionally asynchronous.\n */\ntype AsyncPromiseExecutor<TResult> = (\n resolve: (value: TResult | PromiseLike<TResult>) => void,\n reject: (reason?: any) => void,\n) => void | Promise<void>;\n\nconst promiEventBrand = Symbol('isPromiEvent');\n\n/**\n * Returns `true` if the given `value` is a `PromiEvent`.\n */\nexport function isPromiEvent(value: any): value is PromiEvent<any> {\n return !!value[promiEventBrand];\n}\n\n/**\n * Create a native JavaScript `Promise` overloaded with strongly-typed methods\n * from `EventEmitter`.\n */\nexport function createPromiEvent<TResult, TEvents extends EventsDefinition = void>(\n executor: AsyncPromiseExecutor<TResult>,\n): PromiEvent<TResult, TEvents extends void ? DefaultEvents<TResult> : TEvents & DefaultEvents<TResult>> {\n const promise = createPromise(executor);\n const { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter<\n TEvents & DefaultEvents<TResult>\n >();\n\n // We save the original `Promise` methods to the following symbols so we can\n // access them internally.\n const thenSymbol = Symbol('Promise.then');\n const catchSymbol = Symbol('Promise.catch');\n const finallySymbol = Symbol('Promise.finally');\n\n /**\n * Ensures the next object in the `PromiEvent` chain is overloaded with\n * `EventEmitter` methods.\n */\n const createChainingPromiseMethod =\n (method: typeof thenSymbol | typeof catchSymbol | typeof finallySymbol, source: Promise<any>) =>\n (...args: any[]) => {\n const nextPromise = (source as any)[method].apply(source, args);\n return promiEvent(nextPromise);\n };\n\n /**\n * Builds a `PromiEvent` by assigning `EventEmitter` methods to a native\n * `Promise` object.\n */\n const promiEvent = (source: any) => {\n return Object.assign(source, {\n [promiEventBrand]: true,\n\n [thenSymbol]: source[thenSymbol] || source.then,\n [catchSymbol]: source[catchSymbol] || source.catch,\n [finallySymbol]: source[finallySymbol] || source.finally,\n\n then: createChainingPromiseMethod(thenSymbol, source),\n catch: createChainingPromiseMethod(catchSymbol, source),\n finally: createChainingPromiseMethod(finallySymbol, source),\n\n on: createChainingEmitterMethod('on', source),\n once: createChainingEmitterMethod('once', source),\n addListener: createChainingEmitterMethod('addListener', source),\n\n off: createChainingEmitterMethod('off', source),\n removeListener: createChainingEmitterMethod('removeListener', source),\n removeAllListeners: createChainingEmitterMethod('removeAllListeners', source),\n\n emit: createBoundEmitterMethod('emit'),\n eventNames: createBoundEmitterMethod('eventNames'),\n listeners: createBoundEmitterMethod('listeners'),\n listenerCount: createBoundEmitterMethod('listenerCount'),\n });\n };\n\n const result = promiEvent(\n promise.then(\n (resolved) => {\n // Emit default completion events and resolve result.\n result.emit('done', resolved);\n result.emit('settled');\n return resolved;\n },\n\n (err) => {\n // Emit default error events and re-throw.\n result.emit('error', err);\n result.emit('settled');\n throw err;\n },\n ),\n );\n\n result.on(UserEventsOnReceived.ClosedByUser, () => {\n result.emit(UserEventsEmit.ClosedByUser);\n });\n return result;\n}\n\n/**\n * Creates a `Promise` with an **async executor** that automatically catches\n * errors occurring within the executor. Nesting promises in this way is usually\n * deemed an _anti-pattern_, but it's useful and clean when promisifying the\n * event-based code that's inherent to JSON RPC.\n *\n * So, here we solve the issue of nested promises by ensuring that no errors\n * mistakenly go unhandled!\n */\nexport function createPromise<TResult>(executor: AsyncPromiseExecutor<TResult>) {\n return new Promise<TResult>((resolve, reject) => {\n const result = executor(resolve, reject);\n Promise.resolve(result).catch(reject);\n });\n}\n", "import EventEmitter from 'eventemitter3';\n\nexport type EventsDefinition = { [K in string | symbol]: (...args: any[]) => void } | void;\n\n/**\n * An extension of `EventEmitter` (provided by `eventemitter3`) with an adjusted\n * type interface that supports the unique structure of Magic SDK modules.\n */\nexport class TypedEmitter<Events extends EventsDefinition = void> extends EventEmitter<\n Events extends void ? string | symbol : Events\n> {}\n\ntype ChainingMethods = 'on' | 'once' | 'addListener' | 'off' | 'removeListener' | 'removeAllListeners';\ntype NonChainingMethods = 'emit' | 'eventNames' | 'listeners' | 'listenerCount';\n\ntype ReplaceReturnType<T extends (...a: any) => any, TNewReturn> = (...a: Parameters<T>) => TNewReturn;\n\n/**\n * Creates a `TypedEmitter` instance and returns helper functions for easily\n * mixing `TypedEmitter` methods into other objects.\n */\nexport function createTypedEmitter<Events extends EventsDefinition = void>() {\n const emitter = new TypedEmitter<Events>();\n\n const createChainingEmitterMethod = <T1 extends ChainingMethods, T2>(\n method: T1,\n source: T2,\n ): ReplaceReturnType<TypedEmitter[T1], T2> => {\n return (...args: any[]) => {\n (emitter as any)[method].apply(emitter, args);\n return source;\n };\n };\n\n const createBoundEmitterMethod = <T extends NonChainingMethods>(method: T): TypedEmitter[T] => {\n return (...args: any[]) => {\n return (emitter as any)[method].apply(emitter, args);\n };\n };\n\n return {\n emitter,\n createChainingEmitterMethod,\n createBoundEmitterMethod,\n };\n}\n", "export function isMajorVersionAtLeast(version: string, majorVersion: number): boolean {\n // Split the version string into major, minor, and patch versions\n const [major] = version.split('.').map(Number);\n\n // Check if the major version is at least the required major version\n return major >= majorVersion;\n}\n", "import {\n GetIdTokenConfiguration,\n MagicPayloadMethod,\n MagicUserMetadata,\n GenerateIdTokenConfiguration,\n UserInfo,\n RequestUserInfoScope,\n RecoverAccountConfiguration,\n ShowSettingsConfiguration,\n EnableMFAConfiguration,\n EnableMFAEventEmit,\n EnableMFAEventHandlers,\n DisableMFAConfiguration,\n DisableMFAEventHandlers,\n DisableMFAEventEmit,\n RecencyCheckEventEmit,\n RecoveryFactorEventHandlers,\n RecoveryFactorEventEmit,\n RecoverAccountEventHandlers,\n RecoverAccountEventEmit,\n UpdateEmailEventHandlers,\n UpdateEmailEventEmit,\n} from '@magic-sdk/types';\nimport { getItem, setItem, removeItem } from '../util/storage';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { clearDeviceShares } from '../util/device-share-web-crypto';\nimport { createPromiEvent } from '../util';\n\ntype UserLoggedOutCallback = (loggedOut: boolean) => void;\n\nexport class UserModule extends BaseModule {\n public getIdToken(configuration?: GetIdTokenConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GetIdTokenTestMode : MagicPayloadMethod.GetIdToken,\n [configuration],\n );\n return this.request<string>(requestPayload);\n }\n\n public generateIdToken(configuration?: GenerateIdTokenConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GenerateIdTokenTestMode : MagicPayloadMethod.GenerateIdToken,\n [configuration],\n );\n return this.request<string>(requestPayload);\n }\n\n public getInfo() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.GetInfo, []);\n return this.request<MagicUserMetadata>(requestPayload);\n }\n\n public isLoggedIn() {\n return createPromiEvent<boolean, any>(async (resolve, reject) => {\n try {\n let cachedIsLoggedIn = false;\n if (this.sdk.useStorageCache) {\n cachedIsLoggedIn = (await getItem(this.localForageIsLoggedInKey)) === 'true';\n\n // if isLoggedIn is true on storage, optimistically resolve with true\n // if it is false, we use `usr.isLoggedIn` as the source of truth.\n if (cachedIsLoggedIn) {\n resolve(true);\n }\n }\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.IsLoggedInTestMode : MagicPayloadMethod.IsLoggedIn,\n );\n const isLoggedInResponse = await this.request<boolean>(requestPayload);\n if (this.sdk.useStorageCache) {\n if (isLoggedInResponse) {\n setItem(this.localForageIsLoggedInKey, true);\n } else {\n removeItem(this.localForageIsLoggedInKey);\n }\n if (cachedIsLoggedIn && !isLoggedInResponse) {\n this.emitUserLoggedOut(true);\n }\n }\n resolve(isLoggedInResponse);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n public logout() {\n removeItem(this.localForageIsLoggedInKey);\n clearDeviceShares();\n\n return createPromiEvent<boolean, any>(async (resolve, reject) => {\n try {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LogoutTestMode : MagicPayloadMethod.Logout,\n );\n const response = await this.request<boolean>(requestPayload);\n if (this.sdk.useStorageCache) {\n this.emitUserLoggedOut(response);\n }\n resolve(response);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n /* Request email address from logged in user */\n public requestInfoWithUI(scope?: RequestUserInfoScope) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RequestUserInfoWithUI, scope ? [scope] : []);\n return this.request<UserInfo>(requestPayload);\n }\n\n public showSettings(configuration?: ShowSettingsConfiguration) {\n const { showUI = true } = configuration || {};\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.UserSettingsTestMode : MagicPayloadMethod.UserSettings,\n [configuration],\n );\n const handle = this.request<string | null, RecoveryFactorEventHandlers>(requestPayload);\n if (!showUI && handle) {\n handle.on(RecoveryFactorEventEmit.SendNewPhoneNumber, (phone_number: string) => {\n this.createIntermediaryEvent(\n RecoveryFactorEventEmit.SendNewPhoneNumber,\n requestPayload.id as string,\n )(phone_number);\n });\n handle.on(RecoveryFactorEventEmit.SendOtpCode, (otp: string) => {\n this.createIntermediaryEvent(RecoveryFactorEventEmit.SendOtpCode, requestPayload.id as string)(otp);\n });\n handle.on(RecoveryFactorEventEmit.StartEditPhoneNumber, () => {\n this.createIntermediaryEvent(RecoveryFactorEventEmit.StartEditPhoneNumber, requestPayload.id as string)();\n });\n handle.on(RecoveryFactorEventEmit.Cancel, () => {\n this.createIntermediaryEvent(RecoveryFactorEventEmit.Cancel, requestPayload.id as string)();\n });\n handle.on(RecencyCheckEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyEmailOtp, requestPayload.id as string)(otp);\n });\n }\n return handle;\n }\n\n public recoverAccount(configuration: RecoverAccountConfiguration) {\n const { email, showUI } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.RecoverAccountTestMode : MagicPayloadMethod.RecoverAccount,\n [{ email, showUI }],\n );\n const handle = this.request<string | boolean | null, RecoverAccountEventHandlers & UpdateEmailEventHandlers>(\n requestPayload,\n );\n\n if (!showUI && handle) {\n handle.on(RecoverAccountEventEmit.Cancel, () => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.Cancel, requestPayload.id as string)();\n });\n handle.on(RecoverAccountEventEmit.ResendSms, () => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.ResendSms, requestPayload.id as string)();\n });\n handle.on(RecoverAccountEventEmit.VerifyOtp, (otp: string) => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.VerifyOtp, requestPayload.id as string)(otp);\n });\n handle.on(RecoverAccountEventEmit.UpdateEmail, (newEmail: string) => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.UpdateEmail, requestPayload.id as string)(newEmail);\n });\n\n handle.on(UpdateEmailEventEmit.Cancel, () => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.Cancel, requestPayload.id as string)();\n });\n handle.on(UpdateEmailEventEmit.RetryWithNewEmail, (newEmail?) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.RetryWithNewEmail, requestPayload.id as string)(newEmail);\n });\n\n handle.on(UpdateEmailEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.VerifyEmailOtp, requestPayload.id as string)(otp);\n });\n }\n\n return handle;\n }\n\n public revealPrivateKey() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RevealPK);\n return this.request<boolean>(requestPayload);\n }\n\n public onUserLoggedOut(callback: UserLoggedOutCallback): void {\n this.userLoggedOutCallbacks.push(callback);\n }\n\n public enableMFA(configuration: EnableMFAConfiguration) {\n const { showUI = true } = configuration;\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.EnableMFA, [{ showUI }]);\n const handle = this.request<string | boolean | null, EnableMFAEventHandlers>(requestPayload);\n\n if (!showUI && handle) {\n handle.on(EnableMFAEventEmit.VerifyMFACode, (totp: string) => {\n this.createIntermediaryEvent(EnableMFAEventEmit.VerifyMFACode, requestPayload.id as string)(totp);\n });\n\n handle.on(EnableMFAEventEmit.Cancel, () => {\n this.createIntermediaryEvent(EnableMFAEventEmit.Cancel, requestPayload.id as string)();\n });\n }\n return handle;\n }\n\n public disableMFA(configuration: DisableMFAConfiguration) {\n const { showUI = true } = configuration;\n\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.DisableMFA, [{ showUI }]);\n const handle = this.request<string | boolean | null, DisableMFAEventHandlers>(requestPayload);\n\n if (!showUI && handle) {\n handle.on(DisableMFAEventEmit.VerifyMFACode, (totp: string) => {\n this.createIntermediaryEvent(DisableMFAEventEmit.VerifyMFACode, requestPayload.id as string)(totp);\n });\n\n handle.on(DisableMFAEventEmit.LostDevice, (recoveryCode: string) => {\n this.createIntermediaryEvent(DisableMFAEventEmit.LostDevice, requestPayload.id as string)(recoveryCode);\n });\n\n handle.on(DisableMFAEventEmit.Cancel, () => {\n this.createIntermediaryEvent(DisableMFAEventEmit.Cancel, requestPayload.id as string)();\n });\n }\n return handle;\n }\n\n // Private members\n private emitUserLoggedOut(loggedOut: boolean): void {\n this.userLoggedOutCallbacks.forEach(callback => {\n callback(loggedOut);\n });\n }\n\n private localForageIsLoggedInKey = 'magic_auth_is_logged_in';\n private userLoggedOutCallbacks: UserLoggedOutCallback[] = [];\n}\n", "import { SDKEnvironment } from '../core/sdk-environment';\n\n/* global LocalForage LocalForageDbMethods */\nlet lf: LocalForage;\n\n/**\n * Proxies `localforage` methods with strong-typing.\n */\nfunction proxyLocalForageMethod<TMethod extends keyof LocalForageDbMethods>(method: TMethod): LocalForage[TMethod] {\n return async (...args: any[]) => {\n /* istanbul ignore else */\n if (!lf) lf = await SDKEnvironment.configureStorage();\n await lf.ready();\n return (lf[method] as any)(...args);\n };\n}\n\nexport const getItem = proxyLocalForageMethod('getItem');\nexport const setItem = proxyLocalForageMethod('setItem');\nexport const removeItem = proxyLocalForageMethod('removeItem');\nexport const clear = proxyLocalForageMethod('clear');\nexport const length = proxyLocalForageMethod('length');\nexport const key = proxyLocalForageMethod('key');\nexport const keys = proxyLocalForageMethod('keys');\nexport const iterate = proxyLocalForageMethod('iterate');\n", "export function uuid() {\n const u = window.crypto.getRandomValues(new Uint8Array(16));\n\n // set the version bit to v4\n u[6] = (u[6] & 0x0f) | 0x40;\n\n // set the variant bit to \"don't care\" (yes, the RFC\n // calls it that)\n u[8] = (u[8] & 0xbf) | 0x80;\n\n // hex encode them and add the dashes\n let uid = '';\n uid += u[0].toString(16);\n uid += u[1].toString(16);\n uid += u[2].toString(16);\n uid += u[3].toString(16);\n uid += '-';\n\n uid += u[4].toString(16);\n uid += u[5].toString(16);\n uid += '-';\n\n uid += u[6].toString(16);\n uid += u[7].toString(16);\n uid += '-';\n\n uid += u[8].toString(16);\n uid += u[9].toString(16);\n uid += '-';\n\n uid += u[10].toString(16);\n uid += u[11].toString(16);\n uid += u[12].toString(16);\n uid += u[13].toString(16);\n uid += u[14].toString(16);\n uid += u[15].toString(16);\n\n return uid;\n}\n", "import { setItem, getItem, removeItem } from './storage';\nimport { uuid } from './uuid';\n\nexport const STORE_KEY_PRIVATE_KEY = 'STORE_KEY_PRIVATE_KEY';\nexport const STORE_KEY_PUBLIC_JWK = 'STORE_KEY_PUBLIC_JWK';\nconst ALGO_NAME = 'ECDSA';\nconst ALGO_CURVE = 'P-256';\n\nconst EC_GEN_PARAMS: EcKeyGenParams = {\n name: ALGO_NAME,\n namedCurve: ALGO_CURVE,\n};\n\nexport function isWebCryptoSupported() {\n const hasCrypto = typeof window !== 'undefined' && !!(window.crypto as any);\n const hasSubtleCrypto = hasCrypto && !!(window.crypto.subtle as any);\n\n return hasCrypto && hasSubtleCrypto;\n}\n\nexport function clearKeys() {\n removeItem(STORE_KEY_PUBLIC_JWK);\n removeItem(STORE_KEY_PRIVATE_KEY);\n}\n\nexport async function createJwt() {\n // will return undefiend is webcrypto is not supported\n const publicJwk = await getPublicKey();\n\n if (!publicJwk) {\n console.info('unable to create public key or webcrypto is unsupported');\n return undefined;\n }\n\n const { subtle } = window.crypto;\n const privateJwk = await getItem<CryptoKey>(STORE_KEY_PRIVATE_KEY);\n\n if (!privateJwk || !subtle) {\n console.info('unable to find private key or webcrypto unsupported');\n return undefined;\n }\n\n const claims = {\n iat: Math.floor(new Date().getTime() / 1000),\n jti: uuid(),\n };\n\n const headers = {\n typ: 'dpop+jwt',\n alg: 'ES256',\n jwk: publicJwk,\n };\n\n const jws = {\n protected: strToUrlBase64(JSON.stringify(headers)),\n claims: strToUrlBase64(JSON.stringify(claims)),\n };\n\n const data = strToUint8(`${jws.protected}.${jws.claims}`);\n const sigType = { name: ALGO_NAME, hash: { name: 'SHA-256' } };\n\n const sig = uint8ToUrlBase64(new Uint8Array(await subtle.sign(sigType, privateJwk, data)));\n return `${jws.protected}.${jws.claims}.${sig}`;\n}\n\nasync function getPublicKey() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n\n if (!(await getItem(STORE_KEY_PUBLIC_JWK))) {\n await generateWCKP();\n }\n\n return getItem(STORE_KEY_PUBLIC_JWK) as JsonWebKey;\n}\n\nasync function generateWCKP() {\n // to avoid a nasty babel bug we have to hoist this above the await ourselves\n // https://github.com/rpetrich/babel-plugin-transform-async-to-promises/issues/20\n const { subtle } = window.crypto;\n const kp = await subtle.generateKey(\n EC_GEN_PARAMS,\n false, // need to export the public key, while keep private key non-extractable\n ['sign'],\n );\n\n const jwkPublicKey = await subtle.exportKey('jwk', kp.publicKey!);\n\n // persist keys\n await setItem(STORE_KEY_PRIVATE_KEY, kp.privateKey!);\n // persist the jwk public key since it needs to be exported anyways\n await setItem(STORE_KEY_PUBLIC_JWK, jwkPublicKey);\n}\n\nfunction strToUrlBase64(str: string) {\n return binToUrlBase64(utf8ToBinaryString(str));\n}\n\nfunction strToUint8(str: string) {\n return new TextEncoder().encode(str);\n}\n\nfunction binToUrlBase64(bin: string) {\n return btoa(bin).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+/g, '');\n}\n\nfunction utf8ToBinaryString(str: string) {\n const escstr = encodeURIComponent(str);\n // replaces any uri escape sequence, such as %0A,\n // with binary escape, such as 0x0A\n return escstr.replace(/%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode(parseInt(p1, 16)));\n}\n\nfunction uint8ToUrlBase64(uint8: Uint8Array) {\n let bin = '';\n uint8.forEach((code) => {\n bin += String.fromCharCode(code);\n });\n return binToUrlBase64(bin);\n}\n", "import { getItem, iterate, removeItem, setItem } from './storage';\nimport { isWebCryptoSupported } from './web-crypto';\n\nexport const DEVICE_SHARE_KEY = 'ds';\nexport const ENCRYPTION_KEY_KEY = 'ek';\nexport const INITIALIZATION_VECTOR_KEY = 'iv';\n\nconst ALGO_NAME = 'AES-GCM'; // for encryption\nconst ALGO_LENGTH = 256;\n\nexport async function clearDeviceShares() {\n const keysToRemove: string[] = [];\n await iterate((value, key, iterationNumber) => {\n if (key.startsWith(`${DEVICE_SHARE_KEY}_`)) {\n keysToRemove.push(key);\n }\n });\n for (const key of keysToRemove) {\n await removeItem(key);\n }\n}\n\nfunction arrayBufferToBase64(buffer: ArrayBuffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function base64ToArrayBuffer(base64: string) {\n const binaryString = window.atob(base64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\n\nasync function getOrCreateInitVector() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n const { crypto } = window;\n const existingIv = (await getItem(INITIALIZATION_VECTOR_KEY)) as Uint8Array;\n if (existingIv) {\n return existingIv;\n }\n\n const iv = crypto.getRandomValues(new Uint8Array(12)); // 12 bytes for AES-GCM\n return iv;\n}\n\nasync function getOrCreateEncryptionKey() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n const { subtle } = window.crypto;\n const existingKey = (await getItem(ENCRYPTION_KEY_KEY)) as CryptoKey;\n if (existingKey) {\n return existingKey;\n }\n\n const key = await subtle.generateKey(\n { name: ALGO_NAME, length: ALGO_LENGTH },\n false, // non-extractable\n ['encrypt', 'decrypt'],\n );\n return key;\n}\n\nexport async function encryptAndPersistDeviceShare(deviceShareBase64: string, networkHash: string): Promise<void> {\n const iv = await getOrCreateInitVector();\n const encryptionKey = await getOrCreateEncryptionKey();\n\n if (!iv || !encryptionKey || !deviceShareBase64) {\n return;\n }\n const decodedDeviceShare = base64ToArrayBuffer(deviceShareBase64);\n\n const { subtle } = window.crypto;\n\n const encryptedData = await subtle.encrypt(\n {\n name: ALGO_NAME,\n iv,\n },\n encryptionKey,\n decodedDeviceShare,\n );\n\n // The encrypted device share we store is a base64 encoded string representation\n // of the magic kms encrypted client share encrypted with webcrypto\n const encryptedDeviceShare = arrayBufferToBase64(encryptedData);\n\n await setItem(`${DEVICE_SHARE_KEY}_${networkHash}`, encryptedDeviceShare);\n await setItem(ENCRYPTION_KEY_KEY, encryptionKey);\n await setItem(INITIALIZATION_VECTOR_KEY, iv);\n}\n\nexport async function getDecryptedDeviceShare(networkHash: string): Promise<string | undefined> {\n const encryptedDeviceShare = await getItem<string>(`${DEVICE_SHARE_KEY}_${networkHash}`);\n const iv = (await getItem(INITIALIZATION_VECTOR_KEY)) as Uint8Array; // use existing encryption key and initialization vector\n const encryptionKey = (await getItem(ENCRYPTION_KEY_KEY)) as CryptoKey;\n\n if (!iv || !encryptedDeviceShare || !encryptionKey || !isWebCryptoSupported()) {\n return undefined;\n }\n\n const { subtle } = window.crypto;\n const ab = await subtle.decrypt({ name: ALGO_NAME, iv }, encryptionKey, base64ToArrayBuffer(encryptedDeviceShare));\n\n return arrayBufferToBase64(ab);\n}\n", "/**\n * Builds a `URL` object safely.\n */\nexport function createURL(url: string, base?: string): URL {\n // Safari raises an error if `undefined` is given to the second argument of\n // the `URL` constructor.\n return base ? new URL(url, base) : new URL(url);\n}\n", "import {\n GasApiResponse,\n MagicPayloadMethod,\n GaslessTransactionRequest,\n ConnectWithUIOptions,\n ConnectWithUiEvents,\n ShowUIPromiEvents,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createPromiEvent } from '../util';\n\ntype ShowUiConfig = {\n onramperParams?: { [key: string]: string };\n};\n\nexport class WalletModule extends BaseModule {\n /* Prompt Magic's Login Form */\n public connectWithUI(options?: ConnectWithUIOptions) {\n const promiEvent = createPromiEvent<string[], ConnectWithUiEvents>(async (resolve, reject) => {\n try {\n const loginRequestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.Login, [\n {\n enabledWallets: this.sdk.thirdPartyWallets.enabledWallets,\n ...options,\n },\n ]);\n\n const loginRequest = this.request<string[], ConnectWithUiEvents>(loginRequestPayload);\n\n this.sdk.thirdPartyWallets.eventListeners.forEach(({ event, callback }) => {\n loginRequest.on(event, () => callback(loginRequestPayload.id as string));\n });\n\n loginRequest.on('id-token-created' as any, (params: { idToken: string }) => {\n promiEvent.emit('id-token-created', params);\n });\n\n const result = await loginRequest;\n if ((result as any).error) reject(result);\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n return promiEvent;\n }\n\n /* Prompt Magic's Wallet UI (not available for users logged in with third party wallets) */\n public showUI(config?: ShowUiConfig) {\n return this.request<boolean, ShowUIPromiEvents>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowUI, [config]));\n }\n\n public showAddress() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowAddress));\n }\n\n public showSendTokensUI() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowSendTokensUI));\n }\n\n public showOnRamp() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowOnRamp));\n }\n\n public showNFTs() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowNFTs));\n }\n\n public showBalances() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowBalances));\n }\n\n public sendGaslessTransaction(address: string, transaction: GaslessTransactionRequest) {\n return this.request<GasApiResponse>(\n createJsonRpcRequestPayload(MagicPayloadMethod.SendGaslessTransaction, [address, transaction]),\n );\n }\n}\n", "import {\n JsonRpcRequestPayload,\n LocalStorageKeys,\n MagicPayloadMethod,\n MagicUserMetadata,\n ThirdPartyWalletEvents,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { PromiEvent, createPromiEvent } from '../util';\n\nexport class ThirdPartyWalletsModule extends BaseModule {\n public eventListeners: { event: ThirdPartyWalletEvents; callback: (payloadId: string) => Promise<void> }[] = [];\n public enabledWallets: Record<string, boolean> = {};\n public isConnected = false;\n\n public resetThirdPartyWalletState() {\n localStorage.removeItem(LocalStorageKeys.PROVIDER);\n localStorage.removeItem(LocalStorageKeys.ADDRESS);\n localStorage.removeItem(LocalStorageKeys.CHAIN_ID);\n this.isConnected = false;\n }\n\n public requestOverride(payload: Partial<JsonRpcRequestPayload>) {\n // Handle method overrides if login/getInfo/isLoggedIn/logout\n if (payload.method === MagicPayloadMethod.Login) {\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n if (payload.method === MagicPayloadMethod.GetInfo) {\n return this.getInfo(payload);\n }\n if (payload.method === MagicPayloadMethod.IsLoggedIn) {\n return this.isLoggedIn(payload);\n }\n if (payload.method === MagicPayloadMethod.Logout) {\n return this.logout(payload);\n }\n // Route all other requests to 3pw provider\n switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {\n case 'web3modal':\n return this.web3modalRequest(payload);\n // Fallback to default request\n default:\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n }\n\n /* Core Method Overrides */\n\n private isLoggedIn(payload: Partial<JsonRpcRequestPayload>): PromiEvent<boolean> {\n switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {\n case 'web3modal':\n return this.web3modalIsLoggedIn();\n default:\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n }\n\n private getInfo(payload: Partial<JsonRpcRequestPayload>): PromiEvent<MagicUserMetadata> {\n switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {\n case 'web3modal':\n return this.web3modalGetInfo();\n default:\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n }\n\n private logout(payload: Partial<JsonRpcRequestPayload>): PromiEvent<boolean> {\n const provider = localStorage.getItem(LocalStorageKeys.PROVIDER);\n this.resetThirdPartyWalletState();\n switch (provider) {\n case 'web3modal': {\n return this.web3modalLogout();\n }\n default:\n return super.request(payload);\n }\n }\n\n /* Web3Modal Methods */\n\n private web3modalRequest(payload: Partial<JsonRpcRequestPayload>) {\n return createPromiEvent<unknown>((resolve, reject) => {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n this.sdk.web3modal.modal.getWalletProvider().request(payload).then(resolve).catch(reject);\n });\n }\n\n private web3modalIsLoggedIn() {\n return createPromiEvent<boolean>(resolve => {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const walletStatus = this.sdk.web3modal.modal.getStatus();\n if (walletStatus === 'connected') {\n resolve(true);\n }\n if (walletStatus === 'disconnected') {\n this.resetThirdPartyWalletState();\n resolve(false);\n }\n if (walletStatus === 'reconnecting') {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const unsubscribeFromProviderEvents = this.sdk.web3modal.modal.subscribeProvider(({ status }) => {\n if (status === 'connected') {\n unsubscribeFromProviderEvents();\n resolve(true);\n }\n if (status === 'disconnected') {\n unsubscribeFromProviderEvents();\n this.resetThirdPartyWalletState();\n resolve(false);\n }\n });\n }\n });\n }\n\n private formatWeb3modalGetInfoResponse() {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const walletType = this.sdk.web3modal.modal.getWalletInfo()?.name;\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const userAddress = this.sdk.web3modal.modal.getAddress();\n return {\n publicAddress: userAddress as string,\n email: null,\n issuer: `did:ethr:${userAddress}`,\n phoneNumber: null,\n isMfaEnabled: false,\n recoveryFactors: [] as [],\n walletType: walletType || 'web3modal',\n };\n }\n\n private web3modalGetInfo() {\n return createPromiEvent<MagicUserMetadata>((resolve, reject) => {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const walletStatus = this.sdk.web3modal.modal.getStatus();\n if (walletStatus === 'connected') {\n resolve(this.formatWeb3modalGetInfoResponse());\n }\n\n if (walletStatus === 'disconnected') {\n this.resetThirdPartyWalletState();\n reject('Magic RPC Error: [-32603] Internal error: User denied account access.');\n }\n\n if (walletStatus === 'reconnecting') {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const unsubscribeFromProviderEvents = this.sdk.web3modal.modal.subscribeProvider(({ status }) => {\n if (status === 'connected') {\n unsubscribeFromProviderEvents();\n resolve(this.formatWeb3modalGetInfoResponse());\n }\n if (status === 'disconnected') {\n unsubscribeFromProviderEvents();\n this.resetThirdPartyWalletState();\n reject('Magic RPC Error: [-32603] Internal error: User denied account access.');\n }\n });\n }\n });\n }\n\n private web3modalLogout(): PromiEvent<boolean> {\n return createPromiEvent<boolean>(async resolve => {\n try {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n await this.sdk.web3modal.modal.disconnect();\n } catch (error) {\n console.error(error);\n }\n resolve(true);\n });\n }\n}\n", "import {\n JsonRpcRequestPayload,\n JsonRpcRequestCallback,\n MagicOutgoingWindowMessage,\n JsonRpcBatchRequestCallback,\n JsonRpcResponsePayload,\n ProviderEnableEvents,\n MagicPayloadMethod,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createInvalidArgumentError, MagicRPCError, createSynchronousWeb3MethodWarning } from '../core/sdk-exceptions';\nimport { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload, JsonRpcResponse } from '../core/json-rpc';\nimport { PromiEvent } from '../util/promise-tools';\nimport { createTypedEmitter, EventsDefinition, TypedEmitter } from '../util/events';\n\nconst { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter();\n\n/** */\nexport class RPCProviderModule extends BaseModule implements TypedEmitter {\n // Implements EIP 1193:\n // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md\n\n public readonly isMagic = true;\n\n public sendAsync(payload: Partial<JsonRpcRequestPayload>, onRequestComplete: JsonRpcRequestCallback): void;\n public sendAsync(payload: Partial<JsonRpcRequestPayload>[], onRequestComplete: JsonRpcBatchRequestCallback): void;\n public sendAsync(\n payload: Partial<JsonRpcRequestPayload> | Partial<JsonRpcRequestPayload>[],\n onRequestComplete: JsonRpcRequestCallback | JsonRpcBatchRequestCallback,\n ): void;\n\n public sendAsync(\n payload: Partial<JsonRpcRequestPayload> | Partial<JsonRpcRequestPayload>[],\n onRequestComplete: JsonRpcRequestCallback | JsonRpcBatchRequestCallback,\n ): void {\n if (!onRequestComplete) {\n throw createInvalidArgumentError({\n procedure: 'Magic.rpcProvider.sendAsync',\n argument: 1,\n expected: 'function',\n received: onRequestComplete === null ? 'null' : typeof onRequestComplete,\n });\n }\n\n if (Array.isArray(payload)) {\n this.overlay\n .post(\n MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,\n payload.map(p => {\n const standardizedPayload = standardizeJsonRpcRequestPayload(p);\n this.prefixPayloadMethodForTestMode(standardizedPayload);\n return standardizedPayload;\n }),\n )\n .then(batchResponse => {\n (onRequestComplete as JsonRpcBatchRequestCallback)(\n null,\n batchResponse.map(response => ({\n ...response.payload,\n error: response.hasError ? new MagicRPCError(response.payload.error) : null,\n })),\n );\n });\n } else {\n const finalPayload = standardizeJsonRpcRequestPayload(payload);\n this.prefixPayloadMethodForTestMode(finalPayload);\n this.overlay.post(MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST, finalPayload).then(response => {\n (onRequestComplete as JsonRpcRequestCallback)(\n response.hasError ? new MagicRPCError(response.payload.error) : null,\n response.payload,\n );\n });\n }\n }\n\n public send<ResultType = any>(method: string, params?: any[]): PromiEvent<ResultType>;\n public send(\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n onRequestComplete: JsonRpcRequestCallback,\n ): void;\n public send<ResultType>(payload: JsonRpcRequestPayload, none: void): JsonRpcResponsePayload<ResultType>;\n\n public send<ResultType = any>(\n payloadOrMethod: string | JsonRpcRequestPayload | JsonRpcRequestPayload[],\n onRequestCompleteOrParams: JsonRpcRequestCallback | any[] | void,\n ): PromiEvent<ResultType> | JsonRpcResponsePayload<ResultType> | void {\n // Case #1\n // Web3 >= 1.0.0-beta.38 calls `send` with method and parameters.\n if (typeof payloadOrMethod === 'string') {\n const payload = createJsonRpcRequestPayload(\n payloadOrMethod,\n Array.isArray(onRequestCompleteOrParams) ? onRequestCompleteOrParams : [],\n );\n return this.request(payload) as any;\n }\n\n // Case #2\n // Web3 <= 1.0.0-beta.37 uses `send` with a callback for async queries.\n if (Array.isArray(payloadOrMethod) || !!onRequestCompleteOrParams) {\n this.sendAsync(payloadOrMethod, onRequestCompleteOrParams as any);\n return;\n }\n\n // Case #3\n // Legacy synchronous methods (unsupported).\n const warning = createSynchronousWeb3MethodWarning();\n warning.log();\n return new JsonRpcResponse(payloadOrMethod).applyError({\n code: -32603,\n message: warning.rawMessage,\n }).payload;\n }\n\n public enable() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.Login);\n return this.request<string[], ProviderEnableEvents>(requestPayload);\n }\n\n /**\n * Here, we wrap `BaseModule.request` with an additional check\n * to determine if the RPC method requires a test-mode prefix.\n */\n protected request<ResultType = any, Events extends EventsDefinition = void>(payload: Partial<JsonRpcRequestPayload>) {\n this.prefixPayloadMethodForTestMode(payload);\n return super.request<ResultType, Events>(payload);\n }\n\n /**\n * Prefixes Ethereum RPC methods with a `testMode` identifier. This is done so\n * that Magic's <iframe> can handle signing methods using test-specific keys.\n */\n private prefixPayloadMethodForTestMode(payload: Partial<JsonRpcRequestPayload>) {\n const testModePrefix = 'testMode/eth/';\n\n // In test mode, we prefix all RPC methods with `test/` so that the\n // Magic <iframe> can handle them without requiring network calls.\n if (this.sdk.testMode) {\n payload.method = `${testModePrefix}${payload.method}`;\n }\n }\n\n public on = createChainingEmitterMethod('on', this);\n public once = createChainingEmitterMethod('once', this);\n public addListener = createChainingEmitterMethod('addListener', this);\n\n public off = createChainingEmitterMethod('off', this);\n public removeListener = createChainingEmitterMethod('removeListener', this);\n public removeAllListeners = createChainingEmitterMethod('removeAllListeners', this);\n\n public emit = createBoundEmitterMethod('emit');\n public eventNames = createBoundEmitterMethod('eventNames');\n public listeners = createBoundEmitterMethod('listeners');\n public listenerCount = createBoundEmitterMethod('listenerCount');\n}\n", "import { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload } from '../core/json-rpc';\nimport { BaseModule } from './base-module';\nimport { SDKBase, MagicSDKAdditionalConfiguration, MagicSDKExtensionsOption } from '../core/sdk';\nimport { createExtensionNotInitializedError, MagicExtensionError, MagicExtensionWarning } from '../core/sdk-exceptions';\nimport { createPromiEvent, encodeJSON, decodeJSON, storage, isPromiEvent } from '../util';\n\nconst sdkAccessFields = ['request', 'overlay', 'sdk'];\n\n/**\n * From the `BaseExtension`-derived instance, get the prototype\n * chain up to and including the `BaseModule` class.\n */\nfunction getPrototypeChain<T extends BaseExtension<string>>(instance: T) {\n let currentProto = Object.getPrototypeOf(instance);\n const protos = [currentProto];\n\n while (currentProto !== BaseModule.prototype) {\n currentProto = Object.getPrototypeOf(currentProto);\n protos.push(currentProto);\n }\n\n return protos;\n}\n\nexport abstract class BaseExtension<TName extends string> extends BaseModule {\n /**\n * A structure describing the platform and version compatiblity of this\n * extension.\n */\n compat?: {\n 'magic-sdk': boolean | string;\n '@magic-sdk/react-native': boolean | string;\n '@magic-sdk/react-native-bare': boolean | string;\n '@magic-sdk/react-native-expo': boolean | string;\n };\n\n public abstract readonly name: TName;\n\n private __sdk_access_field_descriptors__ = new Map<\n string,\n { descriptor: PropertyDescriptor; isPrototypeField: boolean }\n >();\n private __is_initialized__ = false;\n\n protected utils = {\n createPromiEvent,\n isPromiEvent,\n encodeJSON,\n decodeJSON,\n createJsonRpcRequestPayload,\n standardizeJsonRpcRequestPayload,\n storage,\n };\n\n constructor() {\n super(undefined as any);\n\n // Disallow SDK access before initialization...\n\n const allSources = [this, ...getPrototypeChain(this)];\n\n sdkAccessFields.forEach(prop => {\n const allDescriptors = allSources.map(source => Object.getOwnPropertyDescriptor(source, prop));\n const sourceIndex = allDescriptors.findIndex(x => Boolean(x));\n const isPrototypeField = sourceIndex > 0;\n const descriptor = allDescriptors[sourceIndex];\n\n /* istanbul ignore else */\n if (descriptor) {\n this.__sdk_access_field_descriptors__.set(prop, { descriptor, isPrototypeField });\n\n Object.defineProperty(this, prop, {\n configurable: true,\n get: () => {\n throw createExtensionNotInitializedError(prop);\n },\n });\n }\n });\n }\n\n /**\n * Registers a Magic SDK instance with this Extension.\n *\n * @internal\n */\n public init(sdk: SDKBase) {\n if (this.__is_initialized__) return;\n\n // Replace original property descriptors\n // for SDK access fields post-initialization.\n sdkAccessFields.forEach(prop => {\n /* istanbul ignore else */\n if (this.__sdk_access_field_descriptors__.has(prop)) {\n const { descriptor, isPrototypeField } = this.__sdk_access_field_descriptors__.get(prop)!;\n\n if (isPrototypeField) {\n // For prototype fields, we just need the `delete` operator so that\n // the instance will fallback to the prototype chain itself.\n delete this[prop as keyof this];\n } else {\n Object.defineProperty(this, prop, descriptor);\n }\n }\n });\n\n this.sdk = sdk;\n this.__is_initialized__ = true;\n }\n\n /**\n * Creates a deprecation warning wrapped with a native Magic SDK warning type.\n * Best practice is to warn users of upcoming deprecations at least one major\n * version before the change is implemented. You can use this method to\n * communicate deprecations in a manner consistent with Magic SDK core code.\n */\n protected createDeprecationWarning(options: {\n method: string;\n removalVersion: string;\n useInstead?: string;\n }): MagicExtensionWarning {\n const { method, removalVersion, useInstead } = options;\n\n const useInsteadSuffix = useInstead ? ` Use \\`${useInstead}\\` instead.` : '';\n const message = `\\`${method}\\` will be removed from this Extension in version \\`${removalVersion}\\`.${useInsteadSuffix}`;\n return new MagicExtensionWarning(this, 'DEPRECATION_NOTICE', message);\n }\n\n /**\n * Creates a warning wrapped with a native Magic SDK warning type. This\n * maintains consistency in warning messaging for consumers of Magic SDK and\n * this Extension.\n */\n protected createWarning(code: string | number, message: string): MagicExtensionWarning {\n return new MagicExtensionWarning(this, code, message);\n }\n\n /**\n * Creates an error wrapped with a native Magic SDK error type. This maintains\n * consistency in error handling for consumers of Magic SDK and this\n * Extension.\n */\n protected createError<TData = any>(code: string | number, message: string, data: TData): MagicExtensionError<TData> {\n return new MagicExtensionError<TData>(this, code, message, data);\n }\n}\n\nabstract class InternalExtension<TName extends string, TConfig extends any = any> extends BaseExtension<TName> {\n public abstract readonly config: TConfig;\n}\n\n/**\n * A base class representing \"extensions\" to the core Magic JS APIs. Extensions\n * enable new functionality by composing Magic endpoints methods together.\n */\nexport class Extension {\n /**\n * This is a special constructor used to mark \"official\" extensions. These\n * extensions are designed for special interaction with the Magic iframe using\n * custom JSON RPC methods, business logic, and global configurations. This is\n * intended for internal-use only (and provides no useful advantage to\n * open-source extension developers over the regular `Extension` class).\n *\n * @internal\n */\n public static Internal = InternalExtension;\n}\n\n/**\n * These fields are exposed on the `Extension` type,\n * but should be hidden from the public interface.\n */\ntype HiddenExtensionFields = 'name' | 'init' | 'config' | 'compat';\n\n/**\n * Gets the type contained in an array type.\n */\ntype UnwrapArray<T extends any[]> = T extends Array<infer P> ? P : never;\n\n/**\n * Create a union type of Extension names from an\n * array of Extension types given by `TExt`.\n */\ntype ExtensionNames<TExt extends BaseExtension<string>[]> =\n UnwrapArray<TExt> extends BaseExtension<infer R> ? R : never;\n\n/**\n * From the literal Extension name type given by `TExtName`,\n * extract a dictionary of Extension types.\n */\ntype GetExtensionFromName<TExt extends BaseExtension<string>[], TExtName extends string> = {\n [P in TExtName]: Extract<UnwrapArray<TExt>, BaseExtension<TExtName>>;\n}[TExtName];\n\n/**\n * Wraps a Magic SDK constructor with the necessary type\n * information to support a strongly-typed `Extension` interface.\n */\nexport type WithExtensions<SDK extends SDKBase> = {\n new <TCustomExtName extends string, TExt extends MagicSDKExtensionsOption<TCustomExtName>>(\n apiKey: string,\n options?: MagicSDKAdditionalConfiguration<TCustomExtName, TExt>,\n ): InstanceWithExtensions<SDK, TExt>;\n};\n\nexport type InstanceWithExtensions<SDK extends SDKBase, TExt extends MagicSDKExtensionsOption> = SDK & {\n [P in Exclude<\n TExt extends BaseExtension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n number\n >]: TExt extends BaseExtension<string>[]\n ? Omit<GetExtensionFromName<TExt, P>, HiddenExtensionFields>\n : TExt extends {\n [P in Exclude<\n TExt extends BaseExtension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n number\n >]: BaseExtension<string>;\n }\n ? Omit<TExt[P], HiddenExtensionFields>\n : never;\n};\n", "import {\n MagicPayloadMethod,\n NFTCheckoutRequest,\n NFTCheckoutResponse,\n NFTCheckoutEvents,\n NFTPurchaseRequest,\n NFTPurchaseResponse,\n NFTTransferRequest,\n NFTTransferResponse,\n NftCheckoutIntermediaryEvents,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\n\nexport class NFTModule extends BaseModule {\n /* Start an NFT Purchase flow with Sardine */\n public purchase(options: NFTPurchaseRequest) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTPurchase, [options]);\n return this.request<NFTPurchaseResponse>(requestPayload);\n }\n\n /* Start an NFT Checkout flow with Paypal */\n public checkout(options: NFTCheckoutRequest) {\n const isThirdPartyWalletConnected = this.sdk.thirdPartyWallets.isConnected;\n\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTCheckout, [\n {\n ...options,\n walletProvider: isThirdPartyWalletConnected ? 'web3modal' : 'magic',\n },\n ]);\n const promiEvent = this.request<NFTCheckoutResponse, NFTCheckoutEvents>(requestPayload);\n\n if (isThirdPartyWalletConnected) {\n promiEvent.on(NftCheckoutIntermediaryEvents.Initiated, async (rawTransaction) => {\n try {\n const hash = await this.request({\n method: 'eth_sendTransaction',\n params: [rawTransaction],\n });\n this.createIntermediaryEvent(NftCheckoutIntermediaryEvents.Success, requestPayload.id as string)(hash);\n } catch (error) {\n this.createIntermediaryEvent(NftCheckoutIntermediaryEvents.Failure, requestPayload.id as string)();\n }\n });\n promiEvent.on(NftCheckoutIntermediaryEvents.Disconnect, () => {\n this.sdk.thirdPartyWallets.resetThirdPartyWalletState();\n promiEvent.emit('disconnect');\n });\n }\n return promiEvent;\n }\n\n /* Start an NFT Transfer flow */\n public transfer(options: NFTTransferRequest) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTTransfer, [options]);\n return this.request<NFTTransferResponse>(requestPayload);\n }\n}\n", "import { EthNetworkConfiguration, QueryParameters, SupportedLocale } from '@magic-sdk/types';\nimport { coerce, satisfies } from '../util/semver';\nimport { encodeJSON } from '../util/base64-json';\nimport {\n createMissingApiKeyError,\n createReactNativeEndpointConfigurationWarning,\n createIncompatibleExtensionsError,\n} from './sdk-exceptions';\nimport { AuthModule } from '../modules/auth';\nimport { UserModule } from '../modules/user';\nimport { WalletModule } from '../modules/wallet';\nimport { ThirdPartyWalletsModule } from '../modules/third-party-wallets';\nimport { RPCProviderModule } from '../modules/rpc-provider';\nimport { ViewController } from './view-controller';\nimport { createURL } from '../util/url';\nimport { BaseExtension, Extension } from '../modules/base-extension';\nimport { isEmpty } from '../util/type-guards';\nimport { SDKEnvironment, sdkNameToEnvName } from './sdk-environment';\nimport { NFTModule } from '../modules/nft';\n\n/**\n * Checks if the given `ext` is compatible with the platform & version of Magic\n * SDK currently in use.\n */\nfunction checkExtensionCompat(ext: BaseExtension<string>) {\n if (ext.compat && ext.compat[SDKEnvironment.sdkName] != null) {\n return typeof ext.compat[SDKEnvironment.sdkName] === 'string'\n ? satisfies(coerce(SDKEnvironment.version), ext.compat[SDKEnvironment.sdkName] as string)\n : !!ext.compat[SDKEnvironment.sdkName];\n }\n\n // To gracefully support older extensions, we assume\n // compatibility when the `compat` field is missing.\n return true;\n}\n\n/**\n * Generates a network hash of the SDK instance for persisting network specific\n * information on multichain setups\n */\nfunction getNetworkHash(apiKey: string, network?: EthNetworkConfiguration, extConfig?: any) {\n if (!network && !extConfig) {\n return `${apiKey}_eth_mainnet`;\n }\n if (extConfig) {\n return `${apiKey}_${JSON.stringify(extConfig)}`;\n }\n if (network) {\n if (typeof network === 'string') {\n return `${apiKey}_eth_${network}`;\n }\n // Custom network, not necessarily eth.\n return `${apiKey}_${network.rpcUrl}_${network.chainId}_${network.chainType}`;\n }\n return `${apiKey}_unknown`;\n}\n\n/**\n * Initializes SDK extensions, checks for platform/version compatiblity issues,\n * then consolidates any global configurations provided by those extensions.\n */\nfunction prepareExtensions(this: SDKBase, options?: MagicSDKAdditionalConfiguration): Record<string, any> {\n const extensions: BaseExtension<string>[] | { [key: string]: BaseExtension<string> } = options?.extensions ?? [];\n const extConfig: any = {};\n const incompatibleExtensions: BaseExtension<string>[] = [];\n\n if (Array.isArray(extensions)) {\n extensions.forEach(ext => {\n if (checkExtensionCompat(ext)) {\n ext.init(this);\n if (ext.name) {\n // Only apply extensions with a known, defined `name` parameter.\n (this as any)[ext.name] = ext;\n }\n if (ext instanceof Extension.Internal) {\n if (!isEmpty(ext.config)) extConfig[ext.name] = ext.config;\n }\n } else {\n incompatibleExtensions.push(ext);\n }\n });\n } else {\n Object.keys(extensions).forEach(name => {\n if (checkExtensionCompat(extensions[name])) {\n extensions[name].init(this);\n const ext = extensions[name];\n (this as any)[name] = ext;\n if (ext instanceof Extension.Internal) {\n if (!isEmpty(ext.config)) extConfig[extensions[name].name] = ext.config;\n }\n } else {\n incompatibleExtensions.push(extensions[name]);\n }\n });\n }\n\n if (incompatibleExtensions.length) {\n throw createIncompatibleExtensionsError(incompatibleExtensions);\n }\n\n return extConfig;\n}\n\nexport type MagicSDKExtensionsOption<TCustomExtName extends string = string> =\n | BaseExtension<string>[]\n | { [P in TCustomExtName]: BaseExtension<string> };\n\nexport interface MagicSDKAdditionalConfiguration<\n TCustomExtName extends string = string,\n TExt extends MagicSDKExtensionsOption<TCustomExtName> = any,\n> {\n endpoint?: string;\n locale?: SupportedLocale;\n network?: EthNetworkConfiguration;\n extensions?: TExt;\n testMode?: boolean;\n deferPreload?: boolean;\n useStorageCache?: boolean;\n meta?: any; // Generic field for clients to add metadata\n}\n\nexport class SDKBase {\n private static readonly __overlays__: Map<string, ViewController> = new Map();\n\n protected readonly endpoint: string;\n protected readonly parameters: string;\n protected readonly networkHash: string;\n public readonly testMode: boolean;\n public readonly useStorageCache: boolean;\n\n /**\n * Contains methods for starting a Magic SDK authentication flow.\n */\n public readonly auth: AuthModule;\n\n /**\n * Contains methods for interacting with user data, checking login\n * status, generating cryptographically-secure ID tokens, and more.\n */\n public readonly user: UserModule;\n\n /**\n * Contains methods previously under the `ConnectExtension`, including\n * login, show wallet UI, request user info, and more.\n */\n public readonly wallet: WalletModule;\n\n /**\n * Contains methods for interacting with NFTs, including purchase.\n */\n public readonly nft: NFTModule;\n\n /**\n * Contains internal methods for third-party wallets.\n */\n public thirdPartyWallets: ThirdPartyWalletsModule;\n\n /**\n * Contains a Web3-compliant provider. Pass this module to your Web3/Ethers\n * instance for automatic compatibility with Ethereum methods.\n */\n public readonly rpcProvider: RPCProviderModule;\n\n /**\n * Creates an instance of Magic SDK.\n */\n constructor(\n public readonly apiKey: string,\n options?: MagicSDKAdditionalConfiguration,\n ) {\n if (!apiKey) throw createMissingApiKeyError();\n\n if (SDKEnvironment.platform === 'react-native' && options?.endpoint) {\n createReactNativeEndpointConfigurationWarning().log();\n }\n\n const { defaultEndpoint, version } = SDKEnvironment;\n this.testMode = !!options?.testMode;\n this.useStorageCache = !!options?.useStorageCache;\n this.endpoint = createURL(options?.endpoint ?? defaultEndpoint).origin;\n\n // Prepare built-in modules\n this.auth = new AuthModule(this);\n this.user = new UserModule(this);\n this.wallet = new WalletModule(this);\n this.nft = new NFTModule(this);\n this.thirdPartyWallets = new ThirdPartyWalletsModule(this);\n this.rpcProvider = new RPCProviderModule(this) as any;\n\n // Prepare extensions\n const extConfig: any = prepareExtensions.call(this, options);\n\n // Encode parameters as base64-JSON\n this.parameters = encodeJSON<QueryParameters>({\n API_KEY: this.apiKey,\n DOMAIN_ORIGIN: window.location ? window.location.origin : '',\n ETH_NETWORK: options?.network,\n host: createURL(this.endpoint).host,\n sdk: sdkNameToEnvName[SDKEnvironment.sdkName],\n version,\n ext: isEmpty(extConfig) ? undefined : extConfig,\n locale: options?.locale || 'en_US',\n ...(SDKEnvironment.bundleId ? { bundleId: SDKEnvironment.bundleId } : {}),\n meta: options?.meta,\n });\n this.networkHash = getNetworkHash(this.apiKey, options?.network, isEmpty(extConfig) ? undefined : extConfig);\n if (!options?.deferPreload) this.preload();\n }\n\n /**\n * Represents the view controller associated with this `MagicSDK` instance.\n */\n protected get overlay(): ViewController {\n if (!SDKBase.__overlays__.has(this.parameters)) {\n const controller = new SDKEnvironment.ViewController(this.endpoint, this.parameters, this.networkHash);\n\n // @ts-ignore - We don't want to expose this method to the user, but we\n // need to invoke in here so that the `ViewController` is ready for use.\n controller.init();\n\n SDKBase.__overlays__.set(this.parameters, controller);\n }\n\n return SDKBase.__overlays__.get(this.parameters)!;\n }\n\n /**\n * Preloads the Magic view, allowing for faster initial requests in browser\n * environments. Awaiting the returned promise will signal when the Magic view\n * has completed loading and is ready for requests.\n */\n public async preload() {\n await this.overlay.waitForReady();\n }\n}\n", "import {\n MagicIncomingWindowMessage,\n MagicOutgoingWindowMessage,\n JsonRpcRequestPayload,\n MagicMessageEvent,\n MagicMessageRequest,\n SDKWarningCode,\n} from '@magic-sdk/types';\nimport { JsonRpcResponse } from './json-rpc';\nimport { createPromise } from '../util/promise-tools';\nimport { MagicSDKWarning, createModalNotReadyError } from './sdk-exceptions';\nimport { clearDeviceShares, encryptAndPersistDeviceShare } from '../util/device-share-web-crypto';\nimport {\n createMagicRequest,\n persistMagicEventRefreshToken,\n standardizeResponse,\n debounce,\n} from '../util/view-controller-utils';\n\ninterface RemoveEventListenerFunction {\n (): void;\n}\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst PING_INTERVAL = 5 * MINUTE; // 5 minutes\nconst INITIAL_HEARTBEAT_DELAY = 60 * MINUTE; // 1 hour\n\nexport abstract class ViewController {\n public isReadyForRequest = false;\n protected readonly messageHandlers = new Set<(event: MagicMessageEvent) => any>();\n protected isConnectedToInternet = true;\n protected lastPongTime: null | number = null;\n protected heartbeatIntervalTimer: ReturnType<typeof setInterval> | null = null;\n /* istanbul ignore next */\n protected heartbeatDebounce = debounce(() => {\n // Only do this for web now\n if (this.endpoint === 'https://auth.magic.link/') {\n this.heartBeatCheck();\n }\n }, INITIAL_HEARTBEAT_DELAY);\n\n /**\n * Create an instance of `ViewController`\n *\n * @param endpoint - The URL for the relevant iframe context.\n * @param parameters - The unique, encoded query parameters for the\n * relevant iframe context.\n * @param networkHash - The hash of the network that this sdk instance is connected to\n * for multi-chain scenarios\n */\n constructor(\n protected readonly endpoint: string,\n protected readonly parameters: string,\n protected readonly networkHash: string,\n ) {\n this.listen();\n }\n\n protected abstract init(): void;\n protected abstract _post(data: MagicMessageRequest): Promise<void>;\n protected abstract hideOverlay(): void;\n protected abstract showOverlay(): void;\n protected abstract checkRelayerExistsInDOM(): Promise<boolean>;\n protected abstract reloadRelayer(): Promise<void>;\n\n /**\n * Send a payload to the Magic `<iframe>` for processing and automatically\n * handle the acknowledging follow-up event(s).\n *\n * @param msgType - The type of message to encode with the data.\n * @param payload - The JSON RPC payload to emit via `window.postMessage`.\n */\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload[],\n ): Promise<JsonRpcResponse<ResultType>[]>;\n\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload,\n ): Promise<JsonRpcResponse<ResultType>>;\n\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n ): Promise<JsonRpcResponse<ResultType> | JsonRpcResponse<ResultType>[]> {\n return createPromise(async (resolve, reject) => {\n console.log('isConnectedToInternet', this.isConnectedToInternet);\n if (!this.isConnectedToInternet) {\n const error = createModalNotReadyError();\n reject(error);\n }\n console.log('checkRelayerExistsInDOM', this.checkRelayerExistsInDOM());\n\n if (!(await this.checkRelayerExistsInDOM())) {\n this.isReadyForRequest = false;\n await this.reloadRelayer();\n }\n\n console.log('isReadyForRequest', this.isReadyForRequest);\n\n if (!this.isReadyForRequest) {\n await this.waitForReady();\n }\n\n const batchData: JsonRpcResponse[] = [];\n const batchIds = Array.isArray(payload) ? payload.map(p => p.id) : [];\n const msg = await createMagicRequest(`${msgType}-${this.parameters}`, payload, this.networkHash);\n\n await this._post(msg);\n\n /**\n * Collect successful RPC responses and resolve.\n */\n const acknowledgeResponse = (removeEventListener: RemoveEventListenerFunction) => (event: MagicMessageEvent) => {\n const { id, response } = standardizeResponse(payload, event);\n persistMagicEventRefreshToken(event);\n if (response?.payload.error?.message === 'User denied account access.') {\n clearDeviceShares();\n } else if (event.data.deviceShare) {\n const { deviceShare } = event.data;\n encryptAndPersistDeviceShare(deviceShare, this.networkHash);\n }\n if (id && response && Array.isArray(payload) && batchIds.includes(id)) {\n batchData.push(response);\n\n // For batch requests, we wait for all responses before resolving.\n if (batchData.length === payload.length) {\n removeEventListener();\n resolve(batchData);\n }\n } else if (id && response && !Array.isArray(payload) && id === payload.id) {\n removeEventListener();\n resolve(response);\n }\n };\n\n // Listen for and handle responses.\n const removeResponseListener = this.on(\n MagicIncomingWindowMessage.MAGIC_HANDLE_RESPONSE,\n acknowledgeResponse(() => removeResponseListener()),\n );\n });\n }\n\n /**\n * Listen for events received with the given `msgType`.\n *\n * @param msgType - The `msgType` encoded with the event data.\n * @param handler - A handler function to execute on each event received.\n * @return A `void` function to remove the attached event.\n */\n public on(\n msgType: MagicIncomingWindowMessage,\n handler: (this: Window, event: MagicMessageEvent) => any,\n ): RemoveEventListenerFunction {\n console.log(window, 'window');\n const boundHandler = handler.bind(window);\n\n // We cannot effectively cover this function because it never gets reference\n // by value. The functionality of this callback is tested within\n // `initMessageListener`.\n /* istanbul ignore next */\n const listener = (event: MagicMessageEvent) => {\n if (event.data.msgType === `${msgType}-${this.parameters}`) boundHandler(event);\n };\n\n this.messageHandlers.add(listener);\n return () => this.messageHandlers.delete(listener);\n }\n\n waitForReady() {\n return new Promise<void>(resolve => {\n const unsubscribe = this.on(MagicIncomingWindowMessage.MAGIC_OVERLAY_READY, () => {\n console.log('OVERLAY_READY');\n this.isReadyForRequest = true;\n resolve();\n unsubscribe();\n });\n });\n }\n\n /**\n * Listen for messages sent from the underlying Magic `<WebView>`.\n */\n private listen() {\n this.on(MagicIncomingWindowMessage.MAGIC_HIDE_OVERLAY, () => {\n this.hideOverlay();\n });\n\n this.on(MagicIncomingWindowMessage.MAGIC_SHOW_OVERLAY, () => {\n this.showOverlay();\n });\n\n this.on(MagicIncomingWindowMessage.MAGIC_SEND_PRODUCT_ANNOUNCEMENT, (event: MagicMessageEvent) => {\n if (event.data.response.result.product_announcement) {\n new MagicSDKWarning(SDKWarningCode.ProductAnnouncement, event.data.response.result.product_announcement).log();\n }\n });\n }\n\n /**\n * Sends periodic pings to check the connection.\n * If no pong is received or it\u2019s stale, the iframe is reloaded.\n */\n /* istanbul ignore next */\n private heartBeatCheck() {\n let firstPing = true;\n\n // Helper function to send a ping message.\n const sendPing = async () => {\n const message = {\n msgType: `${MagicOutgoingWindowMessage.MAGIC_PING}-${this.parameters}`,\n payload: [],\n };\n await this._post(message);\n };\n\n this.heartbeatIntervalTimer = setInterval(async () => {\n // If no pong has ever been received.\n if (!this.lastPongTime) {\n if (!firstPing) {\n // On subsequent ping with no previous pong response, reload the iframe.\n this.reloadRelayer();\n firstPing = true;\n return;\n }\n } else {\n // If we have a pong, check how long ago it was received.\n const timeSinceLastPong = Date.now() - this.lastPongTime;\n if (timeSinceLastPong > PING_INTERVAL * 2) {\n // If the pong is too stale, reload the iframe.\n this.reloadRelayer();\n firstPing = true;\n return;\n }\n }\n\n // Send a new ping message and update the counter.\n await sendPing();\n firstPing = false;\n }, PING_INTERVAL);\n }\n\n // Debounce revival mechanism\n // Kill any existing PingPong interval\n /* istanbul ignore next */\n protected stopHeartBeat() {\n this.heartbeatDebounce();\n this.lastPongTime = null;\n\n if (this.heartbeatIntervalTimer) {\n clearInterval(this.heartbeatIntervalTimer);\n this.heartbeatIntervalTimer = null;\n }\n }\n}\n", "import { JsonRpcResponse } from '../core/json-rpc';\nimport { JsonRpcRequestPayload, MagicMessageEvent } from '@magic-sdk/types';\nimport { getItem, setItem } from './storage';\nimport { SDKEnvironment } from '../core/sdk-environment';\nimport { getDecryptedDeviceShare } from './device-share-web-crypto';\nimport { createJwt } from './web-crypto';\n\ninterface StandardizedResponse {\n id?: string | number;\n response?: JsonRpcResponse;\n}\n\ninterface StandardizedMagicRequest {\n msgType: string;\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[];\n jwt?: string;\n rt?: string;\n deviceShare?: string;\n}\n\n/**\n * Get the originating payload from a batch request using the specified `id`.\n */\nexport function getRequestPayloadFromBatch(\n requestPayload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n id?: string | number | null,\n): JsonRpcRequestPayload | undefined {\n return id && Array.isArray(requestPayload)\n ? requestPayload.find(p => p.id === id)\n : (requestPayload as JsonRpcRequestPayload);\n}\n\n/**\n * Ensures the incoming response follows the expected schema and parses for a\n * JSON RPC payload ID.\n */\nexport function standardizeResponse(\n requestPayload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n event: MagicMessageEvent,\n): StandardizedResponse {\n const id = event.data.response?.id;\n const requestPayloadResolved = getRequestPayloadFromBatch(requestPayload, id);\n\n if (id && requestPayloadResolved) {\n // Build a standardized response object\n const response = new JsonRpcResponse(requestPayloadResolved)\n .applyResult(event.data.response.result)\n .applyError(event.data.response.error);\n\n return { id, response };\n }\n\n return {};\n}\n\nexport async function createMagicRequest(\n msgType: string,\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n networkHash: string,\n) {\n const rt = await getItem<string>('rt');\n let jwt;\n\n // only for webcrypto platforms\n if (SDKEnvironment.platform === 'web') {\n try {\n jwt = (await getItem<string>('jwt')) ?? (await createJwt());\n } catch (e) {\n console.error('webcrypto error', e);\n }\n }\n\n const request: StandardizedMagicRequest = { msgType, payload };\n\n if (jwt) {\n request.jwt = jwt;\n }\n if (jwt && rt) {\n request.rt = rt;\n }\n\n // Grab the device share if it exists for the network\n const decryptedDeviceShare = await getDecryptedDeviceShare(networkHash);\n if (decryptedDeviceShare) {\n request.deviceShare = decryptedDeviceShare;\n }\n\n return request;\n}\n\nexport async function persistMagicEventRefreshToken(event: MagicMessageEvent) {\n if (!event.data.rt) {\n return;\n }\n\n await setItem('rt', event.data.rt);\n}\n\nexport function debounce<T extends (...args: unknown[]) => void>(func: T, delay: number) {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n return function (...args: Parameters<T>): void {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n func(...args);\n }, delay);\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n", "/* istanbul ignore file */\n\nexport { SDKBase } from './core/sdk';\nexport type { MagicSDKAdditionalConfiguration, MagicSDKExtensionsOption } from './core/sdk';\nexport { createSDK } from './core/sdk-environment';\nexport { ViewController } from './core/view-controller';\nexport * from './core/sdk-exceptions';\nexport { Extension } from './modules/base-extension';\nexport type { WithExtensions, InstanceWithExtensions } from './modules/base-extension';\nexport * from './util';\n", "/* eslint-disable */\n/* istanbul ignore file */\n\n// DO NOT CHANGE THIS FILE.\n//\n// We have to bundle `semver` ourselves due to a long-standing cyclic dependency\n// which causes Rollup to break the `satisfies` function.\n//\n// See:\n// - https://github.com/magiclabs/magic-js/issues/198\n// - https://github.com/rollup/plugins/issues/879\n// - https://github.com/npm/node-semver/issues/318\n// - https://github.com/npm/node-semver/issues/381\n\nfunction createCommonjsModule(e){const r={exports:{}};return e(r,r.exports),r.exports}const SEMVER_SPEC_VERSION=\"2.0.0\",MAX_LENGTH$2=256,MAX_SAFE_INTEGER$1=Number.MAX_SAFE_INTEGER||9007199254740991,MAX_SAFE_COMPONENT_LENGTH=16,constants={SEMVER_SPEC_VERSION:\"2.0.0\",MAX_LENGTH:256,MAX_SAFE_INTEGER:MAX_SAFE_INTEGER$1,MAX_SAFE_COMPONENT_LENGTH:16},debug=\"object\"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error(\"SEMVER\",...e):()=>{},debug_1=debug,re_1=createCommonjsModule(function(e,r){const{MAX_SAFE_COMPONENT_LENGTH:t}=constants,s=(r=e.exports={}).re=[],i=r.src=[],o=r.t={};let a=0;const n=(e,r,t)=>{const n=a++;debug_1(n,r),o[e]=n,i[n]=r,s[n]=new RegExp(r,t?\"g\":void 0)};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,${t}})`+`(?:\\\\.(\\\\d{1,${t}}))?`+`(?:\\\\.(\\\\d{1,${t}}))?`+\"(?:$|[^\\\\d])\"),n(\"COERCERTL\",i[o.COERCE],!0),n(\"LONETILDE\",\"(?:~>?)\"),n(\"TILDETRIM\",`(\\\\s*)${i[o.LONETILDE]}\\\\s+`,!0),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+`,!0),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]})`,!0),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*$\")}),numeric=/^[0-9]+$/,compareIdentifiers$1=(e,r)=>{const t=numeric.test(e),s=numeric.test(r);return t&&s&&(e=+e,r=+r),e===r?0:t&&!s?-1:s&&!t?1:e<r?-1:1},rcompareIdentifiers=(e,r)=>compareIdentifiers$1(r,e),identifiers={compareIdentifiers:compareIdentifiers$1,rcompareIdentifiers:rcompareIdentifiers},{MAX_LENGTH:MAX_LENGTH$1,MAX_SAFE_INTEGER:MAX_SAFE_INTEGER}=constants,{re:re$4,t:t$4}=re_1,{compareIdentifiers:compareIdentifiers}=identifiers;class SemVer{constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof SemVer){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(\"string\"!=typeof e)throw new TypeError(`Invalid Version: ${e}`);if(e.length>MAX_LENGTH$1)throw new TypeError(`version is longer than ${MAX_LENGTH$1} characters`);debug_1(\"SemVer\",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;const t=e.trim().match(r.loose?re$4[t$4.LOOSE]:re$4[t$4.FULL]);if(!t)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+t[1],this.minor=+t[2],this.patch=+t[3],this.major>MAX_SAFE_INTEGER||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>MAX_SAFE_INTEGER||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>MAX_SAFE_INTEGER||this.patch<0)throw new TypeError(\"Invalid patch version\");t[4]?this.prerelease=t[4].split(\".\").map(e=>{if(/^[0-9]+$/.test(e)){const r=+e;if(r>=0&&r<MAX_SAFE_INTEGER)return r}return e}):this.prerelease=[],this.build=t[5]?t[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(debug_1(\"SemVer.compare\",this.version,this.options,e),!(e instanceof SemVer)){if(\"string\"==typeof e&&e===this.version)return 0;e=new SemVer(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){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)}comparePre(e){if(e instanceof SemVer||(e=new SemVer(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 r=0;do{const t=this.prerelease[r],s=e.prerelease[r];if(debug_1(\"prerelease compare\",r,t,s),void 0===t&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===t)return-1;if(t!==s)return compareIdentifiers(t,s)}while(++r)}compareBuild(e){e instanceof SemVer||(e=new SemVer(e,this.options));let r=0;do{const t=this.build[r],s=e.build[r];if(debug_1(\"prerelease compare\",r,t,s),void 0===t&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===t)return-1;if(t!==s)return compareIdentifiers(t,s)}while(++r)}inc(e,r){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",r);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",r);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",r),this.inc(\"pre\",r);break;case\"prerelease\":0===this.prerelease.length&&this.inc(\"patch\",r),this.inc(\"pre\",r);break;case\"major\":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case\"pre\":if(0===this.prerelease.length)this.prerelease=[0];else{let e=this.prerelease.length;for(;--e>=0;)\"number\"==typeof this.prerelease[e]&&(this.prerelease[e]++,e=-2);-1===e&&this.prerelease.push(0)}r&&(this.prerelease[0]===r?isNaN(this.prerelease[1])&&(this.prerelease=[r,0]):this.prerelease=[r,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}}const compare=(e,r,t)=>new SemVer(e,t).compare(new SemVer(r,t)),compare_1=compare,eq=(e,r,t)=>0===compare_1(e,r,t),eq_1=eq,neq=(e,r,t)=>0!==compare_1(e,r,t),neq_1=neq,gt=(e,r,t)=>compare_1(e,r,t)>0,gt_1=gt,gte=(e,r,t)=>compare_1(e,r,t)>=0,gte_1=gte,lt=(e,r,t)=>compare_1(e,r,t)<0,lt_1=lt,lte=(e,r,t)=>compare_1(e,r,t)<=0,lte_1=lte,cmp=(e,r,t,s)=>{switch(r){case\"===\":return\"object\"==typeof e&&(e=e.version),\"object\"==typeof t&&(t=t.version),e===t;case\"!==\":return\"object\"==typeof e&&(e=e.version),\"object\"==typeof t&&(t=t.version),e!==t;case\"\":case\"=\":case\"==\":return eq_1(e,t,s);case\"!=\":return neq_1(e,t,s);case\">\":return gt_1(e,t,s);case\">=\":return gte_1(e,t,s);case\"<\":return lt_1(e,t,s);case\"<=\":return lte_1(e,t,s);default:throw new TypeError(`Invalid operator: ${r}`)}},cmp_1=cmp,ANY=Symbol(\"SemVer ANY\");class Comparator{static get ANY(){return ANY}constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof Comparator){if(e.loose===!!r.loose)return e;e=e.value}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)}parse(e){const r=this.options.loose?re$3[t$3.COMPARATORLOOSE]:re$3[t$3.COMPARATOR],t=e.match(r);if(!t)throw new TypeError(`Invalid comparator: ${e}`);this.operator=void 0!==t[1]?t[1]:\"\",\"=\"===this.operator&&(this.operator=\"\"),t[2]?this.semver=new SemVer(t[2],this.options.loose):this.semver=ANY}toString(){return this.value}test(e){if(debug_1(\"Comparator.test\",e,this.options.loose),this.semver===ANY||e===ANY)return!0;if(\"string\"==typeof e)try{e=new SemVer(e,this.options)}catch(e){return!1}return cmp_1(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Comparator))throw new TypeError(\"a Comparator is required\");if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),\"\"===this.operator)return\"\"===this.value||new Range(e.value,r).test(this.value);if(\"\"===e.operator)return\"\"===e.value||new Range(this.value,r).test(e.semver);const t=!(\">=\"!==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);return t||s||i&&o||a||n}}const{re:re$3,t:t$3}=re_1;class Range{constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof Range)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new Range(e.raw,r);if(e instanceof Comparator)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(e=>this.parseRange(e.trim())).filter(e=>e.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){const{loose:r}=this.options;e=e.trim();const t=r?re$2[t$2.HYPHENRANGELOOSE]:re$2[t$2.HYPHENRANGE];e=e.replace(t,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(\" \");const s=r?re$2[t$2.COMPARATORLOOSE]:re$2[t$2.COMPARATOR];return e.split(\" \").map(e=>parseComparator(e,this.options)).join(\" \").split(/\\s+/).map(e=>replaceGTE0(e,this.options)).filter(this.options.loose?e=>!!e.match(s):()=>!0).map(e=>new Comparator(e,this.options))}intersects(e,r){if(!(e instanceof Range))throw new TypeError(\"a Range is required\");return this.set.some(t=>isSatisfiable(t,r)&&e.set.some(e=>isSatisfiable(e,r)&&t.every(t=>e.every(e=>t.intersects(e,r)))))}test(e){if(!e)return!1;if(\"string\"==typeof e)try{e=new SemVer(e,this.options)}catch(e){return!1}for(let r=0;r<this.set.length;r++)if(testSet(this.set[r],e,this.options))return!0;return!1}}const{re:re$2,t:t$2,comparatorTrimReplace:comparatorTrimReplace,tildeTrimReplace:tildeTrimReplace,caretTrimReplace:caretTrimReplace}=re_1,isSatisfiable=(e,r)=>{let t=!0;const s=e.slice();let i=s.pop();for(;t&&s.length;)t=s.every(e=>i.intersects(e,r)),i=s.pop();return t},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),isX=e=>!e||\"x\"===e.toLowerCase()||\"*\"===e,replaceTildes=(e,r)=>e.trim().split(/\\s+/).map(e=>replaceTilde(e,r)).join(\" \"),replaceTilde=(e,r)=>{const t=r.loose?re$2[t$2.TILDELOOSE]:re$2[t$2.TILDE];return e.replace(t,(r,t,s,i,o)=>{let a;return debug_1(\"tilde\",e,r,t,s,i,o),isX(t)?a=\"\":isX(s)?a=`>=${t}.0.0 <${+t+1}.0.0-0`:isX(i)?a=`>=${t}.${s}.0 <${t}.${+s+1}.0-0`:o?(debug_1(\"replaceTilde pr\",o),a=`>=${t}.${s}.${i}-${o} <${t}.${+s+1}.0-0`):a=`>=${t}.${s}.${i} <${t}.${+s+1}.0-0`,debug_1(\"tilde return\",a),a})},replaceCarets=(e,r)=>e.trim().split(/\\s+/).map(e=>replaceCaret(e,r)).join(\" \"),replaceCaret=(e,r)=>{debug_1(\"caret\",e,r);const t=r.loose?re$2[t$2.CARETLOOSE]:re$2[t$2.CARET],s=r.includePrerelease?\"-0\":\"\";return e.replace(t,(r,t,i,o,a)=>{let n;return debug_1(\"caret\",e,r,t,i,o,a),isX(t)?n=\"\":isX(i)?n=`>=${t}.0.0${s} <${+t+1}.0.0-0`:isX(o)?n=\"0\"===t?`>=${t}.${i}.0${s} <${t}.${+i+1}.0-0`:`>=${t}.${i}.0${s} <${+t+1}.0.0-0`:a?(debug_1(\"replaceCaret pr\",a),n=\"0\"===t?\"0\"===i?`>=${t}.${i}.${o}-${a} <${t}.${i}.${+o+1}-0`:`>=${t}.${i}.${o}-${a} <${t}.${+i+1}.0-0`:`>=${t}.${i}.${o}-${a} <${+t+1}.0.0-0`):(debug_1(\"no pr\"),n=\"0\"===t?\"0\"===i?`>=${t}.${i}.${o}${s} <${t}.${i}.${+o+1}-0`:`>=${t}.${i}.${o}${s} <${t}.${+i+1}.0-0`:`>=${t}.${i}.${o} <${+t+1}.0.0-0`),debug_1(\"caret return\",n),n})},replaceXRanges=(e,r)=>(debug_1(\"replaceXRanges\",e,r),e.split(/\\s+/).map(e=>replaceXRange(e,r)).join(\" \")),replaceXRange=(e,r)=>{e=e.trim();const t=r.loose?re$2[t$2.XRANGELOOSE]:re$2[t$2.XRANGE];return e.replace(t,(t,s,i,o,a,n)=>{debug_1(\"xRange\",e,t,s,i,o,a,n);const E=isX(i),p=E||isX(o),l=p||isX(a),c=l;return\"=\"===s&&c&&(s=\"\"),n=r.includePrerelease?\"-0\":\"\",E?t=\">\"===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\"),t=`${s+i}.${o}.${a}${n}`):p?t=`>=${i}.0.0${n} <${+i+1}.0.0-0`:l&&(t=`>=${i}.${o}.0${n} <${i}.${+o+1}.0-0`),debug_1(\"xRange return\",t),t})},replaceStars=(e,r)=>(debug_1(\"replaceStars\",e,r),e.trim().replace(re$2[t$2.STAR],\"\")),replaceGTE0=(e,r)=>(debug_1(\"replaceGTE0\",e,r),e.trim().replace(re$2[r.includePrerelease?t$2.GTE0PRE:t$2.GTE0],\"\")),hyphenReplace=e=>(r,t,s,i,o,a,n,E,p,l,c,$,h)=>`${t=isX(s)?\"\":isX(i)?`>=${s}.0.0${e?\"-0\":\"\"}`:isX(o)?`>=${s}.${i}.0${e?\"-0\":\"\"}`:a?`>=${t}`:`>=${t}${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(),testSet=(e,r,t)=>{for(let t=0;t<e.length;t++)if(!e[t].test(r))return!1;if(r.prerelease.length&&!t.includePrerelease){for(let t=0;t<e.length;t++)if(debug_1(e[t].semver),e[t].semver!==Comparator.ANY&&e[t].semver.prerelease.length>0){const s=e[t].semver;if(s.major===r.major&&s.minor===r.minor&&s.patch===r.patch)return!0}return!1}return!0};export const satisfies=(e,r,t)=>{try{r=new Range(r,t)}catch(e){return!1}return r.test(e)};const satisfies_1=satisfies,{MAX_LENGTH:MAX_LENGTH}=constants,{re:re$1,t:t$1}=re_1,parse=(e,r)=>{if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof SemVer)return e;if(\"string\"!=typeof e)return null;if(e.length>MAX_LENGTH)return null;if(!(r.loose?re$1[t$1.LOOSE]:re$1[t$1.FULL]).test(e))return null;try{return new SemVer(e,r)}catch(e){return null}},parse_1=parse,{re:re,t:t}=re_1;export const coerce=(e,r)=>{if(e instanceof SemVer)return e;if(\"number\"==typeof e&&(e=String(e)),\"string\"!=typeof e)return null;let s=null;if((r=r||{}).rtl){let r;for(;(r=re[t.COERCERTL].exec(e))&&(!s||s.index+s[0].length!==e.length);)s&&r.index+r[0].length===s.index+s[0].length||(s=r),re[t.COERCERTL].lastIndex=r.index+r[1].length+r[2].length;re[t.COERCERTL].lastIndex=-1}else s=e.match(re[t.COERCE]);return null===s?null:parse_1(`${s[2]}.${s[3]||\"0\"}.${s[4]||\"0\"}`,r)};\n", "function percentToByte(p: string) {\n return String.fromCharCode(parseInt(p.slice(1), 16));\n}\n\nfunction byteToPercent(b: string) {\n return `%${`00${b.charCodeAt(0).toString(16)}`.slice(-2)}`;\n}\n\n/**\n * Encodes a Base64 string. Safe for UTF-8 characters.\n * Original source is from the `universal-base64` NPM package.\n *\n * @source https://github.com/blakeembrey/universal-base64/blob/master/src/browser.ts\n */\nfunction btoaUTF8(str: string): string {\n return btoa(encodeURIComponent(str).replace(/%[0-9A-F]{2}/g, percentToByte));\n}\n\n/**\n * Decodes a Base64 string. Safe for UTF-8 characters.\n * Original source is from the `universal-base64` NPM package.\n *\n * @source https://github.com/blakeembrey/universal-base64/blob/master/src/browser.ts\n */\nfunction atobUTF8(str: string): string {\n return decodeURIComponent(Array.from(atob(str), byteToPercent).join(''));\n}\n\n/**\n * Given a JSON-serializable object, encode as a Base64 string.\n */\nexport function encodeJSON<T>(options: T): string {\n return btoaUTF8(JSON.stringify(options));\n}\n\n/**\n * Given a Base64 JSON string, decode a JavaScript object.\n */\nexport function decodeJSON<T>(queryString: string): T {\n return JSON.parse(atobUTF8(queryString));\n}\n", "import { JsonRpcError, RPCErrorCode, SDKErrorCode, SDKWarningCode } from '@magic-sdk/types';\nimport { isJsonRpcErrorCode } from '../util/type-guards';\nimport { SDKEnvironment } from './sdk-environment';\nimport { BaseExtension } from '../modules/base-extension';\n\n// --- Error/warning classes\n\n/**\n * This error type represents internal SDK errors. This could be developer\n * mistakes (or Magic's mistakes), or execution errors unrelated to standard\n * JavaScript exceptions.\n */\nexport class MagicSDKError extends Error {\n __proto__ = Error;\n\n constructor(\n public code: SDKErrorCode,\n public rawMessage: string,\n ) {\n super(`Magic SDK Error: [${code}] ${rawMessage}`);\n Object.setPrototypeOf(this, MagicSDKError.prototype);\n }\n}\n\n/**\n * This error type communicates exceptions that occur during execution in the\n * Magic `<iframe>` context.\n */\nexport class MagicRPCError extends Error {\n __proto__ = Error;\n\n public code: RPCErrorCode | number;\n public rawMessage: string;\n public data: any;\n\n constructor(sourceError?: JsonRpcError | null) {\n super();\n\n const codeNormalized = Number(sourceError?.code);\n this.rawMessage = sourceError?.message || 'Internal error';\n this.code = isJsonRpcErrorCode(codeNormalized) ? codeNormalized : RPCErrorCode.InternalError;\n this.message = `Magic RPC Error: [${this.code}] ${this.rawMessage}`;\n this.data = sourceError?.data || undefined;\n\n Object.setPrototypeOf(this, MagicRPCError.prototype);\n }\n}\n\n/**\n * In contrast to `SDKError` objects, this \"warning\" type communicates important\n * context that does not rise to the level of an exception. These should be\n * logged rather than thrown.\n */\nexport class MagicSDKWarning {\n public message: string;\n\n constructor(\n public code: SDKWarningCode,\n public rawMessage: string,\n ) {\n this.message = `Magic SDK Warning: [${code}] ${rawMessage}`;\n }\n\n /**\n * Logs this warning to the console.\n */\n public log() {\n console.warn(this.message);\n }\n}\n\n/**\n * This error type is reserved for communicating errors that arise during\n * execution of Magic SDK Extension methods. Compare this to the `SDKError`\n * type, specifically in context of Extensions.\n */\nexport class MagicExtensionError<TData = any> extends Error {\n __proto__ = Error;\n\n constructor(\n ext: BaseExtension<string>,\n public code: string | number,\n public rawMessage: string,\n public data: TData,\n ) {\n super(`Magic Extension Error (${ext.name}): [${code}] ${rawMessage}`);\n Object.setPrototypeOf(this, MagicExtensionError.prototype);\n }\n}\n\n/**\n * In contrast to `MagicExtensionError` objects, this \"warning\" type\n * communicates important context that does not rise to the level of an\n * exception. These should be logged rather than thrown.\n */\nexport class MagicExtensionWarning {\n public message: string;\n\n constructor(\n ext: BaseExtension<string>,\n public code: string | number,\n public rawMessage: string,\n ) {\n this.message = `Magic Extension Warning (${ext.name}): [${code}] ${rawMessage}`;\n }\n\n /**\n * Logs this warning to the console.\n */\n public log() {\n console.warn(this.message);\n }\n}\n\n// --- SDK error factories\n\nexport function createMissingApiKeyError() {\n return new MagicSDKError(\n SDKErrorCode.MissingApiKey,\n 'Please provide an API key that you acquired from the Magic developer dashboard.',\n );\n}\n\nexport function createModalNotReadyError() {\n return new MagicSDKError(SDKErrorCode.ModalNotReady, 'Modal is not ready');\n}\n\nexport function createMalformedResponseError() {\n return new MagicSDKError(SDKErrorCode.MalformedResponse, 'Response from the Magic iframe is malformed.');\n}\n\nexport function createExtensionNotInitializedError(member: string) {\n return new MagicSDKError(\n SDKErrorCode.ExtensionNotInitialized,\n `Extensions must be initialized with a Magic SDK instance before \\`Extension.${member}\\` can be accessed. Do not invoke \\`Extension.${member}\\` inside an extension constructor.`,\n );\n}\n\nexport function createIncompatibleExtensionsError(extensions: BaseExtension<string>[]) {\n let msg = `Some extensions are incompatible with \\`${SDKEnvironment.sdkName}@${SDKEnvironment.version}\\`:`;\n\n extensions\n .filter(ext => typeof ext.compat !== 'undefined' && ext.compat !== null)\n .forEach(ext => {\n const compat = ext.compat![SDKEnvironment.sdkName];\n\n /* istanbul ignore else */\n if (typeof compat === 'string') {\n msg += `\\n - Extension \\`${ext.name}\\` supports version(s) \\`${compat}\\``;\n } else if (!compat) {\n msg += `\\n - Extension \\`${ext.name}\\` does not support ${SDKEnvironment.platform} environments.`;\n }\n\n // Else case is irrelevant here here\n // (we filter out extensions with missing `compat` field)\n });\n\n return new MagicSDKError(SDKErrorCode.IncompatibleExtensions, msg);\n}\n\nexport function createInvalidArgumentError(options: {\n procedure: string;\n argument: number;\n expected: string;\n received: string;\n}) {\n /**\n * Parses the argument index (given by `argument`) to attach the correct ordinal suffix.\n * (i.e.: 1st, 2nd, 3rd, 4th, etc.)\n */\n const ordinalSuffix = (i: number) => {\n const iAdjusted = i + 1; // Argument is zero-indexed.\n const j = iAdjusted % 10;\n const k = iAdjusted % 100;\n if (j === 1 && k !== 11) return `${iAdjusted}st`;\n if (j === 2 && k !== 12) return `${iAdjusted}nd`;\n if (j === 3 && k !== 13) return `${iAdjusted}rd`;\n return `${iAdjusted}th`;\n };\n\n return new MagicSDKError(\n SDKErrorCode.InvalidArgument,\n `Invalid ${ordinalSuffix(options.argument)} argument given to \\`${options.procedure}\\`.\\n` +\n ` Expected: \\`${options.expected}\\`\\n` +\n ` Received: \\`${options.received}\\``,\n );\n}\n\n// --- SDK warning factories\n\nexport function createDuplicateIframeWarning() {\n return new MagicSDKWarning(SDKWarningCode.DuplicateIframe, 'Duplicate iframes found.');\n}\n\nexport function createSynchronousWeb3MethodWarning() {\n return new MagicSDKWarning(\n SDKWarningCode.SyncWeb3Method,\n '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.',\n );\n}\n\nexport function createReactNativeEndpointConfigurationWarning() {\n return new MagicSDKWarning(\n SDKWarningCode.ReactNativeEndpointConfiguration,\n `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.`,\n );\n}\n\nexport function createDeprecationWarning(options: {\n method: string;\n removalVersions: {\n [P in\n | 'magic-sdk'\n | '@magic-sdk/react-native'\n | '@magic-sdk/react-native-bare'\n | '@magic-sdk/react-native-expo']: string;\n };\n useInstead?: string;\n}) {\n const { method, removalVersions, useInstead } = options;\n\n const removalVersion = removalVersions[SDKEnvironment.sdkName];\n const useInsteadSuffix = useInstead ? ` Use \\`${useInstead}\\` instead.` : '';\n const message = `\\`${method}\\` will be removed from \\`${SDKEnvironment.sdkName}\\` in version \\`${removalVersion}\\`.${useInsteadSuffix}`;\n\n return new MagicSDKWarning(SDKWarningCode.DeprecationNotice, message);\n}\n", "/**\n * This file contains our type guards.\n *\n * Type guards are a feature of TypeScript which narrow the type signature of\n * intesection types (types that can be one thing or another).\n *\n * @see\n * https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types\n */\n\nimport { JsonRpcRequestPayload, JsonRpcResponsePayload, MagicPayloadMethod, RPCErrorCode } from '@magic-sdk/types';\n\n/**\n * Assert `value` is `undefined`.\n */\nfunction isUndefined(value: any): value is undefined {\n return typeof value === 'undefined';\n}\n\n/**\n * Assert `value` is `null`.\n */\nfunction isNull(value: any): value is null {\n return value === null;\n}\n\n/**\n * Assert `value` is `null` or `undefined`.\n */\nfunction isNil(value: any): value is null | undefined {\n return isNull(value) || isUndefined(value);\n}\n\n/**\n * Assert `value` is a `JsonRpcRequestPayload` object.\n */\nexport function isJsonRpcRequestPayload(value?: JsonRpcRequestPayload): value is JsonRpcRequestPayload {\n if (isNil(value)) return false;\n return (\n !isUndefined(value.jsonrpc) && !isUndefined(value.id) && !isUndefined(value.method) && !isUndefined(value.params)\n );\n}\n\n/**\n * Assert `value` is a `JsonRpcResponsePayload` object.\n */\nexport function isJsonRpcResponsePayload(value: any): value is JsonRpcResponsePayload {\n if (isNil(value)) return false;\n return (\n !isUndefined(value.jsonrpc) && !isUndefined(value.id) && (!isUndefined(value.result) || !isUndefined(value.error))\n );\n}\n\n/**\n * Assert `value` is a Magic SDK payload method identifier.\n */\nexport function isMagicPayloadMethod(value?: any): value is MagicPayloadMethod {\n if (isNil(value)) return false;\n return typeof value === 'string' && Object.values(MagicPayloadMethod).includes(value as any);\n}\n\n/**\n * Assert `value` is an expected JSON RPC error code.\n */\nexport function isJsonRpcErrorCode(value?: any): value is RPCErrorCode {\n if (isNil(value)) return false;\n return typeof value === 'number' && Object.values(RPCErrorCode).includes(value);\n}\n\n/**\n * Assert `value` is an empty, plain object.\n */\nexport function isEmpty(value?: any): value is {} {\n if (!value) return true;\n\n for (const key in value) {\n /* istanbul ignore else */\n if (Object.hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n\n return true;\n}\n", "import type localForage from 'localforage';\nimport type { ViewController } from './view-controller';\nimport type { SDKBase } from './sdk';\nimport type { WithExtensions } from '../modules/base-extension';\n\ntype ConstructorOf<C> = { new (...args: any[]): C };\n\n/**\n * A structure containing details about the current environment.\n * This is guaranteed to be populated before the SDK is instantiated.\n */\nexport interface SDKEnvironment {\n sdkName: 'magic-sdk' | '@magic-sdk/react-native' | '@magic-sdk/react-native-bare' | '@magic-sdk/react-native-expo';\n version: string;\n platform: 'web' | 'react-native';\n defaultEndpoint: string;\n ViewController: ConstructorOf<ViewController>;\n configureStorage: () => Promise<typeof localForage>;\n bundleId?: string | null;\n}\n\nexport const SDKEnvironment: SDKEnvironment = {} as any;\n\nexport function createSDK<SDK extends SDKBase>(\n SDKBaseCtor: ConstructorOf<SDK>,\n environment: SDKEnvironment,\n): WithExtensions<SDK> {\n Object.assign(SDKEnvironment, environment);\n return SDKBaseCtor as any;\n}\n\nexport const sdkNameToEnvName = {\n 'magic-sdk': 'magic-sdk' as const,\n '@magic-sdk/react-native': 'magic-sdk-rn' as const,\n '@magic-sdk/react-native-bare': 'magic-sdk-rn-bare' as const,\n '@magic-sdk/react-native-expo': 'magic-sdk-rn-expo' as const,\n};\n", "import {\n MagicPayloadMethod,\n LoginWithMagicLinkConfiguration,\n LoginWithSmsConfiguration,\n LoginWithEmailOTPConfiguration,\n LoginWithEmailOTPEventHandlers,\n LoginWithMagicLinkEventHandlers,\n UpdateEmailConfiguration,\n DeviceVerificationEventEmit,\n LoginWithEmailOTPEventEmit,\n UpdateEmailEventHandlers,\n UpdateEmailEventEmit,\n RecencyCheckEventEmit,\n LoginWithSmsOTPEventEmit,\n LoginWithSmsOTPEventHandlers,\n LoginWithCredentialConfiguration,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { SDKEnvironment } from '../core/sdk-environment';\nimport { isMajorVersionAtLeast } from '../util/version-check';\nimport { createDeprecationWarning } from '../core/sdk-exceptions';\n\nexport const ProductConsolidationMethodRemovalVersions = {\n 'magic-sdk': 'v18.0.0',\n '@magic-sdk/react-native': 'v14.0.0',\n '@magic-sdk/react-native-bare': 'v19.0.0',\n '@magic-sdk/react-native-expo': 'v19.0.0',\n};\n\nexport class AuthModule extends BaseModule {\n /**\n * Initiate the \"magic link\" login flow for a user. If the flow is successful,\n * this method will return a Decentralized ID token (with a default lifespan\n * of 15 minutes).\n */\n public loginWithMagicLink(configuration: LoginWithMagicLinkConfiguration) {\n const isRNMobilePackage =\n SDKEnvironment.sdkName === '@magic-sdk/react-native' ||\n SDKEnvironment.sdkName === '@magic-sdk/react-native-bare' ||\n SDKEnvironment.sdkName === '@magic-sdk/react-native-expo';\n\n // RN SDK major version is greater than or equal to v19\n if (isRNMobilePackage && isMajorVersionAtLeast(SDKEnvironment.version, 19)) {\n throw new Error(\n 'loginWithMagicLink() is deprecated for this package, please utlize a passcode method like loginWithSMS or loginWithEmailOTP instead.',\n );\n } else if (isRNMobilePackage) {\n // RN SDK major version is less than v19\n createDeprecationWarning({\n method: 'auth.loginWithMagicLink()',\n removalVersions: ProductConsolidationMethodRemovalVersions,\n useInstead: 'auth.loginWithEmailOTP()',\n }).log();\n }\n\n const { email, showUI = true, redirectURI, overrides, lifespan } = configuration;\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithMagicLinkTestMode : MagicPayloadMethod.LoginWithMagicLink,\n [{ email, showUI, redirectURI, overrides, lifespan }],\n );\n return this.request<string | null, LoginWithMagicLinkEventHandlers>(requestPayload);\n }\n\n /**\n * Initiate an SMS login flow for a user. If successful,\n * this method will return a Decenteralized ID token (with a default lifespan\n * of 15 minutes)\n */\n public loginWithSMS(configuration: LoginWithSmsConfiguration) {\n const { phoneNumber, showUI = true, lifespan } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithSmsTestMode : MagicPayloadMethod.LoginWithSms,\n [{ phoneNumber, showUI, lifespan }],\n );\n\n const handle = this.request<string | null, LoginWithSmsOTPEventHandlers>(requestPayload);\n\n if (!showUI && handle) {\n handle.on(LoginWithSmsOTPEventEmit.VerifySmsOtp, (otp: string) => {\n this.createIntermediaryEvent(LoginWithSmsOTPEventEmit.VerifySmsOtp, requestPayload.id as string)(otp);\n });\n\n handle.on(LoginWithSmsOTPEventEmit.Cancel, () => {\n this.createIntermediaryEvent(LoginWithSmsOTPEventEmit.Cancel, requestPayload.id as string)();\n });\n }\n\n return handle;\n }\n\n /**\n * Initiate an Email with OTP login flow for a user. If successful,\n * this method will return a Decenteralized ID token (with a default lifespan\n * of 15 minutes)\n */\n public loginWithEmailOTP(configuration: LoginWithEmailOTPConfiguration) {\n const { email, showUI, deviceCheckUI, overrides, lifespan } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithEmailOTPTestMode : MagicPayloadMethod.LoginWithEmailOTP,\n [{ email, showUI, deviceCheckUI, overrides, lifespan }],\n );\n const handle = this.request<string | null, LoginWithEmailOTPEventHandlers>(requestPayload);\n if (!deviceCheckUI && handle) {\n handle.on(DeviceVerificationEventEmit.Retry, () => {\n this.createIntermediaryEvent(DeviceVerificationEventEmit.Retry, requestPayload.id as any)();\n });\n }\n if (!showUI && handle) {\n handle.on(LoginWithEmailOTPEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.VerifyEmailOtp, requestPayload.id as any)(otp);\n });\n handle.on(LoginWithEmailOTPEventEmit.VerifyMFACode, (mfa: string) => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.VerifyMFACode, requestPayload.id as string)(mfa);\n });\n handle.on(LoginWithEmailOTPEventEmit.LostDevice, () => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.LostDevice, requestPayload.id as string)();\n });\n handle.on(LoginWithEmailOTPEventEmit.VerifyRecoveryCode, (recoveryCode: string) => {\n this.createIntermediaryEvent(\n LoginWithEmailOTPEventEmit.VerifyRecoveryCode,\n requestPayload.id as string,\n )(recoveryCode);\n });\n handle.on(LoginWithEmailOTPEventEmit.Cancel, () => {\n this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.Cancel, requestPayload.id as any)();\n });\n }\n return handle;\n }\n\n /**\n * Log a user in with a special one-time-use credential token. This is\n * currently used during magic link flows with a configured redirect to\n * hydrate the user session at the end of the flow. If the flow is successful,\n * this method will return a Decentralized ID token (with a default lifespan\n * of 15 minutes).\n *\n * If no argument is provided, a credential is automatically parsed from\n * `window.location.search`.\n */\n public loginWithCredential(configuration?: LoginWithCredentialConfiguration) {\n const { credentialOrQueryString, lifespan } = configuration || {};\n let credentialResolved = credentialOrQueryString ?? '';\n\n if (!credentialOrQueryString && SDKEnvironment.platform === 'web') {\n credentialResolved = window.location.search;\n\n // Remove the query from the redirect callback as a precaution.\n const urlWithoutQuery = window.location.origin + window.location.pathname;\n window.history.replaceState(null, '', urlWithoutQuery);\n }\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithCredentialTestMode : MagicPayloadMethod.LoginWithCredential,\n [credentialResolved, lifespan],\n );\n\n return this.request<string | null>(requestPayload);\n }\n\n // Custom Auth\n public setAuthorizationToken(jwt: string) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.SetAuthorizationToken, [{ jwt }]);\n return this.request<boolean>(requestPayload);\n }\n\n public updateEmailWithUI(configuration: UpdateEmailConfiguration) {\n const { email, showUI = true } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.UpdateEmailTestMode : MagicPayloadMethod.UpdateEmail,\n [{ email, showUI }],\n );\n\n const handle = this.request<string | null, UpdateEmailEventHandlers>(requestPayload);\n\n if (!showUI) {\n handle.on(RecencyCheckEventEmit.Retry, () => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.Retry, requestPayload.id as any)();\n });\n handle.on(RecencyCheckEventEmit.Cancel, () => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.Cancel, requestPayload.id as any)();\n });\n handle.on(RecencyCheckEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyEmailOtp, requestPayload.id as string)(otp);\n });\n handle.on(RecencyCheckEventEmit.VerifyMFACode, (mfa: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyMFACode, requestPayload.id as string)(mfa);\n });\n handle.on(UpdateEmailEventEmit.RetryWithNewEmail, (newEmail?) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.RetryWithNewEmail, requestPayload.id as any)(newEmail);\n });\n handle.on(UpdateEmailEventEmit.Cancel, () => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.Cancel, requestPayload.id as any)();\n });\n handle.on(UpdateEmailEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.VerifyEmailOtp, requestPayload.id as any)(otp);\n });\n }\n return handle;\n }\n}\n", "import {\n JsonRpcRequestPayload,\n MagicOutgoingWindowMessage,\n MagicIncomingWindowMessage,\n MagicPayloadMethod,\n IntermediaryEvents,\n routeToMagicMethods,\n} from '@magic-sdk/types';\nimport { createMalformedResponseError, MagicRPCError } from '../core/sdk-exceptions';\nimport type { SDKBase } from '../core/sdk';\nimport { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createPromiEvent } from '../util/promise-tools';\nimport type { ViewController } from '../core/view-controller';\nimport type { EventsDefinition } from '../util/events';\n\nexport class BaseModule {\n constructor(protected sdk: SDKBase) {}\n\n /**\n * The `ViewController` for the SDK instance registered to this module.\n */\n protected get overlay(): ViewController {\n return (this.sdk as any).overlay;\n }\n\n /**\n * Emits promisified requests to the Magic `<iframe>` context.\n */\n protected request<ResultType = any, Events extends EventsDefinition = void>(payload: Partial<JsonRpcRequestPayload>) {\n if (this.sdk.thirdPartyWallets.isConnected && !routeToMagicMethods.includes(payload.method as MagicPayloadMethod)) {\n const promiEvent = createPromiEvent<ResultType, Events>((resolve, reject) => {\n this.sdk.thirdPartyWallets.requestOverride(payload).then(resolve).catch(reject);\n });\n return promiEvent;\n }\n\n const responsePromise = this.overlay.post<ResultType>(\n MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,\n standardizeJsonRpcRequestPayload(payload),\n );\n\n // PromiEvent-ify the response.\n const promiEvent = createPromiEvent<ResultType, Events>((resolve, reject) => {\n responsePromise\n .then(res => {\n cleanupEvents();\n if (res.hasError) reject(new MagicRPCError(res.payload.error));\n else if (res.hasResult) resolve(res.payload.result as ResultType);\n else throw createMalformedResponseError();\n })\n .catch(err => {\n cleanupEvents();\n reject(err);\n });\n });\n\n // Listen for events from the `<iframe>` associated with the current payload\n // and emit those to `PromiEvent` subscribers.\n const cleanupEvents = this.overlay.on(MagicIncomingWindowMessage.MAGIC_HANDLE_EVENT, evt => {\n const { response } = evt.data;\n\n if (response.id === payload.id && response.result?.event) {\n const { event, params = [] } = response.result;\n promiEvent.emit(event, ...params);\n }\n });\n\n return promiEvent;\n }\n\n // Creates an intermediary event which takes a typed event and a payload ID\n protected createIntermediaryEvent<T = Function>(eventType: IntermediaryEvents, payloadId: string) {\n const e = (args: any) => {\n const res = createJsonRpcRequestPayload(MagicPayloadMethod.IntermediaryEvent, [{ payloadId, eventType, args }]);\n this.request(res);\n };\n return e as unknown as T;\n }\n}\n", "function* createIntGenerator(): Generator<number, number, void> {\n let index = 0;\n\n while (true) {\n /* istanbul ignore next */\n if (index < Number.MAX_SAFE_INTEGER) yield ++index;\n else index = 0;\n }\n}\n\nconst intGenerator = createIntGenerator();\n\n/**\n * Get an integer ID for attaching to a JSON RPC request payload.\n */\nexport function getPayloadId(): number {\n return intGenerator.next().value;\n}\n", "import { JsonRpcRequestPayload, JsonRpcResponsePayload, JsonRpcError } from '@magic-sdk/types';\nimport { isJsonRpcResponsePayload } from '../util/type-guards';\nimport { getPayloadId } from '../util/get-payload-id';\n\nconst payloadPreprocessedSymbol = Symbol('Payload pre-processed by Magic SDK');\n\n/**\n * To avoid \"pre-processing\" a payload more than once (and needlessly\n * incrementing our payload ID generator), we attach a symbol to detect a\n * payloads we've already visited.\n */\nfunction markPayloadAsPreprocessed<T extends Partial<JsonRpcRequestPayload>>(payload: T): T {\n Object.defineProperty(payload, payloadPreprocessedSymbol, {\n value: true,\n enumerable: false,\n });\n\n return payload;\n}\n\n/**\n * Returns `true` if the payload has been visited by our \"pre-processing,\" in\n * `standardizeJsonRpcRequestPayload(...)`.\n */\nfunction isPayloadPreprocessed<T extends Partial<JsonRpcRequestPayload>>(payload: T) {\n return !!(payload as any)[payloadPreprocessedSymbol];\n}\n\n/**\n * Returns a full `JsonRpcRequestPayload` from a potentially incomplete payload\n * object. This method mutates the given `payload` to preserve compatibility\n * with external libraries that perform their own `JsonRpcRequestPayload.id`\n * check to associate responses (such as `web3`).\n *\n * This function is no-op if the payload has already been processed before.\n */\nexport function standardizeJsonRpcRequestPayload(payload: Partial<JsonRpcRequestPayload>) {\n if (!isPayloadPreprocessed(payload)) {\n payload.jsonrpc = payload.jsonrpc ?? '2.0';\n payload.id = getPayloadId();\n payload.method = payload.method ?? 'noop';\n payload.params = payload.params ?? [];\n\n markPayloadAsPreprocessed(payload);\n }\n\n return payload as JsonRpcRequestPayload;\n}\n\n/**\n * Build a valid JSON RPC payload for emitting to the Magic SDK iframe relayer.\n */\nexport function createJsonRpcRequestPayload(method: string, params: any[] = []): JsonRpcRequestPayload {\n return markPayloadAsPreprocessed({\n params,\n method,\n jsonrpc: '2.0',\n id: getPayloadId(),\n });\n}\n\n/**\n * Formats and standardizes a JSON RPC 2.0 response from a number of potential\n * sources.\n */\nexport class JsonRpcResponse<ResultType = any> {\n private readonly _jsonrpc: string;\n private readonly _id: string | number | null;\n private _result?: ResultType | null;\n private _error?: JsonRpcError | null;\n\n constructor(responsePayload: JsonRpcResponsePayload);\n constructor(response: JsonRpcResponse<ResultType>);\n constructor(requestPayload: JsonRpcRequestPayload);\n constructor(responseOrPayload: JsonRpcResponsePayload | JsonRpcResponse<ResultType> | JsonRpcRequestPayload) {\n if (responseOrPayload instanceof JsonRpcResponse) {\n this._jsonrpc = responseOrPayload.payload.jsonrpc;\n this._id = responseOrPayload.payload.id;\n this._result = responseOrPayload.payload.result;\n this._error = responseOrPayload.payload.error;\n } else if (isJsonRpcResponsePayload(responseOrPayload)) {\n this._jsonrpc = responseOrPayload.jsonrpc;\n this._id = responseOrPayload.id;\n this._result = responseOrPayload.result;\n this._error = responseOrPayload.error;\n } else {\n this._jsonrpc = responseOrPayload.jsonrpc;\n this._id = responseOrPayload.id;\n this._result = undefined;\n this._error = undefined;\n }\n }\n\n public applyError(error?: JsonRpcError | null) {\n this._error = error;\n return this;\n }\n\n public applyResult(result?: ResultType | null) {\n this._result = result;\n return this;\n }\n\n public get hasError() {\n return typeof this._error !== 'undefined' && this._error !== null;\n }\n\n public get hasResult() {\n return typeof this._result !== 'undefined';\n }\n\n public get payload(): JsonRpcResponsePayload {\n return {\n jsonrpc: this._jsonrpc,\n id: this._id,\n result: this._result,\n error: this._error,\n };\n }\n}\n", "import { UserEventsEmit, UserEventsOnReceived } from '@magic-sdk/types';\nimport { TypedEmitter, EventsDefinition, createTypedEmitter } from './events';\n\n/**\n * Extends `Promise` with a polymorphic `this` type to accomodate arbitrary\n * `Promise` API extensions.\n */\ninterface ExtendedPromise<T> extends Promise<T> {\n then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): ExtendedPromise<TResult1 | TResult2> & this;\n\n catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,\n ): ExtendedPromise<T | TResult> & this;\n\n finally(onfinally?: (() => void) | undefined | null): ExtendedPromise<T> & this;\n}\n\n/**\n * A `Promise` and `EventEmitter` all in one!\n */\nexport type PromiEvent<TResult, TEvents extends EventsDefinition = void> = ExtendedPromise<TResult> &\n TypedEmitter<TEvents extends void ? DefaultEvents<TResult> : TEvents & DefaultEvents<TResult>>;\n\n/**\n * Default events attached to every `PromiEvent`.\n */\ntype DefaultEvents<TResult> = {\n done: (result: TResult) => void;\n error: (reason: any) => void;\n settled: () => void;\n [UserEventsEmit.ClosedByUser]: () => void;\n};\n\n/**\n * A `Promise` executor with can be optionally asynchronous.\n */\ntype AsyncPromiseExecutor<TResult> = (\n resolve: (value: TResult | PromiseLike<TResult>) => void,\n reject: (reason?: any) => void,\n) => void | Promise<void>;\n\nconst promiEventBrand = Symbol('isPromiEvent');\n\n/**\n * Returns `true` if the given `value` is a `PromiEvent`.\n */\nexport function isPromiEvent(value: any): value is PromiEvent<any> {\n return !!value[promiEventBrand];\n}\n\n/**\n * Create a native JavaScript `Promise` overloaded with strongly-typed methods\n * from `EventEmitter`.\n */\nexport function createPromiEvent<TResult, TEvents extends EventsDefinition = void>(\n executor: AsyncPromiseExecutor<TResult>,\n): PromiEvent<TResult, TEvents extends void ? DefaultEvents<TResult> : TEvents & DefaultEvents<TResult>> {\n const promise = createPromise(executor);\n const { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter<\n TEvents & DefaultEvents<TResult>\n >();\n\n // We save the original `Promise` methods to the following symbols so we can\n // access them internally.\n const thenSymbol = Symbol('Promise.then');\n const catchSymbol = Symbol('Promise.catch');\n const finallySymbol = Symbol('Promise.finally');\n\n /**\n * Ensures the next object in the `PromiEvent` chain is overloaded with\n * `EventEmitter` methods.\n */\n const createChainingPromiseMethod =\n (method: typeof thenSymbol | typeof catchSymbol | typeof finallySymbol, source: Promise<any>) =>\n (...args: any[]) => {\n const nextPromise = (source as any)[method].apply(source, args);\n return promiEvent(nextPromise);\n };\n\n /**\n * Builds a `PromiEvent` by assigning `EventEmitter` methods to a native\n * `Promise` object.\n */\n const promiEvent = (source: any) => {\n return Object.assign(source, {\n [promiEventBrand]: true,\n\n [thenSymbol]: source[thenSymbol] || source.then,\n [catchSymbol]: source[catchSymbol] || source.catch,\n [finallySymbol]: source[finallySymbol] || source.finally,\n\n then: createChainingPromiseMethod(thenSymbol, source),\n catch: createChainingPromiseMethod(catchSymbol, source),\n finally: createChainingPromiseMethod(finallySymbol, source),\n\n on: createChainingEmitterMethod('on', source),\n once: createChainingEmitterMethod('once', source),\n addListener: createChainingEmitterMethod('addListener', source),\n\n off: createChainingEmitterMethod('off', source),\n removeListener: createChainingEmitterMethod('removeListener', source),\n removeAllListeners: createChainingEmitterMethod('removeAllListeners', source),\n\n emit: createBoundEmitterMethod('emit'),\n eventNames: createBoundEmitterMethod('eventNames'),\n listeners: createBoundEmitterMethod('listeners'),\n listenerCount: createBoundEmitterMethod('listenerCount'),\n });\n };\n\n const result = promiEvent(\n promise.then(\n (resolved) => {\n // Emit default completion events and resolve result.\n result.emit('done', resolved);\n result.emit('settled');\n return resolved;\n },\n\n (err) => {\n // Emit default error events and re-throw.\n result.emit('error', err);\n result.emit('settled');\n throw err;\n },\n ),\n );\n\n result.on(UserEventsOnReceived.ClosedByUser, () => {\n result.emit(UserEventsEmit.ClosedByUser);\n });\n return result;\n}\n\n/**\n * Creates a `Promise` with an **async executor** that automatically catches\n * errors occurring within the executor. Nesting promises in this way is usually\n * deemed an _anti-pattern_, but it's useful and clean when promisifying the\n * event-based code that's inherent to JSON RPC.\n *\n * So, here we solve the issue of nested promises by ensuring that no errors\n * mistakenly go unhandled!\n */\nexport function createPromise<TResult>(executor: AsyncPromiseExecutor<TResult>) {\n return new Promise<TResult>((resolve, reject) => {\n const result = executor(resolve, reject);\n Promise.resolve(result).catch(reject);\n });\n}\n", "import EventEmitter from 'eventemitter3';\n\nexport type EventsDefinition = { [K in string | symbol]: (...args: any[]) => void } | void;\n\n/**\n * An extension of `EventEmitter` (provided by `eventemitter3`) with an adjusted\n * type interface that supports the unique structure of Magic SDK modules.\n */\nexport class TypedEmitter<Events extends EventsDefinition = void> extends EventEmitter<\n Events extends void ? string | symbol : Events\n> {}\n\ntype ChainingMethods = 'on' | 'once' | 'addListener' | 'off' | 'removeListener' | 'removeAllListeners';\ntype NonChainingMethods = 'emit' | 'eventNames' | 'listeners' | 'listenerCount';\n\ntype ReplaceReturnType<T extends (...a: any) => any, TNewReturn> = (...a: Parameters<T>) => TNewReturn;\n\n/**\n * Creates a `TypedEmitter` instance and returns helper functions for easily\n * mixing `TypedEmitter` methods into other objects.\n */\nexport function createTypedEmitter<Events extends EventsDefinition = void>() {\n const emitter = new TypedEmitter<Events>();\n\n const createChainingEmitterMethod = <T1 extends ChainingMethods, T2>(\n method: T1,\n source: T2,\n ): ReplaceReturnType<TypedEmitter[T1], T2> => {\n return (...args: any[]) => {\n (emitter as any)[method].apply(emitter, args);\n return source;\n };\n };\n\n const createBoundEmitterMethod = <T extends NonChainingMethods>(method: T): TypedEmitter[T] => {\n return (...args: any[]) => {\n return (emitter as any)[method].apply(emitter, args);\n };\n };\n\n return {\n emitter,\n createChainingEmitterMethod,\n createBoundEmitterMethod,\n };\n}\n", "export function isMajorVersionAtLeast(version: string, majorVersion: number): boolean {\n // Split the version string into major, minor, and patch versions\n const [major] = version.split('.').map(Number);\n\n // Check if the major version is at least the required major version\n return major >= majorVersion;\n}\n", "import {\n GetIdTokenConfiguration,\n MagicPayloadMethod,\n MagicUserMetadata,\n GenerateIdTokenConfiguration,\n UserInfo,\n RequestUserInfoScope,\n RecoverAccountConfiguration,\n ShowSettingsConfiguration,\n EnableMFAConfiguration,\n EnableMFAEventEmit,\n EnableMFAEventHandlers,\n DisableMFAConfiguration,\n DisableMFAEventHandlers,\n DisableMFAEventEmit,\n RecencyCheckEventEmit,\n RecoveryFactorEventHandlers,\n RecoveryFactorEventEmit,\n RecoverAccountEventHandlers,\n RecoverAccountEventEmit,\n UpdateEmailEventHandlers,\n UpdateEmailEventEmit,\n} from '@magic-sdk/types';\nimport { getItem, setItem, removeItem } from '../util/storage';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { clearDeviceShares } from '../util/device-share-web-crypto';\nimport { createPromiEvent } from '../util';\n\ntype UserLoggedOutCallback = (loggedOut: boolean) => void;\n\nexport class UserModule extends BaseModule {\n public getIdToken(configuration?: GetIdTokenConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GetIdTokenTestMode : MagicPayloadMethod.GetIdToken,\n [configuration],\n );\n return this.request<string>(requestPayload);\n }\n\n public generateIdToken(configuration?: GenerateIdTokenConfiguration) {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GenerateIdTokenTestMode : MagicPayloadMethod.GenerateIdToken,\n [configuration],\n );\n return this.request<string>(requestPayload);\n }\n\n public getInfo() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.GetInfo, []);\n return this.request<MagicUserMetadata>(requestPayload);\n }\n\n public isLoggedIn() {\n return createPromiEvent<boolean, any>(async (resolve, reject) => {\n try {\n let cachedIsLoggedIn = false;\n if (this.sdk.useStorageCache) {\n cachedIsLoggedIn = (await getItem(this.localForageIsLoggedInKey)) === 'true';\n\n // if isLoggedIn is true on storage, optimistically resolve with true\n // if it is false, we use `usr.isLoggedIn` as the source of truth.\n if (cachedIsLoggedIn) {\n resolve(true);\n }\n }\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.IsLoggedInTestMode : MagicPayloadMethod.IsLoggedIn,\n );\n const isLoggedInResponse = await this.request<boolean>(requestPayload);\n if (this.sdk.useStorageCache) {\n if (isLoggedInResponse) {\n setItem(this.localForageIsLoggedInKey, true);\n } else {\n removeItem(this.localForageIsLoggedInKey);\n }\n if (cachedIsLoggedIn && !isLoggedInResponse) {\n this.emitUserLoggedOut(true);\n }\n }\n resolve(isLoggedInResponse);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n public logout() {\n removeItem(this.localForageIsLoggedInKey);\n clearDeviceShares();\n\n return createPromiEvent<boolean, any>(async (resolve, reject) => {\n try {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LogoutTestMode : MagicPayloadMethod.Logout,\n );\n const response = await this.request<boolean>(requestPayload);\n if (this.sdk.useStorageCache) {\n this.emitUserLoggedOut(response);\n }\n resolve(response);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n /* Request email address from logged in user */\n public requestInfoWithUI(scope?: RequestUserInfoScope) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RequestUserInfoWithUI, scope ? [scope] : []);\n return this.request<UserInfo>(requestPayload);\n }\n\n public showSettings(configuration?: ShowSettingsConfiguration) {\n const { showUI = true } = configuration || {};\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.UserSettingsTestMode : MagicPayloadMethod.UserSettings,\n [configuration],\n );\n const handle = this.request<string | null, RecoveryFactorEventHandlers>(requestPayload);\n if (!showUI && handle) {\n handle.on(RecoveryFactorEventEmit.SendNewPhoneNumber, (phone_number: string) => {\n this.createIntermediaryEvent(\n RecoveryFactorEventEmit.SendNewPhoneNumber,\n requestPayload.id as string,\n )(phone_number);\n });\n handle.on(RecoveryFactorEventEmit.SendOtpCode, (otp: string) => {\n this.createIntermediaryEvent(RecoveryFactorEventEmit.SendOtpCode, requestPayload.id as string)(otp);\n });\n handle.on(RecoveryFactorEventEmit.StartEditPhoneNumber, () => {\n this.createIntermediaryEvent(RecoveryFactorEventEmit.StartEditPhoneNumber, requestPayload.id as string)();\n });\n handle.on(RecoveryFactorEventEmit.Cancel, () => {\n this.createIntermediaryEvent(RecoveryFactorEventEmit.Cancel, requestPayload.id as string)();\n });\n handle.on(RecencyCheckEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyEmailOtp, requestPayload.id as string)(otp);\n });\n }\n return handle;\n }\n\n public recoverAccount(configuration: RecoverAccountConfiguration) {\n const { email, showUI } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.RecoverAccountTestMode : MagicPayloadMethod.RecoverAccount,\n [{ email, showUI }],\n );\n const handle = this.request<string | boolean | null, RecoverAccountEventHandlers & UpdateEmailEventHandlers>(\n requestPayload,\n );\n\n if (!showUI && handle) {\n handle.on(RecoverAccountEventEmit.Cancel, () => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.Cancel, requestPayload.id as string)();\n });\n handle.on(RecoverAccountEventEmit.ResendSms, () => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.ResendSms, requestPayload.id as string)();\n });\n handle.on(RecoverAccountEventEmit.VerifyOtp, (otp: string) => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.VerifyOtp, requestPayload.id as string)(otp);\n });\n handle.on(RecoverAccountEventEmit.UpdateEmail, (newEmail: string) => {\n this.createIntermediaryEvent(RecoverAccountEventEmit.UpdateEmail, requestPayload.id as string)(newEmail);\n });\n\n handle.on(UpdateEmailEventEmit.Cancel, () => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.Cancel, requestPayload.id as string)();\n });\n handle.on(UpdateEmailEventEmit.RetryWithNewEmail, (newEmail?) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.RetryWithNewEmail, requestPayload.id as string)(newEmail);\n });\n\n handle.on(UpdateEmailEventEmit.VerifyEmailOtp, (otp: string) => {\n this.createIntermediaryEvent(UpdateEmailEventEmit.VerifyEmailOtp, requestPayload.id as string)(otp);\n });\n }\n\n return handle;\n }\n\n public revealPrivateKey() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RevealPK);\n return this.request<boolean>(requestPayload);\n }\n\n public onUserLoggedOut(callback: UserLoggedOutCallback): void {\n this.userLoggedOutCallbacks.push(callback);\n }\n\n public enableMFA(configuration: EnableMFAConfiguration) {\n const { showUI = true } = configuration;\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.EnableMFA, [{ showUI }]);\n const handle = this.request<string | boolean | null, EnableMFAEventHandlers>(requestPayload);\n\n if (!showUI && handle) {\n handle.on(EnableMFAEventEmit.VerifyMFACode, (totp: string) => {\n this.createIntermediaryEvent(EnableMFAEventEmit.VerifyMFACode, requestPayload.id as string)(totp);\n });\n\n handle.on(EnableMFAEventEmit.Cancel, () => {\n this.createIntermediaryEvent(EnableMFAEventEmit.Cancel, requestPayload.id as string)();\n });\n }\n return handle;\n }\n\n public disableMFA(configuration: DisableMFAConfiguration) {\n const { showUI = true } = configuration;\n\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.DisableMFA, [{ showUI }]);\n const handle = this.request<string | boolean | null, DisableMFAEventHandlers>(requestPayload);\n\n if (!showUI && handle) {\n handle.on(DisableMFAEventEmit.VerifyMFACode, (totp: string) => {\n this.createIntermediaryEvent(DisableMFAEventEmit.VerifyMFACode, requestPayload.id as string)(totp);\n });\n\n handle.on(DisableMFAEventEmit.LostDevice, (recoveryCode: string) => {\n this.createIntermediaryEvent(DisableMFAEventEmit.LostDevice, requestPayload.id as string)(recoveryCode);\n });\n\n handle.on(DisableMFAEventEmit.Cancel, () => {\n this.createIntermediaryEvent(DisableMFAEventEmit.Cancel, requestPayload.id as string)();\n });\n }\n return handle;\n }\n\n // Private members\n private emitUserLoggedOut(loggedOut: boolean): void {\n this.userLoggedOutCallbacks.forEach(callback => {\n callback(loggedOut);\n });\n }\n\n private localForageIsLoggedInKey = 'magic_auth_is_logged_in';\n private userLoggedOutCallbacks: UserLoggedOutCallback[] = [];\n}\n", "import { SDKEnvironment } from '../core/sdk-environment';\n\n/* global LocalForage LocalForageDbMethods */\nlet lf: LocalForage;\n\n/**\n * Proxies `localforage` methods with strong-typing.\n */\nfunction proxyLocalForageMethod<TMethod extends keyof LocalForageDbMethods>(method: TMethod): LocalForage[TMethod] {\n return async (...args: any[]) => {\n /* istanbul ignore else */\n if (!lf) lf = await SDKEnvironment.configureStorage();\n await lf.ready();\n return (lf[method] as any)(...args);\n };\n}\n\nexport const getItem = proxyLocalForageMethod('getItem');\nexport const setItem = proxyLocalForageMethod('setItem');\nexport const removeItem = proxyLocalForageMethod('removeItem');\nexport const clear = proxyLocalForageMethod('clear');\nexport const length = proxyLocalForageMethod('length');\nexport const key = proxyLocalForageMethod('key');\nexport const keys = proxyLocalForageMethod('keys');\nexport const iterate = proxyLocalForageMethod('iterate');\n", "export function uuid() {\n const u = window.crypto.getRandomValues(new Uint8Array(16));\n\n // set the version bit to v4\n u[6] = (u[6] & 0x0f) | 0x40;\n\n // set the variant bit to \"don't care\" (yes, the RFC\n // calls it that)\n u[8] = (u[8] & 0xbf) | 0x80;\n\n // hex encode them and add the dashes\n let uid = '';\n uid += u[0].toString(16);\n uid += u[1].toString(16);\n uid += u[2].toString(16);\n uid += u[3].toString(16);\n uid += '-';\n\n uid += u[4].toString(16);\n uid += u[5].toString(16);\n uid += '-';\n\n uid += u[6].toString(16);\n uid += u[7].toString(16);\n uid += '-';\n\n uid += u[8].toString(16);\n uid += u[9].toString(16);\n uid += '-';\n\n uid += u[10].toString(16);\n uid += u[11].toString(16);\n uid += u[12].toString(16);\n uid += u[13].toString(16);\n uid += u[14].toString(16);\n uid += u[15].toString(16);\n\n return uid;\n}\n", "import { setItem, getItem, removeItem } from './storage';\nimport { uuid } from './uuid';\n\nexport const STORE_KEY_PRIVATE_KEY = 'STORE_KEY_PRIVATE_KEY';\nexport const STORE_KEY_PUBLIC_JWK = 'STORE_KEY_PUBLIC_JWK';\nconst ALGO_NAME = 'ECDSA';\nconst ALGO_CURVE = 'P-256';\n\nconst EC_GEN_PARAMS: EcKeyGenParams = {\n name: ALGO_NAME,\n namedCurve: ALGO_CURVE,\n};\n\nexport function isWebCryptoSupported() {\n const hasCrypto = typeof window !== 'undefined' && !!(window.crypto as any);\n const hasSubtleCrypto = hasCrypto && !!(window.crypto.subtle as any);\n\n return hasCrypto && hasSubtleCrypto;\n}\n\nexport function clearKeys() {\n removeItem(STORE_KEY_PUBLIC_JWK);\n removeItem(STORE_KEY_PRIVATE_KEY);\n}\n\nexport async function createJwt() {\n // will return undefiend is webcrypto is not supported\n const publicJwk = await getPublicKey();\n\n if (!publicJwk) {\n console.info('unable to create public key or webcrypto is unsupported');\n return undefined;\n }\n\n const { subtle } = window.crypto;\n const privateJwk = await getItem<CryptoKey>(STORE_KEY_PRIVATE_KEY);\n\n if (!privateJwk || !subtle) {\n console.info('unable to find private key or webcrypto unsupported');\n return undefined;\n }\n\n const claims = {\n iat: Math.floor(new Date().getTime() / 1000),\n jti: uuid(),\n };\n\n const headers = {\n typ: 'dpop+jwt',\n alg: 'ES256',\n jwk: publicJwk,\n };\n\n const jws = {\n protected: strToUrlBase64(JSON.stringify(headers)),\n claims: strToUrlBase64(JSON.stringify(claims)),\n };\n\n const data = strToUint8(`${jws.protected}.${jws.claims}`);\n const sigType = { name: ALGO_NAME, hash: { name: 'SHA-256' } };\n\n const sig = uint8ToUrlBase64(new Uint8Array(await subtle.sign(sigType, privateJwk, data)));\n return `${jws.protected}.${jws.claims}.${sig}`;\n}\n\nasync function getPublicKey() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n\n if (!(await getItem(STORE_KEY_PUBLIC_JWK))) {\n await generateWCKP();\n }\n\n return getItem(STORE_KEY_PUBLIC_JWK) as JsonWebKey;\n}\n\nasync function generateWCKP() {\n // to avoid a nasty babel bug we have to hoist this above the await ourselves\n // https://github.com/rpetrich/babel-plugin-transform-async-to-promises/issues/20\n const { subtle } = window.crypto;\n const kp = await subtle.generateKey(\n EC_GEN_PARAMS,\n false, // need to export the public key, while keep private key non-extractable\n ['sign'],\n );\n\n const jwkPublicKey = await subtle.exportKey('jwk', kp.publicKey!);\n\n // persist keys\n await setItem(STORE_KEY_PRIVATE_KEY, kp.privateKey!);\n // persist the jwk public key since it needs to be exported anyways\n await setItem(STORE_KEY_PUBLIC_JWK, jwkPublicKey);\n}\n\nfunction strToUrlBase64(str: string) {\n return binToUrlBase64(utf8ToBinaryString(str));\n}\n\nfunction strToUint8(str: string) {\n return new TextEncoder().encode(str);\n}\n\nfunction binToUrlBase64(bin: string) {\n return btoa(bin).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+/g, '');\n}\n\nfunction utf8ToBinaryString(str: string) {\n const escstr = encodeURIComponent(str);\n // replaces any uri escape sequence, such as %0A,\n // with binary escape, such as 0x0A\n return escstr.replace(/%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode(parseInt(p1, 16)));\n}\n\nfunction uint8ToUrlBase64(uint8: Uint8Array) {\n let bin = '';\n uint8.forEach((code) => {\n bin += String.fromCharCode(code);\n });\n return binToUrlBase64(bin);\n}\n", "import { getItem, iterate, removeItem, setItem } from './storage';\nimport { isWebCryptoSupported } from './web-crypto';\n\nexport const DEVICE_SHARE_KEY = 'ds';\nexport const ENCRYPTION_KEY_KEY = 'ek';\nexport const INITIALIZATION_VECTOR_KEY = 'iv';\n\nconst ALGO_NAME = 'AES-GCM'; // for encryption\nconst ALGO_LENGTH = 256;\n\nexport async function clearDeviceShares() {\n const keysToRemove: string[] = [];\n await iterate((value, key, iterationNumber) => {\n if (key.startsWith(`${DEVICE_SHARE_KEY}_`)) {\n keysToRemove.push(key);\n }\n });\n for (const key of keysToRemove) {\n await removeItem(key);\n }\n}\n\nfunction arrayBufferToBase64(buffer: ArrayBuffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function base64ToArrayBuffer(base64: string) {\n const binaryString = window.atob(base64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\n\nasync function getOrCreateInitVector() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n const { crypto } = window;\n const existingIv = (await getItem(INITIALIZATION_VECTOR_KEY)) as Uint8Array;\n if (existingIv) {\n return existingIv;\n }\n\n const iv = crypto.getRandomValues(new Uint8Array(12)); // 12 bytes for AES-GCM\n return iv;\n}\n\nasync function getOrCreateEncryptionKey() {\n if (!isWebCryptoSupported()) {\n console.info('webcrypto is not supported');\n return undefined;\n }\n const { subtle } = window.crypto;\n const existingKey = (await getItem(ENCRYPTION_KEY_KEY)) as CryptoKey;\n if (existingKey) {\n return existingKey;\n }\n\n const key = await subtle.generateKey(\n { name: ALGO_NAME, length: ALGO_LENGTH },\n false, // non-extractable\n ['encrypt', 'decrypt'],\n );\n return key;\n}\n\nexport async function encryptAndPersistDeviceShare(deviceShareBase64: string, networkHash: string): Promise<void> {\n const iv = await getOrCreateInitVector();\n const encryptionKey = await getOrCreateEncryptionKey();\n\n if (!iv || !encryptionKey || !deviceShareBase64) {\n return;\n }\n const decodedDeviceShare = base64ToArrayBuffer(deviceShareBase64);\n\n const { subtle } = window.crypto;\n\n const encryptedData = await subtle.encrypt(\n {\n name: ALGO_NAME,\n iv,\n },\n encryptionKey,\n decodedDeviceShare,\n );\n\n // The encrypted device share we store is a base64 encoded string representation\n // of the magic kms encrypted client share encrypted with webcrypto\n const encryptedDeviceShare = arrayBufferToBase64(encryptedData);\n\n await setItem(`${DEVICE_SHARE_KEY}_${networkHash}`, encryptedDeviceShare);\n await setItem(ENCRYPTION_KEY_KEY, encryptionKey);\n await setItem(INITIALIZATION_VECTOR_KEY, iv);\n}\n\nexport async function getDecryptedDeviceShare(networkHash: string): Promise<string | undefined> {\n const encryptedDeviceShare = await getItem<string>(`${DEVICE_SHARE_KEY}_${networkHash}`);\n const iv = (await getItem(INITIALIZATION_VECTOR_KEY)) as Uint8Array; // use existing encryption key and initialization vector\n const encryptionKey = (await getItem(ENCRYPTION_KEY_KEY)) as CryptoKey;\n\n if (!iv || !encryptedDeviceShare || !encryptionKey || !isWebCryptoSupported()) {\n return undefined;\n }\n\n const { subtle } = window.crypto;\n const ab = await subtle.decrypt({ name: ALGO_NAME, iv }, encryptionKey, base64ToArrayBuffer(encryptedDeviceShare));\n\n return arrayBufferToBase64(ab);\n}\n", "/**\n * Builds a `URL` object safely.\n */\nexport function createURL(url: string, base?: string): URL {\n // Safari raises an error if `undefined` is given to the second argument of\n // the `URL` constructor.\n return base ? new URL(url, base) : new URL(url);\n}\n", "import {\n GasApiResponse,\n MagicPayloadMethod,\n GaslessTransactionRequest,\n ConnectWithUIOptions,\n ConnectWithUiEvents,\n ShowUIPromiEvents,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createPromiEvent } from '../util';\n\ntype ShowUiConfig = {\n onramperParams?: { [key: string]: string };\n};\n\nexport class WalletModule extends BaseModule {\n /* Prompt Magic's Login Form */\n public connectWithUI(options?: ConnectWithUIOptions) {\n const promiEvent = createPromiEvent<string[], ConnectWithUiEvents>(async (resolve, reject) => {\n try {\n const loginRequestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.Login, [\n {\n enabledWallets: this.sdk.thirdPartyWallets.enabledWallets,\n ...options,\n },\n ]);\n\n const loginRequest = this.request<string[], ConnectWithUiEvents>(loginRequestPayload);\n\n this.sdk.thirdPartyWallets.eventListeners.forEach(({ event, callback }) => {\n loginRequest.on(event, () => callback(loginRequestPayload.id as string));\n });\n\n loginRequest.on('id-token-created' as any, (params: { idToken: string }) => {\n promiEvent.emit('id-token-created', params);\n });\n\n const result = await loginRequest;\n if ((result as any).error) reject(result);\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n return promiEvent;\n }\n\n /* Prompt Magic's Wallet UI (not available for users logged in with third party wallets) */\n public showUI(config?: ShowUiConfig) {\n return this.request<boolean, ShowUIPromiEvents>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowUI, [config]));\n }\n\n public showAddress() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowAddress));\n }\n\n public showSendTokensUI() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowSendTokensUI));\n }\n\n public showOnRamp() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowOnRamp));\n }\n\n public showNFTs() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowNFTs));\n }\n\n public showBalances() {\n return this.request<boolean>(createJsonRpcRequestPayload(MagicPayloadMethod.ShowBalances));\n }\n\n public sendGaslessTransaction(address: string, transaction: GaslessTransactionRequest) {\n return this.request<GasApiResponse>(\n createJsonRpcRequestPayload(MagicPayloadMethod.SendGaslessTransaction, [address, transaction]),\n );\n }\n}\n", "import {\n JsonRpcRequestPayload,\n LocalStorageKeys,\n MagicPayloadMethod,\n MagicUserMetadata,\n ThirdPartyWalletEvents,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { PromiEvent, createPromiEvent } from '../util';\n\nexport class ThirdPartyWalletsModule extends BaseModule {\n public eventListeners: { event: ThirdPartyWalletEvents; callback: (payloadId: string) => Promise<void> }[] = [];\n public enabledWallets: Record<string, boolean> = {};\n public isConnected = false;\n\n public resetThirdPartyWalletState() {\n localStorage.removeItem(LocalStorageKeys.PROVIDER);\n localStorage.removeItem(LocalStorageKeys.ADDRESS);\n localStorage.removeItem(LocalStorageKeys.CHAIN_ID);\n this.isConnected = false;\n }\n\n public requestOverride(payload: Partial<JsonRpcRequestPayload>) {\n // Handle method overrides if login/getInfo/isLoggedIn/logout\n if (payload.method === MagicPayloadMethod.Login) {\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n if (payload.method === MagicPayloadMethod.GetInfo) {\n return this.getInfo(payload);\n }\n if (payload.method === MagicPayloadMethod.IsLoggedIn) {\n return this.isLoggedIn(payload);\n }\n if (payload.method === MagicPayloadMethod.Logout) {\n return this.logout(payload);\n }\n // Route all other requests to 3pw provider\n switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {\n case 'web3modal':\n return this.web3modalRequest(payload);\n // Fallback to default request\n default:\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n }\n\n /* Core Method Overrides */\n\n private isLoggedIn(payload: Partial<JsonRpcRequestPayload>): PromiEvent<boolean> {\n switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {\n case 'web3modal':\n return this.web3modalIsLoggedIn();\n default:\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n }\n\n private getInfo(payload: Partial<JsonRpcRequestPayload>): PromiEvent<MagicUserMetadata> {\n switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {\n case 'web3modal':\n return this.web3modalGetInfo();\n default:\n this.resetThirdPartyWalletState();\n return super.request(payload);\n }\n }\n\n private logout(payload: Partial<JsonRpcRequestPayload>): PromiEvent<boolean> {\n const provider = localStorage.getItem(LocalStorageKeys.PROVIDER);\n this.resetThirdPartyWalletState();\n switch (provider) {\n case 'web3modal': {\n return this.web3modalLogout();\n }\n default:\n return super.request(payload);\n }\n }\n\n /* Web3Modal Methods */\n\n private web3modalRequest(payload: Partial<JsonRpcRequestPayload>) {\n return createPromiEvent<unknown>((resolve, reject) => {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n this.sdk.web3modal.modal.getWalletProvider().request(payload).then(resolve).catch(reject);\n });\n }\n\n private web3modalIsLoggedIn() {\n return createPromiEvent<boolean>(resolve => {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const walletStatus = this.sdk.web3modal.modal.getStatus();\n if (walletStatus === 'connected') {\n resolve(true);\n }\n if (walletStatus === 'disconnected') {\n this.resetThirdPartyWalletState();\n resolve(false);\n }\n if (walletStatus === 'reconnecting') {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const unsubscribeFromProviderEvents = this.sdk.web3modal.modal.subscribeProvider(({ status }) => {\n if (status === 'connected') {\n unsubscribeFromProviderEvents();\n resolve(true);\n }\n if (status === 'disconnected') {\n unsubscribeFromProviderEvents();\n this.resetThirdPartyWalletState();\n resolve(false);\n }\n });\n }\n });\n }\n\n private formatWeb3modalGetInfoResponse() {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const walletType = this.sdk.web3modal.modal.getWalletInfo()?.name;\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const userAddress = this.sdk.web3modal.modal.getAddress();\n return {\n publicAddress: userAddress as string,\n email: null,\n issuer: `did:ethr:${userAddress}`,\n phoneNumber: null,\n isMfaEnabled: false,\n recoveryFactors: [] as [],\n walletType: walletType || 'web3modal',\n };\n }\n\n private web3modalGetInfo() {\n return createPromiEvent<MagicUserMetadata>((resolve, reject) => {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const walletStatus = this.sdk.web3modal.modal.getStatus();\n if (walletStatus === 'connected') {\n resolve(this.formatWeb3modalGetInfoResponse());\n }\n\n if (walletStatus === 'disconnected') {\n this.resetThirdPartyWalletState();\n reject('Magic RPC Error: [-32603] Internal error: User denied account access.');\n }\n\n if (walletStatus === 'reconnecting') {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n const unsubscribeFromProviderEvents = this.sdk.web3modal.modal.subscribeProvider(({ status }) => {\n if (status === 'connected') {\n unsubscribeFromProviderEvents();\n resolve(this.formatWeb3modalGetInfoResponse());\n }\n if (status === 'disconnected') {\n unsubscribeFromProviderEvents();\n this.resetThirdPartyWalletState();\n reject('Magic RPC Error: [-32603] Internal error: User denied account access.');\n }\n });\n }\n });\n }\n\n private web3modalLogout(): PromiEvent<boolean> {\n return createPromiEvent<boolean>(async resolve => {\n try {\n // @ts-expect-error Property 'web3modal' does not exist on type 'SDKBase'.\n await this.sdk.web3modal.modal.disconnect();\n } catch (error) {\n console.error(error);\n }\n resolve(true);\n });\n }\n}\n", "import {\n JsonRpcRequestPayload,\n JsonRpcRequestCallback,\n MagicOutgoingWindowMessage,\n JsonRpcBatchRequestCallback,\n JsonRpcResponsePayload,\n ProviderEnableEvents,\n MagicPayloadMethod,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createInvalidArgumentError, MagicRPCError, createSynchronousWeb3MethodWarning } from '../core/sdk-exceptions';\nimport { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload, JsonRpcResponse } from '../core/json-rpc';\nimport { PromiEvent } from '../util/promise-tools';\nimport { createTypedEmitter, EventsDefinition, TypedEmitter } from '../util/events';\n\nconst { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter();\n\n/** */\nexport class RPCProviderModule extends BaseModule implements TypedEmitter {\n // Implements EIP 1193:\n // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md\n\n public readonly isMagic = true;\n\n public sendAsync(payload: Partial<JsonRpcRequestPayload>, onRequestComplete: JsonRpcRequestCallback): void;\n public sendAsync(payload: Partial<JsonRpcRequestPayload>[], onRequestComplete: JsonRpcBatchRequestCallback): void;\n public sendAsync(\n payload: Partial<JsonRpcRequestPayload> | Partial<JsonRpcRequestPayload>[],\n onRequestComplete: JsonRpcRequestCallback | JsonRpcBatchRequestCallback,\n ): void;\n\n public sendAsync(\n payload: Partial<JsonRpcRequestPayload> | Partial<JsonRpcRequestPayload>[],\n onRequestComplete: JsonRpcRequestCallback | JsonRpcBatchRequestCallback,\n ): void {\n if (!onRequestComplete) {\n throw createInvalidArgumentError({\n procedure: 'Magic.rpcProvider.sendAsync',\n argument: 1,\n expected: 'function',\n received: onRequestComplete === null ? 'null' : typeof onRequestComplete,\n });\n }\n\n if (Array.isArray(payload)) {\n this.overlay\n .post(\n MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,\n payload.map(p => {\n const standardizedPayload = standardizeJsonRpcRequestPayload(p);\n this.prefixPayloadMethodForTestMode(standardizedPayload);\n return standardizedPayload;\n }),\n )\n .then(batchResponse => {\n (onRequestComplete as JsonRpcBatchRequestCallback)(\n null,\n batchResponse.map(response => ({\n ...response.payload,\n error: response.hasError ? new MagicRPCError(response.payload.error) : null,\n })),\n );\n });\n } else {\n const finalPayload = standardizeJsonRpcRequestPayload(payload);\n this.prefixPayloadMethodForTestMode(finalPayload);\n this.overlay.post(MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST, finalPayload).then(response => {\n (onRequestComplete as JsonRpcRequestCallback)(\n response.hasError ? new MagicRPCError(response.payload.error) : null,\n response.payload,\n );\n });\n }\n }\n\n public send<ResultType = any>(method: string, params?: any[]): PromiEvent<ResultType>;\n public send(\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n onRequestComplete: JsonRpcRequestCallback,\n ): void;\n public send<ResultType>(payload: JsonRpcRequestPayload, none: void): JsonRpcResponsePayload<ResultType>;\n\n public send<ResultType = any>(\n payloadOrMethod: string | JsonRpcRequestPayload | JsonRpcRequestPayload[],\n onRequestCompleteOrParams: JsonRpcRequestCallback | any[] | void,\n ): PromiEvent<ResultType> | JsonRpcResponsePayload<ResultType> | void {\n // Case #1\n // Web3 >= 1.0.0-beta.38 calls `send` with method and parameters.\n if (typeof payloadOrMethod === 'string') {\n const payload = createJsonRpcRequestPayload(\n payloadOrMethod,\n Array.isArray(onRequestCompleteOrParams) ? onRequestCompleteOrParams : [],\n );\n return this.request(payload) as any;\n }\n\n // Case #2\n // Web3 <= 1.0.0-beta.37 uses `send` with a callback for async queries.\n if (Array.isArray(payloadOrMethod) || !!onRequestCompleteOrParams) {\n this.sendAsync(payloadOrMethod, onRequestCompleteOrParams as any);\n return;\n }\n\n // Case #3\n // Legacy synchronous methods (unsupported).\n const warning = createSynchronousWeb3MethodWarning();\n warning.log();\n return new JsonRpcResponse(payloadOrMethod).applyError({\n code: -32603,\n message: warning.rawMessage,\n }).payload;\n }\n\n public enable() {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.Login);\n return this.request<string[], ProviderEnableEvents>(requestPayload);\n }\n\n /**\n * Here, we wrap `BaseModule.request` with an additional check\n * to determine if the RPC method requires a test-mode prefix.\n */\n protected request<ResultType = any, Events extends EventsDefinition = void>(payload: Partial<JsonRpcRequestPayload>) {\n this.prefixPayloadMethodForTestMode(payload);\n return super.request<ResultType, Events>(payload);\n }\n\n /**\n * Prefixes Ethereum RPC methods with a `testMode` identifier. This is done so\n * that Magic's <iframe> can handle signing methods using test-specific keys.\n */\n private prefixPayloadMethodForTestMode(payload: Partial<JsonRpcRequestPayload>) {\n const testModePrefix = 'testMode/eth/';\n\n // In test mode, we prefix all RPC methods with `test/` so that the\n // Magic <iframe> can handle them without requiring network calls.\n if (this.sdk.testMode) {\n payload.method = `${testModePrefix}${payload.method}`;\n }\n }\n\n public on = createChainingEmitterMethod('on', this);\n public once = createChainingEmitterMethod('once', this);\n public addListener = createChainingEmitterMethod('addListener', this);\n\n public off = createChainingEmitterMethod('off', this);\n public removeListener = createChainingEmitterMethod('removeListener', this);\n public removeAllListeners = createChainingEmitterMethod('removeAllListeners', this);\n\n public emit = createBoundEmitterMethod('emit');\n public eventNames = createBoundEmitterMethod('eventNames');\n public listeners = createBoundEmitterMethod('listeners');\n public listenerCount = createBoundEmitterMethod('listenerCount');\n}\n", "import { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload } from '../core/json-rpc';\nimport { BaseModule } from './base-module';\nimport { SDKBase, MagicSDKAdditionalConfiguration, MagicSDKExtensionsOption } from '../core/sdk';\nimport { createExtensionNotInitializedError, MagicExtensionError, MagicExtensionWarning } from '../core/sdk-exceptions';\nimport { createPromiEvent, encodeJSON, decodeJSON, storage, isPromiEvent } from '../util';\n\nconst sdkAccessFields = ['request', 'overlay', 'sdk'];\n\n/**\n * From the `BaseExtension`-derived instance, get the prototype\n * chain up to and including the `BaseModule` class.\n */\nfunction getPrototypeChain<T extends BaseExtension<string>>(instance: T) {\n let currentProto = Object.getPrototypeOf(instance);\n const protos = [currentProto];\n\n while (currentProto !== BaseModule.prototype) {\n currentProto = Object.getPrototypeOf(currentProto);\n protos.push(currentProto);\n }\n\n return protos;\n}\n\nexport abstract class BaseExtension<TName extends string> extends BaseModule {\n /**\n * A structure describing the platform and version compatiblity of this\n * extension.\n */\n compat?: {\n 'magic-sdk': boolean | string;\n '@magic-sdk/react-native': boolean | string;\n '@magic-sdk/react-native-bare': boolean | string;\n '@magic-sdk/react-native-expo': boolean | string;\n };\n\n public abstract readonly name: TName;\n\n private __sdk_access_field_descriptors__ = new Map<\n string,\n { descriptor: PropertyDescriptor; isPrototypeField: boolean }\n >();\n private __is_initialized__ = false;\n\n protected utils = {\n createPromiEvent,\n isPromiEvent,\n encodeJSON,\n decodeJSON,\n createJsonRpcRequestPayload,\n standardizeJsonRpcRequestPayload,\n storage,\n };\n\n constructor() {\n super(undefined as any);\n\n // Disallow SDK access before initialization...\n\n const allSources = [this, ...getPrototypeChain(this)];\n\n sdkAccessFields.forEach(prop => {\n const allDescriptors = allSources.map(source => Object.getOwnPropertyDescriptor(source, prop));\n const sourceIndex = allDescriptors.findIndex(x => Boolean(x));\n const isPrototypeField = sourceIndex > 0;\n const descriptor = allDescriptors[sourceIndex];\n\n /* istanbul ignore else */\n if (descriptor) {\n this.__sdk_access_field_descriptors__.set(prop, { descriptor, isPrototypeField });\n\n Object.defineProperty(this, prop, {\n configurable: true,\n get: () => {\n throw createExtensionNotInitializedError(prop);\n },\n });\n }\n });\n }\n\n /**\n * Registers a Magic SDK instance with this Extension.\n *\n * @internal\n */\n public init(sdk: SDKBase) {\n if (this.__is_initialized__) return;\n\n // Replace original property descriptors\n // for SDK access fields post-initialization.\n sdkAccessFields.forEach(prop => {\n /* istanbul ignore else */\n if (this.__sdk_access_field_descriptors__.has(prop)) {\n const { descriptor, isPrototypeField } = this.__sdk_access_field_descriptors__.get(prop)!;\n\n if (isPrototypeField) {\n // For prototype fields, we just need the `delete` operator so that\n // the instance will fallback to the prototype chain itself.\n delete this[prop as keyof this];\n } else {\n Object.defineProperty(this, prop, descriptor);\n }\n }\n });\n\n this.sdk = sdk;\n this.__is_initialized__ = true;\n }\n\n /**\n * Creates a deprecation warning wrapped with a native Magic SDK warning type.\n * Best practice is to warn users of upcoming deprecations at least one major\n * version before the change is implemented. You can use this method to\n * communicate deprecations in a manner consistent with Magic SDK core code.\n */\n protected createDeprecationWarning(options: {\n method: string;\n removalVersion: string;\n useInstead?: string;\n }): MagicExtensionWarning {\n const { method, removalVersion, useInstead } = options;\n\n const useInsteadSuffix = useInstead ? ` Use \\`${useInstead}\\` instead.` : '';\n const message = `\\`${method}\\` will be removed from this Extension in version \\`${removalVersion}\\`.${useInsteadSuffix}`;\n return new MagicExtensionWarning(this, 'DEPRECATION_NOTICE', message);\n }\n\n /**\n * Creates a warning wrapped with a native Magic SDK warning type. This\n * maintains consistency in warning messaging for consumers of Magic SDK and\n * this Extension.\n */\n protected createWarning(code: string | number, message: string): MagicExtensionWarning {\n return new MagicExtensionWarning(this, code, message);\n }\n\n /**\n * Creates an error wrapped with a native Magic SDK error type. This maintains\n * consistency in error handling for consumers of Magic SDK and this\n * Extension.\n */\n protected createError<TData = any>(code: string | number, message: string, data: TData): MagicExtensionError<TData> {\n return new MagicExtensionError<TData>(this, code, message, data);\n }\n}\n\nabstract class InternalExtension<TName extends string, TConfig extends any = any> extends BaseExtension<TName> {\n public abstract readonly config: TConfig;\n}\n\n/**\n * A base class representing \"extensions\" to the core Magic JS APIs. Extensions\n * enable new functionality by composing Magic endpoints methods together.\n */\nexport class Extension {\n /**\n * This is a special constructor used to mark \"official\" extensions. These\n * extensions are designed for special interaction with the Magic iframe using\n * custom JSON RPC methods, business logic, and global configurations. This is\n * intended for internal-use only (and provides no useful advantage to\n * open-source extension developers over the regular `Extension` class).\n *\n * @internal\n */\n public static Internal = InternalExtension;\n}\n\n/**\n * These fields are exposed on the `Extension` type,\n * but should be hidden from the public interface.\n */\ntype HiddenExtensionFields = 'name' | 'init' | 'config' | 'compat';\n\n/**\n * Gets the type contained in an array type.\n */\ntype UnwrapArray<T extends any[]> = T extends Array<infer P> ? P : never;\n\n/**\n * Create a union type of Extension names from an\n * array of Extension types given by `TExt`.\n */\ntype ExtensionNames<TExt extends BaseExtension<string>[]> =\n UnwrapArray<TExt> extends BaseExtension<infer R> ? R : never;\n\n/**\n * From the literal Extension name type given by `TExtName`,\n * extract a dictionary of Extension types.\n */\ntype GetExtensionFromName<TExt extends BaseExtension<string>[], TExtName extends string> = {\n [P in TExtName]: Extract<UnwrapArray<TExt>, BaseExtension<TExtName>>;\n}[TExtName];\n\n/**\n * Wraps a Magic SDK constructor with the necessary type\n * information to support a strongly-typed `Extension` interface.\n */\nexport type WithExtensions<SDK extends SDKBase> = {\n new <TCustomExtName extends string, TExt extends MagicSDKExtensionsOption<TCustomExtName>>(\n apiKey: string,\n options?: MagicSDKAdditionalConfiguration<TCustomExtName, TExt>,\n ): InstanceWithExtensions<SDK, TExt>;\n};\n\nexport type InstanceWithExtensions<SDK extends SDKBase, TExt extends MagicSDKExtensionsOption> = SDK & {\n [P in Exclude<\n TExt extends BaseExtension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n number\n >]: TExt extends BaseExtension<string>[]\n ? Omit<GetExtensionFromName<TExt, P>, HiddenExtensionFields>\n : TExt extends {\n [P in Exclude<\n TExt extends BaseExtension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n number\n >]: BaseExtension<string>;\n }\n ? Omit<TExt[P], HiddenExtensionFields>\n : never;\n};\n", "import {\n MagicPayloadMethod,\n NFTCheckoutRequest,\n NFTCheckoutResponse,\n NFTCheckoutEvents,\n NFTPurchaseRequest,\n NFTPurchaseResponse,\n NFTTransferRequest,\n NFTTransferResponse,\n NftCheckoutIntermediaryEvents,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\n\nexport class NFTModule extends BaseModule {\n /* Start an NFT Purchase flow with Sardine */\n public purchase(options: NFTPurchaseRequest) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTPurchase, [options]);\n return this.request<NFTPurchaseResponse>(requestPayload);\n }\n\n /* Start an NFT Checkout flow with Paypal */\n public checkout(options: NFTCheckoutRequest) {\n const isThirdPartyWalletConnected = this.sdk.thirdPartyWallets.isConnected;\n\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTCheckout, [\n {\n ...options,\n walletProvider: isThirdPartyWalletConnected ? 'web3modal' : 'magic',\n },\n ]);\n const promiEvent = this.request<NFTCheckoutResponse, NFTCheckoutEvents>(requestPayload);\n\n if (isThirdPartyWalletConnected) {\n promiEvent.on(NftCheckoutIntermediaryEvents.Initiated, async (rawTransaction) => {\n try {\n const hash = await this.request({\n method: 'eth_sendTransaction',\n params: [rawTransaction],\n });\n this.createIntermediaryEvent(NftCheckoutIntermediaryEvents.Success, requestPayload.id as string)(hash);\n } catch (error) {\n this.createIntermediaryEvent(NftCheckoutIntermediaryEvents.Failure, requestPayload.id as string)();\n }\n });\n promiEvent.on(NftCheckoutIntermediaryEvents.Disconnect, () => {\n this.sdk.thirdPartyWallets.resetThirdPartyWalletState();\n promiEvent.emit('disconnect');\n });\n }\n return promiEvent;\n }\n\n /* Start an NFT Transfer flow */\n public transfer(options: NFTTransferRequest) {\n const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.NFTTransfer, [options]);\n return this.request<NFTTransferResponse>(requestPayload);\n }\n}\n", "import { EthNetworkConfiguration, QueryParameters, SupportedLocale } from '@magic-sdk/types';\nimport { coerce, satisfies } from '../util/semver';\nimport { encodeJSON } from '../util/base64-json';\nimport {\n createMissingApiKeyError,\n createReactNativeEndpointConfigurationWarning,\n createIncompatibleExtensionsError,\n} from './sdk-exceptions';\nimport { AuthModule } from '../modules/auth';\nimport { UserModule } from '../modules/user';\nimport { WalletModule } from '../modules/wallet';\nimport { ThirdPartyWalletsModule } from '../modules/third-party-wallets';\nimport { RPCProviderModule } from '../modules/rpc-provider';\nimport { ViewController } from './view-controller';\nimport { createURL } from '../util/url';\nimport { BaseExtension, Extension } from '../modules/base-extension';\nimport { isEmpty } from '../util/type-guards';\nimport { SDKEnvironment, sdkNameToEnvName } from './sdk-environment';\nimport { NFTModule } from '../modules/nft';\n\n/**\n * Checks if the given `ext` is compatible with the platform & version of Magic\n * SDK currently in use.\n */\nfunction checkExtensionCompat(ext: BaseExtension<string>) {\n if (ext.compat && ext.compat[SDKEnvironment.sdkName] != null) {\n return typeof ext.compat[SDKEnvironment.sdkName] === 'string'\n ? satisfies(coerce(SDKEnvironment.version), ext.compat[SDKEnvironment.sdkName] as string)\n : !!ext.compat[SDKEnvironment.sdkName];\n }\n\n // To gracefully support older extensions, we assume\n // compatibility when the `compat` field is missing.\n return true;\n}\n\n/**\n * Generates a network hash of the SDK instance for persisting network specific\n * information on multichain setups\n */\nfunction getNetworkHash(apiKey: string, network?: EthNetworkConfiguration, extConfig?: any) {\n if (!network && !extConfig) {\n return `${apiKey}_eth_mainnet`;\n }\n if (extConfig) {\n return `${apiKey}_${JSON.stringify(extConfig)}`;\n }\n if (network) {\n if (typeof network === 'string') {\n return `${apiKey}_eth_${network}`;\n }\n // Custom network, not necessarily eth.\n return `${apiKey}_${network.rpcUrl}_${network.chainId}_${network.chainType}`;\n }\n return `${apiKey}_unknown`;\n}\n\n/**\n * Initializes SDK extensions, checks for platform/version compatiblity issues,\n * then consolidates any global configurations provided by those extensions.\n */\nfunction prepareExtensions(this: SDKBase, options?: MagicSDKAdditionalConfiguration): Record<string, any> {\n const extensions: BaseExtension<string>[] | { [key: string]: BaseExtension<string> } = options?.extensions ?? [];\n const extConfig: any = {};\n const incompatibleExtensions: BaseExtension<string>[] = [];\n\n if (Array.isArray(extensions)) {\n extensions.forEach(ext => {\n if (checkExtensionCompat(ext)) {\n ext.init(this);\n if (ext.name) {\n // Only apply extensions with a known, defined `name` parameter.\n (this as any)[ext.name] = ext;\n }\n if (ext instanceof Extension.Internal) {\n if (!isEmpty(ext.config)) extConfig[ext.name] = ext.config;\n }\n } else {\n incompatibleExtensions.push(ext);\n }\n });\n } else {\n Object.keys(extensions).forEach(name => {\n if (checkExtensionCompat(extensions[name])) {\n extensions[name].init(this);\n const ext = extensions[name];\n (this as any)[name] = ext;\n if (ext instanceof Extension.Internal) {\n if (!isEmpty(ext.config)) extConfig[extensions[name].name] = ext.config;\n }\n } else {\n incompatibleExtensions.push(extensions[name]);\n }\n });\n }\n\n if (incompatibleExtensions.length) {\n throw createIncompatibleExtensionsError(incompatibleExtensions);\n }\n\n return extConfig;\n}\n\nexport type MagicSDKExtensionsOption<TCustomExtName extends string = string> =\n | BaseExtension<string>[]\n | { [P in TCustomExtName]: BaseExtension<string> };\n\nexport interface MagicSDKAdditionalConfiguration<\n TCustomExtName extends string = string,\n TExt extends MagicSDKExtensionsOption<TCustomExtName> = any,\n> {\n endpoint?: string;\n locale?: SupportedLocale;\n network?: EthNetworkConfiguration;\n extensions?: TExt;\n testMode?: boolean;\n deferPreload?: boolean;\n useStorageCache?: boolean;\n meta?: any; // Generic field for clients to add metadata\n}\n\nexport class SDKBase {\n private static readonly __overlays__: Map<string, ViewController> = new Map();\n\n protected readonly endpoint: string;\n protected readonly parameters: string;\n protected readonly networkHash: string;\n public readonly testMode: boolean;\n public readonly useStorageCache: boolean;\n\n /**\n * Contains methods for starting a Magic SDK authentication flow.\n */\n public readonly auth: AuthModule;\n\n /**\n * Contains methods for interacting with user data, checking login\n * status, generating cryptographically-secure ID tokens, and more.\n */\n public readonly user: UserModule;\n\n /**\n * Contains methods previously under the `ConnectExtension`, including\n * login, show wallet UI, request user info, and more.\n */\n public readonly wallet: WalletModule;\n\n /**\n * Contains methods for interacting with NFTs, including purchase.\n */\n public readonly nft: NFTModule;\n\n /**\n * Contains internal methods for third-party wallets.\n */\n public thirdPartyWallets: ThirdPartyWalletsModule;\n\n /**\n * Contains a Web3-compliant provider. Pass this module to your Web3/Ethers\n * instance for automatic compatibility with Ethereum methods.\n */\n public readonly rpcProvider: RPCProviderModule;\n\n /**\n * Creates an instance of Magic SDK.\n */\n constructor(\n public readonly apiKey: string,\n options?: MagicSDKAdditionalConfiguration,\n ) {\n if (!apiKey) throw createMissingApiKeyError();\n\n if (SDKEnvironment.platform === 'react-native' && options?.endpoint) {\n createReactNativeEndpointConfigurationWarning().log();\n }\n\n const { defaultEndpoint, version } = SDKEnvironment;\n this.testMode = !!options?.testMode;\n this.useStorageCache = !!options?.useStorageCache;\n this.endpoint = createURL(options?.endpoint ?? defaultEndpoint).origin;\n\n // Prepare built-in modules\n this.auth = new AuthModule(this);\n this.user = new UserModule(this);\n this.wallet = new WalletModule(this);\n this.nft = new NFTModule(this);\n this.thirdPartyWallets = new ThirdPartyWalletsModule(this);\n this.rpcProvider = new RPCProviderModule(this) as any;\n\n // Prepare extensions\n const extConfig: any = prepareExtensions.call(this, options);\n\n // Encode parameters as base64-JSON\n this.parameters = encodeJSON<QueryParameters>({\n API_KEY: this.apiKey,\n DOMAIN_ORIGIN: window.location ? window.location.origin : '',\n ETH_NETWORK: options?.network,\n host: createURL(this.endpoint).host,\n sdk: sdkNameToEnvName[SDKEnvironment.sdkName],\n version,\n ext: isEmpty(extConfig) ? undefined : extConfig,\n locale: options?.locale || 'en_US',\n ...(SDKEnvironment.bundleId ? { bundleId: SDKEnvironment.bundleId } : {}),\n meta: options?.meta,\n });\n this.networkHash = getNetworkHash(this.apiKey, options?.network, isEmpty(extConfig) ? undefined : extConfig);\n if (!options?.deferPreload) this.preload();\n }\n\n /**\n * Represents the view controller associated with this `MagicSDK` instance.\n */\n protected get overlay(): ViewController {\n if (!SDKBase.__overlays__.has(this.parameters)) {\n const controller = new SDKEnvironment.ViewController(this.endpoint, this.parameters, this.networkHash);\n\n // @ts-ignore - We don't want to expose this method to the user, but we\n // need to invoke in here so that the `ViewController` is ready for use.\n controller.init();\n\n SDKBase.__overlays__.set(this.parameters, controller);\n }\n\n return SDKBase.__overlays__.get(this.parameters)!;\n }\n\n /**\n * Preloads the Magic view, allowing for faster initial requests in browser\n * environments. Awaiting the returned promise will signal when the Magic view\n * has completed loading and is ready for requests.\n */\n public async preload() {\n await this.overlay.waitForReady();\n }\n}\n", "import {\n MagicIncomingWindowMessage,\n MagicOutgoingWindowMessage,\n JsonRpcRequestPayload,\n MagicMessageEvent,\n MagicMessageRequest,\n SDKWarningCode,\n} from '@magic-sdk/types';\nimport { JsonRpcResponse } from './json-rpc';\nimport { createPromise } from '../util/promise-tools';\nimport { MagicSDKWarning, createModalNotReadyError } from './sdk-exceptions';\nimport { clearDeviceShares, encryptAndPersistDeviceShare } from '../util/device-share-web-crypto';\nimport {\n createMagicRequest,\n persistMagicEventRefreshToken,\n standardizeResponse,\n debounce,\n} from '../util/view-controller-utils';\n\ninterface RemoveEventListenerFunction {\n (): void;\n}\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst PING_INTERVAL = 5 * MINUTE; // 5 minutes\nconst INITIAL_HEARTBEAT_DELAY = 60 * MINUTE; // 1 hour\n\nexport abstract class ViewController {\n public isReadyForRequest = false;\n protected readonly messageHandlers = new Set<(event: MagicMessageEvent) => any>();\n protected isConnectedToInternet = true;\n protected lastPongTime: null | number = null;\n protected heartbeatIntervalTimer: ReturnType<typeof setInterval> | null = null;\n /* istanbul ignore next */\n protected heartbeatDebounce = debounce(() => {\n // Only do this for web now\n if (this.endpoint === 'https://auth.magic.link/') {\n this.heartBeatCheck();\n }\n }, INITIAL_HEARTBEAT_DELAY);\n\n /**\n * Create an instance of `ViewController`\n *\n * @param endpoint - The URL for the relevant iframe context.\n * @param parameters - The unique, encoded query parameters for the\n * relevant iframe context.\n * @param networkHash - The hash of the network that this sdk instance is connected to\n * for multi-chain scenarios\n */\n constructor(\n protected readonly endpoint: string,\n protected readonly parameters: string,\n protected readonly networkHash: string,\n ) {\n this.listen();\n }\n\n protected abstract init(): void;\n protected abstract _post(data: MagicMessageRequest): Promise<void>;\n protected abstract hideOverlay(): void;\n protected abstract showOverlay(): void;\n protected abstract checkRelayerExistsInDOM(): Promise<boolean>;\n protected abstract reloadRelayer(): Promise<void>;\n\n /**\n * Send a payload to the Magic `<iframe>` for processing and automatically\n * handle the acknowledging follow-up event(s).\n *\n * @param msgType - The type of message to encode with the data.\n * @param payload - The JSON RPC payload to emit via `window.postMessage`.\n */\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload[],\n ): Promise<JsonRpcResponse<ResultType>[]>;\n\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload,\n ): Promise<JsonRpcResponse<ResultType>>;\n\n public async post<ResultType = any>(\n msgType: MagicOutgoingWindowMessage,\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n ): Promise<JsonRpcResponse<ResultType> | JsonRpcResponse<ResultType>[]> {\n return createPromise(async (resolve, reject) => {\n if (!this.isConnectedToInternet) {\n const error = createModalNotReadyError();\n reject(error);\n }\n\n if (!(await this.checkRelayerExistsInDOM())) {\n this.isReadyForRequest = false;\n await this.reloadRelayer();\n }\n\n if (!this.isReadyForRequest) {\n await this.waitForReady();\n }\n\n const batchData: JsonRpcResponse[] = [];\n const batchIds = Array.isArray(payload) ? payload.map(p => p.id) : [];\n const msg = await createMagicRequest(`${msgType}-${this.parameters}`, payload, this.networkHash);\n\n await this._post(msg);\n\n /**\n * Collect successful RPC responses and resolve.\n */\n const acknowledgeResponse = (removeEventListener: RemoveEventListenerFunction) => (event: MagicMessageEvent) => {\n const { id, response } = standardizeResponse(payload, event);\n persistMagicEventRefreshToken(event);\n if (response?.payload.error?.message === 'User denied account access.') {\n clearDeviceShares();\n } else if (event.data.deviceShare) {\n const { deviceShare } = event.data;\n encryptAndPersistDeviceShare(deviceShare, this.networkHash);\n }\n if (id && response && Array.isArray(payload) && batchIds.includes(id)) {\n batchData.push(response);\n\n // For batch requests, we wait for all responses before resolving.\n if (batchData.length === payload.length) {\n removeEventListener();\n resolve(batchData);\n }\n } else if (id && response && !Array.isArray(payload) && id === payload.id) {\n removeEventListener();\n resolve(response);\n }\n };\n\n // Listen for and handle responses.\n const removeResponseListener = this.on(\n MagicIncomingWindowMessage.MAGIC_HANDLE_RESPONSE,\n acknowledgeResponse(() => removeResponseListener()),\n );\n });\n }\n\n /**\n * Listen for events received with the given `msgType`.\n *\n * @param msgType - The `msgType` encoded with the event data.\n * @param handler - A handler function to execute on each event received.\n * @return A `void` function to remove the attached event.\n */\n public on(\n msgType: MagicIncomingWindowMessage,\n handler: (this: Window, event: MagicMessageEvent) => any,\n ): RemoveEventListenerFunction {\n const boundHandler = handler.bind(window);\n\n // We cannot effectively cover this function because it never gets reference\n // by value. The functionality of this callback is tested within\n // `initMessageListener`.\n /* istanbul ignore next */\n const listener = (event: MagicMessageEvent) => {\n if (event.data.msgType === `${msgType}-${this.parameters}`) boundHandler(event);\n };\n\n this.messageHandlers.add(listener);\n return () => this.messageHandlers.delete(listener);\n }\n\n waitForReady() {\n return new Promise<void>(resolve => {\n const unsubscribe = this.on(MagicIncomingWindowMessage.MAGIC_OVERLAY_READY, () => {\n this.isReadyForRequest = true;\n resolve();\n unsubscribe();\n });\n });\n }\n\n /**\n * Listen for messages sent from the underlying Magic `<WebView>`.\n */\n private listen() {\n this.on(MagicIncomingWindowMessage.MAGIC_HIDE_OVERLAY, () => {\n this.hideOverlay();\n });\n\n this.on(MagicIncomingWindowMessage.MAGIC_SHOW_OVERLAY, () => {\n this.showOverlay();\n });\n\n this.on(MagicIncomingWindowMessage.MAGIC_SEND_PRODUCT_ANNOUNCEMENT, (event: MagicMessageEvent) => {\n if (event.data.response.result.product_announcement) {\n new MagicSDKWarning(SDKWarningCode.ProductAnnouncement, event.data.response.result.product_announcement).log();\n }\n });\n }\n\n /**\n * Sends periodic pings to check the connection.\n * If no pong is received or it\u2019s stale, the iframe is reloaded.\n */\n /* istanbul ignore next */\n private heartBeatCheck() {\n let firstPing = true;\n\n // Helper function to send a ping message.\n const sendPing = async () => {\n const message = {\n msgType: `${MagicOutgoingWindowMessage.MAGIC_PING}-${this.parameters}`,\n payload: [],\n };\n await this._post(message);\n };\n\n this.heartbeatIntervalTimer = setInterval(async () => {\n // If no pong has ever been received.\n if (!this.lastPongTime) {\n if (!firstPing) {\n // On subsequent ping with no previous pong response, reload the iframe.\n this.reloadRelayer();\n firstPing = true;\n return;\n }\n } else {\n // If we have a pong, check how long ago it was received.\n const timeSinceLastPong = Date.now() - this.lastPongTime;\n if (timeSinceLastPong > PING_INTERVAL * 2) {\n // If the pong is too stale, reload the iframe.\n this.reloadRelayer();\n firstPing = true;\n return;\n }\n }\n\n // Send a new ping message and update the counter.\n await sendPing();\n firstPing = false;\n }, PING_INTERVAL);\n }\n\n // Debounce revival mechanism\n // Kill any existing PingPong interval\n /* istanbul ignore next */\n protected stopHeartBeat() {\n this.heartbeatDebounce();\n this.lastPongTime = null;\n\n if (this.heartbeatIntervalTimer) {\n clearInterval(this.heartbeatIntervalTimer);\n this.heartbeatIntervalTimer = null;\n }\n }\n}\n", "import { JsonRpcResponse } from '../core/json-rpc';\nimport { JsonRpcRequestPayload, MagicMessageEvent } from '@magic-sdk/types';\nimport { getItem, setItem } from './storage';\nimport { SDKEnvironment } from '../core/sdk-environment';\nimport { getDecryptedDeviceShare } from './device-share-web-crypto';\nimport { createJwt } from './web-crypto';\n\ninterface StandardizedResponse {\n id?: string | number;\n response?: JsonRpcResponse;\n}\n\ninterface StandardizedMagicRequest {\n msgType: string;\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[];\n jwt?: string;\n rt?: string;\n deviceShare?: string;\n}\n\n/**\n * Get the originating payload from a batch request using the specified `id`.\n */\nexport function getRequestPayloadFromBatch(\n requestPayload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n id?: string | number | null,\n): JsonRpcRequestPayload | undefined {\n return id && Array.isArray(requestPayload)\n ? requestPayload.find(p => p.id === id)\n : (requestPayload as JsonRpcRequestPayload);\n}\n\n/**\n * Ensures the incoming response follows the expected schema and parses for a\n * JSON RPC payload ID.\n */\nexport function standardizeResponse(\n requestPayload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n event: MagicMessageEvent,\n): StandardizedResponse {\n const id = event.data.response?.id;\n const requestPayloadResolved = getRequestPayloadFromBatch(requestPayload, id);\n\n if (id && requestPayloadResolved) {\n // Build a standardized response object\n const response = new JsonRpcResponse(requestPayloadResolved)\n .applyResult(event.data.response.result)\n .applyError(event.data.response.error);\n\n return { id, response };\n }\n\n return {};\n}\n\nexport async function createMagicRequest(\n msgType: string,\n payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n networkHash: string,\n) {\n const rt = await getItem<string>('rt');\n let jwt;\n\n // only for webcrypto platforms\n if (SDKEnvironment.platform === 'web') {\n try {\n jwt = (await getItem<string>('jwt')) ?? (await createJwt());\n } catch (e) {\n console.error('webcrypto error', e);\n }\n }\n\n const request: StandardizedMagicRequest = { msgType, payload };\n\n if (jwt) {\n request.jwt = jwt;\n }\n if (jwt && rt) {\n request.rt = rt;\n }\n\n // Grab the device share if it exists for the network\n const decryptedDeviceShare = await getDecryptedDeviceShare(networkHash);\n if (decryptedDeviceShare) {\n request.deviceShare = decryptedDeviceShare;\n }\n\n return request;\n}\n\nexport async function persistMagicEventRefreshToken(event: MagicMessageEvent) {\n if (!event.data.rt) {\n return;\n }\n\n await setItem('rt', event.data.rt);\n}\n\nexport function debounce<T extends (...args: unknown[]) => void>(func: T, delay: number) {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n return function (...args: Parameters<T>): void {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n func(...args);\n }, delay);\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["require_eventemitter3", "__commonJSMin", "exports", "module", "has", "prefix", "Events", "EE", "fn", "context", "once", "addListener", "emitter", "event", "listener", "evt", "clearEvent", "EventEmitter", "names", "events", "name", "handlers", "l", "ee", "listeners", "a1", "a2", "a3", "a4", "a5", "len", "args", "i", "length", "j", "src_exports", "__export", "Extension", "MagicExtensionError", "MagicExtensionWarning", "MagicRPCError", "MagicSDKError", "MagicSDKWarning", "SDKBase", "STORE_KEY_PRIVATE_KEY", "STORE_KEY_PUBLIC_JWK", "TypedEmitter", "ViewController", "clearKeys", "createDeprecationWarning", "createDuplicateIframeWarning", "createExtensionNotInitializedError", "createIncompatibleExtensionsError", "createInvalidArgumentError", "createJwt", "createMalformedResponseError", "createMissingApiKeyError", "createModalNotReadyError", "createPromiEvent", "createPromise", "createReactNativeEndpointConfigurationWarning", "createSDK", "createSynchronousWeb3MethodWarning", "createTypedEmitter", "createURL", "decodeJSON", "encodeJSON", "getPayloadId", "isEmpty", "isJsonRpcErrorCode", "isJsonRpcRequestPayload", "isJsonRpcResponsePayload", "isMagicPayloadMethod", "isMajorVersionAtLeast", "isPromiEvent", "isWebCryptoSupported", "storage_exports", "uuid", "__toCommonJS", "createCommonjsModule", "e", "r", "MAX_SAFE_INTEGER$1", "constants", "MAX_SAFE_INTEGER$1", "debug", "e", "debug_1", "re_1", "createCommonjsModule", "r", "s", "o", "a", "n", "t", "numeric", "compareIdentifiers$1", "rcompareIdentifiers", "identifiers", "MAX_LENGTH$1", "MAX_SAFE_INTEGER", "re$4", "t$4", "compareIdentifiers", "SemVer", "compare", "compare_1", "eq", "eq_1", "neq", "neq_1", "gt", "gt_1", "gte", "gte_1", "lt", "lt_1", "lte", "lte_1", "cmp", "cmp_1", "ANY", "Comparator", "re$3", "t$3", "Range", "i", "re$2", "t$2", "hyphenReplace", "comparatorTrimReplace", "tildeTrimReplace", "caretTrimReplace", "parseComparator", "replaceGTE0", "isSatisfiable", "testSet", "replaceCarets", "replaceTildes", "replaceXRanges", "replaceStars", "isX", "replaceTilde", "replaceCaret", "replaceXRange", "E", "p", "l", "c", "$", "h", "satisfies", "MAX_LENGTH", "constants", "re$1", "t$1", "re_1", "parse", "e", "r", "SemVer", "parse_1", "re", "t", "coerce", "s", "percentToByte", "p", "byteToPercent", "b", "btoaUTF8", "str", "atobUTF8", "encodeJSON", "options", "decodeJSON", "queryString", "import_types", "import_types", "isUndefined", "value", "isNull", "isNil", "isJsonRpcRequestPayload", "isJsonRpcResponsePayload", "isMagicPayloadMethod", "isJsonRpcErrorCode", "isEmpty", "key", "SDKEnvironment", "createSDK", "SDKBaseCtor", "environment", "sdkNameToEnvName", "MagicSDKError", "code", "rawMessage", "MagicRPCError", "sourceError", "codeNormalized", "isJsonRpcErrorCode", "MagicSDKWarning", "MagicExtensionError", "ext", "data", "MagicExtensionWarning", "createMissingApiKeyError", "createModalNotReadyError", "createMalformedResponseError", "createExtensionNotInitializedError", "member", "createIncompatibleExtensionsError", "extensions", "msg", "SDKEnvironment", "compat", "createInvalidArgumentError", "options", "ordinalSuffix", "i", "iAdjusted", "j", "k", "createDuplicateIframeWarning", "createSynchronousWeb3MethodWarning", "createReactNativeEndpointConfigurationWarning", "createDeprecationWarning", "method", "removalVersions", "useInstead", "removalVersion", "useInsteadSuffix", "message", "import_types", "import_types", "createIntGenerator", "index", "intGenerator", "getPayloadId", "payloadPreprocessedSymbol", "markPayloadAsPreprocessed", "payload", "isPayloadPreprocessed", "standardizeJsonRpcRequestPayload", "_a", "_b", "_c", "getPayloadId", "createJsonRpcRequestPayload", "method", "params", "JsonRpcResponse", "responseOrPayload", "isJsonRpcResponsePayload", "error", "result", "import_types", "import_eventemitter3", "TypedEmitter", "EventEmitter", "createTypedEmitter", "emitter", "method", "source", "args", "promiEventBrand", "isPromiEvent", "value", "createPromiEvent", "executor", "promise", "createPromise", "createBoundEmitterMethod", "createChainingEmitterMethod", "createTypedEmitter", "thenSymbol", "catchSymbol", "finallySymbol", "createChainingPromiseMethod", "method", "source", "args", "nextPromise", "promiEvent", "result", "resolved", "err", "resolve", "reject", "BaseModule", "sdk", "payload", "createPromiEvent", "resolve", "reject", "responsePromise", "standardizeJsonRpcRequestPayload", "promiEvent", "res", "cleanupEvents", "MagicRPCError", "createMalformedResponseError", "err", "evt", "_a", "response", "event", "params", "eventType", "payloadId", "args", "createJsonRpcRequestPayload", "isMajorVersionAtLeast", "version", "majorVersion", "major", "ProductConsolidationMethodRemovalVersions", "AuthModule", "BaseModule", "configuration", "isRNMobilePackage", "SDKEnvironment", "isMajorVersionAtLeast", "createDeprecationWarning", "email", "showUI", "redirectURI", "overrides", "lifespan", "requestPayload", "createJsonRpcRequestPayload", "phoneNumber", "handle", "otp", "deviceCheckUI", "mfa", "recoveryCode", "credentialOrQueryString", "credentialResolved", "urlWithoutQuery", "jwt", "newEmail", "import_types", "storage_exports", "__export", "clear", "getItem", "iterate", "key", "keys", "length", "removeItem", "setItem", "lf", "proxyLocalForageMethod", "method", "args", "__async", "SDKEnvironment", "getItem", "setItem", "removeItem", "clear", "length", "key", "keys", "iterate", "uuid", "u", "uid", "STORE_KEY_PRIVATE_KEY", "STORE_KEY_PUBLIC_JWK", "ALGO_NAME", "ALGO_CURVE", "EC_GEN_PARAMS", "isWebCryptoSupported", "hasCrypto", "hasSubtleCrypto", "clearKeys", "removeItem", "createJwt", "__async", "publicJwk", "getPublicKey", "subtle", "privateJwk", "getItem", "claims", "uuid", "headers", "jws", "strToUrlBase64", "data", "strToUint8", "sigType", "sig", "uint8ToUrlBase64", "generateWCKP", "kp", "jwkPublicKey", "setItem", "str", "binToUrlBase64", "utf8ToBinaryString", "bin", "_", "p1", "uint8", "code", "DEVICE_SHARE_KEY", "ENCRYPTION_KEY_KEY", "INITIALIZATION_VECTOR_KEY", "ALGO_NAME", "ALGO_LENGTH", "clearDeviceShares", "__async", "keysToRemove", "iterate", "value", "key", "iterationNumber", "removeItem", "arrayBufferToBase64", "buffer", "binary", "bytes", "len", "base64ToArrayBuffer", "base64", "binaryString", "getOrCreateInitVector", "isWebCryptoSupported", "crypto", "existingIv", "getItem", "getOrCreateEncryptionKey", "subtle", "existingKey", "encryptAndPersistDeviceShare", "deviceShareBase64", "networkHash", "iv", "encryptionKey", "decodedDeviceShare", "encryptedData", "encryptedDeviceShare", "setItem", "getDecryptedDeviceShare", "ab", "createURL", "url", "base", "UserModule", "BaseModule", "configuration", "requestPayload", "createJsonRpcRequestPayload", "createPromiEvent", "resolve", "reject", "__async", "cachedIsLoggedIn", "getItem", "isLoggedInResponse", "setItem", "removeItem", "err", "clearDeviceShares", "response", "scope", "showUI", "handle", "phone_number", "otp", "email", "newEmail", "callback", "totp", "recoveryCode", "loggedOut", "import_types", "WalletModule", "BaseModule", "options", "promiEvent", "createPromiEvent", "resolve", "reject", "__async", "loginRequestPayload", "createJsonRpcRequestPayload", "__spreadValues", "loginRequest", "event", "callback", "params", "result", "error", "config", "address", "transaction", "import_types", "ThirdPartyWalletsModule", "BaseModule", "payload", "provider", "createPromiEvent", "resolve", "reject", "walletStatus", "unsubscribeFromProviderEvents", "status", "_a", "walletType", "userAddress", "__async", "error", "import_types", "createBoundEmitterMethod", "createChainingEmitterMethod", "createTypedEmitter", "RPCProviderModule", "BaseModule", "payload", "onRequestComplete", "createInvalidArgumentError", "p", "standardizedPayload", "standardizeJsonRpcRequestPayload", "batchResponse", "response", "__spreadProps", "__spreadValues", "MagicRPCError", "finalPayload", "payloadOrMethod", "onRequestCompleteOrParams", "createJsonRpcRequestPayload", "warning", "createSynchronousWeb3MethodWarning", "JsonRpcResponse", "requestPayload", "testModePrefix", "sdkAccessFields", "getPrototypeChain", "instance", "currentProto", "protos", "BaseModule", "BaseExtension", "createPromiEvent", "isPromiEvent", "encodeJSON", "decodeJSON", "createJsonRpcRequestPayload", "standardizeJsonRpcRequestPayload", "storage_exports", "allSources", "prop", "allDescriptors", "source", "sourceIndex", "x", "isPrototypeField", "descriptor", "createExtensionNotInitializedError", "sdk", "options", "method", "removalVersion", "useInstead", "useInsteadSuffix", "message", "MagicExtensionWarning", "code", "data", "MagicExtensionError", "InternalExtension", "Extension", "import_types", "NFTModule", "BaseModule", "options", "requestPayload", "createJsonRpcRequestPayload", "isThirdPartyWalletConnected", "__spreadProps", "__spreadValues", "promiEvent", "rawTransaction", "__async", "hash", "error", "checkExtensionCompat", "ext", "SDKEnvironment", "satisfies", "coerce", "getNetworkHash", "apiKey", "network", "extConfig", "prepareExtensions", "options", "_a", "extensions", "incompatibleExtensions", "Extension", "isEmpty", "name", "createIncompatibleExtensionsError", "_SDKBase", "createMissingApiKeyError", "createReactNativeEndpointConfigurationWarning", "defaultEndpoint", "version", "createURL", "AuthModule", "UserModule", "WalletModule", "NFTModule", "ThirdPartyWalletsModule", "RPCProviderModule", "encodeJSON", "__spreadProps", "__spreadValues", "sdkNameToEnvName", "controller", "__async", "SDKBase", "import_types", "getRequestPayloadFromBatch", "requestPayload", "id", "p", "standardizeResponse", "event", "_a", "requestPayloadResolved", "response", "JsonRpcResponse", "createMagicRequest", "msgType", "payload", "networkHash", "__async", "rt", "getItem", "jwt", "SDKEnvironment", "createJwt", "e", "request", "decryptedDeviceShare", "getDecryptedDeviceShare", "persistMagicEventRefreshToken", "setItem", "debounce", "func", "delay", "timeoutId", "args", "SECOND", "MINUTE", "PING_INTERVAL", "INITIAL_HEARTBEAT_DELAY", "ViewController", "endpoint", "parameters", "networkHash", "debounce", "msgType", "payload", "__async", "createPromise", "resolve", "reject", "error", "createModalNotReadyError", "batchData", "batchIds", "p", "msg", "createMagicRequest", "acknowledgeResponse", "removeEventListener", "event", "_a", "id", "response", "standardizeResponse", "persistMagicEventRefreshToken", "clearDeviceShares", "deviceShare", "encryptAndPersistDeviceShare", "removeResponseListener", "handler", "boundHandler", "listener", "unsubscribe", "MagicSDKWarning", "firstPing", "sendPing", "message"]
|
|
7
7
|
}
|