@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,9 +11,11 @@
|
|
|
11
11
|
*
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import {ApiClient} from
|
|
14
|
+
import {ApiClient} from '../ApiClient.js';
|
|
15
15
|
import {GetAccountResponse} from '../model/GetAccountResponse.js';
|
|
16
16
|
import {GetMarketplaceParticipationsResponse} from '../model/GetMarketplaceParticipationsResponse.js';
|
|
17
|
+
import {SuperagentRateLimiter} from '../../../helper/SuperagentRateLimiter.mjs';
|
|
18
|
+
import {DefaultRateLimitFetcher} from '../../../helper/DefaultRateLimitFetcher.mjs';
|
|
17
19
|
|
|
18
20
|
/**
|
|
19
21
|
* Sellers service.
|
|
@@ -22,6 +24,9 @@ import {GetMarketplaceParticipationsResponse} from '../model/GetMarketplaceParti
|
|
|
22
24
|
*/
|
|
23
25
|
export class SellersApi {
|
|
24
26
|
|
|
27
|
+
// Private memeber stores the default rate limiters
|
|
28
|
+
#defaultRateLimiterMap;
|
|
29
|
+
|
|
25
30
|
/**
|
|
26
31
|
* Constructs a new SellersApi.
|
|
27
32
|
* @alias module:sellers_v1/api/SellersApi
|
|
@@ -31,6 +36,32 @@ export class SellersApi {
|
|
|
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
|
+
'SellersApi-getAccount',
|
|
50
|
+
'SellersApi-getMarketplaceParticipations',
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
for (const operation of operations) {
|
|
54
|
+
const config = defaultRateLimitFetcher.getLimit(operation);
|
|
55
|
+
this.#defaultRateLimiterMap.set(operation, new SuperagentRateLimiter(config));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Get rate limiter for a specific operation
|
|
61
|
+
* @param {String} operation name
|
|
62
|
+
*/
|
|
63
|
+
getRateLimiter(operation) {
|
|
64
|
+
return this.#defaultRateLimiterMap.get(operation);
|
|
34
65
|
}
|
|
35
66
|
|
|
36
67
|
|
|
@@ -59,7 +90,7 @@ export class SellersApi {
|
|
|
59
90
|
return this.apiClient.callApi( 'SellersApi-getAccount',
|
|
60
91
|
'/sellers/v1/account', 'GET',
|
|
61
92
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
62
|
-
contentTypes, accepts, returnType
|
|
93
|
+
contentTypes, accepts, returnType, this.getRateLimiter('SellersApi-getAccount')
|
|
63
94
|
);
|
|
64
95
|
}
|
|
65
96
|
|
|
@@ -99,7 +130,7 @@ export class SellersApi {
|
|
|
99
130
|
return this.apiClient.callApi( 'SellersApi-getMarketplaceParticipations',
|
|
100
131
|
'/sellers/v1/marketplaceParticipations', 'GET',
|
|
101
132
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
102
|
-
contentTypes, accepts, returnType
|
|
133
|
+
contentTypes, accepts, returnType, this.getRateLimiter('SellersApi-getMarketplaceParticipations')
|
|
103
134
|
);
|
|
104
135
|
}
|
|
105
136
|
|
|
@@ -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 services_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 {AddAppointmentRequest} from '../model/AddAppointmentRequest.js';
|
|
16
16
|
import {AssignAppointmentResourcesRequest} from '../model/AssignAppointmentResourcesRequest.js';
|
|
17
17
|
import {AssignAppointmentResourcesResponse} from '../model/AssignAppointmentResourcesResponse.js';
|
|
@@ -39,6 +39,8 @@ import {UpdateReservationRequest} from '../model/UpdateReservationRequest.js';
|
|
|
39
39
|
import {UpdateReservationResponse} from '../model/UpdateReservationResponse.js';
|
|
40
40
|
import {UpdateScheduleRequest} from '../model/UpdateScheduleRequest.js';
|
|
41
41
|
import {UpdateScheduleResponse} from '../model/UpdateScheduleResponse.js';
|
|
42
|
+
import {SuperagentRateLimiter} from '../../../helper/SuperagentRateLimiter.mjs';
|
|
43
|
+
import {DefaultRateLimitFetcher} from '../../../helper/DefaultRateLimitFetcher.mjs';
|
|
42
44
|
|
|
43
45
|
/**
|
|
44
46
|
* Service service.
|
|
@@ -47,6 +49,9 @@ import {UpdateScheduleResponse} from '../model/UpdateScheduleResponse.js';
|
|
|
47
49
|
*/
|
|
48
50
|
export class ServiceApi {
|
|
49
51
|
|
|
52
|
+
// Private memeber stores the default rate limiters
|
|
53
|
+
#defaultRateLimiterMap;
|
|
54
|
+
|
|
50
55
|
/**
|
|
51
56
|
* Constructs a new ServiceApi.
|
|
52
57
|
* @alias module:services_v1/api/ServiceApi
|
|
@@ -56,6 +61,47 @@ export class ServiceApi {
|
|
|
56
61
|
*/
|
|
57
62
|
constructor(apiClient) {
|
|
58
63
|
this.apiClient = apiClient || ApiClient.instance;
|
|
64
|
+
this.initializeDefaultRateLimiterMap();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Initialize rate limiters for API operations
|
|
69
|
+
*/
|
|
70
|
+
initializeDefaultRateLimiterMap() {
|
|
71
|
+
this.#defaultRateLimiterMap = new Map()
|
|
72
|
+
const defaultRateLimitFetcher = new DefaultRateLimitFetcher();
|
|
73
|
+
const operations = [
|
|
74
|
+
'ServiceApi-addAppointmentForServiceJobByServiceJobId',
|
|
75
|
+
'ServiceApi-assignAppointmentResources',
|
|
76
|
+
'ServiceApi-cancelReservation',
|
|
77
|
+
'ServiceApi-cancelServiceJobByServiceJobId',
|
|
78
|
+
'ServiceApi-completeServiceJobByServiceJobId',
|
|
79
|
+
'ServiceApi-createReservation',
|
|
80
|
+
'ServiceApi-createServiceDocumentUploadDestination',
|
|
81
|
+
'ServiceApi-getAppointmentSlots',
|
|
82
|
+
'ServiceApi-getAppointmmentSlotsByJobId',
|
|
83
|
+
'ServiceApi-getFixedSlotCapacity',
|
|
84
|
+
'ServiceApi-getRangeSlotCapacity',
|
|
85
|
+
'ServiceApi-getServiceJobByServiceJobId',
|
|
86
|
+
'ServiceApi-getServiceJobs',
|
|
87
|
+
'ServiceApi-rescheduleAppointmentForServiceJobByServiceJobId',
|
|
88
|
+
'ServiceApi-setAppointmentFulfillmentData',
|
|
89
|
+
'ServiceApi-updateReservation',
|
|
90
|
+
'ServiceApi-updateSchedule',
|
|
91
|
+
];
|
|
92
|
+
|
|
93
|
+
for (const operation of operations) {
|
|
94
|
+
const config = defaultRateLimitFetcher.getLimit(operation);
|
|
95
|
+
this.#defaultRateLimiterMap.set(operation, new SuperagentRateLimiter(config));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Get rate limiter for a specific operation
|
|
101
|
+
* @param {String} operation name
|
|
102
|
+
*/
|
|
103
|
+
getRateLimiter(operation) {
|
|
104
|
+
return this.#defaultRateLimiterMap.get(operation);
|
|
59
105
|
}
|
|
60
106
|
|
|
61
107
|
|
|
@@ -97,7 +143,7 @@ export class ServiceApi {
|
|
|
97
143
|
return this.apiClient.callApi( 'ServiceApi-addAppointmentForServiceJobByServiceJobId',
|
|
98
144
|
'/service/v1/serviceJobs/{serviceJobId}/appointments', 'POST',
|
|
99
145
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
100
|
-
contentTypes, accepts, returnType
|
|
146
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-addAppointmentForServiceJobByServiceJobId')
|
|
101
147
|
);
|
|
102
148
|
}
|
|
103
149
|
|
|
@@ -159,7 +205,7 @@ export class ServiceApi {
|
|
|
159
205
|
return this.apiClient.callApi( 'ServiceApi-assignAppointmentResources',
|
|
160
206
|
'/service/v1/serviceJobs/{serviceJobId}/appointments/{appointmentId}/resources', 'PUT',
|
|
161
207
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
162
|
-
contentTypes, accepts, returnType
|
|
208
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-assignAppointmentResources')
|
|
163
209
|
);
|
|
164
210
|
}
|
|
165
211
|
|
|
@@ -216,7 +262,7 @@ export class ServiceApi {
|
|
|
216
262
|
return this.apiClient.callApi( 'ServiceApi-cancelReservation',
|
|
217
263
|
'/service/v1/reservation/{reservationId}', 'DELETE',
|
|
218
264
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
219
|
-
contentTypes, accepts, returnType
|
|
265
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-cancelReservation')
|
|
220
266
|
);
|
|
221
267
|
}
|
|
222
268
|
|
|
@@ -272,7 +318,7 @@ export class ServiceApi {
|
|
|
272
318
|
return this.apiClient.callApi( 'ServiceApi-cancelServiceJobByServiceJobId',
|
|
273
319
|
'/service/v1/serviceJobs/{serviceJobId}/cancellations', 'PUT',
|
|
274
320
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
275
|
-
contentTypes, accepts, returnType
|
|
321
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-cancelServiceJobByServiceJobId')
|
|
276
322
|
);
|
|
277
323
|
}
|
|
278
324
|
|
|
@@ -321,7 +367,7 @@ export class ServiceApi {
|
|
|
321
367
|
return this.apiClient.callApi( 'ServiceApi-completeServiceJobByServiceJobId',
|
|
322
368
|
'/service/v1/serviceJobs/{serviceJobId}/completions', 'PUT',
|
|
323
369
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
324
|
-
contentTypes, accepts, returnType
|
|
370
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-completeServiceJobByServiceJobId')
|
|
325
371
|
);
|
|
326
372
|
}
|
|
327
373
|
|
|
@@ -375,7 +421,7 @@ export class ServiceApi {
|
|
|
375
421
|
return this.apiClient.callApi( 'ServiceApi-createReservation',
|
|
376
422
|
'/service/v1/reservation', 'POST',
|
|
377
423
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
378
|
-
contentTypes, accepts, returnType
|
|
424
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-createReservation')
|
|
379
425
|
);
|
|
380
426
|
}
|
|
381
427
|
|
|
@@ -423,7 +469,7 @@ export class ServiceApi {
|
|
|
423
469
|
return this.apiClient.callApi( 'ServiceApi-createServiceDocumentUploadDestination',
|
|
424
470
|
'/service/v1/documents', 'POST',
|
|
425
471
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
426
|
-
contentTypes, accepts, returnType
|
|
472
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-createServiceDocumentUploadDestination')
|
|
427
473
|
);
|
|
428
474
|
}
|
|
429
475
|
|
|
@@ -491,7 +537,7 @@ export class ServiceApi {
|
|
|
491
537
|
return this.apiClient.callApi( 'ServiceApi-getAppointmentSlots',
|
|
492
538
|
'/service/v1/appointmentSlots', 'GET',
|
|
493
539
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
494
|
-
contentTypes, accepts, returnType
|
|
540
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-getAppointmentSlots')
|
|
495
541
|
);
|
|
496
542
|
}
|
|
497
543
|
|
|
@@ -557,7 +603,7 @@ export class ServiceApi {
|
|
|
557
603
|
return this.apiClient.callApi( 'ServiceApi-getAppointmmentSlotsByJobId',
|
|
558
604
|
'/service/v1/serviceJobs/{serviceJobId}/appointmentSlots', 'GET',
|
|
559
605
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
560
|
-
contentTypes, accepts, returnType
|
|
606
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-getAppointmmentSlotsByJobId')
|
|
561
607
|
);
|
|
562
608
|
}
|
|
563
609
|
|
|
@@ -626,7 +672,7 @@ export class ServiceApi {
|
|
|
626
672
|
return this.apiClient.callApi( 'ServiceApi-getFixedSlotCapacity',
|
|
627
673
|
'/service/v1/serviceResources/{resourceId}/capacity/fixed', 'POST',
|
|
628
674
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
629
|
-
contentTypes, accepts, returnType
|
|
675
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-getFixedSlotCapacity')
|
|
630
676
|
);
|
|
631
677
|
}
|
|
632
678
|
|
|
@@ -695,7 +741,7 @@ export class ServiceApi {
|
|
|
695
741
|
return this.apiClient.callApi( 'ServiceApi-getRangeSlotCapacity',
|
|
696
742
|
'/service/v1/serviceResources/{resourceId}/capacity/range', 'POST',
|
|
697
743
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
698
|
-
contentTypes, accepts, returnType
|
|
744
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-getRangeSlotCapacity')
|
|
699
745
|
);
|
|
700
746
|
}
|
|
701
747
|
|
|
@@ -747,7 +793,7 @@ export class ServiceApi {
|
|
|
747
793
|
return this.apiClient.callApi( 'ServiceApi-getServiceJobByServiceJobId',
|
|
748
794
|
'/service/v1/serviceJobs/{serviceJobId}', 'GET',
|
|
749
795
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
750
|
-
contentTypes, accepts, returnType
|
|
796
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-getServiceJobByServiceJobId')
|
|
751
797
|
);
|
|
752
798
|
}
|
|
753
799
|
|
|
@@ -827,7 +873,7 @@ export class ServiceApi {
|
|
|
827
873
|
return this.apiClient.callApi( 'ServiceApi-getServiceJobs',
|
|
828
874
|
'/service/v1/serviceJobs', 'GET',
|
|
829
875
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
830
|
-
contentTypes, accepts, returnType
|
|
876
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-getServiceJobs')
|
|
831
877
|
);
|
|
832
878
|
}
|
|
833
879
|
|
|
@@ -904,7 +950,7 @@ export class ServiceApi {
|
|
|
904
950
|
return this.apiClient.callApi( 'ServiceApi-rescheduleAppointmentForServiceJobByServiceJobId',
|
|
905
951
|
'/service/v1/serviceJobs/{serviceJobId}/appointments/{appointmentId}', 'POST',
|
|
906
952
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
907
|
-
contentTypes, accepts, returnType
|
|
953
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-rescheduleAppointmentForServiceJobByServiceJobId')
|
|
908
954
|
);
|
|
909
955
|
}
|
|
910
956
|
|
|
@@ -967,7 +1013,7 @@ export class ServiceApi {
|
|
|
967
1013
|
return this.apiClient.callApi( 'ServiceApi-setAppointmentFulfillmentData',
|
|
968
1014
|
'/service/v1/serviceJobs/{serviceJobId}/appointments/{appointmentId}/fulfillment', 'PUT',
|
|
969
1015
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
970
|
-
contentTypes, accepts, returnType
|
|
1016
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-setAppointmentFulfillmentData')
|
|
971
1017
|
);
|
|
972
1018
|
}
|
|
973
1019
|
|
|
@@ -1030,7 +1076,7 @@ export class ServiceApi {
|
|
|
1030
1076
|
return this.apiClient.callApi( 'ServiceApi-updateReservation',
|
|
1031
1077
|
'/service/v1/reservation/{reservationId}', 'PUT',
|
|
1032
1078
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
1033
|
-
contentTypes, accepts, returnType
|
|
1079
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-updateReservation')
|
|
1034
1080
|
);
|
|
1035
1081
|
}
|
|
1036
1082
|
|
|
@@ -1093,7 +1139,7 @@ export class ServiceApi {
|
|
|
1093
1139
|
return this.apiClient.callApi( 'ServiceApi-updateSchedule',
|
|
1094
1140
|
'/service/v1/serviceResources/{resourceId}/schedules', 'PUT',
|
|
1095
1141
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
1096
|
-
contentTypes, accepts, returnType
|
|
1142
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ServiceApi-updateSchedule')
|
|
1097
1143
|
);
|
|
1098
1144
|
}
|
|
1099
1145
|
|
|
@@ -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 shipping_v2/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) {
|