{
  "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/core/json-rpc.ts", "../../src/util/get-payload-id.ts", "../../src/util/storage.ts", "../../src/util/uuid.ts", "../../src/util/web-crypto.ts", "../../src/util/promise-tools.ts", "../../src/util/events.ts", "../../src/util/version-check.ts", "../../src/util/polyfills.ts", "../../src/modules/user.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/nft.ts", "../../src/core/sdk.ts", "../../src/core/view-controller.ts", "../../src/util/view-controller-utils.ts", "../../src/modules/base-extension.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\n/**\n * Encode given buffer or decode given string with Base64URL.\n */\n/* istanbul ignore next */\nexport class Base64URL {\n  /**\n   * Convert bytes into a base64url-encoded string\n   */\n  static encode(buffer: ArrayBuffer): string {\n    const bytes = new Uint8Array(buffer);\n    const chunkSize = 0x8000;\n    const chunks: string[] = [];\n    \n    for (let i = 0; i < bytes.length; i += chunkSize) {\n      chunks.push(String.fromCharCode(...bytes.subarray(i, i + chunkSize)));\n    }\n    const base64 = globalThis.btoa(chunks.join(''));\n\n    return base64.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n  }\n\n  /**\n   * Convert a base64url-encoded string into bytes\n   */\n  static decode(base64url: string): ArrayBuffer {\n    const base64 = base64url.replace(/-/g, '+').replace(/_/g, '/');\n    const binStr = globalThis.atob(base64);\n    const bin = new Uint8Array(binStr.length);\n\n    for (let i = 0; i < binStr.length; i++) {\n      bin[i] = binStr.charCodeAt(i);\n    }\n\n    return bin.buffer;\n  }\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\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 * intersection 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  MfaEventOnReceived,\n  MfaEventEmit,\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';\nimport { parseRequestOptionsFromJSON, toJSON } from '../util/polyfills';\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 utilize 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 Decentralized 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.VerifyMFACode, (mfa: string) => {\n        this.createIntermediaryEvent(LoginWithSmsOTPEventEmit.VerifyMFACode, requestPayload.id as string)(mfa);\n      });\n\n      handle.on(LoginWithSmsOTPEventEmit.LostDevice, () => {\n        this.createIntermediaryEvent(LoginWithSmsOTPEventEmit.LostDevice, requestPayload.id as string)();\n      });\n\n      handle.on(LoginWithSmsOTPEventEmit.VerifyRecoveryCode, (recoveryCode: string) => {\n        this.createIntermediaryEvent(\n          LoginWithSmsOTPEventEmit.VerifyRecoveryCode,\n          requestPayload.id as string,\n        )(recoveryCode);\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 Decentralized 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\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      handle.on(MfaEventEmit.SelectedMfaType, type => {\n        this.createIntermediaryEvent(MfaEventEmit.SelectedMfaType, requestPayload.id as any)(type);\n      });\n    }\n\n    if (handle) {\n      handle.on(MfaEventOnReceived.MfaPasskeyOptions, async ({ webauthnOptions }) => {\n        try {\n          const assertionResponse = (await navigator.credentials.get({\n            publicKey: parseRequestOptionsFromJSON(webauthnOptions),\n          })) as any;\n\n          this.createIntermediaryEvent(\n            MfaEventEmit.MfaPasskeyAssertionResponse,\n            requestPayload.id as any,\n          )(toJSON(assertionResponse));\n        } catch (err) {\n          const error = err as Error;\n          this.createIntermediaryEvent(\n            MfaEventEmit.MfaPasskeyAssertionError,\n            requestPayload.id as any,\n          )(error?.message ?? '');\n        }\n      });\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      return this.requestThirdPartyWallets<ResultType, Events>(payload);\n    } else {\n      return this.requestOverlay<ResultType, Events>(payload);\n    }\n  }\n\n  protected requestThirdPartyWallets<ResultType = any, Events extends EventsDefinition = void>(\n    payload: Partial<JsonRpcRequestPayload>,\n  ) {\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  protected requestOverlay<ResultType = any, Events extends EventsDefinition = void>(\n    payload: Partial<JsonRpcRequestPayload>,\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", "import { JsonRpcRequestPayload, JsonRpcResponsePayload, JsonRpcError, RPCErrorCode } from '@magic-sdk/types';\nimport { isJsonRpcResponsePayload } from '../util/type-guards';\nimport { getPayloadId } from '../util/get-payload-id';\nimport { clearKeys } from '../util/web-crypto';\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 * payload 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    // Handle DPOP error and rotate new keys\n    if (this._error?.code === RPCErrorCode.DpopInvalidated) {\n      clearKeys();\n    }\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 { SDKEnvironment } from '../core/sdk-environment';\n\nfunction* 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 * Generate a random integer ID for react-native platforms.\n */\nfunction getRandomId(): number {\n  return Math.floor(Math.random() * 100000) + 1;\n}\n\n/**\n * Get an integer ID for attaching to a JSON RPC request payload.\n * Uses random ID generation for react-native bare or expo platforms,\n * otherwise uses sequential integer generation.\n */\nexport function getPayloadId(): number {\n  const isReactNativeBareOrExpo =\n    SDKEnvironment.sdkName === '@magic-sdk/react-native-bare' ||\n    SDKEnvironment.sdkName === '@magic-sdk/react-native-expo';\n\n  if (isReactNativeBareOrExpo) {\n    return getRandomId();\n  }\n\n  return intGenerator.next().value;\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 undefined if webcrypto is not supported\n  const publicJwk = await getPublicKey();\n\n  if (!publicJwk) {\n    console.info('unable to creat kee publicy 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 keeping 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 { UserEventsEmit, UserEventsOnReceived } from '@magic-sdk/types';\nimport { TypedEmitter, EventsDefinition, createTypedEmitter } from './events';\n\n/**\n * Extends `Promise` with a polymorphic `this` type to accommodate 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 { Base64URL } from './base64-json';\n\nfunction isAuthenticatorAssertionResponse(value: AuthenticatorResponse): value is AuthenticatorAssertionResponse {\n  if (typeof value !== 'object') {\n    return false;\n  }\n  if (\n    (value as AuthenticatorAssertionResponse)?.authenticatorData === undefined ||\n    typeof (value as AuthenticatorAssertionResponse)?.authenticatorData !== 'object'\n  ) {\n    return false;\n  }\n  return true;\n}\n\nfunction isAuthenticatorAttestationResponse(value: AuthenticatorResponse): value is AuthenticatorAttestationResponse {\n  if (typeof value !== 'object') {\n    return false;\n  }\n  if (\n    (value as AuthenticatorAttestationResponse)?.attestationObject === undefined ||\n    typeof (value as AuthenticatorAttestationResponse)?.attestationObject !== 'object'\n  ) {\n    return false;\n  }\n  return true;\n}\n\n/**\n * Polyfill `PublicKeyCredential.prototype.toJSON`\n *\n * See https://w3c.github.io/webauthn/#dom-publickeycredential-tojson\n */\nexport function toJSON(cred: PublicKeyCredential): PublicKeyCredentialJSON {\n  // Prefer native implementation if available\n  if (typeof cred.toJSON === 'function') {\n    return cred.toJSON();\n  }\n\n  try {\n    const id = cred.id;\n    const rawId = Base64URL.encode(cred.rawId);\n    const authenticatorAttachment = cred.authenticatorAttachment;\n    const clientExtensionResults = {};\n    const type = cred.type;\n\n    // This is authentication.\n    if (isAuthenticatorAssertionResponse(cred.response)) {\n      return {\n        id,\n        rawId,\n        response: {\n          authenticatorData: Base64URL.encode(cred.response.authenticatorData),\n          clientDataJSON: Base64URL.encode(cred.response.clientDataJSON),\n          signature: Base64URL.encode(cred.response.signature),\n          userHandle: cred.response.userHandle ? Base64URL.encode(cred.response.userHandle) : undefined,\n        },\n        authenticatorAttachment,\n        clientExtensionResults,\n        type,\n      };\n    }\n\n    if (isAuthenticatorAttestationResponse(cred.response)) {\n      // This is registration.\n      return {\n        id,\n        rawId,\n        response: {\n          clientDataJSON: Base64URL.encode(cred.response.clientDataJSON),\n          attestationObject: Base64URL.encode(cred.response.attestationObject),\n          transports: cred.response?.getTransports() || [],\n        },\n        authenticatorAttachment,\n        clientExtensionResults,\n        type,\n      };\n    }\n\n    throw new Error('Unexpected object.');\n  } catch (error) {\n    console.error(error);\n    throw error;\n  }\n}\n\n/**\n * Polyfill `PublicKeyCredential.parseRequestOptionsFromJSON`\n *\n * See https://w3c.github.io/webauthn/#sctn-parseRequestOptionsFromJSON\n */\nexport function parseRequestOptionsFromJSON(\n  options: PublicKeyCredentialRequestOptionsJSON,\n): PublicKeyCredentialRequestOptions {\n  if (\n    typeof PublicKeyCredential !== 'undefined' &&\n    typeof PublicKeyCredential.parseRequestOptionsFromJSON === 'function'\n  ) {\n    return PublicKeyCredential.parseRequestOptionsFromJSON(options);\n  }\n\n  const challenge = Base64URL.decode(options.challenge) as ArrayBuffer;\n  const allowCredentials =\n    options.allowCredentials?.map(cred => {\n      return {\n        ...cred,\n        id: Base64URL.decode(cred.id) as ArrayBuffer,\n        transports: cred.transports as AuthenticatorTransport[] | undefined,\n      } as PublicKeyCredentialDescriptor;\n    }) ?? [];\n\n  const toReturn = {\n    ...options,\n    allowCredentials,\n    challenge,\n  } as PublicKeyCredentialRequestOptions;\n\n  return toReturn;\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    removeItem('rt');\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 revealEVMPrivateKey() {\n    const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.RevealPK, [{ chain: 'ETH' }]);\n    return this.request<boolean>(requestPayload);\n  }\n\n  public revealPrivateKey() {\n    throw new Error(\n      'revealPrivateKey() has been decommissioned. For EVM chains, use `user.revealEVMPrivateKey()` instead. For non-EVM chains, use `[extension].revealPrivateKey()` instead.',\n    );\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 { 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  MagicPayloadMethod,\n  ConnectWithUIOptions,\n  ConnectWithUiEvents,\n  ShowUIPromiEvents,\n  Sign7702AuthorizationRequest,\n  Sign7702AuthorizationResponse,\n  Send7702TransactionRequest,\n  Send7702TransactionResponse,\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  /**\n   * Sign an EIP-7702 authorization to delegate the EOA to a smart contract implementation.\n   * This enables account abstraction features for externally owned accounts.\n   *\n   * @param params - The authorization parameters including contractAddress, chainId, and optional nonce\n   * @returns Promise resolving to the signed authorization with signature components (v, r, s)\n   *\n   * @example\n   * ```typescript\n   * const authorization = await magic.wallet.sign7702Authorization({\n   *   contractAddress: '0x000000004F43C49e93C970E84001853a70923B03',\n   *   chainId: 1,\n   *   nonce: 0\n   * });\n   * ```\n   */\n  public sign7702Authorization(params: Sign7702AuthorizationRequest) {\n    return this.request<Sign7702AuthorizationResponse>(\n      createJsonRpcRequestPayload(MagicPayloadMethod.Sign7702Authorization, [params]),\n    );\n  }\n\n  /**\n   * Send an EIP-7702 (Type-4) transaction with an authorization list.\n   * This allows executing transactions with delegated smart contract implementations.\n   *\n   * @param params - The transaction parameters including to, value, data, gas settings, and authorizationList\n   * @returns Promise resolving to the transaction hash\n   *\n   * @example\n   * ```typescript\n   * // First, sign the authorization\n   * const auth = await magic.wallet.sign7702Authorization({\n   *   contractAddress: '0x000000004F43C49e93C970E84001853a70923B03',\n   *   chainId: 1,\n   * });\n   *\n   * // Then, send the transaction with the authorization\n   * const { transactionHash } = await magic.wallet.send7702Transaction({\n   *   to: '0x...',\n   *   data: '0x...',\n   *   authorizationList: [auth],\n   * });\n   * ```\n   */\n  public send7702Transaction(params: Send7702TransactionRequest) {\n    return this.request<Send7702TransactionResponse>(\n      createJsonRpcRequestPayload(MagicPayloadMethod.Send7702Transaction, [params]),\n    );\n  }\n\n}\n", "import {\n  JsonRpcError,\n  JsonRpcRequestPayload,\n  LocalStorageKeys,\n  MagicPayloadMethod,\n  MagicThirdPartyWalletRequest,\n  MagicUserMetadata,\n  ThirdPartyWalletEvents,\n} from '@magic-sdk/types';\nimport { BaseModule } from './base-module';\nimport { PromiEvent, createPromiEvent } from '../util';\nimport { MagicRPCError } from '../core/sdk-exceptions';\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 'magic-widget':\n        return this.magicWidgetRequest(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 'magic-widget':\n        return super.requestOverlay(payload);\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 'magic-widget':\n        return super.requestOverlay(payload);\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 'magic-widget': {\n        return this.magicWidgetLogout(payload);\n      }\n      default:\n        return super.request(payload);\n    }\n  }\n\n  /* Magic Widget Methods */\n\n  private magicWidgetRequest(payload: Partial<JsonRpcRequestPayload>) {\n    const ethRpcPrefixes = ['eth_', 'wallet_', 'net_', 'web3_'];\n    const isEthRequest = ethRpcPrefixes.some(prefix => payload.method?.startsWith(prefix));\n    const SIGN_REQUESTS = ['personal_sign'];\n\n    if (isEthRequest || SIGN_REQUESTS.includes(payload.method as string)) {\n      return createPromiEvent<unknown>((resolve, reject) => {\n        // @ts-expect-error Property 'walletKit' does not exist on type 'SDKBase'.\n        this.sdk.walletKit\n          .walletRequest(payload)\n          .then(resolve)\n          .catch((error: unknown) => reject(new MagicRPCError(error as JsonRpcError)));\n      });\n    }\n\n    return super.requestOverlay(payload);\n  }\n\n  private magicWidgetLogout(payload: Partial<JsonRpcRequestPayload>): PromiEvent<boolean> {\n    return createPromiEvent<boolean>(async resolve => {\n      try {\n        // @ts-expect-error Property 'walletKit' does not exist on type 'SDKBase'.\n        this.sdk.walletKit.clearConnectedState();\n      } catch (error) {\n        console.error(error);\n      }\n\n      return super.requestOverlay(payload);\n    });\n  }\n\n  public handleIframeThirdPartyWalletRequest(event: MagicThirdPartyWalletRequest) {\n    this.magicWidgetRequest(event.payload)\n      .then(response => {\n        this.overlay.postThirdPartyWalletResponse({\n          id: event.payload.id,\n          jsonrpc: '2.0',\n          result: response,\n        });\n      })\n      .catch(error => {\n        this.overlay.postThirdPartyWalletResponse({\n          id: event.payload.id,\n          jsonrpc: '2.0',\n          error: {\n            code: error.code || -32603,\n            message: error.message || 'Internal error',\n            data: error.data,\n          },\n        });\n      });\n  }\n}\n", "import {\n  JsonRpcRequestPayload,\n  JsonRpcRequestCallback,\n  MagicOutgoingWindowMessage,\n  JsonRpcBatchRequestCallback,\n  JsonRpcResponsePayload,\n  ProviderEnableEvents,\n  MagicPayloadMethod,\n  routeToMagicMethods,\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\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      const standardizedPayloads = payload.map(p => {\n        const standardizedPayload = standardizeJsonRpcRequestPayload(p);\n        return standardizedPayload;\n      });\n\n      const requestPromises = standardizedPayloads.map(p =>\n        this.request(p)\n          .then(result => ({\n            jsonrpc: p.jsonrpc ?? '2.0',\n            id: p.id ?? null,\n            result,\n            error: null,\n          }))\n          .catch(error => ({\n            jsonrpc: p.jsonrpc ?? '2.0',\n            id: p.id ?? null,\n            error,\n          })),\n      );\n\n      Promise.all(requestPromises).then(batchResponse => {\n        (onRequestComplete as JsonRpcBatchRequestCallback)(null, batchResponse);\n      });\n    } else {\n      this.request(standardizeJsonRpcRequestPayload(payload))\n        .then(result => {\n          (onRequestComplete as JsonRpcRequestCallback)(null, {\n            jsonrpc: payload.jsonrpc ?? '2.0',\n            id: payload.id ?? null,\n            result,\n            error: null,\n          });\n        })\n        .catch(error => {\n          (onRequestComplete as JsonRpcRequestCallback)(error, {\n            jsonrpc: payload.jsonrpc ?? '2.0',\n            id: payload.id ?? null,\n            error,\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  public 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 {\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 {\n  EthNetworkConfiguration,\n  MagicThirdPartyWalletRequest,\n  QueryParameters,\n  SupportedLocale,\n} 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 } 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 compatibility 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 (!isEmpty(ext.config)) extConfig[ext.name] = ext.config;\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 (!isEmpty(ext.config)) extConfig[extensions[name].name] = ext.config;\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  authConfig?: { skipDIDToken: boolean }; // Skip DID Token generation\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: typeof window !== 'undefined' && 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      authConfig: options?.authConfig ? { ...options.authConfig } : undefined,\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 it here so that the `ViewController` is ready for use.\n      controller.init();\n\n      // Register the handler for third party wallet requests from the iframe\n      controller.onThirdPartyWalletRequest((event: MagicThirdPartyWalletRequest) =>\n        this.thirdPartyWallets.handleIframeThirdPartyWalletRequest(event),\n      );\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  MagicThirdPartyWalletRequest,\n  MagicThirdPartyWalletEventPayload,\n  MagicThirdPartyWalletResponse,\n  MagicThirdPartyWalletUpdate,\n} from '@magic-sdk/types';\nimport { JsonRpcResponse } from './json-rpc';\nimport { createPromise } from '../util/promise-tools';\nimport { MagicSDKWarning, createModalNotReadyError } from './sdk-exceptions';\nimport {\n  clearDeviceShares,\n  encryptAndPersistDeviceShare,\n  getDecryptedDeviceShare,\n} from '../util/device-share-web-crypto';\nimport { standardizeResponse, debounce, StandardizedMagicRequest } from '../util/view-controller-utils';\nimport { setItem, getItem } from '../util/storage';\nimport { SDKEnvironment } from './sdk-environment';\nimport { createJwt } from '../util/web-crypto';\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  protected thirdPartyWalletRequestHandler: (event: MagicThirdPartyWalletRequest) => 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   * @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 | MagicThirdPartyWalletEventPayload): 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 this.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        this.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  public async postThirdPartyWalletResponse(response: MagicThirdPartyWalletResponse['response']): Promise<void> {\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 msg = {\n        msgType: `${MagicOutgoingWindowMessage.MAGIC_THIRD_PARTY_WALLET_RESPONSE}-${this.parameters}`,\n        response,\n      } as MagicThirdPartyWalletResponse;\n\n      await this._post(msg);\n      resolve();\n    });\n  }\n\n  public async postThirdPartyWalletUpdate(details: MagicThirdPartyWalletUpdate['details']): Promise<void> {\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      // Strip non-serializable properties (e.g. functions on chain objects) before postMessage\n      const sanitizedDetails = JSON.parse(JSON.stringify(details, (_, value) => (typeof value === 'function' ? undefined : value)));\n      const msg = {\n        msgType: `${MagicOutgoingWindowMessage.MAGIC_THIRD_PARTY_WALLET_UPDATE}-${this.parameters}`,\n        details: sanitizedDetails,\n      } as MagicThirdPartyWalletUpdate;\n\n      await this._post(msg);\n      resolve();\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  public onThirdPartyWalletRequest(handler: (event: MagicThirdPartyWalletRequest) => any) {\n    this.thirdPartyWalletRequestHandler = handler;\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  async persistMagicEventRefreshToken(event: MagicMessageEvent) {\n    if (!event.data.rt) {\n      return;\n    }\n\n    await setItem('rt', event.data.rt);\n  }\n\n  async createMagicRequest(\n    msgType: string,\n    payload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n    networkHash: string,\n  ) {\n    const request: StandardizedMagicRequest = { msgType, payload };\n\n    const rt = await this.getRT();\n    const jwt = await this.getJWT();\n    const decryptedDeviceShare = await this.getDecryptedDeviceShare(networkHash);\n\n    if (jwt) {\n      request.jwt = jwt;\n    }\n\n    if (jwt && rt) {\n      request.rt = rt;\n    }\n\n    // Grab the device share if it exists for the network\n    if (decryptedDeviceShare) {\n      request.deviceShare = decryptedDeviceShare;\n    }\n\n    return request;\n  }\n\n  async getJWT(): Promise<string | null | undefined> {\n    // only for webcrypto platforms\n    if (SDKEnvironment.platform === 'web') {\n      try {\n        const jwtFromStorage = await getItem<string>('jwt');\n        if (jwtFromStorage) return jwtFromStorage;\n\n        const newJwt = await createJwt();\n        return newJwt;\n      } catch (e) {\n        console.error('webcrypto error', e);\n        return null;\n      }\n    } else {\n      return null;\n    }\n  }\n\n  async getRT(): Promise<string | null> {\n    return await getItem<string>('rt');\n  }\n\n  async getDecryptedDeviceShare(networkHash: string) {\n    return await getDecryptedDeviceShare(networkHash);\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\nexport interface 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 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", "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';\nimport { MagicPayloadMethod } from '@magic-sdk/types';\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 && currentProto !== BaseModule.prototype) {\n    currentProto = Object.getPrototypeOf(currentProto);\n\n    protos.push(currentProto);\n  }\n\n  return protos;\n}\n\nexport abstract class BaseExtension<TName extends string, TConfig extends any = any> extends BaseModule {\n  /**\n   * A structure describing the platform and version compatibility 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  public abstract readonly config: TConfig;\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 * Base class for multi-chain extensions, extracting getPublicAddress and revealPrivateKey logic.\n */\nexport abstract class MultichainExtension<TName extends string, TConfig extends any = any> extends InternalExtension<\n  TName,\n  TConfig\n> {\n  public readonly chain: string;\n  constructor(public readonly config: TConfig) {\n    super();\n    this.chain = (config as any).chainType;\n  }\n\n  public getPublicAddress() {\n    return this.request<string>(\n      this.utils.createJsonRpcRequestPayload(MagicPayloadMethod.GetMultichainPublicAddress, [{ chain: this.chain }]),\n    );\n  }\n\n  public revealPrivateKey() {\n    return this.request<boolean>(\n      this.utils.createJsonRpcRequestPayload(MagicPayloadMethod.RevealPK, [{ chain: this.chain }]),\n    );\n  }\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"],
  "mappings": "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",
  "names": ["require_eventemitter3", "__commonJSMin", "exports", "module", "has", "prefix", "Events", "EE", "fn", "context", "once", "addListener", "emitter", "event", "listener", "evt", "clearEvent", "EventEmitter", "names", "events", "name", "handlers", "i", "l", "ee", "listeners", "a1", "a2", "a3", "a4", "a5", "len", "args", "length", "j", "createCommonjsModule", "e", "r", "MAX_SAFE_INTEGER$1", "constants", "MAX_SAFE_INTEGER$1", "debug", "e", "debug_1", "re_1", "createCommonjsModule", "r", "i", "o", "a", "n", "t", "numeric", "compareIdentifiers$1", "rcompareIdentifiers", "identifiers", "MAX_LENGTH$1", "MAX_SAFE_INTEGER", "re$4", "t$4", "compareIdentifiers", "SemVer", "_SemVer", "s", "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", "_Comparator", "re$3", "t$3", "Range", "_Range", "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", "Base64URL", "buffer", "bytes", "chunkSize", "chunks", "i", "base64url", "base64", "binStr", "bin", "RPCErrorCode", "SDKErrorCode", "SDKWarningCode", "MagicPayloadMethod", "RPCErrorCode", "isUndefined", "value", "isNull", "isNil", "isJsonRpcRequestPayload", "isJsonRpcResponsePayload", "isMagicPayloadMethod", "isJsonRpcErrorCode", "isEmpty", "key", "SDKEnvironment", "createSDK", "SDKBaseCtor", "environment", "sdkNameToEnvName", "MagicSDKError", "_MagicSDKError", "code", "rawMessage", "MagicRPCError", "_MagicRPCError", "sourceError", "codeNormalized", "isJsonRpcErrorCode", "RPCErrorCode", "MagicSDKWarning", "MagicExtensionError", "_MagicExtensionError", "ext", "data", "MagicExtensionWarning", "createMissingApiKeyError", "SDKErrorCode", "createModalNotReadyError", "createMalformedResponseError", "createExtensionNotInitializedError", "member", "createIncompatibleExtensionsError", "extensions", "msg", "SDKEnvironment", "compat", "createInvalidArgumentError", "options", "ordinalSuffix", "i", "iAdjusted", "j", "k", "createDuplicateIframeWarning", "SDKWarningCode", "createSynchronousWeb3MethodWarning", "createReactNativeEndpointConfigurationWarning", "createDeprecationWarning", "method", "removalVersions", "useInstead", "removalVersion", "useInsteadSuffix", "message", "MagicPayloadMethod", "DeviceVerificationEventEmit", "LoginWithEmailOTPEventEmit", "UpdateEmailEventEmit", "RecencyCheckEventEmit", "LoginWithSmsOTPEventEmit", "MfaEventOnReceived", "MfaEventEmit", "MagicOutgoingWindowMessage", "MagicIncomingWindowMessage", "MagicPayloadMethod", "routeToMagicMethods", "RPCErrorCode", "createIntGenerator", "index", "intGenerator", "getRandomId", "getPayloadId", "SDKEnvironment", "storage_exports", "__export", "clear", "getItem", "iterate", "key", "keys", "length", "removeItem", "setItem", "lf", "proxyLocalForageMethod", "method", "args", "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", "publicJwk", "getPublicKey", "subtle", "privateJwk", "getItem", "claims", "uuid", "jws", "strToUrlBase64", "data", "strToUint8", "sigType", "sig", "uint8ToUrlBase64", "generateWCKP", "kp", "jwkPublicKey", "setItem", "str", "binToUrlBase64", "utf8ToBinaryString", "bin", "_", "p1", "uint8", "code", "payloadPreprocessedSymbol", "markPayloadAsPreprocessed", "payload", "isPayloadPreprocessed", "standardizeJsonRpcRequestPayload", "getPayloadId", "createJsonRpcRequestPayload", "method", "params", "JsonRpcResponse", "_JsonRpcResponse", "responseOrPayload", "isJsonRpcResponsePayload", "error", "result", "RPCErrorCode", "clearKeys", "UserEventsEmit", "UserEventsOnReceived", "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", "UserEventsOnReceived", "UserEventsEmit", "resolve", "reject", "BaseModule", "sdk", "payload", "routeToMagicMethods", "createPromiEvent", "resolve", "reject", "responsePromise", "MagicOutgoingWindowMessage", "standardizeJsonRpcRequestPayload", "promiEvent", "res", "cleanupEvents", "MagicRPCError", "createMalformedResponseError", "err", "MagicIncomingWindowMessage", "evt", "response", "event", "params", "eventType", "payloadId", "args", "createJsonRpcRequestPayload", "MagicPayloadMethod", "isMajorVersionAtLeast", "version", "majorVersion", "major", "isAuthenticatorAssertionResponse", "value", "isAuthenticatorAttestationResponse", "toJSON", "cred", "id", "rawId", "Base64URL", "authenticatorAttachment", "clientExtensionResults", "type", "error", "parseRequestOptionsFromJSON", "options", "challenge", "allowCredentials", "ProductConsolidationMethodRemovalVersions", "AuthModule", "BaseModule", "configuration", "isRNMobilePackage", "SDKEnvironment", "isMajorVersionAtLeast", "createDeprecationWarning", "email", "showUI", "redirectURI", "overrides", "lifespan", "requestPayload", "createJsonRpcRequestPayload", "MagicPayloadMethod", "phoneNumber", "handle", "LoginWithSmsOTPEventEmit", "otp", "mfa", "recoveryCode", "deviceCheckUI", "DeviceVerificationEventEmit", "LoginWithEmailOTPEventEmit", "MfaEventEmit", "type", "MfaEventOnReceived", "webauthnOptions", "assertionResponse", "parseRequestOptionsFromJSON", "toJSON", "err", "error", "credentialOrQueryString", "credentialResolved", "urlWithoutQuery", "jwt", "RecencyCheckEventEmit", "UpdateEmailEventEmit", "newEmail", "MagicPayloadMethod", "EnableMFAEventEmit", "DisableMFAEventEmit", "RecencyCheckEventEmit", "RecoveryFactorEventEmit", "RecoverAccountEventEmit", "UpdateEmailEventEmit", "DEVICE_SHARE_KEY", "ENCRYPTION_KEY_KEY", "INITIALIZATION_VECTOR_KEY", "ALGO_NAME", "ALGO_LENGTH", "clearDeviceShares", "keysToRemove", "iterate", "value", "key", "iterationNumber", "removeItem", "arrayBufferToBase64", "buffer", "binary", "bytes", "len", "i", "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", "MagicPayloadMethod", "createPromiEvent", "resolve", "reject", "cachedIsLoggedIn", "getItem", "isLoggedInResponse", "setItem", "removeItem", "err", "clearDeviceShares", "response", "scope", "showUI", "handle", "RecoveryFactorEventEmit", "phone_number", "otp", "RecencyCheckEventEmit", "email", "RecoverAccountEventEmit", "newEmail", "UpdateEmailEventEmit", "callback", "EnableMFAEventEmit", "totp", "DisableMFAEventEmit", "recoveryCode", "loggedOut", "MagicPayloadMethod", "WalletModule", "BaseModule", "options", "promiEvent", "createPromiEvent", "resolve", "reject", "loginRequestPayload", "createJsonRpcRequestPayload", "MagicPayloadMethod", "loginRequest", "event", "callback", "params", "result", "error", "config", "LocalStorageKeys", "MagicPayloadMethod", "ThirdPartyWalletsModule", "BaseModule", "LocalStorageKeys", "payload", "MagicPayloadMethod", "provider", "prefix", "createPromiEvent", "resolve", "reject", "error", "MagicRPCError", "event", "response", "MagicPayloadMethod", "createBoundEmitterMethod", "createChainingEmitterMethod", "createTypedEmitter", "RPCProviderModule", "BaseModule", "payload", "onRequestComplete", "createInvalidArgumentError", "requestPromises", "p", "standardizeJsonRpcRequestPayload", "result", "error", "batchResponse", "payloadOrMethod", "onRequestCompleteOrParams", "createJsonRpcRequestPayload", "warning", "createSynchronousWeb3MethodWarning", "JsonRpcResponse", "requestPayload", "MagicPayloadMethod", "testModePrefix", "MagicPayloadMethod", "NftCheckoutIntermediaryEvents", "NFTModule", "BaseModule", "options", "requestPayload", "createJsonRpcRequestPayload", "MagicPayloadMethod", "isThirdPartyWalletConnected", "promiEvent", "NftCheckoutIntermediaryEvents", "rawTransaction", "hash", "checkExtensionCompat", "ext", "SDKEnvironment", "satisfies", "coerce", "getNetworkHash", "apiKey", "network", "extConfig", "prepareExtensions", "options", "extensions", "incompatibleExtensions", "isEmpty", "name", "createIncompatibleExtensionsError", "SDKBase", "_SDKBase", "createMissingApiKeyError", "createReactNativeEndpointConfigurationWarning", "defaultEndpoint", "version", "createURL", "AuthModule", "UserModule", "WalletModule", "NFTModule", "ThirdPartyWalletsModule", "RPCProviderModule", "encodeJSON", "sdkNameToEnvName", "controller", "event", "MagicIncomingWindowMessage", "MagicOutgoingWindowMessage", "SDKWarningCode", "getRequestPayloadFromBatch", "requestPayload", "id", "p", "standardizeResponse", "event", "requestPayloadResolved", "response", "JsonRpcResponse", "debounce", "func", "delay", "timeoutId", "args", "SECOND", "MINUTE", "PING_INTERVAL", "INITIAL_HEARTBEAT_DELAY", "ViewController", "endpoint", "parameters", "networkHash", "debounce", "msgType", "payload", "createPromise", "resolve", "reject", "error", "createModalNotReadyError", "batchData", "batchIds", "p", "msg", "acknowledgeResponse", "removeEventListener", "event", "id", "response", "standardizeResponse", "clearDeviceShares", "deviceShare", "encryptAndPersistDeviceShare", "removeResponseListener", "MagicIncomingWindowMessage", "MagicOutgoingWindowMessage", "details", "sanitizedDetails", "_", "value", "handler", "boundHandler", "listener", "unsubscribe", "MagicSDKWarning", "SDKWarningCode", "firstPing", "sendPing", "message", "setItem", "request", "rt", "jwt", "decryptedDeviceShare", "SDKEnvironment", "jwtFromStorage", "getItem", "createJwt", "getDecryptedDeviceShare", "MagicPayloadMethod", "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", "MultichainExtension", "config"]
}
