@dynamic-labs/bitcoin 2.1.0-alpha.8 → 2.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.
- package/CHANGELOG.md +264 -0
- package/package.json +6 -6
- package/src/bitcoinProviderHelper.cjs +9 -0
- package/src/bitcoinProviderHelper.d.ts +2 -0
- package/src/bitcoinProviderHelper.js +9 -0
- package/src/{BitcoinBtcKitConnector.cjs → connectors/BitcoinBtcKitConnector/BitcoinBtcKitConnector.cjs} +13 -8
- package/src/{BitcoinBtcKitConnector.d.ts → connectors/BitcoinBtcKitConnector/BitcoinBtcKitConnector.d.ts} +2 -2
- package/src/{BitcoinBtcKitConnector.js → connectors/BitcoinBtcKitConnector/BitcoinBtcKitConnector.js} +13 -8
- package/src/connectors/BitcoinBtcKitConnector/index.d.ts +2 -0
- package/src/{BitcoinSatsConnectConnector.cjs → connectors/BitcoinSatsConnectConnector/BitcoinSatsConnectConnector.cjs} +17 -12
- package/src/{BitcoinSatsConnectConnector.d.ts → connectors/BitcoinSatsConnectConnector/BitcoinSatsConnectConnector.d.ts} +3 -2
- package/src/{BitcoinSatsConnectConnector.js → connectors/BitcoinSatsConnectConnector/BitcoinSatsConnectConnector.js} +17 -12
- package/src/connectors/BitcoinSatsConnectConnector/index.d.ts +1 -0
- package/src/{BitcoinWalletConnector.cjs → connectors/BitcoinWalletConnector.cjs} +55 -16
- package/src/{BitcoinWalletConnector.d.ts → connectors/BitcoinWalletConnector.d.ts} +5 -3
- package/src/{BitcoinWalletConnector.js → connectors/BitcoinWalletConnector.js} +55 -16
- package/src/{OkxConnector.cjs → connectors/OkxConnector/OkxConnector.cjs} +24 -5
- package/src/{OkxConnector.d.ts → connectors/OkxConnector/OkxConnector.d.ts} +3 -2
- package/src/{OkxConnector.js → connectors/OkxConnector/OkxConnector.js} +24 -5
- package/src/connectors/OkxConnector/index.d.ts +1 -0
- package/src/connectors/PhantomConnector/PhantomConnector.cjs +147 -0
- package/src/connectors/PhantomConnector/PhantomConnector.d.ts +12 -0
- package/src/connectors/PhantomConnector/PhantomConnector.js +143 -0
- package/src/connectors/PhantomConnector/index.d.ts +1 -0
- package/src/{UnisatConnector.cjs → connectors/UnisatConnector/UnisatConnector.cjs} +8 -4
- package/src/{UnisatConnector.d.ts → connectors/UnisatConnector/UnisatConnector.d.ts} +2 -2
- package/src/{UnisatConnector.js → connectors/UnisatConnector/UnisatConnector.js} +8 -4
- package/src/connectors/UnisatConnector/index.d.ts +1 -0
- package/src/connectors/UnknownInjected/UnknownInjected.cjs +37 -0
- package/src/connectors/UnknownInjected/UnknownInjected.d.ts +11 -0
- package/src/connectors/UnknownInjected/UnknownInjected.js +33 -0
- package/src/connectors/UnknownInjected/index.d.ts +1 -0
- package/src/connectors/index.d.ts +7 -0
- package/src/index.cjs +12 -3
- package/src/index.d.ts +3 -3
- package/src/index.js +12 -3
- package/src/types.d.ts +74 -2
- package/src/utils/base64.cjs +10 -0
- package/src/utils/base64.d.ts +2 -0
- package/src/utils/base64.js +5 -0
- package/src/utils/fetchBtcKitConnectors/fetchBtcKitConnectors.cjs +2 -4
- package/src/utils/fetchBtcKitConnectors/fetchBtcKitConnectors.js +2 -4
- package/src/utils/fetchSatsConnectConnectors/fetchSatsConnectConnectors.cjs +9 -1
- package/src/utils/fetchSatsConnectConnectors/fetchSatsConnectConnectors.js +9 -1
- package/src/utils/psbt/createSignPsbtOptions.cjs +8 -6
- package/src/utils/psbt/createSignPsbtOptions.js +8 -6
- package/src/utils/psbt/index.d.ts +1 -0
- package/src/utils/psbt/sighashNumberToString.cjs +27 -0
- package/src/utils/psbt/sighashNumberToString.d.ts +2 -0
- package/src/utils/psbt/sighashNumberToString.js +23 -0
- package/src/utils/satoshisToBtc/index.d.ts +1 -0
- package/src/utils/satoshisToBtc/satoshisToBtc.cjs +8 -0
- package/src/utils/satoshisToBtc/satoshisToBtc.d.ts +1 -0
- package/src/utils/satoshisToBtc/satoshisToBtc.js +4 -0
- package/src/utils/supportsSatsConnect.d.ts +1 -1
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import { __awaiter } from '../../../_virtual/_tslib.js';
|
|
3
|
+
import { Psbt } from 'bitcoinjs-lib';
|
|
4
|
+
import { logger } from '@dynamic-labs/wallet-connector-core';
|
|
5
|
+
import { isMobile, handleMobileWalletRedirect } from '@dynamic-labs/utils';
|
|
6
|
+
import { BitcoinWalletConnector } from '../BitcoinWalletConnector.js';
|
|
7
|
+
import { createPsbtOptions } from '../../utils/psbt/createSignPsbtOptions.js';
|
|
8
|
+
import 'sats-connect';
|
|
9
|
+
import { sighashNumberToString } from '../../utils/psbt/sighashNumberToString.js';
|
|
10
|
+
import { decodeBase64, encodeBase64 } from '../../utils/base64.js';
|
|
11
|
+
|
|
12
|
+
class PhantomConnector extends BitcoinWalletConnector {
|
|
13
|
+
constructor(opts) {
|
|
14
|
+
super(Object.assign(Object.assign({}, opts), { overrideKey: 'phantombtc' }));
|
|
15
|
+
this.name = 'Phantom';
|
|
16
|
+
this.canFetchConnectedAccounts = true;
|
|
17
|
+
}
|
|
18
|
+
connectWithInstalledExtension() {
|
|
19
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
var _a, _b;
|
|
21
|
+
let paymentAccount, ordinalsAccount;
|
|
22
|
+
if ((_a = this.walletMethods) === null || _a === void 0 ? void 0 : _a.connect) {
|
|
23
|
+
const { accounts } = yield this.walletMethods.connect();
|
|
24
|
+
const parsedAccounts = accounts.map((account) => ({
|
|
25
|
+
address: account.address,
|
|
26
|
+
publicKey: Buffer.from(account.publicKey).toString('base64'),
|
|
27
|
+
}));
|
|
28
|
+
[paymentAccount, ordinalsAccount] = parsedAccounts;
|
|
29
|
+
// in case it only returns one account, we will use it as both payment and ordinals
|
|
30
|
+
if (!ordinalsAccount) {
|
|
31
|
+
ordinalsAccount = paymentAccount;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const provider = this.getProvider();
|
|
36
|
+
if (!provider) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const accounts = yield provider.requestAccounts();
|
|
40
|
+
ordinalsAccount = accounts === null || accounts === void 0 ? void 0 : accounts.find((address) => address.purpose === 'ordinals');
|
|
41
|
+
paymentAccount = accounts === null || accounts === void 0 ? void 0 : accounts.find((address) => address.purpose === 'payment');
|
|
42
|
+
}
|
|
43
|
+
const mainAddress = (_b = ordinalsAccount === null || ordinalsAccount === void 0 ? void 0 : ordinalsAccount.address) !== null && _b !== void 0 ? _b : paymentAccount === null || paymentAccount === void 0 ? void 0 : paymentAccount.address;
|
|
44
|
+
yield this.setConnectedAccountWithAddresses({
|
|
45
|
+
active: true,
|
|
46
|
+
mainAddress,
|
|
47
|
+
ordinalsAddress: ordinalsAccount,
|
|
48
|
+
paymentAddress: paymentAccount,
|
|
49
|
+
});
|
|
50
|
+
return mainAddress;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
getAddress() {
|
|
54
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
55
|
+
if (this.isInstalledOnBrowser()) {
|
|
56
|
+
return this.connectWithInstalledExtension();
|
|
57
|
+
}
|
|
58
|
+
if (isMobile()) {
|
|
59
|
+
handleMobileWalletRedirect({
|
|
60
|
+
nativeLink: 'phantom://browse',
|
|
61
|
+
universalLink: 'https://phantom.app/ul/browse',
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return undefined;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
signMessage(messageToSign) {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
var _a;
|
|
70
|
+
const [walletAddress] = yield this.getConnectedAccounts();
|
|
71
|
+
if (!walletAddress) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if ((_a = this.walletMethods) === null || _a === void 0 ? void 0 : _a.signMessage) {
|
|
75
|
+
const [result] = yield this.walletMethods.signMessage({
|
|
76
|
+
// we need to sign with the ordinals account
|
|
77
|
+
account: { address: walletAddress },
|
|
78
|
+
message: new TextEncoder().encode(messageToSign),
|
|
79
|
+
});
|
|
80
|
+
return Buffer.from(result.signature).toString('base64');
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const provider = this.getProvider();
|
|
84
|
+
if (!provider) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const result = yield provider.signMessage(walletAddress, new TextEncoder().encode(messageToSign));
|
|
88
|
+
return Buffer.from(result.signature).toString('base64');
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
sendBitcoin(transaction) {
|
|
93
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
94
|
+
logger.debug('sendBitcoin - function not implemented', transaction);
|
|
95
|
+
return undefined;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
signPsbt(request) {
|
|
99
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
+
var _a, _b, _c, _d, _e;
|
|
101
|
+
const [walletAddress] = yield this.getConnectedAccounts();
|
|
102
|
+
if (!walletAddress) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const psbtFromBase64 = Psbt.fromBase64(request.unsignedPsbtBase64);
|
|
106
|
+
const psbtOptions = createPsbtOptions(psbtFromBase64, request);
|
|
107
|
+
if ((_a = this.walletMethods) === null || _a === void 0 ? void 0 : _a.signTransaction) {
|
|
108
|
+
const [signedPsbtHex] = yield this.walletMethods.signTransaction({
|
|
109
|
+
inputsToSign: (_c = (_b = psbtOptions.toSignInputs) === null || _b === void 0 ? void 0 : _b.map((input) => ({
|
|
110
|
+
account: { address: input.address },
|
|
111
|
+
sigHash: input.sighashTypes &&
|
|
112
|
+
sighashNumberToString(input.sighashTypes[0]),
|
|
113
|
+
signingIndexes: [input.index],
|
|
114
|
+
}))) !== null && _c !== void 0 ? _c : [],
|
|
115
|
+
psbt: decodeBase64(request.unsignedPsbtBase64),
|
|
116
|
+
});
|
|
117
|
+
return {
|
|
118
|
+
signedPsbt: Buffer.from(signedPsbtHex.signedPsbt).toString('base64'),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
const provider = this.getProvider();
|
|
123
|
+
if (!provider) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const inputsToSign = (_e = (_d = request.signature) === null || _d === void 0 ? void 0 : _d.map((sig) => {
|
|
127
|
+
var _a;
|
|
128
|
+
return ({
|
|
129
|
+
address: sig.address,
|
|
130
|
+
sigHash: request.allowedSighash[0],
|
|
131
|
+
signingIndexes: (_a = sig.signingIndexes) !== null && _a !== void 0 ? _a : [],
|
|
132
|
+
});
|
|
133
|
+
})) !== null && _e !== void 0 ? _e : [];
|
|
134
|
+
const signedPsbt = yield provider.signPSBT(decodeBase64(request.unsignedPsbtBase64), {
|
|
135
|
+
inputsToSign,
|
|
136
|
+
});
|
|
137
|
+
return { signedPsbt: encodeBase64(Uint8Array.from(signedPsbt)) };
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export { PhantomConnector };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PhantomConnector } from './PhantomConnector';
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
|
|
4
4
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
5
|
|
|
6
|
-
var _tslib = require('
|
|
6
|
+
var _tslib = require('../../../_virtual/_tslib.cjs');
|
|
7
7
|
var bitcoinjsLib = require('bitcoinjs-lib');
|
|
8
|
-
var BitcoinWalletConnector = require('
|
|
9
|
-
var createSignPsbtOptions = require('
|
|
8
|
+
var BitcoinWalletConnector = require('../BitcoinWalletConnector.cjs');
|
|
9
|
+
var createSignPsbtOptions = require('../../utils/psbt/createSignPsbtOptions.cjs');
|
|
10
10
|
|
|
11
11
|
class UnisatConnector extends BitcoinWalletConnector.BitcoinWalletConnector {
|
|
12
12
|
constructor(opts) {
|
|
@@ -27,7 +27,11 @@ class UnisatConnector extends BitcoinWalletConnector.BitcoinWalletConnector {
|
|
|
27
27
|
address,
|
|
28
28
|
publicKey,
|
|
29
29
|
};
|
|
30
|
-
yield this.setConnectedAccountWithAddresses(
|
|
30
|
+
yield this.setConnectedAccountWithAddresses({
|
|
31
|
+
active: true,
|
|
32
|
+
mainAddress: address,
|
|
33
|
+
ordinalsAddress: bitcoinAddress,
|
|
34
|
+
});
|
|
31
35
|
return address;
|
|
32
36
|
});
|
|
33
37
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BitcoinWalletConnector, BitcoinWalletConnectorOpts } from '
|
|
2
|
-
import { BitcoinTransaction, BitcoinSignPsbtRequest, BitcoinSignPsbtResponse } from '
|
|
1
|
+
import { BitcoinWalletConnector, BitcoinWalletConnectorOpts } from '../BitcoinWalletConnector';
|
|
2
|
+
import { BitcoinTransaction, BitcoinSignPsbtRequest, BitcoinSignPsbtResponse } from '../../types';
|
|
3
3
|
export declare class UnisatConnector extends BitcoinWalletConnector {
|
|
4
4
|
name: string;
|
|
5
5
|
overrideKey: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client'
|
|
2
|
-
import { __awaiter } from '
|
|
2
|
+
import { __awaiter } from '../../../_virtual/_tslib.js';
|
|
3
3
|
import { Psbt } from 'bitcoinjs-lib';
|
|
4
|
-
import { BitcoinWalletConnector } from '
|
|
5
|
-
import { createPsbtOptions } from '
|
|
4
|
+
import { BitcoinWalletConnector } from '../BitcoinWalletConnector.js';
|
|
5
|
+
import { createPsbtOptions } from '../../utils/psbt/createSignPsbtOptions.js';
|
|
6
6
|
|
|
7
7
|
class UnisatConnector extends BitcoinWalletConnector {
|
|
8
8
|
constructor(opts) {
|
|
@@ -23,7 +23,11 @@ class UnisatConnector extends BitcoinWalletConnector {
|
|
|
23
23
|
address,
|
|
24
24
|
publicKey,
|
|
25
25
|
};
|
|
26
|
-
yield this.setConnectedAccountWithAddresses(
|
|
26
|
+
yield this.setConnectedAccountWithAddresses({
|
|
27
|
+
active: true,
|
|
28
|
+
mainAddress: address,
|
|
29
|
+
ordinalsAddress: bitcoinAddress,
|
|
30
|
+
});
|
|
27
31
|
return address;
|
|
28
32
|
});
|
|
29
33
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { UnisatConnector } from './UnisatConnector';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var _tslib = require('../../../_virtual/_tslib.cjs');
|
|
7
|
+
var BitcoinWalletConnector = require('../BitcoinWalletConnector.cjs');
|
|
8
|
+
|
|
9
|
+
class UnknownInjectedConnector extends BitcoinWalletConnector.BitcoinWalletConnector {
|
|
10
|
+
constructor(opts) {
|
|
11
|
+
super(Object.assign(Object.assign({}, opts), { overrideKey: 'unknown' }));
|
|
12
|
+
this.name = 'Unknown';
|
|
13
|
+
this.overrideKey = 'unknown';
|
|
14
|
+
this.canFetchConnectedAccounts = false;
|
|
15
|
+
}
|
|
16
|
+
getAddress() {
|
|
17
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
return;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
signPsbt(
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
23
|
+
_request) {
|
|
24
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
return;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
sendBitcoin(
|
|
29
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
30
|
+
_transaction) {
|
|
31
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
return;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
exports.UnknownInjectedConnector = UnknownInjectedConnector;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BitcoinSignPsbtRequest, BitcoinSignPsbtResponse, BitcoinTransaction } from '../../types';
|
|
2
|
+
import { BitcoinWalletConnector, BitcoinWalletConnectorOpts } from '../BitcoinWalletConnector';
|
|
3
|
+
export declare class UnknownInjectedConnector extends BitcoinWalletConnector {
|
|
4
|
+
name: string;
|
|
5
|
+
overrideKey: string;
|
|
6
|
+
canFetchConnectedAccounts: boolean;
|
|
7
|
+
constructor(opts: BitcoinWalletConnectorOpts);
|
|
8
|
+
getAddress(): Promise<string | undefined>;
|
|
9
|
+
signPsbt(_request: BitcoinSignPsbtRequest): Promise<BitcoinSignPsbtResponse | undefined>;
|
|
10
|
+
sendBitcoin(_transaction: BitcoinTransaction): Promise<string | undefined>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import { __awaiter } from '../../../_virtual/_tslib.js';
|
|
3
|
+
import { BitcoinWalletConnector } from '../BitcoinWalletConnector.js';
|
|
4
|
+
|
|
5
|
+
class UnknownInjectedConnector extends BitcoinWalletConnector {
|
|
6
|
+
constructor(opts) {
|
|
7
|
+
super(Object.assign(Object.assign({}, opts), { overrideKey: 'unknown' }));
|
|
8
|
+
this.name = 'Unknown';
|
|
9
|
+
this.overrideKey = 'unknown';
|
|
10
|
+
this.canFetchConnectedAccounts = false;
|
|
11
|
+
}
|
|
12
|
+
getAddress() {
|
|
13
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14
|
+
return;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
signPsbt(
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
19
|
+
_request) {
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
return;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
sendBitcoin(
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
26
|
+
_transaction) {
|
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
return;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { UnknownInjectedConnector };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { UnknownInjectedConnector } from './UnknownInjected';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './BitcoinWalletConnector';
|
|
2
|
+
export * from './BitcoinBtcKitConnector';
|
|
3
|
+
export * from './BitcoinSatsConnectConnector';
|
|
4
|
+
export * from './PhantomConnector';
|
|
5
|
+
export * from './OkxConnector';
|
|
6
|
+
export * from './UnisatConnector';
|
|
7
|
+
export * from './UnknownInjected';
|
package/src/index.cjs
CHANGED
|
@@ -3,20 +3,29 @@
|
|
|
3
3
|
|
|
4
4
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
5
|
|
|
6
|
-
var
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
var BitcoinWalletConnector = require('./connectors/BitcoinWalletConnector.cjs');
|
|
7
|
+
require('../_virtual/_tslib.cjs');
|
|
8
|
+
require('sats-connect');
|
|
9
|
+
require('bitcoinjs-lib');
|
|
10
|
+
require('@dynamic-labs/wallet-connector-core');
|
|
11
|
+
require('@dynamic-labs/utils');
|
|
9
12
|
var fetchBtcKitConnectors = require('./utils/fetchBtcKitConnectors/fetchBtcKitConnectors.cjs');
|
|
10
13
|
var fetchSatsConnectConnectors = require('./utils/fetchSatsConnectConnectors/fetchSatsConnectConnectors.cjs');
|
|
11
14
|
var hasSatsConnectFeature = require('./utils/hasSatsConnectFeature.cjs');
|
|
12
15
|
var supportsSatsConnect = require('./utils/supportsSatsConnect.cjs');
|
|
13
16
|
var getMempoolApiUrl = require('./utils/getMempoolApiUrl.cjs');
|
|
17
|
+
var PhantomConnector = require('./connectors/PhantomConnector/PhantomConnector.cjs');
|
|
18
|
+
var OkxConnector = require('./connectors/OkxConnector/OkxConnector.cjs');
|
|
19
|
+
var UnisatConnector = require('./connectors/UnisatConnector/UnisatConnector.cjs');
|
|
20
|
+
var UnknownInjected = require('./connectors/UnknownInjected/UnknownInjected.cjs');
|
|
14
21
|
|
|
15
22
|
const BitcoinWalletConnectors = (props) => [
|
|
16
23
|
...fetchSatsConnectConnectors.fetchSatsConnectConnectors(props),
|
|
17
24
|
...fetchBtcKitConnectors.fetchBtcKitConnectors(props),
|
|
25
|
+
PhantomConnector.PhantomConnector,
|
|
18
26
|
OkxConnector.OkxConnector,
|
|
19
27
|
UnisatConnector.UnisatConnector,
|
|
28
|
+
UnknownInjected.UnknownInjectedConnector,
|
|
20
29
|
];
|
|
21
30
|
|
|
22
31
|
exports.BitcoinWalletConnector = BitcoinWalletConnector.BitcoinWalletConnector;
|
package/src/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { OkxConnector } from './
|
|
2
|
-
export { BitcoinWalletConnector } from './
|
|
1
|
+
import { OkxConnector, UnisatConnector, PhantomConnector } from './connectors';
|
|
2
|
+
export { BitcoinWalletConnector } from './connectors';
|
|
3
3
|
export type { BitcoinTransaction } from './types';
|
|
4
4
|
export * from './utils';
|
|
5
|
-
export declare const BitcoinWalletConnectors: (props: any) => (import("dist/packages/wallet-connector-core/src").WalletConnectorConstructor | typeof OkxConnector)[];
|
|
5
|
+
export declare const BitcoinWalletConnectors: (props: any) => (import("dist/packages/wallet-connector-core/src").WalletConnectorConstructor | typeof PhantomConnector | typeof OkxConnector | typeof UnisatConnector)[];
|
package/src/index.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
'use client'
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
|
|
2
|
+
export { BitcoinWalletConnector } from './connectors/BitcoinWalletConnector.js';
|
|
3
|
+
import '../_virtual/_tslib.js';
|
|
4
|
+
import 'sats-connect';
|
|
5
|
+
import 'bitcoinjs-lib';
|
|
6
|
+
import '@dynamic-labs/wallet-connector-core';
|
|
7
|
+
import '@dynamic-labs/utils';
|
|
5
8
|
import { fetchBtcKitConnectors } from './utils/fetchBtcKitConnectors/fetchBtcKitConnectors.js';
|
|
6
9
|
export { fetchBtcKitConnectors } from './utils/fetchBtcKitConnectors/fetchBtcKitConnectors.js';
|
|
7
10
|
import { fetchSatsConnectConnectors } from './utils/fetchSatsConnectConnectors/fetchSatsConnectConnectors.js';
|
|
@@ -9,12 +12,18 @@ export { fetchSatsConnectConnectors } from './utils/fetchSatsConnectConnectors/f
|
|
|
9
12
|
export { hasSatsConnectFeature } from './utils/hasSatsConnectFeature.js';
|
|
10
13
|
export { supportsSatsConnect } from './utils/supportsSatsConnect.js';
|
|
11
14
|
export { getMempoolApiUrl } from './utils/getMempoolApiUrl.js';
|
|
15
|
+
import { PhantomConnector } from './connectors/PhantomConnector/PhantomConnector.js';
|
|
16
|
+
import { OkxConnector } from './connectors/OkxConnector/OkxConnector.js';
|
|
17
|
+
import { UnisatConnector } from './connectors/UnisatConnector/UnisatConnector.js';
|
|
18
|
+
import { UnknownInjectedConnector } from './connectors/UnknownInjected/UnknownInjected.js';
|
|
12
19
|
|
|
13
20
|
const BitcoinWalletConnectors = (props) => [
|
|
14
21
|
...fetchSatsConnectConnectors(props),
|
|
15
22
|
...fetchBtcKitConnectors(props),
|
|
23
|
+
PhantomConnector,
|
|
16
24
|
OkxConnector,
|
|
17
25
|
UnisatConnector,
|
|
26
|
+
UnknownInjectedConnector,
|
|
18
27
|
];
|
|
19
28
|
|
|
20
29
|
export { BitcoinWalletConnectors };
|
package/src/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { BitcoinProvider, InputToSign } from 'sats-connect';
|
|
1
|
+
import { BitcoinProvider, InputToSign as SatsConnectInputToSign } from 'sats-connect';
|
|
2
2
|
import { SignPsbtResponse as BtcKitSignPsbtResponse } from '@btckit/types';
|
|
3
|
+
import { IdentifierString, WalletAccount } from '@wallet-standard/base';
|
|
3
4
|
import type { WalletAdditionalAddress } from '@dynamic-labs/sdk-api-core';
|
|
4
5
|
import { SATSCONNECT_FEATURE } from './const';
|
|
5
6
|
export type ErrorWithCode = Error & {
|
|
@@ -14,6 +15,12 @@ export type BitcoinAddress = {
|
|
|
14
15
|
address: string;
|
|
15
16
|
publicKey?: string;
|
|
16
17
|
};
|
|
18
|
+
export type ConnectedAccountWithAddressesProps = {
|
|
19
|
+
mainAddress?: string;
|
|
20
|
+
ordinalsAddress?: BitcoinAddress;
|
|
21
|
+
paymentAddress?: BitcoinAddress;
|
|
22
|
+
active?: boolean;
|
|
23
|
+
};
|
|
17
24
|
export type BitcoinConnectedAccount = {
|
|
18
25
|
additionalAddresses: WalletAdditionalAddress[];
|
|
19
26
|
active?: boolean;
|
|
@@ -44,7 +51,7 @@ export type BitcoinSignPsbtRequestSignature = {
|
|
|
44
51
|
export type SatsConnectSignTransactionInput = {
|
|
45
52
|
message?: string;
|
|
46
53
|
psbtBase64: string;
|
|
47
|
-
inputsToSign:
|
|
54
|
+
inputsToSign: SatsConnectInputToSign[];
|
|
48
55
|
broadcast?: boolean;
|
|
49
56
|
};
|
|
50
57
|
export type BtcKitSignPsbtResponseExtended = BtcKitSignPsbtResponse & {
|
|
@@ -55,3 +62,68 @@ export type BtcKitSignPsbtResponseExtended = BtcKitSignPsbtResponse & {
|
|
|
55
62
|
export type BitcoinSignPsbtResponse = {
|
|
56
63
|
signedPsbt: string;
|
|
57
64
|
};
|
|
65
|
+
export type BitcoinAddressPurpose = 'ordinals' | 'payment';
|
|
66
|
+
export interface BitcoinConnectInput {
|
|
67
|
+
purposes: BitcoinAddressPurpose[];
|
|
68
|
+
}
|
|
69
|
+
export interface BitcoinConnectOutput {
|
|
70
|
+
/**
|
|
71
|
+
* The accounts will have addresses that correspond with the `purposes` in the {@link BitcoinConnectInput}, and will
|
|
72
|
+
* be returned in the same order.
|
|
73
|
+
*/
|
|
74
|
+
accounts: WalletAccount[];
|
|
75
|
+
}
|
|
76
|
+
export type BitcoinConnectMethod = (input?: BitcoinConnectInput) => Promise<BitcoinConnectOutput>;
|
|
77
|
+
export type BitcoinSignMessageMethod = (...inputs: BitcoinSignMessageInput[]) => Promise<BitcoinSignMessageOutput[]>;
|
|
78
|
+
export interface BitcoinSignMessageInput {
|
|
79
|
+
/** Account to use. */
|
|
80
|
+
account: WalletAccount;
|
|
81
|
+
/** Message to sign, as raw bytes. */
|
|
82
|
+
message: Uint8Array;
|
|
83
|
+
}
|
|
84
|
+
export interface BitcoinSignMessageOutput {
|
|
85
|
+
/**
|
|
86
|
+
* Message bytes that were signed.
|
|
87
|
+
* The wallet may prefix or otherwise modify the message before signing it.
|
|
88
|
+
*/
|
|
89
|
+
signedMessage: Uint8Array;
|
|
90
|
+
/** Message signature produced. */
|
|
91
|
+
signature: Uint8Array;
|
|
92
|
+
}
|
|
93
|
+
export type BitcoinSignTransactionMethod = (...inputs: BitcoinSignTransactionInput[]) => Promise<BitcoinSignTransactionOutput[]>;
|
|
94
|
+
export interface BitcoinSignTransactionInput {
|
|
95
|
+
/** Partially Signed Bitcoin Transaction (PSBT), as raw bytes. */
|
|
96
|
+
psbt: Uint8Array;
|
|
97
|
+
/** Transaction inputs to sign. */
|
|
98
|
+
inputsToSign: InputToSign[];
|
|
99
|
+
/** Chain to use. */
|
|
100
|
+
chain?: IdentifierString;
|
|
101
|
+
}
|
|
102
|
+
export interface InputToSign {
|
|
103
|
+
/** Account to use. */
|
|
104
|
+
account: WalletAccount;
|
|
105
|
+
/** List of input indexes that should be signed by the account. */
|
|
106
|
+
signingIndexes: number[];
|
|
107
|
+
/** A SIGHASH flag. */
|
|
108
|
+
sigHash?: BitcoinSigHashFlag;
|
|
109
|
+
}
|
|
110
|
+
export interface BitcoinSignTransactionOutput {
|
|
111
|
+
/** Signed Partially Signed Bitcoin Transaction (PSBT), as raw bytes. */
|
|
112
|
+
signedPsbt: Uint8Array;
|
|
113
|
+
}
|
|
114
|
+
/** SIGHASH flag. */
|
|
115
|
+
export type BitcoinSigHashFlag = 'ALL' | 'NONE' | 'SINGLE' | 'ALL|ANYONECANPAY' | 'NONE|ANYONECANPAY' | 'SINGLE|ANYONECANPAY';
|
|
116
|
+
export type BitcoinSignAndSendTransactionMethod = (...inputs: BitcoinSignAndSendTransactionInput[]) => Promise<BitcoinSignAndSendTransactionOutput[]>;
|
|
117
|
+
export interface BitcoinSignAndSendTransactionInput extends BitcoinSignTransactionInput {
|
|
118
|
+
chain: IdentifierString;
|
|
119
|
+
}
|
|
120
|
+
export interface BitcoinSignAndSendTransactionOutput {
|
|
121
|
+
/** Transaction ID (transaction hash). */
|
|
122
|
+
txId: string;
|
|
123
|
+
}
|
|
124
|
+
export type BitcoinWalletStandardMethods = {
|
|
125
|
+
connect?: BitcoinConnectMethod;
|
|
126
|
+
signMessage?: BitcoinSignMessageMethod;
|
|
127
|
+
signTransaction?: BitcoinSignTransactionMethod;
|
|
128
|
+
signAndSendTransaction?: BitcoinSignAndSendTransactionMethod;
|
|
129
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
const decodeBase64 = (base64) => Uint8Array.from(Buffer.from(base64, 'base64'));
|
|
7
|
+
const encodeBase64 = (uint8Array) => Buffer.from(uint8Array).toString('base64');
|
|
8
|
+
|
|
9
|
+
exports.decodeBase64 = decodeBase64;
|
|
10
|
+
exports.encodeBase64 = encodeBase64;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
5
|
|
|
6
6
|
var utils = require('@dynamic-labs/utils');
|
|
7
|
-
var BitcoinBtcKitConnector = require('../../BitcoinBtcKitConnector.cjs');
|
|
7
|
+
var BitcoinBtcKitConnector = require('../../connectors/BitcoinBtcKitConnector/BitcoinBtcKitConnector.cjs');
|
|
8
8
|
var _const = require('../../const.cjs');
|
|
9
9
|
|
|
10
10
|
const fetchBtcKitConnectors = ({ walletBook, }) => {
|
|
@@ -17,11 +17,9 @@ const fetchBtcKitConnectors = ({ walletBook, }) => {
|
|
|
17
17
|
if (!((_b = injectedConfig === null || injectedConfig === void 0 ? void 0 : injectedConfig.windowLocations) === null || _b === void 0 ? void 0 : _b.length))
|
|
18
18
|
return undefined;
|
|
19
19
|
const providers = utils.getProvidersFromWindow(injectedConfig.windowLocations[0]);
|
|
20
|
-
if (!providers.length)
|
|
21
|
-
return undefined;
|
|
22
20
|
return class extends BitcoinBtcKitConnector.BitcoinBtcKitConnector {
|
|
23
21
|
constructor(props) {
|
|
24
|
-
super(Object.assign(Object.assign({}, props), { overrideKey: key, walletData: wallet }), providers[0]);
|
|
22
|
+
super(Object.assign(Object.assign({}, props), { overrideKey: key, walletData: wallet }), providers === null || providers === void 0 ? void 0 : providers[0]);
|
|
25
23
|
this.name = wallet.shortName || wallet.name;
|
|
26
24
|
}
|
|
27
25
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { getProvidersFromWindow } from '@dynamic-labs/utils';
|
|
3
|
-
import { BitcoinBtcKitConnector } from '../../BitcoinBtcKitConnector.js';
|
|
3
|
+
import { BitcoinBtcKitConnector } from '../../connectors/BitcoinBtcKitConnector/BitcoinBtcKitConnector.js';
|
|
4
4
|
import { BTCKIT_INTERFACE } from '../../const.js';
|
|
5
5
|
|
|
6
6
|
const fetchBtcKitConnectors = ({ walletBook, }) => {
|
|
@@ -13,11 +13,9 @@ const fetchBtcKitConnectors = ({ walletBook, }) => {
|
|
|
13
13
|
if (!((_b = injectedConfig === null || injectedConfig === void 0 ? void 0 : injectedConfig.windowLocations) === null || _b === void 0 ? void 0 : _b.length))
|
|
14
14
|
return undefined;
|
|
15
15
|
const providers = getProvidersFromWindow(injectedConfig.windowLocations[0]);
|
|
16
|
-
if (!providers.length)
|
|
17
|
-
return undefined;
|
|
18
16
|
return class extends BitcoinBtcKitConnector {
|
|
19
17
|
constructor(props) {
|
|
20
|
-
super(Object.assign(Object.assign({}, props), { overrideKey: key, walletData: wallet }), providers[0]);
|
|
18
|
+
super(Object.assign(Object.assign({}, props), { overrideKey: key, walletData: wallet }), providers === null || providers === void 0 ? void 0 : providers[0]);
|
|
21
19
|
this.name = wallet.shortName || wallet.name;
|
|
22
20
|
}
|
|
23
21
|
};
|
|
@@ -4,7 +4,15 @@
|
|
|
4
4
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
5
|
|
|
6
6
|
var _const = require('../../const.cjs');
|
|
7
|
-
|
|
7
|
+
require('../../../_virtual/_tslib.cjs');
|
|
8
|
+
require('@dynamic-labs/wallet-connector-core');
|
|
9
|
+
require('@dynamic-labs/wallet-book');
|
|
10
|
+
require('@dynamic-labs/utils');
|
|
11
|
+
require('@dynamic-labs/sdk-api-core');
|
|
12
|
+
require('@wallet-standard/app');
|
|
13
|
+
require('sats-connect');
|
|
14
|
+
require('bitcoinjs-lib');
|
|
15
|
+
var BitcoinSatsConnectConnector = require('../../connectors/BitcoinSatsConnectConnector/BitcoinSatsConnectConnector.cjs');
|
|
8
16
|
|
|
9
17
|
const fetchSatsConnectConnectors = ({ walletBook, }) => {
|
|
10
18
|
var _a;
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { SATSCONNECT_FEATURE } from '../../const.js';
|
|
3
|
-
import
|
|
3
|
+
import '../../../_virtual/_tslib.js';
|
|
4
|
+
import '@dynamic-labs/wallet-connector-core';
|
|
5
|
+
import '@dynamic-labs/wallet-book';
|
|
6
|
+
import '@dynamic-labs/utils';
|
|
7
|
+
import '@dynamic-labs/sdk-api-core';
|
|
8
|
+
import '@wallet-standard/app';
|
|
9
|
+
import 'sats-connect';
|
|
10
|
+
import 'bitcoinjs-lib';
|
|
11
|
+
import { BitcoinSatsConnectConnector } from '../../connectors/BitcoinSatsConnectConnector/BitcoinSatsConnectConnector.js';
|
|
4
12
|
|
|
5
13
|
const fetchSatsConnectConnectors = ({ walletBook, }) => {
|
|
6
14
|
var _a;
|
|
@@ -18,12 +18,14 @@ const createPsbtOptions = (psbt, request) => {
|
|
|
18
18
|
const toSignInputs = [];
|
|
19
19
|
for (const signature of request.signature) {
|
|
20
20
|
if ((_a = signature.signingIndexes) === null || _a === void 0 ? void 0 : _a.length) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
for (const index of signature.signingIndexes) {
|
|
22
|
+
toSignInputs.push({
|
|
23
|
+
address: signature.address,
|
|
24
|
+
disableAddressValidation: signature.disableAddressValidation,
|
|
25
|
+
index,
|
|
26
|
+
sighashTypes: request.allowedSighash,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
31
|
psbtSignOptions.toSignInputs = toSignInputs;
|
|
@@ -14,12 +14,14 @@ const createPsbtOptions = (psbt, request) => {
|
|
|
14
14
|
const toSignInputs = [];
|
|
15
15
|
for (const signature of request.signature) {
|
|
16
16
|
if ((_a = signature.signingIndexes) === null || _a === void 0 ? void 0 : _a.length) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
for (const index of signature.signingIndexes) {
|
|
18
|
+
toSignInputs.push({
|
|
19
|
+
address: signature.address,
|
|
20
|
+
disableAddressValidation: signature.disableAddressValidation,
|
|
21
|
+
index,
|
|
22
|
+
sighashTypes: request.allowedSighash,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
23
25
|
}
|
|
24
26
|
}
|
|
25
27
|
psbtSignOptions.toSignInputs = toSignInputs;
|
|
@@ -2,3 +2,4 @@ export { validatePsbt } from './validator/validatePsbt';
|
|
|
2
2
|
export { getSigHashType } from './getSigHashType';
|
|
3
3
|
export { extractAddressFromInput } from './extractAddressFromInput';
|
|
4
4
|
export { convertNetworkTypeForPsbt } from './bitcoinNetworkTypeToNetworks';
|
|
5
|
+
export { sighashNumberToString } from './sighashNumberToString';
|