@cloudbase/app 2.26.1 → 2.26.3

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 (59) hide show
  1. package/dist/cjs/index.d.ts +2 -0
  2. package/dist/cjs/index.js +43 -7
  3. package/dist/cjs/index.node.d.ts +6 -0
  4. package/dist/cjs/index.node.js +20 -0
  5. package/dist/cjs/libs/adapter-node/constants.d.ts +33 -0
  6. package/dist/cjs/libs/adapter-node/constants.js +38 -0
  7. package/dist/cjs/libs/adapter-node/context.d.ts +13 -0
  8. package/dist/cjs/libs/adapter-node/context.js +162 -0
  9. package/dist/cjs/libs/adapter-node/index.d.ts +23 -0
  10. package/dist/cjs/libs/adapter-node/index.js +124 -0
  11. package/dist/cjs/libs/adapter-node/metadata.d.ts +14 -0
  12. package/dist/cjs/libs/adapter-node/metadata.js +130 -0
  13. package/dist/cjs/libs/adapter-node/request.d.ts +38 -0
  14. package/dist/cjs/libs/adapter-node/request.js +441 -0
  15. package/dist/cjs/libs/adapter-node/tool.d.ts +2 -0
  16. package/dist/cjs/libs/adapter-node/tool.js +228 -0
  17. package/dist/cjs/libs/adapter-node/types.d.ts +78 -0
  18. package/dist/cjs/libs/adapter-node/types.js +3 -0
  19. package/dist/cjs/libs/adapter-node/utils.d.ts +17 -0
  20. package/dist/cjs/libs/adapter-node/utils.js +221 -0
  21. package/dist/cjs/libs/request.d.ts +1 -0
  22. package/dist/cjs/libs/request.js +34 -19
  23. package/dist/esm/index.d.ts +2 -0
  24. package/dist/esm/index.js +43 -7
  25. package/dist/esm/index.node.d.ts +6 -0
  26. package/dist/esm/index.node.js +12 -0
  27. package/dist/esm/libs/adapter-node/constants.d.ts +33 -0
  28. package/dist/esm/libs/adapter-node/constants.js +35 -0
  29. package/dist/esm/libs/adapter-node/context.d.ts +13 -0
  30. package/dist/esm/libs/adapter-node/context.js +156 -0
  31. package/dist/esm/libs/adapter-node/index.d.ts +23 -0
  32. package/dist/esm/libs/adapter-node/index.js +118 -0
  33. package/dist/esm/libs/adapter-node/metadata.d.ts +14 -0
  34. package/dist/esm/libs/adapter-node/metadata.js +123 -0
  35. package/dist/esm/libs/adapter-node/request.d.ts +38 -0
  36. package/dist/esm/libs/adapter-node/request.js +438 -0
  37. package/dist/esm/libs/adapter-node/tool.d.ts +2 -0
  38. package/dist/esm/libs/adapter-node/tool.js +224 -0
  39. package/dist/esm/libs/adapter-node/types.d.ts +78 -0
  40. package/dist/esm/libs/adapter-node/types.js +2 -0
  41. package/dist/esm/libs/adapter-node/utils.d.ts +17 -0
  42. package/dist/esm/libs/adapter-node/utils.js +205 -0
  43. package/dist/esm/libs/request.d.ts +1 -0
  44. package/dist/esm/libs/request.js +34 -19
  45. package/dist/miniprogram/index.js +1 -1
  46. package/package.json +32 -4
  47. package/src/index.node.ts +22 -0
  48. package/src/index.ts +91 -7
  49. package/src/libs/adapter-node/constants.ts +42 -0
  50. package/src/libs/adapter-node/context.ts +238 -0
  51. package/src/libs/adapter-node/index.ts +166 -0
  52. package/src/libs/adapter-node/metadata.ts +69 -0
  53. package/src/libs/adapter-node/request.ts +486 -0
  54. package/src/libs/adapter-node/tool.ts +223 -0
  55. package/src/libs/adapter-node/types.ts +116 -0
  56. package/src/libs/adapter-node/utils.ts +182 -0
  57. package/src/libs/request.ts +125 -113
  58. package/webpack/web.prod.js +14 -13
  59. package/webpack/webpack.miniprogram.js +10 -3
