@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.
- package/README.md +104 -0
- 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,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 notifications_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,7 +11,7 @@
|
|
|
11
11
|
*
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import {ApiClient} from
|
|
14
|
+
import {ApiClient} from '../ApiClient.js';
|
|
15
15
|
import {CreateDestinationRequest} from '../model/CreateDestinationRequest.js';
|
|
16
16
|
import {CreateDestinationResponse} from '../model/CreateDestinationResponse.js';
|
|
17
17
|
import {CreateSubscriptionRequest} from '../model/CreateSubscriptionRequest.js';
|
|
@@ -22,6 +22,8 @@ import {GetDestinationResponse} from '../model/GetDestinationResponse.js';
|
|
|
22
22
|
import {GetDestinationsResponse} from '../model/GetDestinationsResponse.js';
|
|
23
23
|
import {GetSubscriptionByIdResponse} from '../model/GetSubscriptionByIdResponse.js';
|
|
24
24
|
import {GetSubscriptionResponse} from '../model/GetSubscriptionResponse.js';
|
|
25
|
+
import {SuperagentRateLimiter} from '../../../helper/SuperagentRateLimiter.mjs';
|
|
26
|
+
import {DefaultRateLimitFetcher} from '../../../helper/DefaultRateLimitFetcher.mjs';
|
|
25
27
|
|
|
26
28
|
/**
|
|
27
29
|
* Notifications service.
|
|
@@ -30,6 +32,9 @@ import {GetSubscriptionResponse} from '../model/GetSubscriptionResponse.js';
|
|
|
30
32
|
*/
|
|
31
33
|
export class NotificationsApi {
|
|
32
34
|
|
|
35
|
+
// Private memeber stores the default rate limiters
|
|
36
|
+
#defaultRateLimiterMap;
|
|
37
|
+
|
|
33
38
|
/**
|
|
34
39
|
* Constructs a new NotificationsApi.
|
|
35
40
|
* @alias module:notifications_v1/api/NotificationsApi
|
|
@@ -39,6 +44,38 @@ export class NotificationsApi {
|
|
|
39
44
|
*/
|
|
40
45
|
constructor(apiClient) {
|
|
41
46
|
this.apiClient = apiClient || ApiClient.instance;
|
|
47
|
+
this.initializeDefaultRateLimiterMap();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Initialize rate limiters for API operations
|
|
52
|
+
*/
|
|
53
|
+
initializeDefaultRateLimiterMap() {
|
|
54
|
+
this.#defaultRateLimiterMap = new Map()
|
|
55
|
+
const defaultRateLimitFetcher = new DefaultRateLimitFetcher();
|
|
56
|
+
const operations = [
|
|
57
|
+
'NotificationsApi-createDestination',
|
|
58
|
+
'NotificationsApi-createSubscription',
|
|
59
|
+
'NotificationsApi-deleteDestination',
|
|
60
|
+
'NotificationsApi-deleteSubscriptionById',
|
|
61
|
+
'NotificationsApi-getDestination',
|
|
62
|
+
'NotificationsApi-getDestinations',
|
|
63
|
+
'NotificationsApi-getSubscription',
|
|
64
|
+
'NotificationsApi-getSubscriptionById',
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
for (const operation of operations) {
|
|
68
|
+
const config = defaultRateLimitFetcher.getLimit(operation);
|
|
69
|
+
this.#defaultRateLimiterMap.set(operation, new SuperagentRateLimiter(config));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Get rate limiter for a specific operation
|
|
75
|
+
* @param {String} operation name
|
|
76
|
+
*/
|
|
77
|
+
getRateLimiter(operation) {
|
|
78
|
+
return this.#defaultRateLimiterMap.get(operation);
|
|
42
79
|
}
|
|
43
80
|
|
|
44
81
|
|
|
@@ -73,7 +110,7 @@ export class NotificationsApi {
|
|
|
73
110
|
return this.apiClient.callApi( 'NotificationsApi-createDestination',
|
|
74
111
|
'/notifications/v1/destinations', 'POST',
|
|
75
112
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
76
|
-
contentTypes, accepts, returnType
|
|
113
|
+
contentTypes, accepts, returnType, this.getRateLimiter('NotificationsApi-createDestination')
|
|
77
114
|
);
|
|
78
115
|
}
|
|
79
116
|
|
|
@@ -127,7 +164,7 @@ export class NotificationsApi {
|
|
|
127
164
|
return this.apiClient.callApi( 'NotificationsApi-createSubscription',
|
|
128
165
|
'/notifications/v1/subscriptions/{notificationType}', 'POST',
|
|
129
166
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
130
|
-
contentTypes, accepts, returnType
|
|
167
|
+
contentTypes, accepts, returnType, this.getRateLimiter('NotificationsApi-createSubscription')
|
|
131
168
|
);
|
|
132
169
|
}
|
|
133
170
|
|
|
@@ -176,7 +213,7 @@ export class NotificationsApi {
|
|
|
176
213
|
return this.apiClient.callApi( 'NotificationsApi-deleteDestination',
|
|
177
214
|
'/notifications/v1/destinations/{destinationId}', 'DELETE',
|
|
178
215
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
179
|
-
contentTypes, accepts, returnType
|
|
216
|
+
contentTypes, accepts, returnType, this.getRateLimiter('NotificationsApi-deleteDestination')
|
|
180
217
|
);
|
|
181
218
|
}
|
|
182
219
|
|
|
@@ -231,7 +268,7 @@ export class NotificationsApi {
|
|
|
231
268
|
return this.apiClient.callApi( 'NotificationsApi-deleteSubscriptionById',
|
|
232
269
|
'/notifications/v1/subscriptions/{notificationType}/{subscriptionId}', 'DELETE',
|
|
233
270
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
234
|
-
contentTypes, accepts, returnType
|
|
271
|
+
contentTypes, accepts, returnType, this.getRateLimiter('NotificationsApi-deleteSubscriptionById')
|
|
235
272
|
);
|
|
236
273
|
}
|
|
237
274
|
|
|
@@ -280,7 +317,7 @@ export class NotificationsApi {
|
|
|
280
317
|
return this.apiClient.callApi( 'NotificationsApi-getDestination',
|
|
281
318
|
'/notifications/v1/destinations/{destinationId}', 'GET',
|
|
282
319
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
283
|
-
contentTypes, accepts, returnType
|
|
320
|
+
contentTypes, accepts, returnType, this.getRateLimiter('NotificationsApi-getDestination')
|
|
284
321
|
);
|
|
285
322
|
}
|
|
286
323
|
|
|
@@ -321,7 +358,7 @@ export class NotificationsApi {
|
|
|
321
358
|
return this.apiClient.callApi( 'NotificationsApi-getDestinations',
|
|
322
359
|
'/notifications/v1/destinations', 'GET',
|
|
323
360
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
324
|
-
contentTypes, accepts, returnType
|
|
361
|
+
contentTypes, accepts, returnType, this.getRateLimiter('NotificationsApi-getDestinations')
|
|
325
362
|
);
|
|
326
363
|
}
|
|
327
364
|
|
|
@@ -372,7 +409,7 @@ export class NotificationsApi {
|
|
|
372
409
|
return this.apiClient.callApi( 'NotificationsApi-getSubscription',
|
|
373
410
|
'/notifications/v1/subscriptions/{notificationType}', 'GET',
|
|
374
411
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
375
|
-
contentTypes, accepts, returnType
|
|
412
|
+
contentTypes, accepts, returnType, this.getRateLimiter('NotificationsApi-getSubscription')
|
|
376
413
|
);
|
|
377
414
|
}
|
|
378
415
|
|
|
@@ -429,7 +466,7 @@ export class NotificationsApi {
|
|
|
429
466
|
return this.apiClient.callApi( 'NotificationsApi-getSubscriptionById',
|
|
430
467
|
'/notifications/v1/subscriptions/{notificationType}/{subscriptionId}', 'GET',
|
|
431
468
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
432
|
-
contentTypes, accepts, returnType
|
|
469
|
+
contentTypes, accepts, returnType, this.getRateLimiter('NotificationsApi-getSubscriptionById')
|
|
433
470
|
);
|
|
434
471
|
}
|
|
435
472
|
|
|
@@ -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 orders_v0/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 {ConfirmShipmentErrorResponse} from '../model/ConfirmShipmentErrorResponse.js';
|
|
16
16
|
import {ConfirmShipmentRequest} from '../model/ConfirmShipmentRequest.js';
|
|
17
17
|
import {GetOrderAddressResponse} from '../model/GetOrderAddressResponse.js';
|
|
@@ -23,6 +23,8 @@ import {GetOrderResponse} from '../model/GetOrderResponse.js';
|
|
|
23
23
|
import {GetOrdersResponse} from '../model/GetOrdersResponse.js';
|
|
24
24
|
import {UpdateVerificationStatusErrorResponse} from '../model/UpdateVerificationStatusErrorResponse.js';
|
|
25
25
|
import {UpdateVerificationStatusRequest} from '../model/UpdateVerificationStatusRequest.js';
|
|
26
|
+
import {SuperagentRateLimiter} from '../../../helper/SuperagentRateLimiter.mjs';
|
|
27
|
+
import {DefaultRateLimitFetcher} from '../../../helper/DefaultRateLimitFetcher.mjs';
|
|
26
28
|
|
|
27
29
|
/**
|
|
28
30
|
* OrdersV0 service.
|
|
@@ -31,6 +33,9 @@ import {UpdateVerificationStatusRequest} from '../model/UpdateVerificationStatus
|
|
|
31
33
|
*/
|
|
32
34
|
export class OrdersV0Api {
|
|
33
35
|
|
|
36
|
+
// Private memeber stores the default rate limiters
|
|
37
|
+
#defaultRateLimiterMap;
|
|
38
|
+
|
|
34
39
|
/**
|
|
35
40
|
* Constructs a new OrdersV0Api.
|
|
36
41
|
* @alias module:orders_v0/api/OrdersV0Api
|
|
@@ -40,6 +45,39 @@ export class OrdersV0Api {
|
|
|
40
45
|
*/
|
|
41
46
|
constructor(apiClient) {
|
|
42
47
|
this.apiClient = apiClient || ApiClient.instance;
|
|
48
|
+
this.initializeDefaultRateLimiterMap();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Initialize rate limiters for API operations
|
|
53
|
+
*/
|
|
54
|
+
initializeDefaultRateLimiterMap() {
|
|
55
|
+
this.#defaultRateLimiterMap = new Map()
|
|
56
|
+
const defaultRateLimitFetcher = new DefaultRateLimitFetcher();
|
|
57
|
+
const operations = [
|
|
58
|
+
'OrdersV0Api-confirmShipment',
|
|
59
|
+
'OrdersV0Api-getOrder',
|
|
60
|
+
'OrdersV0Api-getOrderAddress',
|
|
61
|
+
'OrdersV0Api-getOrderBuyerInfo',
|
|
62
|
+
'OrdersV0Api-getOrderItems',
|
|
63
|
+
'OrdersV0Api-getOrderItemsBuyerInfo',
|
|
64
|
+
'OrdersV0Api-getOrderRegulatedInfo',
|
|
65
|
+
'OrdersV0Api-getOrders',
|
|
66
|
+
'OrdersV0Api-updateVerificationStatus',
|
|
67
|
+
];
|
|
68
|
+
|
|
69
|
+
for (const operation of operations) {
|
|
70
|
+
const config = defaultRateLimitFetcher.getLimit(operation);
|
|
71
|
+
this.#defaultRateLimiterMap.set(operation, new SuperagentRateLimiter(config));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Get rate limiter for a specific operation
|
|
77
|
+
* @param {String} operation name
|
|
78
|
+
*/
|
|
79
|
+
getRateLimiter(operation) {
|
|
80
|
+
return this.#defaultRateLimiterMap.get(operation);
|
|
43
81
|
}
|
|
44
82
|
|
|
45
83
|
|
|
@@ -81,7 +119,7 @@ export class OrdersV0Api {
|
|
|
81
119
|
return this.apiClient.callApi( 'OrdersV0Api-confirmShipment',
|
|
82
120
|
'/orders/v0/orders/{orderId}/shipmentConfirmation', 'POST',
|
|
83
121
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
84
|
-
contentTypes, accepts, returnType
|
|
122
|
+
contentTypes, accepts, returnType, this.getRateLimiter('OrdersV0Api-confirmShipment')
|
|
85
123
|
);
|
|
86
124
|
}
|
|
87
125
|
|
|
@@ -130,7 +168,7 @@ export class OrdersV0Api {
|
|
|
130
168
|
return this.apiClient.callApi( 'OrdersV0Api-getOrder',
|
|
131
169
|
'/orders/v0/orders/{orderId}', 'GET',
|
|
132
170
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
133
|
-
contentTypes, accepts, returnType
|
|
171
|
+
contentTypes, accepts, returnType, this.getRateLimiter('OrdersV0Api-getOrder')
|
|
134
172
|
);
|
|
135
173
|
}
|
|
136
174
|
|
|
@@ -178,7 +216,7 @@ export class OrdersV0Api {
|
|
|
178
216
|
return this.apiClient.callApi( 'OrdersV0Api-getOrderAddress',
|
|
179
217
|
'/orders/v0/orders/{orderId}/address', 'GET',
|
|
180
218
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
181
|
-
contentTypes, accepts, returnType
|
|
219
|
+
contentTypes, accepts, returnType, this.getRateLimiter('OrdersV0Api-getOrderAddress')
|
|
182
220
|
);
|
|
183
221
|
}
|
|
184
222
|
|
|
@@ -226,7 +264,7 @@ export class OrdersV0Api {
|
|
|
226
264
|
return this.apiClient.callApi( 'OrdersV0Api-getOrderBuyerInfo',
|
|
227
265
|
'/orders/v0/orders/{orderId}/buyerInfo', 'GET',
|
|
228
266
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
229
|
-
contentTypes, accepts, returnType
|
|
267
|
+
contentTypes, accepts, returnType, this.getRateLimiter('OrdersV0Api-getOrderBuyerInfo')
|
|
230
268
|
);
|
|
231
269
|
}
|
|
232
270
|
|
|
@@ -278,7 +316,7 @@ export class OrdersV0Api {
|
|
|
278
316
|
return this.apiClient.callApi( 'OrdersV0Api-getOrderItems',
|
|
279
317
|
'/orders/v0/orders/{orderId}/orderItems', 'GET',
|
|
280
318
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
281
|
-
contentTypes, accepts, returnType
|
|
319
|
+
contentTypes, accepts, returnType, this.getRateLimiter('OrdersV0Api-getOrderItems')
|
|
282
320
|
);
|
|
283
321
|
}
|
|
284
322
|
|
|
@@ -332,7 +370,7 @@ export class OrdersV0Api {
|
|
|
332
370
|
return this.apiClient.callApi( 'OrdersV0Api-getOrderItemsBuyerInfo',
|
|
333
371
|
'/orders/v0/orders/{orderId}/orderItems/buyerInfo', 'GET',
|
|
334
372
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
335
|
-
contentTypes, accepts, returnType
|
|
373
|
+
contentTypes, accepts, returnType, this.getRateLimiter('OrdersV0Api-getOrderItemsBuyerInfo')
|
|
336
374
|
);
|
|
337
375
|
}
|
|
338
376
|
|
|
@@ -382,7 +420,7 @@ export class OrdersV0Api {
|
|
|
382
420
|
return this.apiClient.callApi( 'OrdersV0Api-getOrderRegulatedInfo',
|
|
383
421
|
'/orders/v0/orders/{orderId}/regulatedInfo', 'GET',
|
|
384
422
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
385
|
-
contentTypes, accepts, returnType
|
|
423
|
+
contentTypes, accepts, returnType, this.getRateLimiter('OrdersV0Api-getOrderRegulatedInfo')
|
|
386
424
|
);
|
|
387
425
|
}
|
|
388
426
|
|
|
@@ -474,7 +512,7 @@ export class OrdersV0Api {
|
|
|
474
512
|
return this.apiClient.callApi( 'OrdersV0Api-getOrders',
|
|
475
513
|
'/orders/v0/orders', 'GET',
|
|
476
514
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
477
|
-
contentTypes, accepts, returnType
|
|
515
|
+
contentTypes, accepts, returnType, this.getRateLimiter('OrdersV0Api-getOrders')
|
|
478
516
|
);
|
|
479
517
|
}
|
|
480
518
|
|
|
@@ -550,7 +588,7 @@ export class OrdersV0Api {
|
|
|
550
588
|
return this.apiClient.callApi( 'OrdersV0Api-updateVerificationStatus',
|
|
551
589
|
'/orders/v0/orders/{orderId}/regulatedInfo', 'PATCH',
|
|
552
590
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
553
|
-
contentTypes, accepts, returnType
|
|
591
|
+
contentTypes, accepts, returnType, this.getRateLimiter('OrdersV0Api-updateVerificationStatus')
|
|
554
592
|
);
|
|
555
593
|
}
|
|
556
594
|
|
|
@@ -11,9 +11,11 @@
|
|
|
11
11
|
*
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import {ApiClient} from
|
|
14
|
+
import {ApiClient} from '../ApiClient.js';
|
|
15
15
|
import {UpdateShipmentStatusErrorResponse} from '../model/UpdateShipmentStatusErrorResponse.js';
|
|
16
16
|
import {UpdateShipmentStatusRequest} from '../model/UpdateShipmentStatusRequest.js';
|
|
17
|
+
import {SuperagentRateLimiter} from '../../../helper/SuperagentRateLimiter.mjs';
|
|
18
|
+
import {DefaultRateLimitFetcher} from '../../../helper/DefaultRateLimitFetcher.mjs';
|
|
17
19
|
|
|
18
20
|
/**
|
|
19
21
|
* Shipment service.
|
|
@@ -22,6 +24,9 @@ import {UpdateShipmentStatusRequest} from '../model/UpdateShipmentStatusRequest.
|
|
|
22
24
|
*/
|
|
23
25
|
export class ShipmentApi {
|
|
24
26
|
|
|
27
|
+
// Private memeber stores the default rate limiters
|
|
28
|
+
#defaultRateLimiterMap;
|
|
29
|
+
|
|
25
30
|
/**
|
|
26
31
|
* Constructs a new ShipmentApi.
|
|
27
32
|
* @alias module:orders_v0/api/ShipmentApi
|
|
@@ -31,6 +36,31 @@ export class ShipmentApi {
|
|
|
31
36
|
*/
|
|
32
37
|
constructor(apiClient) {
|
|
33
38
|
this.apiClient = apiClient || ApiClient.instance;
|
|
39
|
+
this.initializeDefaultRateLimiterMap();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Initialize rate limiters for API operations
|
|
44
|
+
*/
|
|
45
|
+
initializeDefaultRateLimiterMap() {
|
|
46
|
+
this.#defaultRateLimiterMap = new Map()
|
|
47
|
+
const defaultRateLimitFetcher = new DefaultRateLimitFetcher();
|
|
48
|
+
const operations = [
|
|
49
|
+
'ShipmentApi-updateShipmentStatus',
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
for (const operation of operations) {
|
|
53
|
+
const config = defaultRateLimitFetcher.getLimit(operation);
|
|
54
|
+
this.#defaultRateLimiterMap.set(operation, new SuperagentRateLimiter(config));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Get rate limiter for a specific operation
|
|
60
|
+
* @param {String} operation name
|
|
61
|
+
*/
|
|
62
|
+
getRateLimiter(operation) {
|
|
63
|
+
return this.#defaultRateLimiterMap.get(operation);
|
|
34
64
|
}
|
|
35
65
|
|
|
36
66
|
|
|
@@ -72,7 +102,7 @@ export class ShipmentApi {
|
|
|
72
102
|
return this.apiClient.callApi( 'ShipmentApi-updateShipmentStatus',
|
|
73
103
|
'/orders/v0/orders/{orderId}/shipment', 'POST',
|
|
74
104
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
75
|
-
contentTypes, accepts, returnType
|
|
105
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ShipmentApi-updateShipmentStatus')
|
|
76
106
|
);
|
|
77
107
|
}
|
|
78
108
|
|