@dynamic-labs/bitcoin 2.4.0 → 2.5.1

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 (23) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/package.json +4 -4
  3. package/src/connectors/BitcoinSatsConnectConnector/BitcoinSatsConnectConnector.cjs +54 -15
  4. package/src/connectors/BitcoinSatsConnectConnector/BitcoinSatsConnectConnector.d.ts +3 -1
  5. package/src/connectors/BitcoinSatsConnectConnector/BitcoinSatsConnectConnector.js +55 -16
  6. package/src/connectors/BitcoinWalletConnector.cjs +12 -0
  7. package/src/connectors/BitcoinWalletConnector.d.ts +1 -0
  8. package/src/connectors/BitcoinWalletConnector.js +12 -0
  9. package/src/connectors/FallbackBitcoinConnector/FallbackBitcoinConnector.cjs +7 -0
  10. package/src/connectors/FallbackBitcoinConnector/FallbackBitcoinConnector.d.ts +1 -0
  11. package/src/connectors/FallbackBitcoinConnector/FallbackBitcoinConnector.js +7 -0
  12. package/src/connectors/OkxConnector/OkxConnector.cjs +17 -0
  13. package/src/connectors/OkxConnector/OkxConnector.d.ts +1 -0
  14. package/src/connectors/OkxConnector/OkxConnector.js +17 -0
  15. package/src/connectors/UnisatConnector/UnisatConnector.cjs +17 -0
  16. package/src/connectors/UnisatConnector/UnisatConnector.d.ts +1 -0
  17. package/src/connectors/UnisatConnector/UnisatConnector.js +17 -0
  18. package/src/connectors/UnknownInjected/UnknownInjected.cjs +7 -0
  19. package/src/connectors/UnknownInjected/UnknownInjected.d.ts +1 -0
  20. package/src/connectors/UnknownInjected/UnknownInjected.js +7 -0
  21. package/src/utils/psbt/createSignPsbtOptions.cjs +17 -1
  22. package/src/utils/psbt/createSignPsbtOptions.d.ts +2 -0
  23. package/src/utils/psbt/createSignPsbtOptions.js +17 -2
package/CHANGELOG.md CHANGED
@@ -1,4 +1,23 @@
1
1
 
2
+ ### [2.5.1](https://github.com/dynamic-labs/DynamicAuth/compare/v2.5.0...v2.5.1) (2024-08-25)
3
+
4
+
5
+ ### Bug Fixes
6
+
7
+ * on mobile only check for connection state on the primary wallet ([#6705](https://github.com/dynamic-labs/DynamicAuth/issues/6705)) ([ac2bfe2](https://github.com/dynamic-labs/DynamicAuth/commit/ac2bfe224104da92ada2d57093d24e264a0e0993))
8
+
9
+ ## [2.5.0](https://github.com/dynamic-labs/DynamicAuth/compare/v2.4.0...v2.5.0) (2024-08-22)
10
+
11
+
12
+ ### Features
13
+
14
+ * add signPsbts method to bitcoin connectors ([#6652](https://github.com/dynamic-labs/DynamicAuth/issues/6652)) ([951bfea](https://github.com/dynamic-labs/DynamicAuth/commit/951bfea3ccca52e0fb71eebca23354ba0ae99dca)), closes [#6592](https://github.com/dynamic-labs/DynamicAuth/issues/6592)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * aa export darkmode ([#6659](https://github.com/dynamic-labs/DynamicAuth/issues/6659)) ([cc58054](https://github.com/dynamic-labs/DynamicAuth/commit/cc58054b17cafef28cae1fd1282a0925419719ee))
20
+
2
21
  ## [2.4.0](https://github.com/dynamic-labs/DynamicAuth/compare/v2.3.10...v2.4.0) (2024-08-17)
3
22
 
4
23
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/bitcoin",
3
- "version": "2.4.0",
3
+ "version": "2.5.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/dynamic-labs/dynamic-auth.git",
@@ -32,9 +32,9 @@
32
32
  "@wallet-standard/base": "1.0.1",
33
33
  "bitcoinjs-lib": "6.1.5",
34
34
  "sats-connect": "2.0.0",
35
- "@dynamic-labs/utils": "2.4.0",
36
- "@dynamic-labs/wallet-book": "2.4.0",
37
- "@dynamic-labs/wallet-connector-core": "2.4.0",
35
+ "@dynamic-labs/utils": "2.5.1",
36
+ "@dynamic-labs/wallet-book": "2.5.1",
37
+ "@dynamic-labs/wallet-connector-core": "2.5.1",
38
38
  "stream": "0.0.2"
39
39
  },
40
40
  "peerDependencies": {}
@@ -11,9 +11,8 @@ var walletBook = require('@dynamic-labs/wallet-book');
11
11
  var _const = require('../../const.cjs');
12
12
  require('@dynamic-labs/wallet-connector-core');
13
13
  var BitcoinWalletConnector = require('../BitcoinWalletConnector.cjs');
14
- var validatePsbt = require('../../utils/psbt/validator/validatePsbt.cjs');
15
- var getSigHashType = require('../../utils/psbt/getSigHashType.cjs');
16
14
  var bitcoinNetworkTypeToNetworks = require('../../utils/psbt/bitcoinNetworkTypeToNetworks.cjs');
15
+ var createSignPsbtOptions = require('../../utils/psbt/createSignPsbtOptions.cjs');
17
16
  var supportsSatsConnect = require('../../utils/supportsSatsConnect.cjs');
18
17
 
19
18
  class BitcoinSatsConnectConnector extends BitcoinWalletConnector.BitcoinWalletConnector {
@@ -187,29 +186,44 @@ class BitcoinSatsConnectConnector extends BitcoinWalletConnector.BitcoinWalletCo
187
186
  });
188
187
  });
