datagrok-tools 4.7.0 → 4.7.1
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-template/src/__jest__ → __jest__}/remote.test.ts +13 -6
- package/bin/commands/create.js +1 -16
- package/bin/commands/test.js +16 -6
- package/bin/utils/test-utils.js +242 -0
- package/entity-template/connection.json +1 -1
- package/{package-template/jest.config.js → jest.config.js} +0 -3
- package/package.json +9 -3
- package/package-template/src/__jest__/test-node.ts +0 -97
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @jest-environment jsdom
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import * as utils from '
|
|
5
|
+
import * as utils from '../bin/utils/test-utils';
|
|
6
6
|
import puppeteer from 'puppeteer';
|
|
7
7
|
|
|
8
8
|
const P_START_TIMEOUT: number = 3600000;
|
|
@@ -16,7 +16,7 @@ beforeAll(async () => {
|
|
|
16
16
|
}, P_START_TIMEOUT);
|
|
17
17
|
|
|
18
18
|
afterAll(async () => {
|
|
19
|
-
await browser
|
|
19
|
+
await browser?.close();
|
|
20
20
|
});
|
|
21
21
|
|
|
22
22
|
expect.extend({
|
|
@@ -42,16 +42,23 @@ it('TEST', async () => {
|
|
|
42
42
|
let r = await page.evaluate((targetPackage):Promise<object> => {
|
|
43
43
|
return new Promise<object>((resolve, reject) => {
|
|
44
44
|
(<any>window).grok.functions.eval(targetPackage + ':test()').then((df: any) => {
|
|
45
|
+
let failed = false;
|
|
46
|
+
let skipReport = '';
|
|
47
|
+
let passReport = '';
|
|
48
|
+
let failReport = '';
|
|
49
|
+
|
|
50
|
+
if (df == null) {
|
|
51
|
+
failed = true;
|
|
52
|
+
failReport = 'Fail reason: No package tests found';
|
|
53
|
+
resolve({failReport, skipReport, passReport, failed});
|
|
54
|
+
}
|
|
55
|
+
|
|
45
56
|
const cStatus = df.columns.byName('success');
|
|
46
57
|
const cSkipped = df.columns.byName('skipped');
|
|
47
58
|
const cMessage = df.columns.byName('result');
|
|
48
59
|
const cCat = df.columns.byName('category');
|
|
49
60
|
const cName = df.columns.byName('name');
|
|
50
61
|
const cTime = df.columns.byName('ms');
|
|
51
|
-
let failed = false;
|
|
52
|
-
let skipReport = '';
|
|
53
|
-
let passReport = '';
|
|
54
|
-
let failReport = '';
|
|
55
62
|
for (let i = 0; i < df.rowCount; i++) {
|
|
56
63
|
if (cStatus.get(i)) {
|
|
57
64
|
if (cSkipped.get(i)) {
|
package/bin/commands/create.js
CHANGED
|
@@ -118,20 +118,8 @@ function createDirectoryContents(name, config, templateDir, packageDir) {
|
|
|
118
118
|
Object.assign(_package.dependencies, {
|
|
119
119
|
'@datagrok-libraries/utils': 'latest'
|
|
120
120
|
});
|
|
121
|
-
Object.assign(_package.devDependencies, {
|
|
122
|
-
'jest-html-reporter': '^3.5.0',
|
|
123
|
-
'jest': '^27.0.0',
|
|
124
|
-
'@types/jest': '^27.0.0',
|
|
125
|
-
'js-yaml': '^4.1.0',
|
|
126
|
-
'@types/js-yaml': "^4.0.5",
|
|
127
|
-
'@types/node-fetch': '^2.6.2',
|
|
128
|
-
'node-fetch': '^2.6.7'
|
|
129
|
-
}, ts ? {
|
|
130
|
-
'ts-jest': '^27.0.0',
|
|
131
|
-
'puppeteer': '^13.7.0'
|
|
132
|
-
} : {});
|
|
133
121
|
Object.assign(_package.scripts, {
|
|
134
|
-
'test': '
|
|
122
|
+
'test': 'grok test'
|
|
135
123
|
});
|
|
136
124
|
} // Save module names for installation prompt
|
|
137
125
|
|
|
@@ -152,9 +140,6 @@ function createDirectoryContents(name, config, templateDir, packageDir) {
|
|
|
152
140
|
if (file === 'package-test.ts' && !ts) return false;
|
|
153
141
|
if (file === 'tsconfig.json' && !ts) return false;
|
|
154
142
|
if (file === 'ts.webpack.config.js') return false;
|
|
155
|
-
if (file === 'remote.test.ts' && (!ts || !jest)) return false;
|
|
156
|
-
if (file === 'test-node.ts' && (!ts || !jest)) return false;
|
|
157
|
-
if (file === 'jest.config.js' && !jest) return false;
|
|
158
143
|
|
|
159
144
|
if (file === '.eslintrc.json') {
|
|
160
145
|
if (!eslint) return false;
|
package/bin/commands/test.js
CHANGED
|
@@ -71,6 +71,7 @@ function test(args) {
|
|
|
71
71
|
var fullName = packageData.friendlyName || packageData.fullName;
|
|
72
72
|
|
|
73
73
|
if (fullName) {
|
|
74
|
+
fullName = utils.kebabToCamelCase(fullName);
|
|
74
75
|
process.env.TARGET_PACKAGE = fullName;
|
|
75
76
|
console.log('Environment variable `TARGET_PACKAGE` is set to', process.env.TARGET_PACKAGE);
|
|
76
77
|
} else {
|
|
@@ -78,18 +79,27 @@ function test(args) {
|
|
|
78
79
|
return false;
|
|
79
80
|
}
|
|
80
81
|
|
|
81
|
-
color.info("
|
|
82
|
-
(0, _child_process.exec)(
|
|
82
|
+
color.info("Building package...");
|
|
83
|
+
(0, _child_process.exec)('npm run build', function (err, stdout, stderr) {
|
|
83
84
|
if (err) throw err;else {
|
|
84
85
|
console.log(stdout);
|
|
85
|
-
color.
|
|
86
|
+
color.warn(stderr);
|
|
86
87
|
}
|
|
87
|
-
color.info(
|
|
88
|
-
(0, _child_process.exec)('
|
|
88
|
+
color.info("Publishing package \"".concat(process.env.TARGET_PACKAGE, "\" to ").concat(process.env.HOST, "..."));
|
|
89
|
+
(0, _child_process.exec)("grok publish ".concat(process.platform === 'win32' ? '%HOST%' : '${HOST}'), function (err, stdout, stderr) {
|
|
89
90
|
if (err) throw err;else {
|
|
90
91
|
console.log(stdout);
|
|
91
|
-
|
|
92
|
+
color.warn(stderr);
|
|
92
93
|
}
|
|
94
|
+
color.info('Starting tests...');
|
|
95
|
+
(0, _child_process.exec)('npm run test', {
|
|
96
|
+
cwd: _path["default"].dirname(_path["default"].dirname(__dirname))
|
|
97
|
+
}, function (err, stdout, stderr) {
|
|
98
|
+
if (err) throw err;else {
|
|
99
|
+
console.log(stdout);
|
|
100
|
+
console.log(stderr);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
93
103
|
});
|
|
94
104
|
});
|
|
95
105
|
return true;
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.getBrowserPage = getBrowserPage;
|
|
11
|
+
exports.getDevKey = getDevKey;
|
|
12
|
+
exports.getToken = getToken;
|
|
13
|
+
exports.getWebUrl = getWebUrl;
|
|
14
|
+
|
|
15
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
16
|
+
|
|
17
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
18
|
+
|
|
19
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
20
|
+
|
|
21
|
+
var _os = _interopRequireDefault(require("os"));
|
|
22
|
+
|
|
23
|
+
var _path = _interopRequireDefault(require("path"));
|
|
24
|
+
|
|
25
|
+
var _jsYaml = _interopRequireDefault(require("js-yaml"));
|
|
26
|
+
|
|
27
|
+
var utils = _interopRequireWildcard(require("../utils/utils"));
|
|
28
|
+
|
|
29
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
30
|
+
|
|
31
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
32
|
+
|
|
33
|
+
var fetch = require('node-fetch');
|
|
34
|
+
|
|
35
|
+
var grokDir = _path["default"].join(_os["default"].homedir(), '.grok');
|
|
36
|
+
|
|
37
|
+
var confPath = _path["default"].join(grokDir, 'config.yaml');
|
|
38
|
+
|
|
39
|
+
function getToken(_x, _x2) {
|
|
40
|
+
return _getToken.apply(this, arguments);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function _getToken() {
|
|
44
|
+
_getToken = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(url, key) {
|
|
45
|
+
var response, json;
|
|
46
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
47
|
+
while (1) {
|
|
48
|
+
switch (_context.prev = _context.next) {
|
|
49
|
+
case 0:
|
|
50
|
+
_context.next = 2;
|
|
51
|
+
return fetch("".concat(url, "/users/login/dev/").concat(key), {
|
|
52
|
+
method: 'POST'
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
case 2:
|
|
56
|
+
response = _context.sent;
|
|
57
|
+
_context.next = 5;
|
|
58
|
+
return response.json();
|
|
59
|
+
|
|
60
|
+
case 5:
|
|
61
|
+
json = _context.sent;
|
|
62
|
+
|
|
63
|
+
if (!(json.isSuccess == true)) {
|
|
64
|
+
_context.next = 10;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return _context.abrupt("return", json.token);
|
|
69
|
+
|
|
70
|
+
case 10:
|
|
71
|
+
throw 'Unable to login to server. Check your dev key';
|
|
72
|
+
|
|
73
|
+
case 11:
|
|
74
|
+
case "end":
|
|
75
|
+
return _context.stop();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}, _callee);
|
|
79
|
+
}));
|
|
80
|
+
return _getToken.apply(this, arguments);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function getWebUrl(_x3, _x4) {
|
|
84
|
+
return _getWebUrl.apply(this, arguments);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function _getWebUrl() {
|
|
88
|
+
_getWebUrl = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(url, token) {
|
|
89
|
+
var response, json;
|
|
90
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
91
|
+
while (1) {
|
|
92
|
+
switch (_context2.prev = _context2.next) {
|
|
93
|
+
case 0:
|
|
94
|
+
_context2.next = 2;
|
|
95
|
+
return fetch("".concat(url, "/admin/plugins/admin/settings"), {
|
|
96
|
+
headers: {
|
|
97
|
+
Authorization: token
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
case 2:
|
|
102
|
+
response = _context2.sent;
|
|
103
|
+
_context2.next = 5;
|
|
104
|
+
return response.json();
|
|
105
|
+
|
|
106
|
+
case 5:
|
|
107
|
+
json = _context2.sent;
|
|
108
|
+
return _context2.abrupt("return", json.settings.webRoot);
|
|
109
|
+
|
|
110
|
+
case 7:
|
|
111
|
+
case "end":
|
|
112
|
+
return _context2.stop();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}, _callee2);
|
|
116
|
+
}));
|
|
117
|
+
return _getWebUrl.apply(this, arguments);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function getDevKey(hostKey) {
|
|
121
|
+
var config = _jsYaml["default"].load(_fs["default"].readFileSync(confPath, 'utf8'));
|
|
122
|
+
|
|
123
|
+
var host = hostKey == '' ? config["default"] : hostKey;
|
|
124
|
+
host = host.trim();
|
|
125
|
+
var urls = utils.mapURL(config);
|
|
126
|
+
var key = '';
|
|
127
|
+
var url = '';
|
|
128
|
+
|
|
129
|
+
try {
|
|
130
|
+
var _url = new URL(host).href;
|
|
131
|
+
if (_url.endsWith('/')) _url = _url.slice(0, -1);
|
|
132
|
+
if (_url in urls) key = config['servers'][urls[_url]]['key'];
|
|
133
|
+
} catch (error) {
|
|
134
|
+
if (config['servers'][host] == null) throw "Unknown server alias. Please add it to ".concat(confPath);
|
|
135
|
+
url = config['servers'][host]['url'];
|
|
136
|
+
key = config['servers'][host]['key'];
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return {
|
|
140
|
+
url: url,
|
|
141
|
+
key: key
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function getBrowserPage(_x5) {
|
|
146
|
+
return _getBrowserPage.apply(this, arguments);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function _getBrowserPage() {
|
|
150
|
+
_getBrowserPage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(puppeteer) {
|
|
151
|
+
var _process$env$HOST;
|
|
152
|
+
|
|
153
|
+
var url, cfg, key, token, browser, page;
|
|
154
|
+
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
155
|
+
while (1) {
|
|
156
|
+
switch (_context3.prev = _context3.next) {
|
|
157
|
+
case 0:
|
|
158
|
+
url = (_process$env$HOST = process.env.HOST) !== null && _process$env$HOST !== void 0 ? _process$env$HOST : '';
|
|
159
|
+
cfg = getDevKey(url);
|
|
160
|
+
url = cfg.url;
|
|
161
|
+
key = cfg.key;
|
|
162
|
+
_context3.next = 6;
|
|
163
|
+
return getToken(url, key);
|
|
164
|
+
|
|
165
|
+
case 6:
|
|
166
|
+
token = _context3.sent;
|
|
167
|
+
_context3.next = 9;
|
|
168
|
+
return getWebUrl(url, token);
|
|
169
|
+
|
|
170
|
+
case 9:
|
|
171
|
+
url = _context3.sent;
|
|
172
|
+
console.log("Using web root: ".concat(url));
|
|
173
|
+
_context3.next = 13;
|
|
174
|
+
return puppeteer.launch({
|
|
175
|
+
args: ['--disable-dev-shm-usage', '--disable-features=site-per-process'],
|
|
176
|
+
ignoreHTTPSErrors: true
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
case 13:
|
|
180
|
+
browser = _context3.sent;
|
|
181
|
+
_context3.next = 16;
|
|
182
|
+
return browser.newPage();
|
|
183
|
+
|
|
184
|
+
case 16:
|
|
185
|
+
page = _context3.sent;
|
|
186
|
+
_context3.next = 19;
|
|
187
|
+
return page.setDefaultNavigationTimeout(0);
|
|
188
|
+
|
|
189
|
+
case 19:
|
|
190
|
+
_context3.next = 21;
|
|
191
|
+
return page["goto"]("".concat(url, "/oauth/"));
|
|
192
|
+
|
|
193
|
+
case 21:
|
|
194
|
+
_context3.next = 23;
|
|
195
|
+
return page.setCookie({
|
|
196
|
+
name: 'auth',
|
|
197
|
+
value: token
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
case 23:
|
|
201
|
+
_context3.next = 25;
|
|
202
|
+
return page.evaluate(function (token) {
|
|
203
|
+
window.localStorage.setItem('auth', token);
|
|
204
|
+
}, token);
|
|
205
|
+
|
|
206
|
+
case 25:
|
|
207
|
+
_context3.next = 27;
|
|
208
|
+
return page["goto"](url);
|
|
209
|
+
|
|
210
|
+
case 27:
|
|
211
|
+
_context3.prev = 27;
|
|
212
|
+
_context3.next = 30;
|
|
213
|
+
return page.waitForFunction(function () {
|
|
214
|
+
return document.querySelector('.grok-preloader') == null;
|
|
215
|
+
}, {
|
|
216
|
+
timeout: 3600000
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
case 30:
|
|
220
|
+
_context3.next = 35;
|
|
221
|
+
break;
|
|
222
|
+
|
|
223
|
+
case 32:
|
|
224
|
+
_context3.prev = 32;
|
|
225
|
+
_context3.t0 = _context3["catch"](27);
|
|
226
|
+
throw _context3.t0;
|
|
227
|
+
|
|
228
|
+
case 35:
|
|
229
|
+
return _context3.abrupt("return", {
|
|
230
|
+
browser: browser,
|
|
231
|
+
page: page
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
case 36:
|
|
235
|
+
case "end":
|
|
236
|
+
return _context3.stop();
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}, _callee3, null, [[27, 32]]);
|
|
240
|
+
}));
|
|
241
|
+
return _getBrowserPage.apply(this, arguments);
|
|
242
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "datagrok-tools",
|
|
3
|
-
"version": "4.7.
|
|
3
|
+
"version": "4.7.1",
|
|
4
4
|
"description": "Utility to upload and publish packages to Datagrok",
|
|
5
5
|
"homepage": "https://github.com/datagrok-ai/public/tree/master/tools#readme",
|
|
6
6
|
"dependencies": {
|
|
@@ -10,17 +10,22 @@
|
|
|
10
10
|
"fs": "latest",
|
|
11
11
|
"ignore-walk": "^3.0.3",
|
|
12
12
|
"inquirer": "^7.1.0",
|
|
13
|
+
"jest": "^27.0.0",
|
|
14
|
+
"jest-html-reporter": "^3.5.0",
|
|
13
15
|
"js-yaml": "^4.1.0",
|
|
14
16
|
"minimist": "^1.2.5",
|
|
15
17
|
"node-fetch": "^2.6.0",
|
|
16
18
|
"node-recursive-directory": "^1.2.0",
|
|
17
19
|
"os": "^0.1.1",
|
|
18
|
-
"path": "^0.12.7"
|
|
20
|
+
"path": "^0.12.7",
|
|
21
|
+
"puppeteer": "^13.7.0",
|
|
22
|
+
"ts-jest": "^27.0.0"
|
|
19
23
|
},
|
|
20
24
|
"scripts": {
|
|
21
25
|
"link": "npm link",
|
|
22
26
|
"prepublishOnly": "babel bin --extensions .ts -d bin",
|
|
23
|
-
"babel": "babel bin --extensions .ts -d bin"
|
|
27
|
+
"babel": "babel bin --extensions .ts -d bin",
|
|
28
|
+
"test": "jest"
|
|
24
29
|
},
|
|
25
30
|
"bin": {
|
|
26
31
|
"datagrok-upload": "./bin/_deprecated/upload.js",
|
|
@@ -43,6 +48,7 @@
|
|
|
43
48
|
"@babel/preset-typescript": "7.15.0",
|
|
44
49
|
"@types/ignore-walk": "^4.0.0",
|
|
45
50
|
"@types/inquirer": "^8.1.3",
|
|
51
|
+
"@types/jest": "^27.0.0",
|
|
46
52
|
"@types/js-yaml": "^4.0.4",
|
|
47
53
|
"@types/node": "^16.11.6",
|
|
48
54
|
"webpack": "^4.43.0",
|
|
@@ -1,97 +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
|
-
|
|
8
|
-
export async function getToken(url: string, key: string) {
|
|
9
|
-
let response = await fetch(`${url}/users/login/dev/${key}`, {method: 'POST'});
|
|
10
|
-
let json = await response.json();
|
|
11
|
-
if (json.isSuccess == true)
|
|
12
|
-
return json.token;
|
|
13
|
-
else
|
|
14
|
-
throw 'Unable to login to server. Check your dev key';
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export async function getWebUrl(url: string, token: string) {
|
|
18
|
-
let response = await fetch(`${url}/admin/plugins/admin/settings`, {headers: {Authorization: token}});
|
|
19
|
-
let json = await response.json();
|
|
20
|
-
return json.settings.webRoot;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const grokDir = path.join(os.homedir(), '.grok');
|
|
24
|
-
const confPath = path.join(grokDir, 'config.yaml');
|
|
25
|
-
|
|
26
|
-
function mapURL(conf: Config): Indexable {
|
|
27
|
-
let urls: Indexable = {};
|
|
28
|
-
for (let server in conf.servers) {
|
|
29
|
-
urls[conf['servers'][server]['url']] = conf['servers'][server];
|
|
30
|
-
}
|
|
31
|
-
return urls;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export function getDevKey(hostKey: string): {url: string, key: string} {
|
|
35
|
-
let config = yaml.load(fs.readFileSync(confPath, 'utf8')) as any;
|
|
36
|
-
let host = hostKey == '' ? config.default : hostKey;
|
|
37
|
-
host = host.trim();
|
|
38
|
-
let urls = mapURL(config);
|
|
39
|
-
let key = '';
|
|
40
|
-
let url = '';
|
|
41
|
-
try {
|
|
42
|
-
let url = new URL(host).href;
|
|
43
|
-
if (url.endsWith('/')) url = url.slice(0, -1);
|
|
44
|
-
if (url in urls) key = config['servers'][urls[url]]['key'];
|
|
45
|
-
} catch (error) {
|
|
46
|
-
if (config['servers'][host] == null)
|
|
47
|
-
throw `Unknown server alias. Please add it to ${confPath}`;
|
|
48
|
-
url = config['servers'][host]['url'];
|
|
49
|
-
key = config['servers'][host]['key'];
|
|
50
|
-
}
|
|
51
|
-
return {url, key};
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export async function getBrowserPage(puppeteer: any): Promise<{browser: any, page: any}> {
|
|
55
|
-
let url:string = process.env.HOST ?? '';
|
|
56
|
-
let cfg = getDevKey(url);
|
|
57
|
-
url = cfg.url;
|
|
58
|
-
|
|
59
|
-
let key = cfg.key;
|
|
60
|
-
let token = await getToken(url, key);
|
|
61
|
-
url = await getWebUrl(url, token);
|
|
62
|
-
console.log(`Using web root: ${url}`);
|
|
63
|
-
|
|
64
|
-
let browser = await puppeteer.launch({
|
|
65
|
-
args: ['--disable-dev-shm-usage', '--disable-features=site-per-process'],
|
|
66
|
-
ignoreHTTPSErrors: true,
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
let page = await browser.newPage();
|
|
70
|
-
await page.setDefaultNavigationTimeout(0);
|
|
71
|
-
await page.goto(`${url}/oauth/`);
|
|
72
|
-
await page.setCookie({name: 'auth', value: token});
|
|
73
|
-
await page.evaluate((token: any) => {
|
|
74
|
-
window.localStorage.setItem('auth', token);
|
|
75
|
-
}, token);
|
|
76
|
-
await page.goto(url);
|
|
77
|
-
try {
|
|
78
|
-
// await page.waitForSelector('.grok-preloader', { timeout: 1800000 });
|
|
79
|
-
await page.waitForFunction(() => document.querySelector('.grok-preloader') == null, {timeout: 3600000});
|
|
80
|
-
} catch (error) {
|
|
81
|
-
throw error;
|
|
82
|
-
}
|
|
83
|
-
return {browser, page};
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
interface Config {
|
|
88
|
-
servers: {
|
|
89
|
-
[alias: string]: {
|
|
90
|
-
url: string,
|
|
91
|
-
key: string
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
default: string,
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
interface Indexable { [key: string]: any }
|