@amazon-sp-api-release/amazon-sp-api-sdk-js 1.0.0-rc8 → 1.0.0

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.
Files changed (109) hide show
  1. package/README.md +1 -1
  2. package/helper/DefaultRateLimitFetcher.mjs +2 -35
  3. package/helper/DefaultRateLimitMap.mjs +266 -0
  4. package/helper/SuperagentRateLimiter.mjs +26 -14
  5. package/package.json +1 -1
  6. package/sample-node-app/index.js +27 -13
  7. package/src/apluscontent_v2020_11_01/ApiClient.js +48 -38
  8. package/src/apluscontent_v2020_11_01/api/AplusContentApi.js +50 -11
  9. package/src/appintegrations_v2024_04_01/ApiClient.js +48 -38
  10. package/src/appintegrations_v2024_04_01/api/AppIntegrationsApi.js +36 -4
  11. package/src/applications_v2023_11_30/ApiClient.js +48 -38
  12. package/src/applications_v2023_11_30/api/ApplicationsApi.js +32 -2
  13. package/src/awd_v2024_05_09/ApiClient.js +48 -38
  14. package/src/awd_v2024_05_09/api/AwdApi.js +52 -12
  15. package/src/catalogitems_v2022_04_01/ApiClient.js +48 -38
  16. package/src/catalogitems_v2022_04_01/api/CatalogApi.js +34 -3
  17. package/src/datakiosk_v2023_11_15/ApiClient.js +48 -38
  18. package/src/datakiosk_v2023_11_15/api/QueriesApi.js +40 -6
  19. package/src/easyship_v2022_03_23/ApiClient.js +48 -38
  20. package/src/easyship_v2022_03_23/api/EasyShipApi.js +40 -6
  21. package/src/fbaeligibility_v1/ApiClient.js +48 -38
  22. package/src/fbaeligibility_v1/api/FbaInboundApi.js +32 -2
  23. package/src/fbainventory_v1/ApiClient.js +48 -38
  24. package/src/fbainventory_v1/api/FbaInventoryApi.js +38 -5
  25. package/src/feeds_v2021_06_30/ApiClient.js +48 -38
  26. package/src/feeds_v2021_06_30/api/FeedsApi.js +42 -7
  27. package/src/finances_2024_06_19/ApiClient.js +48 -38
  28. package/src/finances_2024_06_19/api/DefaultApi.js +32 -2
  29. package/src/finances_v0/ApiClient.js +48 -38
  30. package/src/finances_v0/api/DefaultApi.js +38 -5
  31. package/src/fulfillmentinbound_v0/ApiClient.js +48 -38
  32. package/src/fulfillmentinbound_v0/api/FbaInboundApi.js +42 -7
  33. package/src/fulfillmentinbound_v2024_03_20/ApiClient.js +48 -38
  34. package/src/fulfillmentinbound_v2024_03_20/api/FbaInboundApi.js +120 -46
  35. package/src/fulfillmentoutbound_v2020_07_01/ApiClient.js +48 -38
  36. package/src/fulfillmentoutbound_v2020_07_01/api/FbaOutboundApi.js +58 -15
  37. package/src/invoices_v2024_06_19/ApiClient.js +48 -38
  38. package/src/invoices_v2024_06_19/api/InvoicesApi.js +44 -8
  39. package/src/invoicing_v0/ApiClient.js +48 -38
  40. package/src/invoicing_v0/api/ShipmentInvoiceApi.js +36 -4
  41. package/src/listingsitems_v2021_08_01/ApiClient.js +48 -38
  42. package/src/listingsitems_v2021_08_01/api/ListingsApi.js +40 -6
  43. package/src/listingsrestrictions_v2021_08_01/ApiClient.js +48 -38
  44. package/src/listingsrestrictions_v2021_08_01/api/ListingsApi.js +32 -2
  45. package/src/merchantfulfillment_v0/ApiClient.js +48 -38
  46. package/src/merchantfulfillment_v0/api/MerchantFulfillmentApi.js +40 -6
  47. package/src/messaging_v1/ApiClient.js +48 -38
  48. package/src/messaging_v1/api/MessagingApi.js +56 -14
  49. package/src/notifications_v1/ApiClient.js +48 -38
  50. package/src/notifications_v1/api/NotificationsApi.js +46 -9
  51. package/src/orders_v0/ApiClient.js +48 -38
  52. package/src/orders_v0/api/OrdersV0Api.js +48 -10
  53. package/src/orders_v0/api/ShipmentApi.js +32 -2
  54. package/src/pricing_v0/ApiClient.js +48 -38
  55. package/src/pricing_v0/api/ProductPricingApi.js +42 -7
  56. package/src/pricing_v2022_05_01/ApiClient.js +48 -38
  57. package/src/pricing_v2022_05_01/api/ProductPricingApi.js +34 -3
  58. package/src/productfees_v0/ApiClient.js +48 -38
  59. package/src/productfees_v0/api/FeesApi.js +36 -4
  60. package/src/producttypedefinitions_v2020_09_01/ApiClient.js +48 -38
  61. package/src/producttypedefinitions_v2020_09_01/api/DefinitionsApi.js +34 -3
  62. package/src/replenishment_v2022_11_07/ApiClient.js +48 -38
  63. package/src/replenishment_v2022_11_07/api/OffersApi.js +34 -3
  64. package/src/replenishment_v2022_11_07/api/SellingpartnersApi.js +32 -2
  65. package/src/reports_v2021_06_30/ApiClient.js +48 -38
  66. package/src/reports_v2021_06_30/api/ReportsApi.js +48 -10
  67. package/src/sales_v1/ApiClient.js +48 -38
  68. package/src/sales_v1/api/SalesApi.js +32 -2
  69. package/src/sellers_v1/ApiClient.js +48 -38
  70. package/src/sellers_v1/api/SellersApi.js +34 -3
  71. package/src/services_v1/ApiClient.js +48 -38
  72. package/src/services_v1/api/ServiceApi.js +64 -18
  73. package/src/shipping_v2/ApiClient.js +48 -38
  74. package/src/shipping_v2/api/ShippingApi.js +70 -21
  75. package/src/solicitations_v1/ApiClient.js +48 -38
  76. package/src/solicitations_v1/api/SolicitationsApi.js +34 -3
  77. package/src/supplysources_v2020_07_01/ApiClient.js +48 -38
  78. package/src/supplysources_v2020_07_01/api/SupplySourcesApi.js +42 -7
  79. package/src/tokens_v2021_03_01/ApiClient.js +48 -38
  80. package/src/tokens_v2021_03_01/api/TokensApi.js +32 -2
  81. package/src/transfers_v2024_06_01/ApiClient.js +48 -38
  82. package/src/transfers_v2024_06_01/api/DefaultApi.js +34 -3
  83. package/src/uploads_v2020_11_01/ApiClient.js +48 -38
  84. package/src/uploads_v2020_11_01/api/UploadsApi.js +32 -2
  85. package/src/vehicles_v2024_11_01/ApiClient.js +48 -38
  86. package/src/vehicles_v2024_11_01/api/AutomotiveApi.js +32 -2
  87. package/src/vehicles_v2024_11_01/api/VehiclesApi.js +32 -2
  88. package/src/vendordfinventory_v1/ApiClient.js +48 -38
  89. package/src/vendordfinventory_v1/api/UpdateInventoryApi.js +32 -2
  90. package/src/vendordforders_v2021_12_28/ApiClient.js +48 -38
  91. package/src/vendordforders_v2021_12_28/api/VendorOrdersApi.js +36 -4
  92. package/src/vendordfpayments_v1/ApiClient.js +48 -38
  93. package/src/vendordfpayments_v1/api/VendorInvoiceApi.js +32 -2
  94. package/src/vendordfshipping_v2021_12_28/ApiClient.js +48 -38
  95. package/src/vendordfshipping_v2021_12_28/api/CreateContainerLabelApi.js +32 -2
  96. package/src/vendordfshipping_v2021_12_28/api/CustomerInvoicesApi.js +34 -3
  97. package/src/vendordfshipping_v2021_12_28/api/VendorShippingApi.js +38 -5
  98. package/src/vendordfshipping_v2021_12_28/api/VendorShippingLabelsApi.js +38 -5
  99. package/src/vendordftransactions_v2021_12_28/ApiClient.js +48 -38
  100. package/src/vendordftransactions_v2021_12_28/api/VendorTransactionApi.js +32 -2
  101. package/src/vendorinvoices_v1/ApiClient.js +48 -38
  102. package/src/vendorinvoices_v1/api/VendorPaymentsApi.js +32 -2
  103. package/src/vendororders_v1/ApiClient.js +48 -38
  104. package/src/vendororders_v1/api/VendorOrdersApi.js +38 -5
  105. package/src/vendorshipments_v1/ApiClient.js +48 -38
  106. package/src/vendorshipments_v1/api/VendorShippingApi.js +38 -5
  107. package/src/vendortransactionstatus_v1/ApiClient.js +48 -38
  108. package/src/vendortransactionstatus_v1/api/VendorTransactionApi.js +32 -2
  109. package/helper/rate-limits.yml +0 -874