@@ -0,0 +1,438 @@
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
+ import { getSdkVersion } from '../../constants/common';
53
+ var signFn = null;
54
+ function getSign() {
55
+ return __awaiter(this, void 0, void 0, function () {
56
+ var mod, e_1;
57
+ return __generator(this, function (_a) {
58
+ switch (_a.label) {
59
+ case 0:
60
+ if (!!signFn) return [3, 4];
61
+ _a.label = 1;
62
+ case 1:
63
+ _a.trys.push([1, 3, , 4]);
64
+ return [4, import('@cloudbase/signature-nodejs')];
65
+ case 2:
66
+ mod = _a.sent();
67
+ signFn = mod.sign;
68
+ return [3, 4];
69
+ case 3:
70
+ e_1 = _a.sent();
71
+ console.error('缺少依赖 @cloudbase/signature-nodejs,请执行以下命令安装:\n\n'
72
+ + ' npm install @cloudbase/signature-nodejs\n\n'
73
+ + '该依赖用于 Node 环境下的请求签名。');
74
+ return [3, 4];
75
+ case 4: return [2, signFn];
76
+ }
77
+ });
78
+ });
79
+ }
80
+ var NodeRequest = (function () {
81
+ function NodeRequest(config) {
82
+ var _this = this;
83
+ this.getReqOptions = function (url, options) { return __awaiter(_this, void 0, void 0, function () {
84
+ 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;
85
+ var _e, _f, _g, _h, _j, _k, _l;
86
+ return __generator(this, function (_m) {
87
+ switch (_m.label) {
88
+ case 0:
89
+ urlObj = new URL(url);
90
+ TCB_SOURCE = getCloudbaseContext().TCB_SOURCE;
91
+ _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;
92
+ return [4, getCurrRunEnvTag()];
93
+ case 1:
94
+ SOURCE = _b.apply(_a, [_m.sent()]);
95
+ options.headers = __assign(__assign({}, options.headers), { 'User-Agent': "adapter-node/".concat(((_g = options.headers) === null || _g === void 0 ? void 0 : _g['X-SDK-Version']) || "@cloudbase/js-sdk/".concat(getSdkVersion())), 'X-TCB-Source': SOURCE, 'X-Client-Timestamp': new Date().valueOf(), 'X-TCB-Region': INIT_CONFIG.region || getEnv('TENCENTCLOUD_REGION') || '', Host: urlObj.host });
96
+ if ((_j = (_h = options.headers.Authorization) === null || _h === void 0 ? void 0 : _h.replace('Bearer', '')) === null || _j === void 0 ? void 0 : _j.trim()) {
97
+ return [2, options];
98
+ }
99
+ if (urlObj.pathname.startsWith('/auth/') && urlObj.pathname !== CLIENT_AUTH_PATH) {
100
+ return [2, options];
101
+ }
102
+ isAdminPath = urlObj.pathname === ADMIN_PATH;
103
+ UNSUPPORTED_V3_SIGN_PATH = ['/v1/model/', '/v1/rdb/', '/v1/ai/'];
104
+ if (!UNSUPPORTED_V3_SIGN_PATH.some(function (v) { return urlObj.pathname.startsWith(v); })) return [3, 3];
105
+ return [4, this.getClientCredential({ origin: urlObj.origin })];
106
+ case 2:
107
+ token = _m.sent();
108
+ options.headers.Authorization = "Bearer ".concat(token);
109
+ return [2, options];
110
+ case 3:
111
+ _c = ((_k = this.config) === null || _k === void 0 ? void 0 : _k.auth) || {}, secretId = _c.secretId, secretKey = _c.secretKey, sessionToken = _c.sessionToken;
112
+ secretType = (((_l = this.config) === null || _l === void 0 ? void 0 : _l.auth) || {}).secretType;
113
+ method = options.method, body = options.body;
114
+ headers = JSON.parse(JSON.stringify(options.headers));
115
+ params = typeof body === 'object' ? body : safeParseJson(body) || '';
116
+ if (params.access_token) {
117
+ return [2, options];
118
+ }
119
+ if (method.toLowerCase() === 'get') {
120
+ params = undefined;
121
+ }
122
+ if (!secretId || !secretKey || secretType === 'SESSION_SECRET') {
123
+ secretInfo = getSecretInfo();
124
+ secretId = secretInfo.secretId;
125
+ secretKey = secretInfo.secretKey;
126
+ sessionToken = secretInfo.sessionToken;
127
+ }
128
+ if (!secretId || !secretKey) {
129
+ return [2, options];
130
+ }
131
+ delete headers.Authorization;
132
+ if (headers['content-type']) {
133
+ headers['content-type'] = headers['content-type'].toLowerCase();
134
+ }
135
+ else if (headers['Content-Type']) {
136
+ headers['Content-Type'] = headers['Content-Type'].toLowerCase();
137
+ }
138
+ if (isAdminPath && !!sessionToken) {
139
+ params.sessionToken = sessionToken;
140
+ }
141
+ signedParams = {
142
+ secretId: secretId,
143
+ secretKey: secretKey,
144
+ method: method,
145
+ url: url,
146
+ params: params,
147
+ headers: headers,
148
+ withSignedParams: isAdminPath,
149
+ timestamp: Math.floor(new Date().getTime() / 1000) - 1,
150
+ isCloudApi: !isAdminPath,
151
+ };
152
+ return [4, getSign()];
153
+ case 4:
154
+ sign = _m.sent();
155
+ if (!sign)
156
+ return [2, options];
157
+ _d = sign(signedParams), authorization = _d.authorization, timestamp = _d.timestamp;
158
+ if (typeof sessionToken === 'string' && sessionToken !== '') {
159
+ if (isAdminPath) {
160
+ headers.Authorization = "".concat(authorization);
161
+ headers['X-Timestamp'] = timestamp;
162
+ headers['X-Signature-Expires'] = 600;
163
+ }
164
+ else {
165
+ headers.Authorization = "".concat(authorization, ", Timestamp=").concat(timestamp, ", Token=").concat(sessionToken);
166
+ }
167
+ }
168
+ else {
169
+ headers.Authorization = "".concat(authorization, ", Timestamp=").concat(timestamp);
170
+ if (isAdminPath) {
171
+ headers['X-Timestamp'] = timestamp;
172
+ headers['X-Signature-Expires'] = 600;
173
+ }
174
+ }
175
+ return [2, __assign(__assign({}, options), { headers: headers, body: typeof params === 'object' ? JSON.stringify(params) : params })];
176
+ }
177
+ });
178
+ }); };
179
+ this.get = function (options) { return _this.request(__assign(__assign({}, options), { method: 'get' }), _this.restrictedMethods.includes('get')); };
180
+ this.post = function (options) { return _this.request(__assign(__assign({}, options), { method: 'post' }), _this.restrictedMethods.includes('post')); };
181
+ this.put = function (options) { return _this.request(__assign(__assign({}, options), { method: 'put' })); };
182
+ this.upload = function (options) {
183
+ var _a;
184
+ var _data = options.data, file = options.file, name = options.name, method = options.method, _b = options.headers, headers = _b === void 0 ? {} : _b;
185
+ if (file === undefined || name == undefined) {
186
+ throw new Error('file and name is required');
187
+ }
188
+ var data = obj2StrRecord(_data !== null && _data !== void 0 ? _data : {});
189
+ var loweredMethod = method === null || method === void 0 ? void 0 : method.toLowerCase();
190
+ var reqMethod = (_a = ['post', 'put'].find(function (m) { return m === loweredMethod; })) !== null && _a !== void 0 ? _a : 'put';
191
+ var formData = new FormData();
192
+ if (reqMethod === 'post') {
193
+ Object.keys(data).forEach(function (key) {
194
+ formData.append(key, data[key]);
195
+ });
196
+ formData.append('key', name);
197
+ formData.append('file', file);
198
+ return _this.request(__assign(__assign({}, options), { data: formData, method: reqMethod }), _this.restrictedMethods.includes('upload'));
199
+ }
200
+ return _this.request(__assign(__assign({}, options), { method: 'put', headers: headers, body: file }), _this.restrictedMethods.includes('upload'));
201
+ };
202
+ this.download = function (options) { return __awaiter(_this, void 0, void 0, function () {
203
+ var data, url, fileName, link;
204
+ var _a;
205
+ return __generator(this, function (_b) {
206
+ switch (_b.label) {
207
+ case 0: return [4, this.get(__assign(__assign({}, options), { headers: {}, responseType: 'blob' }))];
208
+ case 1:
209
+ data = (_b.sent()).data;
210
+ url = window.URL.createObjectURL(new Blob([data]));
211
+ fileName = decodeURIComponent(new URL((_a = options === null || options === void 0 ? void 0 : options.url) !== null && _a !== void 0 ? _a : '').pathname.split('/').pop() || '');
212
+ link = document.createElement('a');
213
+ link.href = url;
214
+ link.setAttribute('download', fileName);
215
+ link.style.display = 'none';
216
+ document.body.appendChild(link);
217
+ link.click();
218
+ window.URL.revokeObjectURL(url);
219
+ document.body.removeChild(link);
220
+ return [2, new Promise(function (resolve) {
221
+ resolve({
222
+ statusCode: 200,
223
+ tempFilePath: options.url,
224
+ });
225
+ })];
226
+ }
227
+ });
228
+ }); };
229
+ this.fetch = function (options) { return __awaiter(_this, void 0, void 0, function () {
230
+ var _a, enableAbort, _b, stream, signal, customReqOpts, url, abortController, timeout, timer, headers, fetchOptions, res, ret, _c, _d;
231
+ var _e;
232
+ return __generator(this, function (_f) {
233
+ switch (_f.label) {
234
+ case 0:
235
+ _a = options.enableAbort, enableAbort = _a === void 0 ? false : _a, _b = options.stream, stream = _b === void 0 ? false : _b, signal = options.signal, customReqOpts = options.customReqOpts;
236
+ url = this.getRealUrl(options.url, options.headers || {}, options.body);
237
+ abortController = new AbortController();
238
+ timeout = (customReqOpts === null || customReqOpts === void 0 ? void 0 : customReqOpts.timeout) || this.timeout;
239
+ if (signal) {
240
+ if (signal.aborted) {
241
+ abortController.abort();
242
+ }
243
+ else {
244
+ signal.addEventListener('abort', function () { return abortController.abort(); });
245
+ }
246
+ }
247
+ timer = undefined;
248
+ if (enableAbort || timeout) {
249
+ timer = setTimeout(function () {
250
+ var timeoutMsg = "\u8BF7\u6C42\u5728".concat(timeout / 1000, "s\u5185\u672A\u5B8C\u6210\uFF0C\u5DF2\u4E2D\u65AD");
251
+ console.warn(timeoutMsg);
252
+ abortController.abort(new Error(timeoutMsg));
253
+ }, timeout);
254
+ }
255
+ headers = options.headers ? headersInit2Indexable(options.headers) : undefined;
256
+ return [4, this.getReqOptions(url, __assign(__assign({}, options), { headers: headers, body: options.body, signal: abortController.signal }))];
257
+ case 1:
258
+ fetchOptions = _f.sent();
259
+ return [4, fetch(url, fetchOptions)
260
+ .then(function (x) {
261
+ clearTimeout(timer);
262
+ return x;
263
+ })
264
+ .catch(function (x) {
265
+ clearTimeout(timer);
266
+ return Promise.reject(x);
267
+ })];
268
+ case 2:
269
+ res = _f.sent();
270
+ _e = {};
271
+ if (!(+res.status === 204)) return [3, 3];
272
+ _c = '';
273
+ return [3, 7];
274
+ case 3:
275
+ if (!stream) return [3, 4];
276
+ _d = res.body;
277
+ return [3, 6];
278
+ case 4: return [4, res.json()];
279
+ case 5:
280
+ _d = _f.sent();
281
+ _f.label = 6;
282
+ case 6:
283
+ _c = _d;
284
+ _f.label = 7;
285
+ case 7:
286
+ ret = (_e.data = _c,
287
+ _e.statusCode = res.status,
288
+ _e.header = res.headers,
289
+ _e);
290
+ return [2, ret];
291
+ }
292
+ });
293
+ }); };
294
+ this.request = function (options, enableAbort) {
295
+ if (enableAbort === void 0) { enableAbort = false; }
296
+ return __awaiter(_this, void 0, void 0, function () {
297
+ 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;
298
+ return __generator(this, function (_g) {
299
+ switch (_g.label) {
300
+ case 0:
301
+ 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;
302
+ headers = obj2StrRecord(_headers);
303
+ method = String(_method).toLowerCase() || 'get';
304
+ abortController = new AbortController();
305
+ signal = abortController.signal;
306
+ timeout = (customReqOpts === null || customReqOpts === void 0 ? void 0 : customReqOpts.timeout) || this.timeout;
307
+ if (isFormData(data)) {
308
+ payload = data;
309
+ }
310
+ else if (headers['content-type'] === 'application/x-www-form-urlencoded') {
311
+ payload = toQueryString(data !== null && data !== void 0 ? data : {});
312
+ }
313
+ else if (body) {
314
+ payload = body;
315
+ }
316
+ else {
317
+ payload = data ? JSON.stringify(data) : undefined;
318
+ }
319
+ realUrl = this.getRealUrl(formatUrl('https', url !== null && url !== void 0 ? url : '', method === 'get' ? data : {}), options.headers || {}, payload);
320
+ if (enableAbort || timeout) {
321
+ timer = setTimeout(function () {
322
+ var timeoutMsg = "\u8BF7\u6C42\u5728".concat(timeout / 1000, "s\u5185\u672A\u5B8C\u6210\uFF0C\u5DF2\u4E2D\u65AD");
323
+ console.warn(timeoutMsg);
324
+ abortController.abort(new Error(timeoutMsg));
325
+ }, timeout);
326
+ }
327
+ return [4, this.getReqOptions(realUrl, {
328
+ method: method,
329
+ headers: headers,
330
+ body: payload,
331
+ credentials: withCredentials ? 'include' : 'same-origin',
332
+ signal: signal,
333
+ })];
334
+ case 1:
335
+ requestOptions = _g.sent();
336
+ _g.label = 2;
337
+ case 2:
338
+ _g.trys.push([2, , 15, 16]);
339
+ return [4, fetch(realUrl, requestOptions)];
340
+ case 3:
341
+ response = _g.sent();
342
+ result_1 = {
343
+ header: {},
344
+ statusCode: response.status,
345
+ };
346
+ _g.label = 4;
347
+ case 4:
348
+ _g.trys.push([4, 9, , 14]);
349
+ _b = result_1;
350
+ if (!(responseType === 'blob')) return [3, 6];
351
+ return [4, response.blob()];
352
+ case 5:
353
+ _c = _g.sent();
354
+ return [3, 8];
355
+ case 6:
356
+ _d = safeParseJson;
357
+ return [4, response.text()];
358
+ case 7:
359
+ _c = _d.apply(void 0, [_g.sent()]);
360
+ _g.label = 8;
361
+ case 8:
362
+ _b.data = _c;
363
+ return [3, 14];
364
+ case 9:
365
+ e_2 = _g.sent();
366
+ console.log('catch an error', e_2);
367
+ _e = result_1;
368
+ if (!(responseType === 'blob')) return [3, 11];
369
+ return [4, response.blob()];
370
+ case 10:
371
+ _f = _g.sent();
372
+ return [3, 13];
373
+ case 11: return [4, response.text()];
374
+ case 12:
375
+ _f = _g.sent();
376
+ _g.label = 13;
377
+ case 13:
378
+ _e.data = _f;
379
+ return [3, 14];
380
+ case 14:
381
+ headers_1 = response.headers;
382
+ headers_1.forEach(function (val, key) { return (result_1.header[key.toLowerCase()] = val); });
383
+ return [2, result_1];
384
+ case 15:
385
+ clearTimeout(timer);
386
+ return [7];
387
+ case 16: return [2];
388
+ }
389
+ });
390
+ });
391
+ };
392
+ var timeout = config.timeout, restrictedMethods = config.restrictedMethods;
393
+ this.timeout = timeout || 15000;
394
+ this.restrictedMethods = restrictedMethods || ['get', 'post', 'upload', 'download'];
395
+ this.config = config;
396
+ }
397
+ NodeRequest.prototype.getClientCredential = function (opts) {
398
+ var _a;
399
+ return __awaiter(this, void 0, void 0, function () {
400
+ var res;
401
+ return __generator(this, function (_b) {
402
+ switch (_b.label) {
403
+ case 0: return [4, this.fetch({
404
+ url: "".concat(opts.origin).concat(CLIENT_AUTH_PATH),
405
+ method: 'POST',
406
+ headers: {
407
+ 'content-type': 'application/json',
408
+ },
409
+ body: JSON.stringify({
410
+ grant_type: 'client_credentials',
411
+ }),
412
+ })];
413
+ case 1:
414
+ res = _b.sent();
415
+ return [2, (_a = res.data) === null || _a === void 0 ? void 0 : _a.access_token];
416
+ }
417
+ });
418
+ });
419
+ };
420
+ NodeRequest.prototype.getRealUrl = function (url, headers, body) {
421
+ var _a, _b, _c, _d;
422
+ if ((_b = (_a = headers.Authorization) === null || _a === void 0 ? void 0 : _a.replace('Bearer', '')) === null || _b === void 0 ? void 0 : _b.trim()) {
423
+ return url;
424
+ }
425
+ var params = typeof body === 'object' ? body : safeParseJson(body) || '';
426
+ if (params.access_token) {
427
+ return url;
428
+ }
429
+ var urlObj = new URL(url);
430
+ 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)) {
431
+ urlObj.pathname = ADMIN_PATH;
432
+ }
433
+ return urlObj.toString();
434
+ };
435
+ return NodeRequest;
436
+ }());
437
+ export { NodeRequest };
438
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWJzL2FkYXB0ZXItbm9kZS9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsT0FBTyxFQU9MLFNBQVMsR0FDVixNQUFNLDhCQUE4QixDQUFBO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFM0UsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsYUFBYSxFQUNiLGFBQWEsRUFDYixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGdCQUFnQixHQUNqQixNQUFNLFNBQVMsQ0FBQTtBQUVoQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFHdEQsSUFBSSxNQUFNLEdBQXFDLElBQUksQ0FBQTtBQUNuRCxTQUFlLE9BQU87Ozs7Ozt5QkFDaEIsQ0FBQyxNQUFNLEVBQVAsY0FBTzs7OztvQkFHSyxXQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxFQUFBOztvQkFBakQsR0FBRyxHQUFHLFNBQTJDO29CQUN2RCxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQTs7OztvQkFFakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpREFBaUQ7MEJBQzNELCtDQUErQzswQkFDL0Msc0JBQXNCLENBQUMsQ0FBQTs7d0JBRy9CLFdBQU8sTUFBTyxFQUFBOzs7O0NBQ2Y7QUFPRDtJQVVFLHFCQUFZLE1BQXlDO1FBQXJELGlCQUtDO1FBdURNLGtCQUFhLEdBQUcsVUFDckIsR0FBVyxFQUNYLE9BT0M7Ozs7Ozt3QkFFSyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7d0JB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b0I7NkJBQ2pDLENBQUM7eUJBQ0gsQ0FBQyxFQUFBOzt3QkFUSSxHQUFHLEdBQUcsU0FTVjt3QkFFRixXQUFPLE1BQUEsR0FBRyxDQUFDLElBQUksMENBQUUsWUFBWSxFQUFBOzs7O0tBQzlCO0lBT0QsZ0NBQVUsR0FBVixVQUFXLEdBQVcsRUFBRSxPQUE0QixFQUFFLElBQVM7O1FBQzdELElBQUksTUFBQSxNQUFBLE9BQU8sQ0FBQyxhQUFhLDBDQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLDBDQUFFLElBQUksRUFBRSxFQUFFO1lBQ3hELE9BQU8sR0FBRyxDQUFBO1NBQ1g7UUFFRCxJQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUUxRSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7WUFDdkIsT0FBTyxHQUFHLENBQUE7U0FDWDtRQUVELElBQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRTNCLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxNQUFNLEtBQUksTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksMENBQUUsUUFBUSxDQUFBLEtBQUksTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksMENBQUUsU0FBUyxDQUFBLEVBQUU7WUFDM0YsTUFBTSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUE7U0FDN0I7UUFDRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBNFhILGtCQUFDO0FBQUQsQ0FBQyxBQXRiRCxJQXNiQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG5pbXBvcnQge1xuICBJRmV0Y2hPcHRpb25zLFxuICBJUmVxdWVzdENvbmZpZyxcbiAgSVJlcXVlc3RNZXRob2QsXG4gIElSZXF1ZXN0T3B0aW9ucyxcbiAgUmVzcG9uc2VPYmplY3QsXG4gIFNES1JlcXVlc3RJbnRlcmZhY2UsXG4gIGZvcm1hdFVybCxcbn0gZnJvbSAnQGNsb3VkYmFzZS9hZGFwdGVyLWludGVyZmFjZSdcbmltcG9ydCB7IEFETUlOX1BBVEgsIENMSUVOVF9BVVRIX1BBVEggfSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IGdldENsb3VkYmFzZUNvbnRleHQsIGdldFNlY3JldEluZm8sIElOSVRfQ09ORklHIH0gZnJvbSAnLi9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBJQ3VzdG9tUmVxT3B0cyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQge1xuICBnZXRFbnYsXG4gIGlzRm9ybURhdGEsXG4gIHRvUXVlcnlTdHJpbmcsXG4gIHNhZmVQYXJzZUpzb24sXG4gIG9iajJTdHJSZWNvcmQsXG4gIGhlYWRlcnNJbml0MkluZGV4YWJsZSxcbiAgZ2V0Q3VyclJ1bkVudlRhZyxcbn0gZnJvbSAnLi91dGlscydcbmltcG9ydCB7IElDbG91ZGJhc2VDb25maWcgfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0U2RrVmVyc2lvbiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb21tb24nXG4vLyDlu7bov5/liqDovb3vvIzpgb/lhY3pnZ4gTm9kZSDnjq/looPmiZPljIXml7blvJXlhaXmraTljIVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5sZXQgc2lnbkZuOiAoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpIHwgbnVsbCA9IG51bGxcbmFzeW5jIGZ1bmN0aW9uIGdldFNpZ24oKSB7XG4gIGlmICghc2lnbkZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEB0cy1pZ25vcmUg4oCUIOivpeWMheS7heWcqCBOb2RlIOi/kOihjOaXtuWtmOWcqO+8jOW8gOWPkeeOr+Wig+WPr+iDveacquWuieijhVxuICAgICAgY29uc3QgbW9kID0gYXdhaXQgaW1wb3J0KCdAY2xvdWRiYXNlL3NpZ25hdHVyZS1ub2RlanMnKVxuICAgICAgc2lnbkZuID0gbW9kLnNpZ25cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCfnvLrlsJHkvp3otZYgQGNsb3VkYmFzZS9zaWduYXR1cmUtbm9kZWpz77yM6K+35omn6KGM5Lul5LiL5ZG95Luk5a6J6KOF77yaXFxuXFxuJ1xuICAgICAgICArICcgIG5wbSBpbnN0YWxsIEBjbG91ZGJhc2Uvc2lnbmF0dXJlLW5vZGVqc1xcblxcbidcbiAgICAgICAgKyAn6K+l5L6d6LWW55So5LqOIE5vZGUg546v5aKD5LiL55qE6K+35rGC562+5ZCN44CCJylcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNpZ25GbiFcbn1cblxuLyoqXG4gKiBOb2RlLmpzIOeOr+Wig+S4i+eahCBIVFRQIOivt+axguWunueOsFxuICog5Z+65LqO5Y6f55SfIGZldGNo77yM5pSv5oyBIEdFVC9QT1NUL1BVVC/kuIrkvKAv5LiL6L29L+a1geW8j+ivt+axglxuICog6Ieq5Yqo5aSE55CGIFYzIOetvuWQjeWSjCBCZWFyZXIgVG9rZW4g6K6k6K+BXG4gKi9cbmV4cG9ydCBjbGFzcyBOb2RlUmVxdWVzdCBpbXBsZW1lbnRzIFNES1JlcXVlc3RJbnRlcmZhY2Uge1xuICAvKiog6K+35rGC6YWN572u77yM5YyF5ZCr6K6k6K+B5L+h5oGvICovXG4gIGNvbmZpZzogSVJlcXVlc3RDb25maWcgJiBJQ2xvdWRiYXNlQ29uZmlnXG5cbiAgLyoqIOivt+axgui2heaXtuaXtumXtO+8iOavq+enku+8ie+8jOm7mOiupCAxNTAwMCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlclxuXG4gIC8qKiDlj5fotoXml7bmjqfliLbnmoTor7fmsYLnsbvlnovliJfooaggKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZXN0cmljdGVkTWV0aG9kczogQXJyYXk8SVJlcXVlc3RNZXRob2Q+XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBJUmVxdWVzdENvbmZpZyAmIElDbG91ZGJhc2VDb25maWcpIHtcbiAgICBjb25zdCB7IHRpbWVvdXQsIHJlc3RyaWN0ZWRNZXRob2RzIH0gPSBjb25maWdcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0IHx8IDE1MDAwXG4gICAgdGhpcy5yZXN0cmljdGVkTWV0aG9kcyA9IHJlc3RyaWN0ZWRNZXRob2RzIHx8IFsnZ2V0JywgJ3Bvc3QnLCAndXBsb2FkJywgJ2Rvd25sb2FkJ11cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZ1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluWuouaIt+err+WHreivgSBhY2Nlc3NfdG9rZW7vvIzkuLrnrqHnkIblkZjmnYPpmZBcbiAgICog55So5LqO5LiN5pSv5oyBIFYzIOetvuWQjeeahOaOpeWPo++8iOWmguaVsOaNruaooeWei+OAgeWFs+ezu+Wei+aVsOaNruW6k+OAgUFJ77yJXG4gICAqL1xuICBhc3luYyBnZXRDbGllbnRDcmVkZW50aWFsKG9wdHM6IHsgb3JpZ2luOiBzdHJpbmcgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5mZXRjaCh7XG4gICAgICB1cmw6IGAke29wdHMub3JpZ2lufSR7Q0xJRU5UX0FVVEhfUEFUSH1gLFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBncmFudF90eXBlOiAnY2xpZW50X2NyZWRlbnRpYWxzJyxcbiAgICAgIH0pLFxuICAgIH0pXG5cbiAgICByZXR1cm4gcmVzLmRhdGE/LmFjY2Vzc190b2tlblxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluWunumZheivt+axgiBVUkxcbiAgICog5b2T6K+35rGC5pyq5pC65bimIEF1dGhvcml6YXRpb24g5LiU5pyq6Ieq5bimIGFjY2Vzc190b2tlbiDml7bvvIxcbiAgICog5bCGIC93ZWIg6Lev5b6E5pu/5o2i5Li6IC9hZG1pbu+8iOeuoeeQhuerr+etvuWQjei3r+W+hO+8iVxuICAgKi9cbiAgZ2V0UmVhbFVybCh1cmw6IHN0cmluZywgaGVhZGVyczogUmVjb3JkPHN0cmluZywgYW55PiwgYm9keTogYW55KSB7XG4gICAgaWYgKGhlYWRlcnMuQXV0aG9yaXphdGlvbj8ucmVwbGFjZSgnQmVhcmVyJywgJycpPy50cmltKCkpIHtcbiAgICAgIHJldHVybiB1cmxcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXMgPSB0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgPyBib2R5IDogc2FmZVBhcnNlSnNvbihib2R5KSB8fCAnJ1xuXG4gICAgaWYgKHBhcmFtcy5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgIHJldHVybiB1cmxcbiAgICB9XG5cbiAgICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHVybClcblxuICAgIGlmICh1cmxPYmoucGF0aG5hbWUgPT09ICcvd2ViJyAmJiB0aGlzLmNvbmZpZy5hdXRoPy5zZWNyZXRJZCAmJiB0aGlzLmNvbmZpZy5hdXRoPy5zZWNyZXRLZXkpIHtcbiAgICAgIHVybE9iai5wYXRobmFtZSA9IEFETUlOX1BBVEhcbiAgICB9XG4gICAgcmV0dXJuIHVybE9iai50b1N0cmluZygpXG4gIH1cblxuICAvKipcbiAgICog5Li66K+35rGC5re75Yqg562+5ZCN5oiW6K6k6K+B5L+h5oGvXG4gICAqXG4gICAqIOWkhOeQhumAu+i+keS8mOWFiOe6p++8mlxuICAgKiAxLiDlt7LmnIkgQXV0aG9yaXphdGlvbiBoZWFkZXIg4oaSIOebtOaOpei/lOWbnlxuICAgKiAyLiAvYXV0aC8g6Lev5b6EIOKGkiBTREsg6K6k6K+B5o6l5Y+j77yM5peg6ZyA562+5ZCNXG4gICAqIDMuIOS4jeaUr+aMgSBWMyDnrb7lkI3nmoTot6/lvoTvvIgvdjEvbW9kZWwvIOetie+8ieKGkiDnlKggY2xpZW50Q3JlZGVudGlhbCBCZWFyZXIgVG9rZW5cbiAgICogNC4g5Y+C5pWw5ZCrIGFjY2Vzc190b2tlbiDihpIg5peg6ZyA562+5ZCNXG4gICAqIDUuIOWFtuS7liDihpIg5L2/55SoIFYzIOetvuWQje+8iFRDMy1ITUFDLVNIQTI1Nu+8iVxuICAgKi9cbiAgcHVibGljIGdldFJlcU9wdGlvbnMgPSBhc3luYyAoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgbWV0aG9kPzogYW55XG4gICAgICBoZWFkZXJzOiBhbnlcbiAgICAgIGJvZHk/OiBhbnlcbiAgICAgIGNyZWRlbnRpYWxzPzogc3RyaW5nXG4gICAgICBzaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICAgdXJsPzogYW55XG4gICAgfSxcbiAgKSA9PiB7XG4gICAgY29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpXG5cbiAgICBjb25zdCB7IFRDQl9TT1VSQ0UgfSA9IGdldENsb3VkYmFzZUNvbnRleHQoKVxuICAgIC8vIE5vdGU6IOS6keWHveaVsOiiq+iwg+eUqOaXtuWPr+iDveiwg+eUqOerr+acquS8oOmAkiBTT1VSQ0XvvIxUQ0JfU09VUkNFIOWPr+iDveS4uuepulxuICAgIGNvbnN0IFNPVVJDRSA9IGAke0lOSVRfQ09ORklHLmNvbnRleHQ/LmV4dGVuZGVkQ29udGV4dD8uc291cmNlIHx8IFRDQl9TT1VSQ0UgfHwgJyd9LCR7YXdhaXQgZ2V0Q3VyclJ1bkVudlRhZygpfWBcblxuICAgIG9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICdVc2VyLUFnZW50JzogYGFkYXB0ZXItbm9kZS8ke29wdGlvbnMuaGVhZGVycz8uWydYLVNESy1WZXJzaW9uJ10gfHwgYEBjbG91ZGJhc2UvanMtc2RrLyR7Z2V0U2RrVmVyc2lvbigpfWB9YCxcbiAgICAgICdYLVRDQi1Tb3VyY2UnOiBTT1VSQ0UsXG4gICAgICAnWC1DbGllbnQtVGltZXN0YW1wJzogbmV3IERhdGUoKS52YWx1ZU9mKCksXG4gICAgICAnWC1UQ0ItUmVnaW9uJzogSU5JVF9DT05GSUcucmVnaW9uIHx8IGdldEVudignVEVOQ0VOVENMT1VEX1JFR0lPTicpIHx8ICcnLFxuICAgICAgSG9zdDogdXJsT2JqLmhvc3QsXG4gICAgfVxuXG4gICAgLy8g5bey5pC65bim5pyJ5pWIIEF1dGhvcml6YXRpb27vvIznm7TmjqXov5Tlm55cbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzLkF1dGhvcml6YXRpb24/LnJlcGxhY2UoJ0JlYXJlcicsICcnKT8udHJpbSgpKSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIC8vIGF1dGgg55u45YWz5o6l5Y+j5LiN6ZyA6KaB562+5ZCNXG4gICAgaWYgKHVybE9iai5wYXRobmFtZS5zdGFydHNXaXRoKCcvYXV0aC8nKSAmJiB1cmxPYmoucGF0aG5hbWUgIT09IENMSUVOVF9BVVRIX1BBVEgpIHtcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgY29uc3QgaXNBZG1pblBhdGggPSB1cmxPYmoucGF0aG5hbWUgPT09IEFETUlOX1BBVEhcblxuICAgIC8vIOi/meS6m+i3r+W+hOS4jeaUr+aMgSBWMyDnrb7lkI3vvIzmlLnnlKggY2xpZW50Q3JlZGVudGlhbCDojrflj5YgQmVhcmVyIFRva2VuXG4gICAgY29uc3QgVU5TVVBQT1JURURfVjNfU0lHTl9QQVRIID0gWycvdjEvbW9kZWwvJywgJy92MS9yZGIvJywgJy92MS9haS8nXVxuXG4gICAgaWYgKFVOU1VQUE9SVEVEX1YzX1NJR05fUEFUSC5zb21lKHYgPT4gdXJsT2JqLnBhdGhuYW1lLnN0YXJ0c1dpdGgodikpKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50Q3JlZGVudGlhbCh7IG9yaWdpbjogdXJsT2JqLm9yaWdpbiB9KVxuICAgICAgb3B0aW9ucy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgQmVhcmVyICR7dG9rZW59YFxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICBsZXQgeyBzZWNyZXRJZCwgc2VjcmV0S2V5LCBzZXNzaW9uVG9rZW4gfSA9IHRoaXMuY29uZmlnPy5hdXRoIHx8IHt9XG4gICAgY29uc3QgeyBzZWNyZXRUeXBlIH0gPSB0aGlzLmNvbmZpZz8uYXV0aCB8fCB7fVxuICAgIGNvbnN0IHsgbWV0aG9kLCBib2R5IH0gPSBvcHRpb25zXG4gICAgY29uc3QgaGVhZGVycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5oZWFkZXJzKSlcbiAgICBsZXQgcGFyYW1zID0gdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnID8gYm9keSA6IHNhZmVQYXJzZUpzb24oYm9keSkgfHwgJydcblxuICAgIC8vIOWPguaVsOiHquW4piBhY2Nlc3NfdG9rZW7vvIzml6DpnIDnrb7lkI1cbiAgICBpZiAocGFyYW1zLmFjY2Vzc190b2tlbikge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICAvLyBHRVQg6K+35rGC5Y+C5pWw5bey5ZyoIFVSTCDkuK3vvIznrb7lkI3ml7YgcGFyYW1zIOe9ruepulxuICAgIGlmIChtZXRob2QudG9Mb3dlckNhc2UoKSA9PT0gJ2dldCcpIHtcbiAgICAgIHBhcmFtcyA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIC8vIFNFU1NJT05fU0VDUkVUIOexu+Wei+aIluaXoOWvhumSpeaXtu+8jOS7jueOr+Wig+WPmOmHj+iOt+WPluS4tOaXtuWvhumSpVxuICAgIGlmICghc2VjcmV0SWQgfHwgIXNlY3JldEtleSB8fCBzZWNyZXRUeXBlID09PSAnU0VTU0lPTl9TRUNSRVQnKSB7XG4gICAgICBjb25zdCBzZWNyZXRJbmZvID0gZ2V0U2VjcmV0SW5mbygpXG4gICAgICBzZWNyZXRJZCA9IHNlY3JldEluZm8uc2VjcmV0SWRcbiAgICAgIHNlY3JldEtleSA9IHNlY3JldEluZm8uc2VjcmV0S2V5XG4gICAgICBzZXNzaW9uVG9rZW4gPSBzZWNyZXRJbmZvLnNlc3Npb25Ub2tlblxuICAgIH1cblxuICAgIC8vIOS7jeaXoOWvhumSpeWImei3s+i/h+etvuWQjVxuICAgIGlmICghc2VjcmV0SWQgfHwgIXNlY3JldEtleSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICBkZWxldGUgaGVhZGVycy5BdXRob3JpemF0aW9uXG5cbiAgICAvLyBjb250ZW50LXR5cGUg6ZyA5LiO5pyN5Yqh56uv562+5ZCN6aqM6K+B5L+d5oyB5aSn5bCP5YaZ5LiA6Ie0XG4gICAgaWYgKGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKSB7XG4gICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddLnRvTG93ZXJDYXNlKClcbiAgICB9IGVsc2UgaWYgKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSB7XG4gICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddLnRvTG93ZXJDYXNlKClcbiAgICB9XG5cbiAgICBpZiAoaXNBZG1pblBhdGggJiYgISFzZXNzaW9uVG9rZW4pIHtcbiAgICAgIHBhcmFtcy5zZXNzaW9uVG9rZW4gPSBzZXNzaW9uVG9rZW5cbiAgICB9XG5cbiAgICBjb25zdCBzaWduZWRQYXJhbXMgPSB7XG4gICAgICBzZWNyZXRJZCxcbiAgICAgIHNlY3JldEtleSxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICB3aXRoU2lnbmVkUGFyYW1zOiBpc0FkbWluUGF0aCxcbiAgICAgIHRpbWVzdGFtcDogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApIC0gMSxcbiAgICAgIGlzQ2xvdWRBcGk6ICFpc0FkbWluUGF0aCxcbiAgICB9XG5cblxuICAgIGNvbnN0IHNpZ24gPSBhd2FpdCBnZXRTaWduKClcbiAgICBpZiAoIXNpZ24pIHJldHVybiBvcHRpb25zXG5cbiAgICBjb25zdCB7IGF1dGhvcml6YXRpb24sIHRpbWVzdGFtcCB9ID0gc2lnbihzaWduZWRQYXJhbXMpXG5cbiAgICBpZiAodHlwZW9mIHNlc3Npb25Ub2tlbiA9PT0gJ3N0cmluZycgJiYgc2Vzc2lvblRva2VuICE9PSAnJykge1xuICAgICAgaWYgKGlzQWRtaW5QYXRoKSB7XG4gICAgICAgIGhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGAke2F1dGhvcml6YXRpb259YFxuICAgICAgICBoZWFkZXJzWydYLVRpbWVzdGFtcCddID0gdGltZXN0YW1wXG4gICAgICAgIGhlYWRlcnNbJ1gtU2lnbmF0dXJlLUV4cGlyZXMnXSA9IDYwMFxuICAgICAgfSBlbHNlICB7XG4gICAgICAgIC8vIOS4tOaXtuWvhumSpemcgOimgemineWklumZhOW4piBUb2tlblxuICAgICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9ufSwgVGltZXN0YW1wPSR7dGltZXN0YW1wfSwgVG9rZW49JHtzZXNzaW9uVG9rZW59YFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9ufSwgVGltZXN0YW1wPSR7dGltZXN0YW1wfWBcblxuICAgICAgLy8gYWRtaW4g6Lev5b6E6ZyA6KaB6aKd5aSW55qE5pe26Ze05oiz5ZKM6L+H5pyf5aS0XG4gICAgICBpZiAoaXNBZG1pblBhdGgpIHtcbiAgICAgICAgaGVhZGVyc1snWC1UaW1lc3RhbXAnXSA9IHRpbWVzdGFtcFxuICAgICAgICBoZWFkZXJzWydYLVNpZ25hdHVyZS1FeHBpcmVzJ10gPSA2MDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5OiB0eXBlb2YgcGFyYW1zID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHBhcmFtcykgOiBwYXJhbXMsXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCA9IChvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlT2JqZWN0PiA9PiB0aGlzLnJlcXVlc3QoXG4gICAge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgfSxcbiAgICB0aGlzLnJlc3RyaWN0ZWRNZXRob2RzLmluY2x1ZGVzKCdnZXQnKSxcbiAgKVxuXG4gIHB1YmxpYyBwb3N0ID0gKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHRoaXMucmVxdWVzdChcbiAgICB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgfSxcbiAgICB0aGlzLnJlc3RyaWN0ZWRNZXRob2RzLmluY2x1ZGVzKCdwb3N0JyksXG4gIClcblxuICBwdWJsaWMgcHV0ID0gKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHRoaXMucmVxdWVzdCh7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBtZXRob2Q6ICdwdXQnLFxuICB9KVxuXG4gIC8qKlxuICAgKiDmlofku7bkuIrkvKBcbiAgICogUE9TVCDmlrnlvI/vvJrmnoTlu7ogRm9ybURhdGEg5LiK5LygXG4gICAqIFBVVCDmlrnlvI/vvJrnm7TmjqXlsIbmlofku7bkvZzkuLogYm9keSDkuIrkvKBcbiAgICovXG4gIHB1YmxpYyB1cGxvYWQgPSAob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZU9iamVjdD4gPT4ge1xuICAgIGNvbnN0IHsgZGF0YTogX2RhdGEsIGZpbGUsIG5hbWUsIG1ldGhvZCwgaGVhZGVycyA9IHt9IH0gPSBvcHRpb25zXG4gICAgaWYgKGZpbGUgPT09IHVuZGVmaW5lZCB8fCBuYW1lID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaWxlIGFuZCBuYW1lIGlzIHJlcXVpcmVkJylcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IG9iajJTdHJSZWNvcmQoX2RhdGEgPz8ge30pXG4gICAgY29uc3QgbG93ZXJlZE1ldGhvZCA9IG1ldGhvZD8udG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IHJlcU1ldGhvZCA9IFsncG9zdCcsICdwdXQnXS5maW5kKG0gPT4gbSA9PT0gbG93ZXJlZE1ldGhvZCkgPz8gJ3B1dCdcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgaWYgKHJlcU1ldGhvZCA9PT0gJ3Bvc3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YVtrZXldKVxuICAgICAgfSlcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgna2V5JywgbmFtZSlcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpXG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAgICB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICBtZXRob2Q6IHJlcU1ldGhvZCxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5yZXN0cmljdGVkTWV0aG9kcy5pbmNsdWRlcygndXBsb2FkJyksXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgbWV0aG9kOiAncHV0JyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgYm9keTogZmlsZSxcbiAgICAgIH0sXG4gICAgICB0aGlzLnJlc3RyaWN0ZWRNZXRob2RzLmluY2x1ZGVzKCd1cGxvYWQnKSxcbiAgICApXG4gIH1cblxuICAvKiog5paH5Lu25LiL6L2977yI5rWP6KeI5Zmo546v5aKD77yM6YCa6L+H5Yib5bu6IDxhPiDmoIfnrb7op6blj5HkuIvovb3vvIkgKi9cbiAgcHVibGljIGRvd25sb2FkID0gYXN5bmMgKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8dW5rbm93bj4gPT4ge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5nZXQoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgfSlcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbZGF0YV0pKVxuICAgIGNvbnN0IGZpbGVOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KG5ldyBVUkwob3B0aW9ucz8udXJsID8/ICcnKS5wYXRobmFtZS5zcGxpdCgnLycpLnBvcCgpIHx8ICcnKVxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblxuICAgIGxpbmsuaHJlZiA9IHVybFxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lKVxuICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKVxuICAgIGxpbmsuY2xpY2soKVxuICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICB0ZW1wRmlsZVBhdGg6IG9wdGlvbnMudXJsLFxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOW6leWxgiBmZXRjaCDor7fmsYLvvIzmlK/mjIHmtYHlvI/lk43lupRcbiAgICog6LaF5pe26YCa6L+HIEFib3J0Q29udHJvbGxlciArIHNldFRpbWVvdXQg5a6e546wXG4gICAqL1xuICBwdWJsaWMgZmV0Y2ggPSBhc3luYyAob3B0aW9uczogT21pdDxJRmV0Y2hPcHRpb25zLCAnc2lnbmFsJz4gJiB7IHNpZ25hbD86IEFib3J0U2lnbmFsOyBjdXN0b21SZXFPcHRzPzogSUN1c3RvbVJlcU9wdHMgfSk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHtcbiAgICBjb25zdCB7IGVuYWJsZUFib3J0ID0gZmFsc2UsIHN0cmVhbSA9IGZhbHNlLCBzaWduYWwsIGN1c3RvbVJlcU9wdHMgfSA9IG9wdGlvbnNcbiAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlYWxVcmwob3B0aW9ucy51cmwsIG9wdGlvbnMuaGVhZGVycyB8fCB7fSwgb3B0aW9ucy5ib2R5KVxuICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IHRpbWVvdXQgPSBjdXN0b21SZXFPcHRzPy50aW1lb3V0IHx8IHRoaXMudGltZW91dFxuXG4gICAgLy8g5qGl5o6l5aSW6YOoIHNpZ25hbCDliLDlhoXpg6ggQWJvcnRDb250cm9sbGVyXG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDotoXml7boh6rliqjkuK3mlq1cbiAgICBsZXQgdGltZXIgPSB1bmRlZmluZWRcbiAgICBpZiAoZW5hYmxlQWJvcnQgfHwgdGltZW91dCkge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgdGltZW91dE1zZyA9IGDor7fmsYLlnKgke3RpbWVvdXQgLyAxMDAwfXPlhoXmnKrlrozmiJDvvIzlt7LkuK3mlq1gXG4gICAgICAgIGNvbnNvbGUud2Fybih0aW1lb3V0TXNnKVxuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKHRpbWVvdXRNc2cpKVxuICAgICAgfSwgdGltZW91dClcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8gaGVhZGVyc0luaXQySW5kZXhhYmxlKG9wdGlvbnMuaGVhZGVycykgOiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0UmVxT3B0aW9ucyh1cmwsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keTogb3B0aW9ucy5ib2R5IGFzIGFueSBhcyBOb2RlSlMuUmVhZGFibGVTdHJlYW0sXG4gICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSlcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgZmV0Y2hPcHRpb25zIGFzIFJlcXVlc3RJbml0KVxuICAgICAgLnRoZW4oKHgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgICByZXR1cm4geFxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoeCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh4KVxuICAgICAgfSlcblxuICAgIGNvbnN0IHJldCA9IHtcbiAgICAgIGRhdGE6XG4gICAgICAgICtyZXMuc3RhdHVzID09PSAyMDRcbiAgICAgICAgICA/ICcnIC8vIDIwNCBObyBDb250ZW50XG4gICAgICAgICAgOiBzdHJlYW1cbiAgICAgICAgICAgID8gcmVzLmJvZHlcbiAgICAgICAgICAgIDogYXdhaXQgcmVzLmpzb24oKSxcbiAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXMsXG4gICAgICBoZWFkZXI6IHJlcy5oZWFkZXJzLFxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvKipcbiAgICog6YCa55So6K+35rGC5pa55rOV77yM6KKrIGdldC9wb3N0L3B1dC91cGxvYWQg562J6LCD55SoXG4gICAqIOi0n+i0o+aehOW7uiBwYXlsb2Fk44CB6K6+572u6LaF5pe244CB6Kej5p6Q5ZON5bqUXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0g6K+35rGC6YCJ6aG5XG4gICAqIEBwYXJhbSBlbmFibGVBYm9ydCAtIOaYr+WQpuWQr+eUqOi2heaXtuS4reaWre+8iOeUsSByZXN0cmljdGVkTWV0aG9kcyDlhrPlrprvvIlcbiAgICovXG4gIHB1YmxpYyByZXF1ZXN0ID0gYXN5bmMgKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgZW5hYmxlQWJvcnQgPSBmYWxzZSk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB1cmwsXG4gICAgICBoZWFkZXJzOiBfaGVhZGVycyA9IHt9LFxuICAgICAgZGF0YSxcbiAgICAgIHJlc3BvbnNlVHlwZSxcbiAgICAgIHdpdGhDcmVkZW50aWFscyxcbiAgICAgIGJvZHksXG4gICAgICBtZXRob2Q6IF9tZXRob2QsXG4gICAgICBjdXN0b21SZXFPcHRzLFxuICAgIH0gPSBvcHRpb25zXG4gICAgY29uc3QgaGVhZGVycyA9IG9iajJTdHJSZWNvcmQoX2hlYWRlcnMpXG4gICAgY29uc3QgbWV0aG9kID0gU3RyaW5nKF9tZXRob2QpLnRvTG93ZXJDYXNlKCkgfHwgJ2dldCdcbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCB7IHNpZ25hbCB9ID0gYWJvcnRDb250cm9sbGVyXG4gICAgY29uc3QgdGltZW91dCA9IGN1c3RvbVJlcU9wdHM/LnRpbWVvdXQgfHwgdGhpcy50aW1lb3V0XG5cbiAgICAvLyDmnoTlu7ror7fmsYIgcGF5bG9hZO+8mkZvcm1EYXRhID4gdXJsZW5jb2RlZCA+IHJhdyBib2R5ID4gSlNPTlxuICAgIGxldCBwYXlsb2FkXG4gICAgaWYgKGlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICAgIHBheWxvYWQgPSBkYXRhXG4gICAgfSBlbHNlIGlmIChoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgIHBheWxvYWQgPSB0b1F1ZXJ5U3RyaW5nKGRhdGEgPz8ge30pXG4gICAgfSBlbHNlIGlmIChib2R5KSB7XG4gICAgICBwYXlsb2FkID0gYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXlsb2FkID0gZGF0YSA/IEpTT04uc3RyaW5naWZ5KGRhdGEpIDogdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgcmVhbFVybCA9IHRoaXMuZ2V0UmVhbFVybChcbiAgICAgIGZvcm1hdFVybCgnaHR0cHMnLCB1cmwgPz8gJycsIG1ldGhvZCA9PT0gJ2dldCcgPyBkYXRhIDoge30pLFxuICAgICAgb3B0aW9ucy5oZWFkZXJzIHx8IHt9LFxuICAgICAgcGF5bG9hZCxcbiAgICApXG5cbiAgICAvLyDotoXml7bpgJrov4cgQWJvcnRDb250cm9sbGVyICsgc2V0VGltZW91dCDlrp7njrBcbiAgICBsZXQgdGltZXJcblxuICAgIGlmIChlbmFibGVBYm9ydCB8fCB0aW1lb3V0KSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lb3V0TXNnID0gYOivt+axguWcqCR7dGltZW91dCAvIDEwMDB9c+WGheacquWujOaIkO+8jOW3suS4reaWrWBcbiAgICAgICAgY29uc29sZS53YXJuKHRpbWVvdXRNc2cpXG4gICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IodGltZW91dE1zZykpXG4gICAgICB9LCB0aW1lb3V0KVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRSZXFPcHRpb25zKHJlYWxVcmwsIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5OiBwYXlsb2FkLFxuICAgICAgY3JlZGVudGlhbHM6IHdpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdzYW1lLW9yaWdpbicsXG4gICAgICBzaWduYWwsXG4gICAgfSlcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlYWxVcmwsIHJlcXVlc3RPcHRpb25zIGFzIFJlcXVlc3RJbml0KVxuICAgICAgY29uc3QgcmVzdWx0OiBSZXNwb25zZU9iamVjdCA9IHtcbiAgICAgICAgaGVhZGVyOiB7fSxcbiAgICAgICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQuZGF0YSA9IHJlc3BvbnNlVHlwZSA9PT0gJ2Jsb2InID8gYXdhaXQgcmVzcG9uc2UuYmxvYigpIDogc2FmZVBhcnNlSnNvbihhd2FpdCByZXNwb25zZS50ZXh0KCkpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIOS4iuS8oCBQT1NUIOivt+axguWPr+iDvei/lOWbniBYTUwg562J6Z2eIEpTT04g5qC85byP77yM5a656ZSZ5aSE55CGXG4gICAgICAgIGNvbnNvbGUubG9nKCdjYXRjaCBhbiBlcnJvcicsIGUpXG4gICAgICAgIHJlc3VsdC5kYXRhID0gcmVzcG9uc2VUeXBlID09PSAnYmxvYicgPyBhd2FpdCByZXNwb25zZS5ibG9iKCkgOiBhd2FpdCByZXNwb25zZS50ZXh0KClcbiAgICAgIH1cblxuICAgICAgLy8g5bCG5ZON5bqU5aS057uf5LiA6L2s5Li65bCP5YaZIGtleVxuICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZVxuICAgICAgaGVhZGVycy5mb3JFYWNoKCh2YWwsIGtleSkgPT4gKHJlc3VsdC5oZWFkZXJba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsKSlcblxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH0gZmluYWxseSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ import { ICloudbaseConfig } from '@cloudbase/types';
2
+ export declare const nodeTool: (app: any, config: ICloudbaseConfig) => void;