@bitgo/abstract-lightning 1.2.43 → 2.0.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 +15 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/lightning/codecs.d.ts +259 -0
- package/dist/src/lightning/codecs.d.ts.map +1 -0
- package/dist/src/lightning/codecs.js +207 -0
- package/dist/src/lightning/index.d.ts +6 -0
- package/dist/src/lightning/index.d.ts.map +1 -0
- package/dist/src/lightning/index.js +22 -0
- package/dist/src/lightning/lightningUtils.d.ts +59 -0
- package/dist/src/lightning/lightningUtils.d.ts.map +1 -0
- package/dist/src/lightning/lightningUtils.js +224 -0
- package/dist/src/lightning/signableJson.d.ts +17 -0
- package/dist/src/lightning/signableJson.d.ts.map +1 -0
- package/dist/src/lightning/signableJson.js +29 -0
- package/dist/src/lightning/signature.d.ts +22 -0
- package/dist/src/lightning/signature.d.ts.map +1 -0
- package/dist/src/lightning/signature.js +69 -0
- package/dist/src/lightning/wpCodecs.d.ts +48 -0
- package/dist/src/lightning/wpCodecs.d.ts.map +1 -0
- package/dist/src/lightning/wpCodecs.js +86 -0
- package/dist/src/wallet/index.d.ts +3 -0
- package/dist/src/wallet/index.d.ts.map +1 -0
- package/dist/src/wallet/index.js +19 -0
- package/dist/src/wallet/lightning.d.ts +71 -0
- package/dist/src/wallet/lightning.d.ts.map +1 -0
- package/dist/src/wallet/lightning.js +120 -0
- package/dist/src/wallet/wallet.d.ts +7 -0
- package/dist/src/wallet/wallet.d.ts.map +1 -0
- package/dist/src/wallet/wallet.js +15 -0
- package/package.json +12 -4
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import * as sdkcore from '@bitgo/sdk-core';
|
|
2
|
+
import { LightningAuthKeychain, LightningKeychain, UpdateLightningWalletSignedRequest, CreateInvoiceRequest, GetInvoicesQuery, LightningInvoice, InvoiceInfo } from '../lightning';
|
|
3
|
+
export interface ILightningWallet {
|
|
4
|
+
/**
|
|
5
|
+
* Creates a lightning invoice
|
|
6
|
+
* @param {object} params Invoice parameters
|
|
7
|
+
* @param {bigint} params.valueMsat The value of the invoice in millisatoshis
|
|
8
|
+
* @param {string} [params.memo] A memo or description for the invoice
|
|
9
|
+
* @param {number} [params.expiry] The expiry time of the invoice in seconds
|
|
10
|
+
* @returns {Promise<LightningInvoice>} A promise that resolves to the created invoice
|
|
11
|
+
*/
|
|
12
|
+
createInvoice(params: CreateInvoiceRequest): Promise<LightningInvoice>;
|
|
13
|
+
/**
|
|
14
|
+
* Lists current lightning invoices
|
|
15
|
+
* @param {object} params Invoice query parameters
|
|
16
|
+
* @param {string} [params.status] The status of the invoice
|
|
17
|
+
* - open: The invoice is open and awaiting payment
|
|
18
|
+
* - settled: The invoice has been paid
|
|
19
|
+
* - canceled: The invoice has been canceled
|
|
20
|
+
* @param {string} [params.limit] The maximum number of invoices to return
|
|
21
|
+
* @param {Date} [params.startDate] The start date for the query
|
|
22
|
+
* @param {Date} [params.endDate] The end date for the query
|
|
23
|
+
*/
|
|
24
|
+
listInvoices(params: GetInvoicesQuery): Promise<InvoiceInfo[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Pay a lightning invoice
|
|
27
|
+
* @param params Payment parameters (to be defined)
|
|
28
|
+
*/
|
|
29
|
+
payInvoice(params: unknown): Promise<unknown>;
|
|
30
|
+
/**
|
|
31
|
+
* Get the lightning keychain for the given wallet.
|
|
32
|
+
*/
|
|
33
|
+
getLightningKeychain(): Promise<LightningKeychain>;
|
|
34
|
+
/**
|
|
35
|
+
* Get the lightning auth keychains for the given wallet.
|
|
36
|
+
*/
|
|
37
|
+
getLightningAuthKeychains(): Promise<{
|
|
38
|
+
userAuthKey: LightningAuthKeychain;
|
|
39
|
+
nodeAuthKey: LightningAuthKeychain;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Updates the coin-specific configuration for a Lightning Wallet.
|
|
43
|
+
*
|
|
44
|
+
* @param {UpdateLightningWalletSignedRequest} params - The parameters containing the updated wallet-specific details.
|
|
45
|
+
* - `encryptedSignerMacaroon` (optional): This macaroon is used by the watch-only node to ask the signer node to sign transactions.
|
|
46
|
+
* Encrypted with ECDH secret key from private key of wallet's user auth key and public key of lightning service.
|
|
47
|
+
* - `encryptedSignerAdminMacaroon` (optional): Generated when initializing the wallet of the signer node.
|
|
48
|
+
* Encrypted with client's wallet passphrase.
|
|
49
|
+
* - `signerIp` (optional): The IP address of the Lightning signer node.
|
|
50
|
+
* - `encryptedSignerTlsKey` (optional): The wallet passphrase encrypted TLS key of the signer.
|
|
51
|
+
* - `signerTlsCert` (optional): The TLS certificate of the signer.
|
|
52
|
+
* - `watchOnlyAccounts` (optional): These are the accounts used to initialize the watch-only wallet.
|
|
53
|
+
* @param {string} passphrase - wallet passphrase.
|
|
54
|
+
* @returns {Promise<unknown>} A promise resolving to the updated wallet response or throwing an error if the update fails.
|
|
55
|
+
*/
|
|
56
|
+
updateWalletCoinSpecific(params: UpdateLightningWalletSignedRequest, passphrase: string): Promise<unknown>;
|
|
57
|
+
}
|
|
58
|
+
export declare class SelfCustodialLightningWallet implements ILightningWallet {
|
|
59
|
+
wallet: sdkcore.IWallet;
|
|
60
|
+
constructor(wallet: sdkcore.IWallet);
|
|
61
|
+
createInvoice(params: CreateInvoiceRequest): Promise<LightningInvoice>;
|
|
62
|
+
payInvoice(params: unknown): Promise<unknown>;
|
|
63
|
+
listInvoices(params: GetInvoicesQuery): Promise<InvoiceInfo[]>;
|
|
64
|
+
getLightningKeychain(): Promise<LightningKeychain>;
|
|
65
|
+
getLightningAuthKeychains(): Promise<{
|
|
66
|
+
userAuthKey: LightningAuthKeychain;
|
|
67
|
+
nodeAuthKey: LightningAuthKeychain;
|
|
68
|
+
}>;
|
|
69
|
+
updateWalletCoinSpecific(params: UpdateLightningWalletSignedRequest, passphrase: string): Promise<unknown>;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=lightning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightning.d.ts","sourceRoot":"","sources":["../../../src/wallet/lightning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAEL,qBAAqB,EACrB,iBAAiB,EAEjB,kCAAkC,EAClC,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACZ,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;OAOG;IACH,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEvE;;;;;;;;;;OAUG;IACH,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE/D;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9C;;OAEG;IACH,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEnD;;OAEG;IACH,yBAAyB,IAAI,OAAO,CAAC;QAAE,WAAW,EAAE,qBAAqB,CAAC;QAAC,WAAW,EAAE,qBAAqB,CAAA;KAAE,CAAC,CAAC;IAEjH;;;;;;;;;;;;;;OAcG;IACH,wBAAwB,CAAC,MAAM,EAAE,kCAAkC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5G;AAED,qBAAa,4BAA6B,YAAW,gBAAgB;IAC5D,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC;gBAEnB,MAAM,EAAE,OAAO,CAAC,OAAO;IAQ7B,aAAa,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAWtE,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7C,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAW9D,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAWlD,yBAAyB,IAAI,OAAO,CAAC;QACzC,WAAW,EAAE,qBAAqB,CAAC;QACnC,WAAW,EAAE,qBAAqB,CAAC;KACpC,CAAC;IA0BI,wBAAwB,CAAC,MAAM,EAAE,kCAAkC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAuBjH"}
|
|
@@ -0,0 +1,120 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SelfCustodialLightningWallet = void 0;
|
|
37
|
+
const sdkcore = __importStar(require("@bitgo/sdk-core"));
|
|
38
|
+
const t = __importStar(require("io-ts"));
|
|
39
|
+
const lightning_1 = require("../lightning");
|
|
40
|
+
class SelfCustodialLightningWallet {
|
|
41
|
+
constructor(wallet) {
|
|
42
|
+
const coin = wallet.baseCoin;
|
|
43
|
+
if (coin.getFamily() !== 'lnbtc') {
|
|
44
|
+
throw new Error(`Invalid coin to update lightning wallet: ${coin.getFamily()}`);
|
|
45
|
+
}
|
|
46
|
+
this.wallet = wallet;
|
|
47
|
+
}
|
|
48
|
+
async createInvoice(params) {
|
|
49
|
+
const createInvoiceResponse = await this.wallet.bitgo
|
|
50
|
+
.post(this.wallet.baseCoin.url(`/wallet/${this.wallet.id()}/lightning/invoice`))
|
|
51
|
+
.send(lightning_1.CreateInvoiceRequest.encode(params))
|
|
52
|
+
.result();
|
|
53
|
+
return sdkcore.decodeOrElse(lightning_1.LightningInvoice.name, lightning_1.LightningInvoice, createInvoiceResponse, (error) => {
|
|
54
|
+
// DON'T throw errors from decodeOrElse. It could leak sensitive information.
|
|
55
|
+
throw new Error(`Invalid create invoice response ${error}`);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
async payInvoice(params) {
|
|
59
|
+
throw new Error('Method not implemented.');
|
|
60
|
+
}
|
|
61
|
+
async listInvoices(params) {
|
|
62
|
+
const returnCodec = t.array(lightning_1.InvoiceInfo);
|
|
63
|
+
const createInvoiceResponse = await this.wallet.bitgo
|
|
64
|
+
.get(this.wallet.baseCoin.url(`/wallet/${this.wallet.id()}/lightning/invoice`))
|
|
65
|
+
.query(lightning_1.GetInvoicesQuery.encode(params))
|
|
66
|
+
.result();
|
|
67
|
+
return sdkcore.decodeOrElse(returnCodec.name, returnCodec, createInvoiceResponse, (error) => {
|
|
68
|
+
throw new Error(`Invalid list invoices response ${error}`);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
async getLightningKeychain() {
|
|
72
|
+
const keyIds = this.wallet.keyIds();
|
|
73
|
+
if (keyIds.length !== 1) {
|
|
74
|
+
throw new Error(`Invalid number of key in lightning wallet: ${keyIds.length}`);
|
|
75
|
+
}
|
|
76
|
+
const keychain = await this.wallet.baseCoin.keychains().get({ id: keyIds[0] });
|
|
77
|
+
return sdkcore.decodeOrElse(lightning_1.LightningKeychain.name, lightning_1.LightningKeychain, keychain, (_) => {
|
|
78
|
+
throw new Error(`Invalid user key`);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
async getLightningAuthKeychains() {
|
|
82
|
+
const authKeyIds = this.wallet.coinSpecific()?.keys;
|
|
83
|
+
if (authKeyIds?.length !== 2) {
|
|
84
|
+
throw new Error(`Invalid number of auth keys in lightning wallet: ${authKeyIds?.length}`);
|
|
85
|
+
}
|
|
86
|
+
const coin = this.wallet.baseCoin;
|
|
87
|
+
const keychains = await Promise.all(authKeyIds.map((id) => coin.keychains().get({ id })));
|
|
88
|
+
const authKeychains = keychains.map((keychain) => {
|
|
89
|
+
return sdkcore.decodeOrElse(lightning_1.LightningAuthKeychain.name, lightning_1.LightningAuthKeychain, keychain, (_) => {
|
|
90
|
+
// DON'T throw errors from decodeOrElse. It could leak sensitive information.
|
|
91
|
+
throw new Error(`Invalid lightning auth key: ${keychain?.id}`);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
const [userAuthKey, nodeAuthKey] = ['userAuth', 'nodeAuth'].map((purpose) => {
|
|
95
|
+
const keychain = authKeychains.find((k) => (0, lightning_1.unwrapLightningCoinSpecific)(k.coinSpecific, coin.getChain()).purpose === purpose);
|
|
96
|
+
if (!keychain) {
|
|
97
|
+
throw new Error(`Missing ${purpose} key`);
|
|
98
|
+
}
|
|
99
|
+
return keychain;
|
|
100
|
+
});
|
|
101
|
+
return { userAuthKey, nodeAuthKey };
|
|
102
|
+
}
|
|
103
|
+
async updateWalletCoinSpecific(params, passphrase) {
|
|
104
|
+
sdkcore.decodeOrElse(lightning_1.UpdateLightningWalletSignedRequest.name, lightning_1.UpdateLightningWalletSignedRequest, params, (errors) => {
|
|
105
|
+
// DON'T throw errors from decodeOrElse. It could leak sensitive information.
|
|
106
|
+
throw new Error(`Invalid params for lightning specific update wallet: ${errors}`);
|
|
107
|
+
});
|
|
108
|
+
const { userAuthKey } = await this.getLightningAuthKeychains();
|
|
109
|
+
const signature = (0, lightning_1.createMessageSignature)(params, this.wallet.bitgo.decrypt({ password: passphrase, input: userAuthKey.encryptedPrv }));
|
|
110
|
+
const coinSpecific = {
|
|
111
|
+
[this.wallet.coin()]: {
|
|
112
|
+
signedRequest: params,
|
|
113
|
+
signature,
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
return await this.wallet.bitgo.put(this.wallet.url()).send({ coinSpecific }).result();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
exports.SelfCustodialLightningWallet = SelfCustodialLightningWallet;
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dhbGxldC9saWdodG5pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseURBQTJDO0FBQzNDLHlDQUEyQjtBQUMzQiw0Q0FVc0I7QUE0RHRCLE1BQWEsNEJBQTRCO0lBR3ZDLFlBQVksTUFBdUI7UUFDakMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUE0QjtRQUM5QyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO2FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2FBQy9FLElBQUksQ0FBQyxnQ0FBb0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDekMsTUFBTSxFQUFFLENBQUM7UUFDWixPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsNEJBQWdCLENBQUMsSUFBSSxFQUFFLDRCQUFnQixFQUFFLHFCQUFxQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEcsNkVBQTZFO1lBQzdFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFD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LElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRTtnQkFDcEIsYUFBYSxFQUFFLE1BQU07Z0JBQ3JCLFNBQVM7YUFDVjtTQUNGLENBQUM7UUFDRixPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3hGLENBQUM7Q0FDRjtBQXBHRCxvRUFvR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzZGtjb3JlIGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7XG4gIGNyZWF0ZU1lc3NhZ2VTaWduYXR1cmUsXG4gIExpZ2h0bmluZ0F1dGhLZXljaGFpbixcbiAgTGlnaHRuaW5nS2V5Y2hhaW4sXG4gIHVud3JhcExpZ2h0bmluZ0NvaW5TcGVjaWZpYyxcbiAgVXBkYXRlTGlnaHRuaW5nV2FsbGV0U2lnbmVkUmVxdWVzdCxcbiAgQ3JlYXRlSW52b2ljZVJlcXVlc3QsXG4gIEdldEludm9pY2VzUXVlcnksXG4gIExpZ2h0bmluZ0ludm9pY2UsXG4gIEludm9pY2VJbmZvLFxufSBmcm9tICcuLi9saWdodG5pbmcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElMaWdodG5pbmdXYWxsZXQge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGxpZ2h0bmluZyBpbnZvaWNlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXMgSW52b2ljZSBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7YmlnaW50fSBwYXJhbXMudmFsdWVNc2F0IFRoZSB2YWx1ZSBvZiB0aGUgaW52b2ljZSBpbiBtaWxsaXNhdG9zaGlzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLm1lbW9dIEEgbWVtbyBvciBkZXNjcmlwdGlvbiBmb3IgdGhlIGludm9pY2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMuZXhwaXJ5XSBUaGUgZXhwaXJ5IHRpbWUgb2YgdGhlIGludm9pY2UgaW4gc2Vjb25kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMaWdodG5pbmdJbnZvaWNlPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNyZWF0ZWQgaW52b2ljZVxuICAgKi9cbiAgY3JlYXRlSW52b2ljZShwYXJhbXM6IENyZWF0ZUludm9pY2VSZXF1ZXN0KTogUHJvbWlzZTxMaWdodG5pbmdJbnZvaWNlPjtcblxuICAvKipcbiAgICogTGlzdHMgY3VycmVudCBsaWdodG5pbmcgaW52b2ljZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyBJbnZvaWNlIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMuc3RhdHVzXSBUaGUgc3RhdHVzIG9mIHRoZSBpbnZvaWNlXG4gICAqICAtIG9wZW46IFRoZSBpbnZvaWNlIGlzIG9wZW4gYW5kIGF3YWl0aW5nIHBheW1lbnRcbiAgICogIC0gc2V0dGxlZDogVGhlIGludm9pY2UgaGFzIGJlZW4gcGFpZFxuICAgKiAgLSBjYW5jZWxlZDogVGhlIGludm9pY2UgaGFzIGJlZW4gY2FuY2VsZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMubGltaXRdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnZvaWNlcyB0byByZXR1cm5cbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLnN0YXJ0RGF0ZV0gVGhlIHN0YXJ0IGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuZW5kRGF0ZV0gVGhlIGVuZCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICovXG4gIGxpc3RJbnZvaWNlcyhwYXJhbXM6IEdldEludm9pY2VzUXVlcnkpOiBQcm9taXNlPEludm9pY2VJbmZvW10+O1xuXG4gIC8qKlxuICAgKiBQYXkgYSBsaWdodG5pbmcgaW52b2ljZVxuICAgKiBAcGFyYW0gcGFyYW1zIFBheW1lbnQgcGFyYW1ldGVycyAodG8gYmUgZGVmaW5lZClcbiAgICovXG4gIHBheUludm9pY2UocGFyYW1zOiB1bmtub3duKTogUHJvbWlzZTx1bmtub3duPjtcblxuICAvKipcbiAgICogR2V0IHRoZSBsaWdodG5pbmcga2V5Y2hhaW4gZm9yIHRoZSBnaXZlbiB3YWxsZXQuXG4gICAqL1xuICBnZXRMaWdodG5pbmdLZXljaGFpbigpOiBQcm9taXNlPExpZ2h0bmluZ0tleWNoYWluPjtcblxuICAvKipcbiAgICogR2V0IHRoZSBsaWdodG5pbmcgYXV0aCBrZXljaGFpbnMgZm9yIHRoZSBnaXZlbiB3YWxsZXQuXG4gICAqL1xuICBnZXRMaWdodG5pbmdBdXRoS2V5Y2hhaW5zKCk6IFByb21pc2U8eyB1c2VyQXV0aEtleTogTGlnaHRuaW5nQXV0aEtleWNoYWluOyBub2RlQXV0aEtleTogTGlnaHRuaW5nQXV0aEtleWNoYWluIH0+O1xuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb2luLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIGEgTGlnaHRuaW5nIFdhbGxldC5cbiAgICpcbiAgICogQHBhcmFtIHtVcGRhdGVMaWdodG5pbmdXYWxsZXRTaWduZWRSZXF1ZXN0fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBjb250YWluaW5nIHRoZSB1cGRhdGVkIHdhbGxldC1zcGVjaWZpYyBkZXRhaWxzLlxuICAgKiAgIC0gYGVuY3J5cHRlZFNpZ25lck1hY2Fyb29uYCAob3B0aW9uYWwpOiBUaGlzIG1hY2Fyb29uIGlzIHVzZWQgYnkgdGhlIHdhdGNoLW9ubHkgbm9kZSB0byBhc2sgdGhlIHNpZ25lciBub2RlIHRvIHNpZ24gdHJhbnNhY3Rpb25zLlxuICAgKiAgICAgRW5jcnlwdGVkIHdpdGggRUNESCBzZWNyZXQga2V5IGZyb20gcHJpdmF0ZSBrZXkgb2Ygd2FsbGV0J3MgdXNlciBhdXRoIGtleSBhbmQgcHVibGljIGtleSBvZiBsaWdodG5pbmcgc2VydmljZS5cbiAgICogICAtIGBlbmNyeXB0ZWRTaWduZXJBZG1pbk1hY2Fyb29uYCAob3B0aW9uYWwpOiBHZW5lcmF0ZWQgd2hlbiBpbml0aWFsaXppbmcgdGhlIHdhbGxldCBvZiB0aGUgc2lnbmVyIG5vZGUuXG4gICAqICAgICBFbmNyeXB0ZWQgd2l0aCBjbGllbnQncyB3YWxsZXQgcGFzc3BocmFzZS5cbiAgICogICAtIGBzaWduZXJJcGAgKG9wdGlvbmFsKTogVGhlIElQIGFkZHJlc3Mgb2YgdGhlIExpZ2h0bmluZyBzaWduZXIgbm9kZS5cbiAgICogICAtIGBlbmNyeXB0ZWRTaWduZXJUbHNLZXlgIChvcHRpb25hbCk6IFRoZSB3YWxsZXQgcGFzc3BocmFzZSBlbmNyeXB0ZWQgVExTIGtleSBvZiB0aGUgc2lnbmVyLlxuICAgKiAgIC0gYHNpZ25lclRsc0NlcnRgIChvcHRpb25hbCk6IFRoZSBUTFMgY2VydGlmaWNhdGUgb2YgdGhlIHNpZ25lci5cbiAgICogICAtIGB3YXRjaE9ubHlBY2NvdW50c2AgKG9wdGlvbmFsKTogVGhlc2UgYXJlIHRoZSBhY2NvdW50cyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHdhdGNoLW9ubHkgd2FsbGV0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3BocmFzZSAtIHdhbGxldCBwYXNzcGhyYXNlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gQSBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgdXBkYXRlZCB3YWxsZXQgcmVzcG9uc2Ugb3IgdGhyb3dpbmcgYW4gZXJyb3IgaWYgdGhlIHVwZGF0ZSBmYWlscy5cbiAgICovXG4gIHVwZGF0ZVdhbGxldENvaW5TcGVjaWZpYyhwYXJhbXM6IFVwZGF0ZUxpZ2h0bmluZ1dhbGxldFNpZ25lZFJlcXVlc3QsIHBhc3NwaHJhc2U6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj47XG59XG5cbmV4cG9ydCBjbGFzcyBTZWxmQ3VzdG9kaWFsTGlnaHRuaW5nV2FsbGV0IGltcGxlbWVudHMgSUxpZ2h0bmluZ1dhbGxldCB7XG4gIHB1YmxpYyB3YWxsZXQ6IHNka2NvcmUuSVdhbGxldDtcblxuICBjb25zdHJ1Y3Rvcih3YWxsZXQ6IHNka2NvcmUuSVdhbGxldCkge1xuICAgIGNvbnN0IGNvaW4gPSB3YWxsZXQuYmFzZUNvaW47XG4gICAgaWYgKGNvaW4uZ2V0RmFtaWx5KCkgIT09ICdsbmJ0YycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb2luIHRvIHVwZGF0ZSBsaWdodG5pbmcgd2FsbGV0OiAke2NvaW4uZ2V0RmFtaWx5KCl9YCk7XG4gICAgfVxuICAgIHRoaXMud2FsbGV0ID0gd2FsbGV0O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlSW52b2ljZShwYXJhbXM6IENyZWF0ZUludm9pY2VSZXF1ZXN0KTogUHJvbWlzZTxMaWdodG5pbmdJbnZvaWNlPiB7XG4gICAgY29uc3QgY3JlYXRlSW52b2ljZVJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMud2FsbGV0LmJhc2VDb2luLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9pbnZvaWNlYCkpXG4gICAgICAuc2VuZChDcmVhdGVJbnZvaWNlUmVxdWVzdC5lbmNvZGUocGFyYW1zKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gc2RrY29yZS5kZWNvZGVPckVsc2UoTGlnaHRuaW5nSW52b2ljZS5uYW1lLCBMaWdodG5pbmdJbnZvaWNlLCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgLy8gRE9OJ1QgdGhyb3cgZXJyb3JzIGZyb20gZGVjb2RlT3JFbHNlLiBJdCBjb3VsZCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjcmVhdGUgaW52b2ljZSByZXNwb25zZSAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcGF5SW52b2ljZShwYXJhbXM6IHVua25vd24pOiBQcm9taXNlPHVua25vd24+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBhc3luYyBsaXN0SW52b2ljZXMocGFyYW1zOiBHZXRJbnZvaWNlc1F1ZXJ5KTogUHJvbWlzZTxJbnZvaWNlSW5mb1tdPiB7XG4gICAgY29uc3QgcmV0dXJuQ29kZWMgPSB0LmFycmF5KEludm9pY2VJbmZvKTtcbiAgICBjb25zdCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iYXNlQ29pbi51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvaW52b2ljZWApKVxuICAgICAgLnF1ZXJ5KEdldEludm9pY2VzUXVlcnkuZW5jb2RlKHBhcmFtcykpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIHNka2NvcmUuZGVjb2RlT3JFbHNlKHJldHVybkNvZGVjLm5hbWUsIHJldHVybkNvZGVjLCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGxpc3QgaW52b2ljZXMgcmVzcG9uc2UgJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldExpZ2h0bmluZ0tleWNoYWluKCk6IFByb21pc2U8TGlnaHRuaW5nS2V5Y2hhaW4+IHtcbiAgICBjb25zdCBrZXlJZHMgPSB0aGlzLndhbGxldC5rZXlJZHMoKTtcbiAgICBpZiAoa2V5SWRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG51bWJlciBvZiBrZXkgaW4gbGlnaHRuaW5nIHdhbGxldDogJHtrZXlJZHMubGVuZ3RofWApO1xuICAgIH1cbiAgICBjb25zdCBrZXljaGFpbiA9IGF3YWl0IHRoaXMud2FsbGV0LmJhc2VDb2luLmtleWNoYWlucygpLmdldCh7IGlkOiBrZXlJZHNbMF0gfSk7XG4gICAgcmV0dXJuIHNka2NvcmUuZGVjb2RlT3JFbHNlKExpZ2h0bmluZ0tleWNoYWluLm5hbWUsIExpZ2h0bmluZ0tleWNoYWluLCBrZXljaGFpbiwgKF8pID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB1c2VyIGtleWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0TGlnaHRuaW5nQXV0aEtleWNoYWlucygpOiBQcm9taXNlPHtcbiAgICB1c2VyQXV0aEtleTogTGlnaHRuaW5nQXV0aEtleWNoYWluO1xuICAgIG5vZGVBdXRoS2V5OiBMaWdodG5pbmdBdXRoS2V5Y2hhaW47XG4gIH0+IHtcbiAgICBjb25zdCBhdXRoS2V5SWRzID0gdGhpcy53YWxsZXQuY29pblNwZWNpZmljKCk/LmtleXM7XG4gICAgaWYgKGF1dGhLZXlJZHM/Lmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG51bWJlciBvZiBhdXRoIGtleXMgaW4gbGlnaHRuaW5nIHdhbGxldDogJHthdXRoS2V5SWRzPy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvaW4gPSB0aGlzLndhbGxldC5iYXNlQ29pbjtcbiAgICBjb25zdCBrZXljaGFpbnMgPSBhd2FpdCBQcm9taXNlLmFsbChhdXRoS2V5SWRzLm1hcCgoaWQpID0+IGNvaW4ua2V5Y2hhaW5zKCkuZ2V0KHsgaWQgfSkpKTtcbiAgICBjb25zdCBhdXRoS2V5Y2hhaW5zID0ga2V5Y2hhaW5zLm1hcCgoa2V5Y2hhaW4pID0+IHtcbiAgICAgIHJldHVybiBzZGtjb3JlLmRlY29kZU9yRWxzZShMaWdodG5pbmdBdXRoS2V5Y2hhaW4ubmFtZSwgTGlnaHRuaW5nQXV0aEtleWNoYWluLCBrZXljaGFpbiwgKF8pID0+IHtcbiAgICAgICAgLy8gRE9OJ1QgdGhyb3cgZXJyb3JzIGZyb20gZGVjb2RlT3JFbHNlLiBJdCBjb3VsZCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGxpZ2h0bmluZyBhdXRoIGtleTogJHtrZXljaGFpbj8uaWR9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBbdXNlckF1dGhLZXksIG5vZGVBdXRoS2V5XSA9IChbJ3VzZXJBdXRoJywgJ25vZGVBdXRoJ10gYXMgY29uc3QpLm1hcCgocHVycG9zZSkgPT4ge1xuICAgICAgY29uc3Qga2V5Y2hhaW4gPSBhdXRoS2V5Y2hhaW5zLmZpbmQoXG4gICAgICAgIChrKSA9PiB1bndyYXBMaWdodG5pbmdDb2luU3BlY2lmaWMoay5jb2luU3BlY2lmaWMsIGNvaW4uZ2V0Q2hhaW4oKSkucHVycG9zZSA9PT0gcHVycG9zZVxuICAgICAgKTtcbiAgICAgIGlmICgha2V5Y2hhaW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nICR7cHVycG9zZX0ga2V5YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ga2V5Y2hhaW47XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyB1c2VyQXV0aEtleSwgbm9kZUF1dGhLZXkgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVdhbGxldENvaW5TcGVjaWZpYyhwYXJhbXM6IFVwZGF0ZUxpZ2h0bmluZ1dhbGxldFNpZ25lZFJlcXVlc3QsIHBhc3NwaHJhc2U6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIHNka2NvcmUuZGVjb2RlT3JFbHNlKFxuICAgICAgVXBkYXRlTGlnaHRuaW5nV2FsbGV0U2lnbmVkUmVxdWVzdC5uYW1lLFxuICAgICAgVXBkYXRlTGlnaHRuaW5nV2FsbGV0U2lnbmVkUmVxdWVzdCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIChlcnJvcnMpID0+IHtcbiAgICAgICAgLy8gRE9OJ1QgdGhyb3cgZXJyb3JzIGZyb20gZGVjb2RlT3JFbHNlLiBJdCBjb3VsZCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmFtcyBmb3IgbGlnaHRuaW5nIHNwZWNpZmljIHVwZGF0ZSB3YWxsZXQ6ICR7ZXJyb3JzfWApO1xuICAgICAgfVxuICAgICk7XG4gICAgY29uc3QgeyB1c2VyQXV0aEtleSB9ID0gYXdhaXQgdGhpcy5nZXRMaWdodG5pbmdBdXRoS2V5Y2hhaW5zKCk7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY3JlYXRlTWVzc2FnZVNpZ25hdHVyZShcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRoaXMud2FsbGV0LmJpdGdvLmRlY3J5cHQoeyBwYXNzd29yZDogcGFzc3BocmFzZSwgaW5wdXQ6IHVzZXJBdXRoS2V5LmVuY3J5cHRlZFBydiB9KVxuICAgICk7XG4gICAgY29uc3QgY29pblNwZWNpZmljID0ge1xuICAgICAgW3RoaXMud2FsbGV0LmNvaW4oKV06IHtcbiAgICAgICAgc2lnbmVkUmVxdWVzdDogcGFyYW1zLFxuICAgICAgICBzaWduYXR1cmUsXG4gICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvLnB1dCh0aGlzLndhbGxldC51cmwoKSkuc2VuZCh7IGNvaW5TcGVjaWZpYyB9KS5yZXN1bHQoKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as sdkcore from '@bitgo/sdk-core';
|
|
2
|
+
import { ILightningWallet } from './lightning';
|
|
3
|
+
/**
|
|
4
|
+
* Return a lightwallet instance if the coin supports it
|
|
5
|
+
*/
|
|
6
|
+
export declare function getLightningWallet(wallet: sdkcore.IWallet): ILightningWallet;
|
|
7
|
+
//# sourceMappingURL=wallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/wallet/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAgC,MAAM,aAAa,CAAC;AAE7E;;GAEG;AAEH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,GAAG,gBAAgB,CAK5E"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLightningWallet = getLightningWallet;
|
|
4
|
+
const lightning_1 = require("../lightning");
|
|
5
|
+
const lightning_2 = require("./lightning");
|
|
6
|
+
/**
|
|
7
|
+
* Return a lightwallet instance if the coin supports it
|
|
8
|
+
*/
|
|
9
|
+
function getLightningWallet(wallet) {
|
|
10
|
+
if (!(0, lightning_1.isLightningCoinName)(wallet.baseCoin.getChain())) {
|
|
11
|
+
throw new Error(`Lightning not supported for ${wallet.coin()}`);
|
|
12
|
+
}
|
|
13
|
+
return new lightning_2.SelfCustodialLightningWallet(wallet);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dhbGxldC93YWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSxnREFLQztBQVpELDRDQUFtRDtBQUNuRCwyQ0FBNkU7QUFFN0U7O0dBRUc7QUFFSCxTQUFnQixrQkFBa0IsQ0FBQyxNQUF1QjtJQUN4RCxJQUFJLENBQUMsSUFBQSwrQkFBbUIsRUFBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxPQUFPLElBQUksd0NBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNka2NvcmUgZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGlzTGlnaHRuaW5nQ29pbk5hbWUgfSBmcm9tICcuLi9saWdodG5pbmcnO1xuaW1wb3J0IHsgSUxpZ2h0bmluZ1dhbGxldCwgU2VsZkN1c3RvZGlhbExpZ2h0bmluZ1dhbGxldCB9IGZyb20gJy4vbGlnaHRuaW5nJztcblxuLyoqXG4gKiBSZXR1cm4gYSBsaWdodHdhbGxldCBpbnN0YW5jZSBpZiB0aGUgY29pbiBzdXBwb3J0cyBpdFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaWdodG5pbmdXYWxsZXQod2FsbGV0OiBzZGtjb3JlLklXYWxsZXQpOiBJTGlnaHRuaW5nV2FsbGV0IHtcbiAgaWYgKCFpc0xpZ2h0bmluZ0NvaW5OYW1lKHdhbGxldC5iYXNlQ29pbi5nZXRDaGFpbigpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTGlnaHRuaW5nIG5vdCBzdXBwb3J0ZWQgZm9yICR7d2FsbGV0LmNvaW4oKX1gKTtcbiAgfVxuICByZXR1cm4gbmV3IFNlbGZDdXN0b2RpYWxMaWdodG5pbmdXYWxsZXQod2FsbGV0KTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo/abstract-lightning",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "BitGo SDK coin library for base Lightning Network coin implementation",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build": "yarn tsc --build --incremental --verbose .",
|
|
9
|
+
"test": "yarn unit-test",
|
|
10
|
+
"unit-test": "nyc -- mocha --recursive test",
|
|
9
11
|
"fmt": "prettier --write .",
|
|
10
12
|
"check-fmt": "prettier --check .",
|
|
11
13
|
"clean": "rm -r ./dist",
|
|
@@ -37,8 +39,14 @@
|
|
|
37
39
|
]
|
|
38
40
|
},
|
|
39
41
|
"dependencies": {
|
|
40
|
-
"@bitgo/sdk-core": "^
|
|
41
|
-
"@bitgo/
|
|
42
|
+
"@bitgo/sdk-core": "^29.0.0",
|
|
43
|
+
"@bitgo/statics": "^51.0.1",
|
|
44
|
+
"@bitgo/utxo-lib": "^11.2.2",
|
|
45
|
+
"bs58check": "^2.1.2",
|
|
46
|
+
"fp-ts": "^2.12.2",
|
|
47
|
+
"io-ts": "npm:@bitgo-forks/io-ts@2.1.4",
|
|
48
|
+
"io-ts-types": "^0.5.16",
|
|
49
|
+
"macaroon": "^3.0.4"
|
|
42
50
|
},
|
|
43
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "469eab4beb54ca705626534535fa32bad6756c11"
|
|
44
52
|
}
|