bitcoin-wallet-connector 0.1.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 (158) hide show
  1. package/README.md +208 -0
  2. package/lib/BitcoinConnectionProvider.d.ts +23 -0
  3. package/lib/BitcoinWalletAdapterConnector-Bq835yj0.mjs +123 -0
  4. package/lib/BitcoinWalletAdapterConnector-Bq835yj0.mjs.map +1 -0
  5. package/lib/BitcoinWalletAdapterConnector-DMef0iHV.js +2 -0
  6. package/lib/BitcoinWalletAdapterConnector-DMef0iHV.js.map +1 -0
  7. package/lib/BitcoinWalletAdapterConnector.d.ts +30 -0
  8. package/lib/BitgetWalletAdapter.impl-C_HLO7Oi.mjs +10 -0
  9. package/lib/BitgetWalletAdapter.impl-C_HLO7Oi.mjs.map +1 -0
  10. package/lib/BitgetWalletAdapter.impl-CxnKMf7U.js +2 -0
  11. package/lib/BitgetWalletAdapter.impl-CxnKMf7U.js.map +1 -0
  12. package/lib/LeatherWalletAdapter.impl-B2QgX_tO.js +2 -0
  13. package/lib/LeatherWalletAdapter.impl-B2QgX_tO.js.map +1 -0
  14. package/lib/LeatherWalletAdapter.impl-RUYx555r.mjs +184 -0
  15. package/lib/LeatherWalletAdapter.impl-RUYx555r.mjs.map +1 -0
  16. package/lib/MagicEdenWalletAdapter.impl-CrA6SGvG.mjs +235 -0
  17. package/lib/MagicEdenWalletAdapter.impl-CrA6SGvG.mjs.map +1 -0
  18. package/lib/MagicEdenWalletAdapter.impl-Di3Nu2S5.js +2 -0
  19. package/lib/MagicEdenWalletAdapter.impl-Di3Nu2S5.js.map +1 -0
  20. package/lib/OkxWalletAdapter.impl-BepoUL1B.mjs +67 -0
  21. package/lib/OkxWalletAdapter.impl-BepoUL1B.mjs.map +1 -0
  22. package/lib/OkxWalletAdapter.impl-C8kesjGu.js +2 -0
  23. package/lib/OkxWalletAdapter.impl-C8kesjGu.js.map +1 -0
  24. package/lib/UnisatCompatibleWalletAdapterImpl-Cq2Oqk1b.js +2 -0
  25. package/lib/UnisatCompatibleWalletAdapterImpl-Cq2Oqk1b.js.map +1 -0
  26. package/lib/UnisatCompatibleWalletAdapterImpl-M38FqkZI.mjs +137 -0
  27. package/lib/UnisatCompatibleWalletAdapterImpl-M38FqkZI.mjs.map +1 -0
  28. package/lib/UnisatWalletAdapter.impl-CJB22se8.mjs +14 -0
  29. package/lib/UnisatWalletAdapter.impl-CJB22se8.mjs.map +1 -0
  30. package/lib/UnisatWalletAdapter.impl-EISvxdpc.js +2 -0
  31. package/lib/UnisatWalletAdapter.impl-EISvxdpc.js.map +1 -0
  32. package/lib/WalletAdapters.types-CnvOqHFH.mjs +32 -0
  33. package/lib/WalletAdapters.types-CnvOqHFH.mjs.map +1 -0
  34. package/lib/WalletAdapters.types-De_x1lzr.js +2 -0
  35. package/lib/WalletAdapters.types-De_x1lzr.js.map +1 -0
  36. package/lib/WalletAdapters.types.d.ts +110 -0
  37. package/lib/XverseCompatibleWalletAdapterImpl-Bf-BK5VK.js +2 -0
  38. package/lib/XverseCompatibleWalletAdapterImpl-Bf-BK5VK.js.map +1 -0
  39. package/lib/XverseCompatibleWalletAdapterImpl-DXKnO_-V.mjs +151 -0
  40. package/lib/XverseCompatibleWalletAdapterImpl-DXKnO_-V.mjs.map +1 -0
  41. package/lib/XverseWalletAdapter.impl-CZO0RQva.mjs +105 -0
  42. package/lib/XverseWalletAdapter.impl-CZO0RQva.mjs.map +1 -0
  43. package/lib/XverseWalletAdapter.impl-lJwMi-Iv.js +2 -0
  44. package/lib/XverseWalletAdapter.impl-lJwMi-Iv.js.map +1 -0
  45. package/lib/adapters/BitgetWalletAdapter.d.ts +2 -0
  46. package/lib/adapters/BitgetWalletAdapter.impl.d.ts +8 -0
  47. package/lib/adapters/LeatherWalletAdapter.d.ts +2 -0
  48. package/lib/adapters/LeatherWalletAdapter.impl.d.ts +41 -0
  49. package/lib/adapters/MagicEdenWalletAdapter.d.ts +11 -0
  50. package/lib/adapters/MagicEdenWalletAdapter.impl.d.ts +22 -0
  51. package/lib/adapters/MockAddressWalletAdapter.d.ts +33 -0
  52. package/lib/adapters/OkxWalletAdapter.d.ts +2 -0
  53. package/lib/adapters/OkxWalletAdapter.impl.d.ts +51 -0
  54. package/lib/adapters/UnisatWalletAdapter.d.ts +2 -0
  55. package/lib/adapters/UnisatWalletAdapter.impl.d.ts +14 -0
  56. package/lib/adapters/XverseWalletAdapter.d.ts +3 -0
  57. package/lib/adapters/XverseWalletAdapter.impl.d.ts +14 -0
  58. package/lib/adapters/index.d.ts +7 -0
  59. package/lib/adapters.js +2 -0
  60. package/lib/adapters.js.map +1 -0
  61. package/lib/adapters.mjs +11 -0
  62. package/lib/adapters.mjs.map +1 -0
  63. package/lib/bitget-C7oB4Ffq.mjs +5 -0
  64. package/lib/bitget-C7oB4Ffq.mjs.map +1 -0
  65. package/lib/bitget-DXnsxx_y.js +2 -0
  66. package/lib/bitget-DXnsxx_y.js.map +1 -0
  67. package/lib/index-CaV3F1Nm.js +424 -0
  68. package/lib/index-CaV3F1Nm.js.map +1 -0
  69. package/lib/index-CcQUdePc.mjs +12224 -0
  70. package/lib/index-CcQUdePc.mjs.map +1 -0
  71. package/lib/index-D7YwhNAG.mjs +3946 -0
  72. package/lib/index-D7YwhNAG.mjs.map +1 -0
  73. package/lib/index-Zx0KcpYx.js +2 -0
  74. package/lib/index-Zx0KcpYx.js.map +1 -0
  75. package/lib/index.d.ts +3 -0
  76. package/lib/index.js +2 -0
  77. package/lib/index.js.map +1 -0
  78. package/lib/index.mjs +20 -0
  79. package/lib/index.mjs.map +1 -0
  80. package/lib/leather-BoQG_CPn.mjs +5 -0
  81. package/lib/leather-BoQG_CPn.mjs.map +1 -0
  82. package/lib/leather-DJ8nWmM8.js +2 -0
  83. package/lib/leather-DJ8nWmM8.js.map +1 -0
  84. package/lib/magiceden-B36CEQa6.js +2 -0
  85. package/lib/magiceden-B36CEQa6.js.map +1 -0
  86. package/lib/magiceden-Cg7d3agI.mjs +5 -0
  87. package/lib/magiceden-Cg7d3agI.mjs.map +1 -0
  88. package/lib/misc-B5EWO_dn.mjs +10 -0
  89. package/lib/misc-B5EWO_dn.mjs.map +1 -0
  90. package/lib/misc-CigR0RqC.js +2 -0
  91. package/lib/misc-CigR0RqC.js.map +1 -0
  92. package/lib/okx-ChwzM0dK.js +2 -0
  93. package/lib/okx-ChwzM0dK.js.map +1 -0
  94. package/lib/okx-DWbHwazu.mjs +5 -0
  95. package/lib/okx-DWbHwazu.mjs.map +1 -0
  96. package/lib/react.d.ts +2 -0
  97. package/lib/react.js +2 -0
  98. package/lib/react.js.map +1 -0
  99. package/lib/react.mjs +128 -0
  100. package/lib/react.mjs.map +1 -0
  101. package/lib/transaction-CiLOYSE_.mjs +1063 -0
  102. package/lib/transaction-CiLOYSE_.mjs.map +1 -0
  103. package/lib/transaction-CzdnbXSo.js +2 -0
  104. package/lib/transaction-CzdnbXSo.js.map +1 -0
  105. package/lib/unisat-BvZW5h0U.js +2 -0
  106. package/lib/unisat-BvZW5h0U.js.map +1 -0
  107. package/lib/unisat-pLgab4nG.mjs +5 -0
  108. package/lib/unisat-pLgab4nG.mjs.map +1 -0
  109. package/lib/utils/StateChannel.d.ts +14 -0
  110. package/lib/utils/UnisatCompatibleWalletAdapterImpl.d.ts +99 -0
  111. package/lib/utils/XverseCompatibleWalletAdapterImpl.d.ts +80 -0
  112. package/lib/utils/XverseCompatibleWalletAdapterImpl_legacy.d.ts +44 -0
  113. package/lib/utils/bitcoinAddressHelpers.d.ts +14 -0
  114. package/lib/utils/bitcoinNetworkHelpers.d.ts +4 -0
  115. package/lib/utils/createAdapterAvailability.d.ts +15 -0
  116. package/lib/utils/error.d.ts +6 -0
  117. package/lib/utils/misc.d.ts +3 -0
  118. package/lib/xverse-IKOHyGi-.js +2 -0
  119. package/lib/xverse-IKOHyGi-.js.map +1 -0
  120. package/lib/xverse-iHLNanCB.mjs +5 -0
  121. package/lib/xverse-iHLNanCB.mjs.map +1 -0
  122. package/package.json +86 -0
  123. package/src/BitcoinConnectionProvider.stories.tsx +329 -0
  124. package/src/BitcoinConnectionProvider.tsx +234 -0
  125. package/src/BitcoinWalletAdapterConnector.ts +166 -0
  126. package/src/WalletAdapters.types.ts +154 -0
  127. package/src/_/bitget.png +0 -0
  128. package/src/_/leather.svg +4 -0
  129. package/src/_/magiceden.png +0 -0
  130. package/src/_/okx.png +0 -0
  131. package/src/_/unisat.svg +31 -0
  132. package/src/_/xverse.png +0 -0
  133. package/src/adapters/BitgetWalletAdapter.impl.ts +22 -0
  134. package/src/adapters/BitgetWalletAdapter.ts +44 -0
  135. package/src/adapters/LeatherWalletAdapter.impl.ts +324 -0
  136. package/src/adapters/LeatherWalletAdapter.ts +35 -0
  137. package/src/adapters/MagicEdenWalletAdapter.impl.ts +139 -0
  138. package/src/adapters/MagicEdenWalletAdapter.ts +51 -0
  139. package/src/adapters/MockAddressWalletAdapter.ts +199 -0
  140. package/src/adapters/OkxWalletAdapter.impl.ts +168 -0
  141. package/src/adapters/OkxWalletAdapter.ts +37 -0
  142. package/src/adapters/UnisatWalletAdapter.impl.ts +32 -0
  143. package/src/adapters/UnisatWalletAdapter.ts +50 -0
  144. package/src/adapters/XverseWalletAdapter.impl.ts +150 -0
  145. package/src/adapters/XverseWalletAdapter.ts +37 -0
  146. package/src/adapters/index.ts +7 -0
  147. package/src/env.d.ts +9 -0
  148. package/src/index.ts +3 -0
  149. package/src/react.ts +9 -0
  150. package/src/utils/StateChannel.ts +39 -0
  151. package/src/utils/UnisatCompatibleWalletAdapterImpl.ts +342 -0
  152. package/src/utils/XverseCompatibleWalletAdapterImpl.ts +288 -0
  153. package/src/utils/XverseCompatibleWalletAdapterImpl_legacy.ts +278 -0
  154. package/src/utils/bitcoinAddressHelpers.ts +132 -0
  155. package/src/utils/bitcoinNetworkHelpers.ts +17 -0
  156. package/src/utils/createAdapterAvailability.ts +92 -0
  157. package/src/utils/error.ts +13 -0
  158. package/src/utils/misc.ts +10 -0