189
188
  }
189
+ signTransactions(transactions) {
190
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
191
+ const { message, psbts, network } = transactions;
192
+ return new Promise((resolve, reject) => {
193
+ satsConnect.signMultipleTransactions({
194
+ getProvider: () => _tslib.__awaiter(this, void 0, void 0, function* () {
195
+ var _a, _b;
196
+ return (_b = (_a = this.wallet) === null || _a === void 0 ? void 0 : _a.features[_const.SATSCONNECT_FEATURE]) === null || _b === void 0 ? void 0 : _b.provider;
197
+ }),
198
+ onCancel: () => {
199
+ const error = new Error();
200
+ error.code = '-32000'; // error code for user cancelled
201
+ reject(error);
202
+ },
203
+ onFinish: (response) => {
204
+ resolve(response);
205
+ },
206
+ payload: {
207
+ message: message || 'Sign Transaction',
208
+ network,
209
+ psbts,
210
+ },
211
+ });
212
+ });
213
+ });
214
+ }
190
215
  signPsbt(request) {
191
216
  return _tslib.__awaiter(this, void 0, void 0, function* () {
192
- var _a, _b, _c, _d;
217
+ var _a;
193
218
  if (!((_a = request.allowedSighash) === null || _a === void 0 ? void 0 : _a.length))
194
219
  throw new Error('allowedSighash cannot be an empty array');
195
220
  const network = bitcoinNetworkTypeToNetworks.convertNetworkTypeForPsbt(this.currentNetwork);
196
221
  const psbtFromBase64 = bitcoinjsLib.Psbt.fromBase64(request.unsignedPsbtBase64, {
197
222
  network,
198
223
  });
199
- if ((_b = request.signature) === null || _b === void 0 ? void 0 : _b.length) {
200
- validatePsbt.validatePsbt(psbtFromBase64, request.allowedSighash, request.signature);
201
- }
202
- const inputsToSign = ((_d = (_c = request.signature) === null || _c === void 0 ? void 0 : _c.map((sig) => {
203
- var _a;
204
- return ((_a = sig.signingIndexes) !== null && _a !== void 0 ? _a : []).map((inputIndex) => ({
205
- address: sig.address,
206
- sigHash: getSigHashType.getSigHashType(psbtFromBase64.data.inputs[inputIndex]),
207
- signingIndexes: [inputIndex],
208
- }));
209
- })) !== null && _d !== void 0 ? _d : []).flat();
210
224
  const signedPsbt = yield this.signTransaction({
211
225
  broadcast: false,
212
- inputsToSign,
226
+ inputsToSign: createSignPsbtOptions.createSignPsbtOptionsForSatsConnect(psbtFromBase64, request),
213
227
  psbtBase64: request.unsignedPsbtBase64,
214
228
  });
215
229
  if (!signedPsbt) {
@@ -218,6 +232,31 @@ class BitcoinSatsConnectConnector extends BitcoinWalletConnector.BitcoinWalletCo
218
232
  return { signedPsbt: signedPsbt.psbtBase64 };
219
233
  });
220
234
  }
235
+ signPsbts(requests) {
236
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
237
+ var _a;
238
+ const network = bitcoinNetworkTypeToNetworks.convertNetworkTypeForPsbt(this.currentNetwork);
239
+ const signMultipleTransactionPayload = {
240
+ message: 'Sign Transaction',
241
+ network: {
242
+ type: this.currentNetwork,
243
+ },
244
+ psbts: [],
245
+ };
246
+ for (const request of requests) {
247
+ const psbtFromBase64 = bitcoinjsLib.Psbt.fromBase64(request.unsignedPsbtBase64, {
248
+ network,
249
+ });
250
+ const inputsToSign = createSignPsbtOptions.createSignPsbtOptionsForSatsConnect(psbtFromBase64, request);
251
+ signMultipleTransactionPayload.psbts.push({
252
+ inputsToSign,
253
+ psbtBase64: request.unsignedPsbtBase64,
254
+ });
255
+ }
256
+ const signedPsbts = yield this.signTransactions(signMultipleTransactionPayload);
257
+ return (_a = signedPsbts === null || signedPsbts === void 0 ? void 0 : signedPsbts.map((signedPsbts) => signedPsbts.psbtBase64)) !== null && _a !== void 0 ? _a : [];
258
+ });
259
+ }
221
260
  }
