{"version":3,"file":"stellar-wallets-kit.cjs","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":["store","setNetwork","setModalTheme","seButtonTheme","setAllowedWallets","setSelectedModuleId","setAddress","removeAddress","setHorizonUrl"],"mappings":"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"}