@datagrok-libraries/utils 0.0.15 → 0.0.16

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/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "fullName": "Utils",
7
- "version": "0.0.15",
7
+ "version": "0.0.16",
8
8
  "description": "Common utilities",
9
9
  "dependencies": {
10
10
  "@types/node": "^14.14.37",
@@ -8,4 +8,4 @@ export declare function getBrowserPage(puppeteer: any): Promise<{
8
8
  browser: any;
9
9
  page: any;
10
10
  }>;
11
- //# sourceMappingURL=test-utils.d.ts.map
11
+ //# sourceMappingURL=test-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-node.d.ts","sourceRoot":"","sources":["test-node.ts"],"names":[],"mappings":"AAOA,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,gBAOtD;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAIzD;AAaD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAC,CAkBrE;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAC,CAAC,CA8BvF"}
@@ -0,0 +1,96 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import * as path from "path";
11
+ import * as os from "os";
12
+ import * as fs from "fs";
13
+ // @ts-ignore
14
+ import * as yaml from 'js-yaml';
15
+ const fetch = require('node-fetch');
16
+ export function getToken(url, key) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ let response = yield fetch(`${url}/users/login/dev/${key}`, { method: 'POST' });
19
+ let json = yield response.json();
20
+ if (json.isSuccess == true)
21
+ return json.token;
22
+ else
23
+ throw 'Unable to login to server. Check your dev key';
24
+ });
25
+ }
26
+ export function getWebUrl(url, token) {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ let response = yield fetch(`${url}/admin/plugins/admin/settings`, { headers: { Authorization: token } });
29
+ let json = yield response.json();
30
+ return json.settings.webRoot;
31
+ });
32
+ }
33
+ const grokDir = path.join(os.homedir(), '.grok');
34
+ const confPath = path.join(grokDir, 'config.yaml');
35
+ function mapURL(conf) {
36
+ let urls = {};
37
+ for (let server in conf.servers) {
38
+ urls[conf['servers'][server]['url']] = conf['servers'][server];
39
+ }
40
+ return urls;
41
+ }
42
+ export function getDevKey(hostKey) {
43
+ let config = yaml.load(fs.readFileSync(confPath, 'utf8'));
44
+ let host = hostKey == '' ? config.default : hostKey;
45
+ host = host.trim();
46
+ let urls = mapURL(config);
47
+ let key = '';
48
+ let url = '';
49
+ try {
50
+ let url = new URL(host).href;
51
+ if (url.endsWith('/'))
52
+ url = url.slice(0, -1);
53
+ if (url in urls)
54
+ key = config['servers'][urls[url]]['key'];
55
+ }
56
+ catch (error) {
57
+ if (config['servers'][host] == null)
58
+ throw `Unknown server alias. Please add it to ${confPath}`;
59
+ url = config['servers'][host]['url'];
60
+ key = config['servers'][host]['key'];
61
+ }
62
+ return { url, key };
63
+ }
64
+ export function getBrowserPage(puppeteer) {
65
+ var _a;
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ let url = (_a = process.env.HOST) !== null && _a !== void 0 ? _a : '';
68
+ let cfg = getDevKey(url);
69
+ url = cfg.url;
70
+ let key = cfg.key;
71
+ let token = yield getToken(url, key);
72
+ url = yield getWebUrl(url, token);
73
+ console.log(`Using web root: ${url}`);
74
+ let browser = yield puppeteer.launch({
75
+ args: ['--disable-dev-shm-usage', '--disable-features=site-per-process'],
76
+ ignoreHTTPSErrors: true,
77
+ });
78
+ let page = yield browser.newPage();
79
+ yield page.goto(`${url}/oauth/`);
80
+ yield page.setCookie({ name: 'auth', value: token });
81
+ yield page.evaluate((token) => {
82
+ window.localStorage.setItem('auth', token);
83
+ }, token);
84
+ yield page.goto(url);
85
+ try {
86
+ yield page.waitForSelector('.grok-preloader');
87
+ console.log('got preloader');
88
+ yield page.waitForFunction(() => document.querySelector('.grok-preloader') == null, { timeout: 100000 });
89
+ }
90
+ catch (error) {
91
+ throw error;
92
+ }
93
+ return { browser, page };
94
+ });
95
+ }
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC1ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLGFBQWE7QUFDYixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFcEMsTUFBTSxVQUFnQixRQUFRLENBQUMsR0FBVyxFQUFFLEdBQVc7O1FBQ3JELElBQUksUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsR0FBRyxvQkFBb0IsR0FBRyxFQUFFLEVBQUUsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztRQUM5RSxJQUFJLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSTtZQUN4QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7O1lBRWxCLE1BQU0sK0NBQStDLENBQUM7SUFDMUQsQ0FBQztDQUFBO0FBRUQsTUFBTSxVQUFnQixTQUFTLENBQUMsR0FBVyxFQUFFLEtBQWE7O1FBQ3hELElBQUksUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsR0FBRywrQkFBK0IsRUFBRSxFQUFDLE9BQU8sRUFBRSxFQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDckcsSUFBSSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0NBQUE7QUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJ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eUIsRUFBRSxxQ0FBcUMsQ0FBQztZQUN4RSxpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDakMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNqQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ1YsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUk7WUFDRixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLElBQUksSUFBSSxFQUFFLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7U0FDeEc7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFDRCxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDOztDQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuY29uc3QgZmV0Y2ggPSByZXF1aXJlKCdub2RlLWZldGNoJyk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRUb2tlbih1cmw6IHN0cmluZywga2V5OiBzdHJpbmcpIHtcbiAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dXJsfS91c2Vycy9sb2dpbi9kZXYvJHtrZXl9YCwge21ldGhvZDogJ1BPU1QnfSk7XG4gIGxldCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICBpZiAoanNvbi5pc1N1Y2Nlc3MgPT0gdHJ1ZSlcbiAgICByZXR1cm4ganNvbi50b2tlbjtcbiAgZWxzZVxuICAgIHRocm93ICdVbmFibGUgdG8gbG9naW4gdG8gc2VydmVyLiBDaGVjayB5b3VyIGRldiBrZXknO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V2ViVXJsKHVybDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSB7XG4gIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3VybH0vYWRtaW4vcGx1Z2lucy9hZG1pbi9zZXR0aW5nc2AsIHtoZWFkZXJzOiB7QXV0aG9yaXphdGlvbjogdG9rZW59fSk7XG4gIGxldCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICByZXR1cm4ganNvbi5zZXR0aW5ncy53ZWJSb290O1xufVxuXG5jb25zdCBncm9rRGlyID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5ncm9rJyk7XG5jb25zdCBjb25mUGF0aCA9IHBhdGguam9pbihncm9rRGlyLCAnY29uZmlnLnlhbWwnKTtcblxuZnVuY3Rpb24gbWFwVVJMKGNvbmY6IENvbmZpZyk6IEluZGV4YWJsZSB7XG4gIGxldCB1cmxzOiBJbmRleGFibGUgPSB7fTtcbiAgZm9yIChsZXQgc2VydmVyIGluIGNvbmYuc2VydmVycykge1xuICAgIHVybHNbY29uZlsnc2VydmVycyddW3NlcnZlcl1bJ3VybCddXSA9IGNvbmZbJ3NlcnZlcnMnXVtzZXJ2ZXJdO1xuICB9XG4gIHJldHVybiB1cmxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV2S2V5KGhvc3RLZXk6IHN0cmluZyk6IHt1cmw6IHN0cmluZywga2V5OiBzdHJpbmd9IHtcbiAgbGV0IGNvbmZpZyA9IHlhbWwubG9hZChmcy5yZWFkRmlsZVN5bmMoY29uZlBhdGgsICd1dGY4JykpIGFzIGFueTtcbiAgbGV0IGhvc3QgPSBob3N0S2V5ID09ICcnID8gY29uZmlnLmRlZmF1bHQgOiBob3N0S2V5O1xuICBob3N0ID0gaG9zdC50cmltKCk7XG4gIGxldCB1cmxzID0gbWFwVVJMKGNvbmZpZyk7XG4gIGxldCBrZXkgPSAnJztcbiAgbGV0IHVybCA9ICcnO1xuICB0cnkge1xuICAgIGxldCB1cmwgPSBuZXcgVVJMKGhvc3QpLmhyZWY7XG4gICAgaWYgKHVybC5lbmRzV2l0aCgnLycpKSB1cmwgPSB1cmwuc2xpY2UoMCwgLTEpO1xuICAgIGlmICh1cmwgaW4gdXJscykga2V5ID0gY29uZmlnWydzZXJ2ZXJzJ11bdXJsc1t1cmxdXVsna2V5J107XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGNvbmZpZ1snc2VydmVycyddW2hvc3RdID09IG51bGwpXG4gICAgICB0aHJvdyBgVW5rbm93biBzZXJ2ZXIgYWxpYXMuIFBsZWFzZSBhZGQgaXQgdG8gJHtjb25mUGF0aH1gO1xuICAgIHVybCA9IGNvbmZpZ1snc2VydmVycyddW2hvc3RdWyd1cmwnXTtcbiAgICBrZXkgPSBjb25maWdbJ3NlcnZlcnMnXVtob3N0XVsna2V5J107XG4gIH1cbiAgcmV0dXJuIHt1cmwsIGtleX07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCcm93c2VyUGFnZShwdXBwZXRlZXI6IGFueSk6IFByb21pc2U8e2Jyb3dzZXI6IGFueSwgcGFnZTogYW55fT4ge1xuICBsZXQgdXJsOnN0cmluZyA9IHByb2Nlc3MuZW52LkhPU1QgPz8gJyc7XG4gIGxldCBjZmcgPSBnZXREZXZLZXkodXJsKTtcbiAgdXJsID0gY2ZnLnVybDtcblxuICBsZXQga2V5ID0gY2ZnLmtleTtcbiAgbGV0IHRva2VuID0gYXdhaXQgZ2V0VG9rZW4odXJsLCBrZXkpO1xuICB1cmwgPSBhd2FpdCBnZXRXZWJVcmwodXJsLCB0b2tlbik7XG4gIGNvbnNvbGUubG9nKGBVc2luZyB3ZWIgcm9vdDogJHt1cmx9YCk7XG5cbiAgbGV0IGJyb3dzZXIgPSBhd2FpdCBwdXBwZXRlZXIubGF1bmNoKHtcbiAgICBhcmdzOiBbJy0tZGlzYWJsZS1kZXYtc2htLXVzYWdlJywgJy0tZGlzYWJsZS1mZWF0dXJlcz1zaXRlLXBlci1wcm9jZXNzJ10sXG4gICAgaWdub3JlSFRUUFNFcnJvcnM6IHRydWUsXG4gIH0pO1xuXG4gIGxldCBwYWdlID0gYXdhaXQgYnJvd3Nlci5uZXdQYWdlKCk7XG4gIGF3YWl0IHBhZ2UuZ290byhgJHt1cmx9L29hdXRoL2ApO1xuICBhd2FpdCBwYWdlLnNldENvb2tpZSh7bmFtZTogJ2F1dGgnLCB2YWx1ZTogdG9rZW59KTtcbiAgYXdhaXQgcGFnZS5ldmFsdWF0ZSgodG9rZW46IGFueSkgPT4ge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXV0aCcsIHRva2VuKTtcbiAgfSwgdG9rZW4pO1xuICBhd2FpdCBwYWdlLmdvdG8odXJsKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBwYWdlLndhaXRGb3JTZWxlY3RvcignLmdyb2stcHJlbG9hZGVyJyk7XG4gICAgY29uc29sZS5sb2coJ2dvdCBwcmVsb2FkZXInKTtcbiAgICBhd2FpdCBwYWdlLndhaXRGb3JGdW5jdGlvbigoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZ3Jvay1wcmVsb2FkZXInKSA9PSBudWxsLCB7dGltZW91dDogMTAwMDAwfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgcmV0dXJuIHticm93c2VyLCBwYWdlfTtcbn1cblxuXG5pbnRlcmZhY2UgQ29uZmlnIHtcbiAgc2VydmVyczoge1xuICAgIFthbGlhczogc3RyaW5nXToge1xuICAgICAgdXJsOiBzdHJpbmcsXG4gICAgICBrZXk6IHN0cmluZ1xuICAgIH1cbiAgfSxcbiAgZGVmYXVsdDogc3RyaW5nLFxufVxuXG5pbnRlcmZhY2UgSW5kZXhhYmxlIHsgW2tleTogc3RyaW5nXTogYW55IH1cbiJdfQ==
package/src/test.d.ts ADDED
@@ -0,0 +1,29 @@
1
+ export declare let tests: {
2
+ [key: string]: {
3
+ tests?: Test[];
4
+ before?: () => Promise<void>;
5
+ after?: () => Promise<void>;
6
+ beforeStatus?: string;
7
+ afterStatus?: string;
8
+ };
9
+ };
10
+ export declare let currentCategory: string;
11
+ export declare class Test {
12
+ test: () => Promise<any>;
13
+ name: string;
14
+ category: string;
15
+ constructor(category: string, name: string, test: () => Promise<any>);
16
+ }
17
+ export declare function test(name: string, test: () => Promise<any>): void;
18
+ export declare function expect(a: any, b: any): void;
19
+ export declare function category(category: string, tests: () => void): void;
20
+ export declare function before(before: () => Promise<void>): void;
21
+ export declare function after(after: () => Promise<void>): void;
22
+ export declare function runTests(): Promise<{
23
+ category?: string | undefined;
24
+ name?: string | undefined;
25
+ success: boolean;
26
+ result: string;
27
+ }[]>;
28
+ export declare function delay(ms: number): Promise<void>;
29
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"AACA,eAAO,IAAI,KAAK,EAAE;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG;QAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAC,CAAA;CAAM,CAAC;AAEjK,eAAO,IAAI,eAAe,EAAE,MAAM,CAAC;AAEnC,qBAAa,IAAI;IACf,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;gBAEL,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC;CAKrE;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAMjE;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,QAGpC;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI,CAGlE;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAIxD;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAItD;AAGD,wBAAsB,QAAQ;;;aAC8B,OAAO;YAAU,MAAM;KAqClF;AAED,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,iBAErC"}
package/src/test.js ADDED
@@ -0,0 +1,92 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ export let tests = {};
11
+ export let currentCategory;
12
+ export class Test {
13
+ constructor(category, name, test) {
14
+ this.category = category;
15
+ this.name = name;
16
+ this.test = test;
17
+ }
18
+ }
19
+ export function test(name, test) {
20
+ if (tests[currentCategory] == undefined)
21
+ tests[currentCategory] = {};
22
+ if (tests[currentCategory].tests == undefined)
23
+ tests[currentCategory].tests = [];
24
+ tests[currentCategory].tests.push(new Test(currentCategory, name, test));
25
+ }
26
+ export function expect(a, b) {
27
+ if (a != b)
28
+ throw `Value "${a}" is not equal. Expected "${b}"`;
29
+ }
30
+ export function category(category, tests) {
31
+ currentCategory = category;
32
+ tests();
33
+ }
34
+ export function before(before) {
35
+ if (tests[currentCategory] == undefined)
36
+ tests[currentCategory] = {};
37
+ tests[currentCategory].before = before;
38
+ }
39
+ export function after(after) {
40
+ if (tests[currentCategory] == undefined)
41
+ tests[currentCategory] = {};
42
+ tests[currentCategory].after = after;
43
+ }
44
+ export function runTests() {
45
+ var _a;
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ let results = [];
48
+ for (const [key, value] of Object.entries(tests)) {
49
+ try {
50
+ if (value.before)
51
+ yield value.before();
52
+ }
53
+ catch (x) {
54
+ value.beforeStatus = x.toString();
55
+ }
56
+ let t = (_a = value.tests) !== null && _a !== void 0 ? _a : [];
57
+ let res = t.map((t) => __awaiter(this, void 0, void 0, function* () {
58
+ var _b;
59
+ let r;
60
+ try {
61
+ r = { success: true, result: (_b = yield t.test()) !== null && _b !== void 0 ? _b : 'OK' };
62
+ }
63
+ catch (x) {
64
+ r = { success: false, result: x.toString() };
65
+ }
66
+ r.category = t.category;
67
+ r.name = t.name;
68
+ return r;
69
+ }));
70
+ let data = yield Promise.all(res);
71
+ try {
72
+ if (value.after)
73
+ yield value.after();
74
+ }
75
+ catch (x) {
76
+ value.afterStatus = x.toString();
77
+ }
78
+ if (value.afterStatus)
79
+ data.push({ category: key, name: 'init', result: value.afterStatus, success: false });
80
+ if (value.beforeStatus)
81
+ data.push({ category: key, name: 'init', result: value.beforeStatus, success: false });
82
+ results.push(...data);
83
+ }
84
+ return results;
85
+ });
86
+ }
87
+ export function delay(ms) {
88
+ return __awaiter(this, void 0, void 0, function* () {
89
+ yield new Promise(r => setTimeout(r, ms));
90
+ });
91
+ }
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0EsTUFBTSxDQUFDLElBQUksS0FBSyxHQUE4SSxFQUFFLENBQUM7QUFFakssTUFBTSxDQUFDLElBQUksZUFBdUIsQ0FBQztBQUVuQyxNQUFNLE9BQU8sSUFBSTtJQUtmLFlBQVksUUFBZ0IsRUFBRSxJQUFZLEVBQUUsSUFBd0I7UUFDbEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFZLEVBQUUsSUFBd0I7SUFDekQsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksU0FBUztRQUNyQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzlCLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssSUFBSSxTQUFTO1FBQzNDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ3BDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxDQUFNLEVBQUUsQ0FBTTtJQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ1IsTUFBTSxVQUFVLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLFFBQWdCLEVBQUUsS0FBaUI7SUFDMUQsZUFBZSxHQUFHLFFBQVEsQ0FBQztJQUMzQixLQUFLLEVBQUUs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QUFDLEVBQVU7O1FBQ3BDLE1BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiXG5leHBvcnQgbGV0IHRlc3RzOiB7W2tleTogc3RyaW5nXToge3Rlc3RzPzogVGVzdFtdLCBiZWZvcmU/OiAoKSA9PiBQcm9taXNlPHZvaWQ+LCBhZnRlcj86ICgpID0+IFByb21pc2U8dm9pZD4sIGJlZm9yZVN0YXR1cz86IHN0cmluZywgYWZ0ZXJTdGF0dXM/OiBzdHJpbmd9fSA9IHt9O1xuXG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTogc3RyaW5nO1xuXG5leHBvcnQgY2xhc3MgVGVzdCB7XG4gIHRlc3Q6ICgpID0+IFByb21pc2U8YW55PjtcbiAgbmFtZTogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+KSB7XG4gICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy50ZXN0ID0gdGVzdDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdChuYW1lOiBzdHJpbmcsIHRlc3Q6ICgpID0+IFByb21pc2U8YW55Pik6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9IFtdO1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzIS5wdXNoKG5ldyBUZXN0KGN1cnJlbnRDYXRlZ29yeSwgbmFtZSAsIHRlc3QpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdChhOiBhbnksIGI6IGFueSkge1xuICBpZiAoYSAhPSBiKVxuICAgIHRocm93IGBWYWx1ZSBcIiR7YX1cIiBpcyBub3QgZXF1YWwuIEV4cGVjdGVkIFwiJHtifVwiYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcsIHRlc3RzOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gIGN1cnJlbnRDYXRlZ29yeSA9IGNhdGVnb3J5O1xuICB0ZXN0cygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlKGJlZm9yZTogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlZm9yZSA9IGJlZm9yZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyKGFmdGVyOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYWZ0ZXIgPSBhZnRlcjtcbn1cblxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdHMoKSB7XG4gIGxldCByZXN1bHRzOiB7IGNhdGVnb3J5Pzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZ31bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3RzKSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodmFsdWUuYmVmb3JlKVxuICAgICAgICBhd2FpdCB2YWx1ZS5iZWZvcmUoKTtcbiAgICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICAgIHZhbHVlLmJlZm9yZVN0YXR1cyA9IHgudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgbGV0IHQgPSB2YWx1ZS50ZXN0cyA/PyBbXTtcbiAgICBsZXQgcmVzID0gdC5tYXAoYXN5bmMgKHQpID0+IHtcbiAgICAgIGxldCByOiB7IGNhdGVnb3J5Pzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZyB9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgciA9IHtzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IGF3YWl0IHQudGVzdCgpID8/ICdPSyd9O1xuICAgICAgfSBjYXRjaCAoeDogYW55KSB7XG4gICAgICAgIHIgPSB7c3VjY2VzczogZmFsc2UsIHJlc3VsdDogeC50b1N0cmluZygpfTtcbiAgICAgIH1cbiAgICAgIHIuY2F0ZWdvcnkgPSB0LmNhdGVnb3J5O1xuICAgICAgci5uYW1lID0gdC5uYW1lO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG5cbiAgICBsZXQgZGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKHJlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh2YWx1ZS5hZnRlcilcbiAgICAgICAgYXdhaXQgdmFsdWUuYWZ0ZXIoKTtcbiAgICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpXG4gICAgICBkYXRhLnB1c2goe2NhdGVnb3J5OiBrZXksIG5hbWU6ICdpbml0JywgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cywgc3VjY2VzczogZmFsc2V9KTtcbiAgICBpZiAodmFsdWUuYmVmb3JlU3RhdHVzKVxuICAgICAgZGF0YS5wdXNoKHtjYXRlZ29yeToga2V5LCBuYW1lOiAnaW5pdCcsIHJlc3VsdDogdmFsdWUuYmVmb3JlU3RhdHVzLCBzdWNjZXNzOiBmYWxzZX0pO1xuICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcikge1xuICBhd2FpdCAgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG59XG4iXX0=
package/tsconfig.json CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  /* Basic Options */
6
6
  // "incremental": true, /* Enable incremental compilation */