222
261
 
223
262
  exports.BitcoinSatsConnectConnector = BitcoinSatsConnectConnector;
@@ -1,4 +1,4 @@
1
- import { BitcoinNetworkType, SignTransactionResponse } from 'sats-connect';
1
+ import { BitcoinNetworkType, SignMultipleTransactionsPayload, SignTransactionResponse } from 'sats-connect';
2
2
  import { BitcoinSignPsbtRequest, BitcoinSignPsbtResponse, BitcoinTransaction, SatsConnectSignTransactionInput } from '../../types';
3
3
  import { BitcoinWalletConnector, BitcoinWalletConnectorOpts } from '../BitcoinWalletConnector';
4
4
  export declare abstract class BitcoinSatsConnectConnector extends BitcoinWalletConnector {
@@ -9,5 +9,7 @@ export declare abstract class BitcoinSatsConnectConnector extends BitcoinWalletC
9
9
  signMessage(messageToSign: string): Promise<string | undefined>;
10
10
  sendBitcoin(transaction: BitcoinTransaction): Promise<string | undefined>;
11
11
  signTransaction(params: SatsConnectSignTransactionInput): Promise<SignTransactionResponse | undefined>;
12
+ signTransactions(transactions: SignMultipleTransactionsPayload): Promise<SignTransactionResponse[] | undefined>;
12
13
  signPsbt(request: BitcoinSignPsbtRequest): Promise<BitcoinSignPsbtResponse | undefined>;
14
+ signPsbts(requests: BitcoinSignPsbtRequest[]): Promise<string[] | undefined>;
13
15
  }
@@ -1,15 +1,14 @@
1
1
  'use client'
2
2
  import { __awaiter } from '../../../_virtual/_tslib.js';
3
3
  import { Psbt } from 'bitcoinjs-lib';
4
- import { BitcoinNetworkType, getAddress, AddressPurpose, signMessage, sendBtcTransaction, signTransaction } from 'sats-connect';
4
+ import { BitcoinNetworkType, getAddress, AddressPurpose, signMessage, sendBtcTransaction, signTransaction, signMultipleTransactions } from 'sats-connect';
5
5
  import { isMobile, template } from '@dynamic-labs/utils';
