@bitgo-beta/key-card 0.1.2-alpha.8 → 0.1.2-alpha.81
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 +5 -0
- package/dist/src/drawKeycard.d.ts.map +1 -0
- package/dist/src/drawKeycard.js +215 -0
- package/dist/src/faq.d.ts +3 -0
- package/dist/src/faq.d.ts.map +1 -0
- package/dist/src/faq.js +76 -0
- package/dist/src/generateParamsForKeyCreation.d.ts +3 -0
- package/dist/src/generateParamsForKeyCreation.d.ts.map +1 -0
- package/dist/src/generateParamsForKeyCreation.js +40 -0
- package/dist/src/generateQrData.d.ts +3 -0
- package/dist/src/generateQrData.d.ts.map +1 -0
- package/dist/src/generateQrData.js +117 -0
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +41 -0
- package/dist/src/types.d.ts +60 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/utils.d.ts +2 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +17 -0
- package/package.json +5 -5
- package/.mocharc.js +0 -9
- package/CHANGELOG.md +0 -32
- package/src/drawKeycard.ts +0 -240
- package/src/faq.ts +0 -82
- package/src/generateQrData.ts +0 -167
- package/src/index.ts +0 -22
- package/src/utils.ts +0 -15
- package/test/unit/faq.ts +0 -14
- package/test/unit/generateQrData.ts +0 -213
- package/test/unit/utils.ts +0 -30
- package/tsconfig.json +0 -20
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsPDF } from 'jspdf';
|
|
2
|
+
import { IDrawKeyCard } from './types';
|
|
3
|
+
export declare const QRBinaryMaxLength = 1500;
|
|
4
|
+
export declare function drawKeycard({ activationCode, questions, keyCardImage, qrData, walletLabel, curve, }: IDrawKeyCard): Promise<jsPDF>;
|
|
5
|
+
//# sourceMappingURL=drawKeycard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawKeycard.d.ts","sourceRoot":"","sources":["../../src/drawKeycard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAG9B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAYvC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAuDtC,wBAAsB,WAAW,CAAC,EAChC,cAAc,EACd,SAAS,EACT,YAAY,EACZ,MAAM,EACN,WAAW,EACX,KAAK,GACN,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAkL/B"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.drawKeycard = exports.QRBinaryMaxLength = void 0;
|
|
4
|
+
const jspdf_1 = require("jspdf");
|
|
5
|
+
const QRCode = require("qrcode");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
var KeyCurveName;
|
|
8
|
+
(function (KeyCurveName) {
|
|
9
|
+
KeyCurveName["ed25519"] = "EDDSA";
|
|
10
|
+
KeyCurveName["secp256k1"] = "ECDSA";
|
|
11
|
+
KeyCurveName["bls"] = "BLS";
|
|
12
|
+
})(KeyCurveName || (KeyCurveName = {}));
|
|
13
|
+
// Max for Binary/Byte Data https://github.com/soldair/node-qrcode#qr-code-capacity
|
|
14
|
+
// the largest theoretically possible value is actually 2953 but the QR codes get so dense that scanning them with a
|
|
15
|
+
// phone (off of a printed page) doesn't work anymore
|
|
16
|
+
// this limitation was chosen by trial and error
|
|
17
|
+
exports.QRBinaryMaxLength = 1500;
|
|
18
|
+
const font = {
|
|
19
|
+
header: 24,
|
|
20
|
+
subheader: 15,
|
|
21
|
+
body: 12,
|
|
22
|
+
};
|
|
23
|
+
const color = {
|
|
24
|
+
black: '#000000',
|
|
25
|
+
darkgray: '#4c4c4c',
|
|
26
|
+
gray: '#9b9b9b',
|
|
27
|
+
red: '#e21e1e',
|
|
28
|
+
};
|
|
29
|
+
const margin = 30;
|
|
30
|
+
// Helpers for data formatting / positioning on the paper
|
|
31
|
+
function left(x) {
|
|
32
|
+
return margin + x;
|
|
33
|
+
}
|
|
34
|
+
function moveDown(y, ydelta) {
|
|
35
|
+
return y + ydelta;
|
|
36
|
+
}
|
|
37
|
+
function drawOnePageOfQrCodes(qrImages, doc, y, qrSize, startIndex) {
|
|
38
|
+
doc.setFont('helvetica');
|
|
39
|
+
let qrIndex = startIndex;
|
|
40
|
+
for (; qrIndex < qrImages.length; qrIndex++) {
|
|
41
|
+
const image = qrImages[qrIndex];
|
|
42
|
+
const textBuffer = 15;
|
|
43
|
+
if (y + qrSize + textBuffer >= doc.internal.pageSize.getHeight()) {
|
|
44
|
+
return qrIndex;
|
|
45
|
+
}
|
|
46
|
+
doc.addImage(image, left(0), y, qrSize, qrSize);
|
|
47
|
+
if (qrImages.length === 1) {
|
|
48
|
+
return qrIndex + 1;
|
|
49
|
+
}
|
|
50
|
+
y = moveDown(y, qrSize + textBuffer);
|
|
51
|
+
doc.setFontSize(font.body).setTextColor(color.black);
|
|
52
|
+
doc.text('Part ' + (qrIndex + 1).toString(), left(0), y);
|
|
53
|
+
y = moveDown(y, 20);
|
|
54
|
+
}
|
|
55
|
+
return qrIndex + 1;
|
|
56
|
+
}
|
|
57
|
+
async function drawKeycard({ activationCode, questions, keyCardImage, qrData, walletLabel, curve, }) {
|
|
58
|
+
var _a;
|
|
59
|
+
// document details
|
|
60
|
+
const width = 8.5 * 72;
|
|
61
|
+
let y = 0;
|
|
62
|
+
// Create the PDF instance
|
|
63
|
+
const doc = new jspdf_1.jsPDF('portrait', 'pt', 'letter'); // jshint ignore:line
|
|
64
|
+
doc.setFont('helvetica');
|
|
65
|
+
// PDF Header Area - includes the logo and company name
|
|
66
|
+
// This is data for the BitGo logo in the top left of the PDF
|
|
67
|
+
y = moveDown(y, 30);
|
|
68
|
+
if (keyCardImage) {
|
|
69
|
+
doc.addImage(keyCardImage, left(0), y, 303, 40);
|
|
70
|
+
}
|
|
71
|
+
// Activation Code
|
|
72
|
+
if (activationCode) {
|
|
73
|
+
y = moveDown(y, 8);
|
|
74
|
+
doc.setFontSize(font.body).setTextColor(color.gray);
|
|
75
|
+
doc.text('Activation Code', left(460), y);
|
|
76
|
+
}
|
|
77
|
+
doc.setFontSize(font.header).setTextColor(color.black);
|
|
78
|
+
y = moveDown(y, 25);
|
|
79
|
+
doc.text('KeyCard', left(curve && !activationCode ? 460 : 325), y - 1);
|
|
80
|
+
if (activationCode) {
|
|
81
|
+
doc.setFontSize(font.header).setTextColor(color.gray);
|
|
82
|
+
doc.text(activationCode, left(460), y);
|
|
83
|
+
}
|
|
84
|
+
// Subheader
|
|
85
|
+
// titles
|
|
86
|
+
const date = new Date().toDateString();
|
|
87
|
+
y = moveDown(y, margin);
|
|
88
|
+
doc.setFontSize(font.body).setTextColor(color.gray);
|
|
89
|
+
const title = curve ? KeyCurveName[curve] + ' key:' : 'wallet named:';
|
|
90
|
+
doc.text('Created on ' + date + ' for ' + title, left(0), y);
|
|
91
|
+
// copy
|
|
92
|
+
y = moveDown(y, 25);
|
|
93
|
+
doc.setFontSize(font.subheader).setTextColor(color.black);
|
|
94
|
+
doc.text(walletLabel, left(0), y);
|
|
95
|
+
if (!curve) {
|
|
96
|
+
// Red Bar
|
|
97
|
+
y = moveDown(y, 20);
|
|
98
|
+
doc.setFillColor(255, 230, 230);
|
|
99
|
+
doc.rect(left(0), y, width - 2 * margin, 32, 'F');
|
|
100
|
+
// warning message
|
|
101
|
+
y = moveDown(y, 20);
|
|
102
|
+
doc.setFontSize(font.body).setTextColor(color.red);
|
|
103
|
+
doc.text('Print this document, or keep it securely offline. See below for FAQ.', left(75), y);
|
|
104
|
+
}
|
|
105
|
+
// Generate the first page's data for the backup PDF
|
|
106
|
+
y = moveDown(y, 35);
|
|
107
|
+
const qrSize = 130;
|
|
108
|
+
const qrKeys = ['user', 'userMasterPublicKey', 'passcode', 'backup', 'backupMasterPublicKey', 'bitgo'].filter((key) => !!qrData[key]);
|
|
109
|
+
for (let index = 0; index < qrKeys.length; index++) {
|
|
110
|
+
const name = qrKeys[index];
|
|
111
|
+
if (index === 2) {
|
|
112
|
+
// Add 2nd Page
|
|
113
|
+
doc.addPage();
|
|
114
|
+
// 2nd page title
|
|
115
|
+
y = 30;
|
|
116
|
+
}
|
|
117
|
+
const qr = qrData[name];
|
|
118
|
+
let topY = y;
|
|
119
|
+
const textLeft = left(qrSize + 15);
|
|
120
|
+
let textHeight = 0;
|
|
121
|
+
const qrImages = [];
|
|
122
|
+
const keys = utils_1.splitKeys(qr.data, exports.QRBinaryMaxLength);
|
|
123
|
+
for (const key of keys) {
|
|
124
|
+
qrImages.push(await QRCode.toCanvas(key, { errorCorrectionLevel: 'L' }));
|
|
125
|
+
}
|
|
126
|
+
let nextQrIndex = drawOnePageOfQrCodes(qrImages, doc, y, qrSize, 0);
|
|
127
|
+
doc.setFontSize(font.subheader).setTextColor(color.black);
|
|
128
|
+
y = moveDown(y, 10);
|
|
129
|
+
textHeight += 10;
|
|
130
|
+
doc.text(qr.title, textLeft, y);
|
|
131
|
+
textHeight += doc.getLineHeight();
|
|
132
|
+
y = moveDown(y, 15);
|
|
133
|
+
textHeight += 15;
|
|
134
|
+
doc.setFontSize(font.body).setTextColor(color.darkgray);
|
|
135
|
+
doc.text(qr.description, textLeft, y);
|
|
136
|
+
textHeight += doc.getLineHeight();
|
|
137
|
+
doc.setFontSize(font.body - 2);
|
|
138
|
+
if (((_a = qr === null || qr === void 0 ? void 0 : qr.data) === null || _a === void 0 ? void 0 : _a.length) > exports.QRBinaryMaxLength) {
|
|
139
|
+
y = moveDown(y, 30);
|
|
140
|
+
textHeight += 30;
|
|
141
|
+
doc.text('Note: you will need to put all Parts together for the full key', textLeft, y);
|
|
142
|
+
}
|
|
143
|
+
y = moveDown(y, 30);
|
|
144
|
+
textHeight += 30;
|
|
145
|
+
doc.text('Data:', textLeft, y);
|
|
146
|
+
textHeight += doc.getLineHeight();
|
|
147
|
+
y = moveDown(y, 15);
|
|
148
|
+
textHeight += 15;
|
|
149
|
+
const width = 72 * 8.5 - textLeft - 30;
|
|
150
|
+
doc.setFont('courier').setFontSize(9).setTextColor(color.black);
|
|
151
|
+
const lines = doc.splitTextToSize(qr.data, width);
|
|
152
|
+
const buffer = 10;
|
|
153
|
+
for (let line = 0; line < lines.length; line++) {
|
|
154
|
+
// add new page if data does not fit on one page
|
|
155
|
+
if (y + buffer >= doc.internal.pageSize.getHeight()) {
|
|
156
|
+
doc.addPage();
|
|
157
|
+
textHeight = 0;
|
|
158
|
+
y = 30;
|
|
159
|
+
topY = y;
|
|
160
|
+
nextQrIndex = drawOnePageOfQrCodes(qrImages, doc, y, qrSize, nextQrIndex);
|
|
161
|
+
doc.setFont('courier').setFontSize(9).setTextColor(color.black);
|
|
162
|
+
}
|
|
163
|
+
doc.text(lines[line], textLeft, y);
|
|
164
|
+
if (line !== lines.length - 1) {
|
|
165
|
+
y = moveDown(y, buffer);
|
|
166
|
+
textHeight += buffer;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Add public key if exists
|
|
170
|
+
if (qr.publicMasterKey) {
|
|
171
|
+
const text = 'Key Id: ' + qr.publicMasterKey;
|
|
172
|
+
// Gray bar
|
|
173
|
+
y = moveDown(y, 20);
|
|
174
|
+
textHeight += 20;
|
|
175
|
+
doc.setFillColor(247, 249, 249); // Gray background
|
|
176
|
+
doc.setDrawColor(0, 0, 0); // Border
|
|
177
|
+
// Leave a bit of space for the side of the rectangle.
|
|
178
|
+
const splitKeyId = doc.splitTextToSize(text, width - 10);
|
|
179
|
+
// The height of the box must be at least 15 px (for single line case), or
|
|
180
|
+
// a multiple of 13 for each line. This allows for proper padding.
|
|
181
|
+
doc.rect(textLeft, y, width, Math.max(12 * splitKeyId.length, 15), 'FD');
|
|
182
|
+
textHeight += splitKeyId.length * doc.getLineHeight();
|
|
183
|
+
doc.text(splitKeyId, textLeft + 5, y + 10);
|
|
184
|
+
}
|
|
185
|
+
doc.setFont('helvetica');
|
|
186
|
+
// Move down the size of the QR code minus accumulated height on the right side, plus margin
|
|
187
|
+
// if we have a key that spans multiple pages, then exclude QR code size
|
|
188
|
+
const rowHeight = Math.max(qr.data.length > exports.QRBinaryMaxLength ? qrSize + 20 : qrSize, textHeight);
|
|
189
|
+
const marginBottom = 15;
|
|
190
|
+
y = moveDown(y, rowHeight - (y - topY) + marginBottom);
|
|
191
|
+
}
|
|
192
|
+
// Add next Page
|
|
193
|
+
doc.addPage();
|
|
194
|
+
// next pages title
|
|
195
|
+
y = 0;
|
|
196
|
+
y = moveDown(y, 55);
|
|
197
|
+
doc.setFontSize(font.header).setTextColor(color.black);
|
|
198
|
+
doc.text('BitGo KeyCard FAQ', left(0), y);
|
|
199
|
+
// Generate the second page's data for the backup PDF
|
|
200
|
+
y = moveDown(y, 30);
|
|
201
|
+
questions.forEach(function (q) {
|
|
202
|
+
doc.setFontSize(font.subheader).setTextColor(color.black);
|
|
203
|
+
doc.text(q.question, left(0), y);
|
|
204
|
+
y = moveDown(y, 20);
|
|
205
|
+
doc.setFontSize(font.body).setTextColor(color.darkgray);
|
|
206
|
+
q.answer.forEach(function (line) {
|
|
207
|
+
doc.text(line, left(0), y);
|
|
208
|
+
y = moveDown(y, font.body + 3);
|
|
209
|
+
});
|
|
210
|
+
y = moveDown(y, 22);
|
|
211
|
+
});
|
|
212
|
+
return doc;
|
|
213
|
+
}
|
|
214
|
+
exports.drawKeycard = drawKeycard;
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd0tleWNhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZHJhd0tleWNhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQThCO0FBQzlCLGlDQUFpQztBQUNqQyxtQ0FBb0M7QUFHcEMsSUFBSyxZQUlKO0FBSkQsV0FBSyxZQUFZO0lBQ2YsaUNBQWlCLENBQUE7SUFDakIsbUNBQW1CLENBQUE7SUFDbkIsMkJBQVcsQ0FBQTtBQUNiLENBQUMsRUFKSSxZQUFZLEtBQVosWUFBWSxRQUloQjtBQUVELG1GQUFtRjtBQUNuRixvSEFBb0g7QUFDcEgscURBQXFEO0FBQ3JELGdEQUFnRDtBQUNuQyxRQUFBLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUV0QyxNQUFNLElBQUksR0FBRztJQUNYLE1BQU0sRUFBRSxFQUFFO0lBQ1YsU0FBUyxFQUFFLEVBQUU7SUFDYixJQUFJLEVBQUUsRUFBRTtDQUNULENBQUM7QUFFRixNQUFNLEtBQUssR0FBRztJQUNaLEtBQUssRUFBRSxTQUFTO0lBQ2hCLFFBQVEsRUFBRSxTQUFTO0lBQ25CLElBQUksRUFBRSxTQUFTO0lBQ2YsR0FBRyxFQUFFLFNBQVM7Q0FDZixDQUFDO0FBRUYsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBRWxCLHlEQUF5RDtBQUN6RCxTQUFTLElBQUksQ0FBQyxDQUFTO0lBQ3JCLE9BQU8sTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNwQixDQUFDO0FBQ0QsU0FBUyxRQUFRLENBQUMsQ0FBUyxFQUFFLE1BQWM7SUFDekMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUMzQixRQUE2QixFQUM3QixHQUFVLEVBQ1YsQ0FBUyxFQUNULE1BQWMsRUFDZCxVQUFVO0lBRVYsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QixJQUFJLE9BQU8sR0FBVyxVQUFVLENBQUM7SUFDakMsT0FBTyxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUMzQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLE1BQU0sR0FBRyxVQUFVLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDaEUsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFFRCxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVoRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQztTQUNwQjtRQUVELENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQztRQUNyQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNyQjtJQUNELE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNyQixDQUFDO0FBRU0sS0FBSyxVQUFVLFdBQVcsQ0FBQyxFQUNoQyxjQUFjLEVBQ2QsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sV0FBVyxFQUNYLEtBQUssR0FDUTs7SUFDYixtQkFBbUI7SUFDbkIsTUFBTSxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFViwwQkFBMEI7SUFDMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxhQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtJQUN4RSxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXpCLHVEQUF1RDtJQUN2RCw2REFBNkQ7SUFDN0QsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFcEIsSUFBSSxZQUFZLEVBQUU7UUFDaEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDakQ7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxjQUFjLEVBQUU7UUFDbEIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUMzQztJQUNELEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEIsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkUsSUFBSSxjQUFjLEVBQUU7UUFDbEIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDeEM7SUFFRCxZQUFZO0lBQ1osU0FBUztJQUNULE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztJQUN0RSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsT0FBTyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0QsT0FBTztJQUNQLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUQsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixVQUFVO1FBQ1YsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbEQsa0JBQWtCO1FBQ2xCLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkQsR0FBRyxDQUFDLElBQUksQ0FBQyxzRUFBc0UsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDL0Y7SUFDRCxvREFBb0Q7SUFDcEQsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBRW5CLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUMzRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FDdkIsQ0FBQztJQUNGLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2xELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDZixlQUFlO1lBQ2YsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRWQsaUJBQWlCO1lBQ2pCLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDUjtRQUVELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDYixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUVuQixNQUFNLFFBQVEsR0FBd0IsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLGlCQUFTLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSx5QkFBaUIsQ0FBQyxDQUFDO1FBQ25ELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3RCLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMxRTtRQUVELElBQUksV0FBVyxHQUFHLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVwRSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDakIsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoQyxVQUFVLElBQUksR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2xDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDakIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLFVBQVUsSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbEMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQSxNQUFBLEVBQUUsYUFBRixFQUFFLHVCQUFGLEVBQUUsQ0FBRSxJQUFJLDBDQUFFLE1BQU0sSUFBRyx5QkFBaUIsRUFBRTtZQUN4QyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwQixVQUFVLElBQUksRUFBRSxDQUFDO1lBQ2pCLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3pGO1FBQ0QsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEIsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUNqQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsVUFBVSxJQUFJLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNsQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwQixVQUFVLElBQUksRUFBRSxDQUFDO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUN2QyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDOUMsZ0RBQWdEO1lBQ2hELElBQUksQ0FBQyxHQUFHLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDbkQsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNkLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDUCxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUNULFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQzFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDakU7WUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkMsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QixVQUFVLElBQUksTUFBTSxDQUFDO2FBQ3RCO1NBQ0Y7UUFFRCwyQkFBMkI7UUFDM0IsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDO1lBRTdDLFdBQVc7WUFDWCxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwQixVQUFVLElBQUksRUFBRSxDQUFDO1lBQ2pCLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtZQUNuRCxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBRXBDLHNEQUFzRDtZQUN0RCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFFekQsMEVBQTBFO1lBQzFFLG1FQUFtRTtZQUNuRSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekUsVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RELEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6Qiw0RkFBNEY7UUFDNUYsd0VBQXdFO1FBQ3hFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcseUJBQWlCLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNsRyxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO0tBQ3hEO0lBRUQsZ0JBQWdCO0lBQ2hCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUVkLG1CQUFtQjtJQUNuQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RCxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUxQyxxREFBcUQ7SUFDckQsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDM0IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJO1lBQzdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQixDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUF6TEQsa0NBeUxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganNQREYgfSBmcm9tICdqc3BkZic7XG5pbXBvcnQgKiBhcyBRUkNvZGUgZnJvbSAncXJjb2RlJztcbmltcG9ydCB7IHNwbGl0S2V5cyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgSURyYXdLZXlDYXJkIH0gZnJvbSAnLi90eXBlcyc7XG5cbmVudW0gS2V5Q3VydmVOYW1lIHtcbiAgZWQyNTUxOSA9ICdFRERTQScsXG4gIHNlY3AyNTZrMSA9ICdFQ0RTQScsXG4gIGJscyA9ICdCTFMnLFxufVxuXG4vLyBNYXggZm9yIEJpbmFyeS9CeXRlIERhdGEgaHR0cHM6Ly9naXRodWIuY29tL3NvbGRhaXIvbm9kZS1xcmNvZGUjcXItY29kZS1jYXBhY2l0eVxuLy8gdGhlIGxhcmdlc3QgdGhlb3JldGljYWxseSBwb3NzaWJsZSB2YWx1ZSBpcyBhY3R1YWxseSAyOTUzIGJ1dCB0aGUgUVIgY29kZXMgZ2V0IHNvIGRlbnNlIHRoYXQgc2Nhbm5pbmcgdGhlbSB3aXRoIGFcbi8vIHBob25lIChvZmYgb2YgYSBwcmludGVkIHBhZ2UpIGRvZXNuJ3Qgd29yayBhbnltb3JlXG4vLyB0aGlzIGxpbWl0YXRpb24gd2FzIGNob3NlbiBieSB0cmlhbCBhbmQgZXJyb3JcbmV4cG9ydCBjb25zdCBRUkJpbmFyeU1heExlbmd0aCA9IDE1MDA7XG5cbmNvbnN0IGZvbnQgPSB7XG4gIGhlYWRlcjogMjQsXG4gIHN1YmhlYWRlcjogMTUsXG4gIGJvZHk6IDEyLFxufTtcblxuY29uc3QgY29sb3IgPSB7XG4gIGJsYWNrOiAnIzAwMDAwMCcsXG4gIGRhcmtncmF5OiAnIzRjNGM0YycsXG4gIGdyYXk6ICcjOWI5YjliJyxcbiAgcmVkOiAnI2UyMWUxZScsXG59O1xuXG5jb25zdCBtYXJnaW4gPSAzMDtcblxuLy8gSGVscGVycyBmb3IgZGF0YSBmb3JtYXR0aW5nIC8gcG9zaXRpb25pbmcgb24gdGhlIHBhcGVyXG5mdW5jdGlvbiBsZWZ0KHg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBtYXJnaW4gKyB4O1xufVxuZnVuY3Rpb24gbW92ZURvd24oeTogbnVtYmVyLCB5ZGVsdGE6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiB5ICsgeWRlbHRhO1xufVxuXG5mdW5jdGlvbiBkcmF3T25lUGFnZU9mUXJDb2RlcyhcbiAgcXJJbWFnZXM6IEhUTUxDYW52YXNFbGVtZW50W10sXG4gIGRvYzoganNQREYsXG4gIHk6IG51bWJlcixcbiAgcXJTaXplOiBudW1iZXIsXG4gIHN0YXJ0SW5kZXhcbik6IG51bWJlciB7XG4gIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnKTtcbiAgbGV0IHFySW5kZXg6IG51bWJlciA9IHN0YXJ0SW5kZXg7XG4gIGZvciAoOyBxckluZGV4IDwgcXJJbWFnZXMubGVuZ3RoOyBxckluZGV4KyspIHtcbiAgICBjb25zdCBpbWFnZSA9IHFySW1hZ2VzW3FySW5kZXhdO1xuICAgIGNvbnN0IHRleHRCdWZmZXIgPSAxNTtcbiAgICBpZiAoeSArIHFyU2l6ZSArIHRleHRCdWZmZXIgPj0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpKSB7XG4gICAgICByZXR1cm4gcXJJbmRleDtcbiAgICB9XG5cbiAgICBkb2MuYWRkSW1hZ2UoaW1hZ2UsIGxlZnQoMCksIHksIHFyU2l6ZSwgcXJTaXplKTtcblxuICAgIGlmIChxckltYWdlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBxckluZGV4ICsgMTtcbiAgICB9XG5cbiAgICB5ID0gbW92ZURvd24oeSwgcXJTaXplICsgdGV4dEJ1ZmZlcik7XG4gICAgZG9jLnNldEZvbnRTaXplKGZvbnQuYm9keSkuc2V0VGV4dENvbG9yKGNvbG9yLmJsYWNrKTtcbiAgICBkb2MudGV4dCgnUGFydCAnICsgKHFySW5kZXggKyAxKS50b1N0cmluZygpLCBsZWZ0KDApLCB5KTtcbiAgICB5ID0gbW92ZURvd24oeSwgMjApO1xuICB9XG4gIHJldHVybiBxckluZGV4ICsgMTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRyYXdLZXljYXJkKHtcbiAgYWN0aXZhdGlvbkNvZGUsXG4gIHF1ZXN0aW9ucyxcbiAga2V5Q2FyZEltYWdlLFxuICBxckRhdGEsXG4gIHdhbGxldExhYmVsLFxuICBjdXJ2ZSxcbn06IElEcmF3S2V5Q2FyZCk6IFByb21pc2U8anNQREY+IHtcbiAgLy8gZG9jdW1lbnQgZGV0YWlsc1xuICBjb25zdCB3aWR0aCA9IDguNSAqIDcyO1xuICBsZXQgeSA9IDA7XG5cbiAgLy8gQ3JlYXRlIHRoZSBQREYgaW5zdGFuY2VcbiAgY29uc3QgZG9jID0gbmV3IGpzUERGKCdwb3J0cmFpdCcsICdwdCcsICdsZXR0ZXInKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnKTtcblxuICAvLyBQREYgSGVhZGVyIEFyZWEgLSBpbmNsdWRlcyB0aGUgbG9nbyBhbmQgY29tcGFueSBuYW1lXG4gIC8vIFRoaXMgaXMgZGF0YSBmb3IgdGhlIEJpdEdvIGxvZ28gaW4gdGhlIHRvcCBsZWZ0IG9mIHRoZSBQREZcbiAgeSA9IG1vdmVEb3duKHksIDMwKTtcblxuICBpZiAoa2V5Q2FyZEltYWdlKSB7XG4gICAgZG9jLmFkZEltYWdlKGtleUNhcmRJbWFnZSwgbGVmdCgwKSwgeSwgMzAzLCA0MCk7XG4gIH1cblxuICAvLyBBY3RpdmF0aW9uIENvZGVcbiAgaWYgKGFjdGl2YXRpb25Db2RlKSB7XG4gICAgeSA9IG1vdmVEb3duKHksIDgpO1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LmJvZHkpLnNldFRleHRDb2xvcihjb2xvci5ncmF5KTtcbiAgICBkb2MudGV4dCgnQWN0aXZhdGlvbiBDb2RlJywgbGVmdCg0NjApLCB5KTtcbiAgfVxuICBkb2Muc2V0Rm9udFNpemUoZm9udC5oZWFkZXIpLnNldFRleHRDb2xvcihjb2xvci5ibGFjayk7XG4gIHkgPSBtb3ZlRG93bih5LCAyNSk7XG4gIGRvYy50ZXh0KCdLZXlDYXJkJywgbGVmdChjdXJ2ZSAmJiAhYWN0aXZhdGlvbkNvZGUgPyA0NjAgOiAzMjUpLCB5IC0gMSk7XG4gIGlmIChhY3RpdmF0aW9uQ29kZSkge1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LmhlYWRlcikuc2V0VGV4dENvbG9yKGNvbG9yLmdyYXkpO1xuICAgIGRvYy50ZXh0KGFjdGl2YXRpb25Db2RlLCBsZWZ0KDQ2MCksIHkpO1xuICB9XG5cbiAgLy8gU3ViaGVhZGVyXG4gIC8vIHRpdGxlc1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKTtcbiAgeSA9IG1vdmVEb3duKHksIG1hcmdpbik7XG4gIGRvYy5zZXRGb250U2l6ZShmb250LmJvZHkpLnNldFRleHRDb2xvcihjb2xvci5ncmF5KTtcbiAgY29uc3QgdGl0bGUgPSBjdXJ2ZSA/IEtleUN1cnZlTmFtZVtjdXJ2ZV0gKyAnIGtleTonIDogJ3dhbGxldCBuYW1lZDonO1xuICBkb2MudGV4dCgnQ3JlYXRlZCBvbiAnICsgZGF0ZSArICcgZm9yICcgKyB0aXRsZSwgbGVmdCgwKSwgeSk7XG4gIC8vIGNvcHlcbiAgeSA9IG1vdmVEb3duKHksIDI1KTtcbiAgZG9jLnNldEZvbnRTaXplKGZvbnQuc3ViaGVhZGVyKS5zZXRUZXh0Q29sb3IoY29sb3IuYmxhY2spO1xuICBkb2MudGV4dCh3YWxsZXRMYWJlbCwgbGVmdCgwKSwgeSk7XG4gIGlmICghY3VydmUpIHtcbiAgICAvLyBSZWQgQmFyXG4gICAgeSA9IG1vdmVEb3duKHksIDIwKTtcbiAgICBkb2Muc2V0RmlsbENvbG9yKDI1NSwgMjMwLCAyMzApO1xuICAgIGRvYy5yZWN0KGxlZnQoMCksIHksIHdpZHRoIC0gMiAqIG1hcmdpbiwgMzIsICdGJyk7XG5cbiAgICAvLyB3YXJuaW5nIG1lc3NhZ2VcbiAgICB5ID0gbW92ZURvd24oeSwgMjApO1xuICAgIGRvYy5zZXRGb250U2l6ZShmb250LmJvZHkpLnNldFRleHRDb2xvcihjb2xvci5yZWQpO1xuICAgIGRvYy50ZXh0KCdQcmludCB0aGlzIGRvY3VtZW50LCBvciBrZWVwIGl0IHNlY3VyZWx5IG9mZmxpbmUuIFNlZSBiZWxvdyBmb3IgRkFRLicsIGxlZnQoNzUpLCB5KTtcbiAgfVxuICAvLyBHZW5lcmF0ZSB0aGUgZmlyc3QgcGFnZSdzIGRhdGEgZm9yIHRoZSBiYWNrdXAgUERGXG4gIHkgPSBtb3ZlRG93bih5LCAzNSk7XG4gIGNvbnN0IHFyU2l6ZSA9IDEzMDtcblxuICBjb25zdCBxcktleXMgPSBbJ3VzZXInLCAndXNlck1hc3RlclB1YmxpY0tleScsICdwYXNzY29kZScsICdiYWNrdXAnLCAnYmFja3VwTWFzdGVyUHVibGljS2V5JywgJ2JpdGdvJ10uZmlsdGVyKFxuICAgIChrZXkpID0+ICEhcXJEYXRhW2tleV1cbiAgKTtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHFyS2V5cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBuYW1lID0gcXJLZXlzW2luZGV4XTtcbiAgICBpZiAoaW5kZXggPT09IDIpIHtcbiAgICAgIC8vIEFkZCAybmQgUGFnZVxuICAgICAgZG9jLmFkZFBhZ2UoKTtcblxuICAgICAgLy8gMm5kIHBhZ2UgdGl0bGVcbiAgICAgIHkgPSAzMDtcbiAgICB9XG5cbiAgICBjb25zdCBxciA9IHFyRGF0YVtuYW1lXTtcbiAgICBsZXQgdG9wWSA9IHk7XG4gICAgY29uc3QgdGV4dExlZnQgPSBsZWZ0KHFyU2l6ZSArIDE1KTtcbiAgICBsZXQgdGV4dEhlaWdodCA9IDA7XG5cbiAgICBjb25zdCBxckltYWdlczogSFRNTENhbnZhc0VsZW1lbnRbXSA9IFtdO1xuICAgIGNvbnN0IGtleXMgPSBzcGxpdEtleXMocXIuZGF0YSwgUVJCaW5hcnlNYXhMZW5ndGgpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIHFySW1hZ2VzLnB1c2goYXdhaXQgUVJDb2RlLnRvQ2FudmFzKGtleSwgeyBlcnJvckNvcnJlY3Rpb25MZXZlbDogJ0wnIH0pKTtcbiAgICB9XG5cbiAgICBsZXQgbmV4dFFySW5kZXggPSBkcmF3T25lUGFnZU9mUXJDb2RlcyhxckltYWdlcywgZG9jLCB5LCBxclNpemUsIDApO1xuXG4gICAgZG9jLnNldEZvbnRTaXplKGZvbnQuc3ViaGVhZGVyKS5zZXRUZXh0Q29sb3IoY29sb3IuYmxhY2spO1xuICAgIHkgPSBtb3ZlRG93bih5LCAxMCk7XG4gICAgdGV4dEhlaWdodCArPSAxMDtcbiAgICBkb2MudGV4dChxci50aXRsZSwgdGV4dExlZnQsIHkpO1xuICAgIHRleHRIZWlnaHQgKz0gZG9jLmdldExpbmVIZWlnaHQoKTtcbiAgICB5ID0gbW92ZURvd24oeSwgMTUpO1xuICAgIHRleHRIZWlnaHQgKz0gMTU7XG4gICAgZG9jLnNldEZvbnRTaXplKGZvbnQuYm9keSkuc2V0VGV4dENvbG9yKGNvbG9yLmRhcmtncmF5KTtcbiAgICBkb2MudGV4dChxci5kZXNjcmlwdGlvbiwgdGV4dExlZnQsIHkpO1xuICAgIHRleHRIZWlnaHQgKz0gZG9jLmdldExpbmVIZWlnaHQoKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5ib2R5IC0gMik7XG4gICAgaWYgKHFyPy5kYXRhPy5sZW5ndGggPiBRUkJpbmFyeU1heExlbmd0aCkge1xuICAgICAgeSA9IG1vdmVEb3duKHksIDMwKTtcbiAgICAgIHRleHRIZWlnaHQgKz0gMzA7XG4gICAgICBkb2MudGV4dCgnTm90ZTogeW91IHdpbGwgbmVlZCB0byBwdXQgYWxsIFBhcnRzIHRvZ2V0aGVyIGZvciB0aGUgZnVsbCBrZXknLCB0ZXh0TGVmdCwgeSk7XG4gICAgfVxuICAgIHkgPSBtb3ZlRG93bih5LCAzMCk7XG4gICAgdGV4dEhlaWdodCArPSAzMDtcbiAgICBkb2MudGV4dCgnRGF0YTonLCB0ZXh0TGVmdCwgeSk7XG4gICAgdGV4dEhlaWdodCArPSBkb2MuZ2V0TGluZUhlaWdodCgpO1xuICAgIHkgPSBtb3ZlRG93bih5LCAxNSk7XG4gICAgdGV4dEhlaWdodCArPSAxNTtcbiAgICBjb25zdCB3aWR0aCA9IDcyICogOC41IC0gdGV4dExlZnQgLSAzMDtcbiAgICBkb2Muc2V0Rm9udCgnY291cmllcicpLnNldEZvbnRTaXplKDkpLnNldFRleHRDb2xvcihjb2xvci5ibGFjayk7XG4gICAgY29uc3QgbGluZXMgPSBkb2Muc3BsaXRUZXh0VG9TaXplKHFyLmRhdGEsIHdpZHRoKTtcbiAgICBjb25zdCBidWZmZXIgPSAxMDtcbiAgICBmb3IgKGxldCBsaW5lID0gMDsgbGluZSA8IGxpbmVzLmxlbmd0aDsgbGluZSsrKSB7XG4gICAgICAvLyBhZGQgbmV3IHBhZ2UgaWYgZGF0YSBkb2VzIG5vdCBmaXQgb24gb25lIHBhZ2VcbiAgICAgIGlmICh5ICsgYnVmZmVyID49IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRIZWlnaHQoKSkge1xuICAgICAgICBkb2MuYWRkUGFnZSgpO1xuICAgICAgICB0ZXh0SGVpZ2h0ID0gMDtcbiAgICAgICAgeSA9IDMwO1xuICAgICAgICB0b3BZID0geTtcbiAgICAgICAgbmV4dFFySW5kZXggPSBkcmF3T25lUGFnZU9mUXJDb2RlcyhxckltYWdlcywgZG9jLCB5LCBxclNpemUsIG5leHRRckluZGV4KTtcbiAgICAgICAgZG9jLnNldEZvbnQoJ2NvdXJpZXInKS5zZXRGb250U2l6ZSg5KS5zZXRUZXh0Q29sb3IoY29sb3IuYmxhY2spO1xuICAgICAgfVxuICAgICAgZG9jLnRleHQobGluZXNbbGluZV0sIHRleHRMZWZ0LCB5KTtcbiAgICAgIGlmIChsaW5lICE9PSBsaW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHkgPSBtb3ZlRG93bih5LCBidWZmZXIpO1xuICAgICAgICB0ZXh0SGVpZ2h0ICs9IGJ1ZmZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgcHVibGljIGtleSBpZiBleGlzdHNcbiAgICBpZiAocXIucHVibGljTWFzdGVyS2V5KSB7XG4gICAgICBjb25zdCB0ZXh0ID0gJ0tleSBJZDogJyArIHFyLnB1YmxpY01hc3RlcktleTtcblxuICAgICAgLy8gR3JheSBiYXJcbiAgICAgIHkgPSBtb3ZlRG93bih5LCAyMCk7XG4gICAgICB0ZXh0SGVpZ2h0ICs9IDIwO1xuICAgICAgZG9jLnNldEZpbGxDb2xvcigyNDcsIDI0OSwgMjQ5KTsgLy8gR3JheSBiYWNrZ3JvdW5kXG4gICAgICBkb2Muc2V0RHJhd0NvbG9yKDAsIDAsIDApOyAvLyBCb3JkZXJcblxuICAgICAgLy8gTGVhdmUgYSBiaXQgb2Ygc3BhY2UgZm9yIHRoZSBzaWRlIG9mIHRoZSByZWN0YW5nbGUuXG4gICAgICBjb25zdCBzcGxpdEtleUlkID0gZG9jLnNwbGl0VGV4dFRvU2l6ZSh0ZXh0LCB3aWR0aCAtIDEwKTtcblxuICAgICAgLy8gVGhlIGhlaWdodCBvZiB0aGUgYm94IG11c3QgYmUgYXQgbGVhc3QgMTUgcHggKGZvciBzaW5nbGUgbGluZSBjYXNlKSwgb3JcbiAgICAgIC8vIGEgbXVsdGlwbGUgb2YgMTMgZm9yIGVhY2ggbGluZS4gIFRoaXMgYWxsb3dzIGZvciBwcm9wZXIgcGFkZGluZy5cbiAgICAgIGRvYy5yZWN0KHRleHRMZWZ0LCB5LCB3aWR0aCwgTWF0aC5tYXgoMTIgKiBzcGxpdEtleUlkLmxlbmd0aCwgMTUpLCAnRkQnKTtcbiAgICAgIHRleHRIZWlnaHQgKz0gc3BsaXRLZXlJZC5sZW5ndGggKiBkb2MuZ2V0TGluZUhlaWdodCgpO1xuICAgICAgZG9jLnRleHQoc3BsaXRLZXlJZCwgdGV4dExlZnQgKyA1LCB5ICsgMTApO1xuICAgIH1cblxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnKTtcbiAgICAvLyBNb3ZlIGRvd24gdGhlIHNpemUgb2YgdGhlIFFSIGNvZGUgbWludXMgYWNjdW11bGF0ZWQgaGVpZ2h0IG9uIHRoZSByaWdodCBzaWRlLCBwbHVzIG1hcmdpblxuICAgIC8vIGlmIHdlIGhhdmUgYSBrZXkgdGhhdCBzcGFucyBtdWx0aXBsZSBwYWdlcywgdGhlbiBleGNsdWRlIFFSIGNvZGUgc2l6ZVxuICAgIGNvbnN0IHJvd0hlaWdodCA9IE1hdGgubWF4KHFyLmRhdGEubGVuZ3RoID4gUVJCaW5hcnlNYXhMZW5ndGggPyBxclNpemUgKyAyMCA6IHFyU2l6ZSwgdGV4dEhlaWdodCk7XG4gICAgY29uc3QgbWFyZ2luQm90dG9tID0gMTU7XG4gICAgeSA9IG1vdmVEb3duKHksIHJvd0hlaWdodCAtICh5IC0gdG9wWSkgKyBtYXJnaW5Cb3R0b20pO1xuICB9XG5cbiAgLy8gQWRkIG5leHQgUGFnZVxuICBkb2MuYWRkUGFnZSgpO1xuXG4gIC8vIG5leHQgcGFnZXMgdGl0bGVcbiAgeSA9IDA7XG4gIHkgPSBtb3ZlRG93bih5LCA1NSk7XG4gIGRvYy5zZXRGb250U2l6ZShmb250LmhlYWRlcikuc2V0VGV4dENvbG9yKGNvbG9yLmJsYWNrKTtcbiAgZG9jLnRleHQoJ0JpdEdvIEtleUNhcmQgRkFRJywgbGVmdCgwKSwgeSk7XG5cbiAgLy8gR2VuZXJhdGUgdGhlIHNlY29uZCBwYWdlJ3MgZGF0YSBmb3IgdGhlIGJhY2t1cCBQREZcbiAgeSA9IG1vdmVEb3duKHksIDMwKTtcbiAgcXVlc3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHEpIHtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5zdWJoZWFkZXIpLnNldFRleHRDb2xvcihjb2xvci5ibGFjayk7XG4gICAgZG9jLnRleHQocS5xdWVzdGlvbiwgbGVmdCgwKSwgeSk7XG4gICAgeSA9IG1vdmVEb3duKHksIDIwKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udC5ib2R5KS5zZXRUZXh0Q29sb3IoY29sb3IuZGFya2dyYXkpO1xuICAgIHEuYW5zd2VyLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGRvYy50ZXh0KGxpbmUsIGxlZnQoMCksIHkpO1xuICAgICAgeSA9IG1vdmVEb3duKHksIGZvbnQuYm9keSArIDMpO1xuICAgIH0pO1xuICAgIHkgPSBtb3ZlRG93bih5LCAyMik7XG4gIH0pO1xuXG4gIHJldHVybiBkb2M7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faq.d.ts","sourceRoot":"","sources":["../../src/faq.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAE9B,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,EAAE,CAuEnD"}
|
package/dist/src/faq.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateFaq = void 0;
|
|
4
|
+
function generateFaq(coinName) {
|
|
5
|
+
const sectionACoinSpecific = `The KeyCard contains important information which can be used to recover the ${coinName} `;
|
|
6
|
+
const sectionBCoinSpecific = `If you have lost or damaged all copies of your KeyCard, your ${coinName} is still safe, but this `;
|
|
7
|
+
const sectionCCoinSpecific = `source tools at https://github.com/bitgo to recover your ${coinName}. Note: You should never enter `;
|
|
8
|
+
const sectionDCoinSpecific = `your KeyCard will be able to steal your ${coinName}. We recommend keeping your wallet password `;
|
|
9
|
+
return [
|
|
10
|
+
{
|
|
11
|
+
question: 'What is the KeyCard?',
|
|
12
|
+
answer: [
|
|
13
|
+
sectionACoinSpecific,
|
|
14
|
+
'from your wallet in several situations. Each BitGo wallet has its own, unique KeyCard. ',
|
|
15
|
+
'If you have created multiple wallets, you should retain the KeyCard for each of them.',
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'What should I do with it?',
|
|
20
|
+
answer: [
|
|
21
|
+
'You should print the KeyCard and/or save the PDF to an offline storage device. The print-out ',
|
|
22
|
+
"or USB stick should be kept in a safe place, such as a bank vault or home safe. It's a good idea ",
|
|
23
|
+
'to keep a second copy in a different location.',
|
|
24
|
+
'',
|
|
25
|
+
"Important: If you haven't provided an external backup key, then the original PDF should be ",
|
|
26
|
+
'deleted from any machine where the wallet will be regularly accessed to prevent malware from ',
|
|
27
|
+
'capturing both the KeyCard and your wallet passcode.',
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
question: 'What should I do if I lose it?',
|
|
32
|
+
answer: [
|
|
33
|
+
sectionBCoinSpecific,
|
|
34
|
+
'Wallet should be considered at risk for loss. As soon as is convenient, you should use BitGo ',
|
|
35
|
+
'to empty the wallet into a new wallet and discontinue use of the old wallet.',
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
question: 'What if someone sees my KeyCard?',
|
|
40
|
+
answer: [
|
|
41
|
+
"Don't panic! All sensitive information on the KeyCard is encrypted with your passcode, or with a",
|
|
42
|
+
'key which only BitGo has. But, in general, you should make best efforts to keep your ',
|
|
43
|
+
'KeyCard private. If your KeyCard does get exposed or copied in a way that makes you ',
|
|
44
|
+
'uncomfortable, the best course of action is to empty the corresponding wallet into another ',
|
|
45
|
+
'wallet and discontinue use of the old wallet.',
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
question: 'What if I forget or lose my wallet password?',
|
|
50
|
+
answer: [
|
|
51
|
+
'BitGo can use the information in QR Code D to help you recover access to your wallet. ',
|
|
52
|
+
'Without the KeyCard, BitGo is not able to recover funds from a wallet with a lost password.',
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
question: 'What if BitGo becomes inaccessible for an extended period?',
|
|
57
|
+
answer: [
|
|
58
|
+
"Your KeyCard and wallet passcode can be used together with BitGo's published open ",
|
|
59
|
+
sectionCCoinSpecific,
|
|
60
|
+
'information from your KeyCard into tools other than the tools BitGo has published, or your ',
|
|
61
|
+
'funds may be at risk for theft.',
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
question: 'Should I write my wallet password on my KeyCard?',
|
|
66
|
+
answer: [
|
|
67
|
+
"No! BitGo's signature scheme approach to security depends on there not being a single point ",
|
|
68
|
+
'of attack. But if your wallet password is on your KeyCard, then anyone who gains access to ',
|
|
69
|
+
sectionDCoinSpecific,
|
|
70
|
+
'safe in a secure password manager such as LastPass, 1Password or KeePass.',
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
}
|
|
75
|
+
exports.generateFaq = generateFaq;
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFxLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZhcS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxTQUFnQixXQUFXLENBQUMsUUFBZ0I7SUFDMUMsTUFBTSxvQkFBb0IsR0FBRywrRUFBK0UsUUFBUSxHQUFHLENBQUM7SUFDeEgsTUFBTSxvQkFBb0IsR0FBRyxnRUFBZ0UsUUFBUSwyQkFBMkIsQ0FBQztJQUNqSSxNQUFNLG9CQUFvQixHQUFHLDREQUE0RCxRQUFRLGlDQUFpQyxDQUFDO0lBQ25JLE1BQU0sb0JBQW9CLEdBQUcsMkNBQTJDLFFBQVEsOENBQThDLENBQUM7SUFFL0gsT0FBTztRQUNMO1lBQ0UsUUFBUSxFQUFFLHNCQUFzQjtZQUNoQyxNQUFNLEVBQUU7Z0JBQ04sb0JBQW9CO2dCQUNwQix5RkFBeUY7Z0JBQ3pGLHVGQUF1RjthQUN4RjtTQUNGO1FBQ0Q7WUFDRSxRQUFRLEVBQUUsMkJBQTJCO1lBQ3JDLE1BQU0sRUFBRTtnQkFDTiwrRkFBK0Y7Z0JBQy9GLG1HQUFtRztnQkFDbkcsZ0RBQWdEO2dCQUNoRCxFQUFFO2dCQUNGLDZGQUE2RjtnQkFDN0YsK0ZBQStGO2dCQUMvRixzREFBc0Q7YUFDdkQ7U0FDRjtRQUNEO1lBQ0UsUUFBUSxFQUFFLGdDQUFnQztZQUMxQyxNQUFNLEVBQUU7Z0JBQ04sb0JBQW9CO2dCQUNwQiwrRkFBK0Y7Z0JBQy9GLDhFQUE4RTthQUMvRTtTQUNGO1FBQ0Q7WUFDRSxRQUFRLEVBQUUsa0NBQWtDO1lBQzVDLE1BQU0sRUFBRTtnQkFDTixrR0FBa0c7Z0JBQ2xHLHVGQUF1RjtnQkFDdkYsc0ZBQXNGO2dCQUN0Riw2RkFBNkY7Z0JBQzdGLCtDQUErQzthQUNoRDtTQUNGO1FBQ0Q7WUFDRSxRQUFRLEVBQUUsOENBQThDO1lBQ3hELE1BQU0sRUFBRTtnQkFDTix3RkFBd0Y7Z0JBQ3hGLDZGQUE2RjthQUM5RjtTQUNGO1FBQ0Q7WUFDRSxRQUFRLEVBQUUsNERBQTREO1lBQ3RFLE1BQU0sRUFBRTtnQkFDTixvRkFBb0Y7Z0JBQ3BGLG9CQUFvQjtnQkFDcEIsNkZBQTZGO2dCQUM3RixpQ0FBaUM7YUFDbEM7U0FDRjtRQUNEO1lBQ0UsUUFBUSxFQUFFLGtEQUFrRDtZQUM1RCxNQUFNLEVBQUU7Z0JBQ04sOEZBQThGO2dCQUM5Riw2RkFBNkY7Z0JBQzdGLG9CQUFvQjtnQkFDcEIsMkVBQTJFO2FBQzVFO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQztBQXZFRCxrQ0F1RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGQVEgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRmFxKGNvaW5OYW1lOiBzdHJpbmcpOiBGQVFbXSB7XG4gIGNvbnN0IHNlY3Rpb25BQ29pblNwZWNpZmljID0gYFRoZSBLZXlDYXJkIGNvbnRhaW5zIGltcG9ydGFudCBpbmZvcm1hdGlvbiB3aGljaCBjYW4gYmUgdXNlZCB0byByZWNvdmVyIHRoZSAke2NvaW5OYW1lfSBgO1xuICBjb25zdCBzZWN0aW9uQkNvaW5TcGVjaWZpYyA9IGBJZiB5b3UgaGF2ZSBsb3N0IG9yIGRhbWFnZWQgYWxsIGNvcGllcyBvZiB5b3VyIEtleUNhcmQsIHlvdXIgJHtjb2luTmFtZX0gaXMgc3RpbGwgc2FmZSwgYnV0IHRoaXMgYDtcbiAgY29uc3Qgc2VjdGlvbkNDb2luU3BlY2lmaWMgPSBgc291cmNlIHRvb2xzIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRnbyB0byByZWNvdmVyIHlvdXIgJHtjb2luTmFtZX0uIE5vdGU6IFlvdSBzaG91bGQgbmV2ZXIgZW50ZXIgYDtcbiAgY29uc3Qgc2VjdGlvbkRDb2luU3BlY2lmaWMgPSBgeW91ciBLZXlDYXJkIHdpbGwgYmUgYWJsZSB0byBzdGVhbCB5b3VyICR7Y29pbk5hbWV9LiBXZSByZWNvbW1lbmQga2VlcGluZyB5b3VyIHdhbGxldCBwYXNzd29yZCBgO1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcXVlc3Rpb246ICdXaGF0IGlzIHRoZSBLZXlDYXJkPycsXG4gICAgICBhbnN3ZXI6IFtcbiAgICAgICAgc2VjdGlvbkFDb2luU3BlY2lmaWMsXG4gICAgICAgICdmcm9tIHlvdXIgd2FsbGV0IGluIHNldmVyYWwgc2l0dWF0aW9ucy4gRWFjaCBCaXRHbyB3YWxsZXQgaGFzIGl0cyBvd24sIHVuaXF1ZSBLZXlDYXJkLiAnLFxuICAgICAgICAnSWYgeW91IGhhdmUgY3JlYXRlZCBtdWx0aXBsZSB3YWxsZXRzLCB5b3Ugc2hvdWxkIHJldGFpbiB0aGUgS2V5Q2FyZCBmb3IgZWFjaCBvZiB0aGVtLicsXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgcXVlc3Rpb246ICdXaGF0IHNob3VsZCBJIGRvIHdpdGggaXQ/JyxcbiAgICAgIGFuc3dlcjogW1xuICAgICAgICAnWW91IHNob3VsZCBwcmludCB0aGUgS2V5Q2FyZCBhbmQvb3Igc2F2ZSB0aGUgUERGIHRvIGFuIG9mZmxpbmUgc3RvcmFnZSBkZXZpY2UuIFRoZSBwcmludC1vdXQgJyxcbiAgICAgICAgXCJvciBVU0Igc3RpY2sgc2hvdWxkIGJlIGtlcHQgaW4gYSBzYWZlIHBsYWNlLCBzdWNoIGFzIGEgYmFuayB2YXVsdCBvciBob21lIHNhZmUuIEl0J3MgYSBnb29kIGlkZWEgXCIsXG4gICAgICAgICd0byBrZWVwIGEgc2Vjb25kIGNvcHkgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24uJyxcbiAgICAgICAgJycsXG4gICAgICAgIFwiSW1wb3J0YW50OiBJZiB5b3UgaGF2ZW4ndCBwcm92aWRlZCBhbiBleHRlcm5hbCBiYWNrdXAga2V5LCB0aGVuIHRoZSBvcmlnaW5hbCBQREYgc2hvdWxkIGJlIFwiLFxuICAgICAgICAnZGVsZXRlZCBmcm9tIGFueSBtYWNoaW5lIHdoZXJlIHRoZSB3YWxsZXQgd2lsbCBiZSByZWd1bGFybHkgYWNjZXNzZWQgdG8gcHJldmVudCBtYWx3YXJlIGZyb20gJyxcbiAgICAgICAgJ2NhcHR1cmluZyBib3RoIHRoZSBLZXlDYXJkIGFuZCB5b3VyIHdhbGxldCBwYXNzY29kZS4nLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHF1ZXN0aW9uOiAnV2hhdCBzaG91bGQgSSBkbyBpZiBJIGxvc2UgaXQ/JyxcbiAgICAgIGFuc3dlcjogW1xuICAgICAgICBzZWN0aW9uQkNvaW5TcGVjaWZpYyxcbiAgICAgICAgJ1dhbGxldCBzaG91bGQgYmUgY29uc2lkZXJlZCBhdCByaXNrIGZvciBsb3NzLiBBcyBzb29uIGFzIGlzIGNvbnZlbmllbnQsIHlvdSBzaG91bGQgdXNlIEJpdEdvICcsXG4gICAgICAgICd0byBlbXB0eSB0aGUgd2FsbGV0IGludG8gYSBuZXcgd2FsbGV0IGFuZCBkaXNjb250aW51ZSB1c2Ugb2YgdGhlIG9sZCB3YWxsZXQuJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBxdWVzdGlvbjogJ1doYXQgaWYgc29tZW9uZSBzZWVzIG15IEtleUNhcmQ/JyxcbiAgICAgIGFuc3dlcjogW1xuICAgICAgICBcIkRvbid0IHBhbmljISBBbGwgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIG9uIHRoZSBLZXlDYXJkIGlzIGVuY3J5cHRlZCB3aXRoIHlvdXIgcGFzc2NvZGUsIG9yIHdpdGggYVwiLFxuICAgICAgICAna2V5IHdoaWNoIG9ubHkgQml0R28gaGFzLiBCdXQsIGluIGdlbmVyYWwsIHlvdSBzaG91bGQgbWFrZSBiZXN0IGVmZm9ydHMgdG8ga2VlcCB5b3VyICcsXG4gICAgICAgICdLZXlDYXJkIHByaXZhdGUuIElmIHlvdXIgS2V5Q2FyZCBkb2VzIGdldCBleHBvc2VkIG9yIGNvcGllZCBpbiBhIHdheSB0aGF0IG1ha2VzIHlvdSAnLFxuICAgICAgICAndW5jb21mb3J0YWJsZSwgdGhlIGJlc3QgY291cnNlIG9mIGFjdGlvbiBpcyB0byBlbXB0eSB0aGUgY29ycmVzcG9uZGluZyB3YWxsZXQgaW50byBhbm90aGVyICcsXG4gICAgICAgICd3YWxsZXQgYW5kIGRpc2NvbnRpbnVlIHVzZSBvZiB0aGUgb2xkIHdhbGxldC4nLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHF1ZXN0aW9uOiAnV2hhdCBpZiBJIGZvcmdldCBvciBsb3NlIG15IHdhbGxldCBwYXNzd29yZD8nLFxuICAgICAgYW5zd2VyOiBbXG4gICAgICAgICdCaXRHbyBjYW4gdXNlIHRoZSBpbmZvcm1hdGlvbiBpbiBRUiBDb2RlIEQgdG8gaGVscCB5b3UgcmVjb3ZlciBhY2Nlc3MgdG8geW91ciB3YWxsZXQuICcsXG4gICAgICAgICdXaXRob3V0IHRoZSBLZXlDYXJkLCBCaXRHbyBpcyBub3QgYWJsZSB0byByZWNvdmVyIGZ1bmRzIGZyb20gYSB3YWxsZXQgd2l0aCBhIGxvc3QgcGFzc3dvcmQuJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBxdWVzdGlvbjogJ1doYXQgaWYgQml0R28gYmVjb21lcyBpbmFjY2Vzc2libGUgZm9yIGFuIGV4dGVuZGVkIHBlcmlvZD8nLFxuICAgICAgYW5zd2VyOiBbXG4gICAgICAgIFwiWW91ciBLZXlDYXJkIGFuZCB3YWxsZXQgcGFzc2NvZGUgY2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBCaXRHbydzIHB1Ymxpc2hlZCBvcGVuIFwiLFxuICAgICAgICBzZWN0aW9uQ0NvaW5TcGVjaWZpYyxcbiAgICAgICAgJ2luZm9ybWF0aW9uIGZyb20geW91ciBLZXlDYXJkIGludG8gdG9vbHMgb3RoZXIgdGhhbiB0aGUgdG9vbHMgQml0R28gaGFzIHB1Ymxpc2hlZCwgb3IgeW91ciAnLFxuICAgICAgICAnZnVuZHMgbWF5IGJlIGF0IHJpc2sgZm9yIHRoZWZ0LicsXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgcXVlc3Rpb246ICdTaG91bGQgSSB3cml0ZSBteSB3YWxsZXQgcGFzc3dvcmQgb24gbXkgS2V5Q2FyZD8nLFxuICAgICAgYW5zd2VyOiBbXG4gICAgICAgIFwiTm8hIEJpdEdvJ3Mgc2lnbmF0dXJlIHNjaGVtZSBhcHByb2FjaCB0byBzZWN1cml0eSBkZXBlbmRzIG9uIHRoZXJlIG5vdCBiZWluZyBhIHNpbmdsZSBwb2ludCBcIixcbiAgICAgICAgJ29mIGF0dGFjay4gQnV0IGlmIHlvdXIgd2FsbGV0IHBhc3N3b3JkIGlzIG9uIHlvdXIgS2V5Q2FyZCwgdGhlbiBhbnlvbmUgd2hvIGdhaW5zIGFjY2VzcyB0byAnLFxuICAgICAgICBzZWN0aW9uRENvaW5TcGVjaWZpYyxcbiAgICAgICAgJ3NhZmUgaW4gYSBzZWN1cmUgcGFzc3dvcmQgbWFuYWdlciBzdWNoIGFzIExhc3RQYXNzLCAxUGFzc3dvcmQgb3IgS2VlUGFzcy4nLFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { GenerateQrDataBaseParams, GenerateQrDataForKeychainParams, IDrawKeyCard } from './types';
|
|
2
|
+
export declare function generateParamsForKeyCreation({ curve, bitgoKeychain, walletLabel, keyCardImage, }: GenerateQrDataForKeychainParams & GenerateQrDataBaseParams): IDrawKeyCard;
|
|
3
|
+
//# sourceMappingURL=generateParamsForKeyCreation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateParamsForKeyCreation.d.ts","sourceRoot":"","sources":["../../src/generateParamsForKeyCreation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,+BAA+B,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAElG,wBAAgB,4BAA4B,CAAC,EAC3C,KAAK,EACL,aAAa,EACb,WAAW,EACX,YAAY,GACb,EAAE,+BAA+B,GAAG,wBAAwB,GAAG,YAAY,CAkC3E"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateParamsForKeyCreation = void 0;
|
|
4
|
+
const assert = require("assert");
|
|
5
|
+
function generateParamsForKeyCreation({ curve, bitgoKeychain, walletLabel, keyCardImage, }) {
|
|
6
|
+
assert(bitgoKeychain.commonKeychain, 'bitgoKeychain.commonKeychain is required');
|
|
7
|
+
return {
|
|
8
|
+
walletLabel,
|
|
9
|
+
keyCardImage,
|
|
10
|
+
curve,
|
|
11
|
+
qrData: {
|
|
12
|
+
user: {
|
|
13
|
+
title: 'A: Common Keychain',
|
|
14
|
+
data: bitgoKeychain.commonKeychain,
|
|
15
|
+
description: 'This is the common pub which is the equivalent of xpub (public key)\r\nof the key generated',
|
|
16
|
+
},
|
|
17
|
+
bitgo: {
|
|
18
|
+
title: 'B: BitGo Key ID',
|
|
19
|
+
data: bitgoKeychain.id,
|
|
20
|
+
description: 'This is the identifier assigned to the key generated using which BitGo\r\ncan lookup BitGo key share.',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
questions: [
|
|
24
|
+
{
|
|
25
|
+
question: 'What is the KeyCard?',
|
|
26
|
+
answer: [
|
|
27
|
+
'This key card contains information about the key id for the generated key.\r\nThis id can later be used to derive wallets.',
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
question: 'What should I do with it?',
|
|
32
|
+
answer: [
|
|
33
|
+
'Store this keycard for later use. The key ID is important to communicate with BitGo\r\nto derive wallets from the key.',
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
exports.generateParamsForKeyCreation = generateParamsForKeyCreation;
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVQYXJhbXNGb3JLZXlDcmVhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZVBhcmFtc0ZvcktleUNyZWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUdqQyxTQUFnQiw0QkFBNEIsQ0FBQyxFQUMzQyxLQUFLLEVBQ0wsYUFBYSxFQUNiLFdBQVcsRUFDWCxZQUFZLEdBQytDO0lBQzNELE1BQU0sQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLDBDQUEwQyxDQUFDLENBQUM7SUFDakYsT0FBTztRQUNMLFdBQVc7UUFDWCxZQUFZO1FBQ1osS0FBSztRQUNMLE1BQU0sRUFBRTtZQUNOLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsb0JBQW9CO2dCQUMzQixJQUFJLEVBQUUsYUFBYSxDQUFDLGNBQWM7Z0JBQ2xDLFdBQVcsRUFBRSw2RkFBNkY7YUFDM0c7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsS0FBSyxFQUFFLGlCQUFpQjtnQkFDeEIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUFFO2dCQUN0QixXQUFXLEVBQ1QsdUdBQXVHO2FBQzFHO1NBQ0Y7UUFDRCxTQUFTLEVBQUU7WUFDVDtnQkFDRSxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyxNQUFNLEVBQUU7b0JBQ04sNEhBQTRIO2lCQUM3SDthQUNGO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLDJCQUEyQjtnQkFDckMsTUFBTSxFQUFFO29CQUNOLHdIQUF3SDtpQkFDekg7YUFDRjtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUF2Q0Qsb0VBdUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBHZW5lcmF0ZVFyRGF0YUJhc2VQYXJhbXMsIEdlbmVyYXRlUXJEYXRhRm9yS2V5Y2hhaW5QYXJhbXMsIElEcmF3S2V5Q2FyZCB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVQYXJhbXNGb3JLZXlDcmVhdGlvbih7XG4gIGN1cnZlLFxuICBiaXRnb0tleWNoYWluLFxuICB3YWxsZXRMYWJlbCxcbiAga2V5Q2FyZEltYWdlLFxufTogR2VuZXJhdGVRckRhdGFGb3JLZXljaGFpblBhcmFtcyAmIEdlbmVyYXRlUXJEYXRhQmFzZVBhcmFtcyk6IElEcmF3S2V5Q2FyZCB7XG4gIGFzc2VydChiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluLCAnYml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbiBpcyByZXF1aXJlZCcpO1xuICByZXR1cm4ge1xuICAgIHdhbGxldExhYmVsLFxuICAgIGtleUNhcmRJbWFnZSxcbiAgICBjdXJ2ZSxcbiAgICBxckRhdGE6IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdGl0bGU6ICdBOiBDb21tb24gS2V5Y2hhaW4nLFxuICAgICAgICBkYXRhOiBiaXRnb0tleWNoYWluLmNvbW1vbktleWNoYWluLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIGNvbW1vbiBwdWIgd2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgeHB1YiAocHVibGljIGtleSlcXHJcXG5vZiB0aGUga2V5IGdlbmVyYXRlZCcsXG4gICAgICB9LFxuICAgICAgYml0Z286IHtcbiAgICAgICAgdGl0bGU6ICdCOiBCaXRHbyBLZXkgSUQnLFxuICAgICAgICBkYXRhOiBiaXRnb0tleWNoYWluLmlkLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAnVGhpcyBpcyB0aGUgaWRlbnRpZmllciBhc3NpZ25lZCB0byB0aGUga2V5IGdlbmVyYXRlZCB1c2luZyB3aGljaCBCaXRHb1xcclxcbmNhbiBsb29rdXAgQml0R28ga2V5IHNoYXJlLicsXG4gICAgICB9LFxuICAgIH0sXG4gICAgcXVlc3Rpb25zOiBbXG4gICAgICB7XG4gICAgICAgIHF1ZXN0aW9uOiAnV2hhdCBpcyB0aGUgS2V5Q2FyZD8nLFxuICAgICAgICBhbnN3ZXI6IFtcbiAgICAgICAgICAnVGhpcyBrZXkgY2FyZCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUga2V5IGlkIGZvciB0aGUgZ2VuZXJhdGVkIGtleS5cXHJcXG5UaGlzIGlkIGNhbiBsYXRlciBiZSB1c2VkIHRvIGRlcml2ZSB3YWxsZXRzLicsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogJ1doYXQgc2hvdWxkIEkgZG8gd2l0aCBpdD8nLFxuICAgICAgICBhbnN3ZXI6IFtcbiAgICAgICAgICAnU3RvcmUgdGhpcyBrZXljYXJkIGZvciBsYXRlciB1c2UuIFRoZSBrZXkgSUQgaXMgaW1wb3J0YW50IHRvIGNvbW11bmljYXRlIHdpdGggQml0R29cXHJcXG50byBkZXJpdmUgd2FsbGV0cyBmcm9tIHRoZSBrZXkuJyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { GenerateQrDataParams, QrData } from './types';
|
|
2
|
+
export declare function generateQrData({ backupKeychain, backupKeyProvider, backupMasterKey, bitgoKeychain, coin, passcodeEncryptionCode, passphrase, userKeychain, userMasterKey, userMasterPublicKey, backupMasterPublicKey, }: GenerateQrDataParams): QrData;
|
|
3
|
+
//# sourceMappingURL=generateQrData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateQrData.d.ts","sourceRoot":"","sources":["../../src/generateQrData.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAA8B,MAAM,EAAe,MAAM,SAAS,CAAC;AAoHhG,wBAAgB,cAAc,CAAC,EAC7B,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,IAAI,EACJ,sBAAsB,EACtB,UAAU,EACV,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,qBAAqB,GACtB,EAAE,oBAAoB,GAAG,MAAM,CAyB/B"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateQrData = void 0;
|
|
4
|
+
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
5
|
+
const assert = require("assert");
|
|
6
|
+
function getPubFromKey(key) {
|
|
7
|
+
switch (key.type) {
|
|
8
|
+
case 'blsdkg':
|
|
9
|
+
return key.commonPub;
|
|
10
|
+
case 'tss':
|
|
11
|
+
return key.commonKeychain;
|
|
12
|
+
case 'independent':
|
|
13
|
+
return key.pub;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function generateUserQrData(userKeychain, userMasterKey) {
|
|
17
|
+
if (userKeychain.encryptedPrv) {
|
|
18
|
+
return {
|
|
19
|
+
title: 'A: User Key',
|
|
20
|
+
description: 'This is your private key, encrypted with your wallet password.',
|
|
21
|
+
data: userKeychain.encryptedPrv,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const pub = getPubFromKey(userKeychain);
|
|
25
|
+
assert(pub);
|
|
26
|
+
return {
|
|
27
|
+
title: 'A: Provided User Key',
|
|
28
|
+
description: 'This is the public key you provided for your wallet.',
|
|
29
|
+
data: pub,
|
|
30
|
+
publicMasterKey: userMasterKey,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function generateBackupQrData(coin, backupKeychain, { backupKeyProvider, backupMasterKey, } = {}) {
|
|
34
|
+
var _a;
|
|
35
|
+
const title = 'B: Backup Key';
|
|
36
|
+
if (backupKeychain.encryptedPrv) {
|
|
37
|
+
return {
|
|
38
|
+
title,
|
|
39
|
+
description: 'This is your backup private key, encrypted with your wallet password.',
|
|
40
|
+
data: backupKeychain.encryptedPrv,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (backupKeyProvider === 'BitGo Trust' && backupKeychain.type === 'tss') {
|
|
44
|
+
const keyShares = (_a = backupKeychain.keyShares) === null || _a === void 0 ? void 0 : _a.filter((keyShare) => keyShare.to === 'backup');
|
|
45
|
+
assert((keyShares === null || keyShares === void 0 ? void 0 : keyShares.length) === 2);
|
|
46
|
+
return {
|
|
47
|
+
title: 'B: Backup Key Shares',
|
|
48
|
+
description: `These are the key shares for ${backupKeyProvider}. If BitGo Inc. goes out of business,\r\n` +
|
|
49
|
+
`contact ${backupKeyProvider} and they will help you recover your funds.`,
|
|
50
|
+
data: JSON.stringify(keyShares),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const pub = getPubFromKey(backupKeychain);
|
|
54
|
+
assert(pub);
|
|
55
|
+
if (backupKeyProvider) {
|
|
56
|
+
return {
|
|
57
|
+
title: 'B: Backup Key',
|
|
58
|
+
description: `This is the public key held at ${backupKeyProvider}, an ${coin.name} recovery service. ` +
|
|
59
|
+
`If you lose\r\nyour key, ${backupKeyProvider} will be able to sign transactions to recover funds.`,
|
|
60
|
+
data: pub,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
title: 'B: Provided Backup Key',
|
|
65
|
+
description: 'This is the public key you provided for your wallet.',
|
|
66
|
+
data: pub,
|
|
67
|
+
publicMasterKey: backupMasterKey,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function generateBitGoQrData(bitgoKeychain) {
|
|
71
|
+
const bitgoData = getPubFromKey(bitgoKeychain);
|
|
72
|
+
assert(bitgoData);
|
|
73
|
+
return {
|
|
74
|
+
title: 'C: BitGo Public Key',
|
|
75
|
+
description: 'This is the public part of the key that BitGo will use to ' + 'co-sign transactions\r\nwith you on your wallet.',
|
|
76
|
+
data: bitgoData,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function generateUserMasterPublicKeyQRData(publicKey) {
|
|
80
|
+
return {
|
|
81
|
+
title: 'E: Master User Public Key',
|
|
82
|
+
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.',
|
|
83
|
+
data: publicKey,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function generateBackupMasterPublicKeyQRData(publicKey) {
|
|
87
|
+
return {
|
|
88
|
+
title: 'F: Master Backup Public Key',
|
|
89
|
+
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.',
|
|
90
|
+
data: publicKey,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function generateQrData({ backupKeychain, backupKeyProvider, backupMasterKey, bitgoKeychain, coin, passcodeEncryptionCode, passphrase, userKeychain, userMasterKey, userMasterPublicKey, backupMasterPublicKey, }) {
|
|
94
|
+
const qrData = {
|
|
95
|
+
user: generateUserQrData(userKeychain, userMasterKey),
|
|
96
|
+
userMasterPublicKey: userMasterPublicKey ? generateUserMasterPublicKeyQRData(userMasterPublicKey) : undefined,
|
|
97
|
+
backup: generateBackupQrData(coin, backupKeychain, {
|
|
98
|
+
backupKeyProvider,
|
|
99
|
+
backupMasterKey,
|
|
100
|
+
}),
|
|
101
|
+
backupMasterPublicKey: backupMasterPublicKey
|
|
102
|
+
? generateBackupMasterPublicKeyQRData(backupMasterPublicKey)
|
|
103
|
+
: undefined,
|
|
104
|
+
bitgo: generateBitGoQrData(bitgoKeychain),
|
|
105
|
+
};
|
|
106
|
+
if (passphrase && passcodeEncryptionCode) {
|
|
107
|
+
const encryptedWalletPasscode = sdk_api_1.encrypt(passcodeEncryptionCode, passphrase);
|
|
108
|
+
qrData.passcode = {
|
|
109
|
+
title: 'D: Encrypted wallet Password',
|
|
110
|
+
description: 'This is the wallet password, encrypted client-side with a key held by BitGo.',
|
|
111
|
+
data: encryptedWalletPasscode,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
return qrData;
|
|
115
|
+
}
|
|
116
|
+
exports.generateQrData = generateQrData;
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVRckRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdGVRckRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsaURBQThDO0FBQzlDLGlDQUFpQztBQUdqQyxTQUFTLGFBQWEsQ0FBQyxHQUFhO0lBQ2xDLFFBQVEsR0FBRyxDQUFDLElBQUksRUFBRTtRQUNoQixLQUFLLFFBQVE7WUFDWCxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDdkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDO1FBQzVCLEtBQUssYUFBYTtZQUNoQixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUM7S0FDbEI7QUFDSCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxZQUFzQixFQUFFLGFBQXNCO0lBQ3hFLElBQUksWUFBWSxDQUFDLFlBQVksRUFBRTtRQUM3QixPQUFPO1lBQ0wsS0FBSyxFQUFFLGFBQWE7WUFDcEIsV0FBVyxFQUFFLGdFQUFnRTtZQUM3RSxJQUFJLEVBQUUsWUFBWSxDQUFDLFlBQVk7U0FDaEMsQ0FBQztLQUNIO0lBRUQsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVaLE9BQU87UUFDTCxLQUFLLEVBQUUsc0JBQXNCO1FBQzdCLFdBQVcsRUFBRSxzREFBc0Q7UUFDbkUsSUFBSSxFQUFFLEdBQUc7UUFDVCxlQUFlLEVBQUUsYUFBYTtLQUMvQixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQzNCLElBQXdCLEVBQ3hCLGNBQXdCLEVBQ3hCLEVBQ0UsaUJBQWlCLEVBQ2pCLGVBQWUsTUFJYixFQUFFOztJQUVOLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQztJQUM5QixJQUFJLGNBQWMsQ0FBQyxZQUFZLEVBQUU7UUFDL0IsT0FBTztZQUNMLEtBQUs7WUFDTCxXQUFXLEVB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LGFBQWEsQ0FBQztLQUMxQyxDQUFDO0lBRUYsSUFBSSxVQUFVLElBQUksc0JBQXNCLEVBQUU7UUFDeEMsTUFBTSx1QkFBdUIsR0FBRyxpQkFBTyxDQUFDLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRTVFLE1BQU0sQ0FBQyxRQUFRLEdBQUc7WUFDaEIsS0FBSyxFQUFFLDhCQUE4QjtZQUNyQyxXQUFXLEVBQUUsOEVBQThFO1lBQzNGLElBQUksRUFBRSx1QkFBdUI7U0FDOUIsQ0FBQztLQUNIO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQXJDRCx3Q0FxQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgS2V5Y2hhaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBlbmNyeXB0IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IEdlbmVyYXRlUXJEYXRhUGFyYW1zLCBNYXN0ZXJQdWJsaWNLZXlRckRhdGFFbnRyeSwgUXJEYXRhLCBRckRhdGFFbnRyeSB9IGZyb20gJy4vdHlwZXMnO1xuXG5mdW5jdGlvbiBnZXRQdWJGcm9tS2V5KGtleTogS2V5Y2hhaW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBzd2l0Y2ggKGtleS50eXBlKSB7XG4gICAgY2FzZSAnYmxzZGtnJzpcbiAgICAgIHJldHVybiBrZXkuY29tbW9uUHViO1xuICAgIGNhc2UgJ3Rzcyc6XG4gICAgICByZXR1cm4ga2V5LmNvbW1vbktleWNoYWluO1xuICAgIGNhc2UgJ2luZGVwZW5kZW50JzpcbiAgICAgIHJldHVybiBrZXkucHViO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlVXNlclFyRGF0YSh1c2VyS2V5Y2hhaW46IEtleWNoYWluLCB1c2VyTWFzdGVyS2V5Pzogc3RyaW5nKTogUXJEYXRhRW50cnkge1xuICBpZiAodXNlcktleWNoYWluLmVuY3J5cHRlZFBydikge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogJ0E6IFVzZXIgS2V5JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB5b3VyIHByaXZhdGUga2V5LCBlbmNyeXB0ZWQgd2l0aCB5b3VyIHdhbGxldCBwYXNzd29yZC4nLFxuICAgICAgZGF0YTogdXNlcktleWNoYWluLmVuY3J5cHRlZFBydixcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHViID0gZ2V0UHViRnJvbUtleSh1c2VyS2V5Y2hhaW4pO1xuICBhc3NlcnQocHViKTtcblxuICByZXR1cm4ge1xuICAgIHRpdGxlOiAnQTogUHJvdmlkZWQgVXNlciBLZXknLFxuICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgcHVibGljIGtleSB5b3UgcHJvdmlkZWQgZm9yIHlvdXIgd2FsbGV0LicsXG4gICAgZGF0YTogcHViLFxuICAgIHB1YmxpY01hc3RlcktleTogdXNlck1hc3RlcktleSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVCYWNrdXBRckRhdGEoXG4gIGNvaW46IFJlYWRvbmx5PEJhc2VDb2luPixcbiAgYmFja3VwS2V5Y2hhaW46IEtleWNoYWluLFxuICB7XG4gICAgYmFja3VwS2V5UHJvdmlkZXIsXG4gICAgYmFja3VwTWFzdGVyS2V5LFxuICB9OiB7XG4gICAgYmFja3VwS2V5UHJvdmlkZXI/OiBzdHJpbmc7XG4gICAgYmFja3VwTWFzdGVyS2V5Pzogc3RyaW5nO1xuICB9ID0ge31cbik6IFFyRGF0YUVudHJ5IHtcbiAgY29uc3QgdGl0bGUgPSAnQjogQmFja3VwIEtleSc7XG4gIGlmIChiYWNrdXBLZXljaGFpbi5lbmNyeXB0ZWRQcnYpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgeW91ciBiYWNrdXAgcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIHlvdXIgd2FsbGV0IHBhc3N3b3JkLicsXG4gICAgICBkYXRhOiBiYWNrdXBLZXljaGFpbi5lbmNyeXB0ZWRQcnYsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChiYWNrdXBLZXlQcm92aWRlciA9PT0gJ0JpdEdvIFRydXN0JyAmJiBiYWNrdXBLZXljaGFpbi50eXBlID09PSAndHNzJykge1xuICAgIGNvbnN0IGtleVNoYXJlcyA9IGJhY2t1cEtleWNoYWluLmtleVNoYXJlcz8uZmlsdGVyKChrZXlTaGFyZSkgPT4ga2V5U2hhcmUudG8gPT09ICdiYWNrdXAnKTtcbiAgICBhc3NlcnQoa2V5U2hhcmVzPy5sZW5ndGggPT09IDIpO1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogJ0I6IEJhY2t1cCBLZXkgU2hhcmVzJyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBgVGhlc2UgYXJlIHRoZSBrZXkgc2hhcmVzIGZvciAke2JhY2t1cEtleVByb3ZpZGVyfS4gSWYgQml0R28gSW5jLiBnb2VzIG91dCBvZiBidXNpbmVzcyxcXHJcXG5gICtcbiAgICAgICAgYGNvbnRhY3QgJHtiYWNrdXBLZXlQcm92aWRlcn0gYW5kIHRoZXkgd2lsbCBoZWxwIHlvdSByZWNvdmVyIHlvdXIgZnVuZHMuYCxcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGtleVNoYXJlcyksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHB1YiA9IGdldFB1YkZyb21LZXkoYmFja3VwS2V5Y2hhaW4pO1xuICBhc3NlcnQocHViKTtcblxuICBpZiAoYmFja3VwS2V5UHJvdmlkZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGU6ICdCOiBCYWNrdXAgS2V5JyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBgVGhpcyBpcyB0aGUgcHVibGljIGtleSBoZWxkIGF0ICR7YmFja3VwS2V5UHJvdmlkZXJ9LCBhbiAke2NvaW4ubmFtZX0gcmVjb3Zlcnkgc2VydmljZS4gYCArXG4gICAgICAgIGBJZiB5b3UgbG9zZVxcclxcbnlvdXIga2V5LCAke2JhY2t1cEtleVByb3ZpZGVyfSB3aWxsIGJlIGFibGUgdG8gc2lnbiB0cmFuc2FjdGlvbnMgdG8gcmVjb3ZlciBmdW5kcy5gLFxuICAgICAgZGF0YTogcHViLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRpdGxlOiAnQjogUHJvdmlkZWQgQmFja3VwIEtleScsXG4gICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIHRoZSBwdWJsaWMga2V5IHlvdSBwcm92aWRlZCBmb3IgeW91ciB3YWxsZXQuJyxcbiAgICBkYXRhOiBwdWIsXG4gICAgcHVibGljTWFzdGVyS2V5OiBiYWNrdXBNYXN0ZXJLZXksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlQml0R29RckRhdGEoYml0Z29LZXljaGFpbjogS2V5Y2hhaW4pOiBRckRhdGFFbnRyeSB7XG4gIGNvbnN0IGJpdGdvRGF0YSA9IGdldFB1YkZyb21LZXkoYml0Z29LZXljaGFpbik7XG4gIGFzc2VydChiaXRnb0RhdGEpO1xuXG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdDOiBCaXRHbyBQdWJsaWMgS2V5JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdUaGlzIGlzIHRoZSBwdWJsaWMgcGFydCBvZiB0aGUga2V5IHRoYXQgQml0R28gd2lsbCB1c2UgdG8gJyArICdjby1zaWduIHRyYW5zYWN0aW9uc1xcclxcbndpdGggeW91IG9uIHlvdXIgd2FsbGV0LicsXG4gICAgZGF0YTogYml0Z29EYXRhLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVVzZXJNYXN0ZXJQdWJsaWNLZXlRUkRhdGEocHVibGljS2V5OiBzdHJpbmcpOiBNYXN0ZXJQdWJsaWNLZXlRckRhdGFFbnRyeSB7XG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdFOiBNYXN0ZXIgVXNlciBQdWJsaWMgS2V5JyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdUaGlzIGlzIHRoZSBwdWJsaWMga2V5IHVzZWQgdG8gZGVyaXZlIHRoZSB1c2VyIGtleSBmb3IgdGhlIHdhbGxldC4gVGhpcyBpcyBub3Qgc3RvcmVkIGJ5IEJpdEdvLCBhbmQgbWF5IGJlIHJlcXVpcmVkIGZvciB1c2UgaW4gcmVjb3Zlcnkgc2NlbmFyaW9zLicsXG4gICAgZGF0YTogcHVibGljS2V5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJhY2t1cE1hc3RlclB1YmxpY0tleVFSRGF0YShwdWJsaWNLZXk6IHN0cmluZyk6IE1hc3RlclB1YmxpY0tleVFyRGF0YUVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0Y6IE1hc3RlciBCYWNrdXAgUHVibGljIEtleScsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnVGhpcyBpcyB0aGUgcHVibGljIGtleSB1c2VkIHRvIGRlcml2ZSB0aGUgYmFja3VwIGtleSBmb3IgdGhlIHdhbGxldC4gVGhpcyBpcyBub3Qgc3RvcmVkIGJ5IEJpdEdvLCBhbmQgbWF5IGJlIHJlcXVpcmVkIGZvciB1c2UgaW4gcmVjb3Zlcnkgc2NlbmFyaW9zLicsXG4gICAgZGF0YTogcHVibGljS2V5LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVRckRhdGEoe1xuICBiYWNrdXBLZXljaGFpbixcbiAgYmFja3VwS2V5UHJvdmlkZXIsXG4gIGJhY2t1cE1hc3RlcktleSxcbiAgYml0Z29LZXljaGFpbixcbiAgY29pbixcbiAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgcGFzc3BocmFzZSxcbiAgdXNlcktleWNoYWluLFxuICB1c2VyTWFzdGVyS2V5LFxuICB1c2VyTWFzdGVyUHVibGljS2V5LFxuICBiYWNrdXBNYXN0ZXJQdWJsaWNLZXksXG59OiBHZW5lcmF0ZVFyRGF0YVBhcmFtcyk6IFFyRGF0YSB7XG4gIGNvbnN0IHFyRGF0YTogUXJEYXRhID0ge1xuICAgIHVzZXI6IGdlbmVyYXRlVXNlclFyRGF0YSh1c2VyS2V5Y2hhaW4sIHVzZXJNYXN0ZXJLZXkpLFxuICAgIHVzZXJNYXN0ZXJQdWJsaWNLZXk6IHVzZXJNYXN0ZXJQdWJsaWNLZXkgPyBnZW5lcmF0ZVVzZXJNYXN0ZXJQdWJsaWNLZXlRUkRhdGEodXNlck1hc3RlclB1YmxpY0tleSkgOiB1bmRlZmluZWQsXG4gICAgYmFja3VwOiBnZW5lcmF0ZUJhY2t1cFFyRGF0YShjb2luLCBiYWNrdXBLZXljaGFpbiwge1xuICAgICAgYmFja3VwS2V5UHJvdmlkZXIsXG4gICAgICBiYWNrdXBNYXN0ZXJLZXksXG4gICAgfSksXG4gICAgYmFja3VwTWFzdGVyUHVibGljS2V5OiBiYWNrdXBNYXN0ZXJQdWJsaWNLZXlcbiAgICAgID8gZ2VuZXJhdGVCYWNrdXBNYXN0ZXJQdWJsaWNLZXlRUkRhdGEoYmFja3VwTWFzdGVyUHVibGljS2V5KVxuICAgICAgOiB1bmRlZmluZWQsXG4gICAgYml0Z286IGdlbmVyYXRlQml0R29RckRhdGEoYml0Z29LZXljaGFpbiksXG4gIH07XG5cbiAgaWYgKHBhc3NwaHJhc2UgJiYgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZSkge1xuICAgIGNvbnN0IGVuY3J5cHRlZFdhbGxldFBhc3Njb2RlID0gZW5jcnlwdChwYXNzY29kZUVuY3J5cHRpb25Db2RlLCBwYXNzcGhyYXNlKTtcblxuICAgIHFyRGF0YS5wYXNzY29kZSA9IHtcbiAgICAgIHRpdGxlOiAnRDogRW5jcnlwdGVkIHdhbGxldCBQYXNzd29yZCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIHdhbGxldCBwYXNzd29yZCwgZW5jcnlwdGVkIGNsaWVudC1zaWRlIHdpdGggYSBrZXkgaGVsZCBieSBCaXRHby4nLFxuICAgICAgZGF0YTogZW5jcnlwdGVkV2FsbGV0UGFzc2NvZGUsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBxckRhdGE7XG59XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { GenerateKeycardParams } from './types';
|
|
2
|
+
export * from './drawKeycard';
|
|
3
|
+
export * from './faq';
|
|
4
|
+
export * from './generateQrData';
|
|
5
|
+
export * from './utils';
|
|
6
|
+
export * from './types';
|
|
7
|
+
export declare function generateKeycard(params: GenerateKeycardParams): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEhD,cAAc,eAAe,CAAC;AAC9B,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AAExB,wBAAsB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAclF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.generateKeycard = void 0;
|
|
14
|
+
const generateQrData_1 = require("./generateQrData");
|
|
15
|
+
const faq_1 = require("./faq");
|
|
16
|
+
const drawKeycard_1 = require("./drawKeycard");
|
|
17
|
+
const generateParamsForKeyCreation_1 = require("./generateParamsForKeyCreation");
|
|
18
|
+
__exportStar(require("./drawKeycard"), exports);
|
|
19
|
+
__exportStar(require("./faq"), exports);
|
|
20
|
+
__exportStar(require("./generateQrData"), exports);
|
|
21
|
+
__exportStar(require("./utils"), exports);
|
|
22
|
+
__exportStar(require("./types"), exports);
|
|
23
|
+
async function generateKeycard(params) {
|
|
24
|
+
let keycard;
|
|
25
|
+
if ('coin' in params) {
|
|
26
|
+
const questions = faq_1.generateFaq(params.coin.fullName);
|
|
27
|
+
const qrData = generateQrData_1.generateQrData(params);
|
|
28
|
+
keycard = await drawKeycard_1.drawKeycard({ ...params, questions, qrData });
|
|
29
|
+
}
|
|
30
|
+
else if ('curve' in params) {
|
|
31
|
+
const data = generateParamsForKeyCreation_1.generateParamsForKeyCreation(params);
|
|
32
|
+
keycard = await drawKeycard_1.drawKeycard(data);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
throw new Error('Either curve or coin must be provided');
|
|
36
|
+
}
|
|
37
|
+
// Save the PDF on the user's browser
|
|
38
|
+
keycard.save(`BitGo Keycard for ${params.walletLabel}.pdf`);
|
|
39
|
+
}
|
|
40
|
+
exports.generateKeycard = generateKeycard;
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUVBLHFEQUFrRDtBQUNsRCwrQkFBb0M7QUFDcEMsK0NBQTRDO0FBQzVDLGlGQUE4RTtBQUc5RSxnREFBOEI7QUFDOUIsd0NBQXNCO0FBQ3RCLG1EQUFpQztBQUNqQywwQ0FBd0I7QUFDeEIsMENBQXdCO0FBRWpCLEtBQUssVUFBVSxlQUFlLENBQUMsTUFBNkI7SUFDakUsSUFBSSxPQUFjLENBQUM7SUFDbkIsSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFO1FBQ3BCLE1BQU0sU0FBUyxHQUFHLGlCQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxNQUFNLE1BQU0sR0FBRywrQkFBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sR0FBRyxNQUFNLHlCQUFXLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztLQUMvRDtTQUFNLElBQUksT0FBTyxJQUFJLE1BQU0sRUFBRTtRQUM1QixNQUFNLElBQUksR0FBRywyREFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxPQUFPLEdBQUcsTUFBTSx5QkFBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ25DO1NBQU07UUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7S0FDMUQ7SUFDRCxxQ0FBcUM7SUFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsTUFBTSxDQUFDLFdBQVcsTUFBTSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQWRELDBDQWNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcblxuaW1wb3J0IHsgZ2VuZXJhdGVRckRhdGEgfSBmcm9tICcuL2dlbmVyYXRlUXJEYXRhJztcbmltcG9ydCB7IGdlbmVyYXRlRmFxIH0gZnJvbSAnLi9mYXEnO1xuaW1wb3J0IHsgZHJhd0tleWNhcmQgfSBmcm9tICcuL2RyYXdLZXljYXJkJztcbmltcG9ydCB7IGdlbmVyYXRlUGFyYW1zRm9yS2V5Q3JlYXRpb24gfSBmcm9tICcuL2dlbmVyYXRlUGFyYW1zRm9yS2V5Q3JlYXRpb24nO1xuaW1wb3J0IHsgR2VuZXJhdGVLZXljYXJkUGFyYW1zIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZHJhd0tleWNhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9mYXEnO1xuZXhwb3J0ICogZnJvbSAnLi9nZW5lcmF0ZVFyRGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVLZXljYXJkKHBhcmFtczogR2VuZXJhdGVLZXljYXJkUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBrZXljYXJkOiBqc1BERjtcbiAgaWYgKCdjb2luJyBpbiBwYXJhbXMpIHtcbiAgICBjb25zdCBxdWVzdGlvbnMgPSBnZW5lcmF0ZUZhcShwYXJhbXMuY29pbi5mdWxsTmFtZSk7XG4gICAgY29uc3QgcXJEYXRhID0gZ2VuZXJhdGVRckRhdGEocGFyYW1zKTtcbiAgICBrZXljYXJkID0gYXdhaXQgZHJhd0tleWNhcmQoeyAuLi5wYXJhbXMsIHF1ZXN0aW9ucywgcXJEYXRhIH0pO1xuICB9IGVsc2UgaWYgKCdjdXJ2ZScgaW4gcGFyYW1zKSB7XG4gICAgY29uc3QgZGF0YSA9IGdlbmVyYXRlUGFyYW1zRm9yS2V5Q3JlYXRpb24ocGFyYW1zKTtcbiAgICBrZXljYXJkID0gYXdhaXQgZHJhd0tleWNhcmQoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFaXRoZXIgY3VydmUgb3IgY29pbiBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gIH1cbiAgLy8gU2F2ZSB0aGUgUERGIG9uIHRoZSB1c2VyJ3MgYnJvd3NlclxuICBrZXljYXJkLnNhdmUoYEJpdEdvIEtleWNhcmQgZm9yICR7cGFyYW1zLndhbGxldExhYmVsfS5wZGZgKTtcbn1cbiJdfQ==
|