@cloudbase/app 3.0.4 → 3.0.6

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