6
6
  import { findWalletBookWallet } from '@dynamic-labs/wallet-book';
7
7
  import { SATSCONNECT_FEATURE } from '../../const.js';
8
8
  import '@dynamic-labs/wallet-connector-core';
9
9
  import { BitcoinWalletConnector } from '../BitcoinWalletConnector.js';
10
- import { validatePsbt } from '../../utils/psbt/validator/validatePsbt.js';
11
- import { getSigHashType } from '../../utils/psbt/getSigHashType.js';
12
10
  import { convertNetworkTypeForPsbt } from '../../utils/psbt/bitcoinNetworkTypeToNetworks.js';
11
+ import { createSignPsbtOptionsForSatsConnect } from '../../utils/psbt/createSignPsbtOptions.js';
13
12
  import { supportsSatsConnect } from '../../utils/supportsSatsConnect.js';
14
13
 
15
14
  class BitcoinSatsConnectConnector extends BitcoinWalletConnector {
@@ -183,29 +182,44 @@ class BitcoinSatsConnectConnector extends BitcoinWalletConnector {
183
182
  });
184
183
  });
185
184
  }
185
+ signTransactions(transactions) {
186
+ return __awaiter(this, void 0, void 0, function* () {
187
+ const { message, psbts, network } = transactions;
188
+ return new Promise((resolve, reject) => {
189
+ signMultipleTransactions({
190
+ getProvider: () => __awaiter(this, void 0, void 0, function* () {
191
+ var _a, _b;
192
+ return (_b = (_a = this.wallet) === null || _a === void 0 ? void 0 : _a.features[SATSCONNECT_FEATURE]) === null || _b === void 0 ? void 0 : _b.provider;
193
+ }),
194
+ onCancel: () => {
195
+ const error = new Error();
196
+ error.code = '-32000'; // error code for user cancelled
197
+ reject(error);
198
+ },
199
+ onFinish: (response) => {
200
+ resolve(response);
201
+ },
202
+ payload: {
203
+ message: message || 'Sign Transaction',
204
+ network,
205
+ psbts,
206
+ },
207
+ });
208
+ });
209
+ });
210
+ }
186
211
  signPsbt(request) {
187
212
  return __awaiter(this, void 0, void 0, function* () {
188
- var _a, _b, _c, _d;
213
+ var _a;
189
214
  if (!((_a = request.allowedSighash) === null || _a === void 0 ? void 0 : _a.length))
190
215
  throw new Error('allowedSighash cannot be an empty array');
191
216
  const network = convertNetworkTypeForPsbt(this.currentNetwork);
192
217
  const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64, {
193
218
  network,
194
219
  });
195
- if ((_b = request.signature) === null || _b === void 0 ? void 0 : _b.length) {
196
- validatePsbt(psbtFromBase64, request.allowedSighash, request.signature);
197
- }
198
- const inputsToSign = ((_d = (_c = request.signature) === null || _c === void 0 ? void 0 : _c.map((sig) => {
199
- var _a;
200
- return ((_a = sig.signingIndexes) !== null && _a !== void 0 ? _a : []).map((inputIndex) => ({
201
- address: sig.address,
202
- sigHash: getSigHashType(psbtFromBase64.data.inputs[inputIndex]),
203
- signingIndexes: [inputIndex],
204
- }));
205
- })) !== null && _d !== void 0 ? _d : []).flat();
206
220
  const signedPsbt = yield this.signTransaction({
207
221
  broadcast: false,
208
- inputsToSign,
222
+ inputsToSign: createSignPsbtOptionsForSatsConnect(psbtFromBase64, request),
209
223
  psbtBase64: request.unsignedPsbtBase64,
210
224
  });
211
225
  if (!signedPsbt) {
@@ -214,6 +228,31 @@ class BitcoinSatsConnectConnector extends BitcoinWalletConnector {
214
228
  return { signedPsbt: signedPsbt.psbtBase64 };
215
229
  });
216
230
  }
231
+ signPsbts(requests) {
232
+ return __awaiter(this, void 0, void 0, function* () {
233
+ var _a;
234
+ const network = convertNetworkTypeForPsbt(this.currentNetwork);
235
+ const signMultipleTransactionPayload = {
236
+ message: 'Sign Transaction',
237
+ network: {
238
+ type: this.currentNetwork,
239
+ },
240
+ psbts: [],
241
+ };
242
+ for (const request of requests) {
243
+ const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64, {
244
+ network,
245
+ });
246
+ const inputsToSign = createSignPsbtOptionsForSatsConnect(psbtFromBase64, request);
247
+ signMultipleTransactionPayload.psbts.push({
248
+ inputsToSign,
249
+ psbtBase64: request.unsignedPsbtBase64,
250
+ });
251
+ }
252
+ const signedPsbts = yield this.signTransactions(signMultipleTransactionPayload);
253
+ return (_a = signedPsbts === null || signedPsbts === void 0 ? void 0 : signedPsbts.map((signedPsbts) => signedPsbts.psbtBase64)) !== null && _a !== void 0 ? _a : [];
254
+ });
255
+ }
217
256
  }
