quartz/wallet/node_modules/@magic-sdk/provider/dist/es/index.mjs.map
2022-03-04 20:05:23 +08:00

8 lines
123 KiB
Plaintext

{
"version": 3,
"sources": ["../../node_modules/eventemitter3/index.js", "../../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/events.ts", "../../src/util/promise-tools.ts", "../../src/modules/user.ts", "../../src/util/storage.ts", "../../src/util/uuid.ts", "../../src/util/web-crypto.ts", "../../src/modules/rpc-provider.ts", "../../src/util/url.ts", "../../src/modules/base-extension.ts", "../../src/core/sdk.ts", "../../src/core/view-controller.ts"],
"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", "/* 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 { Extension } 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(public code: SDKErrorCode, public rawMessage: string) {\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\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\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(public code: SDKWarningCode, public rawMessage: string) {\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(ext: Extension<string>, public code: string | number, public rawMessage: string, public data: TData) {\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(ext: Extension<string>, public code: string | number, public rawMessage: string) {\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: Extension<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: { [P in 'magic-sdk' | '@magic-sdk/react-native']: string };\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';\n version: string;\n platform: 'web' | 'react-native';\n defaultEndpoint: string;\n ViewController: ConstructorOf<ViewController>;\n configureStorage: () => Promise<typeof localForage>;\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};\n", "import { MagicPayloadMethod, LoginWithMagicLinkConfiguration, LoginWithSmsConfiguration } from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { SDKEnvironment } from '../core/sdk-environment';\n\ntype LoginWithMagicLinkEvents = {\n 'email-sent': () => void;\n 'email-not-deliverable': () => void;\n retry: () => void;\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 { email, showUI = true, redirectURI } = configuration;\n\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithMagicLinkTestMode : MagicPayloadMethod.LoginWithMagicLink,\n [{ email, showUI, redirectURI }],\n );\n return this.request<string | null, LoginWithMagicLinkEvents>(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 } = configuration;\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LoginWithSmsTestMode : MagicPayloadMethod.LoginWithSms,\n [{ phoneNumber, showUI: true }],\n );\n return this.request<string | null>(requestPayload);\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(credentialOrQueryString?: string) {\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],\n );\n\n return this.request<string | null>(requestPayload);\n }\n}\n", "import { JsonRpcRequestPayload, MagicOutgoingWindowMessage, MagicIncomingWindowMessage } from '@magic-sdk/types';\nimport { createMalformedResponseError, MagicRPCError } from '../core/sdk-exceptions';\nimport type { SDKBase } from '../core/sdk';\nimport { 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 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", "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", "/* eslint-disable no-param-reassign */\n\nimport { 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 /* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion */\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 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", "import { 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};\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 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 {\n GetIdTokenConfiguration,\n MagicPayloadMethod,\n MagicUserMetadata,\n GenerateIdTokenConfiguration,\n UpdateEmailConfiguration,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\nimport { clearKeys } from '../util/web-crypto';\n\ntype UpdateEmailEvents = {\n 'email-sent': () => void;\n 'email-not-deliverable': () => void;\n 'old-email-confirmed': () => void;\n 'new-email-confirmed': () => void;\n retry: () => void;\n};\n\nexport class UserModule extends BaseModule {\n /** */\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 /** */\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 /** */\n public getMetadata() {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.GetMetadataTestMode : MagicPayloadMethod.GetMetadata,\n );\n return this.request<MagicUserMetadata>(requestPayload);\n }\n\n /** */\n public updateEmail(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 return this.request<string | null, UpdateEmailEvents>(requestPayload);\n }\n\n /** */\n public isLoggedIn() {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.IsLoggedInTestMode : MagicPayloadMethod.IsLoggedIn,\n );\n return this.request<boolean>(requestPayload);\n }\n\n /** */\n public logout() {\n clearKeys();\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.LogoutTestMode : MagicPayloadMethod.Logout,\n );\n return this.request<boolean>(requestPayload);\n }\n\n /** */\n public showSettings() {\n const requestPayload = createJsonRpcRequestPayload(\n this.sdk.testMode ? MagicPayloadMethod.UserSettingsTestMode : MagicPayloadMethod.UserSettings,\n );\n return this.request<MagicUserMetadata>(requestPayload);\n }\n}\n", "import { SDKEnvironment } from '../core/sdk-environment';\n\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", "/* eslint-disable no-bitwise */\nexport 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};\nconst EC_IMPORT_PARAMS: EcKeyImportParams = {\n name: ALGO_NAME,\n namedCurve: ALGO_CURVE,\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 let jwkPublicKey = null;\n const { subtle } = window.crypto;\n const kp = await subtle.generateKey(\n EC_GEN_PARAMS,\n true, // need to export the public key which means private exports too\n ['sign'],\n );\n\n // export keys so we can send the public key.\n const jwkPrivateKey = await subtle.exportKey('jwk', kp.privateKey!);\n jwkPublicKey = await subtle.exportKey('jwk', kp.publicKey!);\n\n // reimport the private key so it becomes non exportable when persisting.\n const nonExportPrivateKey = await subtle.importKey('jwk', jwkPrivateKey, EC_IMPORT_PARAMS, false, ['sign']);\n\n // persist keys\n await setItem(STORE_KEY_PRIVATE_KEY, nonExportPrivateKey);\n // persist the jwk public key since it needs to be exported anyways\n await setItem(STORE_KEY_PUBLIC_JWK, jwkPublicKey);\n}\n\nfunction 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\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", "/* eslint-disable consistent-return, prefer-spread */\n\nimport {\n JsonRpcRequestPayload,\n JsonRpcRequestCallback,\n MagicOutgoingWindowMessage,\n JsonRpcBatchRequestCallback,\n JsonRpcResponsePayload,\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 /* eslint-disable prettier/prettier */\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 /* eslint-enable prettier/prettier */\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 /* eslint-disable prettier/prettier */\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 /* eslint-enable prettier/prettier */\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 /* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion */\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('eth_accounts');\n return this.request<string[]>(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 // eslint-disable-next-line no-param-reassign\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", "/**\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 { 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\ntype AnonymousExtension = 'anonymous extension';\n\ninterface BaseExtension<TName extends string = AnonymousExtension> 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 };\n}\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\nabstract class BaseExtension<TName extends string = AnonymousExtension> extends BaseModule {\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) => !!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 abstract class Extension<TName extends string = AnonymousExtension> extends BaseExtension<TName> {\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 public static Anonymous: AnonymousExtension = 'anonymous extension';\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 Extension<string>[]> = UnwrapArray<TExt> extends Extension<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 Extension<string>[], TExtName extends string> = {\n [P in TExtName]: Extract<UnwrapArray<TExt>, Extension<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 {\n [P in Exclude<\n TExt extends Extension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n number | AnonymousExtension\n >]: TExt extends Extension<string>[]\n ? Omit<GetExtensionFromName<TExt, P>, HiddenExtensionFields>\n : TExt extends {\n [P in Exclude<\n TExt extends Extension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n number | AnonymousExtension\n >]: Extension<string>;\n }\n ? Omit<TExt[P], HiddenExtensionFields>\n : never;\n };\n", "/* eslint-disable no-param-reassign */\n\nimport { EthNetworkConfiguration, QueryParameters, SupportedLocale } from '@magic-sdk/types';\nimport type { AbstractProvider } from 'web3-core';\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 { RPCProviderModule } from '../modules/rpc-provider';\nimport { ViewController } from './view-controller';\nimport { createURL } from '../util/url';\nimport { Extension } from '../modules/base-extension';\nimport { isEmpty } from '../util/type-guards';\nimport { SDKEnvironment, sdkNameToEnvName } from './sdk-environment';\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: Extension<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 * 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: Extension<string>[] | { [key: string]: Extension<string> } = options?.extensions ?? [];\n const extConfig: any = {};\n const incompatibleExtensions: Extension<string>[] = [];\n\n if (Array.isArray(extensions)) {\n extensions.forEach((ext) => {\n if (checkExtensionCompat(ext)) {\n ext.init(this);\n if (ext.name || ext.name !== Extension.Anonymous) {\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 | Extension<string>[]\n | { [P in TCustomExtName]: Extension<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}\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 public readonly testMode: 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 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 & AbstractProvider;\n\n /**\n * Creates an instance of Magic SDK.\n */\n constructor(public readonly apiKey: string, options?: MagicSDKAdditionalConfiguration) {\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.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.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 });\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);\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\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.ready;\n }\n}\n", "import {\n MagicIncomingWindowMessage,\n MagicOutgoingWindowMessage,\n JsonRpcRequestPayload,\n MagicMessageEvent,\n MagicMessageRequest,\n} from '@magic-sdk/types';\nimport { JsonRpcResponse } from './json-rpc';\nimport { createPromise } from '../util/promise-tools';\nimport { getItem, setItem } from '../util/storage';\nimport { createJwt } from '../util/web-crypto';\nimport { SDKEnvironment } from './sdk-environment';\n\ninterface RemoveEventListenerFunction {\n (): void;\n}\n\ninterface StandardizedResponse {\n id?: string | number;\n response?: JsonRpcResponse;\n}\n\n/**\n * Get the originating payload from a batch request using the specified `id`.\n */\nfunction 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 */\nfunction 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\nasync function createMagicRequest(msgType: string, payload: JsonRpcRequestPayload | JsonRpcRequestPayload[]) {\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 createJwt();\n } catch (e) {\n console.error('webcrypto error', e);\n }\n }\n\n if (!jwt) {\n return { msgType, payload };\n }\n\n if (!rt) {\n return { msgType, payload, jwt };\n }\n\n return { msgType, payload, jwt, rt };\n}\n\nasync function persistMagicEventRefreshToken(event: MagicMessageEvent) {\n if (!event.data.rt) {\n return;\n }\n\n await setItem('rt', event.data.rt);\n}\n\nexport abstract class ViewController {\n public ready: Promise<void>;\n protected readonly messageHandlers = new Set<(event: MagicMessageEvent) => any>();\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 */\n constructor(protected readonly endpoint: string, protected readonly parameters: string) {\n this.ready = this.waitForReady();\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\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) => {\n await this.ready;\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);\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\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 private waitForReady() {\n return new Promise<void>((resolve) => {\n this.on(MagicIncomingWindowMessage.MAGIC_OVERLAY_READY, () => resolve());\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}\n"],
"mappings": "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",
"names": []
}