Compare View

switch
from
...
to
 
Commits (2)

Changes

Showing 4 changed files Side-by-side Diff

... ... @@ -4,8 +4,14 @@ All notable changes to this project will be documented in this file. Dates are d
4 4  
5 5 Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
6 6  
  7 +#### [v1.46.0](https://gitlab.kodesumber.com/komodo/komodo-sdk/compare/v1.45.22...v1.46.0)
  8 +
  9 +- Migrate gateway/pull from request to axios [`d375b0e`](https://gitlab.kodesumber.com/komodo/komodo-sdk/commit/d375b0ee45c49f7da03bba41ab7966e2d497d238)
  10 +
7 11 #### [v1.45.22](https://gitlab.kodesumber.com/komodo/komodo-sdk/compare/v1.45.21...v1.45.22)
8 12  
  13 +> 25 August 2025
  14 +
9 15 - MODULE_NAME on gateway.advice-push-server [`bd290f7`](https://gitlab.kodesumber.com/komodo/komodo-sdk/commit/bd290f7c51f7c386d6844b40a7956528129ae923)
10 16  
11 17 #### [v1.45.21](https://gitlab.kodesumber.com/komodo/komodo-sdk/compare/v1.45.20...v1.45.21)
... ... @@ -4,7 +4,7 @@ const MODULE_NAME = 'KOMODO-SDK.PULL';
4 4 const DEFAULT_REQUEST_TIMEOUT_MS = 20 * 1000;
5 5 const IS_DEBUG = process.env.KOMODO_SDK_DEBUG_PULL;
6 6  
7   -const request = require('request');
  7 +const { default: axios } = require('axios');
8 8 const stringify = require('json-stringify-pretty-compact');
9 9 const logger = require('tektrans-logger');
10 10 const urljoin = require('url-join');
... ... @@ -131,7 +131,7 @@ function replaceRc(originalRc) {
131 131 return config.replace_rc[originalRc] || originalRc;
132 132 }
133 133  
134   -function report(data, xidFromCaller) {
  134 +const report = async (data, xidFromCaller) => {
135 135 const xid = xidFromCaller || uniqid();
136 136  
137 137 let corePullReportUrl;
... ... @@ -185,61 +185,48 @@ function report(data, xidFromCaller) {
185 185 trxId = data.trx_id;
186 186 }
187 187  
188   - const options = {
189   - url: corePullReportUrl,
190   - form: {
191   - trx_id: trxId,
192   - rc: replaceRc(data.rc),
193   - rc_from_handler: data.rc_from_handler,
194   - message: typeof data.message === 'string' ? data.message : stringify(data.message),
195   - handler: config.handler_name,
196   - sn: data.sn,
197   - amount: data.amount,
198   - balance: data.balance,
199   - raw: data.raw,
200   - misc: data.misc,
201   - product: data.product
202   - || (data.misc && data.misc.task && typeof data.misc.task.product === 'string' && data.misc.task.product)
203   - || null,
204   - remote_product: data.remote_product
205   - || (data.misc && data.misc.task && typeof data.misc.task.remote_product === 'string' && data.misc.task.remote_product)
206   - || null,
207   - detail: data.detail || null,
208   - },
209   - };
210   -
211   - if (!config.do_not_verbose_log_report) {
212   - logger.verbose(`${MODULE_NAME} 2110168C: Report to CORE using HTTP POST`, { xid });
213   - }
  188 + const params = new URLSearchParams({
  189 + trx_id: trxId,
  190 + rc: replaceRc(data.rc),
  191 + rc_from_handler: data.rc_from_handler,
  192 + message: typeof data.message === 'string' ? data.message : stringify(data.message),
  193 + handler: config.handler_name,
  194 + sn: data.sn,
  195 + amount: data.amount,
  196 + balance: data.balance,
  197 + raw: data.raw,
  198 + misc: data.misc,
  199 + product: data.product
  200 + || (data.misc && data.misc.task && typeof data.misc.task.product === 'string' && data.misc.task.product)
  201 + || null,
  202 + remote_product: data.remote_product
  203 + || (data.misc && data.misc.task && typeof data.misc.task.remote_product === 'string' && data.misc.task.remote_product)
  204 + || null,
  205 + detail: data.detail || null,
  206 + });
214 207  
215   - request.post(options, (error, response) => {
216   - if (error) {
217   - logger.warn(`${MODULE_NAME} B1CA595F: Error reporting to CORE`, { xid, error });
218   - // eslint-disable-next-line no-use-before-define
219   - resendReport(data);
220   - } else if (response.statusCode !== 200) {
221   - logger.warn(`${MODULE_NAME} 4B73BD23: Error reporting to CORE, http response status is not 200`, {
222   - xid, requestOptions: options, http_response_status: response.statusCode,
223   - });
224   - // eslint-disable-next-line no-use-before-define
225   - resendReport(data);
226   - } else if (!config.do_not_verbose_log_report) {
227   - logger.verbose(`${MODULE_NAME} 379A25AA: Report has been sent to CORE`, { xid, requestOptions: options });
228   - }
  208 + logger.verbose(`${MODULE_NAME} 2110168C: Sending report to CORE`, {
  209 + xid,
  210 + corePullReportUrl,
229 211 });
230   -}
231 212  
232   -function resendReport(data) {
233   - const sleepBeforeResend = Math.round(Math.random() * MAX_SLEEP_BEFORE_RESEND_MS);
234   - logger.verbose(`${MODULE_NAME} DEE44715: Resend report to CORE in ${sleepBeforeResend} ms`);
  213 + try {
  214 + await axios.post(corePullReportUrl, params);
  215 + } catch (e) {
  216 + logger.warn(`${MODULE_NAME} D2877DF6: Exception on sending report to CORE`, {
  217 + xid,
  218 + eCode: e.code,
  219 + eMessage: e.message || e.toString(),
  220 + httpStatus: e.response && e.response.status,
  221 + responseBody: e.response && e.response.data,
  222 + });
235 223  
236   - setTimeout(
237   - () => {
238   - report(data);
239   - },
240   - sleepBeforeResend,
241   - );
242   -}
  224 + const sleepBeforeResend = Math.round(Math.random() * MAX_SLEEP_BEFORE_RESEND_MS);
  225 + setTimeout(() => {
  226 + report(data, xidFromCaller);
  227 + }, sleepBeforeResend);
  228 + }
  229 +};
243 230  
244 231 function forwardCoreTaskToPartner(coreMessage, startTime, xid) {
245 232 let task;
... ... @@ -306,7 +293,7 @@ function forwardCoreTaskToPartner(coreMessage, startTime, xid) {
306 293 });
307 294 }
308 295  
309   -function pullTask() {
  296 +const pullTask = async () => {
310 297 if (isPaused()) {
311 298 if (IS_DEBUG) {
312 299 logger.verbose(`${MODULE_NAME} 76370FE5: PULL TASK paused`);
... ... @@ -356,7 +343,7 @@ function pullTask() {
356 343  
357 344 const xid = uniqid();
358 345  
359   - const bodyOrQs = {
  346 + const params = new URLSearchParams({
360 347 handler: config.handler_name,
361 348 products: (config.products || []).join(','),
362 349 locations: config.locations && config.locations.length ? config.locations.join(',') : 'ALL',
... ... @@ -375,69 +362,26 @@ function pullTask() {
375 362 ) || null,
376 363 komodosdk_type: matrix.komodosdk_type,
377 364 komodosdk_version: matrix.komodosdk_version,
378   - };
379   -
380   - const options = {
381   - url: corePullTaskUrl,
382   - timeout: config.request_timeout || DEFAULT_REQUEST_TIMEOUT_MS,
383   - };
384   -
385   - if (config.pull_task_use_post) {
386   - if (IS_DEBUG) {
387   - logger.verbose(`${MODULE_NAME} CB855B30: PULL TASK using HTTP POST`, { xid });
388   - }
389   - options.method = 'POST';
390   - options.form = bodyOrQs;
391   - } else {
392   - if (IS_DEBUG) {
393   - logger.verbose(`${MODULE_NAME} BA2EF935: PULL TASK using HTTP GET`, { xid });
394   - }
395   - options.method = 'GET';
396   - options.qs = bodyOrQs;
397   - }
398   -
399   - if (config && config.debug_request_task_to_core) {
400   - logger.verbose(`${MODULE_NAME} 0642E25C: Requesting task to CORE`, {
401   - xid, url: options.url, method: options.method, body_or_qs: bodyOrQs,
402   - });
403   - }
  365 + });
404 366  
405 367 const startTime = new Date();
406   - request(options, (error, response, body) => {
407   - pullTaskLocked = false;
  368 + try {
  369 + const response = await axios.post(corePullTaskUrl, params, {
  370 + timeout: DEFAULT_REQUEST_TIMEOUT_MS,
  371 + });
408 372  
409   - const lameLimit = 10 * 1000;
410   - const deltaTime = new Date() - startTime;
411   - if (deltaTime > lameLimit) {
412   - logger.warn(`${MODULE_NAME} B892DC43: LAME-PULL: PULL response from CORE exceeds ${lameLimit} secs`, { xid, deltaTime });
  373 + if (!matrix.core_is_healthy) {
  374 + logger.verbose(`${MODULE_NAME} 099F5B3C: CORE is healthy`, { xid });
  375 + matrix.core_is_healthy = true;
413 376 }
414 377  
415   - if (error) {
416   - if (matrix.core_is_healthy) {
417   - logger.warn(`${MODULE_NAME} FB762F4A: Error pulling task from CORE`, { xid, error });
418   - }
419   - matrix.core_is_healthy = false;
420   - onNoTask();
421   - return;
422   - }
  378 + const body = response && response.data;
423 379  
424   - if (response.statusCode !== 200) {
425   - if (matrix.core_is_healthy) {
426   - logger.warn(`${MODULE_NAME} 8943EECB: CORE http response status code for pull task is not 200`, {
427   - xid,
428   - http_response_status: response.statusCode,
429   - });
430   - }
431   - matrix.core_is_healthy = false;
  380 + if (!body) {
432 381 onNoTask();
433 382 return;
434 383 }
435 384  
436   - if (!matrix.core_is_healthy) {
437   - logger.verbose(`${MODULE_NAME} 099F5B3C: CORE is healthy`, { xid });
438   - }
439   - matrix.core_is_healthy = true;
440   -
441 385 if (body === 'NONE') {
442 386 onNoTask();
443 387 return;
... ... @@ -448,8 +392,23 @@ function pullTask() {
448 392 }
449 393  
450 394 forwardCoreTaskToPartner(body, startTime, xid);
451   - });
452   -}
  395 + } catch (e) {
  396 + if (matrix.core_is_healthy) {
  397 + logger.warn(`${MODULE_NAME} FB762F4A: Error pulling task from CORE`, {
  398 + xid,
  399 + eCode: e.code,
  400 + eMessage: e.message || e.toString(),
  401 + httpStatus: e.response && e.response.status,
  402 + responseBody: e.response && e.response.data,
  403 + });
  404 + }
  405 +
  406 + matrix.core_is_healthy = false;
  407 + onNoTask();
  408 + } finally {
  409 + pullTaskLocked = false;
  410 + }
  411 +};
453 412  
454 413 function pause() {
455 414 matrix.paused = true;
1 1 {
2 2 "name": "komodo-sdk",
3   - "version": "1.45.22",
  3 + "version": "1.46.0",
4 4 "lockfileVersion": 2,
5 5 "requires": true,
6 6 "packages": {
7 7 "": {
8 8 "name": "komodo-sdk",
9   - "version": "1.45.22",
  9 + "version": "1.46.0",
10 10 "license": "ISC",
11 11 "dependencies": {
12 12 "array-unique": "^0.3.2",
  13 + "axios": "^1.11.0",
13 14 "basic-auth": "^2.0.0",
14 15 "body-parser": "^1.18.2",
15 16 "dot-object": "^2.1.4",
... ... @@ -463,6 +464,33 @@
463 464 "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
464 465 "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
465 466 },
  467 + "node_modules/axios": {
  468 + "version": "1.11.0",
  469 + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz",
  470 + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==",
  471 + "license": "MIT",
  472 + "dependencies": {
  473 + "follow-redirects": "^1.15.6",
  474 + "form-data": "^4.0.4",
  475 + "proxy-from-env": "^1.1.0"
  476 + }
  477 + },
  478 + "node_modules/axios/node_modules/form-data": {
  479 + "version": "4.0.4",
  480 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
  481 + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
  482 + "license": "MIT",
  483 + "dependencies": {
  484 + "asynckit": "^0.4.0",
  485 + "combined-stream": "^1.0.8",
  486 + "es-set-tostringtag": "^2.1.0",
  487 + "hasown": "^2.0.2",
  488 + "mime-types": "^2.1.12"
  489 + },
  490 + "engines": {
  491 + "node": ">= 6"
  492 + }
  493 + },
466 494 "node_modules/balanced-match": {
467 495 "version": "1.0.0",
468 496 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
... ... @@ -1022,6 +1050,21 @@
1022 1050 "node": ">= 0.4"
1023 1051 }
1024 1052 },
  1053 + "node_modules/es-set-tostringtag": {
  1054 + "version": "2.1.0",
  1055 + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
  1056 + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
  1057 + "license": "MIT",
  1058 + "dependencies": {
  1059 + "es-errors": "^1.3.0",
  1060 + "get-intrinsic": "^1.2.6",
  1061 + "has-tostringtag": "^1.0.2",
  1062 + "hasown": "^2.0.2"
  1063 + },
  1064 + "engines": {
  1065 + "node": ">= 0.4"
  1066 + }
  1067 + },
1025 1068 "node_modules/es-to-primitive": {
1026 1069 "version": "1.2.1",
1027 1070 "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
... ... @@ -1646,6 +1689,26 @@
1646 1689 "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
1647 1690 "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
1648 1691 },
  1692 + "node_modules/follow-redirects": {
  1693 + "version": "1.15.11",
  1694 + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
  1695 + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
  1696 + "funding": [
  1697 + {
  1698 + "type": "individual",
  1699 + "url": "https://github.com/sponsors/RubenVerborgh"
  1700 + }
  1701 + ],
  1702 + "license": "MIT",
  1703 + "engines": {
  1704 + "node": ">=4.0"
  1705 + },
  1706 + "peerDependenciesMeta": {
  1707 + "debug": {
  1708 + "optional": true
  1709 + }
  1710 + }
  1711 + },
1649 1712 "node_modules/forever-agent": {
1650 1713 "version": "0.6.1",
1651 1714 "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
... ... @@ -1919,12 +1982,12 @@
1919 1982 }
1920 1983 },
1921 1984 "node_modules/has-tostringtag": {
1922   - "version": "1.0.0",
1923   - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
1924   - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
1925   - "dev": true,
  1985 + "version": "1.0.2",
  1986 + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
  1987 + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
  1988 + "license": "MIT",
1926 1989 "dependencies": {
1927   - "has-symbols": "^1.0.2"
  1990 + "has-symbols": "^1.0.3"
1928 1991 },
1929 1992 "engines": {
1930 1993 "node": ">= 0.4"
... ... @@ -2898,6 +2961,12 @@
2898 2961 "node": ">= 0.10"
2899 2962 }
2900 2963 },
  2964 + "node_modules/proxy-from-env": {
  2965 + "version": "1.1.0",
  2966 + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
  2967 + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
  2968 + "license": "MIT"
  2969 + },
2901 2970 "node_modules/pseudomap": {
2902 2971 "version": "1.0.2",
2903 2972 "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
... ... @@ -4201,6 +4270,30 @@
4201 4270 "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
4202 4271 "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
4203 4272 },
  4273 + "axios": {
  4274 + "version": "1.11.0",
  4275 + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz",
  4276 + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==",
  4277 + "requires": {
  4278 + "follow-redirects": "^1.15.6",
  4279 + "form-data": "^4.0.4",
  4280 + "proxy-from-env": "^1.1.0"
  4281 + },
  4282 + "dependencies": {
  4283 + "form-data": {
  4284 + "version": "4.0.4",
  4285 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
  4286 + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
  4287 + "requires": {
  4288 + "asynckit": "^0.4.0",
  4289 + "combined-stream": "^1.0.8",
  4290 + "es-set-tostringtag": "^2.1.0",
  4291 + "hasown": "^2.0.2",
  4292 + "mime-types": "^2.1.12"
  4293 + }
  4294 + }
  4295 + }
  4296 + },
4204 4297 "balanced-match": {
4205 4298 "version": "1.0.0",
4206 4299 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
... ... @@ -4623,6 +4716,17 @@
4623 4716 "es-errors": "^1.3.0"
4624 4717 }
4625 4718 },
  4719 + "es-set-tostringtag": {
  4720 + "version": "2.1.0",
  4721 + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
  4722 + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
  4723 + "requires": {
  4724 + "es-errors": "^1.3.0",
  4725 + "get-intrinsic": "^1.2.6",
  4726 + "has-tostringtag": "^1.0.2",
  4727 + "hasown": "^2.0.2"
  4728 + }
  4729 + },
4626 4730 "es-to-primitive": {
4627 4731 "version": "1.2.1",
4628 4732 "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
... ... @@ -5097,6 +5201,11 @@
5097 5201 "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
5098 5202 "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
5099 5203 },
  5204 + "follow-redirects": {
  5205 + "version": "1.15.11",
  5206 + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
  5207 + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="
  5208 + },
5100 5209 "forever-agent": {
5101 5210 "version": "0.6.1",
5102 5211 "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
... ... @@ -5280,12 +5389,11 @@
5280 5389 "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
5281 5390 },
5282 5391 "has-tostringtag": {
5283   - "version": "1.0.0",
5284   - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
5285   - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
5286   - "dev": true,
  5392 + "version": "1.0.2",
  5393 + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
  5394 + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
5287 5395 "requires": {
5288   - "has-symbols": "^1.0.2"
  5396 + "has-symbols": "^1.0.3"
5289 5397 }
5290 5398 },
5291 5399 "hasown": {
... ... @@ -5979,6 +6087,11 @@
5979 6087 "ipaddr.js": "1.9.1"
5980 6088 }
5981 6089 },
  6090 + "proxy-from-env": {
  6091 + "version": "1.1.0",
  6092 + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
  6093 + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
  6094 + },
5982 6095 "pseudomap": {
5983 6096 "version": "1.0.2",
5984 6097 "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
1 1 {
2 2 "name": "komodo-sdk",
3   - "version": "1.45.22",
  3 + "version": "1.46.0",
4 4 "description": "SDK for Komodo",
5 5 "main": "index.js",
6 6 "scripts": {
... ... @@ -21,6 +21,7 @@
21 21 "license": "ISC",
22 22 "dependencies": {
23 23 "array-unique": "^0.3.2",
  24 + "axios": "^1.11.0",
24 25 "basic-auth": "^2.0.0",
25 26 "body-parser": "^1.18.2",
26 27 "dot-object": "^2.1.4",