218
257
 
219
258
  export { BitcoinSatsConnectConnector };
@@ -201,6 +201,18 @@ class BitcoinWalletConnector extends walletConnectorCore.WalletConnectorBase {
201
201
  var _a;
202
202
  return (_a = this.bitcoinProviderHelper) === null || _a === void 0 ? void 0 : _a.getProvider();
203
203
  }
204
+ signPsbts(requests) {
205
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
206
+ const signedPsbtResponses = [];
207
+ for (const request of requests) {
208
+ const signedPsbtResponse = yield this.signPsbt(request);
209
+ if (signedPsbtResponse) {
210
+ signedPsbtResponses.push(signedPsbtResponse);
211
+ }
212
+ }
213
+ return signedPsbtResponses.map((response) => response.signedPsbt);
214
+ });
215
+ }
204
216
  setConnectedAccountWithAddresses(_a) {
205
217
  return _tslib.__awaiter(this, arguments, void 0, function* ({ mainAddress, ordinalsAddress, paymentAddress, active, }) {
206
218
  if (!mainAddress) {
@@ -41,6 +41,7 @@ export declare abstract class BitcoinWalletConnector extends WalletConnectorBase
41
41
  abstract sendBitcoin(transaction: BitcoinTransaction): Promise<string | undefined>;
42
42
  getProvider<T>(): T & EventEmitter;
43
43
  abstract signPsbt(request: BitcoinSignPsbtRequest): Promise<BitcoinSignPsbtResponse | undefined>;
44
+ signPsbts(requests: BitcoinSignPsbtRequest[]): Promise<string[] | undefined>;
44
45
  setConnectedAccountWithAddresses({ mainAddress, ordinalsAddress, paymentAddress, active, }: ConnectedAccountWithAddressesProps): Promise<void>;
45
46
  setupEventListeners(): void;
46
47
  setVerifiedCredentials(verifiedCredentials: JwtVerifiedCredential[]): void;
@@ -197,6 +197,18 @@ class BitcoinWalletConnector extends WalletConnectorBase {
197
197
  var _a;
198
198
  return (_a = this.bitcoinProviderHelper) === null || _a === void 0 ? void 0 : _a.getProvider();
199
199
  }
200
+ signPsbts(requests) {
201
+ return __awaiter(this, void 0, void 0, function* () {
202
+ const signedPsbtResponses = [];
203
+ for (const request of requests) {
204
+ const signedPsbtResponse = yield this.signPsbt(request);
205
+ if (signedPsbtResponse) {
206
+ signedPsbtResponses.push(signedPsbtResponse);
207
+ }
208
+ }
209
+ return signedPsbtResponses.map((response) => response.signedPsbt);
210
+ });
211
+ }
200
212
  setConnectedAccountWithAddresses(_a) {
201
213
  return __awaiter(this, arguments, void 0, function* ({ mainAddress, ordinalsAddress, paymentAddress, active, }) {
202
214
  if (!mainAddress) {
@@ -26,6 +26,13 @@ class FallbackBitcoinConnector extends BitcoinWalletConnector.BitcoinWalletConne
26
26
  return;
27
27
  });
28
28
  }
29
+ signPsbts(
30
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
31
+ _requests) {
32
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
33
+ return;
34
+ });
35
+ }
29
36
  sendBitcoin(
30
37
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
31
38
  _transaction) {
@@ -8,5 +8,6 @@ export declare class FallbackBitcoinConnector extends BitcoinWalletConnector {
8
8
  constructor(opts: BitcoinWalletConnectorOpts);
9
9
  getAddress(): Promise<string | undefined>;
10
10
  signPsbt(_request: BitcoinSignPsbtRequest): Promise<BitcoinSignPsbtResponse | undefined>;
11
+ signPsbts(_requests: BitcoinSignPsbtRequest[]): Promise<string[] | undefined>;
11
12
  sendBitcoin(_transaction: BitcoinTransaction): Promise<string | undefined>;
12
13
  }
@@ -22,6 +22,13 @@ class FallbackBitcoinConnector extends BitcoinWalletConnector {
22
22
  return;
23
23
  });
24
24
  }
25
+ signPsbts(
26
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
27
+ _requests) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ return;
30
+ });
31
+ }
25
32
  sendBitcoin(
26
33
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
27
34
  _transaction) {
@@ -78,6 +78,23 @@ class OkxConnector extends BitcoinWalletConnector.BitcoinWalletConnector {
78
78
  return { signedPsbt: bitcoinjsLib.Psbt.fromHex(signedPsbtHex).toBase64() };
79
79
  });
