mangopay4-nodejs-sdk 1.64.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/.github/workflows/node.js.yml +32 -0
- package/.github/workflows/npm-publish.yml +26 -0
- package/.jshintrc +16 -0
- package/CHANGELOG.md +946 -0
- package/LICENSE +21 -0
- package/README.md +179 -0
- package/docs/BankAccounts.md +35 -0
- package/docs/BankingAliases.md +108 -0
- package/docs/CardPreAuthorizations.md +55 -0
- package/docs/CardRegistrations.md +55 -0
- package/docs/Cards.md +82 -0
- package/docs/Clients.md +142 -0
- package/docs/DisputeDocuments.md +53 -0
- package/docs/Disputes.md +292 -0
- package/docs/Events.md +23 -0
- package/docs/Hooks.md +68 -0
- package/docs/Idempotency.md +11 -0
- package/docs/KycDocuments.md +52 -0
- package/docs/Mandates.md +125 -0
- package/docs/OptionsHelper.md +32 -0
- package/docs/PayIns.md +72 -0
- package/docs/PayOuts.md +55 -0
- package/docs/README.md +131 -0
- package/docs/Refunds.md +25 -0
- package/docs/Reports.md +63 -0
- package/docs/Repudiations.md +25 -0
- package/docs/Responses.md +33 -0
- package/docs/Transfers.md +72 -0
- package/docs/UboDeclarations.md +70 -0
- package/docs/Users.md +322 -0
- package/docs/Wallets.md +70 -0
- package/docs/templates/class.mustache +11 -0
- package/docs/templates/file.mustache +53 -0
- package/docs/templates/function.mustache +33 -0
- package/docs/templates/index.mustache +26 -0
- package/docs/templates/overview.mustache +1 -0
- package/examples/createUsers.js +112 -0
- package/examples/createWallet.js +28 -0
- package/examples/failedRequest.js +20 -0
- package/examples/getBankAccounts.js +29 -0
- package/examples/getUserEmoney.js +16 -0
- package/examples/getUsers.js +32 -0
- package/examples/readResponseHeaders.js +42 -0
- package/index.js +1 -0
- package/lib/Model.js +58 -0
- package/lib/api.js +467 -0
- package/lib/apiMethods.js +270 -0
- package/lib/config.js +57 -0
- package/lib/log.js +9 -0
- package/lib/mangopay.js +8 -0
- package/lib/models/Address.js +32 -0
- package/lib/models/BankAccount.js +45 -0
- package/lib/models/BankAccountDetails.js +7 -0
- package/lib/models/BankAccountDetailsCA.js +12 -0
- package/lib/models/BankAccountDetailsGB.js +10 -0
- package/lib/models/BankAccountDetailsIBAN.js +10 -0
- package/lib/models/BankAccountDetailsOTHER.js +16 -0
- package/lib/models/BankAccountDetailsUS.js +14 -0
- package/lib/models/BankAccountType.js +8 -0
- package/lib/models/BankingAlias.js +37 -0
- package/lib/models/BankingAliasIBAN.js +27 -0
- package/lib/models/Billing.js +14 -0
- package/lib/models/BinData.js +16 -0
- package/lib/models/Birthplace.js +10 -0
- package/lib/models/BrowserInfo.js +15 -0
- package/lib/models/Card.js +19 -0
- package/lib/models/CardInfo.js +32 -0
- package/lib/models/CardPreAuthorization.js +144 -0
- package/lib/models/CardRegistration.js +29 -0
- package/lib/models/CardValidation.js +19 -0
- package/lib/models/CategorizeUserLegal.js +15 -0
- package/lib/models/CategorizeUserNatural.js +18 -0
- package/lib/models/Check.js +13 -0
- package/lib/models/CheckData.js +8 -0
- package/lib/models/Client.js +62 -0
- package/lib/models/ClientWallet.js +28 -0
- package/lib/models/Conversion.js +19 -0
- package/lib/models/ConversionRate.js +10 -0
- package/lib/models/CountryAuthorization.js +12 -0
- package/lib/models/DebitedBankAccount.js +15 -0
- package/lib/models/DeclaredUbo.js +29 -0
- package/lib/models/DeclaredUboStatus.js +17 -0
- package/lib/models/Deposit.js +29 -0
- package/lib/models/Dispute.js +46 -0
- package/lib/models/DisputeDocument.js +10 -0
- package/lib/models/DisputeDocumentPage.js +12 -0
- package/lib/models/DisputeReason.js +11 -0
- package/lib/models/Document.js +12 -0
- package/lib/models/DocumentPageConsult.js +17 -0
- package/lib/models/EMoney.js +30 -0
- package/lib/models/EntityBase.js +70 -0
- package/lib/models/Hook.js +19 -0
- package/lib/models/IdempotencyResponse.js +11 -0
- package/lib/models/IdentityVerification.js +12 -0
- package/lib/models/KycDocument.js +11 -0
- package/lib/models/KycDocumentStatus.js +7 -0
- package/lib/models/KycDocumentType.js +7 -0
- package/lib/models/KycPage.js +12 -0
- package/lib/models/LegalPersonType.js +7 -0
- package/lib/models/LegalRepresentative.js +16 -0
- package/lib/models/Mandate.js +69 -0
- package/lib/models/MandateStatus.js +7 -0
- package/lib/models/Money.js +16 -0
- package/lib/models/PayByBankSupportedBank.js +7 -0
- package/lib/models/PayIn.js +36 -0
- package/lib/models/PayInExecutionDetails.js +7 -0
- package/lib/models/PayInExecutionDetailsBankingAlias.js +19 -0
- package/lib/models/PayInExecutionDetailsDirect.js +29 -0
- package/lib/models/PayInExecutionDetailsWeb.js +40 -0
- package/lib/models/PayInExecutionType.js +5 -0
- package/lib/models/PayInIntent.js +20 -0
- package/lib/models/PayInIntentSplit.js +14 -0
- package/lib/models/PayInIntentSplits.js +7 -0
- package/lib/models/PayInPaymentDetails.js +7 -0
- package/lib/models/PayInPaymentDetailsApplePay.js +19 -0
- package/lib/models/PayInPaymentDetailsBancontact.js +13 -0
- package/lib/models/PayInPaymentDetailsBankWire.js +23 -0
- package/lib/models/PayInPaymentDetailsBankingAlias.js +18 -0
- package/lib/models/PayInPaymentDetailsBizum.js +23 -0
- package/lib/models/PayInPaymentDetailsBlik.js +17 -0
- package/lib/models/PayInPaymentDetailsCard.js +10 -0
- package/lib/models/PayInPaymentDetailsCardDirect.js +14 -0
- package/lib/models/PayInPaymentDetailsCardWeb.js +28 -0
- package/lib/models/PayInPaymentDetailsDirectDebitDirect.js +22 -0
- package/lib/models/PayInPaymentDetailsDirectDebitWeb.js +13 -0
- package/lib/models/PayInPaymentDetailsGiropay.js +15 -0
- package/lib/models/PayInPaymentDetailsGooglePay.js +35 -0
- package/lib/models/PayInPaymentDetailsIdeal.js +25 -0
- package/lib/models/PayInPaymentDetailsKlarna.js +36 -0
- package/lib/models/PayInPaymentDetailsMbway.js +20 -0
- package/lib/models/PayInPaymentDetailsMultibanco.js +14 -0
- package/lib/models/PayInPaymentDetailsPayByBank.js +71 -0
- package/lib/models/PayInPaymentDetailsPayPal.js +63 -0
- package/lib/models/PayInPaymentDetailsPayconiq.js +23 -0
- package/lib/models/PayInPaymentDetailsPreAuthorized.js +10 -0
- package/lib/models/PayInPaymentDetailsSatispay.js +19 -0
- package/lib/models/PayInPaymentDetailsSwish.js +35 -0
- package/lib/models/PayInPaymentDetailsTwint.js +15 -0
- package/lib/models/PayInPaymentType.js +21 -0
- package/lib/models/PayInRecurringRegistration.js +64 -0
- package/lib/models/PayInTemplateURLOptions.js +10 -0
- package/lib/models/PayOut.js +24 -0
- package/lib/models/PayOutPaymentDetails.js +7 -0
- package/lib/models/PayOutPaymentDetailsBankWire.js +32 -0
- package/lib/models/PayOutPaymentType.js +3 -0
- package/lib/models/PaymentData.js +20 -0
- package/lib/models/PaymentMethodMetadata.js +38 -0
- package/lib/models/PayoutMethods.js +7 -0
- package/lib/models/PendingUserAction.js +16 -0
- package/lib/models/PersonType.js +5 -0
- package/lib/models/PlatformCategorization.js +16 -0
- package/lib/models/PlatformType.js +10 -0
- package/lib/models/Quote.js +11 -0
- package/lib/models/Recipient.js +20 -0
- package/lib/models/RecipientSchema.js +17 -0
- package/lib/models/RecurringPayIn.js +10 -0
- package/lib/models/RecurringPayInCIT.js +32 -0
- package/lib/models/RecurringPayInCurrentState.js +24 -0
- package/lib/models/RecurringPayInMIT.js +27 -0
- package/lib/models/RecurringPayInPut.js +24 -0
- package/lib/models/Refund.js +26 -0
- package/lib/models/RefundReasonDetails.js +10 -0
- package/lib/models/Report.js +54 -0
- package/lib/models/ReportFilter.js +52 -0
- package/lib/models/ReportFilterV2.js +11 -0
- package/lib/models/ReportV2.js +28 -0
- package/lib/models/Repudiation.js +51 -0
- package/lib/models/SecurityInfo.js +12 -0
- package/lib/models/Settlement.js +16 -0
- package/lib/models/SettlementTransfer.js +37 -0
- package/lib/models/Shipping.js +14 -0
- package/lib/models/ShippingAddress.js +25 -0
- package/lib/models/ShippingPreference.js +5 -0
- package/lib/models/Transaction.js +50 -0
- package/lib/models/Transfer.js +13 -0
- package/lib/models/Ubo.js +19 -0
- package/lib/models/UboDeclaration.js +42 -0
- package/lib/models/UboDeclarationRefusedReasonType.js +23 -0
- package/lib/models/UboDeclarationStatus.js +26 -0
- package/lib/models/UboRefusedReasonType.js +14 -0
- package/lib/models/User.js +66 -0
- package/lib/models/UserCategory.js +5 -0
- package/lib/models/UserConsent.js +7 -0
- package/lib/models/UserDataFormatValidation.js +7 -0
- package/lib/models/UserEnrollmentResult.js +7 -0
- package/lib/models/UserLegal.js +65 -0
- package/lib/models/UserLegalOwner.js +66 -0
- package/lib/models/UserLegalPayer.js +66 -0
- package/lib/models/UserLegalSca.js +57 -0
- package/lib/models/UserNatural.js +51 -0
- package/lib/models/UserNaturalCapacity.js +13 -0
- package/lib/models/UserNaturalOwner.js +55 -0
- package/lib/models/UserNaturalPayer.js +55 -0
- package/lib/models/UserNaturalPut.js +49 -0
- package/lib/models/UserNaturalSca.js +56 -0
- package/lib/models/VirtualAccount.js +22 -0
- package/lib/models/Wallet.js +32 -0
- package/lib/models/index.js +102 -0
- package/lib/service.js +14 -0
- package/lib/services/BankAccounts.js +31 -0
- package/lib/services/BankingAliases.js +137 -0
- package/lib/services/CardPreAuthorizations.js +75 -0
- package/lib/services/CardRegistrations.js +64 -0
- package/lib/services/Cards.js +168 -0
- package/lib/services/Clients.js +196 -0
- package/lib/services/Conversions.js +155 -0
- package/lib/services/Deposits.js +109 -0
- package/lib/services/DisputeDocuments.js +65 -0
- package/lib/services/Disputes.js +409 -0
- package/lib/services/Events.js +24 -0
- package/lib/services/Hooks.js +81 -0
- package/lib/services/Idempotency.js +17 -0
- package/lib/services/IdentityVerifications.js +48 -0
- package/lib/services/KycDocuments.js +66 -0
- package/lib/services/Mandates.js +161 -0
- package/lib/services/OptionsHelper.js +20 -0
- package/lib/services/PayIns.js +690 -0
- package/lib/services/PayOuts.js +110 -0
- package/lib/services/Recipients.js +117 -0
- package/lib/services/Refunds.js +29 -0
- package/lib/services/Regulatory.js +29 -0
- package/lib/services/Reports.js +61 -0
- package/lib/services/ReportsV2.js +55 -0
- package/lib/services/Repudiations.js +33 -0
- package/lib/services/Responses.js +23 -0
- package/lib/services/Settlements.js +74 -0
- package/lib/services/Transfers.js +87 -0
- package/lib/services/UboDeclarations.js +135 -0
- package/lib/services/Users.js +831 -0
- package/lib/services/VirtualAccounts.js +99 -0
- package/lib/services/Wallets.js +85 -0
- package/lib/services/index.js +34 -0
- package/lib/utils.js +36 -0
- package/package.json +40 -0
- package/test/TestKycPageFile.png +0 -0
- package/test/helpers.js +1431 -0
- package/test/main.js +10 -0
- package/test/mocha.opts +3 -0
- package/test/services/BankAccounts.js +46 -0
- package/test/services/BankingAliases.js +89 -0
- package/test/services/CardPreAuthorizations.js +70 -0
- package/test/services/CardRegistrations.js +239 -0
- package/test/services/Cards.js +54 -0
- package/test/services/Clients.js +235 -0
- package/test/services/Conversions.js +308 -0
- package/test/services/Deposits.js +148 -0
- package/test/services/Disputes.js +542 -0
- package/test/services/EMoney.js +54 -0
- package/test/services/Events.js +143 -0
- package/test/services/Hooks.js +109 -0
- package/test/services/Idempotency.js +46 -0
- package/test/services/IdentityVerifications.js +68 -0
- package/test/services/KycDocuments.js +73 -0
- package/test/services/Mandates.js +256 -0
- package/test/services/PayIns.js +2553 -0
- package/test/services/PayOuts.js +106 -0
- package/test/services/RateLimit.js +48 -0
- package/test/services/Recipients.js +234 -0
- package/test/services/Refunds.js +123 -0
- package/test/services/Regulatory.js +45 -0
- package/test/services/Reports.js +114 -0
- package/test/services/ReportsV2.js +306 -0
- package/test/services/Repudiations.js +22 -0
- package/test/services/Settlements.js +58 -0
- package/test/services/Tokens.js +55 -0
- package/test/services/Transfers.js +137 -0
- package/test/services/UboDeclarations.js +135 -0
- package/test/services/Users.js +1303 -0
- package/test/services/VirtualAccounts.js +105 -0
- package/test/services/Wallets.js +132 -0
- package/test/settlement_sample.csv +8 -0
- package/typings/base.d.ts +308 -0
- package/typings/enums.d.ts +204 -0
- package/typings/index.d.ts +885 -0
- package/typings/index.test-d.ts +1535 -0
- package/typings/models/address.d.ts +70 -0
- package/typings/models/bankAccount.d.ts +235 -0
- package/typings/models/bankingAlias.d.ts +97 -0
- package/typings/models/billing.d.ts +42 -0
- package/typings/models/birthplace.d.ts +9 -0
- package/typings/models/card.d.ts +119 -0
- package/typings/models/cardPreauthorization.d.ts +157 -0
- package/typings/models/cardRegistration.d.ts +83 -0
- package/typings/models/cardValidation.d.ts +125 -0
- package/typings/models/client.d.ts +208 -0
- package/typings/models/conversion.d.ts +225 -0
- package/typings/models/conversionRate.d.ts +29 -0
- package/typings/models/countryAuthorization.d.ts +16 -0
- package/typings/models/deposit.d.ts +104 -0
- package/typings/models/dispute.d.ts +116 -0
- package/typings/models/disputeDocument.d.ts +119 -0
- package/typings/models/entityBase.d.ts +9 -0
- package/typings/models/event.d.ts +142 -0
- package/typings/models/hook.d.ts +39 -0
- package/typings/models/idempotency.d.ts +36 -0
- package/typings/models/identityVerification.d.ts +98 -0
- package/typings/models/kycDocument.d.ts +114 -0
- package/typings/models/mandate.d.ts +93 -0
- package/typings/models/money.d.ts +45 -0
- package/typings/models/payIn.d.ts +3742 -0
- package/typings/models/payOut.d.ts +144 -0
- package/typings/models/recipient.d.ts +242 -0
- package/typings/models/refund.d.ts +92 -0
- package/typings/models/report.d.ts +234 -0
- package/typings/models/reportV2.d.ts +145 -0
- package/typings/models/repudiation.d.ts +26 -0
- package/typings/models/securityInfo.d.ts +12 -0
- package/typings/models/settlement.d.ts +50 -0
- package/typings/models/settlementTransfer.d.ts +37 -0
- package/typings/models/shipping.d.ts +37 -0
- package/typings/models/shippingAddress.d.ts +15 -0
- package/typings/models/transaction.d.ts +85 -0
- package/typings/models/transfer.d.ts +119 -0
- package/typings/models/uboDeclaration.d.ts +100 -0
- package/typings/models/user.d.ts +1001 -0
- package/typings/models/virtualAccount.d.ts +182 -0
- package/typings/models/wallet.d.ts +46 -0
- package/typings/models.d.ts +74 -0
- package/typings/services/BankAccounts.d.ts +12 -0
- package/typings/services/BankingAliases.d.ts +51 -0
- package/typings/services/CardPreauthorizations.d.ts +44 -0
- package/typings/services/CardRegistrations.d.ts +43 -0
- package/typings/services/Cards.d.ts +80 -0
- package/typings/services/Clients.d.ts +77 -0
- package/typings/services/Conversions.d.ts +23 -0
- package/typings/services/Deposits.d.ts +20 -0
- package/typings/services/DisputeDocuments.d.ts +27 -0
- package/typings/services/Disputes.d.ts +169 -0
- package/typings/services/Events.d.ts +11 -0
- package/typings/services/Hooks.d.ts +33 -0
- package/typings/services/Idempotency.d.ts +7 -0
- package/typings/services/IdentityVerifications.d.ts +29 -0
- package/typings/services/KycDocuments.d.ts +38 -0
- package/typings/services/Mandates.d.ts +59 -0
- package/typings/services/OptionsHelper.d.ts +11 -0
- package/typings/services/PayIns.d.ts +319 -0
- package/typings/services/PayOuts.d.ts +34 -0
- package/typings/services/Recipients.d.ts +55 -0
- package/typings/services/Refunds.d.ts +12 -0
- package/typings/services/Regulatory.d.ts +17 -0
- package/typings/services/Reports.d.ts +26 -0
- package/typings/services/ReportsV2.d.ts +26 -0
- package/typings/services/Repudiations.d.ts +12 -0
- package/typings/services/Responses.d.ts +10 -0
- package/typings/services/Settlements.d.ts +28 -0
- package/typings/services/Transfers.d.ts +38 -0
- package/typings/services/UboDeclarations.d.ts +81 -0
- package/typings/services/Users.d.ts +308 -0
- package/typings/services/VirtualAccounts.d.ts +42 -0
- package/typings/services/Wallets.d.ts +36 -0
- package/typings/tsconfig.json +20 -0
- package/typings/tslint.json +11 -0
- package/typings/types.d.ts +652 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Examples of getting a user's emoney
|
|
3
|
+
*/
|
|
4
|
+
var mangopay = require('../index');
|
|
5
|
+
|
|
6
|
+
var api = new mangopay({
|
|
7
|
+
clientId: 'sdk-unit-tests',
|
|
8
|
+
clientApiKey: 'cqFfFrWfCcb7UadHNxx2C9Lo6Djw8ZduLi7J9USTmu8bhxxpju'
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
var USER_ID = '1151091';
|
|
12
|
+
var year = 2019;
|
|
13
|
+
|
|
14
|
+
api.Users.getEMoney(USER_ID, year).then(function (data) {
|
|
15
|
+
console.log(data);
|
|
16
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Examples of reading users data
|
|
3
|
+
*/
|
|
4
|
+
var mangopay = require('../index');
|
|
5
|
+
|
|
6
|
+
var api = new mangopay({
|
|
7
|
+
clientId: 'sdk-unit-tests',
|
|
8
|
+
clientApiKey: 'cqFfFrWfCcb7UadHNxx2C9Lo6Djw8ZduLi7J9USTmu8bhxxpju'
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Using both callback and promise. Usually you should be using only one of them
|
|
13
|
+
*/
|
|
14
|
+
api.Users.getNatural('1151091', function(data, response) {
|
|
15
|
+
console.log(data.FirstName);
|
|
16
|
+
console.log(data.LastName);
|
|
17
|
+
}).then(function(data){
|
|
18
|
+
console.log(data.FirstName);
|
|
19
|
+
console.log(data.LastName);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Example of pagination with promise on getAll users API
|
|
24
|
+
*/
|
|
25
|
+
api.Users.getAll({
|
|
26
|
+
parameters: {
|
|
27
|
+
per_page: 2,
|
|
28
|
+
page: 2
|
|
29
|
+
}
|
|
30
|
+
}).then(function(data){
|
|
31
|
+
console.log(data);
|
|
32
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Examples of reading users data
|
|
3
|
+
*/
|
|
4
|
+
var mangopay = require('../index');
|
|
5
|
+
|
|
6
|
+
var api = new mangopay({
|
|
7
|
+
clientId: 'sdk-unit-tests',
|
|
8
|
+
clientApiKey: 'cqFfFrWfCcb7UadHNxx2C9Lo6Djw8ZduLi7J9USTmu8bhxxpju',
|
|
9
|
+
debug: true
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Read full server response object using a callback
|
|
14
|
+
*/
|
|
15
|
+
api.Users.getAll(function (response) {
|
|
16
|
+
// Read pages count
|
|
17
|
+
console.log(response.headers['x-number-of-pages']);
|
|
18
|
+
|
|
19
|
+
// Read response body
|
|
20
|
+
console.log(response.body);
|
|
21
|
+
}, {
|
|
22
|
+
parameters: {
|
|
23
|
+
per_page: 1
|
|
24
|
+
},
|
|
25
|
+
resolveWithFullResponse: true
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Read full server response object using promise
|
|
30
|
+
*/
|
|
31
|
+
api.Users.getAll({
|
|
32
|
+
parameters: {
|
|
33
|
+
per_page: 1
|
|
34
|
+
},
|
|
35
|
+
resolveWithFullResponse: true
|
|
36
|
+
}).then(function(response){
|
|
37
|
+
// Read pages count
|
|
38
|
+
console.log(response.headers['x-number-of-pages']);
|
|
39
|
+
|
|
40
|
+
// Read response body
|
|
41
|
+
console.log(response.body);
|
|
42
|
+
});
|
package/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./lib/mangopay');
|
package/lib/Model.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var _ = require('underscore');
|
|
2
|
+
|
|
3
|
+
function Model(data) {
|
|
4
|
+
var nonNullDefaults = _.omit(this.defaults, _.isEmpty);
|
|
5
|
+
_.extend(this, nonNullDefaults, data);
|
|
6
|
+
this.initialize(data);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
Model.prototype = {
|
|
10
|
+
/**
|
|
11
|
+
* Construct
|
|
12
|
+
*/
|
|
13
|
+
initialize: function() {
|
|
14
|
+
this.parse();
|
|
15
|
+
return;
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Returns object property value
|
|
20
|
+
* @param {string} attribute - Property value to return
|
|
21
|
+
* @returns {*}
|
|
22
|
+
*/
|
|
23
|
+
getData: function(attribute) {
|
|
24
|
+
return this[attribute];
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
*
|
|
29
|
+
* @param {string|Object} attribute - attribute's value to be set or hash of properties with values
|
|
30
|
+
* @param {string=} value - value to be set
|
|
31
|
+
* @returns {object}
|
|
32
|
+
*/
|
|
33
|
+
setData: function(attribute, value) {
|
|
34
|
+
if (typeof attribute === 'object') {
|
|
35
|
+
_.extend(this, attribute);
|
|
36
|
+
} else {
|
|
37
|
+
this[attribute] = value;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return this;
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
getReadOnlyProperties: function() {
|
|
44
|
+
return [];
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
getDependsObjects: function() {
|
|
48
|
+
return [];
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
parse: function() {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
Model.extend = require('./utils').extend;
|
|
57
|
+
|
|
58
|
+
module.exports = Model;
|
package/lib/api.js
ADDED
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
var _ = require('underscore');
|
|
2
|
+
var Promise = require('promise');
|
|
3
|
+
var querystring = require('querystring');
|
|
4
|
+
|
|
5
|
+
var apiMethods = require('./apiMethods');
|
|
6
|
+
var apiModels = require('./models');
|
|
7
|
+
var apiServices = require('./services');
|
|
8
|
+
|
|
9
|
+
var axios = require('axios');
|
|
10
|
+
var FormData = require('form-data');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
* @param {string} username Mangopay username
|
|
15
|
+
* @param {string} apiKey Mangopay api key
|
|
16
|
+
* @returns {string} The header value base64 encoded for requesting the authentication key
|
|
17
|
+
* @private
|
|
18
|
+
*/
|
|
19
|
+
function _getBasicAuthHash(username, apiKey) {
|
|
20
|
+
return 'Basic ' + Buffer.from(username + ':' + apiKey).toString('base64');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var Api = function (config) {
|
|
24
|
+
var defaultConfig = require('./config');
|
|
25
|
+
config = this.config = _.extend({}, defaultConfig, config);
|
|
26
|
+
|
|
27
|
+
axios.defaults.baseURL = config.baseUrl;
|
|
28
|
+
// response timeout
|
|
29
|
+
axios.defaults.timeout = config.responseTimeout;
|
|
30
|
+
|
|
31
|
+
this.errorHandler = config.errorHandler;
|
|
32
|
+
|
|
33
|
+
this.rateLimits = [];
|
|
34
|
+
|
|
35
|
+
// Add default request configuration options
|
|
36
|
+
_.extend(this.requestOptions, {
|
|
37
|
+
// Path options are replacing the ${placeholders} from apiMethods
|
|
38
|
+
path: {
|
|
39
|
+
clientId: config.clientId,
|
|
40
|
+
apiVersion: config.apiVersion
|
|
41
|
+
},
|
|
42
|
+
headers: {
|
|
43
|
+
'Content-Type': 'application/json',
|
|
44
|
+
'User-Agent': 'Mangopay-SDK/' + require('../package.json').version + ` (Nodejs/${process.version})`
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// Adds the services to API object
|
|
49
|
+
this._servicesLoader();
|
|
50
|
+
|
|
51
|
+
return this;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
Api.prototype = {
|
|
55
|
+
config: require('./config'),
|
|
56
|
+
|
|
57
|
+
requestOptions: {
|
|
58
|
+
headers: {}
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Checks if callback is a function or not, and passes the options
|
|
63
|
+
* @param {Object, Function} callback
|
|
64
|
+
* @param {Object} options
|
|
65
|
+
* @param {Object} params Additional params that extend options
|
|
66
|
+
*/
|
|
67
|
+
_getOptions: function (callback, options, params) {
|
|
68
|
+
var finalOptions = options || ((_.isObject(callback) && !_.isFunction(callback)) ? callback : {});
|
|
69
|
+
if (params) {
|
|
70
|
+
finalOptions = _.extend({}, finalOptions, params);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return finalOptions;
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Main API resource request method
|
|
78
|
+
* @param {string} method Mangopay API method to be called
|
|
79
|
+
* @param {function} callback Callback function
|
|
80
|
+
* @param {object} options Hash of configuration to be passed to request
|
|
81
|
+
* @returns {object} request promise
|
|
82
|
+
*/
|
|
83
|
+
method: function (method, callback, options) {
|
|
84
|
+
options = this._getOptions(callback, options);
|
|
85
|
+
|
|
86
|
+
if (this.config.debugMode) {
|
|
87
|
+
this.config.logClass(method, options);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// If data has parse method, call it before passing data
|
|
91
|
+
if (options.data && options.data instanceof this.models.EntityBase) {
|
|
92
|
+
options.data = this.buildRequestData(options.data);
|
|
93
|
+
} else if (options.data && options.data.toJSON) {
|
|
94
|
+
options.data = options.data.toJSON();
|
|
95
|
+
}
|
|
96
|
+
var self = this;
|
|
97
|
+
|
|
98
|
+
// If there's no OAuthKey, request one
|
|
99
|
+
if (!this.requestOptions.headers.Authorization || this.isExpired()) {
|
|
100
|
+
return new Promise(function (resolve, reject) {
|
|
101
|
+
self.authorize()
|
|
102
|
+
.then(function () {
|
|
103
|
+
self.method.call(self, method, function (data, response) {
|
|
104
|
+
// Check if we have to wrap data into a model
|
|
105
|
+
if (_.isFunction(callback)) {
|
|
106
|
+
callback(data, response);
|
|
107
|
+
}
|
|
108
|
+
}, options)
|
|
109
|
+
.then(resolve)
|
|
110
|
+
.catch(reject);
|
|
111
|
+
})
|
|
112
|
+
.catch(reject);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Extend default request options with custom ones, if present
|
|
117
|
+
var requestOptions = _.extend({}, this.requestOptions, options);
|
|
118
|
+
|
|
119
|
+
// If we have custom headers and they don't contain Content-Type, we have to prevent them to override Authentication header
|
|
120
|
+
if (options && options.headers && options.headers['Content-Type'] === undefined) {
|
|
121
|
+
_.extend(requestOptions.headers, this.requestOptions.headers, options.headers);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Append the path placeholders in order to build the proper url for the request
|
|
125
|
+
if (options && options.path) {
|
|
126
|
+
_.extend(requestOptions.path, this.requestOptions.path, options.path);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (this.config.ukHeaderFlag) {
|
|
130
|
+
requestOptions.headers['x-tentant-id'] = 'uk';
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return this._requestApi(requestOptions, method, callback);
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Request method for POST or PUT with multipart file. The file is expected to be in options.data.File, as a Buffer
|
|
138
|
+
* @param {string} method Mangopay API method to be called
|
|
139
|
+
* @param {function} callback Callback function
|
|
140
|
+
* @param {object} options Hash of configuration to be passed to request
|
|
141
|
+
* @returns {object} request promise
|
|
142
|
+
*/
|
|
143
|
+
multipartFormMethod: function (method, callback, options) {
|
|
144
|
+
options = this._getOptions(callback, options);
|
|
145
|
+
if (options.data === undefined || options.data.file === undefined || !Buffer.isBuffer(options.data.file)) {
|
|
146
|
+
throw new Error('options.data.file needs to be a Buffer');
|
|
147
|
+
}
|
|
148
|
+
if (options.data === undefined || options.data.fileName === undefined) {
|
|
149
|
+
throw new Error('options.data.fileName needs to be present');
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (this.config.debugMode) {
|
|
153
|
+
this.config.logClass(method, options);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
var self = this;
|
|
157
|
+
|
|
158
|
+
// If there's no OAuthKey, request one
|
|
159
|
+
if (!this.requestOptions.headers.Authorization || this.isExpired()) {
|
|
160
|
+
return new Promise(function (resolve, reject) {
|
|
161
|
+
self.authorize()
|
|
162
|
+
.then(function () {
|
|
163
|
+
self.multipartFormMethod.call(self, method, function (data, response) {
|
|
164
|
+
// Check if we have to wrap data into a model
|
|
165
|
+
if (_.isFunction(callback)) {
|
|
166
|
+
callback(data, response);
|
|
167
|
+
}
|
|
168
|
+
}, options)
|
|
169
|
+
.then(resolve)
|
|
170
|
+
.catch(reject);
|
|
171
|
+
})
|
|
172
|
+
.catch(reject);
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const form = new FormData();
|
|
177
|
+
form.append('file', options.data.file, {
|
|
178
|
+
filename: options.data.fileName
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
// Extend default request options with custom ones, if present
|
|
182
|
+
var requestOptions = _.extend({}, this.requestOptions, options);
|
|
183
|
+
requestOptions.data = form;
|
|
184
|
+
|
|
185
|
+
// Append the path placeholders in order to build the proper url for the request
|
|
186
|
+
if (options && options.path) {
|
|
187
|
+
_.extend(requestOptions.path, this.requestOptions.path, options.path);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (this.config.ukHeaderFlag) {
|
|
191
|
+
requestOptions.headers['x-tentant-id'] = 'uk';
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// keep only the multipart content-type header
|
|
195
|
+
if (requestOptions.headers['Content-Type'] === 'application/json') {
|
|
196
|
+
delete requestOptions.headers['Content-Type'];
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
requestOptions.headers = Object.assign(
|
|
200
|
+
{},
|
|
201
|
+
requestOptions.headers,
|
|
202
|
+
form.getHeaders()
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
return this._requestApi(requestOptions, method, callback);
|
|
206
|
+
},
|
|
207
|
+
|
|
208
|
+
_requestApi: function (requestOptions, method, callback) {
|
|
209
|
+
var self = this;
|
|
210
|
+
|
|
211
|
+
return new Promise(function (resolve, reject) {
|
|
212
|
+
if (!method) {
|
|
213
|
+
throw new Error('Method is required in order to perform a API server request');
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
var url;
|
|
217
|
+
var methodType;
|
|
218
|
+
|
|
219
|
+
// Allow direct requests: api.method('post', function(){ ... });
|
|
220
|
+
if (['post', 'get', 'put', 'delete'].indexOf(method) === -1) {
|
|
221
|
+
// predefined requests
|
|
222
|
+
url = apiMethods[method][0];
|
|
223
|
+
url = self.replaceUrl(url, requestOptions.path);
|
|
224
|
+
methodType = apiMethods[method][1];
|
|
225
|
+
} else {
|
|
226
|
+
// manual requests
|
|
227
|
+
if (!requestOptions.url) {
|
|
228
|
+
throw new Error('Url must be specified when doing a manual request');
|
|
229
|
+
}
|
|
230
|
+
url = requestOptions.url;
|
|
231
|
+
methodType = method;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if (!url) {
|
|
235
|
+
throw new Error('Url must be specified when doing a manual request');
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
var resolveWithFullResponse = requestOptions.resolveWithFullResponse || false;
|
|
239
|
+
var abortSignal = AbortSignal.timeout(self.config.connectionTimeout)
|
|
240
|
+
|
|
241
|
+
axios({
|
|
242
|
+
method: methodType,
|
|
243
|
+
url: url,
|
|
244
|
+
data: requestOptions.data,
|
|
245
|
+
headers: requestOptions.headers,
|
|
246
|
+
params: requestOptions.parameters,
|
|
247
|
+
signal: abortSignal
|
|
248
|
+
})
|
|
249
|
+
.then(function (response) {
|
|
250
|
+
var resolveArgument = (resolveWithFullResponse) ?
|
|
251
|
+
_.extend(response, {body: response.data}) : response.data;
|
|
252
|
+
|
|
253
|
+
setRateLimits(self, response.headers);
|
|
254
|
+
|
|
255
|
+
// For predefined requests:
|
|
256
|
+
// Add raw response data under 'data' property of the object and at the root of the object
|
|
257
|
+
if (['post', 'get', 'put'].indexOf(method) === -1) {
|
|
258
|
+
_.extend(requestOptions.data, response.data, {data: response.data});
|
|
259
|
+
|
|
260
|
+
// Check if we have to instantiate returned data
|
|
261
|
+
if (requestOptions.dataClass && !resolveWithFullResponse) {
|
|
262
|
+
if (_.isArray(response.data)) {
|
|
263
|
+
resolveArgument = _.map(response.data, function (dataItem) {
|
|
264
|
+
return new requestOptions.dataClass(dataItem);
|
|
265
|
+
});
|
|
266
|
+
} else {
|
|
267
|
+
resolveArgument = new requestOptions.dataClass(response.data);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (_.isFunction(callback)) {
|
|
273
|
+
callback(resolveArgument, response);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
resolve(resolveArgument);
|
|
277
|
+
})
|
|
278
|
+
// The request was made and the server responded with a status code
|
|
279
|
+
// that falls out of the range of 2xx
|
|
280
|
+
.catch(function (error) {
|
|
281
|
+
if (error.code === "ERR_CANCELED" && abortSignal.aborted) {
|
|
282
|
+
var err = {
|
|
283
|
+
Message: "Request timed out",
|
|
284
|
+
Code: 408
|
|
285
|
+
};
|
|
286
|
+
self.errorHandler(err.Message, err);
|
|
287
|
+
reject(err);
|
|
288
|
+
} else {
|
|
289
|
+
var resolveArgument = (resolveWithFullResponse) ?
|
|
290
|
+
_.extend(error.response, {body: error.response.data}) : error.response.data;
|
|
291
|
+
|
|
292
|
+
if (_.isFunction(callback)) {
|
|
293
|
+
callback(resolveArgument, error.response);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
self.errorHandler(error.message, error.response.data);
|
|
297
|
+
reject(resolveArgument);
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
},
|
|
302
|
+
|
|
303
|
+
buildRequestData: function (entity) {
|
|
304
|
+
var self = this;
|
|
305
|
+
|
|
306
|
+
var blackList = entity.getReadOnlyProperties();
|
|
307
|
+
var requestDataKeys = _.difference(_.keys(entity), blackList);
|
|
308
|
+
var requestData = _.pick(entity, requestDataKeys);
|
|
309
|
+
|
|
310
|
+
_.each(_.keys(entity), function (key) {
|
|
311
|
+
if (self.canReadSubRequestData(entity, key)) {
|
|
312
|
+
_.extendOwn(requestData, entity[key].toJSON());
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
return requestData;
|
|
317
|
+
},
|
|
318
|
+
|
|
319
|
+
canReadSubRequestData: function (entity, propertyName) {
|
|
320
|
+
if (entity instanceof this.models.PayIn && (propertyName === 'PaymentDetails' || propertyName === 'ExecutionDetails')) {
|
|
321
|
+
return true;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
if (entity instanceof this.models.PayOut && propertyName === 'MeanOfPaymentDetails') {
|
|
325
|
+
return true;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
if (entity instanceof this.models.BankAccount && propertyName === 'Details') {
|
|
329
|
+
return true;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
return false;
|
|
333
|
+
},
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* OAuth2 authorization mechanism. After authorization request, calls the callback with returned authorization data
|
|
337
|
+
* @param {function} callback
|
|
338
|
+
* @returns {object} request promise
|
|
339
|
+
*/
|
|
340
|
+
authorize: function (callback) {
|
|
341
|
+
var self = this;
|
|
342
|
+
|
|
343
|
+
var auth_post_data = querystring.stringify({
|
|
344
|
+
'grant_type': 'client_credentials'
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
//'Content-Length' doesn't need to be set, it gets set automatically (node-rest-client v3.1.0)
|
|
348
|
+
return new Promise(function (resolve, reject) {
|
|
349
|
+
|
|
350
|
+
var url = self.buildOauthUrl();
|
|
351
|
+
var methodType = apiMethods.authentication_oauth[1];
|
|
352
|
+
|
|
353
|
+
axios({
|
|
354
|
+
method: methodType,
|
|
355
|
+
url: url,
|
|
356
|
+
data: auth_post_data,
|
|
357
|
+
headers: _.extend({}, self.requestOptions.headers, {
|
|
358
|
+
'Authorization': _getBasicAuthHash(self.config.clientId, self.config.clientApiKey),
|
|
359
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
360
|
+
})
|
|
361
|
+
})
|
|
362
|
+
.then(function (response) {
|
|
363
|
+
// Authorization succeeded
|
|
364
|
+
if (response.data.token_type && response.data.access_token) {
|
|
365
|
+
_.extend(self.requestOptions.headers, {
|
|
366
|
+
'Authorization': response.data.token_type + ' ' + response.data.access_token
|
|
367
|
+
});
|
|
368
|
+
// Multiplying expires_in (seconds) by 1000 since JS getTime() is expressed in ms
|
|
369
|
+
self.authorizationExpireTime = new Date().getTime() + (response.data.expires_in * 1000);
|
|
370
|
+
resolve(response.data);
|
|
371
|
+
if (_.isFunction(callback)) {
|
|
372
|
+
callback(response.data);
|
|
373
|
+
}
|
|
374
|
+
} else {
|
|
375
|
+
reject(response.data);
|
|
376
|
+
}
|
|
377
|
+
})
|
|
378
|
+
.catch(function (error) {
|
|
379
|
+
reject(error.response ? error.response.data : error.message);
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
},
|
|
383
|
+
|
|
384
|
+
isExpired: function () {
|
|
385
|
+
// Expressed in ms ( 10 seconds )
|
|
386
|
+
var THRESHOLD = 60000;
|
|
387
|
+
return new Date().getTime() > (this.authorizationExpireTime - THRESHOLD);
|
|
388
|
+
},
|
|
389
|
+
|
|
390
|
+
replaceUrl: function (url, data) {
|
|
391
|
+
// Create regex using the keys of the replacement object.
|
|
392
|
+
const regex = new RegExp('\\${(' + Object.keys(data).join('|') + ')}', 'g');
|
|
393
|
+
|
|
394
|
+
// Replace the string by the value in object
|
|
395
|
+
return url.replace(regex, (m, p1) => data[p1] || m);
|
|
396
|
+
},
|
|
397
|
+
|
|
398
|
+
buildOauthUrl: function() {
|
|
399
|
+
var url = apiMethods.authentication_oauth[0];
|
|
400
|
+
url = this.replaceUrl(url, this.requestOptions.path);
|
|
401
|
+
return url;
|
|
402
|
+
},
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Populates the SDK object with the services
|
|
406
|
+
*/
|
|
407
|
+
_servicesLoader: function () {
|
|
408
|
+
var self = this;
|
|
409
|
+
// Retrieve all services and add them to this object
|
|
410
|
+
// ex: services.User becomes mangopay.Users
|
|
411
|
+
Object.keys(apiServices).forEach(function (serviceName) {
|
|
412
|
+
var ServiceClass = apiServices[serviceName];
|
|
413
|
+
self[serviceName] = new ServiceClass();
|
|
414
|
+
self[serviceName]._api = self;
|
|
415
|
+
});
|
|
416
|
+
|
|
417
|
+
// Retrieve all models and add them to this object
|
|
418
|
+
// ex: models.User becomes mangopay.models.User
|
|
419
|
+
self.models = {};
|
|
420
|
+
Object.keys(apiModels).forEach(function (modelName) {
|
|
421
|
+
self.models[modelName] = apiModels[modelName];
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
};
|
|
425
|
+
|
|
426
|
+
function setRateLimits(self, headers) {
|
|
427
|
+
self.rateLimits = [];
|
|
428
|
+
if (headers !== undefined) {
|
|
429
|
+
let rateLimitReset = headers['x-ratelimit-reset'];
|
|
430
|
+
let rateLimitRemaining = headers['x-ratelimit-remaining'];
|
|
431
|
+
let rateLimitMade = headers['x-ratelimit'];
|
|
432
|
+
|
|
433
|
+
if (rateLimitReset !== undefined && rateLimitRemaining !== undefined && rateLimitMade !== undefined) {
|
|
434
|
+
rateLimitReset = rateLimitReset.split(",");
|
|
435
|
+
rateLimitRemaining = rateLimitRemaining.split(",");
|
|
436
|
+
rateLimitMade = rateLimitMade.split(",");
|
|
437
|
+
|
|
438
|
+
if (rateLimitReset.length === rateLimitRemaining.length && rateLimitReset.length === rateLimitMade.length) {
|
|
439
|
+
const currentTime = Math.floor(Date.now() / 1000);
|
|
440
|
+
for (let i = 0; i < rateLimitReset.length; i++) {
|
|
441
|
+
const numberOfMinutes = (parseInt(rateLimitReset[i]) - currentTime) / 60;
|
|
442
|
+
const rateLimit = {
|
|
443
|
+
resetTimeMillis: parseInt(rateLimitReset[i]),
|
|
444
|
+
callsRemaining: parseInt(rateLimitRemaining[i]),
|
|
445
|
+
callsMade: parseInt(rateLimitMade[i])
|
|
446
|
+
};
|
|
447
|
+
|
|
448
|
+
if (numberOfMinutes <= 15) {
|
|
449
|
+
rateLimit.minutesInterval = 15;
|
|
450
|
+
} else if (numberOfMinutes <= 30) {
|
|
451
|
+
rateLimit.minutesInterval = 30;
|
|
452
|
+
} else if (numberOfMinutes <= 60) {
|
|
453
|
+
rateLimit.minutesInterval = 60;
|
|
454
|
+
} else if (numberOfMinutes <= 60 * 24) {
|
|
455
|
+
rateLimit.minutesInterval = 60 * 24;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
self.rateLimits.push(rateLimit);
|
|
459
|
+
}
|
|
460
|
+
} else {
|
|
461
|
+
console.log("Could not set rate limits: headers length should be the same");
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
module.exports = Api;
|