@cloudcommerce/api
Advanced tools
@@ -1,5 +0,5 @@ | ||
| @cloudcommerce/api:build: cache hit, replaying output [2m6f3e88d4d63cc69e[0m | ||
| @cloudcommerce/api:build: cache hit, replaying output [2m27d3215844c62ac6[0m | ||
| [35m@cloudcommerce/api:build: [0m | ||
| [35m@cloudcommerce/api:build: [0m> @cloudcommerce/api@0.0.4 build /home/leo/code/ecomplus/cloud-commerce/packages/api | ||
| [35m@cloudcommerce/api:build: [0m> @cloudcommerce/api@0.0.5 build /home/leo/code/ecomplus/cloud-commerce/packages/api | ||
| [35m@cloudcommerce/api:build: [0m> sh scripts/build.sh | ||
| [35m@cloudcommerce/api:build: [0m |
+15
-15
@@ -1,15 +0,15 @@ | ||
| @cloudcommerce/api:test: cache hit, replaying output [2m11fdf26ab00d55b5[0m | ||
| [33m@cloudcommerce/api:test: [0m | ||
| [33m@cloudcommerce/api:test: [0m> @cloudcommerce/api@0.0.4 test /home/leo/code/ecomplus/cloud-commerce/packages/api | ||
| [33m@cloudcommerce/api:test: [0m> tsc -p ../../tsconfig.test.json && vitest run | ||
| [33m@cloudcommerce/api:test: [0m | ||
| [33m@cloudcommerce/api:test: [0m | ||
| [33m@cloudcommerce/api:test: [0m RUN v0.15.1 /home/leo/code/ecomplus/cloud-commerce/packages/api | ||
| [33m@cloudcommerce/api:test: [0m | ||
| [33m@cloudcommerce/api:test: [0m ✓ tests/index.test.ts > Read product and typecheck SKU | ||
| [33m@cloudcommerce/api:test: [0m ✓ tests/index.test.ts > 404 with different Store ID from env | ||
| [33m@cloudcommerce/api:test: [0m | ||
| [33m@cloudcommerce/api:test: [0mTest Files 1 passed (1) | ||
| [33m@cloudcommerce/api:test: [0m Tests 2 passed (2) | ||
| [33m@cloudcommerce/api:test: [0m Time 2.15s (in thread 804ms, 267.51%) | ||
| [33m@cloudcommerce/api:test: [0m | ||
| @cloudcommerce/api:test: cache hit, replaying output [2m5449ed55f6e905ec[0m | ||
| [35m@cloudcommerce/api:test: [0m | ||
| [35m@cloudcommerce/api:test: [0m> @cloudcommerce/api@0.0.5 test /home/leo/code/ecomplus/cloud-commerce/packages/api | ||
| [35m@cloudcommerce/api:test: [0m> tsc -p ../../tsconfig.test.json && vitest run | ||
| [35m@cloudcommerce/api:test: [0m | ||
| [35m@cloudcommerce/api:test: [0m | ||
| [35m@cloudcommerce/api:test: [0m RUN v0.15.1 /home/leo/code/ecomplus/cloud-commerce/packages/api | ||
| [35m@cloudcommerce/api:test: [0m | ||
| [35m@cloudcommerce/api:test: [0m ✓ tests/index.test.ts > Read product and typecheck SKU | ||
| [35m@cloudcommerce/api:test: [0m ✓ tests/index.test.ts > 404 with different Store ID from env | ||
| [35m@cloudcommerce/api:test: [0m | ||
| [35m@cloudcommerce/api:test: [0mTest Files 1 passed (1) | ||
| [35m@cloudcommerce/api:test: [0m Tests 2 passed (2) | ||
| [35m@cloudcommerce/api:test: [0m Time 2.11s (in thread 465ms, 453.30%) | ||
| [35m@cloudcommerce/api:test: [0m |
+1
-1
@@ -7,3 +7,3 @@ import type { Endpoint, Config, ResponseBody } from './types'; | ||
| declare const api: { | ||
| <T extends Config>(config: T): Promise<Response & { | ||
| <T extends Config>(config: T, retries?: number): Promise<Response & { | ||
| config: Config; | ||
@@ -10,0 +10,0 @@ data: ResponseBody<T>; |
+14
-3
@@ -32,5 +32,7 @@ // @ts-ignore | ||
| }; | ||
| const api = async (config) => { | ||
| const api = async (config, retries = 0) => { | ||
| const url = def.middleware(config); | ||
| const { method, headers, timeout = 20000 } = config; | ||
| const { | ||
| method, headers, timeout = 20000, maxRetries = 3, | ||
| } = config; | ||
| const abortController = new AbortController(); | ||
@@ -51,6 +53,15 @@ const timer = setTimeout(() => abortController.abort(), timeout); | ||
| } | ||
| const { status } = response; | ||
| if (maxRetries < retries && (status === 429 || status >= 500)) { | ||
| const retryAfter = response.headers.get('retry-after'); | ||
| return new Promise((resolve, reject) => { | ||
| setTimeout(() => { | ||
| api(config, retries + 1).then(resolve).catch(reject); | ||
| }, (retryAfter && parseInt(retryAfter, 10)) || 5000); | ||
| }); | ||
| } | ||
| const error = new Error(response.statusText); | ||
| error.config = config; | ||
| error.response = response; | ||
| error.statusCode = response.status; | ||
| error.statusCode = status; | ||
| throw error; | ||
@@ -57,0 +68,0 @@ }; |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,aAAa;AACb,MAAM,GAAG,GAA8B,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC;OACxE,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;OACvD,EAAE,CAAC;AAER,MAAM,GAAG,GAAG;IACV,UAAU,CAAC,MAAc;QACvB,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,YAAY,IAAI,wBAAwB,CAAC;QACzE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,aAAa,CAAC;QACpD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;SAC/E;QACD,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC;QAC1C,IAAI,IAAI,EAAE;YACR,GAAG,IAAI,SAAS,IAAI,EAAE,CAAC;SACxB;QACD,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;gBACrC,GAAG,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;aAC5B;iBAAM;gBACL,uDAAuD;gBACvD,GAAG,IAAI,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,MAAgC,CAAC,EAAE,CAAC;aAC3E;SACF;QACD,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;IACrC,CAAC;CACF,CAAC;AAEF,0CAA0C;AAC1C,MAAM,aAAa,GAAG,CAAC,UAAiC,EAAE,EAAE;IAC1D,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,KAAK,EAAoB,MAAS,EAG3C,EAAE;IACH,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;IACpD,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM;QACN,OAAO;QACP,MAAM,EAAE,eAAe,CAAC,MAAM;KAC/B,CAAC,CAAC;IACH,YAAY,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,QAAQ,CAAC,EAAE,EAAE;QACf,OAAO;YACL,GAAG,QAAQ;YACX,MAAM;YACN,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE;SAC5B,CAAC;KACH;IACD,MAAM,KAAK,GAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAClD,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;IACnC,MAAM,KAAK,CAAC;AACd,CAAC,CAAC;AAIF,MAAM,GAAG,GAAG,CACV,QAAW,EACX,MAAU,EAIT,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AAEnC,MAAM,IAAI,GAAG,CAAC,QAAkB,EAAE,MAAyB,EAAE,EAAE,CAAC,GAAG,CAAC;IAClE,GAAG,MAAM;IACT,MAAM,EAAE,MAAM;IACd,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,CAAC,QAAkB,EAAE,MAAyB,EAAE,EAAE,CAAC,GAAG,CAAC;IACjE,GAAG,MAAM;IACT,MAAM,EAAE,KAAK;IACb,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,CAAC,QAAkB,EAAE,MAAyB,EAAE,EAAE,CAAC,GAAG,CAAC;IACnE,GAAG,MAAM;IACT,MAAM,EAAE,OAAO;IACf,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,CAAC,QAAkB,EAAE,MAAyB,EAAE,EAAE,CAAC,GAAG,CAAC;IACjE,GAAG,MAAM;IACT,MAAM,EAAE,QAAQ;IAChB,QAAQ;CACT,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AACd,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;AAChB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AACd,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;AAClB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AACd,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;AAEjB,eAAe,GAAG,CAAC;AAEnB,OAAO,EACL,aAAa,EACb,GAAG,EACH,IAAI,EACJ,GAAG,EACH,KAAK,EACL,GAAG,GACJ,CAAC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} |
+1
-0
@@ -27,2 +27,3 @@ import type { Products } from './types/products'; | ||
| timeout?: number; | ||
| maxRetries?: number; | ||
| }; | ||
@@ -29,0 +30,0 @@ declare type ReadConfig<endpoint> = Config & { |
+1
-1
| { | ||
| "name": "@cloudcommerce/api", | ||
| "version": "0.0.5", | ||
| "version": "0.0.6", | ||
| "description": "E-Com Plus Cloud Commerce APIs client/adapter", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
+17
-3
@@ -37,3 +37,3 @@ import type { Endpoint, Config, ResponseBody } from './types'; | ||
| const api = async <T extends Config>(config: T): Promise<Response & { | ||
| const api = async <T extends Config>(config: T, retries = 0): Promise<Response & { | ||
| config: Config, | ||
@@ -43,3 +43,8 @@ data: ResponseBody<T>, | ||
| const url = def.middleware(config); | ||
| const { method, headers, timeout = 20000 } = config; | ||
| const { | ||
| method, | ||
| headers, | ||
| timeout = 20000, | ||
| maxRetries = 3, | ||
| } = config; | ||
| const abortController = new AbortController(); | ||
@@ -60,6 +65,15 @@ const timer = setTimeout(() => abortController.abort(), timeout); | ||
| } | ||
| const { status } = response; | ||
| if (maxRetries < retries && (status === 429 || status >= 500)) { | ||
| const retryAfter = response.headers.get('retry-after'); | ||
| return new Promise((resolve, reject) => { | ||
| setTimeout(() => { | ||
| api(config, retries + 1).then(resolve).catch(reject); | ||
| }, (retryAfter && parseInt(retryAfter, 10)) || 5000); | ||
| }); | ||
| } | ||
| const error: any = new Error(response.statusText); | ||
| error.config = config; | ||
| error.response = response; | ||
| error.statusCode = response.status; | ||
| error.statusCode = status; | ||
| throw error; | ||
@@ -66,0 +80,0 @@ }; |
+1
-0
@@ -40,2 +40,3 @@ import type { Products } from './types/products'; | ||
| timeout?: number, | ||
| maxRetries?: number, | ||
| }; | ||
@@ -42,0 +43,0 @@ |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
239601
0.57%9934
0.27%8
-11.11%