80
80
  }
81
+ signPsbts(requests) {
82
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
83
+ const provider = this.getProvider();
84
+ if (!provider) {
85
+ return;
86
+ }
87
+ const psbtHexs = [];
88
+ const psbtOptions = [];
89
+ for (const request of requests) {
90
+ const psbt = bitcoinjsLib.Psbt.fromBase64(request.unsignedPsbtBase64);
91
+ psbtHexs.push(psbt.toHex());
92
+ psbtOptions.push(createSignPsbtOptions.createPsbtOptions(psbt, request));
93
+ }
94
+ const signedPsbtHexs = yield provider.signPsbts(psbtHexs, psbtOptions);
95
+ return signedPsbtHexs.map((signedPsbtHex) => bitcoinjsLib.Psbt.fromHex(signedPsbtHex).toBase64());
96
+ });
97
+ }
81
98
  }
82
99
 
83
100
  exports.OkxConnector = OkxConnector;
@@ -9,4 +9,5 @@ export declare class OkxConnector extends BitcoinWalletConnector {
9
9
  signMessage(messageToSign: string): Promise<string | undefined>;
10
10
  sendBitcoin(transaction: BitcoinTransaction): Promise<string | undefined>;
11
11
  signPsbt(request: BitcoinSignPsbtRequest): Promise<BitcoinSignPsbtResponse | undefined>;
12
+ signPsbts(requests: BitcoinSignPsbtRequest[]): Promise<string[] | undefined>;
12
13
  }
@@ -74,6 +74,23 @@ class OkxConnector extends BitcoinWalletConnector {
74
74
  return { signedPsbt: Psbt.fromHex(signedPsbtHex).toBase64() };
75
75
  });
76
76
  }
77
+ signPsbts(requests) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ const provider = this.getProvider();
80
+ if (!provider) {
81
+ return;
82
+ }
83
+ const psbtHexs = [];
84
+ const psbtOptions = [];
85
+ for (const request of requests) {
86
+ const psbt = Psbt.fromBase64(request.unsignedPsbtBase64);
87
+ psbtHexs.push(psbt.toHex());
88
+ psbtOptions.push(createPsbtOptions(psbt, request));
89
+ }
90
+ const signedPsbtHexs = yield provider.signPsbts(psbtHexs, psbtOptions);
91
+ return signedPsbtHexs.map((signedPsbtHex) => Psbt.fromHex(signedPsbtHex).toBase64());
92
+ });
93
+ }
77
94
  }
78
95
 
79
96
  export { OkxConnector };
@@ -65,6 +65,23 @@ class UnisatConnector extends BitcoinWalletConnector.BitcoinWalletConnector {
65
65
  return { signedPsbt: bitcoinjsLib.Psbt.fromHex(signedPsbtHex).toBase64() };
66
66
  });
