@amazon-sp-api-release/amazon-sp-api-sdk-js 1.0.0-rc7 → 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 +104 -0
  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,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 merchantfulfillment_v0/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 {CancelShipmentResponse} from '../model/CancelShipmentResponse.js';
16
16
  import {CreateShipmentRequest} from '../model/CreateShipmentRequest.js';
17
17
  import {CreateShipmentResponse} from '../model/CreateShipmentResponse.js';
@@ -20,6 +20,8 @@ import {GetAdditionalSellerInputsResponse} from '../model/GetAdditionalSellerInp
20
20
  import {GetEligibleShipmentServicesRequest} from '../model/GetEligibleShipmentServicesRequest.js';
21
21
  import {GetEligibleShipmentServicesResponse} from '../model/GetEligibleShipmentServicesResponse.js';
22
22
  import {GetShipmentResponse} from '../model/GetShipmentResponse.js';
23
+ import {SuperagentRateLimiter} from '../../../helper/SuperagentRateLimiter.mjs';
24
+ import {DefaultRateLimitFetcher} from '../../../helper/DefaultRateLimitFetcher.mjs';
23
25
 
24
26
  /**
25
27
  * MerchantFulfillment service.
@@ -28,6 +30,9 @@ import {GetShipmentResponse} from '../model/GetShipmentResponse.js';
28
30
  */
