@bitgo-beta/abstract-lightning 1.0.0-alpha.136 → 1.0.0-alpha.137
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 +4 -0
- package/dist/src/wallet/custodialLightning.d.ts +7 -0
- package/dist/src/wallet/custodialLightning.d.ts.map +1 -0
- package/dist/src/wallet/custodialLightning.js +14 -0
- package/dist/src/wallet/index.d.ts +2 -0
- package/dist/src/wallet/index.d.ts.map +1 -1
- package/dist/src/wallet/index.js +3 -1
- package/dist/src/wallet/lightning.d.ts +13 -42
- package/dist/src/wallet/lightning.d.ts.map +1 -1
- package/dist/src/wallet/lightning.js +71 -107
- package/dist/src/wallet/selfCustodialLightning.d.ts +32 -0
- package/dist/src/wallet/selfCustodialLightning.d.ts.map +1 -0
- package/dist/src/wallet/selfCustodialLightning.js +127 -0
- package/dist/src/wallet/wallet.d.ts +1 -1
- package/dist/src/wallet/wallet.d.ts.map +1 -1
- package/dist/src/wallet/wallet.js +14 -7
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [4.0.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/abstract-lightning@4.0.0...@bitgo/abstract-lightning@4.0.1) (2025-03-06)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @bitgo/abstract-lightning
|
|
9
|
+
|
|
6
10
|
# [4.0.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/abstract-lightning@1.2.44...@bitgo/abstract-lightning@4.0.0) (2025-03-04)
|
|
7
11
|
|
|
8
12
|
### Features
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ILightningWallet, LightningWallet } from './lightning';
|
|
2
|
+
import * as sdkcore from '@bitgo-beta/sdk-core';
|
|
3
|
+
export type ICustodialLightningWallet = ILightningWallet;
|
|
4
|
+
export declare class CustodialLightningWallet extends LightningWallet implements ICustodialLightningWallet {
|
|
5
|
+
constructor(wallet: sdkcore.IWallet);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=custodialLightning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custodialLightning.d.ts","sourceRoot":"","sources":["../../../src/wallet/custodialLightning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,MAAM,MAAM,yBAAyB,GAAG,gBAAgB,CAAC;AAEzD,qBAAa,wBAAyB,SAAQ,eAAgB,YAAW,yBAAyB;gBACpF,MAAM,EAAE,OAAO,CAAC,OAAO;CAMpC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CustodialLightningWallet = void 0;
|
|
4
|
+
const lightning_1 = require("./lightning");
|
|
5
|
+
class CustodialLightningWallet extends lightning_1.LightningWallet {
|
|
6
|
+
constructor(wallet) {
|
|
7
|
+
super(wallet);
|
|
8
|
+
if (wallet.type() !== 'custodial') {
|
|
9
|
+
throw new Error(`Invalid lightning wallet type for custodial lightning: ${wallet.type()}`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.CustodialLightningWallet = CustodialLightningWallet;
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9kaWFsTGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dhbGxldC9jdXN0b2RpYWxMaWdodG5pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQWdFO0FBS2hFLE1BQWEsd0JBQXlCLFNBQVEsMkJBQWU7SUFDM0QsWUFBWSxNQUF1QjtRQUNqQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDZCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFQRCw0REFPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElMaWdodG5pbmdXYWxsZXQsIExpZ2h0bmluZ1dhbGxldCB9IGZyb20gJy4vbGlnaHRuaW5nJztcbmltcG9ydCAqIGFzIHNka2NvcmUgZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5leHBvcnQgdHlwZSBJQ3VzdG9kaWFsTGlnaHRuaW5nV2FsbGV0ID0gSUxpZ2h0bmluZ1dhbGxldDtcblxuZXhwb3J0IGNsYXNzIEN1c3RvZGlhbExpZ2h0bmluZ1dhbGxldCBleHRlbmRzIExpZ2h0bmluZ1dhbGxldCBpbXBsZW1lbnRzIElDdXN0b2RpYWxMaWdodG5pbmdXYWxsZXQge1xuICBjb25zdHJ1Y3Rvcih3YWxsZXQ6IHNka2NvcmUuSVdhbGxldCkge1xuICAgIHN1cGVyKHdhbGxldCk7XG4gICAgaWYgKHdhbGxldC50eXBlKCkgIT09ICdjdXN0b2RpYWwnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGlnaHRuaW5nIHdhbGxldCB0eXBlIGZvciBjdXN0b2RpYWwgbGlnaHRuaW5nOiAke3dhbGxldC50eXBlKCl9YCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/wallet/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/wallet/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC"}
|
package/dist/src/wallet/index.js
CHANGED
|
@@ -15,5 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./lightning"), exports);
|
|
18
|
+
__exportStar(require("./custodialLightning"), exports);
|
|
19
|
+
__exportStar(require("./selfCustodialLightning"), exports);
|
|
18
20
|
__exportStar(require("./wallet"), exports);
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2FsbGV0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBNEI7QUFDNUIsdURBQXFDO0FBQ3JDLDJEQUF5QztBQUN6QywyQ0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpZ2h0bmluZyc7XG5leHBvcnQgKiBmcm9tICcuL2N1c3RvZGlhbExpZ2h0bmluZyc7XG5leHBvcnQgKiBmcm9tICcuL3NlbGZDdXN0b2RpYWxMaWdodG5pbmcnO1xuZXhwb3J0ICogZnJvbSAnLi93YWxsZXQnO1xuIl19
|
|
@@ -1,40 +1,24 @@
|
|
|
1
1
|
import * as sdkcore from '@bitgo-beta/sdk-core';
|
|
2
2
|
import { PendingApprovalData, TxRequestState } from '@bitgo-beta/sdk-core';
|
|
3
|
-
import { CreateInvoiceBody, Invoice, InvoiceInfo, InvoiceQuery, LightningAuthKeychain, LightningKeychain, LndCreatePaymentResponse, SubmitPaymentParams,
|
|
3
|
+
import { CreateInvoiceBody, Invoice, InvoiceInfo, InvoiceQuery, LightningAuthKeychain, LightningKeychain, LndCreatePaymentResponse, SubmitPaymentParams, Transaction, TransactionQuery, PaymentInfo, PaymentQuery } from '../codecs';
|
|
4
4
|
export type PayInvoiceResponse = {
|
|
5
5
|
txRequestId: string;
|
|
6
6
|
txRequestState: TxRequestState;
|
|
7
7
|
pendingApproval?: PendingApprovalData;
|
|
8
8
|
paymentStatus?: LndCreatePaymentResponse;
|
|
9
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* Get the lightning keychain for the given wallet.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getLightningKeychain(wallet: sdkcore.IWallet): Promise<LightningKeychain>;
|
|
14
|
+
/**
|
|
15
|
+
* Get the lightning auth keychains for the given wallet.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getLightningAuthKeychains(wallet: sdkcore.IWallet): Promise<{
|
|
18
|
+
userAuthKey: LightningAuthKeychain;
|
|
19
|
+
nodeAuthKey: LightningAuthKeychain;
|
|
20
|
+
}>;
|
|
10
21
|
export interface ILightningWallet {
|
|
11
|
-
/**
|
|
12
|
-
* Get the lightning keychain for the given wallet.
|
|
13
|
-
*/
|
|
14
|
-
getLightningKeychain(): Promise<LightningKeychain>;
|
|
15
|
-
/**
|
|
16
|
-
* Get the lightning auth keychains for the given wallet.
|
|
17
|
-
*/
|
|
18
|
-
getLightningAuthKeychains(): Promise<{
|
|
19
|
-
userAuthKey: LightningAuthKeychain;
|
|
20
|
-
nodeAuthKey: LightningAuthKeychain;
|
|
21
|
-
}>;
|
|
22
|
-
/**
|
|
23
|
-
* Updates the coin-specific configuration for a Lightning Wallet.
|
|
24
|
-
*
|
|
25
|
-
* @param {UpdateLightningWalletClientRequest} params - The parameters containing the updated wallet-specific details.
|
|
26
|
-
* - `encryptedSignerMacaroon` (optional): This macaroon is used by the watch-only node to ask the signer node to sign transactions.
|
|
27
|
-
* Encrypted with ECDH secret key from private key of wallet's user auth key and public key of lightning service.
|
|
28
|
-
* - `encryptedSignerAdminMacaroon` (optional): Generated when initializing the wallet of the signer node.
|
|
29
|
-
* Encrypted with client's wallet passphrase.
|
|
30
|
-
* - `signerHost` (optional): The host address of the Lightning signer node.
|
|
31
|
-
* - `encryptedSignerTlsKey` (optional): The wallet passphrase encrypted TLS key of the signer.
|
|
32
|
-
* - `passphrase` (required): The wallet passphrase.
|
|
33
|
-
* - `signerTlsCert` (optional): The TLS certificate of the signer.
|
|
34
|
-
* - `watchOnlyAccounts` (optional): These are the accounts used to initialize the watch-only wallet.
|
|
35
|
-
* @returns {Promise<unknown>} A promise resolving to the updated wallet response or throwing an error if the update fails.
|
|
36
|
-
*/
|
|
37
|
-
updateWalletCoinSpecific(params: UpdateLightningWalletClientRequest): Promise<unknown>;
|
|
38
22
|
/**
|
|
39
23
|
* Creates a lightning invoice
|
|
40
24
|
* @param {object} params Invoice parameters
|
|
@@ -105,22 +89,10 @@ export interface ILightningWallet {
|
|
|
105
89
|
* @returns {Promise<Transaction[]>} List of transactions
|
|
106
90
|
*/
|
|
107
91
|
listTransactions(params: TransactionQuery): Promise<Transaction[]>;
|
|
108
|
-
/**
|
|
109
|
-
* Get the channel backup for the given wallet.
|
|
110
|
-
* @returns {Promise<BackupResponse>} A promise resolving to the channel backup
|
|
111
|
-
*/
|
|
112
|
-
getChannelBackup(): Promise<BackupResponse>;
|
|
113
92
|
}
|
|
114
|
-
export declare class
|
|
93
|
+
export declare class LightningWallet implements ILightningWallet {
|
|
115
94
|
wallet: sdkcore.IWallet;
|
|
116
95
|
constructor(wallet: sdkcore.IWallet);
|
|
117
|
-
private encryptWalletUpdateRequest;
|
|
118
|
-
getLightningKeychain(): Promise<LightningKeychain>;
|
|
119
|
-
getLightningAuthKeychains(): Promise<{
|
|
120
|
-
userAuthKey: LightningAuthKeychain;
|
|
121
|
-
nodeAuthKey: LightningAuthKeychain;
|
|
122
|
-
}>;
|
|
123
|
-
updateWalletCoinSpecific(params: UpdateLightningWalletClientRequest): Promise<unknown>;
|
|
124
96
|
createInvoice(params: CreateInvoiceBody): Promise<Invoice>;
|
|
125
97
|
getInvoice(paymentHash: string): Promise<InvoiceInfo>;
|
|
126
98
|
listInvoices(params: InvoiceQuery): Promise<InvoiceInfo[]>;
|
|
@@ -129,6 +101,5 @@ export declare class SelfCustodialLightningWallet implements ILightningWallet {
|
|
|
129
101
|
listPayments(params: PaymentQuery): Promise<PaymentInfo[]>;
|
|
130
102
|
getTransaction(txId: string): Promise<Transaction>;
|
|
131
103
|
listTransactions(params: TransactionQuery): Promise<Transaction[]>;
|
|
132
|
-
getChannelBackup(): Promise<BackupResponse>;
|
|
133
104
|
}
|
|
134
105
|
//# sourceMappingURL=lightning.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lightning.d.ts","sourceRoot":"","sources":["../../../src/wallet/lightning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EACL,mBAAmB,EAMnB,cAAc,EAEf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"lightning.d.ts","sourceRoot":"","sources":["../../../src/wallet/lightning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EACL,mBAAmB,EAMnB,cAAc,EAEf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,YAAY,EACb,MAAM,WAAW,CAAC;AAGnB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,CAAC,EAAE,mBAAmB,CAAC;IAEtC,aAAa,CAAC,EAAE,wBAAwB,CAAC;CAC1C,CAAC;AAEF;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAa9F;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;IAChF,WAAW,EAAE,qBAAqB,CAAC;IACnC,WAAW,EAAE,qBAAqB,CAAC;CACpC,CAAC,CA2BD;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;OAOG;IACH,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D;;;;;OAKG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtD;;;;;;;;OAQG;IACH,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE3D;;;;;;;;;OASG;IACH,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrE;;;;;OAKG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtD;;;;;;;;OAQG;IACH,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3D;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEnD;;;;;;;OAOG;IACH,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CACpE;AAED,qBAAa,eAAgB,YAAW,gBAAgB;IAC/C,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC;gBAEnB,MAAM,EAAE,OAAO,CAAC,OAAO;IAQ7B,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAW1D,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IASrD,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAW1D,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA2DpE,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IASrD,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAU1D,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IASlD,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CASzE"}
|
|
@@ -33,101 +33,71 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.
|
|
36
|
+
exports.LightningWallet = void 0;
|
|
37
|
+
exports.getLightningKeychain = getLightningKeychain;
|
|
38
|
+
exports.getLightningAuthKeychains = getLightningAuthKeychains;
|
|
37
39
|
const sdkcore = __importStar(require("@bitgo-beta/sdk-core"));
|
|
38
40
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
39
41
|
const t = __importStar(require("io-ts"));
|
|
40
42
|
const lightning_1 = require("../lightning");
|
|
41
43
|
const codecs_1 = require("../codecs");
|
|
42
44
|
const public_types_1 = require("@bitgo/public-types");
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Get the lightning keychain for the given wallet.
|
|
47
|
+
*/
|
|
48
|
+
async function getLightningKeychain(wallet) {
|
|
49
|
+
const coin = wallet.baseCoin;
|
|
50
|
+
if (coin.getFamily() !== 'lnbtc') {
|
|
51
|
+
throw new Error(`Invalid coin to get lightning wallet key: ${coin.getFamily()}`);
|
|
50
52
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
...params,
|
|
55
|
-
};
|
|
56
|
-
const userAuthXprv = this.wallet.bitgo.decrypt({
|
|
57
|
-
password: params.passphrase,
|
|
58
|
-
input: userAuthKey.encryptedPrv,
|
|
59
|
-
});
|
|
60
|
-
if (params.signerTlsKey) {
|
|
61
|
-
requestWithEncryption.encryptedSignerTlsKey = this.wallet.bitgo.encrypt({
|
|
62
|
-
password: params.passphrase,
|
|
63
|
-
input: params.signerTlsKey,
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
if (params.signerAdminMacaroon) {
|
|
67
|
-
requestWithEncryption.encryptedSignerAdminMacaroon = this.wallet.bitgo.encrypt({
|
|
68
|
-
password: params.passphrase,
|
|
69
|
-
input: params.signerAdminMacaroon,
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
if (params.signerMacaroon) {
|
|
73
|
-
requestWithEncryption.encryptedSignerMacaroon = this.wallet.bitgo.encrypt({
|
|
74
|
-
password: (0, lightning_1.deriveLightningServiceSharedSecret)(coinName, userAuthXprv).toString('hex'),
|
|
75
|
-
input: params.signerMacaroon,
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
return t.exact(codecs_1.UpdateLightningWalletEncryptedRequest).encode(requestWithEncryption);
|
|
53
|
+
const keyIds = wallet.keyIds();
|
|
54
|
+
if (keyIds.length !== 1) {
|
|
55
|
+
throw new Error(`Invalid number of key in lightning wallet: ${keyIds.length}`);
|
|
79
56
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
57
|
+
const keychain = await coin.keychains().get({ id: keyIds[0] });
|
|
58
|
+
return sdkcore.decodeOrElse(codecs_1.LightningKeychain.name, codecs_1.LightningKeychain, keychain, (_) => {
|
|
59
|
+
throw new Error(`Invalid user key`);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get the lightning auth keychains for the given wallet.
|
|
64
|
+
*/
|
|
65
|
+
async function getLightningAuthKeychains(wallet) {
|
|
66
|
+
const coin = wallet.baseCoin;
|
|
67
|
+
if (coin.getFamily() !== 'lnbtc') {
|
|
68
|
+
throw new Error(`Invalid coin to get lightning wallet auth keys: ${coin.getFamily()}`);
|
|
89
69
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
throw new Error(`Invalid number of auth keys in lightning wallet: ${authKeyIds?.length}`);
|
|
94
|
-
}
|
|
95
|
-
const coin = this.wallet.baseCoin;
|
|
96
|
-
const keychains = await Promise.all(authKeyIds.map((id) => coin.keychains().get({ id })));
|
|
97
|
-
const authKeychains = keychains.map((keychain) => {
|
|
98
|
-
return sdkcore.decodeOrElse(codecs_1.LightningAuthKeychain.name, codecs_1.LightningAuthKeychain, keychain, (_) => {
|
|
99
|
-
// DON'T throw errors from decodeOrElse. It could leak sensitive information.
|
|
100
|
-
throw new Error(`Invalid lightning auth key: ${keychain?.id}`);
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
const [userAuthKey, nodeAuthKey] = ['userAuth', 'nodeAuth'].map((purpose) => {
|
|
104
|
-
const keychain = authKeychains.find((k) => (0, lightning_1.unwrapLightningCoinSpecific)(k.coinSpecific, coin.getChain()).purpose === purpose);
|
|
105
|
-
if (!keychain) {
|
|
106
|
-
throw new Error(`Missing ${purpose} key`);
|
|
107
|
-
}
|
|
108
|
-
return keychain;
|
|
109
|
-
});
|
|
110
|
-
return { userAuthKey, nodeAuthKey };
|
|
70
|
+
const authKeyIds = wallet.coinSpecific()?.keys;
|
|
71
|
+
if (authKeyIds?.length !== 2) {
|
|
72
|
+
throw new Error(`Invalid number of auth keys in lightning wallet: ${authKeyIds?.length}`);
|
|
111
73
|
}
|
|
112
|
-
|
|
113
|
-
|
|
74
|
+
const keychains = await Promise.all(authKeyIds.map((id) => coin.keychains().get({ id })));
|
|
75
|
+
const authKeychains = keychains.map((keychain) => {
|
|
76
|
+
return sdkcore.decodeOrElse(codecs_1.LightningAuthKeychain.name, codecs_1.LightningAuthKeychain, keychain, (_) => {
|
|
114
77
|
// DON'T throw errors from decodeOrElse. It could leak sensitive information.
|
|
115
|
-
throw new Error(`Invalid
|
|
78
|
+
throw new Error(`Invalid lightning auth key: ${keychain?.id}`);
|
|
116
79
|
});
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
80
|
+
});
|
|
81
|
+
const [userAuthKey, nodeAuthKey] = ['userAuth', 'nodeAuth'].map((purpose) => {
|
|
82
|
+
const keychain = authKeychains.find((k) => (0, lightning_1.unwrapLightningCoinSpecific)(k.coinSpecific, coin.getChain()).purpose === purpose);
|
|
83
|
+
if (!keychain) {
|
|
84
|
+
throw new Error(`Missing ${purpose} key`);
|
|
85
|
+
}
|
|
86
|
+
return keychain;
|
|
87
|
+
});
|
|
88
|
+
return { userAuthKey, nodeAuthKey };
|
|
89
|
+
}
|
|
90
|
+
class LightningWallet {
|
|
91
|
+
constructor(wallet) {
|
|
92
|
+
const coin = wallet.baseCoin;
|
|
93
|
+
if (coin.getFamily() !== 'lnbtc') {
|
|
94
|
+
throw new Error(`Invalid coin for lightning wallet: ${coin.getFamily()}`);
|
|
95
|
+
}
|
|
96
|
+
this.wallet = wallet;
|
|
127
97
|
}
|
|
128
98
|
async createInvoice(params) {
|
|
129
99
|
const createInvoiceResponse = await this.wallet.bitgo
|
|
130
|
-
.post(this.wallet.
|
|
100
|
+
.post(this.wallet.bitgo.url(`/wallet/${this.wallet.id()}/lightning/invoice`, 2))
|
|
131
101
|
.send(t.exact(codecs_1.CreateInvoiceBody).encode(params))
|
|
132
102
|
.result();
|
|
133
103
|
return sdkcore.decodeOrElse(codecs_1.Invoice.name, codecs_1.Invoice, createInvoiceResponse, (error) => {
|
|
@@ -137,7 +107,7 @@ class SelfCustodialLightningWallet {
|
|
|
137
107
|
}
|
|
138
108
|
async getInvoice(paymentHash) {
|
|
139
109
|
const response = await this.wallet.bitgo
|
|
140
|
-
.get(this.wallet.
|
|
110
|
+
.get(this.wallet.bitgo.url(`/wallet/${this.wallet.id()}/lightning/invoice/${paymentHash}`, 2))
|
|
141
111
|
.result();
|
|
142
112
|
return (0, sdk_core_1.decodeOrElse)(codecs_1.InvoiceInfo.name, codecs_1.InvoiceInfo, response, (error) => {
|
|
143
113
|
throw new Error(`Invalid get invoice response ${error}`);
|
|
@@ -146,7 +116,7 @@ class SelfCustodialLightningWallet {
|
|
|
146
116
|
async listInvoices(params) {
|
|
147
117
|
const returnCodec = t.array(codecs_1.InvoiceInfo);
|
|
148
118
|
const createInvoiceResponse = await this.wallet.bitgo
|
|
149
|
-
.get(this.wallet.
|
|
119
|
+
.get(this.wallet.bitgo.url(`/wallet/${this.wallet.id()}/lightning/invoice`, 2))
|
|
150
120
|
.query(codecs_1.InvoiceQuery.encode(params))
|
|
151
121
|
.result();
|
|
152
122
|
return sdkcore.decodeOrElse(returnCodec.name, returnCodec, createInvoiceResponse, (error) => {
|
|
@@ -156,23 +126,25 @@ class SelfCustodialLightningWallet {
|
|
|
156
126
|
async payInvoice(params) {
|
|
157
127
|
const reqId = new sdk_core_1.RequestTracer();
|
|
158
128
|
this.wallet.bitgo.setRequestTracer(reqId);
|
|
159
|
-
const { userAuthKey } = await this.
|
|
129
|
+
const { userAuthKey } = await getLightningAuthKeychains(this.wallet);
|
|
160
130
|
const signature = (0, lightning_1.createMessageSignature)(t.exact(public_types_1.LightningPaymentRequest).encode(params), this.wallet.bitgo.decrypt({ password: params.passphrase, input: userAuthKey.encryptedPrv }));
|
|
161
131
|
const paymentIntent = {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
132
|
+
intent: {
|
|
133
|
+
comment: params.comment,
|
|
134
|
+
sequenceId: params.sequenceId,
|
|
135
|
+
intentType: 'payment',
|
|
136
|
+
signedRequest: {
|
|
137
|
+
invoice: params.invoice,
|
|
138
|
+
amountMsat: params.amountMsat,
|
|
139
|
+
feeLimitMsat: params.feeLimitMsat,
|
|
140
|
+
feeLimitRatio: params.feeLimitRatio,
|
|
141
|
+
},
|
|
142
|
+
signature,
|
|
170
143
|
},
|
|
171
|
-
signature,
|
|
172
144
|
};
|
|
173
145
|
const transactionRequestCreate = (await this.wallet.bitgo
|
|
174
146
|
.post(this.wallet.bitgo.url('/wallet/' + this.wallet.id() + '/txrequests', 2))
|
|
175
|
-
.send(public_types_1.LightningPaymentIntent.encode(paymentIntent))
|
|
147
|
+
.send(t.type({ intent: public_types_1.LightningPaymentIntent }).encode(paymentIntent))
|
|
176
148
|
.result());
|
|
177
149
|
if (transactionRequestCreate.state === 'pendingApproval') {
|
|
178
150
|
const pendingApprovals = new sdk_core_1.PendingApprovals(this.wallet.bitgo, this.wallet.baseCoin);
|
|
@@ -195,7 +167,7 @@ class SelfCustodialLightningWallet {
|
|
|
195
167
|
}
|
|
196
168
|
async getPayment(paymentHash) {
|
|
197
169
|
const response = await this.wallet.bitgo
|
|
198
|
-
.get(this.wallet.
|
|
170
|
+
.get(this.wallet.bitgo.url(`/wallet/${this.wallet.id()}/lightning/payment/${paymentHash}`, 2))
|
|
199
171
|
.result();
|
|
200
172
|
return (0, sdk_core_1.decodeOrElse)(codecs_1.PaymentInfo.name, codecs_1.PaymentInfo, response, (error) => {
|
|
201
173
|
throw new Error(`Invalid payment response: ${error}`);
|
|
@@ -203,7 +175,7 @@ class SelfCustodialLightningWallet {
|
|
|
203
175
|
}
|
|
204
176
|
async listPayments(params) {
|
|
205
177
|
const response = await this.wallet.bitgo
|
|
206
|
-
.get(this.wallet.
|
|
178
|
+
.get(this.wallet.bitgo.url(`/wallet/${this.wallet.id()}/lightning/payment`, 2))
|
|
207
179
|
.query(codecs_1.PaymentQuery.encode(params))
|
|
208
180
|
.result();
|
|
209
181
|
return (0, sdk_core_1.decodeOrElse)(t.array(codecs_1.PaymentInfo).name, t.array(codecs_1.PaymentInfo), response, (error) => {
|
|
@@ -212,7 +184,7 @@ class SelfCustodialLightningWallet {
|
|
|
212
184
|
}
|
|
213
185
|
async getTransaction(txId) {
|
|
214
186
|
const response = await this.wallet.bitgo
|
|
215
|
-
.get(this.wallet.
|
|
187
|
+
.get(this.wallet.bitgo.url(`/wallet/${this.wallet.id()}/lightning/transaction/${txId}`, 2))
|
|
216
188
|
.result();
|
|
217
189
|
return (0, sdk_core_1.decodeOrElse)(codecs_1.Transaction.name, codecs_1.Transaction, response, (error) => {
|
|
218
190
|
throw new Error(`Invalid transaction response: ${error}`);
|
|
@@ -220,21 +192,13 @@ class SelfCustodialLightningWallet {
|
|
|
220
192
|
}
|
|
221
193
|
async listTransactions(params) {
|
|
222
194
|
const response = await this.wallet.bitgo
|
|
223
|
-
.get(this.wallet.
|
|
195
|
+
.get(this.wallet.bitgo.url(`/wallet/${this.wallet.id()}/lightning/transaction`, 2))
|
|
224
196
|
.query(codecs_1.TransactionQuery.encode(params))
|
|
225
197
|
.result();
|
|
226
198
|
return (0, sdk_core_1.decodeOrElse)(t.array(codecs_1.Transaction).name, t.array(codecs_1.Transaction), response, (error) => {
|
|
227
199
|
throw new Error(`Invalid transaction list response: ${error}`);
|
|
228
200
|
});
|
|
229
201
|
}
|
|
230
|
-
async getChannelBackup() {
|
|
231
|
-
const backupResponse = await this.wallet.bitgo
|
|
232
|
-
.get(this.wallet.baseCoin.url(`/wallet/${this.wallet.id()}/lightning/backup`))
|
|
233
|
-
.result();
|
|
234
|
-
return sdkcore.decodeOrElse(codecs_1.BackupResponse.name, codecs_1.BackupResponse, backupResponse, (error) => {
|
|
235
|
-
throw new Error(`Invalid backup response: ${error}`);
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
202
|
}
|
|
239
|
-
exports.
|
|
240
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dhbGxldC9saWdodG5pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOERBQWdEO0FBQ2hELG1EQVM4QjtBQUM5Qix5Q0FBMkI7QUFDM0IsNENBQXVIO0FBQ3ZILHNDQWdCbUI7QUFDbkIsc0RBQXNGO0FBc0h0RixNQUFhLDRCQUE0QjtJQUd2QyxZQUFZLE1BQXVCO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVPLDBCQUEwQixDQUNoQyxNQUEwQyxFQUMxQyxXQUFrQztRQUVsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBd0IsQ0FBQztRQUUxRCxNQUFNLHFCQUFxQixHQUF3RjtZQUNqSCxHQUFHLE1BQU07U0FDVixDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQzdDLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUMzQixLQUFLLEVBQUUsV0FBVyxDQUFDLFlBQVk7U0FDaEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIscUJBQXFCLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUN0RSxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVU7Z0JBQzNCLEtBQUssRUFBRSxNQUFNLENBQUMsWUFBWTthQUMzQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMvQixxQkFBcUIsQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQzdFLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVTtnQkFDM0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxtQkFBbUI7YUFDbEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzFCLHFCQUFxQixDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDeEUsUUFBUSxFQUFFLElBQUEsOENBQWtDLEVBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3BGLEtBQUssRUFBRSxNQUFNLENBQUMsY0FBYzthQUM3QixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLDhDQUFxQyxDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0I7UUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0UsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLDBCQUFpQixDQUFDLElBQUksRUFBRSwwQkFBaUIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNyRixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLHlCQUF5QjtRQUk3QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxFQUFFLElBQUksQ0FBQztRQUNwRCxJQUFJLFVBQVUsRUFBRSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUYsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQy9DLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyw4QkFBcUIsQ0FBQyxJQUFJLEVBQUUsOEJBQXFCLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdGLDZFQUE2RTtnQkFDN0UsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLEdBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDckYsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FDakMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUEsdUNBQTJCLEVBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUN4RixDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxPQUFPLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxNQUEwQztRQUN2RSxPQUFPLENBQUMsWUFBWSxDQUNsQiwyQ0FBa0MsQ0FBQyxJQUFJLEVBQ3ZDLDJDQUFrQyxFQUNsQyxNQUFNLEVBQ04sQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNULDZFQUE2RTtZQUM3RSxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUNGLENBQUM7UUFFRixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUMvRCxNQUFNLDJCQUEyQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekYsTUFBTSxTQUFTLEdBQUcsSUFBQSxrQ0FBc0IsRUFDdEMsMkJBQTJCLEVBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FDNUYsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHO1lBQ25CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO2dCQUNwQixhQUFhLEVBQUUsMkJBQTJCO2dCQUMxQyxTQUFTO2FBQ1Y7U0FDRixDQUFDO1FBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN4RixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUF5QjtRQUMzQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO2FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2FBQy9FLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLDBCQUFpQixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQy9DLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLGdCQUFPLENBQUMsSUFBSSxFQUFFLGdCQUFPLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsRiw2RUFBNkU7WUFDN0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQW1CO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO2FBQ3JDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxzQkFBc0IsV0FBVyxFQUFFLENBQUMsQ0FBQzthQUM3RixNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sSUFBQSx1QkFBWSxFQUFDLG9CQUFXLENBQUMsSUFBSSxFQUFFLG9CQUFXLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQW9CO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsb0JBQVcsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7YUFDbEQsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLG9CQUFvQixDQUFDLENBQUM7YUFDOUUsS0FBSyxDQUFDLHFCQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2xDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDMUYsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQTJCO1FBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksd0JBQWEsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQy9ELE1BQU0sU0FBUyxHQUFHLElBQUEsa0NBQXNCLEVBQ3RDLENBQUMsQ0FBQyxLQUFLLENBQUMsc0NBQXVCLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FDNUYsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUEyQjtZQUM1QyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87WUFDdkIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGFBQWEsRUFBRTtnQkFDYixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87Z0JBQ3ZCLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtnQkFDN0IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO2dCQUNqQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7YUFDcEM7WUFDRCxTQUFTO1NBQ1YsQ0FBQztRQUVGLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSzthQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM3RSxJQUFJLENBQUMscUNBQXNCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ2xELE1BQU0sRUFBRSxDQUFjLENBQUM7UUFFMUIsSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztZQUN6RCxNQUFNLGdCQUFnQixHQUFHLElBQUksMkJBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RixNQUFNLGVBQWUsR0FBRyxNQUFNLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSx3QkFBd0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7WUFDdkcsT0FBTztnQkFDTCxlQUFlLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRTtnQkFDekMsV0FBVyxFQUFFLHdCQUF3QixDQUFDLFdBQVc7Z0JBQ2pELGNBQWMsRUFBRSx3QkFBd0IsQ0FBQyxLQUFLO2FBQy9DLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLDJCQUFnQixDQUFDLGFBQWEsQ0FDakUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQ2hCLHdCQUF3QixDQUFDLFdBQVcsRUFDcEMsc0JBQVcsQ0FBQyxFQUFFLEVBQ2QsS0FBSyxDQUNOLENBQUM7UUFFRixNQUFNLFlBQVksR0FBRyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDO1FBRXhGLE9BQU87WUFDTCxXQUFXLEVBQUUsd0JBQXdCLENBQUMsV0FBVztZQUNqRCxjQUFjLEVBQUUsc0JBQXNCLENBQUMsS0FBSztZQUM1QyxhQUFhLEVBQUUsWUFBWTtnQkFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsaUNBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBd0MsQ0FBQztnQkFDcEYsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBbUI7UUFDbEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7YUFDckMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLHNCQUFzQixXQUFXLEVBQUUsQ0FBQyxDQUFDO2FBQzdGLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxJQUFBLHVCQUFZLEVBQUMsb0JBQVcsQ0FBQyxJQUFJLEVBQUUsb0JBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBb0I7UUFDckMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7YUFDckMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLG9CQUFvQixDQUFDLENBQUM7YUFDOUUsS0FBSyxDQUFDLHFCQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2xDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxJQUFBLHVCQUFZLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxvQkFBVyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsb0JBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZGLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFZO1FBQy9CLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO2FBQ3JDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSwwQkFBMEIsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUMxRixNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sSUFBQSx1QkFBWSxFQUFDLG9CQUFXLENBQUMsSUFBSSxFQUFFLG9CQUFXLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBd0I7UUFDN0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7YUFDckMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLHdCQUF3QixDQUFDLENBQUM7YUFDbEYsS0FBSyxDQUFDLHlCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN0QyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sSUFBQSx1QkFBWSxFQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsb0JBQVcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLG9CQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2RixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0I7UUFDcEIsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7YUFDM0MsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLENBQUM7YUFDN0UsTUFBTSxFQUFFLENBQUM7UUFDWixPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsdUJBQWMsQ0FBQyxJQUFJLEVBQUUsdUJBQWMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN6RixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBMVBELG9FQTBQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNka2NvcmUgZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgUGVuZGluZ0FwcHJvdmFsRGF0YSxcbiAgUGVuZGluZ0FwcHJvdmFscyxcbiAgUmVxdWVzdFRyYWNlcixcbiAgUmVxdWVzdFR5cGUsXG4gIFR4UmVxdWVzdCxcbiAgY29tbW9uVHNzTWV0aG9kcyxcbiAgVHhSZXF1ZXN0U3RhdGUsXG4gIGRlY29kZU9yRWxzZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5pbXBvcnQgeyBjcmVhdGVNZXNzYWdlU2lnbmF0dXJlLCBkZXJpdmVMaWdodG5pbmdTZXJ2aWNlU2hhcmVkU2VjcmV0LCB1bndyYXBMaWdodG5pbmdDb2luU3BlY2lmaWMgfSBmcm9tICcuLi9saWdodG5pbmcnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlSW52b2ljZUJvZHksXG4gIEludm9pY2UsXG4gIEludm9pY2VJbmZvLFxuICBJbnZvaWNlUXVlcnksXG4gIExpZ2h0bmluZ0F1dGhLZXljaGFpbixcbiAgTGlnaHRuaW5nS2V5Y2hhaW4sXG4gIExuZENyZWF0ZVBheW1lbnRSZXNwb25zZSxcbiAgU3VibWl0UGF5bWVudFBhcmFtcyxcbiAgVXBkYXRlTGlnaHRuaW5nV2FsbGV0Q2xpZW50UmVxdWVzdCxcbiAgVXBkYXRlTGlnaHRuaW5nV2FsbGV0RW5jcnlwdGVkUmVxdWVzdCxcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uUXVlcnksXG4gIFBheW1lbnRJbmZvLFxuICBCYWNrdXBSZXNwb25zZSxcbiAgUGF5bWVudFF1ZXJ5LFxufSBmcm9tICcuLi9jb2RlY3MnO1xuaW1wb3J0IHsgTGlnaHRuaW5nUGF5bWVudEludGVudCwgTGlnaHRuaW5nUGF5bWVudFJlcXVlc3QgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcblxuZXhwb3J0IHR5cGUgUGF5SW52b2ljZVJlc3BvbnNlID0ge1xuICB0eFJlcXVlc3RJZDogc3RyaW5nO1xuICB0eFJlcXVlc3RTdGF0ZTogVHhSZXF1ZXN0U3RhdGU7XG4gIHBlbmRpbmdBcHByb3ZhbD86IFBlbmRpbmdBcHByb3ZhbERhdGE7XG4gIC8vIEFic2VudCBpZiB0aGVyZSdzIGEgcGVuZGluZyBhcHByb3ZhbFxuICBwYXltZW50U3RhdHVzPzogTG5kQ3JlYXRlUGF5bWVudFJlc3BvbnNlO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJTGlnaHRuaW5nV2FsbGV0IHtcbiAgLyoqXG4gICAqIEdldCB0aGUgbGlnaHRuaW5nIGtleWNoYWluIGZvciB0aGUgZ2l2ZW4gd2FsbGV0LlxuICAgKi9cbiAgZ2V0TGlnaHRuaW5nS2V5Y2hhaW4oKTogUHJvbWlzZTxMaWdodG5pbmdLZXljaGFpbj47XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlnaHRuaW5nIGF1dGgga2V5Y2hhaW5zIGZvciB0aGUgZ2l2ZW4gd2FsbGV0LlxuICAgKi9cbiAgZ2V0TGlnaHRuaW5nQXV0aEtleWNoYWlucygpOiBQcm9taXNlPHsgdXNlckF1dGhLZXk6IExpZ2h0bmluZ0F1dGhLZXljaGFpbjsgbm9kZUF1dGhLZXk6IExpZ2h0bmluZ0F1dGhLZXljaGFpbiB9PjtcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY29pbi1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBhIExpZ2h0bmluZyBXYWxsZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7VXBkYXRlTGlnaHRuaW5nV2FsbGV0Q2xpZW50UmVxdWVzdH0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgY29udGFpbmluZyB0aGUgdXBkYXRlZCB3YWxsZXQtc3BlY2lmaWMgZGV0YWlscy5cbiAgICogICAtIGBlbmNyeXB0ZWRTaWduZXJNYWNhcm9vbmAgKG9wdGlvbmFsKTogVGhpcyBtYWNhcm9vbiBpcyB1c2VkIGJ5IHRoZSB3YXRjaC1vbmx5IG5vZGUgdG8gYXNrIHRoZSBzaWduZXIgbm9kZSB0byBzaWduIHRyYW5zYWN0aW9ucy5cbiAgICogICAgIEVuY3J5cHRlZCB3aXRoIEVDREggc2VjcmV0IGtleSBmcm9tIHByaXZhdGUga2V5IG9mIHdhbGxldCdzIHVzZXIgYXV0aCBrZXkgYW5kIHB1YmxpYyBrZXkgb2YgbGlnaHRuaW5nIHNlcnZpY2UuXG4gICAqICAgLSBgZW5jcnlwdGVkU2lnbmVyQWRtaW5NYWNhcm9vbmAgKG9wdGlvbmFsKTogR2VuZXJhdGVkIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSB3YWxsZXQgb2YgdGhlIHNpZ25lciBub2RlLlxuICAgKiAgICAgRW5jcnlwdGVkIHdpdGggY2xpZW50J3Mgd2FsbGV0IHBhc3NwaHJhc2UuXG4gICAqICAgLSBgc2lnbmVySG9zdGAgKG9wdGlvbmFsKTogVGhlIGhvc3QgYWRkcmVzcyBvZiB0aGUgTGlnaHRuaW5nIHNpZ25lciBub2RlLlxuICAgKiAgIC0gYGVuY3J5cHRlZFNpZ25lclRsc0tleWAgKG9wdGlvbmFsKTogVGhlIHdhbGxldCBwYXNzcGhyYXNlIGVuY3J5cHRlZCBUTFMga2V5IG9mIHRoZSBzaWduZXIuXG4gICAqICAgLSBgcGFzc3BocmFzZWAgKHJlcXVpcmVkKTogVGhlIHdhbGxldCBwYXNzcGhyYXNlLlxuICAgKiAgIC0gYHNpZ25lclRsc0NlcnRgIChvcHRpb25hbCk6IFRoZSBUTFMgY2VydGlmaWNhdGUgb2YgdGhlIHNpZ25lci5cbiAgICogICAtIGB3YXRjaE9ubHlBY2NvdW50c2AgKG9wdGlvbmFsKTogVGhlc2UgYXJlIHRoZSBhY2NvdW50cyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHdhdGNoLW9ubHkgd2FsbGV0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gQSBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgdXBkYXRlZCB3YWxsZXQgcmVzcG9uc2Ugb3IgdGhyb3dpbmcgYW4gZXJyb3IgaWYgdGhlIHVwZGF0ZSBmYWlscy5cbiAgICovXG4gIHVwZGF0ZVdhbGxldENvaW5TcGVjaWZpYyhwYXJhbXM6IFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3QpOiBQcm9taXNlPHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbGlnaHRuaW5nIGludm9pY2VcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcyBJbnZvaWNlIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtiaWdpbnR9IHBhcmFtcy52YWx1ZU1zYXQgVGhlIHZhbHVlIG9mIHRoZSBpbnZvaWNlIGluIG1pbGxpc2F0b3NoaXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMubWVtb10gQSBtZW1vIG9yIGRlc2NyaXB0aW9uIGZvciB0aGUgaW52b2ljZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhcmFtcy5leHBpcnldIFRoZSBleHBpcnkgdGltZSBvZiB0aGUgaW52b2ljZSBpbiBzZWNvbmRzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEludm9pY2U+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY3JlYXRlZCBpbnZvaWNlXG4gICAqL1xuICBjcmVhdGVJbnZvaWNlKHBhcmFtczogQ3JlYXRlSW52b2ljZUJvZHkpOiBQcm9taXNlPEludm9pY2U+O1xuICAvKipcbiAgICogR2V0IGludm9pY2UgZGV0YWlscyBieSBwYXltZW50IGhhc2hcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBheW1lbnRIYXNoIC0gUGF5bWVudCBoYXNoIHRvIGxvb2t1cFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnZvaWNlSW5mbz59IEludm9pY2UgZGV0YWlsc1xuICAgKiBAdGhyb3dzIHtJbnZhbGlkUGF5bWVudEhhc2h9IFdoZW4gcGF5bWVudCBoYXNoIGlzIG5vdCB2YWxpZFxuICAgKi9cbiAgZ2V0SW52b2ljZShwYXltZW50SGFzaDogc3RyaW5nKTogUHJvbWlzZTxJbnZvaWNlSW5mbz47XG4gIC8qKlxuICAgKiBMaXN0cyBjdXJyZW50IGxpZ2h0bmluZyBpbnZvaWNlc1xuICAgKiBAcGFyYW0ge0ludm9pY2VRdWVyeX0gcGFyYW1zIFF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyBpbnZvaWNlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5zdGF0dXNdIFRoZSBzdGF0dXMgb2YgdGhlIGludm9pY2UgKG9wZW4sIHNldHRsZWQsIGNhbmNlbGVkKVxuICAgKiBAcGFyYW0ge2JpZ2ludH0gW3BhcmFtcy5saW1pdF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGludm9pY2VzIHRvIHJldHVyblxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuc3RhcnREYXRlXSBUaGUgc3RhcnQgZGF0ZSBmb3IgdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSB7RGF0ZX0gW3BhcmFtcy5lbmREYXRlXSBUaGUgZW5kIGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnZvaWNlSW5mb1tdPn0gTGlzdCBvZiBpbnZvaWNlc1xuICAgKi9cbiAgbGlzdEludm9pY2VzKHBhcmFtczogSW52b2ljZVF1ZXJ5KTogUHJvbWlzZTxJbnZvaWNlSW5mb1tdPjtcblxuICAvKipcbiAgICogUGF5IGEgbGlnaHRuaW5nIGludm9pY2VcbiAgICogQHBhcmFtIHtTdWJtaXRQYXltZW50UGFyYW1zfSBwYXJhbXMgLSBQYXltZW50IHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5pbnZvaWNlIC0gVGhlIGludm9pY2UgdG8gcGF5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuYW1vdW50TXNhdCAtIFRoZSBhbW91bnQgdG8gcGF5IGluIG1pbGxpc2F0b3NoaXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5wYXNzcGhyYXNlIC0gVGhlIHdhbGxldCBwYXNzcGhyYXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnNlcXVlbmNlSWRdIC0gT3B0aW9uYWwgc2VxdWVuY2UgSUQgZm9yIHRoZSByZXNwZWN0aXZlIHBheW1lbnQgdHJhbnNmZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMuY29tbWVudF0gLSBPcHRpb25hbCBjb21tZW50IGZvciB0aGUgcmVzcGVjdGl2ZSBwYXltZW50IHRyYW5zZmVyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBheUludm9pY2VSZXNwb25zZT59IFBheW1lbnQgcmVzdWx0IGNvbnRhaW5pbmcgdHJhbnNhY3Rpb24gcmVxdWVzdCBkZXRhaWxzIGFuZCBwYXltZW50IHN0YXR1c1xuICAgKi9cbiAgcGF5SW52b2ljZShwYXJhbXM6IFN1Ym1pdFBheW1lbnRQYXJhbXMpOiBQcm9taXNlPFBheUludm9pY2VSZXNwb25zZT47XG4gIC8qKlxuICAgKiBHZXQgcGF5bWVudCBkZXRhaWxzIGJ5IHBheW1lbnQgaGFzaFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF5bWVudEhhc2ggLSBQYXltZW50IGhhc2ggdG8gbG9va3VwXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBheW1lbnRJbmZvPn0gUGF5bWVudCBkZXRhaWxzXG4gICAqIEB0aHJvd3Mge0ludmFsaWRQYXltZW50SGFzaH0gV2hlbiBwYXltZW50IGhhc2ggaXMgbm90IHZhbGlkXG4gICAqL1xuICBnZXRQYXltZW50KHBheW1lbnRIYXNoOiBzdHJpbmcpOiBQcm9taXNlPFBheW1lbnRJbmZvPjtcbiAgLyoqXG4gICAqIExpc3QgcGF5bWVudHMgZm9yIGEgd2FsbGV0IHdpdGggb3B0aW9uYWwgZmlsdGVyaW5nXG4gICAqIEBwYXJhbSB7UGF5bWVudFF1ZXJ5fSBwYXJhbXMgUXVlcnkgcGFyYW1ldGVycyBmb3IgZmlsdGVyaW5nIHBheW1lbnRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLnN0YXR1c10gVGhlIHN0YXR1cyBvZiB0aGUgcGF5bWVudFxuICAgKiBAcGFyYW0ge2JpZ2ludH0gW3BhcmFtcy5saW1pdF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHBheW1lbnRzIHRvIHJldHVyblxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuc3RhcnREYXRlXSBUaGUgc3RhcnQgZGF0ZSBmb3IgdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSB7RGF0ZX0gW3BhcmFtcy5lbmREYXRlXSBUaGUgZW5kIGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXltZW50SW5mb1tdPn0gTGlzdCBvZiBwYXltZW50c1xuICAgKi9cbiAgbGlzdFBheW1lbnRzKHBhcmFtczogUGF5bWVudFF1ZXJ5KTogUHJvbWlzZTxQYXltZW50SW5mb1tdPjtcbiAgLyoqXG4gICAqIEdldCB0cmFuc2FjdGlvbiBkZXRhaWxzIGJ5IElEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eElkIC0gVHJhbnNhY3Rpb24gSUQgdG8gbG9va3VwXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFRyYW5zYWN0aW9uPn0gVHJhbnNhY3Rpb24gZGV0YWlsc1xuICAgKiBAdGhyb3dzIHtJbnZhbGlkVHhJZH0gV2hlbiB0cmFuc2FjdGlvbiBJRCBpcyBub3QgdmFsaWRcbiAgICovXG4gIGdldFRyYW5zYWN0aW9uKHR4SWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb24+O1xuXG4gIC8qKlxuICAgKiBMaXN0IHRyYW5zYWN0aW9ucyBmb3IgYSB3YWxsZXQgd2l0aCBvcHRpb25hbCBmaWx0ZXJpbmdcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblF1ZXJ5fSBwYXJhbXMgUXVlcnkgcGFyYW1ldGVycyBmb3IgZmlsdGVyaW5nIHRyYW5zYWN0aW9uc1xuICAgKiBAcGFyYW0ge2JpZ2ludH0gW3BhcmFtcy5saW1pdF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyB0byByZXR1cm5cbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLnN0YXJ0RGF0ZV0gVGhlIHN0YXJ0IGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuZW5kRGF0ZV0gVGhlIGVuZCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHJldHVybnMge1Byb21pc2U8VHJhbnNhY3Rpb25bXT59IExpc3Qgb2YgdHJhbnNhY3Rpb25zXG4gICAqL1xuICBsaXN0VHJhbnNhY3Rpb25zKHBhcmFtczogVHJhbnNhY3Rpb25RdWVyeSk6IFByb21pc2U8VHJhbnNhY3Rpb25bXT47XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY2hhbm5lbCBiYWNrdXAgZm9yIHRoZSBnaXZlbiB3YWxsZXQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJhY2t1cFJlc3BvbnNlPn0gQSBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgY2hhbm5lbCBiYWNrdXBcbiAgICovXG4gIGdldENoYW5uZWxCYWNrdXAoKTogUHJvbWlzZTxCYWNrdXBSZXNwb25zZT47XG59XG5cbmV4cG9ydCBjbGFzcyBTZWxmQ3VzdG9kaWFsTGlnaHRuaW5nV2FsbGV0IGltcGxlbWVudHMgSUxpZ2h0bmluZ1dhbGxldCB7XG4gIHB1YmxpYyB3YWxsZXQ6IHNka2NvcmUuSVdhbGxldDtcblxuICBjb25zdHJ1Y3Rvcih3YWxsZXQ6IHNka2NvcmUuSVdhbGxldCkge1xuICAgIGNvbnN0IGNvaW4gPSB3YWxsZXQuYmFzZUNvaW47XG4gICAgaWYgKGNvaW4uZ2V0RmFtaWx5KCkgIT09ICdsbmJ0YycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb2luIHRvIHVwZGF0ZSBsaWdodG5pbmcgd2FsbGV0OiAke2NvaW4uZ2V0RmFtaWx5KCl9YCk7XG4gICAgfVxuICAgIHRoaXMud2FsbGV0ID0gd2FsbGV0O1xuICB9XG5cbiAgcHJpdmF0ZSBlbmNyeXB0V2FsbGV0VXBkYXRlUmVxdWVzdChcbiAgICBwYXJhbXM6IFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3QsXG4gICAgdXNlckF1dGhLZXk6IExpZ2h0bmluZ0F1dGhLZXljaGFpblxuICApOiBVcGRhdGVMaWdodG5pbmdXYWxsZXRFbmNyeXB0ZWRSZXF1ZXN0IHtcbiAgICBjb25zdCBjb2luTmFtZSA9IHRoaXMud2FsbGV0LmNvaW4oKSBhcyAndGxuYnRjJyB8ICdsbmJ0Yyc7XG5cbiAgICBjb25zdCByZXF1ZXN0V2l0aEVuY3J5cHRpb246IFBhcnRpYWw8VXBkYXRlTGlnaHRuaW5nV2FsbGV0Q2xpZW50UmVxdWVzdCAmIFVwZGF0ZUxpZ2h0bmluZ1dhbGxldEVuY3J5cHRlZFJlcXVlc3Q+ID0ge1xuICAgICAgLi4ucGFyYW1zLFxuICAgIH07XG5cbiAgICBjb25zdCB1c2VyQXV0aFhwcnYgPSB0aGlzLndhbGxldC5iaXRnby5kZWNyeXB0KHtcbiAgICAgIHBhc3N3b3JkOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgIGlucHV0OiB1c2VyQXV0aEtleS5lbmNyeXB0ZWRQcnYsXG4gICAgfSk7XG5cbiAgICBpZiAocGFyYW1zLnNpZ25lclRsc0tleSkge1xuICAgICAgcmVxdWVzdFdpdGhFbmNyeXB0aW9uLmVuY3J5cHRlZFNpZ25lclRsc0tleSA9IHRoaXMud2FsbGV0LmJpdGdvLmVuY3J5cHQoe1xuICAgICAgICBwYXNzd29yZDogcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICAgIGlucHV0OiBwYXJhbXMuc2lnbmVyVGxzS2V5LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zaWduZXJBZG1pbk1hY2Fyb29uKSB7XG4gICAgICByZXF1ZXN0V2l0aEVuY3J5cHRpb24uZW5jcnlwdGVkU2lnbmVyQWRtaW5NYWNhcm9vbiA9IHRoaXMud2FsbGV0LmJpdGdvLmVuY3J5cHQoe1xuICAgICAgICBwYXNzd29yZDogcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICAgIGlucHV0OiBwYXJhbXMuc2lnbmVyQWRtaW5NYWNhcm9vbixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuc2lnbmVyTWFjYXJvb24pIHtcbiAgICAgIHJlcXVlc3RXaXRoRW5jcnlwdGlvbi5lbmNyeXB0ZWRTaWduZXJNYWNhcm9vbiA9IHRoaXMud2FsbGV0LmJpdGdvLmVuY3J5cHQoe1xuICAgICAgICBwYXNzd29yZDogZGVyaXZlTGlnaHRuaW5nU2VydmljZVNoYXJlZFNlY3JldChjb2luTmFtZSwgdXNlckF1dGhYcHJ2KS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIGlucHV0OiBwYXJhbXMuc2lnbmVyTWFjYXJvb24sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdC5leGFjdChVcGRhdGVMaWdodG5pbmdXYWxsZXRFbmNyeXB0ZWRSZXF1ZXN0KS5lbmNvZGUocmVxdWVzdFdpdGhFbmNyeXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIGdldExpZ2h0bmluZ0tleWNoYWluKCk6IFByb21pc2U8TGlnaHRuaW5nS2V5Y2hhaW4+IHtcbiAgICBjb25zdCBrZXlJZHMgPSB0aGlzLndhbGxldC5rZXlJZHMoKTtcbiAgICBpZiAoa2V5SWRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG51bWJlciBvZiBrZXkgaW4gbGlnaHRuaW5nIHdhbGxldDogJHtrZXlJZHMubGVuZ3RofWApO1xuICAgIH1cbiAgICBjb25zdCBrZXljaGFpbiA9IGF3YWl0IHRoaXMud2FsbGV0LmJhc2VDb2luLmtleWNoYWlucygpLmdldCh7IGlkOiBrZXlJZHNbMF0gfSk7XG4gICAgcmV0dXJuIHNka2NvcmUuZGVjb2RlT3JFbHNlKExpZ2h0bmluZ0tleWNoYWluLm5hbWUsIExpZ2h0bmluZ0tleWNoYWluLCBrZXljaGFpbiwgKF8pID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB1c2VyIGtleWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0TGlnaHRuaW5nQXV0aEtleWNoYWlucygpOiBQcm9taXNlPHtcbiAgICB1c2VyQXV0aEtleTogTGlnaHRuaW5nQXV0aEtleWNoYWluO1xuICAgIG5vZGVBdXRoS2V5OiBMaWdodG5pbmdBdXRoS2V5Y2hhaW47XG4gIH0+IHtcbiAgICBjb25zdCBhdXRoS2V5SWRzID0gdGhpcy53YWxsZXQuY29pblNwZWNpZmljKCk/LmtleXM7XG4gICAgaWYgKGF1dGhLZXlJZHM/Lmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG51bWJlciBvZiBhdXRoIGtleXMgaW4gbGlnaHRuaW5nIHdhbGxldDogJHthdXRoS2V5SWRzPy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvaW4gPSB0aGlzLndhbGxldC5iYXNlQ29pbjtcbiAgICBjb25zdCBrZXljaGFpbnMgPSBhd2FpdCBQcm9taXNlLmFsbChhdXRoS2V5SWRzLm1hcCgoaWQpID0+IGNvaW4ua2V5Y2hhaW5zKCkuZ2V0KHsgaWQgfSkpKTtcbiAgICBjb25zdCBhdXRoS2V5Y2hhaW5zID0ga2V5Y2hhaW5zLm1hcCgoa2V5Y2hhaW4pID0+IHtcbiAgICAgIHJldHVybiBzZGtjb3JlLmRlY29kZU9yRWxzZShMaWdodG5pbmdBdXRoS2V5Y2hhaW4ubmFtZSwgTGlnaHRuaW5nQXV0aEtleWNoYWluLCBrZXljaGFpbiwgKF8pID0+IHtcbiAgICAgICAgLy8gRE9OJ1QgdGhyb3cgZXJyb3JzIGZyb20gZGVjb2RlT3JFbHNlLiBJdCBjb3VsZCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGxpZ2h0bmluZyBhdXRoIGtleTogJHtrZXljaGFpbj8uaWR9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBbdXNlckF1dGhLZXksIG5vZGVBdXRoS2V5XSA9IChbJ3VzZXJBdXRoJywgJ25vZGVBdXRoJ10gYXMgY29uc3QpLm1hcCgocHVycG9zZSkgPT4ge1xuICAgICAgY29uc3Qga2V5Y2hhaW4gPSBhdXRoS2V5Y2hhaW5zLmZpbmQoXG4gICAgICAgIChrKSA9PiB1bndyYXBMaWdodG5pbmdDb2luU3BlY2lmaWMoay5jb2luU3BlY2lmaWMsIGNvaW4uZ2V0Q2hhaW4oKSkucHVycG9zZSA9PT0gcHVycG9zZVxuICAgICAgKTtcbiAgICAgIGlmICgha2V5Y2hhaW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nICR7cHVycG9zZX0ga2V5YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ga2V5Y2hhaW47XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyB1c2VyQXV0aEtleSwgbm9kZUF1dGhLZXkgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVdhbGxldENvaW5TcGVjaWZpYyhwYXJhbXM6IFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3QpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICBzZGtjb3JlLmRlY29kZU9yRWxzZShcbiAgICAgIFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3QubmFtZSxcbiAgICAgIFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3QsXG4gICAgICBwYXJhbXMsXG4gICAgICAoZXJyb3JzKSA9PiB7XG4gICAgICAgIC8vIERPTidUIHRocm93IGVycm9ycyBmcm9tIGRlY29kZU9yRWxzZS4gSXQgY291bGQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24uXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJhbXMgZm9yIGxpZ2h0bmluZyBzcGVjaWZpYyB1cGRhdGUgd2FsbGV0YCk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHsgdXNlckF1dGhLZXkgfSA9IGF3YWl0IHRoaXMuZ2V0TGlnaHRuaW5nQXV0aEtleWNoYWlucygpO1xuICAgIGNvbnN0IHVwZGF0ZVJlcXVlc3RXaXRoRW5jcnlwdGlvbiA9IHRoaXMuZW5jcnlwdFdhbGxldFVwZGF0ZVJlcXVlc3QocGFyYW1zLCB1c2VyQXV0aEtleSk7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gY3JlYXRlTWVzc2FnZVNpZ25hdHVyZShcbiAgICAgIHVwZGF0ZVJlcXVlc3RXaXRoRW5jcnlwdGlvbixcbiAgICAgIHRoaXMud2FsbGV0LmJpdGdvLmRlY3J5cHQoeyBwYXNzd29yZDogcGFyYW1zLnBhc3NwaHJhc2UsIGlucHV0OiB1c2VyQXV0aEtleS5lbmNyeXB0ZWRQcnYgfSlcbiAgICApO1xuICAgIGNvbnN0IGNvaW5TcGVjaWZpYyA9IHtcbiAgICAgIFt0aGlzLndhbGxldC5jb2luKCldOiB7XG4gICAgICAgIHNpZ25lZFJlcXVlc3Q6IHVwZGF0ZVJlcXVlc3RXaXRoRW5jcnlwdGlvbixcbiAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBhd2FpdCB0aGlzLndhbGxldC5iaXRnby5wdXQodGhpcy53YWxsZXQudXJsKCkpLnNlbmQoeyBjb2luU3BlY2lmaWMgfSkucmVzdWx0KCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVJbnZvaWNlKHBhcmFtczogQ3JlYXRlSW52b2ljZUJvZHkpOiBQcm9taXNlPEludm9pY2U+IHtcbiAgICBjb25zdCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnBvc3QodGhpcy53YWxsZXQuYmFzZUNvaW4udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL2ludm9pY2VgKSlcbiAgICAgIC5zZW5kKHQuZXhhY3QoQ3JlYXRlSW52b2ljZUJvZHkpLmVuY29kZShwYXJhbXMpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBzZGtjb3JlLmRlY29kZU9yRWxzZShJbnZvaWNlLm5hbWUsIEludm9pY2UsIGNyZWF0ZUludm9pY2VSZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICAvLyBET04nVCB0aHJvdyBlcnJvcnMgZnJvbSBkZWNvZGVPckVsc2UuIEl0IGNvdWxkIGxlYWsgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNyZWF0ZSBpbnZvaWNlIHJlc3BvbnNlICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRJbnZvaWNlKHBheW1lbnRIYXNoOiBzdHJpbmcpOiBQcm9taXNlPEludm9pY2VJbmZvPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iYXNlQ29pbi51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvaW52b2ljZS8ke3BheW1lbnRIYXNofWApKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBkZWNvZGVPckVsc2UoSW52b2ljZUluZm8ubmFtZSwgSW52b2ljZUluZm8sIHJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBnZXQgaW52b2ljZSByZXNwb25zZSAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdEludm9pY2VzKHBhcmFtczogSW52b2ljZVF1ZXJ5KTogUHJvbWlzZTxJbnZvaWNlSW5mb1tdPiB7XG4gICAgY29uc3QgcmV0dXJuQ29kZWMgPSB0LmFycmF5KEludm9pY2VJbmZvKTtcbiAgICBjb25zdCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iYXNlQ29pbi51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvaW52b2ljZWApKVxuICAgICAgLnF1ZXJ5KEludm9pY2VRdWVyeS5lbmNvZGUocGFyYW1zKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gc2RrY29yZS5kZWNvZGVPckVsc2UocmV0dXJuQ29kZWMubmFtZSwgcmV0dXJuQ29kZWMsIGNyZWF0ZUludm9pY2VSZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGlzdCBpbnZvaWNlcyByZXNwb25zZSAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcGF5SW52b2ljZShwYXJhbXM6IFN1Ym1pdFBheW1lbnRQYXJhbXMpOiBQcm9taXNlPFBheUludm9pY2VSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICB0aGlzLndhbGxldC5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcUlkKTtcblxuICAgIGNvbnN0IHsgdXNlckF1dGhLZXkgfSA9IGF3YWl0IHRoaXMuZ2V0TGlnaHRuaW5nQXV0aEtleWNoYWlucygpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNyZWF0ZU1lc3NhZ2VTaWduYXR1cmUoXG4gICAgICB0LmV4YWN0KExpZ2h0bmluZ1BheW1lbnRSZXF1ZXN0KS5lbmNvZGUocGFyYW1zKSxcbiAgICAgIHRoaXMud2FsbGV0LmJpdGdvLmRlY3J5cHQoeyBwYXNzd29yZDogcGFyYW1zLnBhc3NwaHJhc2UsIGlucHV0OiB1c2VyQXV0aEtleS5lbmNyeXB0ZWRQcnYgfSlcbiAgICApO1xuXG4gICAgY29uc3QgcGF5bWVudEludGVudDogTGlnaHRuaW5nUGF5bWVudEludGVudCA9IHtcbiAgICAgIGNvbW1lbnQ6IHBhcmFtcy5jb21tZW50LFxuICAgICAgc2VxdWVuY2VJZDogcGFyYW1zLnNlcXVlbmNlSWQsXG4gICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICBzaWduZWRSZXF1ZXN0OiB7XG4gICAgICAgIGludm9pY2U6IHBhcmFtcy5pbnZvaWNlLFxuICAgICAgICBhbW91bnRNc2F0OiBwYXJhbXMuYW1vdW50TXNhdCxcbiAgICAgICAgZmVlTGltaXRNc2F0OiBwYXJhbXMuZmVlTGltaXRNc2F0LFxuICAgICAgICBmZWVMaW1pdFJhdGlvOiBwYXJhbXMuZmVlTGltaXRSYXRpbyxcbiAgICAgIH0sXG4gICAgICBzaWduYXR1cmUsXG4gICAgfTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZSA9IChhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnBvc3QodGhpcy53YWxsZXQuYml0Z28udXJsKCcvd2FsbGV0LycgKyB0aGlzLndhbGxldC5pZCgpICsgJy90eHJlcXVlc3RzJywgMikpXG4gICAgICAuc2VuZChMaWdodG5pbmdQYXltZW50SW50ZW50LmVuY29kZShwYXltZW50SW50ZW50KSlcbiAgICAgIC5yZXN1bHQoKSkgYXMgVHhSZXF1ZXN0O1xuXG4gICAgaWYgKHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS5zdGF0ZSA9PT0gJ3BlbmRpbmdBcHByb3ZhbCcpIHtcbiAgICAgIGNvbnN0IHBlbmRpbmdBcHByb3ZhbHMgPSBuZXcgUGVuZGluZ0FwcHJvdmFscyh0aGlzLndhbGxldC5iaXRnbywgdGhpcy53YWxsZXQuYmFzZUNvaW4pO1xuICAgICAgY29uc3QgcGVuZGluZ0FwcHJvdmFsID0gYXdhaXQgcGVuZGluZ0FwcHJvdmFscy5nZXQoeyBpZDogdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnBlbmRpbmdBcHByb3ZhbElkIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGVuZGluZ0FwcHJvdmFsOiBwZW5kaW5nQXBwcm92YWwudG9KU09OKCksXG4gICAgICAgIHR4UmVxdWVzdElkOiB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHhSZXF1ZXN0SWQsXG4gICAgICAgIHR4UmVxdWVzdFN0YXRlOiB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUuc3RhdGUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQgPSBhd2FpdCBjb21tb25Uc3NNZXRob2RzLnNlbmRUeFJlcXVlc3QoXG4gICAgICB0aGlzLndhbGxldC5iaXRnbyxcbiAgICAgIHRoaXMud2FsbGV0LmlkKCksXG4gICAgICB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHhSZXF1ZXN0SWQsXG4gICAgICBSZXF1ZXN0VHlwZS50eCxcbiAgICAgIHJlcUlkXG4gICAgKTtcblxuICAgIGNvbnN0IGNvaW5TcGVjaWZpYyA9IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQudHJhbnNhY3Rpb25zPy5bMF0/LnVuc2lnbmVkVHg/LmNvaW5TcGVjaWZpYztcblxuICAgIHJldHVybiB7XG4gICAgICB0eFJlcXVlc3RJZDogdHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnR4UmVxdWVzdElkLFxuICAgICAgdHhSZXF1ZXN0U3RhdGU6IHRyYW5zYWN0aW9uUmVxdWVzdFNlbmQuc3RhdGUsXG4gICAgICBwYXltZW50U3RhdHVzOiBjb2luU3BlY2lmaWNcbiAgICAgICAgPyB0LmV4YWN0KExuZENyZWF0ZVBheW1lbnRSZXNwb25zZSkuZW5jb2RlKGNvaW5TcGVjaWZpYyBhcyBMbmRDcmVhdGVQYXltZW50UmVzcG9uc2UpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRQYXltZW50KHBheW1lbnRIYXNoOiBzdHJpbmcpOiBQcm9taXNlPFBheW1lbnRJbmZvPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iYXNlQ29pbi51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvcGF5bWVudC8ke3BheW1lbnRIYXNofWApKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBkZWNvZGVPckVsc2UoUGF5bWVudEluZm8ubmFtZSwgUGF5bWVudEluZm8sIHJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXltZW50IHJlc3BvbnNlOiAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdFBheW1lbnRzKHBhcmFtczogUGF5bWVudFF1ZXJ5KTogUHJvbWlzZTxQYXltZW50SW5mb1tdPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iYXNlQ29pbi51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvcGF5bWVudGApKVxuICAgICAgLnF1ZXJ5KFBheW1lbnRRdWVyeS5lbmNvZGUocGFyYW1zKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKHQuYXJyYXkoUGF5bWVudEluZm8pLm5hbWUsIHQuYXJyYXkoUGF5bWVudEluZm8pLCByZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGF5bWVudCBsaXN0IHJlc3BvbnNlOiAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0VHJhbnNhY3Rpb24odHhJZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYmFzZUNvaW4udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL3RyYW5zYWN0aW9uLyR7dHhJZH1gKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKFRyYW5zYWN0aW9uLm5hbWUsIFRyYW5zYWN0aW9uLCByZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHJhbnNhY3Rpb24gcmVzcG9uc2U6ICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0VHJhbnNhY3Rpb25zKHBhcmFtczogVHJhbnNhY3Rpb25RdWVyeSk6IFByb21pc2U8VHJhbnNhY3Rpb25bXT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYmFzZUNvaW4udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL3RyYW5zYWN0aW9uYCkpXG4gICAgICAucXVlcnkoVHJhbnNhY3Rpb25RdWVyeS5lbmNvZGUocGFyYW1zKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKHQuYXJyYXkoVHJhbnNhY3Rpb24pLm5hbWUsIHQuYXJyYXkoVHJhbnNhY3Rpb24pLCByZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHJhbnNhY3Rpb24gbGlzdCByZXNwb25zZTogJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldENoYW5uZWxCYWNrdXAoKTogUHJvbWlzZTxCYWNrdXBSZXNwb25zZT4ge1xuICAgIGNvbnN0IGJhY2t1cFJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYmFzZUNvaW4udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL2JhY2t1cGApKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBzZGtjb3JlLmRlY29kZU9yRWxzZShCYWNrdXBSZXNwb25zZS5uYW1lLCBCYWNrdXBSZXNwb25zZSwgYmFja3VwUmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJhY2t1cCByZXNwb25zZTogJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
203
|
+
exports.LightningWallet = LightningWallet;
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dhbGxldC9saWdodG5pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0NBLG9EQWFDO0FBS0QsOERBOEJDO0FBeEZELDhEQUFnRDtBQUNoRCxtREFTOEI7QUFDOUIseUNBQTJCO0FBQzNCLDRDQUFtRjtBQUNuRixzQ0FhbUI7QUFDbkIsc0RBQXNGO0FBVXRGOztHQUVHO0FBQ0ksS0FBSyxVQUFVLG9CQUFvQixDQUFDLE1BQXVCO0lBQ2hFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDN0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQy9CLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0QsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLDBCQUFpQixDQUFDLElBQUksRUFBRSwwQkFBaUIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNyRixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdEMsQ0FBQyxD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LEVBQUUsRUFBRSx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNsRixLQUFLLENBQUMseUJBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3RDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxJQUFBLHVCQUFZLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxvQkFBVyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsb0JBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZGLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUExSUQsMENBMElDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc2RrY29yZSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQge1xuICBQZW5kaW5nQXBwcm92YWxEYXRhLFxuICBQZW5kaW5nQXBwcm92YWxzLFxuICBSZXF1ZXN0VHJhY2VyLFxuICBSZXF1ZXN0VHlwZSxcbiAgVHhSZXF1ZXN0LFxuICBjb21tb25Uc3NNZXRob2RzLFxuICBUeFJlcXVlc3RTdGF0ZSxcbiAgZGVjb2RlT3JFbHNlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7IGNyZWF0ZU1lc3NhZ2VTaWduYXR1cmUsIHVud3JhcExpZ2h0bmluZ0NvaW5TcGVjaWZpYyB9IGZyb20gJy4uL2xpZ2h0bmluZyc7XG5pbXBvcnQge1xuICBDcmVhdGVJbnZvaWNlQm9keSxcbiAgSW52b2ljZSxcbiAgSW52b2ljZUluZm8sXG4gIEludm9pY2VRdWVyeSxcbiAgTGlnaHRuaW5nQXV0aEtleWNoYWluLFxuICBMaWdodG5pbmdLZXljaGFpbixcbiAgTG5kQ3JlYXRlUGF5bWVudFJlc3BvbnNlLFxuICBTdWJtaXRQYXltZW50UGFyYW1zLFxuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25RdWVyeSxcbiAgUGF5bWVudEluZm8sXG4gIFBheW1lbnRRdWVyeSxcbn0gZnJvbSAnLi4vY29kZWNzJztcbmltcG9ydCB7IExpZ2h0bmluZ1BheW1lbnRJbnRlbnQsIExpZ2h0bmluZ1BheW1lbnRSZXF1ZXN0IH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFBheUludm9pY2VSZXNwb25zZSA9IHtcbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZztcbiAgdHhSZXF1ZXN0U3RhdGU6IFR4UmVxdWVzdFN0YXRlO1xuICBwZW5kaW5nQXBwcm92YWw/OiBQZW5kaW5nQXBwcm92YWxEYXRhO1xuICAvLyBBYnNlbnQgaWYgdGhlcmUncyBhIHBlbmRpbmcgYXBwcm92YWxcbiAgcGF5bWVudFN0YXR1cz86IExuZENyZWF0ZVBheW1lbnRSZXNwb25zZTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBsaWdodG5pbmcga2V5Y2hhaW4gZm9yIHRoZSBnaXZlbiB3YWxsZXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRMaWdodG5pbmdLZXljaGFpbih3YWxsZXQ6IHNka2NvcmUuSVdhbGxldCk6IFByb21pc2U8TGlnaHRuaW5nS2V5Y2hhaW4+IHtcbiAgY29uc3QgY29pbiA9IHdhbGxldC5iYXNlQ29pbjtcbiAgaWYgKGNvaW4uZ2V0RmFtaWx5KCkgIT09ICdsbmJ0YycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY29pbiB0byBnZXQgbGlnaHRuaW5nIHdhbGxldCBrZXk6ICR7Y29pbi5nZXRGYW1pbHkoKX1gKTtcbiAgfVxuICBjb25zdCBrZXlJZHMgPSB3YWxsZXQua2V5SWRzKCk7XG4gIGlmIChrZXlJZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG51bWJlciBvZiBrZXkgaW4gbGlnaHRuaW5nIHdhbGxldDogJHtrZXlJZHMubGVuZ3RofWApO1xuICB9XG4gIGNvbnN0IGtleWNoYWluID0gYXdhaXQgY29pbi5rZXljaGFpbnMoKS5nZXQoeyBpZDoga2V5SWRzWzBdIH0pO1xuICByZXR1cm4gc2RrY29yZS5kZWNvZGVPckVsc2UoTGlnaHRuaW5nS2V5Y2hhaW4ubmFtZSwgTGlnaHRuaW5nS2V5Y2hhaW4sIGtleWNoYWluLCAoXykgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB1c2VyIGtleWApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGxpZ2h0bmluZyBhdXRoIGtleWNoYWlucyBmb3IgdGhlIGdpdmVuIHdhbGxldC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldExpZ2h0bmluZ0F1dGhLZXljaGFpbnMod2FsbGV0OiBzZGtjb3JlLklXYWxsZXQpOiBQcm9taXNlPHtcbiAgdXNlckF1dGhLZXk6IExpZ2h0bmluZ0F1dGhLZXljaGFpbjtcbiAgbm9kZUF1dGhLZXk6IExpZ2h0bmluZ0F1dGhLZXljaGFpbjtcbn0+IHtcbiAgY29uc3QgY29pbiA9IHdhbGxldC5iYXNlQ29pbjtcbiAgaWYgKGNvaW4uZ2V0RmFtaWx5KCkgIT09ICdsbmJ0YycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY29pbiB0byBnZXQgbGlnaHRuaW5nIHdhbGxldCBhdXRoIGtleXM6ICR7Y29pbi5nZXRGYW1pbHkoKX1gKTtcbiAgfVxuICBjb25zdCBhdXRoS2V5SWRzID0gd2FsbGV0LmNvaW5TcGVjaWZpYygpPy5rZXlzO1xuICBpZiAoYXV0aEtleUlkcz8ubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG51bWJlciBvZiBhdXRoIGtleXMgaW4gbGlnaHRuaW5nIHdhbGxldDogJHthdXRoS2V5SWRzPy5sZW5ndGh9YCk7XG4gIH1cbiAgY29uc3Qga2V5Y2hhaW5zID0gYXdhaXQgUHJvbWlzZS5hbGwoYXV0aEtleUlkcy5tYXAoKGlkKSA9PiBjb2luLmtleWNoYWlucygpLmdldCh7IGlkIH0pKSk7XG4gIGNvbnN0IGF1dGhLZXljaGFpbnMgPSBrZXljaGFpbnMubWFwKChrZXljaGFpbikgPT4ge1xuICAgIHJldHVybiBzZGtjb3JlLmRlY29kZU9yRWxzZShMaWdodG5pbmdBdXRoS2V5Y2hhaW4ubmFtZSwgTGlnaHRuaW5nQXV0aEtleWNoYWluLCBrZXljaGFpbiwgKF8pID0+IHtcbiAgICAgIC8vIERPTidUIHRocm93IGVycm9ycyBmcm9tIGRlY29kZU9yRWxzZS4gSXQgY291bGQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24uXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGlnaHRuaW5nIGF1dGgga2V5OiAke2tleWNoYWluPy5pZH1gKTtcbiAgICB9KTtcbiAgfSk7XG4gIGNvbnN0IFt1c2VyQXV0aEtleSwgbm9kZUF1dGhLZXldID0gKFsndXNlckF1dGgnLCAnbm9kZUF1dGgnXSBhcyBjb25zdCkubWFwKChwdXJwb3NlKSA9PiB7XG4gICAgY29uc3Qga2V5Y2hhaW4gPSBhdXRoS2V5Y2hhaW5zLmZpbmQoXG4gICAgICAoaykgPT4gdW53cmFwTGlnaHRuaW5nQ29pblNwZWNpZmljKGsuY29pblNwZWNpZmljLCBjb2luLmdldENoYWluKCkpLnB1cnBvc2UgPT09IHB1cnBvc2VcbiAgICApO1xuICAgIGlmICgha2V5Y2hhaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAke3B1cnBvc2V9IGtleWApO1xuICAgIH1cbiAgICByZXR1cm4ga2V5Y2hhaW47XG4gIH0pO1xuXG4gIHJldHVybiB7IHVzZXJBdXRoS2V5LCBub2RlQXV0aEtleSB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMaWdodG5pbmdXYWxsZXQge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGxpZ2h0bmluZyBpbnZvaWNlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXMgSW52b2ljZSBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7YmlnaW50fSBwYXJhbXMudmFsdWVNc2F0IFRoZSB2YWx1ZSBvZiB0aGUgaW52b2ljZSBpbiBtaWxsaXNhdG9zaGlzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLm1lbW9dIEEgbWVtbyBvciBkZXNjcmlwdGlvbiBmb3IgdGhlIGludm9pY2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMuZXhwaXJ5XSBUaGUgZXhwaXJ5IHRpbWUgb2YgdGhlIGludm9pY2UgaW4gc2Vjb25kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnZvaWNlPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNyZWF0ZWQgaW52b2ljZVxuICAgKi9cbiAgY3JlYXRlSW52b2ljZShwYXJhbXM6IENyZWF0ZUludm9pY2VCb2R5KTogUHJvbWlzZTxJbnZvaWNlPjtcbiAgLyoqXG4gICAqIEdldCBpbnZvaWNlIGRldGFpbHMgYnkgcGF5bWVudCBoYXNoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXltZW50SGFzaCAtIFBheW1lbnQgaGFzaCB0byBsb29rdXBcbiAgICogQHJldHVybnMge1Byb21pc2U8SW52b2ljZUluZm8+fSBJbnZvaWNlIGRldGFpbHNcbiAgICogQHRocm93cyB7SW52YWxpZFBheW1lbnRIYXNofSBXaGVuIHBheW1lbnQgaGFzaCBpcyBub3QgdmFsaWRcbiAgICovXG4gIGdldEludm9pY2UocGF5bWVudEhhc2g6IHN0cmluZyk6IFByb21pc2U8SW52b2ljZUluZm8+O1xuICAvKipcbiAgICogTGlzdHMgY3VycmVudCBsaWdodG5pbmcgaW52b2ljZXNcbiAgICogQHBhcmFtIHtJbnZvaWNlUXVlcnl9IHBhcmFtcyBRdWVyeSBwYXJhbWV0ZXJzIGZvciBmaWx0ZXJpbmcgaW52b2ljZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMuc3RhdHVzXSBUaGUgc3RhdHVzIG9mIHRoZSBpbnZvaWNlIChvcGVuLCBzZXR0bGVkLCBjYW5jZWxlZClcbiAgICogQHBhcmFtIHtiaWdpbnR9IFtwYXJhbXMubGltaXRdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnZvaWNlcyB0byByZXR1cm5cbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLnN0YXJ0RGF0ZV0gVGhlIHN0YXJ0IGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuZW5kRGF0ZV0gVGhlIGVuZCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHJldHVybnMge1Byb21pc2U8SW52b2ljZUluZm9bXT59IExpc3Qgb2YgaW52b2ljZXNcbiAgICovXG4gIGxpc3RJbnZvaWNlcyhwYXJhbXM6IEludm9pY2VRdWVyeSk6IFByb21pc2U8SW52b2ljZUluZm9bXT47XG5cbiAgLyoqXG4gICAqIFBheSBhIGxpZ2h0bmluZyBpbnZvaWNlXG4gICAqIEBwYXJhbSB7U3VibWl0UGF5bWVudFBhcmFtc30gcGFyYW1zIC0gUGF5bWVudCBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuaW52b2ljZSAtIFRoZSBpbnZvaWNlIHRvIHBheVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmFtb3VudE1zYXQgLSBUaGUgYW1vdW50IHRvIHBheSBpbiBtaWxsaXNhdG9zaGlzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMucGFzc3BocmFzZSAtIFRoZSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5zZXF1ZW5jZUlkXSAtIE9wdGlvbmFsIHNlcXVlbmNlIElEIGZvciB0aGUgcmVzcGVjdGl2ZSBwYXltZW50IHRyYW5zZmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyYW1zLmNvbW1lbnRdIC0gT3B0aW9uYWwgY29tbWVudCBmb3IgdGhlIHJlc3BlY3RpdmUgcGF5bWVudCB0cmFuc2ZlclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXlJbnZvaWNlUmVzcG9uc2U+fSBQYXltZW50IHJlc3VsdCBjb250YWluaW5nIHRyYW5zYWN0aW9uIHJlcXVlc3QgZGV0YWlscyBhbmQgcGF5bWVudCBzdGF0dXNcbiAgICovXG4gIHBheUludm9pY2UocGFyYW1zOiBTdWJtaXRQYXltZW50UGFyYW1zKTogUHJvbWlzZTxQYXlJbnZvaWNlUmVzcG9uc2U+O1xuICAvKipcbiAgICogR2V0IHBheW1lbnQgZGV0YWlscyBieSBwYXltZW50IGhhc2hcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBheW1lbnRIYXNoIC0gUGF5bWVudCBoYXNoIHRvIGxvb2t1cFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXltZW50SW5mbz59IFBheW1lbnQgZGV0YWlsc1xuICAgKiBAdGhyb3dzIHtJbnZhbGlkUGF5bWVudEhhc2h9IFdoZW4gcGF5bWVudCBoYXNoIGlzIG5vdCB2YWxpZFxuICAgKi9cbiAgZ2V0UGF5bWVudChwYXltZW50SGFzaDogc3RyaW5nKTogUHJvbWlzZTxQYXltZW50SW5mbz47XG4gIC8qKlxuICAgKiBMaXN0IHBheW1lbnRzIGZvciBhIHdhbGxldCB3aXRoIG9wdGlvbmFsIGZpbHRlcmluZ1xuICAgKiBAcGFyYW0ge1BheW1lbnRRdWVyeX0gcGFyYW1zIFF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyBwYXltZW50c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy5zdGF0dXNdIFRoZSBzdGF0dXMgb2YgdGhlIHBheW1lbnRcbiAgICogQHBhcmFtIHtiaWdpbnR9IFtwYXJhbXMubGltaXRdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXltZW50cyB0byByZXR1cm5cbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLnN0YXJ0RGF0ZV0gVGhlIHN0YXJ0IGRhdGUgZm9yIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge0RhdGV9IFtwYXJhbXMuZW5kRGF0ZV0gVGhlIGVuZCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHJldHVybnMge1Byb21pc2U8UGF5bWVudEluZm9bXT59IExpc3Qgb2YgcGF5bWVudHNcbiAgICovXG4gIGxpc3RQYXltZW50cyhwYXJhbXM6IFBheW1lbnRRdWVyeSk6IFByb21pc2U8UGF5bWVudEluZm9bXT47XG4gIC8qKlxuICAgKiBHZXQgdHJhbnNhY3Rpb24gZGV0YWlscyBieSBJRFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHhJZCAtIFRyYW5zYWN0aW9uIElEIHRvIGxvb2t1cFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUcmFuc2FjdGlvbj59IFRyYW5zYWN0aW9uIGRldGFpbHNcbiAgICogQHRocm93cyB7SW52YWxpZFR4SWR9IFdoZW4gdHJhbnNhY3Rpb24gSUQgaXMgbm90IHZhbGlkXG4gICAqL1xuICBnZXRUcmFuc2FjdGlvbih0eElkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uPjtcblxuICAvKipcbiAgICogTGlzdCB0cmFuc2FjdGlvbnMgZm9yIGEgd2FsbGV0IHdpdGggb3B0aW9uYWwgZmlsdGVyaW5nXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25RdWVyeX0gcGFyYW1zIFF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyB0cmFuc2FjdGlvbnNcbiAgICogQHBhcmFtIHtiaWdpbnR9IFtwYXJhbXMubGltaXRdIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgdG8gcmV0dXJuXG4gICAqIEBwYXJhbSB7RGF0ZX0gW3BhcmFtcy5zdGFydERhdGVdIFRoZSBzdGFydCBkYXRlIGZvciB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHtEYXRlfSBbcGFyYW1zLmVuZERhdGVdIFRoZSBlbmQgZGF0ZSBmb3IgdGhlIHF1ZXJ5XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFRyYW5zYWN0aW9uW10+fSBMaXN0IG9mIHRyYW5zYWN0aW9uc1xuICAgKi9cbiAgbGlzdFRyYW5zYWN0aW9ucyhwYXJhbXM6IFRyYW5zYWN0aW9uUXVlcnkpOiBQcm9taXNlPFRyYW5zYWN0aW9uW10+O1xufVxuXG5leHBvcnQgY2xhc3MgTGlnaHRuaW5nV2FsbGV0IGltcGxlbWVudHMgSUxpZ2h0bmluZ1dhbGxldCB7XG4gIHB1YmxpYyB3YWxsZXQ6IHNka2NvcmUuSVdhbGxldDtcblxuICBjb25zdHJ1Y3Rvcih3YWxsZXQ6IHNka2NvcmUuSVdhbGxldCkge1xuICAgIGNvbnN0IGNvaW4gPSB3YWxsZXQuYmFzZUNvaW47XG4gICAgaWYgKGNvaW4uZ2V0RmFtaWx5KCkgIT09ICdsbmJ0YycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb2luIGZvciBsaWdodG5pbmcgd2FsbGV0OiAke2NvaW4uZ2V0RmFtaWx5KCl9YCk7XG4gICAgfVxuICAgIHRoaXMud2FsbGV0ID0gd2FsbGV0O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlSW52b2ljZShwYXJhbXM6IENyZWF0ZUludm9pY2VCb2R5KTogUHJvbWlzZTxJbnZvaWNlPiB7XG4gICAgY29uc3QgY3JlYXRlSW52b2ljZVJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMud2FsbGV0LmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9pbnZvaWNlYCwgMikpXG4gICAgICAuc2VuZCh0LmV4YWN0KENyZWF0ZUludm9pY2VCb2R5KS5lbmNvZGUocGFyYW1zKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gc2RrY29yZS5kZWNvZGVPckVsc2UoSW52b2ljZS5uYW1lLCBJbnZvaWNlLCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgLy8gRE9OJ1QgdGhyb3cgZXJyb3JzIGZyb20gZGVjb2RlT3JFbHNlLiBJdCBjb3VsZCBsZWFrIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjcmVhdGUgaW52b2ljZSByZXNwb25zZSAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0SW52b2ljZShwYXltZW50SGFzaDogc3RyaW5nKTogUHJvbWlzZTxJbnZvaWNlSW5mbz4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL2ludm9pY2UvJHtwYXltZW50SGFzaH1gLCAyKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKEludm9pY2VJbmZvLm5hbWUsIEludm9pY2VJbmZvLCByZXNwb25zZSwgKGVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZ2V0IGludm9pY2UgcmVzcG9uc2UgJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RJbnZvaWNlcyhwYXJhbXM6IEludm9pY2VRdWVyeSk6IFByb21pc2U8SW52b2ljZUluZm9bXT4ge1xuICAgIGNvbnN0IHJldHVybkNvZGVjID0gdC5hcnJheShJbnZvaWNlSW5mbyk7XG4gICAgY29uc3QgY3JlYXRlSW52b2ljZVJlc3BvbnNlID0gYXdhaXQgdGhpcy53YWxsZXQuYml0Z29cbiAgICAgIC5nZXQodGhpcy53YWxsZXQuYml0Z28udXJsKGAvd2FsbGV0LyR7dGhpcy53YWxsZXQuaWQoKX0vbGlnaHRuaW5nL2ludm9pY2VgLCAyKSlcbiAgICAgIC5xdWVyeShJbnZvaWNlUXVlcnkuZW5jb2RlKHBhcmFtcykpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIHNka2NvcmUuZGVjb2RlT3JFbHNlKHJldHVybkNvZGVjLm5hbWUsIHJldHVybkNvZGVjLCBjcmVhdGVJbnZvaWNlUmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGxpc3QgaW52b2ljZXMgcmVzcG9uc2UgJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHBheUludm9pY2UocGFyYW1zOiBTdWJtaXRQYXltZW50UGFyYW1zKTogUHJvbWlzZTxQYXlJbnZvaWNlUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgdGhpcy53YWxsZXQuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFJZCk7XG5cbiAgICBjb25zdCB7IHVzZXJBdXRoS2V5IH0gPSBhd2FpdCBnZXRMaWdodG5pbmdBdXRoS2V5Y2hhaW5zKHRoaXMud2FsbGV0KTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBjcmVhdGVNZXNzYWdlU2lnbmF0dXJlKFxuICAgICAgdC5leGFjdChMaWdodG5pbmdQYXltZW50UmVxdWVzdCkuZW5jb2RlKHBhcmFtcyksXG4gICAgICB0aGlzLndhbGxldC5iaXRnby5kZWNyeXB0KHsgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzcGhyYXNlLCBpbnB1dDogdXNlckF1dGhLZXkuZW5jcnlwdGVkUHJ2IH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHBheW1lbnRJbnRlbnQ6IHsgaW50ZW50OiBMaWdodG5pbmdQYXltZW50SW50ZW50IH0gPSB7XG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgY29tbWVudDogcGFyYW1zLmNvbW1lbnQsXG4gICAgICAgIHNlcXVlbmNlSWQ6IHBhcmFtcy5zZXF1ZW5jZUlkLFxuICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgIHNpZ25lZFJlcXVlc3Q6IHtcbiAgICAgICAgICBpbnZvaWNlOiBwYXJhbXMuaW52b2ljZSxcbiAgICAgICAgICBhbW91bnRNc2F0OiBwYXJhbXMuYW1vdW50TXNhdCxcbiAgICAgICAgICBmZWVMaW1pdE1zYXQ6IHBhcmFtcy5mZWVMaW1pdE1zYXQsXG4gICAgICAgICAgZmVlTGltaXRSYXRpbzogcGFyYW1zLmZlZUxpbWl0UmF0aW8sXG4gICAgICAgIH0sXG4gICAgICAgIHNpZ25hdHVyZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZSA9IChhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLnBvc3QodGhpcy53YWxsZXQuYml0Z28udXJsKCcvd2FsbGV0LycgKyB0aGlzLndhbGxldC5pZCgpICsgJy90eHJlcXVlc3RzJywgMikpXG4gICAgICAuc2VuZCh0LnR5cGUoeyBpbnRlbnQ6IExpZ2h0bmluZ1BheW1lbnRJbnRlbnQgfSkuZW5jb2RlKHBheW1lbnRJbnRlbnQpKVxuICAgICAgLnJlc3VsdCgpKSBhcyBUeFJlcXVlc3Q7XG5cbiAgICBpZiAodHJhbnNhY3Rpb25SZXF1ZXN0Q3JlYXRlLnN0YXRlID09PSAncGVuZGluZ0FwcHJvdmFsJykge1xuICAgICAgY29uc3QgcGVuZGluZ0FwcHJvdmFscyA9IG5ldyBQZW5kaW5nQXBwcm92YWxzKHRoaXMud2FsbGV0LmJpdGdvLCB0aGlzLndhbGxldC5iYXNlQ29pbik7XG4gICAgICBjb25zdCBwZW5kaW5nQXBwcm92YWwgPSBhd2FpdCBwZW5kaW5nQXBwcm92YWxzLmdldCh7IGlkOiB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUucGVuZGluZ0FwcHJvdmFsSWQgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwZW5kaW5nQXBwcm92YWw6IHBlbmRpbmdBcHByb3ZhbC50b0pTT04oKSxcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50eFJlcXVlc3RJZCxcbiAgICAgICAgdHhSZXF1ZXN0U3RhdGU6IHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS5zdGF0ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25SZXF1ZXN0U2VuZCA9IGF3YWl0IGNvbW1vblRzc01ldGhvZHMuc2VuZFR4UmVxdWVzdChcbiAgICAgIHRoaXMud2FsbGV0LmJpdGdvLFxuICAgICAgdGhpcy53YWxsZXQuaWQoKSxcbiAgICAgIHRyYW5zYWN0aW9uUmVxdWVzdENyZWF0ZS50eFJlcXVlc3RJZCxcbiAgICAgIFJlcXVlc3RUeXBlLnR4LFxuICAgICAgcmVxSWRcbiAgICApO1xuXG4gICAgY29uc3QgY29pblNwZWNpZmljID0gdHJhbnNhY3Rpb25SZXF1ZXN0U2VuZC50cmFuc2FjdGlvbnM/LlswXT8udW5zaWduZWRUeD8uY29pblNwZWNpZmljO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR4UmVxdWVzdElkOiB0cmFuc2FjdGlvblJlcXVlc3RDcmVhdGUudHhSZXF1ZXN0SWQsXG4gICAgICB0eFJlcXVlc3RTdGF0ZTogdHJhbnNhY3Rpb25SZXF1ZXN0U2VuZC5zdGF0ZSxcbiAgICAgIHBheW1lbnRTdGF0dXM6IGNvaW5TcGVjaWZpY1xuICAgICAgICA/IHQuZXhhY3QoTG5kQ3JlYXRlUGF5bWVudFJlc3BvbnNlKS5lbmNvZGUoY29pblNwZWNpZmljIGFzIExuZENyZWF0ZVBheW1lbnRSZXNwb25zZSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldFBheW1lbnQocGF5bWVudEhhc2g6IHN0cmluZyk6IFByb21pc2U8UGF5bWVudEluZm8+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9wYXltZW50LyR7cGF5bWVudEhhc2h9YCwgMikpXG4gICAgICAucmVzdWx0KCk7XG4gICAgcmV0dXJuIGRlY29kZU9yRWxzZShQYXltZW50SW5mby5uYW1lLCBQYXltZW50SW5mbywgcmVzcG9uc2UsIChlcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBheW1lbnQgcmVzcG9uc2U6ICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0UGF5bWVudHMocGFyYW1zOiBQYXltZW50UXVlcnkpOiBQcm9taXNlPFBheW1lbnRJbmZvW10+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9wYXltZW50YCwgMikpXG4gICAgICAucXVlcnkoUGF5bWVudFF1ZXJ5LmVuY29kZShwYXJhbXMpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBkZWNvZGVPckVsc2UodC5hcnJheShQYXltZW50SW5mbykubmFtZSwgdC5hcnJheShQYXltZW50SW5mbyksIHJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXltZW50IGxpc3QgcmVzcG9uc2U6ICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRUcmFuc2FjdGlvbih0eElkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvdHJhbnNhY3Rpb24vJHt0eElkfWAsIDIpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBkZWNvZGVPckVsc2UoVHJhbnNhY3Rpb24ubmFtZSwgVHJhbnNhY3Rpb24sIHJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0cmFuc2FjdGlvbiByZXNwb25zZTogJHtlcnJvcn1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RUcmFuc2FjdGlvbnMocGFyYW1zOiBUcmFuc2FjdGlvblF1ZXJ5KTogUHJvbWlzZTxUcmFuc2FjdGlvbltdPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndhbGxldC5iaXRnb1xuICAgICAgLmdldCh0aGlzLndhbGxldC5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9saWdodG5pbmcvdHJhbnNhY3Rpb25gLCAyKSlcbiAgICAgIC5xdWVyeShUcmFuc2FjdGlvblF1ZXJ5LmVuY29kZShwYXJhbXMpKVxuICAgICAgLnJlc3VsdCgpO1xuICAgIHJldHVybiBkZWNvZGVPckVsc2UodC5hcnJheShUcmFuc2FjdGlvbikubmFtZSwgdC5hcnJheShUcmFuc2FjdGlvbiksIHJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0cmFuc2FjdGlvbiBsaXN0IHJlc3BvbnNlOiAke2Vycm9yfWApO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as sdkcore from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BackupResponse, UpdateLightningWalletClientRequest } from '../codecs';
|
|
3
|
+
import { ILightningWallet, LightningWallet } from './lightning';
|
|
4
|
+
/**
|
|
5
|
+
* Updates the coin-specific configuration for a Lightning Wallet.
|
|
6
|
+
*
|
|
7
|
+
* @param {Wallet} wallet - Wallet.
|
|
8
|
+
* @param {UpdateLightningWalletClientRequest} params - The parameters containing the updated wallet-specific details.
|
|
9
|
+
* - `encryptedSignerMacaroon` (optional): This macaroon is used by the watch-only node to ask the signer node to sign transactions.
|
|
10
|
+
* Encrypted with ECDH secret key from private key of wallet's user auth key and public key of lightning service.
|
|
11
|
+
* - `encryptedSignerAdminMacaroon` (optional): Generated when initializing the wallet of the signer node.
|
|
12
|
+
* Encrypted with client's wallet passphrase.
|
|
13
|
+
* - `signerHost` (optional): The host address of the Lightning signer node.
|
|
14
|
+
* - `encryptedSignerTlsKey` (optional): The wallet passphrase encrypted TLS key of the signer.
|
|
15
|
+
* - `passphrase` (required): The wallet passphrase.
|
|
16
|
+
* - `signerTlsCert` (optional): The TLS certificate of the signer.
|
|
17
|
+
* - `watchOnlyAccounts` (optional): These are the accounts used to initialize the watch-only wallet.
|
|
18
|
+
* @returns {Promise<unknown>} A promise resolving to the updated wallet response or throwing an error if the update fails.
|
|
19
|
+
*/
|
|
20
|
+
export declare function updateWalletCoinSpecific(wallet: sdkcore.IWallet, params: UpdateLightningWalletClientRequest): Promise<unknown>;
|
|
21
|
+
export interface ISelfCustodialLightningWallet extends ILightningWallet {
|
|
22
|
+
/**
|
|
23
|
+
* Get the channel backup for the given wallet.
|
|
24
|
+
* @returns {Promise<BackupResponse>} A promise resolving to the channel backup
|
|
25
|
+
*/
|
|
26
|
+
getChannelBackup(): Promise<BackupResponse>;
|
|
27
|
+
}
|
|
28
|
+
export declare class SelfCustodialLightningWallet extends LightningWallet implements ISelfCustodialLightningWallet {
|
|
29
|
+
constructor(wallet: sdkcore.IWallet);
|
|
30
|
+
getChannelBackup(): Promise<BackupResponse>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=selfCustodialLightning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selfCustodialLightning.d.ts","sourceRoot":"","sources":["../../../src/wallet/selfCustodialLightning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EACL,cAAc,EAEd,kCAAkC,EAEnC,MAAM,WAAW,CAAC;AACnB,OAAO,EAA6B,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA4C3F;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,OAAO,CAAC,OAAO,EACvB,MAAM,EAAE,kCAAkC,GACzC,OAAO,CAAC,OAAO,CAAC,CA+BlB;AAED,MAAM,WAAW,6BAA8B,SAAQ,gBAAgB;IACrE;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;CAC7C;AAED,qBAAa,4BAA6B,SAAQ,eAAgB,YAAW,6BAA6B;gBAC5F,MAAM,EAAE,OAAO,CAAC,OAAO;IAO7B,gBAAgB,IAAI,OAAO,CAAC,cAAc,CAAC;CAQlD"}
|
|
@@ -0,0 +1,127 @@
|
|
|
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
|
+
exports.updateWalletCoinSpecific = updateWalletCoinSpecific;
|
|
38
|
+
const sdkcore = __importStar(require("@bitgo-beta/sdk-core"));
|
|
39
|
+
const codecs_1 = require("../codecs");
|
|
40
|
+
const lightning_1 = require("./lightning");
|
|
41
|
+
const lightning_2 = require("../lightning");
|
|
42
|
+
const t = __importStar(require("io-ts"));
|
|
43
|
+
function encryptWalletUpdateRequest(wallet, params, userAuthKey) {
|
|
44
|
+
const coinName = wallet.coin();
|
|
45
|
+
const requestWithEncryption = {
|
|
46
|
+
...params,
|
|
47
|
+
};
|
|
48
|
+
const userAuthXprv = wallet.bitgo.decrypt({
|
|
49
|
+
password: params.passphrase,
|
|
50
|
+
input: userAuthKey.encryptedPrv,
|
|
51
|
+
});
|
|
52
|
+
if (params.signerTlsKey) {
|
|
53
|
+
requestWithEncryption.encryptedSignerTlsKey = wallet.bitgo.encrypt({
|
|
54
|
+
password: params.passphrase,
|
|
55
|
+
input: params.signerTlsKey,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
if (params.signerAdminMacaroon) {
|
|
59
|
+
requestWithEncryption.encryptedSignerAdminMacaroon = wallet.bitgo.encrypt({
|
|
60
|
+
password: params.passphrase,
|
|
61
|
+
input: params.signerAdminMacaroon,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (params.signerMacaroon) {
|
|
65
|
+
requestWithEncryption.encryptedSignerMacaroon = wallet.bitgo.encrypt({
|
|
66
|
+
password: (0, lightning_2.deriveLightningServiceSharedSecret)(coinName, userAuthXprv).toString('hex'),
|
|
67
|
+
input: params.signerMacaroon,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return t.exact(codecs_1.UpdateLightningWalletEncryptedRequest).encode(requestWithEncryption);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Updates the coin-specific configuration for a Lightning Wallet.
|
|
74
|
+
*
|
|
75
|
+
* @param {Wallet} wallet - Wallet.
|
|
76
|
+
* @param {UpdateLightningWalletClientRequest} params - The parameters containing the updated wallet-specific details.
|
|
77
|
+
* - `encryptedSignerMacaroon` (optional): This macaroon is used by the watch-only node to ask the signer node to sign transactions.
|
|
78
|
+
* Encrypted with ECDH secret key from private key of wallet's user auth key and public key of lightning service.
|
|
79
|
+
* - `encryptedSignerAdminMacaroon` (optional): Generated when initializing the wallet of the signer node.
|
|
80
|
+
* Encrypted with client's wallet passphrase.
|
|
81
|
+
* - `signerHost` (optional): The host address of the Lightning signer node.
|
|
82
|
+
* - `encryptedSignerTlsKey` (optional): The wallet passphrase encrypted TLS key of the signer.
|
|
83
|
+
* - `passphrase` (required): The wallet passphrase.
|
|
84
|
+
* - `signerTlsCert` (optional): The TLS certificate of the signer.
|
|
85
|
+
* - `watchOnlyAccounts` (optional): These are the accounts used to initialize the watch-only wallet.
|
|
86
|
+
* @returns {Promise<unknown>} A promise resolving to the updated wallet response or throwing an error if the update fails.
|
|
87
|
+
*/
|
|
88
|
+
async function updateWalletCoinSpecific(wallet, params) {
|
|
89
|
+
if (!(0, lightning_2.isLightningCoinName)(wallet.coin())) {
|
|
90
|
+
throw new Error(`cant update lightning wallet coin specific for coin ${wallet.type()}`);
|
|
91
|
+
}
|
|
92
|
+
if (wallet.type() !== 'hot') {
|
|
93
|
+
throw new Error(`cant update lightning wallet coin specific for wallet type ${wallet.type()}`);
|
|
94
|
+
}
|
|
95
|
+
sdkcore.decodeOrElse(codecs_1.UpdateLightningWalletClientRequest.name, codecs_1.UpdateLightningWalletClientRequest, params, (errors) => {
|
|
96
|
+
// DON'T throw errors from decodeOrElse. It could leak sensitive information.
|
|
97
|
+
throw new Error(`Invalid params for lightning specific update wallet`);
|
|
98
|
+
});
|
|
99
|
+
const { userAuthKey } = await (0, lightning_1.getLightningAuthKeychains)(wallet);
|
|
100
|
+
const updateRequestWithEncryption = encryptWalletUpdateRequest(wallet, params, userAuthKey);
|
|
101
|
+
const signature = (0, lightning_2.createMessageSignature)(updateRequestWithEncryption, wallet.bitgo.decrypt({ password: params.passphrase, input: userAuthKey.encryptedPrv }));
|
|
102
|
+
const coinSpecific = {
|
|
103
|
+
[wallet.coin()]: {
|
|
104
|
+
signedRequest: updateRequestWithEncryption,
|
|
105
|
+
signature,
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
return await wallet.bitgo.put(wallet.url()).send({ coinSpecific }).result();
|
|
109
|
+
}
|
|
110
|
+
class SelfCustodialLightningWallet extends lightning_1.LightningWallet {
|
|
111
|
+
constructor(wallet) {
|
|
112
|
+
super(wallet);
|
|
113
|
+
if (wallet.type() !== 'hot') {
|
|
114
|
+
throw new Error(`Invalid lightning wallet type for self custodial lightning: ${wallet.type()}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async getChannelBackup() {
|
|
118
|
+
const backupResponse = await this.wallet.bitgo
|
|
119
|
+
.get(this.wallet.baseCoin.url(`/wallet/${this.wallet.id()}/lightning/backup`))
|
|
120
|
+
.result();
|
|
121
|
+
return sdkcore.decodeOrElse(codecs_1.BackupResponse.name, codecs_1.BackupResponse, backupResponse, (error) => {
|
|
122
|
+
throw new Error(`Invalid backup response: ${error}`);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.SelfCustodialLightningWallet = SelfCustodialLightningWallet;
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZkN1c3RvZGlhbExpZ2h0bmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93YWxsZXQvc2VsZkN1c3RvZGlhbExpZ2h0bmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtRUEsNERBa0NDO0FBckdELDhEQUFnRDtBQUNoRCxzQ0FLbUI7QUFDbkIsMkNBQTJGO0FBQzNGLDRDQUErRztBQUMvRyx5Q0FBMkI7QUFFM0IsU0FBUywwQkFBMEIsQ0FDakMsTUFBdUIsRUFDdkIsTUFBMEMsRUFDMUMsV0FBa0M7SUFFbEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBd0IsQ0FBQztJQUVyRCxNQUFNLHFCQUFxQixHQUF3RjtRQUNqSCxHQUFHLE1BQU07S0FDVixDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDeEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQzNCLEtBQUssRUFBRSxXQUFXLENBQUMsWUFBWTtLQUNoQyxDQUFDLENBQUM7SUFFSCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixxQkFBcUIsQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNqRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDM0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxZQUFZO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9CLHFCQUFxQixDQUFDLDRCQUE0QixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3hFLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUMzQixLQUFLLEVBQUUsTUFBTSxDQUFDLG1CQUFtQjtTQUNsQyxDQUFDLENBQUM7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O1FBQ1osT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLHVCQUFjLENBQUMsSUFBSSxFQUFFLHVCQUFjLEVBQUUsY0FBYyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDekYsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWhCRCxvRUFnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzZGtjb3JlIGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7XG4gIEJhY2t1cFJlc3BvbnNlLFxuICBMaWdodG5pbmdBdXRoS2V5Y2hhaW4sXG4gIFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3QsXG4gIFVwZGF0ZUxpZ2h0bmluZ1dhbGxldEVuY3J5cHRlZFJlcXVlc3QsXG59IGZyb20gJy4uL2NvZGVjcyc7XG5pbXBvcnQgeyBnZXRMaWdodG5pbmdBdXRoS2V5Y2hhaW5zLCBJTGlnaHRuaW5nV2FsbGV0LCBMaWdodG5pbmdXYWxsZXQgfSBmcm9tICcuL2xpZ2h0bmluZyc7XG5pbXBvcnQgeyBjcmVhdGVNZXNzYWdlU2lnbmF0dXJlLCBkZXJpdmVMaWdodG5pbmdTZXJ2aWNlU2hhcmVkU2VjcmV0LCBpc0xpZ2h0bmluZ0NvaW5OYW1lIH0gZnJvbSAnLi4vbGlnaHRuaW5nJztcbmltcG9ydCAqIGFzIHQgZnJvbSAnaW8tdHMnO1xuXG5mdW5jdGlvbiBlbmNyeXB0V2FsbGV0VXBkYXRlUmVxdWVzdChcbiAgd2FsbGV0OiBzZGtjb3JlLklXYWxsZXQsXG4gIHBhcmFtczogVXBkYXRlTGlnaHRuaW5nV2FsbGV0Q2xpZW50UmVxdWVzdCxcbiAgdXNlckF1dGhLZXk6IExpZ2h0bmluZ0F1dGhLZXljaGFpblxuKTogVXBkYXRlTGlnaHRuaW5nV2FsbGV0RW5jcnlwdGVkUmVxdWVzdCB7XG4gIGNvbnN0IGNvaW5OYW1lID0gd2FsbGV0LmNvaW4oKSBhcyAndGxuYnRjJyB8ICdsbmJ0Yyc7XG5cbiAgY29uc3QgcmVxdWVzdFdpdGhFbmNyeXB0aW9uOiBQYXJ0aWFsPFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3QgJiBVcGRhdGVMaWdodG5pbmdXYWxsZXRFbmNyeXB0ZWRSZXF1ZXN0PiA9IHtcbiAgICAuLi5wYXJhbXMsXG4gIH07XG5cbiAgY29uc3QgdXNlckF1dGhYcHJ2ID0gd2FsbGV0LmJpdGdvLmRlY3J5cHQoe1xuICAgIHBhc3N3b3JkOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICBpbnB1dDogdXNlckF1dGhLZXkuZW5jcnlwdGVkUHJ2LFxuICB9KTtcblxuICBpZiAocGFyYW1zLnNpZ25lclRsc0tleSkge1xuICAgIHJlcXVlc3RXaXRoRW5jcnlwdGlvbi5lbmNyeXB0ZWRTaWduZXJUbHNLZXkgPSB3YWxsZXQuYml0Z28uZW5jcnlwdCh7XG4gICAgICBwYXNzd29yZDogcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBpbnB1dDogcGFyYW1zLnNpZ25lclRsc0tleSxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuc2lnbmVyQWRtaW5NYWNhcm9vbikge1xuICAgIHJlcXVlc3RXaXRoRW5jcnlwdGlvbi5lbmNyeXB0ZWRTaWduZXJBZG1pbk1hY2Fyb29uID0gd2FsbGV0LmJpdGdvLmVuY3J5cHQoe1xuICAgICAgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgaW5wdXQ6IHBhcmFtcy5zaWduZXJBZG1pbk1hY2Fyb29uLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5zaWduZXJNYWNhcm9vbikge1xuICAgIHJlcXVlc3RXaXRoRW5jcnlwdGlvbi5lbmNyeXB0ZWRTaWduZXJNYWNhcm9vbiA9IHdhbGxldC5iaXRnby5lbmNyeXB0KHtcbiAgICAgIHBhc3N3b3JkOiBkZXJpdmVMaWdodG5pbmdTZXJ2aWNlU2hhcmVkU2VjcmV0KGNvaW5OYW1lLCB1c2VyQXV0aFhwcnYpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIGlucHV0OiBwYXJhbXMuc2lnbmVyTWFjYXJvb24sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdC5leGFjdChVcGRhdGVMaWdodG5pbmdXYWxsZXRFbmNyeXB0ZWRSZXF1ZXN0KS5lbmNvZGUocmVxdWVzdFdpdGhFbmNyeXB0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBjb2luLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIGEgTGlnaHRuaW5nIFdhbGxldC5cbiAqXG4gKiBAcGFyYW0ge1dhbGxldH0gd2FsbGV0IC0gV2FsbGV0LlxuICogQHBhcmFtIHtVcGRhdGVMaWdodG5pbmdXYWxsZXRDbGllbnRSZXF1ZXN0fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBjb250YWluaW5nIHRoZSB1cGRhdGVkIHdhbGxldC1zcGVjaWZpYyBkZXRhaWxzLlxuICogICAtIGBlbmNyeXB0ZWRTaWduZXJNYWNhcm9vbmAgKG9wdGlvbmFsKTogVGhpcyBtYWNhcm9vbiBpcyB1c2VkIGJ5IHRoZSB3YXRjaC1vbmx5IG5vZGUgdG8gYXNrIHRoZSBzaWduZXIgbm9kZSB0byBzaWduIHRyYW5zYWN0aW9ucy5cbiAqICAgICBFbmNyeXB0ZWQgd2l0aCBFQ0RIIHNlY3JldCBrZXkgZnJvbSBwcml2YXRlIGtleSBvZiB3YWxsZXQncyB1c2VyIGF1dGgga2V5IGFuZCBwdWJsaWMga2V5IG9mIGxpZ2h0bmluZyBzZXJ2aWNlLlxuICogICAtIGBlbmNyeXB0ZWRTaWduZXJBZG1pbk1hY2Fyb29uYCAob3B0aW9uYWwpOiBHZW5lcmF0ZWQgd2hlbiBpbml0aWFsaXppbmcgdGhlIHdhbGxldCBvZiB0aGUgc2lnbmVyIG5vZGUuXG4gKiAgICAgRW5jcnlwdGVkIHdpdGggY2xpZW50J3Mgd2FsbGV0IHBhc3NwaHJhc2UuXG4gKiAgIC0gYHNpZ25lckhvc3RgIChvcHRpb25hbCk6IFRoZSBob3N0IGFkZHJlc3Mgb2YgdGhlIExpZ2h0bmluZyBzaWduZXIgbm9kZS5cbiAqICAgLSBgZW5jcnlwdGVkU2lnbmVyVGxzS2V5YCAob3B0aW9uYWwpOiBUaGUgd2FsbGV0IHBhc3NwaHJhc2UgZW5jcnlwdGVkIFRMUyBrZXkgb2YgdGhlIHNpZ25lci5cbiAqICAgLSBgcGFzc3BocmFzZWAgKHJlcXVpcmVkKTogVGhlIHdhbGxldCBwYXNzcGhyYXNlLlxuICogICAtIGBzaWduZXJUbHNDZXJ0YCAob3B0aW9uYWwpOiBUaGUgVExTIGNlcnRpZmljYXRlIG9mIHRoZSBzaWduZXIuXG4gKiAgIC0gYHdhdGNoT25seUFjY291bnRzYCAob3B0aW9uYWwpOiBUaGVzZSBhcmUgdGhlIGFjY291bnRzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgd2F0Y2gtb25seSB3YWxsZXQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn0gQSBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgdXBkYXRlZCB3YWxsZXQgcmVzcG9uc2Ugb3IgdGhyb3dpbmcgYW4gZXJyb3IgaWYgdGhlIHVwZGF0ZSBmYWlscy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVdhbGxldENvaW5TcGVjaWZpYyhcbiAgd2FsbGV0OiBzZGtjb3JlLklXYWxsZXQsXG4gIHBhcmFtczogVXBkYXRlTGlnaHRuaW5nV2FsbGV0Q2xpZW50UmVxdWVzdFxuKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGlmICghaXNMaWdodG5pbmdDb2luTmFtZSh3YWxsZXQuY29pbigpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY2FudCB1cGRhdGUgbGlnaHRuaW5nIHdhbGxldCBjb2luIHNwZWNpZmljIGZvciBjb2luICR7d2FsbGV0LnR5cGUoKX1gKTtcbiAgfVxuICBpZiAod2FsbGV0LnR5cGUoKSAhPT0gJ2hvdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbnQgdXBkYXRlIGxpZ2h0bmluZyB3YWxsZXQgY29pbiBzcGVjaWZpYyBmb3Igd2FsbGV0IHR5cGUgJHt3YWxsZXQudHlwZSgpfWApO1xuICB9XG5cbiAgc2RrY29yZS5kZWNvZGVPckVsc2UoXG4gICAgVXBkYXRlTGlnaHRuaW5nV2FsbGV0Q2xpZW50UmVxdWVzdC5uYW1lLFxuICAgIFVwZGF0ZUxpZ2h0bmluZ1dhbGxldENsaWVudFJlcXVlc3QsXG4gICAgcGFyYW1zLFxuICAgIChlcnJvcnMpID0+IHtcbiAgICAgIC8vIERPTidUIHRocm93IGVycm9ycyBmcm9tIGRlY29kZU9yRWxzZS4gSXQgY291bGQgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24uXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyYW1zIGZvciBsaWdodG5pbmcgc3BlY2lmaWMgdXBkYXRlIHdhbGxldGApO1xuICAgIH1cbiAgKTtcblxuICBjb25zdCB7IHVzZXJBdXRoS2V5IH0gPSBhd2FpdCBnZXRMaWdodG5pbmdBdXRoS2V5Y2hhaW5zKHdhbGxldCk7XG4gIGNvbnN0IHVwZGF0ZVJlcXVlc3RXaXRoRW5jcnlwdGlvbiA9IGVuY3J5cHRXYWxsZXRVcGRhdGVSZXF1ZXN0KHdhbGxldCwgcGFyYW1zLCB1c2VyQXV0aEtleSk7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyZWF0ZU1lc3NhZ2VTaWduYXR1cmUoXG4gICAgdXBkYXRlUmVxdWVzdFdpdGhFbmNyeXB0aW9uLFxuICAgIHdhbGxldC5iaXRnby5kZWNyeXB0KHsgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzcGhyYXNlLCBpbnB1dDogdXNlckF1dGhLZXkuZW5jcnlwdGVkUHJ2IH0pXG4gICk7XG4gIGNvbnN0IGNvaW5TcGVjaWZpYyA9IHtcbiAgICBbd2FsbGV0LmNvaW4oKV06IHtcbiAgICAgIHNpZ25lZFJlcXVlc3Q6IHVwZGF0ZVJlcXVlc3RXaXRoRW5jcnlwdGlvbixcbiAgICAgIHNpZ25hdHVyZSxcbiAgICB9LFxuICB9O1xuICByZXR1cm4gYXdhaXQgd2FsbGV0LmJpdGdvLnB1dCh3YWxsZXQudXJsKCkpLnNlbmQoeyBjb2luU3BlY2lmaWMgfSkucmVzdWx0KCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlbGZDdXN0b2RpYWxMaWdodG5pbmdXYWxsZXQgZXh0ZW5kcyBJTGlnaHRuaW5nV2FsbGV0IHtcbiAgLyoqXG4gICAqIEdldCB0aGUgY2hhbm5lbCBiYWNrdXAgZm9yIHRoZSBnaXZlbiB3YWxsZXQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJhY2t1cFJlc3BvbnNlPn0gQSBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgY2hhbm5lbCBiYWNrdXBcbiAgICovXG4gIGdldENoYW5uZWxCYWNrdXAoKTogUHJvbWlzZTxCYWNrdXBSZXNwb25zZT47XG59XG5cbmV4cG9ydCBjbGFzcyBTZWxmQ3VzdG9kaWFsTGlnaHRuaW5nV2FsbGV0IGV4dGVuZHMgTGlnaHRuaW5nV2FsbGV0IGltcGxlbWVudHMgSVNlbGZDdXN0b2RpYWxMaWdodG5pbmdXYWxsZXQge1xuICBjb25zdHJ1Y3Rvcih3YWxsZXQ6IHNka2NvcmUuSVdhbGxldCkge1xuICAgIHN1cGVyKHdhbGxldCk7XG4gICAgaWYgKHdhbGxldC50eXBlKCkgIT09ICdob3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbGlnaHRuaW5nIHdhbGxldCB0eXBlIGZvciBzZWxmIGN1c3RvZGlhbCBsaWdodG5pbmc6ICR7d2FsbGV0LnR5cGUoKX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDaGFubmVsQmFja3VwKCk6IFByb21pc2U8QmFja3VwUmVzcG9uc2U+IHtcbiAgICBjb25zdCBiYWNrdXBSZXNwb25zZSA9IGF3YWl0IHRoaXMud2FsbGV0LmJpdGdvXG4gICAgICAuZ2V0KHRoaXMud2FsbGV0LmJhc2VDb2luLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L2xpZ2h0bmluZy9iYWNrdXBgKSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICByZXR1cm4gc2RrY29yZS5kZWNvZGVPckVsc2UoQmFja3VwUmVzcG9uc2UubmFtZSwgQmFja3VwUmVzcG9uc2UsIGJhY2t1cFJlc3BvbnNlLCAoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBiYWNrdXAgcmVzcG9uc2U6ICR7ZXJyb3J9YCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as sdkcore from '@bitgo-beta/sdk-core';
|
|
2
2
|
import { ILightningWallet } from './lightning';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Returns custodial or self custodial lightning wallet depends on wallet type.
|
|
5
5
|
*/
|
|
6
6
|
export declare function getLightningWallet(wallet: sdkcore.IWallet): ILightningWallet;
|
|
7
7
|
//# sourceMappingURL=wallet.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/wallet/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/wallet/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,GAAG,gBAAgB,CAa5E"}
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getLightningWallet = getLightningWallet;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const selfCustodialLightning_1 = require("./selfCustodialLightning");
|
|
5
|
+
const custodialLightning_1 = require("./custodialLightning");
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Returns custodial or self custodial lightning wallet depends on wallet type.
|
|
8
8
|
*/
|
|
9
9
|
function getLightningWallet(wallet) {
|
|
10
|
-
if (
|
|
11
|
-
throw new Error(`
|
|
10
|
+
if (wallet.baseCoin.getFamily() !== 'lnbtc') {
|
|
11
|
+
throw new Error(`invalid coin for lightning wallet: ${wallet.baseCoin.getFamily()}`);
|
|
12
|
+
}
|
|
13
|
+
switch (wallet.type()) {
|
|
14
|
+
case 'custodial':
|
|
15
|
+
return new custodialLightning_1.CustodialLightningWallet(wallet);
|
|
16
|
+
case 'hot':
|
|
17
|
+
return new selfCustodialLightning_1.SelfCustodialLightningWallet(wallet);
|
|
18
|
+
default:
|
|
19
|
+
throw new Error(`invalid wallet type ${wallet.type()} for lightning coin`);
|
|
12
20
|
}
|
|
13
|
-
return new lightning_2.SelfCustodialLightningWallet(wallet);
|
|
14
21
|
}
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dhbGxldC93YWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSxnREFhQztBQXBCRCxxRUFBd0U7QUFDeEUsNkRBQWdFO0FBR2hFOztHQUVHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsTUFBdUI7SUFDeEQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3RCLEtBQUssV0FBVztZQUNkLE9BQU8sSUFBSSw2Q0FBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxLQUFLLEtBQUs7WUFDUixPQUFPLElBQUkscURBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQ7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixNQUFNLENBQUMsSUFBSSxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDL0UsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzZGtjb3JlIGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFNlbGZDdXN0b2RpYWxMaWdodG5pbmdXYWxsZXQgfSBmcm9tICcuL3NlbGZDdXN0b2RpYWxMaWdodG5pbmcnO1xuaW1wb3J0IHsgQ3VzdG9kaWFsTGlnaHRuaW5nV2FsbGV0IH0gZnJvbSAnLi9jdXN0b2RpYWxMaWdodG5pbmcnO1xuaW1wb3J0IHsgSUxpZ2h0bmluZ1dhbGxldCB9IGZyb20gJy4vbGlnaHRuaW5nJztcblxuLyoqXG4gKiBSZXR1cm5zIGN1c3RvZGlhbCBvciBzZWxmIGN1c3RvZGlhbCBsaWdodG5pbmcgd2FsbGV0IGRlcGVuZHMgb24gd2FsbGV0IHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaWdodG5pbmdXYWxsZXQod2FsbGV0OiBzZGtjb3JlLklXYWxsZXQpOiBJTGlnaHRuaW5nV2FsbGV0IHtcbiAgaWYgKHdhbGxldC5iYXNlQ29pbi5nZXRGYW1pbHkoKSAhPT0gJ2xuYnRjJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBjb2luIGZvciBsaWdodG5pbmcgd2FsbGV0OiAke3dhbGxldC5iYXNlQ29pbi5nZXRGYW1pbHkoKX1gKTtcbiAgfVxuXG4gIHN3aXRjaCAod2FsbGV0LnR5cGUoKSkge1xuICAgIGNhc2UgJ2N1c3RvZGlhbCc6XG4gICAgICByZXR1cm4gbmV3IEN1c3RvZGlhbExpZ2h0bmluZ1dhbGxldCh3YWxsZXQpO1xuICAgIGNhc2UgJ2hvdCc6XG4gICAgICByZXR1cm4gbmV3IFNlbGZDdXN0b2RpYWxMaWdodG5pbmdXYWxsZXQod2FsbGV0KTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHdhbGxldCB0eXBlICR7d2FsbGV0LnR5cGUoKX0gZm9yIGxpZ2h0bmluZyBjb2luYCk7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo-beta/abstract-lightning",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.137",
|
|
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",
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
]
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@bitgo-beta/sdk-core": "2.4.1-alpha.
|
|
43
|
-
"@bitgo-beta/statics": "10.0.1-alpha.
|
|
44
|
-
"@bitgo-beta/utxo-lib": "4.0.1-alpha.
|
|
42
|
+
"@bitgo-beta/sdk-core": "2.4.1-alpha.283",
|
|
43
|
+
"@bitgo-beta/statics": "10.0.1-alpha.283",
|
|
44
|
+
"@bitgo-beta/utxo-lib": "4.0.1-alpha.284",
|
|
45
45
|
"@bitgo/public-types": "4.17.0",
|
|
46
46
|
"bs58check": "^2.1.2",
|
|
47
47
|
"fp-ts": "^2.12.2",
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"io-ts-types": "^0.5.16",
|
|
50
50
|
"macaroon": "^3.0.4"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "bf6a0170354960531ecc8e0447e86b7e9ce16f8a"
|
|
53
53
|
}
|