@commercetools/ts-client 3.0.4 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @commercetools/ts-client
2
2
 
3
+ ## 3.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#961](https://github.com/commercetools/commercetools-sdk-typescript/pull/961) [`28f0578`](https://github.com/commercetools/commercetools-sdk-typescript/commit/28f057841fcfd26b30ff41167dc88ada3c143371) Thanks [@ajimae](https://github.com/ajimae)! - Release changes for type modification
8
+
9
+ ## 3.1.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [#936](https://github.com/commercetools/commercetools-sdk-typescript/pull/936) [`f702837`](https://github.com/commercetools/commercetools-sdk-typescript/commit/f702837c3ec7fde11641c94abb5ed4dab138acf9) Thanks [@barbara79](https://github.com/barbara79)! - updated documentation with client v3
14
+
15
+ ### Patch Changes
16
+
17
+ - [#924](https://github.com/commercetools/commercetools-sdk-typescript/pull/924) [`e002f9d`](https://github.com/commercetools/commercetools-sdk-typescript/commit/e002f9d643d5fe59b00f7057a1e13dd6a039339a) Thanks [@ajimae](https://github.com/ajimae)! - map returned error code field to commercetools error response code
18
+
3
19
  ## 3.0.4
4
20
 
5
21
  ### Patch Changes
@@ -47,12 +47,12 @@ const CTP_AUTH_URL = 'https://auth.europe-west1.gcp.commercetools.com';
47
47
  const DEFAULT_HEADERS = ['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'];
48
48
 
49
49
  function DefineError(statusCode, message, meta = {}) {
50
- // eslint-disable-next-line no-multi-assign
51
- this.status = this.statusCode = this.code = statusCode;
50
+ this.code = meta['code'] ??= this.constructor.name;
51
+ this.statusCode = statusCode;
52
+ this.status = statusCode;
52
53
  this.message = message;
53
54
  Object.assign(this, meta);
54
55
  this.name = this.constructor.name;
55
- // eslint-disable-next-line no-proto
56
56
  this.constructor.prototype.__proto__ = Error.prototype;
57
57
  if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor);
58
58
  }
