@cubist-labs/cubesigner-sdk 0.3.28 → 0.3.29

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.
Files changed (72) hide show
  1. package/README.md +1 -6
  2. package/dist/cjs/package.json +1 -1
  3. package/dist/cjs/src/api.d.ts +2 -1
  4. package/dist/cjs/src/api.js +4 -2
  5. package/dist/cjs/src/client.d.ts +16 -11
  6. package/dist/cjs/src/client.js +4 -3
  7. package/dist/cjs/src/key.d.ts +3 -0
  8. package/dist/cjs/src/key.js +10 -1
  9. package/dist/cjs/src/org.d.ts +3 -3
  10. package/dist/cjs/src/schema.d.ts +970 -46
  11. package/dist/cjs/src/schema.js +1 -1
  12. package/dist/esm/package.json +1 -1
  13. package/dist/esm/src/api.d.ts +2 -1
  14. package/dist/esm/src/api.js +4 -2
  15. package/dist/esm/src/client.d.ts +16 -11
  16. package/dist/esm/src/client.js +4 -3
  17. package/dist/esm/src/key.d.ts +3 -0
  18. package/dist/esm/src/key.js +10 -1
  19. package/dist/esm/src/org.d.ts +3 -3
  20. package/dist/esm/src/schema.d.ts +970 -46
  21. package/dist/esm/src/schema.js +1 -1
  22. package/package.json +1 -1
  23. package/src/api.ts +7 -1
  24. package/src/client.ts +3 -2
  25. package/src/key.ts +9 -0
  26. package/src/schema.ts +1008 -44
  27. package/dist/cjs/src/org_event_processor.d.ts +0 -57
  28. package/dist/cjs/src/org_event_processor.js +0 -137
  29. package/dist/esm/src/org_event_processor.d.ts +0 -57
  30. package/dist/esm/src/org_event_processor.js +0 -133
  31. package/dist/package.json +0 -36
  32. package/dist/spec/env/beta.json +0 -9
  33. package/dist/spec/env/gamma.json +0 -9
  34. package/dist/spec/env/prod.json +0 -9
  35. package/dist/src/api.d.ts +0 -634
  36. package/dist/src/api.js +0 -1309
  37. package/dist/src/client.d.ts +0 -575
  38. package/dist/src/client.js +0 -381
  39. package/dist/src/env.d.ts +0 -15
  40. package/dist/src/env.js +0 -35
  41. package/dist/src/error.d.ts +0 -29
  42. package/dist/src/error.js +0 -36
  43. package/dist/src/events.d.ts +0 -84
  44. package/dist/src/events.js +0 -195
  45. package/dist/src/index.d.ts +0 -207
  46. package/dist/src/index.js +0 -308
  47. package/dist/src/key.d.ts +0 -152
  48. package/dist/src/key.js +0 -242
  49. package/dist/src/mfa.d.ts +0 -94
  50. package/dist/src/mfa.js +0 -169
  51. package/dist/src/org.d.ts +0 -99
  52. package/dist/src/org.js +0 -95
  53. package/dist/src/paginator.d.ts +0 -76
  54. package/dist/src/paginator.js +0 -99
  55. package/dist/src/response.d.ts +0 -101
  56. package/dist/src/response.js +0 -164
  57. package/dist/src/role.d.ts +0 -283
  58. package/dist/src/role.js +0 -253
  59. package/dist/src/schema.d.ts +0 -6209
  60. package/dist/src/schema.js +0 -7
  61. package/dist/src/schema_types.d.ts +0 -113
  62. package/dist/src/schema_types.js +0 -3
  63. package/dist/src/session/session_storage.d.ts +0 -47
  64. package/dist/src/session/session_storage.js +0 -76
  65. package/dist/src/session/signer_session_manager.d.ts +0 -125
  66. package/dist/src/session/signer_session_manager.js +0 -239
  67. package/dist/src/signer_session.d.ts +0 -41
  68. package/dist/src/signer_session.js +0 -77
  69. package/dist/src/user_export.d.ts +0 -52
  70. package/dist/src/user_export.js +0 -129
  71. package/dist/src/util.d.ts +0 -61
  72. package/dist/src/util.js +0 -97