@@ -11,13 +11,15 @@
11
11
  *
12
12
  */
13
13
 
14
- import {ApiClient} from "../ApiClient.js";
14
+ import {ApiClient} from '../ApiClient.js';
15
15
  import {CreateQueryResponse} from '../model/CreateQueryResponse.js';
16
16
  import {CreateQuerySpecification} from '../model/CreateQuerySpecification.js';
17
17
  import {ErrorList} from '../model/ErrorList.js';
18
18
  import {GetDocumentResponse} from '../model/GetDocumentResponse.js';
19
19
  import {GetQueriesResponse} from '../model/GetQueriesResponse.js';
20
20
  import {Query} from '../model/Query.js';
21
+ import {SuperagentRateLimiter} from '../../../helper/SuperagentRateLimiter.mjs';
22
+ import {DefaultRateLimitFetcher} from '../../../helper/DefaultRateLimitFetcher.mjs';
21
23
 
22
24
  /**
23
25
  * Queries service.
@@ -26,6 +28,9 @@ import {Query} from '../model/Query.js';
26
28
  */
27
29
  export class QueriesApi {
28
30
 
31
+ // Private memeber stores the default rate limiters
32
+ #defaultRateLimiterMap;
33
+
29
34
  /**
30
35
  * Constructs a new QueriesApi.
31
36
  * @alias module:datakiosk_v2023_11_15/api/QueriesApi
@@ -35,6 +40,35 @@ export class QueriesApi {
35
40
  */
36
41
  constructor(apiClient) {
37
42
  this.apiClient = apiClient || ApiClient.instance;
43
+ this.initializeDefaultRateLimiterMap();
44
+ }
45
+
46
+ /**
47
+ * Initialize rate limiters for API operations
48
+ */
49
+ initializeDefaultRateLimiterMap() {
50
+ this.#defaultRateLimiterMap = new Map()
51
+ const defaultRateLimitFetcher = new DefaultRateLimitFetcher();
52
+ const operations = [
53
+ 'QueriesApi-cancelQuery',
54
+ 'QueriesApi-createQuery',
55
+ 'QueriesApi-getDocument',
56
+ 'QueriesApi-getQueries',
57
+ 'QueriesApi-getQuery',
58
+ ];
59
+
60
+ for (const operation of operations) {
61
+ const config = defaultRateLimitFetcher.getLimit(operation);
62
+ this.#defaultRateLimiterMap.set(operation, new SuperagentRateLimiter(config));
63
+ }
64
+ }
65
+
66
+ /**
67
+ * Get rate limiter for a specific operation
68
+ * @param {String} operation name
69
+ */
70
+ getRateLimiter(operation) {
71
+ return this.#defaultRateLimiterMap.get(operation);
38
72
  }
39
73
 
40
74
 
@@ -70,7 +104,7 @@ export class QueriesApi {
70
104
  return this.apiClient.callApi( 'QueriesApi-cancelQuery',
71
105
  '/dataKiosk/2023-11-15/queries/{queryId}', 'DELETE',
72
106
  pathParams, queryParams, headerParams, formParams, postBody,
73
- contentTypes, accepts, returnType
107
+ contentTypes, accepts, returnType, this.getRateLimiter('QueriesApi-cancelQuery')
74
108
  );
75
109
  }
76
110
 
@@ -117,7 +151,7 @@ export class QueriesApi {
117
151
  return this.apiClient.callApi( 'QueriesApi-createQuery',
118
152
  '/dataKiosk/2023-11-15/queries', 'POST',
119
153
  pathParams, queryParams, headerParams, formParams, postBody,
120
- contentTypes, accepts, returnType
154
+ contentTypes, accepts, returnType, this.getRateLimiter('QueriesApi-createQuery')
121
155
  );
122
156
  }
123
157
 
@@ -165,7 +199,7 @@ export class QueriesApi {
165
199
  return this.apiClient.callApi( 'QueriesApi-getDocument',
166
200
  '/dataKiosk/2023-11-15/documents/{documentId}', 'GET',
167
201
  pathParams, queryParams, headerParams, formParams, postBody,
168
- contentTypes, accepts, returnType
202
+ contentTypes, accepts, returnType, this.getRateLimiter('QueriesApi-getDocument')
169
203
  );
170
204
  }
171
205
 
@@ -218,7 +252,7 @@ export class QueriesApi {
218
252
  return this.apiClient.callApi( 'QueriesApi-getQueries',
219
253
  '/dataKiosk/2023-11-15/queries', 'GET',
220
254
  pathParams, queryParams, headerParams, formParams, postBody,
221
- contentTypes, accepts, returnType
255
+ contentTypes, accepts, returnType, this.getRateLimiter('QueriesApi-getQueries')
222
256
  );
223
257
  }
224
258
 
@@ -271,7 +305,7 @@ export class QueriesApi {
271
305
  return this.apiClient.callApi( 'QueriesApi-getQuery',
272
306
  '/dataKiosk/2023-11-15/queries/{queryId}', 'GET',
273
307
  pathParams, queryParams, headerParams, formParams, postBody,
274
- contentTypes, accepts, returnType
308
+ contentTypes, accepts, returnType, this.getRateLimiter('QueriesApi-getQuery')
275
309
  );
276
310
  }
277
311
 
@@ -11,12 +11,11 @@
11
11
  *
12
12
  */
13
13
 
14
- import superagent from "superagent";
15
- import querystring from "querystring";
16
- import { URL } from 'node:url';
17
- import { RateLimitConfiguration } from "../../helper/RateLimitConfiguration.mjs";
18
- import { SuperagentRateLimiter } from "../../helper/SuperagentRateLimiter.mjs";
19
- import { DefaultRateLimitFetcher } from "../../helper/DefaultRateLimitFetcher.mjs";
14
+ import superagent from 'superagent';
15
+ import querystring from 'querystring';
16
+ import {URL} from 'node:url';
17
+ import {RateLimitConfiguration} from '../../helper/RateLimitConfiguration.mjs';
18
+ import {SuperagentRateLimiter} from '../../helper/SuperagentRateLimiter.mjs';
20
19
 
21
20
  /**
22
21
  * @module easyship_v2022_03_23/ApiClient
@@ -193,9 +192,8 @@ export class ApiClient {
193
192
  #tokenForApiCall = null;
194
193
  #lwaClient = null;
195
194
  #rdtClient = null;
196
- #defaultRateLimitFetcher = null;
197
- #customizedRateLimiter = null;
198
- #useDefaultRateLimiter = false;
195
+ #customizedRateLimiterMap = null;
196
+ #useRateLimiter = true;
199
197
 
200
198
  /**
201
199
  * Constructs a new ApiClient.
@@ -259,42 +257,54 @@ export class ApiClient {
259
257
  * Allow user to override superagent agent
260
258
  */
261
259
  this.requestAgent = null;
260
+
261
+ /*
262
+ * Initialize customized rate limiter map
263
+ */
264
+ this.#customizedRateLimiterMap = new Map();
262
265
  }