@@ -0,0 +1,166 @@
1
+ import { AvailabilitySubscription } from "./utils/createAdapterAvailability"
2
+ import { BitcoinWalletAdapterError } from "./utils/error"
3
+ import { StateChannel, StateChannelListener } from "./utils/StateChannel"
4
+ import {
5
+ WalletAdapter,
6
+ WalletAdapterNotConnectedError,
7
+ WalletAdapterStatic,
8
+ } from "./WalletAdapters.types"
9
+
10
+ const previousConnectWalletAdapterIdLocalStorageKey =
11
+ "app:BitcoinWalletAdapterConnector:previousConnectWallet"
12
+
13
+ export interface ConnectInfo {
14
+ adapterId: string
15
+ adapter: WalletAdapter
16
+ }
17
+
18
+ export type AdapterEntry = readonly [string, WalletAdapter]
19
+
20
+ export class BitcoinWalletAdapterConnector {
21
+ private availableAdaptersState = new StateChannel<AdapterEntry[]>([])
22
+ private connectedInfoState = new StateChannel<null | ConnectInfo>(null)
23
+ private autoConnectRunning = false
24
+ private availabilitySubscriptions: AvailabilitySubscription[] = []
25
+ private adapterOrder = new Map<string, number>()
26
+
27
+ constructor(private Adapters: WalletAdapterStatic<WalletAdapter>[]) {
28
+ this.adapterOrder = new Map(
29
+ Adapters.map((adapter, index) => [adapter.adapterId, index]),
30
+ )
31
+ this.initializeAdapterAvailability()
32
+ }
33
+
34
+ dispose(): void {
35
+ this.availabilitySubscriptions.forEach(s => s.unsubscribe())
36
+ this.availabilitySubscriptions = []
37
+ this.availableAdaptersState = new StateChannel<AdapterEntry[]>([])
38
+ this.connectedInfoState = new StateChannel<null | ConnectInfo>(null)
39
+ }
40
+
41
+ subscribeAvailableAdapters(
42
+ listener: StateChannelListener<AdapterEntry[]>,
43
+ ): AvailabilitySubscription {
44
+ return this.availableAdaptersState.subscribe(listener)
45
+ }
46
+ getAvailableAdapters(): AdapterEntry[] {
47
+ return this.availableAdaptersState.getValue()
48
+ }
49
+
50
+ subscribeConnectedInfo(
51
+ listener: StateChannelListener<null | ConnectInfo>,
52
+ ): AvailabilitySubscription {
53
+ return this.connectedInfoState.subscribe(listener)
54
+ }
55
+ getConnectedInfo(): null | ConnectInfo {
56
+ return this.connectedInfoState.getValue()
57
+ }
58
+
59
+ private initializeAdapterAvailability(): void {
60
+ this.availabilitySubscriptions = this.Adapters.map(Adapter => {
61
+ return Adapter.getAdapter().subscribe(adapter => {
62
+ this.addOrUpdateAvailableAdapter(Adapter.adapterId, adapter)
63
+ })
64
+ })
65
+ }
66
+
67
+ private addOrUpdateAvailableAdapter(
68
+ adapterId: string,
69
+ adapter: WalletAdapter,
70
+ ): void {
71
+ this.availableAdaptersState.update(current => {
72
+ const next = [...current]
73
+ const existingIndex = current.findIndex(([id]) => id === adapterId)
74
+ if (existingIndex === -1) {
75
+ next.push([adapterId, adapter] as const)
76
+ } else {
77
+ next[existingIndex] = [adapterId, adapter] as const
78
+ }
79
+
80
+ next.sort(
81
+ (a, b) =>
82
+ (this.adapterOrder.get(a[0]) ?? Number.MAX_SAFE_INTEGER) -
83
+ (this.adapterOrder.get(b[0]) ?? Number.MAX_SAFE_INTEGER),
84
+ )
85
+ return next
86
+ })
87
+
88
+ void this.autoConnect()
89
+ }
90
+
91
+ async connect(adapterId: string, adapter: WalletAdapter): Promise<void> {
92
+ const finalAdapter = adapter
93
+
94
+ await finalAdapter.connect().catch(err => {
95
+ if (err instanceof BitcoinWalletAdapterError) {
96
+ alert(err.message)
97
+ return
98
+ }
99
+ throw err
100
+ })
101
+
102
+ localStorage.setItem(
103
+ previousConnectWalletAdapterIdLocalStorageKey,
104
+ adapterId,
105
+ )
106
+
107
+ this.connectedInfoState.setValue({ adapterId, adapter: finalAdapter })
108
+ }
109
+
110
+ async disconnect(): Promise<void> {
111
+ const info = this.connectedInfoState.getValue()
112
+ if (info == null) return
113
+ await this.disconnectAdapter(info.adapter)
114
+ this.connectedInfoState.setValue(null)
115
+ }
116
+ private async disconnectAdapter(adapter: WalletAdapter): Promise<void> {
117
+ await adapter.disconnect()
118
+ localStorage.removeItem(previousConnectWalletAdapterIdLocalStorageKey)
119
+ }
120
+
121
+ private async autoConnect(): Promise<void> {
122
+ if (this.isConnected || this.autoConnectRunning) return
123
+
124
+ const previousAdapterId = this.previousConnectedWallet
125
+ if (previousAdapterId == null) return
126
+
127
+ const adapter = this.availableAdaptersState
128
+ .getValue()
129
+ .find(a => a[0] === previousAdapterId)?.[1]
130
+ if (adapter == null) return
131
+
132
+ this.autoConnectRunning = true
133
+ try {
134
+ await adapter.getAddresses()
135
+ } catch (err: unknown) {
136
+ if (err instanceof WalletAdapterNotConnectedError) {
137
+ this.autoConnectRunning = false
138
+ return
139
+ }
140
+
141
+ this.autoConnectRunning = false
142
+ throw err
143
+ }
144
+
145
+ try {
146
+ await this.connect(previousAdapterId, adapter)
147
+ } finally {
148
+ this.autoConnectRunning = false
149
+ }
150
+ }
151
+
152
+ private get previousConnectedWallet(): string | undefined {
153
+ const adapterId =
154
+ localStorage.getItem(previousConnectWalletAdapterIdLocalStorageKey) ||
155
+ undefined
156
+
157
+ if (this.Adapters.some(adapter => adapter.adapterId === adapterId)) {
158
+ return adapterId
159
+ }
160
+ return undefined
161
+ }
162
+
163
+ private get isConnected(): boolean {
164
+ return this.connectedInfoState.getValue() != null
165
+ }
166
+ }
@@ -0,0 +1,154 @@
1
+ import { Availability } from "./utils/createAdapterAvailability"
2
+
3
+ export enum WalletAdapterBitcoinNetwork {
4
+ MAINNET = "mainnet",
5
+ TESTNET = "testnet",
6
+ UNKNOWN = "unknown",
7
+ }
8
+
9
+ export enum WalletAdapterAddressPurpose {
10
+ Bitcoin = "bitcoin",
11
+ Ordinals = "ordinals",
12
+ BRC20 = "brc20",
13
+ Runes = "runes",
14
+ }
15
+
16
+ // prettier-ignore
17
+ export enum WalletAdapterAddressType {
18
+ P2SH_P2WPKH = "p2sh-p2wpkh", // aka Nested SegWit
19
+ P2WPKH = "p2wpkh", // aka Native SegWit
20
+ P2TR = "p2tr", // aka Taproot
21
+ P2PKH = "p2pkh", // aka Legacy
22
+ }
23
+
24
+ export enum SignMessageAlgorithm {
25
+ ECDSA = "ECDSA",
26
+ BIP322 = "BIP322",
27
+ }
28
+ export type SignMessageResult =
29
+ | SignMessageResult.ECDSA
30
+ | SignMessageResult.BIP322
31
+ export namespace SignMessageResult {
32
+ export interface ECDSA {
33
+ algorithm: SignMessageAlgorithm.ECDSA
34
+ result: string
35
+ address: string
36
+ publicKey: string
37
+ }
38
+
39
+ export interface BIP322 {
40
+ algorithm: SignMessageAlgorithm.BIP322
41
+ result: string
42
+ address: string
43
+ }
44
+ }
45
+
46
+ export interface WalletAdapterAddressBasic {
47
+ addressType: WalletAdapterAddressType
48
+ address: string
49
+ scriptPubKey: string
50
+ }
51
+
52
+ export interface WalletAdapterAddressWithPublicKey {
53
+ /**
54
+ * Some wallet may won't give us the public key of the address, like Xverse
55
+ */
56
+ publicKey: string
57
+ }
58
+
59
+ export interface WalletAdapterAddressWithRedeemScript {
60
+ /**
61
+ * Some address is SH address, which requires redeem script to spend, like Xverse
62
+ */
63
+ redeemScript: string
64
+ }
65
+
66
+ export interface WalletAdapterAddressWithTapInternalKey {
67
+ /**
68
+ * Some address is taproot address, which requires taproot internal key to spend.
69
+ */
70
+ tapInternalKey: string
71
+ }
72
+
73
+ export interface WalletAdapterAddress extends Partial<
74
+ WalletAdapterAddressWithPublicKey &
75
+ WalletAdapterAddressWithRedeemScript &
76
+ WalletAdapterAddressWithTapInternalKey
77
+ > {
78
+ addressType: WalletAdapterAddressType
79
+ address: string
80
+ scriptPubKey: string
81
+ network: WalletAdapterBitcoinNetwork
82
+ purposes: WalletAdapterAddressPurpose[]
83
+ }
84
+
85
+ export interface WalletAdapterMetadata {
86
+ name: string
87
+ iconUrl: Promise<string>
88
+ websiteUrl: string
89
+ downloadUrl: string
90
+ }
91
+
92
+ export interface WalletAdapterStatic<T extends WalletAdapter> {
93
+ adapterId: string
94
+ metadata: WalletAdapterMetadata
95
+ getAdapter(): Availability<T>
96
+ }
97
+
98
+ export type WalletAdapter_onAddressesChanged_callback = (data: {
99
+ addresses: WalletAdapterAddress[]
100
+ }) => void
101
+
102
+ export interface WalletAdapter {
103
+ connect(): Promise<void>
104
+
105
+ disconnect(): Promise<void>
106
+
107
+ getAddresses(): Promise<WalletAdapterAddress[]>
108
+ onAddressesChanged(callback: WalletAdapter_onAddressesChanged_callback): {
109
+ unsubscribe: () => void
110
+ }
111
+
112
+ signMessage(address: string, message: string): Promise<SignMessageResult>
113
+
114
+ readonly sendBitcoinFeeRateCapability:
115
+ | "unavailable"
116
+ | "available"
117
+ | "required"
118
+ sendBitcoin(
119
+ fromAddress: string,
120
+ receiverAddress: string,
121
+ satoshiAmount: bigint,
122
+ options?: { feeRate?: number },
123
+ ): Promise<{ txid: string }>
124
+
125
+ readonly sendInscriptionFeeRateCapability:
126
+ | "unavailable"
127
+ | "available"
128
+ | "required"
129
+ sendInscription?(
130
+ fromAddress: string,
131
+ receiverAddress: string,
132
+ inscriptionId: string,
133
+ options?: { feeRate?: number },
134
+ ): Promise<{ txid: string }>
135
+
136
+ signAndFinalizePsbt(
137
+ psbtHex: string,
138
+ signIndices: [address: string, signIndex: number][],
139
+ ): Promise<{ signedPsbtHex: string }>
140
+ }
141
+
142
+ export class WalletAdapterErrorBase extends Error {
143
+ constructor(message: string) {
144
+ super(message)
145
+ this.name = "WalletAdapterErrorBase"
146
+ }
147
+ }
148
+
149
+ export class WalletAdapterNotConnectedError extends WalletAdapterErrorBase {
150
+ constructor(walletName: string, message?: string) {
151
+ super(message ?? `Wallet ${walletName} is not connected`)
152
+ this.name = "WalletAdapterNotConnectedError"
153
+ }
154
+ }
Binary file
@@ -0,0 +1,4 @@
1
+ <svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="128" height="128" rx="26.8387" fill="#12100F"/>
3
+ <path d="M74.9171 52.7114C82.4766 51.5408 93.4087 43.5804 93.4087 37.3761C93.4087 35.5031 91.8968 34.2154 89.6871 34.2154C85.5004 34.2154 78.4061 40.5368 74.9171 52.7114ZM39.911 83.4991C30.0256 83.4991 29.2115 93.3324 39.0969 93.3324C43.5163 93.3324 48.8661 91.5764 51.6573 88.4157C47.5868 84.9038 44.2141 83.4991 39.911 83.4991ZM102.829 79.2848C103.41 95.7907 95.0369 105.039 80.8484 105.039C72.4748 105.039 68.2881 101.878 59.333 96.0249C54.681 101.176 45.8423 105.039 38.5154 105.039C13.2785 105.039 14.3252 72.8463 40.0273 72.8463C45.3771 72.8463 49.9128 74.2511 55.7277 77.88L59.5656 64.4177C43.7489 60.0864 35.8405 47.9118 43.6326 30.4693H56.1929C49.215 42.0586 53.9832 51.6578 62.822 52.7114C67.5903 35.7372 77.8246 22.509 91.4316 22.509C99.1074 22.509 105.155 27.5428 105.155 36.6737C105.155 51.3066 86.0819 63.2471 71.6607 64.4177L65.7295 85.3721C72.4748 93.2153 91.199 100.824 91.199 79.2848H102.829Z" fill="#F5F1ED"/>
4
+ </svg>
Binary file
package/src/_/okx.png ADDED
Binary file
@@ -0,0 +1,31 @@
1
+ <svg width="180" height="180" viewBox="0 0 180 180" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="180" height="180" fill="black"/>
3
+ <g clip-path="url(#clip0_10050_4171)">
4
+ <path d="M113.66 29.2897L143.97 59.3097C146.55 61.8597 147.82 64.4397 147.78 67.0397C147.74 69.6397 146.63 72.0097 144.46 74.1597C142.19 76.4097 139.74 77.5497 137.12 77.5997C134.5 77.6397 131.9 76.3797 129.32 73.8297L98.3199 43.1297C94.7999 39.6397 91.3999 37.1697 88.1299 35.7197C84.8599 34.2697 81.4199 34.0397 77.8199 35.0397C74.2099 36.0297 70.3399 38.5797 66.1899 42.6797C60.4699 48.3497 57.7399 53.6697 58.0199 58.6397C58.2999 63.6097 61.1399 68.7697 66.5299 74.0997L97.7799 105.06C100.39 107.64 101.67 110.22 101.63 112.78C101.59 115.35 100.47 117.72 98.2599 119.91C96.0599 122.09 93.6299 123.23 90.9899 123.32C88.3499 123.41 85.7199 122.16 83.1199 119.58L52.8099 89.5597C47.8799 84.6797 44.3199 80.0597 42.1299 75.6997C39.9399 71.3397 39.1199 66.4097 39.6899 60.9097C40.1999 56.1997 41.7099 51.6397 44.2299 47.2197C46.7399 42.7997 50.3399 38.2797 55.0099 33.6497C60.5699 28.1397 65.8799 23.9197 70.9399 20.9797C75.9899 18.0397 80.8799 16.4097 85.5999 16.0697C90.3299 15.7297 94.9899 16.6697 99.5999 18.8897C104.21 21.1097 108.89 24.5697 113.65 29.2897H113.66Z" fill="url(#paint0_linear_10050_4171)"/>
5
+ <path d="M66.1099 150.42L35.8099 120.4C33.2299 117.84 31.9599 115.27 31.9999 112.67C32.0399 110.07 33.1499 107.7 35.3199 105.55C37.5899 103.3 40.0399 102.16 42.6599 102.11C45.2799 102.07 47.8799 103.32 50.4599 105.88L81.4499 136.58C84.9799 140.07 88.3699 142.54 91.6399 143.99C94.9099 145.44 98.3499 145.66 101.96 144.67C105.57 143.68 109.44 141.13 113.59 137.02C119.31 131.35 122.04 126.03 121.76 121.06C121.48 116.09 118.64 110.93 113.25 105.59L96.5999 89.2401C93.9899 86.6601 92.7099 84.0801 92.7499 81.5201C92.7899 78.9501 93.9099 76.5801 96.1199 74.3901C98.3199 72.2101 100.75 71.0701 103.39 70.9801C106.03 70.8901 108.66 72.1401 111.26 74.7201L126.96 90.1301C131.89 95.0101 135.45 99.6301 137.64 103.99C139.83 108.35 140.65 113.28 140.08 118.78C139.57 123.49 138.06 128.05 135.54 132.47C133.03 136.89 129.43 141.41 124.76 146.04C119.2 151.55 113.89 155.77 108.83 158.71C103.77 161.65 98.8799 163.29 94.1499 163.63C89.4199 163.97 84.7599 163.03 80.1499 160.81C75.5399 158.59 70.8599 155.13 66.0999 150.41L66.1099 150.42Z" fill="url(#paint1_linear_10050_4171)"/>
6
+ <path d="M85.0099 72.9592C91.1568 72.9592 96.1399 67.9761 96.1399 61.8292C96.1399 55.6823 91.1568 50.6992 85.0099 50.6992C78.863 50.6992 73.8799 55.6823 73.8799 61.8292C73.8799 67.9761 78.863 72.9592 85.0099 72.9592Z" fill="url(#paint2_radial_10050_4171)"/>
7
+ </g>
8
+ <defs>
9
+ <linearGradient id="paint0_linear_10050_4171" x1="138.985" y1="46.7795" x2="45.0529" y2="88.5233" gradientUnits="userSpaceOnUse">
10
+ <stop stop-color="#201C1B"/>
11
+ <stop offset="0.36" stop-color="#77390D"/>
12
+ <stop offset="0.67" stop-color="#EA8101"/>
13
+ <stop offset="1" stop-color="#F4B852"/>
14
+ </linearGradient>
15
+ <linearGradient id="paint1_linear_10050_4171" x1="43.3812" y1="134.167" x2="152.231" y2="101.771" gradientUnits="userSpaceOnUse">
16
+ <stop stop-color="#1F1D1C"/>
17
+ <stop offset="0.37" stop-color="#77390D"/>
18
+ <stop offset="0.67" stop-color="#EA8101"/>
19
+ <stop offset="1" stop-color="#F4FB52"/>
20
+ </linearGradient>
21
+ <radialGradient id="paint2_radial_10050_4171" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(85.0099 61.8392) scale(11.13)">
22
+ <stop stop-color="#F4B852"/>
23
+ <stop offset="0.33" stop-color="#EA8101"/>
24
+ <stop offset="0.64" stop-color="#77390D"/>
25
+ <stop offset="1" stop-color="#211C1D"/>
26
+ </radialGradient>
27
+ <clipPath id="clip0_10050_4171">
28
+ <rect width="115.77" height="147.7" fill="white" transform="translate(32 16)"/>
29
+ </clipPath>
30
+ </defs>
31
+ </svg>
Binary file
@@ -0,0 +1,22 @@
1
+ import {
2
+ UnisatCompatibleProviderAPI,
3
+ UnisatCompatibleWalletAdapterImpl,
4
+ } from "../utils/UnisatCompatibleWalletAdapterImpl"
5
+ import { WalletAdapter } from "../WalletAdapters.types"
6
+
7
+ /**
8
+ * Derivation path (BIP-44): m/44'/0'/0'/0/ address_index
9
+ */
10
+ export class BitgetWalletAdapterImpl
11
+ extends UnisatCompatibleWalletAdapterImpl
12
+ implements WalletAdapter
13
+ {
14
+ constructor(provider: UnisatCompatibleProviderAPI) {
15
+ /**
16
+ * Bitget Provider API:
17
+ *
18
+ * https://web3.bitget.com/zh-CN/docs/provider-api/btc.html
19
+ */
20
+ super(provider, "Bitget")
21
+ }
22
+ }
@@ -0,0 +1,44 @@
1
+ import { createAvailability } from "../utils/createAdapterAvailability"
2
+ import type { UnisatCompatibleProviderAPI } from "../utils/UnisatCompatibleWalletAdapterImpl"
3
+ import type {
4
+ WalletAdapter,
5
+ WalletAdapterMetadata,
6
+ WalletAdapterStatic,
7
+ } from "../WalletAdapters.types"
8
+
9
+ /**
10
+ * Derivation path (BIP-44): m/44'/0'/0'/0/ address_index
11
+ */
12
+
13
+ const adapterId = "bitget.bitcoin"
14
+
15
+ /**
16
+ * https://web3.bitget.com/en/docs/wallet/brand-assets.html
17
+ */
18
+ const metadata: WalletAdapterMetadata = {
19
+ name: "Bitget",
20
+ iconUrl: import("../_/bitget.png").then(m => m.default),
21
+ websiteUrl: "https://web3.bitget.com/",
22
+ downloadUrl: "https://web3.bitget.com/en/wallet-download",
23
+ }
24
+
25
+ const availability = createAvailability<
26
+ UnisatCompatibleProviderAPI,
27
+ WalletAdapter
28
+ >({
29
+ getPrecondition: () =>
30
+ (window as any).bitkeep?.unisat == null
31
+ ? null
32
+ : { value: (window as any).bitkeep.unisat },
33
+ initializer: async provider => {
34
+ const { BitgetWalletAdapterImpl } =
35
+ await import("./BitgetWalletAdapter.impl")
36
+ return new BitgetWalletAdapterImpl(provider)
37
+ },
38
+ })
39
+
40
+ export const BitgetWalletAdapter: WalletAdapterStatic<WalletAdapter> = {
41
+ adapterId,
42
+ metadata,
43
+ getAdapter: () => availability,
44
+ }