7
- "target": "es2018", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
7
+ "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
8
8
  "module": "es2020", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
9
9
  "lib": ["es2020", "dom"], /* Specify library files to be included in the compilation. */
10
10
  // "allowJs": true, /* Allow javascript files to be compiled. */
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["test-utils.ts"],"names":[],"mappings":"AAOA,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,gBAOtD;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAIzD;AAaD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAC,CAkBrE;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAC,CAAC,CA8BvF"}
package/src/test-utils.js DELETED
@@ -1,81 +0,0 @@
1
- import * as path from "path";
2
- import * as os from "os";
3
- import * as fs from "fs";
4
- // @ts-ignore
5
- import * as yaml from 'js-yaml';
6
- const fetch = require('node-fetch');
7
- export async function getToken(url, key) {
8
- let response = await fetch(`${url}/users/login/dev/${key}`, { method: 'POST' });
9
- let json = await response.json();
10
- if (json.isSuccess == true)
11
- return json.token;
12
- else
13
- throw 'Unable to login to server. Check your dev key';
14
- }
15
- export async function getWebUrl(url, token) {
16
- let response = await fetch(`${url}/admin/plugins/admin/settings`, { headers: { Authorization: token } });
17
- let json = await response.json();
18
- return json.settings.webRoot;
19
- }
20
- const grokDir = path.join(os.homedir(), '.grok');
21
- const confPath = path.join(grokDir, 'config.yaml');
22
- function mapURL(conf) {
23
- let urls = {};
24
- for (let server in conf.servers) {
25
- urls[conf['servers'][server]['url']] = conf['servers'][server];
26
- }
27
- return urls;
28
- }
29
- export function getDevKey(hostKey) {
30
- let config = yaml.load(fs.readFileSync(confPath, 'utf8'));
31
- let host = hostKey == '' ? config.default : hostKey;
32
- host = host.trim();
33
- let urls = mapURL(config);
34
- let key = '';
35
- let url = '';
36
- try {
37
- let url = new URL(host).href;
38
- if (url.endsWith('/'))
39
- url = url.slice(0, -1);
40
- if (url in urls)
41
- key = config['servers'][urls[url]]['key'];
42
- }
43
- catch (error) {
44
- if (config['servers'][host] == null)
45
- throw `Unknown server alias. Please add it to ${confPath}`;
46
- url = config['servers'][host]['url'];
47
- key = config['servers'][host]['key'];
48
- }
49
- return { url, key };
50
- }
51
- export async function getBrowserPage(puppeteer) {
52
- var _a;
53
- let url = (_a = process.env.HOST) !== null && _a !== void 0 ? _a : '';
54
- let cfg = getDevKey(url);
55
- url = cfg.url;
56
- let key = cfg.key;
57
- let token = await getToken(url, key);
58
- url = await getWebUrl(url, token);
59
- console.log(`Using web root: ${url}`);
60
- let browser = await puppeteer.launch({
61
- args: ['--disable-dev-shm-usage', '--disable-features=site-per-process'],
62
- ignoreHTTPSErrors: true,
63
- });
64
- let page = await browser.newPage();
65
- await page.goto(`${url}/oauth/`);
66
- await page.setCookie({ name: 'auth', value: token });
67
- await page.evaluate((token) => {
68
- window.localStorage.setItem('auth', token);
69
- }, token);
70
- await page.goto(url);
71
- try {
72
- await page.waitForSelector('.grok-preloader');
73
- console.log('got preloader');
74
- await page.waitForFunction(() => document.querySelector('.grok-preloader') == null, { timeout: 100000 });
75
- }
76
- catch (error) {
77
- throw error;
78
- }
79
- return { browser, page };
80
- }
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsYUFBYTtBQUNiLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUVwQyxNQUFNLENBQUMsS0FBSyxVQUFVLFFBQVEsQ0FBQyxHQUFXLEVBQUUsR0FBVztJQUNyRCxJQUFJLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsb0JBQW9CLEdBQUcsRUFBRSxFQUFFLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7SUFDOUUsSUFBSSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUk7UUFDeEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDOztRQUVsQixNQUFNLCtDQUErQyxDQUFDO0FBQzFELENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLFNBQVMsQ0FBQyxHQUFXLEVBQUUsS0FBYTtJQUN4RCxJQUFJLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsK0JBQStCLEVBQUUsRUFBQyxPQUFPLEVBQUUsRUFBQyxhQUFhLEVBQUUsS0FBSyxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQ3JHLElBQUksSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sT0FBTyxHQUFHLElBQUks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QUMseUJBQXlCLEVBQUUscUNBQXFDLENBQUM7UUFDeEUsaUJBQWlCLEVBQUUsSUFBSTtLQUN4QixDQUFDLENBQUM7SUFFSCxJQUFJLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7SUFDbkQsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7UUFDakMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNWLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQixJQUFJO1FBQ0YsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3QixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO0tBQ3hHO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxNQUFNLEtBQUssQ0FBQztLQUNiO0lBQ0QsT0FBTyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5jb25zdCBmZXRjaCA9IHJlcXVpcmUoJ25vZGUtZmV0Y2gnKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFRva2VuKHVybDogc3RyaW5nLCBrZXk6IHN0cmluZykge1xuICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt1cmx9L3VzZXJzL2xvZ2luL2Rldi8ke2tleX1gLCB7bWV0aG9kOiAnUE9TVCd9KTtcbiAgbGV0IGpzb24gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gIGlmIChqc29uLmlzU3VjY2VzcyA9PSB0cnVlKVxuICAgIHJldHVybiBqc29uLnRva2VuO1xuICBlbHNlXG4gICAgdGhyb3cgJ1VuYWJsZSB0byBsb2dpbiB0byBzZXJ2ZXIuIENoZWNrIHlvdXIgZGV2IGtleSc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRXZWJVcmwodXJsOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpIHtcbiAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dXJsfS9hZG1pbi9wbHVnaW5zL2FkbWluL3NldHRpbmdzYCwge2hlYWRlcnM6IHtBdXRob3JpemF0aW9uOiB0b2tlbn19KTtcbiAgbGV0IGpzb24gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gIHJldHVybiBqc29uLnNldHRpbmdzLndlYlJvb3Q7XG59XG5cbmNvbnN0IGdyb2tEaXIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLmdyb2snKTtcbmNvbnN0IGNvbmZQYXRoID0gcGF0aC5qb2luKGdyb2tEaXIsICdjb25maWcueWFtbCcpO1xuXG5mdW5jdGlvbiBtYXBVUkwoY29uZjogQ29uZmlnKTogSW5kZXhhYmxlIHtcbiAgbGV0IHVybHM6IEluZGV4YWJsZSA9IHt9O1xuICBmb3IgKGxldCBzZXJ2ZXIgaW4gY29uZi5zZXJ2ZXJzKSB7XG4gICAgdXJsc1tjb25mWydzZXJ2ZXJzJ11bc2VydmVyXVsndXJsJ11dID0gY29uZlsnc2VydmVycyddW3NlcnZlcl07XG4gIH1cbiAgcmV0dXJuIHVybHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZLZXkoaG9zdEtleTogc3RyaW5nKToge3VybDogc3RyaW5nLCBrZXk6IHN0cmluZ30ge1xuICBsZXQgY29uZmlnID0geWFtbC5sb2FkKGZzLnJlYWRGaWxlU3luYyhjb25mUGF0aCwgJ3V0ZjgnKSkgYXMgYW55O1xuICBsZXQgaG9zdCA9IGhvc3RLZXkgPT0gJycgPyBjb25maWcuZGVmYXVsdCA6IGhvc3RLZXk7XG4gIGhvc3QgPSBob3N0LnRyaW0oKTtcbiAgbGV0IHVybHMgPSBtYXBVUkwoY29uZmlnKTtcbiAgbGV0IGtleSA9ICcnO1xuICBsZXQgdXJsID0gJyc7XG4gIHRyeSB7XG4gICAgbGV0IHVybCA9IG5ldyBVUkwoaG9zdCkuaHJlZjtcbiAgICBpZiAodXJsLmVuZHNXaXRoKCcvJykpIHVybCA9IHVybC5zbGljZSgwLCAtMSk7XG4gICAgaWYgKHVybCBpbiB1cmxzKSBrZXkgPSBjb25maWdbJ3NlcnZlcnMnXVt1cmxzW3VybF1dWydrZXknXTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoY29uZmlnWydzZXJ2ZXJzJ11baG9zdF0gPT0gbnVsbClcbiAgICAgIHRocm93IGBVbmtub3duIHNlcnZlciBhbGlhcy4gUGxlYXNlIGFkZCBpdCB0byAke2NvbmZQYXRofWA7XG4gICAgdXJsID0gY29uZmlnWydzZXJ2ZXJzJ11baG9zdF1bJ3VybCddO1xuICAgIGtleSA9IGNvbmZpZ1snc2VydmVycyddW2hvc3RdWydrZXknXTtcbiAgfVxuICByZXR1cm4ge3VybCwga2V5fTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJyb3dzZXJQYWdlKHB1cHBldGVlcjogYW55KTogUHJvbWlzZTx7YnJvd3NlcjogYW55LCBwYWdlOiBhbnl9PiB7XG4gIGxldCB1cmw6c3RyaW5nID0gcHJvY2Vzcy5lbnYuSE9TVCA/PyAnJztcbiAgbGV0IGNmZyA9IGdldERldktleSh1cmwpO1xuICB1cmwgPSBjZmcudXJsO1xuXG4gIGxldCBrZXkgPSBjZmcua2V5O1xuICBsZXQgdG9rZW4gPSBhd2FpdCBnZXRUb2tlbih1cmwsIGtleSk7XG4gIHVybCA9IGF3YWl0IGdldFdlYlVybCh1cmwsIHRva2VuKTtcbiAgY29uc29sZS5sb2coYFVzaW5nIHdlYiByb290OiAke3VybH1gKTtcblxuICBsZXQgYnJvd3NlciA9IGF3YWl0IHB1cHBldGVlci5sYXVuY2goe1xuICAgIGFyZ3M6IFsnLS1kaXNhYmxlLWRldi1zaG0tdXNhZ2UnLCAnLS1kaXNhYmxlLWZlYXR1cmVzPXNpdGUtcGVyLXByb2Nlc3MnXSxcbiAgICBpZ25vcmVIVFRQU0Vycm9yczogdHJ1ZSxcbiAgfSk7XG5cbiAgbGV0IHBhZ2UgPSBhd2FpdCBicm93c2VyLm5ld1BhZ2UoKTtcbiAgYXdhaXQgcGFnZS5nb3RvKGAke3VybH0vb2F1dGgvYCk7XG4gIGF3YWl0IHBhZ2Uuc2V0Q29va2llKHtuYW1lOiAnYXV0aCcsIHZhbHVlOiB0b2tlbn0pO1xuICBhd2FpdCBwYWdlLmV2YWx1YXRlKCh0b2tlbjogYW55KSA9PiB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhdXRoJywgdG9rZW4pO1xuICB9LCB0b2tlbik7XG4gIGF3YWl0IHBhZ2UuZ290byh1cmwpO1xuICB0cnkge1xuICAgIGF3YWl0IHBhZ2Uud2FpdEZvclNlbGVjdG9yKCcuZ3Jvay1wcmVsb2FkZXInKTtcbiAgICBjb25zb2xlLmxvZygnZ290IHByZWxvYWRlcicpO1xuICAgIGF3YWl0IHBhZ2Uud2FpdEZvckZ1bmN0aW9uKCgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ncm9rLXByZWxvYWRlcicpID09IG51bGwsIHt0aW1lb3V0OiAxMDAwMDB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICByZXR1cm4ge2Jyb3dzZXIsIHBhZ2V9O1xufVxuXG5cbmludGVyZmFjZSBDb25maWcge1xuICBzZXJ2ZXJzOiB7XG4gICAgW2FsaWFzOiBzdHJpbmddOiB7XG4gICAgICB1cmw6IHN0cmluZyxcbiAgICAgIGtleTogc3RyaW5nXG4gICAgfVxuICB9LFxuICBkZWZhdWx0OiBzdHJpbmcsXG59XG5cbmludGVyZmFjZSBJbmRleGFibGUgeyBba2V5OiBzdHJpbmddOiBhbnkgfVxuIl19