29
31
  export class MerchantFulfillmentApi {
30
32
 
33
+ // Private memeber stores the default rate limiters
34
+ #defaultRateLimiterMap;
35
+
31
36
  /**
32
37
  * Constructs a new MerchantFulfillmentApi.
33
38
  * @alias module:merchantfulfillment_v0/api/MerchantFulfillmentApi
@@ -37,6 +42,35 @@ export class MerchantFulfillmentApi {
37
42
  */
38
43
  constructor(apiClient) {
39
44
  this.apiClient = apiClient || ApiClient.instance;
45
+ this.initializeDefaultRateLimiterMap();
46
+ }
47
+
48
+ /**
49
+ * Initialize rate limiters for API operations
50
+ */
51
+ initializeDefaultRateLimiterMap() {
52
+ this.#defaultRateLimiterMap = new Map()
53
+ const defaultRateLimitFetcher = new DefaultRateLimitFetcher();
54
+ const operations = [
55
+ 'MerchantFulfillmentApi-cancelShipment',
56
+ 'MerchantFulfillmentApi-createShipment',
57
+ 'MerchantFulfillmentApi-getAdditionalSellerInputs',
58
+ 'MerchantFulfillmentApi-getEligibleShipmentServices',
59
+ 'MerchantFulfillmentApi-getShipment',
60
+ ];
61
+
62
+ for (const operation of operations) {
63
+ const config = defaultRateLimitFetcher.getLimit(operation);
64
+ this.#defaultRateLimiterMap.set(operation, new SuperagentRateLimiter(config));
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Get rate limiter for a specific operation
70
+ * @param {String} operation name
71
+ */
72
+ getRateLimiter(operation) {
73
+ return this.#defaultRateLimiterMap.get(operation);
40
74
  }
41
75
 
42
76
 
@@ -72,7 +106,7 @@ export class MerchantFulfillmentApi {
72
106
  return this.apiClient.callApi( 'MerchantFulfillmentApi-cancelShipment',
73
107
  '/mfn/v0/shipments/{shipmentId}', 'DELETE',
74
108
  pathParams, queryParams, headerParams, formParams, postBody,
75
- contentTypes, accepts, returnType
109
+ contentTypes, accepts, returnType, this.getRateLimiter('MerchantFulfillmentApi-cancelShipment')
76
110
  );
77
111
  }
78
112
 
@@ -119,7 +153,7 @@ export class MerchantFulfillmentApi {
119
153
  return this.apiClient.callApi( 'MerchantFulfillmentApi-createShipment',
120
154
  '/mfn/v0/shipments', 'POST',
121
155
  pathParams, queryParams, headerParams, formParams, postBody,
122
- contentTypes, accepts, returnType
156
+ contentTypes, accepts, returnType, this.getRateLimiter('MerchantFulfillmentApi-createShipment')
123
157
  );
124
158
  }
125
159
 
@@ -166,7 +200,7 @@ export class MerchantFulfillmentApi {
166
200
  return this.apiClient.callApi( 'MerchantFulfillmentApi-getAdditionalSellerInputs',
167
201
  '/mfn/v0/additionalSellerInputs', 'POST',
168
202
  pathParams, queryParams, headerParams, formParams, postBody,
169
- contentTypes, accepts, returnType
203
+ contentTypes, accepts, returnType, this.getRateLimiter('MerchantFulfillmentApi-getAdditionalSellerInputs')
170
204
  );
171
205
  }
172
206
 
@@ -213,7 +247,7 @@ export class MerchantFulfillmentApi {
213
247
  return this.apiClient.callApi( 'MerchantFulfillmentApi-getEligibleShipmentServices',
214
248
  '/mfn/v0/eligibleShippingServices', 'POST',
215
249
  pathParams, queryParams, headerParams, formParams, postBody,
216
- contentTypes, accepts, returnType
250
+ contentTypes, accepts, returnType, this.getRateLimiter('MerchantFulfillmentApi-getEligibleShipmentServices')
217
251
  );
218
252
  }
219
253
 
@@ -261,7 +295,7 @@ export class MerchantFulfillmentApi {
261
295
  return this.apiClient.callApi( 'MerchantFulfillmentApi-getShipment',
262
296
  '/mfn/v0/shipments/{shipmentId}', 'GET',
263
297
  pathParams, queryParams, headerParams, formParams, postBody,
264
- contentTypes, accepts, returnType
298
+ contentTypes, accepts, returnType, this.getRateLimiter('MerchantFulfillmentApi-getShipment')
265
299
  );
266
300
  }
267
301
 
@@ -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 messaging_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,7 +11,7 @@
11
11
  *
12
12
  */
13
13
 
14
- import {ApiClient} from "../ApiClient.js";
14
+ import {ApiClient} from '../ApiClient.js';
15
15
  import {CreateAmazonMotorsRequest} from '../model/CreateAmazonMotorsRequest.js';
16
16
  import {CreateAmazonMotorsResponse} from '../model/CreateAmazonMotorsResponse.js';
17
17
  import {CreateConfirmCustomizationDetailsRequest} from '../model/CreateConfirmCustomizationDetailsRequest.js';
@@ -35,6 +35,8 @@ import {GetAttributesResponse} from '../model/GetAttributesResponse.js';
35
35
  import {GetMessagingActionsForOrderResponse} from '../model/GetMessagingActionsForOrderResponse.js';
36
36
  import {InvoiceRequest} from '../model/InvoiceRequest.js';
37
37
  import {InvoiceResponse} from '../model/InvoiceResponse.js';
38
+ import {SuperagentRateLimiter} from '../../../helper/SuperagentRateLimiter.mjs';
39
+ import {DefaultRateLimitFetcher} from '../../../helper/DefaultRateLimitFetcher.mjs';
38
40
 
39
41
  /**
40
42
  * Messaging service.
@@ -43,6 +45,9 @@ import {InvoiceResponse} from '../model/InvoiceResponse.js';
43
45
  */
44
46
  export class MessagingApi {
45
47
 
48
+ // Private memeber stores the default rate limiters
49
+ #defaultRateLimiterMap;
50
+
46
51
  /**
47
52
  * Constructs a new MessagingApi.
48
53
  * @alias module:messaging_v1/api/MessagingApi
@@ -52,6 +57,43 @@ export class MessagingApi {
52
57
  */
53
58
  constructor(apiClient) {
54
59
  this.apiClient = apiClient || ApiClient.instance;
60
+ this.initializeDefaultRateLimiterMap();
61
+ }
62
+
63
+ /**
64
+ * Initialize rate limiters for API operations
65
+ */
66
+ initializeDefaultRateLimiterMap() {
67
+ this.#defaultRateLimiterMap = new Map()
68
+ const defaultRateLimitFetcher = new DefaultRateLimitFetcher();
69
+ const operations = [
70
+ 'MessagingApi-confirmCustomizationDetails',
71
+ 'MessagingApi-createAmazonMotors',
72
+ 'MessagingApi-createConfirmDeliveryDetails',
73
+ 'MessagingApi-createConfirmOrderDetails',
74
+ 'MessagingApi-createConfirmServiceDetails',
75
+ 'MessagingApi-createDigitalAccessKey',
76
+ 'MessagingApi-createLegalDisclosure',
77
+ 'MessagingApi-createNegativeFeedbackRemoval',
78
+ 'MessagingApi-createUnexpectedProblem',
79
+ 'MessagingApi-createWarranty',
80
+ 'MessagingApi-getAttributes',
81
+ 'MessagingApi-getMessagingActionsForOrder',
82
+ 'MessagingApi-sendInvoice',
83
+ ];
84
+
85
+ for (const operation of operations) {
86
+ const config = defaultRateLimitFetcher.getLimit(operation);
87
+ this.#defaultRateLimiterMap.set(operation, new SuperagentRateLimiter(config));
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Get rate limiter for a specific operation
93
+ * @param {String} operation name
94
+ */
95
+ getRateLimiter(operation) {
96
+ return this.#defaultRateLimiterMap.get(operation);
55
97
  }
56
98
 
57
99
 
@@ -100,7 +142,7 @@ export class MessagingApi {
100
142
  return this.apiClient.callApi( 'MessagingApi-confirmCustomizationDetails',
101
143
  '/messaging/v1/orders/{amazonOrderId}/messages/confirmCustomizationDetails', 'POST',
102
144
  pathParams, queryParams, headerParams, formParams, postBody,
103
- contentTypes, accepts, returnType
145
+ contentTypes, accepts, returnType, this.getRateLimiter('MessagingApi-confirmCustomizationDetails')
104
146
  );
105
147
  }
106
148
 
@@ -163,7 +205,7 @@ export class MessagingApi {
163
205
  return this.apiClient.callApi( 'MessagingApi-createAmazonMotors',
164
206
  '/messaging/v1/orders/{amazonOrderId}/messages/amazonMotors', 'POST',
165
207
  pathParams, queryParams, headerParams, formParams, postBody,
166
- contentTypes, accepts, returnType
208
+ contentTypes, accepts, returnType, this.getRateLimiter('MessagingApi-createAmazonMotors')
167
209
  );
168
210
  }
169
211
 
@@ -226,7 +268,7 @@ export class MessagingApi {
226
268
  return this.apiClient.callApi( 'MessagingApi-createConfirmDeliveryDetails',
227
269
  '/messaging/v1/orders/{amazonOrderId}/messages/confirmDeliveryDetails', 'POST',
228
270
  pathParams, queryParams, headerParams, formParams, postBody,
229
- contentTypes, accepts, returnType
271
+ contentTypes, accepts, returnType, this.getRateLimiter('MessagingApi-createConfirmDeliveryDetails')
230
272
  );
231
273
  }
232
274
 
@@ -289,7 +331,7 @@ export class MessagingApi {
289
331
  return this.apiClient.callApi( 'MessagingApi-createConfirmOrderDetails',
290
332
  '/messaging/v1/orders/{amazonOrderId}/messages/confirmOrderDetails', 'POST',
291
333
  pathParams, queryParams, headerParams, formParams, postBody,
292
- contentTypes, accepts, returnType
334
+ contentTypes, accepts, returnType, this.getRateLimiter('MessagingApi-createConfirmOrderDetails')
293
335
  );
294
336
  }
295
337
 
@@ -352,7 +394,7 @@ export class MessagingApi {
352
394
  return this.apiClient.callApi( 'MessagingApi-createConfirmServiceDetails',
353
395
  '/messaging/v1/orders/{amazonOrderId}/messages/confirmServiceDetails', 'POST',
354
396
  pathParams, queryParams, headerParams, formParams, postBody,
355
- contentTypes, accepts, returnType
397
+ contentTypes, accepts, returnType, this.getRateLimiter('MessagingApi-createConfirmServiceDetails')
356
398
  );
357
399
  }
358
400
 
@@ -415,7 +457,7 @@ export class MessagingApi {
415
457
  return this.apiClient.callApi( 'MessagingApi-createDigitalAccessKey',
416
458
  '/messaging/v1/orders/{amazonOrderId}/messages/digitalAccessKey', 'POST',
417
459
  pathParams, queryParams, headerParams, formParams, postBody,
418
- contentTypes, accepts, returnType
460
+ contentTypes, accepts, returnType, this.getRateLimiter('MessagingApi-createDigitalAccessKey')
419
461
  );
420
462
  }
421
463
 
@@ -478,7 +520,7 @@ export class MessagingApi {
478
520
  return this.apiClient.callApi( 'MessagingApi-createLegalDisclosure',
479
521
  '/messaging/v1/orders/{amazonOrderId}/messages/legalDisclosure', 'POST',
480
522
  pathParams, queryParams, headerParams, formParams, postBody,
481
- contentTypes, accepts, returnType
523
+ contentTypes, accepts, returnType, this.getRateLimiter('MessagingApi-createLegalDisclosure')
482
524
  );
483
525
  }
484
526
 
@@ -535,7 +577,7 @@ export class MessagingApi {
535
577
  return this.apiClient.callApi( 'MessagingApi-createNegativeFeedbackRemoval',
536
578
  '/messaging/v1/orders/{amazonOrderId}/messages/negativeFeedbackRemoval', 'POST',
537
579
  pathParams, queryParams, headerParams, formParams, postBody,
538
- contentTypes, accepts, returnType
580
+ contentTypes, accepts, returnType, this.getRateLimiter('MessagingApi-createNegativeFeedbackRemoval')
539
581
  );
540
582
  }
541
583
 
@@ -597,7 +639,7 @@ export class MessagingApi {
597
639
  return this.apiClient.callApi( 'MessagingApi-createUnexpectedProblem',
598
640
  '/messaging/v1/orders/{amazonOrderId}/messages/unexpectedProblem', 'POST',
599
641
  pathParams, queryParams, headerParams, formParams, postBody,
600
- contentTypes, accepts, returnType
642
+ contentTypes, accepts, returnType, this.getRateLimiter('MessagingApi-createUnexpectedProblem')
601
643
  );
602
644
  }
603
645
 
@@ -660,7 +702,7 @@ export class MessagingApi {
660
702
  return this.apiClient.callApi( 'MessagingApi-createWarranty',
661
703
  '/messaging/v1/orders/{amazonOrderId}/messages/warranty', 'POST',
662
704
  pathParams, queryParams, headerParams, formParams, postBody,
663
- contentTypes, accepts, returnType
705
+ contentTypes, accepts, returnType, this.getRateLimiter('MessagingApi-createWarranty')
664
706
  );
665
707
  }
666
708
 
@@ -717,7 +759,7 @@ export class MessagingApi {
717
759
  return this.apiClient.callApi( 'MessagingApi-getAttributes',
718
760
  '/messaging/v1/orders/{amazonOrderId}/attributes', 'GET',
719
761
  pathParams, queryParams, headerParams, formParams, postBody,
720
- contentTypes, accepts, returnType
762
+ contentTypes, accepts, returnType, this.getRateLimiter('MessagingApi-getAttributes')
721
763
  );
722
764
  }
723
765
 
@@ -773,7 +815,7 @@ export class MessagingApi {
773
815
  return this.apiClient.callApi( 'MessagingApi-getMessagingActionsForOrder',
774
816
  '/messaging/v1/orders/{amazonOrderId}', 'GET',
775
817
  pathParams, queryParams, headerParams, formParams, postBody,
776
- contentTypes, accepts, returnType
818
+ contentTypes, accepts, returnType, this.getRateLimiter('MessagingApi-getMessagingActionsForOrder')
777
819
  );
778
820
  }
779
821
 
@@ -835,7 +877,7 @@ export class MessagingApi {
835
877
  return this.apiClient.callApi( 'MessagingApi-sendInvoice',
836
878
  '/messaging/v1/orders/{amazonOrderId}/messages/invoice', 'POST',
837
879
  pathParams, queryParams, headerParams, formParams, postBody,
838
- contentTypes, accepts, returnType
880
+ contentTypes, accepts, returnType, this.getRateLimiter('MessagingApi-sendInvoice')
839
881
  );
840
882
  }
841
883