@shapeshiftoss/hdwallet-phantom 1.55.6
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/LICENSE.md +21 -0
- package/dist/adapter.d.ts +20 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +83 -0
- package/dist/adapter.js.map +1 -0
- package/dist/bitcoin.d.ts +13 -0
- package/dist/bitcoin.d.ts.map +1 -0
- package/dist/bitcoin.js +169 -0
- package/dist/bitcoin.js.map +1 -0
- package/dist/ethereum.d.ts +8 -0
- package/dist/ethereum.d.ts.map +1 -0
- package/dist/ethereum.js +138 -0
- package/dist/ethereum.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/phantom.d.ts +86 -0
- package/dist/phantom.d.ts.map +1 -0
- package/dist/phantom.js +394 -0
- package/dist/phantom.js.map +1 -0
- package/dist/types.d.ts +21 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +27 -0
- package/src/adapter.ts +62 -0
- package/src/bitcoin.ts +169 -0
- package/src/ethereum.ts +111 -0
- package/src/index.ts +2 -0
- package/src/phantom.test.ts +179 -0
- package/src/phantom.ts +347 -0
- package/src/types.ts +23 -0
- package/tsconfig.json +10 -0
- package/tsconfig.tsbuildinfo +1 -0
package/dist/phantom.js
ADDED
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.PhantomHDWallet = exports.PhantomHDWalletInfo = void 0;
|
|
39
|
+
exports.isPhantom = isPhantom;
|
|
40
|
+
const core = __importStar(require("@shapeshiftoss/hdwallet-core"));
|
|
41
|
+
const hdwallet_core_1 = require("@shapeshiftoss/hdwallet-core");
|
|
42
|
+
const base64_js_1 = __importDefault(require("base64-js"));
|
|
43
|
+
const bitcoinMsg = __importStar(require("bitcoinjs-message"));
|
|
44
|
+
const utils_js_1 = require("ethers/lib/utils.js");
|
|
45
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
46
|
+
const btc = __importStar(require("./bitcoin"));
|
|
47
|
+
const eth = __importStar(require("./ethereum"));
|
|
48
|
+
function isPhantom(wallet) {
|
|
49
|
+
return lodash_1.default.isObject(wallet) && wallet._isPhantom;
|
|
50
|
+
}
|
|
51
|
+
class PhantomHDWalletInfo {
|
|
52
|
+
constructor(evmProvider) {
|
|
53
|
+
this._supportsBTCInfo = true;
|
|
54
|
+
this._supportsETHInfo = true;
|
|
55
|
+
this.evmProvider = evmProvider;
|
|
56
|
+
}
|
|
57
|
+
getVendor() {
|
|
58
|
+
return "Phantom";
|
|
59
|
+
}
|
|
60
|
+
hasOnDevicePinEntry() {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
hasOnDevicePassphrase() {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
hasOnDeviceDisplay() {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
hasOnDeviceRecovery() {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
73
|
+
hasNativeShapeShift(srcCoin, dstCoin) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
supportsBip44Accounts() {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
supportsOfflineSigning() {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
supportsBroadcast() {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
describePath(msg) {
|
|
86
|
+
switch (msg.coin.toLowerCase()) {
|
|
87
|
+
case "bitcoin": {
|
|
88
|
+
const unknown = core.unknownUTXOPath(msg.path, msg.coin, msg.scriptType);
|
|
89
|
+
if (!msg.scriptType)
|
|
90
|
+
return unknown;
|
|
91
|
+
if (!this.btcSupportsCoin(msg.coin))
|
|
92
|
+
return unknown;
|
|
93
|
+
if (!this.btcSupportsScriptType(msg.coin, msg.scriptType))
|
|
94
|
+
return unknown;
|
|
95
|
+
return core.describeUTXOPath(msg.path, msg.coin, msg.scriptType);
|
|
96
|
+
}
|
|
97
|
+
case "ethereum":
|
|
98
|
+
return core.describeETHPath(msg.path);
|
|
99
|
+
default:
|
|
100
|
+
throw new Error("Unsupported path");
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/** Ethereum */
|
|
104
|
+
ethSupportsNetwork(chainId) {
|
|
105
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
106
|
+
return chainId === 1;
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
ethGetChainId() {
|
|
110
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
111
|
+
try {
|
|
112
|
+
if (!this.evmProvider.request)
|
|
113
|
+
throw new Error("Provider does not support ethereum.request");
|
|
114
|
+
// chainId as hex string
|
|
115
|
+
const chainId = yield this.evmProvider.request({ method: "eth_chainId" });
|
|
116
|
+
return parseInt(chainId, 16);
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
console.error(e);
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
ethSupportsSecureTransfer() {
|
|
125
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
126
|
+
return false;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
ethSupportsNativeShapeShift() {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
ethSupportsEIP1559() {
|
|
133
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
134
|
+
return true;
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
ethGetAccountPaths(msg) {
|
|
138
|
+
return eth.ethGetAccountPaths(msg);
|
|
139
|
+
}
|
|
140
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
141
|
+
ethNextAccountPath(msg) {
|
|
142
|
+
throw new Error("Method not implemented");
|
|
143
|
+
}
|
|
144
|
+
/** Bitcoin */
|
|
145
|
+
btcSupportsCoin(coin) {
|
|
146
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
+
return coin === "bitcoin";
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
btcSupportsScriptType(coin, scriptType) {
|
|
151
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
152
|
+
if (!this.btcSupportsCoin(coin))
|
|
153
|
+
return false;
|
|
154
|
+
switch (scriptType) {
|
|
155
|
+
case core.BTCInputScriptType.SpendWitness:
|
|
156
|
+
return true;
|
|
157
|
+
default:
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
btcSupportsSecureTransfer() {
|
|
163
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
164
|
+
return false;
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
btcSupportsNativeShapeShift() {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
171
|
+
btcGetAccountPaths(msg) {
|
|
172
|
+
return btc.btcGetAccountPaths(msg);
|
|
173
|
+
}
|
|
174
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
175
|
+
btcIsSameAccount(msg) {
|
|
176
|
+
throw new Error("Method not implemented.");
|
|
177
|
+
}
|
|
178
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
179
|
+
btcNextAccountPath(msg) {
|
|
180
|
+
throw new Error("Method not implemented");
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
exports.PhantomHDWalletInfo = PhantomHDWalletInfo;
|
|
184
|
+
class PhantomHDWallet extends PhantomHDWalletInfo {
|
|
185
|
+
constructor(evmProvider, bitcoinProvider) {
|
|
186
|
+
super(evmProvider);
|
|
187
|
+
this._supportsBTC = true;
|
|
188
|
+
this._supportsETH = true;
|
|
189
|
+
this._supportsEthSwitchChain = false;
|
|
190
|
+
this._supportsAvalanche = false;
|
|
191
|
+
this._supportsOptimism = false;
|
|
192
|
+
this._supportsPolygon = true;
|
|
193
|
+
this._supportsGnosis = false;
|
|
194
|
+
this._supportsArbitrum = false;
|
|
195
|
+
this._supportsArbitrumNova = false;
|
|
196
|
+
this._supportsBase = false;
|
|
197
|
+
this._supportsBSC = false;
|
|
198
|
+
this._isPhantom = true;
|
|
199
|
+
this.evmProvider = evmProvider;
|
|
200
|
+
this.bitcoinProvider = bitcoinProvider;
|
|
201
|
+
}
|
|
202
|
+
getDeviceID() {
|
|
203
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
204
|
+
return "phantom:" + (yield this.ethGetAddress());
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
getFeatures() {
|
|
208
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
209
|
+
return {};
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
getFirmwareVersion() {
|
|
213
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
214
|
+
return "phantom";
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
getModel() {
|
|
218
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
219
|
+
return "Phantom";
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
getLabel() {
|
|
223
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
224
|
+
return "Phantom";
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
isInitialized() {
|
|
228
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
229
|
+
return true;
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
isLocked() {
|
|
233
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
234
|
+
return !this.evmProvider._metamask.isUnlocked();
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
clearSession() {
|
|
238
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
239
|
+
}
|
|
240
|
+
initialize() {
|
|
241
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
242
|
+
}
|
|
243
|
+
ping(msg) {
|
|
244
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
245
|
+
return { msg: msg.msg };
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
249
|
+
sendPin(pin) {
|
|
250
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
251
|
+
}
|
|
252
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
253
|
+
sendPassphrase(passphrase) {
|
|
254
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
255
|
+
}
|
|
256
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
257
|
+
sendCharacter(charater) {
|
|
258
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
259
|
+
}
|
|
260
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
261
|
+
sendWord(word) {
|
|
262
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
263
|
+
}
|
|
264
|
+
cancel() {
|
|
265
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
266
|
+
}
|
|
267
|
+
wipe() {
|
|
268
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
269
|
+
}
|
|
270
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
271
|
+
reset(msg) {
|
|
272
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
273
|
+
}
|
|
274
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
275
|
+
recover(msg) {
|
|
276
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
277
|
+
}
|
|
278
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
279
|
+
loadDevice(msg) {
|
|
280
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
281
|
+
}
|
|
282
|
+
disconnect() {
|
|
283
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
284
|
+
}
|
|
285
|
+
getPublicKeys(msg) {
|
|
286
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
287
|
+
return yield Promise.all(msg.map((getPublicKey) => __awaiter(this, void 0, void 0, function* () {
|
|
288
|
+
const { coin, scriptType } = getPublicKey;
|
|
289
|
+
// Only p2wpkh effectively supported for now
|
|
290
|
+
if (coin === "Bitcoin" && scriptType === hdwallet_core_1.BTCInputScriptType.SpendWitness) {
|
|
291
|
+
// Note this is a pubKey, not an xpub, however phantom does not support utxo derivation,
|
|
292
|
+
// so this functions as an account (xpub) for all intents and purposes
|
|
293
|
+
const pubKey = yield this.btcGetAddress({ coin: "Bitcoin" });
|
|
294
|
+
return { xpub: pubKey };
|
|
295
|
+
}
|
|
296
|
+
return null;
|
|
297
|
+
})));
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
/** Ethereum */
|
|
301
|
+
ethGetAddress() {
|
|
302
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
303
|
+
return eth.ethGetAddress(this.evmProvider);
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
307
|
+
ethSignTx(msg) {
|
|
308
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
309
|
+
throw new Error("Method not implemented");
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
ethSendTx(msg) {
|
|
313
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
314
|
+
const address = yield this.ethGetAddress();
|
|
315
|
+
return address ? eth.ethSendTx(msg, this.evmProvider, address) : null;
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
ethSignMessage(msg) {
|
|
319
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
320
|
+
const address = yield this.ethGetAddress();
|
|
321
|
+
return address ? eth.ethSignMessage(msg, this.evmProvider, address) : null;
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
ethSignTypedData(msg) {
|
|
325
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
326
|
+
const address = yield this.ethGetAddress();
|
|
327
|
+
return address ? eth.ethSignTypedData(msg, this.evmProvider, address) : null;
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
ethVerifyMessage(msg) {
|
|
331
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
332
|
+
if (!msg.signature.startsWith("0x"))
|
|
333
|
+
msg.signature = `0x${msg.signature}`;
|
|
334
|
+
const digest = (0, utils_js_1.keccak256)(core.buildMessage(msg.message));
|
|
335
|
+
return (0, utils_js_1.recoverAddress)(digest, msg.signature) === msg.address;
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
/** Bitcoin */
|
|
339
|
+
btcGetAddress(msg) {
|
|
340
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
341
|
+
const value = yield (() => __awaiter(this, void 0, void 0, function* () {
|
|
342
|
+
var _a;
|
|
343
|
+
switch (msg.coin) {
|
|
344
|
+
case "Bitcoin": {
|
|
345
|
+
const accounts = yield this.bitcoinProvider.requestAccounts();
|
|
346
|
+
const paymentAddress = (_a = accounts.find((account) => account.purpose === "payment")) === null || _a === void 0 ? void 0 : _a.address;
|
|
347
|
+
return paymentAddress;
|
|
348
|
+
}
|
|
349
|
+
default:
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
}))();
|
|
353
|
+
if (!value || typeof value !== "string")
|
|
354
|
+
return null;
|
|
355
|
+
return value;
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
btcSignTx(msg) {
|
|
359
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
360
|
+
const { coin } = msg;
|
|
361
|
+
switch (coin) {
|
|
362
|
+
case "Bitcoin":
|
|
363
|
+
return btc.bitcoinSignTx(this, msg, this.bitcoinProvider);
|
|
364
|
+
default:
|
|
365
|
+
return null;
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
btcSignMessage(msg) {
|
|
370
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
371
|
+
const { coin } = msg;
|
|
372
|
+
switch (coin) {
|
|
373
|
+
case "Bitcoin": {
|
|
374
|
+
const address = yield this.btcGetAddress({ coin });
|
|
375
|
+
if (!address)
|
|
376
|
+
throw new Error(`Could not get ${coin} address`);
|
|
377
|
+
const message = new TextEncoder().encode(msg.message);
|
|
378
|
+
const { signature } = yield this.bitcoinProvider.signMessage(address, message);
|
|
379
|
+
return { signature: core.toHexString(signature), address };
|
|
380
|
+
}
|
|
381
|
+
default:
|
|
382
|
+
return null;
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
btcVerifyMessage(msg) {
|
|
387
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
388
|
+
const signature = base64_js_1.default.fromByteArray(core.fromHexString(msg.signature));
|
|
389
|
+
return bitcoinMsg.verify(msg.message, msg.address, signature);
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
exports.PhantomHDWallet = PhantomHDWallet;
|
|
394
|
+
//# sourceMappingURL=phantom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phantom.js","sourceRoot":"","sources":["../src/phantom.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { providers } from "ethers";
|
|
2
|
+
import { BtcAccount } from "./bitcoin";
|
|
3
|
+
export type PhantomEvmProvider = providers.ExternalProvider & {
|
|
4
|
+
_metamask: {
|
|
5
|
+
isUnlocked: () => boolean;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
export type PhantomUtxoProvider = providers.ExternalProvider & {
|
|
9
|
+
requestAccounts: () => Promise<BtcAccount[]>;
|
|
10
|
+
signMessage: (address: string, message: Uint8Array) => Promise<{
|
|
11
|
+
signature: Uint8Array;
|
|
12
|
+
}>;
|
|
13
|
+
signPSBT(psbt: Uint8Array, options: {
|
|
14
|
+
inputsToSign: {
|
|
15
|
+
sigHash?: number | undefined;
|
|
16
|
+
address: string;
|
|
17
|
+
signingIndexes: number[];
|
|
18
|
+
}[];
|
|
19
|
+
}): Promise<Uint8Array>;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,MAAM,kBAAkB,GAAG,SAAS,CAAC,gBAAgB,GAAG;IAC5D,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,OAAO,CAAC;KAC3B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,SAAS,CAAC,gBAAgB,GAAG;IAC7D,eAAe,EAAE,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7C,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,UAAU,KAChB,OAAO,CAAC;QACX,SAAS,EAAE,UAAU,CAAC;KACvB,CAAC,CAAC;IACH,QAAQ,CACN,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE;QAAE,YAAY,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,EAAE,CAAA;SAAE,EAAE,CAAA;KAAE,GACvG,OAAO,CAAC,UAAU,CAAC,CAAC;CACxB,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@shapeshiftoss/hdwallet-phantom",
|
|
3
|
+
"version": "1.55.6",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"source": "src/index.ts",
|
|
10
|
+
"types": "dist/index.d.ts",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc --build",
|
|
13
|
+
"clean": "rm -rf dist node_modules tsconfig.tsbuildinfo",
|
|
14
|
+
"prepublishOnly": "yarn clean && yarn build"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@shapeshiftoss/bitcoinjs-lib": "5.2.0-shapeshift.2",
|
|
18
|
+
"@shapeshiftoss/hdwallet-core": "1.55.6",
|
|
19
|
+
"base64-js": "^1.5.1",
|
|
20
|
+
"bitcoinjs-message": "^2.0.0",
|
|
21
|
+
"lodash": "^4.17.21"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/lodash": "^4.14.168"
|
|
25
|
+
},
|
|
26
|
+
"gitHead": "f7fd72c5fb004c48e99c0b0db8d33d4181e2b80a"
|
|
27
|
+
}
|
package/src/adapter.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as core from "@shapeshiftoss/hdwallet-core";
|
|
2
|
+
|
|
3
|
+
import { PhantomHDWallet } from "./phantom";
|
|
4
|
+
import { PhantomEvmProvider, PhantomUtxoProvider } from "./types";
|
|
5
|
+
|
|
6
|
+
declare global {
|
|
7
|
+
interface Window {
|
|
8
|
+
phantom?: {
|
|
9
|
+
ethereum?: PhantomEvmProvider;
|
|
10
|
+
bitcoin?: PhantomUtxoProvider;
|
|
11
|
+
// TODO: update with proper types once implemented
|
|
12
|
+
// https://github.com/anza-xyz/wallet-adapter/blob/3761cd8cc867da39da7c0b070bbf8779402cff36/packages/wallets/phantom/src/adapter.ts#L36
|
|
13
|
+
solana?: any;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export class PhantomAdapter {
|
|
19
|
+
keyring: core.Keyring;
|
|
20
|
+
|
|
21
|
+
private constructor(keyring: core.Keyring) {
|
|
22
|
+
this.keyring = keyring;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public static useKeyring(keyring: core.Keyring) {
|
|
26
|
+
return new PhantomAdapter(keyring);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public async initialize(): Promise<number> {
|
|
30
|
+
return Object.keys(this.keyring.wallets).length;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public async pairDevice(): Promise<PhantomHDWallet | undefined> {
|
|
34
|
+
const evmProvider = window.phantom?.ethereum;
|
|
35
|
+
const bitcoinProvider = window.phantom?.bitcoin;
|
|
36
|
+
|
|
37
|
+
if (!evmProvider || !bitcoinProvider) {
|
|
38
|
+
window.open("https://phantom.app/", "_blank");
|
|
39
|
+
console.error("Please install Phantom!");
|
|
40
|
+
throw new Error("Phantom provider not found");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
try {
|
|
44
|
+
await evmProvider.request?.({ method: "eth_requestAccounts" }).catch(() =>
|
|
45
|
+
evmProvider.request?.({
|
|
46
|
+
method: "wallet_requestPermissions",
|
|
47
|
+
params: [{ eth_accounts: {} }],
|
|
48
|
+
})
|
|
49
|
+
);
|
|
50
|
+
} catch (error) {
|
|
51
|
+
console.error("Could not get Phantom accounts. ");
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
const wallet = new PhantomHDWallet(evmProvider, bitcoinProvider);
|
|
55
|
+
await wallet.initialize();
|
|
56
|
+
const deviceID = await wallet.getDeviceID();
|
|
57
|
+
this.keyring.add(wallet, deviceID);
|
|
58
|
+
this.keyring.emit(["Phantom", deviceID, core.Events.CONNECT], deviceID);
|
|
59
|
+
|
|
60
|
+
return wallet;
|
|
61
|
+
}
|
|
62
|
+
}
|