@dynamic-labs/bitcoin 3.0.0-alpha.46 → 3.0.0-alpha.48
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.
- package/CHANGELOG.md +34 -0
- package/package.json +5 -5
- package/src/connectors/BitcoinSatsConnectConnector/BitcoinSatsConnectConnector.cjs +54 -15
- package/src/connectors/BitcoinSatsConnectConnector/BitcoinSatsConnectConnector.d.ts +3 -1
- package/src/connectors/BitcoinSatsConnectConnector/BitcoinSatsConnectConnector.js +55 -16
- package/src/connectors/BitcoinWalletConnector.cjs +12 -0
- package/src/connectors/BitcoinWalletConnector.d.ts +1 -0
- package/src/connectors/BitcoinWalletConnector.js +12 -0
- package/src/connectors/FallbackBitcoinConnector/FallbackBitcoinConnector.cjs +7 -0
- package/src/connectors/FallbackBitcoinConnector/FallbackBitcoinConnector.d.ts +1 -0
- package/src/connectors/FallbackBitcoinConnector/FallbackBitcoinConnector.js +7 -0
- package/src/connectors/OkxConnector/OkxConnector.cjs +17 -0
- package/src/connectors/OkxConnector/OkxConnector.d.ts +1 -0
- package/src/connectors/OkxConnector/OkxConnector.js +17 -0
- package/src/connectors/UnisatConnector/UnisatConnector.cjs +17 -0
- package/src/connectors/UnisatConnector/UnisatConnector.d.ts +1 -0
- package/src/connectors/UnisatConnector/UnisatConnector.js +17 -0
- package/src/connectors/UnknownInjected/UnknownInjected.cjs +7 -0
- package/src/connectors/UnknownInjected/UnknownInjected.d.ts +1 -0
- package/src/connectors/UnknownInjected/UnknownInjected.js +7 -0
- package/src/utils/psbt/createSignPsbtOptions.cjs +17 -1
- package/src/utils/psbt/createSignPsbtOptions.d.ts +2 -0
- package/src/utils/psbt/createSignPsbtOptions.js +17 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,38 @@
|
|
|
1
1
|
|
|
2
|
+
## [3.0.0-alpha.48](https://github.com/dynamic-labs/DynamicAuth/compare/v3.0.0-alpha.47...v3.0.0-alpha.48) (2024-08-21)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* collect user data to work when no wallet is selected ([#6670](https://github.com/dynamic-labs/DynamicAuth/issues/6670)) ([b86aae8](https://github.com/dynamic-labs/DynamicAuth/commit/b86aae8e7ceb35793f792941a34cabd19b9e65d4))
|
|
8
|
+
* disable cookie when running on native mobile ([#6668](https://github.com/dynamic-labs/DynamicAuth/issues/6668)) ([e52a3d9](https://github.com/dynamic-labs/DynamicAuth/commit/e52a3d94a9028e36525be2e80a9f0916efad4320))
|
|
9
|
+
* prevent external auth blocking pending user requirements views ([#6669](https://github.com/dynamic-labs/DynamicAuth/issues/6669)) ([848356c](https://github.com/dynamic-labs/DynamicAuth/commit/848356c57e730a8516c642da84274a236e026f40))
|
|
10
|
+
|
|
11
|
+
## [3.0.0-alpha.47](https://github.com/dynamic-labs/DynamicAuth/compare/v3.0.0-alpha.46...v3.0.0-alpha.47) (2024-08-21)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### ⚠ BREAKING CHANGES
|
|
15
|
+
|
|
16
|
+
* rename useSelectWalletOption to useWalletOptions (#6616)
|
|
17
|
+
* stop exposing walletConnectorOptions from dynamic context (#6622)
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* add support for base.eth ens resolution ([#6655](https://github.com/dynamic-labs/DynamicAuth/issues/6655)) ([e2fb1c0](https://github.com/dynamic-labs/DynamicAuth/commit/e2fb1c0ca8410e85b7464d032abc6686bd46149f))
|
|
22
|
+
* expose wallet options from useWalletOptions hook ([#6624](https://github.com/dynamic-labs/DynamicAuth/issues/6624)) ([7287359](https://github.com/dynamic-labs/DynamicAuth/commit/7287359d1564564b87e82bf182edef8ef02c16f1))
|
|
23
|
+
* global wallet chain switching ([#6648](https://github.com/dynamic-labs/DynamicAuth/issues/6648)) ([10179fc](https://github.com/dynamic-labs/DynamicAuth/commit/10179fcddc747977c7dd250abd78bad0ec375f8f))
|
|
24
|
+
* implement Apple Sign-In for mobile ([#6632](https://github.com/dynamic-labs/DynamicAuth/issues/6632)) ([e68b088](https://github.com/dynamic-labs/DynamicAuth/commit/e68b088b1c13c1140b43a6d0c215383455a71a4a))
|
|
25
|
+
* surface mfa rate limit error ([#6658](https://github.com/dynamic-labs/DynamicAuth/issues/6658)) ([5fbcbc2](https://github.com/dynamic-labs/DynamicAuth/commit/5fbcbc2382ebcf2721a308d8e87bc8b2b5cb38cf))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Bug Fixes
|
|
29
|
+
|
|
30
|
+
* update bottom nav border radius ([#6651](https://github.com/dynamic-labs/DynamicAuth/issues/6651)) ([79212c2](https://github.com/dynamic-labs/DynamicAuth/commit/79212c26735eb06f31655e8b98a3d9c2c8371489))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
* rename useSelectWalletOption to useWalletOptions ([#6616](https://github.com/dynamic-labs/DynamicAuth/issues/6616)) ([3850dad](https://github.com/dynamic-labs/DynamicAuth/commit/3850dad47f847ace84aadc63a84c4e62f84f7df2))
|
|
34
|
+
* stop exposing walletConnectorOptions from dynamic context ([#6622](https://github.com/dynamic-labs/DynamicAuth/issues/6622)) ([b9da7db](https://github.com/dynamic-labs/DynamicAuth/commit/b9da7dbfc4020913ba3d95ec496811e9d8ee17b8))
|
|
35
|
+
|
|
2
36
|
## [3.0.0-alpha.46](https://github.com/dynamic-labs/DynamicAuth/compare/v3.0.0-alpha.45...v3.0.0-alpha.46) (2024-08-19)
|
|
3
37
|
|
|
4
38
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/bitcoin",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.48",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/dynamic-labs/dynamic-auth.git",
|
|
@@ -27,14 +27,14 @@
|
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@btckit/types": "0.0.19",
|
|
30
|
-
"@dynamic-labs/sdk-api-core": "0.0.
|
|
30
|
+
"@dynamic-labs/sdk-api-core": "0.0.519",
|
|
31
31
|
"@wallet-standard/app": "1.0.1",
|
|
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": "3.0.0-alpha.
|
|
36
|
-
"@dynamic-labs/wallet-book": "3.0.0-alpha.
|
|
37
|
-
"@dynamic-labs/wallet-connector-core": "3.0.0-alpha.
|
|
35
|
+
"@dynamic-labs/utils": "3.0.0-alpha.48",
|
|
36
|
+
"@dynamic-labs/wallet-book": "3.0.0-alpha.48",
|
|
37
|
+
"@dynamic-labs/wallet-connector-core": "3.0.0-alpha.48",
|
|
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
|
|
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 {
|
|
@@ -8,5 +8,7 @@ export declare abstract class BitcoinSatsConnectConnector extends BitcoinWalletC
|
|
|
8
8
|
signMessage(messageToSign: string): Promise<string | undefined>;
|
|
9
9
|
sendBitcoin(transaction: BitcoinTransaction): Promise<string | undefined>;
|
|
10
10
|
signTransaction(params: SatsConnectSignTransactionInput): Promise<SignTransactionResponse | undefined>;
|
|
11
|
+
signTransactions(transactions: SignMultipleTransactionsPayload): Promise<SignTransactionResponse[] | undefined>;
|
|
11
12
|
signPsbt(request: BitcoinSignPsbtRequest): Promise<BitcoinSignPsbtResponse | undefined>;
|
|
13
|
+
signPsbts(requests: BitcoinSignPsbtRequest[]): Promise<string[] | undefined>;
|
|
12
14
|
}
|
|
@@ -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
|
|
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 };
|
|
@@ -185,6 +185,18 @@ class BitcoinWalletConnector extends walletConnectorCore.WalletConnectorBase {
|
|
|
185
185
|
var _a;
|
|
186
186
|
return (_a = this.bitcoinProviderHelper) === null || _a === void 0 ? void 0 : _a.getProvider();
|
|
187
187
|
}
|
|
188
|
+
signPsbts(requests) {
|
|
189
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
190
|
+
const signedPsbtResponses = [];
|
|
191
|
+
for (const request of requests) {
|
|
192
|
+
const signedPsbtResponse = yield this.signPsbt(request);
|
|
193
|
+
if (signedPsbtResponse) {
|
|
194
|
+
signedPsbtResponses.push(signedPsbtResponse);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return signedPsbtResponses.map((response) => response.signedPsbt);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
188
200
|
setConnectedAccountWithAddresses(_a) {
|
|
189
201
|
return _tslib.__awaiter(this, arguments, void 0, function* ({ mainAddress, ordinalsAddress, paymentAddress, active, }) {
|
|
190
202
|
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;
|
|
@@ -181,6 +181,18 @@ class BitcoinWalletConnector extends WalletConnectorBase {
|
|
|
181
181
|
var _a;
|
|
182
182
|
return (_a = this.bitcoinProviderHelper) === null || _a === void 0 ? void 0 : _a.getProvider();
|
|
183
183
|
}
|
|
184
|
+
signPsbts(requests) {
|
|
185
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
186
|
+
const signedPsbtResponses = [];
|
|
187
|
+
for (const request of requests) {
|
|
188
|
+
const signedPsbtResponse = yield this.signPsbt(request);
|
|
189
|
+
if (signedPsbtResponse) {
|
|
190
|
+
signedPsbtResponses.push(signedPsbtResponse);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return signedPsbtResponses.map((response) => response.signedPsbt);
|
|
194
|
+
});
|
|
195
|
+
}
|
|
184
196
|
setConnectedAccountWithAddresses(_a) {
|
|
185
197
|
return __awaiter(this, arguments, void 0, function* ({ mainAddress, ordinalsAddress, paymentAddress, active, }) {
|
|
186
198
|
if (!mainAddress) {
|
|
@@ -25,6 +25,13 @@ class FallbackBitcoinConnector 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 FallbackBitcoinConnector 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 FallbackBitcoinConnector 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) {
|
|
@@ -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;
|
|
@@ -8,4 +8,5 @@ export declare class OkxConnector extends BitcoinWalletConnector {
|
|
|
8
8
|
signMessage(messageToSign: string): Promise<string | undefined>;
|
|
9
9
|
sendBitcoin(transaction: BitcoinTransaction): Promise<string | undefined>;
|
|
10
10
|
signPsbt(request: BitcoinSignPsbtRequest): Promise<BitcoinSignPsbtResponse | undefined>;
|
|
11
|
+
signPsbts(requests: BitcoinSignPsbtRequest[]): Promise<string[] | undefined>;
|
|
11
12
|
}
|
|
@@ -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 };
|
|
@@ -64,6 +64,23 @@ class UnisatConnector extends BitcoinWalletConnector.BitcoinWalletConnector {
|
|
|
64
64
|
return { signedPsbt: bitcoinjsLib.Psbt.fromHex(signedPsbtHex).toBase64() };
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
|
+
signPsbts(requests) {
|
|
68
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
const provider = this.getProvider();
|
|
70
|
+
if (!provider) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const psbtHexs = [];
|
|
74
|
+
const psbtOptions = [];
|
|
75
|
+
for (const request of requests) {
|
|
76
|
+
const psbtFromBase64 = bitcoinjsLib.Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
77
|
+
psbtHexs.push(psbtFromBase64.toHex());
|
|
78
|
+
psbtOptions.push(createSignPsbtOptions.createPsbtOptions(psbtFromBase64, request));
|
|
79
|
+
}
|
|
80
|
+
const signedPsbtHexs = yield provider.signPsbts(psbtHexs, psbtOptions);
|
|
81
|
+
return signedPsbtHexs.map((signedPsbtHex) => bitcoinjsLib.Psbt.fromHex(signedPsbtHex).toBase64());
|
|
82
|
+
});
|
|
83
|
+
}
|
|
67
84
|
getConnectedAccounts() {
|
|
68
85
|
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
69
86
|
const provider = this.getProvider();
|
|
@@ -8,5 +8,6 @@ export declare class UnisatConnector extends BitcoinWalletConnector {
|
|
|
8
8
|
signMessage(messageToSign: string): Promise<string | undefined>;
|
|
9
9
|
sendBitcoin(transaction: BitcoinTransaction): Promise<string | undefined>;
|
|
10
10
|
signPsbt(request: BitcoinSignPsbtRequest): Promise<BitcoinSignPsbtResponse | undefined>;
|
|
11
|
+
signPsbts(requests: BitcoinSignPsbtRequest[]): Promise<string[] | undefined>;
|
|
11
12
|
getConnectedAccounts(): Promise<string[]>;
|
|
12
13
|
}
|
|
@@ -60,6 +60,23 @@ class UnisatConnector extends BitcoinWalletConnector {
|
|
|
60
60
|
return { signedPsbt: Psbt.fromHex(signedPsbtHex).toBase64() };
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
|
+
signPsbts(requests) {
|
|
64
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
65
|
+
const provider = this.getProvider();
|
|
66
|
+
if (!provider) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const psbtHexs = [];
|
|
70
|
+
const psbtOptions = [];
|
|
71
|
+
for (const request of requests) {
|
|
72
|
+
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
73
|
+
psbtHexs.push(psbtFromBase64.toHex());
|
|
74
|
+
psbtOptions.push(createPsbtOptions(psbtFromBase64, request));
|
|
75
|
+
}
|
|
76
|
+
const signedPsbtHexs = yield provider.signPsbts(psbtHexs, psbtOptions);
|
|
77
|
+
return signedPsbtHexs.map((signedPsbtHex) => Psbt.fromHex(signedPsbtHex).toBase64());
|
|
78
|
+
});
|
|
79
|
+
}
|
|
63
80
|
getConnectedAccounts() {
|
|
64
81
|
return __awaiter(this, void 0, void 0, function* () {
|
|
65
82
|
const provider = this.getProvider();
|
|
@@ -24,6 +24,13 @@ class UnknownInjectedConnector extends BitcoinWalletConnector.BitcoinWalletConne
|
|
|
24
24
|
return;
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
+
signPsbts(
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
29
|
+
_requests) {
|
|
30
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
return;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
27
34
|
sendBitcoin(
|
|
28
35
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
29
36
|
_transaction) {
|
|
@@ -6,5 +6,6 @@ export declare class UnknownInjectedConnector extends BitcoinWalletConnector {
|
|
|
6
6
|
constructor(opts: BitcoinWalletConnectorOpts);
|
|
7
7
|
getAddress(): Promise<string | undefined>;
|
|
8
8
|
signPsbt(_request: BitcoinSignPsbtRequest): Promise<BitcoinSignPsbtResponse | undefined>;
|
|
9
|
+
signPsbts(_requests: BitcoinSignPsbtRequest[]): Promise<string[] | undefined>;
|
|
9
10
|
sendBitcoin(_transaction: BitcoinTransaction): Promise<string | undefined>;
|
|
10
11
|
}
|
|
@@ -20,6 +20,13 @@ class UnknownInjectedConnector extends BitcoinWalletConnector {
|
|
|
20
20
|
return;
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
|
+
signPsbts(
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
25
|
+
_requests) {
|
|
26
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
+
return;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
23
30
|
sendBitcoin(
|
|
24
31
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
25
32
|
_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 };
|