@cloudbase/app 3.0.3 → 3.0.5

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 (54) hide show
  1. package/dist/cjs/index.d.ts +1 -0
  2. package/dist/cjs/index.js +36 -7
  3. package/dist/cjs/libs/adapter-node/constants.d.ts +33 -0
  4. package/dist/cjs/libs/adapter-node/constants.js +38 -0
  5. package/dist/cjs/libs/adapter-node/context.d.ts +13 -0
  6. package/dist/cjs/libs/adapter-node/context.js +162 -0
  7. package/dist/cjs/libs/adapter-node/index.d.ts +23 -0
  8. package/dist/cjs/libs/adapter-node/index.js +124 -0
  9. package/dist/cjs/libs/adapter-node/metadata.d.ts +14 -0
  10. package/dist/cjs/libs/adapter-node/metadata.js +130 -0
  11. package/dist/cjs/libs/adapter-node/request.d.ts +38 -0
  12. package/dist/cjs/libs/adapter-node/request.js +432 -0
  13. package/dist/cjs/libs/adapter-node/tool.d.ts +2 -0
  14. package/dist/cjs/libs/adapter-node/tool.js +227 -0
  15. package/dist/cjs/libs/adapter-node/types.d.ts +78 -0
  16. package/dist/cjs/libs/adapter-node/types.js +3 -0
  17. package/dist/cjs/libs/adapter-node/utils.d.ts +17 -0
  18. package/dist/cjs/libs/adapter-node/utils.js +221 -0
  19. package/dist/cjs/libs/request.d.ts +1 -0
  20. package/dist/cjs/libs/request.js +3 -2
  21. package/dist/esm/index.d.ts +1 -0
  22. package/dist/esm/index.js +36 -7
  23. package/dist/esm/libs/adapter-node/constants.d.ts +33 -0
  24. package/dist/esm/libs/adapter-node/constants.js +35 -0
  25. package/dist/esm/libs/adapter-node/context.d.ts +13 -0
  26. package/dist/esm/libs/adapter-node/context.js +156 -0
  27. package/dist/esm/libs/adapter-node/index.d.ts +23 -0
  28. package/dist/esm/libs/adapter-node/index.js +118 -0
  29. package/dist/esm/libs/adapter-node/metadata.d.ts +14 -0
  30. package/dist/esm/libs/adapter-node/metadata.js +123 -0
  31. package/dist/esm/libs/adapter-node/request.d.ts +38 -0
  32. package/dist/esm/libs/adapter-node/request.js +429 -0
  33. package/dist/esm/libs/adapter-node/tool.d.ts +2 -0
  34. package/dist/esm/libs/adapter-node/tool.js +223 -0
  35. package/dist/esm/libs/adapter-node/types.d.ts +78 -0
  36. package/dist/esm/libs/adapter-node/types.js +2 -0
  37. package/dist/esm/libs/adapter-node/utils.d.ts +17 -0
  38. package/dist/esm/libs/adapter-node/utils.js +205 -0
  39. package/dist/esm/libs/request.d.ts +1 -0
  40. package/dist/esm/libs/request.js +3 -2
  41. package/dist/miniprogram/index.js +1 -1
  42. package/package.json +20 -4
  43. package/src/index.ts +63 -7
  44. package/src/libs/adapter-node/constants.ts +42 -0
  45. package/src/libs/adapter-node/context.ts +238 -0
  46. package/src/libs/adapter-node/index.ts +166 -0
  47. package/src/libs/adapter-node/metadata.ts +69 -0
  48. package/src/libs/adapter-node/request.ts +480 -0
  49. package/src/libs/adapter-node/tool.ts +223 -0
  50. package/src/libs/adapter-node/types.ts +116 -0
  51. package/src/libs/adapter-node/utils.ts +182 -0
  52. package/src/libs/request.ts +4 -2
  53. package/webpack/web.prod.js +13 -13
  54. package/webpack/webpack.miniprogram.js +9 -3
