@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.
- package/README.md +1 -1
- package/helper/DefaultRateLimitFetcher.mjs +2 -35
- package/helper/DefaultRateLimitMap.mjs +266 -0
- package/helper/SuperagentRateLimiter.mjs +26 -14
- package/package.json +1 -1
- package/sample-node-app/index.js +27 -13
- package/src/apluscontent_v2020_11_01/ApiClient.js +48 -38
- package/src/apluscontent_v2020_11_01/api/AplusContentApi.js +50 -11
- package/src/appintegrations_v2024_04_01/ApiClient.js +48 -38
- package/src/appintegrations_v2024_04_01/api/AppIntegrationsApi.js +36 -4
- package/src/applications_v2023_11_30/ApiClient.js +48 -38
- package/src/applications_v2023_11_30/api/ApplicationsApi.js +32 -2
- package/src/awd_v2024_05_09/ApiClient.js +48 -38
- package/src/awd_v2024_05_09/api/AwdApi.js +52 -12
- package/src/catalogitems_v2022_04_01/ApiClient.js +48 -38
- package/src/catalogitems_v2022_04_01/api/CatalogApi.js +34 -3
- package/src/datakiosk_v2023_11_15/ApiClient.js +48 -38
- package/src/datakiosk_v2023_11_15/api/QueriesApi.js +40 -6
- package/src/easyship_v2022_03_23/ApiClient.js +48 -38
- package/src/easyship_v2022_03_23/api/EasyShipApi.js +40 -6
- package/src/fbaeligibility_v1/ApiClient.js +48 -38
- package/src/fbaeligibility_v1/api/FbaInboundApi.js +32 -2
- package/src/fbainventory_v1/ApiClient.js +48 -38
- package/src/fbainventory_v1/api/FbaInventoryApi.js +38 -5
- package/src/feeds_v2021_06_30/ApiClient.js +48 -38
- package/src/feeds_v2021_06_30/api/FeedsApi.js +42 -7
- package/src/finances_2024_06_19/ApiClient.js +48 -38
- package/src/finances_2024_06_19/api/DefaultApi.js +32 -2
- package/src/finances_v0/ApiClient.js +48 -38
- package/src/finances_v0/api/DefaultApi.js +38 -5
- package/src/fulfillmentinbound_v0/ApiClient.js +48 -38
- package/src/fulfillmentinbound_v0/api/FbaInboundApi.js +42 -7
- package/src/fulfillmentinbound_v2024_03_20/ApiClient.js +48 -38
- package/src/fulfillmentinbound_v2024_03_20/api/FbaInboundApi.js +120 -46
- package/src/fulfillmentoutbound_v2020_07_01/ApiClient.js +48 -38
- package/src/fulfillmentoutbound_v2020_07_01/api/FbaOutboundApi.js +58 -15
- package/src/invoices_v2024_06_19/ApiClient.js +48 -38
- package/src/invoices_v2024_06_19/api/InvoicesApi.js +44 -8
- package/src/invoicing_v0/ApiClient.js +48 -38
- package/src/invoicing_v0/api/ShipmentInvoiceApi.js +36 -4
- package/src/listingsitems_v2021_08_01/ApiClient.js +48 -38
- package/src/listingsitems_v2021_08_01/api/ListingsApi.js +40 -6
- package/src/listingsrestrictions_v2021_08_01/ApiClient.js +48 -38
- package/src/listingsrestrictions_v2021_08_01/api/ListingsApi.js +32 -2
- package/src/merchantfulfillment_v0/ApiClient.js +48 -38
- package/src/merchantfulfillment_v0/api/MerchantFulfillmentApi.js +40 -6
- package/src/messaging_v1/ApiClient.js +48 -38
- package/src/messaging_v1/api/MessagingApi.js +56 -14
- package/src/notifications_v1/ApiClient.js +48 -38
- package/src/notifications_v1/api/NotificationsApi.js +46 -9
- package/src/orders_v0/ApiClient.js +48 -38
- package/src/orders_v0/api/OrdersV0Api.js +48 -10
- package/src/orders_v0/api/ShipmentApi.js +32 -2
- package/src/pricing_v0/ApiClient.js +48 -38
- package/src/pricing_v0/api/ProductPricingApi.js +42 -7
- package/src/pricing_v2022_05_01/ApiClient.js +48 -38
- package/src/pricing_v2022_05_01/api/ProductPricingApi.js +34 -3
- package/src/productfees_v0/ApiClient.js +48 -38
- package/src/productfees_v0/api/FeesApi.js +36 -4
- package/src/producttypedefinitions_v2020_09_01/ApiClient.js +48 -38
- package/src/producttypedefinitions_v2020_09_01/api/DefinitionsApi.js +34 -3
- package/src/replenishment_v2022_11_07/ApiClient.js +48 -38
- package/src/replenishment_v2022_11_07/api/OffersApi.js +34 -3
- package/src/replenishment_v2022_11_07/api/SellingpartnersApi.js +32 -2
- package/src/reports_v2021_06_30/ApiClient.js +48 -38
- package/src/reports_v2021_06_30/api/ReportsApi.js +48 -10
- package/src/sales_v1/ApiClient.js +48 -38
- package/src/sales_v1/api/SalesApi.js +32 -2
- package/src/sellers_v1/ApiClient.js +48 -38
- package/src/sellers_v1/api/SellersApi.js +34 -3
- package/src/services_v1/ApiClient.js +48 -38
- package/src/services_v1/api/ServiceApi.js +64 -18
- package/src/shipping_v2/ApiClient.js +48 -38
- package/src/shipping_v2/api/ShippingApi.js +70 -21
- package/src/solicitations_v1/ApiClient.js +48 -38
- package/src/solicitations_v1/api/SolicitationsApi.js +34 -3
- package/src/supplysources_v2020_07_01/ApiClient.js +48 -38
- package/src/supplysources_v2020_07_01/api/SupplySourcesApi.js +42 -7
- package/src/tokens_v2021_03_01/ApiClient.js +48 -38
- package/src/tokens_v2021_03_01/api/TokensApi.js +32 -2
- package/src/transfers_v2024_06_01/ApiClient.js +48 -38
- package/src/transfers_v2024_06_01/api/DefaultApi.js +34 -3
- package/src/uploads_v2020_11_01/ApiClient.js +48 -38
- package/src/uploads_v2020_11_01/api/UploadsApi.js +32 -2
- package/src/vehicles_v2024_11_01/ApiClient.js +48 -38
- package/src/vehicles_v2024_11_01/api/AutomotiveApi.js +32 -2
- package/src/vehicles_v2024_11_01/api/VehiclesApi.js +32 -2
- package/src/vendordfinventory_v1/ApiClient.js +48 -38
- package/src/vendordfinventory_v1/api/UpdateInventoryApi.js +32 -2
- package/src/vendordforders_v2021_12_28/ApiClient.js +48 -38
- package/src/vendordforders_v2021_12_28/api/VendorOrdersApi.js +36 -4
- package/src/vendordfpayments_v1/ApiClient.js +48 -38
- package/src/vendordfpayments_v1/api/VendorInvoiceApi.js +32 -2
- package/src/vendordfshipping_v2021_12_28/ApiClient.js +48 -38
- package/src/vendordfshipping_v2021_12_28/api/CreateContainerLabelApi.js +32 -2
- package/src/vendordfshipping_v2021_12_28/api/CustomerInvoicesApi.js +34 -3
- package/src/vendordfshipping_v2021_12_28/api/VendorShippingApi.js +38 -5
- package/src/vendordfshipping_v2021_12_28/api/VendorShippingLabelsApi.js +38 -5
- package/src/vendordftransactions_v2021_12_28/ApiClient.js +48 -38
- package/src/vendordftransactions_v2021_12_28/api/VendorTransactionApi.js +32 -2
- package/src/vendorinvoices_v1/ApiClient.js +48 -38
- package/src/vendorinvoices_v1/api/VendorPaymentsApi.js +32 -2
- package/src/vendororders_v1/ApiClient.js +48 -38
- package/src/vendororders_v1/api/VendorOrdersApi.js +38 -5
- package/src/vendorshipments_v1/ApiClient.js +48 -38
- package/src/vendorshipments_v1/api/VendorShippingApi.js +38 -5
- package/src/vendortransactionstatus_v1/ApiClient.js +48 -38
- package/src/vendortransactionstatus_v1/api/VendorTransactionApi.js +32 -2
- package/helper/rate-limits.yml +0 -874
|
@@ -11,13 +11,15 @@
|
|
|
11
11
|
*
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import {ApiClient} from
|
|
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
|
|
15
|
-
import querystring from
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
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
|
-
#
|
|
197
|
-
#
|
|
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
|
-
*
|
|
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
|
-
|
|
268
|
-
|
|
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
|
-
*
|
|
279
|
+
* Disable customized rate limiter for one operation
|
|
280
|
+
* Fall back to default rate limiter
|
|
281
|
+
* @param {String} operationName
|
|
277
282
|
*/
|
|
278
|
-
|
|
279
|
-
this.#
|
|
280
|
-
this.#customizedRateLimiter = null;
|
|
283
|
+
disableCustomizedRatelimiterForOperation(operationName) {
|
|
284
|
+
this.#customizedRateLimiterMap.delete(operationName);
|
|
281
285
|
}
|
|
282
286
|
|
|
283
287
|
/**
|
|
284
|
-
*
|
|
285
|
-
*
|
|
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
|
-
|
|
288
|
-
this.#
|
|
289
|
-
this.#useDefaultRateLimiter = false;
|
|
299
|
+
disableRateLimiter() {
|
|
300
|
+
this.#useRateLimiter = false;
|
|
290
301
|
}
|
|
291
302
|
|
|
292
303
|
/**
|
|
293
|
-
*
|
|
304
|
+
* Enable default or customized rate limiter for all operations
|
|
294
305
|
*/
|
|
295
|
-
|
|
296
|
-
this.#
|
|
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
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
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
|
|
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
|
|
15
|
-
import querystring from
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
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
|
-
#
|
|
197
|
-
#
|
|
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
|
-
*
|
|
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
|
-
|
|
268
|
-
|
|
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
|
-
*
|
|
279
|
+
* Disable customized rate limiter for one operation
|
|
280
|
+
* Fall back to default rate limiter
|
|
281
|
+
* @param {String} operationName
|
|
277
282
|
*/
|
|
278
|
-
|
|
279
|
-
this.#
|
|
280
|
-
this.#customizedRateLimiter = null;
|
|
283
|
+
disableCustomizedRatelimiterForOperation(operationName) {
|
|
284
|
+
this.#customizedRateLimiterMap.delete(operationName);
|
|
281
285
|
}
|
|
282
286
|
|
|
283
287
|
/**
|
|
284
|
-
*
|
|
285
|
-
*
|
|
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
|
-
|
|
288
|
-
this.#
|
|
289
|
-
this.#useDefaultRateLimiter = false;
|
|
299
|
+
disableRateLimiter() {
|
|
300
|
+
this.#useRateLimiter = false;
|
|
290
301
|
}
|
|
291
302
|
|
|
292
303
|
/**
|
|
293
|
-
*
|
|
304
|
+
* Enable default or customized rate limiter for all operations
|
|
294
305
|
*/
|
|
295
|
-
|
|
296
|
-
this.#
|
|
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
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
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
|
|
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
|
|