@bitgo-beta/key-card 0.0.1-beta.22 → 0.0.1-beta.2200
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 +352 -0
- 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 +4 -0
- package/dist/src/faq.d.ts.map +1 -0
- package/dist/src/faq.js +89 -0
- 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 +10 -0
- package/dist/src/generateQrData.d.ts.map +1 -0
- package/dist/src/generateQrData.js +250 -0
- package/dist/src/index.d.ts +19 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +83 -0
- package/dist/src/parseKeycard.d.ts +24 -0
- package/dist/src/parseKeycard.d.ts.map +1 -0
- package/dist/src/parseKeycard.js +164 -0
- package/dist/src/types.d.ts +81 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +15 -0
- package/dist/src/upgradeWalletEncryption.d.ts +27 -0
- package/dist/src/upgradeWalletEncryption.d.ts.map +1 -0
- package/dist/src/upgradeWalletEncryption.js +106 -0
- package/dist/src/utils.d.ts +2 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +16 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +11 -6
- package/.mocharc.js +0 -9
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"parseKeycard.d.ts","sourceRoot":"","sources":["../../src/parseKeycard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,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;AA0CF;;;;;;;;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,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseSafeKeycardBox = void 0;
|
|
4
|
+
exports.buildLinesFromPDFNodes = buildLinesFromPDFNodes;
|
|
5
|
+
exports.parseKeycardFromLines = parseKeycardFromLines;
|
|
6
|
+
var sdk_lib_safes_1 = require("@bitgo-beta/sdk-lib-safes");
|
|
7
|
+
Object.defineProperty(exports, "parseSafeKeycardBox", { enumerable: true, get: function () { return sdk_lib_safes_1.parseSafeKeycardBox; } });
|
|
8
|
+
const sectionHeaderRegex = /^([A-D])\s*[:.)-]\s*(.+?)\s*$/i;
|
|
9
|
+
const dataLineRegex = /^data\s*:\s*(.*)$/i;
|
|
10
|
+
const faqHeaderRegex = /^BitGo\s+KeyCard\s+FAQ$/i;
|
|
11
|
+
// PDF coordinate tolerance in points. Nodes within this distance on the Y-axis
|
|
12
|
+
// are treated as belonging to the same line; nodes further apart are separate lines.
|
|
13
|
+
const PDF_LINE_Y_TOLERANCE = 2;
|
|
14
|
+
// Horizontal gap in points above which a space is inserted between adjacent nodes.
|
|
15
|
+
const PDF_NODE_GAP_THRESHOLD = 2;
|
|
16
|
+
function sanitizeText(input) {
|
|
17
|
+
return input.replace(/\s+/g, ' ').trim();
|
|
18
|
+
}
|
|
19
|
+
function normalizeSectionValue(rawValue) {
|
|
20
|
+
// Two-pass removal of "Part N" page-continuation labels:
|
|
21
|
+
// 1. Line filter: removes labels that appear as standalone lines.
|
|
22
|
+
// 2. Regex replace: removes labels embedded mid-line when
|
|
23
|
+
// buildLinesFromPDFNodes merges them with adjacent content at the same
|
|
24
|
+
// y-coordinate (e.g. "...X88bPart 2 lFPMd...").
|
|
25
|
+
// join('') intentionally uses no separator — section values are continuous
|
|
26
|
+
// strings (base64 / xpub) that wrap across PDF lines without spaces.
|
|
27
|
+
return rawValue
|
|
28
|
+
.split('\n')
|
|
29
|
+
.filter((line) => !/^Part\s+\d+$/i.test(line.trim()))
|
|
30
|
+
.join('')
|
|
31
|
+
.replace(/\s*Part\s+\d+\s*/gi, '')
|
|
32
|
+
.trim();
|
|
33
|
+
}
|
|
34
|
+
function countChar(input, char) {
|
|
35
|
+
return input.split(char).length - 1;
|
|
36
|
+
}
|
|
37
|
+
function isEncryptedWalletPasswordSectionTitle(title) {
|
|
38
|
+
const normalized = title.toLowerCase();
|
|
39
|
+
// Box D is titled "Encrypted Wallet Password" (wallet) or "Encrypted Safe Password" (safe).
|
|
40
|
+
return normalized.includes('encrypted wallet password') || normalized.includes('encrypted safe password');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Reconstructs logical text lines from an unordered set of PDF text nodes.
|
|
44
|
+
*
|
|
45
|
+
* PDF text extraction returns individual positioned fragments. This function
|
|
46
|
+
* sorts them by page then Y-coordinate (top-to-bottom), groups fragments
|
|
47
|
+
* within PDF_LINE_Y_TOLERANCE points of each other onto the same line, and
|
|
48
|
+
* inserts a space between fragments that are separated by more than
|
|
49
|
+
* PDF_NODE_GAP_THRESHOLD points horizontally.
|
|
50
|
+
*/
|
|
51
|
+
function buildLinesFromPDFNodes(nodes) {
|
|
52
|
+
const sortedNodes = [...nodes].sort((a, b) => {
|
|
53
|
+
if (a.page !== b.page) {
|
|
54
|
+
return a.page - b.page;
|
|
55
|
+
}
|
|
56
|
+
const yDiff = Math.abs(a.y - b.y);
|
|
57
|
+
if (yDiff > PDF_LINE_Y_TOLERANCE) {
|
|
58
|
+
return b.y - a.y;
|
|
59
|
+
}
|
|
60
|
+
return a.x - b.x;
|
|
61
|
+
});
|
|
62
|
+
const lines = [];
|
|
63
|
+
let currentLineNodes = [];
|
|
64
|
+
let currentPage = -1;
|
|
65
|
+
let currentY = Number.NaN;
|
|
66
|
+
function flushLine() {
|
|
67
|
+
if (currentLineNodes.length === 0) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const sortedLineNodes = [...currentLineNodes].sort((a, b) => a.x - b.x);
|
|
71
|
+
let line = '';
|
|
72
|
+
let previousRightEdge = null;
|
|
73
|
+
for (const node of sortedLineNodes) {
|
|
74
|
+
const piece = sanitizeText(node.text);
|
|
75
|
+
if (!piece) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (previousRightEdge !== null && node.x - previousRightEdge > PDF_NODE_GAP_THRESHOLD) {
|
|
79
|
+
line += ' ';
|
|
80
|
+
}
|
|
81
|
+
line += piece;
|
|
82
|
+
previousRightEdge = node.x + node.width;
|
|
83
|
+
}
|
|
84
|
+
const normalizedLine = line.trim();
|
|
85
|
+
if (normalizedLine) {
|
|
86
|
+
lines.push(normalizedLine);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
for (const node of sortedNodes) {
|
|
90
|
+
const pageChanged = node.page !== currentPage;
|
|
91
|
+
const lineChanged = Number.isNaN(currentY) || Math.abs(node.y - currentY) > PDF_LINE_Y_TOLERANCE;
|
|
92
|
+
if (pageChanged || lineChanged) {
|
|
93
|
+
flushLine();
|
|
94
|
+
currentLineNodes = [node];
|
|
95
|
+
currentPage = node.page;
|
|
96
|
+
currentY = node.y;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
currentLineNodes.push(node);
|
|
100
|
+
}
|
|
101
|
+
flushLine();
|
|
102
|
+
return lines;
|
|
103
|
+
}
|
|
104
|
+
function parseKeycardFromLines(lines) {
|
|
105
|
+
const sections = [];
|
|
106
|
+
let currentSectionIndex = -1;
|
|
107
|
+
for (const line of lines) {
|
|
108
|
+
const labelMatch = line.match(sectionHeaderRegex);
|
|
109
|
+
if (labelMatch) {
|
|
110
|
+
const section = labelMatch[1]?.toUpperCase();
|
|
111
|
+
const title = sanitizeText(labelMatch[2] ?? '');
|
|
112
|
+
if (section && title) {
|
|
113
|
+
sections.push({
|
|
114
|
+
section,
|
|
115
|
+
title,
|
|
116
|
+
values: [],
|
|
117
|
+
isCapturingData: false,
|
|
118
|
+
openCurlyCount: 0,
|
|
119
|
+
});
|
|
120
|
+
currentSectionIndex = sections.length - 1;
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (currentSectionIndex < 0) {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
const currentSection = sections[currentSectionIndex];
|
|
128
|
+
if (!currentSection) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const dataLineMatch = line.match(dataLineRegex);
|
|
132
|
+
if (dataLineMatch) {
|
|
133
|
+
currentSection.isCapturingData = true;
|
|
134
|
+
const inlineValue = sanitizeText(dataLineMatch[1] ?? '');
|
|
135
|
+
if (inlineValue) {
|
|
136
|
+
currentSection.values.push(inlineValue);
|
|
137
|
+
currentSection.openCurlyCount += countChar(inlineValue, '{') - countChar(inlineValue, '}');
|
|
138
|
+
}
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (currentSection.isCapturingData) {
|
|
142
|
+
if (faqHeaderRegex.test(line)) {
|
|
143
|
+
currentSection.isCapturingData = false;
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
currentSection.values.push(line);
|
|
147
|
+
// For encrypted wallet password, data is a single JSON object. Stop as
|
|
148
|
+
// soon as the object closes so footer/FAQ content is not appended.
|
|
149
|
+
if (isEncryptedWalletPasswordSectionTitle(currentSection.title)) {
|
|
150
|
+
currentSection.openCurlyCount += countChar(line, '{') - countChar(line, '}');
|
|
151
|
+
if (currentSection.values.length > 0 && currentSection.openCurlyCount <= 0) {
|
|
152
|
+
currentSection.isCapturingData = false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return sections
|
|
158
|
+
.filter(({ section, values }) => ['A', 'B', 'C', 'D'].includes(section) && values.length > 0)
|
|
159
|
+
.map(({ section, title, values }) => ({
|
|
160
|
+
label: `${section}: ${title}`,
|
|
161
|
+
value: normalizeSectionValue(values.join('\n')),
|
|
162
|
+
}));
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VLZXljYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnNlS2V5Y2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFnRUEsd0RBNERDO0FBRUQsc0RBeUVDO0FBdk1ELDJEQUFnRTtBQUF2RCxvSEFBQSxtQkFBbUIsT0FBQTtBQWU1QixNQUFNLGtCQUFrQixHQUFHLGdDQUFnQyxDQUFDO0FBQzVELE1BQU0sYUFBYSxHQUFHLG9CQUFvQixDQUFDO0FBQzNDLE1BQU0sY0FBYyxHQUFHLDBCQUEwQixDQUFDO0FBRWxELCtFQUErRTtBQUMvRSxxRkFBcUY7QUFDckYsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFDL0IsbUZBQW1GO0FBQ25GLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0FBRWpDLFNBQVMsWUFBWSxDQUFDLEtBQWE7SUFDakMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzQyxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxRQUFnQjtJQUM3Qyx5REFBeUQ7SUFDekQsa0VBQWtFO0lBQ2xFLDBEQUEwRDtJQUMxRCwwRUFBMEU7SUFDMUUsbURBQW1EO0lBQ25ELDJFQUEyRTtJQUMzRSxxRUFBcUU7SUFDckUsT0FBTyxRQUFRO1NBQ1osS0FBSyxDQUFDLElBQUksQ0FBQztTQUNYLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3BELElBQUksQ0FBQyxFQUFFLENBQUM7U0FDUixPQUFPLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO1NBQ2pDLElBQUksRUFBRSxDQUFDO0FBQ1osQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQWEsRUFBRSxJQUFZO0lBQzVDLE9BQU8sS0FBSyxDQUFD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QUFjLENBQUMsY0FBYyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDN0UsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksY0FBYyxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDM0UsY0FBYyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQ3pDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFFBQVE7U0FDWixNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDNUYsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLEtBQUssRUFBRSxHQUFHLE9BQU8sS0FBSyxLQUFLLEVBQUU7UUFDN0IsS0FBSyxFQUFFLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDaEQsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgcGFyc2VTYWZlS2V5Y2FyZEJveCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItc2FmZXMnO1xuXG5leHBvcnQgdHlwZSBQREZUZXh0Tm9kZSA9IHtcbiAgdGV4dDogc3RyaW5nO1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgcGFnZTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgS2V5Y2FyZEVudHJ5ID0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufTtcblxuY29uc3Qgc2VjdGlvbkhlYWRlclJlZ2V4ID0gL14oW0EtRF0pXFxzKls6LiktXVxccyooLis/KVxccyokL2k7XG5jb25zdCBkYXRhTGluZVJlZ2V4ID0gL15kYXRhXFxzKjpcXHMqKC4qKSQvaTtcbmNvbnN0IGZhcUhlYWRlclJlZ2V4ID0gL15CaXRHb1xccytLZXlDYXJkXFxzK0ZBUSQvaTtcblxuLy8gUERGIGNvb3JkaW5hdGUgdG9sZXJhbmNlIGluIHBvaW50cy4gTm9kZXMgd2l0aGluIHRoaXMgZGlzdGFuY2Ugb24gdGhlIFktYXhpc1xuLy8gYXJlIHRyZWF0ZWQgYXMgYmVsb25naW5nIHRvIHRoZSBzYW1lIGxpbmU7IG5vZGVzIGZ1cnRoZXIgYXBhcnQgYXJlIHNlcGFyYXRlIGxpbmVzLlxuY29uc3QgUERGX0xJTkVfWV9UT0xFUkFOQ0UgPSAyO1xuLy8gSG9yaXpvbnRhbCBnYXAgaW4gcG9pbnRzIGFib3ZlIHdoaWNoIGEgc3BhY2UgaXMgaW5zZXJ0ZWQgYmV0d2VlbiBhZGphY2VudCBub2Rlcy5cbmNvbnN0IFBERl9OT0RFX0dBUF9USFJFU0hPTEQgPSAyO1xuXG5mdW5jdGlvbiBzYW5pdGl6ZVRleHQoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTZWN0aW9uVmFsdWUocmF3VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFR3by1wYXNzIHJlbW92YWwgb2YgXCJQYXJ0IE5cIiBwYWdlLWNvbnRpbnVhdGlvbiBsYWJlbHM6XG4gIC8vIDEuIExpbmUgZmlsdGVyOiByZW1vdmVzIGxhYmVscyB0aGF0IGFwcGVhciBhcyBzdGFuZGFsb25lIGxpbmVzLlxuICAvLyAyLiBSZWdleCByZXBsYWNlOiByZW1vdmVzIGxhYmVscyBlbWJlZGRlZCBtaWQtbGluZSB3aGVuXG4gIC8vICAgIGJ1aWxkTGluZXNGcm9tUERGTm9kZXMgbWVyZ2VzIHRoZW0gd2l0aCBhZGphY2VudCBjb250ZW50IGF0IHRoZSBzYW1lXG4gIC8vICAgIHktY29vcmRpbmF0ZSAoZS5nLiBcIi4uLlg4OGJQYXJ0IDIgbEZQTWQuLi5cIikuXG4gIC8vIGpvaW4oJycpIGludGVudGlvbmFsbHkgdXNlcyBubyBzZXBhcmF0b3Ig4oCUIHNlY3Rpb24gdmFsdWVzIGFyZSBjb250aW51b3VzXG4gIC8vIHN0cmluZ3MgKGJhc2U2NCAvIHhwdWIpIHRoYXQgd3JhcCBhY3Jvc3MgUERGIGxpbmVzIHdpdGhvdXQgc3BhY2VzLlxuICByZXR1cm4gcmF3VmFsdWVcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLmZpbHRlcigobGluZSkgPT4gIS9eUGFydFxccytcXGQrJC9pLnRlc3QobGluZS50cmltKCkpKVxuICAgIC5qb2luKCcnKVxuICAgIC5yZXBsYWNlKC9cXHMqUGFydFxccytcXGQrXFxzKi9naSwgJycpXG4gICAgLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gY291bnRDaGFyKGlucHV0OiBzdHJpbmcsIGNoYXI6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBpbnB1dC5zcGxpdChjaGFyKS5sZW5ndGggLSAxO1xufVxuXG5mdW5jdGlvbiBpc0VuY3J5cHRlZFdhbGxldFBhc3N3b3JkU2VjdGlvblRpdGxlKHRpdGxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHRpdGxlLnRvTG93ZXJDYXNlKCk7XG4gIC8vIEJveCBEIGlzIHRpdGxlZCBcIkVuY3J5cHRlZCBXYWxsZXQgUGFzc3dvcmRcIiAod2FsbGV0KSBvciBcIkVuY3J5cHRlZCBTYWZlIFBhc3N3b3JkXCIgKHNhZmUpLlxuICByZXR1cm4gbm9ybWFsaXplZC5pbmNsdWRlcygnZW5jcnlwdGVkIHdhbGxldCBwYXNzd29yZCcpIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2VuY3J5cHRlZCBzYWZlIHBhc3N3b3JkJyk7XG59XG5cbi8qKlxuICogUmVjb25zdHJ1Y3RzIGxvZ2ljYWwgdGV4dCBsaW5lcyBmcm9tIGFuIHVub3JkZXJlZCBzZXQgb2YgUERGIHRleHQgbm9kZXMuXG4gKlxuICogUERGIHRleHQgZXh0cmFjdGlvbiByZXR1cm5zIGluZGl2aWR1YWwgcG9zaXRpb25lZCBmcmFnbWVudHMuIFRoaXMgZnVuY3Rpb25cbiAqIHNvcnRzIHRoZW0gYnkgcGFnZSB0aGVuIFktY29vcmRpbmF0ZSAodG9wLXRvLWJvdHRvbSksIGdyb3VwcyBmcmFnbWVudHNcbiAqIHdpdGhpbiBQREZfTElORV9ZX1RPTEVSQU5DRSBwb2ludHMgb2YgZWFjaCBvdGhlciBvbnRvIHRoZSBzYW1lIGxpbmUsIGFuZFxuICogaW5zZXJ0cyBhIHNwYWNlIGJldHdlZW4gZnJhZ21lbnRzIHRoYXQgYXJlIHNlcGFyYXRlZCBieSBtb3JlIHRoYW5cbiAqIFBERl9OT0RFX0dBUF9USFJFU0hPTEQgcG9pbnRzIGhvcml6b250YWxseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTGluZXNGcm9tUERGTm9kZXMobm9kZXM6IFBERlRleHROb2RlW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHNvcnRlZE5vZGVzID0gWy4uLm5vZGVzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKGEucGFnZSAhPT0gYi5wYWdlKSB7XG4gICAgICByZXR1cm4gYS5wYWdlIC0gYi5wYWdlO1xuICAgIH1cbiAgICBjb25zdCB5RGlmZiA9IE1hdGguYWJzKGEueSAtIGIueSk7XG4gICAgaWYgKHlEaWZmID4gUERGX0xJTkVfWV9UT0xFUkFOQ0UpIHtcbiAgICAgIHJldHVybiBiLnkgLSBhLnk7XG4gICAgfVxuICAgIHJldHVybiBhLnggLSBiLng7XG4gIH0pO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgY3VycmVudExpbmVOb2RlczogUERGVGV4dE5vZGVbXSA9IFtdO1xuICBsZXQgY3VycmVudFBhZ2UgPSAtMTtcbiAgbGV0IGN1cnJlbnRZID0gTnVtYmVyLk5hTjtcblxuICBmdW5jdGlvbiBmbHVzaExpbmUoKSB7XG4gICAgaWYgKGN1cnJlbnRMaW5lTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydGVkTGluZU5vZGVzID0gWy4uLmN1cnJlbnRMaW5lTm9kZXNdLnNvcnQoKGEsIGIpID0+IGEueCAtIGIueCk7XG4gICAgbGV0IGxpbmUgPSAnJztcbiAgICBsZXQgcHJldmlvdXNSaWdodEVkZ2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBzb3J0ZWRMaW5lTm9kZXMpIHtcbiAgICAgIGNvbnN0IHBpZWNlID0gc2FuaXRpemVUZXh0KG5vZGUudGV4dCk7XG4gICAgICBpZiAoIXBpZWNlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJldmlvdXNSaWdodEVkZ2UgIT09IG51bGwgJiYgbm9kZS54IC0gcHJldmlvdXNSaWdodEVkZ2UgPiBQREZfTk9ERV9HQVBfVEhSRVNIT0xEKSB7XG4gICAgICAgIGxpbmUgKz0gJyAnO1xuICAgICAgfVxuICAgICAgbGluZSArPSBwaWVjZTtcbiAgICAgIHByZXZpb3VzUmlnaHRFZGdlID0gbm9kZS54ICsgbm9kZS53aWR0aDtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkTGluZSA9IGxpbmUudHJpbSgpO1xuICAgIGlmIChub3JtYWxpemVkTGluZSkge1xuICAgICAgbGluZXMucHVzaChub3JtYWxpemVkTGluZSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBub2RlIG9mIHNvcnRlZE5vZGVzKSB7XG4gICAgY29uc3QgcGFnZUNoYW5nZWQgPSBub2RlLnBhZ2UgIT09IGN1cnJlbnRQYWdlO1xuICAgIGNvbnN0IGxpbmVDaGFuZ2VkID0gTnVtYmVyLmlzTmFOKGN1cnJlbnRZKSB8fCBNYXRoLmFicyhub2RlLnkgLSBjdXJyZW50WSkgPiBQREZfTElORV9ZX1RPTEVSQU5DRTtcbiAgICBpZiAocGFnZUNoYW5nZWQgfHwgbGluZUNoYW5nZWQpIHtcbiAgICAgIGZsdXNoTGluZSgpO1xuICAgICAgY3VycmVudExpbmVOb2RlcyA9IFtub2RlXTtcbiAgICAgIGN1cnJlbnRQYWdlID0gbm9kZS5wYWdlO1xuICAgICAgY3VycmVudFkgPSBub2RlLnk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjdXJyZW50TGluZU5vZGVzLnB1c2gobm9kZSk7XG4gIH1cblxuICBmbHVzaExpbmUoKTtcbiAgcmV0dXJuIGxpbmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VLZXljYXJkRnJvbUxpbmVzKGxpbmVzOiBzdHJpbmdbXSk6IEtleWNhcmRFbnRyeVtdIHtcbiAgY29uc3Qgc2VjdGlvbnM6IEFycmF5PHtcbiAgICBzZWN0aW9uOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICB2YWx1ZXM6IHN0cmluZ1tdO1xuICAgIGlzQ2FwdHVyaW5nRGF0YTogYm9vbGVhbjtcbiAgICBvcGVuQ3VybHlDb3VudDogbnVtYmVyO1xuICB9PiA9IFtdO1xuICBsZXQgY3VycmVudFNlY3Rpb25JbmRleCA9IC0xO1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGNvbnN0IGxhYmVsTWF0Y2ggPSBsaW5lLm1hdGNoKHNlY3Rpb25IZWFkZXJSZWdleCk7XG4gICAgaWYgKGxhYmVsTWF0Y2gpIHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSBsYWJlbE1hdGNoWzFdPy50b1VwcGVyQ2FzZSgpO1xuICAgICAgY29uc3QgdGl0bGUgPSBzYW5pdGl6ZVRleHQobGFiZWxNYXRjaFsyXSA/PyAnJyk7XG4gICAgICBpZiAoc2VjdGlvbiAmJiB0aXRsZSkge1xuICAgICAgICBzZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICBzZWN0aW9uLFxuICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgIHZhbHVlczogW10sXG4gICAgICAgICAgaXNDYXB0dXJpbmdEYXRhOiBmYWxzZSxcbiAgICAgICAgICBvcGVuQ3VybHlDb3VudDogMCxcbiAgICAgICAgfSk7XG4gICAgICAgIGN1cnJlbnRTZWN0aW9uSW5kZXggPSBzZWN0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFNlY3Rpb25JbmRleCA8IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRTZWN0aW9uID0gc2VjdGlvbnNbY3VycmVudFNlY3Rpb25JbmRleF07XG4gICAgaWYgKCFjdXJyZW50U2VjdGlvbikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YUxpbmVNYXRjaCA9IGxpbmUubWF0Y2goZGF0YUxpbmVSZWdleCk7XG4gICAgaWYgKGRhdGFMaW5lTWF0Y2gpIHtcbiAgICAgIGN1cnJlbnRTZWN0aW9uLmlzQ2FwdHVyaW5nRGF0YSA9IHRydWU7XG4gICAgICBjb25zdCBpbmxpbmVWYWx1ZSA9IHNhbml0aXplVGV4dChkYXRhTGluZU1hdGNoWzFdID8/ICcnKTtcbiAgICAgIGlmIChpbmxpbmVWYWx1ZSkge1xuICAgICAgICBjdXJyZW50U2VjdGlvbi52YWx1ZXMucHVzaChpbmxpbmVWYWx1ZSk7XG4gICAgICAgIGN1cnJlbnRTZWN0aW9uLm9wZW5DdXJseUNvdW50ICs9IGNvdW50Q2hhcihpbmxpbmVWYWx1ZSwgJ3snKSAtIGNvdW50Q2hhcihpbmxpbmVWYWx1ZSwgJ30nKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50U2VjdGlvbi5pc0NhcHR1cmluZ0RhdGEpIHtcbiAgICAgIGlmIChmYXFIZWFkZXJSZWdleC50ZXN0KGxpbmUpKSB7XG4gICAgICAgIGN1cnJlbnRTZWN0aW9uLmlzQ2FwdHVyaW5nRGF0YSA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudFNlY3Rpb24udmFsdWVzLnB1c2gobGluZSk7XG5cbiAgICAgIC8vIEZvciBlbmNyeXB0ZWQgd2FsbGV0IHBhc3N3b3JkLCBkYXRhIGlzIGEgc2luZ2xlIEpTT04gb2JqZWN0LiBTdG9wIGFzXG4gICAgICAvLyBzb29uIGFzIHRoZSBvYmplY3QgY2xvc2VzIHNvIGZvb3Rlci9GQVEgY29udGVudCBpcyBub3QgYXBwZW5kZWQuXG4gICAgICBpZiAoaXNFbmNyeXB0ZWRXYWxsZXRQYXNzd29yZFNlY3Rpb25UaXRsZShjdXJyZW50U2VjdGlvbi50aXRsZSkpIHtcbiAgICAgICAgY3VycmVudFNlY3Rpb24ub3BlbkN1cmx5Q291bnQgKz0gY291bnRDaGFyKGxpbmUsICd7JykgLSBjb3VudENoYXIobGluZSwgJ30nKTtcbiAgICAgICAgaWYgKGN1cnJlbnRTZWN0aW9uLnZhbHVlcy5sZW5ndGggPiAwICYmIGN1cnJlbnRTZWN0aW9uLm9wZW5DdXJseUNvdW50IDw9IDApIHtcbiAgICAgICAgICBjdXJyZW50U2VjdGlvbi5pc0NhcHR1cmluZ0RhdGEgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWN0aW9uc1xuICAgIC5maWx0ZXIoKHsgc2VjdGlvbiwgdmFsdWVzIH0pID0+IFsnQScsICdCJywgJ0MnLCAnRCddLmluY2x1ZGVzKHNlY3Rpb24pICYmIHZhbHVlcy5sZW5ndGggPiAwKVxuICAgIC5tYXAoKHsgc2VjdGlvbiwgdGl0bGUsIHZhbHVlcyB9KSA9PiAoe1xuICAgICAgbGFiZWw6IGAke3NlY3Rpb259OiAke3RpdGxlfWAsXG4gICAgICB2YWx1ZTogbm9ybWFsaXplU2VjdGlvblZhbHVlKHZhbHVlcy5qb2luKCdcXG4nKSksXG4gICAgfSkpO1xufVxuIl19
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { EncryptionVersion, Keychain, KeychainsTriplet } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin, KeyCurve } from '@bitgo-beta/statics';
|
|
3
|
+
import type { SafeKeycardRoots, SafeRootKeyType } from '@bitgo-beta/sdk-lib-safes';
|
|
4
|
+
export type { SafeKeycardRoots, SafeRootKeyType };
|
|
5
|
+
export interface GenerateQrDataBaseParams {
|
|
6
|
+
activationCode?: string;
|
|
7
|
+
keyCardImage?: HTMLImageElement;
|
|
8
|
+
walletLabel: string;
|
|
9
|
+
}
|
|
10
|
+
export interface GenerateQrDataForKeychainParams {
|
|
11
|
+
bitgoKeychain: Keychain;
|
|
12
|
+
curve: KeyCurve;
|
|
13
|
+
}
|
|
14
|
+
export interface GenerateQrDataCoinParams {
|
|
15
|
+
coin: Readonly<BaseCoin>;
|
|
16
|
+
passcodeEncryptionCode?: string;
|
|
17
|
+
passphrase?: string;
|
|
18
|
+
/** @deprecated Ignored because Box D uses a high-entropy key. */
|
|
19
|
+
encryptionVersion?: EncryptionVersion;
|
|
20
|
+
}
|
|
21
|
+
export interface GenerateQrDataParams extends GenerateQrDataCoinParams {
|
|
22
|
+
backupKeychain: Keychain;
|
|
23
|
+
backupKeyProvider?: string;
|
|
24
|
+
backupMasterKey?: string;
|
|
25
|
+
/**
|
|
26
|
+
* @description The key used to derive the backup key using {@link backupMasterKey} as the seed.
|
|
27
|
+
*/
|
|
28
|
+
backupMasterPublicKey?: string;
|
|
29
|
+
bitgoKeychain: Keychain;
|
|
30
|
+
userKeychain: Keychain;
|
|
31
|
+
userMasterKey?: string;
|
|
32
|
+
/**
|
|
33
|
+
* @description The key used to derive the user key using {@link userMasterKey} as the seed.
|
|
34
|
+
*/
|
|
35
|
+
userMasterPublicKey?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface GenerateLightningQrDataParams extends GenerateQrDataCoinParams {
|
|
38
|
+
userAuthKeychain: Keychain;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Fixed render/scan order of the four roots on the safe keycard. Kept stable so a
|
|
42
|
+
* generated keycard and a re-scanned one line up slot-for-slot.
|
|
43
|
+
*/
|
|
44
|
+
export declare const SAFE_ROOT_ORDER: SafeRootKeyType[];
|
|
45
|
+
/** The product a keycard belongs to, used for user-facing wording (e.g. Box D copy). */
|
|
46
|
+
export type KeycardEntity = 'wallet' | 'safe';
|
|
47
|
+
export interface GenerateSafeQrDataParams extends GenerateQrDataCoinParams {
|
|
48
|
+
roots: Record<SafeRootKeyType, KeychainsTriplet>;
|
|
49
|
+
}
|
|
50
|
+
export type GenerateKeycardParams = GenerateQrDataBaseParams & (GenerateQrDataForKeychainParams | GenerateQrDataParams | GenerateLightningQrDataParams);
|
|
51
|
+
export interface IDrawKeyCard {
|
|
52
|
+
activationCode?: string;
|
|
53
|
+
keyCardImage?: HTMLImageElement;
|
|
54
|
+
qrData: QrData;
|
|
55
|
+
questions: FAQ[];
|
|
56
|
+
walletLabel?: string;
|
|
57
|
+
curve?: KeyCurve;
|
|
58
|
+
pageBreakBeforeIndices?: number[];
|
|
59
|
+
useQrPartHeaders?: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface FAQ {
|
|
62
|
+
question: string;
|
|
63
|
+
answer: string[];
|
|
64
|
+
}
|
|
65
|
+
export interface QrDataEntry {
|
|
66
|
+
data: string;
|
|
67
|
+
description: string;
|
|
68
|
+
title: string;
|
|
69
|
+
publicMasterKey?: string;
|
|
70
|
+
}
|
|
71
|
+
export type MasterPublicKeyQrDataEntry = Omit<QrDataEntry, 'publicMasterKey'>;
|
|
72
|
+
export interface QrData {
|
|
73
|
+
backup?: QrDataEntry;
|
|
74
|
+
backupMasterPublicKey?: MasterPublicKeyQrDataEntry;
|
|
75
|
+
bitgo?: QrDataEntry;
|
|
76
|
+
passcode?: QrDataEntry;
|
|
77
|
+
curve?: KeyCurve;
|
|
78
|
+
user: QrDataEntry;
|
|
79
|
+
userMasterPublicKey?: MasterPublicKeyQrDataEntry;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SAFE_ROOT_ORDER = void 0;
|
|
4
|
+
const slotsInRenderOrder = {
|
|
5
|
+
secp256k1Multisig: true,
|
|
6
|
+
ecdsaMpc: true,
|
|
7
|
+
eddsaMpc: true,
|
|
8
|
+
ed25519Multisig: true,
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Fixed render/scan order of the four roots on the safe keycard. Kept stable so a
|
|
12
|
+
* generated keycard and a re-scanned one line up slot-for-slot.
|
|
13
|
+
*/
|
|
14
|
+
exports.SAFE_ROOT_ORDER = Object.keys(slotsInRenderOrder);
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBK0RBLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixRQUFRLEVBQUUsSUFBSTtJQUNkLFFBQVEsRUFBRSxJQUFJO0lBQ2QsZUFBZSxFQUFFLElBQUk7Q0FDa0IsQ0FBQztBQUUxQzs7O0dBR0c7QUFDVSxRQUFBLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW5jcnlwdGlvblZlcnNpb24sIEtleWNoYWluLCBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4sIEtleUN1cnZlIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgdHlwZSB7IFNhZmVLZXljYXJkUm9vdHMsIFNhZmVSb290S2V5VHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItc2FmZXMnO1xuXG4vLyBNb3ZlZCB0byBzZGstbGliLXNhZmVzOyByZS1leHBvcnRlZCBzbyBleGlzdGluZyBpbXBvcnRzIGZyb20gQGJpdGdvLWJldGEva2V5LWNhcmQga2VlcCB3b3JraW5nLlxuZXhwb3J0IHR5cGUgeyBTYWZlS2V5Y2FyZFJvb3RzLCBTYWZlUm9vdEtleVR5cGUgfTtcblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZVFyRGF0YUJhc2VQYXJhbXMge1xuICBhY3RpdmF0aW9uQ29kZT86IHN0cmluZztcbiAga2V5Q2FyZEltYWdlPzogSFRNTEltYWdlRWxlbWVudDtcbiAgd2FsbGV0TGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZVFyRGF0YUZvcktleWNoYWluUGFyYW1zIHtcbiAgLy8gVGhlIEJpdEdvIGtleWNoYWluIGFzIGl0IGlzIHJldHVybmVkIGZyb20gdGhlIEJpdEdvIEFQSSB1cG9uIGNyZWF0aW9uXG4gIGJpdGdvS2V5Y2hhaW46IEtleWNoYWluO1xuICAvLyBUaGUgY3VydmUgdXNlZCBmb3IgdGhlIGtleVxuICBjdXJ2ZTogS2V5Q3VydmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVRckRhdGFDb2luUGFyYW1zIHtcbiAgLy8gVGhlIGNvaW4gb2YgdGhlIHdhbGxldCB0aGF0IHdhcy8gaXMgYWJvdXQgdG8gYmUgY3JlYXRlZFxuICBjb2luOiBSZWFkb25seTxCYXNlQ29pbj47XG4gIC8vIEEgY29kZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGVuY3J5cHQgdGhlIHdhbGxldCBwYXNzd29yZCB0by5cbiAgLy8gSWYgYm90aCB0aGUgcGFzc3BocmFzZSBhbmQgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZSBhcmUgcGFzc2VkLCB0aGVuIHRoaXMgY29kZSBlbmNyeXB0cyB0aGUgcGFzc3BocmFzZSB3aXRoIHRoZVxuICAvLyBwYXNzY29kZUVuY3J5cHRpb25Db2RlIGFuZCBwdXRzIHRoZSByZXN1bHQgaW50byBCb3ggRC4gQWxsb3dzIHJlY292ZXJpZXMgb2YgdGhlIHdhbGxldCBwYXNzd29yZC5cbiAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgLy8gVGhlIHdhbGxldCBwYXNzd29yZFxuICAvLyBJZiBib3RoIHRoZSBwYXNzcGhyYXNlIGFuZCBwYXNzY29kZUVuY3J5cHRpb25Db2RlIGFyZSBwYXNzZWQsIHRoZW4gdGhpcyBjb2RlIGVuY3J5cHRzIHRoZSBwYXNzcGhyYXNlIHdpdGggdGhlXG4gIC8vIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGUgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbnRvIEJveCBELiBBbGxvd3MgcmVjb3ZlcmllcyBvZiB0aGUgd2FsbGV0IHBhc3N3b3JkLlxuICBwYXNzcGhyYXNlPzogc3RyaW5nO1xuICAvKiogQGRlcHJlY2F0ZWQgSWdub3JlZCBiZWNhdXNlIEJveCBEIHVzZXMgYSBoaWdoLWVudHJvcHkga2V5LiAqL1xuICBlbmNyeXB0aW9uVmVyc2lvbj86IEVuY3J5cHRpb25WZXJzaW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlUXJEYXRhUGFyYW1zIGV4dGVuZHMgR2VuZXJhdGVRckRhdGFDb2luUGFyYW1zIHtcbiAgLy8gVGhlIGJhY2t1cCBrZXljaGFpbiBhcyBpdCBpcyByZXR1cm5lZCBmcm9tIHRoZSBCaXRHbyBBUEkgdXBvbiBjcmVhdGlvblxuICBiYWNrdXBLZXljaGFpbjogS2V5Y2hhaW47XG4gIC8vIFRoZSBuYW1lIG9mIHRoZSAzcmQgcGFydHkgcHJvdmlkZXIgb2YgdGhlIGJhY2t1cCBrZXkgaWYgbmVpdGhlciB0aGUgdXNlciBub3IgQml0R28gc3RvcmVzIGl0XG4gIGJhY2t1cEtleVByb3ZpZGVyPzogc3RyaW5nO1xuICAvLyBUaGUga2V5IGlkIG9mIHRoZSBiYWNrdXAga2V5LCBvbmx5IHVzZWQgZm9yIGNvbGQga2V5c1xuICBiYWNrdXBNYXN0ZXJLZXk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGtleSB1c2VkIHRvIGRlcml2ZSB0aGUgYmFja3VwIGtleSB1c2luZyB7QGxpbmsgYmFja3VwTWFzdGVyS2V5fSBhcyB0aGUgc2VlZC5cbiAgICovXG4gIGJhY2t1cE1hc3RlclB1YmxpY0tleT86IHN0cmluZztcbiAgLy8gVGhlIEJpdEdvIGtleWNoYWluIGFzIGl0IGlzIHJldHVybmVkIGZyb20gdGhlIEJpdEdvIEFQSSB1cG9uIGNyZWF0aW9uXG4gIGJpdGdvS2V5Y2hhaW46IEtleWNoYWluO1xuICAvLyBUaGUgdXNlciBrZXljaGFpbiBhcyBpdCBpcyByZXR1cm5lZCBmcm9tIHRoZSBCaXRHbyBBUEkgdXBvbiBjcmVhdGlvblxuICB1c2VyS2V5Y2hhaW46IEtleWNoYWluO1xuICAvLyBUaGUga2V5IGlkIG9mIHRoZSB1c2VyIGtleSwgb25seSB1c2VkIGZvciBjb2xkIGtleXNcbiAgdXNlck1hc3RlcktleT86IHN0cmluZztcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUga2V5IHVzZWQgdG8gZGVyaXZlIHRoZSB1c2VyIGtleSB1c2luZyB7QGxpbmsgdXNlck1hc3RlcktleX0gYXMgdGhlIHNlZWQuXG4gICAqL1xuICB1c2VyTWFzdGVyUHVibGljS2V5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlTGlnaHRuaW5nUXJEYXRhUGFyYW1zIGV4dGVuZHMgR2VuZXJhdGVRckRhdGFDb2luUGFyYW1zIHtcbiAgLy8gVGhlIHVzZXIgYXV0aGVudGljYXRpb24ga2V5Y2hhaW4sIHVzZWQgdG8gc2lnbiBwYXltZW50IHJlcXVlc3RzIGFuZCB3YWxsZXQgY29uZmlndXJhdGlvbiB1cGRhdGVzXG4gIHVzZXJBdXRoS2V5Y2hhaW46IEtleWNoYWluO1xufVxuXG5jb25zdCBzbG90c0luUmVuZGVyT3JkZXIgPSB7XG4gIHNlY3AyNTZrMU11bHRpc2lnOiB0cnVlLFxuICBlY2RzYU1wYzogdHJ1ZSxcbiAgZWRkc2FNcGM6IHRydWUsXG4gIGVkMjU1MTlNdWx0aXNpZzogdHJ1ZSxcbn0gc2F0aXNmaWVzIFJlY29yZDxTYWZlUm9vdEtleVR5cGUsIHRydWU+O1xuXG4vKipcbiAqIEZpeGVkIHJlbmRlci9zY2FuIG9yZGVyIG9mIHRoZSBmb3VyIHJvb3RzIG9uIHRoZSBzYWZlIGtleWNhcmQuIEtlcHQgc3RhYmxlIHNvIGFcbiAqIGdlbmVyYXRlZCBrZXljYXJkIGFuZCBhIHJlLXNjYW5uZWQgb25lIGxpbmUgdXAgc2xvdC1mb3Itc2xvdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNBRkVfUk9PVF9PUkRFUiA9IE9iamVjdC5rZXlzKHNsb3RzSW5SZW5kZXJPcmRlcikgYXMgU2FmZVJvb3RLZXlUeXBlW107XG5cbi8qKiBUaGUgcHJvZHVjdCBhIGtleWNhcmQgYmVsb25ncyB0bywgdXNlZCBmb3IgdXNlci1mYWNpbmcgd29yZGluZyAoZS5nLiBCb3ggRCBjb3B5KS4gKi9cbmV4cG9ydCB0eXBlIEtleWNhcmRFbnRpdHkgPSAnd2FsbGV0JyB8ICdzYWZlJztcblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZVNhZmVRckRhdGFQYXJhbXMgZXh0ZW5kcyBHZW5lcmF0ZVFyRGF0YUNvaW5QYXJhbXMge1xuICAvLyBUaGUgZm91ciByb290IHRyaXBsZXRzICh1c2VyL2JhY2t1cC9iaXRnbyBrZXljaGFpbnMpLCBrZXllZCBieSByb290S2V5VHlwZS5cbiAgcm9vdHM6IFJlY29yZDxTYWZlUm9vdEtleVR5cGUsIEtleWNoYWluc1RyaXBsZXQ+O1xufVxuXG5leHBvcnQgdHlwZSBHZW5lcmF0ZUtleWNhcmRQYXJhbXMgPSBHZW5lcmF0ZVFyRGF0YUJhc2VQYXJhbXMgJlxuICAoR2VuZXJhdGVRckRhdGFGb3JLZXljaGFpblBhcmFtcyB8IEdlbmVyYXRlUXJEYXRhUGFyYW1zIHwgR2VuZXJhdGVMaWdodG5pbmdRckRhdGFQYXJhbXMpO1xuXG5leHBvcnQgaW50ZXJmYWNlIElEcmF3S2V5Q2FyZCB7XG4gIGFjdGl2YXRpb25Db2RlPzogc3RyaW5nO1xuICBrZXlDYXJkSW1hZ2U/OiBIVE1MSW1hZ2VFbGVtZW50O1xuICBxckRhdGE6IFFyRGF0YTtcbiAgcXVlc3Rpb25zOiBGQVFbXTtcbiAgd2FsbGV0TGFiZWw/OiBzdHJpbmc7XG4gIGN1cnZlPzogS2V5Q3VydmU7XG4gIC8vIEJveCBpbmRpY2VzIHRvIHN0YXJ0IGEgbmV3IHBhZ2UgYmVmb3JlLiBPbWl0IGZvciB0aGUgZGVmYXVsdCB3YWxsZXQgbGF5b3V0LlxuICBwYWdlQnJlYWtCZWZvcmVJbmRpY2VzPzogbnVtYmVyW107XG4gIC8vIFdoZW4gdHJ1ZSwgYSBzcGxpdCBrZXkncyBRUiBmcmFnbWVudHMgYXJlIHByZWZpeGVkIHdpdGggYSBcIjxpbmRleD4vPHRvdGFsPnxcIiBwYXJ0IGhlYWRlclxuICAvLyBzbyBhIHNjYW5uZXIgY2FuIHJlYXNzZW1ibGUgdGhlbS4gT3B0LWluICh1c2VkIGJ5IHRoZSBzYWZlIGtleWNhcmQpOyBvbWl0IHRvIGxlYXZlIFFSXG4gIC8vIHBheWxvYWRzIGFzIHJhdyBmcmFnbWVudHMsIGtlZXBpbmcgdGhlIHdhbGxldCBrZXljYXJkIG91dHB1dCB1bmNoYW5nZWQuXG4gIHVzZVFyUGFydEhlYWRlcnM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZBUSB7XG4gIHF1ZXN0aW9uOiBzdHJpbmc7XG4gIC8vIHRoZSBhbnN3ZXIgdG8gdGhlIHF1ZXN0aW9uLCBhbHJlYWR5IHNwbGl0IGludG8gaW5kaXZpZHVhbCBsaW5lcyBvZiB0ZXh0XG4gIGFuc3dlcjogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXJEYXRhRW50cnkge1xuICBkYXRhOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHB1YmxpY01hc3RlcktleT86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgTWFzdGVyUHVibGljS2V5UXJEYXRhRW50cnkgPSBPbWl0PFFyRGF0YUVudHJ5LCAncHVibGljTWFzdGVyS2V5Jz47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXJEYXRhIHtcbiAgYmFja3VwPzogUXJEYXRhRW50cnk7XG4gIGJhY2t1cE1hc3RlclB1YmxpY0tleT86IE1hc3RlclB1YmxpY0tleVFyRGF0YUVudHJ5O1xuICBiaXRnbz86IFFyRGF0YUVudHJ5O1xuICBwYXNzY29kZT86IFFyRGF0YUVudHJ5O1xuICBjdXJ2ZT86IEtleUN1cnZlO1xuICB1c2VyOiBRckRhdGFFbnRyeTtcbiAgdXNlck1hc3RlclB1YmxpY0tleT86IE1hc3RlclB1YmxpY0tleVFyRGF0YUVudHJ5O1xufVxuIl19
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PDF-generation helpers for the wallet encryption upgrade flow.
|
|
3
|
+
*
|
|
4
|
+
* Orchestration (unlocking the session, re-encrypting keychains, PUT-ing to the server) lives on
|
|
5
|
+
* `Wallet.upgradeEncryption` in `@bitgo-beta/sdk-core`. This module contains only the pieces that
|
|
6
|
+
* depend on `jspdf`/`qrcode` — a factory that returns a `UpgradeEncryptionPdfGenerator` the
|
|
7
|
+
* caller can pass into that method, plus a Node-side coin-logo loader.
|
|
8
|
+
*/
|
|
9
|
+
import * as https from 'https';
|
|
10
|
+
import { UpgradeEncryptionPdfGenerator } from '@bitgo-beta/sdk-core';
|
|
11
|
+
/**
|
|
12
|
+
* Fetch a coin logo image and return an HTMLImageElement-compatible object.
|
|
13
|
+
* jsPDF reads `.src` in Node.js; computeKeyCardImageDimensions reads `.width`/`.height`.
|
|
14
|
+
* Returns undefined on any failure — the keycard is generated without the logo in that case.
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadKeycardImage(url: string, httpGet?: typeof https.get): Promise<HTMLImageElement | undefined>;
|
|
17
|
+
export interface KeycardPdfGeneratorOptions {
|
|
18
|
+
/** Base URL for loading the coin logo (e.g. Environments[env].uri). Omit to skip the logo. */
|
|
19
|
+
imageBaseUrl?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build a {@link UpgradeEncryptionPdfGenerator} that regenerates the keycard PDF with the
|
|
23
|
+
* canonical `generateQrData` + `drawKeycard` flow. Pass the returned function into
|
|
24
|
+
* `Wallet.upgradeEncryption({ generatePdf })`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function createKeycardPdfGenerator(options?: KeycardPdfGeneratorOptions): UpgradeEncryptionPdfGenerator;
|
|
27
|
+
//# sourceMappingURL=upgradeWalletEncryption.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgradeWalletEncryption.d.ts","sourceRoot":"","sources":["../../src/upgradeWalletEncryption.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAKrE;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,OAAO,KAAK,CAAC,GAAe,GACpC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAyBvC;AAED,MAAM,WAAW,0BAA0B;IACzC,8FAA8F;IAC9F,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,0BAA+B,GAAG,6BAA6B,CA0BjH"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PDF-generation helpers for the wallet encryption upgrade flow.
|
|
4
|
+
*
|
|
5
|
+
* Orchestration (unlocking the session, re-encrypting keychains, PUT-ing to the server) lives on
|
|
6
|
+
* `Wallet.upgradeEncryption` in `@bitgo-beta/sdk-core`. This module contains only the pieces that
|
|
7
|
+
* depend on `jspdf`/`qrcode` — a factory that returns a `UpgradeEncryptionPdfGenerator` the
|
|
8
|
+
* caller can pass into that method, plus a Node-side coin-logo loader.
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.loadKeycardImage = loadKeycardImage;
|
|
45
|
+
exports.createKeycardPdfGenerator = createKeycardPdfGenerator;
|
|
46
|
+
const https = __importStar(require("https"));
|
|
47
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
48
|
+
const generateQrData_1 = require("./generateQrData");
|
|
49
|
+
const faq_1 = require("./faq");
|
|
50
|
+
const drawKeycard_1 = require("./drawKeycard");
|
|
51
|
+
/**
|
|
52
|
+
* Fetch a coin logo image and return an HTMLImageElement-compatible object.
|
|
53
|
+
* jsPDF reads `.src` in Node.js; computeKeyCardImageDimensions reads `.width`/`.height`.
|
|
54
|
+
* Returns undefined on any failure — the keycard is generated without the logo in that case.
|
|
55
|
+
*/
|
|
56
|
+
async function loadKeycardImage(url, httpGet = https.get) {
|
|
57
|
+
return new Promise((resolve) => {
|
|
58
|
+
httpGet(url, (res) => {
|
|
59
|
+
if (res.statusCode !== 200) {
|
|
60
|
+
console.warn(`Warning: coin logo not loaded (HTTP ${res.statusCode}) — keycard will be generated without it`);
|
|
61
|
+
resolve(undefined);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const chunks = [];
|
|
65
|
+
res.on('data', (chunk) => chunks.push(chunk));
|
|
66
|
+
res.on('end', () => {
|
|
67
|
+
const contentType = res.headers['content-type'] ?? 'image/png';
|
|
68
|
+
const dataUrl = `data:${contentType};base64,${Buffer.concat(chunks).toString('base64')}`;
|
|
69
|
+
const img = { src: dataUrl, width: 303, height: 40 };
|
|
70
|
+
resolve(img);
|
|
71
|
+
});
|
|
72
|
+
res.on('error', (err) => {
|
|
73
|
+
console.warn(`Warning: coin logo not loaded (${err.message}) — keycard will be generated without it`);
|
|
74
|
+
resolve(undefined);
|
|
75
|
+
});
|
|
76
|
+
}).on('error', (err) => {
|
|
77
|
+
console.warn(`Warning: coin logo not loaded (${err.message}) — keycard will be generated without it`);
|
|
78
|
+
resolve(undefined);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Build a {@link UpgradeEncryptionPdfGenerator} that regenerates the keycard PDF with the
|
|
84
|
+
* canonical `generateQrData` + `drawKeycard` flow. Pass the returned function into
|
|
85
|
+
* `Wallet.upgradeEncryption({ generatePdf })`.
|
|
86
|
+
*/
|
|
87
|
+
function createKeycardPdfGenerator(options = {}) {
|
|
88
|
+
const { imageBaseUrl } = options;
|
|
89
|
+
return async ({ coinName, userKeychain, backupKeychain, bitgoKeychain, passphrase, passcodeEncryptionCode, walletLabel, }) => {
|
|
90
|
+
const staticsCoin = statics_1.coins.get(coinName);
|
|
91
|
+
const keyCardImage = imageBaseUrl
|
|
92
|
+
? await loadKeycardImage(`${imageBaseUrl}/web/assets/keycards/${staticsCoin.family.toLowerCase()}.png`)
|
|
93
|
+
: undefined;
|
|
94
|
+
const qrData = await (0, generateQrData_1.generateQrData)({
|
|
95
|
+
coin: staticsCoin,
|
|
96
|
+
userKeychain,
|
|
97
|
+
backupKeychain,
|
|
98
|
+
bitgoKeychain,
|
|
99
|
+
passphrase,
|
|
100
|
+
passcodeEncryptionCode,
|
|
101
|
+
});
|
|
102
|
+
const questions = (0, faq_1.generateFaq)(staticsCoin.fullName);
|
|
103
|
+
return (0, drawKeycard_1.drawKeycard)({ qrData, questions, walletLabel, keyCardImage });
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZVdhbGxldEVuY3J5cHRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXBncmFkZVdhbGxldEVuY3J5cHRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBY0gsNENBNEJDO0FBWUQsOERBMEJDO0FBOUVELDZDQUErQjtBQUMvQixpREFBc0Q7QUFFdEQscURBQWtEO0FBQ2xELCtCQUFvQztBQUNwQywrQ0FBNEM7QUFFNUM7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsR0FBVyxFQUNYLFVBQTRCLEtBQUssQ0FBQyxHQUFHO0lBRXJDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUM3QixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxHQUFHLENBQUMsVUFBVSwwQ0FBMEMsQ0FBQyxDQUFDO2dCQUM5RyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ25CLE9BQU87WUFDVCxDQUFDO1lBQ0QsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1lBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNqQixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLFdBQVcsQ0FBQztnQkFDL0QsTUFBTSxPQUFPLEdBQUcsUUFBUSxXQUFXLFdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDekYsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBaUMsQ0FBQztnQkFDcEYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFDSCxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLENBQUMsT0FBTywwQ0FBMEMsQ0FBQyxDQUFDO2dCQUN0RyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxDQUFDLE9BQU8sMENBQTBDLENBQUMsQ0FBQztZQUN0RyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFPRDs7OztHQUlHO0FBQ0gsU0FBZ0IseUJBQXlCLENBQUMsVUFBc0MsRUFBRTtJQUNoRixNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ2pDLE9BQU8sS0FBSyxFQUFFLEVBQ1osUUFBUSxFQUNSLFlBQVksRUFDWixjQUFjLEVBQ2QsYUFBYSxFQUNiLFVBQVUsRUFDVixzQkFBc0IsRUFDdEIsV0FBVyxHQUNaLEVBQUUsRUFBRTtRQUNILE1BQU0sV0FBVyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFhLENBQUM7UUFDcEQsTUFBTSxZQUFZLEdBQUcsWUFBWTtZQUMvQixDQUFDLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxHQUFHLFlBQVksd0JBQXdCLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztZQUN2RyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLCtCQUFjLEVBQUM7WUFDbEMsSUFBSSxFQUFFLFdBQVc7WUFDakIsWUFBWTtZQUNaLGNBQWM7WUFDZCxhQUFhO1lBQ2IsVUFBVTtZQUNWLHNCQUFzQjtTQUN2QixDQUFDLENBQUM7UUFDSCxNQUFNLFNBQVMsR0FBRyxJQUFBLGlCQUFXLEVBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sSUFBQSx5QkFBVyxFQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQREYtZ2VuZXJhdGlvbiBoZWxwZXJzIGZvciB0aGUgd2FsbGV0IGVuY3J5cHRpb24gdXBncmFkZSBmbG93LlxuICpcbiAqIE9yY2hlc3RyYXRpb24gKHVubG9ja2luZyB0aGUgc2Vzc2lvbiwgcmUtZW5jcnlwdGluZyBrZXljaGFpbnMsIFBVVC1pbmcgdG8gdGhlIHNlcnZlcikgbGl2ZXMgb25cbiAqIGBXYWxsZXQudXBncmFkZUVuY3J5cHRpb25gIGluIGBAYml0Z28tYmV0YS9zZGstY29yZWAuIFRoaXMgbW9kdWxlIGNvbnRhaW5zIG9ubHkgdGhlIHBpZWNlcyB0aGF0XG4gKiBkZXBlbmQgb24gYGpzcGRmYC9gcXJjb2RlYCDigJQgYSBmYWN0b3J5IHRoYXQgcmV0dXJucyBhIGBVcGdyYWRlRW5jcnlwdGlvblBkZkdlbmVyYXRvcmAgdGhlXG4gKiBjYWxsZXIgY2FuIHBhc3MgaW50byB0aGF0IG1ldGhvZCwgcGx1cyBhIE5vZGUtc2lkZSBjb2luLWxvZ28gbG9hZGVyLlxuICovXG5cbmltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ2h0dHBzJztcbmltcG9ydCB7IEJhc2VDb2luLCBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVXBncmFkZUVuY3J5cHRpb25QZGZHZW5lcmF0b3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBnZW5lcmF0ZVFyRGF0YSB9IGZyb20gJy4vZ2VuZXJhdGVRckRhdGEnO1xuaW1wb3J0IHsgZ2VuZXJhdGVGYXEgfSBmcm9tICcuL2ZhcSc7XG5pbXBvcnQgeyBkcmF3S2V5Y2FyZCB9IGZyb20gJy4vZHJhd0tleWNhcmQnO1xuXG4vKipcbiAqIEZldGNoIGEgY29pbiBsb2dvIGltYWdlIGFuZCByZXR1cm4gYW4gSFRNTEltYWdlRWxlbWVudC1jb21wYXRpYmxlIG9iamVjdC5cbiAqIGpzUERGIHJlYWRzIGAuc3JjYCBpbiBOb2RlLmpzOyBjb21wdXRlS2V5Q2FyZEltYWdlRGltZW5zaW9ucyByZWFkcyBgLndpZHRoYC9gLmhlaWdodGAuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBvbiBhbnkgZmFpbHVyZSDigJQgdGhlIGtleWNhcmQgaXMgZ2VuZXJhdGVkIHdpdGhvdXQgdGhlIGxvZ28gaW4gdGhhdCBjYXNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEtleWNhcmRJbWFnZShcbiAgdXJsOiBzdHJpbmcsXG4gIGh0dHBHZXQ6IHR5cGVvZiBodHRwcy5nZXQgPSBodHRwcy5nZXRcbik6IFByb21pc2U8SFRNTEltYWdlRWxlbWVudCB8IHVuZGVmaW5lZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBodHRwR2V0KHVybCwgKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiBjb2luIGxvZ28gbm90IGxvYWRlZCAoSFRUUCAke3Jlcy5zdGF0dXNDb2RlfSkg4oCUIGtleWNhcmQgd2lsbCBiZSBnZW5lcmF0ZWQgd2l0aG91dCBpdGApO1xuICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgICAgIHJlcy5vbignZGF0YScsIChjaHVuaykgPT4gY2h1bmtzLnB1c2goY2h1bmspKTtcbiAgICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA/PyAnaW1hZ2UvcG5nJztcbiAgICAgICAgY29uc3QgZGF0YVVybCA9IGBkYXRhOiR7Y29udGVudFR5cGV9O2Jhc2U2NCwke0J1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZygnYmFzZTY0Jyl9YDtcbiAgICAgICAgY29uc3QgaW1nID0geyBzcmM6IGRhdGFVcmwsIHdpZHRoOiAzMDMsIGhlaWdodDogNDAgfSBhcyB1bmtub3duIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgICAgIHJlc29sdmUoaW1nKTtcbiAgICAgIH0pO1xuICAgICAgcmVzLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiBjb2luIGxvZ28gbm90IGxvYWRlZCAoJHtlcnIubWVzc2FnZX0pIOKAlCBrZXljYXJkIHdpbGwgYmUgZ2VuZXJhdGVkIHdpdGhvdXQgaXRgKTtcbiAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgfSk7XG4gICAgfSkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiBjb2luIGxvZ28gbm90IGxvYWRlZCAoJHtlcnIubWVzc2FnZX0pIOKAlCBrZXljYXJkIHdpbGwgYmUgZ2VuZXJhdGVkIHdpdGhvdXQgaXRgKTtcbiAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2V5Y2FyZFBkZkdlbmVyYXRvck9wdGlvbnMge1xuICAvKiogQmFzZSBVUkwgZm9yIGxvYWRpbmcgdGhlIGNvaW4gbG9nbyAoZS5nLiBFbnZpcm9ubWVudHNbZW52XS51cmkpLiBPbWl0IHRvIHNraXAgdGhlIGxvZ28uICovXG4gIGltYWdlQmFzZVVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHtAbGluayBVcGdyYWRlRW5jcnlwdGlvblBkZkdlbmVyYXRvcn0gdGhhdCByZWdlbmVyYXRlcyB0aGUga2V5Y2FyZCBQREYgd2l0aCB0aGVcbiAqIGNhbm9uaWNhbCBgZ2VuZXJhdGVRckRhdGFgICsgYGRyYXdLZXljYXJkYCBmbG93LiBQYXNzIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBpbnRvXG4gKiBgV2FsbGV0LnVwZ3JhZGVFbmNyeXB0aW9uKHsgZ2VuZXJhdGVQZGYgfSlgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlS2V5Y2FyZFBkZkdlbmVyYXRvcihvcHRpb25zOiBLZXljYXJkUGRmR2VuZXJhdG9yT3B0aW9ucyA9IHt9KTogVXBncmFkZUVuY3J5cHRpb25QZGZHZW5lcmF0b3Ige1xuICBjb25zdCB7IGltYWdlQmFzZVVybCB9ID0gb3B0aW9ucztcbiAgcmV0dXJuIGFzeW5jICh7XG4gICAgY29pbk5hbWUsXG4gICAgdXNlcktleWNoYWluLFxuICAgIGJhY2t1cEtleWNoYWluLFxuICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZSxcbiAgICBwYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgIHdhbGxldExhYmVsLFxuICB9KSA9PiB7XG4gICAgY29uc3Qgc3RhdGljc0NvaW4gPSBjb2lucy5nZXQoY29pbk5hbWUpIGFzIEJhc2VDb2luO1xuICAgIGNvbnN0IGtleUNhcmRJbWFnZSA9IGltYWdlQmFzZVVybFxuICAgICAgPyBhd2FpdCBsb2FkS2V5Y2FyZEltYWdlKGAke2ltYWdlQmFzZVVybH0vd2ViL2Fzc2V0cy9rZXljYXJkcy8ke3N0YXRpY3NDb2luLmZhbWlseS50b0xvd2VyQ2FzZSgpfS5wbmdgKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcXJEYXRhID0gYXdhaXQgZ2VuZXJhdGVRckRhdGEoe1xuICAgICAgY29pbjogc3RhdGljc0NvaW4sXG4gICAgICB1c2VyS2V5Y2hhaW4sXG4gICAgICBiYWNrdXBLZXljaGFpbixcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICBwYXNzcGhyYXNlLFxuICAgICAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICB9KTtcbiAgICBjb25zdCBxdWVzdGlvbnMgPSBnZW5lcmF0ZUZhcShzdGF0aWNzQ29pbi5mdWxsTmFtZSk7XG4gICAgcmV0dXJuIGRyYXdLZXljYXJkKHsgcXJEYXRhLCBxdWVzdGlvbnMsIHdhbGxldExhYmVsLCBrZXlDYXJkSW1hZ2UgfSk7XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAc9D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.splitKeys = splitKeys;
|
|
4
|
+
function splitKeys(key, limit) {
|
|
5
|
+
if (key.length <= limit) {
|
|
6
|
+
return [key];
|
|
7
|
+
}
|
|
8
|
+
const keys = [];
|
|
9
|
+
let rightIndex = limit;
|
|
10
|
+
for (let i = 0; i < key.length; i += limit) {
|
|
11
|
+
keys.push(key.substring(i, rightIndex));
|
|
12
|
+
rightIndex = Math.min(rightIndex + limit, key.length);
|
|
13
|
+
}
|
|
14
|
+
return keys;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw4QkFjQztBQWRELFNBQWdCLFNBQVMsQ0FBQyxHQUFXLEVBQUUsS0FBYTtJQUNsRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQztJQUUxQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN4QyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHNwbGl0S2V5cyhrZXk6IHN0cmluZywgbGltaXQ6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgaWYgKGtleS5sZW5ndGggPD0gbGltaXQpIHtcbiAgICByZXR1cm4gW2tleV07XG4gIH1cblxuICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGxldCByaWdodEluZGV4ID0gbGltaXQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSArPSBsaW1pdCkge1xuICAgIGtleXMucHVzaChrZXkuc3Vic3RyaW5nKGksIHJpZ2h0SW5kZXgpKTtcbiAgICByaWdodEluZGV4ID0gTWF0aC5taW4ocmlnaHRJbmRleCArIGxpbWl0LCBrZXkubGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuIl19
|