{"version":3,"file":"stellar-wallets-kit.mjs","sources":["../src/stellar-wallets-kit.ts"],"sourcesContent":["import { StellarWalletsButton } from './components/button/stellar-wallets-button';\nimport { StellarWalletsModal } from './components/modal/stellar-wallets-modal';\nimport {\n  removeAddress,\n  seButtonTheme,\n  setAddress,\n  setAllowedWallets,\n  setHorizonUrl,\n  setModalTheme,\n  setNetwork,\n  setSelectedModuleId,\n  store,\n} from './state/store';\nimport { IButtonTheme, ISupportedWallet, IModalTheme, KitActions, ModuleInterface, WalletNetwork } from './types';\n\nexport interface StellarWalletsKitParams {\n  selectedWalletId?: string;\n  network: WalletNetwork;\n  modules: ModuleInterface[];\n  /**\n   * @deprecated - This parameter will be removed in a future release, use `modalTheme` instead\n   */\n  theme?: IModalTheme;\n  modalTheme?: IModalTheme;\n  buttonTheme?: IButtonTheme;\n}\n\nexport class StellarWalletsKit implements KitActions {\n  private buttonElement?: StellarWalletsButton;\n  private modalElement?: StellarWalletsModal;\n  private readonly modules: ModuleInterface[];\n\n  private get selectedModule(): ModuleInterface {\n    const { selectedModuleId } = store.getValue();\n\n    if (!selectedModuleId) {\n      throw { code: -3, message: 'Please set the wallet first' };\n    }\n\n    const target: ModuleInterface | undefined = this.modules.find(\n      (mod: ModuleInterface): boolean => mod.productId === selectedModuleId\n    );\n\n    if (!target) {\n      throw { code: -3, message: 'Please set the wallet first' };\n    }\n\n    return target;\n  }\n\n  constructor(params: StellarWalletsKitParams) {\n    this.modules = params.modules;\n    if (params.selectedWalletId) this.setWallet(params.selectedWalletId);\n    setNetwork(params.network);\n\n    const modalTheme: IModalTheme | undefined = params.theme || params.modalTheme;\n    if (modalTheme) {\n      setModalTheme(modalTheme);\n    }\n\n    if (params.buttonTheme) {\n      seButtonTheme(params.buttonTheme);\n    }\n\n    this.getSupportedWallets().then((value: ISupportedWallet[]): void => {\n      setAllowedWallets(value);\n    });\n  }\n\n  /**\n   * This method will return an array with all wallets supported by this kit but will let you know those the user have already installed/has access to\n   * There are wallets that are by default available since they either don't need to be installed or have a fallback\n   */\n  public async getSupportedWallets(): Promise<ISupportedWallet[]> {\n    return Promise.all(\n      this.modules.map(async (mod: ModuleInterface): Promise<ISupportedWallet> => {\n        const timer: Promise<false> = new Promise(r => setTimeout(() => r(false), 500));\n        return {\n          id: mod.productId,\n          name: mod.productName,\n          type: mod.moduleType,\n          icon: mod.productIcon,\n          isAvailable: await Promise.race([timer, mod.isAvailable()]),\n          url: mod.productUrl,\n        };\n      })\n    );\n  }\n\n  public setWallet(id: string): void {\n    const target: ModuleInterface | undefined = this.modules.find(\n      (mod: ModuleInterface): boolean => mod.productId === id\n    );\n\n    if (!target) {\n      throw new Error(`Wallet id \"${id}\" is not supported`);\n    }\n\n    setSelectedModuleId(target.productId);\n  }\n\n  public async getAddress(params?: { path?: string }): Promise<{ address: string }> {\n    const { address } = await this.selectedModule.getAddress(params);\n    setAddress(address);\n    return { address };\n  }\n\n  public async signTransaction(\n    xdr: string,\n    opts?: {\n      networkPassphrase?: string;\n      address?: string;\n      path?: string;\n      submit?: boolean;\n      submitUrl?: string;\n    }\n  ): Promise<{ signedTxXdr: string; signerAddress?: string }> {\n    return this.selectedModule.signTransaction(xdr, {\n      ...opts,\n      networkPassphrase: opts?.networkPassphrase || store.getValue().selectedNetwork,\n    });\n  }\n\n  public async signAuthEntry(\n    authEntry: string,\n    opts?: {\n      networkPassphrase?: string;\n      address?: string;\n      path?: string;\n    }\n  ): Promise<{ signedAuthEntry: string; signerAddress?: string }> {\n    return this.selectedModule.signAuthEntry(authEntry, {\n      ...opts,\n      networkPassphrase: opts?.networkPassphrase || store.getValue().selectedNetwork,\n    });\n  }\n\n  public async signMessage(\n    message: string,\n    opts?: {\n      networkPassphrase?: string;\n      address?: string;\n      path?: string;\n    }\n  ): Promise<{ signedMessage: string; signerAddress?: string }> {\n    return this.selectedModule.signMessage(message, {\n      ...opts,\n      networkPassphrase: opts?.networkPassphrase || store.getValue().selectedNetwork,\n    });\n  }\n\n  async getNetwork(): Promise<{ network: string; networkPassphrase: string }> {\n    return this.selectedModule.getNetwork();\n  }\n\n  async disconnect(): Promise<void> {\n    removeAddress();\n  }\n\n  // ---- Button methods\n  public isButtonCreated(): boolean {\n    return !!this.buttonElement;\n  }\n\n  /**\n   * This method allows developers to set their own buttons (for connection and disconnection) on their website\n   * while letting the kit handle the logic behind opening the modal, setting and removing the address from the storage, etc\n   */\n  public assignButtons(params: {\n    connectEl: HTMLElement | string;\n    disconnectEl?: HTMLElement | string;\n    onConnect: (response: { address: string }) => void;\n    onDisconnect: () => void;\n  }): void {\n    const connectEl: HTMLElement =\n      typeof params.connectEl === 'string'\n        ? (document.querySelector(params.connectEl) as HTMLElement)\n        : params.connectEl;\n\n    if (!connectEl) throw new Error('connectEl is not available');\n\n    connectEl.addEventListener(\n      'click',\n      () => {\n        this.openModal({\n          onWalletSelected: option => {\n            setSelectedModuleId(option.id);\n            this.getAddress().then((r: { address: string }) => params.onConnect(r));\n          },\n        }).then();\n      },\n      false\n    );\n\n    if (!params.disconnectEl) return;\n\n    const disconnectEl: HTMLElement =\n      typeof params.disconnectEl === 'string'\n        ? (document.querySelector(params.disconnectEl) as HTMLElement)\n        : params.disconnectEl;\n\n    if (!disconnectEl) throw new Error('disconnectEl is not available');\n\n    disconnectEl.addEventListener(\n      'click',\n      () => {\n        params.onDisconnect();\n        removeAddress();\n\n        if (this.selectedModule.disconnect) {\n          this.selectedModule.disconnect().then();\n        }\n      },\n      false\n    );\n  }\n\n  /**\n   *\n   * @param params {Object}\n   * @param params.container {HTMLElement} - The container where the button should be rendered.\n   * @param params.onConnect {Function} - This callback is called after the user has clicked the button and selected a wallet\n   * @param params.onClosed {Function} - This callback is called if the user closes the modal without selecting any wallet.\n   * @param params.onError {Function} - This callback is called if there is an error while trying to get the address once the user has selected the wallet from the modal.\n   * @param params.onDisconnect {Function} - This callback is called once the user disconnects from the dropdown modal\n   * @param params.horizonUrl {String} - If this url is set, the dropdown modal will show the current XLM balance of the address fetched from the wallet\n   * @param params.buttonText {String} - A custom text to set inside the button.\n   */\n  public async createButton(params: {\n    container: HTMLElement;\n    onConnect: (response: { address: string }) => void;\n    onClosed?: (err: Error) => void;\n    onError?: (err: Error) => void;\n    onDisconnect: () => void;\n    horizonUrl?: string;\n    buttonText?: string;\n  }): Promise<void> {\n    if (this.buttonElement) {\n      throw new Error(`Stellar Wallets Kit button is already created`);\n    }\n\n    this.buttonElement = document.createElement('stellar-wallets-button') as StellarWalletsButton;\n\n    if (params.buttonText) {\n      this.buttonElement.setAttribute('buttonText', params.buttonText);\n    }\n\n    if (params.horizonUrl) {\n      setHorizonUrl(params.horizonUrl);\n    }\n\n    params.container.appendChild(this.buttonElement);\n\n    this.buttonElement.addEventListener(\n      'button-clicked',\n      () => {\n        this.openModal({\n          onWalletSelected: option => {\n            setSelectedModuleId(option.id);\n            this.getAddress()\n              .then((r: { address: string }) => params.onConnect(r))\n              .catch(err => {\n                if (params.onError) params.onError(err);\n              });\n          },\n          onClosed: (err: Error): void => {\n            if (params.onClosed) params.onClosed(err);\n          },\n        });\n      },\n      false\n    );\n\n    this.buttonElement.addEventListener(\n      'disconnect-wallet',\n      () => {\n        params.onDisconnect();\n\n        if (this.selectedModule.disconnect) {\n          this.selectedModule.disconnect();\n        }\n      },\n      false\n    );\n  }\n\n  /**\n   * Removes the button elements from the HTML and from the kit's instance.\n   *\n   * @param params.skipDisconnect - Set this to `true` if you want to prevent that we disconnect (for example, disconnecting WalletConnect or removing the address)\n   */\n  public async removeButton(params?: { skipDisconnect?: boolean }): Promise<void> {\n    if (!this.buttonElement) {\n      throw new Error(`Stellar Wallets Kit button hasn't been created yet`);\n    }\n\n    if (params?.skipDisconnect !== true) {\n      this.buttonElement.disconnect();\n    }\n\n    this.buttonElement.remove();\n    delete this.buttonElement;\n  }\n  // ---- END Button methods\n\n  // ---- Modal methods\n  public async openModal(params: {\n    onWalletSelected: (option: ISupportedWallet) => void;\n    onClosed?: (err: Error) => void;\n    modalTitle?: string;\n    notAvailableText?: string;\n  }): Promise<void> {\n    if (this.modalElement && !this.buttonElement) {\n      throw new Error(`Stellar Wallets Kit modal is already open`);\n    } else {\n      this.modalElement = document.createElement('stellar-wallets-modal') as StellarWalletsModal;\n    }\n\n    this.modalElement.setAttribute('showModal', '');\n\n    if (params.modalTitle) {\n      this.modalElement.setAttribute('modalTitle', params.modalTitle);\n    }\n\n    if (params.notAvailableText) {\n      this.modalElement.setAttribute('notAvailableText', params.notAvailableText);\n    }\n\n    document.body.appendChild(this.modalElement);\n\n    const listener = (event: CustomEvent) => {\n      params.onWalletSelected(event.detail);\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      this.modalElement.removeEventListener('wallet-selected', listener, false);\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      document.body.removeChild(this.modalElement);\n      this.modalElement = undefined;\n    };\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    this.modalElement.addEventListener('wallet-selected', listener, false);\n\n    const errorListener = (event: CustomEvent) => {\n      if (params.onClosed) {\n        params.onClosed(event.detail);\n      }\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      this.modalElement.removeEventListener('wallet-selected', listener, false);\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      this.modalElement.removeEventListener('modal-closed', errorListener, false);\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      document.body.removeChild(this.modalElement);\n      this.modalElement = undefined;\n    };\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    this.modalElement.addEventListener('modal-closed', errorListener, false);\n  }\n  // ---- END Modal methods\n}\n"],"names":[],"mappings":"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"}