{"version":3,"file":"MagicEdenWalletAdapter.impl-D7aZgUq4.mjs","sources":["../src/utils/XverseCompatibleWalletAdapterImpl_legacy.ts","../src/adapters/MagicEdenWalletAdapter.impl.ts"],"sourcesContent":["import { base64, hex } from \"@scure/base\"\nimport * as btc from \"@scure/btc-signer\"\nimport { UserRejectError } from \"../utils/error\"\nimport {\n  SignMessageAlgorithm,\n  SignMessageResult,\n  WalletAdapter,\n  WalletAdapter_onAddressesChanged_callback,\n  WalletAdapterAddress,\n  WalletAdapterAddressPurpose,\n  WalletAdapterBitcoinNetwork,\n  WalletAdapterNotConnectedError,\n} from \"../WalletAdapters.types\"\nimport {\n  XverseCompatibleProviderError,\n  XverseRpcErrorCode,\n} from \"./XverseCompatibleWalletAdapterImpl\"\n\ntype GetAddressResponse = import(\"sats-connect\").GetAddressResponse\n\nexport type XverseCompatibleWalletAdapterGetProviderFn = () => Promise<\n  import(\"sats-connect\").BitcoinProvider\n>\n\nexport type XverseCompatibleWalletAdapterParsedAddressesFn = (info: {\n  sdk: typeof import(\"sats-connect\")\n  addresses: import(\"sats-connect\").Address[]\n}) => Promise<XverseCompatibleWalletAdapterImplAddress[]>\n\nexport type XverseCompatibleWalletAdapterImplAddress = WalletAdapterAddress & {\n  publicKey: string\n}\n\nexport class XverseCompatibleWalletAdapterImpl_legacy implements WalletAdapter {\n  protected readonly network: WalletAdapterBitcoinNetwork\n  protected readonly localStorageKeyPrefix: string\n  protected readonly walletDisplayName: string\n  protected readonly getProvider: XverseCompatibleWalletAdapterGetProviderFn\n  protected readonly parseAddresses: XverseCompatibleWalletAdapterParsedAddressesFn\n\n  constructor(info: {\n    network: WalletAdapterBitcoinNetwork\n    localStorageKeyPrefix: string\n    walletDisplayName: string\n    getProvider: XverseCompatibleWalletAdapterGetProviderFn\n    parseAddresses: XverseCompatibleWalletAdapterParsedAddressesFn\n  }) {\n    this.network = info.network\n    this.localStorageKeyPrefix = info.localStorageKeyPrefix\n    this.walletDisplayName = info.walletDisplayName\n    this.getProvider = info.getProvider\n    this.parseAddresses = info.parseAddresses\n  }\n\n  private async getSdk(): Promise<typeof import(\"sats-connect\")> {\n    return import(\"sats-connect\")\n  }\n\n  protected get connectAddresses_localStorageKey(): string {\n    return `${this.localStorageKeyPrefix}:connectedAddresses`\n  }\n\n  protected retrieveConnectedAddress(): GetAddressResponse | undefined {\n    let resp: GetAddressResponse | undefined\n    const stored =\n      localStorage.getItem(this.connectAddresses_localStorageKey) || undefined\n    if (stored != null) {\n      try {\n        resp = JSON.parse(stored)\n        if (\n          resp == null ||\n          !(\"addresses\" in resp) ||\n          !Array.isArray(resp.addresses)\n        ) {\n          throw new Error(\"Invalid stored addresses\")\n        }\n      } catch {\n        localStorage.removeItem(this.connectAddresses_localStorageKey)\n      }\n    }\n    return resp\n  }\n  protected async updateConnectedAddress(\n    addresses: GetAddressResponse[\"addresses\"],\n  ): Promise<void> {\n    localStorage.setItem(\n      this.connectAddresses_localStorageKey,\n      JSON.stringify({ addresses }),\n    )\n  }\n\n  async connect(): Promise<void> {\n    if (this.retrieveConnectedAddress() == null) {\n      const resp = await this.connectImpl()\n      await this.updateConnectedAddress(resp.addresses)\n    }\n  }\n  private async connectImpl(): Promise<GetAddressResponse> {\n    const sdk = await this.getSdk()\n\n    const networkType =\n      this.network === WalletAdapterBitcoinNetwork.MAINNET\n        ? sdk.BitcoinNetworkType.Mainnet\n        : sdk.BitcoinNetworkType.Testnet\n\n    return new Promise<GetAddressResponse>((resolve, reject) => {\n      void sdk\n        .getAddress({\n          getProvider: () => this.getProvider(),\n          payload: {\n            purposes: [sdk.AddressPurpose.Ordinals, sdk.AddressPurpose.Payment],\n            message: \"Address for receiving Ordinals and payments\",\n            network: { type: networkType },\n          },\n          onFinish(resp) {\n            resolve(resp)\n          },\n          onCancel() {\n            reject(new UserRejectError())\n          },\n        })\n        .catch(reject)\n    })\n  }\n\n  async disconnect(): Promise<void> {\n    localStorage.removeItem(this.connectAddresses_localStorageKey)\n    return Promise.resolve()\n  }\n\n  async getAddresses(): Promise<XverseCompatibleWalletAdapterImplAddress[]> {\n    const resp = this.retrieveConnectedAddress()\n\n    if (resp == null) {\n      throw new WalletAdapterNotConnectedError(this.walletDisplayName)\n    }\n\n    const sdk = await this.getSdk()\n\n    return this.parseAddresses({ sdk, addresses: resp.addresses })\n  }\n\n  async signMessage(\n    address: string,\n    message: string,\n  ): Promise<SignMessageResult> {\n    const sdk = await this.getSdk()\n\n    return new Promise((resolve, reject) => {\n      /**\n       * https://docs.xverse.app/sats-connect/methods/signmessage\n       */\n      void sdk.signMessage({\n        getProvider: () => this.getProvider(),\n        payload: {\n          network: {\n            type:\n              this.network === \"mainnet\"\n                ? sdk.BitcoinNetworkType.Mainnet\n                : sdk.BitcoinNetworkType.Testnet,\n          },\n          address,\n          message,\n          protocol: sdk.MessageSigningProtocols.BIP322,\n        },\n        onFinish(resp) {\n          resolve({\n            result: resp,\n            address,\n            algorithm: SignMessageAlgorithm.BIP322,\n          })\n        },\n        onCancel() {\n          reject(new UserRejectError())\n        },\n      })\n    })\n  }\n\n  sendBitcoinFeeRateCapability = \"unavailable\" as const\n  async sendBitcoin(\n    fromAddress: string,\n    receiverAddress: string,\n    satoshiAmount: bigint,\n  ): Promise<{ txid: string }> {\n    const senderAddress = (await this.getAddresses()).find(a =>\n      a.purposes.includes(WalletAdapterAddressPurpose.Bitcoin),\n    )\n    if (senderAddress == null) {\n      throw new XverseCompatibleProviderError({\n        code: XverseRpcErrorCode.INVALID_PARAMS,\n        message: \"Bitcoin address not found\",\n      })\n    }\n\n    const sdk = await this.getSdk()\n\n    return new Promise((resolve, reject) => {\n      void sdk\n        .sendBtcTransaction({\n          getProvider: () => this.getProvider(),\n          payload: {\n            network: {\n              type:\n                this.network === WalletAdapterBitcoinNetwork.MAINNET\n                  ? sdk.BitcoinNetworkType.Mainnet\n                  : sdk.BitcoinNetworkType.Testnet,\n            },\n            message: \"Send Bitcoin\",\n            recipients: [\n              {\n                address: receiverAddress,\n                amountSats: BigInt(satoshiAmount),\n              },\n            ],\n            senderAddress: senderAddress.address,\n          },\n          onFinish(resp) {\n            return resolve({ txid: resp })\n          },\n          onCancel() {\n            reject(new UserRejectError())\n          },\n        })\n        .catch(reject)\n    })\n  }\n\n  /**\n   * @internal\n   * @experimental\n   */\n  sendInscriptionFeeRateCapability = \"unavailable\" as const\n\n  async signAndFinalizePsbt(\n    psbtHex: string,\n    signIndices: [address: string, signIndex: number][],\n  ): Promise<{\n    signedPsbtHex: string\n  }> {\n    const sdk = await this.getSdk()\n\n    const psbtBase64 = base64.encode(hex.decode(psbtHex))\n\n    const signedPsbt = await new Promise<Uint8Array>((resolve, reject) => {\n      void sdk\n        .signTransaction({\n          getProvider: () => this.getProvider(),\n          payload: {\n            network: {\n              type:\n                this.network === WalletAdapterBitcoinNetwork.MAINNET\n                  ? sdk.BitcoinNetworkType.Mainnet\n                  : sdk.BitcoinNetworkType.Testnet,\n            },\n            message: \"Sign transaction\",\n            psbtBase64,\n            inputsToSign: signIndices.map(([address, signIndex]) => ({\n              address,\n              signingIndexes: [signIndex],\n            })),\n            broadcast: false,\n          },\n          onFinish(resp) {\n            resolve(base64.decode(resp.psbtBase64))\n          },\n          onCancel() {\n            reject(new UserRejectError())\n          },\n        })\n        .catch(reject)\n    })\n\n    const tx = btc.Transaction.fromPSBT(signedPsbt, {\n      allowUnknownInputs: true,\n      allowUnknownOutputs: true,\n      disableScriptCheck: true,\n      allowLegacyWitnessUtxo: true,\n    })\n    tx.finalize()\n\n    return { signedPsbtHex: hex.encode(tx.toPSBT()) }\n  }\n\n  onAddressesChanged(callback: WalletAdapter_onAddressesChanged_callback): {\n    unsubscribe: () => void\n  } {\n    throw new Error(\"Not implemented\")\n  }\n}\n","import { hex } from \"@scure/base\"\nimport { addressToScriptPubKey } from \"../utils/bitcoinAddressHelpers\"\nimport { getBitcoinNetwork } from \"../utils/bitcoinNetworkHelpers\"\nimport {\n  XverseCompatibleWalletAdapterImpl_legacy,\n  XverseCompatibleWalletAdapterImplAddress,\n} from \"../utils/XverseCompatibleWalletAdapterImpl_legacy\"\nimport {\n  WalletAdapter,\n  WalletAdapter_onAddressesChanged_callback,\n  WalletAdapterAddressPurpose,\n  WalletAdapterAddressType,\n  WalletAdapterBitcoinNetwork,\n} from \"../WalletAdapters.types\"\nimport { MAGICEDEN_PROVIDER_ID, metadata } from \"./MagicEdenWalletAdapter\"\nimport { LOCAL_STORAGE_KEY_PREFIX } from \"../constants\"\n\ninterface MagicEdenBitcoinProviderEvents {\n  accountsChanged: [\n    event: {\n      accounts: import(\"sats-connect\").GetAddressResponse[\"addresses\"]\n    },\n  ]\n}\n\nexport interface MagicEdenBitcoinProvider {\n  isMagicEden: boolean\n  on: <K extends keyof MagicEdenBitcoinProviderEvents>(\n    event: K,\n    handler: (...args: MagicEdenBitcoinProviderEvents[K]) => void,\n  ) => void\n  removeListener: <K extends keyof MagicEdenBitcoinProviderEvents>(\n    event: K,\n    handler: (...args: MagicEdenBitcoinProviderEvents[K]) => void,\n  ) => void\n}\n\nconst localStorageKeyPrefix = `${LOCAL_STORAGE_KEY_PREFIX}:${MAGICEDEN_PROVIDER_ID}`\n\nexport class MagicEdenWalletAdapterImpl\n  extends XverseCompatibleWalletAdapterImpl_legacy\n  implements WalletAdapter\n{\n  private magicEden: MagicEdenBitcoinProvider\n\n  constructor(\n    network: WalletAdapterBitcoinNetwork,\n    provider: MagicEdenBitcoinProvider,\n  ) {\n    super({\n      network,\n      localStorageKeyPrefix,\n      walletDisplayName: metadata.name,\n      getProvider: async () => {\n        return provider as any\n      },\n      parseAddresses: async ({ sdk, addresses }) => {\n        const isMainnet = addresses\n          .filter(a => a.purpose === sdk.AddressPurpose.Ordinals)[0]\n          .address.startsWith(\"bc\")\n\n        return addresses.flatMap(\n          (a): XverseCompatibleWalletAdapterImplAddress[] => {\n            if (a.purpose === sdk.AddressPurpose.Payment) {\n              return [\n                {\n                  addressType: WalletAdapterAddressType.P2WPKH,\n                  purposes: [WalletAdapterAddressPurpose.Bitcoin],\n                  address: a.address,\n                  network: this.network,\n                  scriptPubKey: hex.encode(\n                    addressToScriptPubKey(\n                      getBitcoinNetwork(isMainnet ? \"mainnet\" : \"testnet\"),\n                      a.address,\n                    ),\n                  ),\n                  publicKey: a.publicKey,\n                },\n              ]\n            }\n\n            if (a.purpose === sdk.AddressPurpose.Ordinals) {\n              return [\n                {\n                  addressType: WalletAdapterAddressType.P2TR,\n                  purposes: [\n                    WalletAdapterAddressPurpose.Ordinals,\n                    WalletAdapterAddressPurpose.BRC20,\n                    WalletAdapterAddressPurpose.Runes,\n                  ],\n                  address: a.address,\n                  network: this.network,\n                  scriptPubKey: hex.encode(\n                    addressToScriptPubKey(\n                      getBitcoinNetwork(isMainnet ? \"mainnet\" : \"testnet\"),\n                      a.address,\n                    ),\n                  ),\n                  publicKey: a.publicKey,\n                  tapInternalKey: a.publicKey,\n                },\n              ]\n            }\n\n            return []\n          },\n        )\n      },\n    })\n    this.magicEden = provider\n  }\n\n  onAddressesChanged(callback: WalletAdapter_onAddressesChanged_callback): {\n    unsubscribe: () => void\n  } {\n    // MagicEden uses accountsChanged event\n    // https://docs-wallet.magiceden.io/bitcoin/provider-events\n    const provider = this.magicEden\n\n    const handler = async (event: {\n      accounts: import(\"sats-connect\").GetAddressResponse[\"addresses\"]\n    }): Promise<void> => {\n      try {\n        await this.updateConnectedAddress(event.accounts)\n        const addresses = await this.getAddresses()\n        callback({ addresses })\n      } catch (error) {\n        console.warn(\"[Magic Eden] Failed to get addresses on change:\", error)\n      }\n    }\n\n    provider.on(\"accountsChanged\", handler)\n\n    return {\n      unsubscribe: () => {\n        provider.removeListener(\"accountsChanged\", handler)\n      },\n    }\n  }\n}\n"],"names":["XverseCompatibleWalletAdapterImpl_legacy","info","resp","stored","addresses","sdk","networkType","WalletAdapterBitcoinNetwork","resolve","reject","UserRejectError","WalletAdapterNotConnectedError","address","message","SignMessageAlgorithm","fromAddress","receiverAddress","satoshiAmount","senderAddress","a","WalletAdapterAddressPurpose","XverseCompatibleProviderError","XverseRpcErrorCode","psbtHex","signIndices","psbtBase64","base64","hex","signedPsbt","signIndex","tx","btc.Transaction","callback","localStorageKeyPrefix","LOCAL_STORAGE_KEY_PREFIX","MAGICEDEN_PROVIDER_ID","MagicEdenWalletAdapterImpl","network","provider","metadata","isMainnet","WalletAdapterAddressType","addressToScriptPubKey","getBitcoinNetwork","handler","event","error"],"mappings":"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"}