@@ -0,0 +1,429 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import { formatUrl, } from '@cloudbase/adapter-interface';
49
+ import { ADMIN_PATH, CLIENT_AUTH_PATH } from './constants';
50
+ import { getCloudbaseContext, getSecretInfo, INIT_CONFIG } from './context';
51
+ import { getEnv, isFormData, toQueryString, safeParseJson, obj2StrRecord, headersInit2Indexable, getCurrRunEnvTag, } from './utils';
52
+ var signFn = null;
53
+ function getSign() {
54
+ return __awaiter(this, void 0, void 0, function () {
55
+ var mod, e_1;
56
+ return __generator(this, function (_a) {
57
+ switch (_a.label) {
58
+ case 0:
59
+ if (!!signFn) return [3, 4];
60
+ _a.label = 1;
61
+ case 1:
62
+ _a.trys.push([1, 3, , 4]);
63
+ return [4, import('@cloudbase/signature-nodejs')];
64
+ case 2:
65
+ mod = _a.sent();
66
+ signFn = mod.sign;
67
+ return [3, 4];
68
+ case 3:
69
+ e_1 = _a.sent();
70
+ throw new Error('缺少依赖 @cloudbase/signature-nodejs,请执行以下命令安装:\n\n'
71
+ + ' npm install @cloudbase/signature-nodejs\n\n'
72
+ + '该依赖用于 Node 环境下的请求签名。');
73
+ case 4: return [2, signFn];
74
+ }
75
+ });
76
+ });
77
+ }
78
+ var NodeRequest = (function () {
79
+ function NodeRequest(config) {
80
+ var _this = this;
81
+ this.getReqOptions = function (url, options) { return __awaiter(_this, void 0, void 0, function () {
82
+ var urlObj, TCB_SOURCE, SOURCE, _a, _b, isAdminPath, UNSUPPORTED_V3_SIGN_PATH, token, _c, secretId, secretKey, sessionToken, secretType, method, body, headers, params, secretInfo, signedParams, sign, _d, authorization, timestamp;
83
+ var _e, _f, _g, _h, _j, _k, _l;
84
+ return __generator(this, function (_m) {
85
+ switch (_m.label) {
86
+ case 0:
87
+ urlObj = new URL(url);
88
+ TCB_SOURCE = getCloudbaseContext().TCB_SOURCE;
89
+ _b = (_a = "".concat(((_f = (_e = INIT_CONFIG.context) === null || _e === void 0 ? void 0 : _e.extendedContext) === null || _f === void 0 ? void 0 : _f.source) || TCB_SOURCE || '', ",")).concat;
90
+ return [4, getCurrRunEnvTag()];
91
+ case 1:
92
+ SOURCE = _b.apply(_a, [_m.sent()]);
93
+ options.headers = __assign(__assign({}, options.headers), { 'User-Agent': "adapter-node/".concat(((_g = options.headers) === null || _g === void 0 ? void 0 : _g['X-SDK-Version']) || ''), 'X-TCB-Source': SOURCE, 'X-Client-Timestamp': new Date().valueOf(), 'X-TCB-Region': INIT_CONFIG.region || getEnv('TENCENTCLOUD_REGION') || '', Host: urlObj.host });
94
+ if ((_j = (_h = options.headers.Authorization) === null || _h === void 0 ? void 0 : _h.replace('Bearer', '')) === null || _j === void 0 ? void 0 : _j.trim()) {
95
+ return [2, options];
96
+ }
97
+ if (urlObj.pathname.startsWith('/auth/') && urlObj.pathname !== CLIENT_AUTH_PATH) {
98
+ return [2, options];
99
+ }
100
+ isAdminPath = urlObj.pathname === ADMIN_PATH;
101
+ UNSUPPORTED_V3_SIGN_PATH = ['/v1/model/', '/v1/rdb/', '/v1/ai/'];
102
+ if (!UNSUPPORTED_V3_SIGN_PATH.some(function (v) { return urlObj.pathname.startsWith(v); })) return [3, 3];
103
+ return [4, this.getClientCredential({ origin: urlObj.origin })];
104
+ case 2:
105
+ token = _m.sent();
106
+ options.headers.Authorization = "Bearer ".concat(token);
107
+ return [2, options];
108
+ case 3:
109
+ _c = ((_k = this.config) === null || _k === void 0 ? void 0 : _k.auth) || {}, secretId = _c.secretId, secretKey = _c.secretKey, sessionToken = _c.sessionToken;
110
+ secretType = (((_l = this.config) === null || _l === void 0 ? void 0 : _l.auth) || {}).secretType;
111
+ method = options.method, body = options.body;
112
+ headers = JSON.parse(JSON.stringify(options.headers));
113
+ params = typeof body === 'object' ? body : safeParseJson(body) || '';
114
+ if (params.access_token) {
115
+ return [2, options];
116
+ }
117
+ if (method.toLowerCase() === 'get') {
118
+ params = undefined;
119
+ }
120
+ if (!secretId || !secretKey || secretType === 'SESSION_SECRET') {
121
+ secretInfo = getSecretInfo();
122
+ secretId = secretInfo.secretId;
123
+ secretKey = secretInfo.secretKey;
124
+ sessionToken = secretInfo.sessionToken;
125
+ }
126
+ if (!secretId || !secretKey) {
127
+ return [2, options];
128
+ }
129
+ delete headers.Authorization;
130
+ if (headers['content-type']) {
131
+ headers['content-type'] = headers['content-type'].toLowerCase();
132
+ }
133
+ else if (headers['Content-Type']) {
134
+ headers['Content-Type'] = headers['Content-Type'].toLowerCase();
135
+ }
136
+ signedParams = {
137
+ secretId: secretId,
138
+ secretKey: secretKey,
139
+ method: method,
140
+ url: url,
141
+ params: params,
142
+ headers: headers,
143
+ withSignedParams: isAdminPath,
144
+ timestamp: Math.floor(new Date().getTime() / 1000) - 1,
145
+ isCloudApi: !isAdminPath,
146
+ };
147
+ console.log('======signedParams', signedParams);
148
+ return [4, getSign()];
149
+ case 4:
150
+ sign = _m.sent();
151
+ if (!sign)
152
+ return [2, options];
153
+ _d = sign(signedParams), authorization = _d.authorization, timestamp = _d.timestamp;
154
+ if (typeof sessionToken === 'string' && sessionToken !== '') {
155
+ headers.Authorization = "".concat(authorization, ", Timestamp=").concat(timestamp, ", Token=").concat(sessionToken);
156
+ }
157
+ else {
158
+ headers.Authorization = "".concat(authorization, ", Timestamp=").concat(timestamp);
159
+ if (isAdminPath) {
160
+ headers['X-Timestamp'] = timestamp;
161
+ headers['X-Signature-Expires'] = 600;
162
+ }
163
+ }
164
+ return [2, __assign(__assign({}, options), { headers: headers, body: typeof params === 'object' ? JSON.stringify(params) : params })];
165
+ }
166
+ });
167
+ }); };
168
+ this.get = function (options) { return _this.request(__assign(__assign({}, options), { method: 'get' }), _this.restrictedMethods.includes('get')); };
169
+ this.post = function (options) { return _this.request(__assign(__assign({}, options), { method: 'post' }), _this.restrictedMethods.includes('post')); };
170
+ this.put = function (options) { return _this.request(__assign(__assign({}, options), { method: 'put' })); };
171
+ this.upload = function (options) {
172
+ var _a;
173
+ var _data = options.data, file = options.file, name = options.name, method = options.method, _b = options.headers, headers = _b === void 0 ? {} : _b;
174
+ if (file === undefined || name == undefined) {
175
+ throw new Error('file and name is required');
176
+ }
177
+ var data = obj2StrRecord(_data !== null && _data !== void 0 ? _data : {});
178
+ var loweredMethod = method === null || method === void 0 ? void 0 : method.toLowerCase();
179
+ var reqMethod = (_a = ['post', 'put'].find(function (m) { return m === loweredMethod; })) !== null && _a !== void 0 ? _a : 'put';
180
+ var formData = new FormData();
181
+ if (reqMethod === 'post') {
182
+ Object.keys(data).forEach(function (key) {
183
+ formData.append(key, data[key]);
184
+ });
185
+ formData.append('key', name);
186
+ formData.append('file', file);
187
+ return _this.request(__assign(__assign({}, options), { data: formData, method: reqMethod }), _this.restrictedMethods.includes('upload'));
188
+ }
189
+ return _this.request(__assign(__assign({}, options), { method: 'put', headers: headers, body: file }), _this.restrictedMethods.includes('upload'));
190
+ };
191
+ this.download = function (options) { return __awaiter(_this, void 0, void 0, function () {
192
+ var data, url, fileName, link;
193
+ var _a;
194
+ return __generator(this, function (_b) {
195
+ switch (_b.label) {
196
+ case 0: return [4, this.get(__assign(__assign({}, options), { headers: {}, responseType: 'blob' }))];
197
+ case 1:
198
+ data = (_b.sent()).data;
199
+ url = window.URL.createObjectURL(new Blob([data]));
200
+ fileName = decodeURIComponent(new URL((_a = options === null || options === void 0 ? void 0 : options.url) !== null && _a !== void 0 ? _a : '').pathname.split('/').pop() || '');
201
+ link = document.createElement('a');
202
+ link.href = url;
203
+ link.setAttribute('download', fileName);
204
+ link.style.display = 'none';
205
+ document.body.appendChild(link);
206
+ link.click();
207
+ window.URL.revokeObjectURL(url);
208
+ document.body.removeChild(link);
209
+ return [2, new Promise(function (resolve) {
210
+ resolve({
211
+ statusCode: 200,
212
+ tempFilePath: options.url,
213
+ });
214
+ })];
215
+ }
216
+ });
217
+ }); };
218
+ this.fetch = function (options) { return __awaiter(_this, void 0, void 0, function () {
219
+ var _a, enableAbort, _b, stream, signal, customReqOpts, url, abortController, timeout, timer, headers, fetchOptions, res, ret, _c, _d;
220
+ var _e;
221
+ return __generator(this, function (_f) {
222
+ switch (_f.label) {
223
+ case 0:
224
+ _a = options.enableAbort, enableAbort = _a === void 0 ? false : _a, _b = options.stream, stream = _b === void 0 ? false : _b, signal = options.signal, customReqOpts = options.customReqOpts;
225
+ url = this.getRealUrl(options.url, options.headers || {}, options.body);
226
+ abortController = new AbortController();
227
+ timeout = (customReqOpts === null || customReqOpts === void 0 ? void 0 : customReqOpts.timeout) || this.timeout;
228
+ if (signal) {
229
+ if (signal.aborted) {
230
+ abortController.abort();
231
+ }
232
+ else {
233
+ signal.addEventListener('abort', function () { return abortController.abort(); });
234
+ }
235
+ }
236
+ timer = undefined;
237
+ if (enableAbort || timeout) {
238
+ timer = setTimeout(function () {
239
+ var timeoutMsg = "\u8BF7\u6C42\u5728".concat(timeout / 1000, "s\u5185\u672A\u5B8C\u6210\uFF0C\u5DF2\u4E2D\u65AD");
240
+ console.warn(timeoutMsg);
241
+ abortController.abort(new Error(timeoutMsg));
242
+ }, timeout);
243
+ }
244
+ headers = options.headers ? headersInit2Indexable(options.headers) : undefined;
245
+ return [4, this.getReqOptions(url, __assign(__assign({}, options), { headers: headers, body: options.body, signal: abortController.signal }))];
246
+ case 1:
247
+ fetchOptions = _f.sent();
248
+ console.log('======fetchOptions', url, fetchOptions);
249
+ return [4, fetch(url, fetchOptions)
250
+ .then(function (x) {
251
+ clearTimeout(timer);
252
+ return x;
253
+ })
254
+ .catch(function (x) {
255
+ clearTimeout(timer);
256
+ return Promise.reject(x);
257
+ })];
258
+ case 2:
259
+ res = _f.sent();
260
+ _e = {};
261
+ if (!(+res.status === 204)) return [3, 3];
262
+ _c = '';
263
+ return [3, 7];
264
+ case 3:
265
+ if (!stream) return [3, 4];
266
+ _d = res.body;
267
+ return [3, 6];
268
+ case 4: return [4, res.json()];
269
+ case 5:
270
+ _d = _f.sent();
271
+ _f.label = 6;
272
+ case 6:
273
+ _c = _d;
274
+ _f.label = 7;
275
+ case 7:
276
+ ret = (_e.data = _c,
277
+ _e.statusCode = res.status,
278
+ _e.header = res.headers,
279
+ _e);
280
+ return [2, ret];
281
+ }
282
+ });
283
+ }); };
284
+ this.request = function (options, enableAbort) {
285
+ if (enableAbort === void 0) { enableAbort = false; }
286
+ return __awaiter(_this, void 0, void 0, function () {
287
+ var url, _a, _headers, data, responseType, withCredentials, body, _method, customReqOpts, headers, method, abortController, signal, timeout, payload, realUrl, timer, requestOptions, response, result_1, _b, _c, _d, e_2, _e, _f, headers_1;
288
+ return __generator(this, function (_g) {
289
+ switch (_g.label) {
290
+ case 0:
291
+ url = options.url, _a = options.headers, _headers = _a === void 0 ? {} : _a, data = options.data, responseType = options.responseType, withCredentials = options.withCredentials, body = options.body, _method = options.method, customReqOpts = options.customReqOpts;
292
+ headers = obj2StrRecord(_headers);
293
+ method = String(_method).toLowerCase() || 'get';
294
+ abortController = new AbortController();
295
+ signal = abortController.signal;
296
+ timeout = (customReqOpts === null || customReqOpts === void 0 ? void 0 : customReqOpts.timeout) || this.timeout;
297
+ if (isFormData(data)) {
298
+ payload = data;
299
+ }
300
+ else if (headers['content-type'] === 'application/x-www-form-urlencoded') {
301
+ payload = toQueryString(data !== null && data !== void 0 ? data : {});
302
+ }
303
+ else if (body) {
304
+ payload = body;
305
+ }
306
+ else {
307
+ payload = data ? JSON.stringify(data) : undefined;
308
+ }
309
+ realUrl = this.getRealUrl(formatUrl('https', url !== null && url !== void 0 ? url : '', method === 'get' ? data : {}), options.headers || {}, payload);
310
+ if (enableAbort || timeout) {
311
+ timer = setTimeout(function () {
312
+ var timeoutMsg = "\u8BF7\u6C42\u5728".concat(timeout / 1000, "s\u5185\u672A\u5B8C\u6210\uFF0C\u5DF2\u4E2D\u65AD");
313
+ console.warn(timeoutMsg);
314
+ abortController.abort(new Error(timeoutMsg));
315
+ }, timeout);
316
+ }
317
+ return [4, this.getReqOptions(realUrl, {
318
+ method: method,
319
+ headers: headers,
320
+ body: payload,
321
+ credentials: withCredentials ? 'include' : 'same-origin',
322
+ signal: signal,
323
+ })];
324
+ case 1:
325
+ requestOptions = _g.sent();
326
+ console.log('======requestOptions', realUrl, requestOptions);
327
+ _g.label = 2;
328
+ case 2:
329
+ _g.trys.push([2, , 15, 16]);
330
+ return [4, fetch(realUrl, requestOptions)];
331
+ case 3:
332
+ response = _g.sent();
333
+ result_1 = {
334
+ header: {},
335
+ statusCode: response.status,
336
+ };
337
+ _g.label = 4;
338
+ case 4:
339
+ _g.trys.push([4, 9, , 14]);
340
+ _b = result_1;
341
+ if (!(responseType === 'blob')) return [3, 6];
342
+ return [4, response.blob()];
343
+ case 5:
344
+ _c = _g.sent();
345
+ return [3, 8];
346
+ case 6:
347
+ _d = safeParseJson;
348
+ return [4, response.text()];
349
+ case 7:
350
+ _c = _d.apply(void 0, [_g.sent()]);
351
+ _g.label = 8;
352
+ case 8:
353
+ _b.data = _c;
354
+ return [3, 14];
355
+ case 9:
356
+ e_2 = _g.sent();
357
+ console.log('catch an error', e_2);
358
+ _e = result_1;
359
+ if (!(responseType === 'blob')) return [3, 11];
360
+ return [4, response.blob()];
361
+ case 10:
362
+ _f = _g.sent();
363
+ return [3, 13];
364
+ case 11: return [4, response.text()];
365
+ case 12:
366
+ _f = _g.sent();
367
+ _g.label = 13;
368
+ case 13:
369
+ _e.data = _f;
370
+ return [3, 14];
371
+ case 14:
372
+ headers_1 = response.headers;
373
+ headers_1.forEach(function (val, key) { return (result_1.header[key.toLowerCase()] = val); });
374
+ return [2, result_1];
375
+ case 15:
376
+ clearTimeout(timer);
377
+ return [7];
378
+ case 16: return [2];
379
+ }
380
+ });
381
+ });
382
+ };
383
+ var timeout = config.timeout, restrictedMethods = config.restrictedMethods;
384
+ this.timeout = timeout || 15000;
385
+ this.restrictedMethods = restrictedMethods || ['get', 'post', 'upload', 'download'];
386
+ this.config = config;
387
+ }
388
+ NodeRequest.prototype.getClientCredential = function (opts) {
389
+ var _a;
390
+ return __awaiter(this, void 0, void 0, function () {
391
+ var res;
392
+ return __generator(this, function (_b) {
393
+ switch (_b.label) {
394
+ case 0: return [4, this.fetch({
395
+ url: "".concat(opts.origin).concat(CLIENT_AUTH_PATH),
396
+ method: 'POST',
397
+ headers: {
398
+ 'content-type': 'application/json',
399
+ },
400
+ body: JSON.stringify({
401
+ grant_type: 'client_credentials',
402
+ }),
403
+ })];
404
+ case 1:
405
+ res = _b.sent();
406
+ return [2, (_a = res.data) === null || _a === void 0 ? void 0 : _a.access_token];
407
+ }
408
+ });
409
+ });
410
+ };
411
+ NodeRequest.prototype.getRealUrl = function (url, headers, body) {
412
+ var _a, _b, _c, _d;
413
+ if ((_b = (_a = headers.Authorization) === null || _a === void 0 ? void 0 : _a.replace('Bearer', '')) === null || _b === void 0 ? void 0 : _b.trim()) {
414
+ return url;
415
+ }
416
+ var params = typeof body === 'object' ? body : safeParseJson(body) || '';
417
+ if (params.access_token) {
418
+ return url;
419
+ }
420
+ var urlObj = new URL(url);
421
+ if (urlObj.pathname === '/web' && ((_c = this.config.auth) === null || _c === void 0 ? void 0 : _c.secretId) && ((_d = this.config.auth) === null || _d === void 0 ? void 0 : _d.secretKey)) {
422
+ urlObj.pathname = ADMIN_PATH;
423
+ }
424
+ return urlObj.toString();
425
+ };
426
+ return NodeRequest;
427
+ }());
428
+ export { NodeRequest };
429
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWJzL2FkYXB0ZXItbm9kZS9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsT0FBTyxFQU9MLFNBQVMsR0FDVixNQUFNLDhCQUE4QixDQUFBO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFM0UsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsYUFBYSxFQUNiLGFBQWEsRUFDYixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGdCQUFnQixHQUNqQixNQUFNLFNBQVMsQ0FBQTtBQUloQixJQUFJLE1BQU0sR0FBcUMsSUFBSSxDQUFBO0FBQ25ELFNBQWUsT0FBTzs7Ozs7O3lCQUNoQixDQUFDLE1BQU0sRUFBUCxjQUFPOzs7O29CQUdLLFdBQU0sTUFBTSxDQUFDLDZCQUE2QixDQUFDLEVBQUE7O29CQUFqRCxHQUFHLEdBQUcsU0FBMkM7b0JBQ3ZELE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFBOzs7O29CQUVqQixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRDswQkFDN0QsK0NBQStDOzBCQUMvQyxzQkFBc0IsQ0FBQyxDQUFBO3dCQUcvQixXQUFPLE1BQU8sRUFBQTs7OztDQUNmO0FBT0Q7SUFVRSxxQkFBWSxNQUF5QztRQUFyRCxpQkFLQztRQXVETSxrQkFBYSxHQUFHLFVBQ3JCLEdBQVcsRUFDWCxPQU9DOzs7Ozs7d0JBRUssTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO3dCQUVuQixVQUFVLEdBQUssbUJBQW1CLEVBQUUsV0FBMUIsQ0FBMEI7NkNBRTFC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QUUsT0FBNEIsRUFBRSxJQUFTOztRQUM3RCxJQUFJLE1BQUEsTUFBQSxPQUFPLENBQUMsYUFBYSwwQ0FBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQywwQ0FBRSxJQUFJLEVBQUUsRUFBRTtZQUN4RCxPQUFPLEdBQUcsQ0FBQTtTQUNYO1FBRUQsSUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7UUFFMUUsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQ3ZCLE9BQU8sR0FBRyxDQUFBO1NBQ1g7UUFFRCxJQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUUzQixJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssTUFBTSxLQUFJLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLDBDQUFFLFFBQVEsQ0FBQSxLQUFJLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLDBDQUFFLFNBQVMsQ0FBQSxFQUFFO1lBQzNGLE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFBO1NBQzdCO1FBQ0QsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQXVYSCxrQkFBQztBQUFELENBQUMsQUFqYkQsSUFpYkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuaW1wb3J0IHtcbiAgSUZldGNoT3B0aW9ucyxcbiAgSVJlcXVlc3RDb25maWcsXG4gIElSZXF1ZXN0TWV0aG9kLFxuICBJUmVxdWVzdE9wdGlvbnMsXG4gIFJlc3BvbnNlT2JqZWN0LFxuICBTREtSZXF1ZXN0SW50ZXJmYWNlLFxuICBmb3JtYXRVcmwsXG59IGZyb20gJ0BjbG91ZGJhc2UvYWRhcHRlci1pbnRlcmZhY2UnXG5pbXBvcnQgeyBBRE1JTl9QQVRILCBDTElFTlRfQVVUSF9QQVRIIH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBnZXRDbG91ZGJhc2VDb250ZXh0LCBnZXRTZWNyZXRJbmZvLCBJTklUX0NPTkZJRyB9IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCB0eXBlIHsgSUN1c3RvbVJlcU9wdHMgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHtcbiAgZ2V0RW52LFxuICBpc0Zvcm1EYXRhLFxuICB0b1F1ZXJ5U3RyaW5nLFxuICBzYWZlUGFyc2VKc29uLFxuICBvYmoyU3RyUmVjb3JkLFxuICBoZWFkZXJzSW5pdDJJbmRleGFibGUsXG4gIGdldEN1cnJSdW5FbnZUYWcsXG59IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBJQ2xvdWRiYXNlQ29uZmlnIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcydcbi8vIOW7tui/n+WKoOi9ve+8jOmBv+WFjemdniBOb2RlIOeOr+Wig+aJk+WMheaXtuW8leWFpeatpOWMhVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmxldCBzaWduRm46ICgoLi4uYXJnczogYW55W10pID0+IGFueSkgfCBudWxsID0gbnVsbFxuYXN5bmMgZnVuY3Rpb24gZ2V0U2lnbigpIHtcbiAgaWYgKCFzaWduRm4pIHtcbiAgICB0cnkge1xuICAgICAgLy8gQHRzLWlnbm9yZSDigJQg6K+l5YyF5LuF5ZyoIE5vZGUg6L+Q6KGM5pe25a2Y5Zyo77yM5byA5Y+R546v5aKD5Y+v6IO95pyq5a6J6KOFXG4gICAgICBjb25zdCBtb2QgPSBhd2FpdCBpbXBvcnQoJ0BjbG91ZGJhc2Uvc2lnbmF0dXJlLW5vZGVqcycpXG4gICAgICBzaWduRm4gPSBtb2Quc2lnblxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcign57y65bCR5L6d6LWWIEBjbG91ZGJhc2Uvc2lnbmF0dXJlLW5vZGVqc++8jOivt+aJp+ihjOS7peS4i+WRveS7pOWuieijhe+8mlxcblxcbidcbiAgICAgICAgKyAnICBucG0gaW5zdGFsbCBAY2xvdWRiYXNlL3NpZ25hdHVyZS1ub2RlanNcXG5cXG4nXG4gICAgICAgICsgJ+ivpeS+nei1lueUqOS6jiBOb2RlIOeOr+Wig+S4i+eahOivt+axguetvuWQjeOAgicpXG4gICAgfVxuICB9XG4gIHJldHVybiBzaWduRm4hXG59XG5cbi8qKlxuICogTm9kZS5qcyDnjq/looPkuIvnmoQgSFRUUCDor7fmsYLlrp7njrBcbiAqIOWfuuS6juWOn+eUnyBmZXRjaO+8jOaUr+aMgSBHRVQvUE9TVC9QVVQv5LiK5LygL+S4i+i9vS/mtYHlvI/or7fmsYJcbiAqIOiHquWKqOWkhOeQhiBWMyDnrb7lkI3lkowgQmVhcmVyIFRva2VuIOiupOivgVxuICovXG5leHBvcnQgY2xhc3MgTm9kZVJlcXVlc3QgaW1wbGVtZW50cyBTREtSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgLyoqIOivt+axgumFjee9ru+8jOWMheWQq+iupOivgeS/oeaBryAqL1xuICBjb25maWc6IElSZXF1ZXN0Q29uZmlnICYgSUNsb3VkYmFzZUNvbmZpZ1xuXG4gIC8qKiDor7fmsYLotoXml7bml7bpl7TvvIjmr6vnp5LvvInvvIzpu5jorqQgMTUwMDAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0aW1lb3V0OiBudW1iZXJcblxuICAvKiog5Y+X6LaF5pe25o6n5Yi255qE6K+35rGC57G75Z6L5YiX6KGoICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzdHJpY3RlZE1ldGhvZHM6IEFycmF5PElSZXF1ZXN0TWV0aG9kPlxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogSVJlcXVlc3RDb25maWcgJiBJQ2xvdWRiYXNlQ29uZmlnKSB7XG4gICAgY29uc3QgeyB0aW1lb3V0LCByZXN0cmljdGVkTWV0aG9kcyB9ID0gY29uZmlnXG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dCB8fCAxNTAwMFxuICAgIHRoaXMucmVzdHJpY3RlZE1ldGhvZHMgPSByZXN0cmljdGVkTWV0aG9kcyB8fCBbJ2dldCcsICdwb3N0JywgJ3VwbG9hZCcsICdkb3dubG9hZCddXG4gICAgdGhpcy5jb25maWcgPSBjb25maWdcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blrqLmiLfnq6/lh63or4EgYWNjZXNzX3Rva2Vu77yM5Li6566h55CG5ZGY5p2D6ZmQXG4gICAqIOeUqOS6juS4jeaUr+aMgSBWMyDnrb7lkI3nmoTmjqXlj6PvvIjlpoLmlbDmja7mqKHlnovjgIHlhbPns7vlnovmlbDmja7lupPjgIFBSe+8iVxuICAgKi9cbiAgYXN5bmMgZ2V0Q2xpZW50Q3JlZGVudGlhbChvcHRzOiB7IG9yaWdpbjogc3RyaW5nIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZmV0Y2goe1xuICAgICAgdXJsOiBgJHtvcHRzLm9yaWdpbn0ke0NMSUVOVF9BVVRIX1BBVEh9YCxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZ3JhbnRfdHlwZTogJ2NsaWVudF9jcmVkZW50aWFscycsXG4gICAgICB9KSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHJlcy5kYXRhPy5hY2Nlc3NfdG9rZW5cbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blrp7pmYXor7fmsYIgVVJMXG4gICAqIOW9k+ivt+axguacquaQuuW4piBBdXRob3JpemF0aW9uIOS4lOacquiHquW4piBhY2Nlc3NfdG9rZW4g5pe277yMXG4gICAqIOWwhiAvd2ViIOi3r+W+hOabv+aNouS4uiAvYWRtaW7vvIjnrqHnkIbnq6/nrb7lkI3ot6/lvoTvvIlcbiAgICovXG4gIGdldFJlYWxVcmwodXJsOiBzdHJpbmcsIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4sIGJvZHk6IGFueSkge1xuICAgIGlmIChoZWFkZXJzLkF1dGhvcml6YXRpb24/LnJlcGxhY2UoJ0JlYXJlcicsICcnKT8udHJpbSgpKSB7XG4gICAgICByZXR1cm4gdXJsXG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0gdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnID8gYm9keSA6IHNhZmVQYXJzZUpzb24oYm9keSkgfHwgJydcblxuICAgIGlmIChwYXJhbXMuYWNjZXNzX3Rva2VuKSB7XG4gICAgICByZXR1cm4gdXJsXG4gICAgfVxuXG4gICAgY29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpXG5cbiAgICBpZiAodXJsT2JqLnBhdGhuYW1lID09PSAnL3dlYicgJiYgdGhpcy5jb25maWcuYXV0aD8uc2VjcmV0SWQgJiYgdGhpcy5jb25maWcuYXV0aD8uc2VjcmV0S2V5KSB7XG4gICAgICB1cmxPYmoucGF0aG5hbWUgPSBBRE1JTl9QQVRIXG4gICAgfVxuICAgIHJldHVybiB1cmxPYmoudG9TdHJpbmcoKVxuICB9XG5cbiAgLyoqXG4gICAqIOS4uuivt+axgua3u+WKoOetvuWQjeaIluiupOivgeS/oeaBr1xuICAgKlxuICAgKiDlpITnkIbpgLvovpHkvJjlhYjnuqfvvJpcbiAgICogMS4g5bey5pyJIEF1dGhvcml6YXRpb24gaGVhZGVyIOKGkiDnm7TmjqXov5Tlm55cbiAgICogMi4gL2F1dGgvIOi3r+W+hCDihpIgU0RLIOiupOivgeaOpeWPo++8jOaXoOmcgOetvuWQjVxuICAgKiAzLiDkuI3mlK/mjIEgVjMg562+5ZCN55qE6Lev5b6E77yIL3YxL21vZGVsLyDnrYnvvInihpIg55SoIGNsaWVudENyZWRlbnRpYWwgQmVhcmVyIFRva2VuXG4gICAqIDQuIOWPguaVsOWQqyBhY2Nlc3NfdG9rZW4g4oaSIOaXoOmcgOetvuWQjVxuICAgKiA1LiDlhbbku5Yg4oaSIOS9v+eUqCBWMyDnrb7lkI3vvIhUQzMtSE1BQy1TSEEyNTbvvIlcbiAgICovXG4gIHB1YmxpYyBnZXRSZXFPcHRpb25zID0gYXN5bmMgKFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIG1ldGhvZD86IGFueVxuICAgICAgaGVhZGVyczogYW55XG4gICAgICBib2R5PzogYW55XG4gICAgICBjcmVkZW50aWFscz86IHN0cmluZ1xuICAgICAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICAgIHVybD86IGFueVxuICAgIH0sXG4gICkgPT4ge1xuICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKVxuXG4gICAgY29uc3QgeyBUQ0JfU09VUkNFIH0gPSBnZXRDbG91ZGJhc2VDb250ZXh0KClcbiAgICAvLyBOb3RlOiDkupHlh73mlbDooqvosIPnlKjml7blj6/og73osIPnlKjnq6/mnKrkvKDpgJIgU09VUkNF77yMVENCX1NPVVJDRSDlj6/og73kuLrnqbpcbiAgICBjb25zdCBTT1VSQ0UgPSBgJHtJTklUX0NPTkZJRy5jb250ZXh0Py5leHRlbmRlZENvbnRleHQ/LnNvdXJjZSB8fCBUQ0JfU09VUkNFIHx8ICcnfSwke2F3YWl0IGdldEN1cnJSdW5FbnZUYWcoKX1gXG5cbiAgICBvcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgICAnVXNlci1BZ2VudCc6IGBhZGFwdGVyLW5vZGUvJHtvcHRpb25zLmhlYWRlcnM/LlsnWC1TREstVmVyc2lvbiddIHx8ICcnfWAsXG4gICAgICAnWC1UQ0ItU291cmNlJzogU09VUkNFLFxuICAgICAgJ1gtQ2xpZW50LVRpbWVzdGFtcCc6IG5ldyBEYXRlKCkudmFsdWVPZigpLFxuICAgICAgJ1gtVENCLVJlZ2lvbic6IElOSVRfQ09ORklHLnJlZ2lvbiB8fCBnZXRFbnYoJ1RFTkNFTlRDTE9VRF9SRUdJT04nKSB8fCAnJyxcbiAgICAgIEhvc3Q6IHVybE9iai5ob3N0LFxuICAgIH1cblxuICAgIC8vIOW3suaQuuW4puacieaViCBBdXRob3JpemF0aW9u77yM55u05o6l6L+U5ZueXG4gICAgaWYgKG9wdGlvbnMuaGVhZGVycy5BdXRob3JpemF0aW9uPy5yZXBsYWNlKCdCZWFyZXInLCAnJyk/LnRyaW0oKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICAvLyBhdXRoIOebuOWFs+aOpeWPo+S4jemcgOimgeetvuWQjVxuICAgIGlmICh1cmxPYmoucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2F1dGgvJykgJiYgdXJsT2JqLnBhdGhuYW1lICE9PSBDTElFTlRfQVVUSF9QQVRIKSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIGNvbnN0IGlzQWRtaW5QYXRoID0gdXJsT2JqLnBhdGhuYW1lID09PSBBRE1JTl9QQVRIXG5cbiAgICAvLyDov5nkupvot6/lvoTkuI3mlK/mjIEgVjMg562+5ZCN77yM5pS555SoIGNsaWVudENyZWRlbnRpYWwg6I635Y+WIEJlYXJlciBUb2tlblxuICAgIGNvbnN0IFVOU1VQUE9SVEVEX1YzX1NJR05fUEFUSCA9IFsnL3YxL21vZGVsLycsICcvdjEvcmRiLycsICcvdjEvYWkvJ11cblxuICAgIGlmIChVTlNVUFBPUlRFRF9WM19TSUdOX1BBVEguc29tZSh2ID0+IHVybE9iai5wYXRobmFtZS5zdGFydHNXaXRoKHYpKSkge1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLmdldENsaWVudENyZWRlbnRpYWwoeyBvcmlnaW46IHVybE9iai5vcmlnaW4gfSlcbiAgICAgIG9wdGlvbnMuaGVhZGVycy5BdXRob3JpemF0aW9uID0gYEJlYXJlciAke3Rva2VufWBcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgbGV0IHsgc2VjcmV0SWQsIHNlY3JldEtleSwgc2Vzc2lvblRva2VuIH0gPSB0aGlzLmNvbmZpZz8uYXV0aCB8fCB7fVxuICAgIGNvbnN0IHsgc2VjcmV0VHlwZSB9ID0gdGhpcy5jb25maWc/LmF1dGggfHwge31cbiAgICBjb25zdCB7IG1ldGhvZCwgYm9keSB9ID0gb3B0aW9uc1xuICAgIGNvbnN0IGhlYWRlcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuaGVhZGVycykpXG4gICAgbGV0IHBhcmFtcyA9IHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyA/IGJvZHkgOiBzYWZlUGFyc2VKc29uKGJvZHkpIHx8ICcnXG5cbiAgICAvLyDlj4LmlbDoh6rluKYgYWNjZXNzX3Rva2Vu77yM5peg6ZyA562+5ZCNXG4gICAgaWYgKHBhcmFtcy5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgLy8gR0VUIOivt+axguWPguaVsOW3suWcqCBVUkwg5Lit77yM562+5ZCN5pe2IHBhcmFtcyDnva7nqbpcbiAgICBpZiAobWV0aG9kLnRvTG93ZXJDYXNlKCkgPT09ICdnZXQnKSB7XG4gICAgICBwYXJhbXMgPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICAvLyBTRVNTSU9OX1NFQ1JFVCDnsbvlnovmiJbml6Dlr4bpkqXml7bvvIzku47njq/looPlj5jph4/ojrflj5bkuLTml7blr4bpkqVcbiAgICBpZiAoIXNlY3JldElkIHx8ICFzZWNyZXRLZXkgfHwgc2VjcmV0VHlwZSA9PT0gJ1NFU1NJT05fU0VDUkVUJykge1xuICAgICAgY29uc3Qgc2VjcmV0SW5mbyA9IGdldFNlY3JldEluZm8oKVxuICAgICAgc2VjcmV0SWQgPSBzZWNyZXRJbmZvLnNlY3JldElkXG4gICAgICBzZWNyZXRLZXkgPSBzZWNyZXRJbmZvLnNlY3JldEtleVxuICAgICAgc2Vzc2lvblRva2VuID0gc2VjcmV0SW5mby5zZXNzaW9uVG9rZW5cbiAgICB9XG5cbiAgICAvLyDku43ml6Dlr4bpkqXliJnot7Pov4fnrb7lkI1cbiAgICBpZiAoIXNlY3JldElkIHx8ICFzZWNyZXRLZXkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgZGVsZXRlIGhlYWRlcnMuQXV0aG9yaXphdGlvblxuXG4gICAgLy8gY29udGVudC10eXBlIOmcgOS4juacjeWKoeerr+etvuWQjemqjOivgeS/neaMgeWkp+Wwj+WGmeS4gOiHtFxuICAgIGlmIChoZWFkZXJzWydjb250ZW50LXR5cGUnXSkge1xuICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBoZWFkZXJzWydjb250ZW50LXR5cGUnXS50b0xvd2VyQ2FzZSgpXG4gICAgfSBlbHNlIGlmIChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkge1xuICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBoZWFkZXJzWydDb250ZW50LVR5cGUnXS50b0xvd2VyQ2FzZSgpXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmVkUGFyYW1zID0ge1xuICAgICAgc2VjcmV0SWQsXG4gICAgICBzZWNyZXRLZXksXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICBoZWFkZXJzLFxuICAgICAgd2l0aFNpZ25lZFBhcmFtczogaXNBZG1pblBhdGgsXG4gICAgICB0aW1lc3RhbXA6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAtIDEsXG4gICAgICBpc0Nsb3VkQXBpOiAhaXNBZG1pblBhdGgsXG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJz09PT09PXNpZ25lZFBhcmFtcycsIHNpZ25lZFBhcmFtcylcblxuICAgIGNvbnN0IHNpZ24gPSBhd2FpdCBnZXRTaWduKClcbiAgICBpZiAoIXNpZ24pIHJldHVybiBvcHRpb25zXG5cbiAgICBjb25zdCB7IGF1dGhvcml6YXRpb24sIHRpbWVzdGFtcCB9ID0gc2lnbihzaWduZWRQYXJhbXMpXG5cbiAgICBpZiAodHlwZW9mIHNlc3Npb25Ub2tlbiA9PT0gJ3N0cmluZycgJiYgc2Vzc2lvblRva2VuICE9PSAnJykge1xuICAgICAgLy8g5Li05pe25a+G6ZKl6ZyA6KaB6aKd5aSW6ZmE5bimIFRva2VuXG4gICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9ufSwgVGltZXN0YW1wPSR7dGltZXN0YW1wfSwgVG9rZW49JHtzZXNzaW9uVG9rZW59YFxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9ufSwgVGltZXN0YW1wPSR7dGltZXN0YW1wfWBcblxuICAgICAgLy8gYWRtaW4g6Lev5b6E6ZyA6KaB6aKd5aSW55qE5pe26Ze05oiz5ZKM6L+H5pyf5aS0XG4gICAgICBpZiAoaXNBZG1pblBhdGgpIHtcbiAgICAgICAgaGVhZGVyc1snWC1UaW1lc3RhbXAnXSA9IHRpbWVzdGFtcFxuICAgICAgICBoZWFkZXJzWydYLVNpZ25hdHVyZS1FeHBpcmVzJ10gPSA2MDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5OiB0eXBlb2YgcGFyYW1zID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHBhcmFtcykgOiBwYXJhbXMsXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCA9IChvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlT2JqZWN0PiA9PiB0aGlzLnJlcXVlc3QoXG4gICAge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgfSxcbiAgICB0aGlzLnJlc3RyaWN0ZWRNZXRob2RzLmluY2x1ZGVzKCdnZXQnKSxcbiAgKVxuXG4gIHB1YmxpYyBwb3N0ID0gKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHRoaXMucmVxdWVzdChcbiAgICB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgfSxcbiAgICB0aGlzLnJlc3RyaWN0ZWRNZXRob2RzLmluY2x1ZGVzKCdwb3N0JyksXG4gIClcblxuICBwdWJsaWMgcHV0ID0gKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHRoaXMucmVxdWVzdCh7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBtZXRob2Q6ICdwdXQnLFxuICB9KVxuXG4gIC8qKlxuICAgKiDmlofku7bkuIrkvKBcbiAgICogUE9TVCDmlrnlvI/vvJrmnoTlu7ogRm9ybURhdGEg5LiK5LygXG4gICAqIFBVVCDmlrnlvI/vvJrnm7TmjqXlsIbmlofku7bkvZzkuLogYm9keSDkuIrkvKBcbiAgICovXG4gIHB1YmxpYyB1cGxvYWQgPSAob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZU9iamVjdD4gPT4ge1xuICAgIGNvbnN0IHsgZGF0YTogX2RhdGEsIGZpbGUsIG5hbWUsIG1ldGhvZCwgaGVhZGVycyA9IHt9IH0gPSBvcHRpb25zXG4gICAgaWYgKGZpbGUgPT09IHVuZGVmaW5lZCB8fCBuYW1lID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaWxlIGFuZCBuYW1lIGlzIHJlcXVpcmVkJylcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IG9iajJTdHJSZWNvcmQoX2RhdGEgPz8ge30pXG4gICAgY29uc3QgbG93ZXJlZE1ldGhvZCA9IG1ldGhvZD8udG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IHJlcU1ldGhvZCA9IFsncG9zdCcsICdwdXQnXS5maW5kKG0gPT4gbSA9PT0gbG93ZXJlZE1ldGhvZCkgPz8gJ3B1dCdcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgaWYgKHJlcU1ldGhvZCA9PT0gJ3Bvc3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YVtrZXldKVxuICAgICAgfSlcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgna2V5JywgbmFtZSlcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpXG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAgICB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICBtZXRob2Q6IHJlcU1ldGhvZCxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5yZXN0cmljdGVkTWV0aG9kcy5pbmNsdWRlcygndXBsb2FkJyksXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgbWV0aG9kOiAncHV0JyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgYm9keTogZmlsZSxcbiAgICAgIH0sXG4gICAgICB0aGlzLnJlc3RyaWN0ZWRNZXRob2RzLmluY2x1ZGVzKCd1cGxvYWQnKSxcbiAgICApXG4gIH1cblxuICAvKiog5paH5Lu25LiL6L2977yI5rWP6KeI5Zmo546v5aKD77yM6YCa6L+H5Yib5bu6IDxhPiDmoIfnrb7op6blj5HkuIvovb3vvIkgKi9cbiAgcHVibGljIGRvd25sb2FkID0gYXN5bmMgKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8dW5rbm93bj4gPT4ge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5nZXQoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgfSlcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbZGF0YV0pKVxuICAgIGNvbnN0IGZpbGVOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KG5ldyBVUkwob3B0aW9ucz8udXJsID8/ICcnKS5wYXRobmFtZS5zcGxpdCgnLycpLnBvcCgpIHx8ICcnKVxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblxuICAgIGxpbmsuaHJlZiA9IHVybFxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lKVxuICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKVxuICAgIGxpbmsuY2xpY2soKVxuICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICB0ZW1wRmlsZVBhdGg6IG9wdGlvbnMudXJsLFxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOW6leWxgiBmZXRjaCDor7fmsYLvvIzmlK/mjIHmtYHlvI/lk43lupRcbiAgICog6LaF5pe26YCa6L+HIEFib3J0Q29udHJvbGxlciArIHNldFRpbWVvdXQg5a6e546wXG4gICAqL1xuICBwdWJsaWMgZmV0Y2ggPSBhc3luYyAob3B0aW9uczogT21pdDxJRmV0Y2hPcHRpb25zLCAnc2lnbmFsJz4gJiB7IHNpZ25hbD86IEFib3J0U2lnbmFsOyBjdXN0b21SZXFPcHRzPzogSUN1c3RvbVJlcU9wdHMgfSk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHtcbiAgICBjb25zdCB7IGVuYWJsZUFib3J0ID0gZmFsc2UsIHN0cmVhbSA9IGZhbHNlLCBzaWduYWwsIGN1c3RvbVJlcU9wdHMgfSA9IG9wdGlvbnNcbiAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlYWxVcmwob3B0aW9ucy51cmwsIG9wdGlvbnMuaGVhZGVycyB8fCB7fSwgb3B0aW9ucy5ib2R5KVxuICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IHRpbWVvdXQgPSBjdXN0b21SZXFPcHRzPy50aW1lb3V0IHx8IHRoaXMudGltZW91dFxuXG4gICAgLy8g5qGl5o6l5aSW6YOoIHNpZ25hbCDliLDlhoXpg6ggQWJvcnRDb250cm9sbGVyXG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDotoXml7boh6rliqjkuK3mlq1cbiAgICBsZXQgdGltZXIgPSB1bmRlZmluZWRcbiAgICBpZiAoZW5hYmxlQWJvcnQgfHwgdGltZW91dCkge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgdGltZW91dE1zZyA9IGDor7fmsYLlnKgke3RpbWVvdXQgLyAxMDAwfXPlhoXmnKrlrozmiJDvvIzlt7LkuK3mlq1gXG4gICAgICAgIGNvbnNvbGUud2Fybih0aW1lb3V0TXNnKVxuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKHRpbWVvdXRNc2cpKVxuICAgICAgfSwgdGltZW91dClcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8gaGVhZGVyc0luaXQySW5kZXhhYmxlKG9wdGlvbnMuaGVhZGVycykgOiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0UmVxT3B0aW9ucyh1cmwsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keTogb3B0aW9ucy5ib2R5IGFzIGFueSBhcyBOb2RlSlMuUmVhZGFibGVTdHJlYW0sXG4gICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSlcblxuICAgIGNvbnNvbGUubG9nKCc9PT09PT1mZXRjaE9wdGlvbnMnLCB1cmwsIGZldGNoT3B0aW9ucylcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgZmV0Y2hPcHRpb25zIGFzIFJlcXVlc3RJbml0KVxuICAgICAgLnRoZW4oKHgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgICByZXR1cm4geFxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoeCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh4KVxuICAgICAgfSlcblxuICAgIGNvbnN0IHJldCA9IHtcbiAgICAgIGRhdGE6XG4gICAgICAgICtyZXMuc3RhdHVzID09PSAyMDRcbiAgICAgICAgICA/ICcnIC8vIDIwNCBObyBDb250ZW50XG4gICAgICAgICAgOiBzdHJlYW1cbiAgICAgICAgICAgID8gcmVzLmJvZHlcbiAgICAgICAgICAgIDogYXdhaXQgcmVzLmpzb24oKSxcbiAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXMsXG4gICAgICBoZWFkZXI6IHJlcy5oZWFkZXJzLFxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvKipcbiAgICog6YCa55So6K+35rGC5pa55rOV77yM6KKrIGdldC9wb3N0L3B1dC91cGxvYWQg562J6LCD55SoXG4gICAqIOi0n+i0o+aehOW7uiBwYXlsb2Fk44CB6K6+572u6LaF5pe244CB6Kej5p6Q5ZON5bqUXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0g6K+35rGC6YCJ6aG5XG4gICAqIEBwYXJhbSBlbmFibGVBYm9ydCAtIOaYr+WQpuWQr+eUqOi2heaXtuS4reaWre+8iOeUsSByZXN0cmljdGVkTWV0aG9kcyDlhrPlrprvvIlcbiAgICovXG4gIHB1YmxpYyByZXF1ZXN0ID0gYXN5bmMgKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgZW5hYmxlQWJvcnQgPSBmYWxzZSk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB1cmwsXG4gICAgICBoZWFkZXJzOiBfaGVhZGVycyA9IHt9LFxuICAgICAgZGF0YSxcbiAgICAgIHJlc3BvbnNlVHlwZSxcbiAgICAgIHdpdGhDcmVkZW50aWFscyxcbiAgICAgIGJvZHksXG4gICAgICBtZXRob2Q6IF9tZXRob2QsXG4gICAgICBjdXN0b21SZXFPcHRzLFxuICAgIH0gPSBvcHRpb25zXG4gICAgY29uc3QgaGVhZGVycyA9IG9iajJTdHJSZWNvcmQoX2hlYWRlcnMpXG4gICAgY29uc3QgbWV0aG9kID0gU3RyaW5nKF9tZXRob2QpLnRvTG93ZXJDYXNlKCkgfHwgJ2dldCdcbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCB7IHNpZ25hbCB9ID0gYWJvcnRDb250cm9sbGVyXG4gICAgY29uc3QgdGltZW91dCA9IGN1c3RvbVJlcU9wdHM/LnRpbWVvdXQgfHwgdGhpcy50aW1lb3V0XG5cbiAgICAvLyDmnoTlu7ror7fmsYIgcGF5bG9hZO+8mkZvcm1EYXRhID4gdXJsZW5jb2RlZCA+IHJhdyBib2R5ID4gSlNPTlxuICAgIGxldCBwYXlsb2FkXG4gICAgaWYgKGlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICAgIHBheWxvYWQgPSBkYXRhXG4gICAgfSBlbHNlIGlmIChoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgIHBheWxvYWQgPSB0b1F1ZXJ5U3RyaW5nKGRhdGEgPz8ge30pXG4gICAgfSBlbHNlIGlmIChib2R5KSB7XG4gICAgICBwYXlsb2FkID0gYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXlsb2FkID0gZGF0YSA/IEpTT04uc3RyaW5naWZ5KGRhdGEpIDogdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgcmVhbFVybCA9IHRoaXMuZ2V0UmVhbFVybChcbiAgICAgIGZvcm1hdFVybCgnaHR0cHMnLCB1cmwgPz8gJycsIG1ldGhvZCA9PT0gJ2dldCcgPyBkYXRhIDoge30pLFxuICAgICAgb3B0aW9ucy5oZWFkZXJzIHx8IHt9LFxuICAgICAgcGF5bG9hZCxcbiAgICApXG5cbiAgICAvLyDotoXml7bpgJrov4cgQWJvcnRDb250cm9sbGVyICsgc2V0VGltZW91dCDlrp7njrBcbiAgICBsZXQgdGltZXJcblxuICAgIGlmIChlbmFibGVBYm9ydCB8fCB0aW1lb3V0KSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lb3V0TXNnID0gYOivt+axguWcqCR7dGltZW91dCAvIDEwMDB9c+WGheacquWujOaIkO+8jOW3suS4reaWrWBcbiAgICAgICAgY29uc29sZS53YXJuKHRpbWVvdXRNc2cpXG4gICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IodGltZW91dE1zZykpXG4gICAgICB9LCB0aW1lb3V0KVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRSZXFPcHRpb25zKHJlYWxVcmwsIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5OiBwYXlsb2FkLFxuICAgICAgY3JlZGVudGlhbHM6IHdpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdzYW1lLW9yaWdpbicsXG4gICAgICBzaWduYWwsXG4gICAgfSlcblxuICAgIGNvbnNvbGUubG9nKCc9PT09PT1yZXF1ZXN0T3B0aW9ucycsIHJlYWxVcmwsIHJlcXVlc3RPcHRpb25zKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVhbFVybCwgcmVxdWVzdE9wdGlvbnMgYXMgUmVxdWVzdEluaXQpXG4gICAgICBjb25zdCByZXN1bHQ6IFJlc3BvbnNlT2JqZWN0ID0ge1xuICAgICAgICBoZWFkZXI6IHt9LFxuICAgICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdC5kYXRhID0gcmVzcG9uc2VUeXBlID09PSAnYmxvYicgPyBhd2FpdCByZXNwb25zZS5ibG9iKCkgOiBzYWZlUGFyc2VKc29uKGF3YWl0IHJlc3BvbnNlLnRleHQoKSlcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8g5LiK5LygIFBPU1Qg6K+35rGC5Y+v6IO96L+U5ZueIFhNTCDnrYnpnZ4gSlNPTiDmoLzlvI/vvIzlrrnplJnlpITnkIZcbiAgICAgICAgY29uc29sZS5sb2coJ2NhdGNoIGFuIGVycm9yJywgZSlcbiAgICAgICAgcmVzdWx0LmRhdGEgPSByZXNwb25zZVR5cGUgPT09ICdibG9iJyA/IGF3YWl0IHJlc3BvbnNlLmJsb2IoKSA6IGF3YWl0IHJlc3BvbnNlLnRleHQoKVxuICAgICAgfVxuXG4gICAgICAvLyDlsIblk43lupTlpLTnu5/kuIDovazkuLrlsI/lhpkga2V5XG4gICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlXG4gICAgICBoZWFkZXJzLmZvckVhY2goKHZhbCwga2V5KSA9PiAocmVzdWx0LmhlYWRlcltrZXkudG9Mb3dlckNhc2UoKV0gPSB2YWwpKVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import { ICloudbaseConfig } from '@cloudbase/types';
2
+ export declare const nodeTool: (app: any, config: ICloudbaseConfig) => void;