@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,7 +11,7 @@
|
|
|
11
11
|
*
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import {ApiClient} from
|
|
14
|
+
import {ApiClient} from '../ApiClient.js';
|
|
15
15
|
import {ErrorList} from '../model/ErrorList.js';
|
|
16
16
|
import {GetContentDocumentResponse} from '../model/GetContentDocumentResponse.js';
|
|
17
17
|
import {ListContentDocumentAsinRelationsResponse} from '../model/ListContentDocumentAsinRelationsResponse.js';
|
|
@@ -24,6 +24,8 @@ import {PostContentDocumentSuspendSubmissionResponse} from '../model/PostContent
|
|
|
24
24
|
import {SearchContentDocumentsResponse} from '../model/SearchContentDocumentsResponse.js';
|
|
25
25
|
import {SearchContentPublishRecordsResponse} from '../model/SearchContentPublishRecordsResponse.js';
|
|
26
26
|
import {ValidateContentDocumentAsinRelationsResponse} from '../model/ValidateContentDocumentAsinRelationsResponse.js';
|
|
27
|
+
import {SuperagentRateLimiter} from '../../../helper/SuperagentRateLimiter.mjs';
|
|
28
|
+
import {DefaultRateLimitFetcher} from '../../../helper/DefaultRateLimitFetcher.mjs';
|
|
27
29
|
|
|
28
30
|
/**
|
|
29
31
|
* AplusContent service.
|
|
@@ -32,6 +34,9 @@ import {ValidateContentDocumentAsinRelationsResponse} from '../model/ValidateCon
|
|
|
32
34
|
*/
|
|
33
35
|
export class AplusContentApi {
|
|
34
36
|
|
|
37
|
+
// Private memeber stores the default rate limiters
|
|
38
|
+
#defaultRateLimiterMap;
|
|
39
|
+
|
|
35
40
|
/**
|
|
36
41
|
* Constructs a new AplusContentApi.
|
|
37
42
|
* @alias module:apluscontent_v2020_11_01/api/AplusContentApi
|
|
@@ -41,6 +46,40 @@ export class AplusContentApi {
|
|
|
41
46
|
*/
|
|
42
47
|
constructor(apiClient) {
|
|
43
48
|
this.apiClient = apiClient || ApiClient.instance;
|
|
49
|
+
this.initializeDefaultRateLimiterMap();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Initialize rate limiters for API operations
|
|
54
|
+
*/
|
|
55
|
+
initializeDefaultRateLimiterMap() {
|
|
56
|
+
this.#defaultRateLimiterMap = new Map()
|
|
57
|
+
const defaultRateLimitFetcher = new DefaultRateLimitFetcher();
|
|
58
|
+
const operations = [
|
|
59
|
+
'AplusContentApi-createContentDocument',
|
|
60
|
+
'AplusContentApi-getContentDocument',
|
|
61
|
+
'AplusContentApi-listContentDocumentAsinRelations',
|
|
62
|
+
'AplusContentApi-postContentDocumentApprovalSubmission',
|
|
63
|
+
'AplusContentApi-postContentDocumentAsinRelations',
|
|
64
|
+
'AplusContentApi-postContentDocumentSuspendSubmission',
|
|
65
|
+
'AplusContentApi-searchContentDocuments',
|
|
66
|
+
'AplusContentApi-searchContentPublishRecords',
|
|
67
|
+
'AplusContentApi-updateContentDocument',
|
|
68
|
+
'AplusContentApi-validateContentDocumentAsinRelations',
|
|
69
|
+
];
|
|
70
|
+
|
|
71
|
+
for (const operation of operations) {
|
|
72
|
+
const config = defaultRateLimitFetcher.getLimit(operation);
|
|
73
|
+
this.#defaultRateLimiterMap.set(operation, new SuperagentRateLimiter(config));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Get rate limiter for a specific operation
|
|
79
|
+
* @param {String} operation name
|
|
80
|
+
*/
|
|
81
|
+
getRateLimiter(operation) {
|
|
82
|
+
return this.#defaultRateLimiterMap.get(operation);
|
|
44
83
|
}
|
|
45
84
|
|
|
46
85
|
|
|
@@ -82,7 +121,7 @@ export class AplusContentApi {
|
|
|
82
121
|
return this.apiClient.callApi( 'AplusContentApi-createContentDocument',
|
|
83
122
|
'/aplus/2020-11-01/contentDocuments', 'POST',
|
|
84
123
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
85
|
-
contentTypes, accepts, returnType
|
|
124
|
+
contentTypes, accepts, returnType, this.getRateLimiter('AplusContentApi-createContentDocument')
|
|
86
125
|
);
|
|
87
126
|
}
|
|
88
127
|
|
|
@@ -145,7 +184,7 @@ export class AplusContentApi {
|
|
|
145
184
|
return this.apiClient.callApi( 'AplusContentApi-getContentDocument',
|
|
146
185
|
'/aplus/2020-11-01/contentDocuments/{contentReferenceKey}', 'GET',
|
|
147
186
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
148
|
-
contentTypes, accepts, returnType
|
|
187
|
+
contentTypes, accepts, returnType, this.getRateLimiter('AplusContentApi-getContentDocument')
|
|
149
188
|
);
|
|
150
189
|
}
|
|
151
190
|
|
|
@@ -210,7 +249,7 @@ export class AplusContentApi {
|
|
|
210
249
|
return this.apiClient.callApi( 'AplusContentApi-listContentDocumentAsinRelations',
|
|
211
250
|
'/aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins', 'GET',
|
|
212
251
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
213
|
-
contentTypes, accepts, returnType
|
|
252
|
+
contentTypes, accepts, returnType, this.getRateLimiter('AplusContentApi-listContentDocumentAsinRelations')
|
|
214
253
|
);
|
|
215
254
|
}
|
|
216
255
|
|
|
@@ -270,7 +309,7 @@ export class AplusContentApi {
|
|
|
270
309
|
return this.apiClient.callApi( 'AplusContentApi-postContentDocumentApprovalSubmission',
|
|
271
310
|
'/aplus/2020-11-01/contentDocuments/{contentReferenceKey}/approvalSubmissions', 'POST',
|
|
272
311
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
273
|
-
contentTypes, accepts, returnType
|
|
312
|
+
contentTypes, accepts, returnType, this.getRateLimiter('AplusContentApi-postContentDocumentApprovalSubmission')
|
|
274
313
|
);
|
|
275
314
|
}
|
|
276
315
|
|
|
@@ -332,7 +371,7 @@ export class AplusContentApi {
|
|
|
332
371
|
return this.apiClient.callApi( 'AplusContentApi-postContentDocumentAsinRelations',
|
|
333
372
|
'/aplus/2020-11-01/contentDocuments/{contentReferenceKey}/asins', 'POST',
|
|
334
373
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
335
|
-
contentTypes, accepts, returnType
|
|
374
|
+
contentTypes, accepts, returnType, this.getRateLimiter('AplusContentApi-postContentDocumentAsinRelations')
|
|
336
375
|
);
|
|
337
376
|
}
|
|
338
377
|
|
|
@@ -389,7 +428,7 @@ export class AplusContentApi {
|
|
|
389
428
|
return this.apiClient.callApi( 'AplusContentApi-postContentDocumentSuspendSubmission',
|
|
390
429
|
'/aplus/2020-11-01/contentDocuments/{contentReferenceKey}/suspendSubmissions', 'POST',
|
|
391
430
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
392
|
-
contentTypes, accepts, returnType
|
|
431
|
+
contentTypes, accepts, returnType, this.getRateLimiter('AplusContentApi-postContentDocumentSuspendSubmission')
|
|
393
432
|
);
|
|
394
433
|
}
|
|
395
434
|
|
|
@@ -442,7 +481,7 @@ export class AplusContentApi {
|
|
|
442
481
|
return this.apiClient.callApi( 'AplusContentApi-searchContentDocuments',
|
|
443
482
|
'/aplus/2020-11-01/contentDocuments', 'GET',
|
|
444
483
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
445
|
-
contentTypes, accepts, returnType
|
|
484
|
+
contentTypes, accepts, returnType, this.getRateLimiter('AplusContentApi-searchContentDocuments')
|
|
446
485
|
);
|
|
447
486
|
}
|
|
448
487
|
|
|
@@ -503,7 +542,7 @@ export class AplusContentApi {
|
|
|
503
542
|
return this.apiClient.callApi( 'AplusContentApi-searchContentPublishRecords',
|
|
504
543
|
'/aplus/2020-11-01/contentPublishRecords', 'GET',
|
|
505
544
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
506
|
-
contentTypes, accepts, returnType
|
|
545
|
+
contentTypes, accepts, returnType, this.getRateLimiter('AplusContentApi-searchContentPublishRecords')
|
|
507
546
|
);
|
|
508
547
|
}
|
|
509
548
|
|
|
@@ -567,7 +606,7 @@ export class AplusContentApi {
|
|
|
567
606
|
return this.apiClient.callApi( 'AplusContentApi-updateContentDocument',
|
|
568
607
|
'/aplus/2020-11-01/contentDocuments/{contentReferenceKey}', 'POST',
|
|
569
608
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
570
|
-
contentTypes, accepts, returnType
|
|
609
|
+
contentTypes, accepts, returnType, this.getRateLimiter('AplusContentApi-updateContentDocument')
|
|
571
610
|
);
|
|
572
611
|
}
|
|
573
612
|
|
|
@@ -627,7 +666,7 @@ export class AplusContentApi {
|
|
|
627
666
|
return this.apiClient.callApi( 'AplusContentApi-validateContentDocumentAsinRelations',
|
|
628
667
|
'/aplus/2020-11-01/contentAsinValidations', 'POST',
|
|
629
668
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
630
|
-
contentTypes, accepts, returnType
|
|
669
|
+
contentTypes, accepts, returnType, this.getRateLimiter('AplusContentApi-validateContentDocumentAsinRelations')
|
|
631
670
|
);
|
|
632
671
|
}
|
|
633
672
|
|
|
@@ -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 appintegrations_v2024_04_01/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,12 +11,14 @@
|
|
|
11
11
|
*
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import {ApiClient} from
|
|
14
|
+
import {ApiClient} from '../ApiClient.js';
|
|
15
15
|
import {CreateNotificationRequest} from '../model/CreateNotificationRequest.js';
|
|
16
16
|
import {CreateNotificationResponse} from '../model/CreateNotificationResponse.js';
|
|
17
17
|
import {DeleteNotificationsRequest} from '../model/DeleteNotificationsRequest.js';
|
|
18
18
|
import {ErrorList} from '../model/ErrorList.js';
|
|
19
19
|
import {RecordActionFeedbackRequest} from '../model/RecordActionFeedbackRequest.js';
|
|
20
|
+
import {SuperagentRateLimiter} from '../../../helper/SuperagentRateLimiter.mjs';
|
|
21
|
+
import {DefaultRateLimitFetcher} from '../../../helper/DefaultRateLimitFetcher.mjs';
|
|
20
22
|
|
|
21
23
|
/**
|
|
22
24
|
* AppIntegrations service.
|
|
@@ -25,6 +27,9 @@ import {RecordActionFeedbackRequest} from '../model/RecordActionFeedbackRequest.
|
|
|
25
27
|
*/
|
|
26
28
|
export class AppIntegrationsApi {
|
|
27
29
|
|
|
30
|
+
// Private memeber stores the default rate limiters
|
|
31
|
+
#defaultRateLimiterMap;
|
|
32
|
+
|
|
28
33
|
/**
|
|
29
34
|
* Constructs a new AppIntegrationsApi.
|
|
30
35
|
* @alias module:appintegrations_v2024_04_01/api/AppIntegrationsApi
|
|
@@ -34,6 +39,33 @@ export class AppIntegrationsApi {
|
|
|
34
39
|
*/
|
|
35
40
|
constructor(apiClient) {
|
|
36
41
|
this.apiClient = apiClient || ApiClient.instance;
|
|
42
|
+
this.initializeDefaultRateLimiterMap();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Initialize rate limiters for API operations
|
|
47
|
+
*/
|
|
48
|
+
initializeDefaultRateLimiterMap() {
|
|
49
|
+
this.#defaultRateLimiterMap = new Map()
|
|
50
|
+
const defaultRateLimitFetcher = new DefaultRateLimitFetcher();
|
|
51
|
+
const operations = [
|
|
52
|
+
'AppIntegrationsApi-createNotification',
|
|
53
|
+
'AppIntegrationsApi-deleteNotifications',
|
|
54
|
+
'AppIntegrationsApi-recordActionFeedback',
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
for (const operation of operations) {
|
|
58
|
+
const config = defaultRateLimitFetcher.getLimit(operation);
|
|
59
|
+
this.#defaultRateLimiterMap.set(operation, new SuperagentRateLimiter(config));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Get rate limiter for a specific operation
|
|
65
|
+
* @param {String} operation name
|
|
66
|
+
*/
|
|
67
|
+
getRateLimiter(operation) {
|
|
68
|
+
return this.#defaultRateLimiterMap.get(operation);
|
|
37
69
|
}
|
|
38
70
|
|
|
39
71
|
|
|
@@ -68,7 +100,7 @@ export class AppIntegrationsApi {
|
|
|
68
100
|
return this.apiClient.callApi( 'AppIntegrationsApi-createNotification',
|
|
69
101
|
'/appIntegrations/2024-04-01/notifications', 'POST',
|
|
70
102
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
71
|
-
contentTypes, accepts, returnType
|
|
103
|
+
contentTypes, accepts, returnType, this.getRateLimiter('AppIntegrationsApi-createNotification')
|
|
72
104
|
);
|
|
73
105
|
}
|
|
74
106
|
|
|
@@ -115,7 +147,7 @@ export class AppIntegrationsApi {
|
|
|
115
147
|
return this.apiClient.callApi( 'AppIntegrationsApi-deleteNotifications',
|
|
116
148
|
'/appIntegrations/2024-04-01/notifications/deletion', 'POST',
|
|
117
149
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
118
|
-
contentTypes, accepts, returnType
|
|
150
|
+
contentTypes, accepts, returnType, this.getRateLimiter('AppIntegrationsApi-deleteNotifications')
|
|
119
151
|
);
|
|
120
152
|
}
|
|
121
153
|
|
|
@@ -169,7 +201,7 @@ export class AppIntegrationsApi {
|
|
|
169
201
|
return this.apiClient.callApi( 'AppIntegrationsApi-recordActionFeedback',
|
|
170
202
|
'/appIntegrations/2024-04-01/notifications/{notificationId}/feedback', 'POST',
|
|
171
203
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
172
|
-
contentTypes, accepts, returnType
|
|
204
|
+
contentTypes, accepts, returnType, this.getRateLimiter('AppIntegrationsApi-recordActionFeedback')
|
|
173
205
|
);
|
|
174
206
|
}
|
|
175
207
|
|
|
@@ -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 applications_v2023_11_30/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 {ErrorList} from '../model/ErrorList.js';
|
|
16
|
+
import {SuperagentRateLimiter} from '../../../helper/SuperagentRateLimiter.mjs';
|
|
17
|
+
import {DefaultRateLimitFetcher} from '../../../helper/DefaultRateLimitFetcher.mjs';
|
|
16
18
|
|
|
17
19
|
/**
|
|
18
20
|
* Applications service.
|
|
@@ -21,6 +23,9 @@ import {ErrorList} from '../model/ErrorList.js';
|
|
|
21
23
|
*/
|
|
22
24
|
export class ApplicationsApi {
|
|
23
25
|
|
|
26
|
+
// Private memeber stores the default rate limiters
|
|
27
|
+
#defaultRateLimiterMap;
|
|
28
|
+
|
|
24
29
|
/**
|
|
25
30
|
* Constructs a new ApplicationsApi.
|
|
26
31
|
* @alias module:applications_v2023_11_30/api/ApplicationsApi
|
|
@@ -30,6 +35,31 @@ export class ApplicationsApi {
|
|
|
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
|
+
'ApplicationsApi-rotateApplicationClientSecret',
|
|
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
|
|
|
@@ -58,7 +88,7 @@ export class ApplicationsApi {
|
|
|
58
88
|
return this.apiClient.callApi( 'ApplicationsApi-rotateApplicationClientSecret',
|
|
59
89
|
'/applications/2023-11-30/clientSecret', 'POST',
|
|
60
90
|
pathParams, queryParams, headerParams, formParams, postBody,
|
|
61
|
-
contentTypes, accepts, returnType
|
|
91
|
+
contentTypes, accepts, returnType, this.getRateLimiter('ApplicationsApi-rotateApplicationClientSecret')
|
|
62
92
|
);
|
|
63
93
|
}
|
|
64
94
|
|