@@ -119,10 +119,7 @@ function createError({
119
119
  }
120
120
 
121
121
  function hasResponseRetryCode(retryCodes, response) {
122
- return (
123
- // retryCodes.includes(response?.error?.message) ||
124
- [503, ...retryCodes].includes(response?.status || response?.statusCode)
125
- );
122
+ return [503, ...retryCodes].includes(response?.status || response?.statusCode);
126
123
  }
127
124
  async function executeHttpClientRequest(fetcher, config) {
128
125
  async function sendRequest() {
@@ -348,7 +345,6 @@ var METHODS = ['ACL', 'BIND', 'CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'H
348
345
  function calculateRetryDelay({
349
346
  retryCount,
350
347
  retryDelay,
351
- // maxRetries,
352
348
  backoff,
353
349
  maxDelay
354
350
  }) {
@@ -429,8 +425,6 @@ function stringifyURLString(object, stringifier = urlStringifier) {
429
425
  return stringifier(object);
430
426
  }
431
427
 
432
- // import { validateUserAgentOptions } from '../utils'
433
-
434
428
  /*
435
429
  This is the easiest way, for this use case, to detect if we're running in
436
430
  Node.js or in a browser environment. In other cases, this won't be even a
@@ -444,15 +438,11 @@ function getSystemInfo() {
444
438
  if (isBrowser()) return window.navigator.userAgent;
445
439
  const nodeVersion = process?.version.slice(1) || 'unknow'; // unknow environment like React Native etc
446
440
  const platformInfo = `(${process.platform}; ${process.arch})`;
447
-
448
- // return `node.js/${nodeVersion}`
449
441
  return `node.js/${nodeVersion} ${platformInfo}`;
450
442
  }
451
443
  function createUserAgent(options) {
452
444
  let libraryInfo = null;
453
445
  let contactInfo = null;
454
-
455
- // validateUserAgentOptions(options)
456
446
  if (!options) {
457
447
  throw new Error('Missing required option `name`');
458
448
  }
@@ -1073,11 +1063,16 @@ async function executeRequest({
1073
1063
  };
1074
1064
  }
1075
1065
  const error = createError({
1066
+ code: response.data?.errors?.[0].code,
1076
1067
  message: response?.data?.message || response?.message,
1077
1068
  statusCode: response.statusCode || response?.data?.statusCode,
1078
- headers: getHeaders(response.headers),
1079
1069
  method: clientOptions.method,
1070
+ headers: getHeaders(response.headers),
1071
+ /**
1072
+ * @deprecated use `error` instead
1073
+ */
1080
1074
  body: response.data,
1075
+ error: response.data,
1081
1076
  retryCount: response.retryCount,
1082
1077
  ...(includeRequestInErrorResponse ? {
1083
1078
  originalRequest: maskSensitiveHeaderData ? maskAuthData(request) : request
@@ -1085,31 +1080,26 @@ async function executeRequest({
1085
1080
  uri: request.uri
1086
1081
  })
1087
1082
  });
1088
-
1089
- /**
1090
- * handle non-ok (error) response
1091
- * build error body
1092
- */
1093
1083
  return {
1094
- body: response.data,
1095
- code: response.statusCode,
1096
- statusCode: response.statusCode,
1097
- headers: getHeaders(response.headers),
1084
+ ...error,
1098
1085
  error
1099
1086
  };
1100
1087
  } catch (e) {
1101
1088
  // We know that this is a network error
1102
1089
  const headers = includeResponseHeaders ? getHeaders(e.response?.headers) : null;
1103
- const statusCode = e.response?.status || e.response?.data0 || 0;
1090
+ const statusCode = e.response?.status || e.response?.statusCode || e.response?.data.statusCode || 0;
1104
1091
  const message = e.response?.data?.message;
1105
1092
  const error = createError({
1106
1093
  statusCode,
1107
- code: statusCode,
1094
+ code: 'NetworkError',
1108
1095
  status: statusCode,
1109
1096
  message: message || e.message,
1110
1097
  headers,
1098
+ /**
1099
+ * @deprecated use `error` instead
1100
+ */
1111
1101
  body: e.response?.data || e,
1112
- error: e.response?.data,
1102
+ error: e.response?.data || e,
1113
1103
  ...(includeRequestInErrorResponse ? {
1114
1104
  originalRequest: maskSensitiveHeaderData ? maskAuthData(request) : request
1115
1105
  } : {
@@ -1271,7 +1261,7 @@ function createQueueMiddleware$1({
1271
1261
 
1272
1262
  var packageJson = {
1273
1263
  name: "@commercetools/ts-client",
1274
- version: "3.0.4",
1264
+ version: "3.1.1",
1275
1265
  engines: {
1276
1266
  node: ">=18"
1277
1267
  },
@@ -1321,7 +1311,7 @@ var packageJson = {
1321
1311
  "common-tags": "1.8.2",
1322
1312
  dotenv: "16.4.7",
1323
1313
  jest: "29.7.0",
1324
- nock: "^14.0.0-beta.19",
1314
+ nock: "14.0.1",
1325
1315
  "organize-imports-cli": "0.10.0"
1326
1316
  },
1327
1317
  scripts: {
@@ -43,12 +43,12 @@ const CTP_AUTH_URL = 'https://auth.europe-west1.gcp.commercetools.com';
43
43
  const DEFAULT_HEADERS = ['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'];
44
44
 
45
45
  function DefineError(statusCode, message, meta = {}) {
46
- // eslint-disable-next-line no-multi-assign
47
- this.status = this.statusCode = this.code = statusCode;
46
+ this.code = meta['code'] ??= this.constructor.name;
47
+ this.statusCode = statusCode;
48
+ this.status = statusCode;
48
49
  this.message = message;
49
50
  Object.assign(this, meta);
50
51
  this.name = this.constructor.name;
51
- // eslint-disable-next-line no-proto
52
52
  this.constructor.prototype.__proto__ = Error.prototype;
53
53
  if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor);
54
54
  }
@@ -115,10 +115,7 @@ function createError({
115
115
  }
116
116
 
117
117
  function hasResponseRetryCode(retryCodes, response) {
118
- return (
119
- // retryCodes.includes(response?.error?.message) ||
120
- [503, ...retryCodes].includes(response?.status || response?.statusCode)
121
- );
118
+ return [503, ...retryCodes].includes(response?.status || response?.statusCode);
122
119
  }
123
120
  async function executeHttpClientRequest(fetcher, config) {
124
121
  async function sendRequest() {
@@ -344,7 +341,6 @@ var METHODS = ['ACL', 'BIND', 'CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'H
344
341
  function calculateRetryDelay({
345
342
  retryCount,
346
343
  retryDelay,
347
- // maxRetries,
348
344
  backoff,
349
345
  maxDelay
350
346
  }) {
@@ -425,8 +421,6 @@ function stringifyURLString(object, stringifier = urlStringifier) {
425
421
  return stringifier(object);
426
422
  }
427
423
 
428
- // import { validateUserAgentOptions } from '../utils'
429
-
430
424
  /*
431
425
  This is the easiest way, for this use case, to detect if we're running in
432
426
  Node.js or in a browser environment. In other cases, this won't be even a
@@ -440,15 +434,11 @@ function getSystemInfo() {
440
434
  if (isBrowser()) return window.navigator.userAgent;
441
435
  const nodeVersion = process?.version.slice(1) || 'unknow'; // unknow environment like React Native etc
442
436
  const platformInfo = `(${process.platform}; ${process.arch})`;
443
-
444
- // return `node.js/${nodeVersion}`
445
437
  return `node.js/${nodeVersion} ${platformInfo}`;
446
438
  }
447
439
  function createUserAgent(options) {
448
440
  let libraryInfo = null;
449
441
  let contactInfo = null;
450
-
451
- // validateUserAgentOptions(options)
452
442
  if (!options) {
453
443
  throw new Error('Missing required option `name`');
454
444
  }
@@ -1069,11 +1059,16 @@ async function executeRequest({
1069
1059
  };
1070
1060
  }
1071
1061
  const error = createError({
1062
+ code: response.data?.errors?.[0].code,
1072
1063
  message: response?.data?.message || response?.message,
1073
1064
  statusCode: response.statusCode || response?.data?.statusCode,
1074
- headers: getHeaders(response.headers),
1075
1065
  method: clientOptions.method,
1066
+ headers: getHeaders(response.headers),
1067
+ /**
1068
+ * @deprecated use `error` instead
1069
+ */
1076
1070
  body: response.data,
1071
+ error: response.data,
1077
1072
  retryCount: response.retryCount,
1078
1073
  ...(includeRequestInErrorResponse ? {
1079
1074
  originalRequest: maskSensitiveHeaderData ? maskAuthData(request) : request
@@ -1081,31 +1076,26 @@ async function executeRequest({
1081
1076
  uri: request.uri
1082
1077
  })
1083
1078
  });
1084
-
1085
- /**
1086
- * handle non-ok (error) response
1087
- * build error body
1088
- */
1089
1079
  return {
1090
- body: response.data,
1091
- code: response.statusCode,
1092
- statusCode: response.statusCode,
1093
- headers: getHeaders(response.headers),
1080
+ ...error,
1094
1081
  error
1095
1082
  };
1096
1083
  } catch (e) {
1097
1084
  // We know that this is a network error
1098
1085
  const headers = includeResponseHeaders ? getHeaders(e.response?.headers) : null;
1099
- const statusCode = e.response?.status || e.response?.data0 || 0;
1086
+ const statusCode = e.response?.status || e.response?.statusCode || e.response?.data.statusCode || 0;
1100
1087
  const message = e.response?.data?.message;
1101
1088
  const error = createError({
1102
1089
  statusCode,
1103
- code: statusCode,
1090
+ code: 'NetworkError',
1104
1091
  status: statusCode,
1105
1092
  message: message || e.message,
1106
1093
  headers,
1094
+ /**
1095
+ * @deprecated use `error` instead
1096
+ */
1107
1097
  body: e.response?.data || e,
1108
- error: e.response?.data,
1098
+ error: e.response?.data || e,
1109
1099
  ...(includeRequestInErrorResponse ? {
1110
1100
  originalRequest: maskSensitiveHeaderData ? maskAuthData(request) : request
1111
1101
  } : {
@@ -1267,7 +1257,7 @@ function createQueueMiddleware$1({
1267
1257
 
1268
1258
  var packageJson = {
1269
1259
  name: "@commercetools/ts-client",
1270
- version: "3.0.4",
1260
+ version: "3.1.1",
1271
1261
  engines: {
1272
1262
  node: ">=18"
1273
1263
  },
@@ -1317,7 +1307,7 @@ var packageJson = {
1317
1307
  "common-tags": "1.8.2",
1318
1308
  dotenv: "16.4.7",
1319
1309
  jest: "29.7.0",
1320
- nock: "^14.0.0-beta.19",
1310
+ nock: "14.0.1",
1321
1311
  "organize-imports-cli": "0.10.0"
1322
1312
  },
1323
1313
  scripts: {
@@ -47,12 +47,12 @@ const CTP_AUTH_URL = 'https://auth.europe-west1.gcp.commercetools.com';
47
47
  const DEFAULT_HEADERS = ['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'];
48
48
 
49
49
  function DefineError(statusCode, message, meta = {}) {
50
- // eslint-disable-next-line no-multi-assign
51
- this.status = this.statusCode = this.code = statusCode;
50
+ this.code = meta['code'] ??= this.constructor.name;
51
+ this.statusCode = statusCode;
52
+ this.status = statusCode;
52
53
  this.message = message;
53
54
  Object.assign(this, meta);
54
55
  this.name = this.constructor.name;
55
- // eslint-disable-next-line no-proto
56
56
  this.constructor.prototype.__proto__ = Error.prototype;
57
57
  if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor);
58
58
  }
@@ -119,10 +119,7 @@ function createError({
119
119
  }
120
120
 
121
121
  function hasResponseRetryCode(retryCodes, response) {
122
- return (
123
- // retryCodes.includes(response?.error?.message) ||
124
- [503, ...retryCodes].includes(response?.status || response?.statusCode)
125
- );
122
+ return [503, ...retryCodes].includes(response?.status || response?.statusCode);
126
123
  }
127
124
  async function executeHttpClientRequest(fetcher, config) {
128
125
  async function sendRequest() {
@@ -348,7 +345,6 @@ var METHODS = ['ACL', 'BIND', 'CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'H
348
345
  function calculateRetryDelay({
349
346
  retryCount,
350
347
  retryDelay,
351
- // maxRetries,
352
348
  backoff,
353
349
  maxDelay
354
350
  }) {
@@ -429,8 +425,6 @@ function stringifyURLString(object, stringifier = urlStringifier) {
429
425
  return stringifier(object);
430
426
  }
431
427
 
432
- // import { validateUserAgentOptions } from '../utils'
433
-
434
428
  /*
435
429
  This is the easiest way, for this use case, to detect if we're running in
436
430
  Node.js or in a browser environment. In other cases, this won't be even a
@@ -444,15 +438,11 @@ function getSystemInfo() {
444
438
  if (isBrowser()) return window.navigator.userAgent;
445
439
  const nodeVersion = process?.version.slice(1) || 'unknow'; // unknow environment like React Native etc
446
440
  const platformInfo = `(${process.platform}; ${process.arch})`;
447
-
448
- // return `node.js/${nodeVersion}`
449
441
  return `node.js/${nodeVersion} ${platformInfo}`;
450
442
  }
451
443
  function createUserAgent(options) {
452
444
  let libraryInfo = null;
453
445
  let contactInfo = null;
454
-
455
- // validateUserAgentOptions(options)
456
446
  if (!options) {
457
447
  throw new Error('Missing required option `name`');
458
448
  }
@@ -1073,11 +1063,16 @@ async function executeRequest({
1073
1063
  };
1074
1064
  }
1075
1065
  const error = createError({
1066
+ code: response.data?.errors?.[0].code,
1076
1067
  message: response?.data?.message || response?.message,
1077
1068
  statusCode: response.statusCode || response?.data?.statusCode,
1078
- headers: getHeaders(response.headers),
1079
1069
  method: clientOptions.method,
1070
+ headers: getHeaders(response.headers),
1071
+ /**
1072
+ * @deprecated use `error` instead
1073
+ */
1080
1074
  body: response.data,
1075
+ error: response.data,
1081
1076
  retryCount: response.retryCount,
1082
1077
  ...(includeRequestInErrorResponse ? {
1083
1078
  originalRequest: maskSensitiveHeaderData ? maskAuthData(request) : request
@@ -1085,31 +1080,26 @@ async function executeRequest({
1085
1080
  uri: request.uri
1086
1081
  })
1087
1082
  });
1088
-
1089
- /**
1090
- * handle non-ok (error) response
1091
- * build error body
1092
- */
1093
1083
  return {
1094
- body: response.data,
1095
- code: response.statusCode,
1096
- statusCode: response.statusCode,
1097
- headers: getHeaders(response.headers),
1084
+ ...error,
1098
1085
  error
1099
1086
  };
1100
1087
  } catch (e) {
1101
1088
  // We know that this is a network error
1102
1089
  const headers = includeResponseHeaders ? getHeaders(e.response?.headers) : null;
1103
- const statusCode = e.response?.status || e.response?.data0 || 0;
1090
+ const statusCode = e.response?.status || e.response?.statusCode || e.response?.data.statusCode || 0;
1104
1091
  const message = e.response?.data?.message;
1105
1092
  const error = createError({
1106
1093
  statusCode,
1107
- code: statusCode,
1094
+ code: 'NetworkError',
1108
1095
  status: statusCode,
1109
1096
  message: message || e.message,
1110
1097
  headers,
1098
+ /**
1099
+ * @deprecated use `error` instead
1100
+ */
1111
1101
  body: e.response?.data || e,
1112
- error: e.response?.data,
1102
+ error: e.response?.data || e,
1113
1103
  ...(includeRequestInErrorResponse ? {
1114
1104
  originalRequest: maskSensitiveHeaderData ? maskAuthData(request) : request
1115
1105
  } : {
@@ -1271,7 +1261,7 @@ function createQueueMiddleware$1({
1271
1261
 
1272
1262
  var packageJson = {
1273
1263
  name: "@commercetools/ts-client",
1274
- version: "3.0.4",
1264
+ version: "3.1.1",
1275
1265
  engines: {
1276
1266
  node: ">=18"
1277
1267
  },
@@ -1321,7 +1311,7 @@ var packageJson = {
1321
1311
  "common-tags": "1.8.2",
1322
1312
  dotenv: "16.4.7",
1323
1313
  jest: "29.7.0",
1324
- nock: "^14.0.0-beta.19",
1314
+ nock: "14.0.1",
1325
1315
  "organize-imports-cli": "0.10.0"
1326
1316
  },
1327
1317
  scripts: {
@@ -47,12 +47,12 @@ const CTP_AUTH_URL = 'https://auth.europe-west1.gcp.commercetools.com';
47
47
  const DEFAULT_HEADERS = ['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'];
48
48
 
49
49
  function DefineError(statusCode, message, meta = {}) {
50
- // eslint-disable-next-line no-multi-assign
51
- this.status = this.statusCode = this.code = statusCode;
50
+ this.code = meta['code'] ??= this.constructor.name;
51
+ this.statusCode = statusCode;
52
+ this.status = statusCode;
52
53
  this.message = message;
53
54
  Object.assign(this, meta);
54
55
  this.name = this.constructor.name;
55
- // eslint-disable-next-line no-proto
56
56
  this.constructor.prototype.__proto__ = Error.prototype;
57
57
  if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor);
58
58
  }
@@ -119,10 +119,7 @@ function createError({
119
119
  }
120
120
 
121
121
  function hasResponseRetryCode(retryCodes, response) {
122
- return (
123
- // retryCodes.includes(response?.error?.message) ||
124
- [503, ...retryCodes].includes(response?.status || response?.statusCode)
125
- );
122
+ return [503, ...retryCodes].includes(response?.status || response?.statusCode);
126
123
  }
127
124
  async function executeHttpClientRequest(fetcher, config) {
128
125
  async function sendRequest() {
@@ -348,7 +345,6 @@ var METHODS = ['ACL', 'BIND', 'CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'H
348
345
  function calculateRetryDelay({
349
346
  retryCount,
350
347
  retryDelay,
351
- // maxRetries,
352
348
  backoff,
353
349
  maxDelay
354
350
  }) {
@@ -429,8 +425,6 @@ function stringifyURLString(object, stringifier = urlStringifier) {
429
425
  return stringifier(object);
430
426
  }
431
427
 
432
- // import { validateUserAgentOptions } from '../utils'
433
-
434
428
  /*
435
429
  This is the easiest way, for this use case, to detect if we're running in
436
430
  Node.js or in a browser environment. In other cases, this won't be even a
@@ -444,15 +438,11 @@ function getSystemInfo() {
444
438
  if (isBrowser()) return window.navigator.userAgent;
445
439
  const nodeVersion = process?.version.slice(1) || 'unknow'; // unknow environment like React Native etc
446
440
  const platformInfo = `(${process.platform}; ${process.arch})`;
447
-
448
- // return `node.js/${nodeVersion}`
449
441
  return `node.js/${nodeVersion} ${platformInfo}`;
450
442
  }
451
443
  function createUserAgent(options) {
452
444
  let libraryInfo = null;
453
445
  let contactInfo = null;
454
-
455
- // validateUserAgentOptions(options)
456
446
  if (!options) {
457
447
  throw new Error('Missing required option `name`');
458
448
  }
@@ -1073,11 +1063,16 @@ async function executeRequest({
1073
1063
  };
1074
1064
  }
1075
1065
  const error = createError({
1066
+ code: response.data?.errors?.[0].code,
1076
1067
  message: response?.data?.message || response?.message,
1077
1068
  statusCode: response.statusCode || response?.data?.statusCode,
1078
- headers: getHeaders(response.headers),
1079
1069
  method: clientOptions.method,
1070
+ headers: getHeaders(response.headers),
1071
+ /**
1072
+ * @deprecated use `error` instead
1073
+ */
1080
1074
  body: response.data,
1075
+ error: response.data,
1081
1076
  retryCount: response.retryCount,
1082
1077
  ...(includeRequestInErrorResponse ? {
1083
1078
  originalRequest: maskSensitiveHeaderData ? maskAuthData(request) : request
@@ -1085,31 +1080,26 @@ async function executeRequest({
1085
1080
  uri: request.uri
1086
1081
  })
1087
1082
  });
1088
-
1089
- /**
1090
- * handle non-ok (error) response
1091
- * build error body
1092
- */
1093
1083
  return {
1094
- body: response.data,
1095
- code: response.statusCode,
1096
- statusCode: response.statusCode,
1097
- headers: getHeaders(response.headers),
1084
+ ...error,
1098
1085
  error
1099
1086
  };
1100
1087
  } catch (e) {
1101
1088
  // We know that this is a network error
1102
1089
  const headers = includeResponseHeaders ? getHeaders(e.response?.headers) : null;
1103
- const statusCode = e.response?.status || e.response?.data0 || 0;
1090
+ const statusCode = e.response?.status || e.response?.statusCode || e.response?.data.statusCode || 0;
1104
1091
  const message = e.response?.data?.message;
1105
1092
  const error = createError({
1106
1093
  statusCode,
1107
- code: statusCode,
1094
+ code: 'NetworkError',
1108
1095
  status: statusCode,
1109
1096
  message: message || e.message,
1110
1097
  headers,
1098
+ /**
1099
+ * @deprecated use `error` instead
1100
+ */
1111
1101
  body: e.response?.data || e,
1112
- error: e.response?.data,
1102
+ error: e.response?.data || e,
1113
1103
  ...(includeRequestInErrorResponse ? {
1114
1104
  originalRequest: maskSensitiveHeaderData ? maskAuthData(request) : request
1115
1105
  } : {
@@ -1271,7 +1261,7 @@ function createQueueMiddleware$1({
1271
1261
 
1272
1262
  var packageJson = {
1273
1263
  name: "@commercetools/ts-client",
1274
- version: "3.0.4",
1264
+ version: "3.1.1",
1275
1265
  engines: {
1276
1266
  node: ">=18"
1277
1267
  },
@@ -1321,7 +1311,7 @@ var packageJson = {
1321
1311
  "common-tags": "1.8.2",
1322
1312
  dotenv: "16.4.7",
1323
1313
  jest: "29.7.0",
1324
- nock: "^14.0.0-beta.19",
1314
+ nock: "14.0.1",
1325
1315
  "organize-imports-cli": "0.10.0"
1326
1316
  },
1327
1317
  scripts: {
@@ -43,12 +43,12 @@ const CTP_AUTH_URL = 'https://auth.europe-west1.gcp.commercetools.com';
43
43
  const DEFAULT_HEADERS = ['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'];
44
44
 
45
45
  function DefineError(statusCode, message, meta = {}) {
46
- // eslint-disable-next-line no-multi-assign
47
- this.status = this.statusCode = this.code = statusCode;
46
+ this.code = meta['code'] ??= this.constructor.name;
47
+ this.statusCode = statusCode;
48
+ this.status = statusCode;
48
49
  this.message = message;
49
50
  Object.assign(this, meta);
50
51
  this.name = this.constructor.name;
51
- // eslint-disable-next-line no-proto
52
52
  this.constructor.prototype.__proto__ = Error.prototype;
53
53
  if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor);
54
54
  }
@@ -115,10 +115,7 @@ function createError({
115
115
  }
116
116
 
117
117
  function hasResponseRetryCode(retryCodes, response) {
118
- return (
119
- // retryCodes.includes(response?.error?.message) ||
120
- [503, ...retryCodes].includes(response?.status || response?.statusCode)
121
- );
118
+ return [503, ...retryCodes].includes(response?.status || response?.statusCode);
122
119
  }
123
120
  async function executeHttpClientRequest(fetcher, config) {
124
121
  async function sendRequest() {
@@ -344,7 +341,6 @@ var METHODS = ['ACL', 'BIND', 'CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'H
344
341
  function calculateRetryDelay({
345
342
  retryCount,
346
343
  retryDelay,
347
- // maxRetries,
348
344
  backoff,
349
345
  maxDelay
350
346
  }) {
@@ -425,8 +421,6 @@ function stringifyURLString(object, stringifier = urlStringifier) {
425
421
  return stringifier(object);
426
422
  }
427
423
 
428
- // import { validateUserAgentOptions } from '../utils'
429
-
430
424
  /*
431
425
  This is the easiest way, for this use case, to detect if we're running in
432
426
  Node.js or in a browser environment. In other cases, this won't be even a
@@ -440,15 +434,11 @@ function getSystemInfo() {
440
434
  if (isBrowser()) return window.navigator.userAgent;
441
435
  const nodeVersion = process?.version.slice(1) || 'unknow'; // unknow environment like React Native etc
442
436
  const platformInfo = `(${process.platform}; ${process.arch})`;
443
-
444
- // return `node.js/${nodeVersion}`
445
437
  return `node.js/${nodeVersion} ${platformInfo}`;
446
438
  }
447
439
  function createUserAgent(options) {
448
440
  let libraryInfo = null;
449
441
  let contactInfo = null;
450
-
451
- // validateUserAgentOptions(options)
452
442
  if (!options) {
453
443
  throw new Error('Missing required option `name`');
454
444
  }
@@ -1069,11 +1059,16 @@ async function executeRequest({
1069
1059
  };
1070
1060
  }
1071
1061
  const error = createError({
1062
+ code: response.data?.errors?.[0].code,
1072
1063
  message: response?.data?.message || response?.message,
1073
1064
  statusCode: response.statusCode || response?.data?.statusCode,
1074
- headers: getHeaders(response.headers),
1075
1065
  method: clientOptions.method,
1066
+ headers: getHeaders(response.headers),
1067
+ /**
1068
+ * @deprecated use `error` instead
1069
+ */
1076
1070
  body: response.data,
1071
+ error: response.data,
1077
1072
  retryCount: response.retryCount,
1078
1073
  ...(includeRequestInErrorResponse ? {
1079
1074
  originalRequest: maskSensitiveHeaderData ? maskAuthData(request) : request
@@ -1081,31 +1076,26 @@ async function executeRequest({
1081
1076
  uri: request.uri
1082
1077
  })
1083
1078
  });
1084
-
1085
- /**
1086
- * handle non-ok (error) response
1087
- * build error body
1088
- */
1089
1079
  return {
1090
- body: response.data,
1091
- code: response.statusCode,
1092
- statusCode: response.statusCode,
1093
- headers: getHeaders(response.headers),
1080
+ ...error,
1094
1081
  error
1095
1082
  };
1096
1083
  } catch (e) {
1097
1084
  // We know that this is a network error
1098
1085
  const headers = includeResponseHeaders ? getHeaders(e.response?.headers) : null;
1099
- const statusCode = e.response?.status || e.response?.data0 || 0;
1086
+ const statusCode = e.response?.status || e.response?.statusCode || e.response?.data.statusCode || 0;
1100
1087
  const message = e.response?.data?.message;
1101
1088
  const error = createError({
1102
1089
  statusCode,
1103
- code: statusCode,
1090
+ code: 'NetworkError',
1104
1091
  status: statusCode,
1105
1092
  message: message || e.message,
1106
1093
  headers,
1094
+ /**
1095
+ * @deprecated use `error` instead
1096
+ */
1107
1097
  body: e.response?.data || e,
1108
- error: e.response?.data,
1098
+ error: e.response?.data || e,
1109
1099
  ...(includeRequestInErrorResponse ? {
1110
1100
  originalRequest: maskSensitiveHeaderData ? maskAuthData(request) : request
1111
1101
  } : {
@@ -1267,7 +1257,7 @@ function createQueueMiddleware$1({
1267
1257
 
1268
1258
  var packageJson = {
1269
1259
  name: "@commercetools/ts-client",
1270
- version: "3.0.4",
1260
+ version: "3.1.1",
1271
1261
  engines: {
1272
1262
  node: ">=18"
1273
1263
  },
@@ -1317,7 +1307,7 @@ var packageJson = {
1317
1307
  "common-tags": "1.8.2",
1318
1308
  dotenv: "16.4.7",
1319
1309
  jest: "29.7.0",
1320
- nock: "^14.0.0-beta.19",
1310
+ nock: "14.0.1",
1321
1311
  "organize-imports-cli": "0.10.0"
1322
1312
  },
1323
1313
  scripts: {
@@ -1 +1 @@
1
- var window;(window||={})["@commercetools/ts-client"]=(()=>{var ue=Object.defineProperty;var Fe=Object.getOwnPropertyDescriptor;var Ie=Object.getOwnPropertyNames;var je=Object.prototype.hasOwnProperty;var ce=(e,t)=>{for(var r in t)ue(e,r,{get:t[r],enumerable:!0})},Ue=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ie(t))!je.call(e,i)&&i!==r&&ue(e,i,{get:()=>t[i],enumerable:!(o=Fe(t,i))||o.enumerable});return e};var Ne=e=>Ue(ue({},"__esModule",{value:!0}),e);var ft={};ce(ft,{ClientBuilder:()=>B,Process:()=>de,createAuthMiddlewareForAnonymousSessionFlow:()=>H,createAuthMiddlewareForClientCredentialsFlow:()=>v,createAuthMiddlewareForExistingTokenFlow:()=>_,createAuthMiddlewareForPasswordFlow:()=>K,createAuthMiddlewareForRefreshTokenFlow:()=>L,createClient:()=>S,createConcurrentModificationMiddleware:()=>Q,createCorrelationIdMiddleware:()=>J,createHttpMiddleware:()=>V,createLoggerMiddleware:()=>G,createQueueMiddleware:()=>Y,createUserAgentMiddleware:()=>W});var Re={};ce(Re,{createAuthMiddlewareForAnonymousSessionFlow:()=>H,createAuthMiddlewareForClientCredentialsFlow:()=>v,createAuthMiddlewareForExistingTokenFlow:()=>_,createAuthMiddlewareForPasswordFlow:()=>K,createAuthMiddlewareForRefreshTokenFlow:()=>L,createConcurrentModificationMiddleware:()=>Q,createCorrelationIdMiddleware:()=>J,createErrorMiddleware:()=>Ce,createHttpMiddleware:()=>V,createLoggerMiddleware:()=>G,createQueueMiddleware:()=>Y,createUserAgentMiddleware:()=>W});function U(e){return e&&typeof e=="string"?new TextEncoder().encode(e).length.toString():e&&e instanceof Uint8Array?e.byteLength.toString():e&&typeof e=="object"?new TextEncoder().encode(JSON.stringify(e)).length.toString():"0"}var C={};ce(C,{CONCURRENCT_REQUEST:()=>He,CTP_API_URL:()=>ve,CTP_AUTH_URL:()=>_e,DEFAULT_HEADERS:()=>he,HEADERS_CONTENT_TYPES:()=>qe});var qe=["application/json","application/graphql"],He=20,ve="https://api.europe-west1.gcp.commercetools.com",_e="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 x(e,t,r={}){this.status=this.statusCode=this.code=e,this.message=t,Object.assign(this,r),this.name=this.constructor.name,this.constructor.prototype.__proto__=Error.prototype,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}function be(...e){x.call(this,0,...e)}function Ae(...e){x.call(this,...e)}function Ke(...e){x.call(this,400,...e)}function Le(...e){x.call(this,401,...e)}function Be(...e){x.call(this,403,...e)}function De(...e){x.call(this,404,...e)}function $e(...e){x.call(this,409,...e)}function ze(...e){x.call(this,500,...e)}function Qe(...e){x.call(this,503,...e)}function pe(e){switch(e){case 0:return be;case 400:return Ke;case 401:return Le;case 403:return Be;case 404:return De;case 409:return $e;case 500:return ze;case 503:return Qe;default:return}}function Je({statusCode:e,message:t,...r}){let o=t||"Unexpected non-JSON error response";e===404&&(o=`URI not found: ${r.originalRequest?.uri||r.uri}`);let i=pe(e);return i?new i(o,r):new Ae(e,o,r)}var N=Je;function Ve(e,t){return[503,...e].includes(t?.status||t?.statusCode)}async function Ge(e,t){async function r(){return await e({...t,headers:{...t.headers}})}return r().catch(o=>Promise.reject(o))}async function q(e){let{url:t,httpClient:r,...o}=e;return await Ge(async n=>{let{enableRetry:a,retryConfig:s,timeout:u,getAbortController:l}=o,{retryCodes:d=[],maxDelay:p=1/0,maxRetries:g=3,backoff:R=!0,retryDelay:c=200,retryOnAbort:F=!0}=s||{},w,f,m=0,I;we(d);async function O(){return r(t,{...n,...o,headers:{...o.headers},...o.body?{data:o.body}:{},withCredentials:n.credentialsMode==="include"})}function X(){let M=(l?l():null)||new AbortController;return o.abortController=M,o.signal=M.signal,M}async function j(){let M=async(ee,Se)=>{let $={};if(u){let E=X();I=setTimeout(()=>{E.abort(),E=X()},u)}try{if($=await O(),$.status>399&&Ve(ee,$))return{_response:$,shouldRetry:!0}}catch(E){if((E.name.includes("AbortError")||E.name.includes("TimeoutError"))&&Se)return{_response:E,shouldRetry:!0};throw E}finally{clearTimeout(I)}return{_response:$,shouldRetry:!1}},{_response:D,shouldRetry:Z}=await M(d,F);for(;a&&Z&&m<g;){m++,await re(te({retryCount:m,retryDelay:c,maxRetries:g,backoff:R,maxDelay:p}));let ee=await M(d,F);D=ee._response,Z=ee.shouldRetry}return D}let y=await j();try{y.text&&typeof y.text=="function"?(w=await y.text()||JSON.stringify(y[Object.getOwnPropertySymbols(y)[1]]),f=JSON.parse(w)):f=y.data||y}catch(M){throw M}return{data:f,retryCount:m,statusCode:y.status||y.statusCode||f.statusCode,headers:y.headers}},{validateStatus:n=>!0})}function oe(){return("1000000-1000-4000-8000"+-1e11).replace(/[018]/g,e=>(parseInt(e)^Math.floor(Math.random()*256)&15>>parseInt(e)/4).toString(16))}function Ye(e){return he.reduce((t,r)=>{let o=e[r]?e[r]:typeof e.get=="function"?e.get(r):null;return o&&(t[r]=o),t},{})}function b(e){if(!e)return null;if(e.raw&&typeof e.raw=="function")return e.raw();if(!e.forEach)return Ye(e);let t={};return e.forEach((r,o)=>t[o]=r),t}function z(e){return e!=null&&e.constructor!=null&&typeof e.constructor.isBuffer=="function"&&e.constructor.isBuffer(e)}function P(e){let t=JSON.parse(JSON.stringify(e));return t?.headers&&(t.headers.Authorization&&(t.headers.Authorization="Bearer ********"),t.headers.authorization&&(t.headers.authorization="Bearer ********")),t}function h(e,t){return{...t,headers:{...t.headers,Authorization:`Bearer ${e}`}}}var fe=["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 te({retryCount:e,retryDelay:t,backoff:r,maxDelay:o}){return r&&e!==0?Math.min(Math.round((Math.random()+1)*t*2**e),o):t}Math.min(Math.round((Math.random()+1)*200*2**10),1/0);function re(e){return new Promise(t=>{setTimeout(t,e)})}function A(e){if(!e?.credentials?.clientId||!e.projectKey||!e.host)throw new Error("Missing required options.");return{clientId:e.credentials.clientId,host:e.host,projectKey:e.projectKey}}function ie(e){return Date.now()+e*1e3-5*60*1e3}function T(e){let t=e;return{get:r=>t,set:(r,o)=>{t=r}}}function Te(e){return typeof e<"u"&&e!==null}function We(e){return Te(e)?typeof e=="string"?e:Object.fromEntries(Object.entries(e).filter(([t,r])=>![null,void 0,""].includes(r))):""}function Xe(e){let t={},r=new URLSearchParams(e);for(let o of r.keys())r.getAll(o).length>1?t[o]=r.getAll(o):t[o]=r.get(o);return t}function Ze(e){if(e=We(e),!e)return"";let t=new URLSearchParams(e);for(let[r,o]of Object.entries(e))Array.isArray(o)&&(t.delete(r),o.filter(Te).forEach(i=>t.append(r,i)));return t.toString()}function me(e,t=Xe){return t(e)}function ne(e,t=Ze){return t(e)}var et=()=>typeof window<"u"&&window.document&&window.document.nodeType===9;function tt(){if(et())return window.navigator.userAgent;let e=process?.version.slice(1)||"unknow",t=`(${process.platform}; ${process.arch})`;return`node.js/${e} ${t}`}function ae(e){let t=null,r=null;if(!e)throw new Error("Missing required option `name`");let o=e.version?`${e.name}/${e.version}`:e.name;e.libraryName&&!e.libraryVersion?t=e.libraryName:e.libraryName&&e.libraryVersion&&(t=`${e.libraryName}/${e.libraryVersion}`),e.contactUrl&&!e.contactEmail?r=`(+${e.contactUrl})`:!e.contactUrl&&e.contactEmail?r=`(+${e.contactEmail})`:e.contactUrl&&e.contactEmail&&(r=`(+${e.contactUrl}; +${e.contactEmail})`);let i=tt(),n=e.customAgent||"";return[o,i,t,r,n].filter(Boolean).join(" ")}function ye(e){if(!e.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(!e.httpClient&&typeof e.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.");if(e.httpClientOptions&&Object.prototype.toString.call(e.httpClientOptions)!=="[object Object]")throw new Error("`httpClientOptions` must be an object type")}function we(e){if(!Array.isArray(e))throw new Error("`retryCodes` option must be an array of retry status (error) codes and/or messages.")}function Me(e){if(!e)throw new Error("Missing required options");if(e.middlewares&&!Array.isArray(e.middlewares))throw new Error("Middlewares should be an array");if(!e.middlewares||!Array.isArray(e.middlewares)||!e.middlewares.length)throw new Error("You need to provide at least one middleware")}function se(e,t,r={allowedMethods:fe}){if(!t)throw new Error(`The "${e}" function requires a "Request" object as an argument. See https://commercetools.github.io/nodejs/sdk/Glossary.html#clientrequest`);if(typeof t.uri!="string")throw new Error(`The "${e}" Request object requires a valid uri. See https://commercetools.github.io/nodejs/sdk/Glossary.html#clientrequest`);if(!r.allowedMethods.includes(t.method))throw new Error(`The "${e}" Request object requires a valid method. See https://commercetools.github.io/nodejs/sdk/Glossary.html#clientrequest`)}function ge(e){if(!e)throw new Error("Missing required options");if(!e.host)throw new Error("Missing required option (host)");if(!e.projectKey)throw new Error("Missing required option (projectKey)");if(!e.credentials)throw new Error("Missing required option (credentials)");let{clientId:t,clientSecret:r}=e.credentials||{};if(!(t&&r))throw new Error("Missing required credentials (clientId, clientSecret)");let o=e.scopes?e.scopes.join(" "):void 0,i=btoa(`${t}:${r}`),n=e.oauthUri||"/oauth/token",a=e.host.replace(/\/$/,"")+n,s=`grant_type=client_credentials${o?`&scope=${o}`:""}`;return{url:a,body:s,basicAuth:i}}function xe(e){if(!e)throw new Error("Missing required options");if(!e.projectKey)throw new Error("Missing required option (projectKey)");let t=e.projectKey;e.oauthUri=e.oauthUri||`/oauth/${t}/anonymous/token`;let r=ge(e);return e.credentials.anonymousId&&(r.body+=`&anonymous_id=${e.credentials.anonymousId}`),{...r}}function le(e){if(!e)throw new Error("Missing required options");if(!e.host)throw new Error("Missing required option (host)");if(!e.projectKey)throw new Error("Missing required option (projectKey)");if(!e.credentials)throw new Error("Missing required option (credentials)");if(!e.refreshToken)throw new Error("Missing required option (refreshToken)");let{clientId:t,clientSecret:r}=e.credentials;if(!(t&&r))throw new Error("Missing required credentials (clientId, clientSecret)");let o=btoa(`${t}:${r}`),i=e.oauthUri||"/oauth/token",n=e.host.replace(/\/$/,"")+i,a=`grant_type=refresh_token&refresh_token=${encodeURIComponent(e.refreshToken)}`;return{basicAuth:o,url:n,body:a}}function Oe(e){if(!e)throw new Error("Missing required options");if(!e.host)throw new Error("Missing required option (host)");if(!e.projectKey)throw new Error("Missing required option (projectKey)");if(!e.credentials)throw new Error("Missing required option (credentials)");let{clientId:t,clientSecret:r,user:o}=e.credentials,i=e.projectKey;if(!(t&&r&&o))throw new Error("Missing required credentials (clientId, clientSecret, user)");let{username:n,password:a}=o;if(!(n&&a))throw new Error("Missing required user credentials (username, password)");let s=(e.scopes||[]).join(" "),u=s?`&scope=${s}`:"",l=btoa(`${t}:${r}`),d=e.oauthUri||`/oauth/${i}/customers/token`,p=e.host.replace(/\/$/,"")+d,g=`grant_type=password&username=${encodeURIComponent(n)}&password=${encodeURIComponent(a)}${u}`;return{basicAuth:l,url:p,body:g}}async function k(e){let{httpClient:t,httpClientOptions:r,tokenCache:o,userOption:i,tokenCacheObject:n}=e,a=e.url,s=e.body,u=e.basicAuth;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.");if(n&&n.refreshToken&&(!n.token||n.token&&Date.now()>n.expirationTime)){if(!i)throw new Error("Missing required options.");let d={...le({...i,refreshToken:n.refreshToken})};a=d.url,s=d.body,u=d.basicAuth}let l;try{if(l=await q({url:a,method:"POST",headers:{Authorization:`Basic ${u}`,"Content-Type":"application/x-www-form-urlencoded","Content-Length":U(s)},httpClient:t,httpClientOptions:r,body:s}),l.statusCode>=200&&l.statusCode<300){let{access_token:d,expires_in:p,refresh_token:g}=l?.data,R=ie(p);return o.set({token:d,expirationTime:R,refreshToken:g}),Promise.resolve(!0)}throw N({code:l.data.error,statusCode:l.data.statusCode,message:l.data.message,error:l.data.errors})}catch(d){throw d}}function H(e){let t=e.tokenCache||T({token:"",expirationTime:-1}),r,o=null,i=A(e);return n=>async a=>{if(a.headers&&(a.headers.Authorization||a.headers.authorization))return n(a);if(r=t.get(i),r&&r.token&&Date.now()<r.expirationTime)return n(h(r.token,a));let s={request:a,tokenCache:t,tokenCacheKey:i,httpClient:e.httpClient||fetch,httpClientOptions:e.httpClientOptions,...xe(e),userOption:e,next:n};return o?await o:(o=k(s),await o,o=null),r=t.get(i),n(h(r.token,a))}}function v(e){let t=e.tokenCache||T({token:"",expirationTime:-1}),r,o=null,i=A(e);return n=>async a=>{if(a.headers&&(a.headers.Authorization||a.headers.authorization))return n(a);if(r=t.get(i),r&&r.token&&Date.now()<r.expirationTime)return n(h(r.token,a));let s={request:a,tokenCache:t,tokenCacheKey:i,tokenCacheObject:r,httpClient:e.httpClient||fetch,httpClientOptions:e.httpClientOptions,...ge(e),next:n};return o?await o:(o=k(s),await o,o=null),r=t.get(i),n(h(r.token,a))}}function _(e,t){return r=>async o=>{if(typeof e!="string")throw new Error("authorization must be a string");let i=t?.force===void 0?!0:t.force;if(!e||o.headers&&(o.headers.Authorization||o.headers.authorization)&&i===!1)return r(o);let n={...o,headers:{...o.headers,Authorization:e}};return r(n)}}function K(e){let t=e.tokenCache||T({token:"",expirationTime:-1}),r,o=null,i=A(e);return n=>async a=>{if(a.headers&&(a.headers.Authorization||a.headers.authorization))return n(a);if(r=t.get(i),r&&r.token&&Date.now()<r.expirationTime)return n(h(r.token,a));let s={request:a,tokenCache:t,tokenCacheKey:i,httpClient:e.httpClient||fetch,httpClientOptions:e.httpClientOptions,...Oe(e),userOption:e,next:n};return o?await o:(o=k(s),await o,o=null),r=t.get(i),n(h(r.token,a))}}function L(e){let t=e.tokenCache||T({token:"",tokenCacheKey:null}),r,o=null,i=A(e);return n=>async a=>{if(a.headers&&(a.headers.Authorization||a.headers.authorization))return n(a);if(r=t.get(i),r&&r.token&&Date.now()<r.expirationTime)return n(h(r.token,a));let s={request:a,tokenCache:t,httpClient:e.httpClient||fetch,httpClientOptions:e.httpClientOptions,...le(e),next:n};return o?await o:(o=k(s),await o,o=null),r=t.get(i),n(h(r.token,a))}}function Q(e){return t=>async r=>{let o=await t(r);if(o.statusCode==409){let i=o.error.body?.errors?.[0]?.currentVersion;if(i)return e&&typeof e=="function"?r.body=await e(i,r,o):r.body=typeof r.body=="string"?{...JSON.parse(r.body),version:i}:{...r.body,version:i},t(r)}return o}}function J(e){return t=>r=>{let o={...r,headers:{...r.headers,"X-Correlation-ID":e.generate&&typeof e.generate=="function"?e.generate():oe()}};return t(o)}}function Ce(e){return t=>async r=>{let o=await t(r);if(o.error){let{error:i}=o;return{...o,statusCode:i.statusCode||0,headers:i.headers||b({}),error:{...i,body:i.data||i}}}return o}}async function rt({url:e,httpClient:t,clientOptions:r}){let{request:o,maskSensitiveHeaderData:i,includeRequestInErrorResponse:n,includeResponseHeaders:a}=r;try{let s=await q({url:e,...r,httpClient:t,method:r.method,...r.body?{body:r.body}:{}});if(a||(s.headers=null),s.statusCode>=200&&s.statusCode<300)return r.method=="HEAD"?{body:null,statusCode:s.statusCode,retryCount:s.retryCount,headers:b(s.headers)}:{body:s.data,statusCode:s.statusCode,retryCount:s.retryCount,headers:b(s.headers)};let u=N({message:s?.data?.message||s?.message,statusCode:s.statusCode||s?.data?.statusCode,headers:b(s.headers),method:r.method,body:s.data,retryCount:s.retryCount,...n?{originalRequest:i?P(o):o}:{uri:o.uri}});return{body:s.data,code:s.statusCode,statusCode:s.statusCode,headers:b(s.headers),error:u}}catch(s){let u=a?b(s.response?.headers):null,l=s.response?.status||s.response?.data0||0,d=s.response?.data?.message;throw{body:null,error:N({statusCode:l,code:l,status:l,message:d||s.message,headers:u,body:s.response?.data||s,error:s.response?.data,...n?{originalRequest:i?P(o):o}:{uri:o.uri}})}}}function V(e){ye(e);let{host:t,credentialsMode:r,httpClient:o,timeout:i,enableRetry:n,retryConfig:a,getAbortController:s,includeOriginalRequest:u,includeRequestInErrorResponse:l=!0,includeResponseHeaders:d=!0,maskSensitiveHeaderData:p,httpClientOptions:g}=e;return R=>async c=>{let F=t.replace(/\/$/,"")+c.uri,w={...c.headers};Object.prototype.hasOwnProperty.call(w,"Content-Type")||Object.prototype.hasOwnProperty.call(w,"content-type")||(w["Content-Type"]="application/json"),w["Content-Type"]===null&&delete w["Content-Type"];let f=C.HEADERS_CONTENT_TYPES.indexOf(w["Content-Type"])>-1&&typeof c.body=="string"||z(c.body)?c.body:JSON.stringify(c.body||void 0);f&&(typeof f=="string"||z(f))&&(w["Content-Length"]=U(f));let m={enableRetry:n,retryConfig:a,request:c,method:c.method,headers:w,includeRequestInErrorResponse:l,maskSensitiveHeaderData:p,includeResponseHeaders:d,...g};r&&(m.credentialsMode=r),i&&(m.timeout=i,m.getAbortController=s),f&&(m.body=f);let I=await rt({url:F,clientOptions:m,httpClient:o}),O={...c,includeOriginalRequest:u,maskSensitiveHeaderData:p,response:I};return R(O)}}function G(e){return t=>async r=>{let o=await t(r),i=Object.assign({},o),{loggerFn:n=console.log}=e||{};return n&&typeof n=="function"&&n(o),i}}function Y({concurrency:e=20}){let t=0,r=[],o=()=>0>=e?Promise.resolve():new Promise(n=>{let a=()=>{t<e?(t++,n()):r.push(a)};a()}),i=()=>{if(t--,r.length>0){let n=r.shift();n&&n()}};return n=>a=>o().then(()=>{let s={...a,resolve(u){a.resolve(u),i()},reject(u){a.reject(u),i()}};return n(s).finally(()=>{i()})})}var ke={name:"@commercetools/ts-client",version:"3.0.4",engines:{node:">=18"},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:{buffer:"^6.0.3"},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.7",jest:"29.7.0",nock:"^14.0.0-beta.19","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 W(e){return t=>async r=>{let o=ae({...e,name:`${e.name?e.name+"/":""}commercetools-sdk-javascript-v3/${ke.version}`}),i={...r,headers:{...r.headers,"User-Agent":o}};return t(i)}}function it({middlewares:e}){return e.length===1?e[0]:e.slice().reduce((r,o)=>(...i)=>r(o.apply(null,i)))}var Ee;function de(e,t,r){if(se("process",e,{allowedMethods:["GET"]}),typeof t!="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 o={total:Number.POSITIVE_INFINITY,accumulate:!0,...r};return new Promise((i,n)=>{let a,s="";if(e&&e.uri){let[R,c]=e.uri.split("?");a=R,s=c}let l={limit:20,...{...me(s)}},d=o.total,p=!1,g=async(R,c=[])=>{let F=l.limit<d?l.limit:d,w=ne({...l,limit:F}),f={sort:"id asc",withTotal:!1,...R?{where:`id > "${R}"`}:{}},m=ne(f),I={...e,uri:`${a}?${m}&${w}`};try{let O=await S(Ee).execute(I),{results:X,count:j}=O?.body||{};if(!j&&p)return i(c||[]);let y=await Promise.resolve(t(O)),M;if(p=!0,o.accumulate&&(M=c.concat(y||[])),d-=j,j<l.limit||!d)return i(M||[]);let D=X[j-1],Z=D&&D.id;g(Z,M)}catch(O){n(O)}};g()})}function S(e){Ee=e,Me(e);let t=!1,r={async resolve(i){let{response:n,includeOriginalRequest:a,maskSensitiveHeaderData:s,...u}=i,{retryCount:l,...d}=n;return t=s,{body:null,error:null,reject:i.reject,resolve:i.resolve,...d,...a?{originalRequest:u}:{},...n?.retryCount?{retryCount:n.retryCount}:{}}}},o=it(e)(r.resolve);return{process:de,execute(i){return se("exec",i),new Promise(async(n,a)=>{try{let s=await o({reject:a,resolve:n,...i});if(s.error)return a(s.error);s.originalRequest&&t&&(s.originalRequest=P(s.originalRequest)),n(s)}catch(s){a(s)}})}}}var{createAuthMiddlewareForPasswordFlow:nt,createAuthMiddlewareForAnonymousSessionFlow:at,createAuthMiddlewareForClientCredentialsFlow:st,createAuthMiddlewareForRefreshTokenFlow:lt,createAuthMiddlewareForExistingTokenFlow:dt,createCorrelationIdMiddleware:ut,createHttpMiddleware:ct,createLoggerMiddleware:ht,createQueueMiddleware:pt,createUserAgentMiddleware:Pe,createConcurrentModificationMiddleware:wt}=Re,B=class{projectKey;authMiddleware;httpMiddleware;userAgentMiddleware;correlationIdMiddleware;loggerMiddleware;queueMiddleware;concurrentMiddleware;telemetryMiddleware;beforeMiddleware;afterMiddleware;middlewares=[];constructor(){this.userAgentMiddleware=Pe({})}withProjectKey(t){return this.projectKey=t,this}defaultClient(t,r,o,i,n,a){return this.withClientCredentialsFlow({host:o,projectKey:i||this.projectKey,credentials:r,httpClient:a||fetch,scopes:n}).withHttpMiddleware({host:t,httpClient:a||fetch})}withAuthMiddleware(t){return this.authMiddleware=t,this}withMiddleware(t){return this.middlewares.push(t),this}withClientCredentialsFlow(t){return this.withAuthMiddleware(st({host:t.host||C.CTP_AUTH_URL,projectKey:t.projectKey||this.projectKey,credentials:{clientId:t.credentials.clientId||null,clientSecret:t.credentials.clientSecret||null},oauthUri:t.oauthUri||null,scopes:t.scopes,httpClient:t.httpClient||fetch,...t}))}withPasswordFlow(t){return this.withAuthMiddleware(nt({host:t.host||C.CTP_AUTH_URL,projectKey:t.projectKey||this.projectKey,credentials:{clientId:t.credentials.clientId||null,clientSecret:t.credentials.clientSecret||null,user:{username:t.credentials.user.username||null,password:t.credentials.user.password||null}},httpClient:t.httpClient||fetch,...t}))}withAnonymousSessionFlow(t){return this.withAuthMiddleware(at({host:t.host||C.CTP_AUTH_URL,projectKey:this.projectKey||t.projectKey,credentials:{clientId:t.credentials.clientId||null,clientSecret:t.credentials.clientSecret||null,anonymousId:t.credentials.anonymousId||null},httpClient:t.httpClient||fetch,...t}))}withRefreshTokenFlow(t){return this.withAuthMiddleware(lt({host:t.host||C.CTP_AUTH_URL,projectKey:this.projectKey||t.projectKey,credentials:{clientId:t.credentials.clientId||null,clientSecret:t.credentials.clientSecret||null},httpClient:t.httpClient||fetch,refreshToken:t.refreshToken||null,...t}))}withExistingTokenFlow(t,r){return this.withAuthMiddleware(dt(t,{force:r.force||!0,...r}))}withHttpMiddleware(t){return this.httpMiddleware=ct({host:t.host||C.CTP_API_URL,httpClient:t.httpClient||fetch,...t}),this}withUserAgentMiddleware(t){return this.userAgentMiddleware=Pe(t),this}withQueueMiddleware(t){return this.queueMiddleware=pt({concurrency:t.concurrency||C.CONCURRENCT_REQUEST,...t}),this}withLoggerMiddleware(t){return this.loggerMiddleware=ht(t),this}withCorrelationIdMiddleware(t){return this.correlationIdMiddleware=ut({generate:t?.generate,...t}),this}withConcurrentModificationMiddleware(t){return this.concurrentMiddleware=wt(t?.concurrentModificationHandlerFn),this}withTelemetryMiddleware(t){let{createTelemetryMiddleware:r,...o}=t;return this.withUserAgentMiddleware({customAgent:o?.userAgent||"typescript-sdk-apm-middleware"}),this.telemetryMiddleware=r(o),this}withBeforeExecutionMiddleware(t){let{middleware:r,...o}=t||{};return this.beforeMiddleware=t.middleware(o),this}withAfterExecutionMiddleware(t){let{middleware:r,...o}=t||{};return this.afterMiddleware=t.middleware(o),this}build(){let t=this.middlewares.slice();return this.telemetryMiddleware&&t.push(this.telemetryMiddleware),this.correlationIdMiddleware&&t.push(this.correlationIdMiddleware),this.userAgentMiddleware&&t.push(this.userAgentMiddleware),this.authMiddleware&&t.push(this.authMiddleware),this.beforeMiddleware&&t.push(this.beforeMiddleware),this.queueMiddleware&&t.push(this.queueMiddleware),this.loggerMiddleware&&t.push(this.loggerMiddleware),this.concurrentMiddleware&&t.push(this.concurrentMiddleware),this.httpMiddleware&&t.push(this.httpMiddleware),this.afterMiddleware&&t.push(this.afterMiddleware),S({middlewares:t})}};return Ne(ft);})();
1
+ var window;(window||={})["@commercetools/ts-client"]=(()=>{var ue=Object.defineProperty;var Fe=Object.getOwnPropertyDescriptor;var Ie=Object.getOwnPropertyNames;var je=Object.prototype.hasOwnProperty;var ce=(e,t)=>{for(var r in t)ue(e,r,{get:t[r],enumerable:!0})},Ne=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ie(t))!je.call(e,i)&&i!==r&&ue(e,i,{get:()=>t[i],enumerable:!(o=Fe(t,i))||o.enumerable});return e};var Ue=e=>Ne(ue({},"__esModule",{value:!0}),e);var ft={};ce(ft,{ClientBuilder:()=>B,Process:()=>de,createAuthMiddlewareForAnonymousSessionFlow:()=>H,createAuthMiddlewareForClientCredentialsFlow:()=>v,createAuthMiddlewareForExistingTokenFlow:()=>_,createAuthMiddlewareForPasswordFlow:()=>K,createAuthMiddlewareForRefreshTokenFlow:()=>L,createClient:()=>S,createConcurrentModificationMiddleware:()=>Q,createCorrelationIdMiddleware:()=>J,createHttpMiddleware:()=>V,createLoggerMiddleware:()=>G,createQueueMiddleware:()=>Y,createUserAgentMiddleware:()=>W});var Re={};ce(Re,{createAuthMiddlewareForAnonymousSessionFlow:()=>H,createAuthMiddlewareForClientCredentialsFlow:()=>v,createAuthMiddlewareForExistingTokenFlow:()=>_,createAuthMiddlewareForPasswordFlow:()=>K,createAuthMiddlewareForRefreshTokenFlow:()=>L,createConcurrentModificationMiddleware:()=>Q,createCorrelationIdMiddleware:()=>J,createErrorMiddleware:()=>Ce,createHttpMiddleware:()=>V,createLoggerMiddleware:()=>G,createQueueMiddleware:()=>Y,createUserAgentMiddleware:()=>W});function N(e){return e&&typeof e=="string"?new TextEncoder().encode(e).length.toString():e&&e instanceof Uint8Array?e.byteLength.toString():e&&typeof e=="object"?new TextEncoder().encode(JSON.stringify(e)).length.toString():"0"}var C={};ce(C,{CONCURRENCT_REQUEST:()=>He,CTP_API_URL:()=>ve,CTP_AUTH_URL:()=>_e,DEFAULT_HEADERS:()=>he,HEADERS_CONTENT_TYPES:()=>qe});var qe=["application/json","application/graphql"],He=20,ve="https://api.europe-west1.gcp.commercetools.com",_e="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 T(e,t,r={}){this.code=r.code??=this.constructor.name,this.statusCode=e,this.status=e,this.message=t,Object.assign(this,r),this.name=this.constructor.name,this.constructor.prototype.__proto__=Error.prototype,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}function Ae(...e){T.call(this,0,...e)}function be(...e){T.call(this,...e)}function Ke(...e){T.call(this,400,...e)}function Le(...e){T.call(this,401,...e)}function Be(...e){T.call(this,403,...e)}function De(...e){T.call(this,404,...e)}function $e(...e){T.call(this,409,...e)}function ze(...e){T.call(this,500,...e)}function Qe(...e){T.call(this,503,...e)}function pe(e){switch(e){case 0:return Ae;case 400:return Ke;case 401:return Le;case 403:return Be;case 404:return De;case 409:return $e;case 500:return ze;case 503:return Qe;default:return}}function Je({statusCode:e,message:t,...r}){let o=t||"Unexpected non-JSON error response";e===404&&(o=`URI not found: ${r.originalRequest?.uri||r.uri}`);let i=pe(e);return i?new i(o,r):new be(e,o,r)}var U=Je;function Ve(e,t){return[503,...e].includes(t?.status||t?.statusCode)}async function Ge(e,t){async function r(){return await e({...t,headers:{...t.headers}})}return r().catch(o=>Promise.reject(o))}async function q(e){let{url:t,httpClient:r,...o}=e;return await Ge(async n=>{let{enableRetry:a,retryConfig:s,timeout:u,getAbortController:l}=o,{retryCodes:d=[],maxDelay:p=1/0,maxRetries:g=3,backoff:R=!0,retryDelay:c=200,retryOnAbort:F=!0}=s||{},w,f,m=0,I;we(d);async function O(){return r(t,{...n,...o,headers:{...o.headers},...o.body?{data:o.body}:{},withCredentials:n.credentialsMode==="include"})}function X(){let M=(l?l():null)||new AbortController;return o.abortController=M,o.signal=M.signal,M}async function j(){let M=async(ee,Se)=>{let $={};if(u){let E=X();I=setTimeout(()=>{E.abort(),E=X()},u)}try{if($=await O(),$.status>399&&Ve(ee,$))return{_response:$,shouldRetry:!0}}catch(E){if((E.name.includes("AbortError")||E.name.includes("TimeoutError"))&&Se)return{_response:E,shouldRetry:!0};throw E}finally{clearTimeout(I)}return{_response:$,shouldRetry:!1}},{_response:D,shouldRetry:Z}=await M(d,F);for(;a&&Z&&m<g;){m++,await re(te({retryCount:m,retryDelay:c,maxRetries:g,backoff:R,maxDelay:p}));let ee=await M(d,F);D=ee._response,Z=ee.shouldRetry}return D}let y=await j();try{y.text&&typeof y.text=="function"?(w=await y.text()||JSON.stringify(y[Object.getOwnPropertySymbols(y)[1]]),f=JSON.parse(w)):f=y.data||y}catch(M){throw M}return{data:f,retryCount:m,statusCode:y.status||y.statusCode||f.statusCode,headers:y.headers}},{validateStatus:n=>!0})}function oe(){return("1000000-1000-4000-8000"+-1e11).replace(/[018]/g,e=>(parseInt(e)^Math.floor(Math.random()*256)&15>>parseInt(e)/4).toString(16))}function Ye(e){return he.reduce((t,r)=>{let o=e[r]?e[r]:typeof e.get=="function"?e.get(r):null;return o&&(t[r]=o),t},{})}function x(e){if(!e)return null;if(e.raw&&typeof e.raw=="function")return e.raw();if(!e.forEach)return Ye(e);let t={};return e.forEach((r,o)=>t[o]=r),t}function z(e){return e!=null&&e.constructor!=null&&typeof e.constructor.isBuffer=="function"&&e.constructor.isBuffer(e)}function P(e){let t=JSON.parse(JSON.stringify(e));return t?.headers&&(t.headers.Authorization&&(t.headers.Authorization="Bearer ********"),t.headers.authorization&&(t.headers.authorization="Bearer ********")),t}function h(e,t){return{...t,headers:{...t.headers,Authorization:`Bearer ${e}`}}}var fe=["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 te({retryCount:e,retryDelay:t,backoff:r,maxDelay:o}){return r&&e!==0?Math.min(Math.round((Math.random()+1)*t*2**e),o):t}Math.min(Math.round((Math.random()+1)*200*2**10),1/0);function re(e){return new Promise(t=>{setTimeout(t,e)})}function A(e){if(!e?.credentials?.clientId||!e.projectKey||!e.host)throw new Error("Missing required options.");return{clientId:e.credentials.clientId,host:e.host,projectKey:e.projectKey}}function ie(e){return Date.now()+e*1e3-5*60*1e3}function b(e){let t=e;return{get:r=>t,set:(r,o)=>{t=r}}}function Te(e){return typeof e<"u"&&e!==null}function We(e){return Te(e)?typeof e=="string"?e:Object.fromEntries(Object.entries(e).filter(([t,r])=>![null,void 0,""].includes(r))):""}function Xe(e){let t={},r=new URLSearchParams(e);for(let o of r.keys())r.getAll(o).length>1?t[o]=r.getAll(o):t[o]=r.get(o);return t}function Ze(e){if(e=We(e),!e)return"";let t=new URLSearchParams(e);for(let[r,o]of Object.entries(e))Array.isArray(o)&&(t.delete(r),o.filter(Te).forEach(i=>t.append(r,i)));return t.toString()}function me(e,t=Xe){return t(e)}function ne(e,t=Ze){return t(e)}var et=()=>typeof window<"u"&&window.document&&window.document.nodeType===9;function tt(){if(et())return window.navigator.userAgent;let e=process?.version.slice(1)||"unknow",t=`(${process.platform}; ${process.arch})`;return`node.js/${e} ${t}`}function ae(e){let t=null,r=null;if(!e)throw new Error("Missing required option `name`");let o=e.version?`${e.name}/${e.version}`:e.name;e.libraryName&&!e.libraryVersion?t=e.libraryName:e.libraryName&&e.libraryVersion&&(t=`${e.libraryName}/${e.libraryVersion}`),e.contactUrl&&!e.contactEmail?r=`(+${e.contactUrl})`:!e.contactUrl&&e.contactEmail?r=`(+${e.contactEmail})`:e.contactUrl&&e.contactEmail&&(r=`(+${e.contactUrl}; +${e.contactEmail})`);let i=tt(),n=e.customAgent||"";return[o,i,t,r,n].filter(Boolean).join(" ")}function ye(e){if(!e.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(!e.httpClient&&typeof e.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.");if(e.httpClientOptions&&Object.prototype.toString.call(e.httpClientOptions)!=="[object Object]")throw new Error("`httpClientOptions` must be an object type")}function we(e){if(!Array.isArray(e))throw new Error("`retryCodes` option must be an array of retry status (error) codes and/or messages.")}function Me(e){if(!e)throw new Error("Missing required options");if(e.middlewares&&!Array.isArray(e.middlewares))throw new Error("Middlewares should be an array");if(!e.middlewares||!Array.isArray(e.middlewares)||!e.middlewares.length)throw new Error("You need to provide at least one middleware")}function se(e,t,r={allowedMethods:fe}){if(!t)throw new Error(`The "${e}" function requires a "Request" object as an argument. See https://commercetools.github.io/nodejs/sdk/Glossary.html#clientrequest`);if(typeof t.uri!="string")throw new Error(`The "${e}" Request object requires a valid uri. See https://commercetools.github.io/nodejs/sdk/Glossary.html#clientrequest`);if(!r.allowedMethods.includes(t.method))throw new Error(`The "${e}" Request object requires a valid method. See https://commercetools.github.io/nodejs/sdk/Glossary.html#clientrequest`)}function ge(e){if(!e)throw new Error("Missing required options");if(!e.host)throw new Error("Missing required option (host)");if(!e.projectKey)throw new Error("Missing required option (projectKey)");if(!e.credentials)throw new Error("Missing required option (credentials)");let{clientId:t,clientSecret:r}=e.credentials||{};if(!(t&&r))throw new Error("Missing required credentials (clientId, clientSecret)");let o=e.scopes?e.scopes.join(" "):void 0,i=btoa(`${t}:${r}`),n=e.oauthUri||"/oauth/token",a=e.host.replace(/\/$/,"")+n,s=`grant_type=client_credentials${o?`&scope=${o}`:""}`;return{url:a,body:s,basicAuth:i}}function xe(e){if(!e)throw new Error("Missing required options");if(!e.projectKey)throw new Error("Missing required option (projectKey)");let t=e.projectKey;e.oauthUri=e.oauthUri||`/oauth/${t}/anonymous/token`;let r=ge(e);return e.credentials.anonymousId&&(r.body+=`&anonymous_id=${e.credentials.anonymousId}`),{...r}}function le(e){if(!e)throw new Error("Missing required options");if(!e.host)throw new Error("Missing required option (host)");if(!e.projectKey)throw new Error("Missing required option (projectKey)");if(!e.credentials)throw new Error("Missing required option (credentials)");if(!e.refreshToken)throw new Error("Missing required option (refreshToken)");let{clientId:t,clientSecret:r}=e.credentials;if(!(t&&r))throw new Error("Missing required credentials (clientId, clientSecret)");let o=btoa(`${t}:${r}`),i=e.oauthUri||"/oauth/token",n=e.host.replace(/\/$/,"")+i,a=`grant_type=refresh_token&refresh_token=${encodeURIComponent(e.refreshToken)}`;return{basicAuth:o,url:n,body:a}}function Oe(e){if(!e)throw new Error("Missing required options");if(!e.host)throw new Error("Missing required option (host)");if(!e.projectKey)throw new Error("Missing required option (projectKey)");if(!e.credentials)throw new Error("Missing required option (credentials)");let{clientId:t,clientSecret:r,user:o}=e.credentials,i=e.projectKey;if(!(t&&r&&o))throw new Error("Missing required credentials (clientId, clientSecret, user)");let{username:n,password:a}=o;if(!(n&&a))throw new Error("Missing required user credentials (username, password)");let s=(e.scopes||[]).join(" "),u=s?`&scope=${s}`:"",l=btoa(`${t}:${r}`),d=e.oauthUri||`/oauth/${i}/customers/token`,p=e.host.replace(/\/$/,"")+d,g=`grant_type=password&username=${encodeURIComponent(n)}&password=${encodeURIComponent(a)}${u}`;return{basicAuth:l,url:p,body:g}}async function k(e){let{httpClient:t,httpClientOptions:r,tokenCache:o,userOption:i,tokenCacheObject:n}=e,a=e.url,s=e.body,u=e.basicAuth;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.");if(n&&n.refreshToken&&(!n.token||n.token&&Date.now()>n.expirationTime)){if(!i)throw new Error("Missing required options.");let d={...le({...i,refreshToken:n.refreshToken})};a=d.url,s=d.body,u=d.basicAuth}let l;try{if(l=await q({url:a,method:"POST",headers:{Authorization:`Basic ${u}`,"Content-Type":"application/x-www-form-urlencoded","Content-Length":N(s)},httpClient:t,httpClientOptions:r,body:s}),l.statusCode>=200&&l.statusCode<300){let{access_token:d,expires_in:p,refresh_token:g}=l?.data,R=ie(p);return o.set({token:d,expirationTime:R,refreshToken:g}),Promise.resolve(!0)}throw U({code:l.data.error,statusCode:l.data.statusCode,message:l.data.message,error:l.data.errors})}catch(d){throw d}}function H(e){let t=e.tokenCache||b({token:"",expirationTime:-1}),r,o=null,i=A(e);return n=>async a=>{if(a.headers&&(a.headers.Authorization||a.headers.authorization))return n(a);if(r=t.get(i),r&&r.token&&Date.now()<r.expirationTime)return n(h(r.token,a));let s={request:a,tokenCache:t,tokenCacheKey:i,httpClient:e.httpClient||fetch,httpClientOptions:e.httpClientOptions,...xe(e),userOption:e,next:n};return o?await o:(o=k(s),await o,o=null),r=t.get(i),n(h(r.token,a))}}function v(e){let t=e.tokenCache||b({token:"",expirationTime:-1}),r,o=null,i=A(e);return n=>async a=>{if(a.headers&&(a.headers.Authorization||a.headers.authorization))return n(a);if(r=t.get(i),r&&r.token&&Date.now()<r.expirationTime)return n(h(r.token,a));let s={request:a,tokenCache:t,tokenCacheKey:i,tokenCacheObject:r,httpClient:e.httpClient||fetch,httpClientOptions:e.httpClientOptions,...ge(e),next:n};return o?await o:(o=k(s),await o,o=null),r=t.get(i),n(h(r.token,a))}}function _(e,t){return r=>async o=>{if(typeof e!="string")throw new Error("authorization must be a string");let i=t?.force===void 0?!0:t.force;if(!e||o.headers&&(o.headers.Authorization||o.headers.authorization)&&i===!1)return r(o);let n={...o,headers:{...o.headers,Authorization:e}};return r(n)}}function K(e){let t=e.tokenCache||b({token:"",expirationTime:-1}),r,o=null,i=A(e);return n=>async a=>{if(a.headers&&(a.headers.Authorization||a.headers.authorization))return n(a);if(r=t.get(i),r&&r.token&&Date.now()<r.expirationTime)return n(h(r.token,a));let s={request:a,tokenCache:t,tokenCacheKey:i,httpClient:e.httpClient||fetch,httpClientOptions:e.httpClientOptions,...Oe(e),userOption:e,next:n};return o?await o:(o=k(s),await o,o=null),r=t.get(i),n(h(r.token,a))}}function L(e){let t=e.tokenCache||b({token:"",tokenCacheKey:null}),r,o=null,i=A(e);return n=>async a=>{if(a.headers&&(a.headers.Authorization||a.headers.authorization))return n(a);if(r=t.get(i),r&&r.token&&Date.now()<r.expirationTime)return n(h(r.token,a));let s={request:a,tokenCache:t,httpClient:e.httpClient||fetch,httpClientOptions:e.httpClientOptions,...le(e),next:n};return o?await o:(o=k(s),await o,o=null),r=t.get(i),n(h(r.token,a))}}function Q(e){return t=>async r=>{let o=await t(r);if(o.statusCode==409){let i=o.error.body?.errors?.[0]?.currentVersion;if(i)return e&&typeof e=="function"?r.body=await e(i,r,o):r.body=typeof r.body=="string"?{...JSON.parse(r.body),version:i}:{...r.body,version:i},t(r)}return o}}function J(e){return t=>r=>{let o={...r,headers:{...r.headers,"X-Correlation-ID":e.generate&&typeof e.generate=="function"?e.generate():oe()}};return t(o)}}function Ce(e){return t=>async r=>{let o=await t(r);if(o.error){let{error:i}=o;return{...o,statusCode:i.statusCode||0,headers:i.headers||x({}),error:{...i,body:i.data||i}}}return o}}async function rt({url:e,httpClient:t,clientOptions:r}){let{request:o,maskSensitiveHeaderData:i,includeRequestInErrorResponse:n,includeResponseHeaders:a}=r;try{let s=await q({url:e,...r,httpClient:t,method:r.method,...r.body?{body:r.body}:{}});if(a||(s.headers=null),s.statusCode>=200&&s.statusCode<300)return r.method=="HEAD"?{body:null,statusCode:s.statusCode,retryCount:s.retryCount,headers:x(s.headers)}:{body:s.data,statusCode:s.statusCode,retryCount:s.retryCount,headers:x(s.headers)};let u=U({code:s.data?.errors?.[0].code,message:s?.data?.message||s?.message,statusCode:s.statusCode||s?.data?.statusCode,method:r.method,headers:x(s.headers),body:s.data,error:s.data,retryCount:s.retryCount,...n?{originalRequest:i?P(o):o}:{uri:o.uri}});return{...u,error:u}}catch(s){let u=a?x(s.response?.headers):null,l=s.response?.status||s.response?.statusCode||s.response?.data.statusCode||0,d=s.response?.data?.message;throw{body:null,error:U({statusCode:l,code:"NetworkError",status:l,message:d||s.message,headers:u,body:s.response?.data||s,error:s.response?.data||s,...n?{originalRequest:i?P(o):o}:{uri:o.uri}})}}}function V(e){ye(e);let{host:t,credentialsMode:r,httpClient:o,timeout:i,enableRetry:n,retryConfig:a,getAbortController:s,includeOriginalRequest:u,includeRequestInErrorResponse:l=!0,includeResponseHeaders:d=!0,maskSensitiveHeaderData:p,httpClientOptions:g}=e;return R=>async c=>{let F=t.replace(/\/$/,"")+c.uri,w={...c.headers};Object.prototype.hasOwnProperty.call(w,"Content-Type")||Object.prototype.hasOwnProperty.call(w,"content-type")||(w["Content-Type"]="application/json"),w["Content-Type"]===null&&delete w["Content-Type"];let f=C.HEADERS_CONTENT_TYPES.indexOf(w["Content-Type"])>-1&&typeof c.body=="string"||z(c.body)?c.body:JSON.stringify(c.body||void 0);f&&(typeof f=="string"||z(f))&&(w["Content-Length"]=N(f));let m={enableRetry:n,retryConfig:a,request:c,method:c.method,headers:w,includeRequestInErrorResponse:l,maskSensitiveHeaderData:p,includeResponseHeaders:d,...g};r&&(m.credentialsMode=r),i&&(m.timeout=i,m.getAbortController=s),f&&(m.body=f);let I=await rt({url:F,clientOptions:m,httpClient:o}),O={...c,includeOriginalRequest:u,maskSensitiveHeaderData:p,response:I};return R(O)}}function G(e){return t=>async r=>{let o=await t(r),i=Object.assign({},o),{loggerFn:n=console.log}=e||{};return n&&typeof n=="function"&&n(o),i}}function Y({concurrency:e=20}){let t=0,r=[],o=()=>0>=e?Promise.resolve():new Promise(n=>{let a=()=>{t<e?(t++,n()):r.push(a)};a()}),i=()=>{if(t--,r.length>0){let n=r.shift();n&&n()}};return n=>a=>o().then(()=>{let s={...a,resolve(u){a.resolve(u),i()},reject(u){a.reject(u),i()}};return n(s).finally(()=>{i()})})}var ke={name:"@commercetools/ts-client",version:"3.1.1",engines:{node:">=18"},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:{buffer:"^6.0.3"},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.7",jest:"29.7.0",nock:"14.0.1","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 W(e){return t=>async r=>{let o=ae({...e,name:`${e.name?e.name+"/":""}commercetools-sdk-javascript-v3/${ke.version}`}),i={...r,headers:{...r.headers,"User-Agent":o}};return t(i)}}function it({middlewares:e}){return e.length===1?e[0]:e.slice().reduce((r,o)=>(...i)=>r(o.apply(null,i)))}var Ee;function de(e,t,r){if(se("process",e,{allowedMethods:["GET"]}),typeof t!="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 o={total:Number.POSITIVE_INFINITY,accumulate:!0,...r};return new Promise((i,n)=>{let a,s="";if(e&&e.uri){let[R,c]=e.uri.split("?");a=R,s=c}let l={limit:20,...{...me(s)}},d=o.total,p=!1,g=async(R,c=[])=>{let F=l.limit<d?l.limit:d,w=ne({...l,limit:F}),f={sort:"id asc",withTotal:!1,...R?{where:`id > "${R}"`}:{}},m=ne(f),I={...e,uri:`${a}?${m}&${w}`};try{let O=await S(Ee).execute(I),{results:X,count:j}=O?.body||{};if(!j&&p)return i(c||[]);let y=await Promise.resolve(t(O)),M;if(p=!0,o.accumulate&&(M=c.concat(y||[])),d-=j,j<l.limit||!d)return i(M||[]);let D=X[j-1],Z=D&&D.id;g(Z,M)}catch(O){n(O)}};g()})}function S(e){Ee=e,Me(e);let t=!1,r={async resolve(i){let{response:n,includeOriginalRequest:a,maskSensitiveHeaderData:s,...u}=i,{retryCount:l,...d}=n;return t=s,{body:null,error:null,reject:i.reject,resolve:i.resolve,...d,...a?{originalRequest:u}:{},...n?.retryCount?{retryCount:n.retryCount}:{}}}},o=it(e)(r.resolve);return{process:de,execute(i){return se("exec",i),new Promise(async(n,a)=>{try{let s=await o({reject:a,resolve:n,...i});if(s.error)return a(s.error);s.originalRequest&&t&&(s.originalRequest=P(s.originalRequest)),n(s)}catch(s){a(s)}})}}}var{createAuthMiddlewareForPasswordFlow:nt,createAuthMiddlewareForAnonymousSessionFlow:at,createAuthMiddlewareForClientCredentialsFlow:st,createAuthMiddlewareForRefreshTokenFlow:lt,createAuthMiddlewareForExistingTokenFlow:dt,createCorrelationIdMiddleware:ut,createHttpMiddleware:ct,createLoggerMiddleware:ht,createQueueMiddleware:pt,createUserAgentMiddleware:Pe,createConcurrentModificationMiddleware:wt}=Re,B=class{projectKey;authMiddleware;httpMiddleware;userAgentMiddleware;correlationIdMiddleware;loggerMiddleware;queueMiddleware;concurrentMiddleware;telemetryMiddleware;beforeMiddleware;afterMiddleware;middlewares=[];constructor(){this.userAgentMiddleware=Pe({})}withProjectKey(t){return this.projectKey=t,this}defaultClient(t,r,o,i,n,a){return this.withClientCredentialsFlow({host:o,projectKey:i||this.projectKey,credentials:r,httpClient:a||fetch,scopes:n}).withHttpMiddleware({host:t,httpClient:a||fetch})}withAuthMiddleware(t){return this.authMiddleware=t,this}withMiddleware(t){return this.middlewares.push(t),this}withClientCredentialsFlow(t){return this.withAuthMiddleware(st({host:t.host||C.CTP_AUTH_URL,projectKey:t.projectKey||this.projectKey,credentials:{clientId:t.credentials.clientId||null,clientSecret:t.credentials.clientSecret||null},oauthUri:t.oauthUri||null,scopes:t.scopes,httpClient:t.httpClient||fetch,...t}))}withPasswordFlow(t){return this.withAuthMiddleware(nt({host:t.host||C.CTP_AUTH_URL,projectKey:t.projectKey||this.projectKey,credentials:{clientId:t.credentials.clientId||null,clientSecret:t.credentials.clientSecret||null,user:{username:t.credentials.user.username||null,password:t.credentials.user.password||null}},httpClient:t.httpClient||fetch,...t}))}withAnonymousSessionFlow(t){return this.withAuthMiddleware(at({host:t.host||C.CTP_AUTH_URL,projectKey:this.projectKey||t.projectKey,credentials:{clientId:t.credentials.clientId||null,clientSecret:t.credentials.clientSecret||null,anonymousId:t.credentials.anonymousId||null},httpClient:t.httpClient||fetch,...t}))}withRefreshTokenFlow(t){return this.withAuthMiddleware(lt({host:t.host||C.CTP_AUTH_URL,projectKey:this.projectKey||t.projectKey,credentials:{clientId:t.credentials.clientId||null,clientSecret:t.credentials.clientSecret||null},httpClient:t.httpClient||fetch,refreshToken:t.refreshToken||null,...t}))}withExistingTokenFlow(t,r){return this.withAuthMiddleware(dt(t,{force:r.force||!0,...r}))}withHttpMiddleware(t){return this.httpMiddleware=ct({host:t.host||C.CTP_API_URL,httpClient:t.httpClient||fetch,...t}),this}withUserAgentMiddleware(t){return this.userAgentMiddleware=Pe(t),this}withQueueMiddleware(t){return this.queueMiddleware=pt({concurrency:t.concurrency||C.CONCURRENCT_REQUEST,...t}),this}withLoggerMiddleware(t){return this.loggerMiddleware=ht(t),this}withCorrelationIdMiddleware(t){return this.correlationIdMiddleware=ut({generate:t?.generate,...t}),this}withConcurrentModificationMiddleware(t){return this.concurrentMiddleware=wt(t?.concurrentModificationHandlerFn),this}withTelemetryMiddleware(t){let{createTelemetryMiddleware:r,...o}=t;return this.withUserAgentMiddleware({customAgent:o?.userAgent||"typescript-sdk-apm-middleware"}),this.telemetryMiddleware=r(o),this}withBeforeExecutionMiddleware(t){let{middleware:r,...o}=t||{};return this.beforeMiddleware=t.middleware(o),this}withAfterExecutionMiddleware(t){let{middleware:r,...o}=t||{};return this.afterMiddleware=t.middleware(o),this}build(){let t=this.middlewares.slice();return this.telemetryMiddleware&&t.push(this.telemetryMiddleware),this.correlationIdMiddleware&&t.push(this.correlationIdMiddleware),this.userAgentMiddleware&&t.push(this.userAgentMiddleware),this.authMiddleware&&t.push(this.authMiddleware),this.beforeMiddleware&&t.push(this.beforeMiddleware),this.queueMiddleware&&t.push(this.queueMiddleware),this.loggerMiddleware&&t.push(this.loggerMiddleware),this.concurrentMiddleware&&t.push(this.concurrentMiddleware),this.httpMiddleware&&t.push(this.httpMiddleware),this.afterMiddleware&&t.push(this.afterMiddleware),S({middlewares:t})}};return Ue(ft);})();
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"../../../src","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,0BAAgB;AAE/D,OAAO,EACH,2CAA2C,EAC3C,4CAA4C,EAC5C,wCAAwC,EACxC,mCAAmC,EACnC,uCAAuC,EACvC,sCAAsC,EACtC,6BAA6B,EAC7B,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EAC5B,8BAAoB;AACrB,iCAA+B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"../../../src","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,0BAAgB;AAC/D,OAAO,EACH,2CAA2C,EAC3C,4CAA4C,EAC5C,wCAAwC,EACxC,mCAAmC,EACnC,uCAAuC,EACvC,sCAAsC,EACtC,6BAA6B,EAC7B,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EAC5B,8BAAoB;AACrB,iCAA+B"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-http-middleware.d.ts","sourceRoot":"../../../../src/middleware","sources":["create-http-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,qBAAqB,EAGrB,UAAU,EAMX,0BAAsB;AAmHvB,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,OAAO,EAAE,qBAAqB,GAC7B,UAAU,CA2FZ"}
1
+ {"version":3,"file":"create-http-middleware.d.ts","sourceRoot":"../../../../src/middleware","sources":["create-http-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,qBAAqB,EAGrB,UAAU,EAMX,0BAAsB;AAqHvB,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,OAAO,EAAE,qBAAqB,GAC7B,UAAU,CA2FZ"}
@@ -18,13 +18,13 @@ export type MiddlewareResponse<T = unknown> = {
18
18
 
19
19
  export type HttpErrorType = {
20
20
  name?: string
21
- message: string
22
- code?: number
21
+ message?: string
22
+ code?: string
23
23
  status?: number
24
24
  method: MethodType
25
25
  statusCode: number
26
26
  originalRequest?: ClientRequest
27
- body: JsonObject
27
+ body?: JsonObject
28
28
  retryCount?: number
29
29
  headers?: Record<string, any>
30
30
  [key: string]: any
@@ -72,8 +72,8 @@ export type VariableMap = {
72
72
  }
73
73
 
74
74
  export type ClientResponse<T = any> = {
75
- body: T
76
- code?: number
75
+ body?: T
76
+ code?: string
77
77
  statusCode?: number
78
78
  headers?: Record<string, any>
79
79
  error?: HttpErrorType
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@commercetools/ts-client",
3
- "version": "3.0.4",
3
+ "version": "3.1.1",
4
4
  "engines": {
5
5
  "node": ">=18"
6
6
  },
@@ -47,7 +47,7 @@
47
47
  "common-tags": "1.8.2",
48
48
  "dotenv": "16.4.7",
49
49
  "jest": "29.7.0",
50
- "nock": "^14.0.0-beta.19",
50
+ "nock": "14.0.1",
51
51
  "organize-imports-cli": "0.10.0"
52
52
  },
53
53
  "scripts": {