67
67
  }
68
+ signPsbts(requests) {
69
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
70
+ const provider = this.getProvider();
71
+ if (!provider) {
72
+ return;
73
+ }
74
+ const psbtHexs = [];
75
+ const psbtOptions = [];
76
+ for (const request of requests) {
77
+ const psbtFromBase64 = bitcoinjsLib.Psbt.fromBase64(request.unsignedPsbtBase64);
78
+ psbtHexs.push(psbtFromBase64.toHex());
79
+ psbtOptions.push(createSignPsbtOptions.createPsbtOptions(psbtFromBase64, request));
80
+ }
81
+ const signedPsbtHexs = yield provider.signPsbts(psbtHexs, psbtOptions);
82
+ return signedPsbtHexs.map((signedPsbtHex) => bitcoinjsLib.Psbt.fromHex(signedPsbtHex).toBase64());
83
+ });
84
+ }
68
85
  getConnectedAccounts() {
69
86
  return _tslib.__awaiter(this, void 0, void 0, function* () {
70
87
  const provider = this.getProvider();
@@ -9,5 +9,6 @@ export declare class UnisatConnector extends BitcoinWalletConnector {
9
9
  signMessage(messageToSign: string): Promise<string | undefined>;
10
10
  sendBitcoin(transaction: BitcoinTransaction): Promise<string | undefined>;
11
11
  signPsbt(request: BitcoinSignPsbtRequest): Promise<BitcoinSignPsbtResponse | undefined>;
12
+ signPsbts(requests: BitcoinSignPsbtRequest[]): Promise<string[] | undefined>;
12
13
  getConnectedAccounts(): Promise<string[]>;
13
14
  }
@@ -61,6 +61,23 @@ class UnisatConnector extends BitcoinWalletConnector {
61
61
  return { signedPsbt: Psbt.fromHex(signedPsbtHex).toBase64() };
62
62
  });
63
63
  }
64
+ signPsbts(requests) {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ const provider = this.getProvider();
67
+ if (!provider) {
68
+ return;
69
+ }
70
+ const psbtHexs = [];
71
+ const psbtOptions = [];
72
+ for (const request of requests) {
73
+ const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);
74
+ psbtHexs.push(psbtFromBase64.toHex());
75
+ psbtOptions.push(createPsbtOptions(psbtFromBase64, request));
76
+ }
77
+ const signedPsbtHexs = yield provider.signPsbts(psbtHexs, psbtOptions);
78
+ return signedPsbtHexs.map((signedPsbtHex) => Psbt.fromHex(signedPsbtHex).toBase64());
79
+ });
80
+ }
64
81
  getConnectedAccounts() {
65
82
  return __awaiter(this, void 0, void 0, function* () {
66
83
  const provider = this.getProvider();
@@ -25,6 +25,13 @@ class UnknownInjectedConnector extends BitcoinWalletConnector.BitcoinWalletConne
25
25
  return;
26
26
  });
27
27
  }
28
+ signPsbts(
29
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
30
+ _requests) {
31
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
32
+ return;
33
+ });
34
+ }
28
35
  sendBitcoin(
29
36
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
30
37
  _transaction) {
@@ -7,5 +7,6 @@ export declare class UnknownInjectedConnector extends BitcoinWalletConnector {
7
7
  constructor(opts: BitcoinWalletConnectorOpts);
8
8
  getAddress(): Promise<string | undefined>;
9
9
  signPsbt(_request: BitcoinSignPsbtRequest): Promise<BitcoinSignPsbtResponse | undefined>;
10
+ signPsbts(_requests: BitcoinSignPsbtRequest[]): Promise<string[] | undefined>;
10
11
  sendBitcoin(_transaction: BitcoinTransaction): Promise<string | undefined>;
11
12
  }
@@ -21,6 +21,13 @@ class UnknownInjectedConnector extends BitcoinWalletConnector {
21
21
  return;
22
22
  });
23
23
  }
