@vqnguyen1/piece-sellercloud 0.1.0 → 0.1.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vqnguyen1/piece-sellercloud",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "main": "./src/index.js",
5
5
  "types": "./src/index.d.ts",
6
6
  "dependencies": {
@@ -4,17 +4,70 @@ exports.sellercloudClient = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const pieces_common_1 = require("@activepieces/pieces-common");
6
6
  const shared_1 = require("@activepieces/shared");
7
+ // Tokens last an hour and /token is itself rate limited, so a flow that runs many
8
+ // actions must not log in once per request.
9
+ const tokenCache = new Map();
7
10
  function getToken(_a) {
8
11
  return tslib_1.__awaiter(this, arguments, void 0, function* ({ auth }) {
9
- const response = yield pieces_common_1.httpClient.sendRequest({
10
- method: pieces_common_1.HttpMethod.POST,
11
- url: `${apiBase({ auth })}/token`,
12
- headers: { 'Content-Type': 'application/json' },
13
- body: { Username: auth.username, Password: auth.password },
12
+ const cacheKey = `${apiBase({ auth })}|${auth.username}`;
13
+ const cached = tokenCache.get(cacheKey);
14
+ if (cached && cached.expiresAt > Date.now()) {
15
+ return cached.token;
16
+ }
17
+ const response = yield sendWithRetry({
18
+ request: {
19
+ method: pieces_common_1.HttpMethod.POST,
20
+ url: `${apiBase({ auth })}/token`,
21
+ headers: { 'Content-Type': 'application/json' },
22
+ body: { Username: auth.username, Password: auth.password },
23
+ },
14
24
  });
15
- return response.body.access_token;
25
+ const token = response.access_token;
26
+ tokenCache.set(cacheKey, { token, expiresAt: Date.now() + TOKEN_TTL_MS });
27
+ return token;
28
+ });
29
+ }
30
+ // SellerCloud answers 409 {"Error":"Too many requests.","RateLimitResetTime":"..."} when
31
+ // throttling, so the reset time in the body is what to wait for, not a fixed backoff.
32
+ function sendWithRetry(_a) {
33
+ return tslib_1.__awaiter(this, arguments, void 0, function* ({ request, attempt = 1 }) {
34
+ const { data, error } = yield (0, shared_1.tryCatch)(() => pieces_common_1.httpClient.sendRequest(request));
35
+ if (!error) {
36
+ return data.body;
37
+ }
38
+ const delay = retryDelayMs({ error, attempt });
39
+ if (delay === null) {
40
+ throw error;
41
+ }
42
+ yield new Promise((resolve) => setTimeout(resolve, delay));
43
+ return sendWithRetry({ request, attempt: attempt + 1 });
16
44
  });
17
45
  }
46
+ function retryDelayMs({ error, attempt }) {
47
+ if (attempt >= MAX_ATTEMPTS || !(error instanceof pieces_common_1.HttpError)) {
48
+ return null;
49
+ }
50
+ const status = error.response.status;
51
+ if (status === RATE_LIMITED_STATUS || status === 429) {
52
+ const wait = rateLimitWaitMs({ body: error.response.body });
53
+ return wait !== null && wait <= MAX_RATE_LIMIT_WAIT_MS ? wait : null;
54
+ }
55
+ if (TRANSIENT_STATUSES.includes(status)) {
56
+ return BASE_BACKOFF_MS * Math.pow(2, (attempt - 1));
57
+ }
58
+ return null;
59
+ }
60
+ function rateLimitWaitMs({ body }) {
61
+ const resetTime = body === null || body === void 0 ? void 0 : body.RateLimitResetTime;
62
+ if (!resetTime) {
63
+ return BASE_BACKOFF_MS;
64
+ }
65
+ const resetAt = Date.parse(resetTime);
66
+ if (Number.isNaN(resetAt)) {
67
+ return BASE_BACKOFF_MS;
68
+ }
69
+ return Math.max(BASE_BACKOFF_MS, resetAt - Date.now() + RATE_LIMIT_PADDING_MS);
70
+ }
18
71
  function tryGetToken(_a) {
19
72
  return tslib_1.__awaiter(this, arguments, void 0, function* ({ auth }) {
20
73
  const { error } = yield (0, shared_1.tryCatch)(() => getToken({ auth }));
@@ -25,20 +78,22 @@ function tryGetToken(_a) {
25
78
  function request(_a) {
26
79
  return tslib_1.__awaiter(this, arguments, void 0, function* ({ auth, token, method, path, queryParams, body }) {
27
80
  const accessToken = token !== null && token !== void 0 ? token : yield getToken({ auth });
28
- const { data, error } = yield (0, shared_1.tryCatch)(() => pieces_common_1.httpClient.sendRequest({
29
- method,
30
- url: `${apiBase({ auth })}${path}`,
31
- headers: {
32
- Authorization: `Bearer ${accessToken}`,
33
- 'Content-Type': 'application/json',
81
+ const { data, error } = yield (0, shared_1.tryCatch)(() => sendWithRetry({
82
+ request: {
83
+ method,
84
+ url: `${apiBase({ auth })}${path}`,
85
+ headers: {
86
+ Authorization: `Bearer ${accessToken}`,
87
+ 'Content-Type': 'application/json',
88
+ },
89
+ queryParams: compactQuery({ queryParams }),
90
+ body,
34
91
  },
35
- queryParams: compactQuery({ queryParams }),
36
- body,
37
92
  }));
38
93
  if (error) {
39
94
  throw new Error(`SellerCloud ${method} ${path} failed: ${describeError({ error })}`);
40
95
  }
41
- return data.body;
96
+ return data;
42
97
  });
43
98
  }
44
99
  function listWarehouses(_a) {
@@ -46,10 +101,20 @@ function listWarehouses(_a) {
46
101
  return fetchAllPages({ auth, token, path: '/Warehouses' });
47
102
  });
48
103
  }
104
+ // /Catalog pages 50 at a time, so one match pass is ~50 requests against a rate-limited
105
+ // API. Six PDC flows rebuilding the same list would spend most of the budget on it.
106
+ const catalogCache = new Map();
49
107
  function listCatalogProductIds(_a) {
50
108
  return tslib_1.__awaiter(this, arguments, void 0, function* ({ auth, token }) {
109
+ const cacheKey = apiBase({ auth });
110
+ const cached = catalogCache.get(cacheKey);
111
+ if (cached && cached.expiresAt > Date.now()) {
112
+ return cached.ids;
113
+ }
51
114
  const products = yield fetchAllPages({ auth, token, path: '/Catalog' });
52
- return products.map((product) => product.ID);
115
+ const ids = products.map((product) => product.ID);
116
+ catalogCache.set(cacheKey, { ids, expiresAt: Date.now() + CATALOG_TTL_MS });
117
+ return ids;
53
118
  });
54
119
  }
55
120
  // SellerCloud silently caps pageSize (50 on /Catalog), so stop on the running total, not on pageNumber * pageSize.
@@ -79,12 +144,26 @@ function compactQuery({ queryParams }) {
79
144
  .map(([key, value]) => [key, String(value)]));
80
145
  }
81
146
  function describeError({ error }) {
82
- if (error instanceof pieces_common_1.HttpError) {
83
- return `${error.response.status} ${JSON.stringify(error.response.body)}`;
147
+ if (!(error instanceof pieces_common_1.HttpError)) {
148
+ return error.message;
149
+ }
150
+ const { status, body } = error.response;
151
+ if (status === RATE_LIMITED_STATUS) {
152
+ const resetTime = body === null || body === void 0 ? void 0 : body.RateLimitResetTime;
153
+ return `rate limited by SellerCloud${resetTime ? `, resets at ${resetTime}` : ''}`;
84
154
  }
85
- return error.message;
155
+ return `${status} ${JSON.stringify(body)}`;
86
156
  }
87
157
  const MAX_PAGE_SIZE = 500;
158
+ const TOKEN_TTL_MS = 50 * 60 * 1000;
159
+ const CATALOG_TTL_MS = 15 * 60 * 1000;
160
+ const RATE_LIMITED_STATUS = 409;
161
+ const TRANSIENT_STATUSES = [502, 503, 504];
162
+ const MAX_ATTEMPTS = 4;
163
+ const BASE_BACKOFF_MS = 2000;
164
+ const RATE_LIMIT_PADDING_MS = 1000;
165
+ // A flow step has a budget, so a long lockout should fail with the reset time rather than hang.
166
+ const MAX_RATE_LIMIT_WAIT_MS = 120 * 1000;
88
167
  exports.sellercloudClient = {
89
168
  getToken,
90
169
  tryGetToken,
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/lib/common/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/lib/common/client.ts"],"names":[],"mappings":"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"}