263
266
 
264
267
  /**
265
- * Initialize #defaultRateLimitFetcher
268
+ * Set customized rate limiter for one operation
269
+ * For operations that customized rate limiter are not set
270
+ * Will use default rate limiter
271
+ * @param {String} operationName
272
+ * @param {RateLimitConfiguration} config
266
273
  */
267
- async initializeDefaultRateLimit() {
268
- try {
269
- this.#defaultRateLimitFetcher = await DefaultRateLimitFetcher.getInstance();
270
- } catch (err) {
271
- throw new Error('Error reading default rate limit:', err);
272
- }
274
+ setCustomizedRateLimiterForOperation(operationName, config) {
275
+ this.#customizedRateLimiterMap.set(operationName, new SuperagentRateLimiter(config));
273
276
  }
274
277
 
275
278
  /**
276
- * Enable default rate limiter
279
+ * Disable customized rate limiter for one operation
280
+ * Fall back to default rate limiter
281
+ * @param {String} operationName
277
282
  */
278
- enableDefaultRateLimiter() {
279
- this.#useDefaultRateLimiter = true;
280
- this.#customizedRateLimiter = null;
283
+ disableCustomizedRatelimiterForOperation(operationName) {
284
+ this.#customizedRateLimiterMap.delete(operationName);
281
285
  }
282
286
 
283
287
  /**
284
- * Set customized rate limiter
285
- * @param {RateLimitConfiguration} config
288
+ * Clear customized rate limiter for all operations
289
+ * All operations will fall back to default rate limiter
290
+ * @param {String} operationName
291
+ */
292
+ disableCustomizedRatelimiterForAll() {
293
+ this.#customizedRateLimiterMap.clear();
294
+ }
295
+
296
+ /**
297
+ * Disable both default and customized rate limiter for all operations
286
298
  */
287
- enableCustomizedRateLimiter(config) {
288
- this.#customizedRateLimiter = new SuperagentRateLimiter(config);
289
- this.#useDefaultRateLimiter = false;
299
+ disableRateLimiter() {
300
+ this.#useRateLimiter = false;
290
301
  }
291
302
 
292
303
  /**
293
- * Disable both customized and default rate limiter
304
+ * Enable default or customized rate limiter for all operations
294
305
  */
295
- disableRatelimiter() {
296
- this.#customizedRateLimiter = null;
297
- this.defaultRateLimiter = false;
306
+ enableRateLimiter() {
307
+ this.#useRateLimiter = true;
298
308
  }
299
309
 
300
310
  /**
@@ -597,11 +607,12 @@ export class ApiClient {
597
607
  * @param {Array<String>} accepts An array of acceptable response MIME types.
598
608
  * @param {(String|Array|ObjectFunction)} returnType The required type to return; can be a string for simple types or the
599
609
  * constructor for a complex type.
610
+ * @param {SuperagentRateLimiter} defaultRateLimiter The default rate limiter.
600
611
  * @returns {Promise} A {@link https://www.promisejs.org/|Promise} object.
601
612
  */
602
613
  async callApi(operation, path, httpMethod, pathParams,
603
614
  queryParams, headerParams, formParams, bodyParam, contentTypes, accepts,
604
- returnType) {
615
+ returnType, defaultRateLimiter) {
605
616
 
606
617
  var url = this.buildUrl(path, pathParams);
607
618
  var request = superagent(httpMethod, url);
@@ -609,15 +620,14 @@ export class ApiClient {
609
620
  throw new Error('none of accessToken, RDT token and auto-retrieval is set.');
610
621
  }
611
622
 
612
- //Set rate limiter
613
- if (this.#useDefaultRateLimiter) {
614
- await this.initializeDefaultRateLimit();
615
- const defaultRateLimiter = new SuperagentRateLimiter(this.#defaultRateLimitFetcher.getLimit(operation));
616
- request.use(defaultRateLimiter.getPlugin());
617
- } else if (this.#customizedRateLimiter) {
618
- request.use(this.#customizedRateLimiter.getPlugin());
623
+ if (this.#useRateLimiter) {
624
+ //Set rate limiter
625
+ if (this.#customizedRateLimiterMap.get(operation)) {
626
+ request.use(this.#customizedRateLimiterMap.get(operation).getPlugin());
627
+ } else if (defaultRateLimiter) {
628
+ request.use(defaultRateLimiter.getPlugin());
629
+ }
619
630
  }
620
-
621
631
 
622
632
  // set query parameters
623
633
  if (httpMethod.toUpperCase() === 'GET' && this.cache === false) {
@@ -11,7 +11,7 @@
11
11
  *
12
12
  */
13
13
 
14
- import {ApiClient} from "../ApiClient.js";
14
+ import {ApiClient} from '../ApiClient.js';
15
15
  import {CreateScheduledPackageRequest} from '../model/CreateScheduledPackageRequest.js';
16
16
  import {CreateScheduledPackagesRequest} from '../model/CreateScheduledPackagesRequest.js';
17
17
  import {CreateScheduledPackagesResponse} from '../model/CreateScheduledPackagesResponse.js';
@@ -21,6 +21,8 @@ import {ListHandoverSlotsResponse} from '../model/ListHandoverSlotsResponse.js';
21
21
  import {Package} from '../model/Package.js';
22
22
  import {Packages} from '../model/Packages.js';
23
23
  import {UpdateScheduledPackagesRequest} from '../model/UpdateScheduledPackagesRequest.js';
24
+ import {SuperagentRateLimiter} from '../../../helper/SuperagentRateLimiter.mjs';
25
+ import {DefaultRateLimitFetcher} from '../../../helper/DefaultRateLimitFetcher.mjs';
24
26
 
25
27
  /**
26
28
  * EasyShip service.
@@ -29,6 +31,9 @@ import {UpdateScheduledPackagesRequest} from '../model/UpdateScheduledPackagesRe
29
31
  */
30
32
  export class EasyShipApi {
31
33
 
34
+ // Private memeber stores the default rate limiters
35
+ #defaultRateLimiterMap;
36
+
32
37
  /**
33
38
  * Constructs a new EasyShipApi.
34
39
  * @alias module:easyship_v2022_03_23/api/EasyShipApi
@@ -38,6 +43,35 @@ export class EasyShipApi {
38
43
  */
39
44
  constructor(apiClient) {
40
45
  this.apiClient = apiClient || ApiClient.instance;
46
+ this.initializeDefaultRateLimiterMap();
47
+ }
48
+
49
+ /**
50
+ * Initialize rate limiters for API operations
51
+ */
52
+ initializeDefaultRateLimiterMap() {
53
+ this.#defaultRateLimiterMap = new Map()
54
+ const defaultRateLimitFetcher = new DefaultRateLimitFetcher();
55
+ const operations = [
56
+ 'EasyShipApi-createScheduledPackage',
57
+ 'EasyShipApi-createScheduledPackageBulk',
58
+ 'EasyShipApi-getScheduledPackage',
59
+ 'EasyShipApi-listHandoverSlots',
60
+ 'EasyShipApi-updateScheduledPackages',
61
+ ];
62
+
63
+ for (const operation of operations) {
64
+ const config = defaultRateLimitFetcher.getLimit(operation);
65
+ this.#defaultRateLimiterMap.set(operation, new SuperagentRateLimiter(config));
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Get rate limiter for a specific operation
71
+ * @param {String} operation name
72
+ */
73
+ getRateLimiter(operation) {
74
+ return this.#defaultRateLimiterMap.get(operation);
41
75
  }
42
76
 
43
77
 
@@ -72,7 +106,7 @@ export class EasyShipApi {
72
106
  return this.apiClient.callApi( 'EasyShipApi-createScheduledPackage',
73
107
  '/easyShip/2022-03-23/package', 'POST',
74
108
  pathParams, queryParams, headerParams, formParams, postBody,
75
- contentTypes, accepts, returnType
109
+ contentTypes, accepts, returnType, this.getRateLimiter('EasyShipApi-createScheduledPackage')
76
110
  );
77
111
  }
78
112
 
@@ -119,7 +153,7 @@ export class EasyShipApi {
119
153
  return this.apiClient.callApi( 'EasyShipApi-createScheduledPackageBulk',
120
154
  '/easyShip/2022-03-23/packages/bulk', 'POST',
121
155
  pathParams, queryParams, headerParams, formParams, postBody,
122
- contentTypes, accepts, returnType
156
+ contentTypes, accepts, returnType, this.getRateLimiter('EasyShipApi-createScheduledPackageBulk')
123
157
  );
124
158
  }
125
159
 
@@ -174,7 +208,7 @@ export class EasyShipApi {
174
208
  return this.apiClient.callApi( 'EasyShipApi-getScheduledPackage',
175
209
  '/easyShip/2022-03-23/package', 'GET',
176
210
  pathParams, queryParams, headerParams, formParams, postBody,
177
- contentTypes, accepts, returnType
211
+ contentTypes, accepts, returnType, this.getRateLimiter('EasyShipApi-getScheduledPackage')
178
212
  );
179
213
  }
180
214
 
@@ -219,7 +253,7 @@ export class EasyShipApi {
219
253
  return this.apiClient.callApi( 'EasyShipApi-listHandoverSlots',
220
254
  '/easyShip/2022-03-23/timeSlot', 'POST',
221
255
  pathParams, queryParams, headerParams, formParams, postBody,
222
- contentTypes, accepts, returnType
256
+ contentTypes, accepts, returnType, this.getRateLimiter('EasyShipApi-listHandoverSlots')
223
257
  );
224
258
  }
225
259
 
@@ -264,7 +298,7 @@ export class EasyShipApi {
264
298
  return this.apiClient.callApi( 'EasyShipApi-updateScheduledPackages',
265
299
  '/easyShip/2022-03-23/package', 'PATCH',
266
300
  pathParams, queryParams, headerParams, formParams, postBody,
267
- contentTypes, accepts, returnType
301
+ contentTypes, accepts, returnType, this.getRateLimiter('EasyShipApi-updateScheduledPackages')
268
302
  );
269
303
  }
270
304
 
@@ -11,12 +11,11 @@
11
11
  *
12
12
  */
13
13
 
14
- import superagent from "superagent";
15
- import querystring from "querystring";
16
- import { URL } from 'node:url';
17
- import { RateLimitConfiguration } from "../../helper/RateLimitConfiguration.mjs";
18
- import { SuperagentRateLimiter } from "../../helper/SuperagentRateLimiter.mjs";
19
- import { DefaultRateLimitFetcher } from "../../helper/DefaultRateLimitFetcher.mjs";
14
+ import superagent from 'superagent';
15
+ import querystring from 'querystring';
16
+ import {URL} from 'node:url';
17
+ import {RateLimitConfiguration} from '../../helper/RateLimitConfiguration.mjs';
18
+ import {SuperagentRateLimiter} from '../../helper/SuperagentRateLimiter.mjs';
20
19
 
21
20
  /**
22
21
  * @module fbaeligibility_v1/ApiClient
@@ -193,9 +192,8 @@ export class ApiClient {
193
192
  #tokenForApiCall = null;
194
193
  #lwaClient = null;
195
194
  #rdtClient = null;
196
- #defaultRateLimitFetcher = null;
197
- #customizedRateLimiter = null;
198
- #useDefaultRateLimiter = false;
195
+ #customizedRateLimiterMap = null;
196
+ #useRateLimiter = true;
199
197
 
200
198
  /**
201
199
  * Constructs a new ApiClient.
@@ -259,42 +257,54 @@ export class ApiClient {
259
257
  * Allow user to override superagent agent
260
258
  */
261
259
  this.requestAgent = null;
260
+
261
+ /*
262
+ * Initialize customized rate limiter map
263
+ */
264
+ this.#customizedRateLimiterMap = new Map();
262
265
  }
263
266
 
264
267
  /**
265
- * Initialize #defaultRateLimitFetcher
268
+ * Set customized rate limiter for one operation
269
+ * For operations that customized rate limiter are not set
270
+ * Will use default rate limiter
271
+ * @param {String} operationName
272
+ * @param {RateLimitConfiguration} config
266
273
  */
267
- async initializeDefaultRateLimit() {
268
- try {
269
- this.#defaultRateLimitFetcher = await DefaultRateLimitFetcher.getInstance();
270
- } catch (err) {
271
- throw new Error('Error reading default rate limit:', err);
272
- }
274
+ setCustomizedRateLimiterForOperation(operationName, config) {
275
+ this.#customizedRateLimiterMap.set(operationName, new SuperagentRateLimiter(config));
273
276
  }
274
277
 
275
278
  /**
276
- * Enable default rate limiter
279
+ * Disable customized rate limiter for one operation
280
+ * Fall back to default rate limiter
281
+ * @param {String} operationName
277
282
  */
278
- enableDefaultRateLimiter() {
279
- this.#useDefaultRateLimiter = true;
280
- this.#customizedRateLimiter = null;
283
+ disableCustomizedRatelimiterForOperation(operationName) {
284
+ this.#customizedRateLimiterMap.delete(operationName);
281
285
  }
282
286
 
283
287
  /**
284
- * Set customized rate limiter
285
- * @param {RateLimitConfiguration} config
288
+ * Clear customized rate limiter for all operations
289
+ * All operations will fall back to default rate limiter
290
+ * @param {String} operationName
291
+ */
292
+ disableCustomizedRatelimiterForAll() {
293
+ this.#customizedRateLimiterMap.clear();
294
+ }
295
+
296
+ /**
297
+ * Disable both default and customized rate limiter for all operations
286
298
  */
287
- enableCustomizedRateLimiter(config) {
288
- this.#customizedRateLimiter = new SuperagentRateLimiter(config);
289
- this.#useDefaultRateLimiter = false;
299
+ disableRateLimiter() {
300
+ this.#useRateLimiter = false;
290
301
  }
291
302
 
292
303
  /**
293
- * Disable both customized and default rate limiter
304
+ * Enable default or customized rate limiter for all operations
294
305
  */
295
- disableRatelimiter() {
296
- this.#customizedRateLimiter = null;
297
- this.defaultRateLimiter = false;
306
+ enableRateLimiter() {
307
+ this.#useRateLimiter = true;
298
308
  }
299
309
 
300
310
  /**
@@ -597,11 +607,12 @@ export class ApiClient {
597
607
  * @param {Array<String>} accepts An array of acceptable response MIME types.
598
608
  * @param {(String|Array|ObjectFunction)} returnType The required type to return; can be a string for simple types or the
599
609
  * constructor for a complex type.
610
+ * @param {SuperagentRateLimiter} defaultRateLimiter The default rate limiter.
600
611
  * @returns {Promise} A {@link https://www.promisejs.org/|Promise} object.
601
612
  */
602
613
  async callApi(operation, path, httpMethod, pathParams,
603
614
  queryParams, headerParams, formParams, bodyParam, contentTypes, accepts,
604
- returnType) {
615
+ returnType, defaultRateLimiter) {
605
616
 
606
617
  var url = this.buildUrl(path, pathParams);
607
618
  var request = superagent(httpMethod, url);
@@ -609,15 +620,14 @@ export class ApiClient {
609
620
  throw new Error('none of accessToken, RDT token and auto-retrieval is set.');
610
621
  }
611
622
 
612
- //Set rate limiter
613
- if (this.#useDefaultRateLimiter) {
614
- await this.initializeDefaultRateLimit();
615
- const defaultRateLimiter = new SuperagentRateLimiter(this.#defaultRateLimitFetcher.getLimit(operation));
616
- request.use(defaultRateLimiter.getPlugin());
617
- } else if (this.#customizedRateLimiter) {
618
- request.use(this.#customizedRateLimiter.getPlugin());
623
+ if (this.#useRateLimiter) {
624
+ //Set rate limiter
625
+ if (this.#customizedRateLimiterMap.get(operation)) {
626
+ request.use(this.#customizedRateLimiterMap.get(operation).getPlugin());
627
+ } else if (defaultRateLimiter) {
628
+ request.use(defaultRateLimiter.getPlugin());
629
+ }
619
630
  }
620
-
621
631
 
622
632
  // set query parameters
623
633
  if (httpMethod.toUpperCase() === 'GET' && this.cache === false) {
@@ -11,8 +11,10 @@
11
11
  *
12
12
  */
13
13
 
14
- import {ApiClient} from "../ApiClient.js";
14
+ import {ApiClient} from '../ApiClient.js';
15
15
  import {GetItemEligibilityPreviewResponse} from '../model/GetItemEligibilityPreviewResponse.js';
16
+ import {SuperagentRateLimiter} from '../../../helper/SuperagentRateLimiter.mjs';
17
+ import {DefaultRateLimitFetcher} from '../../../helper/DefaultRateLimitFetcher.mjs';
16
18
 
17
19
  /**
18
20
  * FbaInbound service.
@@ -21,6 +23,9 @@ import {GetItemEligibilityPreviewResponse} from '../model/GetItemEligibilityPrev
21
23
  */
22
24
  export class FbaInboundApi {
23
25
 
26
+ // Private memeber stores the default rate limiters
27
+ #defaultRateLimiterMap;
28
+
24
29
  /**
25
30
  * Constructs a new FbaInboundApi.
26
31
  * @alias module:fbaeligibility_v1/api/FbaInboundApi
@@ -30,6 +35,31 @@ export class FbaInboundApi {
30
35
  */
31
36
  constructor(apiClient) {
32
37
  this.apiClient = apiClient || ApiClient.instance;
38
+ this.initializeDefaultRateLimiterMap();
39
+ }
40
+
41
+ /**
42
+ * Initialize rate limiters for API operations
43
+ */
44
+ initializeDefaultRateLimiterMap() {
45
+ this.#defaultRateLimiterMap = new Map()
46
+ const defaultRateLimitFetcher = new DefaultRateLimitFetcher();
47
+ const operations = [
48
+ 'FbaInboundApi-getItemEligibilityPreview',
49
+ ];
50
+
51
+ for (const operation of operations) {
52
+ const config = defaultRateLimitFetcher.getLimit(operation);
53
+ this.#defaultRateLimiterMap.set(operation, new SuperagentRateLimiter(config));
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Get rate limiter for a specific operation
59
+ * @param {String} operation name
60
+ */
61
+ getRateLimiter(operation) {
62
+ return this.#defaultRateLimiterMap.get(operation);
33
63
  }
34
64
 
35
65
 
@@ -76,7 +106,7 @@ export class FbaInboundApi {
76
106
  return this.apiClient.callApi( 'FbaInboundApi-getItemEligibilityPreview',
77
107
  '/fba/inbound/v1/eligibility/itemPreview', 'GET',
78
108
  pathParams, queryParams, headerParams, formParams, postBody,
79
- contentTypes, accepts, returnType
109
+ contentTypes, accepts, returnType, this.getRateLimiter('FbaInboundApi-getItemEligibilityPreview')
80
110
  );
81
111
  }
82
112