24
+ signPsbts(
25
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
26
+ _requests) {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ return;
29
+ });
30
+ }
24
31
  sendBitcoin(
25
32
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
26
33
  _transaction) {
@@ -4,8 +4,8 @@
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
6
  var validatePsbt = require('./validator/validatePsbt.cjs');
7
+ var getSigHashType = require('./getSigHashType.cjs');
7
8
  require('bitcoinjs-lib');
8
- require('@dynamic-labs/wallet-connector-core');
9
9
  require('sats-connect');
10
10
 
11
11
  const createPsbtOptions = (psbt, request) => {
@@ -32,5 +32,21 @@ const createPsbtOptions = (psbt, request) => {
32
32
  }
33
33
  return psbtSignOptions;
34
34
  };
35
+ const createSignPsbtOptionsForSatsConnect = (psbtFromBase64, request) => {
36
+ var _a, _b, _c;
37
+ if ((_a = request.signature) === null || _a === void 0 ? void 0 : _a.length) {
38
+ validatePsbt.validatePsbt(psbtFromBase64, request.allowedSighash, request.signature);
39
+ }
40
+ const inputsToSign = ((_c = (_b = request.signature) === null || _b === void 0 ? void 0 : _b.map((sig) => {
41
+ var _a;
42
+ return ((_a = sig.signingIndexes) !== null && _a !== void 0 ? _a : []).map((inputIndex) => ({
43
+ address: sig.address,
44
+ sigHash: getSigHashType.getSigHashType(psbtFromBase64.data.inputs[inputIndex]),
45
+ signingIndexes: [inputIndex],
46
+ }));
47
+ })) !== null && _c !== void 0 ? _c : []).flat();
48
+ return inputsToSign;
49
+ };
35
50
 
36
51
  exports.createPsbtOptions = createPsbtOptions;
52
+ exports.createSignPsbtOptionsForSatsConnect = createSignPsbtOptionsForSatsConnect;
@@ -1,3 +1,5 @@
1
1
  import { Psbt } from 'bitcoinjs-lib';
2
+ import { InputToSign } from 'sats-connect';
2
3
  import { BitcoinSignPsbtRequest, SignPsbtOptions } from '../../types';
3
4
  export declare const createPsbtOptions: (psbt: Psbt, request: BitcoinSignPsbtRequest) => SignPsbtOptions;
5
+ export declare const createSignPsbtOptionsForSatsConnect: (psbtFromBase64: Psbt, request: BitcoinSignPsbtRequest) => InputToSign[];
@@ -1,7 +1,7 @@
1
1
  'use client'
2
2
  import { validatePsbt } from './validator/validatePsbt.js';
3
+ import { getSigHashType } from './getSigHashType.js';
3
4
  import 'bitcoinjs-lib';
4
- import '@dynamic-labs/wallet-connector-core';
5
5
  import 'sats-connect';
6
6
 
7
7
  const createPsbtOptions = (psbt, request) => {
@@ -28,5 +28,20 @@ const createPsbtOptions = (psbt, request) => {
28
28
  }
29
29
  return psbtSignOptions;
30
30
  };
31
+ const createSignPsbtOptionsForSatsConnect = (psbtFromBase64, request) => {
32
+ var _a, _b, _c;
33
+ if ((_a = request.signature) === null || _a === void 0 ? void 0 : _a.length) {
34
+ validatePsbt(psbtFromBase64, request.allowedSighash, request.signature);
35
+ }
36
+ const inputsToSign = ((_c = (_b = request.signature) === null || _b === void 0 ? void 0 : _b.map((sig) => {
37
+ var _a;
38
+ return ((_a = sig.signingIndexes) !== null && _a !== void 0 ? _a : []).map((inputIndex) => ({
39
+ address: sig.address,
40
+ sigHash: getSigHashType(psbtFromBase64.data.inputs[inputIndex]),
41
+ signingIndexes: [inputIndex],
42
+ }));
43
+ })) !== null && _c !== void 0 ? _c : []).flat();
44
+ return inputsToSign;
45
+ };
31
46
 
32
- export { createPsbtOptions };
47
+ export { createPsbtOptions, createSignPsbtOptionsForSatsConnect };