bitcoin-wallet-connector 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +24 -21
  2. package/lib/BitcoinConnectionProvider.d.ts +3 -3
  3. package/lib/BitcoinWalletConnector-BC92ulXx.js +2 -0
  4. package/lib/BitcoinWalletConnector-BC92ulXx.js.map +1 -0
  5. package/lib/{BitcoinWalletAdapterConnector-Bq835yj0.mjs → BitcoinWalletConnector-CS0BshOl.mjs} +11 -19
  6. package/lib/BitcoinWalletConnector-CS0BshOl.mjs.map +1 -0
  7. package/lib/{BitcoinWalletAdapterConnector.d.ts → BitcoinWalletConnector.d.ts} +4 -5
  8. package/lib/BitgetWalletAdapter.impl-D8kqiYDi.mjs +11 -0
  9. package/lib/BitgetWalletAdapter.impl-D8kqiYDi.mjs.map +1 -0
  10. package/lib/BitgetWalletAdapter.impl-DiyzNQ9d.js +2 -0
  11. package/lib/BitgetWalletAdapter.impl-DiyzNQ9d.js.map +1 -0
  12. package/lib/{LeatherWalletAdapter.impl-RUYx555r.mjs → LeatherWalletAdapter.impl-B1PoZS7z.mjs} +48 -37
  13. package/lib/LeatherWalletAdapter.impl-B1PoZS7z.mjs.map +1 -0
  14. package/lib/LeatherWalletAdapter.impl-BIWirus3.js +2 -0
  15. package/lib/LeatherWalletAdapter.impl-BIWirus3.js.map +1 -0
  16. package/lib/{MagicEdenWalletAdapter.impl-CrA6SGvG.mjs → MagicEdenWalletAdapter.impl-B3d5lbkD.mjs} +31 -20
  17. package/lib/MagicEdenWalletAdapter.impl-B3d5lbkD.mjs.map +1 -0
  18. package/lib/MagicEdenWalletAdapter.impl-DLBP3p4o.js +2 -0
  19. package/lib/MagicEdenWalletAdapter.impl-DLBP3p4o.js.map +1 -0
  20. package/lib/OkxWalletAdapter.impl-7cj96tmr.js +2 -0
  21. package/lib/OkxWalletAdapter.impl-7cj96tmr.js.map +1 -0
  22. package/lib/{OkxWalletAdapter.impl-BepoUL1B.mjs → OkxWalletAdapter.impl-nRgHsPTn.mjs} +13 -9
  23. package/lib/OkxWalletAdapter.impl-nRgHsPTn.mjs.map +1 -0
  24. package/lib/{UnisatCompatibleWalletAdapterImpl-M38FqkZI.mjs → UnisatCompatibleWalletAdapterImpl-8lRRF7Zj.mjs} +18 -10
  25. package/lib/UnisatCompatibleWalletAdapterImpl-8lRRF7Zj.mjs.map +1 -0
  26. package/lib/{UnisatCompatibleWalletAdapterImpl-Cq2Oqk1b.js → UnisatCompatibleWalletAdapterImpl-C-JWrc9s.js} +2 -2
  27. package/lib/UnisatCompatibleWalletAdapterImpl-C-JWrc9s.js.map +1 -0
  28. package/lib/UnisatWalletAdapter.impl-DXDfnHz_.js +2 -0
  29. package/lib/UnisatWalletAdapter.impl-DXDfnHz_.js.map +1 -0
  30. package/lib/UnisatWalletAdapter.impl-DvA33Ikj.mjs +19 -0
  31. package/lib/UnisatWalletAdapter.impl-DvA33Ikj.mjs.map +1 -0
  32. package/lib/WalletAdapters.types-CExaiK0o.js +2 -0
  33. package/lib/WalletAdapters.types-CExaiK0o.js.map +1 -0
  34. package/lib/WalletAdapters.types-DBvhI1hu.mjs +20 -0
  35. package/lib/WalletAdapters.types-DBvhI1hu.mjs.map +1 -0
  36. package/lib/WalletAdapters.types.d.ts +7 -12
  37. package/lib/{XverseCompatibleWalletAdapterImpl-Bf-BK5VK.js → XverseCompatibleWalletAdapterImpl-Dp_GUxQM.js} +2 -2
  38. package/lib/XverseCompatibleWalletAdapterImpl-Dp_GUxQM.js.map +1 -0
  39. package/lib/{XverseCompatibleWalletAdapterImpl-DXKnO_-V.mjs → XverseCompatibleWalletAdapterImpl-bgp9xDYH.mjs} +12 -8
  40. package/lib/XverseCompatibleWalletAdapterImpl-bgp9xDYH.mjs.map +1 -0
  41. package/lib/{XverseWalletAdapter.impl-CZO0RQva.mjs → XverseWalletAdapter.impl-BOpY4Vf8.mjs} +15 -15
  42. package/lib/XverseWalletAdapter.impl-BOpY4Vf8.mjs.map +1 -0
  43. package/lib/XverseWalletAdapter.impl-D0eOtEOa.js +2 -0
  44. package/lib/XverseWalletAdapter.impl-D0eOtEOa.js.map +1 -0
  45. package/lib/adapters/BitgetWalletAdapter.d.ts +6 -2
  46. package/lib/adapters/LeatherWalletAdapter.d.ts +4 -2
  47. package/lib/adapters/LeatherWalletAdapter.impl.d.ts +8 -1
  48. package/lib/adapters/MagicEdenWalletAdapter.d.ts +5 -2
  49. package/lib/adapters/MagicEdenWalletAdapter.impl.d.ts +1 -1
  50. package/lib/adapters/MockAddressWalletAdapter.d.ts +8 -32
  51. package/lib/adapters/OkxWalletAdapter.d.ts +3 -2
  52. package/lib/adapters/OkxWalletAdapter.impl.d.ts +5 -1
  53. package/lib/adapters/UnisatWalletAdapter.d.ts +3 -2
  54. package/lib/adapters/UnisatWalletAdapter.impl.d.ts +4 -0
  55. package/lib/adapters/XverseWalletAdapter.d.ts +3 -2
  56. package/lib/adapters/XverseWalletAdapter.impl.d.ts +1 -1
  57. package/lib/adapters/index.d.ts +6 -6
  58. package/lib/adapters.js +1 -1
  59. package/lib/adapters.mjs +8 -8
  60. package/lib/constants-B7qVf97f.mjs +5 -0
  61. package/lib/constants-B7qVf97f.mjs.map +1 -0
  62. package/lib/constants-Dr0_Mix2.js +2 -0
  63. package/lib/constants-Dr0_Mix2.js.map +1 -0
  64. package/lib/constants.d.ts +1 -0
  65. package/lib/{index-D7YwhNAG.mjs → index-DM4G-LJz.mjs} +639 -590
  66. package/lib/index-DM4G-LJz.mjs.map +1 -0
  67. package/lib/index-jRY8YhyK.js +2 -0
  68. package/lib/index-jRY8YhyK.js.map +1 -0
  69. package/lib/index.d.ts +1 -1
  70. package/lib/index.js +1 -1
  71. package/lib/index.mjs +13 -13
  72. package/lib/react.js +1 -1
  73. package/lib/react.js.map +1 -1
  74. package/lib/react.mjs +7 -7
  75. package/lib/react.mjs.map +1 -1
  76. package/lib/{transaction-CiLOYSE_.mjs → transaction-4ShhFCwN.mjs} +2 -2
  77. package/lib/{transaction-CiLOYSE_.mjs.map → transaction-4ShhFCwN.mjs.map} +1 -1
  78. package/lib/{transaction-CzdnbXSo.js → transaction-B6SlpRzN.js} +2 -2
  79. package/lib/{transaction-CzdnbXSo.js.map → transaction-B6SlpRzN.js.map} +1 -1
  80. package/lib/utils/UnisatCompatibleWalletAdapterImpl.d.ts +11 -3
  81. package/lib/utils/XverseCompatibleWalletAdapterImpl.d.ts +4 -0
  82. package/lib/utils/XverseCompatibleWalletAdapterImpl_legacy.d.ts +7 -2
  83. package/package.json +9 -10
  84. package/src/BitcoinConnectionProvider.stories.tsx +111 -43
  85. package/src/BitcoinConnectionProvider.tsx +5 -5
  86. package/src/{BitcoinWalletAdapterConnector.ts → BitcoinWalletConnector.ts} +18 -26
  87. package/src/WalletAdapters.types.ts +13 -22
  88. package/src/adapters/BitgetWalletAdapter.impl.ts +2 -1
  89. package/src/adapters/BitgetWalletAdapter.ts +9 -7
  90. package/src/adapters/LeatherWalletAdapter.impl.ts +23 -13
  91. package/src/adapters/LeatherWalletAdapter.ts +11 -8
  92. package/src/adapters/MagicEdenWalletAdapter.impl.ts +9 -8
  93. package/src/adapters/MagicEdenWalletAdapter.ts +17 -14
  94. package/src/adapters/MockAddressWalletAdapter.ts +61 -35
  95. package/src/adapters/OkxWalletAdapter.impl.ts +12 -7
  96. package/src/adapters/OkxWalletAdapter.ts +10 -7
  97. package/src/adapters/UnisatWalletAdapter.impl.ts +8 -2
  98. package/src/adapters/UnisatWalletAdapter.ts +9 -7
  99. package/src/adapters/XverseWalletAdapter.impl.ts +6 -6
  100. package/src/adapters/XverseWalletAdapter.ts +10 -7
  101. package/src/adapters/index.ts +6 -6
  102. package/src/constants.ts +1 -0
  103. package/src/index.ts +1 -1
  104. package/src/utils/UnisatCompatibleWalletAdapterImpl.ts +11 -2
  105. package/src/utils/XverseCompatibleWalletAdapterImpl.ts +4 -0
  106. package/src/utils/XverseCompatibleWalletAdapterImpl_legacy.ts +19 -7
  107. package/lib/BitcoinWalletAdapterConnector-Bq835yj0.mjs.map +0 -1
  108. package/lib/BitcoinWalletAdapterConnector-DMef0iHV.js +0 -2
  109. package/lib/BitcoinWalletAdapterConnector-DMef0iHV.js.map +0 -1
  110. package/lib/BitgetWalletAdapter.impl-C_HLO7Oi.mjs +0 -10
  111. package/lib/BitgetWalletAdapter.impl-C_HLO7Oi.mjs.map +0 -1
  112. package/lib/BitgetWalletAdapter.impl-CxnKMf7U.js +0 -2
  113. package/lib/BitgetWalletAdapter.impl-CxnKMf7U.js.map +0 -1
  114. package/lib/LeatherWalletAdapter.impl-B2QgX_tO.js +0 -2
  115. package/lib/LeatherWalletAdapter.impl-B2QgX_tO.js.map +0 -1
  116. package/lib/LeatherWalletAdapter.impl-RUYx555r.mjs.map +0 -1
  117. package/lib/MagicEdenWalletAdapter.impl-CrA6SGvG.mjs.map +0 -1
  118. package/lib/MagicEdenWalletAdapter.impl-Di3Nu2S5.js +0 -2
  119. package/lib/MagicEdenWalletAdapter.impl-Di3Nu2S5.js.map +0 -1
  120. package/lib/OkxWalletAdapter.impl-BepoUL1B.mjs.map +0 -1
  121. package/lib/OkxWalletAdapter.impl-C8kesjGu.js +0 -2
  122. package/lib/OkxWalletAdapter.impl-C8kesjGu.js.map +0 -1
  123. package/lib/UnisatCompatibleWalletAdapterImpl-Cq2Oqk1b.js.map +0 -1
  124. package/lib/UnisatCompatibleWalletAdapterImpl-M38FqkZI.mjs.map +0 -1
  125. package/lib/UnisatWalletAdapter.impl-CJB22se8.mjs +0 -14
  126. package/lib/UnisatWalletAdapter.impl-CJB22se8.mjs.map +0 -1
  127. package/lib/UnisatWalletAdapter.impl-EISvxdpc.js +0 -2
  128. package/lib/UnisatWalletAdapter.impl-EISvxdpc.js.map +0 -1
  129. package/lib/WalletAdapters.types-CnvOqHFH.mjs +0 -32
  130. package/lib/WalletAdapters.types-CnvOqHFH.mjs.map +0 -1
  131. package/lib/WalletAdapters.types-De_x1lzr.js +0 -2
  132. package/lib/WalletAdapters.types-De_x1lzr.js.map +0 -1
  133. package/lib/XverseCompatibleWalletAdapterImpl-Bf-BK5VK.js.map +0 -1
  134. package/lib/XverseCompatibleWalletAdapterImpl-DXKnO_-V.mjs.map +0 -1
  135. package/lib/XverseWalletAdapter.impl-CZO0RQva.mjs.map +0 -1
  136. package/lib/XverseWalletAdapter.impl-lJwMi-Iv.js +0 -2
  137. package/lib/XverseWalletAdapter.impl-lJwMi-Iv.js.map +0 -1
  138. package/lib/index-D7YwhNAG.mjs.map +0 -1
  139. package/lib/index-Zx0KcpYx.js +0 -2
  140. package/lib/index-Zx0KcpYx.js.map +0 -1
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # @c4/bitcoin-wallet-adapters
1
+ # bitcoin-wallet-connector
2
2
 
