@commercetools/ts-client 2.0.0 → 2.0.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @commercetools/ts-client
2
2
 
3
+ ## 2.0.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#777](https://github.com/commercetools/commercetools-sdk-typescript/pull/777) [`38c7035`](https://github.com/commercetools/commercetools-sdk-typescript/commit/38c703557964a2355c4419b0bf8f0ea0a6361ce5) Thanks [@lojzatran](https://github.com/lojzatran)! - Bug fixes for @commercetools/ts-client
8
+
9
+ ## 2.0.1
10
+
11
+ ### Patch Changes
12
+
13
+ - [#767](https://github.com/commercetools/commercetools-sdk-typescript/pull/767) [`d82a9e0`](https://github.com/commercetools/commercetools-sdk-typescript/commit/d82a9e0e6666e076183172a9229ffcda8e28905a) Thanks [@ajimae](https://github.com/ajimae)! - Fix issues with request state not being reset back to default on error when fetching token.
14
+
3
15
  ## 2.0.0
4
16
 
5
17
  ### Major Changes
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var fetch$1 = require('node-fetch');
6
6
  var uuid = require('uuid');
7
7
  var _ = require('buffer/');
8
+ var asyncMutex = require('async-mutex');
8
9
  var AbortController = require('abort-controller');
9
10
 
10
11
  function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
@@ -121,10 +122,11 @@ function createError({
121
122
  return new HttpError(statusCode, errorMessage, rest);
122
123
  }
123
124
 
124
- function predicate(retryCodes, response) {
125
- return !
126
- // retryCodes.includes(response?.error?.message) ||
127
- [503, ...retryCodes].includes(response?.status || response?.statusCode);
125
+ function hasResponseRetryCode(retryCodes, response) {
126
+ return (
127
+ // retryCodes.includes(response?.error?.message) ||
128
+ [503, ...retryCodes].includes(response?.status || response?.statusCode)
129
+ );
128
130
  }
129
131
  async function executeHttpClientRequest(fetcher, config) {
130
132
  async function sendRequest() {
@@ -151,14 +153,17 @@ async function executor(request) {
151
153
  const data = await executeHttpClientRequest(async options => {
152
154
  const {
153
155
  enableRetry,
154
- retryConfig
156
+ retryConfig,
157
+ abortController
155
158
  } = rest;
156
159
  const {
157
160
  retryCodes = [],
158
161
  maxDelay = Infinity,
159
162
  maxRetries = 3,
160
163
  backoff = true,
161
- retryDelay = 200
164
+ retryDelay = 200,
165
+ // If set to true reinitialize the abort controller when the timeout is reached and apply the retry config
166
+ retryOnAbort = true
162
167
  } = retryConfig || {};
163
168
  let result,
164
169
  data,
@@ -184,15 +189,41 @@ async function executor(request) {
184
189
  });
185
190
  }
186
191
  async function executeWithRetry() {
192
+ const executeWithTryCatch = async (retryCodes, retryWhenAborted) => {
193
+ let _response = {};
194
+ try {
195
+ _response = await execute();
196
+ if (_response.status > 299 && hasResponseRetryCode(retryCodes, _response)) return {
197
+ _response,
198
+ shouldRetry: true
199
+ };
200
+ } catch (e) {
201
+ if (e.name.includes('AbortError') && retryWhenAborted) {
202
+ return {
203
+ _response: e,
204
+ shouldRetry: true
205
+ };
206
+ } else {
207
+ throw e;
208
+ }
209
+ }
210
+ return {
211
+ _response,
212
+ shouldRetry: false
213
+ };
214
+ };
215
+ const retryWhenAborted = retryOnAbort || !abortController || !abortController.signal;
187
216
  // first attempt
188
- let _response = await execute();
189
- if (predicate(retryCodes, _response)) return _response;
190
-
217
+ let {
218
+ _response,
219
+ shouldRetry
220
+ } = await executeWithTryCatch(retryCodes, retryWhenAborted);
191
221
  // retry attempts
192
- while (enableRetry && retryCount < maxRetries) {
222
+ while (enableRetry && shouldRetry && retryCount < maxRetries) {
193
223
  retryCount++;
194
- _response = await execute();
195
- if (predicate(retryCodes, _response)) return _response;
224
+ const execution = await executeWithTryCatch(retryCodes, retryWhenAborted);
225
+ _response = execution._response;
226
+ shouldRetry = execution.shouldRetry;
196
227
 
197
228
  // delay next execution
198
229
  const timer = calculateRetryDelay({
@@ -432,7 +463,6 @@ function createUserAgent(options) {
432
463
  function validateHttpOptions(options) {
433
464
  if (!options.host) throw new Error('Request `host` or `url` is missing or invalid, please pass in a valid host e.g `host: http://a-valid-host-url`');
434
465
  if (!options.httpClient && typeof options.httpClient !== 'function') throw new Error('An `httpClient` is not available, please pass in a `fetch` or `axios` instance as an option or have them globally available.');
435
- if (options.timeout && !options.getAbortController) throw new Error('`AbortController` is not available. Please pass in `getAbortController` as an option or have AbortController globally available when using timeout.');
436
466
  }
437
467
 
438
468
  /**
@@ -592,7 +622,6 @@ async function executeRequest$1(options) {
592
622
  httpClient,
593
623
  tokenCache,
594
624
  tokenCacheKey,
595
- requestState,
596
625
  userOption,
597
626
  next
598
627
  } = options;
@@ -627,18 +656,14 @@ async function executeRequest$1(options) {
627
656
  next
628
657
  });
629
658
 
630
- // if a token is currently being fetched, then wait
631
- if (requestState.get()) return;
632
-
633
- // signal that a token is being fetched
634
- requestState.set(true);
635
-
636
659
  /**
637
660
  * use refreshToken flow if there is refresh-token
638
661
  * and there's either no token or the token is expired
639
662
  */
640
663
  if (tokenCacheObject && tokenCacheObject.refreshToken && (!tokenCacheObject.token || tokenCacheObject.token && Date.now() > tokenCacheObject.expirationTime)) {
641
- if (!userOption) throw new Error('Missing required options.');
664
+ if (!userOption) {
665
+ throw new Error('Missing required options.');
666
+ }
642
667
  const opt = {
643
668
  ...buildRequestForRefreshTokenFlow({
644
669
  ...userOption,
@@ -683,9 +708,6 @@ async function executeRequest$1(options) {
683
708
  refreshToken
684
709
  });
685
710
 
686
- // signal that a token fetch is complete
687
- requestState.set(false);
688
-
689
711
  /**
690
712
  * Freeze and copy pending queue, reset
691
713
  * original one for accepting new pending tasks
@@ -784,7 +806,7 @@ function createAuthMiddlewareForAnonymousSessionFlow$1(options) {
784
806
  }
785
807
 
786
808
  function createAuthMiddlewareForClientCredentialsFlow$1(options) {
787
- const requestState = store(false);
809
+ const requestState = new asyncMutex.Mutex();
788
810
  const pendingTasks = [];
789
811
  const tokenCache = options.tokenCache || store({
790
812
  token: '',
@@ -812,7 +834,13 @@ function createAuthMiddlewareForClientCredentialsFlow$1(options) {
812
834
  };
813
835
 
814
836
  // make request to coco
815
- const requestWithAuth = await executeRequest$1(requestOptions);
837
+ let requestWithAuth;
838
+ try {
839
+ await requestState.acquire();
840
+ requestWithAuth = await executeRequest$1(requestOptions);
841
+ } finally {
842
+ requestState.release();
843
+ }
816
844
  if (requestWithAuth) {
817
845
  // make the request and inject the token into the header
818
846
  return next(requestWithAuth);
@@ -1224,7 +1252,7 @@ function createQueueMiddleware$1({
1224
1252
 
1225
1253
  var packageJson = {
1226
1254
  name: "@commercetools/ts-client",
1227
- version: "2.0.0",
1255
+ version: "2.0.2",
1228
1256
  engines: {
1229
1257
  node: ">=14"
1230
1258
  },
@@ -1258,9 +1286,10 @@ var packageJson = {
1258
1286
  },
1259
1287
  dependencies: {
1260
1288
  "abort-controller": "3.0.0",
1289
+ "async-mutex": "^0.5.0",
1261
1290
  buffer: "^6.0.3",
1262
1291
  "node-fetch": "^2.6.1",
1263
- uuid: "9.0.1"
1292
+ uuid: "10.0.0"
1264
1293
  },
1265
1294
  files: [
1266
1295
  "dist",
@@ -1,6 +1,7 @@
1
1
  import fetch$1 from 'node-fetch';
2
2
  import { v4 } from 'uuid';
3
3
  import { Buffer } from 'buffer/';
4
+ import { Mutex } from 'async-mutex';
4
5
  import AbortController from 'abort-controller';
5
6
 
6
7
  function toPrimitive(t, r) {
@@ -112,10 +113,11 @@ function createError({
112
113
  return new HttpError(statusCode, errorMessage, rest);
113
114
  }
114
115
 
115
- function predicate(retryCodes, response) {
116
- return !
117
- // retryCodes.includes(response?.error?.message) ||
118
- [503, ...retryCodes].includes(response?.status || response?.statusCode);
116
+ function hasResponseRetryCode(retryCodes, response) {
117
+ return (
118
+ // retryCodes.includes(response?.error?.message) ||
119
+ [503, ...retryCodes].includes(response?.status || response?.statusCode)
120
+ );
119
121
  }
120
122
  async function executeHttpClientRequest(fetcher, config) {
121
123
  async function sendRequest() {
@@ -142,14 +144,17 @@ async function executor(request) {
142
144
  const data = await executeHttpClientRequest(async options => {
143
145
  const {
144
146
  enableRetry,
145
- retryConfig
147
+ retryConfig,
148
+ abortController
146
149
  } = rest;
147
150
  const {
148
151
  retryCodes = [],
149
152
  maxDelay = Infinity,
150
153
  maxRetries = 3,
151
154
  backoff = true,
152
- retryDelay = 200
155
+ retryDelay = 200,
156
+ // If set to true reinitialize the abort controller when the timeout is reached and apply the retry config
157
+ retryOnAbort = true
153
158
  } = retryConfig || {};
154
159
  let result,
155
160
  data,
@@ -175,15 +180,41 @@ async function executor(request) {
175
180
  });
176
181
  }
177
182
  async function executeWithRetry() {
183
+ const executeWithTryCatch = async (retryCodes, retryWhenAborted) => {
184
+ let _response = {};
185
+ try {
186
+ _response = await execute();
187
+ if (_response.status > 299 && hasResponseRetryCode(retryCodes, _response)) return {
188
+ _response,
189
+ shouldRetry: true
190
+ };
191
+ } catch (e) {
192
+ if (e.name.includes('AbortError') && retryWhenAborted) {
193
+ return {
194
+ _response: e,
195
+ shouldRetry: true
196
+ };
197
+ } else {
198
+ throw e;
199
+ }
200
+ }
201
+ return {
202
+ _response,
203
+ shouldRetry: false
204
+ };
205
+ };
206
+ const retryWhenAborted = retryOnAbort || !abortController || !abortController.signal;
178
207
  // first attempt
179
- let _response = await execute();
180
- if (predicate(retryCodes, _response)) return _response;
181
-
208
+ let {
209
+ _response,
210
+ shouldRetry
211
+ } = await executeWithTryCatch(retryCodes, retryWhenAborted);
182
212
  // retry attempts
183
- while (enableRetry && retryCount < maxRetries) {
213
+ while (enableRetry && shouldRetry && retryCount < maxRetries) {
184
214
  retryCount++;
185
- _response = await execute();
186
- if (predicate(retryCodes, _response)) return _response;
215
+ const execution = await executeWithTryCatch(retryCodes, retryWhenAborted);
216
+ _response = execution._response;
217
+ shouldRetry = execution.shouldRetry;
187
218
 
188
219
  // delay next execution
189
220
  const timer = calculateRetryDelay({
@@ -423,7 +454,6 @@ function createUserAgent(options) {
423
454
  function validateHttpOptions(options) {
424
455
  if (!options.host) throw new Error('Request `host` or `url` is missing or invalid, please pass in a valid host e.g `host: http://a-valid-host-url`');
425
456
  if (!options.httpClient && typeof options.httpClient !== 'function') throw new Error('An `httpClient` is not available, please pass in a `fetch` or `axios` instance as an option or have them globally available.');
426
- if (options.timeout && !options.getAbortController) throw new Error('`AbortController` is not available. Please pass in `getAbortController` as an option or have AbortController globally available when using timeout.');
427
457
  }
428
458
 
429
459
  /**
@@ -583,7 +613,6 @@ async function executeRequest$1(options) {
583
613
  httpClient,
584
614
  tokenCache,
585
615
  tokenCacheKey,
586
- requestState,
587
616
  userOption,
588
617
  next
589
618
  } = options;
@@ -618,18 +647,14 @@ async function executeRequest$1(options) {
618
647
  next
619
648
  });
620
649
 
621
- // if a token is currently being fetched, then wait
622
- if (requestState.get()) return;
623
-
624
- // signal that a token is being fetched
625
- requestState.set(true);
626
-
627
650
  /**
628
651
  * use refreshToken flow if there is refresh-token
629
652
  * and there's either no token or the token is expired
630
653
  */
631
654
  if (tokenCacheObject && tokenCacheObject.refreshToken && (!tokenCacheObject.token || tokenCacheObject.token && Date.now() > tokenCacheObject.expirationTime)) {
632
- if (!userOption) throw new Error('Missing required options.');
655
+ if (!userOption) {
656
+ throw new Error('Missing required options.');
657
+ }
633
658
  const opt = {
634
659
  ...buildRequestForRefreshTokenFlow({
635
660
  ...userOption,
@@ -674,9 +699,6 @@ async function executeRequest$1(options) {
674
699
  refreshToken
675
700
  });
676
701
 
677
- // signal that a token fetch is complete
678
- requestState.set(false);
679
-
680
702
  /**
681
703
  * Freeze and copy pending queue, reset
682
704
  * original one for accepting new pending tasks
@@ -775,7 +797,7 @@ function createAuthMiddlewareForAnonymousSessionFlow$1(options) {
775
797
  }
776
798
 
777
799
  function createAuthMiddlewareForClientCredentialsFlow$1(options) {
778
- const requestState = store(false);
800
+ const requestState = new Mutex();
779
801
  const pendingTasks = [];
780
802
  const tokenCache = options.tokenCache || store({
781
803
  token: '',
@@ -803,7 +825,13 @@ function createAuthMiddlewareForClientCredentialsFlow$1(options) {
803
825
  };
804
826
 
805
827
  // make request to coco
806
- const requestWithAuth = await executeRequest$1(requestOptions);
828
+ let requestWithAuth;
829
+ try {
830
+ await requestState.acquire();
831
+ requestWithAuth = await executeRequest$1(requestOptions);
832
+ } finally {
833
+ requestState.release();
834
+ }
807
835
  if (requestWithAuth) {
808
836
  // make the request and inject the token into the header
809
837
  return next(requestWithAuth);
@@ -1215,7 +1243,7 @@ function createQueueMiddleware$1({
1215
1243
 
1216
1244
  var packageJson = {
1217
1245
  name: "@commercetools/ts-client",
1218
- version: "2.0.0",
1246
+ version: "2.0.2",
1219
1247
  engines: {
1220
1248
  node: ">=14"
1221
1249
  },
@@ -1249,9 +1277,10 @@ var packageJson = {
1249
1277
  },
1250
1278
  dependencies: {
1251
1279
  "abort-controller": "3.0.0",
1280
+ "async-mutex": "^0.5.0",
1252
1281
  buffer: "^6.0.3",
1253
1282
  "node-fetch": "^2.6.1",
1254
- uuid: "9.0.1"
1283
+ uuid: "10.0.0"
1255
1284
  },
1256
1285
  files: [
1257
1286
  "dist",
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var fetch$1 = require('node-fetch');
6
6
  var uuid = require('uuid');
7
7
  var _ = require('buffer/');
8
+ var asyncMutex = require('async-mutex');
8
9
  var AbortController = require('abort-controller');
9
10
 
10
11
  function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
@@ -121,10 +122,11 @@ function createError({
121
122
  return new HttpError(statusCode, errorMessage, rest);
122
123
  }
123
124
 
124
- function predicate(retryCodes, response) {
125
- return !
126
- // retryCodes.includes(response?.error?.message) ||
127
- [503, ...retryCodes].includes(response?.status || response?.statusCode);
125
+ function hasResponseRetryCode(retryCodes, response) {
126
+ return (
127
+ // retryCodes.includes(response?.error?.message) ||
128
+ [503, ...retryCodes].includes(response?.status || response?.statusCode)
129
+ );
128
130
  }
129
131
  async function executeHttpClientRequest(fetcher, config) {
130
132
  async function sendRequest() {
@@ -151,14 +153,17 @@ async function executor(request) {
151
153
  const data = await executeHttpClientRequest(async options => {
152
154
  const {
153
155
  enableRetry,
154
- retryConfig
156
+ retryConfig,
157
+ abortController
155
158
  } = rest;
156
159
  const {
157
160
  retryCodes = [],
158
161
  maxDelay = Infinity,
159
162
  maxRetries = 3,
160
163
  backoff = true,
161
- retryDelay = 200
164
+ retryDelay = 200,
165
+ // If set to true reinitialize the abort controller when the timeout is reached and apply the retry config
166
+ retryOnAbort = true
162
167
  } = retryConfig || {};
163
168
  let result,
164
169
  data,
@@ -184,15 +189,41 @@ async function executor(request) {
184
189
  });
185
190
  }
186
191
  async function executeWithRetry() {
192
+ const executeWithTryCatch = async (retryCodes, retryWhenAborted) => {
193
+ let _response = {};
194
+ try {
195
+ _response = await execute();
196
+ if (_response.status > 299 && hasResponseRetryCode(retryCodes, _response)) return {
197
+ _response,
198
+ shouldRetry: true
199
+ };
200
+ } catch (e) {
201
+ if (e.name.includes('AbortError') && retryWhenAborted) {
202
+ return {
203
+ _response: e,
204
+ shouldRetry: true
205
+ };
206
+ } else {
207
+ throw e;
208
+ }
209
+ }
210
+ return {
211
+ _response,
212
+ shouldRetry: false
213
+ };
214
+ };
215
+ const retryWhenAborted = retryOnAbort || !abortController || !abortController.signal;
187
216
  // first attempt
188
- let _response = await execute();
189
- if (predicate(retryCodes, _response)) return _response;
190
-
217
+ let {
218
+ _response,
219
+ shouldRetry
220
+ } = await executeWithTryCatch(retryCodes, retryWhenAborted);
191
221
  // retry attempts
192
- while (enableRetry && retryCount < maxRetries) {
222
+ while (enableRetry && shouldRetry && retryCount < maxRetries) {
193
223
  retryCount++;
194
- _response = await execute();
195
- if (predicate(retryCodes, _response)) return _response;
224
+ const execution = await executeWithTryCatch(retryCodes, retryWhenAborted);
225
+ _response = execution._response;
226
+ shouldRetry = execution.shouldRetry;
196
227
 
197
228
  // delay next execution
198
229
  const timer = calculateRetryDelay({
@@ -432,7 +463,6 @@ function createUserAgent(options) {
432
463
  function validateHttpOptions(options) {
433
464
  if (!options.host) throw new Error('Request `host` or `url` is missing or invalid, please pass in a valid host e.g `host: http://a-valid-host-url`');
434
465
  if (!options.httpClient && typeof options.httpClient !== 'function') throw new Error('An `httpClient` is not available, please pass in a `fetch` or `axios` instance as an option or have them globally available.');
435
- if (options.timeout && !options.getAbortController) throw new Error('`AbortController` is not available. Please pass in `getAbortController` as an option or have AbortController globally available when using timeout.');
436
466
  }
437
467
 
438
468
  /**
@@ -592,7 +622,6 @@ async function executeRequest$1(options) {
592
622
  httpClient,
593
623
  tokenCache,
594
624
  tokenCacheKey,
595
- requestState,
596
625
  userOption,
597
626
  next
598
627
  } = options;
@@ -627,18 +656,14 @@ async function executeRequest$1(options) {
627
656
  next
628
657
  });
629
658
 
630
- // if a token is currently being fetched, then wait
631
- if (requestState.get()) return;
632
-
633
- // signal that a token is being fetched
634
- requestState.set(true);
635
-
636
659
  /**
637
660
  * use refreshToken flow if there is refresh-token
638
661
  * and there's either no token or the token is expired
639
662
  */
640
663
  if (tokenCacheObject && tokenCacheObject.refreshToken && (!tokenCacheObject.token || tokenCacheObject.token && Date.now() > tokenCacheObject.expirationTime)) {
641
- if (!userOption) throw new Error('Missing required options.');
664
+ if (!userOption) {
665
+ throw new Error('Missing required options.');
666
+ }
642
667
  const opt = {
643
668
  ...buildRequestForRefreshTokenFlow({
644
669
  ...userOption,
@@ -683,9 +708,6 @@ async function executeRequest$1(options) {
683
708
  refreshToken
684
709
  });
685
710
 
686
- // signal that a token fetch is complete
687
- requestState.set(false);
688
-
689
711
  /**
690
712
  * Freeze and copy pending queue, reset
691
713
  * original one for accepting new pending tasks
@@ -784,7 +806,7 @@ function createAuthMiddlewareForAnonymousSessionFlow$1(options) {
784
806
  }
785
807
 
786
808
  function createAuthMiddlewareForClientCredentialsFlow$1(options) {
787
- const requestState = store(false);
809
+ const requestState = new asyncMutex.Mutex();
788
810
  const pendingTasks = [];
789
811
  const tokenCache = options.tokenCache || store({
790
812
  token: '',
@@ -812,7 +834,13 @@ function createAuthMiddlewareForClientCredentialsFlow$1(options) {
812
834
  };
813
835
 
814
836
  // make request to coco
815
- const requestWithAuth = await executeRequest$1(requestOptions);
837
+ let requestWithAuth;
838
+ try {
839
+ await requestState.acquire();
840
+ requestWithAuth = await executeRequest$1(requestOptions);
841
+ } finally {
842
+ requestState.release();
843
+ }
816
844
  if (requestWithAuth) {
817
845
  // make the request and inject the token into the header
818
846
  return next(requestWithAuth);
@@ -1224,7 +1252,7 @@ function createQueueMiddleware$1({
1224
1252
 
1225
1253
  var packageJson = {
1226
1254
  name: "@commercetools/ts-client",
1227
- version: "2.0.0",
1255
+ version: "2.0.2",
1228
1256
  engines: {
1229
1257
  node: ">=14"
1230
1258
  },
@@ -1258,9 +1286,10 @@ var packageJson = {
1258
1286
  },
1259
1287
  dependencies: {
1260
1288
  "abort-controller": "3.0.0",
1289
+ "async-mutex": "^0.5.0",
1261
1290
  buffer: "^6.0.3",
1262
1291
  "node-fetch": "^2.6.1",
1263
- uuid: "9.0.1"
1292
+ uuid: "10.0.0"
1264
1293
  },
1265
1294
  files: [
1266
1295
  "dist",
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var fetch$1 = require('node-fetch');
6
6
  var uuid = require('uuid');
7
7
  var _ = require('buffer/');
8
+ var asyncMutex = require('async-mutex');
8
9
  var AbortController = require('abort-controller');
9
10
 
10
11
  function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
@@ -121,10 +122,11 @@ function createError({
121
122
  return new HttpError(statusCode, errorMessage, rest);
122
123
  }
123
124
 
124
- function predicate(retryCodes, response) {
125
- return !
126
- // retryCodes.includes(response?.error?.message) ||
127
- [503, ...retryCodes].includes(response?.status || response?.statusCode);
125
+ function hasResponseRetryCode(retryCodes, response) {
126
+ return (
127
+ // retryCodes.includes(response?.error?.message) ||
128
+ [503, ...retryCodes].includes(response?.status || response?.statusCode)
129
+ );
128
130
  }
129
131
  async function executeHttpClientRequest(fetcher, config) {
130
132
  async function sendRequest() {
@@ -151,14 +153,17 @@ async function executor(request) {
151
153
  const data = await executeHttpClientRequest(async options => {
152
154
  const {
153
155
  enableRetry,
154
- retryConfig
156
+ retryConfig,
157
+ abortController
155
158
  } = rest;
156
159
  const {
157
160
  retryCodes = [],
158
161
  maxDelay = Infinity,
159
162
  maxRetries = 3,
160
163
  backoff = true,
161
- retryDelay = 200
164
+ retryDelay = 200,
165
+ // If set to true reinitialize the abort controller when the timeout is reached and apply the retry config
166
+ retryOnAbort = true
162
167
  } = retryConfig || {};
163
168
  let result,
164
169
  data,
@@ -184,15 +189,41 @@ async function executor(request) {
184
189
  });
185
190
  }
186
191
  async function executeWithRetry() {
192
+ const executeWithTryCatch = async (retryCodes, retryWhenAborted) => {
193
+ let _response = {};
194
+ try {
195
+ _response = await execute();
196
+ if (_response.status > 299 && hasResponseRetryCode(retryCodes, _response)) return {
197
+ _response,
198
+ shouldRetry: true
199
+ };
200
+ } catch (e) {
201
+ if (e.name.includes('AbortError') && retryWhenAborted) {
202
+ return {
203
+ _response: e,
204
+ shouldRetry: true
205
+ };
206
+ } else {
207
+ throw e;
208
+ }
209
+ }
210
+ return {
211
+ _response,
212
+ shouldRetry: false
213
+ };
214
+ };
215
+ const retryWhenAborted = retryOnAbort || !abortController || !abortController.signal;
187
216
  // first attempt
188
- let _response = await execute();
189
- if (predicate(retryCodes, _response)) return _response;
190
-
217
+ let {
218
+ _response,
219
+ shouldRetry
220
+ } = await executeWithTryCatch(retryCodes, retryWhenAborted);
191
221
  // retry attempts
192
- while (enableRetry && retryCount < maxRetries) {
222
+ while (enableRetry && shouldRetry && retryCount < maxRetries) {
193
223
  retryCount++;
194
- _response = await execute();
195
- if (predicate(retryCodes, _response)) return _response;
224
+ const execution = await executeWithTryCatch(retryCodes, retryWhenAborted);
225
+ _response = execution._response;
226
+ shouldRetry = execution.shouldRetry;
196
227
 
197
228
  // delay next execution
198
229
  const timer = calculateRetryDelay({
@@ -432,7 +463,6 @@ function createUserAgent(options) {
432
463
  function validateHttpOptions(options) {
433
464
  if (!options.host) throw new Error('Request `host` or `url` is missing or invalid, please pass in a valid host e.g `host: http://a-valid-host-url`');
434
465
  if (!options.httpClient && typeof options.httpClient !== 'function') throw new Error('An `httpClient` is not available, please pass in a `fetch` or `axios` instance as an option or have them globally available.');
435
- if (options.timeout && !options.getAbortController) throw new Error('`AbortController` is not available. Please pass in `getAbortController` as an option or have AbortController globally available when using timeout.');
436
466
  }
437
467
 
438
468
  /**
@@ -592,7 +622,6 @@ async function executeRequest$1(options) {
592
622
  httpClient,
593
623
  tokenCache,
594
624
  tokenCacheKey,
595
- requestState,
596
625
  userOption,
597
626
  next
598
627
  } = options;
@@ -627,18 +656,14 @@ async function executeRequest$1(options) {
627
656
  next
628
657
  });
629
658
 
630
- // if a token is currently being fetched, then wait
631
- if (requestState.get()) return;
632
-
633
- // signal that a token is being fetched
634
- requestState.set(true);
635
-
636
659
  /**
637
660
  * use refreshToken flow if there is refresh-token
638
661
  * and there's either no token or the token is expired
639
662
  */
640
663
  if (tokenCacheObject && tokenCacheObject.refreshToken && (!tokenCacheObject.token || tokenCacheObject.token && Date.now() > tokenCacheObject.expirationTime)) {
641
- if (!userOption) throw new Error('Missing required options.');
664
+ if (!userOption) {
665
+ throw new Error('Missing required options.');
666
+ }
642
667
  const opt = {
643
668
  ...buildRequestForRefreshTokenFlow({
644
669
  ...userOption,
@@ -683,9 +708,6 @@ async function executeRequest$1(options) {
683
708
  refreshToken
684
709
  });
685
710
 
686
- // signal that a token fetch is complete
687
- requestState.set(false);
688
-
689
711
  /**
690
712
  * Freeze and copy pending queue, reset
691
713
  * original one for accepting new pending tasks
@@ -784,7 +806,7 @@ function createAuthMiddlewareForAnonymousSessionFlow$1(options) {
784
806
  }
785
807
 
786
808
  function createAuthMiddlewareForClientCredentialsFlow$1(options) {
787
- const requestState = store(false);
809
+ const requestState = new asyncMutex.Mutex();
788
810
  const pendingTasks = [];
789
811
  const tokenCache = options.tokenCache || store({
790
812
  token: '',
@@ -812,7 +834,13 @@ function createAuthMiddlewareForClientCredentialsFlow$1(options) {
812
834
  };
813
835
 
814
836
  // make request to coco
815
- const requestWithAuth = await executeRequest$1(requestOptions);
837
+ let requestWithAuth;
838
+ try {
839
+ await requestState.acquire();
840
+ requestWithAuth = await executeRequest$1(requestOptions);
841
+ } finally {
842
+ requestState.release();
843
+ }
816
844
  if (requestWithAuth) {
817
845
  // make the request and inject the token into the header
818
846
  return next(requestWithAuth);
@@ -1224,7 +1252,7 @@ function createQueueMiddleware$1({
1224
1252
 
1225
1253
  var packageJson = {
1226
1254
  name: "@commercetools/ts-client",
1227
- version: "2.0.0",
1255
+ version: "2.0.2",
1228
1256
  engines: {
1229
1257
  node: ">=14"
1230
1258
  },
@@ -1258,9 +1286,10 @@ var packageJson = {
1258
1286
  },
1259
1287
  dependencies: {
1260
1288
  "abort-controller": "3.0.0",
1289
+ "async-mutex": "^0.5.0",
1261
1290
  buffer: "^6.0.3",
1262
1291
  "node-fetch": "^2.6.1",
1263
- uuid: "9.0.1"
1292
+ uuid: "10.0.0"
1264
1293
  },
1265
1294
  files: [
1266
1295
  "dist",
@@ -1,6 +1,7 @@
1
1
  import fetch$1 from 'node-fetch';
2
2
  import { v4 } from 'uuid';
3
3
  import { Buffer } from 'buffer/';
4
+ import { Mutex } from 'async-mutex';
4
5
  import AbortController from 'abort-controller';
5
6
 
6
7
  function toPrimitive(t, r) {
@@ -112,10 +113,11 @@ function createError({
112
113
  return new HttpError(statusCode, errorMessage, rest);
113
114
  }
114
115
 
115
- function predicate(retryCodes, response) {
116
- return !
117
- // retryCodes.includes(response?.error?.message) ||
118
- [503, ...retryCodes].includes(response?.status || response?.statusCode);
116
+ function hasResponseRetryCode(retryCodes, response) {
117
+ return (
118
+ // retryCodes.includes(response?.error?.message) ||
119
+ [503, ...retryCodes].includes(response?.status || response?.statusCode)
120
+ );
119
121
  }
120
122
  async function executeHttpClientRequest(fetcher, config) {
121
123
  async function sendRequest() {
@@ -142,14 +144,17 @@ async function executor(request) {
142
144
  const data = await executeHttpClientRequest(async options => {
143
145
  const {
144
146
  enableRetry,
145
- retryConfig
147
+ retryConfig,
148
+ abortController
146
149
  } = rest;
147
150
  const {
148
151
  retryCodes = [],
149
152
  maxDelay = Infinity,
150
153
  maxRetries = 3,
151
154
  backoff = true,
152
- retryDelay = 200
155
+ retryDelay = 200,
156
+ // If set to true reinitialize the abort controller when the timeout is reached and apply the retry config
157
+ retryOnAbort = true
153
158
  } = retryConfig || {};
154
159
  let result,
155
160
  data,
@@ -175,15 +180,41 @@ async function executor(request) {
175
180
  });
176
181
  }
177
182
  async function executeWithRetry() {
183
+ const executeWithTryCatch = async (retryCodes, retryWhenAborted) => {
184
+ let _response = {};
185
+ try {
186
+ _response = await execute();
187
+ if (_response.status > 299 && hasResponseRetryCode(retryCodes, _response)) return {
188
+ _response,
189
+ shouldRetry: true
190
+ };
191
+ } catch (e) {
192
+ if (e.name.includes('AbortError') && retryWhenAborted) {
193
+ return {
194
+ _response: e,
195
+ shouldRetry: true
196
+ };
197
+ } else {
198
+ throw e;
199
+ }
200
+ }
201
+ return {
202
+ _response,
203
+ shouldRetry: false
204
+ };
205
+ };
206
+ const retryWhenAborted = retryOnAbort || !abortController || !abortController.signal;
178
207
  // first attempt
179
- let _response = await execute();
180
- if (predicate(retryCodes, _response)) return _response;
181
-
208
+ let {
209
+ _response,
210
+ shouldRetry
211
+ } = await executeWithTryCatch(retryCodes, retryWhenAborted);
182
212
  // retry attempts
183
- while (enableRetry && retryCount < maxRetries) {
213
+ while (enableRetry && shouldRetry && retryCount < maxRetries) {
184
214
  retryCount++;
185
- _response = await execute();
186
- if (predicate(retryCodes, _response)) return _response;
215
+ const execution = await executeWithTryCatch(retryCodes, retryWhenAborted);
216
+ _response = execution._response;
217
+ shouldRetry = execution.shouldRetry;
187
218
 
188
219
  // delay next execution
189
220
  const timer = calculateRetryDelay({
@@ -423,7 +454,6 @@ function createUserAgent(options) {
423
454
  function validateHttpOptions(options) {
424
455
  if (!options.host) throw new Error('Request `host` or `url` is missing or invalid, please pass in a valid host e.g `host: http://a-valid-host-url`');
425
456
  if (!options.httpClient && typeof options.httpClient !== 'function') throw new Error('An `httpClient` is not available, please pass in a `fetch` or `axios` instance as an option or have them globally available.');
426
- if (options.timeout && !options.getAbortController) throw new Error('`AbortController` is not available. Please pass in `getAbortController` as an option or have AbortController globally available when using timeout.');
427
457
  }
428
458
 
429
459
  /**
@@ -583,7 +613,6 @@ async function executeRequest$1(options) {
583
613
  httpClient,
584
614
  tokenCache,
585
615
  tokenCacheKey,
586
- requestState,
587
616
  userOption,
588
617
  next
589
618
  } = options;
@@ -618,18 +647,14 @@ async function executeRequest$1(options) {
618
647
  next
619
648
  });
620
649
 
621
- // if a token is currently being fetched, then wait
622
- if (requestState.get()) return;
623
-
624
- // signal that a token is being fetched
625
- requestState.set(true);
626
-
627
650
  /**
628
651
  * use refreshToken flow if there is refresh-token
629
652
  * and there's either no token or the token is expired
630
653
  */
631
654
  if (tokenCacheObject && tokenCacheObject.refreshToken && (!tokenCacheObject.token || tokenCacheObject.token && Date.now() > tokenCacheObject.expirationTime)) {
632
- if (!userOption) throw new Error('Missing required options.');
655
+ if (!userOption) {
656
+ throw new Error('Missing required options.');
657
+ }
633
658
  const opt = {
634
659
  ...buildRequestForRefreshTokenFlow({
635
660
  ...userOption,
@@ -674,9 +699,6 @@ async function executeRequest$1(options) {
674
699
  refreshToken
675
700
  });
676
701
 
677
- // signal that a token fetch is complete
678
- requestState.set(false);
679
-
680
702
  /**
681
703
  * Freeze and copy pending queue, reset
682
704
  * original one for accepting new pending tasks
@@ -775,7 +797,7 @@ function createAuthMiddlewareForAnonymousSessionFlow$1(options) {
775
797
  }
776
798
 
777
799
  function createAuthMiddlewareForClientCredentialsFlow$1(options) {
778
- const requestState = store(false);
800
+ const requestState = new Mutex();
779
801
  const pendingTasks = [];
780
802
  const tokenCache = options.tokenCache || store({
781
803
  token: '',
@@ -803,7 +825,13 @@ function createAuthMiddlewareForClientCredentialsFlow$1(options) {
803
825
  };
804
826
 
805
827
  // make request to coco
806
- const requestWithAuth = await executeRequest$1(requestOptions);
828
+ let requestWithAuth;
829
+ try {
830
+ await requestState.acquire();
831
+ requestWithAuth = await executeRequest$1(requestOptions);
832
+ } finally {
833
+ requestState.release();
834
+ }
807
835
  if (requestWithAuth) {
808
836
  // make the request and inject the token into the header
809
837
  return next(requestWithAuth);
@@ -1215,7 +1243,7 @@ function createQueueMiddleware$1({
1215
1243
 
1216
1244
  var packageJson = {
1217
1245
  name: "@commercetools/ts-client",
1218
- version: "2.0.0",
1246
+ version: "2.0.2",
1219
1247
  engines: {
1220
1248
  node: ">=14"
1221
1249
  },
@@ -1249,9 +1277,10 @@ var packageJson = {
1249
1277
  },
1250
1278
  dependencies: {
1251
1279
  "abort-controller": "3.0.0",
1280
+ "async-mutex": "^0.5.0",
1252
1281
  buffer: "^6.0.3",
1253
1282
  "node-fetch": "^2.6.1",
1254
- uuid: "9.0.1"
1283
+ uuid: "10.0.0"
1255
1284
  },
1256
1285
  files: [
1257
1286
  "dist",
@@ -0,0 +1,14 @@
1
+ var window;(window||={})["@commercetools/ts-client"]=(()=>{var Jt=Object.create;var xe=Object.defineProperty;var Xt=Object.getOwnPropertyDescriptor;var Zt=Object.getOwnPropertyNames;var er=Object.getPrototypeOf,tr=Object.prototype.hasOwnProperty;var ue=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),De=(r,e)=>{for(var t in e)xe(r,t,{get:e[t],enumerable:!0})},dt=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Zt(e))!tr.call(r,n)&&n!==t&&xe(r,n,{get:()=>e[n],enumerable:!(i=Xt(e,n))||i.enumerable});return r};var O=(r,e,t)=>(t=r!=null?Jt(er(r)):{},dt(e||!r||!r.__esModule?xe(t,"default",{value:r,enumerable:!0}):t,r)),rr=r=>dt(xe({},"__esModule",{value:!0}),r);var le=ue((z,ht)=>{"use strict";var ir=function(){if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global;throw new Error("unable to locate global object")},D=ir();ht.exports=z=D.fetch;D.fetch&&(z.default=D.fetch.bind(D));z.Headers=D.Headers;z.Request=D.Request;z.Response=D.Response});var xt=ue(Ue=>{"use strict";Ue.byteLength=br;Ue.toByteArray=Ur;Ue.fromByteArray=_r;var F=[],T=[],Ir=typeof Uint8Array<"u"?Uint8Array:Array,Je="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for($=0,yt=Je.length;$<yt;++$)F[$]=Je[$],T[Je.charCodeAt($)]=$;var $,yt;T[45]=62;T[95]=63;function gt(r){var e=r.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var t=r.indexOf("=");t===-1&&(t=e);var i=t===e?0:4-t%4;return[t,i]}function br(r){var e=gt(r),t=e[0],i=e[1];return(t+i)*3/4-i}function Fr(r,e,t){return(e+t)*3/4-t}function Ur(r){var e,t=gt(r),i=t[0],n=t[1],o=new Ir(Fr(r,i,n)),s=0,l=n>0?i-4:i,c;for(c=0;c<l;c+=4)e=T[r.charCodeAt(c)]<<18|T[r.charCodeAt(c+1)]<<12|T[r.charCodeAt(c+2)]<<6|T[r.charCodeAt(c+3)],o[s++]=e>>16&255,o[s++]=e>>8&255,o[s++]=e&255;return n===2&&(e=T[r.charCodeAt(c)]<<2|T[r.charCodeAt(c+1)]>>4,o[s++]=e&255),n===1&&(e=T[r.charCodeAt(c)]<<10|T[r.charCodeAt(c+1)]<<4|T[r.charCodeAt(c+2)]>>2,o[s++]=e>>8&255,o[s++]=e&255),o}function kr(r){return F[r>>18&63]+F[r>>12&63]+F[r>>6&63]+F[r&63]}function Sr(r,e,t){for(var i,n=[],o=e;o<t;o+=3)i=(r[o]<<16&16711680)+(r[o+1]<<8&65280)+(r[o+2]&255),n.push(kr(i));return n.join("")}function _r(r){for(var e,t=r.length,i=t%3,n=[],o=16383,s=0,l=t-i;s<l;s+=o)n.push(Sr(r,s,s+o>l?l:s+o));return i===1?(e=r[t-1],n.push(F[e>>2]+F[e<<4&63]+"==")):i===2&&(e=(r[t-2]<<8)+r[t-1],n.push(F[e>>10]+F[e>>4&63]+F[e<<2&63]+"=")),n.join("")}});var Mt=ue(Xe=>{Xe.read=function(r,e,t,i,n){var o,s,l=n*8-i-1,c=(1<<l)-1,h=c>>1,u=-7,d=t?n-1:0,f=t?-1:1,p=r[e+d];for(d+=f,o=p&(1<<-u)-1,p>>=-u,u+=l;u>0;o=o*256+r[e+d],d+=f,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=i;u>0;s=s*256+r[e+d],d+=f,u-=8);if(o===0)o=1-h;else{if(o===c)return s?NaN:(p?-1:1)*(1/0);s=s+Math.pow(2,i),o=o-h}return(p?-1:1)*s*Math.pow(2,o-i)};Xe.write=function(r,e,t,i,n,o){var s,l,c,h=o*8-n-1,u=(1<<h)-1,d=u>>1,f=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,p=i?0:o-1,w=i?1:-1,E=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(l=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(c=Math.pow(2,-s))<1&&(s--,c*=2),s+d>=1?e+=f/c:e+=f*Math.pow(2,1-d),e*c>=2&&(s++,c/=2),s+d>=u?(l=0,s=u):s+d>=1?(l=(e*c-1)*Math.pow(2,n),s=s+d):(l=e*Math.pow(2,d-1)*Math.pow(2,n),s=0));n>=8;r[t+p]=l&255,p+=w,l/=256,n-=8);for(s=s<<n|l,h+=n;h>0;r[t+p]=s&255,p+=w,s/=256,h-=8);r[t+p-w]|=E*128}});var _e=ue(Z=>{"use strict";var Ze=xt(),J=Mt(),Et=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;Z.Buffer=a;Z.SlowBuffer=jr;Z.INSPECT_MAX_BYTES=50;var ke=2147483647;Z.kMaxLength=ke;a.TYPED_ARRAY_SUPPORT=Or();!a.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function Or(){try{let r=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(r,e),r.foo()===42}catch{return!1}}Object.defineProperty(a.prototype,"parent",{enumerable:!0,get:function(){if(a.isBuffer(this))return this.buffer}});Object.defineProperty(a.prototype,"offset",{enumerable:!0,get:function(){if(a.isBuffer(this))return this.byteOffset}});function _(r){if(r>ke)throw new RangeError('The value "'+r+'" is invalid for option "size"');let e=new Uint8Array(r);return Object.setPrototypeOf(e,a.prototype),e}function a(r,e,t){if(typeof r=="number"){if(typeof e=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return it(r)}return Tt(r,e,t)}a.poolSize=8192;function Tt(r,e,t){if(typeof r=="string")return Pr(r,e);if(ArrayBuffer.isView(r))return Nr(r);if(r==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r);if(U(r,ArrayBuffer)||r&&U(r.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(U(r,SharedArrayBuffer)||r&&U(r.buffer,SharedArrayBuffer)))return tt(r,e,t);if(typeof r=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let i=r.valueOf&&r.valueOf();if(i!=null&&i!==r)return a.from(i,e,t);let n=Lr(r);if(n)return n;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof r[Symbol.toPrimitive]=="function")return a.from(r[Symbol.toPrimitive]("string"),e,t);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r)}a.from=function(r,e,t){return Tt(r,e,t)};Object.setPrototypeOf(a.prototype,Uint8Array.prototype);Object.setPrototypeOf(a,Uint8Array);function Bt(r){if(typeof r!="number")throw new TypeError('"size" argument must be of type number');if(r<0)throw new RangeError('The value "'+r+'" is invalid for option "size"')}function qr(r,e,t){return Bt(r),r<=0?_(r):e!==void 0?typeof t=="string"?_(r).fill(e,t):_(r).fill(e):_(r)}a.alloc=function(r,e,t){return qr(r,e,t)};function it(r){return Bt(r),_(r<0?0:nt(r)|0)}a.allocUnsafe=function(r){return it(r)};a.allocUnsafeSlow=function(r){return it(r)};function Pr(r,e){if((typeof e!="string"||e==="")&&(e="utf8"),!a.isEncoding(e))throw new TypeError("Unknown encoding: "+e);let t=It(r,e)|0,i=_(t),n=i.write(r,e);return n!==t&&(i=i.slice(0,n)),i}function et(r){let e=r.length<0?0:nt(r.length)|0,t=_(e);for(let i=0;i<e;i+=1)t[i]=r[i]&255;return t}function Nr(r){if(U(r,Uint8Array)){let e=new Uint8Array(r);return tt(e.buffer,e.byteOffset,e.byteLength)}return et(r)}function tt(r,e,t){if(e<0||r.byteLength<e)throw new RangeError('"offset" is outside of buffer bounds');if(r.byteLength<e+(t||0))throw new RangeError('"length" is outside of buffer bounds');let i;return e===void 0&&t===void 0?i=new Uint8Array(r):t===void 0?i=new Uint8Array(r,e):i=new Uint8Array(r,e,t),Object.setPrototypeOf(i,a.prototype),i}function Lr(r){if(a.isBuffer(r)){let e=nt(r.length)|0,t=_(e);return t.length===0||r.copy(t,0,0,e),t}if(r.length!==void 0)return typeof r.length!="number"||st(r.length)?_(0):et(r);if(r.type==="Buffer"&&Array.isArray(r.data))return et(r.data)}function nt(r){if(r>=ke)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+ke.toString(16)+" bytes");return r|0}function jr(r){return+r!=r&&(r=0),a.alloc(+r)}a.isBuffer=function(e){return e!=null&&e._isBuffer===!0&&e!==a.prototype};a.compare=function(e,t){if(U(e,Uint8Array)&&(e=a.from(e,e.offset,e.byteLength)),U(t,Uint8Array)&&(t=a.from(t,t.offset,t.byteLength)),!a.isBuffer(e)||!a.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let i=e.length,n=t.length;for(let o=0,s=Math.min(i,n);o<s;++o)if(e[o]!==t[o]){i=e[o],n=t[o];break}return i<n?-1:n<i?1:0};a.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}};a.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('"list" argument must be an Array of Buffers');if(e.length===0)return a.alloc(0);let i;if(t===void 0)for(t=0,i=0;i<e.length;++i)t+=e[i].length;let n=a.allocUnsafe(t),o=0;for(i=0;i<e.length;++i){let s=e[i];if(U(s,Uint8Array))o+s.length>n.length?(a.isBuffer(s)||(s=a.from(s)),s.copy(n,o)):Uint8Array.prototype.set.call(n,s,o);else if(a.isBuffer(s))s.copy(n,o);else throw new TypeError('"list" argument must be an Array of Buffers');o+=s.length}return n};function It(r,e){if(a.isBuffer(r))return r.length;if(ArrayBuffer.isView(r)||U(r,ArrayBuffer))return r.byteLength;if(typeof r!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof r);let t=r.length,i=arguments.length>2&&arguments[2]===!0;if(!i&&t===0)return 0;let n=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return t;case"utf8":case"utf-8":return rt(r).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return t*2;case"hex":return t>>>1;case"base64":return Pt(r).length;default:if(n)return i?-1:rt(r).length;e=(""+e).toLowerCase(),n=!0}}a.byteLength=It;function Dr(r,e,t){let i=!1;if((e===void 0||e<0)&&(e=0),e>this.length||((t===void 0||t>this.length)&&(t=this.length),t<=0)||(t>>>=0,e>>>=0,t<=e))return"";for(r||(r="utf8");;)switch(r){case"hex":return Yr(this,e,t);case"utf8":case"utf-8":return Ft(this,e,t);case"ascii":return Qr(this,e,t);case"latin1":case"binary":return Gr(this,e,t);case"base64":return Vr(this,e,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Jr(this,e,t);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(r+"").toLowerCase(),i=!0}}a.prototype._isBuffer=!0;function v(r,e,t){let i=r[e];r[e]=r[t],r[t]=i}a.prototype.swap16=function(){let e=this.length;if(e%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;t<e;t+=2)v(this,t,t+1);return this};a.prototype.swap32=function(){let e=this.length;if(e%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let t=0;t<e;t+=4)v(this,t,t+3),v(this,t+1,t+2);return this};a.prototype.swap64=function(){let e=this.length;if(e%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let t=0;t<e;t+=8)v(this,t,t+7),v(this,t+1,t+6),v(this,t+2,t+5),v(this,t+3,t+4);return this};a.prototype.toString=function(){let e=this.length;return e===0?"":arguments.length===0?Ft(this,0,e):Dr.apply(this,arguments)};a.prototype.toLocaleString=a.prototype.toString;a.prototype.equals=function(e){if(!a.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?!0:a.compare(this,e)===0};a.prototype.inspect=function(){let e="",t=Z.INSPECT_MAX_BYTES;return e=this.toString("hex",0,t).replace(/(.{2})/g,"$1 ").trim(),this.length>t&&(e+=" ... "),"<Buffer "+e+">"};Et&&(a.prototype[Et]=a.prototype.inspect);a.prototype.compare=function(e,t,i,n,o){if(U(e,Uint8Array)&&(e=a.from(e,e.offset,e.byteLength)),!a.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(t===void 0&&(t=0),i===void 0&&(i=e?e.length:0),n===void 0&&(n=0),o===void 0&&(o=this.length),t<0||i>e.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&t>=i)return 0;if(n>=o)return-1;if(t>=i)return 1;if(t>>>=0,i>>>=0,n>>>=0,o>>>=0,this===e)return 0;let s=o-n,l=i-t,c=Math.min(s,l),h=this.slice(n,o),u=e.slice(t,i);for(let d=0;d<c;++d)if(h[d]!==u[d]){s=h[d],l=u[d];break}return s<l?-1:l<s?1:0};function bt(r,e,t,i,n){if(r.length===0)return-1;if(typeof t=="string"?(i=t,t=0):t>2147483647?t=2147483647:t<-2147483648&&(t=-2147483648),t=+t,st(t)&&(t=n?0:r.length-1),t<0&&(t=r.length+t),t>=r.length){if(n)return-1;t=r.length-1}else if(t<0)if(n)t=0;else return-1;if(typeof e=="string"&&(e=a.from(e,i)),a.isBuffer(e))return e.length===0?-1:Ct(r,e,t,i,n);if(typeof e=="number")return e=e&255,typeof Uint8Array.prototype.indexOf=="function"?n?Uint8Array.prototype.indexOf.call(r,e,t):Uint8Array.prototype.lastIndexOf.call(r,e,t):Ct(r,[e],t,i,n);throw new TypeError("val must be string, number or Buffer")}function Ct(r,e,t,i,n){let o=1,s=r.length,l=e.length;if(i!==void 0&&(i=String(i).toLowerCase(),i==="ucs2"||i==="ucs-2"||i==="utf16le"||i==="utf-16le")){if(r.length<2||e.length<2)return-1;o=2,s/=2,l/=2,t/=2}function c(u,d){return o===1?u[d]:u.readUInt16BE(d*o)}let h;if(n){let u=-1;for(h=t;h<s;h++)if(c(r,h)===c(e,u===-1?0:h-u)){if(u===-1&&(u=h),h-u+1===l)return u*o}else u!==-1&&(h-=h-u),u=-1}else for(t+l>s&&(t=s-l),h=t;h>=0;h--){let u=!0;for(let d=0;d<l;d++)if(c(r,h+d)!==c(e,d)){u=!1;break}if(u)return h}return-1}a.prototype.includes=function(e,t,i){return this.indexOf(e,t,i)!==-1};a.prototype.indexOf=function(e,t,i){return bt(this,e,t,i,!0)};a.prototype.lastIndexOf=function(e,t,i){return bt(this,e,t,i,!1)};function Hr(r,e,t,i){t=Number(t)||0;let n=r.length-t;i?(i=Number(i),i>n&&(i=n)):i=n;let o=e.length;i>o/2&&(i=o/2);let s;for(s=0;s<i;++s){let l=parseInt(e.substr(s*2,2),16);if(st(l))return s;r[t+s]=l}return s}function $r(r,e,t,i){return Se(rt(e,r.length-t),r,t,i)}function vr(r,e,t,i){return Se(ti(e),r,t,i)}function Kr(r,e,t,i){return Se(Pt(e),r,t,i)}function Wr(r,e,t,i){return Se(ri(e,r.length-t),r,t,i)}a.prototype.write=function(e,t,i,n){if(t===void 0)n="utf8",i=this.length,t=0;else if(i===void 0&&typeof t=="string")n=t,i=this.length,t=0;else if(isFinite(t))t=t>>>0,isFinite(i)?(i=i>>>0,n===void 0&&(n="utf8")):(n=i,i=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let o=this.length-t;if((i===void 0||i>o)&&(i=o),e.length>0&&(i<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let s=!1;for(;;)switch(n){case"hex":return Hr(this,e,t,i);case"utf8":case"utf-8":return $r(this,e,t,i);case"ascii":case"latin1":case"binary":return vr(this,e,t,i);case"base64":return Kr(this,e,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Wr(this,e,t,i);default:if(s)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),s=!0}};a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function Vr(r,e,t){return e===0&&t===r.length?Ze.fromByteArray(r):Ze.fromByteArray(r.slice(e,t))}function Ft(r,e,t){t=Math.min(r.length,t);let i=[],n=e;for(;n<t;){let o=r[n],s=null,l=o>239?4:o>223?3:o>191?2:1;if(n+l<=t){let c,h,u,d;switch(l){case 1:o<128&&(s=o);break;case 2:c=r[n+1],(c&192)===128&&(d=(o&31)<<6|c&63,d>127&&(s=d));break;case 3:c=r[n+1],h=r[n+2],(c&192)===128&&(h&192)===128&&(d=(o&15)<<12|(c&63)<<6|h&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:c=r[n+1],h=r[n+2],u=r[n+3],(c&192)===128&&(h&192)===128&&(u&192)===128&&(d=(o&15)<<18|(c&63)<<12|(h&63)<<6|u&63,d>65535&&d<1114112&&(s=d))}}s===null?(s=65533,l=1):s>65535&&(s-=65536,i.push(s>>>10&1023|55296),s=56320|s&1023),i.push(s),n+=l}return zr(i)}var At=4096;function zr(r){let e=r.length;if(e<=At)return String.fromCharCode.apply(String,r);let t="",i=0;for(;i<e;)t+=String.fromCharCode.apply(String,r.slice(i,i+=At));return t}function Qr(r,e,t){let i="";t=Math.min(r.length,t);for(let n=e;n<t;++n)i+=String.fromCharCode(r[n]&127);return i}function Gr(r,e,t){let i="";t=Math.min(r.length,t);for(let n=e;n<t;++n)i+=String.fromCharCode(r[n]);return i}function Yr(r,e,t){let i=r.length;(!e||e<0)&&(e=0),(!t||t<0||t>i)&&(t=i);let n="";for(let o=e;o<t;++o)n+=ii[r[o]];return n}function Jr(r,e,t){let i=r.slice(e,t),n="";for(let o=0;o<i.length-1;o+=2)n+=String.fromCharCode(i[o]+i[o+1]*256);return n}a.prototype.slice=function(e,t){let i=this.length;e=~~e,t=t===void 0?i:~~t,e<0?(e+=i,e<0&&(e=0)):e>i&&(e=i),t<0?(t+=i,t<0&&(t=0)):t>i&&(t=i),t<e&&(t=e);let n=this.subarray(e,t);return Object.setPrototypeOf(n,a.prototype),n};function y(r,e,t){if(r%1!==0||r<0)throw new RangeError("offset is not uint");if(r+e>t)throw new RangeError("Trying to access beyond buffer length")}a.prototype.readUintLE=a.prototype.readUIntLE=function(e,t,i){e=e>>>0,t=t>>>0,i||y(e,t,this.length);let n=this[e],o=1,s=0;for(;++s<t&&(o*=256);)n+=this[e+s]*o;return n};a.prototype.readUintBE=a.prototype.readUIntBE=function(e,t,i){e=e>>>0,t=t>>>0,i||y(e,t,this.length);let n=this[e+--t],o=1;for(;t>0&&(o*=256);)n+=this[e+--t]*o;return n};a.prototype.readUint8=a.prototype.readUInt8=function(e,t){return e=e>>>0,t||y(e,1,this.length),this[e]};a.prototype.readUint16LE=a.prototype.readUInt16LE=function(e,t){return e=e>>>0,t||y(e,2,this.length),this[e]|this[e+1]<<8};a.prototype.readUint16BE=a.prototype.readUInt16BE=function(e,t){return e=e>>>0,t||y(e,2,this.length),this[e]<<8|this[e+1]};a.prototype.readUint32LE=a.prototype.readUInt32LE=function(e,t){return e=e>>>0,t||y(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216};a.prototype.readUint32BE=a.prototype.readUInt32BE=function(e,t){return e=e>>>0,t||y(e,4,this.length),this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])};a.prototype.readBigUInt64LE=P(function(e){e=e>>>0,X(e,"offset");let t=this[e],i=this[e+7];(t===void 0||i===void 0)&&de(e,this.length-8);let n=t+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24,o=this[++e]+this[++e]*2**8+this[++e]*2**16+i*2**24;return BigInt(n)+(BigInt(o)<<BigInt(32))});a.prototype.readBigUInt64BE=P(function(e){e=e>>>0,X(e,"offset");let t=this[e],i=this[e+7];(t===void 0||i===void 0)&&de(e,this.length-8);let n=t*2**24+this[++e]*2**16+this[++e]*2**8+this[++e],o=this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+i;return(BigInt(n)<<BigInt(32))+BigInt(o)});a.prototype.readIntLE=function(e,t,i){e=e>>>0,t=t>>>0,i||y(e,t,this.length);let n=this[e],o=1,s=0;for(;++s<t&&(o*=256);)n+=this[e+s]*o;return o*=128,n>=o&&(n-=Math.pow(2,8*t)),n};a.prototype.readIntBE=function(e,t,i){e=e>>>0,t=t>>>0,i||y(e,t,this.length);let n=t,o=1,s=this[e+--n];for(;n>0&&(o*=256);)s+=this[e+--n]*o;return o*=128,s>=o&&(s-=Math.pow(2,8*t)),s};a.prototype.readInt8=function(e,t){return e=e>>>0,t||y(e,1,this.length),this[e]&128?(255-this[e]+1)*-1:this[e]};a.prototype.readInt16LE=function(e,t){e=e>>>0,t||y(e,2,this.length);let i=this[e]|this[e+1]<<8;return i&32768?i|4294901760:i};a.prototype.readInt16BE=function(e,t){e=e>>>0,t||y(e,2,this.length);let i=this[e+1]|this[e]<<8;return i&32768?i|4294901760:i};a.prototype.readInt32LE=function(e,t){return e=e>>>0,t||y(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24};a.prototype.readInt32BE=function(e,t){return e=e>>>0,t||y(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]};a.prototype.readBigInt64LE=P(function(e){e=e>>>0,X(e,"offset");let t=this[e],i=this[e+7];(t===void 0||i===void 0)&&de(e,this.length-8);let n=this[e+4]+this[e+5]*2**8+this[e+6]*2**16+(i<<24);return(BigInt(n)<<BigInt(32))+BigInt(t+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24)});a.prototype.readBigInt64BE=P(function(e){e=e>>>0,X(e,"offset");let t=this[e],i=this[e+7];(t===void 0||i===void 0)&&de(e,this.length-8);let n=(t<<24)+this[++e]*2**16+this[++e]*2**8+this[++e];return(BigInt(n)<<BigInt(32))+BigInt(this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+i)});a.prototype.readFloatLE=function(e,t){return e=e>>>0,t||y(e,4,this.length),J.read(this,e,!0,23,4)};a.prototype.readFloatBE=function(e,t){return e=e>>>0,t||y(e,4,this.length),J.read(this,e,!1,23,4)};a.prototype.readDoubleLE=function(e,t){return e=e>>>0,t||y(e,8,this.length),J.read(this,e,!0,52,8)};a.prototype.readDoubleBE=function(e,t){return e=e>>>0,t||y(e,8,this.length),J.read(this,e,!1,52,8)};function A(r,e,t,i,n,o){if(!a.isBuffer(r))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>n||e<o)throw new RangeError('"value" argument is out of bounds');if(t+i>r.length)throw new RangeError("Index out of range")}a.prototype.writeUintLE=a.prototype.writeUIntLE=function(e,t,i,n){if(e=+e,t=t>>>0,i=i>>>0,!n){let l=Math.pow(2,8*i)-1;A(this,e,t,i,l,0)}let o=1,s=0;for(this[t]=e&255;++s<i&&(o*=256);)this[t+s]=e/o&255;return t+i};a.prototype.writeUintBE=a.prototype.writeUIntBE=function(e,t,i,n){if(e=+e,t=t>>>0,i=i>>>0,!n){let l=Math.pow(2,8*i)-1;A(this,e,t,i,l,0)}let o=i-1,s=1;for(this[t+o]=e&255;--o>=0&&(s*=256);)this[t+o]=e/s&255;return t+i};a.prototype.writeUint8=a.prototype.writeUInt8=function(e,t,i){return e=+e,t=t>>>0,i||A(this,e,t,1,255,0),this[t]=e&255,t+1};a.prototype.writeUint16LE=a.prototype.writeUInt16LE=function(e,t,i){return e=+e,t=t>>>0,i||A(this,e,t,2,65535,0),this[t]=e&255,this[t+1]=e>>>8,t+2};a.prototype.writeUint16BE=a.prototype.writeUInt16BE=function(e,t,i){return e=+e,t=t>>>0,i||A(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=e&255,t+2};a.prototype.writeUint32LE=a.prototype.writeUInt32LE=function(e,t,i){return e=+e,t=t>>>0,i||A(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=e&255,t+4};a.prototype.writeUint32BE=a.prototype.writeUInt32BE=function(e,t,i){return e=+e,t=t>>>0,i||A(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4};function Ut(r,e,t,i,n){qt(e,i,n,r,t,7);let o=Number(e&BigInt(4294967295));r[t++]=o,o=o>>8,r[t++]=o,o=o>>8,r[t++]=o,o=o>>8,r[t++]=o;let s=Number(e>>BigInt(32)&BigInt(4294967295));return r[t++]=s,s=s>>8,r[t++]=s,s=s>>8,r[t++]=s,s=s>>8,r[t++]=s,t}function kt(r,e,t,i,n){qt(e,i,n,r,t,7);let o=Number(e&BigInt(4294967295));r[t+7]=o,o=o>>8,r[t+6]=o,o=o>>8,r[t+5]=o,o=o>>8,r[t+4]=o;let s=Number(e>>BigInt(32)&BigInt(4294967295));return r[t+3]=s,s=s>>8,r[t+2]=s,s=s>>8,r[t+1]=s,s=s>>8,r[t]=s,t+8}a.prototype.writeBigUInt64LE=P(function(e,t=0){return Ut(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))});a.prototype.writeBigUInt64BE=P(function(e,t=0){return kt(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))});a.prototype.writeIntLE=function(e,t,i,n){if(e=+e,t=t>>>0,!n){let c=Math.pow(2,8*i-1);A(this,e,t,i,c-1,-c)}let o=0,s=1,l=0;for(this[t]=e&255;++o<i&&(s*=256);)e<0&&l===0&&this[t+o-1]!==0&&(l=1),this[t+o]=(e/s>>0)-l&255;return t+i};a.prototype.writeIntBE=function(e,t,i,n){if(e=+e,t=t>>>0,!n){let c=Math.pow(2,8*i-1);A(this,e,t,i,c-1,-c)}let o=i-1,s=1,l=0;for(this[t+o]=e&255;--o>=0&&(s*=256);)e<0&&l===0&&this[t+o+1]!==0&&(l=1),this[t+o]=(e/s>>0)-l&255;return t+i};a.prototype.writeInt8=function(e,t,i){return e=+e,t=t>>>0,i||A(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=e&255,t+1};a.prototype.writeInt16LE=function(e,t,i){return e=+e,t=t>>>0,i||A(this,e,t,2,32767,-32768),this[t]=e&255,this[t+1]=e>>>8,t+2};a.prototype.writeInt16BE=function(e,t,i){return e=+e,t=t>>>0,i||A(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=e&255,t+2};a.prototype.writeInt32LE=function(e,t,i){return e=+e,t=t>>>0,i||A(this,e,t,4,2147483647,-2147483648),this[t]=e&255,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4};a.prototype.writeInt32BE=function(e,t,i){return e=+e,t=t>>>0,i||A(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4};a.prototype.writeBigInt64LE=P(function(e,t=0){return Ut(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});a.prototype.writeBigInt64BE=P(function(e,t=0){return kt(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function St(r,e,t,i,n,o){if(t+i>r.length)throw new RangeError("Index out of range");if(t<0)throw new RangeError("Index out of range")}function _t(r,e,t,i,n){return e=+e,t=t>>>0,n||St(r,e,t,4,34028234663852886e22,-34028234663852886e22),J.write(r,e,t,i,23,4),t+4}a.prototype.writeFloatLE=function(e,t,i){return _t(this,e,t,!0,i)};a.prototype.writeFloatBE=function(e,t,i){return _t(this,e,t,!1,i)};function Ot(r,e,t,i,n){return e=+e,t=t>>>0,n||St(r,e,t,8,17976931348623157e292,-17976931348623157e292),J.write(r,e,t,i,52,8),t+8}a.prototype.writeDoubleLE=function(e,t,i){return Ot(this,e,t,!0,i)};a.prototype.writeDoubleBE=function(e,t,i){return Ot(this,e,t,!1,i)};a.prototype.copy=function(e,t,i,n){if(!a.isBuffer(e))throw new TypeError("argument should be a Buffer");if(i||(i=0),!n&&n!==0&&(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<i&&(n=i),n===i||e.length===0||this.length===0)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(i<0||i>=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t<n-i&&(n=e.length-t+i);let o=n-i;return this===e&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(t,i,n):Uint8Array.prototype.set.call(e,this.subarray(i,n),t),o};a.prototype.fill=function(e,t,i,n){if(typeof e=="string"){if(typeof t=="string"?(n=t,t=0,i=this.length):typeof i=="string"&&(n=i,i=this.length),n!==void 0&&typeof n!="string")throw new TypeError("encoding must be a string");if(typeof n=="string"&&!a.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(e.length===1){let s=e.charCodeAt(0);(n==="utf8"&&s<128||n==="latin1")&&(e=s)}}else typeof e=="number"?e=e&255:typeof e=="boolean"&&(e=Number(e));if(t<0||this.length<t||this.length<i)throw new RangeError("Out of range index");if(i<=t)return this;t=t>>>0,i=i===void 0?this.length:i>>>0,e||(e=0);let o;if(typeof e=="number")for(o=t;o<i;++o)this[o]=e;else{let s=a.isBuffer(e)?e:a.from(e,n),l=s.length;if(l===0)throw new TypeError('The value "'+e+'" is invalid for argument "value"');for(o=0;o<i-t;++o)this[o+t]=s[o%l]}return this};var Y={};function ot(r,e,t){Y[r]=class extends t{constructor(){super(),Object.defineProperty(this,"message",{value:e.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${r}]`,this.stack,delete this.name}get code(){return r}set code(n){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:n,writable:!0})}toString(){return`${this.name} [${r}]: ${this.message}`}}}ot("ERR_BUFFER_OUT_OF_BOUNDS",function(r){return r?`${r} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError);ot("ERR_INVALID_ARG_TYPE",function(r,e){return`The "${r}" argument must be of type number. Received type ${typeof e}`},TypeError);ot("ERR_OUT_OF_RANGE",function(r,e,t){let i=`The value of "${r}" is out of range.`,n=t;return Number.isInteger(t)&&Math.abs(t)>2**32?n=Rt(String(t)):typeof t=="bigint"&&(n=String(t),(t>BigInt(2)**BigInt(32)||t<-(BigInt(2)**BigInt(32)))&&(n=Rt(n)),n+="n"),i+=` It must be ${e}. Received ${n}`,i},RangeError);function Rt(r){let e="",t=r.length,i=r[0]==="-"?1:0;for(;t>=i+4;t-=3)e=`_${r.slice(t-3,t)}${e}`;return`${r.slice(0,t)}${e}`}function Xr(r,e,t){X(e,"offset"),(r[e]===void 0||r[e+t]===void 0)&&de(e,r.length-(t+1))}function qt(r,e,t,i,n,o){if(r>t||r<e){let s=typeof e=="bigint"?"n":"",l;throw o>3?e===0||e===BigInt(0)?l=`>= 0${s} and < 2${s} ** ${(o+1)*8}${s}`:l=`>= -(2${s} ** ${(o+1)*8-1}${s}) and < 2 ** ${(o+1)*8-1}${s}`:l=`>= ${e}${s} and <= ${t}${s}`,new Y.ERR_OUT_OF_RANGE("value",l,r)}Xr(i,n,o)}function X(r,e){if(typeof r!="number")throw new Y.ERR_INVALID_ARG_TYPE(e,"number",r)}function de(r,e,t){throw Math.floor(r)!==r?(X(r,t),new Y.ERR_OUT_OF_RANGE(t||"offset","an integer",r)):e<0?new Y.ERR_BUFFER_OUT_OF_BOUNDS:new Y.ERR_OUT_OF_RANGE(t||"offset",`>= ${t?1:0} and <= ${e}`,r)}var Zr=/[^+/0-9A-Za-z-_]/g;function ei(r){if(r=r.split("=")[0],r=r.trim().replace(Zr,""),r.length<2)return"";for(;r.length%4!==0;)r=r+"=";return r}function rt(r,e){e=e||1/0;let t,i=r.length,n=null,o=[];for(let s=0;s<i;++s){if(t=r.charCodeAt(s),t>55295&&t<57344){if(!n){if(t>56319){(e-=3)>-1&&o.push(239,191,189);continue}else if(s+1===i){(e-=3)>-1&&o.push(239,191,189);continue}n=t;continue}if(t<56320){(e-=3)>-1&&o.push(239,191,189),n=t;continue}t=(n-55296<<10|t-56320)+65536}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,t<128){if((e-=1)<0)break;o.push(t)}else if(t<2048){if((e-=2)<0)break;o.push(t>>6|192,t&63|128)}else if(t<65536){if((e-=3)<0)break;o.push(t>>12|224,t>>6&63|128,t&63|128)}else if(t<1114112){if((e-=4)<0)break;o.push(t>>18|240,t>>12&63|128,t>>6&63|128,t&63|128)}else throw new Error("Invalid code point")}return o}function ti(r){let e=[];for(let t=0;t<r.length;++t)e.push(r.charCodeAt(t)&255);return e}function ri(r,e){let t,i,n,o=[];for(let s=0;s<r.length&&!((e-=2)<0);++s)t=r.charCodeAt(s),i=t>>8,n=t%256,o.push(n),o.push(i);return o}function Pt(r){return Ze.toByteArray(ei(r))}function Se(r,e,t,i){let n;for(n=0;n<i&&!(n+t>=e.length||n>=r.length);++n)e[n+t]=r[n];return n}function U(r,e){return r instanceof e||r!=null&&r.constructor!=null&&r.constructor.name!=null&&r.constructor.name===e.name}function st(r){return r!==r}var ii=function(){let r="0123456789abcdef",e=new Array(256);for(let t=0;t<16;++t){let i=t*16;for(let n=0;n<16;++n)e[i+n]=r[t]+r[n]}return e}();function P(r){return typeof BigInt>"u"?ni:r}function ni(){throw new Error("BigInt not supported")}});var Wt=ue((ao,Ne)=>{"use strict";var{AbortController:Kt,AbortSignal:li}=typeof self<"u"?self:typeof window<"u"?window:void 0;Ne.exports=Kt;Ne.exports.AbortSignal=li;Ne.exports.default=Kt});var Ai={};De(Ai,{ClientBuilder:()=>oe,Process:()=>Le,createAuthMiddlewareForAnonymousSessionFlow:()=>ee,createAuthMiddlewareForClientCredentialsFlow:()=>te,createAuthMiddlewareForExistingTokenFlow:()=>re,createAuthMiddlewareForPasswordFlow:()=>ie,createAuthMiddlewareForRefreshTokenFlow:()=>ne,createClient:()=>K,createConcurrentModificationMiddleware:()=>he,createCorrelationIdMiddleware:()=>fe,createHttpMiddleware:()=>pe,createLoggerMiddleware:()=>we,createQueueMiddleware:()=>me,createUserAgentMiddleware:()=>ye});var W=O(le());var ct={};De(ct,{createAuthMiddlewareForAnonymousSessionFlow:()=>ee,createAuthMiddlewareForClientCredentialsFlow:()=>te,createAuthMiddlewareForExistingTokenFlow:()=>re,createAuthMiddlewareForPasswordFlow:()=>ie,createAuthMiddlewareForRefreshTokenFlow:()=>ne,createConcurrentModificationMiddleware:()=>he,createCorrelationIdMiddleware:()=>fe,createErrorMiddleware:()=>lt,createHttpMiddleware:()=>pe,createLoggerMiddleware:()=>we,createQueueMiddleware:()=>me,createUserAgentMiddleware:()=>ye});var Dt=O(le());var I={};De(I,{CONCURRENCT_REQUEST:()=>or,CTP_API_URL:()=>sr,CTP_AUTH_URL:()=>ar,DEFAULT_HEADERS:()=>He,HEADERS_CONTENT_TYPES:()=>nr});var nr=["application/json","application/graphql"],or=20,sr="https://api.europe-west1.gcp.commercetools.com",ar="https://auth.europe-west1.gcp.commercetools.com",He=["content-type","access-control-allow-origin","access-control-allow-headers","access-control-allow-methods","access-control-expose-headers","access-control-max-ag","x-correlation-id","server-timing","date","server","transfer-encoding","access-control-max-age","content-encoding","x-envoy-upstream-service-time","via","alt-svc","connection"];function S(r,e,t={}){this.status=this.statusCode=this.code=r,this.message=e,Object.assign(this,t),this.name=this.constructor.name,this.constructor.prototype.__proto__=Error.prototype,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}function ft(...r){S.call(this,0,...r)}function pt(...r){S.call(this,...r)}function ur(...r){S.call(this,400,...r)}function lr(...r){S.call(this,401,...r)}function cr(...r){S.call(this,403,...r)}function dr(...r){S.call(this,404,...r)}function hr(...r){S.call(this,409,...r)}function fr(...r){S.call(this,500,...r)}function pr(...r){S.call(this,503,...r)}function $e(r){switch(r){case 0:return ft;case 400:return ur;case 401:return lr;case 403:return cr;case 404:return dr;case 409:return hr;case 500:return fr;case 503:return pr;default:return}}function wr({statusCode:r,message:e,...t}){let i=e||"Unexpected non-JSON error response";r===404&&(i=`URI not found: ${t.originalRequest?.uri||t.uri}`);let n=$e(r);return n?new n(i,t):new pt(r,i,t)}var Me=wr;function mr(r,e){return[503,...r].includes(e?.status||e?.statusCode)}async function yr(r,e){async function t(){return await r({...e,headers:{...e.headers}})}return t().catch(i=>Promise.reject(i))}async function Q(r){let{url:e,httpClient:t,...i}=r;return await yr(async o=>{let{enableRetry:s,retryConfig:l,abortController:c}=i,{retryCodes:h=[],maxDelay:u=1/0,maxRetries:d=3,backoff:f=!0,retryDelay:p=200,retryOnAbort:w=!0}=l||{},E,B,g=0;ve(h);async function M(){return t(e,{...i,...o,headers:{...i.headers,...o.headers,"Accept-Encoding":"application/json"},...i.body?{data:i.body}:{},withCredentials:o.credentialsMode==="include"})}async function C(){let k=async(j,se)=>{let ae={};try{if(ae=await M(),ae.status>299&&mr(j,ae))return{_response:ae,shouldRetry:!0}}catch(je){if(je.name.includes("AbortError")&&se)return{_response:je,shouldRetry:!0};throw je}return{_response:ae,shouldRetry:!1}},L=w||!c||!c.signal,{_response:ge,shouldRetry:V}=await k(h,L);for(;s&&V&&g<d;){g++;let j=await k(h,L);ge=j._response,V=j.shouldRetry;let se=Ee({retryCount:g,retryDelay:p,maxRetries:d,backoff:f,maxDelay:u});await Ce(se)}return ge}let m=await C();try{m.text&&typeof m.text=="function"?(E=await m.text(),B=JSON.parse(E)):B=m.data||m}catch{B=E}return{data:B,retryCount:g,statusCode:m.status||m.statusCode||B.statusCode,headers:m.headers}},{})}var x=[];for(Ae=0;Ae<256;++Ae)x.push((Ae+256).toString(16).slice(1));var Ae;function wt(r,e=0){return(x[r[e+0]]+x[r[e+1]]+x[r[e+2]]+x[r[e+3]]+"-"+x[r[e+4]]+x[r[e+5]]+"-"+x[r[e+6]]+x[r[e+7]]+"-"+x[r[e+8]]+x[r[e+9]]+"-"+x[r[e+10]]+x[r[e+11]]+x[r[e+12]]+x[r[e+13]]+x[r[e+14]]+x[r[e+15]]).toLowerCase()}var Re,gr=new Uint8Array(16);function Ke(){if(!Re&&(Re=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Re))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Re(gr)}var xr=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),We={randomUUID:xr};function Mr(r,e,t){if(We.randomUUID&&!e&&!r)return We.randomUUID();r=r||{};var i=r.random||(r.rng||Ke)();if(i[6]=i[6]&15|64,i[8]=i[8]&63|128,e){t=t||0;for(var n=0;n<16;++n)e[t+n]=i[n];return e}return wt(i)}var Ve=Mr;function Te(){return Ve()}function Er(r){return He.reduce((e,t)=>{let i=r[t]?r[t]:typeof r.get=="function"?r.get(t):null;return i&&(e[t]=i),e},{})}function b(r){if(!r)return null;if(r.raw&&typeof r.raw=="function")return r.raw();if(!r.forEach)return Er(r);let e={};return r.forEach((t,i)=>e[i]=t)}function ce(r){return r!=null&&r.constructor!=null&&typeof r.constructor.isBuffer=="function"&&r.constructor.isBuffer(r)}function H(r){let e=Object.assign({},r);return e?.headers&&(e.headers.Authorization&&(e.headers.Authorization="Bearer ********"),e.headers.authorization&&(e.headers.authorization="Bearer ********")),e}function G(r,e){return{...e,headers:{...e.headers,Authorization:`Bearer ${r}`}}}var ze=["ACL","BIND","CHECKOUT","CONNECT","COPY","DELETE","GET","HEAD","LINK","LOCK","M-SEARCH","MERGE","MKACTIVITY","MKCALENDAR","MKCOL","MOVE","NOTIFY","OPTIONS","PATCH","POST","PROPFIND","PROPPATCH","PURGE","PUT","REBIND","REPORT","SEARCH","SOURCE","SUBSCRIBE","TRACE","UNBIND","UNLINK","UNLOCK","UNSUBSCRIBE"];function Ee({retryCount:r,retryDelay:e,backoff:t,maxDelay:i}){return t&&r!==0?Math.min(Math.round((Math.random()+1)*e*2**r),i):e}Math.min(Math.round((Math.random()+1)*200*2**10),1/0);function Ce(r){return new Promise(e=>{setTimeout(e,r)})}function q(r){if(!r?.credentials?.clientId||!r.projectKey||!r.host)throw new Error("Missing required options.");return{clientId:r.credentials.clientId,host:r.host,projectKey:r.projectKey}}function Be(r){return Date.now()+r*1e3-5*60*1e3}function R(r){let e=r;return{get:t=>e,set:(t,i)=>{e=t}}}function mt(r){return typeof r<"u"&&r!==null}function Cr(r){return mt(r)?typeof r=="string"?r:Object.fromEntries(Object.entries(r).filter(([e,t])=>![null,void 0,""].includes(t))):""}function Ar(r){let e={},t=new URLSearchParams(r);for(let i of t.keys())t.getAll(i).length>1?e[i]=t.getAll(i):e[i]=t.get(i);return e}function Rr(r){if(r=Cr(r),!r)return"";let e=new URLSearchParams(r);for(let[t,i]of Object.entries(r))Array.isArray(i)&&(e.delete(t),i.filter(mt).forEach(n=>e.append(t,n)));return e.toString()}function Qe(r,e=Ar){return e(r)}function Ie(r,e=Rr){return e(r)}var Tr=()=>typeof window<"u"&&window.document&&window.document.nodeType===9;function Br(){if(Tr())return window.navigator.userAgent;let r=process?.version.slice(1)||"unknow",e=`(${process.platform}; ${process.arch})`;return`node.js/${r} ${e}`}function be(r){let e=null,t=null;if(!r)throw new Error("Missing required option `name`");let i=r.version?`${r.name}/${r.version}`:r.name;r.libraryName&&!r.libraryVersion?e=r.libraryName:r.libraryName&&r.libraryVersion&&(e=`${r.libraryName}/${r.libraryVersion}`),r.contactUrl&&!r.contactEmail?t=`(+${r.contactUrl})`:!r.contactUrl&&r.contactEmail?t=`(+${r.contactEmail})`:r.contactUrl&&r.contactEmail&&(t=`(+${r.contactUrl}; +${r.contactEmail})`);let n=Br(),o=r.customAgent||"";return[i,n,e,t,o].filter(Boolean).join(" ")}function Ge(r){if(!r.host)throw new Error("Request `host` or `url` is missing or invalid, please pass in a valid host e.g `host: http://a-valid-host-url`");if(!r.httpClient&&typeof r.httpClient!="function")throw new Error("An `httpClient` is not available, please pass in a `fetch` or `axios` instance as an option or have them globally available.")}function ve(r){if(!Array.isArray(r))throw new Error("`retryCodes` option must be an array of retry status (error) codes and/or messages.")}function Ye(r){if(!r)throw new Error("Missing required options");if(r.middlewares&&!Array.isArray(r.middlewares))throw new Error("Middlewares should be an array");if(!r.middlewares||!Array.isArray(r.middlewares)||!r.middlewares.length)throw new Error("You need to provide at least one middleware")}function Fe(r,e,t={allowedMethods:ze}){if(!e)throw new Error(`The "${r}" function requires a "Request" object as an argument. See https://commercetools.github.io/nodejs/sdk/Glossary.html#clientrequest`);if(typeof e.uri!="string")throw new Error(`The "${r}" Request object requires a valid uri. See https://commercetools.github.io/nodejs/sdk/Glossary.html#clientrequest`);if(!t.allowedMethods.includes(e.method))throw new Error(`The "${r}" Request object requires a valid method. See https://commercetools.github.io/nodejs/sdk/Glossary.html#clientrequest`)}var Oe=O(_e());function at(r){if(!r)throw new Error("Missing required options");if(!r.host)throw new Error("Missing required option (host)");if(!r.projectKey)throw new Error("Missing required option (projectKey)");if(!r.credentials)throw new Error("Missing required option (credentials)");let{clientId:e,clientSecret:t}=r.credentials||{};if(!(e&&t))throw new Error("Missing required credentials (clientId, clientSecret)");let i=r.scopes?r.scopes.join(" "):void 0,n=Oe.Buffer.from(`${e}:${t}`).toString("base64"),o=r.oauthUri||"/oauth/token",s=r.host.replace(/\/$/,"")+o,l=`grant_type=client_credentials${i?`&scope=${i}`:""}`;return{url:s,body:l,basicAuth:n}}function Nt(r){if(!r)throw new Error("Missing required options");if(!r.projectKey)throw new Error("Missing required option (projectKey)");let e=r.projectKey;r.oauthUri=r.oauthUri||`/oauth/${e}/anonymous/token`;let t=at(r);return r.credentials.anonymousId&&(t.body+=`&anonymous_id=${r.credentials.anonymousId}`),{...t}}function qe(r){if(!r)throw new Error("Missing required options");if(!r.host)throw new Error("Missing required option (host)");if(!r.projectKey)throw new Error("Missing required option (projectKey)");if(!r.credentials)throw new Error("Missing required option (credentials)");if(!r.refreshToken)throw new Error("Missing required option (refreshToken)");let{clientId:e,clientSecret:t}=r.credentials;if(!(e&&t))throw new Error("Missing required credentials (clientId, clientSecret)");let i=Oe.Buffer.from(`${e}:${t}`).toString("base64"),n=r.oauthUri||"/oauth/token",o=r.host.replace(/\/$/,"")+n,s=`grant_type=refresh_token&refresh_token=${encodeURIComponent(r.refreshToken)}`;return{basicAuth:i,url:o,body:s}}function Lt(r){if(!r)throw new Error("Missing required options");if(!r.host)throw new Error("Missing required option (host)");if(!r.projectKey)throw new Error("Missing required option (projectKey)");if(!r.credentials)throw new Error("Missing required option (credentials)");let{clientId:e,clientSecret:t,user:i}=r.credentials,n=r.projectKey;if(!(e&&t&&i))throw new Error("Missing required credentials (clientId, clientSecret, user)");let{username:o,password:s}=i;if(!(o&&s))throw new Error("Missing required user credentials (username, password)");let l=(r.scopes||[]).join(" "),c=l?`&scope=${l}`:"",h=Oe.Buffer.from(`${e}:${t}`).toString("base64"),u=r.oauthUri||`/oauth/${n}/customers/token`,d=r.host.replace(/\/$/,"")+u,f=`grant_type=password&username=${encodeURIComponent(o)}&password=${encodeURIComponent(s)}${c}`;return{basicAuth:h,url:d,body:f}}var jt=O(_e());async function N(r){let{request:e,httpClient:t,tokenCache:i,tokenCacheKey:n,userOption:o,next:s}=r,l=r.url,c=r.body,h=r.basicAuth,u=r.pendingTasks;if(!t||typeof t!="function")throw new Error("an `httpClient` is not available, please pass in a `fetch` or `axios` instance as an option or have them globally available.");let d=i.get(n);if(d&&d.token&&Date.now()<d.expirationTime)return{...G(d.token,e)};if(u.push({request:e,next:s}),d&&d.refreshToken&&(!d.token||d.token&&Date.now()>d.expirationTime)){if(!o)throw new Error("Missing required options.");let p={...qe({...o,refreshToken:d.refreshToken})};l=p.url,c=p.body,h=p.basicAuth}let f;try{if(f=await Q({url:l,method:"POST",headers:{Authorization:`Basic ${h}`,"Content-Type":"application/x-www-form-urlencoded","Conent-Length":jt.Buffer.byteLength(c).toString()},httpClient:t,body:c}),f.statusCode>=200&&f.statusCode<300){let{access_token:w,expires_in:E,refresh_token:B}=f?.data,g=Be(E);i.set({token:w,expirationTime:g,refreshToken:B});let M=u.slice();if(u=[],M.length===1)return G(w,M.pop().request);for(let C=0;C<M.length;C++){let m=M[C],k=G(w,m.request);m.next(k)}return}let p=new Error(f.data.message?f.data.message:JSON.stringify(f.data));e.reject({...e,headers:{...e.headers},response:{statusCode:f.statusCode||f.data.statusCode,error:{error:p,body:f}}})}catch(p){return{...e,headers:{...e.headers},response:{body:null,statusCode:p.statusCode||0,error:{...f,error:p,body:f}}}}}function ee(r){let e=[],t=R(!1),i=r.tokenCache||R({token:"",expirationTime:-1}),n=q(r);return o=>async s=>{if(s.headers&&(s.headers.Authorization||s.headers.authorization))return o(s);let l={request:s,requestState:t,tokenCache:i,pendingTasks:e,tokenCacheKey:n,httpClient:r.httpClient||Dt.default,...Nt(r),userOption:r,next:o},c=await N(l);if(c)return o(c)}}var _n=new Error("timeout while waiting for mutex to become available"),On=new Error("mutex already locked"),oi=new Error("request for lock canceled"),si=function(r,e,t,i){function n(o){return o instanceof t?o:new t(function(s){s(o)})}return new(t||(t=Promise))(function(o,s){function l(u){try{h(i.next(u))}catch(d){s(d)}}function c(u){try{h(i.throw(u))}catch(d){s(d)}}function h(u){u.done?o(u.value):n(u.value).then(l,c)}h((i=i.apply(r,e||[])).next())})},ut=class{constructor(e,t=oi){this._value=e,this._cancelError=t,this._queue=[],this._weightedWaiters=[]}acquire(e=1,t=0){if(e<=0)throw new Error(`invalid weight ${e}: must be positive`);return new Promise((i,n)=>{let o={resolve:i,reject:n,weight:e,priority:t},s=Ht(this._queue,l=>t<=l.priority);s===-1&&e<=this._value?this._dispatchItem(o):this._queue.splice(s+1,0,o)})}runExclusive(e){return si(this,arguments,void 0,function*(t,i=1,n=0){let[o,s]=yield this.acquire(i,n);try{return yield t(o)}finally{s()}})}waitForUnlock(e=1,t=0){if(e<=0)throw new Error(`invalid weight ${e}: must be positive`);return this._couldLockImmediately(e,t)?Promise.resolve():new Promise(i=>{this._weightedWaiters[e-1]||(this._weightedWaiters[e-1]=[]),ai(this._weightedWaiters[e-1],{resolve:i,priority:t})})}isLocked(){return this._value<=0}getValue(){return this._value}setValue(e){this._value=e,this._dispatchQueue()}release(e=1){if(e<=0)throw new Error(`invalid weight ${e}: must be positive`);this._value+=e,this._dispatchQueue()}cancel(){this._queue.forEach(e=>e.reject(this._cancelError)),this._queue=[]}_dispatchQueue(){for(this._drainUnlockWaiters();this._queue.length>0&&this._queue[0].weight<=this._value;)this._dispatchItem(this._queue.shift()),this._drainUnlockWaiters()}_dispatchItem(e){let t=this._value;this._value-=e.weight,e.resolve([t,this._newReleaser(e.weight)])}_newReleaser(e){let t=!1;return()=>{t||(t=!0,this.release(e))}}_drainUnlockWaiters(){if(this._queue.length===0)for(let e=this._value;e>0;e--){let t=this._weightedWaiters[e-1];t&&(t.forEach(i=>i.resolve()),this._weightedWaiters[e-1]=[])}else{let e=this._queue[0].priority;for(let t=this._value;t>0;t--){let i=this._weightedWaiters[t-1];if(!i)continue;let n=i.findIndex(o=>o.priority<=e);(n===-1?i:i.splice(0,n)).forEach(o=>o.resolve())}}}_couldLockImmediately(e,t){return(this._queue.length===0||this._queue[0].priority<t)&&e<=this._value}};function ai(r,e){let t=Ht(r,i=>e.priority<=i.priority);r.splice(t+1,0,e)}function Ht(r,e){for(let t=r.length-1;t>=0;t--)if(e(r[t]))return t;return-1}var ui=function(r,e,t,i){function n(o){return o instanceof t?o:new t(function(s){s(o)})}return new(t||(t=Promise))(function(o,s){function l(u){try{h(i.next(u))}catch(d){s(d)}}function c(u){try{h(i.throw(u))}catch(d){s(d)}}function h(u){u.done?o(u.value):n(u.value).then(l,c)}h((i=i.apply(r,e||[])).next())})},Pe=class{constructor(e){this._semaphore=new ut(1,e)}acquire(){return ui(this,arguments,void 0,function*(e=0){let[,t]=yield this._semaphore.acquire(1,e);return t})}runExclusive(e,t=0){return this._semaphore.runExclusive(()=>e(),1,t)}isLocked(){return this._semaphore.isLocked()}waitForUnlock(e=0){return this._semaphore.waitForUnlock(1,e)}release(){this._semaphore.isLocked()&&this._semaphore.release()}cancel(){return this._semaphore.cancel()}};var $t=O(le());function te(r){let e=new Pe,t=[],i=r.tokenCache||R({token:"",expirationTime:-1}),n=q(r);return o=>async s=>{if(s.headers&&(s.headers.Authorization||s.headers.authorization))return o(s);let l={request:s,requestState:e,tokenCache:i,pendingTasks:t,tokenCacheKey:n,httpClient:r.httpClient||$t.default,...at(r),next:o},c;try{await e.acquire(),c=await N(l)}finally{e.release()}if(c)return o(c)}}function re(r,e){return t=>async i=>{if(typeof r!="string")throw new Error("authorization must be a string");let n=e?.force===void 0?!0:e.force;if(!r||i.headers&&(i.headers.Authorization||i.headers.authorization)&&n===!1)return t(i);let o={...i,headers:{...i.headers,Authorization:r}};return t(o)}}var vt=O(le());function ie(r){let e=r.tokenCache||R({token:"",expirationTime:-1}),t=[],i=R(!1),n=q(r);return o=>async s=>{if(s.headers&&(s.headers.Authorization||s.headers.authorization))return o(s);let l={request:s,requestState:i,tokenCache:e,pendingTasks:t,tokenCacheKey:n,httpClient:r.httpClient||vt.default,...Lt(r),userOption:r,next:o},c=await N(l);if(c)return o(c)}}function ne(r){let e=r.tokenCache||R({token:"",tokenCacheKey:null}),t=[],i=R(!1);return n=>async o=>{if(o.headers&&(o.headers.Authorization||o.headers.authorization))return n(o);let s={request:o,requestState:i,tokenCache:e,pendingTasks:t,httpClient:r.httpClient||fetch,...qe(r),next:n},l=await N(s);if(l)return n(l)}}function he(r){return e=>async t=>{let i=await e(t);if(i.statusCode==409){let n=i.error.body?.errors?.[0]?.currentVersion;if(n)return r?t.body=await r(n,t,i):t.body=typeof t.body=="string"?{...JSON.parse(t.body),version:n}:{...t.body,version:n},e(t)}return i}}function fe(r){return e=>t=>{let i={...t,headers:{...t.headers,"X-Correlation-ID":r.generate&&typeof r.generate=="function"?r.generate():Te()}};return e(i)}}function lt(r){return e=>async t=>{let i=await e(t);if(i.error){let{error:n}=i;return{...i,statusCode:n.statusCode||0,headers:n.headers||b({}),error:{...n,body:n.data||n}}}return i}}var Vt=O(Wt()),zt=O(_e());async function ci({url:r,httpClient:e,clientOptions:t}){let i,{timeout:n,request:o,abortController:s,maskSensitiveHeaderData:l,includeRequestInErrorResponse:c,includeResponseHeaders:h}=t;try{n&&(i=setTimeout(()=>{s.abort()},n));let u=await Q({url:r,...t,httpClient:e,method:t.method,...t.body?{body:t.body}:{}});if(h||(u.headers=null),u.statusCode>=200&&u.statusCode<300)return t.method=="HEAD"?{body:null,statusCode:u.statusCode,retryCount:u.retryCount,headers:b(u.headers)}:{body:u.data,statusCode:u.statusCode,retryCount:u.retryCount,headers:b(u.headers)};let d=Me({message:u?.data?.message||u?.message,statusCode:u.statusCode||u?.data?.statusCode,headers:b(u.headers),method:t.method,body:u.data,retryCount:u.retryCount,...c?{originalRequest:l?H(o):o}:{uri:o.uri}});return{body:u.data,code:u.statusCode,statusCode:u.statusCode,headers:b(u.headers),error:d}}catch(u){let d=h?b(u.response?.headers):null,f=u.response?.status||u.response?.data0||0,p=u.response?.data?.message,w=Me({statusCode:f,code:f,status:f,message:p||u.message,headers:d,body:u.response?.data||u,error:u.response?.data,...c?{originalRequest:l?H(o):o}:{uri:o.uri}});return{body:w,error:w}}finally{clearTimeout(i)}}function pe(r){Ge(r);let{host:e,credentialsMode:t,httpClient:i,timeout:n,enableRetry:o,retryConfig:s,getAbortController:l,includeOriginalRequest:c,includeRequestInErrorResponse:h=!0,includeResponseHeaders:u=!0,maskSensitiveHeaderData:d,httpClientOptions:f}=r;return p=>async w=>{let E;(n||l)&&(E=(l?l():null)||new Vt.default);let B=e.replace(/\/$/,"")+w.uri,g={...w.headers};Object.prototype.hasOwnProperty.call(g,"Content-Type")||Object.prototype.hasOwnProperty.call(g,"content-type")||(g["Content-Type"]="application/json"),g["Content-Type"]===null&&delete g["Content-Type"];let M=I.HEADERS_CONTENT_TYPES.indexOf(g["Content-Type"])>-1&&typeof w.body=="string"||ce(w.body)?w.body:JSON.stringify(w.body||void 0);M&&(typeof M=="string"||ce(M))&&(g["Content-Length"]=zt.Buffer.byteLength(M).toString());let C={enableRetry:o,retryConfig:s,request:w,method:w.method,headers:g,includeRequestInErrorResponse:h,maskSensitiveHeaderData:d,includeResponseHeaders:u,...f};t&&(C.credentialsMode=t),E&&(C.signal=E.signal),n&&(C.timeout=n,C.abortController=E),M&&(C.body=M);let m=await ci({url:B,clientOptions:C,httpClient:i}),k={...w,includeOriginalRequest:c,maskSensitiveHeaderData:d,response:m};return p(k)}}function we(r){return e=>async t=>{let i=await e(t),n=Object.assign({},i),{loggerFn:o=console.log}=r||{};return o&&typeof o=="function"&&o(i),n}}function me({concurrency:r=20}){let e=0,t=[],i=o=>{if(e--,t.length&&e<=r){let s=t.shift();return e++,o(s.request)}},n=({request:o})=>t.push({request:o});return o=>s=>{let l={...s,resolve(c){s.resolve(c),i(o)},reject(c){s.reject(c),i(o)}};if(n({request:l}),e<r){e++;let c=t.shift();return o(c.request)}}}var Qt={name:"@commercetools/ts-client",version:"2.0.2",engines:{node:">=14"},description:"commercetools Composable Commerce TypeScript SDK client.",keywords:["commercetools","composable commerce","sdk","typescript","client","middleware","http","oauth","auth"],homepage:"https://github.com/commercetools/commercetools-sdk-typescript",license:"MIT",directories:{lib:"lib",test:"test"},publishConfig:{access:"public"},repository:{type:"git",url:"git+https://github.com/commercetools/commercetools-sdk-typescript.git"},bugs:{url:"https://github.com/commercetools/commercetools-sdk-typescript/issues"},dependencies:{"abort-controller":"3.0.0","async-mutex":"^0.5.0",buffer:"^6.0.3","node-fetch":"^2.6.1",uuid:"10.0.0"},files:["dist","CHANGELOG.md"],author:"Chukwuemeka Ajima <meeky.ae@gmail.com>",main:"dist/commercetools-ts-client.cjs.js",module:"dist/commercetools-ts-client.esm.js",browser:{"./dist/commercetools-ts-client.cjs.js":"./dist/commercetools-ts-client.browser.cjs.js","./dist/commercetools-ts-client.esm.js":"./dist/commercetools-ts-client.browser.esm.js"},devDependencies:{"common-tags":"1.8.2",dotenv:"16.4.5",jest:"29.7.0",nock:"12.0.3","organize-imports-cli":"0.10.0"},scripts:{organize_imports:"find src -type f -name '*.ts' | xargs organize-imports-cli",postbuild:"yarn organize_imports",post_process_generate:"yarn organize_imports",docs:"typedoc --out docs"}};function ye(r){return e=>async t=>{let i=be({...r,name:`${r.name?r.name+"/":""}commercetools-sdk-javascript-v3/${Qt.version}`}),n={...t,headers:{...t.headers,"User-Agent":i}};return e(n)}}function hi({middlewares:r}){return r.length===1?r[0]:r.slice().reduce((t,i)=>(...n)=>t(i.apply(null,n)))}var Gt;function Le(r,e,t){if(Fe("process",r,{allowedMethods:["GET"]}),typeof e!="function")throw new Error('The "process" function accepts a "Function" as a second argument that returns a Promise. See https://commercetools.github.io/nodejs/sdk/api/sdkClient.html#processrequest-processfn-options');let i={total:Number.POSITIVE_INFINITY,accumulate:!0,...t};return new Promise((n,o)=>{let s,l="";if(r&&r.uri){let[p,w]=r.uri.split("?");s=p,l=w}let h={limit:20,...{...Qe(l)}},u=i.total,d=!1,f=async(p,w=[])=>{let E=h.limit<u?h.limit:u,B=Ie({...h,limit:E}),g={sort:"id asc",withTotal:!1,...p?{where:`id > "${p}"`}:{}},M=Ie(g),C={...r,uri:`${s}?${M}&${B}`};try{let m=await K(Gt).execute(C),{results:k,count:L}=m?.body||{};if(!L&&d)return n(w||[]);let ge=await Promise.resolve(e(m)),V;if(d=!0,i.accumulate&&(V=w.concat(ge||[])),u-=L,L<h.limit||!u)return n(V||[]);let j=k[L-1],se=j&&j.id;f(se,V)}catch(m){o(m)}};f()})}function K(r){Gt=r,Ye(r);let e={async resolve(i){let{response:n,includeOriginalRequest:o,maskSensitiveHeaderData:s,...l}=i,{retryCount:c,...h}=n;return{body:null,error:null,reject:i.reject,resolve:i.resolve,...h,...o?{originalRequest:s?H(l):l}:{},...n?.retryCount?{retryCount:n.retryCount}:{}}}},t=hi(r)(e.resolve);return{process:Le,execute(i){return Fe("exec",i),new Promise((n,o)=>{t({reject:o,resolve:n,...i}).then(s=>{s.error?o(s.error):n(s)}).catch(o)})}}}var{createAuthMiddlewareForPasswordFlow:fi,createAuthMiddlewareForAnonymousSessionFlow:pi,createAuthMiddlewareForClientCredentialsFlow:wi,createAuthMiddlewareForRefreshTokenFlow:mi,createAuthMiddlewareForExistingTokenFlow:yi,createCorrelationIdMiddleware:gi,createHttpMiddleware:xi,createLoggerMiddleware:Mi,createQueueMiddleware:Ei,createUserAgentMiddleware:Yt,createConcurrentModificationMiddleware:Ci}=ct,oe=class{projectKey;authMiddleware;httpMiddleware;userAgentMiddleware;correlationIdMiddleware;loggerMiddleware;queueMiddleware;concurrentMiddleware;telemetryMiddleware;beforeMiddleware;afterMiddleware;middlewares=[];constructor(){this.userAgentMiddleware=Yt({})}withProjectKey(e){return this.projectKey=e,this}defaultClient(e,t,i,n,o,s){return this.withClientCredentialsFlow({host:i,projectKey:n||this.projectKey,credentials:t,scopes:o}).withHttpMiddleware({host:e,httpClient:s||W.default})}withAuthMiddleware(e){return this.authMiddleware=e,this}withMiddleware(e){return this.middlewares.push(e),this}withClientCredentialsFlow(e){return this.withAuthMiddleware(wi({host:e.host||I.CTP_AUTH_URL,projectKey:e.projectKey||this.projectKey,credentials:{clientId:e.credentials.clientId||null,clientSecret:e.credentials.clientSecret||null},oauthUri:e.oauthUri||null,scopes:e.scopes,httpClient:e.httpClient||W.default,...e}))}withPasswordFlow(e){return this.withAuthMiddleware(fi({host:e.host||I.CTP_AUTH_URL,projectKey:e.projectKey||this.projectKey,credentials:{clientId:e.credentials.clientId||null,clientSecret:e.credentials.clientSecret||null,user:{username:e.credentials.user.username||null,password:e.credentials.user.password||null}},httpClient:e.httpClient||W.default,...e}))}withAnonymousSessionFlow(e){return this.withAuthMiddleware(pi({host:e.host||I.CTP_AUTH_URL,projectKey:this.projectKey||e.projectKey,credentials:{clientId:e.credentials.clientId||null,clientSecret:e.credentials.clientSecret||null,anonymousId:e.credentials.anonymousId||null},httpClient:e.httpClient||W.default,...e}))}withRefreshTokenFlow(e){return this.withAuthMiddleware(mi({host:e.host||I.CTP_AUTH_URL,projectKey:this.projectKey||e.projectKey,credentials:{clientId:e.credentials.clientId||null,clientSecret:e.credentials.clientSecret||null},httpClient:e.httpClient||W.default,refreshToken:e.refreshToken||null,...e}))}withExistingTokenFlow(e,t){return this.withAuthMiddleware(yi(e,{force:t.force||!0,...t}))}withHttpMiddleware(e){return this.httpMiddleware=xi({host:e.host||I.CTP_API_URL,httpClient:e.httpClient||W.default,...e}),this}withUserAgentMiddleware(e){return this.userAgentMiddleware=Yt(e),this}withQueueMiddleware(e){return this.queueMiddleware=Ei({concurrency:e.concurrency||I.CONCURRENCT_REQUEST,...e}),this}withLoggerMiddleware(e){return this.loggerMiddleware=Mi(e),this}withCorrelationIdMiddleware(e){return this.correlationIdMiddleware=gi({generate:e?.generate,...e}),this}withConcurrentModificationMiddleware(e){return this.concurrentMiddleware=Ci(e?.concurrentModificationHandlerFn),this}withTelemetryMiddleware(e){let{createTelemetryMiddleware:t,...i}=e;return this.withUserAgentMiddleware({customAgent:i?.userAgent||"typescript-sdk-apm-middleware"}),this.telemetryMiddleware=t(i),this}withBeforeExecutionMiddleware(e){let{middleware:t,...i}=e||{};return this.beforeMiddleware=e.middleware(i),this}withAfterExecutionMiddleware(e){let{middleware:t,...i}=e||{};return this.afterMiddleware=e.middleware(i),this}build(){let e=this.middlewares.slice();return this.telemetryMiddleware&&e.push(this.telemetryMiddleware),this.correlationIdMiddleware&&e.push(this.correlationIdMiddleware),this.userAgentMiddleware&&e.push(this.userAgentMiddleware),this.authMiddleware&&e.push(this.authMiddleware),this.beforeMiddleware&&e.push(this.beforeMiddleware),this.queueMiddleware&&e.push(this.queueMiddleware),this.loggerMiddleware&&e.push(this.loggerMiddleware),this.concurrentMiddleware&&e.push(this.concurrentMiddleware),this.httpMiddleware&&e.push(this.httpMiddleware),this.afterMiddleware&&e.push(this.afterMiddleware),K({middlewares:e})}};return rr(Ai);})();
2
+ /*! Bundled license information:
3
+
4
+ ieee754/index.js:
5
+ (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> *)
6
+
7
+ buffer/index.js:
8
+ (*!
9
+ * The buffer module from node.js, for the browser.
10
+ *
11
+ * @author Feross Aboukhadijeh <https://feross.org>
12
+ * @license MIT
13
+ *)
14
+ */
@@ -1 +1 @@
1
- {"version":3,"file":"client-credentials-flow.d.ts","sourceRoot":"../../../../../src/middleware/auth-middleware","sources":["client-credentials-flow.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,UAAU,EASX,6BAAyB;AAK1B,MAAM,CAAC,OAAO,UAAU,4CAA4C,CAClE,OAAO,EAAE,qBAAqB,GAC7B,UAAU,CA0CZ"}
1
+ {"version":3,"file":"client-credentials-flow.d.ts","sourceRoot":"../../../../../src/middleware/auth-middleware","sources":["client-credentials-flow.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EACrB,UAAU,EAOX,6BAAyB;AAK1B,MAAM,CAAC,OAAO,UAAU,4CAA4C,CAClE,OAAO,EAAE,qBAAqB,GAC7B,UAAU,CAgDZ"}
@@ -142,10 +142,7 @@ export type RefreshAuthMiddlewareOptions = {
142
142
  httpClient?: Function
143
143
  }
144
144
 
145
- export type RequestStateStore = {
146
- get: () => RequestState
147
- set: (requestState: RequestState) => void
148
- }
145
+ export type RequestStateStore = any
149
146
 
150
147
  /* Request */
151
148
  type requestBaseOptions = {
@@ -222,7 +219,7 @@ export type HttpMiddlewareOptions = {
222
219
  retryConfig?: RetryOptions
223
220
  httpClient: Function
224
221
  getAbortController?: () => AbortController
225
- httpClientOptions?: object
222
+ httpClientOptions?: object // will be passed as a second argument to your httpClient function for configuration
226
223
  }
227
224
 
228
225
  export type RetryOptions = RetryMiddlewareOptions
@@ -242,6 +239,7 @@ export type RetryMiddlewareOptions = {
242
239
  maxRetries?: number
243
240
  retryDelay?: number
244
241
  maxDelay?: typeof Infinity
242
+ retryOnAbort?: boolean
245
243
  retryCodes?: Array<number | string>
246
244
  }
247
245
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@commercetools/ts-client",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "engines": {
5
5
  "node": ">=14"
6
6
  },
@@ -34,9 +34,10 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "abort-controller": "3.0.0",
37
+ "async-mutex": "^0.5.0",
37
38
  "buffer": "^6.0.3",
38
39
  "node-fetch": "^2.6.1",
39
- "uuid": "9.0.1"
40
+ "uuid": "10.0.0"
40
41
  },
41
42
  "files": ["dist", "CHANGELOG.md"],
42
43
  "author": "Chukwuemeka Ajima <meeky.ae@gmail.com>",