@@ -1,61 +0,0 @@
1
- /** JSON map type */
2
- export interface JsonMap {
3
- [member: string]: string | number | boolean | null | JsonArray | JsonMap;
4
- }
5
- /** JSON array type */
6
- export type JsonArray = Array<string | number | boolean | null | JsonArray | JsonMap>;
7
- /**
8
- * Path join
9
- * @param {string} dir Parent directory
10
- * @param {string} file Pathname
11
- * @return {string} New pathname
12
- */
13
- export declare function pathJoin(dir: string, file: string): string;
14
- /**
15
- * Directory where CubeSigner stores config files.
16
- * @return {string} Config dir
17
- */
18
- export declare function configDir(): string;
19
- /**
20
- * Browser-friendly helper for decoding a 'base64'-encoded string into a byte array.
21
- *
22
- * @param {string} b64 The 'base64'-encoded string to decode
23
- * @return {Uint8Array} Decoded byte array
24
- */
25
- export declare function decodeBase64(b64: string): Uint8Array;
26
- /**
27
- * Browser-friendly helper for decoding a 'base64url'-encoded string into a byte array.
28
- *
29
- * @param {string} b64url The 'base64url'-encoded string to decode
30
- * @return {Uint8Array} Decoded byte array
31
- */
32
- export declare function decodeBase64Url(b64url: string): Uint8Array;
33
- /**
34
- *
35
- * Browser-friendly helper for encoding a byte array into a padded `base64`-encoded string.
36
- *
37
- * @param {Iterable<number>} buffer The byte array to encode
38
- * @return {string} The 'base64' encoding of the byte array.
39
- */
40
- export declare function encodeToBase64(buffer: Iterable<number>): string;
41
- /**
42
- * Browser-friendly helper for encoding a byte array into a 'base64url`-encoded string.
43
- *
44
- * @param {Iterable<number>} buffer The byte array to encode
45
- * @return {string} The 'base64url' encoding of the byte array.
46
- */
47
- export declare function encodeToBase64Url(buffer: Iterable<number>): string;
48
- /**
49
- * Sleeps for `ms` milliseconds.
50
- *
51
- * @param {number} ms Milliseconds to sleep
52
- * @return {Promise<void>} A promise that is resolved after `ms` milliseconds.
53
- */
54
- export declare function delay(ms: number): Promise<void>;
55
- /**
56
- * Converts a string or a uint8 array into a hex string. Strings are encoded in UTF-8 before
57
- * being converted to hex.
58
- * @param {string | Uint8Array} message The input
59
- * @return {string} Hex string prefixed with "0x"
60
- */
61
- export declare function encodeToHex(message: string | Uint8Array): string;
package/dist/src/util.js DELETED
@@ -1,97 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.encodeToHex = exports.delay = exports.encodeToBase64Url = exports.encodeToBase64 = exports.decodeBase64Url = exports.decodeBase64 = exports.configDir = exports.pathJoin = void 0;
4
- /**
5
- * Path join
6
- * @param {string} dir Parent directory
7
- * @param {string} file Pathname
8
- * @return {string} New pathname
9
- */
10
- function pathJoin(dir, file) {
11
- const sep = globalThis?.process?.platform === "win32" ? "\\" : "/";
12
- return `${dir}${sep}${file}`;
13
- }
14
- exports.pathJoin = pathJoin;
15
- /**
16
- * Directory where CubeSigner stores config files.
17
- * @return {string} Config dir
18
- */
19
- function configDir() {
20
- const configDir = process.platform === "darwin"
21
- ? `${process.env.HOME}/Library/Application Support`
22
- : `${process.env.HOME}/.config`;
23
- return pathJoin(configDir, "cubesigner");
24
- }
25
- exports.configDir = configDir;
26
- /**
27
- * Browser-friendly helper for decoding a 'base64'-encoded string into a byte array.
28
- *
29
- * @param {string} b64 The 'base64'-encoded string to decode
30
- * @return {Uint8Array} Decoded byte array
31
- */
32
- function decodeBase64(b64) {
33
- return typeof Buffer === "function"
34
- ? Buffer.from(b64, "base64")
35
- : Uint8Array.from(atob(b64), (c) => c.charCodeAt(0));
36
- }
37
- exports.decodeBase64 = decodeBase64;
38
- /**
39
- * Browser-friendly helper for decoding a 'base64url'-encoded string into a byte array.
40
- *
41
- * @param {string} b64url The 'base64url'-encoded string to decode
42
- * @return {Uint8Array} Decoded byte array
43
- */
44
- function decodeBase64Url(b64url) {
45
- // NOTE: there is no "base64url" encoding in the "buffer" module for the browser (unlike in node.js)
46
- const b64 = b64url.replace(/-/g, "+").replace(/_/g, "/").replace(/=*$/g, "");
47
- return decodeBase64(b64);
48
- }
49
- exports.decodeBase64Url = decodeBase64Url;
50
- /**
51
- *
52
- * Browser-friendly helper for encoding a byte array into a padded `base64`-encoded string.
53
- *
54
- * @param {Iterable<number>} buffer The byte array to encode
55
- * @return {string} The 'base64' encoding of the byte array.
56
- */
57
- function encodeToBase64(buffer) {
58
- const bytes = new Uint8Array(buffer);
59
- const b64 = typeof Buffer === "function"
60
- ? Buffer.from(bytes).toString("base64")
61
- : btoa(bytes.reduce((s, b) => s + String.fromCharCode(b), ""));
62
- return b64;
63
- }
64
- exports.encodeToBase64 = encodeToBase64;
65
- /**
66
- * Browser-friendly helper for encoding a byte array into a 'base64url`-encoded string.
67
- *
68
- * @param {Iterable<number>} buffer The byte array to encode
69
- * @return {string} The 'base64url' encoding of the byte array.
70
- */
71
- function encodeToBase64Url(buffer) {
72
- const b64 = encodeToBase64(buffer);
73
- // NOTE: there is no "base64url" encoding in the "buffer" module for the browser (unlike in node.js)
74
- return b64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=*$/g, "");
75
- }
76
- exports.encodeToBase64Url = encodeToBase64Url;
77
- /**
78
- * Sleeps for `ms` milliseconds.
79
- *
80
- * @param {number} ms Milliseconds to sleep
81
- * @return {Promise<void>} A promise that is resolved after `ms` milliseconds.
82
- */
83
- function delay(ms) {
84
- return new Promise((resolve) => setTimeout(resolve, ms));
85
- }
86
- exports.delay = delay;
87
- /**
88
- * Converts a string or a uint8 array into a hex string. Strings are encoded in UTF-8 before
89
- * being converted to hex.
90
- * @param {string | Uint8Array} message The input
91
- * @return {string} Hex string prefixed with "0x"
92
- */
93
- function encodeToHex(message) {
94
- return ("0x" + (typeof message === "string" ? Buffer.from(message, "utf8") : message).toString("hex"));
95
- }
96
- exports.encodeToHex = encodeToHex;
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBOzs7OztHQUtHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLEdBQVcsRUFBRSxJQUFZO0lBQ2hELE1BQU0sR0FBRyxHQUFHLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDbkUsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDL0IsQ0FBQztBQUhELDRCQUdDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsU0FBUztJQUN2QixNQUFNLFNBQVMsR0FDYixPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVE7UUFDM0IsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLDhCQUE4QjtRQUNuRCxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDO0lBQ3BDLE9BQU8sUUFBUSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBTkQsOEJBTUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLFlBQVksQ0FBQyxHQUFXO0lBQ3RDLE9BQU8sT0FBTyxNQUFNLEtBQUssVUFBVTtRQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFKRCxvQ0FJQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLE1BQWM7SUFDNUMsb0dBQW9HO0lBQ3BHLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RSxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBSkQsMENBSUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixjQUFjLENBQUMsTUFBd0I7SUFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsTUFBTSxHQUFHLEdBQ1AsT0FBTyxNQUFNLEtBQUssVUFBVTtRQUMxQixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBUEQsd0NBT0M7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE1BQXdCO0lBQ3hELE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxvR0FBb0c7SUFDcEcsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUpELDhDQUlDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixLQUFLLENBQUMsRUFBVTtJQUM5QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUZELHNCQUVDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixXQUFXLENBQUMsT0FBNEI7SUFDdEQsT0FBTyxDQUNMLElBQUksR0FBRyxDQUFDLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDOUYsQ0FBQztBQUNKLENBQUM7QUFKRCxrQ0FJQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBKU09OIG1hcCB0eXBlICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25NYXAge1xuICBbbWVtYmVyOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IEpzb25BcnJheSB8IEpzb25NYXA7XG59XG5cbi8qKiBKU09OIGFycmF5IHR5cGUgKi9cbmV4cG9ydCB0eXBlIEpzb25BcnJheSA9IEFycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgSnNvbkFycmF5IHwgSnNvbk1hcD47XG5cbi8qKlxuICogUGF0aCBqb2luXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyIFBhcmVudCBkaXJlY3RvcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlIFBhdGhuYW1lXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5ldyBwYXRobmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0aEpvaW4oZGlyOiBzdHJpbmcsIGZpbGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlcCA9IGdsb2JhbFRoaXM/LnByb2Nlc3M/LnBsYXRmb3JtID09PSBcIndpbjMyXCIgPyBcIlxcXFxcIiA6IFwiL1wiO1xuICByZXR1cm4gYCR7ZGlyfSR7c2VwfSR7ZmlsZX1gO1xufVxuXG4vKipcbiAqIERpcmVjdG9yeSB3aGVyZSBDdWJlU2lnbmVyIHN0b3JlcyBjb25maWcgZmlsZXMuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IENvbmZpZyBkaXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ0RpcigpOiBzdHJpbmcge1xuICBjb25zdCBjb25maWdEaXIgPVxuICAgIHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCJcbiAgICAgID8gYCR7cHJvY2Vzcy5lbnYuSE9NRX0vTGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0YFxuICAgICAgOiBgJHtwcm9jZXNzLmVudi5IT01FfS8uY29uZmlnYDtcbiAgcmV0dXJuIHBhdGhKb2luKGNvbmZpZ0RpciwgXCJjdWJlc2lnbmVyXCIpO1xufVxuXG4vKipcbiAqIEJyb3dzZXItZnJpZW5kbHkgaGVscGVyIGZvciBkZWNvZGluZyBhICdiYXNlNjQnLWVuY29kZWQgc3RyaW5nIGludG8gYSBieXRlIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiNjQgVGhlICdiYXNlNjQnLWVuY29kZWQgc3RyaW5nIHRvIGRlY29kZVxuICogQHJldHVybiB7VWludDhBcnJheX0gRGVjb2RlZCBieXRlIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVCYXNlNjQoYjY0OiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgcmV0dXJuIHR5cGVvZiBCdWZmZXIgPT09IFwiZnVuY3Rpb25cIlxuICAgID8gQnVmZmVyLmZyb20oYjY0LCBcImJhc2U2NFwiKVxuICAgIDogVWludDhBcnJheS5mcm9tKGF0b2IoYjY0KSwgKGMpID0+IGMuY2hhckNvZGVBdCgwKSk7XG59XG5cbi8qKlxuICogQnJvd3Nlci1mcmllbmRseSBoZWxwZXIgZm9yIGRlY29kaW5nIGEgJ2Jhc2U2NHVybCctZW5jb2RlZCBzdHJpbmcgaW50byBhIGJ5dGUgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGI2NHVybCBUaGUgJ2Jhc2U2NHVybCctZW5jb2RlZCBzdHJpbmcgdG8gZGVjb2RlXG4gKiBAcmV0dXJuIHtVaW50OEFycmF5fSBEZWNvZGVkIGJ5dGUgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUJhc2U2NFVybChiNjR1cmw6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAvLyBOT1RFOiB0aGVyZSBpcyBubyBcImJhc2U2NHVybFwiIGVuY29kaW5nIGluIHRoZSBcImJ1ZmZlclwiIG1vZHVsZSBmb3IgdGhlIGJyb3dzZXIgKHVubGlrZSBpbiBub2RlLmpzKVxuICBjb25zdCBiNjQgPSBiNjR1cmwucmVwbGFjZSgvLS9nLCBcIitcIikucmVwbGFjZSgvXy9nLCBcIi9cIikucmVwbGFjZSgvPSokL2csIFwiXCIpO1xuICByZXR1cm4gZGVjb2RlQmFzZTY0KGI2NCk7XG59XG5cbi8qKlxuICpcbiAqIEJyb3dzZXItZnJpZW5kbHkgaGVscGVyIGZvciBlbmNvZGluZyBhIGJ5dGUgYXJyYXkgaW50byBhIHBhZGRlZCBgYmFzZTY0YC1lbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0l0ZXJhYmxlPG51bWJlcj59IGJ1ZmZlciBUaGUgYnl0ZSBhcnJheSB0byBlbmNvZGVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlICdiYXNlNjQnIGVuY29kaW5nIG9mIHRoZSBieXRlIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVG9CYXNlNjQoYnVmZmVyOiBJdGVyYWJsZTxudW1iZXI+KTogc3RyaW5nIHtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICBjb25zdCBiNjQgPVxuICAgIHR5cGVvZiBCdWZmZXIgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBCdWZmZXIuZnJvbShieXRlcykudG9TdHJpbmcoXCJiYXNlNjRcIilcbiAgICAgIDogYnRvYShieXRlcy5yZWR1Y2UoKHMsIGIpID0+IHMgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGIpLCBcIlwiKSk7XG4gIHJldHVybiBiNjQ7XG59XG5cbi8qKlxuICogQnJvd3Nlci1mcmllbmRseSBoZWxwZXIgZm9yIGVuY29kaW5nIGEgYnl0ZSBhcnJheSBpbnRvIGEgJ2Jhc2U2NHVybGAtZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtJdGVyYWJsZTxudW1iZXI+fSBidWZmZXIgVGhlIGJ5dGUgYXJyYXkgdG8gZW5jb2RlXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSAnYmFzZTY0dXJsJyBlbmNvZGluZyBvZiB0aGUgYnl0ZSBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVRvQmFzZTY0VXJsKGJ1ZmZlcjogSXRlcmFibGU8bnVtYmVyPik6IHN0cmluZyB7XG4gIGNvbnN0IGI2NCA9IGVuY29kZVRvQmFzZTY0KGJ1ZmZlcik7XG4gIC8vIE5PVEU6IHRoZXJlIGlzIG5vIFwiYmFzZTY0dXJsXCIgZW5jb2RpbmcgaW4gdGhlIFwiYnVmZmVyXCIgbW9kdWxlIGZvciB0aGUgYnJvd3NlciAodW5saWtlIGluIG5vZGUuanMpXG4gIHJldHVybiBiNjQucmVwbGFjZSgvXFwrL2csIFwiLVwiKS5yZXBsYWNlKC9cXC8vZywgXCJfXCIpLnJlcGxhY2UoLz0qJC9nLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBTbGVlcHMgZm9yIGBtc2AgbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBtcyBNaWxsaXNlY29uZHMgdG8gc2xlZXBcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIGFmdGVyIGBtc2AgbWlsbGlzZWNvbmRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyBvciBhIHVpbnQ4IGFycmF5IGludG8gYSBoZXggc3RyaW5nLiBTdHJpbmdzIGFyZSBlbmNvZGVkIGluIFVURi04IGJlZm9yZVxuICogYmVpbmcgY29udmVydGVkIHRvIGhleC5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gbWVzc2FnZSBUaGUgaW5wdXRcbiAqIEByZXR1cm4ge3N0cmluZ30gSGV4IHN0cmluZyBwcmVmaXhlZCB3aXRoIFwiMHhcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVG9IZXgobWVzc2FnZTogc3RyaW5nIHwgVWludDhBcnJheSk6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgXCIweFwiICsgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8gQnVmZmVyLmZyb20obWVzc2FnZSwgXCJ1dGY4XCIpIDogbWVzc2FnZSkudG9TdHJpbmcoXCJoZXhcIilcbiAgKTtcbn1cbiJdfQ==