3
3
  A unified interface for interacting with multiple Bitcoin wallet browser extensions.
4
4
 
@@ -21,17 +21,17 @@ This library is carefully designed with a focus on **API compatibility** and **d
21
21
 
22
22
  | Wallet | Adapter | Optional Dependency |
23
23
  | ------------------------------------------ | ------------------------------- | ------------------- |
24
- | [Unisat](https://unisat.io/) | `UnisatWalletAdapter` | - |
25
- | [Xverse](https://www.xverse.app/) | `XverseWalletAdapter` | `sats-connect` |
26
- | [OKX](https://www.okx.com/web3) | `OkxWalletAdapter` | - |
27
- | [Leather](https://leather.io/) | `LeatherWalletAdapter` | `@leather.io/rpc` |
28
- | [Bitget](https://web3.bitget.com/) | `BitgetWalletAdapter` | - |
24
+ | [Unisat](https://unisat.io/) | `UnisatWalletAdapterFactory` | - |
25
+ | [Xverse](https://www.xverse.app/) | `XverseWalletAdapterFactory` | `sats-connect` |
26
+ | [OKX](https://www.okx.com/web3) | `OkxWalletAdapterFactory` | - |
27
+ | [Leather](https://leather.io/) | `LeatherWalletAdapterFactory` | `@leather.io/rpc` |
28
+ | [Bitget](https://web3.bitget.com/) | `BitgetWalletAdapterFactory` | - |
29
29
  | [Magic Eden](https://wallet.magiceden.io/) | `MagicEdenWalletAdapterFactory` | `sats-connect` |
30
30
 
31
31
  ## Installation
32
32
 
33
33
  ```bash
34
- pnpm add @c4/bitcoin-wallet-adapters @scure/base @scure/btc-signer
34
+ pnpm add bitcoin-wallet-connector @scure/base @scure/btc-signer
35
35
  ```
36
36
 
37
37
  ### Optional Dependencies
@@ -55,14 +55,14 @@ pnpm add react
55
55
 
56
56
  ```typescript
57
57
  import {
58
- BitcoinWalletAdapterConnector,
59
- UnisatWalletAdapter,
60
- XverseWalletAdapter,
61
- } from "@c4/bitcoin-wallet-adapters"
62
-
63
- const connector = new BitcoinWalletAdapterConnector([
64
- UnisatWalletAdapter,
65
- XverseWalletAdapter,
58
+ BitcoinWalletConnector,
59
+ UnisatWalletAdapterFactory,
60
+ XverseWalletAdapterFactory,
61
+ } from "bitcoin-wallet-connector"
62
+
63
+ const connector = new BitcoinWalletConnector([
64
+ UnisatWalletAdapterFactory(),
65
+ XverseWalletAdapterFactory(),
66
66
  ])
67
67
 
68
68
  // Get available wallets
@@ -89,13 +89,16 @@ await connector.disconnect()
89
89
  import {
90
90
  BitcoinConnectionProvider,
91
91
  useBitcoinConnectionContext,
92
- } from "@c4/bitcoin-wallet-adapters/react"
92
+ } from "bitcoin-wallet-connector/react"
93
93
  import {
94
- UnisatWalletAdapter,
95
- XverseWalletAdapter,
96
- } from "@c4/bitcoin-wallet-adapters/adapters"
97
-
98
- const adapterFactories = [UnisatWalletAdapter, XverseWalletAdapter]
94
+ UnisatWalletAdapterFactory,
95
+ XverseWalletAdapterFactory,
96
+ } from "bitcoin-wallet-connector/adapters"
97
+
98
+ const adapterFactories = [
99
+ UnisatWalletAdapterFactory(),
100
+ XverseWalletAdapterFactory(),
101
+ ]
99
102
 
100
103
  function App() {
101
104
  return (
@@ -1,5 +1,5 @@
1
1
  import { FC, ReactNode } from 'react';
2
- import { WalletAdapter, WalletAdapterAddress, WalletAdapterStatic } from './WalletAdapters.types';
2
+ import { WalletAdapter, WalletAdapterAddress, WalletAdapterFactory } from './WalletAdapters.types';
3
3
  export interface WalletSession {
4
4
  adapterId: string;
5
5
  adapter: WalletAdapter;
@@ -10,12 +10,12 @@ export interface BitcoinConnectionContextValue {
10
10
  isConnectionInitializing: boolean;
11
11
  connect: (adapterId: string, adapter: WalletAdapter) => Promise<void>;
12
12
  disconnect: () => Promise<void>;
13
- adapterFactories: WalletAdapterStatic<WalletAdapter>[];
13
+ adapterFactories: WalletAdapterFactory<WalletAdapter>[];
14
14
  availableAdapters: (readonly [adapterId: string, adapter: WalletAdapter])[];
15
15
  }
16
16
  export declare const BitcoinConnectionProvider: FC<{
17
17
  children: ReactNode;
18
- adapterFactories: WalletAdapterStatic<WalletAdapter>[];
18
+ adapterFactories: WalletAdapterFactory<WalletAdapter>[];
19
19
  onWalletConnected?: (session: WalletSession) => void;
20
20
  onWalletAddressesChanged?: (addresses: WalletAdapterAddress[]) => void;
21
21
  onWalletDisconnected?: () => void;
@@ -0,0 +1,2 @@
1
+ "use strict";const u=require("./constants-Dr0_Mix2.js"),d=require("./WalletAdapters.types-CExaiK0o.js");class i{constructor(t){this.value=t}listeners=new Set;getValue(){return this.value}setValue(t){this.value=t,this.emit()}update(t){this.setValue(t(this.value))}subscribe(t){return this.listeners.add(t),t(this.value),{unsubscribe:()=>{this.listeners.delete(t)}}}emit(){for(const t of this.listeners)t(this.value)}}const h=`${u.LOCAL_STORAGE_KEY_PREFIX}:BitcoinWalletConnector`,r=`${h}:previousConnectWallet`;class p{constructor(t){this.factories=t,this.adapterOrder=new Map(t.map((e,a)=>[e.adapterId,a])),this.initializeAdapterAvailability()}availableAdaptersState=new i([]);connectedInfoState=new i(null);autoConnectRunning=!1;availabilitySubscriptions=[];adapterOrder=new Map;dispose(){this.availabilitySubscriptions.forEach(t=>t.unsubscribe()),this.availabilitySubscriptions=[],this.availableAdaptersState=new i([]),this.connectedInfoState=new i(null)}subscribeAvailableAdapters(t){return this.availableAdaptersState.subscribe(t)}getAvailableAdapters(){return this.availableAdaptersState.getValue()}subscribeConnectedInfo(t){return this.connectedInfoState.subscribe(t)}getConnectedInfo(){return this.connectedInfoState.getValue()}initializeAdapterAvailability(){this.availabilitySubscriptions=this.factories.map(t=>t.getAdapter().subscribe(e=>{this.addOrUpdateAvailableAdapter(t.adapterId,e)}))}addOrUpdateAvailableAdapter(t,e){this.availableAdaptersState.update(a=>{const n=[...a],o=a.findIndex(([s])=>s===t);return o===-1?n.push([t,e]):n[o]=[t,e],n.sort((s,c)=>(this.adapterOrder.get(s[0])??Number.MAX_SAFE_INTEGER)-(this.adapterOrder.get(c[0])??Number.MAX_SAFE_INTEGER)),n}),this.autoConnect()}async connect(t,e){const a=e;await a.connect(),localStorage.setItem(r,t),this.connectedInfoState.setValue({adapterId:t,adapter:a})}async disconnect(){const t=this.connectedInfoState.getValue();t!=null&&(await t.adapter.disconnect(),localStorage.removeItem(r),this.connectedInfoState.setValue(null))}async autoConnect(){if(this.isConnected||this.autoConnectRunning)return;const t=this.previousConnectedWallet;if(t==null)return;const e=this.availableAdaptersState.getValue().find(a=>a[0]===t)?.[1];if(e!=null){this.autoConnectRunning=!0;try{await e.getAddresses()}catch(a){if(a instanceof d.WalletAdapterNotConnectedError){this.autoConnectRunning=!1;return}throw this.autoConnectRunning=!1,a}try{await this.connect(t,e)}finally{this.autoConnectRunning=!1}}}get previousConnectedWallet(){const t=localStorage.getItem(r)||void 0;if(this.factories.some(e=>e.adapterId===t))return t}get isConnected(){return this.connectedInfoState.getValue()!=null}}exports.BitcoinWalletConnector=p;
2
+ //# sourceMappingURL=BitcoinWalletConnector-BC92ulXx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinWalletConnector-BC92ulXx.js","sources":["../src/utils/StateChannel.ts","../src/BitcoinWalletConnector.ts"],"sourcesContent":["export type StateChannelListener<T> = (value: T) => void\n\nexport interface StateChannelSubscription {\n unsubscribe: () => void\n}\n\nexport class StateChannel<T> {\n private listeners = new Set<StateChannelListener<T>>()\n constructor(private value: T) {}\n\n getValue(): T {\n return this.value\n }\n\n setValue(value: T): void {\n this.value = value\n this.emit()\n }\n\n update(updater: (current: T) => T): void {\n this.setValue(updater(this.value))\n }\n\n subscribe(listener: StateChannelListener<T>): StateChannelSubscription {\n this.listeners.add(listener)\n listener(this.value)\n return {\n unsubscribe: () => {\n this.listeners.delete(listener)\n },\n }\n }\n\n private emit(): void {\n for (const listener of this.listeners) {\n listener(this.value)\n }\n }\n}\n","import { LOCAL_STORAGE_KEY_PREFIX } from \"./constants\"\nimport { AvailabilitySubscription } from \"./utils/createAdapterAvailability\"\nimport { StateChannel, StateChannelListener } from \"./utils/StateChannel\"\nimport {\n WalletAdapter,\n WalletAdapterFactory,\n WalletAdapterNotConnectedError,\n} from \"./WalletAdapters.types\"\n\nconst localStorageKeyPrefix = `${LOCAL_STORAGE_KEY_PREFIX}:BitcoinWalletConnector`\nconst previousConnectWalletAdapterId_localStorageKey = `${localStorageKeyPrefix}:previousConnectWallet`\n\nexport interface ConnectInfo {\n adapterId: string\n adapter: WalletAdapter\n}\n\nexport type AdapterEntry = readonly [string, WalletAdapter]\n\nexport class BitcoinWalletConnector {\n private availableAdaptersState = new StateChannel<AdapterEntry[]>([])\n private connectedInfoState = new StateChannel<null | ConnectInfo>(null)\n private autoConnectRunning = false\n private availabilitySubscriptions: AvailabilitySubscription[] = []\n private adapterOrder = new Map<string, number>()\n\n constructor(private factories: WalletAdapterFactory<WalletAdapter>[]) {\n this.adapterOrder = new Map(\n factories.map((factory, index) => [factory.adapterId, index]),\n )\n this.initializeAdapterAvailability()\n }\n\n dispose(): void {\n this.availabilitySubscriptions.forEach(s => s.unsubscribe())\n this.availabilitySubscriptions = []\n this.availableAdaptersState = new StateChannel<AdapterEntry[]>([])\n this.connectedInfoState = new StateChannel<null | ConnectInfo>(null)\n }\n\n subscribeAvailableAdapters(\n listener: StateChannelListener<AdapterEntry[]>,\n ): AvailabilitySubscription {\n return this.availableAdaptersState.subscribe(listener)\n }\n getAvailableAdapters(): AdapterEntry[] {\n return this.availableAdaptersState.getValue()\n }\n\n subscribeConnectedInfo(\n listener: StateChannelListener<null | ConnectInfo>,\n ): AvailabilitySubscription {\n return this.connectedInfoState.subscribe(listener)\n }\n getConnectedInfo(): null | ConnectInfo {\n return this.connectedInfoState.getValue()\n }\n\n private initializeAdapterAvailability(): void {\n this.availabilitySubscriptions = this.factories.map(factory => {\n return factory.getAdapter().subscribe(adapter => {\n this.addOrUpdateAvailableAdapter(factory.adapterId, adapter)\n })\n })\n }\n\n private addOrUpdateAvailableAdapter(\n adapterId: string,\n adapter: WalletAdapter,\n ): void {\n this.availableAdaptersState.update(current => {\n const next = [...current]\n const existingIndex = current.findIndex(([id]) => id === adapterId)\n if (existingIndex === -1) {\n next.push([adapterId, adapter] as const)\n } else {\n next[existingIndex] = [adapterId, adapter] as const\n }\n\n next.sort(\n (a, b) =>\n (this.adapterOrder.get(a[0]) ?? Number.MAX_SAFE_INTEGER) -\n (this.adapterOrder.get(b[0]) ?? Number.MAX_SAFE_INTEGER),\n )\n return next\n })\n\n void this.autoConnect()\n }\n\n async connect(adapterId: string, adapter: WalletAdapter): Promise<void> {\n const finalAdapter = adapter\n\n await finalAdapter.connect()\n localStorage.setItem(\n previousConnectWalletAdapterId_localStorageKey,\n adapterId,\n )\n\n this.connectedInfoState.setValue({ adapterId, adapter: finalAdapter })\n }\n\n async disconnect(): Promise<void> {\n const info = this.connectedInfoState.getValue()\n if (info == null) return\n\n await info.adapter.disconnect()\n localStorage.removeItem(previousConnectWalletAdapterId_localStorageKey)\n\n this.connectedInfoState.setValue(null)\n }\n\n private async autoConnect(): Promise<void> {\n if (this.isConnected || this.autoConnectRunning) return\n\n const previousAdapterId = this.previousConnectedWallet\n if (previousAdapterId == null) return\n\n const adapter = this.availableAdaptersState\n .getValue()\n .find(a => a[0] === previousAdapterId)?.[1]\n if (adapter == null) return\n\n this.autoConnectRunning = true\n try {\n await adapter.getAddresses()\n } catch (err: unknown) {\n if (err instanceof WalletAdapterNotConnectedError) {\n this.autoConnectRunning = false\n return\n }\n\n this.autoConnectRunning = false\n throw err\n }\n\n try {\n await this.connect(previousAdapterId, adapter)\n } finally {\n this.autoConnectRunning = false\n }\n }\n\n private get previousConnectedWallet(): string | undefined {\n const adapterId =\n localStorage.getItem(previousConnectWalletAdapterId_localStorageKey) ||\n undefined\n\n if (this.factories.some(factory => factory.adapterId === adapterId)) {\n return adapterId\n }\n return undefined\n }\n\n private get isConnected(): boolean {\n return this.connectedInfoState.getValue() != null\n }\n}\n"],"names":["StateChannel","value","updater","listener","localStorageKeyPrefix","LOCAL_STORAGE_KEY_PREFIX","previousConnectWalletAdapterId_localStorageKey","BitcoinWalletConnector","factories","factory","index","s","adapter","adapterId","current","next","existingIndex","id","a","b","finalAdapter","info","previousAdapterId","err","WalletAdapterNotConnectedError"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import { B as u, d } from "./WalletAdapters.types-CnvOqHFH.mjs";
1
+ import { L as u } from "./constants-B7qVf97f.mjs";
2
+ import { d } from "./WalletAdapters.types-DBvhI1hu.mjs";
2
3
  class i {
3
4
  constructor(t) {
4
5
  this.value = t;
@@ -25,10 +26,10 @@ class i {
25
26
  t(this.value);
26
27
  }
27
28
  }
28
- const r = "app:BitcoinWalletAdapterConnector:previousConnectWallet";
29
- class h {
29
+ const h = `${u}:BitcoinWalletConnector`, r = `${h}:previousConnectWallet`;
30
+ class f {
30
31
  constructor(t) {
31
- this.Adapters = t, this.adapterOrder = new Map(
32
+ this.factories = t, this.adapterOrder = new Map(
32
33
  t.map((e, a) => [e.adapterId, a])
33
34
  ), this.initializeAdapterAvailability();
34
35
  }
@@ -53,7 +54,7 @@ class h {
53
54
  return this.connectedInfoState.getValue();
54
55
  }
55
56
  initializeAdapterAvailability() {
56
- this.availabilitySubscriptions = this.Adapters.map((t) => t.getAdapter().subscribe((e) => {
57
+ this.availabilitySubscriptions = this.factories.map((t) => t.getAdapter().subscribe((e) => {
57
58
  this.addOrUpdateAvailableAdapter(t.adapterId, e);
58
59
  }));
59
60
  }
@@ -67,23 +68,14 @@ class h {
67
68
  }
68
69
  async connect(t, e) {
69
70
  const a = e;
70
- await a.connect().catch((n) => {
71
- if (n instanceof u) {
72
- alert(n.message);
73
- return;
74
- }
75
- throw n;
76
- }), localStorage.setItem(
71
+ await a.connect(), localStorage.setItem(
77
72
  r,
78
73
  t
79
74
  ), this.connectedInfoState.setValue({ adapterId: t, adapter: a });
80
75
  }
81
76
  async disconnect() {
82
77
  const t = this.connectedInfoState.getValue();
83
- t != null && (await this.disconnectAdapter(t.adapter), this.connectedInfoState.setValue(null));
84
- }
85
- async disconnectAdapter(t) {
86
- await t.disconnect(), localStorage.removeItem(r);
78
+ t != null && (await t.adapter.disconnect(), localStorage.removeItem(r), this.connectedInfoState.setValue(null));
87
79
  }
88
80
  async autoConnect() {
89
81
  if (this.isConnected || this.autoConnectRunning) return;
@@ -110,7 +102,7 @@ class h {
110
102
  }
111
103
  get previousConnectedWallet() {
112
104
  const t = localStorage.getItem(r) || void 0;
113
- if (this.Adapters.some((e) => e.adapterId === t))
105
+ if (this.factories.some((e) => e.adapterId === t))
114
106
  return t;
115
107
  }
116
108
  get isConnected() {
@@ -118,6 +110,6 @@ class h {
118
110
  }
119
111
  }
120
112
  export {
121
- h as B
113
+ f as B
122
114
  };
123
- //# sourceMappingURL=BitcoinWalletAdapterConnector-Bq835yj0.mjs.map
115
+ //# sourceMappingURL=BitcoinWalletConnector-CS0BshOl.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinWalletConnector-CS0BshOl.mjs","sources":["../src/utils/StateChannel.ts","../src/BitcoinWalletConnector.ts"],"sourcesContent":["export type StateChannelListener<T> = (value: T) => void\n\nexport interface StateChannelSubscription {\n unsubscribe: () => void\n}\n\nexport class StateChannel<T> {\n private listeners = new Set<StateChannelListener<T>>()\n constructor(private value: T) {}\n\n getValue(): T {\n return this.value\n }\n\n setValue(value: T): void {\n this.value = value\n this.emit()\n }\n\n update(updater: (current: T) => T): void {\n this.setValue(updater(this.value))\n }\n\n subscribe(listener: StateChannelListener<T>): StateChannelSubscription {\n this.listeners.add(listener)\n listener(this.value)\n return {\n unsubscribe: () => {\n this.listeners.delete(listener)\n },\n }\n }\n\n private emit(): void {\n for (const listener of this.listeners) {\n listener(this.value)\n }\n }\n}\n","import { LOCAL_STORAGE_KEY_PREFIX } from \"./constants\"\nimport { AvailabilitySubscription } from \"./utils/createAdapterAvailability\"\nimport { StateChannel, StateChannelListener } from \"./utils/StateChannel\"\nimport {\n WalletAdapter,\n WalletAdapterFactory,\n WalletAdapterNotConnectedError,\n} from \"./WalletAdapters.types\"\n\nconst localStorageKeyPrefix = `${LOCAL_STORAGE_KEY_PREFIX}:BitcoinWalletConnector`\nconst previousConnectWalletAdapterId_localStorageKey = `${localStorageKeyPrefix}:previousConnectWallet`\n\nexport interface ConnectInfo {\n adapterId: string\n adapter: WalletAdapter\n}\n\nexport type AdapterEntry = readonly [string, WalletAdapter]\n\nexport class BitcoinWalletConnector {\n private availableAdaptersState = new StateChannel<AdapterEntry[]>([])\n private connectedInfoState = new StateChannel<null | ConnectInfo>(null)\n private autoConnectRunning = false\n private availabilitySubscriptions: AvailabilitySubscription[] = []\n private adapterOrder = new Map<string, number>()\n\n constructor(private factories: WalletAdapterFactory<WalletAdapter>[]) {\n this.adapterOrder = new Map(\n factories.map((factory, index) => [factory.adapterId, index]),\n )\n this.initializeAdapterAvailability()\n }\n\n dispose(): void {\n this.availabilitySubscriptions.forEach(s => s.unsubscribe())\n this.availabilitySubscriptions = []\n this.availableAdaptersState = new StateChannel<AdapterEntry[]>([])\n this.connectedInfoState = new StateChannel<null | ConnectInfo>(null)\n }\n\n subscribeAvailableAdapters(\n listener: StateChannelListener<AdapterEntry[]>,\n ): AvailabilitySubscription {\n return this.availableAdaptersState.subscribe(listener)\n }\n getAvailableAdapters(): AdapterEntry[] {\n return this.availableAdaptersState.getValue()\n }\n\n subscribeConnectedInfo(\n listener: StateChannelListener<null | ConnectInfo>,\n ): AvailabilitySubscription {\n return this.connectedInfoState.subscribe(listener)\n }\n getConnectedInfo(): null | ConnectInfo {\n return this.connectedInfoState.getValue()\n }\n\n private initializeAdapterAvailability(): void {\n this.availabilitySubscriptions = this.factories.map(factory => {\n return factory.getAdapter().subscribe(adapter => {\n this.addOrUpdateAvailableAdapter(factory.adapterId, adapter)\n })\n })\n }\n\n private addOrUpdateAvailableAdapter(\n adapterId: string,\n adapter: WalletAdapter,\n ): void {\n this.availableAdaptersState.update(current => {\n const next = [...current]\n const existingIndex = current.findIndex(([id]) => id === adapterId)\n if (existingIndex === -1) {\n next.push([adapterId, adapter] as const)\n } else {\n next[existingIndex] = [adapterId, adapter] as const\n }\n\n next.sort(\n (a, b) =>\n (this.adapterOrder.get(a[0]) ?? Number.MAX_SAFE_INTEGER) -\n (this.adapterOrder.get(b[0]) ?? Number.MAX_SAFE_INTEGER),\n )\n return next\n })\n\n void this.autoConnect()\n }\n\n async connect(adapterId: string, adapter: WalletAdapter): Promise<void> {\n const finalAdapter = adapter\n\n await finalAdapter.connect()\n localStorage.setItem(\n previousConnectWalletAdapterId_localStorageKey,\n adapterId,\n )\n\n this.connectedInfoState.setValue({ adapterId, adapter: finalAdapter })\n }\n\n async disconnect(): Promise<void> {\n const info = this.connectedInfoState.getValue()\n if (info == null) return\n\n await info.adapter.disconnect()\n localStorage.removeItem(previousConnectWalletAdapterId_localStorageKey)\n\n this.connectedInfoState.setValue(null)\n }\n\n private async autoConnect(): Promise<void> {\n if (this.isConnected || this.autoConnectRunning) return\n\n const previousAdapterId = this.previousConnectedWallet\n if (previousAdapterId == null) return\n\n const adapter = this.availableAdaptersState\n .getValue()\n .find(a => a[0] === previousAdapterId)?.[1]\n if (adapter == null) return\n\n this.autoConnectRunning = true\n try {\n await adapter.getAddresses()\n } catch (err: unknown) {\n if (err instanceof WalletAdapterNotConnectedError) {\n this.autoConnectRunning = false\n return\n }\n\n this.autoConnectRunning = false\n throw err\n }\n\n try {\n await this.connect(previousAdapterId, adapter)\n } finally {\n this.autoConnectRunning = false\n }\n }\n\n private get previousConnectedWallet(): string | undefined {\n const adapterId =\n localStorage.getItem(previousConnectWalletAdapterId_localStorageKey) ||\n undefined\n\n if (this.factories.some(factory => factory.adapterId === adapterId)) {\n return adapterId\n }\n return undefined\n }\n\n private get isConnected(): boolean {\n return this.connectedInfoState.getValue() != null\n }\n}\n"],"names":["StateChannel","value","updater","listener","localStorageKeyPrefix","LOCAL_STORAGE_KEY_PREFIX","previousConnectWalletAdapterId_localStorageKey","BitcoinWalletConnector","factories","factory","index","s","adapter","adapterId","current","next","existingIndex","id","a","b","finalAdapter","info","previousAdapterId","err","WalletAdapterNotConnectedError"],"mappings":"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"}
@@ -1,19 +1,19 @@
1
1
  import { AvailabilitySubscription } from './utils/createAdapterAvailability';
2
2
  import { StateChannelListener } from './utils/StateChannel';
3
- import { WalletAdapter, WalletAdapterStatic } from './WalletAdapters.types';
3
+ import { WalletAdapter, WalletAdapterFactory } from './WalletAdapters.types';
4
4
  export interface ConnectInfo {
5
5
  adapterId: string;
6
6
  adapter: WalletAdapter;
7
7
  }
8
8
  export type AdapterEntry = readonly [string, WalletAdapter];
9
- export declare class BitcoinWalletAdapterConnector {
10
- private Adapters;
9
+ export declare class BitcoinWalletConnector {
10
+ private factories;
11
11
  private availableAdaptersState;
12
12
  private connectedInfoState;
13
13
  private autoConnectRunning;
14
14
  private availabilitySubscriptions;
15
15
  private adapterOrder;
16
- constructor(Adapters: WalletAdapterStatic<WalletAdapter>[]);
16
+ constructor(factories: WalletAdapterFactory<WalletAdapter>[]);
17
17
  dispose(): void;
18
18
  subscribeAvailableAdapters(listener: StateChannelListener<AdapterEntry[]>): AvailabilitySubscription;
19
19
  getAvailableAdapters(): AdapterEntry[];
@@ -23,7 +23,6 @@ export declare class BitcoinWalletAdapterConnector {
23
23
  private addOrUpdateAvailableAdapter;
24
24
  connect(adapterId: string, adapter: WalletAdapter): Promise<void>;
25
25
  disconnect(): Promise<void>;
26
- private disconnectAdapter;
27
26
  private autoConnect;
28
27
  private get previousConnectedWallet();
29
28
  private get isConnected();
@@ -0,0 +1,11 @@
1
+ import { U as a } from "./UnisatCompatibleWalletAdapterImpl-8lRRF7Zj.mjs";
2
+ import { m as e } from "./index-DM4G-LJz.mjs";
3
+ class l extends a {
4
+ constructor(t) {
5
+ super(t, e.name);
6
+ }
7
+ }
8
+ export {
9
+ l as BitgetWalletAdapterImpl
10
+ };
11
+ //# sourceMappingURL=BitgetWalletAdapter.impl-D8kqiYDi.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitgetWalletAdapter.impl-D8kqiYDi.mjs","sources":["../src/adapters/BitgetWalletAdapter.impl.ts"],"sourcesContent":["import {\n UnisatCompatibleProviderAPI,\n UnisatCompatibleWalletAdapterImpl,\n} from \"../utils/UnisatCompatibleWalletAdapterImpl\"\nimport { WalletAdapter } from \"../WalletAdapters.types\"\nimport { metadata } from \"./BitgetWalletAdapter\"\n\n/**\n * Derivation path (BIP-44): m/44'/0'/0'/0/ address_index\n */\nexport class BitgetWalletAdapterImpl\n extends UnisatCompatibleWalletAdapterImpl\n implements WalletAdapter\n{\n constructor(provider: UnisatCompatibleProviderAPI) {\n /**\n * Bitget Provider API:\n *\n * https://web3.bitget.com/zh-CN/docs/provider-api/btc.html\n */\n super(provider, metadata.name)\n }\n}\n"],"names":["BitgetWalletAdapterImpl","UnisatCompatibleWalletAdapterImpl","provider","metadata"],"mappings":";;AAUO,MAAMA,UACHC,EAEV;AAAA,EACE,YAAYC,GAAuC;AAMjD,UAAMA,GAAUC,EAAS,IAAI;AAAA,EAC/B;AACF;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./UnisatCompatibleWalletAdapterImpl-C-JWrc9s.js"),a=require("./index-jRY8YhyK.js");class l extends e.UnisatCompatibleWalletAdapterImpl{constructor(t){super(t,a.metadata.name)}}exports.BitgetWalletAdapterImpl=l;
2
+ //# sourceMappingURL=BitgetWalletAdapter.impl-DiyzNQ9d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitgetWalletAdapter.impl-DiyzNQ9d.js","sources":["../src/adapters/BitgetWalletAdapter.impl.ts"],"sourcesContent":["import {\n UnisatCompatibleProviderAPI,\n UnisatCompatibleWalletAdapterImpl,\n} from \"../utils/UnisatCompatibleWalletAdapterImpl\"\nimport { WalletAdapter } from \"../WalletAdapters.types\"\nimport { metadata } from \"./BitgetWalletAdapter\"\n\n/**\n * Derivation path (BIP-44): m/44'/0'/0'/0/ address_index\n */\nexport class BitgetWalletAdapterImpl\n extends UnisatCompatibleWalletAdapterImpl\n implements WalletAdapter\n{\n constructor(provider: UnisatCompatibleProviderAPI) {\n /**\n * Bitget Provider API:\n *\n * https://web3.bitget.com/zh-CN/docs/provider-api/btc.html\n */\n super(provider, metadata.name)\n }\n}\n"],"names":["BitgetWalletAdapterImpl","UnisatCompatibleWalletAdapterImpl","provider","metadata"],"mappings":"oLAUO,MAAMA,UACHC,EAAAA,iCAEV,CACE,YAAYC,EAAuC,CAMjD,MAAMA,EAAUC,EAAAA,SAAS,IAAI,CAC/B,CACF"}
@@ -1,11 +1,11 @@
1
- import { h as u, g as f, b as h, c as T } from "./index-D7YwhNAG.mjs";
2
- import { d as y, b as i, a as d, W as g, B as A, S as w, U as m } from "./WalletAdapters.types-CnvOqHFH.mjs";
3
- const b = "LeatherProvider.BitcoinProvider", c = `app:${b}:`;
4
- class I {
1
+ import { b as T, c as g, h as u, g as b, d as h, e as P, f, i as m } from "./index-DM4G-LJz.mjs";
2
+ import { L as R } from "./constants-B7qVf97f.mjs";
3
+ import { d as y, b as i, a as o, W as w, S as A } from "./WalletAdapters.types-DBvhI1hu.mjs";
4
+ const S = `${R}:${T}`, c = `${S}:connectedAddress`;
5
+ class x {
5
6
  constructor(e) {
6
7
  this.request = e;
7
8
  }
8
- walletDisplayName = "Leather";
9
9
  retrieveConnectedAddress() {
10
10
  let e;
11
11
  const s = localStorage.getItem(c) || void 0;
@@ -20,13 +20,16 @@ class I {
20
20
  }
21
21
  async connect() {
22
22
  if (this.retrieveConnectedAddress() == null) {
23
- const e = await o(
23
+ const e = await d(
24
24
  /**
25
25
  * https://leather.gitbook.io/developers/bitcoin/connect-users/get-addresses
26
26
  */
27
27
  this.request("getAddresses")
28
28
  );
29
- localStorage.setItem(c, JSON.stringify(e));
29
+ localStorage.setItem(
30
+ c,
31
+ JSON.stringify(e)
32
+ );
30
33
  }
31
34
  }
32
35
  async disconnect() {
@@ -35,28 +38,28 @@ class I {
35
38
  async getAddresses() {
36
39
  const e = this.retrieveConnectedAddress();
37
40
  if (e == null)
38
- throw new y(this.walletDisplayName);
41
+ throw new y(g.name);
39
42
  const s = e.addresses.filter(
40
43
  (t) => t.symbol === "BTC" && t.type
41
44
  ), r = s.filter((t) => t.type === "p2tr")[0].address.startsWith("bc");
42
45
  return s.map((t) => ({
43
- network: r ? g.MAINNET : g.TESTNET,
46
+ network: r ? w.MAINNET : w.TESTNET,
44
47
  purposes: t.type === "p2tr" ? [
45
- d.Ordinals,
46
- d.BRC20,
47
- d.Runes
48
- ] : [d.Bitcoin],
48
+ o.Ordinals,
49
+ o.BRC20,
50
+ o.Runes
51
+ ] : [o.Bitcoin],
49
52
  addressType: t.type === "p2tr" ? i.P2TR : i.P2WPKH,
50
53
  address: t.address,
51
54
  scriptPubKey: u.encode(
52
- T(
55
+ P(
53
56
  h(r ? "mainnet" : "testnet"),
54
57
  t.address
55
58
  )
56
59
  ),
57
60
  publicKey: t.publicKey,
58
61
  tapInternalKey: t.type === "p2tr" ? u.encode(
59
- f(
62
+ b(
60
63
  h(r ? "mainnet" : "testnet"),
61
64
  u.decode(t.publicKey)
62
65
  )
@@ -64,28 +67,28 @@ class I {
64
67
  }));
65
68
  }
66
69
  async signMessage(e, s) {
67
- const t = (await this.getAddresses()).find((p) => p.address === e)?.addressType, n = t === i.P2WPKH ? "p2wpkh" : t === i.P2TR ? "p2tr" : void 0;
68
- if (n == null)
69
- throw new A("Address is not supported");
70
- const a = await o(
70
+ const t = (await this.getAddresses()).find((p) => p.address === e)?.addressType, a = t === i.P2WPKH ? "p2wpkh" : t === i.P2TR ? "p2tr" : void 0;
71
+ if (a == null)
72
+ throw new f("Address is not supported");
73
+ const n = await d(
71
74
  /**
72
75
  * https://leather.gitbook.io/developers/bitcoin-methods/signmessage
73
76
  */
74
77
  this.request("signMessage", {
75
78
  message: s,
76
- paymentType: n
79
+ paymentType: a
77
80
  })
78
81
  );
79
82
  return {
80
- algorithm: a.algorithm === "ecdsa" ? w.ECDSA : w.BIP322,
81
- result: a.signature,
83
+ algorithm: n.algorithm === "ecdsa" ? A.ECDSA : A.BIP322,
84
+ result: n.signature,
82
85
  address: e,
83
- publicKey: a.publicKey
86
+ publicKey: n.publicKey
84
87
  };
85
88
  }
86
89
  sendBitcoinFeeRateCapability = "required";
87
90
  async sendBitcoin(e, s, r, t) {
88
- return { txid: (await o(
91
+ return { txid: (await d(
89
92
  /**
90
93
  * https://leather.gitbook.io/developers/bitcoin-methods/sendbitcoin
91
94
  */
@@ -97,9 +100,17 @@ class I {
97
100
  })
98
101
  )).txid };
99
102
  }
103
+ /**
104
+ * @internal
105
+ * @experimental
106
+ */
100
107
  sendInscriptionFeeRateCapability = "available";
108
+ /**
109
+ * @internal
110
+ * @experimental
111
+ */
101
112
  async sendInscription(e, s, r, t) {
102
- const { txid: n } = await o(
113
+ const { txid: a } = await d(
103
114
  /**
104
115
  * https://leather.gitbook.io/developers/ordinals/send-ordinals
105
116
  */
@@ -115,22 +126,22 @@ class I {
115
126
  feeRate: t?.feeRate
116
127
  })
117
128
  );
118
- return { txid: n };
129
+ return { txid: a };
119
130
  }
120
131
  async signAndFinalizePsbt(e, s) {
121
132
  const t = (await this.getAddresses()).find(
122
- (a) => a.address === s[0]?.[0]
133
+ (n) => n.address === s[0]?.[0]
123
134
  );
124
135
  if (t == null)
125
- throw new y(this.walletDisplayName);
126
- return { signedPsbtHex: (await o(
136
+ throw new y(g.name);
137
+ return { signedPsbtHex: (await d(
127
138
  /**
128
139
  * https://leather.gitbook.io/developers/bitcoin-methods/signandfinalizepsbt
129
140
  */
130
141
  this.request("signAndFinalizePsbt", {
131
142
  hex: e,
132
- inputsToSign: s.map(([a, p]) => ({
133
- address: a,
143
+ inputsToSign: s.map(([n, p]) => ({
144
+ address: n,
134
145
  signingIndexes: [p],
135
146
  signatureHash: void 0,
136
147
  disableTweakSigner: void 0
@@ -163,22 +174,22 @@ class I {
163
174
  };
164
175
  }
165
176
  }
166
- class P extends A {
177
+ class K extends f {
167
178
  constructor(e) {
168
179
  super("Leather wallet error: " + e.error.message, {
169
180
  cause: e
170
181
  });
171
182
  }
172
183
  }
173
- const o = async (l) => {
184
+ const d = async (l) => {
174
185
  try {
175
186
  return await l;
176
187
  } catch (e) {
177
- throw e instanceof m ? e : e.error?.code === 4001 ? new m() : new P(e);
188
+ throw e instanceof m ? e : e.error?.code === 4001 ? new m() : new K(e);
178
189
  }
179
190
  };
180
191
  export {
181
- P as LeatherWalletAdapterError,
182
- I as LeatherWalletAdapterImpl
192
+ K as LeatherWalletAdapterError,
193
+ x as LeatherWalletAdapterImpl
183
194
  };
184
- //# sourceMappingURL=LeatherWalletAdapter.impl-RUYx555r.mjs.map
195
+ //# sourceMappingURL=LeatherWalletAdapter.impl-B1PoZS7z.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeatherWalletAdapter.impl-B1PoZS7z.mjs","sources":["../src/adapters/LeatherWalletAdapter.impl.ts"],"sourcesContent":["import type { RequestFn, RpcErrorBody, RpcErrorResponse } from \"@leather.io/rpc\"\nimport { hex } from \"@scure/base\"\nimport { LOCAL_STORAGE_KEY_PREFIX } from \"../constants\"\nimport {\n addressToScriptPubKey,\n getTapInternalKeyOf_P2TR_publicKey,\n} from \"../utils/bitcoinAddressHelpers\"\nimport { getBitcoinNetwork } from \"../utils/bitcoinNetworkHelpers\"\nimport { BitcoinWalletAdapterError, UserRejectError } from \"../utils/error\"\nimport {\n SignMessageAlgorithm,\n SignMessageResult,\n WalletAdapter,\n WalletAdapter_onAddressesChanged_callback,\n WalletAdapterAddress,\n WalletAdapterAddressPurpose,\n WalletAdapterAddressType,\n WalletAdapterBitcoinNetwork,\n WalletAdapterNotConnectedError,\n} from \"../WalletAdapters.types\"\nimport { adapterId, metadata } from \"./LeatherWalletAdapter\"\n\ntype GetAddressesResponseData = any\n\n/**\n * https://github.com/leather-io/mono/blob/a664e64040fed1c25abef1f8864a1c7fae5444c1/packages/rpc/src/rpc/schemas.ts#L64-L78\n */\nenum RpcErrorCode {\n // Spec defined server errors\n PARSE_ERROR = -32700,\n INVALID_REQUEST = -32600,\n METHOD_NOT_FOUND = -32601,\n INVALID_PARAMS = -32602,\n INTERNAL_ERROR = -32603,\n SERVER_ERROR = -32000,\n // Client defined errors\n USER_REJECTION = 4001,\n METHOD_NOT_SUPPORTED = 4002,\n // gRPC spec borrowed\n PERMISSION_DENIED = 7,\n UNAUTHENTICATED = 16,\n}\n\ntype Addresses = (WalletAdapterAddress & { publicKey: string })[]\n\nconst localStorageKeyPrefix = `${LOCAL_STORAGE_KEY_PREFIX}:${adapterId}`\nconst connectedAddress_localStorageKey = `${localStorageKeyPrefix}:connectedAddress`\n\n/**\n * Derivation path (BIP-84): m/84'/0'/ account_index '/0/0\n */\nexport class LeatherWalletAdapterImpl implements WalletAdapter {\n constructor(private request: RequestFn) {}\n\n private retrieveConnectedAddress(): GetAddressesResponseData | undefined {\n let resp: GetAddressesResponseData | undefined\n const stored =\n localStorage.getItem(connectedAddress_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(connectedAddress_localStorageKey)\n }\n }\n return resp\n }\n\n async connect(): Promise<void> {\n if (this.retrieveConnectedAddress() == null) {\n const resp = await handleRpcError(\n /**\n * https://leather.gitbook.io/developers/bitcoin/connect-users/get-addresses\n */\n this.request(\"getAddresses\"),\n )\n localStorage.setItem(\n connectedAddress_localStorageKey,\n JSON.stringify(resp),\n )\n }\n }\n\n async disconnect(): Promise<void> {\n localStorage.removeItem(connectedAddress_localStorageKey)\n return Promise.resolve()\n }\n\n async getAddresses(): Promise<Addresses> {\n const resp = this.retrieveConnectedAddress()\n\n if (resp == null) {\n throw new WalletAdapterNotConnectedError(metadata.name)\n }\n\n const addresses = resp.addresses.filter(\n (a: any) => (a as any).symbol === \"BTC\" && a.type,\n )\n\n const isMainnet = addresses\n .filter((a: any) => a.type === \"p2tr\")[0]\n .address.startsWith(\"bc\")\n\n return addresses.map((a: any) => ({\n network: isMainnet\n ? WalletAdapterBitcoinNetwork.MAINNET\n : WalletAdapterBitcoinNetwork.TESTNET,\n purposes:\n a.type === \"p2tr\"\n ? [\n WalletAdapterAddressPurpose.Ordinals,\n WalletAdapterAddressPurpose.BRC20,\n WalletAdapterAddressPurpose.Runes,\n ]\n : [WalletAdapterAddressPurpose.Bitcoin],\n addressType:\n a.type === \"p2tr\"\n ? WalletAdapterAddressType.P2TR\n : WalletAdapterAddressType.P2WPKH,\n address: a.address,\n scriptPubKey: hex.encode(\n addressToScriptPubKey(\n getBitcoinNetwork(isMainnet ? \"mainnet\" : \"testnet\"),\n a.address,\n ),\n ),\n publicKey: a.publicKey!,\n tapInternalKey:\n a.type === \"p2tr\"\n ? hex.encode(\n getTapInternalKeyOf_P2TR_publicKey(\n getBitcoinNetwork(isMainnet ? \"mainnet\" : \"testnet\"),\n hex.decode(a.publicKey!),\n ),\n )\n : undefined,\n }))\n }\n\n async signMessage(\n address: string,\n message: string,\n ): Promise<SignMessageResult> {\n const accounts = await this.getAddresses()\n\n const addressType = accounts.find(a => a.address === address)?.addressType\n\n // prettier-ignore\n const paymentType =\n addressType === WalletAdapterAddressType.P2WPKH ? 'p2wpkh' as const :\n addressType === WalletAdapterAddressType.P2TR ? 'p2tr' as const :\n undefined\n if (paymentType == null) {\n throw new BitcoinWalletAdapterError(\"Address is not supported\")\n }\n\n const resp: any = await handleRpcError(\n /**\n * https://leather.gitbook.io/developers/bitcoin-methods/signmessage\n */\n this.request(\"signMessage\", {\n message,\n paymentType,\n }),\n )\n\n return {\n algorithm:\n resp.algorithm === \"ecdsa\"\n ? SignMessageAlgorithm.ECDSA\n : SignMessageAlgorithm.BIP322,\n result: resp.signature,\n address,\n publicKey: resp.publicKey,\n }\n }\n\n sendBitcoinFeeRateCapability = \"required\" as const\n async sendBitcoin(\n fromAddress: string,\n receiverAddress: string,\n satoshiAmount: bigint,\n options?: { feeRate?: number },\n ): Promise<{ txid: string }> {\n const resp: any = await handleRpcError(\n /**\n * https://leather.gitbook.io/developers/bitcoin-methods/sendbitcoin\n */\n (this.request as any)(\"sendBitcoin\", {\n origin: fromAddress,\n destination: receiverAddress,\n amount: satoshiAmount,\n feeRate: options?.feeRate,\n }),\n )\n return { txid: resp.txid }\n }\n\n /**\n * @internal\n * @experimental\n */\n sendInscriptionFeeRateCapability = \"available\" as const\n /**\n * @internal\n * @experimental\n */\n async sendInscription(\n fromAddress: string,\n receiverAddress: string,\n inscriptionId: string,\n options?: { feeRate?: number },\n ): Promise<{ txid: string }> {\n const { txid }: any = await handleRpcError(\n /**\n * https://leather.gitbook.io/developers/ordinals/send-ordinals\n */\n (this.request as any)(\"sendOrdinals\", {\n ordinals: [\n {\n destination: receiverAddress,\n id: inscriptionId,\n },\n ],\n paymentType: \"p2wpkh\",\n sender: fromAddress,\n feeRate: options?.feeRate,\n }),\n )\n return { txid }\n }\n\n async signAndFinalizePsbt(\n psbtHex: string,\n signIndices: [address: string, signIndex: number][],\n ): Promise<{\n signedPsbtHex: string\n }> {\n const accounts = await this.getAddresses()\n const signingAccount = accounts.find(\n account => account.address === signIndices[0]?.[0],\n )\n if (signingAccount == null) {\n throw new WalletAdapterNotConnectedError(metadata.name)\n }\n\n const resp: any = await handleRpcError(\n /**\n * https://leather.gitbook.io/developers/bitcoin-methods/signandfinalizepsbt\n */\n (this.request as any)(\"signAndFinalizePsbt\", {\n hex: psbtHex,\n inputsToSign: signIndices.map(([address, signIndex]) => ({\n address,\n signingIndexes: [signIndex],\n signatureHash: undefined,\n disableTweakSigner: undefined,\n })),\n paymentType:\n signingAccount.addressType === WalletAdapterAddressType.P2TR\n ? \"p2tr\"\n : \"p2wpkh\",\n }),\n )\n\n return { signedPsbtHex: resp.hex }\n }\n\n onAddressesChanged(callback: WalletAdapter_onAddressesChanged_callback): {\n unsubscribe: () => void\n } {\n // Leather doesn't provide event, fallback to polling\n let stopped = false\n\n const tick = async (): Promise<void> => {\n if (stopped) return\n try {\n const addresses = await this.getAddresses()\n callback({ addresses })\n } catch (error) {\n if (error instanceof WalletAdapterNotConnectedError) {\n stopped = true\n return\n }\n console.warn(\"[Leather] Failed to get addresses on change:\", error)\n } finally {\n if (!stopped) {\n setTimeout(tick, 1000)\n }\n }\n }\n\n setTimeout(tick, 1000)\n\n return {\n unsubscribe: () => {\n stopped = true\n },\n }\n }\n}\n\nexport class LeatherWalletAdapterError extends BitcoinWalletAdapterError {\n constructor(rpcError: RpcErrorResponse<RpcErrorBody>) {\n super(\"Leather wallet error: \" + rpcError.error.message, {\n cause: rpcError,\n })\n }\n}\n\nconst handleRpcError = async <T>(\n promise: Promise<T>,\n): Promise<NonNullable<T>> => {\n try {\n return (await promise) as NonNullable<T>\n } catch (e: any) {\n if (e instanceof UserRejectError) {\n throw e\n }\n\n if (e.error?.code === RpcErrorCode.USER_REJECTION) {\n throw new UserRejectError()\n }\n\n throw new LeatherWalletAdapterError(e)\n }\n}\n"],"names":["localStorageKeyPrefix","LOCAL_STORAGE_KEY_PREFIX","adapterId","connectedAddress_localStorageKey","LeatherWalletAdapterImpl","request","resp","stored","handleRpcError","WalletAdapterNotConnectedError","metadata","addresses","a","isMainnet","WalletAdapterBitcoinNetwork","WalletAdapterAddressPurpose","WalletAdapterAddressType","hex","addressToScriptPubKey","getBitcoinNetwork","getTapInternalKeyOf_P2TR_publicKey","address","message","addressType","paymentType","BitcoinWalletAdapterError","SignMessageAlgorithm","fromAddress","receiverAddress","satoshiAmount","options","inscriptionId","txid","psbtHex","signIndices","signingAccount","account","signIndex","callback","stopped","tick","error","LeatherWalletAdapterError","rpcError","promise","UserRejectError"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./index-jRY8YhyK.js"),y=require("./constants-Dr0_Mix2.js"),s=require("./WalletAdapters.types-CExaiK0o.js"),A=`${y.LOCAL_STORAGE_KEY_PREFIX}:${a.adapterId}`,l=`${A}:connectedAddress`;class g{constructor(e){this.request=e}retrieveConnectedAddress(){let e;const r=localStorage.getItem(l)||void 0;if(r!=null)try{if(e=JSON.parse(r),e==null||!("addresses"in e)||!Array.isArray(e.addresses))throw new Error("Invalid stored addresses")}catch{localStorage.removeItem(l)}return e}async connect(){if(this.retrieveConnectedAddress()==null){const e=await o(this.request("getAddresses"));localStorage.setItem(l,JSON.stringify(e))}}async disconnect(){return localStorage.removeItem(l),Promise.resolve()}async getAddresses(){const e=this.retrieveConnectedAddress();if(e==null)throw new s.WalletAdapterNotConnectedError(a.metadata$1.name);const r=e.addresses.filter(t=>t.symbol==="BTC"&&t.type),n=r.filter(t=>t.type==="p2tr")[0].address.startsWith("bc");return r.map(t=>({network:n?s.WalletAdapterBitcoinNetwork.MAINNET:s.WalletAdapterBitcoinNetwork.TESTNET,purposes:t.type==="p2tr"?[s.WalletAdapterAddressPurpose.Ordinals,s.WalletAdapterAddressPurpose.BRC20,s.WalletAdapterAddressPurpose.Runes]:[s.WalletAdapterAddressPurpose.Bitcoin],addressType:t.type==="p2tr"?s.WalletAdapterAddressType.P2TR:s.WalletAdapterAddressType.P2WPKH,address:t.address,scriptPubKey:a.hex.encode(a.addressToScriptPubKey(a.getBitcoinNetwork(n?"mainnet":"testnet"),t.address)),publicKey:t.publicKey,tapInternalKey:t.type==="p2tr"?a.hex.encode(a.getTapInternalKeyOf_P2TR_publicKey(a.getBitcoinNetwork(n?"mainnet":"testnet"),a.hex.decode(t.publicKey))):void 0}))}async signMessage(e,r){const t=(await this.getAddresses()).find(p=>p.address===e)?.addressType,i=t===s.WalletAdapterAddressType.P2WPKH?"p2wpkh":t===s.WalletAdapterAddressType.P2TR?"p2tr":void 0;if(i==null)throw new a.BitcoinWalletAdapterError("Address is not supported");const d=await o(this.request("signMessage",{message:r,paymentType:i}));return{algorithm:d.algorithm==="ecdsa"?s.SignMessageAlgorithm.ECDSA:s.SignMessageAlgorithm.BIP322,result:d.signature,address:e,publicKey:d.publicKey}}sendBitcoinFeeRateCapability="required";async sendBitcoin(e,r,n,t){return{txid:(await o(this.request("sendBitcoin",{origin:e,destination:r,amount:n,feeRate:t?.feeRate}))).txid}}sendInscriptionFeeRateCapability="available";async sendInscription(e,r,n,t){const{txid:i}=await o(this.request("sendOrdinals",{ordinals:[{destination:r,id:n}],paymentType:"p2wpkh",sender:e,feeRate:t?.feeRate}));return{txid:i}}async signAndFinalizePsbt(e,r){const t=(await this.getAddresses()).find(d=>d.address===r[0]?.[0]);if(t==null)throw new s.WalletAdapterNotConnectedError(a.metadata$1.name);return{signedPsbtHex:(await o(this.request("signAndFinalizePsbt",{hex:e,inputsToSign:r.map(([d,p])=>({address:d,signingIndexes:[p],signatureHash:void 0,disableTweakSigner:void 0})),paymentType:t.addressType===s.WalletAdapterAddressType.P2TR?"p2tr":"p2wpkh"}))).hex}}onAddressesChanged(e){let r=!1;const n=async()=>{if(!r)try{const t=await this.getAddresses();e({addresses:t})}catch(t){if(t instanceof s.WalletAdapterNotConnectedError){r=!0;return}console.warn("[Leather] Failed to get addresses on change:",t)}finally{r||setTimeout(n,1e3)}};return setTimeout(n,1e3),{unsubscribe:()=>{r=!0}}}}class u extends a.BitcoinWalletAdapterError{constructor(e){super("Leather wallet error: "+e.error.message,{cause:e})}}const o=async c=>{try{return await c}catch(e){throw e instanceof a.UserRejectError?e:e.error?.code===4001?new a.UserRejectError:new u(e)}};exports.LeatherWalletAdapterError=u;exports.LeatherWalletAdapterImpl=g;
2
+ //# sourceMappingURL=LeatherWalletAdapter.impl-BIWirus3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeatherWalletAdapter.impl-BIWirus3.js","sources":["../src/adapters/LeatherWalletAdapter.impl.ts"],"sourcesContent":["import type { RequestFn, RpcErrorBody, RpcErrorResponse } from \"@leather.io/rpc\"\nimport { hex } from \"@scure/base\"\nimport { LOCAL_STORAGE_KEY_PREFIX } from \"../constants\"\nimport {\n addressToScriptPubKey,\n getTapInternalKeyOf_P2TR_publicKey,\n} from \"../utils/bitcoinAddressHelpers\"\nimport { getBitcoinNetwork } from \"../utils/bitcoinNetworkHelpers\"\nimport { BitcoinWalletAdapterError, UserRejectError } from \"../utils/error\"\nimport {\n SignMessageAlgorithm,\n SignMessageResult,\n WalletAdapter,\n WalletAdapter_onAddressesChanged_callback,\n WalletAdapterAddress,\n WalletAdapterAddressPurpose,\n WalletAdapterAddressType,\n WalletAdapterBitcoinNetwork,\n WalletAdapterNotConnectedError,\n} from \"../WalletAdapters.types\"\nimport { adapterId, metadata } from \"./LeatherWalletAdapter\"\n\ntype GetAddressesResponseData = any\n\n/**\n * https://github.com/leather-io/mono/blob/a664e64040fed1c25abef1f8864a1c7fae5444c1/packages/rpc/src/rpc/schemas.ts#L64-L78\n */\nenum RpcErrorCode {\n // Spec defined server errors\n PARSE_ERROR = -32700,\n INVALID_REQUEST = -32600,\n METHOD_NOT_FOUND = -32601,\n INVALID_PARAMS = -32602,\n INTERNAL_ERROR = -32603,\n SERVER_ERROR = -32000,\n // Client defined errors\n USER_REJECTION = 4001,\n METHOD_NOT_SUPPORTED = 4002,\n // gRPC spec borrowed\n PERMISSION_DENIED = 7,\n UNAUTHENTICATED = 16,\n}\n\ntype Addresses = (WalletAdapterAddress & { publicKey: string })[]\n\nconst localStorageKeyPrefix = `${LOCAL_STORAGE_KEY_PREFIX}:${adapterId}`\nconst connectedAddress_localStorageKey = `${localStorageKeyPrefix}:connectedAddress`\n\n/**\n * Derivation path (BIP-84): m/84'/0'/ account_index '/0/0\n */\nexport class LeatherWalletAdapterImpl implements WalletAdapter {\n constructor(private request: RequestFn) {}\n\n private retrieveConnectedAddress(): GetAddressesResponseData | undefined {\n let resp: GetAddressesResponseData | undefined\n const stored =\n localStorage.getItem(connectedAddress_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(connectedAddress_localStorageKey)\n }\n }\n return resp\n }\n\n async connect(): Promise<void> {\n if (this.retrieveConnectedAddress() == null) {\n const resp = await handleRpcError(\n /**\n * https://leather.gitbook.io/developers/bitcoin/connect-users/get-addresses\n */\n this.request(\"getAddresses\"),\n )\n localStorage.setItem(\n connectedAddress_localStorageKey,\n JSON.stringify(resp),\n )\n }\n }\n\n async disconnect(): Promise<void> {\n localStorage.removeItem(connectedAddress_localStorageKey)\n return Promise.resolve()\n }\n\n async getAddresses(): Promise<Addresses> {\n const resp = this.retrieveConnectedAddress()\n\n if (resp == null) {\n throw new WalletAdapterNotConnectedError(metadata.name)\n }\n\n const addresses = resp.addresses.filter(\n (a: any) => (a as any).symbol === \"BTC\" && a.type,\n )\n\n const isMainnet = addresses\n .filter((a: any) => a.type === \"p2tr\")[0]\n .address.startsWith(\"bc\")\n\n return addresses.map((a: any) => ({\n network: isMainnet\n ? WalletAdapterBitcoinNetwork.MAINNET\n : WalletAdapterBitcoinNetwork.TESTNET,\n purposes:\n a.type === \"p2tr\"\n ? [\n WalletAdapterAddressPurpose.Ordinals,\n WalletAdapterAddressPurpose.BRC20,\n WalletAdapterAddressPurpose.Runes,\n ]\n : [WalletAdapterAddressPurpose.Bitcoin],\n addressType:\n a.type === \"p2tr\"\n ? WalletAdapterAddressType.P2TR\n : WalletAdapterAddressType.P2WPKH,\n address: a.address,\n scriptPubKey: hex.encode(\n addressToScriptPubKey(\n getBitcoinNetwork(isMainnet ? \"mainnet\" : \"testnet\"),\n a.address,\n ),\n ),\n publicKey: a.publicKey!,\n tapInternalKey:\n a.type === \"p2tr\"\n ? hex.encode(\n getTapInternalKeyOf_P2TR_publicKey(\n getBitcoinNetwork(isMainnet ? \"mainnet\" : \"testnet\"),\n hex.decode(a.publicKey!),\n ),\n )\n : undefined,\n }))\n }\n\n async signMessage(\n address: string,\n message: string,\n ): Promise<SignMessageResult> {\n const accounts = await this.getAddresses()\n\n const addressType = accounts.find(a => a.address === address)?.addressType\n\n // prettier-ignore\n const paymentType =\n addressType === WalletAdapterAddressType.P2WPKH ? 'p2wpkh' as const :\n addressType === WalletAdapterAddressType.P2TR ? 'p2tr' as const :\n undefined\n if (paymentType == null) {\n throw new BitcoinWalletAdapterError(\"Address is not supported\")\n }\n\n const resp: any = await handleRpcError(\n /**\n * https://leather.gitbook.io/developers/bitcoin-methods/signmessage\n */\n this.request(\"signMessage\", {\n message,\n paymentType,\n }),\n )\n\n return {\n algorithm:\n resp.algorithm === \"ecdsa\"\n ? SignMessageAlgorithm.ECDSA\n : SignMessageAlgorithm.BIP322,\n result: resp.signature,\n address,\n publicKey: resp.publicKey,\n }\n }\n\n sendBitcoinFeeRateCapability = \"required\" as const\n async sendBitcoin(\n fromAddress: string,\n receiverAddress: string,\n satoshiAmount: bigint,\n options?: { feeRate?: number },\n ): Promise<{ txid: string }> {\n const resp: any = await handleRpcError(\n /**\n * https://leather.gitbook.io/developers/bitcoin-methods/sendbitcoin\n */\n (this.request as any)(\"sendBitcoin\", {\n origin: fromAddress,\n destination: receiverAddress,\n amount: satoshiAmount,\n feeRate: options?.feeRate,\n }),\n )\n return { txid: resp.txid }\n }\n\n /**\n * @internal\n * @experimental\n */\n sendInscriptionFeeRateCapability = \"available\" as const\n /**\n * @internal\n * @experimental\n */\n async sendInscription(\n fromAddress: string,\n receiverAddress: string,\n inscriptionId: string,\n options?: { feeRate?: number },\n ): Promise<{ txid: string }> {\n const { txid }: any = await handleRpcError(\n /**\n * https://leather.gitbook.io/developers/ordinals/send-ordinals\n */\n (this.request as any)(\"sendOrdinals\", {\n ordinals: [\n {\n destination: receiverAddress,\n id: inscriptionId,\n },\n ],\n paymentType: \"p2wpkh\",\n sender: fromAddress,\n feeRate: options?.feeRate,\n }),\n )\n return { txid }\n }\n\n async signAndFinalizePsbt(\n psbtHex: string,\n signIndices: [address: string, signIndex: number][],\n ): Promise<{\n signedPsbtHex: string\n }> {\n const accounts = await this.getAddresses()\n const signingAccount = accounts.find(\n account => account.address === signIndices[0]?.[0],\n )\n if (signingAccount == null) {\n throw new WalletAdapterNotConnectedError(metadata.name)\n }\n\n const resp: any = await handleRpcError(\n /**\n * https://leather.gitbook.io/developers/bitcoin-methods/signandfinalizepsbt\n */\n (this.request as any)(\"signAndFinalizePsbt\", {\n hex: psbtHex,\n inputsToSign: signIndices.map(([address, signIndex]) => ({\n address,\n signingIndexes: [signIndex],\n signatureHash: undefined,\n disableTweakSigner: undefined,\n })),\n paymentType:\n signingAccount.addressType === WalletAdapterAddressType.P2TR\n ? \"p2tr\"\n : \"p2wpkh\",\n }),\n )\n\n return { signedPsbtHex: resp.hex }\n }\n\n onAddressesChanged(callback: WalletAdapter_onAddressesChanged_callback): {\n unsubscribe: () => void\n } {\n // Leather doesn't provide event, fallback to polling\n let stopped = false\n\n const tick = async (): Promise<void> => {\n if (stopped) return\n try {\n const addresses = await this.getAddresses()\n callback({ addresses })\n } catch (error) {\n if (error instanceof WalletAdapterNotConnectedError) {\n stopped = true\n return\n }\n console.warn(\"[Leather] Failed to get addresses on change:\", error)\n } finally {\n if (!stopped) {\n setTimeout(tick, 1000)\n }\n }\n }\n\n setTimeout(tick, 1000)\n\n return {\n unsubscribe: () => {\n stopped = true\n },\n }\n }\n}\n\nexport class LeatherWalletAdapterError extends BitcoinWalletAdapterError {\n constructor(rpcError: RpcErrorResponse<RpcErrorBody>) {\n super(\"Leather wallet error: \" + rpcError.error.message, {\n cause: rpcError,\n })\n }\n}\n\nconst handleRpcError = async <T>(\n promise: Promise<T>,\n): Promise<NonNullable<T>> => {\n try {\n return (await promise) as NonNullable<T>\n } catch (e: any) {\n if (e instanceof UserRejectError) {\n throw e\n }\n\n if (e.error?.code === RpcErrorCode.USER_REJECTION) {\n throw new UserRejectError()\n }\n\n throw new LeatherWalletAdapterError(e)\n }\n}\n"],"names":["localStorageKeyPrefix","LOCAL_STORAGE_KEY_PREFIX","adapterId","connectedAddress_localStorageKey","LeatherWalletAdapterImpl","request","resp","stored","handleRpcError","WalletAdapterNotConnectedError","metadata","addresses","a","isMainnet","WalletAdapterBitcoinNetwork","WalletAdapterAddressPurpose","WalletAdapterAddressType","hex","addressToScriptPubKey","getBitcoinNetwork","getTapInternalKeyOf_P2TR_publicKey","address","message","addressType","paymentType","BitcoinWalletAdapterError","SignMessageAlgorithm","fromAddress","receiverAddress","satoshiAmount","options","inscriptionId","txid","psbtHex","signIndices","signingAccount","account","signIndex","callback","stopped","tick","error","LeatherWalletAdapterError","rpcError","promise","UserRejectError"],"mappings":"4MA6CMA,EAAwB,GAAGC,EAAAA,wBAAwB,IAAIC,EAAAA,SAAS,GAChEC,EAAmC,GAAGH,CAAqB,oBAK1D,MAAMI,CAAkD,CAC7D,YAAoBC,EAAoB,CAApB,KAAA,QAAAA,CAAqB,CAEjC,0BAAiE,CACvE,IAAIC,EACJ,MAAMC,EACJ,aAAa,QAAQJ,CAAgC,GAAK,OAC5D,GAAII,GAAU,KACZ,GAAI,CAEF,GADAD,EAAO,KAAK,MAAMC,CAAM,EAEtBD,GAAQ,MACR,EAAE,cAAeA,IACjB,CAAC,MAAM,QAAQA,EAAK,SAAS,EAE7B,MAAM,IAAI,MAAM,0BAA0B,CAE9C,MAAQ,CACN,aAAa,WAAWH,CAAgC,CAC1D,CAEF,OAAOG,CACT,CAEA,MAAM,SAAyB,CAC7B,GAAI,KAAK,yBAAA,GAA8B,KAAM,CAC3C,MAAMA,EAAO,MAAME,EAIjB,KAAK,QAAQ,cAAc,CAAA,EAE7B,aAAa,QACXL,EACA,KAAK,UAAUG,CAAI,CAAA,CAEvB,CACF,CAEA,MAAM,YAA4B,CAChC,oBAAa,WAAWH,CAAgC,EACjD,QAAQ,QAAA,CACjB,CAEA,MAAM,cAAmC,CACvC,MAAMG,EAAO,KAAK,yBAAA,EAElB,GAAIA,GAAQ,KACV,MAAM,IAAIG,EAAAA,+BAA+BC,EAAAA,WAAS,IAAI,EAGxD,MAAMC,EAAYL,EAAK,UAAU,OAC9BM,GAAYA,EAAU,SAAW,OAASA,EAAE,IAAA,EAGzCC,EAAYF,EACf,OAAQC,GAAWA,EAAE,OAAS,MAAM,EAAE,CAAC,EACvC,QAAQ,WAAW,IAAI,EAE1B,OAAOD,EAAU,IAAKC,IAAY,CAChC,QAASC,EACLC,EAAAA,4BAA4B,QAC5BA,EAAAA,4BAA4B,QAChC,SACEF,EAAE,OAAS,OACP,CACEG,EAAAA,4BAA4B,SAC5BA,EAAAA,4BAA4B,MAC5BA,8BAA4B,KAAA,EAE9B,CAACA,EAAAA,4BAA4B,OAAO,EAC1C,YACEH,EAAE,OAAS,OACPI,EAAAA,yBAAyB,KACzBA,EAAAA,yBAAyB,OAC/B,QAASJ,EAAE,QACX,aAAcK,EAAAA,IAAI,OAChBC,EAAAA,sBACEC,oBAAkBN,EAAY,UAAY,SAAS,EACnDD,EAAE,OAAA,CACJ,EAEF,UAAWA,EAAE,UACb,eACEA,EAAE,OAAS,OACPK,EAAAA,IAAI,OACFG,EAAAA,mCACED,oBAAkBN,EAAY,UAAY,SAAS,EACnDI,MAAI,OAAOL,EAAE,SAAU,CAAA,CACzB,EAEF,MAAA,EACN,CACJ,CAEA,MAAM,YACJS,EACAC,EAC4B,CAG5B,MAAMC,GAFW,MAAM,KAAK,aAAA,GAEC,QAAUX,EAAE,UAAYS,CAAO,GAAG,YAGzDG,EACJD,IAAgBP,EAAAA,yBAAyB,OAAS,SAClDO,IAAgBP,EAAAA,yBAAyB,KAAO,OAChD,OACF,GAAIQ,GAAe,KACjB,MAAM,IAAIC,EAAAA,0BAA0B,0BAA0B,EAGhE,MAAMnB,EAAY,MAAME,EAItB,KAAK,QAAQ,cAAe,CAC1B,QAAAc,EACA,YAAAE,CAAA,CACD,CAAA,EAGH,MAAO,CACL,UACElB,EAAK,YAAc,QACfoB,EAAAA,qBAAqB,MACrBA,EAAAA,qBAAqB,OAC3B,OAAQpB,EAAK,UACb,QAAAe,EACA,UAAWf,EAAK,SAAA,CAEpB,CAEA,6BAA+B,WAC/B,MAAM,YACJqB,EACAC,EACAC,EACAC,EAC2B,CAY3B,MAAO,CAAE,MAXS,MAAMtB,EAIrB,KAAK,QAAgB,cAAe,CACnC,OAAQmB,EACR,YAAaC,EACb,OAAQC,EACR,QAASC,GAAS,OAAA,CACnB,CAAA,GAEiB,IAAA,CACtB,CAMA,iCAAmC,YAKnC,MAAM,gBACJH,EACAC,EACAG,EACAD,EAC2B,CAC3B,KAAM,CAAE,KAAAE,CAAA,EAAc,MAAMxB,EAIzB,KAAK,QAAgB,eAAgB,CACpC,SAAU,CACR,CACE,YAAaoB,EACb,GAAIG,CAAA,CACN,EAEF,YAAa,SACb,OAAQJ,EACR,QAASG,GAAS,OAAA,CACnB,CAAA,EAEH,MAAO,CAAE,KAAAE,CAAA,CACX,CAEA,MAAM,oBACJC,EACAC,EAGC,CAED,MAAMC,GADW,MAAM,KAAK,aAAA,GACI,QACnBC,EAAQ,UAAYF,EAAY,CAAC,IAAI,CAAC,CAAA,EAEnD,GAAIC,GAAkB,KACpB,MAAM,IAAI1B,EAAAA,+BAA+BC,EAAAA,WAAS,IAAI,EAsBxD,MAAO,CAAE,eAnBS,MAAMF,EAIrB,KAAK,QAAgB,sBAAuB,CAC3C,IAAKyB,EACL,aAAcC,EAAY,IAAI,CAAC,CAACb,EAASgB,CAAS,KAAO,CACvD,QAAAhB,EACA,eAAgB,CAACgB,CAAS,EAC1B,cAAe,OACf,mBAAoB,MAAA,EACpB,EACF,YACEF,EAAe,cAAgBnB,EAAAA,yBAAyB,KACpD,OACA,QAAA,CACP,CAAA,GAG0B,GAAA,CAC/B,CAEA,mBAAmBsB,EAEjB,CAEA,IAAIC,EAAU,GAEd,MAAMC,EAAO,SAA2B,CACtC,GAAI,CAAAD,EACJ,GAAI,CACF,MAAM5B,EAAY,MAAM,KAAK,aAAA,EAC7B2B,EAAS,CAAE,UAAA3B,EAAW,CACxB,OAAS8B,EAAO,CACd,GAAIA,aAAiBhC,EAAAA,+BAAgC,CACnD8B,EAAU,GACV,MACF,CACA,QAAQ,KAAK,+CAAgDE,CAAK,CACpE,QAAA,CACOF,GACH,WAAWC,EAAM,GAAI,CAEzB,CACF,EAEA,kBAAWA,EAAM,GAAI,EAEd,CACL,YAAa,IAAM,CACjBD,EAAU,EACZ,CAAA,CAEJ,CACF,CAEO,MAAMG,UAAkCjB,EAAAA,yBAA0B,CACvE,YAAYkB,EAA0C,CACpD,MAAM,yBAA2BA,EAAS,MAAM,QAAS,CACvD,MAAOA,CAAA,CACR,CACH,CACF,CAEA,MAAMnC,EAAiB,MACrBoC,GAC4B,CAC5B,GAAI,CACF,OAAQ,MAAMA,CAChB,OAAS,EAAQ,CACf,MAAI,aAAaC,EAAAA,gBACT,EAGJ,EAAE,OAAO,OAAS,KACd,IAAIA,EAAAA,gBAGN,IAAIH,EAA0B,CAAC,CACvC,CACF"}