@bitgo-beta/key-card 0.0.1-beta.192 → 0.0.1-beta.1921
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/dist/src/drawKeycard.d.ts +3 -10
- package/dist/src/drawKeycard.d.ts.map +1 -1
- package/dist/src/drawKeycard.js +105 -26
- package/dist/src/extractKeycardFromPDF.d.ts +16 -0
- package/dist/src/extractKeycardFromPDF.d.ts.map +1 -0
- package/dist/src/extractKeycardFromPDF.js +77 -0
- package/dist/src/faq.d.ts +2 -4
- package/dist/src/faq.d.ts.map +1 -1
- package/dist/src/faq.js +16 -3
- package/dist/src/generateParamsForKeyCreation.d.ts +3 -0
- package/dist/src/generateParamsForKeyCreation.d.ts.map +1 -0
- package/dist/src/generateParamsForKeyCreation.js +72 -0
- package/dist/src/generateQrData.d.ts +11 -27
- package/dist/src/generateQrData.d.ts.map +1 -1
- package/dist/src/generateQrData.js +136 -19
- package/dist/src/index.d.ts +5 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +42 -9
- package/dist/src/parseKeycard.d.ts +23 -0
- package/dist/src/parseKeycard.d.ts.map +1 -0
- package/dist/src/parseKeycard.js +159 -0
- package/dist/src/types.d.ts +66 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/utils.js +2 -3
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +10 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateQrData.d.ts","sourceRoot":"","sources":["../../src/generateQrData.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generateQrData.d.ts","sourceRoot":"","sources":["../../src/generateQrData.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EAEpB,MAAM,EAEP,MAAM,SAAS,CAAC;AA8LjB,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAQnE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAYvF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,6BAA6B,GAAG,MAAM,CAQrF;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,MAAM,CAAC,CAYzG"}
|
|
@@ -1,8 +1,44 @@
|
|
|
1
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
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateQrData =
|
|
36
|
+
exports.generateQrData = generateQrData;
|
|
37
|
+
exports.generateQrDataAsync = generateQrDataAsync;
|
|
38
|
+
exports.generateLightningQrData = generateLightningQrData;
|
|
39
|
+
exports.generateLightningQrDataAsync = generateLightningQrDataAsync;
|
|
4
40
|
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
5
|
-
const assert = require("assert");
|
|
41
|
+
const assert = __importStar(require("assert"));
|
|
6
42
|
function getPubFromKey(key) {
|
|
7
43
|
switch (key.type) {
|
|
8
44
|
case 'blsdkg':
|
|
@@ -14,6 +50,13 @@ function getPubFromKey(key) {
|
|
|
14
50
|
}
|
|
15
51
|
}
|
|
16
52
|
function generateUserQrData(userKeychain, userMasterKey) {
|
|
53
|
+
if (userKeychain.reducedEncryptedPrv) {
|
|
54
|
+
return {
|
|
55
|
+
title: 'A: User Key',
|
|
56
|
+
description: 'This is your private key, encrypted with your wallet password.',
|
|
57
|
+
data: userKeychain.reducedEncryptedPrv,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
17
60
|
if (userKeychain.encryptedPrv) {
|
|
18
61
|
return {
|
|
19
62
|
title: 'A: User Key',
|
|
@@ -22,7 +65,7 @@ function generateUserQrData(userKeychain, userMasterKey) {
|
|
|
22
65
|
};
|
|
23
66
|
}
|
|
24
67
|
const pub = getPubFromKey(userKeychain);
|
|
25
|
-
assert(pub);
|
|
68
|
+
assert.ok(pub);
|
|
26
69
|
return {
|
|
27
70
|
title: 'A: Provided User Key',
|
|
28
71
|
description: 'This is the public key you provided for your wallet.',
|
|
@@ -31,8 +74,14 @@ function generateUserQrData(userKeychain, userMasterKey) {
|
|
|
31
74
|
};
|
|
32
75
|
}
|
|
33
76
|
function generateBackupQrData(coin, backupKeychain, { backupKeyProvider, backupMasterKey, } = {}) {
|
|
34
|
-
var _a;
|
|
35
77
|
const title = 'B: Backup Key';
|
|
78
|
+
if (backupKeychain.reducedEncryptedPrv) {
|
|
79
|
+
return {
|
|
80
|
+
title,
|
|
81
|
+
description: 'This is your backup private key, encrypted with your wallet password.',
|
|
82
|
+
data: backupKeychain.reducedEncryptedPrv,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
36
85
|
if (backupKeychain.encryptedPrv) {
|
|
37
86
|
return {
|
|
38
87
|
title,
|
|
@@ -41,8 +90,8 @@ function generateBackupQrData(coin, backupKeychain, { backupKeyProvider, backupM
|
|
|
41
90
|
};
|
|
42
91
|
}
|
|
43
92
|
if (backupKeyProvider === 'BitGo Trust' && backupKeychain.type === 'tss') {
|
|
44
|
-
const keyShares =
|
|
45
|
-
assert(
|
|
93
|
+
const keyShares = backupKeychain.keyShares?.filter((keyShare) => keyShare.to === 'backup');
|
|
94
|
+
assert.ok(keyShares?.length === 2);
|
|
46
95
|
return {
|
|
47
96
|
title: 'B: Backup Key Shares',
|
|
48
97
|
description: `These are the key shares for ${backupKeyProvider}. If BitGo Inc. goes out of business,\r\n` +
|
|
@@ -51,7 +100,7 @@ function generateBackupQrData(coin, backupKeychain, { backupKeyProvider, backupM
|
|
|
51
100
|
};
|
|
52
101
|
}
|
|
53
102
|
const pub = getPubFromKey(backupKeychain);
|
|
54
|
-
assert(pub);
|
|
103
|
+
assert.ok(pub);
|
|
55
104
|
if (backupKeyProvider) {
|
|
56
105
|
return {
|
|
57
106
|
title: 'B: Backup Key',
|
|
@@ -69,31 +118,99 @@ function generateBackupQrData(coin, backupKeychain, { backupKeyProvider, backupM
|
|
|
69
118
|
}
|
|
70
119
|
function generateBitGoQrData(bitgoKeychain) {
|
|
71
120
|
const bitgoData = getPubFromKey(bitgoKeychain);
|
|
72
|
-
assert(bitgoData);
|
|
121
|
+
assert.ok(bitgoData);
|
|
73
122
|
return {
|
|
74
123
|
title: 'C: BitGo Public Key',
|
|
75
124
|
description: 'This is the public part of the key that BitGo will use to ' + 'co-sign transactions\r\nwith you on your wallet.',
|
|
76
125
|
data: bitgoData,
|
|
77
126
|
};
|
|
78
127
|
}
|
|
79
|
-
function
|
|
80
|
-
|
|
128
|
+
function generateUserMasterPublicKeyQRData(publicKey) {
|
|
129
|
+
return {
|
|
130
|
+
title: 'E: Master User Public Key',
|
|
131
|
+
description: 'This is the public key used to derive the user key for the wallet. This is not stored by BitGo, and may be required for use in recovery scenarios.',
|
|
132
|
+
data: publicKey,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function generatePasscodeQrData(passphrase, passcodeEncryptionCode) {
|
|
136
|
+
const encryptedWalletPasscode = (0, sdk_api_1.encrypt)(passcodeEncryptionCode, passphrase);
|
|
137
|
+
return {
|
|
138
|
+
title: 'D: Encrypted wallet Password',
|
|
139
|
+
description: 'This is the wallet password, encrypted client-side with a key held by BitGo.',
|
|
140
|
+
data: encryptedWalletPasscode,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
async function generatePasscodeQrDataAsync(passphrase, passcodeEncryptionCode, encryptionVersion) {
|
|
144
|
+
const encryptedWalletPasscode = await (0, sdk_api_1.encryptAsync)(passcodeEncryptionCode, passphrase, { encryptionVersion });
|
|
145
|
+
return {
|
|
146
|
+
title: 'D: Encrypted wallet Password',
|
|
147
|
+
description: 'This is the wallet password, encrypted client-side with a key held by BitGo.',
|
|
148
|
+
data: encryptedWalletPasscode,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function generateBackupMasterPublicKeyQRData(publicKey) {
|
|
152
|
+
return {
|
|
153
|
+
title: 'F: Master Backup Public Key',
|
|
154
|
+
description: 'This is the public key used to derive the backup key for the wallet. This is not stored by BitGo, and may be required for use in recovery scenarios.',
|
|
155
|
+
data: publicKey,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function buildWalletQrData({ backupKeychain, backupKeyProvider, backupMasterKey, bitgoKeychain, coin, userKeychain, userMasterKey, userMasterPublicKey, backupMasterPublicKey, }) {
|
|
159
|
+
return {
|
|
81
160
|
user: generateUserQrData(userKeychain, userMasterKey),
|
|
161
|
+
userMasterPublicKey: userMasterPublicKey ? generateUserMasterPublicKeyQRData(userMasterPublicKey) : undefined,
|
|
82
162
|
backup: generateBackupQrData(coin, backupKeychain, {
|
|
83
163
|
backupKeyProvider,
|
|
84
164
|
backupMasterKey,
|
|
85
165
|
}),
|
|
166
|
+
backupMasterPublicKey: backupMasterPublicKey
|
|
167
|
+
? generateBackupMasterPublicKeyQRData(backupMasterPublicKey)
|
|
168
|
+
: undefined,
|
|
86
169
|
bitgo: generateBitGoQrData(bitgoKeychain),
|
|
87
170
|
};
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
171
|
+
}
|
|
172
|
+
function buildLightningQrData({ userAuthKeychain }) {
|
|
173
|
+
assert.ok(userAuthKeychain.encryptedPrv, 'userAuthKeychain must have an encryptedPrv');
|
|
174
|
+
return {
|
|
175
|
+
user: {
|
|
176
|
+
title: 'A: User Auth Key',
|
|
177
|
+
description: 'This is your user authentication private key, encrypted with your wallet password.\r\nIt is used to authenticate payment and wallet operations.',
|
|
178
|
+
data: userAuthKeychain.encryptedPrv,
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
function generateQrData(params) {
|
|
183
|
+
const qrData = buildWalletQrData(params);
|
|
184
|
+
if (params.passphrase && params.passcodeEncryptionCode) {
|
|
185
|
+
qrData.passcode = generatePasscodeQrData(params.passphrase, params.passcodeEncryptionCode);
|
|
95
186
|
}
|
|
96
187
|
return qrData;
|
|
97
188
|
}
|
|
98
|
-
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVRckRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdGVRckRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsaURBQThDO0FBQzlDLGlDQUFpQztBQXlDakMsU0FBUyxhQUFhLENBQUMsR0FBYTtJQUNsQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUU7UUFDaEIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3ZCLEtBQUssS0FBSztZQUNSLE9BQU8sR0FBRyxDQUFDLGNBQWMsQ0FBQztRQUM1QixLQUFLLGFBQWE7WUFDaEIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsWUFBc0IsRUFBRSxhQUFzQjtJQUN4RSxJQUFJLFlBQVksQ0FBQyxZQUFZLEVBQUU7UUFDN0IsT0FBTztZQUNMLEtBQUssRUFBRSxhQUFhO1lBQ3BCLFdBQVcsRUFBRSxnRUFBZ0U7WUFDN0UsSUFBSSxFQUFFLFlBQVksQ0FBQyxZQUFZO1NBQ2hDLENBQUM7S0FDSDtJQUVELE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFWixPQUFPO1FBQ0wsS0FBSyxFQUFFLHNCQUFzQjtRQUM3QixXQUFXLEVBQUUsc0RBQXNEO1FBQ25FLElBQUksRUFBRSxHQUFHO1FBQ1QsZUFBZSxFQUFFLGFBQWE7S0FDL0IsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUMzQixJQUF3QixFQUN4QixjQUF3QixFQUN4QixFQUNFLGlCQUFpQixFQUNqQixlQUFlLE1BSWIsRUFBRTs7SUFFTixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUM7SUFDOUIsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFO1FBQy9CLE9BQU87WUFDTCxLQUFLO1lBQ0wsV0FBVyxFQUFFLHVFQUF1RTtZQUNwRixJQUFJLEVBQUUsY0FBYyxDQUFDLFlBQVk7U0FDbEMsQ0FBQztLQUNIO0lBRUQsSUFBSSxpQkFBaUIsS0FBSyxhQUFhLElBQUksY0FBYyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7UUFDeEUsTUFBTSxTQUFTLEdBQUcsTUFBQSxjQUFjLENBQUMsU0FBUywwQ0FBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDM0YsTUFBTSxDQUFDLENBQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLE1BQU0sTUFBSyxDQUFDLENBQUMsQ0FBQztRQUNoQyxPQUFPO1lBQ0wsS0FBSyxFQUFFLHNCQUFzQjtZQUM3QixXQUFXLEVBQ1QsZ0NBQWdDLGlCQUFpQiwyQ0FBMkM7Z0JBQzVGLFdBQVcsaUJBQWlCLDZDQUE2QztZQUMzRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7U0FDaEMsQ0FBQztLQUNIO0lBRUQsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVaLElBQUksaUJBQWlCLEVBQUU7UUFDckIsT0FBTztZQUNMLEtBQUssRUFBRSxlQUFlO1lBQ3RCLFdBQVcsRUFDVCxrQ0FBa0MsaUJBQWlCLFFBQVEsSUFBSSxDQUFDLElBQUkscUJBQXFCO2dCQUN6Riw0QkFBNEIsaUJBQWlCLHNEQUFzRDtZQUNyRyxJQUFJLEVBQUUsR0FBRztTQUNWLENBQUM7S0FDSDtJQUVELE9BQU87UUFDTCxLQUFLLEVBQUUsd0JBQXdCO1FBQy9CLFdBQVcsRUFBRSxzREFBc0Q7UUFDbkUsSUFBSSxFQUFFLEdBQUc7UUFDVCxlQUFlLEVBQUUsZUFBZTtLQUNqQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsYUFBdUI7SUFDbEQsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVsQixPQUFPO1FBQ0wsS0FBSyxFQUFFLHFCQUFxQjtRQUM1QixXQUFXLEVBQ1QsNERBQTRELEdBQUcsa0RBQWtEO1FBQ25ILElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLEVBQzdCLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGFBQWEsRUFDYixJQUFJLEVBQ0osc0JBQXNCLEVBQ3RCLFVBQVUsRUFDVixZQUFZLEVBQ1osYUFBYSxHQUNRO0lBQ3JCLE1BQU0sTUFBTSxHQUFXO1FBQ3JCLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO1FBQ3JELE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQ2pELGlCQUFpQjtZQUNqQixlQUFlO1NBQ2hCLENBQUM7UUFDRixLQUFLLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxDQUFDO0tBQzFDLENBQUM7SUFFRixJQUFJLFVBQVUsSUFBSSxzQkFBc0IsRUFBRTtRQUN4QyxNQUFNLHVCQUF1QixHQUFHLGlCQUFPLENBQUMsc0JBQXNCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFNUUsTUFBTSxDQUFDLFFBQVEsR0FBRztZQUNoQixLQUFLLEVBQUUsOEJBQThCO1lBQ3JDLFdBQVcsRUFBRSw4RUFBOEU7WUFDM0YsSUFBSSxFQUFFLHVCQUF1QjtTQUM5QixDQUFDO0tBQ0g7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBL0JELHdDQStCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBLZXljaGFpbiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGVuY3J5cHQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstYXBpJztcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlUXJEYXRhUGFyYW1zIHtcbiAgLy8gVGhlIGJhY2t1cCBrZXljaGFpbiBhcyBpdCBpcyByZXR1cm5lZCBmcm9tIHRoZSBCaXRHbyBBUEkgdXBvbiBjcmVhdGlvblxuICBiYWNrdXBLZXljaGFpbjogS2V5Y2hhaW47XG4gIC8vIFRoZSBuYW1lIG9mIHRoZSAzcmQgcGFydHkgcHJvdmlkZXIgb2YgdGhlIGJhY2t1cCBrZXkgaWYgbmVpdGhlciB0aGUgdXNlciBub3IgQml0R28gc3RvcmVzIGl0XG4gIGJhY2t1cEtleVByb3ZpZGVyPzogc3RyaW5nO1xuICAvLyBUaGUga2V5IGlkIG9mIHRoZSBiYWNrdXAga2V5LCBvbmx5IHVzZWQgZm9yIGNvbGQga2V5c1xuICBiYWNrdXBNYXN0ZXJLZXk/OiBzdHJpbmc7XG4gIC8vIFRoZSBCaXRHbyBrZXljaGFpbiBhcyBpdCBpcyByZXR1cm5lZCBmcm9tIHRoZSBCaXRHbyBBUEkgdXBvbiBjcmVhdGlvblxuICBiaXRnb0tleWNoYWluOiBLZXljaGFpbjtcbiAgLy8gVGhlIGNvaW4gb2YgdGhlIHdhbGxldCB0aGF0IHdhcy8gaXMgYWJvdXQgdG8gYmUgY3JlYXRlZFxuICBjb2luOiBSZWFkb25seTxCYXNlQ29pbj47XG4gIC8vIEEgY29kZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGVuY3J5cHQgdGhlIHdhbGxldCBwYXNzd29yZCB0by5cbiAgLy8gSWYgYm90aCB0aGUgcGFzc3BocmFzZSBhbmQgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZSBhcmUgcGFzc2VkLCB0aGVuIHRoaXMgY29kZSBlbmNyeXB0cyB0aGUgcGFzc3BocmFzZSB3aXRoIHRoZVxuICAvLyBwYXNzY29kZUVuY3J5cHRpb25Db2RlIGFuZCBwdXRzIHRoZSByZXN1bHQgaW50byBCb3ggRC4gQWxsb3dzIHJlY292ZXJpZXMgb2YgdGhlIHdhbGxldCBwYXNzd29yZC5cbiAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgLy8gVGhlIHdhbGxldCBwYXNzd29yZFxuICAvLyBJZiBib3RoIHRoZSBwYXNzcGhyYXNlIGFuZCBwYXNzY29kZUVuY3J5cHRpb25Db2RlIGFyZSBwYXNzZWQsIHRoZW4gdGhpcyBjb2RlIGVuY3J5cHRzIHRoZSBwYXNzcGhyYXNlIHdpdGggdGhlXG4gIC8vIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGUgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbnRvIEJveCBELiBBbGxvd3MgcmVjb3ZlcmllcyBvZiB0aGUgd2FsbGV0IHBhc3N3b3JkLlxuICBwYXNzcGhyYXNlPzogc3RyaW5nO1xuICAvLyBUaGUgdXNlciBrZXljaGFpbiBhcyBpdCBpcyByZXR1cm5lZCBmcm9tIHRoZSBCaXRHbyBBUEkgdXBvbiBjcmVhdGlvblxuICB1c2VyS2V5Y2hhaW46IEtleWNoYWluO1xuICAvLyBUaGUga2V5IGlkIG9mIHRoZSB1c2VyIGtleSwgb25seSB1c2VkIGZvciBjb2xkIGtleXNcbiAgdXNlck1hc3RlcktleT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFFyRGF0YUVudHJ5IHtcbiAgZGF0YTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBwdWJsaWNNYXN0ZXJLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXJEYXRhIHtcbiAgYmFja3VwPzogUXJEYXRhRW50cnk7XG4gIGJpdGdvPzogUXJEYXRhRW50cnk7XG4gIHBhc3Njb2RlPzogUXJEYXRhRW50cnk7XG4gIHVzZXI6IFFyRGF0YUVudHJ5O1xufVxuXG5mdW5jdGlvbiBnZXRQdWJGcm9tS2V5KGtleTogS2V5Y2hhaW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBzd2l0Y2ggKGtleS50eXBlKSB7XG4gICAgY2FzZSAnYmxzZGtnJzpcbiAgICAgIHJldHVybiBrZXkuY29tbW9uUHViO1xuICAgIGNhc2UgJ3Rzcyc6XG4gICAgICByZXR1cm4ga2V5LmNvbW1vbktleWNoYWluO1xuICAgIGNhc2UgJ2luZGVwZW5kZW50JzpcbiAgICAgIHJldHVybiBrZXkucHViO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlVXNlclFyRGF0YSh1c2VyS2V5Y2hhaW46IEtleWNoYWluLCB1c2VyTWFzdGVyS2V5Pzogc3RyaW5nKTogUXJEYXRhRW50cnkge1xuICBpZiAodXNlcktleWNoYWluLmVuY3J5cHRlZFBydikge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogJ0E6IFVzZXIgS2V5JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB5b3VyIHByaXZhdGUga2V5LCBlbmNyeXB0ZWQgd2l0aCB5b3VyIHdhbGxldCBwYXNzd29yZC4nLFxuICAgICAgZGF0YTogdXNlcktleWNoYWluLmVuY3J5cHRlZFBydixcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHViID0gZ2V0UHViRnJvbUtleSh1c2VyS2V5Y2hhaW4pO1xuICBhc3NlcnQocHViKTtcblxuICByZXR1cm4ge1xuICAgIHRpdGxlOiAnQTogUHJvdmlkZWQgVXNlciBLZXknLFxuICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgcHVibGljIGtleSB5b3UgcHJvdmlkZWQgZm9yIHlvdXIgd2FsbGV0LicsXG4gICAgZGF0YTogcHViLFxuICAgIHB1YmxpY01hc3RlcktleTogdXNlck1hc3RlcktleSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVCYWNrdXBRckRhdGEoXG4gIGNvaW46IFJlYWRvbmx5PEJhc2VDb2luPixcbiAgYmFja3VwS2V5Y2hhaW46IEtleWNoYWluLFxuICB7XG4gICAgYmFja3VwS2V5UHJvdmlkZXIsXG4gICAgYmFja3VwTWFzdGVyS2V5LFxuICB9OiB7XG4gICAgYmFja3VwS2V5UHJvdmlkZXI/OiBzdHJpbmc7XG4gICAgYmFja3VwTWFzdGVyS2V5Pzogc3RyaW5nO1xuICB9ID0ge31cbik6IFFyRGF0YUVudHJ5IHtcbiAgY29uc3QgdGl0bGUgPSAnQjogQmFja3VwIEtleSc7XG4gIGlmIChiYWNrdXBLZXljaGFpbi5lbmNyeXB0ZWRQcnYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgeW91ciBiYWNrdXAgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBiYWNrdXBLZXljaGFpbi5lbmNyeXB0ZWRQcnYsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChiYWNrdXBLZXlQcm92aWRlciA9PT0gJ0JpdEdvIFRydXN0JyAmJiBiYWNrdXBLZXljaGFpbi50eXBlID09PSAndHNzJykge1xuICAgIGNvbnN0IGtleVNoYXJlcyA9IGJhY2t1cEtleWNoYWluLmtleVNoYXJlcz8uZmlsdGVyKChrZXlTaGFyZSkgPT4ga2V5U2hhcmUudG8gPT09ICdiYWNrdXAnKTtcbiAgICBhc3NlcnQoa2V5U2hhcmVzPy5sZW5ndGggPT09IDIpO1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogJ0I6IEJhY2t1cCBLZXkgU2hhcmVzJyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBgVGhlc2UgYXJlIHRoZSBrZXkgc2hhcmVzIGZvciAke2JhY2t1cEtleVByb3ZpZGVyfS4gSWYgQml0R28gSW5jLiBnb2VzIG91dCBvZiBidXNpbmVzcyxcXHJcXG5gICtcbiAgICAgICAgYGNvbnRhY3QgJHtiYWNrdXBLZXlQcm92aWRlcn0gYW5kIHRoZXkgd2lsbCBoZWxwIHlvdSByZWNvdmVyIHlvdXIgZnVuZHMuYCxcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGtleVNoYXJlcyksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHB1YiA9IGdldFB1YkZyb21LZXkoYmFja3VwS2V5Y2hhaW4pO1xuICBhc3NlcnQocHViKTtcblxuICBpZiAoYmFja3VwS2V5UHJvdmlkZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGU6ICdCOiBCYWNrdXAgS2V5JyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBgVGhpcyBpcyB0aGUgcHVibGljIGtleSBoZWxkIGF0ICR7YmFja3VwS2V5UHJvdmlkZXJ9LCBhbiAke2NvaW4ubmFtZX0gcmVjb3Zlcnkgc2VydmljZS4gYCArXG4gICAgICAgIGBJZiB5b3UgbG9zZVxcclxcbnlvdXIga2V5LCAke2JhY2t1cEtleVByb3ZpZGVyfSB3aWxsIGJlIGFibGUgdG8gc2lnbiB0cmFuc2FjdGlvbnMgdG8gcmVjb3ZlciBmdW5kcy5gLFxuICAgICAgZGF0YTogcHViLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRpdGxlOiAnQjogUHJvdmlkZWQgQmFja3VwIEtleScsXG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBwdWJsaWMga2V5IHlvdSBwcm92aWRlZCBmb3IgeW91ciB3YWxsZXQuJyxcbiAgICBkYXRhOiBwdWIsXG4gICAgcHVibGljTWFzdGVyS2V5OiBiYWNrdXBNYXN0ZXJLZXksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlQml0R29RckRhdGEoYml0Z29LZXljaGFpbjogS2V5Y2hhaW4pOiBRckRhdGFFbnRyeSB7XG4gIGNvbnN0IGJpdGdvRGF0YSA9IGdldFB1YkZyb21LZXkoYml0Z29LZXljaGFpbik7XG4gIGFzc2VydChiaXRnb0RhdGEpO1xuXG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdDOiBCaXRHbyBQdWJsaWMgS2V5JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdUaGlzIGlzIHRoZSBwdWJsaWMgcGFydCBvZiB0aGUga2V5IHRoYXQgQml0R28gd2lsbCB1c2UgdG8gJyArICdjby1zaWduIHRyYW5zYWN0aW9uc1xcclxcbndpdGggeW91IG9uIHlvdXIgd2FsbGV0LicsXG4gICAgZGF0YTogYml0Z29EYXRhLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVRckRhdGEoe1xuICBiYWNrdXBLZXljaGFpbixcbiAgYmFja3VwS2V5UHJvdmlkZXIsXG4gIGJhY2t1cE1hc3RlcktleSxcbiAgYml0Z29LZXljaGFpbixcbiAgY29pbixcbiAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgcGFzc3BocmFzZSxcbiAgdXNlcktleWNoYWluLFxuICB1c2VyTWFzdGVyS2V5LFxufTogR2VuZXJhdGVRckRhdGFQYXJhbXMpOiBRckRhdGEge1xuICBjb25zdCBxckRhdGE6IFFyRGF0YSA9IHtcbiAgICB1c2VyOiBnZW5lcmF0ZVVzZXJRckRhdGEodXNlcktleWNoYWluLCB1c2VyTWFzdGVyS2V5KSxcbiAgICBiYWNrdXA6IGdlbmVyYXRlQmFja3VwUXJEYXRhKGNvaW4sIGJhY2t1cEtleWNoYWluLCB7XG4gICAgICBiYWNrdXBLZXlQcm92aWRlcixcbiAgICAgIGJhY2t1cE1hc3RlcktleSxcbiAgICB9KSxcbiAgICBiaXRnbzogZ2VuZXJhdGVCaXRHb1FyRGF0YShiaXRnb0tleWNoYWluKSxcbiAgfTtcblxuICBpZiAocGFzc3BocmFzZSAmJiBwYXNzY29kZUVuY3J5cHRpb25Db2RlKSB7XG4gICAgY29uc3QgZW5jcnlwdGVkV2FsbGV0UGFzc2NvZGUgPSBlbmNyeXB0KHBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsIHBhc3NwaHJhc2UpO1xuXG4gICAgcXJEYXRhLnBhc3Njb2RlID0ge1xuICAgICAgdGl0bGU6ICdEOiBFbmNyeXB0ZWQgd2FsbGV0IFBhc3N3b3JkJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgd2FsbGV0IHBhc3N3b3JkLCBlbmNyeXB0ZWQgY2xpZW50LXNpZGUgd2l0aCBhIGtleSBoZWxkIGJ5IEJpdEdvLicsXG4gICAgICBkYXRhOiBlbmNyeXB0ZWRXYWxsZXRQYXNzY29kZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHFyRGF0YTtcbn1cbiJdfQ==
|
|
189
|
+
/**
|
|
190
|
+
* Async version of {@link generateQrData} with v1/v2 auto-detect encrypt for Box D via `encryptAsync`.
|
|
191
|
+
*/
|
|
192
|
+
async function generateQrDataAsync(params) {
|
|
193
|
+
const qrData = buildWalletQrData(params);
|
|
194
|
+
if (params.passphrase && params.passcodeEncryptionCode) {
|
|
195
|
+
qrData.passcode = await generatePasscodeQrDataAsync(params.passphrase, params.passcodeEncryptionCode, params.encryptionVersion);
|
|
196
|
+
}
|
|
197
|
+
return qrData;
|
|
198
|
+
}
|
|
199
|
+
function generateLightningQrData(params) {
|
|
200
|
+
const qrData = buildLightningQrData(params);
|
|
201
|
+
if (params.passphrase && params.passcodeEncryptionCode) {
|
|
202
|
+
qrData.passcode = generatePasscodeQrData(params.passphrase, params.passcodeEncryptionCode);
|
|
203
|
+
}
|
|
204
|
+
return qrData;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Async version of {@link generateLightningQrData} with v1/v2 auto-detect encrypt for Box D via `encryptAsync`.
|
|
208
|
+
*/
|
|
209
|
+
async function generateLightningQrDataAsync(params) {
|
|
210
|
+
const qrData = buildLightningQrData(params);
|
|
211
|
+
if (params.passphrase && params.passcodeEncryptionCode) {
|
|
212
|
+
qrData.passcode = await generatePasscodeQrDataAsync(params.passphrase, params.passcodeEncryptionCode, params.encryptionVersion);
|
|
213
|
+
}
|
|
214
|
+
return qrData;
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVRckRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdGVRckRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3TUEsd0NBUUM7QUFLRCxrREFZQztBQUVELDBEQVFDO0FBS0Qsb0VBWUM7QUExUEQsaURBQTREO0FBQzVELCtDQUFpQztBQVNqQyxTQUFTLGFBQWEsQ0FBQyxHQUFhO0lBQ2xDLFFBQVEsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLEtBQUssUUFBUTtZQUNYLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUN2QixLQUFLLEtBQUs7WUFDUixPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUM7UUFDNUIsS0FBSyxhQUFhO1lBQ2hCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsWUFBc0IsRUFBRSxhQUFzQjtJQUN4RSxJQUFJLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3JDLE9BQU87WUFDTCxLQUFLLEVBQUUsYUFBYTtZQUNwQixXQUFXLEVBQUUsZ0VBQWdFO1lBQzdFLElBQUksRUFBRSxZQUFZLENBQUMsbUJBQW1CO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDOUIsT0FBTztZQUNMLEtBQUssRUFBRSxhQUFhO1lBQ3BCLFdBQVcsRUFBRSxnRUFBZ0U7WUFDN0UsSUFBSSxFQUFFLFlBQVksQ0FBQyxZQUFZO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFZixPQUFPO1FBQ0wsS0FBSyxFQUFFLHNCQUFzQjtRQUM3QixX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QUFFLENBQUM7UUFDdkQsTUFBTSxDQUFDLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsNEJBQTRCLENBQUMsTUFBcUM7SUFDdEYsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFNUMsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSwyQkFBMkIsQ0FDakQsTUFBTSxDQUFDLFVBQVUsRUFDakIsTUFBTSxDQUFDLHNCQUFzQixFQUM3QixNQUFNLENBQUMsaUJBQWlCLENBQ3pCLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBLZXljaGFpbiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGVuY3J5cHQsIGVuY3J5cHRBc3luYyB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1xuICBHZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YVBhcmFtcyxcbiAgR2VuZXJhdGVRckRhdGFQYXJhbXMsXG4gIE1hc3RlclB1YmxpY0tleVFyRGF0YUVudHJ5LFxuICBRckRhdGEsXG4gIFFyRGF0YUVudHJ5LFxufSBmcm9tICcuL3R5cGVzJztcblxuZnVuY3Rpb24gZ2V0UHViRnJvbUtleShrZXk6IEtleWNoYWluKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChrZXkudHlwZSkge1xuICAgIGNhc2UgJ2Jsc2RrZyc6XG4gICAgICByZXR1cm4ga2V5LmNvbW1vblB1YjtcbiAgICBjYXNlICd0c3MnOlxuICAgICAgcmV0dXJuIGtleS5jb21tb25LZXljaGFpbjtcbiAgICBjYXNlICdpbmRlcGVuZGVudCc6XG4gICAgICByZXR1cm4ga2V5LnB1YjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVVzZXJRckRhdGEodXNlcktleWNoYWluOiBLZXljaGFpbiwgdXNlck1hc3RlcktleT86IHN0cmluZyk6IFFyRGF0YUVudHJ5IHtcbiAgaWYgKHVzZXJLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQTogVXNlciBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHlvdXIgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiB1c2VyS2V5Y2hhaW4ucmVkdWNlZEVuY3J5cHRlZFBydixcbiAgICB9O1xuICB9XG4gIGlmICh1c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQTogVXNlciBLZXknLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHlvdXIgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiB1c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2LFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwdWIgPSBnZXRQdWJGcm9tS2V5KHVzZXJLZXljaGFpbik7XG4gIGFzc2VydC5vayhwdWIpO1xuXG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdBOiBQcm92aWRlZCBVc2VyIEtleScsXG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBwdWJsaWMga2V5IHlvdSBwcm92aWRlZCBmb3IgeW91ciB3YWxsZXQuJyxcbiAgICBkYXRhOiBwdWIsXG4gICAgcHVibGljTWFzdGVyS2V5OiB1c2VyTWFzdGVyS2V5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJhY2t1cFFyRGF0YShcbiAgY29pbjogUmVhZG9ubHk8QmFzZUNvaW4+LFxuICBiYWNrdXBLZXljaGFpbjogS2V5Y2hhaW4sXG4gIHtcbiAgICBiYWNrdXBLZXlQcm92aWRlcixcbiAgICBiYWNrdXBNYXN0ZXJLZXksXG4gIH06IHtcbiAgICBiYWNrdXBLZXlQcm92aWRlcj86IHN0cmluZztcbiAgICBiYWNrdXBNYXN0ZXJLZXk/OiBzdHJpbmc7XG4gIH0gPSB7fVxuKTogUXJEYXRhRW50cnkge1xuICBjb25zdCB0aXRsZSA9ICdCOiBCYWNrdXAgS2V5JztcbiAgaWYgKGJhY2t1cEtleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgeW91ciBiYWNrdXAgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBiYWNrdXBLZXljaGFpbi5yZWR1Y2VkRW5jcnlwdGVkUHJ2LFxuICAgIH07XG4gIH1cbiAgaWYgKGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydikge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB5b3VyIGJhY2t1cCBwcml2YXRlIGtleSwgZW5jcnlwdGVkIHdpdGggeW91ciB3YWxsZXQgcGFzc3dvcmQuJyxcbiAgICAgIGRhdGE6IGJhY2t1cEtleWNoYWluLmVuY3J5cHRlZFBydixcbiAgICB9O1xuICB9XG5cbiAgaWYgKGJhY2t1cEtleVByb3ZpZGVyID09PSAnQml0R28gVHJ1c3QnICYmIGJhY2t1cEtleWNoYWluLnR5cGUgPT09ICd0c3MnKSB7XG4gICAgY29uc3Qga2V5U2hhcmVzID0gYmFja3VwS2V5Y2hhaW4ua2V5U2hhcmVzPy5maWx0ZXIoKGtleVNoYXJlKSA9PiBrZXlTaGFyZS50byA9PT0gJ2JhY2t1cCcpO1xuICAgIGFzc2VydC5vayhrZXlTaGFyZXM/Lmxlbmd0aCA9PT0gMik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiAnQjogQmFja3VwIEtleSBTaGFyZXMnLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIGBUaGVzZSBhcmUgdGhlIGtleSBzaGFyZXMgZm9yICR7YmFja3VwS2V5UHJvdmlkZXJ9LiBJZiBCaXRHbyBJbmMuIGdvZXMgb3V0IG9mIGJ1c2luZXNzLFxcclxcbmAgK1xuICAgICAgICBgY29udGFjdCAke2JhY2t1cEtleVByb3ZpZGVyfSBhbmQgdGhleSB3aWxsIGhlbHAgeW91IHJlY292ZXIgeW91ciBmdW5kcy5gLFxuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoa2V5U2hhcmVzKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHViID0gZ2V0UHViRnJvbUtleShiYWNrdXBLZXljaGFpbik7XG4gIGFzc2VydC5vayhwdWIpO1xuXG4gIGlmIChiYWNrdXBLZXlQcm92aWRlcikge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogJ0I6IEJhY2t1cCBLZXknLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIGBUaGlzIGlzIHRoZSBwdWJsaWMga2V5IGhlbGQgYXQgJHtiYWNrdXBLZXlQcm92aWRlcn0sIGFuICR7Y29pbi5uYW1lfSByZWNvdmVyeSBzZXJ2aWNlLiBgICtcbiAgICAgICAgYElmIHlvdSBsb3NlXFxyXFxueW91ciBrZXksICR7YmFja3VwS2V5UHJvdmlkZXJ9IHdpbGwgYmUgYWJsZSB0byBzaWduIHRyYW5zYWN0aW9ucyB0byByZWNvdmVyIGZ1bmRzLmAsXG4gICAgICBkYXRhOiBwdWIsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdCOiBQcm92aWRlZCBCYWNrdXAgS2V5JyxcbiAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIHB1YmxpYyBrZXkgeW91IHByb3ZpZGVkIGZvciB5b3VyIHdhbGxldC4nLFxuICAgIGRhdGE6IHB1YixcbiAgICBwdWJsaWNNYXN0ZXJLZXk6IGJhY2t1cE1hc3RlcktleSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVCaXRHb1FyRGF0YShiaXRnb0tleWNoYWluOiBLZXljaGFpbik6IFFyRGF0YUVudHJ5IHtcbiAgY29uc3QgYml0Z29EYXRhID0gZ2V0UHViRnJvbUtleShiaXRnb0tleWNoYWluKTtcbiAgYXNzZXJ0Lm9rKGJpdGdvRGF0YSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0M6IEJpdEdvIFB1YmxpYyBLZXknLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1RoaXMgaXMgdGhlIHB1YmxpYyBwYXJ0IG9mIHRoZSBrZXkgdGhhdCBCaXRHbyB3aWxsIHVzZSB0byAnICsgJ2NvLXNpZ24gdHJhbnNhY3Rpb25zXFxyXFxud2l0aCB5b3Ugb24geW91ciB3YWxsZXQuJyxcbiAgICBkYXRhOiBiaXRnb0RhdGEsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlVXNlck1hc3RlclB1YmxpY0tleVFSRGF0YShwdWJsaWNLZXk6IHN0cmluZyk6IE1hc3RlclB1YmxpY0tleVFyRGF0YUVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0U6IE1hc3RlciBVc2VyIFB1YmxpYyBLZXknLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1RoaXMgaXMgdGhlIHB1YmxpYyBrZXkgdXNlZCB0byBkZXJpdmUgdGhlIHVzZXIga2V5IGZvciB0aGUgd2FsbGV0LiBUaGlzIGlzIG5vdCBzdG9yZWQgYnkgQml0R28sIGFuZCBtYXkgYmUgcmVxdWlyZWQgZm9yIHVzZSBpbiByZWNvdmVyeSBzY2VuYXJpb3MuJyxcbiAgICBkYXRhOiBwdWJsaWNLZXksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlUGFzc2NvZGVRckRhdGEocGFzc3BocmFzZTogc3RyaW5nLCBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiBzdHJpbmcpOiBRckRhdGFFbnRyeSB7XG4gIGNvbnN0IGVuY3J5cHRlZFdhbGxldFBhc3Njb2RlID0gZW5jcnlwdChwYXNzY29kZUVuY3J5cHRpb25Db2RlLCBwYXNzcGhyYXNlKTtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0Q6IEVuY3J5cHRlZCB3YWxsZXQgUGFzc3dvcmQnLFxuICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgd2FsbGV0IHBhc3N3b3JkLCBlbmNyeXB0ZWQgY2xpZW50LXNpZGUgd2l0aCBhIGtleSBoZWxkIGJ5IEJpdEdvLicsXG4gICAgZGF0YTogZW5jcnlwdGVkV2FsbGV0UGFzc2NvZGUsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlUGFzc2NvZGVRckRhdGFBc3luYyhcbiAgcGFzc3BocmFzZTogc3RyaW5nLFxuICBwYXNzY29kZUVuY3J5cHRpb25Db2RlOiBzdHJpbmcsXG4gIGVuY3J5cHRpb25WZXJzaW9uPzogMSB8IDJcbik6IFByb21pc2U8UXJEYXRhRW50cnk+IHtcbiAgY29uc3QgZW5jcnlwdGVkV2FsbGV0UGFzc2NvZGUgPSBhd2FpdCBlbmNyeXB0QXN5bmMocGFzc2NvZGVFbmNyeXB0aW9uQ29kZSwgcGFzc3BocmFzZSwgeyBlbmNyeXB0aW9uVmVyc2lvbiB9KTtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0Q6IEVuY3J5cHRlZCB3YWxsZXQgUGFzc3dvcmQnLFxuICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgd2FsbGV0IHBhc3N3b3JkLCBlbmNyeXB0ZWQgY2xpZW50LXNpZGUgd2l0aCBhIGtleSBoZWxkIGJ5IEJpdEdvLicsXG4gICAgZGF0YTogZW5jcnlwdGVkV2FsbGV0UGFzc2NvZGUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlQmFja3VwTWFzdGVyUHVibGljS2V5UVJEYXRhKHB1YmxpY0tleTogc3RyaW5nKTogTWFzdGVyUHVibGljS2V5UXJEYXRhRW50cnkge1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiAnRjogTWFzdGVyIEJhY2t1cCBQdWJsaWMgS2V5JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdUaGlzIGlzIHRoZSBwdWJsaWMga2V5IHVzZWQgdG8gZGVyaXZlIHRoZSBiYWNrdXAga2V5IGZvciB0aGUgd2FsbGV0LiBUaGlzIGlzIG5vdCBzdG9yZWQgYnkgQml0R28sIGFuZCBtYXkgYmUgcmVxdWlyZWQgZm9yIHVzZSBpbiByZWNvdmVyeSBzY2VuYXJpb3MuJyxcbiAgICBkYXRhOiBwdWJsaWNLZXksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkV2FsbGV0UXJEYXRhKHtcbiAgYmFja3VwS2V5Y2hhaW4sXG4gIGJhY2t1cEtleVByb3ZpZGVyLFxuICBiYWNrdXBNYXN0ZXJLZXksXG4gIGJpdGdvS2V5Y2hhaW4sXG4gIGNvaW4sXG4gIHVzZXJLZXljaGFpbixcbiAgdXNlck1hc3RlcktleSxcbiAgdXNlck1hc3RlclB1YmxpY0tleSxcbiAgYmFja3VwTWFzdGVyUHVibGljS2V5LFxufTogR2VuZXJhdGVRckRhdGFQYXJhbXMpOiBRckRhdGEge1xuICByZXR1cm4ge1xuICAgIHVzZXI6IGdlbmVyYXRlVXNlclFyRGF0YSh1c2VyS2V5Y2hhaW4sIHVzZXJNYXN0ZXJLZXkpLFxuICAgIHVzZXJNYXN0ZXJQdWJsaWNLZXk6IHVzZXJNYXN0ZXJQdWJsaWNLZXkgPyBnZW5lcmF0ZVVzZXJNYXN0ZXJQdWJsaWNLZXlRUkRhdGEodXNlck1hc3RlclB1YmxpY0tleSkgOiB1bmRlZmluZWQsXG4gICAgYmFja3VwOiBnZW5lcmF0ZUJhY2t1cFFyRGF0YShjb2luLCBiYWNrdXBLZXljaGFpbiwge1xuICAgICAgYmFja3VwS2V5UHJvdmlkZXIsXG4gICAgICBiYWNrdXBNYXN0ZXJLZXksXG4gICAgfSksXG4gICAgYmFja3VwTWFzdGVyUHVibGljS2V5OiBiYWNrdXBNYXN0ZXJQdWJsaWNLZXlcbiAgICAgID8gZ2VuZXJhdGVCYWNrdXBNYXN0ZXJQdWJsaWNLZXlRUkRhdGEoYmFja3VwTWFzdGVyUHVibGljS2V5KVxuICAgICAgOiB1bmRlZmluZWQsXG4gICAgYml0Z286IGdlbmVyYXRlQml0R29RckRhdGEoYml0Z29LZXljaGFpbiksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTGlnaHRuaW5nUXJEYXRhKHsgdXNlckF1dGhLZXljaGFpbiB9OiBHZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YVBhcmFtcyk6IFFyRGF0YSB7XG4gIGFzc2VydC5vayh1c2VyQXV0aEtleWNoYWluLmVuY3J5cHRlZFBydiwgJ3VzZXJBdXRoS2V5Y2hhaW4gbXVzdCBoYXZlIGFuIGVuY3J5cHRlZFBydicpO1xuXG4gIHJldHVybiB7XG4gICAgdXNlcjoge1xuICAgICAgdGl0bGU6ICdBOiBVc2VyIEF1dGggS2V5JyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnVGhpcyBpcyB5b3VyIHVzZXIgYXV0aGVudGljYXRpb24gcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLlxcclxcbkl0IGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHBheW1lbnQgYW5kIHdhbGxldCBvcGVyYXRpb25zLicsXG4gICAgICBkYXRhOiB1c2VyQXV0aEtleWNoYWluLmVuY3J5cHRlZFBydixcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVRckRhdGEocGFyYW1zOiBHZW5lcmF0ZVFyRGF0YVBhcmFtcyk6IFFyRGF0YSB7XG4gIGNvbnN0IHFyRGF0YSA9IGJ1aWxkV2FsbGV0UXJEYXRhKHBhcmFtcyk7XG5cbiAgaWYgKHBhcmFtcy5wYXNzcGhyYXNlICYmIHBhcmFtcy5wYXNzY29kZUVuY3J5cHRpb25Db2RlKSB7XG4gICAgcXJEYXRhLnBhc3Njb2RlID0gZ2VuZXJhdGVQYXNzY29kZVFyRGF0YShwYXJhbXMucGFzc3BocmFzZSwgcGFyYW1zLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUpO1xuICB9XG5cbiAgcmV0dXJuIHFyRGF0YTtcbn1cblxuLyoqXG4gKiBBc3luYyB2ZXJzaW9uIG9mIHtAbGluayBnZW5lcmF0ZVFyRGF0YX0gd2l0aCB2MS92MiBhdXRvLWRldGVjdCBlbmNyeXB0IGZvciBCb3ggRCB2aWEgYGVuY3J5cHRBc3luY2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVFyRGF0YUFzeW5jKHBhcmFtczogR2VuZXJhdGVRckRhdGFQYXJhbXMpOiBQcm9taXNlPFFyRGF0YT4ge1xuICBjb25zdCBxckRhdGEgPSBidWlsZFdhbGxldFFyRGF0YShwYXJhbXMpO1xuXG4gIGlmIChwYXJhbXMucGFzc3BocmFzZSAmJiBwYXJhbXMucGFzc2NvZGVFbmNyeXB0aW9uQ29kZSkge1xuICAgIHFyRGF0YS5wYXNzY29kZSA9IGF3YWl0IGdlbmVyYXRlUGFzc2NvZGVRckRhdGFBc3luYyhcbiAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgcGFyYW1zLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb25cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHFyRGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhKHBhcmFtczogR2VuZXJhdGVMaWdodG5pbmdRckRhdGFQYXJhbXMpOiBRckRhdGEge1xuICBjb25zdCBxckRhdGEgPSBidWlsZExpZ2h0bmluZ1FyRGF0YShwYXJhbXMpO1xuXG4gIGlmIChwYXJhbXMucGFzc3BocmFzZSAmJiBwYXJhbXMucGFzc2NvZGVFbmNyeXB0aW9uQ29kZSkge1xuICAgIHFyRGF0YS5wYXNzY29kZSA9IGdlbmVyYXRlUGFzc2NvZGVRckRhdGEocGFyYW1zLnBhc3NwaHJhc2UsIHBhcmFtcy5wYXNzY29kZUVuY3J5cHRpb25Db2RlKTtcbiAgfVxuXG4gIHJldHVybiBxckRhdGE7XG59XG5cbi8qKlxuICogQXN5bmMgdmVyc2lvbiBvZiB7QGxpbmsgZ2VuZXJhdGVMaWdodG5pbmdRckRhdGF9IHdpdGggdjEvdjIgYXV0by1kZXRlY3QgZW5jcnlwdCBmb3IgQm94IEQgdmlhIGBlbmNyeXB0QXN5bmNgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVMaWdodG5pbmdRckRhdGFBc3luYyhwYXJhbXM6IEdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhUGFyYW1zKTogUHJvbWlzZTxRckRhdGE+IHtcbiAgY29uc3QgcXJEYXRhID0gYnVpbGRMaWdodG5pbmdRckRhdGEocGFyYW1zKTtcblxuICBpZiAocGFyYW1zLnBhc3NwaHJhc2UgJiYgcGFyYW1zLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUpIHtcbiAgICBxckRhdGEucGFzc2NvZGUgPSBhd2FpdCBnZW5lcmF0ZVBhc3Njb2RlUXJEYXRhQXN5bmMoXG4gICAgICBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgIHBhcmFtcy5wYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBxckRhdGE7XG59XG4iXX0=
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GenerateKeycardParams, GenerateLightningQrDataParams, GenerateQrDataBaseParams } from './types';
|
|
2
2
|
export * from './drawKeycard';
|
|
3
|
+
export * from './extractKeycardFromPDF';
|
|
3
4
|
export * from './faq';
|
|
4
5
|
export * from './generateQrData';
|
|
6
|
+
export * from './parseKeycard';
|
|
5
7
|
export * from './utils';
|
|
6
|
-
export
|
|
7
|
-
activationCode?: string;
|
|
8
|
-
keyCardImage?: HTMLImageElement;
|
|
9
|
-
walletLabel: string;
|
|
10
|
-
}
|
|
8
|
+
export * from './types';
|
|
11
9
|
export declare function generateKeycard(params: GenerateKeycardParams): Promise<void>;
|
|
10
|
+
export declare function generateLightningKeycard(params: GenerateQrDataBaseParams & GenerateLightningQrDataParams): Promise<void>;
|
|
12
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAEzG,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AAExB,wBAAsB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBlF;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,wBAAwB,GAAG,6BAA6B,GAC/D,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -10,20 +14,49 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
15
|
};
|
|
12
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.generateKeycard =
|
|
17
|
+
exports.generateKeycard = generateKeycard;
|
|
18
|
+
exports.generateLightningKeycard = generateLightningKeycard;
|
|
14
19
|
const generateQrData_1 = require("./generateQrData");
|
|
15
20
|
const faq_1 = require("./faq");
|
|
16
21
|
const drawKeycard_1 = require("./drawKeycard");
|
|
22
|
+
const generateParamsForKeyCreation_1 = require("./generateParamsForKeyCreation");
|
|
17
23
|
__exportStar(require("./drawKeycard"), exports);
|
|
24
|
+
__exportStar(require("./extractKeycardFromPDF"), exports);
|
|
18
25
|
__exportStar(require("./faq"), exports);
|
|
19
26
|
__exportStar(require("./generateQrData"), exports);
|
|
27
|
+
__exportStar(require("./parseKeycard"), exports);
|
|
20
28
|
__exportStar(require("./utils"), exports);
|
|
29
|
+
__exportStar(require("./types"), exports);
|
|
21
30
|
async function generateKeycard(params) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
if ('userAuthKeychain' in params) {
|
|
32
|
+
const questions = (0, faq_1.generateLightningFaq)(params.coin.fullName);
|
|
33
|
+
const qrData = await (0, generateQrData_1.generateLightningQrDataAsync)(params);
|
|
34
|
+
const keycard = await (0, drawKeycard_1.drawKeycard)({ ...params, questions, qrData });
|
|
35
|
+
const label = params.walletLabel || params.coin.fullName;
|
|
36
|
+
keycard.save(`BitGo Keycard for ${label}.pdf`);
|
|
37
|
+
}
|
|
38
|
+
else if ('coin' in params) {
|
|
39
|
+
const questions = (0, faq_1.generateFaq)(params.coin.fullName);
|
|
40
|
+
const qrData = await (0, generateQrData_1.generateQrDataAsync)(params);
|
|
41
|
+
const keycard = await (0, drawKeycard_1.drawKeycard)({ ...params, questions, qrData });
|
|
42
|
+
const label = params.walletLabel || params.coin.fullName;
|
|
43
|
+
keycard.save(`BitGo Keycard for ${label}.pdf`);
|
|
44
|
+
}
|
|
45
|
+
else if ('curve' in params) {
|
|
46
|
+
const data = (0, generateParamsForKeyCreation_1.generateParamsForKeyCreation)(params);
|
|
47
|
+
const keycard = await (0, drawKeycard_1.drawKeycard)(data);
|
|
48
|
+
const label = params.walletLabel || params.curve;
|
|
49
|
+
keycard.save(`BitGo Keycard for ${label}.pdf`);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
throw new Error('Either curve or coin must be provided');
|
|
53
|
+
}
|
|
27
54
|
}
|
|
28
|
-
|
|
29
|
-
|
|
55
|
+
async function generateLightningKeycard(params) {
|
|
56
|
+
const questions = (0, faq_1.generateLightningFaq)(params.coin.fullName);
|
|
57
|
+
const qrData = await (0, generateQrData_1.generateLightningQrDataAsync)(params);
|
|
58
|
+
const keycard = await (0, drawKeycard_1.drawKeycard)({ ...params, questions, qrData });
|
|
59
|
+
const label = params.walletLabel || params.coin.fullName;
|
|
60
|
+
keycard.save(`BitGo Keycard for ${label}.pdf`);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLDBDQXFCQztBQUVELDREQVFDO0FBN0NELHFEQUFxRjtBQUNyRiwrQkFBMEQ7QUFDMUQsK0NBQTRDO0FBQzVDLGlGQUE4RTtBQUc5RSxnREFBOEI7QUFDOUIsMERBQXdDO0FBQ3hDLHdDQUFzQjtBQUN0QixtREFBaUM7QUFDakMsaURBQStCO0FBQy9CLDBDQUF3QjtBQUN4QiwwQ0FBd0I7QUFFakIsS0FBSyxVQUFVLGVBQWUsQ0FBQyxNQUE2QjtJQUNqRSxJQUFJLGtCQUFrQixJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLElBQUEsMEJBQW9CLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsNkNBQTRCLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLHlCQUFXLEVBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNwRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDakQsQ0FBQztTQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUEsaUJBQVcsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSxvQ0FBbUIsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEseUJBQVcsRUFBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDekQsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO1NBQU0sSUFBSSxPQUFPLElBQUksTUFBTSxFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBQSwyREFBNEIsRUFBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEseUJBQVcsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDakQsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSx3QkFBd0IsQ0FDNUMsTUFBZ0U7SUFFaEUsTUFBTSxTQUFTLEdBQUcsSUFBQSwwQkFBb0IsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSw2Q0FBNEIsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUMxRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEseUJBQVcsRUFBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekQsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxNQUFNLENBQUMsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2VuZXJhdGVMaWdodG5pbmdRckRhdGFBc3luYywgZ2VuZXJhdGVRckRhdGFBc3luYyB9IGZyb20gJy4vZ2VuZXJhdGVRckRhdGEnO1xuaW1wb3J0IHsgZ2VuZXJhdGVGYXEsIGdlbmVyYXRlTGlnaHRuaW5nRmFxIH0gZnJvbSAnLi9mYXEnO1xuaW1wb3J0IHsgZHJhd0tleWNhcmQgfSBmcm9tICcuL2RyYXdLZXljYXJkJztcbmltcG9ydCB7IGdlbmVyYXRlUGFyYW1zRm9yS2V5Q3JlYXRpb24gfSBmcm9tICcuL2dlbmVyYXRlUGFyYW1zRm9yS2V5Q3JlYXRpb24nO1xuaW1wb3J0IHsgR2VuZXJhdGVLZXljYXJkUGFyYW1zLCBHZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YVBhcmFtcywgR2VuZXJhdGVRckRhdGFCYXNlUGFyYW1zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZHJhd0tleWNhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9leHRyYWN0S2V5Y2FyZEZyb21QREYnO1xuZXhwb3J0ICogZnJvbSAnLi9mYXEnO1xuZXhwb3J0ICogZnJvbSAnLi9nZW5lcmF0ZVFyRGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL3BhcnNlS2V5Y2FyZCc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVLZXljYXJkKHBhcmFtczogR2VuZXJhdGVLZXljYXJkUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICgndXNlckF1dGhLZXljaGFpbicgaW4gcGFyYW1zKSB7XG4gICAgY29uc3QgcXVlc3Rpb25zID0gZ2VuZXJhdGVMaWdodG5pbmdGYXEocGFyYW1zLmNvaW4uZnVsbE5hbWUpO1xuICAgIGNvbnN0IHFyRGF0YSA9IGF3YWl0IGdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhQXN5bmMocGFyYW1zKTtcbiAgICBjb25zdCBrZXljYXJkID0gYXdhaXQgZHJhd0tleWNhcmQoeyAuLi5wYXJhbXMsIHF1ZXN0aW9ucywgcXJEYXRhIH0pO1xuICAgIGNvbnN0IGxhYmVsID0gcGFyYW1zLndhbGxldExhYmVsIHx8IHBhcmFtcy5jb2luLmZ1bGxOYW1lO1xuICAgIGtleWNhcmQuc2F2ZShgQml0R28gS2V5Y2FyZCBmb3IgJHtsYWJlbH0ucGRmYCk7XG4gIH0gZWxzZSBpZiAoJ2NvaW4nIGluIHBhcmFtcykge1xuICAgIGNvbnN0IHF1ZXN0aW9ucyA9IGdlbmVyYXRlRmFxKHBhcmFtcy5jb2luLmZ1bGxOYW1lKTtcbiAgICBjb25zdCBxckRhdGEgPSBhd2FpdCBnZW5lcmF0ZVFyRGF0YUFzeW5jKHBhcmFtcyk7XG4gICAgY29uc3Qga2V5Y2FyZCA9IGF3YWl0IGRyYXdLZXljYXJkKHsgLi4ucGFyYW1zLCBxdWVzdGlvbnMsIHFyRGF0YSB9KTtcbiAgICBjb25zdCBsYWJlbCA9IHBhcmFtcy53YWxsZXRMYWJlbCB8fCBwYXJhbXMuY29pbi5mdWxsTmFtZTtcbiAgICBrZXljYXJkLnNhdmUoYEJpdEdvIEtleWNhcmQgZm9yICR7bGFiZWx9LnBkZmApO1xuICB9IGVsc2UgaWYgKCdjdXJ2ZScgaW4gcGFyYW1zKSB7XG4gICAgY29uc3QgZGF0YSA9IGdlbmVyYXRlUGFyYW1zRm9yS2V5Q3JlYXRpb24ocGFyYW1zKTtcbiAgICBjb25zdCBrZXljYXJkID0gYXdhaXQgZHJhd0tleWNhcmQoZGF0YSk7XG4gICAgY29uc3QgbGFiZWwgPSBwYXJhbXMud2FsbGV0TGFiZWwgfHwgcGFyYW1zLmN1cnZlO1xuICAgIGtleWNhcmQuc2F2ZShgQml0R28gS2V5Y2FyZCBmb3IgJHtsYWJlbH0ucGRmYCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFaXRoZXIgY3VydmUgb3IgY29pbiBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlTGlnaHRuaW5nS2V5Y2FyZChcbiAgcGFyYW1zOiBHZW5lcmF0ZVFyRGF0YUJhc2VQYXJhbXMgJiBHZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YVBhcmFtc1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHF1ZXN0aW9ucyA9IGdlbmVyYXRlTGlnaHRuaW5nRmFxKHBhcmFtcy5jb2luLmZ1bGxOYW1lKTtcbiAgY29uc3QgcXJEYXRhID0gYXdhaXQgZ2VuZXJhdGVMaWdodG5pbmdRckRhdGFBc3luYyhwYXJhbXMpO1xuICBjb25zdCBrZXljYXJkID0gYXdhaXQgZHJhd0tleWNhcmQoeyAuLi5wYXJhbXMsIHF1ZXN0aW9ucywgcXJEYXRhIH0pO1xuICBjb25zdCBsYWJlbCA9IHBhcmFtcy53YWxsZXRMYWJlbCB8fCBwYXJhbXMuY29pbi5mdWxsTmFtZTtcbiAga2V5Y2FyZC5zYXZlKGBCaXRHbyBLZXljYXJkIGZvciAke2xhYmVsfS5wZGZgKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type PDFTextNode = {
|
|
2
|
+
text: string;
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
page: number;
|
|
6
|
+
width: number;
|
|
7
|
+
};
|
|
8
|
+
export type KeycardEntry = {
|
|
9
|
+
label: string;
|
|
10
|
+
value: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Reconstructs logical text lines from an unordered set of PDF text nodes.
|
|
14
|
+
*
|
|
15
|
+
* PDF text extraction returns individual positioned fragments. This function
|
|
16
|
+
* sorts them by page then Y-coordinate (top-to-bottom), groups fragments
|
|
17
|
+
* within PDF_LINE_Y_TOLERANCE points of each other onto the same line, and
|
|
18
|
+
* inserts a space between fragments that are separated by more than
|
|
19
|
+
* PDF_NODE_GAP_THRESHOLD points horizontally.
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildLinesFromPDFNodes(nodes: PDFTextNode[]): string[];
|
|
22
|
+
export declare function parseKeycardFromLines(lines: string[]): KeycardEntry[];
|
|
23
|
+
//# sourceMappingURL=parseKeycard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseKeycard.d.ts","sourceRoot":"","sources":["../../src/parseKeycard.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAwCF;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CA4DrE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAyErE"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildLinesFromPDFNodes = buildLinesFromPDFNodes;
|
|
4
|
+
exports.parseKeycardFromLines = parseKeycardFromLines;
|
|
5
|
+
const sectionHeaderRegex = /^([A-D])\s*[:.)-]\s*(.+?)\s*$/i;
|
|
6
|
+
const dataLineRegex = /^data\s*:\s*(.*)$/i;
|
|
7
|
+
const faqHeaderRegex = /^BitGo\s+KeyCard\s+FAQ$/i;
|
|
8
|
+
// PDF coordinate tolerance in points. Nodes within this distance on the Y-axis
|
|
9
|
+
// are treated as belonging to the same line; nodes further apart are separate lines.
|
|
10
|
+
const PDF_LINE_Y_TOLERANCE = 2;
|
|
11
|
+
// Horizontal gap in points above which a space is inserted between adjacent nodes.
|
|
12
|
+
const PDF_NODE_GAP_THRESHOLD = 2;
|
|
13
|
+
function sanitizeText(input) {
|
|
14
|
+
return input.replace(/\s+/g, ' ').trim();
|
|
15
|
+
}
|
|
16
|
+
function normalizeSectionValue(rawValue) {
|
|
17
|
+
// Two-pass removal of "Part N" page-continuation labels:
|
|
18
|
+
// 1. Line filter: removes labels that appear as standalone lines.
|
|
19
|
+
// 2. Regex replace: removes labels embedded mid-line when
|
|
20
|
+
// buildLinesFromPDFNodes merges them with adjacent content at the same
|
|
21
|
+
// y-coordinate (e.g. "...X88bPart 2 lFPMd...").
|
|
22
|
+
// join('') intentionally uses no separator — section values are continuous
|
|
23
|
+
// strings (base64 / xpub) that wrap across PDF lines without spaces.
|
|
24
|
+
return rawValue
|
|
25
|
+
.split('\n')
|
|
26
|
+
.filter((line) => !/^Part\s+\d+$/i.test(line.trim()))
|
|
27
|
+
.join('')
|
|
28
|
+
.replace(/\s*Part\s+\d+\s*/gi, '')
|
|
29
|
+
.trim();
|
|
30
|
+
}
|
|
31
|
+
function countChar(input, char) {
|
|
32
|
+
return input.split(char).length - 1;
|
|
33
|
+
}
|
|
34
|
+
function isEncryptedWalletPasswordSectionTitle(title) {
|
|
35
|
+
return title.toLowerCase().includes('encrypted wallet password');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Reconstructs logical text lines from an unordered set of PDF text nodes.
|
|
39
|
+
*
|
|
40
|
+
* PDF text extraction returns individual positioned fragments. This function
|
|
41
|
+
* sorts them by page then Y-coordinate (top-to-bottom), groups fragments
|
|
42
|
+
* within PDF_LINE_Y_TOLERANCE points of each other onto the same line, and
|
|
43
|
+
* inserts a space between fragments that are separated by more than
|
|
44
|
+
* PDF_NODE_GAP_THRESHOLD points horizontally.
|
|
45
|
+
*/
|
|
46
|
+
function buildLinesFromPDFNodes(nodes) {
|
|
47
|
+
const sortedNodes = [...nodes].sort((a, b) => {
|
|
48
|
+
if (a.page !== b.page) {
|
|
49
|
+
return a.page - b.page;
|
|
50
|
+
}
|
|
51
|
+
const yDiff = Math.abs(a.y - b.y);
|
|
52
|
+
if (yDiff > PDF_LINE_Y_TOLERANCE) {
|
|
53
|
+
return b.y - a.y;
|
|
54
|
+
}
|
|
55
|
+
return a.x - b.x;
|
|
56
|
+
});
|
|
57
|
+
const lines = [];
|
|
58
|
+
let currentLineNodes = [];
|
|
59
|
+
let currentPage = -1;
|
|
60
|
+
let currentY = Number.NaN;
|
|
61
|
+
function flushLine() {
|
|
62
|
+
if (currentLineNodes.length === 0) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const sortedLineNodes = [...currentLineNodes].sort((a, b) => a.x - b.x);
|
|
66
|
+
let line = '';
|
|
67
|
+
let previousRightEdge = null;
|
|
68
|
+
for (const node of sortedLineNodes) {
|
|
69
|
+
const piece = sanitizeText(node.text);
|
|
70
|
+
if (!piece) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (previousRightEdge !== null && node.x - previousRightEdge > PDF_NODE_GAP_THRESHOLD) {
|
|
74
|
+
line += ' ';
|
|
75
|
+
}
|
|
76
|
+
line += piece;
|
|
77
|
+
previousRightEdge = node.x + node.width;
|
|
78
|
+
}
|
|
79
|
+
const normalizedLine = line.trim();
|
|
80
|
+
if (normalizedLine) {
|
|
81
|
+
lines.push(normalizedLine);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
for (const node of sortedNodes) {
|
|
85
|
+
const pageChanged = node.page !== currentPage;
|
|
86
|
+
const lineChanged = Number.isNaN(currentY) || Math.abs(node.y - currentY) > PDF_LINE_Y_TOLERANCE;
|
|
87
|
+
if (pageChanged || lineChanged) {
|
|
88
|
+
flushLine();
|
|
89
|
+
currentLineNodes = [node];
|
|
90
|
+
currentPage = node.page;
|
|
91
|
+
currentY = node.y;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
currentLineNodes.push(node);
|
|
95
|
+
}
|
|
96
|
+
flushLine();
|
|
97
|
+
return lines;
|
|
98
|
+
}
|
|
99
|
+
function parseKeycardFromLines(lines) {
|
|
100
|
+
const sections = [];
|
|
101
|
+
let currentSectionIndex = -1;
|
|
102
|
+
for (const line of lines) {
|
|
103
|
+
const labelMatch = line.match(sectionHeaderRegex);
|
|
104
|
+
if (labelMatch) {
|
|
105
|
+
const section = labelMatch[1]?.toUpperCase();
|
|
106
|
+
const title = sanitizeText(labelMatch[2] ?? '');
|
|
107
|
+
if (section && title) {
|
|
108
|
+
sections.push({
|
|
109
|
+
section,
|
|
110
|
+
title,
|
|
111
|
+
values: [],
|
|
112
|
+
isCapturingData: false,
|
|
113
|
+
openCurlyCount: 0,
|
|
114
|
+
});
|
|
115
|
+
currentSectionIndex = sections.length - 1;
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (currentSectionIndex < 0) {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const currentSection = sections[currentSectionIndex];
|
|
123
|
+
if (!currentSection) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const dataLineMatch = line.match(dataLineRegex);
|
|
127
|
+
if (dataLineMatch) {
|
|
128
|
+
currentSection.isCapturingData = true;
|
|
129
|
+
const inlineValue = sanitizeText(dataLineMatch[1] ?? '');
|
|
130
|
+
if (inlineValue) {
|
|
131
|
+
currentSection.values.push(inlineValue);
|
|
132
|
+
currentSection.openCurlyCount += countChar(inlineValue, '{') - countChar(inlineValue, '}');
|
|
133
|
+
}
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
if (currentSection.isCapturingData) {
|
|
137
|
+
if (faqHeaderRegex.test(line)) {
|
|
138
|
+
currentSection.isCapturingData = false;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
currentSection.values.push(line);
|
|
142
|
+
// For encrypted wallet password, data is a single JSON object. Stop as
|
|
143
|
+
// soon as the object closes so footer/FAQ content is not appended.
|
|
144
|
+
if (isEncryptedWalletPasswordSectionTitle(currentSection.title)) {
|
|
145
|
+
currentSection.openCurlyCount += countChar(line, '{') - countChar(line, '}');
|
|
146
|
+
if (currentSection.values.length > 0 && currentSection.openCurlyCount <= 0) {
|
|
147
|
+
currentSection.isCapturingData = false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return sections
|
|
153
|
+
.filter(({ section, values }) => ['A', 'B', 'C', 'D'].includes(section) && values.length > 0)
|
|
154
|
+
.map(({ section, title, values }) => ({
|
|
155
|
+
label: `${section}: ${title}`,
|
|
156
|
+
value: normalizeSectionValue(values.join('\n')),
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VLZXljYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnNlS2V5Y2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTREQSx3REE0REM7QUFFRCxzREF5RUM7QUF0TEQsTUFBTSxrQkFBa0IsR0FBRyxnQ0FBZ0MsQ0FBQztBQUM1RCxNQUFNLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQztBQUMzQyxNQUFNLGNBQWMsR0FBRywwQkFBMEIsQ0FBQztBQUVsRCwrRUFBK0U7QUFDL0UscUZBQXFGO0FBQ3JGLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLG1GQUFtRjtBQUNuRixNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUVqQyxTQUFTLFlBQVksQ0FBQyxLQUFhO0lBQ2pDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsUUFBZ0I7SUFDN0MseURBQXlEO0lBQ3pELGtFQUFrRTtJQUNsRSwwREFBMEQ7SUFDMUQsMEVBQTBFO0lBQzFFLG1EQUFtRDtJQUNuRCwyRUFBMkU7SUFDM0UscUVBQXFFO0lBQ3JFLE9BQU8sUUFBUTtTQUNaLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDWCxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNwRCxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQ1IsT0FBTyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztTQUNqQyxJQUFJLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxLQUFhLEVBQUUsSUFBWTtJQUM1QyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENB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QyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxjQUFjLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzNFLGNBQWMsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUN6QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxRQUFRO1NBQ1osTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQzVGLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwQyxLQUFLLEVBQUUsR0FBRyxPQUFPLEtBQUssS0FBSyxFQUFFO1FBQzdCLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2hELENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFBERlRleHROb2RlID0ge1xuICB0ZXh0OiBzdHJpbmc7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICBwYWdlOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBLZXljYXJkRW50cnkgPSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG59O1xuXG5jb25zdCBzZWN0aW9uSGVhZGVyUmVnZXggPSAvXihbQS1EXSlcXHMqWzouKS1dXFxzKiguKz8pXFxzKiQvaTtcbmNvbnN0IGRhdGFMaW5lUmVnZXggPSAvXmRhdGFcXHMqOlxccyooLiopJC9pO1xuY29uc3QgZmFxSGVhZGVyUmVnZXggPSAvXkJpdEdvXFxzK0tleUNhcmRcXHMrRkFRJC9pO1xuXG4vLyBQREYgY29vcmRpbmF0ZSB0b2xlcmFuY2UgaW4gcG9pbnRzLiBOb2RlcyB3aXRoaW4gdGhpcyBkaXN0YW5jZSBvbiB0aGUgWS1heGlzXG4vLyBhcmUgdHJlYXRlZCBhcyBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgbGluZTsgbm9kZXMgZnVydGhlciBhcGFydCBhcmUgc2VwYXJhdGUgbGluZXMuXG5jb25zdCBQREZfTElORV9ZX1RPTEVSQU5DRSA9IDI7XG4vLyBIb3Jpem9udGFsIGdhcCBpbiBwb2ludHMgYWJvdmUgd2hpY2ggYSBzcGFjZSBpcyBpbnNlcnRlZCBiZXR3ZWVuIGFkamFjZW50IG5vZGVzLlxuY29uc3QgUERGX05PREVfR0FQX1RIUkVTSE9MRCA9IDI7XG5cbmZ1bmN0aW9uIHNhbml0aXplVGV4dChpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlY3Rpb25WYWx1ZShyYXdWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gVHdvLXBhc3MgcmVtb3ZhbCBvZiBcIlBhcnQgTlwiIHBhZ2UtY29udGludWF0aW9uIGxhYmVsczpcbiAgLy8gMS4gTGluZSBmaWx0ZXI6IHJlbW92ZXMgbGFiZWxzIHRoYXQgYXBwZWFyIGFzIHN0YW5kYWxvbmUgbGluZXMuXG4gIC8vIDIuIFJlZ2V4IHJlcGxhY2U6IHJlbW92ZXMgbGFiZWxzIGVtYmVkZGVkIG1pZC1saW5lIHdoZW5cbiAgLy8gICAgYnVpbGRMaW5lc0Zyb21QREZOb2RlcyBtZXJnZXMgdGhlbSB3aXRoIGFkamFjZW50IGNvbnRlbnQgYXQgdGhlIHNhbWVcbiAgLy8gICAgeS1jb29yZGluYXRlIChlLmcuIFwiLi4uWDg4YlBhcnQgMiBsRlBNZC4uLlwiKS5cbiAgLy8gam9pbignJykgaW50ZW50aW9uYWxseSB1c2VzIG5vIHNlcGFyYXRvciDigJQgc2VjdGlvbiB2YWx1ZXMgYXJlIGNvbnRpbnVvdXNcbiAgLy8gc3RyaW5ncyAoYmFzZTY0IC8geHB1YikgdGhhdCB3cmFwIGFjcm9zcyBQREYgbGluZXMgd2l0aG91dCBzcGFjZXMuXG4gIHJldHVybiByYXdWYWx1ZVxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAuZmlsdGVyKChsaW5lKSA9PiAhL15QYXJ0XFxzK1xcZCskL2kudGVzdChsaW5lLnRyaW0oKSkpXG4gICAgLmpvaW4oJycpXG4gICAgLnJlcGxhY2UoL1xccypQYXJ0XFxzK1xcZCtcXHMqL2dpLCAnJylcbiAgICAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBjb3VudENoYXIoaW5wdXQ6IHN0cmluZywgY2hhcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIGlucHV0LnNwbGl0KGNoYXIpLmxlbmd0aCAtIDE7XG59XG5cbmZ1bmN0aW9uIGlzRW5jcnlwdGVkV2FsbGV0UGFzc3dvcmRTZWN0aW9uVGl0bGUodGl0bGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZW5jcnlwdGVkIHdhbGxldCBwYXNzd29yZCcpO1xufVxuXG4vKipcbiAqIFJlY29uc3RydWN0cyBsb2dpY2FsIHRleHQgbGluZXMgZnJvbSBhbiB1bm9yZGVyZWQgc2V0IG9mIFBERiB0ZXh0IG5vZGVzLlxuICpcbiAqIFBERiB0ZXh0IGV4dHJhY3Rpb24gcmV0dXJucyBpbmRpdmlkdWFsIHBvc2l0aW9uZWQgZnJhZ21lbnRzLiBUaGlzIGZ1bmN0aW9uXG4gKiBzb3J0cyB0aGVtIGJ5IHBhZ2UgdGhlbiBZLWNvb3JkaW5hdGUgKHRvcC10by1ib3R0b20pLCBncm91cHMgZnJhZ21lbnRzXG4gKiB3aXRoaW4gUERGX0xJTkVfWV9UT0xFUkFOQ0UgcG9pbnRzIG9mIGVhY2ggb3RoZXIgb250byB0aGUgc2FtZSBsaW5lLCBhbmRcbiAqIGluc2VydHMgYSBzcGFjZSBiZXR3ZWVuIGZyYWdtZW50cyB0aGF0IGFyZSBzZXBhcmF0ZWQgYnkgbW9yZSB0aGFuXG4gKiBQREZfTk9ERV9HQVBfVEhSRVNIT0xEIHBvaW50cyBob3Jpem9udGFsbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZExpbmVzRnJvbVBERk5vZGVzKG5vZGVzOiBQREZUZXh0Tm9kZVtdKTogc3RyaW5nW10ge1xuICBjb25zdCBzb3J0ZWROb2RlcyA9IFsuLi5ub2Rlc10uc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChhLnBhZ2UgIT09IGIucGFnZSkge1xuICAgICAgcmV0dXJuIGEucGFnZSAtIGIucGFnZTtcbiAgICB9XG4gICAgY29uc3QgeURpZmYgPSBNYXRoLmFicyhhLnkgLSBiLnkpO1xuICAgIGlmICh5RGlmZiA+IFBERl9MSU5FX1lfVE9MRVJBTkNFKSB7XG4gICAgICByZXR1cm4gYi55IC0gYS55O1xuICAgIH1cbiAgICByZXR1cm4gYS54IC0gYi54O1xuICB9KTtcblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRMaW5lTm9kZXM6IFBERlRleHROb2RlW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRQYWdlID0gLTE7XG4gIGxldCBjdXJyZW50WSA9IE51bWJlci5OYU47XG5cbiAgZnVuY3Rpb24gZmx1c2hMaW5lKCkge1xuICAgIGlmIChjdXJyZW50TGluZU5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNvcnRlZExpbmVOb2RlcyA9IFsuLi5jdXJyZW50TGluZU5vZGVzXS5zb3J0KChhLCBiKSA9PiBhLnggLSBiLngpO1xuICAgIGxldCBsaW5lID0gJyc7XG4gICAgbGV0IHByZXZpb3VzUmlnaHRFZGdlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygc29ydGVkTGluZU5vZGVzKSB7XG4gICAgICBjb25zdCBwaWVjZSA9IHNhbml0aXplVGV4dChub2RlLnRleHQpO1xuICAgICAgaWYgKCFwaWVjZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZpb3VzUmlnaHRFZGdlICE9PSBudWxsICYmIG5vZGUueCAtIHByZXZpb3VzUmlnaHRFZGdlID4gUERGX05PREVfR0FQX1RIUkVTSE9MRCkge1xuICAgICAgICBsaW5lICs9ICcgJztcbiAgICAgIH1cbiAgICAgIGxpbmUgKz0gcGllY2U7XG4gICAgICBwcmV2aW91c1JpZ2h0RWRnZSA9IG5vZGUueCArIG5vZGUud2lkdGg7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZExpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICBpZiAobm9ybWFsaXplZExpbmUpIHtcbiAgICAgIGxpbmVzLnB1c2gobm9ybWFsaXplZExpbmUpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBzb3J0ZWROb2Rlcykge1xuICAgIGNvbnN0IHBhZ2VDaGFuZ2VkID0gbm9kZS5wYWdlICE9PSBjdXJyZW50UGFnZTtcbiAgICBjb25zdCBsaW5lQ2hhbmdlZCA9IE51bWJlci5pc05hTihjdXJyZW50WSkgfHwgTWF0aC5hYnMobm9kZS55IC0gY3VycmVudFkpID4gUERGX0xJTkVfWV9UT0xFUkFOQ0U7XG4gICAgaWYgKHBhZ2VDaGFuZ2VkIHx8IGxpbmVDaGFuZ2VkKSB7XG4gICAgICBmbHVzaExpbmUoKTtcbiAgICAgIGN1cnJlbnRMaW5lTm9kZXMgPSBbbm9kZV07XG4gICAgICBjdXJyZW50UGFnZSA9IG5vZGUucGFnZTtcbiAgICAgIGN1cnJlbnRZID0gbm9kZS55O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY3VycmVudExpbmVOb2Rlcy5wdXNoKG5vZGUpO1xuICB9XG5cbiAgZmx1c2hMaW5lKCk7XG4gIHJldHVybiBsaW5lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlS2V5Y2FyZEZyb21MaW5lcyhsaW5lczogc3RyaW5nW10pOiBLZXljYXJkRW50cnlbXSB7XG4gIGNvbnN0IHNlY3Rpb25zOiBBcnJheTx7XG4gICAgc2VjdGlvbjogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgdmFsdWVzOiBzdHJpbmdbXTtcbiAgICBpc0NhcHR1cmluZ0RhdGE6IGJvb2xlYW47XG4gICAgb3BlbkN1cmx5Q291bnQ6IG51bWJlcjtcbiAgfT4gPSBbXTtcbiAgbGV0IGN1cnJlbnRTZWN0aW9uSW5kZXggPSAtMTtcblxuICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICBjb25zdCBsYWJlbE1hdGNoID0gbGluZS5tYXRjaChzZWN0aW9uSGVhZGVyUmVnZXgpO1xuICAgIGlmIChsYWJlbE1hdGNoKSB7XG4gICAgICBjb25zdCBzZWN0aW9uID0gbGFiZWxNYXRjaFsxXT8udG9VcHBlckNhc2UoKTtcbiAgICAgIGNvbnN0IHRpdGxlID0gc2FuaXRpemVUZXh0KGxhYmVsTWF0Y2hbMl0gPz8gJycpO1xuICAgICAgaWYgKHNlY3Rpb24gJiYgdGl0bGUpIHtcbiAgICAgICAgc2VjdGlvbnMucHVzaCh7XG4gICAgICAgICAgc2VjdGlvbixcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IFtdLFxuICAgICAgICAgIGlzQ2FwdHVyaW5nRGF0YTogZmFsc2UsXG4gICAgICAgICAgb3BlbkN1cmx5Q291bnQ6IDAsXG4gICAgICAgIH0pO1xuICAgICAgICBjdXJyZW50U2VjdGlvbkluZGV4ID0gc2VjdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRTZWN0aW9uSW5kZXggPCAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50U2VjdGlvbiA9IHNlY3Rpb25zW2N1cnJlbnRTZWN0aW9uSW5kZXhdO1xuICAgIGlmICghY3VycmVudFNlY3Rpb24pIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGFMaW5lTWF0Y2ggPSBsaW5lLm1hdGNoKGRhdGFMaW5lUmVnZXgpO1xuICAgIGlmIChkYXRhTGluZU1hdGNoKSB7XG4gICAgICBjdXJyZW50U2VjdGlvbi5pc0NhcHR1cmluZ0RhdGEgPSB0cnVlO1xuICAgICAgY29uc3QgaW5saW5lVmFsdWUgPSBzYW5pdGl6ZVRleHQoZGF0YUxpbmVNYXRjaFsxXSA/PyAnJyk7XG4gICAgICBpZiAoaW5saW5lVmFsdWUpIHtcbiAgICAgICAgY3VycmVudFNlY3Rpb24udmFsdWVzLnB1c2goaW5saW5lVmFsdWUpO1xuICAgICAgICBjdXJyZW50U2VjdGlvbi5vcGVuQ3VybHlDb3VudCArPSBjb3VudENoYXIoaW5saW5lVmFsdWUsICd7JykgLSBjb3VudENoYXIoaW5saW5lVmFsdWUsICd9Jyk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFNlY3Rpb24uaXNDYXB0dXJpbmdEYXRhKSB7XG4gICAgICBpZiAoZmFxSGVhZGVyUmVnZXgudGVzdChsaW5lKSkge1xuICAgICAgICBjdXJyZW50U2VjdGlvbi5pc0NhcHR1cmluZ0RhdGEgPSBmYWxzZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRTZWN0aW9uLnZhbHVlcy5wdXNoKGxpbmUpO1xuXG4gICAgICAvLyBGb3IgZW5jcnlwdGVkIHdhbGxldCBwYXNzd29yZCwgZGF0YSBpcyBhIHNpbmdsZSBKU09OIG9iamVjdC4gU3RvcCBhc1xuICAgICAgLy8gc29vbiBhcyB0aGUgb2JqZWN0IGNsb3NlcyBzbyBmb290ZXIvRkFRIGNvbnRlbnQgaXMgbm90IGFwcGVuZGVkLlxuICAgICAgaWYgKGlzRW5jcnlwdGVkV2FsbGV0UGFzc3dvcmRTZWN0aW9uVGl0bGUoY3VycmVudFNlY3Rpb24udGl0bGUpKSB7XG4gICAgICAgIGN1cnJlbnRTZWN0aW9uLm9wZW5DdXJseUNvdW50ICs9IGNvdW50Q2hhcihsaW5lLCAneycpIC0gY291bnRDaGFyKGxpbmUsICd9Jyk7XG4gICAgICAgIGlmIChjdXJyZW50U2VjdGlvbi52YWx1ZXMubGVuZ3RoID4gMCAmJiBjdXJyZW50U2VjdGlvbi5vcGVuQ3VybHlDb3VudCA8PSAwKSB7XG4gICAgICAgICAgY3VycmVudFNlY3Rpb24uaXNDYXB0dXJpbmdEYXRhID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2VjdGlvbnNcbiAgICAuZmlsdGVyKCh7IHNlY3Rpb24sIHZhbHVlcyB9KSA9PiBbJ0EnLCAnQicsICdDJywgJ0QnXS5pbmNsdWRlcyhzZWN0aW9uKSAmJiB2YWx1ZXMubGVuZ3RoID4gMClcbiAgICAubWFwKCh7IHNlY3Rpb24sIHRpdGxlLCB2YWx1ZXMgfSkgPT4gKHtcbiAgICAgIGxhYmVsOiBgJHtzZWN0aW9ufTogJHt0aXRsZX1gLFxuICAgICAgdmFsdWU6IG5vcm1hbGl6ZVNlY3Rpb25WYWx1ZSh2YWx1ZXMuam9pbignXFxuJykpLFxuICAgIH0pKTtcbn1cbiJdfQ==
|