{"version":3,"file":"barrel.mjs","names":[],"sources":["../src/signer.ts","../src/signersFactory.ts","../src/barrel.ts"],"sourcesContent":["import { ccc } from \"@ckb-ccc/core\";\nimport { Provider } from \"./advancedBarrel.js\";\n\n/**\n * Class representing a Bitcoin signer that extends SignerBtc\n * @public\n */\nexport class Signer extends ccc.SignerBtc {\n  /**\n   * Creates an instance of Signer.\n   * @param client - The client instance.\n   * @param provider - The provider instance.\n   */\n  constructor(\n    client: ccc.Client,\n    public readonly provider: Provider,\n    _preferredNetworks?: ccc.NetworkPreference[],\n    public readonly network = \"btc\",\n  ) {\n    super(client);\n  }\n\n  async _getNetworkToChange(): Promise<string | undefined> {\n    const currentNetwork = await (async () => {\n      if (this.provider.getChain) {\n        return (\n          {\n            BITCOIN_MAINNET: \"btc\",\n            BITCOIN_TESTNET: \"btcTestnet\",\n            BITCOIN_TESTNET4: \"btcTestnet4\",\n            BITCOIN_SIGNET: \"btcSignet\",\n            FRACTAL_BITCOIN_MAINNET: \"fractalBtc\",\n            FRACTAL_BITCOIN_TESTNET: \"fractalBtcTestnet\",\n          }[(await this.provider.getChain()).enum] ?? \"\"\n        );\n      }\n      return (await this.provider.getNetwork()) === \"livenet\"\n        ? \"btc\"\n        : \"btcTestnet\";\n    })();\n    if (this.network === currentNetwork) {\n      return;\n    }\n\n    return this.network;\n  }\n\n  /**\n   * Ensure the BTC network is the same as CKB network.\n   */\n  async ensureNetwork(): Promise<void> {\n    const network = await this._getNetworkToChange();\n    if (!network) {\n      return;\n    }\n    if (this.provider.switchChain) {\n      const chain = {\n        btc: \"BITCOIN_MAINNET\",\n        btcTestnet: \"BITCOIN_TESTNET\",\n        btcTestnet4: \"BITCOIN_TESTNET4\",\n        btcSignet: \"BITCOIN_SIGNET\",\n        fractalBtc: \"FRACTAL_BITCOIN_MAINNET\",\n        fractalBtcTestnet: \"FRACTAL_BITCOIN_TESTNET\",\n      }[network];\n      if (chain) {\n        await this.provider.switchChain(chain);\n        return;\n      }\n    } else if (network === \"btc\" || network === \"btcTestnet\") {\n      await this.provider.switchNetwork(\n        network === \"btc\" ? \"livenet\" : \"testnet\",\n      );\n      return;\n    }\n\n    throw new Error(\n      `UniSat wallet doesn't support the requested chain ${network}`,\n    );\n  }\n\n  /**\n   * Gets the Bitcoin account address.\n   * @returns A promise that resolves to the Bitcoin account address.\n   */\n  async getBtcAccount(): Promise<string> {\n    return (await this.provider.getAccounts())[0];\n  }\n\n  /**\n   * Gets the Bitcoin public key.\n   * @returns A promise that resolves to the Bitcoin public key.\n   */\n  async getBtcPublicKey(): Promise<ccc.Hex> {\n    return ccc.hexFrom(await this.provider.getPublicKey());\n  }\n\n  /**\n   * Connects to the provider by requesting accounts.\n   * @returns A promise that resolves when the connection is established.\n   */\n  async connect(): Promise<void> {\n    await this.provider.requestAccounts();\n    await this.ensureNetwork();\n  }\n\n  onReplaced(listener: () => void): () => void {\n    const stop: (() => void)[] = [];\n    const replacer = async () => {\n      listener();\n      stop[0]?.();\n    };\n    stop.push(() => {\n      this.provider.removeListener(\"accountsChanged\", replacer);\n      this.provider.removeListener(\"networkChanged\", replacer);\n    });\n\n    this.provider.on(\"accountsChanged\", replacer);\n    this.provider.on(\"networkChanged\", replacer);\n\n    return stop[0];\n  }\n\n  /**\n   * Checks if the signer is connected.\n   * @returns A promise that resolves to true if connected, false otherwise.\n   */\n  async isConnected(): Promise<boolean> {\n    if (await this._getNetworkToChange()) {\n      return false;\n    }\n    return (await this.provider.getAccounts()).length !== 0;\n  }\n\n  /**\n   * Signs a raw message with the Bitcoin account.\n   * @param message - The message to sign.\n   * @returns A promise that resolves to the signed message.\n   */\n  async signMessageRaw(message: string | ccc.BytesLike): Promise<string> {\n    const challenge =\n      typeof message === \"string\" ? message : ccc.hexFrom(message).slice(2);\n\n    return this.provider.signMessage(challenge, \"ecdsa\");\n  }\n\n  /**\n   * Signs a PSBT using UniSat wallet.\n   *\n   * @param psbtHex - The hex string of PSBT to sign.\n   * @param options - Options for signing the PSBT\n   * @returns A promise that resolves to the signed PSBT as a Hex string\n   */\n  async signPsbt(\n    psbtHex: ccc.HexLike,\n    options?: ccc.SignPsbtOptionsLike,\n  ): Promise<ccc.Hex> {\n    return ccc.hexFrom(\n      await this.provider.signPsbt(ccc.hexFrom(psbtHex).slice(2), options),\n    );\n  }\n\n  /**\n   * Broadcasts a signed PSBT to the Bitcoin network.\n   *\n   * @param psbtHex - The hex string of signed PSBT to broadcast.\n   * @returns A promise that resolves to the transaction ID as a Hex string\n   */\n  async broadcastPsbt(\n    psbtHex: ccc.HexLike,\n    _options?: ccc.SignPsbtOptionsLike,\n  ): Promise<ccc.Hex> {\n    const txid = await this.provider.pushPsbt(ccc.hexFrom(psbtHex).slice(2));\n    return ccc.hexFrom(txid);\n  }\n}\n","import { ccc } from \"@ckb-ccc/core\";\nimport { Provider } from \"./advancedBarrel.js\";\nimport { Signer } from \"./signer.js\";\n\n/**\n * Retrieves the UniSat signer if available.\n * @public\n *\n * @param client - The client instance.\n * @returns The Signer instance if the UniSat provider is available, otherwise undefined.\n */\nexport function getUniSatSigners(\n  client: ccc.Client,\n  preferredNetworks?: ccc.NetworkPreference[],\n): ccc.SignerInfo[] {\n  const windowRef = window as { unisat?: Provider };\n\n  if (typeof windowRef.unisat === \"undefined\") {\n    return [];\n  }\n\n  return [\n    [\"BTC\", \"btc\"],\n    [\"BTC Testnet\", \"btcTestnet\"],\n    [\"BTC Testnet4\", \"btcTestnet4\"],\n    [\"BTC Signet\", \"btcSignet\"],\n    [\"Fractal Bitcoin\", \"fractalBtc\"],\n    [\"Fractal Bitcoin Testnet\", \"fractalBtcTestnet\"],\n  ]\n    .filter(\n      ([, network]) =>\n        client.addressPrefix !== \"ckb\" ||\n        network === \"btc\" ||\n        network === \"fractalBtc\",\n    )\n    .map(([name, network]) => ({\n      signer: new Signer(client, windowRef.unisat!, preferredNetworks, network),\n      name,\n    }));\n}\n","export * from \"./signer.js\";\nexport * from \"./signersFactory.js\";\n"],"mappings":"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"}