{
  "version": 3,
  "sources": ["../../src/index.ts", "../../../../@tronic-sdk/types/src/core/exception-types.ts", "../../../../@tronic-sdk/types/src/core/json-rpc-types.ts", "../../../../@tronic-sdk/types/src/core/message-types.ts", "../../../../@tronic-sdk/provider/node_modules/eventemitter3/index.js", "../../../../@tronic-sdk/provider/src/util/semver.js", "../../../../@tronic-sdk/provider/src/util/base64-json.ts", "../../../../@tronic-sdk/provider/src/core/sdk-exceptions.ts", "../../../../@tronic-sdk/provider/src/util/type-guards.ts", "../../../../@tronic-sdk/provider/src/core/sdk-environment.ts", "../../../../@tronic-sdk/provider/src/modules/base-module.ts", "../../../../@tronic-sdk/provider/src/util/get-payload-id.ts", "../../../../@tronic-sdk/provider/src/core/json-rpc.ts", "../../../../@tronic-sdk/provider/src/util/events.ts", "../../../../@tronic-sdk/provider/src/util/promise-tools.ts", "../../../../@tronic-sdk/provider/src/modules/user.ts", "../../../../@tronic-sdk/provider/src/modules/wallet.ts", "../../../../@tronic-sdk/provider/src/util/url.ts", "../../../../@tronic-sdk/provider/src/util/storage.ts", "../../../../@tronic-sdk/provider/src/util/uuid.ts", "../../../../@tronic-sdk/provider/src/util/web-crypto.ts", "../../../../@tronic-sdk/provider/src/util/version-check.ts", "../../../../@tronic-sdk/provider/src/modules/base-extension.ts", "../../../../@tronic-sdk/provider/src/core/sdk.ts", "../../../../@tronic-sdk/provider/src/core/view-controller.ts"],
  "sourcesContent": ["import { Extension } from '@tronic-sdk/commons';\nimport { createDuplicateIframeWarning } from '@tronic-sdk/provider';\nimport { UILauncherConfig } from './types';\n\nfunction findSameSrcInstances(parameters: string) {\n  const iframes: HTMLIFrameElement[] = [].slice.call(document.querySelectorAll('.tronic-ui-launcher-iframe'));\n  const iframe = iframes.find((i) => i.src.includes(parameters));\n  return iframe;\n}\n\nconst overlayStyles: Partial<CSSStyleDeclaration> = {\n  display: 'block',\n  position: 'fixed',\n  right: '0px',\n  left: '0px',\n  bottom: '0px',\n  width: '84px',\n  height: '92px',\n  border: 'none',\n  zIndex: '2147483647',\n  cursor: 'pointer',\n  overflow: 'visible',\n  background: 'transparent',\n};\n\n/**\n * Apply iframe styles to the given element.\n * @param elem - An element to apply styles using CSSOM.\n */\nfunction applyStyles(elem: HTMLElement, config: UILauncherConfig) {\n  for (const [cssProperty, value] of Object.entries(overlayStyles)) {\n    // TODO: this is a quick and dirty way to handle layout, probably needs to be improved with css\n    if (['left', 'right'].includes(cssProperty) && config.position === cssProperty) {\n      /* eslint-disable-next-line no-param-reassign */\n      (elem.style as any)[cssProperty as any] = value;\n    } else if (!['left', 'right'].includes(cssProperty)) {\n      /* eslint-disable-next-line no-param-reassign */\n      (elem.style as any)[cssProperty as any] = value;\n    }\n  }\n}\n\nexport class UILauncherExtension extends Extension.Internal<'uiLauncher', any> {\n  private iframe?: Promise<HTMLIFrameElement>;\n  name = 'uiLauncher' as const;\n  config: UILauncherConfig = {\n    position: 'right',\n  };\n  compat = {\n    'tronic-sdk': true,\n  };\n\n  constructor(private uiLauncherConfig: UILauncherConfig = {}) {\n    super();\n\n    this.config = {\n      ...this.config,\n      ...uiLauncherConfig,\n    };\n  }\n\n  public mount = () => {\n    this.iframe = new Promise((resolve) => {\n      const onload = async () => {\n        // @ts-ignore - this.sdk.parameters is marked protected but we need to access it.\n        const { parameters } = this.sdk;\n        const sameSrcInstance = findSameSrcInstances(parameters);\n\n        if (!sameSrcInstance) {\n          const iframe = document.createElement('iframe');\n          iframe.classList.add('tronic-ui-launcher-iframe');\n          iframe.title = 'Secure Modal';\n          iframe.frameBorder = '0';\n          iframe.setAttribute('allowtransparency', 'true');\n          iframe.src = this.utils.createURL(\n            // @ts-ignore - this.sdk.endpoint is marked protected but we need to access it.,\n            `${this.sdk.endpoint}/sdk/extensions/ui-launcher?params=${parameters}`,\n          ).href;\n          applyStyles(iframe, this.config);\n          document.body.appendChild(iframe);\n\n          // @ts-ignore\n          const container = (await this.overlay.elements)[1];\n          container.classList.remove('right');\n          container.classList.remove('left');\n          container.classList.add(this.config.position);\n\n          resolve(iframe);\n        } else {\n          createDuplicateIframeWarning().log();\n          resolve(sameSrcInstance);\n        }\n      };\n\n      // Check DOM state and load...\n      if (['loaded', 'interactive', 'complete'].includes(document.readyState)) {\n        onload();\n      } else {\n        // ...or check load events to load\n        window.addEventListener('load', onload, false);\n      }\n    });\n  };\n\n  public show = async () => {\n    const iframe = await this.iframe;\n    if (iframe) {\n      iframe.style.display = 'block';\n    }\n  };\n\n  public hide = async () => {\n    const iframe = await this.iframe;\n    if (iframe) {\n      iframe.style.display = 'none';\n    }\n  };\n}\n", "export enum SDKErrorCode {\n  MissingEndpoint = 'MISSING_ENDPOINT',\n  MissingApiKey = 'MISSING_API_KEY',\n  ModalNotReady = 'MODAL_NOT_READY',\n  MalformedResponse = 'MALFORMED_RESPONSE',\n  InvalidArgument = 'INVALID_ARGUMENT',\n  ExtensionNotInitialized = 'EXTENSION_NOT_INITIALIZED',\n  IncompatibleExtensions = 'INCOMPATIBLE_EXTENSIONS',\n}\n\nexport enum SDKWarningCode {\n  SyncWeb3Method = 'SYNC_WEB3_METHOD',\n  DuplicateIframe = 'DUPLICATE_IFRAME',\n  ReactNativeEndpointConfiguration = 'REACT_NATIVE_ENDPOINT_CONFIGURATION',\n  DeprecationNotice = 'DEPRECATION_NOTICE',\n  ProductAnnouncement = 'ANNOUNCEMENT',\n}\n\nexport enum RPCErrorCode {\n  // Standard JSON RPC 2.0 Error Codes\n  ParseError = -32700,\n  InvalidRequest = -32600,\n  MethodNotFound = -32601,\n  InvalidParams = -32602,\n  InternalError = -32603,\n}\n\nexport type ErrorCode = SDKErrorCode | RPCErrorCode;\nexport type WarningCode = SDKWarningCode;\n", "import { RPCErrorCode } from './exception-types';\n\n// --- Request interfaces\n\nexport interface JsonRpcRequestPayload<TParams = any> {\n  jsonrpc: string;\n  id: string | number | null;\n  method: string;\n  params?: TParams;\n}\n\nexport interface JsonRpcRequestCallback {\n  /** Callback executed upon JSON RPC response. */\n  (err: JsonRpcError | null, result?: JsonRpcResponsePayload | null): void;\n}\n\nexport interface JsonRpcBatchRequestCallback {\n  /** Callback executed upon JSON RPC response. */\n  (err: JsonRpcError | null, result?: (JsonRpcResponsePayload | null)[] | null): void;\n}\n\n// --- Response interfaces\n\nexport interface JsonRpcError {\n  message: string;\n  code: RPCErrorCode;\n  data?: any;\n}\n\nexport interface JsonRpcResponsePayload<ResultType = any> {\n  jsonrpc: string;\n  id: string | number | null;\n  result?: ResultType | null;\n  error?: JsonRpcError | null;\n}\n\n// --- Payload methods\n\n/**\n * Enum of JSON RPC methods for interacting with the Tronic SDK authentication\n * relayer.\n */\nexport enum TronicPayloadMethod {\n  IsLoggedIn = 'tronic_is_logged_in',\n  IsLoggedInTestMode = 'tronic_auth_is_logged_in_testing_mode',\n  Logout = 'tronic_auth_logout',\n  LogoutTestMode = 'tronic_auth_logout_testing_mode',\n  GetInfo = 'tronic_get_info',\n  ShowUI = 'show_ui',\n}\n", "import { JsonRpcResponsePayload, JsonRpcError, JsonRpcRequestPayload } from './json-rpc-types';\n\nexport enum TronicIncomingWindowMessage {\n  TRONIC_HANDLE_RESPONSE = 'TRONIC_HANDLE_RESPONSE',\n  TRONIC_OVERLAY_READY = 'TRONIC_OVERLAY_READY',\n  TRONIC_SHOW_OVERLAY = 'TRONIC_SHOW_OVERLAY',\n  TRONIC_HIDE_OVERLAY = 'TRONIC_HIDE_OVERLAY',\n  TRONIC_HANDLE_EVENT = 'TRONIC_HANDLE_EVENT',\n  TRONIC_SEND_PRODUCT_ANNOUNCEMENT = 'TRONIC_SEND_PRODUCT_ANNOUNCEMENT',\n}\n\nexport enum TronicOutgoingWindowMessage {\n  TRONIC_HANDLE_REQUEST = 'TRONIC_HANDLE_REQUEST',\n}\n\n/** The shape of responding window message datas from the Tronic iframe context. */\nexport interface TronicMessageRequest {\n  msgType: string;\n  payload: JsonRpcRequestPayload | JsonRpcRequestPayload[];\n  // rt?: string;\n  jwt?: string;\n}\n\n/** The shape of responding window message datas from the Tronic iframe context. */\nexport interface TroincMessageResponse<ResultType = any> {\n  msgType: string;\n  response: Partial<JsonRpcError> & Partial<JsonRpcResponsePayload<ResultType>>;\n  // rt?: string;\n}\n\n/** The expected message event returned by the Tronic iframe context. */\nexport interface TronicMessageEvent extends Partial<MessageEvent> {\n  data: TroincMessageResponse;\n}\n", "'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/tronicapp/tronic-js/issues/198\n//   - https://github.com/rollup/plugins/issues/879\n//   - https://github.com/npm/node-semver/issues/318\n//   - https://github.com/npm/node-semver/issues/381\n\nfunction createCommonjsModule(e){const r={exports:{}};return e(r,r.exports),r.exports}const SEMVER_SPEC_VERSION=\"2.0.0\",MAX_LENGTH$2=256,MAX_SAFE_INTEGER$1=Number.MAX_SAFE_INTEGER||9007199254740991,MAX_SAFE_COMPONENT_LENGTH=16,constants={SEMVER_SPEC_VERSION:\"2.0.0\",MAX_LENGTH:256,MAX_SAFE_INTEGER:MAX_SAFE_INTEGER$1,MAX_SAFE_COMPONENT_LENGTH:16},debug=\"object\"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\\bsemver\\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error(\"SEMVER\",...e):()=>{},debug_1=debug,re_1=createCommonjsModule(function(e,r){const{MAX_SAFE_COMPONENT_LENGTH:t}=constants,s=(r=e.exports={}).re=[],i=r.src=[],o=r.t={};let a=0;const n=(e,r,t)=>{const n=a++;debug_1(n,r),o[e]=n,i[n]=r,s[n]=new RegExp(r,t?\"g\":void 0)};n(\"NUMERICIDENTIFIER\",\"0|[1-9]\\\\d*\"),n(\"NUMERICIDENTIFIERLOOSE\",\"[0-9]+\"),n(\"NONNUMERICIDENTIFIER\",\"\\\\d*[a-zA-Z-][a-zA-Z0-9-]*\"),n(\"MAINVERSION\",`(${i[o.NUMERICIDENTIFIER]})\\\\.`+`(${i[o.NUMERICIDENTIFIER]})\\\\.`+`(${i[o.NUMERICIDENTIFIER]})`),n(\"MAINVERSIONLOOSE\",`(${i[o.NUMERICIDENTIFIERLOOSE]})\\\\.`+`(${i[o.NUMERICIDENTIFIERLOOSE]})\\\\.`+`(${i[o.NUMERICIDENTIFIERLOOSE]})`),n(\"PRERELEASEIDENTIFIER\",`(?:${i[o.NUMERICIDENTIFIER]}|${i[o.NONNUMERICIDENTIFIER]})`),n(\"PRERELEASEIDENTIFIERLOOSE\",`(?:${i[o.NUMERICIDENTIFIERLOOSE]}|${i[o.NONNUMERICIDENTIFIER]})`),n(\"PRERELEASE\",`(?:-(${i[o.PRERELEASEIDENTIFIER]}(?:\\\\.${i[o.PRERELEASEIDENTIFIER]})*))`),n(\"PRERELEASELOOSE\",`(?:-?(${i[o.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${i[o.PRERELEASEIDENTIFIERLOOSE]})*))`),n(\"BUILDIDENTIFIER\",\"[0-9A-Za-z-]+\"),n(\"BUILD\",`(?:\\\\+(${i[o.BUILDIDENTIFIER]}(?:\\\\.${i[o.BUILDIDENTIFIER]})*))`),n(\"FULLPLAIN\",`v?${i[o.MAINVERSION]}${i[o.PRERELEASE]}?${i[o.BUILD]}?`),n(\"FULL\",`^${i[o.FULLPLAIN]}$`),n(\"LOOSEPLAIN\",`[v=\\\\s]*${i[o.MAINVERSIONLOOSE]}${i[o.PRERELEASELOOSE]}?${i[o.BUILD]}?`),n(\"LOOSE\",`^${i[o.LOOSEPLAIN]}$`),n(\"GTLT\",\"((?:<|>)?=?)\"),n(\"XRANGEIDENTIFIERLOOSE\",`${i[o.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`),n(\"XRANGEIDENTIFIER\",`${i[o.NUMERICIDENTIFIER]}|x|X|\\\\*`),n(\"XRANGEPLAIN\",`[v=\\\\s]*(${i[o.XRANGEIDENTIFIER]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIER]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIER]})`+`(?:${i[o.PRERELEASE]})?${i[o.BUILD]}?`+\")?)?\"),n(\"XRANGEPLAINLOOSE\",`[v=\\\\s]*(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:\\\\.(${i[o.XRANGEIDENTIFIERLOOSE]})`+`(?:${i[o.PRERELEASELOOSE]})?${i[o.BUILD]}?`+\")?)?\"),n(\"XRANGE\",`^${i[o.GTLT]}\\\\s*${i[o.XRANGEPLAIN]}$`),n(\"XRANGELOOSE\",`^${i[o.GTLT]}\\\\s*${i[o.XRANGEPLAINLOOSE]}$`),n(\"COERCE\",`(^|[^\\\\d])(\\\\d{1,${t}})`+`(?:\\\\.(\\\\d{1,${t}}))?`+`(?:\\\\.(\\\\d{1,${t}}))?`+\"(?:$|[^\\\\d])\"),n(\"COERCERTL\",i[o.COERCE],!0),n(\"LONETILDE\",\"(?:~>?)\"),n(\"TILDETRIM\",`(\\\\s*)${i[o.LONETILDE]}\\\\s+`,!0),r.tildeTrimReplace=\"$1~\",n(\"TILDE\",`^${i[o.LONETILDE]}${i[o.XRANGEPLAIN]}$`),n(\"TILDELOOSE\",`^${i[o.LONETILDE]}${i[o.XRANGEPLAINLOOSE]}$`),n(\"LONECARET\",\"(?:\\\\^)\"),n(\"CARETTRIM\",`(\\\\s*)${i[o.LONECARET]}\\\\s+`,!0),r.caretTrimReplace=\"$1^\",n(\"CARET\",`^${i[o.LONECARET]}${i[o.XRANGEPLAIN]}$`),n(\"CARETLOOSE\",`^${i[o.LONECARET]}${i[o.XRANGEPLAINLOOSE]}$`),n(\"COMPARATORLOOSE\",`^${i[o.GTLT]}\\\\s*(${i[o.LOOSEPLAIN]})$|^$`),n(\"COMPARATOR\",`^${i[o.GTLT]}\\\\s*(${i[o.FULLPLAIN]})$|^$`),n(\"COMPARATORTRIM\",`(\\\\s*)${i[o.GTLT]}\\\\s*(${i[o.LOOSEPLAIN]}|${i[o.XRANGEPLAIN]})`,!0),r.comparatorTrimReplace=\"$1$2$3\",n(\"HYPHENRANGE\",`^\\\\s*(${i[o.XRANGEPLAIN]})`+\"\\\\s+-\\\\s+\"+`(${i[o.XRANGEPLAIN]})`+\"\\\\s*$\"),n(\"HYPHENRANGELOOSE\",`^\\\\s*(${i[o.XRANGEPLAINLOOSE]})`+\"\\\\s+-\\\\s+\"+`(${i[o.XRANGEPLAINLOOSE]})`+\"\\\\s*$\"),n(\"STAR\",\"(<|>)?=?\\\\s*\\\\*\"),n(\"GTE0\",\"^\\\\s*>=\\\\s*0.0.0\\\\s*$\"),n(\"GTE0PRE\",\"^\\\\s*>=\\\\s*0.0.0-0\\\\s*$\")}),numeric=/^[0-9]+$/,compareIdentifiers$1=(e,r)=>{const t=numeric.test(e),s=numeric.test(r);return t&&s&&(e=+e,r=+r),e===r?0:t&&!s?-1:s&&!t?1:e<r?-1:1},rcompareIdentifiers=(e,r)=>compareIdentifiers$1(r,e),identifiers={compareIdentifiers:compareIdentifiers$1,rcompareIdentifiers:rcompareIdentifiers},{MAX_LENGTH:MAX_LENGTH$1,MAX_SAFE_INTEGER:MAX_SAFE_INTEGER}=constants,{re:re$4,t:t$4}=re_1,{compareIdentifiers:compareIdentifiers}=identifiers;class SemVer{constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof SemVer){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(\"string\"!=typeof e)throw new TypeError(`Invalid Version: ${e}`);if(e.length>MAX_LENGTH$1)throw new TypeError(`version is longer than ${MAX_LENGTH$1} characters`);debug_1(\"SemVer\",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;const t=e.trim().match(r.loose?re$4[t$4.LOOSE]:re$4[t$4.FULL]);if(!t)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+t[1],this.minor=+t[2],this.patch=+t[3],this.major>MAX_SAFE_INTEGER||this.major<0)throw new TypeError(\"Invalid major version\");if(this.minor>MAX_SAFE_INTEGER||this.minor<0)throw new TypeError(\"Invalid minor version\");if(this.patch>MAX_SAFE_INTEGER||this.patch<0)throw new TypeError(\"Invalid patch version\");t[4]?this.prerelease=t[4].split(\".\").map(e=>{if(/^[0-9]+$/.test(e)){const r=+e;if(r>=0&&r<MAX_SAFE_INTEGER)return r}return e}):this.prerelease=[],this.build=t[5]?t[5].split(\".\"):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(\".\")}`),this.version}toString(){return this.version}compare(e){if(debug_1(\"SemVer.compare\",this.version,this.options,e),!(e instanceof SemVer)){if(\"string\"==typeof e&&e===this.version)return 0;e=new SemVer(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof SemVer||(e=new SemVer(e,this.options)),compareIdentifiers(this.major,e.major)||compareIdentifiers(this.minor,e.minor)||compareIdentifiers(this.patch,e.patch)}comparePre(e){if(e instanceof SemVer||(e=new SemVer(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let r=0;do{const t=this.prerelease[r],s=e.prerelease[r];if(debug_1(\"prerelease compare\",r,t,s),void 0===t&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===t)return-1;if(t!==s)return compareIdentifiers(t,s)}while(++r)}compareBuild(e){e instanceof SemVer||(e=new SemVer(e,this.options));let r=0;do{const t=this.build[r],s=e.build[r];if(debug_1(\"prerelease compare\",r,t,s),void 0===t&&void 0===s)return 0;if(void 0===s)return 1;if(void 0===t)return-1;if(t!==s)return compareIdentifiers(t,s)}while(++r)}inc(e,r){switch(e){case\"premajor\":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc(\"pre\",r);break;case\"preminor\":this.prerelease.length=0,this.patch=0,this.minor++,this.inc(\"pre\",r);break;case\"prepatch\":this.prerelease.length=0,this.inc(\"patch\",r),this.inc(\"pre\",r);break;case\"prerelease\":0===this.prerelease.length&&this.inc(\"patch\",r),this.inc(\"pre\",r);break;case\"major\":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case\"minor\":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case\"patch\":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case\"pre\":if(0===this.prerelease.length)this.prerelease=[0];else{let e=this.prerelease.length;for(;--e>=0;)\"number\"==typeof this.prerelease[e]&&(this.prerelease[e]++,e=-2);-1===e&&this.prerelease.push(0)}r&&(this.prerelease[0]===r?isNaN(this.prerelease[1])&&(this.prerelease=[r,0]):this.prerelease=[r,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}}const compare=(e,r,t)=>new SemVer(e,t).compare(new SemVer(r,t)),compare_1=compare,eq=(e,r,t)=>0===compare_1(e,r,t),eq_1=eq,neq=(e,r,t)=>0!==compare_1(e,r,t),neq_1=neq,gt=(e,r,t)=>compare_1(e,r,t)>0,gt_1=gt,gte=(e,r,t)=>compare_1(e,r,t)>=0,gte_1=gte,lt=(e,r,t)=>compare_1(e,r,t)<0,lt_1=lt,lte=(e,r,t)=>compare_1(e,r,t)<=0,lte_1=lte,cmp=(e,r,t,s)=>{switch(r){case\"===\":return\"object\"==typeof e&&(e=e.version),\"object\"==typeof t&&(t=t.version),e===t;case\"!==\":return\"object\"==typeof e&&(e=e.version),\"object\"==typeof t&&(t=t.version),e!==t;case\"\":case\"=\":case\"==\":return eq_1(e,t,s);case\"!=\":return neq_1(e,t,s);case\">\":return gt_1(e,t,s);case\">=\":return gte_1(e,t,s);case\"<\":return lt_1(e,t,s);case\"<=\":return lte_1(e,t,s);default:throw new TypeError(`Invalid operator: ${r}`)}},cmp_1=cmp,ANY=Symbol(\"SemVer ANY\");class Comparator{static get ANY(){return ANY}constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof Comparator){if(e.loose===!!r.loose)return e;e=e.value}debug_1(\"comparator\",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===ANY?this.value=\"\":this.value=this.operator+this.semver.version,debug_1(\"comp\",this)}parse(e){const r=this.options.loose?re$3[t$3.COMPARATORLOOSE]:re$3[t$3.COMPARATOR],t=e.match(r);if(!t)throw new TypeError(`Invalid comparator: ${e}`);this.operator=void 0!==t[1]?t[1]:\"\",\"=\"===this.operator&&(this.operator=\"\"),t[2]?this.semver=new SemVer(t[2],this.options.loose):this.semver=ANY}toString(){return this.value}test(e){if(debug_1(\"Comparator.test\",e,this.options.loose),this.semver===ANY||e===ANY)return!0;if(\"string\"==typeof e)try{e=new SemVer(e,this.options)}catch(e){return!1}return cmp_1(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Comparator))throw new TypeError(\"a Comparator is required\");if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),\"\"===this.operator)return\"\"===this.value||new Range(e.value,r).test(this.value);if(\"\"===e.operator)return\"\"===e.value||new Range(this.value,r).test(e.semver);const t=!(\">=\"!==this.operator&&\">\"!==this.operator||\">=\"!==e.operator&&\">\"!==e.operator),s=!(\"<=\"!==this.operator&&\"<\"!==this.operator||\"<=\"!==e.operator&&\"<\"!==e.operator),i=this.semver.version===e.semver.version,o=!(\">=\"!==this.operator&&\"<=\"!==this.operator||\">=\"!==e.operator&&\"<=\"!==e.operator),a=cmp_1(this.semver,\"<\",e.semver,r)&&(\">=\"===this.operator||\">\"===this.operator)&&(\"<=\"===e.operator||\"<\"===e.operator),n=cmp_1(this.semver,\">\",e.semver,r)&&(\"<=\"===this.operator||\"<\"===this.operator)&&(\">=\"===e.operator||\">\"===e.operator);return t||s||i&&o||a||n}}const{re:re$3,t:t$3}=re_1;class Range{constructor(e,r){if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof Range)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new Range(e.raw,r);if(e instanceof Comparator)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e,this.set=e.split(/\\s*\\|\\|\\s*/).map(e=>this.parseRange(e.trim())).filter(e=>e.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);this.format()}format(){return this.range=this.set.map(e=>e.join(\" \").trim()).join(\"||\").trim(),this.range}toString(){return this.range}parseRange(e){const{loose:r}=this.options;e=e.trim();const t=r?re$2[t$2.HYPHENRANGELOOSE]:re$2[t$2.HYPHENRANGE];e=e.replace(t,hyphenReplace(this.options.includePrerelease)),debug_1(\"hyphen replace\",e),e=e.replace(re$2[t$2.COMPARATORTRIM],comparatorTrimReplace),debug_1(\"comparator trim\",e,re$2[t$2.COMPARATORTRIM]),e=(e=(e=e.replace(re$2[t$2.TILDETRIM],tildeTrimReplace)).replace(re$2[t$2.CARETTRIM],caretTrimReplace)).split(/\\s+/).join(\" \");const s=r?re$2[t$2.COMPARATORLOOSE]:re$2[t$2.COMPARATOR];return e.split(\" \").map(e=>parseComparator(e,this.options)).join(\" \").split(/\\s+/).map(e=>replaceGTE0(e,this.options)).filter(this.options.loose?e=>!!e.match(s):()=>!0).map(e=>new Comparator(e,this.options))}intersects(e,r){if(!(e instanceof Range))throw new TypeError(\"a Range is required\");return this.set.some(t=>isSatisfiable(t,r)&&e.set.some(e=>isSatisfiable(e,r)&&t.every(t=>e.every(e=>t.intersects(e,r)))))}test(e){if(!e)return!1;if(\"string\"==typeof e)try{e=new SemVer(e,this.options)}catch(e){return!1}for(let r=0;r<this.set.length;r++)if(testSet(this.set[r],e,this.options))return!0;return!1}}const{re:re$2,t:t$2,comparatorTrimReplace:comparatorTrimReplace,tildeTrimReplace:tildeTrimReplace,caretTrimReplace:caretTrimReplace}=re_1,isSatisfiable=(e,r)=>{let t=!0;const s=e.slice();let i=s.pop();for(;t&&s.length;)t=s.every(e=>i.intersects(e,r)),i=s.pop();return t},parseComparator=(e,r)=>(debug_1(\"comp\",e,r),e=replaceCarets(e,r),debug_1(\"caret\",e),e=replaceTildes(e,r),debug_1(\"tildes\",e),e=replaceXRanges(e,r),debug_1(\"xrange\",e),e=replaceStars(e,r),debug_1(\"stars\",e),e),isX=e=>!e||\"x\"===e.toLowerCase()||\"*\"===e,replaceTildes=(e,r)=>e.trim().split(/\\s+/).map(e=>replaceTilde(e,r)).join(\" \"),replaceTilde=(e,r)=>{const t=r.loose?re$2[t$2.TILDELOOSE]:re$2[t$2.TILDE];return e.replace(t,(r,t,s,i,o)=>{let a;return debug_1(\"tilde\",e,r,t,s,i,o),isX(t)?a=\"\":isX(s)?a=`>=${t}.0.0 <${+t+1}.0.0-0`:isX(i)?a=`>=${t}.${s}.0 <${t}.${+s+1}.0-0`:o?(debug_1(\"replaceTilde pr\",o),a=`>=${t}.${s}.${i}-${o} <${t}.${+s+1}.0-0`):a=`>=${t}.${s}.${i} <${t}.${+s+1}.0-0`,debug_1(\"tilde return\",a),a})},replaceCarets=(e,r)=>e.trim().split(/\\s+/).map(e=>replaceCaret(e,r)).join(\" \"),replaceCaret=(e,r)=>{debug_1(\"caret\",e,r);const t=r.loose?re$2[t$2.CARETLOOSE]:re$2[t$2.CARET],s=r.includePrerelease?\"-0\":\"\";return e.replace(t,(r,t,i,o,a)=>{let n;return debug_1(\"caret\",e,r,t,i,o,a),isX(t)?n=\"\":isX(i)?n=`>=${t}.0.0${s} <${+t+1}.0.0-0`:isX(o)?n=\"0\"===t?`>=${t}.${i}.0${s} <${t}.${+i+1}.0-0`:`>=${t}.${i}.0${s} <${+t+1}.0.0-0`:a?(debug_1(\"replaceCaret pr\",a),n=\"0\"===t?\"0\"===i?`>=${t}.${i}.${o}-${a} <${t}.${i}.${+o+1}-0`:`>=${t}.${i}.${o}-${a} <${t}.${+i+1}.0-0`:`>=${t}.${i}.${o}-${a} <${+t+1}.0.0-0`):(debug_1(\"no pr\"),n=\"0\"===t?\"0\"===i?`>=${t}.${i}.${o}${s} <${t}.${i}.${+o+1}-0`:`>=${t}.${i}.${o}${s} <${t}.${+i+1}.0-0`:`>=${t}.${i}.${o} <${+t+1}.0.0-0`),debug_1(\"caret return\",n),n})},replaceXRanges=(e,r)=>(debug_1(\"replaceXRanges\",e,r),e.split(/\\s+/).map(e=>replaceXRange(e,r)).join(\" \")),replaceXRange=(e,r)=>{e=e.trim();const t=r.loose?re$2[t$2.XRANGELOOSE]:re$2[t$2.XRANGE];return e.replace(t,(t,s,i,o,a,n)=>{debug_1(\"xRange\",e,t,s,i,o,a,n);const E=isX(i),p=E||isX(o),l=p||isX(a),c=l;return\"=\"===s&&c&&(s=\"\"),n=r.includePrerelease?\"-0\":\"\",E?t=\">\"===s||\"<\"===s?\"<0.0.0-0\":\"*\":s&&c?(p&&(o=0),a=0,\">\"===s?(s=\">=\",p?(i=+i+1,o=0,a=0):(o=+o+1,a=0)):\"<=\"===s&&(s=\"<\",p?i=+i+1:o=+o+1),\"<\"===s&&(n=\"-0\"),t=`${s+i}.${o}.${a}${n}`):p?t=`>=${i}.0.0${n} <${+i+1}.0.0-0`:l&&(t=`>=${i}.${o}.0${n} <${i}.${+o+1}.0-0`),debug_1(\"xRange return\",t),t})},replaceStars=(e,r)=>(debug_1(\"replaceStars\",e,r),e.trim().replace(re$2[t$2.STAR],\"\")),replaceGTE0=(e,r)=>(debug_1(\"replaceGTE0\",e,r),e.trim().replace(re$2[r.includePrerelease?t$2.GTE0PRE:t$2.GTE0],\"\")),hyphenReplace=e=>(r,t,s,i,o,a,n,E,p,l,c,$,h)=>`${t=isX(s)?\"\":isX(i)?`>=${s}.0.0${e?\"-0\":\"\"}`:isX(o)?`>=${s}.${i}.0${e?\"-0\":\"\"}`:a?`>=${t}`:`>=${t}${e?\"-0\":\"\"}`} ${E=isX(p)?\"\":isX(l)?`<${+p+1}.0.0-0`:isX(c)?`<${p}.${+l+1}.0-0`:$?`<=${p}.${l}.${c}-${$}`:e?`<${p}.${l}.${+c+1}-0`:`<=${E}`}`.trim(),testSet=(e,r,t)=>{for(let t=0;t<e.length;t++)if(!e[t].test(r))return!1;if(r.prerelease.length&&!t.includePrerelease){for(let t=0;t<e.length;t++)if(debug_1(e[t].semver),e[t].semver!==Comparator.ANY&&e[t].semver.prerelease.length>0){const s=e[t].semver;if(s.major===r.major&&s.minor===r.minor&&s.patch===r.patch)return!0}return!1}return!0};export const satisfies=(e,r,t)=>{try{r=new Range(r,t)}catch(e){return!1}return r.test(e)};const satisfies_1=satisfies,{MAX_LENGTH:MAX_LENGTH}=constants,{re:re$1,t:t$1}=re_1,parse=(e,r)=>{if(r&&\"object\"==typeof r||(r={loose:!!r,includePrerelease:!1}),e instanceof SemVer)return e;if(\"string\"!=typeof e)return null;if(e.length>MAX_LENGTH)return null;if(!(r.loose?re$1[t$1.LOOSE]:re$1[t$1.FULL]).test(e))return null;try{return new SemVer(e,r)}catch(e){return null}},parse_1=parse,{re:re,t:t}=re_1;export const coerce=(e,r)=>{if(e instanceof SemVer)return e;if(\"number\"==typeof e&&(e=String(e)),\"string\"!=typeof e)return null;let s=null;if((r=r||{}).rtl){let r;for(;(r=re[t.COERCERTL].exec(e))&&(!s||s.index+s[0].length!==e.length);)s&&r.index+r[0].length===s.index+s[0].length||(s=r),re[t.COERCERTL].lastIndex=r.index+r[1].length+r[2].length;re[t.COERCERTL].lastIndex=-1}else s=e.match(re[t.COERCE]);return null===s?null:parse_1(`${s[2]}.${s[3]||\"0\"}.${s[4]||\"0\"}`,r)};\n", "function percentToByte(p: string) {\n  return String.fromCharCode(parseInt(p.slice(1), 16));\n}\n\nfunction byteToPercent(b: string) {\n  return `%${`00${b.charCodeAt(0).toString(16)}`.slice(-2)}`;\n}\n\n/**\n * Encodes a Base64 string. Safe for UTF-8 characters.\n * Original source is from the `universal-base64` NPM package.\n *\n * @source https://github.com/blakeembrey/universal-base64/blob/master/src/browser.ts\n */\nfunction btoaUTF8(str: string): string {\n  return btoa(encodeURIComponent(str).replace(/%[0-9A-F]{2}/g, percentToByte));\n}\n\n/**\n * Decodes a Base64 string. Safe for UTF-8 characters.\n * Original source is from the `universal-base64` NPM package.\n *\n * @source https://github.com/blakeembrey/universal-base64/blob/master/src/browser.ts\n */\nfunction atobUTF8(str: string): string {\n  return decodeURIComponent(Array.from(atob(str), byteToPercent).join(''));\n}\n\n/**\n * Given a JSON-serializable object, encode as a Base64 string.\n */\nexport function encodeJSON<T>(options: T): string {\n  return btoaUTF8(JSON.stringify(options));\n}\n\n/**\n * Given a Base64 JSON string, decode a JavaScript object.\n */\nexport function decodeJSON<T>(queryString: string): T {\n  return JSON.parse(atobUTF8(queryString));\n}\n", "import { JsonRpcError, RPCErrorCode, SDKErrorCode, SDKWarningCode } from '@tronic-sdk/types';\nimport { isJsonRpcErrorCode } from '../util/type-guards';\nimport { SDKEnvironment } from './sdk-environment';\nimport { Extension } from '../modules/base-extension';\n\n// --- Error/warning classes\n\n/**\n * This error type represents internal SDK errors. This could be developer\n * mistakes (or Tronic's mistakes), or execution errors unrelated to standard\n * JavaScript exceptions.\n */\nexport class TronicSDKError extends Error {\n  __proto__ = Error;\n\n  constructor(public code: SDKErrorCode, public rawMessage: string) {\n    super(`Tronic SDK Error: [${code}] ${rawMessage}`);\n    Object.setPrototypeOf(this, TronicSDKError.prototype);\n  }\n}\n\n/**\n * This error type communicates exceptions that occur during execution in the\n * Tronic `<iframe>` context.\n */\nexport class TronicRPCError 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 = `Tronic RPC Error: [${this.code}] ${this.rawMessage}`;\n    this.data = sourceError?.data || undefined;\n\n    Object.setPrototypeOf(this, TronicRPCError.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 TronicSDKWarning {\n  public message: string;\n\n  constructor(public code: SDKWarningCode, public rawMessage: string) {\n    this.message = `Tronic 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 Tronic SDK Extension methods. Compare this to the `SDKError`\n * type, specifically in context of Extensions.\n */\nexport class TronicExtensionError<TData = any> extends Error {\n  __proto__ = Error;\n\n  constructor(ext: Extension<string>, public code: string | number, public rawMessage: string, public data: TData) {\n    super(`Tronic Extension Error (${ext.name}): [${code}] ${rawMessage}`);\n    Object.setPrototypeOf(this, TronicExtensionError.prototype);\n  }\n}\n\n/**\n * In contrast to `TronicExtensionError` 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 TronicExtensionWarning {\n  public message: string;\n\n  constructor(ext: Extension<string>, public code: string | number, public rawMessage: string) {\n    this.message = `Tronic 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 TronicSDKError(\n    SDKErrorCode.MissingApiKey,\n    'Please provide an API key that you acquired from the Tronic developer dashboard.',\n  );\n}\n\nexport function createMissingEndpointError() {\n  return new TronicSDKError(\n    SDKErrorCode.MissingEndpoint,\n    'Please provide the endpoint that you acquired from the Tronic developer dashboard.',\n  );\n}\n\nexport function createModalNotReadyError() {\n  return new TronicSDKError(SDKErrorCode.ModalNotReady, 'Modal is not ready.');\n}\n\nexport function createMalformedResponseError() {\n  return new TronicSDKError(SDKErrorCode.MalformedResponse, 'Response from the Tronic iframe is malformed.');\n}\n\nexport function createExtensionNotInitializedError(member: string) {\n  return new TronicSDKError(\n    SDKErrorCode.ExtensionNotInitialized,\n    `Extensions must be initialized with a Tronic SDK instance before \\`Extension.${member}\\` can be accessed. Do not invoke \\`Extension.${member}\\` inside an extension constructor.`,\n  );\n}\n\nexport function createIncompatibleExtensionsError(extensions: Extension<string>[]) {\n  let msg = `Some extensions are incompatible with \\`${SDKEnvironment.sdkName}@${SDKEnvironment.version}\\`:`;\n\n  extensions\n    .filter((ext) => typeof ext.compat !== 'undefined' && ext.compat !== null)\n    .forEach((ext) => {\n      const compat = ext.compat![SDKEnvironment.sdkName];\n\n      /* istanbul ignore else */\n      if (typeof compat === 'string') {\n        msg += `\\n  - Extension \\`${ext.name}\\` supports version(s) \\`${compat}\\``;\n      } else if (!compat) {\n        msg += `\\n  - Extension \\`${ext.name}\\` does not support ${SDKEnvironment.platform} environments.`;\n      }\n\n      // Else case is irrelevant here here\n      // (we filter out extensions with missing `compat` field)\n    });\n\n  return new TronicSDKError(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 TronicSDKError(\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 TronicSDKWarning(SDKWarningCode.DuplicateIframe, 'Duplicate iframes found.');\n}\n\nexport function createDeprecationWarning(options: {\n  method: string;\n  removalVersions: {\n    [P in 'tronic-sdk']: 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 TronicSDKWarning(SDKWarningCode.DeprecationNotice, message);\n}\n", "/**\n * This file contains our type guards.\n *\n * Type guards are a feature of TypeScript which narrow the type signature of\n * intesection types (types that can be one thing or another).\n *\n * @see\n * https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types\n */\n\nimport { JsonRpcRequestPayload, JsonRpcResponsePayload, TronicPayloadMethod, RPCErrorCode } from '@tronic-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 Tronic SDK payload method identifier.\n */\nexport function isTronicPayloadMethod(value?: any): value is TronicPayloadMethod {\n  if (isNil(value)) return false;\n  return typeof value === 'string' && Object.values(TronicPayloadMethod).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: 'tronic-sdk';\n  version: string;\n  platform: 'web';\n  ViewController: ConstructorOf<ViewController>;\n  configureStorage: () => Promise<typeof localForage>;\n}\n\nexport const SDKEnvironment: SDKEnvironment = {} as any;\n\nexport function createSDK<SDK extends SDKBase>(\n  SDKBaseCtor: ConstructorOf<SDK>,\n  environment: SDKEnvironment,\n): WithExtensions<SDK> {\n  Object.assign(SDKEnvironment, environment);\n  return SDKBaseCtor as any;\n}\n\nexport const sdkNameToEnvName = {\n  'tronic-sdk': 'tronic-sdk' as const,\n};\n", "import { JsonRpcRequestPayload, TronicOutgoingWindowMessage, TronicIncomingWindowMessage } from '@tronic-sdk/types';\nimport { createMalformedResponseError, TronicRPCError } from '../core/sdk-exceptions';\nimport type { SDKBase } from '../core/sdk';\nimport { standardizeJsonRpcRequestPayload } from '../core/json-rpc';\nimport { createPromiEvent } from '../util/promise-tools';\nimport type { ViewController } from '../core/view-controller';\nimport type { EventsDefinition } from '../util/events';\n\nexport class BaseModule {\n  constructor(protected sdk: SDKBase) {}\n\n  /**\n   * The `ViewController` for the SDK instance registered to this module.\n   */\n  protected get overlay(): ViewController {\n    return (this.sdk as any).overlay;\n  }\n\n  /**\n   * Emits promisified requests to the Tronic `<iframe>` context.\n   */\n  protected request<ResultType = any, Events extends EventsDefinition = void>(payload: Partial<JsonRpcRequestPayload>) {\n    const responsePromise = this.overlay.post<ResultType>(\n      TronicOutgoingWindowMessage.TRONIC_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 TronicRPCError(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(TronicIncomingWindowMessage.TRONIC_HANDLE_EVENT, (evt) => {\n      const { response } = evt.data;\n\n      if (response.id === payload.id && response.result?.event) {\n        const { event, params = [] } = response.result;\n        promiEvent.emit(event, ...params);\n      }\n    });\n\n    return promiEvent;\n  }\n}\n", "function* createIntGenerator(): Generator<number, number, void> {\n  let index = 0;\n\n  while (true) {\n    /* istanbul ignore next */\n    if (index < Number.MAX_SAFE_INTEGER) yield ++index;\n    else index = 0;\n  }\n}\n\nconst intGenerator = createIntGenerator();\n\n/**\n * Get an integer ID for attaching to a JSON RPC request payload.\n */\nexport function getPayloadId(): number {\n  return intGenerator.next().value;\n}\n", "/* eslint-disable no-param-reassign */\n\nimport { JsonRpcRequestPayload, JsonRpcResponsePayload, JsonRpcError } from '@tronic-sdk/types';\nimport { isJsonRpcResponsePayload } from '../util/type-guards';\nimport { getPayloadId } from '../util/get-payload-id';\n\nconst payloadPreprocessedSymbol = Symbol('Payload pre-processed by Tronic SDK');\n\n/**\n * To avoid \"pre-processing\" a payload more than once (and needlessly\n * incrementing our payload ID generator), we attach a symbol to detect a\n * payloads we've already visited.\n */\nfunction markPayloadAsPreprocessed<T extends Partial<JsonRpcRequestPayload>>(payload: T): T {\n  Object.defineProperty(payload, payloadPreprocessedSymbol, {\n    value: true,\n    enumerable: false,\n  });\n\n  return payload;\n}\n\n/**\n * Returns `true` if the payload has been visited by our \"pre-processing,\" in\n * `standardizeJsonRpcRequestPayload(...)`.\n */\nfunction isPayloadPreprocessed<T extends Partial<JsonRpcRequestPayload>>(payload: T) {\n  return !!(payload as any)[payloadPreprocessedSymbol];\n}\n\n/**\n * Returns a full `JsonRpcRequestPayload` from a potentially incomplete payload\n * object. This method mutates the given `payload` to preserve compatibility\n * with external libraries that perform their own `JsonRpcRequestPayload.id`\n * check to associate responses (such as `web3`).\n *\n * This function is no-op if the payload has already been processed before.\n */\nexport function standardizeJsonRpcRequestPayload(payload: Partial<JsonRpcRequestPayload>) {\n  if (!isPayloadPreprocessed(payload)) {\n    payload.jsonrpc = payload.jsonrpc ?? '2.0';\n    payload.id = getPayloadId();\n    payload.method = payload.method ?? 'noop';\n    payload.params = payload.params ?? [];\n\n    markPayloadAsPreprocessed(payload);\n  }\n\n  /* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion */\n  return payload as JsonRpcRequestPayload;\n}\n\n/**\n * Build a valid JSON RPC payload for emitting to the Tronic SDK iframe relayer.\n */\nexport function createJsonRpcRequestPayload(method: string, params: any[] = []): JsonRpcRequestPayload {\n  return markPayloadAsPreprocessed({\n    params,\n    method,\n    jsonrpc: '2.0',\n    id: getPayloadId(),\n  });\n}\n\n/**\n * Formats and standardizes a JSON RPC 2.0 response from a number of potential\n * sources.\n */\nexport class JsonRpcResponse<ResultType = any> {\n  private readonly _jsonrpc: string;\n  private readonly _id: string | number | null;\n  private _result?: ResultType | null;\n  private _error?: JsonRpcError | null;\n\n  constructor(responsePayload: JsonRpcResponsePayload);\n  constructor(response: JsonRpcResponse<ResultType>);\n  constructor(requestPayload: JsonRpcRequestPayload);\n  constructor(responseOrPayload: JsonRpcResponsePayload | JsonRpcResponse<ResultType> | JsonRpcRequestPayload) {\n    if (responseOrPayload instanceof JsonRpcResponse) {\n      this._jsonrpc = responseOrPayload.payload.jsonrpc;\n      this._id = responseOrPayload.payload.id;\n      this._result = responseOrPayload.payload.result;\n      this._error = responseOrPayload.payload.error;\n    } else if (isJsonRpcResponsePayload(responseOrPayload)) {\n      this._jsonrpc = responseOrPayload.jsonrpc;\n      this._id = responseOrPayload.id;\n      this._result = responseOrPayload.result;\n      this._error = responseOrPayload.error;\n    } else {\n      this._jsonrpc = responseOrPayload.jsonrpc;\n      this._id = responseOrPayload.id;\n      this._result = undefined;\n      this._error = undefined;\n    }\n  }\n\n  public applyError(error?: JsonRpcError | null) {\n    this._error = error;\n    return this;\n  }\n\n  public applyResult(result?: ResultType | null) {\n    this._result = result;\n    return this;\n  }\n\n  public get hasError() {\n    return typeof this._error !== 'undefined' && this._error !== null;\n  }\n\n  public get hasResult() {\n    return typeof this._result !== 'undefined';\n  }\n\n  public get payload(): JsonRpcResponsePayload {\n    return {\n      jsonrpc: this._jsonrpc,\n      id: this._id,\n      result: this._result,\n      error: this._error,\n    };\n  }\n}\n", "import EventEmitter from 'eventemitter3';\n\nexport type EventsDefinition = { [K in string | symbol]: (...args: any[]) => void } | void;\n\n/**\n * An extension of `EventEmitter` (provided by `eventemitter3`) with an adjusted\n * type interface that supports the unique structure of Tronic SDK modules.\n */\nexport class TypedEmitter<Events extends EventsDefinition = void> extends EventEmitter<\n  Events extends void ? string | symbol : Events\n> {}\n\ntype ChainingMethods = 'on' | 'once' | 'addListener' | 'off' | 'removeListener' | 'removeAllListeners';\ntype NonChainingMethods = 'emit' | 'eventNames' | 'listeners' | 'listenerCount';\n\ntype ReplaceReturnType<T extends (...a: any) => any, TNewReturn> = (...a: Parameters<T>) => TNewReturn;\n\n/**\n * Creates a `TypedEmitter` instance and returns helper functions for easily\n * mixing `TypedEmitter` methods into other objects.\n */\nexport function createTypedEmitter<Events extends EventsDefinition = void>() {\n  const emitter = new TypedEmitter<Events>();\n\n  const createChainingEmitterMethod = <T1 extends ChainingMethods, T2>(\n    method: T1,\n    source: T2,\n  ): ReplaceReturnType<TypedEmitter[T1], T2> => {\n    return (...args: any[]) => {\n      (emitter as any)[method].apply(emitter, args);\n      return source;\n    };\n  };\n\n  const createBoundEmitterMethod = <T extends NonChainingMethods>(method: T): TypedEmitter[T] => {\n    return (...args: any[]) => {\n      return (emitter as any)[method].apply(emitter, args);\n    };\n  };\n\n  return {\n    emitter,\n    createChainingEmitterMethod,\n    createBoundEmitterMethod,\n  };\n}\n", "import { TypedEmitter, EventsDefinition, createTypedEmitter } from './events';\n\n/**\n * Extends `Promise` with a polymorphic `this` type to accomodate arbitrary\n * `Promise` API extensions.\n */\ninterface ExtendedPromise<T> extends Promise<T> {\n  then<TResult1 = T, TResult2 = never>(\n    onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n  ): ExtendedPromise<TResult1 | TResult2> & this;\n\n  catch<TResult = never>(\n    onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,\n  ): ExtendedPromise<T | TResult> & this;\n\n  finally(onfinally?: (() => void) | undefined | null): ExtendedPromise<T> & this;\n}\n\n/**\n * A `Promise` and `EventEmitter` all in one!\n */\nexport type PromiEvent<TResult, TEvents extends EventsDefinition = void> = ExtendedPromise<TResult> &\n  TypedEmitter<TEvents extends void ? DefaultEvents<TResult> : TEvents & DefaultEvents<TResult>>;\n\n/**\n * Default events attached to every `PromiEvent`.\n */\ntype DefaultEvents<TResult> = {\n  done: (result: TResult) => void;\n  error: (reason: any) => void;\n  settled: () => void;\n};\n\n/**\n * A `Promise` executor with can be optionally asynchronous.\n */\ntype AsyncPromiseExecutor<TResult> = (\n  resolve: (value: TResult | PromiseLike<TResult>) => void,\n  reject: (reason?: any) => void,\n) => void | Promise<void>;\n\nconst promiEventBrand = Symbol('isPromiEvent');\n\n/**\n * Returns `true` if the given `value` is a `PromiEvent`.\n */\nexport function isPromiEvent(value: any): value is PromiEvent<any> {\n  return !!value[promiEventBrand];\n}\n\n/**\n * Create a native JavaScript `Promise` overloaded with strongly-typed methods\n * from `EventEmitter`.\n */\nexport function createPromiEvent<TResult, TEvents extends EventsDefinition = void>(\n  executor: AsyncPromiseExecutor<TResult>,\n): PromiEvent<TResult, TEvents extends void ? DefaultEvents<TResult> : TEvents & DefaultEvents<TResult>> {\n  const promise = createPromise(executor);\n  const { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter<\n    TEvents & DefaultEvents<TResult>\n  >();\n\n  // We save the original `Promise` methods to the following symbols so we can\n  // access them internally.\n  const thenSymbol = Symbol('Promise.then');\n  const catchSymbol = Symbol('Promise.catch');\n  const finallySymbol = Symbol('Promise.finally');\n\n  /**\n   * Ensures the next object in the `PromiEvent` chain is overloaded with\n   * `EventEmitter` methods.\n   */\n  const createChainingPromiseMethod =\n    (method: typeof thenSymbol | typeof catchSymbol | typeof finallySymbol, source: Promise<any>) =>\n    (...args: any[]) => {\n      const nextPromise = (source as any)[method].apply(source, args);\n      return promiEvent(nextPromise);\n    };\n\n  /**\n   * Builds a `PromiEvent` by assigning `EventEmitter` methods to a native\n   * `Promise` object.\n   */\n  const promiEvent = (source: any) => {\n    return Object.assign(source, {\n      [promiEventBrand]: true,\n\n      [thenSymbol]: source[thenSymbol] || source.then,\n      [catchSymbol]: source[catchSymbol] || source.catch,\n      [finallySymbol]: source[finallySymbol] || source.finally,\n\n      then: createChainingPromiseMethod(thenSymbol, source),\n      catch: createChainingPromiseMethod(catchSymbol, source),\n      finally: createChainingPromiseMethod(finallySymbol, source),\n\n      on: createChainingEmitterMethod('on', source),\n      once: createChainingEmitterMethod('once', source),\n      addListener: createChainingEmitterMethod('addListener', source),\n\n      off: createChainingEmitterMethod('off', source),\n      removeListener: createChainingEmitterMethod('removeListener', source),\n      removeAllListeners: createChainingEmitterMethod('removeAllListeners', source),\n\n      emit: createBoundEmitterMethod('emit'),\n      eventNames: createBoundEmitterMethod('eventNames'),\n      listeners: createBoundEmitterMethod('listeners'),\n      listenerCount: createBoundEmitterMethod('listenerCount'),\n    });\n  };\n\n  const result = promiEvent(\n    promise.then(\n      (resolved) => {\n        // Emit default completion events and resolve result.\n        result.emit('done', resolved);\n        result.emit('settled');\n        return resolved;\n      },\n\n      (err) => {\n        // Emit default error events and re-throw.\n        result.emit('error', err);\n        result.emit('settled');\n        throw err;\n      },\n    ),\n  );\n\n  return result;\n}\n\n/**\n * Creates a `Promise` with an **async executor** that automatically catches\n * errors occurring within the executor. Nesting promises in this way is usually\n * deemed an _anti-pattern_, but it's useful and clean when promisifying the\n * event-based code that's inherent to JSON RPC.\n *\n * So, here we solve the issue of nested promises by ensuring that no errors\n * mistakenly go unhandled!\n */\nexport function createPromise<TResult>(executor: AsyncPromiseExecutor<TResult>) {\n  return new Promise<TResult>((resolve, reject) => {\n    const result = executor(resolve, reject);\n    Promise.resolve(result).catch(reject);\n  });\n}\n", "// import { TronicPayloadMethod, TronicUserMetadata } from '@tronic-sdk/types';\n// import { getItem, setItem, removeItem } from '../util/storage';\nimport { BaseModule } from './base-module';\n// import { createJsonRpcRequestPayload } from '../core/json-rpc';\n// import { createPromiEvent } from '../util';\n\n// type UserLoggedOutCallback = (loggedOut: boolean) => void;\n\nexport class UserModule extends BaseModule {\n  // public async getInfo() {\n  //   const activeWallet = await getItem(this.localForageKey);\n  //   const requestPayload = createJsonRpcRequestPayload(TronicPayloadMethod.GetInfo, [{ walletType: activeWallet }]);\n  //   return this.request<TronicUserMetadata>(requestPayload);\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  //         // 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  //       const requestPayload = createJsonRpcRequestPayload(\n  //         this.sdk.testMode ? TronicPayloadMethod.IsLoggedInTestMode : TronicPayloadMethod.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  // public logout = () => {\n  //   removeItem(this.localForageKey);\n  //   removeItem(this.localForageIsLoggedInKey);\n  //   return createPromiEvent<boolean, any>(async (resolve, reject) => {\n  //     try {\n  //       const requestPayload = createJsonRpcRequestPayload(\n  //         this.sdk.testMode ? TronicPayloadMethod.LogoutTestMode : TronicPayloadMethod.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  // public onUserLoggedOut = (callback: UserLoggedOutCallback): void => {\n  //   this.userLoggedOutCallbacks.push(callback);\n  // };\n  // // Private members\n  // private emitUserLoggedOut = (loggedOut: boolean): void => {\n  //   this.userLoggedOutCallbacks.forEach((callback) => {\n  //     callback(loggedOut);\n  //   });\n  // };\n  // private localForageKey = 'mc_active_wallet';\n  // private localForageIsLoggedInKey = 'tronic_auth_is_logged_in';\n  // private userLoggedOutCallbacks: UserLoggedOutCallback[] = [];\n}\n", "import { TronicPayloadMethod } from '@tronic-sdk/types';\n\nimport { BaseModule } from './base-module';\nimport { createJsonRpcRequestPayload } from '../core/json-rpc';\n\nexport class WalletModule extends BaseModule {\n  public showUI = () => {\n    return this.request<boolean>(createJsonRpcRequestPayload(TronicPayloadMethod.ShowUI));\n  };\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 { SDKEnvironment } from '../core/sdk-environment';\n\nlet lf: LocalForage;\n\n/**\n * Proxies `localforage` methods with strong-typing.\n */\nfunction proxyLocalForageMethod<TMethod extends keyof LocalForageDbMethods>(method: TMethod): LocalForage[TMethod] {\n  return async (...args: any[]) => {\n    /* istanbul ignore else */\n    if (!lf) lf = await SDKEnvironment.configureStorage();\n    await lf.ready();\n    return (lf[method] as any)(...args);\n  };\n}\n\nexport const getItem = proxyLocalForageMethod('getItem');\nexport const setItem = proxyLocalForageMethod('setItem');\nexport const removeItem = proxyLocalForageMethod('removeItem');\nexport const clear = proxyLocalForageMethod('clear');\nexport const length = proxyLocalForageMethod('length');\nexport const key = proxyLocalForageMethod('key');\nexport const keys = proxyLocalForageMethod('keys');\nexport const iterate = proxyLocalForageMethod('iterate');\n", "/* eslint-disable no-bitwise */\nexport function uuid() {\n  const u = window.crypto.getRandomValues(new Uint8Array(16));\n\n  // set the version bit to v4\n  u[6] = (u[6] & 0x0f) | 0x40;\n\n  // set the variant bit to \"don't care\" (yes, the RFC\n  // calls it that)\n  u[8] = (u[8] & 0xbf) | 0x80;\n\n  // hex encode them and add the dashes\n  let uid = '';\n  uid += u[0].toString(16);\n  uid += u[1].toString(16);\n  uid += u[2].toString(16);\n  uid += u[3].toString(16);\n  uid += '-';\n\n  uid += u[4].toString(16);\n  uid += u[5].toString(16);\n  uid += '-';\n\n  uid += u[6].toString(16);\n  uid += u[7].toString(16);\n  uid += '-';\n\n  uid += u[8].toString(16);\n  uid += u[9].toString(16);\n  uid += '-';\n\n  uid += u[10].toString(16);\n  uid += u[11].toString(16);\n  uid += u[12].toString(16);\n  uid += u[13].toString(16);\n  uid += u[14].toString(16);\n  uid += u[15].toString(16);\n\n  return uid;\n}\n", "import { setItem, getItem, removeItem } from './storage';\nimport { uuid } from './uuid';\n\nexport const STORE_KEY_PRIVATE_KEY = 'STORE_KEY_PRIVATE_KEY';\nexport const STORE_KEY_PUBLIC_JWK = 'STORE_KEY_PUBLIC_JWK';\nconst ALGO_NAME = 'ECDSA';\nconst ALGO_CURVE = 'P-256';\n\nconst EC_GEN_PARAMS: EcKeyGenParams = {\n  name: ALGO_NAME,\n  namedCurve: ALGO_CURVE,\n};\n\nexport function isWebCryptoSupported() {\n  const hasCrypto = typeof window !== 'undefined' && !!(window.crypto as any);\n  const hasSubtleCrypto = hasCrypto && !!(window.crypto.subtle as any);\n\n  return hasCrypto && hasSubtleCrypto;\n}\n\nexport function clearKeys() {\n  removeItem(STORE_KEY_PUBLIC_JWK);\n  removeItem(STORE_KEY_PRIVATE_KEY);\n}\n\nexport async function createJwt() {\n  // will return undefiend is webcrypto is not supported\n  const publicJwk = await getPublicKey();\n\n  if (!publicJwk) {\n    console.info('unable to create public key or webcrypto is unsupported');\n    return undefined;\n  }\n\n  const { subtle } = window.crypto;\n  const privateJwk = await getItem<CryptoKey>(STORE_KEY_PRIVATE_KEY);\n\n  if (!privateJwk || !subtle) {\n    console.info('unable to find private key or webcrypto unsupported');\n    return undefined;\n  }\n\n  const claims = {\n    iat: Math.floor(new Date().getTime() / 1000),\n    jti: uuid(),\n  };\n\n  const headers = {\n    typ: 'dpop+jwt',\n    alg: 'ES256',\n    jwk: publicJwk,\n  };\n\n  const jws = {\n    protected: strToUrlBase64(JSON.stringify(headers)),\n    claims: strToUrlBase64(JSON.stringify(claims)),\n  };\n\n  const data = strToUint8(`${jws.protected}.${jws.claims}`);\n  const sigType = { name: ALGO_NAME, hash: { name: 'SHA-256' } };\n\n  const sig = uint8ToUrlBase64(new Uint8Array(await subtle.sign(sigType, privateJwk, data)));\n  return `${jws.protected}.${jws.claims}.${sig}`;\n}\n\nasync function getPublicKey() {\n  if (!isWebCryptoSupported()) {\n    console.info('webcrypto is not supported');\n    return undefined;\n  }\n\n  if (!(await getItem(STORE_KEY_PUBLIC_JWK))) {\n    await generateWCKP();\n  }\n\n  return getItem(STORE_KEY_PUBLIC_JWK) as JsonWebKey;\n}\n\nasync function generateWCKP() {\n  // to avoid a nasty babel bug we have to hoist this above the await ourselves\n  // https://github.com/rpetrich/babel-plugin-transform-async-to-promises/issues/20\n  const { subtle } = window.crypto;\n  const kp = await subtle.generateKey(\n    EC_GEN_PARAMS,\n    false, // need to export the public key, while keep private key non-extractable\n    ['sign'],\n  );\n\n  const jwkPublicKey = await subtle.exportKey('jwk', kp.publicKey!);\n\n  // persist keys\n  await setItem(STORE_KEY_PRIVATE_KEY, kp.privateKey!);\n  // persist the jwk public key since it needs to be exported anyways\n  await setItem(STORE_KEY_PUBLIC_JWK, jwkPublicKey);\n}\n\nfunction strToUrlBase64(str: string) {\n  return binToUrlBase64(utf8ToBinaryString(str));\n}\n\nfunction strToUint8(str: string) {\n  return new TextEncoder().encode(str);\n}\n\nfunction binToUrlBase64(bin: string) {\n  return btoa(bin).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+/g, '');\n}\n\nfunction utf8ToBinaryString(str: string) {\n  const escstr = encodeURIComponent(str);\n  // replaces any uri escape sequence, such as %0A,\n  // with binary escape, such as 0x0A\n  return escstr.replace(/%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode(parseInt(p1, 16)));\n}\n\nfunction uint8ToUrlBase64(uint8: Uint8Array) {\n  let bin = '';\n  uint8.forEach((code) => {\n    bin += String.fromCharCode(code);\n  });\n  return binToUrlBase64(bin);\n}\n", "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 { createJsonRpcRequestPayload, standardizeJsonRpcRequestPayload } from '../core/json-rpc';\nimport { BaseModule } from './base-module';\nimport { SDKBase, TronicSDKAdditionalConfiguration, TronicSDKExtensionsOption } from '../core/sdk';\nimport {\n  createExtensionNotInitializedError,\n  TronicExtensionError,\n  TronicExtensionWarning,\n} from '../core/sdk-exceptions';\nimport { createPromiEvent, encodeJSON, decodeJSON, storage, isPromiEvent, createURL } from '../util';\n\ntype AnonymousExtension = 'anonymous extension';\n\ninterface BaseExtension<TName extends string = AnonymousExtension> extends BaseModule {\n  /**\n   * A structure describing the platform and version compatiblity of this\n   * extension.\n   */\n  compat?: {\n    'tronic-sdk': boolean | string;\n  };\n}\n\nconst sdkAccessFields = ['request', 'overlay', 'sdk'];\n\n/**\n * From the `BaseExtension`-derived instance, get the prototype\n * chain up to and including the `BaseModule` class.\n */\nfunction getPrototypeChain<T extends BaseExtension<string>>(instance: T) {\n  let currentProto = Object.getPrototypeOf(instance);\n  const protos = [currentProto];\n\n  while (currentProto !== BaseModule.prototype) {\n    currentProto = Object.getPrototypeOf(currentProto);\n    protos.push(currentProto);\n  }\n\n  return protos;\n}\n\nabstract class BaseExtension<TName extends string = AnonymousExtension> extends BaseModule {\n  public abstract readonly name: TName;\n\n  private __sdk_access_field_descriptors__ = new Map<\n    string,\n    { descriptor: PropertyDescriptor; isPrototypeField: boolean }\n  >();\n  private __is_initialized__ = false;\n\n  protected utils = {\n    createPromiEvent,\n    isPromiEvent,\n    encodeJSON,\n    decodeJSON,\n    createJsonRpcRequestPayload,\n    standardizeJsonRpcRequestPayload,\n    storage,\n    createURL,\n  };\n\n  constructor() {\n    super(undefined as any);\n\n    // Disallow SDK access before initialization...\n\n    const allSources = [this, ...getPrototypeChain(this)];\n\n    sdkAccessFields.forEach((prop) => {\n      const allDescriptors = allSources.map((source) => Object.getOwnPropertyDescriptor(source, prop));\n      const sourceIndex = allDescriptors.findIndex((x) => !!x);\n      const isPrototypeField = sourceIndex > 0;\n      const descriptor = allDescriptors[sourceIndex];\n\n      /* istanbul ignore else */\n      if (descriptor) {\n        this.__sdk_access_field_descriptors__.set(prop, { descriptor, isPrototypeField });\n\n        Object.defineProperty(this, prop, {\n          configurable: true,\n          get: () => {\n            throw createExtensionNotInitializedError(prop);\n          },\n        });\n      }\n    });\n  }\n\n  /**\n   * Registers a Tronic 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 Tronic 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 Tronic SDK core code.\n   */\n  protected createDeprecationWarning(options: {\n    method: string;\n    removalVersion: string;\n    useInstead?: string;\n  }): TronicExtensionWarning {\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 TronicExtensionWarning(this, 'DEPRECATION_NOTICE', message);\n  }\n\n  /**\n   * Creates a warning wrapped with a native Tronic SDK warning type. This\n   * maintains consistency in warning messaging for consumers of Tronic SDK and\n   * this Extension.\n   */\n  protected createWarning(code: string | number, message: string): TronicExtensionWarning {\n    return new TronicExtensionWarning(this, code, message);\n  }\n\n  /**\n   * Creates an error wrapped with a native Tronic SDK error type. This maintains\n   * consistency in error handling for consumers of Tronic SDK and this\n   * Extension.\n   */\n  protected createError<TData = any>(code: string | number, message: string, data: TData): TronicExtensionError<TData> {\n    return new TronicExtensionError<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 Tronic JS APIs. Extensions\n * enable new functionality by composing Tronic endpoints methods together.\n */\nexport abstract class Extension<TName extends string = AnonymousExtension> extends BaseExtension<TName> {\n  /**\n   * This is a special constructor used to mark \"official\" extensions. These\n   * extensions are designed for special interaction with the Tronic iframe using\n   * custom JSON RPC methods, business logic, and global configurations. This is\n   * intended for internal-use only (and provides no useful advantage to\n   * open-source extension developers over the regular `Extension` class).\n   *\n   * @internal\n   */\n  public static Internal = InternalExtension;\n  public static Anonymous: AnonymousExtension = 'anonymous extension';\n}\n\n/**\n * These fields are exposed on the `Extension` type,\n * but should be hidden from the public interface.\n */\ntype HiddenExtensionFields = 'name' | 'init' | 'config' | 'compat';\n\n/**\n * Gets the type contained in an array type.\n */\ntype UnwrapArray<T extends any[]> = T extends Array<infer P> ? P : never;\n\n/**\n * Create a union type of Extension names from an\n * array of Extension types given by `TExt`.\n */\ntype ExtensionNames<TExt extends Extension<string>[]> = UnwrapArray<TExt> extends Extension<infer R> ? R : never;\n\n/**\n * From the literal Extension name type given by `TExtName`,\n * extract a dictionary of Extension types.\n */\ntype GetExtensionFromName<TExt extends Extension<string>[], TExtName extends string> = {\n  [P in TExtName]: Extract<UnwrapArray<TExt>, Extension<TExtName>>;\n}[TExtName];\n\n/**\n * Wraps a Tronic 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 TronicSDKExtensionsOption<TCustomExtName>>(\n    apiKey: string,\n    options?: TronicSDKAdditionalConfiguration<TCustomExtName, TExt>,\n  ): InstanceWithExtensions<SDK, TExt>;\n};\n\nexport type InstanceWithExtensions<SDK extends SDKBase, TExt extends TronicSDKExtensionsOption> = SDK &\n  {\n    [P in Exclude<\n      TExt extends Extension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n      number | AnonymousExtension\n    >]: TExt extends Extension<string>[]\n      ? Omit<GetExtensionFromName<TExt, P>, HiddenExtensionFields>\n      : TExt extends {\n          [P in Exclude<\n            TExt extends Extension<string>[] ? ExtensionNames<TExt> : keyof TExt,\n            number | AnonymousExtension\n          >]: Extension<string>;\n        }\n      ? Omit<TExt[P], HiddenExtensionFields>\n      : never;\n  };\n", "/* eslint-disable no-param-reassign  */\n\nimport { QueryParameters, SupportedLocale } from '@tronic-sdk/types';\nimport { coerce, satisfies } from '../util/semver';\nimport { encodeJSON } from '../util/base64-json';\nimport {\n  createMissingApiKeyError,\n  createIncompatibleExtensionsError,\n  createMissingEndpointError,\n} from './sdk-exceptions';\nimport { UserModule } from '../modules/user';\nimport { WalletModule } from '../modules/wallet';\nimport { ViewController } from './view-controller';\nimport { createURL } from '../util/url';\nimport { Extension } from '../modules/base-extension';\nimport { isEmpty } from '../util/type-guards';\nimport { SDKEnvironment, sdkNameToEnvName } from './sdk-environment';\n\n/**\n * Checks if the given `ext` is compatible with the platform & version of Tronic\n * SDK currently in use.\n */\nfunction checkExtensionCompat(ext: Extension<string>) {\n  if (ext.compat && ext.compat[SDKEnvironment.sdkName] != null) {\n    return typeof ext.compat[SDKEnvironment.sdkName] === 'string'\n      ? satisfies(coerce(SDKEnvironment.version), ext.compat[SDKEnvironment.sdkName] as string)\n      : !!ext.compat[SDKEnvironment.sdkName];\n  }\n\n  // To gracefully support older extensions, we assume\n  // compatibility when the `compat` field is missing.\n  return true;\n}\n\n/**\n * Initializes SDK extensions, checks for platform/version compatiblity issues,\n * then consolidates any global configurations provided by those extensions.\n */\nfunction prepareExtensions(this: SDKBase, options: TronicSDKAdditionalConfiguration): Record<string, any> {\n  const extensions: Extension<string>[] | { [key: string]: Extension<string> } = options.extensions ?? [];\n  const extConfig: any = {};\n  const incompatibleExtensions: Extension<string>[] = [];\n\n  if (Array.isArray(extensions)) {\n    extensions.forEach((ext) => {\n      if (checkExtensionCompat(ext)) {\n        ext.init(this);\n        if (ext.name || ext.name !== Extension.Anonymous) {\n          // Only apply extensions with a known, defined `name` parameter.\n          (this as any)[ext.name] = ext;\n        }\n        if (ext instanceof Extension.Internal) {\n          if (!isEmpty(ext.config)) extConfig[ext.name] = ext.config;\n        }\n      } else {\n        incompatibleExtensions.push(ext);\n      }\n    });\n  } else {\n    Object.keys(extensions).forEach((name) => {\n      if (checkExtensionCompat(extensions[name])) {\n        extensions[name].init(this);\n        const ext = extensions[name];\n        (this as any)[name] = ext;\n        if (ext instanceof Extension.Internal) {\n          if (!isEmpty(ext.config)) extConfig[extensions[name].name] = ext.config;\n        }\n      } else {\n        incompatibleExtensions.push(extensions[name]);\n      }\n    });\n  }\n\n  if (incompatibleExtensions.length) {\n    throw createIncompatibleExtensionsError(incompatibleExtensions);\n  }\n\n  return extConfig;\n}\n\nexport type TronicSDKExtensionsOption<TCustomExtName extends string = string> =\n  | Extension<string>[]\n  | { [P in TCustomExtName]: Extension<string> };\n\nexport interface TronicSDKAdditionalConfiguration<\n  TCustomExtName extends string = string,\n  TExt extends TronicSDKExtensionsOption<TCustomExtName> = any,\n> {\n  endpoint: string;\n  locale?: SupportedLocale;\n  extensions?: TExt;\n  testMode?: boolean;\n  deferPreload?: boolean;\n  useStorageCache?: boolean;\n  meta?: any; // Generic field for clients to add metadata\n}\n\nexport class SDKBase {\n  private static readonly __overlays__: Map<string, ViewController> = new Map();\n\n  protected readonly endpoint: string;\n  protected readonly parameters: string;\n  public readonly testMode: boolean;\n  public readonly useStorageCache: boolean;\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   * Creates an instance of Tronic SDK.\n   */\n  constructor(public readonly apiKey: string, options: TronicSDKAdditionalConfiguration) {\n    if (!apiKey) throw createMissingApiKeyError();\n    if (!options.endpoint) throw createMissingEndpointError();\n\n    const { version } = SDKEnvironment;\n    this.testMode = !!options.testMode;\n    this.useStorageCache = !!options.useStorageCache;\n    this.endpoint = createURL(options.endpoint).href;\n\n    // Prepare built-in modules\n    this.user = new UserModule(this);\n    this.wallet = new WalletModule(this);\n\n    // Prepare extensions\n    const extConfig: any = prepareExtensions.call(this, options);\n\n    // Encode parameters as base64-JSON\n    this.parameters = encodeJSON<QueryParameters>({\n      API_KEY: this.apiKey,\n      DOMAIN_ORIGIN: window.location ? window.location.origin : '',\n      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      meta: options.meta,\n    });\n\n    if (!options.deferPreload) this.preload();\n  }\n\n  /**\n   * Represents the view controller associated with this `TronicSDK` instance.\n   */\n  protected get overlay(): ViewController {\n    if (!SDKBase.__overlays__.has(this.parameters)) {\n      const controller = new SDKEnvironment.ViewController(this.endpoint, this.parameters);\n\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore - We don't want to expose this method to the user, but we\n      // need to invoke in here so that the `ViewController` is ready for use.\n      controller.init();\n\n      SDKBase.__overlays__.set(this.parameters, controller);\n    }\n\n    return SDKBase.__overlays__.get(this.parameters)!;\n  }\n\n  /**\n   * Preloads the Tronic view, allowing for faster initial requests in browser\n   * environments. Awaiting the returned promise will signal when the Tronic view\n   * has completed loading and is ready for requests.\n   */\n  public async preload() {\n    await this.overlay.checkIsReadyForRequest;\n  }\n}\n", "import {\n  TronicIncomingWindowMessage,\n  TronicOutgoingWindowMessage,\n  JsonRpcRequestPayload,\n  TronicMessageEvent,\n  TronicMessageRequest,\n  SDKWarningCode,\n} from '@tronic-sdk/types';\nimport { JsonRpcResponse } from './json-rpc';\nimport { createPromise } from '../util/promise-tools';\nimport { getItem, setItem } from '../util/storage';\nimport { createJwt } from '../util/web-crypto';\nimport { SDKEnvironment } from './sdk-environment';\nimport { TronicSDKWarning, createModalNotReadyError } from './sdk-exceptions';\n\ninterface RemoveEventListenerFunction {\n  (): void;\n}\n\ninterface StandardizedResponse {\n  id?: string | number;\n  response?: JsonRpcResponse;\n}\n\ninterface StandardizedTronicRequest {\n  msgType: string;\n  payload: JsonRpcRequestPayload<any> | JsonRpcRequestPayload<any>[];\n  jwt?: string;\n  rt?: string;\n}\n\n/**\n * Get the originating payload from a batch request using the specified `id`.\n */\nfunction getRequestPayloadFromBatch(\n  requestPayload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n  id?: string | number | null,\n): JsonRpcRequestPayload | undefined {\n  return id && Array.isArray(requestPayload)\n    ? requestPayload.find((p) => p.id === id)\n    : (requestPayload as JsonRpcRequestPayload);\n}\n\n/**\n * Ensures the incoming response follows the expected schema and parses for a\n * JSON RPC payload ID.\n */\nfunction standardizeResponse(\n  requestPayload: JsonRpcRequestPayload | JsonRpcRequestPayload[],\n  event: TronicMessageEvent,\n): StandardizedResponse {\n  const id = event.data.response?.id;\n  const requestPayloadResolved = getRequestPayloadFromBatch(requestPayload, id);\n\n  if (id && requestPayloadResolved) {\n    // Build a standardized response object\n    const response = new JsonRpcResponse(requestPayloadResolved)\n      .applyResult(event.data.response.result)\n      .applyError(event.data.response.error);\n\n    return { id, response };\n  }\n\n  return {};\n}\n\nasync function createTronicRequest(msgType: string, payload: JsonRpcRequestPayload | JsonRpcRequestPayload[]) {\n  const rt = await getItem<string>('rt');\n  let jwt;\n\n  // only for webcrypto platforms\n  if (SDKEnvironment.platform === 'web') {\n    try {\n      jwt = (await getItem<string>('jwt')) ?? (await createJwt());\n    } catch (e) {\n      console.error('webcrypto error', e);\n    }\n  }\n\n  const request: StandardizedTronicRequest = { msgType, payload };\n\n  if (jwt) {\n    request.jwt = jwt;\n  }\n  if (jwt && rt) {\n    request.rt = rt;\n  }\n\n  return request;\n}\n\n// async function persistTronicEventRefreshToken(event: TronicMessageEvent) {\n//   if (!event.data.rt) {\n//     return;\n//   }\n\n//   await setItem('rt', event.data.rt);\n// }\n\nexport abstract class ViewController {\n  public checkIsReadyForRequest: Promise<void>;\n  public isReadyForRequest: boolean;\n  protected readonly messageHandlers = new Set<(event: TronicMessageEvent) => any>();\n  protected isConnectedToInternet = true;\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(protected readonly endpoint: string, protected readonly parameters: string) {\n    this.checkIsReadyForRequest = this.waitForReady();\n    this.isReadyForRequest = false;\n    this.listen();\n  }\n\n  protected abstract init(): void;\n  protected abstract _post(data: TronicMessageRequest): Promise<void>;\n  protected abstract hideOverlay(): void;\n  protected abstract showOverlay(): void;\n\n  /**\n   * Send a payload to the Tronic `<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: TronicOutgoingWindowMessage,\n    payload: JsonRpcRequestPayload[],\n  ): Promise<JsonRpcResponse<ResultType>[]>;\n\n  public async post<ResultType = any>(\n    msgType: TronicOutgoingWindowMessage,\n    payload: JsonRpcRequestPayload,\n  ): Promise<JsonRpcResponse<ResultType>>;\n\n  public async post<ResultType = any>(\n    msgType: TronicOutgoingWindowMessage,\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 (!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 createTronicRequest(`${msgType}-${this.parameters}`, payload);\n\n      await this._post(msg);\n\n      /**\n       * Collect successful RPC responses and resolve.\n       */\n      const acknowledgeResponse = (removeEventListener: RemoveEventListenerFunction) => (event: TronicMessageEvent) => {\n        const { id, response } = standardizeResponse(payload, event);\n        // persistTronicEventRefreshToken(event);\n\n        if (id && response && Array.isArray(payload) && batchIds.includes(id)) {\n          batchData.push(response);\n\n          // For batch requests, we wait for all responses before resolving.\n          if (batchData.length === payload.length) {\n            removeEventListener();\n            resolve(batchData);\n          }\n        } else if (id && response && !Array.isArray(payload) && id === payload.id) {\n          removeEventListener();\n          resolve(response);\n        }\n      };\n\n      // Listen for and handle responses.\n      const removeResponseListener = this.on(\n        TronicIncomingWindowMessage.TRONIC_HANDLE_RESPONSE,\n        acknowledgeResponse(() => removeResponseListener()),\n      );\n    });\n  }\n\n  /**\n   * Listen for events received with the given `msgType`.\n   *\n   * @param msgType - The `msgType` encoded with the event data.\n   * @param handler - A handler function to execute on each event received.\n   * @return A `void` function to remove the attached event.\n   */\n  public on(\n    msgType: TronicIncomingWindowMessage,\n    handler: (this: Window, event: TronicMessageEvent) => 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: TronicMessageEvent) => {\n      if (event.data.msgType === `${msgType}-${this.parameters}`) boundHandler(event);\n    };\n\n    this.messageHandlers.add(listener);\n    return () => this.messageHandlers.delete(listener);\n  }\n\n  private waitForReady() {\n    return new Promise<void>((resolve) => {\n      const unsubscribe = this.on(TronicIncomingWindowMessage.TRONIC_OVERLAY_READY, () => {\n        this.isReadyForRequest = true;\n        resolve();\n        unsubscribe();\n      });\n    });\n  }\n\n  /**\n   * Listen for messages sent from the underlying Tronic `<WebView>`.\n   */\n  private listen() {\n    this.on(TronicIncomingWindowMessage.TRONIC_HIDE_OVERLAY, () => {\n      this.hideOverlay();\n    });\n\n    this.on(TronicIncomingWindowMessage.TRONIC_SHOW_OVERLAY, () => {\n      this.showOverlay();\n    });\n\n    this.on(TronicIncomingWindowMessage.TRONIC_SEND_PRODUCT_ANNOUNCEMENT, (event: TronicMessageEvent) => {\n      if (event.data.response.result.product_announcement) {\n        new TronicSDKWarning(SDKWarningCode.ProductAnnouncement, event.data.response.result.product_announcement).log();\n      }\n    });\n  }\n}\n"],
  "mappings": "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",
  "names": ["Extension", "SDKErrorCode", "SDKWarningCode", "RPCErrorCode", "TronicPayloadMethod", "TronicIncomingWindowMessage", "TronicOutgoingWindowMessage", "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", "debug", "debug_1", "re_1", "t", "s", "o", "n", "numeric", "compareIdentifiers$1", "rcompareIdentifiers", "identifiers", "MAX_LENGTH$1", "MAX_SAFE_INTEGER", "re$4", "t$4", "compareIdentifiers", "SemVer", "compare", "compare_1", "eq", "eq_1", "neq", "neq_1", "gt", "gt_1", "gte", "gte_1", "lt", "lt_1", "lte", "lte_1", "cmp", "cmp_1", "ANY", "Comparator", "re$3", "t$3", "Range", "a", "re$2", "t$2", "hyphenReplace", "comparatorTrimReplace", "tildeTrimReplace", "caretTrimReplace", "parseComparator", "replaceGTE0", "isSatisfiable", "testSet", "replaceCarets", "replaceTildes", "replaceXRanges", "replaceStars", "isX", "replaceTilde", "replaceCaret", "replaceXRange", "E", "p", "c", "$", "h", "satisfies", "MAX_LENGTH", "re$1", "t$1", "parse", "parse_1", "re", "coerce", "percentToByte", "byteToPercent", "b", "btoaUTF8", "str", "atobUTF8", "encodeJSON", "options", "decodeJSON", "queryString", "isUndefined", "value", "isNull", "isNil", "isJsonRpcErrorCode", "value", "isNil", "RPCErrorCode", "isEmpty", "key", "SDKEnvironment", "sdkNameToEnvName", "TronicSDKError", "code", "rawMessage", "TronicRPCError", "sourceError", "codeNormalized", "isJsonRpcErrorCode", "RPCErrorCode", "TronicSDKWarning", "TronicExtensionError", "ext", "data", "TronicExtensionWarning", "createMissingApiKeyError", "SDKErrorCode", "createMissingEndpointError", "createMalformedResponseError", "TronicSDKError", "SDKErrorCode", "createExtensionNotInitializedError", "member", "createIncompatibleExtensionsError", "extensions", "msg", "SDKEnvironment", "ext", "compat", "createDuplicateIframeWarning", "TronicSDKWarning", "SDKWarningCode", "createIntGenerator", "index", "intGenerator", "getPayloadId", "payloadPreprocessedSymbol", "markPayloadAsPreprocessed", "payload", "isPayloadPreprocessed", "standardizeJsonRpcRequestPayload", "_a", "_b", "_c", "createJsonRpcRequestPayload", "method", "params", "import_eventemitter3", "dt", "Be", "TypedEmitter", "We", "EventEmitter", "createTypedEmitter", "emitter", "method", "source", "args", "promiEventBrand", "isPromiEvent", "value", "createPromiEvent", "executor", "promise", "createPromise", "createBoundEmitterMethod", "createChainingEmitterMethod", "thenSymbol", "catchSymbol", "finallySymbol", "createChainingPromiseMethod", "nextPromise", "promiEvent", "result", "resolved", "err", "resolve", "reject", "BaseModule", "sdk", "payload", "responsePromise", "TronicOutgoingWindowMessage", "standardizeJsonRpcRequestPayload", "res", "cleanupEvents", "TronicRPCError", "createMalformedResponseError", "TronicIncomingWindowMessage", "evt", "_a", "response", "event", "params", "UserModule", "WalletModule", "createJsonRpcRequestPayload", "TronicPayloadMethod", "createURL", "url", "base", "storage_exports", "__export", "clear", "getItem", "iterate", "key", "keys", "length", "removeItem", "setItem", "lf", "proxyLocalForageMethod", "__async", "SDKEnvironment", "sdkAccessFields", "getPrototypeChain", "instance", "currentProto", "protos", "BaseModule", "BaseExtension", "createPromiEvent", "isPromiEvent", "encodeJSON", "decodeJSON", "createJsonRpcRequestPayload", "standardizeJsonRpcRequestPayload", "storage_exports", "createURL", "allSources", "prop", "allDescriptors", "source", "sourceIndex", "x", "isPrototypeField", "descriptor", "createExtensionNotInitializedError", "sdk", "options", "method", "removalVersion", "useInstead", "useInsteadSuffix", "message", "TronicExtensionWarning", "code", "data", "TronicExtensionError", "InternalExtension", "Extension", "checkExtensionCompat", "ext", "SDKEnvironment", "satisfies", "coerce", "prepareExtensions", "_a", "extensions", "extConfig", "incompatibleExtensions", "isEmpty", "name", "createIncompatibleExtensionsError", "_SDKBase", "apiKey", "createMissingApiKeyError", "createMissingEndpointError", "version", "UserModule", "WalletModule", "sdkNameToEnvName", "controller", "__async", "SDKBase", "findSameSrcInstances", "parameters", "i", "overlayStyles", "applyStyles", "elem", "config", "cssProperty", "value", "UILauncherExtension", "Extension", "uiLauncherConfig", "resolve", "onload", "__async", "sameSrcInstance", "Wn", "iframe", "container", "__spreadValues"]
}
