@bitgo-beta/key-card 0.0.1-beta.201 → 0.0.1-beta.2011

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.
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseVaultKeycardBox = parseVaultKeycardBox;
4
+ exports.buildLinesFromPDFNodes = buildLinesFromPDFNodes;
5
+ exports.parseKeycardFromLines = parseKeycardFromLines;
6
+ const types_1 = require("./types");
7
+ /**
8
+ * Parses a vault keycard box value — the JSON packed by `generateVaultQrData`, e.g.
9
+ * `{"secp256k1Multisig":"…","ecdsaMpc":"…",…}` — into its four roots. Validates that all four
10
+ * roots are present. Recovery tooling calls this on the A/B/C box value returned by
11
+ * {@link parseKeycardFromLines}, then decrypts each root value with the wallet password.
12
+ */
13
+ function parseVaultKeycardBox(data) {
14
+ let parsed;
15
+ try {
16
+ parsed = JSON.parse(data);
17
+ }
18
+ catch {
19
+ throw new Error('parseVaultKeycardBox: value is not valid JSON');
20
+ }
21
+ if (typeof parsed !== 'object' || parsed === null) {
22
+ throw new Error('parseVaultKeycardBox: value is not an object');
23
+ }
24
+ const roots = parsed;
25
+ for (const slot of types_1.VAULT_ROOT_ORDER) {
26
+ if (typeof roots[slot] !== 'string') {
27
+ throw new Error(`parseVaultKeycardBox: missing or invalid root ${slot}`);
28
+ }
29
+ }
30
+ return parsed;
31
+ }
32
+ const sectionHeaderRegex = /^([A-D])\s*[:.)-]\s*(.+?)\s*$/i;
33
+ const dataLineRegex = /^data\s*:\s*(.*)$/i;
34
+ const faqHeaderRegex = /^BitGo\s+KeyCard\s+FAQ$/i;
35
+ // PDF coordinate tolerance in points. Nodes within this distance on the Y-axis
36
+ // are treated as belonging to the same line; nodes further apart are separate lines.
37
+ const PDF_LINE_Y_TOLERANCE = 2;
38
+ // Horizontal gap in points above which a space is inserted between adjacent nodes.
39
+ const PDF_NODE_GAP_THRESHOLD = 2;
40
+ function sanitizeText(input) {
41
+ return input.replace(/\s+/g, ' ').trim();
42
+ }
43
+ function normalizeSectionValue(rawValue) {
44
+ // Two-pass removal of "Part N" page-continuation labels:
45
+ // 1. Line filter: removes labels that appear as standalone lines.
46
+ // 2. Regex replace: removes labels embedded mid-line when
47
+ // buildLinesFromPDFNodes merges them with adjacent content at the same
48
+ // y-coordinate (e.g. "...X88bPart 2 lFPMd...").
49
+ // join('') intentionally uses no separator — section values are continuous
50
+ // strings (base64 / xpub) that wrap across PDF lines without spaces.
51
+ return rawValue
52
+ .split('\n')
53
+ .filter((line) => !/^Part\s+\d+$/i.test(line.trim()))
54
+ .join('')
55
+ .replace(/\s*Part\s+\d+\s*/gi, '')
56
+ .trim();
57
+ }
58
+ function countChar(input, char) {
59
+ return input.split(char).length - 1;
60
+ }
61
+ function isEncryptedWalletPasswordSectionTitle(title) {
62
+ return title.toLowerCase().includes('encrypted wallet password');
63
+ }
64
+ /**
65
+ * Reconstructs logical text lines from an unordered set of PDF text nodes.
66
+ *
67
+ * PDF text extraction returns individual positioned fragments. This function
68
+ * sorts them by page then Y-coordinate (top-to-bottom), groups fragments
69
+ * within PDF_LINE_Y_TOLERANCE points of each other onto the same line, and
70
+ * inserts a space between fragments that are separated by more than
71
+ * PDF_NODE_GAP_THRESHOLD points horizontally.
72
+ */
73
+ function buildLinesFromPDFNodes(nodes) {
74
+ const sortedNodes = [...nodes].sort((a, b) => {
75
+ if (a.page !== b.page) {
76
+ return a.page - b.page;
77
+ }
78
+ const yDiff = Math.abs(a.y - b.y);
79
+ if (yDiff > PDF_LINE_Y_TOLERANCE) {
80
+ return b.y - a.y;
81
+ }
82
+ return a.x - b.x;
83
+ });
84
+ const lines = [];
85
+ let currentLineNodes = [];
86
+ let currentPage = -1;
87
+ let currentY = Number.NaN;
88
+ function flushLine() {
89
+ if (currentLineNodes.length === 0) {
90
+ return;
91
+ }
92
+ const sortedLineNodes = [...currentLineNodes].sort((a, b) => a.x - b.x);
93
+ let line = '';
94
+ let previousRightEdge = null;
95
+ for (const node of sortedLineNodes) {
96
+ const piece = sanitizeText(node.text);
97
+ if (!piece) {
98
+ continue;
99
+ }
100
+ if (previousRightEdge !== null && node.x - previousRightEdge > PDF_NODE_GAP_THRESHOLD) {
101
+ line += ' ';
102
+ }
103
+ line += piece;
104
+ previousRightEdge = node.x + node.width;
105
+ }
106
+ const normalizedLine = line.trim();
107
+ if (normalizedLine) {
108
+ lines.push(normalizedLine);
109
+ }
110
+ }
111
+ for (const node of sortedNodes) {
112
+ const pageChanged = node.page !== currentPage;
113
+ const lineChanged = Number.isNaN(currentY) || Math.abs(node.y - currentY) > PDF_LINE_Y_TOLERANCE;
114
+ if (pageChanged || lineChanged) {
115
+ flushLine();
116
+ currentLineNodes = [node];
117
+ currentPage = node.page;
118
+ currentY = node.y;
119
+ continue;
120
+ }
121
+ currentLineNodes.push(node);
122
+ }
123
+ flushLine();
124
+ return lines;
125
+ }
126
+ function parseKeycardFromLines(lines) {
127
+ const sections = [];
128
+ let currentSectionIndex = -1;
129
+ for (const line of lines) {
130
+ const labelMatch = line.match(sectionHeaderRegex);
131
+ if (labelMatch) {
132
+ const section = labelMatch[1]?.toUpperCase();
133
+ const title = sanitizeText(labelMatch[2] ?? '');
134
+ if (section && title) {
135
+ sections.push({
136
+ section,
137
+ title,
138
+ values: [],
139
+ isCapturingData: false,
140
+ openCurlyCount: 0,
141
+ });
142
+ currentSectionIndex = sections.length - 1;
143
+ continue;
144
+ }
145
+ }
146
+ if (currentSectionIndex < 0) {
147
+ continue;
148
+ }
149
+ const currentSection = sections[currentSectionIndex];
150
+ if (!currentSection) {
151
+ continue;
152
+ }
153
+ const dataLineMatch = line.match(dataLineRegex);
154
+ if (dataLineMatch) {
155
+ currentSection.isCapturingData = true;
156
+ const inlineValue = sanitizeText(dataLineMatch[1] ?? '');
157
+ if (inlineValue) {
158
+ currentSection.values.push(inlineValue);
159
+ currentSection.openCurlyCount += countChar(inlineValue, '{') - countChar(inlineValue, '}');
160
+ }
161
+ continue;
162
+ }
163
+ if (currentSection.isCapturingData) {
164
+ if (faqHeaderRegex.test(line)) {
165
+ currentSection.isCapturingData = false;
166
+ continue;
167
+ }
168
+ currentSection.values.push(line);
169
+ // For encrypted wallet password, data is a single JSON object. Stop as
170
+ // soon as the object closes so footer/FAQ content is not appended.
171
+ if (isEncryptedWalletPasswordSectionTitle(currentSection.title)) {
172
+ currentSection.openCurlyCount += countChar(line, '{') - countChar(line, '}');
173
+ if (currentSection.values.length > 0 && currentSection.openCurlyCount <= 0) {
174
+ currentSection.isCapturingData = false;
175
+ }
176
+ }
177
+ }
178
+ }
179
+ return sections
180
+ .filter(({ section, values }) => ['A', 'B', 'C', 'D'].includes(section) && values.length > 0)
181
+ .map(({ section, title, values }) => ({
182
+ label: `${section}: ${title}`,
183
+ value: normalizeSectionValue(values.join('\n')),
184
+ }));
185
+ }
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VLZXljYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnNlS2V5Y2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFCQSxvREFpQkM7QUFpREQsd0RBNERDO0FBRUQsc0RBeUVDO0FBOU5ELG1DQUE4RDtBQWU5RDs7Ozs7R0FLRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLElBQVk7SUFDL0MsSUFBSSxNQUFlLENBQUM7SUFDcEIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2xELE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBaUMsQ0FBQztJQUNoRCxLQUFLLE1BQU0sSUFBSSxJQUFJLHdCQUFnQixFQUFFLENBQUM7UUFDcEMsSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUEyQixDQUFDO0FBQ3JDLENBQUM7QUFFRCxNQUFNLGtCQUFrQixHQUFHLGdDQUFnQyxDQUFDO0FBQzVELE1BQU0sYUFBYSxHQUFHLG9CQUFvQixDQUFDO0FBQzNDLE1BQU0sY0FBYyxHQUFHLDBCQUEwQixDQUFDO0FBRWxELCtFQUErRTtBQUMvRSxxRkFBcUY7QUFDckYsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFDL0IsbUZBQW1G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U0FDNUYsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLEtBQUssRUFBRSxHQUFHLE9BQU8sS0FBSyxLQUFLLEVBQUU7UUFDN0IsS0FBSyxFQUFFLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDaEQsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmF1bHRLZXljYXJkUm9vdHMsIFZBVUxUX1JPT1RfT1JERVIgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgUERGVGV4dE5vZGUgPSB7XG4gIHRleHQ6IHN0cmluZztcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHBhZ2U6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEtleWNhcmRFbnRyeSA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn07XG5cbi8qKlxuICogUGFyc2VzIGEgdmF1bHQga2V5Y2FyZCBib3ggdmFsdWUg4oCUIHRoZSBKU09OIHBhY2tlZCBieSBgZ2VuZXJhdGVWYXVsdFFyRGF0YWAsIGUuZy5cbiAqIGB7XCJzZWNwMjU2azFNdWx0aXNpZ1wiOlwi4oCmXCIsXCJlY2RzYU1wY1wiOlwi4oCmXCIs4oCmfWAg4oCUIGludG8gaXRzIGZvdXIgcm9vdHMuIFZhbGlkYXRlcyB0aGF0IGFsbCBmb3VyXG4gKiByb290cyBhcmUgcHJlc2VudC4gUmVjb3ZlcnkgdG9vbGluZyBjYWxscyB0aGlzIG9uIHRoZSBBL0IvQyBib3ggdmFsdWUgcmV0dXJuZWQgYnlcbiAqIHtAbGluayBwYXJzZUtleWNhcmRGcm9tTGluZXN9LCB0aGVuIGRlY3J5cHRzIGVhY2ggcm9vdCB2YWx1ZSB3aXRoIHRoZSB3YWxsZXQgcGFzc3dvcmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZhdWx0S2V5Y2FyZEJveChkYXRhOiBzdHJpbmcpOiBWYXVsdEtleWNhcmRSb290cyB7XG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwYXJzZVZhdWx0S2V5Y2FyZEJveDogdmFsdWUgaXMgbm90IHZhbGlkIEpTT04nKTtcbiAgfVxuICBpZiAodHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgcGFyc2VkID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwYXJzZVZhdWx0S2V5Y2FyZEJveDogdmFsdWUgaXMgbm90IGFuIG9iamVjdCcpO1xuICB9XG4gIGNvbnN0IHJvb3RzID0gcGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmb3IgKGNvbnN0IHNsb3Qgb2YgVkFVTFRfUk9PVF9PUkRFUikge1xuICAgIGlmICh0eXBlb2Ygcm9vdHNbc2xvdF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHBhcnNlVmF1bHRLZXljYXJkQm94OiBtaXNzaW5nIG9yIGludmFsaWQgcm9vdCAke3Nsb3R9YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXJzZWQgYXMgVmF1bHRLZXljYXJkUm9vdHM7XG59XG5cbmNvbnN0IHNlY3Rpb25IZWFkZXJSZWdleCA9IC9eKFtBLURdKVxccypbOi4pLV1cXHMqKC4rPylcXHMqJC9pO1xuY29uc3QgZGF0YUxpbmVSZWdleCA9IC9eZGF0YVxccyo6XFxzKiguKikkL2k7XG5jb25zdCBmYXFIZWFkZXJSZWdleCA9IC9eQml0R29cXHMrS2V5Q2FyZFxccytGQVEkL2k7XG5cbi8vIFBERiBjb29yZGluYXRlIHRvbGVyYW5jZSBpbiBwb2ludHMuIE5vZGVzIHdpdGhpbiB0aGlzIGRpc3RhbmNlIG9uIHRoZSBZLWF4aXNcbi8vIGFyZSB0cmVhdGVkIGFzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBsaW5lOyBub2RlcyBmdXJ0aGVyIGFwYXJ0IGFyZSBzZXBhcmF0ZSBsaW5lcy5cbmNvbnN0IFBERl9MSU5FX1lfVE9MRVJBTkNFID0gMjtcbi8vIEhvcml6b250YWwgZ2FwIGluIHBvaW50cyBhYm92ZSB3aGljaCBhIHNwYWNlIGlzIGluc2VydGVkIGJldHdlZW4gYWRqYWNlbnQgbm9kZXMuXG5jb25zdCBQREZfTk9ERV9HQVBfVEhSRVNIT0xEID0gMjtcblxuZnVuY3Rpb24gc2FuaXRpemVUZXh0KGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU2VjdGlvblZhbHVlKHJhd1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBUd28tcGFzcyByZW1vdmFsIG9mIFwiUGFydCBOXCIgcGFnZS1jb250aW51YXRpb24gbGFiZWxzOlxuICAvLyAxLiBMaW5lIGZpbHRlcjogcmVtb3ZlcyBsYWJlbHMgdGhhdCBhcHBlYXIgYXMgc3RhbmRhbG9uZSBsaW5lcy5cbiAgLy8gMi4gUmVnZXggcmVwbGFjZTogcmVtb3ZlcyBsYWJlbHMgZW1iZWRkZWQgbWlkLWxpbmUgd2hlblxuICAvLyAgICBidWlsZExpbmVzRnJvbVBERk5vZGVzIG1lcmdlcyB0aGVtIHdpdGggYWRqYWNlbnQgY29udGVudCBhdCB0aGUgc2FtZVxuICAvLyAgICB5LWNvb3JkaW5hdGUgKGUuZy4gXCIuLi5YODhiUGFydCAyIGxGUE1kLi4uXCIpLlxuICAvLyBqb2luKCcnKSBpbnRlbnRpb25hbGx5IHVzZXMgbm8gc2VwYXJhdG9yIOKAlCBzZWN0aW9uIHZhbHVlcyBhcmUgY29udGludW91c1xuICAvLyBzdHJpbmdzIChiYXNlNjQgLyB4cHViKSB0aGF0IHdyYXAgYWNyb3NzIFBERiBsaW5lcyB3aXRob3V0IHNwYWNlcy5cbiAgcmV0dXJuIHJhd1ZhbHVlXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5maWx0ZXIoKGxpbmUpID0+ICEvXlBhcnRcXHMrXFxkKyQvaS50ZXN0KGxpbmUudHJpbSgpKSlcbiAgICAuam9pbignJylcbiAgICAucmVwbGFjZSgvXFxzKlBhcnRcXHMrXFxkK1xccyovZ2ksICcnKVxuICAgIC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGNvdW50Q2hhcihpbnB1dDogc3RyaW5nLCBjaGFyOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gaW5wdXQuc3BsaXQoY2hhcikubGVuZ3RoIC0gMTtcbn1cblxuZnVuY3Rpb24gaXNFbmNyeXB0ZWRXYWxsZXRQYXNzd29yZFNlY3Rpb25UaXRsZSh0aXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiB0aXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdlbmNyeXB0ZWQgd2FsbGV0IHBhc3N3b3JkJyk7XG59XG5cbi8qKlxuICogUmVjb25zdHJ1Y3RzIGxvZ2ljYWwgdGV4dCBsaW5lcyBmcm9tIGFuIHVub3JkZXJlZCBzZXQgb2YgUERGIHRleHQgbm9kZXMuXG4gKlxuICogUERGIHRleHQgZXh0cmFjdGlvbiByZXR1cm5zIGluZGl2aWR1YWwgcG9zaXRpb25lZCBmcmFnbWVudHMuIFRoaXMgZnVuY3Rpb25cbiAqIHNvcnRzIHRoZW0gYnkgcGFnZSB0aGVuIFktY29vcmRpbmF0ZSAodG9wLXRvLWJvdHRvbSksIGdyb3VwcyBmcmFnbWVudHNcbiAqIHdpdGhpbiBQREZfTElORV9ZX1RPTEVSQU5DRSBwb2ludHMgb2YgZWFjaCBvdGhlciBvbnRvIHRoZSBzYW1lIGxpbmUsIGFuZFxuICogaW5zZXJ0cyBhIHNwYWNlIGJldHdlZW4gZnJhZ21lbnRzIHRoYXQgYXJlIHNlcGFyYXRlZCBieSBtb3JlIHRoYW5cbiAqIFBERl9OT0RFX0dBUF9USFJFU0hPTEQgcG9pbnRzIGhvcml6b250YWxseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTGluZXNGcm9tUERGTm9kZXMobm9kZXM6IFBERlRleHROb2RlW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHNvcnRlZE5vZGVzID0gWy4uLm5vZGVzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKGEucGFnZSAhPT0gYi5wYWdlKSB7XG4gICAgICByZXR1cm4gYS5wYWdlIC0gYi5wYWdlO1xuICAgIH1cbiAgICBjb25zdCB5RGlmZiA9IE1hdGguYWJzKGEueSAtIGIueSk7XG4gICAgaWYgKHlEaWZmID4gUERGX0xJTkVfWV9UT0xFUkFOQ0UpIHtcbiAgICAgIHJldHVybiBiLnkgLSBhLnk7XG4gICAgfVxuICAgIHJldHVybiBhLnggLSBiLng7XG4gIH0pO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgY3VycmVudExpbmVOb2RlczogUERGVGV4dE5vZGVbXSA9IFtdO1xuICBsZXQgY3VycmVudFBhZ2UgPSAtMTtcbiAgbGV0IGN1cnJlbnRZID0gTnVtYmVyLk5hTjtcblxuICBmdW5jdGlvbiBmbHVzaExpbmUoKSB7XG4gICAgaWYgKGN1cnJlbnRMaW5lTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydGVkTGluZU5vZGVzID0gWy4uLmN1cnJlbnRMaW5lTm9kZXNdLnNvcnQoKGEsIGIpID0+IGEueCAtIGIueCk7XG4gICAgbGV0IGxpbmUgPSAnJztcbiAgICBsZXQgcHJldmlvdXNSaWdodEVkZ2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBzb3J0ZWRMaW5lTm9kZXMpIHtcbiAgICAgIGNvbnN0IHBpZWNlID0gc2FuaXRpemVUZXh0KG5vZGUudGV4dCk7XG4gICAgICBpZiAoIXBpZWNlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJldmlvdXNSaWdodEVkZ2UgIT09IG51bGwgJiYgbm9kZS54IC0gcHJldmlvdXNSaWdodEVkZ2UgPiBQREZfTk9ERV9HQVBfVEhSRVNIT0xEKSB7XG4gICAgICAgIGxpbmUgKz0gJyAnO1xuICAgICAgfVxuICAgICAgbGluZSArPSBwaWVjZTtcbiAgICAgIHByZXZpb3VzUmlnaHRFZGdlID0gbm9kZS54ICsgbm9kZS53aWR0aDtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkTGluZSA9IGxpbmUudHJpbSgpO1xuICAgIGlmIChub3JtYWxpemVkTGluZSkge1xuICAgICAgbGluZXMucHVzaChub3JtYWxpemVkTGluZSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBub2RlIG9mIHNvcnRlZE5vZGVzKSB7XG4gICAgY29uc3QgcGFnZUNoYW5nZWQgPSBub2RlLnBhZ2UgIT09IGN1cnJlbnRQYWdlO1xuICAgIGNvbnN0IGxpbmVDaGFuZ2VkID0gTnVtYmVyLmlzTmFOKGN1cnJlbnRZKSB8fCBNYXRoLmFicyhub2RlLnkgLSBjdXJyZW50WSkgPiBQREZfTElORV9ZX1RPTEVSQU5DRTtcbiAgICBpZiAocGFnZUNoYW5nZWQgfHwgbGluZUNoYW5nZWQpIHtcbiAgICAgIGZsdXNoTGluZSgpO1xuICAgICAgY3VycmVudExpbmVOb2RlcyA9IFtub2RlXTtcbiAgICAgIGN1cnJlbnRQYWdlID0gbm9kZS5wYWdlO1xuICAgICAgY3VycmVudFkgPSBub2RlLnk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjdXJyZW50TGluZU5vZGVzLnB1c2gobm9kZSk7XG4gIH1cblxuICBmbHVzaExpbmUoKTtcbiAgcmV0dXJuIGxpbmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VLZXljYXJkRnJvbUxpbmVzKGxpbmVzOiBzdHJpbmdbXSk6IEtleWNhcmRFbnRyeVtdIHtcbiAgY29uc3Qgc2VjdGlvbnM6IEFycmF5PHtcbiAgICBzZWN0aW9uOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICB2YWx1ZXM6IHN0cmluZ1tdO1xuICAgIGlzQ2FwdHVyaW5nRGF0YTogYm9vbGVhbjtcbiAgICBvcGVuQ3VybHlDb3VudDogbnVtYmVyO1xuICB9PiA9IFtdO1xuICBsZXQgY3VycmVudFNlY3Rpb25JbmRleCA9IC0xO1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGNvbnN0IGxhYmVsTWF0Y2ggPSBsaW5lLm1hdGNoKHNlY3Rpb25IZWFkZXJSZWdleCk7XG4gICAgaWYgKGxhYmVsTWF0Y2gpIHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSBsYWJlbE1hdGNoWzFdPy50b1VwcGVyQ2FzZSgpO1xuICAgICAgY29uc3QgdGl0bGUgPSBzYW5pdGl6ZVRleHQobGFiZWxNYXRjaFsyXSA/PyAnJyk7XG4gICAgICBpZiAoc2VjdGlvbiAmJiB0aXRsZSkge1xuICAgICAgICBzZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICBzZWN0aW9uLFxuICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgIHZhbHVlczogW10sXG4gICAgICAgICAgaXNDYXB0dXJpbmdEYXRhOiBmYWxzZSxcbiAgICAgICAgICBvcGVuQ3VybHlDb3VudDogMCxcbiAgICAgICAgfSk7XG4gICAgICAgIGN1cnJlbnRTZWN0aW9uSW5kZXggPSBzZWN0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFNlY3Rpb25JbmRleCA8IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRTZWN0aW9uID0gc2VjdGlvbnNbY3VycmVudFNlY3Rpb25JbmRleF07XG4gICAgaWYgKCFjdXJyZW50U2VjdGlvbikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YUxpbmVNYXRjaCA9IGxpbmUubWF0Y2goZGF0YUxpbmVSZWdleCk7XG4gICAgaWYgKGRhdGFMaW5lTWF0Y2gpIHtcbiAgICAgIGN1cnJlbnRTZWN0aW9uLmlzQ2FwdHVyaW5nRGF0YSA9IHRydWU7XG4gICAgICBjb25zdCBpbmxpbmVWYWx1ZSA9IHNhbml0aXplVGV4dChkYXRhTGluZU1hdGNoWzFdID8/ICcnKTtcbiAgICAgIGlmIChpbmxpbmVWYWx1ZSkge1xuICAgICAgICBjdXJyZW50U2VjdGlvbi52YWx1ZXMucHVzaChpbmxpbmVWYWx1ZSk7XG4gICAgICAgIGN1cnJlbnRTZWN0aW9uLm9wZW5DdXJseUNvdW50ICs9IGNvdW50Q2hhcihpbmxpbmVWYWx1ZSwgJ3snKSAtIGNvdW50Q2hhcihpbmxpbmVWYWx1ZSwgJ30nKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50U2VjdGlvbi5pc0NhcHR1cmluZ0RhdGEpIHtcbiAgICAgIGlmIChmYXFIZWFkZXJSZWdleC50ZXN0KGxpbmUpKSB7XG4gICAgICAgIGN1cnJlbnRTZWN0aW9uLmlzQ2FwdHVyaW5nRGF0YSA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudFNlY3Rpb24udmFsdWVzLnB1c2gobGluZSk7XG5cbiAgICAgIC8vIEZvciBlbmNyeXB0ZWQgd2FsbGV0IHBhc3N3b3JkLCBkYXRhIGlzIGEgc2luZ2xlIEpTT04gb2JqZWN0LiBTdG9wIGFzXG4gICAgICAvLyBzb29uIGFzIHRoZSBvYmplY3QgY2xvc2VzIHNvIGZvb3Rlci9GQVEgY29udGVudCBpcyBub3QgYXBwZW5kZWQuXG4gICAgICBpZiAoaXNFbmNyeXB0ZWRXYWxsZXRQYXNzd29yZFNlY3Rpb25UaXRsZShjdXJyZW50U2VjdGlvbi50aXRsZSkpIHtcbiAgICAgICAgY3VycmVudFNlY3Rpb24ub3BlbkN1cmx5Q291bnQgKz0gY291bnRDaGFyKGxpbmUsICd7JykgLSBjb3VudENoYXIobGluZSwgJ30nKTtcbiAgICAgICAgaWYgKGN1cnJlbnRTZWN0aW9uLnZhbHVlcy5sZW5ndGggPiAwICYmIGN1cnJlbnRTZWN0aW9uLm9wZW5DdXJseUNvdW50IDw9IDApIHtcbiAgICAgICAgICBjdXJyZW50U2VjdGlvbi5pc0NhcHR1cmluZ0RhdGEgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWN0aW9uc1xuICAgIC5maWx0ZXIoKHsgc2VjdGlvbiwgdmFsdWVzIH0pID0+IFsnQScsICdCJywgJ0MnLCAnRCddLmluY2x1ZGVzKHNlY3Rpb24pICYmIHZhbHVlcy5sZW5ndGggPiAwKVxuICAgIC5tYXAoKHsgc2VjdGlvbiwgdGl0bGUsIHZhbHVlcyB9KSA9PiAoe1xuICAgICAgbGFiZWw6IGAke3NlY3Rpb259OiAke3RpdGxlfWAsXG4gICAgICB2YWx1ZTogbm9ybWFsaXplU2VjdGlvblZhbHVlKHZhbHVlcy5qb2luKCdcXG4nKSksXG4gICAgfSkpO1xufVxuIl19
@@ -0,0 +1,87 @@
1
+ import { EncryptionVersion, Keychain, KeychainsTriplet } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin, KeyCurve } from '@bitgo-beta/statics';
3
+ export interface GenerateQrDataBaseParams {
4
+ activationCode?: string;
5
+ keyCardImage?: HTMLImageElement;
6
+ walletLabel: string;
7
+ }
8
+ export interface GenerateQrDataForKeychainParams {
9
+ bitgoKeychain: Keychain;
10
+ curve: KeyCurve;
11
+ }
12
+ export interface GenerateQrDataCoinParams {
13
+ coin: Readonly<BaseCoin>;
14
+ passcodeEncryptionCode?: string;
15
+ passphrase?: string;
16
+ encryptionVersion?: EncryptionVersion;
17
+ }
18
+ export interface GenerateQrDataParams extends GenerateQrDataCoinParams {
19
+ backupKeychain: Keychain;
20
+ backupKeyProvider?: string;
21
+ backupMasterKey?: string;
22
+ /**
23
+ * @description The key used to derive the backup key using {@link backupMasterKey} as the seed.
24
+ */
25
+ backupMasterPublicKey?: string;
26
+ bitgoKeychain: Keychain;
27
+ userKeychain: Keychain;
28
+ userMasterKey?: string;
29
+ /**
30
+ * @description The key used to derive the user key using {@link userMasterKey} as the seed.
31
+ */
32
+ userMasterPublicKey?: string;
33
+ }
34
+ export interface GenerateLightningQrDataParams extends GenerateQrDataCoinParams {
35
+ userAuthKeychain: Keychain;
36
+ }
37
+ /**
38
+ * Identifier for one of a vault's four roots (one per signing scheme). Each value is the
39
+ * root's `rootKeyType`, which is also the key used in the keycard's per-box JSON.
40
+ */
41
+ export type VaultRootKeyType = 'secp256k1Multisig' | 'ecdsaMpc' | 'eddsaMpc' | 'ed25519Multisig';
42
+ /**
43
+ * Fixed render/scan order of the four roots on the vault keycard. Kept stable so a
44
+ * generated keycard and a re-scanned one line up slot-for-slot.
45
+ */
46
+ export declare const VAULT_ROOT_ORDER: VaultRootKeyType[];
47
+ /**
48
+ * The JSON object encoded in a vault keycard box (A/B/C): the four roots keyed by
49
+ * {@link VaultRootKeyType}. Values are per-root ciphertext for A/B (encryptedPrv or
50
+ * reducedEncryptedPrv) or public keys for C. The root-key-type keys are self-identifying, so a
51
+ * consumer parses by key rather than by size/offset.
52
+ */
53
+ export type VaultKeycardRoots = Record<VaultRootKeyType, string>;
54
+ export interface GenerateVaultQrDataParams extends GenerateQrDataCoinParams {
55
+ roots: Record<VaultRootKeyType, KeychainsTriplet>;
56
+ }
57
+ export type GenerateKeycardParams = GenerateQrDataBaseParams & (GenerateQrDataForKeychainParams | GenerateQrDataParams | GenerateLightningQrDataParams);
58
+ export interface IDrawKeyCard {
59
+ activationCode?: string;
60
+ keyCardImage?: HTMLImageElement;
61
+ qrData: QrData;
62
+ questions: FAQ[];
63
+ walletLabel?: string;
64
+ curve?: KeyCurve;
65
+ pageBreakBeforeIndices?: number[];
66
+ }
67
+ export interface FAQ {
68
+ question: string;
69
+ answer: string[];
70
+ }
71
+ export interface QrDataEntry {
72
+ data: string;
73
+ description: string;
74
+ title: string;
75
+ publicMasterKey?: string;
76
+ }
77
+ export type MasterPublicKeyQrDataEntry = Omit<QrDataEntry, 'publicMasterKey'>;
78
+ export interface QrData {
79
+ backup?: QrDataEntry;
80
+ backupMasterPublicKey?: MasterPublicKeyQrDataEntry;
81
+ bitgo?: QrDataEntry;
82
+ passcode?: QrDataEntry;
83
+ curve?: KeyCurve;
84
+ user: QrDataEntry;
85
+ userMasterPublicKey?: MasterPublicKeyQrDataEntry;
86
+ }
87
+ //# 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,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VAULT_ROOT_ORDER = void 0;
4
+ /**
5
+ * Fixed render/scan order of the four roots on the vault keycard. Kept stable so a
6
+ * generated keycard and a re-scanned one line up slot-for-slot.
7
+ */
8
+ exports.VAULT_ROOT_ORDER = ['secp256k1Multisig', 'ecdsaMpc', 'eddsaMpc', 'ed25519Multisig'];
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZ0VBOzs7R0FHRztBQUNVLFFBQUEsZ0JBQWdCLEdBQXVCLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW5jcnlwdGlvblZlcnNpb24sIEtleWNoYWluLCBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4sIEtleUN1cnZlIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVRckRhdGFCYXNlUGFyYW1zIHtcbiAgYWN0aXZhdGlvbkNvZGU/OiBzdHJpbmc7XG4gIGtleUNhcmRJbWFnZT86IEhUTUxJbWFnZUVsZW1lbnQ7XG4gIHdhbGxldExhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVRckRhdGFGb3JLZXljaGFpblBhcmFtcyB7XG4gIC8vIFRoZSBCaXRHbyBrZXljaGFpbiBhcyBpdCBpcyByZXR1cm5lZCBmcm9tIHRoZSBCaXRHbyBBUEkgdXBvbiBjcmVhdGlvblxuICBiaXRnb0tleWNoYWluOiBLZXljaGFpbjtcbiAgLy8gVGhlIGN1cnZlIHVzZWQgZm9yIHRoZSBrZXlcbiAgY3VydmU6IEtleUN1cnZlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlUXJEYXRhQ29pblBhcmFtcyB7XG4gIC8vIFRoZSBjb2luIG9mIHRoZSB3YWxsZXQgdGhhdCB3YXMvIGlzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgY29pbjogUmVhZG9ubHk8QmFzZUNvaW4+O1xuICAvLyBBIGNvZGUgdGhhdCBjYW4gYmUgdXNlZCB0byBlbmNyeXB0IHRoZSB3YWxsZXQgcGFzc3dvcmQgdG8uXG4gIC8vIElmIGJvdGggdGhlIHBhc3NwaHJhc2UgYW5kIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGUgYXJlIHBhc3NlZCwgdGhlbiB0aGlzIGNvZGUgZW5jcnlwdHMgdGhlIHBhc3NwaHJhc2Ugd2l0aCB0aGVcbiAgLy8gcGFzc2NvZGVFbmNyeXB0aW9uQ29kZSBhbmQgcHV0cyB0aGUgcmVzdWx0IGludG8gQm94IEQuIEFsbG93cyByZWNvdmVyaWVzIG9mIHRoZSB3YWxsZXQgcGFzc3dvcmQuXG4gIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmc7XG4gIC8vIFRoZSB3YWxsZXQgcGFzc3dvcmRcbiAgLy8gSWYgYm90aCB0aGUgcGFzc3BocmFzZSBhbmQgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZSBhcmUgcGFzc2VkLCB0aGVuIHRoaXMgY29kZSBlbmNyeXB0cyB0aGUgcGFzc3BocmFzZSB3aXRoIHRoZVxuICAvLyBwYXNzY29kZUVuY3J5cHRpb25Db2RlIGFuZCBwdXRzIHRoZSByZXN1bHQgaW50byBCb3ggRC4gQWxsb3dzIHJlY292ZXJpZXMgb2YgdGhlIHdhbGxldCBwYXNzd29yZC5cbiAgcGFzc3BocmFzZT86IHN0cmluZztcbiAgZW5jcnlwdGlvblZlcnNpb24/OiBFbmNyeXB0aW9uVmVyc2lvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZVFyRGF0YVBhcmFtcyBleHRlbmRzIEdlbmVyYXRlUXJEYXRhQ29pblBhcmFtcyB7XG4gIC8vIFRoZSBiYWNrdXAga2V5Y2hhaW4gYXMgaXQgaXMgcmV0dXJuZWQgZnJvbSB0aGUgQml0R28gQVBJIHVwb24gY3JlYXRpb25cbiAgYmFja3VwS2V5Y2hhaW46IEtleWNoYWluO1xuICAvLyBUaGUgbmFtZSBvZiB0aGUgM3JkIHBhcnR5IHByb3ZpZGVyIG9mIHRoZSBiYWNrdXAga2V5IGlmIG5laXRoZXIgdGhlIHVzZXIgbm9yIEJpdEdvIHN0b3JlcyBpdFxuICBiYWNrdXBLZXlQcm92aWRlcj86IHN0cmluZztcbiAgLy8gVGhlIGtleSBpZCBvZiB0aGUgYmFja3VwIGtleSwgb25seSB1c2VkIGZvciBjb2xkIGtleXNcbiAgYmFja3VwTWFzdGVyS2V5Pzogc3RyaW5nO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBrZXkgdXNlZCB0byBkZXJpdmUgdGhlIGJhY2t1cCBrZXkgdXNpbmcge0BsaW5rIGJhY2t1cE1hc3RlcktleX0gYXMgdGhlIHNlZWQuXG4gICAqL1xuICBiYWNrdXBNYXN0ZXJQdWJsaWNLZXk/OiBzdHJpbmc7XG4gIC8vIFRoZSBCaXRHbyBrZXljaGFpbiBhcyBpdCBpcyByZXR1cm5lZCBmcm9tIHRoZSBCaXRHbyBBUEkgdXBvbiBjcmVhdGlvblxuICBiaXRnb0tleWNoYWluOiBLZXljaGFpbjtcbiAgLy8gVGhlIHVzZXIga2V5Y2hhaW4gYXMgaXQgaXMgcmV0dXJuZWQgZnJvbSB0aGUgQml0R28gQVBJIHVwb24gY3JlYXRpb25cbiAgdXNlcktleWNoYWluOiBLZXljaGFpbjtcbiAgLy8gVGhlIGtleSBpZCBvZiB0aGUgdXNlciBrZXksIG9ubHkgdXNlZCBmb3IgY29sZCBrZXlzXG4gIHVzZXJNYXN0ZXJLZXk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGtleSB1c2VkIHRvIGRlcml2ZSB0aGUgdXNlciBrZXkgdXNpbmcge0BsaW5rIHVzZXJNYXN0ZXJLZXl9IGFzIHRoZSBzZWVkLlxuICAgKi9cbiAgdXNlck1hc3RlclB1YmxpY0tleT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YVBhcmFtcyBleHRlbmRzIEdlbmVyYXRlUXJEYXRhQ29pblBhcmFtcyB7XG4gIC8vIFRoZSB1c2VyIGF1dGhlbnRpY2F0aW9uIGtleWNoYWluLCB1c2VkIHRvIHNpZ24gcGF5bWVudCByZXF1ZXN0cyBhbmQgd2FsbGV0IGNvbmZpZ3VyYXRpb24gdXBkYXRlc1xuICB1c2VyQXV0aEtleWNoYWluOiBLZXljaGFpbjtcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVyIGZvciBvbmUgb2YgYSB2YXVsdCdzIGZvdXIgcm9vdHMgKG9uZSBwZXIgc2lnbmluZyBzY2hlbWUpLiBFYWNoIHZhbHVlIGlzIHRoZVxuICogcm9vdCdzIGByb290S2V5VHlwZWAsIHdoaWNoIGlzIGFsc28gdGhlIGtleSB1c2VkIGluIHRoZSBrZXljYXJkJ3MgcGVyLWJveCBKU09OLlxuICovXG5leHBvcnQgdHlwZSBWYXVsdFJvb3RLZXlUeXBlID0gJ3NlY3AyNTZrMU11bHRpc2lnJyB8ICdlY2RzYU1wYycgfCAnZWRkc2FNcGMnIHwgJ2VkMjU1MTlNdWx0aXNpZyc7XG5cbi8qKlxuICogRml4ZWQgcmVuZGVyL3NjYW4gb3JkZXIgb2YgdGhlIGZvdXIgcm9vdHMgb24gdGhlIHZhdWx0IGtleWNhcmQuIEtlcHQgc3RhYmxlIHNvIGFcbiAqIGdlbmVyYXRlZCBrZXljYXJkIGFuZCBhIHJlLXNjYW5uZWQgb25lIGxpbmUgdXAgc2xvdC1mb3Itc2xvdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBVUxUX1JPT1RfT1JERVI6IFZhdWx0Um9vdEtleVR5cGVbXSA9IFsnc2VjcDI1NmsxTXVsdGlzaWcnLCAnZWNkc2FNcGMnLCAnZWRkc2FNcGMnLCAnZWQyNTUxOU11bHRpc2lnJ107XG5cbi8qKlxuICogVGhlIEpTT04gb2JqZWN0IGVuY29kZWQgaW4gYSB2YXVsdCBrZXljYXJkIGJveCAoQS9CL0MpOiB0aGUgZm91ciByb290cyBrZXllZCBieVxuICoge0BsaW5rIFZhdWx0Um9vdEtleVR5cGV9LiBWYWx1ZXMgYXJlIHBlci1yb290IGNpcGhlcnRleHQgZm9yIEEvQiAoZW5jcnlwdGVkUHJ2IG9yXG4gKiByZWR1Y2VkRW5jcnlwdGVkUHJ2KSBvciBwdWJsaWMga2V5cyBmb3IgQy4gVGhlIHJvb3Qta2V5LXR5cGUga2V5cyBhcmUgc2VsZi1pZGVudGlmeWluZywgc28gYVxuICogY29uc3VtZXIgcGFyc2VzIGJ5IGtleSByYXRoZXIgdGhhbiBieSBzaXplL29mZnNldC5cbiAqL1xuZXhwb3J0IHR5cGUgVmF1bHRLZXljYXJkUm9vdHMgPSBSZWNvcmQ8VmF1bHRSb290S2V5VHlwZSwgc3RyaW5nPjtcblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZVZhdWx0UXJEYXRhUGFyYW1zIGV4dGVuZHMgR2VuZXJhdGVRckRhdGFDb2luUGFyYW1zIHtcbiAgLy8gVGhlIGZvdXIgcm9vdCB0cmlwbGV0cyAodXNlci9iYWNrdXAvYml0Z28ga2V5Y2hhaW5zKSwga2V5ZWQgYnkgcm9vdEtleVR5cGUuXG4gIHJvb3RzOiBSZWNvcmQ8VmF1bHRSb290S2V5VHlwZSwgS2V5Y2hhaW5zVHJpcGxldD47XG59XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRlS2V5Y2FyZFBhcmFtcyA9IEdlbmVyYXRlUXJEYXRhQmFzZVBhcmFtcyAmXG4gIChHZW5lcmF0ZVFyRGF0YUZvcktleWNoYWluUGFyYW1zIHwgR2VuZXJhdGVRckRhdGFQYXJhbXMgfCBHZW5lcmF0ZUxpZ2h0bmluZ1FyRGF0YVBhcmFtcyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURyYXdLZXlDYXJkIHtcbiAgYWN0aXZhdGlvbkNvZGU/OiBzdHJpbmc7XG4gIGtleUNhcmRJbWFnZT86IEhUTUxJbWFnZUVsZW1lbnQ7XG4gIHFyRGF0YTogUXJEYXRhO1xuICBxdWVzdGlvbnM6IEZBUVtdO1xuICB3YWxsZXRMYWJlbD86IHN0cmluZztcbiAgY3VydmU/OiBLZXlDdXJ2ZTtcbiAgLy8gQm94IGluZGljZXMgdG8gc3RhcnQgYSBuZXcgcGFnZSBiZWZvcmUuIE9taXQgZm9yIHRoZSBkZWZhdWx0IHdhbGxldCBsYXlvdXQuXG4gIHBhZ2VCcmVha0JlZm9yZUluZGljZXM/OiBudW1iZXJbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGQVEge1xuICBxdWVzdGlvbjogc3RyaW5nO1xuICAvLyB0aGUgYW5zd2VyIHRvIHRoZSBxdWVzdGlvbiwgYWxyZWFkeSBzcGxpdCBpbnRvIGluZGl2aWR1YWwgbGluZXMgb2YgdGV4dFxuICBhbnN3ZXI6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFFyRGF0YUVudHJ5IHtcbiAgZGF0YTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBwdWJsaWNNYXN0ZXJLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1hc3RlclB1YmxpY0tleVFyRGF0YUVudHJ5ID0gT21pdDxRckRhdGFFbnRyeSwgJ3B1YmxpY01hc3RlcktleSc+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFFyRGF0YSB7XG4gIGJhY2t1cD86IFFyRGF0YUVudHJ5O1xuICBiYWNrdXBNYXN0ZXJQdWJsaWNLZXk/OiBNYXN0ZXJQdWJsaWNLZXlRckRhdGFFbnRyeTtcbiAgYml0Z28/OiBRckRhdGFFbnRyeTtcbiAgcGFzc2NvZGU/OiBRckRhdGFFbnRyeTtcbiAgY3VydmU/OiBLZXlDdXJ2ZTtcbiAgdXNlcjogUXJEYXRhRW50cnk7XG4gIHVzZXJNYXN0ZXJQdWJsaWNLZXk/OiBNYXN0ZXJQdWJsaWNLZXlRckRhdGFFbnRyeTtcbn1cbiJdfQ==
package/dist/src/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.splitKeys = void 0;
3
+ exports.splitKeys = splitKeys;
4
4
  function splitKeys(key, limit) {
5
5
  if (key.length <= limit) {
6
6
  return [key];
@@ -13,5 +13,4 @@ function splitKeys(key, limit) {
13
13
  }
14
14
  return keys;
15
15
  }
16
- exports.splitKeys = splitKeys;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBZ0IsU0FBUyxDQUFDLEdBQVcsRUFBRSxLQUFhO0lBQ2xELElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLEVBQUU7UUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2Q7SUFFRCxNQUFNLElBQUksR0FBYSxFQUFFLENBQUM7SUFFMUIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUU7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBZEQsOEJBY0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gc3BsaXRLZXlzKGtleTogc3RyaW5nLCBsaW1pdDogbnVtYmVyKTogc3RyaW5nW10ge1xuICBpZiAoa2V5Lmxlbmd0aCA8PSBsaW1pdCkge1xuICAgIHJldHVybiBba2V5XTtcbiAgfVxuXG4gIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgbGV0IHJpZ2h0SW5kZXggPSBsaW1pdDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpICs9IGxpbWl0KSB7XG4gICAga2V5cy5wdXNoKGtleS5zdWJzdHJpbmcoaSwgcmlnaHRJbmRleCkpO1xuICAgIHJpZ2h0SW5kZXggPSBNYXRoLm1pbihyaWdodEluZGV4ICsgbGltaXQsIGtleS5sZW5ndGgpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG4iXX0=
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw4QkFjQztBQWRELFNBQWdCLFNBQVMsQ0FBQyxHQUFXLEVBQUUsS0FBYTtJQUNsRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQztJQUUxQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN4QyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHNwbGl0S2V5cyhrZXk6IHN0cmluZywgbGltaXQ6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgaWYgKGtleS5sZW5ndGggPD0gbGltaXQpIHtcbiAgICByZXR1cm4gW2tleV07XG4gIH1cblxuICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGxldCByaWdodEluZGV4ID0gbGltaXQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSArPSBsaW1pdCkge1xuICAgIGtleXMucHVzaChrZXkuc3Vic3RyaW5nKGksIHJpZ2h0SW5kZXgpKTtcbiAgICByaWdodEluZGV4ID0gTWF0aC5taW4ocmlnaHRJbmRleCArIGxpbWl0LCBrZXkubGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuIl19