@cloudcommerce/api 0.0.5 → 0.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.
- package/.turbo/turbo-build.log +2 -2
- package/.turbo/turbo-test.log +15 -15
- package/lib/index.d.ts +1 -1
- package/lib/index.js +14 -3
- package/lib/index.js.map +1 -1
- package/lib/types.d.ts +1 -0
- package/package.json +1 -1
- package/src/index.ts +17 -3
- package/src/types.ts +1 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
@cloudcommerce/api:build: cache hit, replaying output [
|
|
1
|
+
@cloudcommerce/api:build: cache hit, replaying output [2m27d3215844c62ac6[0m
|
|
2
2
|
[35m@cloudcommerce/api:build: [0m
|
|
3
|
-
[35m@cloudcommerce/api:build: [0m> @cloudcommerce/api@0.0.
|
|
3
|
+
[35m@cloudcommerce/api:build: [0m> @cloudcommerce/api@0.0.5 build /home/leo/code/ecomplus/cloud-commerce/packages/api
|
|
4
4
|
[35m@cloudcommerce/api:build: [0m> sh scripts/build.sh
|
|
5
5
|
[35m@cloudcommerce/api:build: [0m
|
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
@cloudcommerce/api:test: cache hit, replaying output [
|
|
2
|
-
[
|
|
3
|
-
[
|
|
4
|
-
[
|
|
5
|
-
[
|
|
6
|
-
[
|
|
7
|
-
[
|
|
8
|
-
[
|
|
9
|
-
[
|
|
10
|
-
[
|
|
11
|
-
[
|
|
12
|
-
[
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
1
|
+
@cloudcommerce/api:test: cache hit, replaying output [2m5449ed55f6e905ec[0m
|
|
2
|
+
[35m@cloudcommerce/api:test: [0m
|
|
3
|
+
[35m@cloudcommerce/api:test: [0m> @cloudcommerce/api@0.0.5 test /home/leo/code/ecomplus/cloud-commerce/packages/api
|
|
4
|
+
[35m@cloudcommerce/api:test: [0m> tsc -p ../../tsconfig.test.json && vitest run
|
|
5
|
+
[35m@cloudcommerce/api:test: [0m
|
|
6
|
+
[35m@cloudcommerce/api:test: [0m
|
|
7
|
+
[35m@cloudcommerce/api:test: [0m RUN v0.15.1 /home/leo/code/ecomplus/cloud-commerce/packages/api
|
|
8
|
+
[35m@cloudcommerce/api:test: [0m
|
|
9
|
+
[35m@cloudcommerce/api:test: [0m ✓ tests/index.test.ts > Read product and typecheck SKU
|
|
10
|
+
[35m@cloudcommerce/api:test: [0m ✓ tests/index.test.ts > 404 with different Store ID from env
|
|
11
|
+
[35m@cloudcommerce/api:test: [0m
|
|
12
|
+
[35m@cloudcommerce/api:test: [0mTest Files 1 passed (1)
|
|
13
|
+
[35m@cloudcommerce/api:test: [0m Tests 2 passed (2)
|
|
14
|
+
[35m@cloudcommerce/api:test: [0m Time 2.11s (in thread 465ms, 453.30%)
|
|
15
|
+
[35m@cloudcommerce/api:test: [0m
|
package/lib/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ declare const def: {
|
|
|
4
4
|
};
|
|
5
5
|
declare const setMiddleware: (middleware: (config: Config) => string) => void;
|
|
6
6
|
declare const api: {
|
|
7
|
-
<T extends Config>(config: T): Promise<Response & {
|
|
7
|
+
<T extends Config>(config: T, retries?: number): Promise<Response & {
|
|
8
8
|
config: Config;
|
|
9
9
|
data: ResponseBody<T>;
|
|
10
10
|
}>;
|
package/lib/index.js
CHANGED
|
@@ -29,9 +29,11 @@ const def = {
|
|
|
29
29
|
const setMiddleware = (middleware) => {
|
|
30
30
|
def.middleware = middleware;
|
|
31
31
|
};
|
|
32
|
-
const api = async (config) => {
|
|
32
|
+
const api = async (config, retries = 0) => {
|
|
33
33
|
const url = def.middleware(config);
|
|
34
|
-
const {
|
|
34
|
+
const {
|
|
35
|
+
method, headers, timeout = 20000, maxRetries = 3,
|
|
36
|
+
} = config;
|
|
35
37
|
const abortController = new AbortController();
|
|
36
38
|
const timer = setTimeout(() => abortController.abort(), timeout);
|
|
37
39
|
const response = await fetch(url, {
|
|
@@ -47,10 +49,19 @@ const api = async (config) => {
|
|
|
47
49
|
data: await response.json(),
|
|
48
50
|
};
|
|
49
51
|
}
|
|
52
|
+
const { status } = response;
|
|
53
|
+
if (maxRetries < retries && (status === 429 || status >= 500)) {
|
|
54
|
+
const retryAfter = response.headers.get('retry-after');
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
setTimeout(() => {
|
|
57
|
+
api(config, retries + 1).then(resolve).catch(reject);
|
|
58
|
+
}, (retryAfter && parseInt(retryAfter, 10)) || 5000);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
50
61
|
const error = new Error(response.statusText);
|
|
51
62
|
error.config = config;
|
|
52
63
|
error.response = response;
|
|
53
|
-
error.statusCode =
|
|
64
|
+
error.statusCode = status;
|
|
54
65
|
throw error;
|
|
55
66
|
};
|
|
56
67
|
const get = (endpoint, config) => api({ ...config, endpoint });
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -34,12 +34,17 @@ const setMiddleware = (middleware: typeof def.middleware) => {
|
|
|
34
34
|
def.middleware = middleware;
|
|
35
35
|
};
|
|
36
36
|
|
|
37
|
-
const api = async <T extends Config>(config: T): Promise<Response & {
|
|
37
|
+
const api = async <T extends Config>(config: T, retries = 0): Promise<Response & {
|
|
38
38
|
config: Config,
|
|
39
39
|
data: ResponseBody<T>,
|
|
40
40
|
}> => {
|
|
41
41
|
const url = def.middleware(config);
|
|
42
|
-
const {
|
|
42
|
+
const {
|
|
43
|
+
method,
|
|
44
|
+
headers,
|
|
45
|
+
timeout = 20000,
|
|
46
|
+
maxRetries = 3,
|
|
47
|
+
} = config;
|
|
43
48
|
const abortController = new AbortController();
|
|
44
49
|
const timer = setTimeout(() => abortController.abort(), timeout);
|
|
45
50
|
const response = await fetch(url, {
|
|
@@ -55,10 +60,19 @@ const api = async <T extends Config>(config: T): Promise<Response & {
|
|
|
55
60
|
data: await response.json(),
|
|
56
61
|
};
|
|
57
62
|
}
|
|
63
|
+
const { status } = response;
|
|
64
|
+
if (maxRetries < retries && (status === 429 || status >= 500)) {
|
|
65
|
+
const retryAfter = response.headers.get('retry-after');
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
setTimeout(() => {
|
|
68
|
+
api(config, retries + 1).then(resolve).catch(reject);
|
|
69
|
+
}, (retryAfter && parseInt(retryAfter, 10)) || 5000);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
58
72
|
const error: any = new Error(response.statusText);
|
|
59
73
|
error.config = config;
|
|
60
74
|
error.response = response;
|
|
61
|
-
error.statusCode =
|
|
75
|
+
error.statusCode = status;
|
|
62
76
|
throw error;
|
|
63
77
|
};
|
|
64
78
|
|