From 91b842ae48acf55e1222dba702959043da99937a Mon Sep 17 00:00:00 2001 From: xendit-devx-bot Date: Wed, 20 Sep 2023 08:08:45 +0000 Subject: [PATCH] Generated Xendit node SDK --- .editorconfig | 16 - .env.sample | 2 - .eslintignore | 1 - .eslintrc | 43 - .github/workflows/api-key-scanner.yml | 10 - .github/workflows/coverage.yml | 28 - .github/workflows/generate-release-tag.yml | 36 + .github/workflows/lint.yml | 22 - .github/workflows/test.yml | 29 - .gitignore | 10 +- .npmignore | 6 +- .nvmrc | 1 - .openapi-generator-ignore | 23 + .openapi-generator/FILES | 147 + .openapi-generator/VERSION | 1 + .prettierrc | 4 - CHANGELOG.md | 91 - LICENSE | 21 - README.md | 1957 +- balance_and_transaction/apis/Balance.ts | 103 + balance_and_transaction/apis/Transaction.ts | 213 + balance_and_transaction/apis/index.ts | 4 + balance_and_transaction/index.ts | 4 + balance_and_transaction/models/Balance.ts | 60 + .../models/ChannelsCategories.ts | 44 + balance_and_transaction/models/Currency.ts | 192 + .../models/DateRangeFilter.ts | 67 + balance_and_transaction/models/FeeResponse.ts | 106 + balance_and_transaction/models/LinkItem.ts | 78 + balance_and_transaction/models/ServerError.ts | 78 + .../models/TransactionResponse.ts | 253 + .../models/TransactionResponseType.ts | 45 + .../models/TransactionStatuses.ts | 35 + .../models/TransactionTypes.ts | 43 + .../models/TransactionsResponse.ts | 90 + .../models/ValidationError.ts | 86 + balance_and_transaction/models/index.ts | 15 + docs/Balance.md | 42 + docs/Invoice.md | 137 + docs/PaymentMethod.md | 262 + docs/PaymentRequest.md | 198 + docs/Payout.md | 161 + docs/Refund.md | 111 + docs/Transaction.md | 79 + .../balance_and_transaction/models/Balance.md | 11 + .../models/ChannelsCategories.md | 37 + .../models/Currency.md | 333 + .../models/DateRangeFilter.md | 12 + .../models/FeeResponse.md | 15 + .../models/LinkItem.md | 13 + .../models/ServerError.md | 13 + .../models/TransactionResponse.md | 27 + .../models/TransactionResponseType.md | 10 + .../models/TransactionStatuses.md | 19 + .../models/TransactionTypes.md | 35 + .../models/TransactionsResponse.md | 13 + .../models/ValidationError.md | 14 + docs/invoice/models/AddressObject.md | 17 + docs/invoice/models/AlternativeDisplayItem.md | 12 + docs/invoice/models/BadRequestError.md | 12 + docs/invoice/models/Bank.md | 17 + docs/invoice/models/BankCode.md | 23 + docs/invoice/models/CreateInvoiceRequest.md | 30 + docs/invoice/models/CustomerObject.md | 18 + docs/invoice/models/DirectDebit.md | 11 + docs/invoice/models/DirectDebitType.md | 37 + docs/invoice/models/Ewallet.md | 11 + docs/invoice/models/EwalletType.md | 23 + docs/invoice/models/ForbiddenError.md | 12 + docs/invoice/models/Invoice.md | 43 + docs/invoice/models/InvoiceClientType.md | 21 + docs/invoice/models/InvoiceCurrency.md | 15 + .../InvoiceError404ResponseDefinition.md | 12 + docs/invoice/models/InvoiceFee.md | 12 + docs/invoice/models/InvoiceItem.md | 16 + docs/invoice/models/InvoiceNotFoundError.md | 12 + docs/invoice/models/InvoicePaymentMethod.md | 29 + docs/invoice/models/InvoiceStatus.md | 17 + docs/invoice/models/NotificationChannel.md | 17 + docs/invoice/models/NotificationPreference.md | 14 + docs/invoice/models/Paylater.md | 12 + docs/invoice/models/PaylaterType.md | 21 + docs/invoice/models/QrCode.md | 11 + docs/invoice/models/QrCodeType.md | 13 + docs/invoice/models/RetailOutlet.md | 14 + docs/invoice/models/RetailOutletName.md | 27 + docs/invoice/models/ServerError.md | 12 + docs/invoice/models/UnauthorizedError.md | 12 + .../models/BillingInformation.md | 16 + docs/payment_method/models/Card.md | 14 + .../models/CardChannelProperties.md | 14 + docs/payment_method/models/CardParameters.md | 13 + .../models/CardParametersCardInformation.md | 15 + .../models/CardVerificationResults.md | 13 + .../CardVerificationResultsThreeDSecure.md | 15 + .../models/ChannelAmountLimits.md | 13 + .../models/ChannelAmountLimitsAllOf.md | 13 + docs/payment_method/models/ChannelProperty.md | 13 + .../models/ChannelPropertyAllOf.md | 13 + .../models/CreatePaymentMethod409Response.md | 12 + .../models/CreatePaymentMethod503Response.md | 12 + docs/payment_method/models/DirectDebit.md | 15 + .../payment_method/models/DirectDebitAllOf.md | 13 + .../models/DirectDebitBankAccount.md | 14 + .../models/DirectDebitChannelCode.md | 135 + .../models/DirectDebitChannelProperties.md | 18 + .../models/DirectDebitDebitCard.md | 14 + .../models/DirectDebitParameters.md | 12 + docs/payment_method/models/DirectDebitType.md | 15 + docs/payment_method/models/EWallet.md | 13 + docs/payment_method/models/EWalletAccount.md | 14 + .../models/EWalletChannelCode.md | 49 + .../models/EWalletChannelProperties.md | 16 + .../models/EWalletParameters.md | 13 + .../models/GetAllPaymentMethods400Response.md | 12 + .../models/GetAllPaymentMethods403Response.md | 12 + .../models/GetAllPaymentMethods404Response.md | 12 + .../GetAllPaymentMethodsDefaultResponse.md | 12 + docs/payment_method/models/OverTheCounter.md | 14 + .../models/OverTheCounterChannelCode.md | 41 + .../models/OverTheCounterChannelProperties.md | 13 + .../OverTheCounterChannelPropertiesUpdate.md | 12 + .../models/OverTheCounterParameters.md | 14 + .../models/OverTheCounterUpdateParameters.md | 12 + docs/payment_method/models/PaymentChannel.md | 17 + .../models/PaymentChannelAllOf.md | 17 + .../models/PaymentChannelList.md | 13 + .../models/PaymentChannelListLinksInner.md | 13 + .../PaymentChannelListLinksInnerAllOf.md | 13 + docs/payment_method/models/PaymentMethod.md | 32 + .../models/PaymentMethodAction.md | 14 + .../models/PaymentMethodAuthParameters.md | 11 + .../models/PaymentMethodCountry.md | 19 + .../models/PaymentMethodExpireParameters.md | 12 + .../models/PaymentMethodList.md | 12 + .../models/PaymentMethodParameters.md | 24 + .../models/PaymentMethodReusability.md | 13 + .../models/PaymentMethodStatus.md | 21 + .../models/PaymentMethodType.md | 25 + .../models/PaymentMethodUpdateParameters.md | 16 + docs/payment_method/models/QrCode.md | 14 + .../models/QrCodeChannelCode.md | 19 + .../models/QrCodeChannelProperties.md | 12 + .../payment_method/models/QrCodeParameters.md | 14 + .../models/SimulatePaymentRequest.md | 11 + .../models/TokenizedCardInformation.md | 20 + docs/payment_method/models/VirtualAccount.md | 18 + .../models/VirtualAccountAllOf.md | 11 + .../VirtualAccountAlternativeDisplay.md | 12 + .../models/VirtualAccountChannelCode.md | 39 + .../models/VirtualAccountChannelProperties.md | 14 + .../VirtualAccountChannelPropertiesPatch.md | 12 + .../models/VirtualAccountParameters.md | 17 + .../models/VirtualAccountUpdateParameters.md | 15 + docs/payment_request/models/Capture.md | 25 + .../models/CaptureListResponse.md | 12 + .../models/CaptureParameters.md | 12 + docs/payment_request/models/Card.md | 14 + .../models/CardChannelProperties.md | 15 + .../payment_request/models/CardInformation.md | 20 + .../models/CardVerificationResults.md | 13 + .../CardVerificationResultsThreeDSecure.md | 15 + docs/payment_request/models/DirectDebit.md | 15 + .../models/DirectDebitAllOf.md | 13 + .../models/DirectDebitBankAccount.md | 12 + .../models/DirectDebitChannelCode.md | 135 + .../models/DirectDebitChannelProperties.md | 18 + ...DirectDebitChannelPropertiesBankAccount.md | 14 + ...irectDebitChannelPropertiesBankRedirect.md | 13 + .../DirectDebitChannelPropertiesDebitCard.md | 15 + .../models/DirectDebitDebitCard.md | 15 + .../models/DirectDebitParameters.md | 13 + .../payment_request/models/DirectDebitType.md | 15 + docs/payment_request/models/EWallet.md | 13 + docs/payment_request/models/EWalletAccount.md | 14 + docs/payment_request/models/EWalletAllOf.md | 11 + .../models/EWalletChannelCode.md | 47 + .../models/EWalletChannelProperties.md | 16 + .../models/EWalletParameters.md | 12 + docs/payment_request/models/Error.md | 12 + docs/payment_request/models/OverTheCounter.md | 14 + .../models/OverTheCounterChannelCode.md | 41 + .../models/OverTheCounterChannelProperties.md | 13 + .../models/OverTheCounterParameters.md | 14 + docs/payment_request/models/PaymentMethod.md | 25 + .../models/PaymentMethodParameters.md | 19 + .../models/PaymentMethodReusability.md | 13 + .../models/PaymentMethodStatus.md | 19 + .../models/PaymentMethodType.md | 21 + docs/payment_request/models/PaymentRequest.md | 33 + .../models/PaymentRequestAction.md | 15 + .../models/PaymentRequestAuthParameters.md | 11 + .../models/PaymentRequestBasketItem.md | 23 + .../models/PaymentRequestCaptureMethod.md | 13 + .../PaymentRequestCardVerificationResults.md | 13 + ...stCardVerificationResultsThreeDeeSecure.md | 15 + .../models/PaymentRequestChannelProperties.md | 17 + .../models/PaymentRequestCountry.md | 19 + .../models/PaymentRequestCurrency.md | 19 + .../models/PaymentRequestInitiator.md | 13 + .../models/PaymentRequestListResponse.md | 12 + .../models/PaymentRequestParameters.md | 24 + ...ymentRequestParametersChannelProperties.md | 18 + ...RequestParametersChannelPropertiesAllOf.md | 11 + .../PaymentRequestShippingInformation.md | 16 + .../models/PaymentRequestStatus.md | 25 + docs/payment_request/models/QrCode.md | 12 + .../models/QrCodeChannelCode.md | 17 + .../models/QrCodeChannelProperties.md | 12 + .../models/QrCodeParameters.md | 12 + docs/payment_request/models/VirtualAccount.md | 18 + .../models/VirtualAccountAllOf.md | 11 + .../VirtualAccountAlternativeDisplay.md | 12 + .../models/VirtualAccountChannelCode.md | 39 + .../models/VirtualAccountChannelProperties.md | 14 + .../models/VirtualAccountParameters.md | 17 + docs/payout/models/Channel.md | 15 + docs/payout/models/ChannelAccountType.md | 19 + docs/payout/models/ChannelAmountLimits.md | 13 + docs/payout/models/ChannelCategory.md | 15 + docs/payout/models/CreatePayoutRequest.md | 18 + .../models/DigitalPayoutChannelProperties.md | 13 + docs/payout/models/Error.md | 13 + docs/payout/models/ErrorErrorsInner.md | 12 + docs/payout/models/GetPayouts200Response.md | 13 + .../models/GetPayouts200ResponseDataInner.md | 25 + .../models/GetPayouts200ResponseLinks.md | 13 + docs/payout/models/Payout.md | 25 + docs/payout/models/PayoutAllOf.md | 17 + docs/payout/models/ReceiptNotification.md | 13 + docs/refund/models/CreateRefund.md | 17 + docs/refund/models/CreateRefund400Response.md | 12 + docs/refund/models/CreateRefund403Response.md | 12 + docs/refund/models/CreateRefund404Response.md | 12 + docs/refund/models/CreateRefund409Response.md | 12 + docs/refund/models/CreateRefund503Response.md | 12 + .../models/CreateRefundDefaultResponse.md | 12 + docs/refund/models/Refund.md | 22 + docs/refund/models/RefundList.md | 12 + examples/with_async/balance.js | 17 - examples/with_async/card.js | 71 - examples/with_async/customer.js | 38 - examples/with_async/direct_debit.js | 123 - examples/with_async/disbursement.js | 47 - examples/with_async/ewallet.js | 109 - examples/with_async/invoice.js | 42 - examples/with_async/payment_method_v2.js | 48 - examples/with_async/payment_request.js | 40 - examples/with_async/payout.js | 29 - examples/with_async/platform.js | 86 - examples/with_async/qr_code.js | 37 - examples/with_async/recurring.js | 155 - examples/with_async/recurring_payment.js | 43 - examples/with_async/refund.js | 28 - examples/with_async/regional_retail_outlet.js | 36 - examples/with_async/report.js | 39 - examples/with_async/retail_outlet.js | 46 - examples/with_async/transaction.js | 32 - examples/with_async/va.js | 37 - examples/with_promises/balance.js | 16 - examples/with_promises/card.js | 73 - examples/with_promises/customer.js | 39 - examples/with_promises/direct_debit.js | 154 - examples/with_promises/disbursement.js | 55 - examples/with_promises/ewallet.js | 132 - examples/with_promises/invoice.js | 34 - examples/with_promises/payment_methods_v2.js | 37 - examples/with_promises/payment_request.js | 44 - examples/with_promises/payout.js | 28 - examples/with_promises/platform.js | 102 - examples/with_promises/qr_code.js | 49 - examples/with_promises/recurring.js | 184 - examples/with_promises/recurring_payment.js | 52 - examples/with_promises/refund.js | 34 - .../with_promises/regional_retail_outlet.js | 39 - examples/with_promises/report.js | 39 - examples/with_promises/retail_outlet.js | 58 - examples/with_promises/transaction.js | 28 - examples/with_promises/va.js | 41 - examples/xendit.js | 12 - images/header.jpg | Bin 0 -> 134095 bytes index.d.ts | 3 - index.js | 1 - index.ts | 73 + integration_test/balance.test.js | 18 - integration_test/card.test.js | 30 - integration_test/customer.test.js | 30 - integration_test/direct_debit.test.js | 122 - integration_test/disbursement.test.js | 42 - integration_test/ewallet.test.js | 91 - integration_test/index.js | 30 - integration_test/invoice.test.js | 26 - integration_test/payment_method_v2.test.js | 44 - integration_test/payment_request.test.js | 41 - integration_test/payout.test.js | 24 - integration_test/platform.test.js | 75 - integration_test/qr_code.test.js | 41 - integration_test/recurring.test.js | 30 - integration_test/refund.test.js | 28 - .../regional_retail_outlet.test.js | 31 - integration_test/report.test.js | 38 - integration_test/retail_outlet.test.js | 48 - integration_test/transaction.test.js | 27 - integration_test/va.test.js | 41 - integration_test/xendit.test.js | 12 - integration_test/xendit_ph.test.js | 12 - invoice/apis/Invoice.ts | 285 + invoice/apis/index.ts | 3 + invoice/index.ts | 3 + invoice/models/AddressObject.ts | 107 + invoice/models/AlternativeDisplayItem.ts | 67 + invoice/models/BadRequestError.ts | 85 + invoice/models/Bank.ts | 123 + invoice/models/BankCode.ts | 37 + invoice/models/CreateInvoiceRequest.ts | 238 + invoice/models/CustomerObject.ts | 122 + invoice/models/DirectDebit.ts | 67 + invoice/models/DirectDebitType.ts | 44 + invoice/models/Ewallet.ts | 67 + invoice/models/EwalletType.ts | 37 + invoice/models/ForbiddenError.ts | 79 + invoice/models/Invoice.ts | 411 + invoice/models/InvoiceClientType.ts | 36 + invoice/models/InvoiceCurrency.ts | 33 + .../InvoiceError404ResponseDefinition.ts | 79 + invoice/models/InvoiceFee.ts | 69 + invoice/models/InvoiceItem.ts | 102 + invoice/models/InvoiceNotFoundError.ts | 81 + invoice/models/InvoicePaymentMethod.ts | 40 + invoice/models/InvoiceStatus.ts | 34 + invoice/models/NotificationChannel.ts | 34 + invoice/models/NotificationPreference.ts | 90 + invoice/models/Paylater.ts | 75 + invoice/models/PaylaterType.ts | 36 + invoice/models/QrCode.ts | 67 + invoice/models/QrCodeType.ts | 32 + invoice/models/RetailOutlet.ts | 91 + invoice/models/RetailOutletName.ts | 39 + invoice/models/ServerError.ts | 79 + invoice/models/UnauthorizedError.ts | 79 + invoice/models/index.ts | 33 + package-lock.json | 16683 ---------------- package.json | 94 +- payment_method/apis/PaymentMethod.ts | 594 + payment_method/apis/index.ts | 3 + payment_method/index.ts | 3 + payment_method/models/BillingInformation.ts | 100 + payment_method/models/Card.ts | 104 + .../models/CardChannelProperties.ts | 95 + payment_method/models/CardParameters.ts | 89 + .../models/CardParametersCardInformation.ts | 94 + .../models/CardVerificationResults.ts | 83 + .../CardVerificationResultsThreeDSecure.ts | 102 + payment_method/models/ChannelAmountLimits.ts | 75 + .../models/ChannelAmountLimitsAllOf.ts | 75 + payment_method/models/ChannelProperty.ts | 75 + payment_method/models/ChannelPropertyAllOf.ts | 75 + .../models/CreatePaymentMethod409Response.ts | 80 + .../models/CreatePaymentMethod503Response.ts | 78 + payment_method/models/DirectDebit.ts | 125 + payment_method/models/DirectDebitAllOf.ts | 95 + .../models/DirectDebitBankAccount.ts | 83 + .../models/DirectDebitChannelCode.ts | 93 + .../models/DirectDebitChannelProperties.ts | 115 + payment_method/models/DirectDebitDebitCard.ts | 83 + .../models/DirectDebitParameters.ts | 82 + payment_method/models/DirectDebitType.ts | 33 + payment_method/models/EWallet.ts | 95 + payment_method/models/EWalletAccount.ts | 83 + payment_method/models/EWalletChannelCode.ts | 50 + .../models/EWalletChannelProperties.ts | 99 + payment_method/models/EWalletParameters.ts | 95 + .../models/GetAllPaymentMethods400Response.ts | 90 + .../models/GetAllPaymentMethods403Response.ts | 78 + .../models/GetAllPaymentMethods404Response.ts | 77 + .../GetAllPaymentMethodsDefaultResponse.ts | 67 + payment_method/models/OverTheCounter.ts | 98 + .../models/OverTheCounterChannelCode.ts | 46 + .../models/OverTheCounterChannelProperties.ts | 76 + .../OverTheCounterChannelPropertiesUpdate.ts | 67 + .../models/OverTheCounterParameters.ts | 98 + .../models/OverTheCounterUpdateParameters.ts | 74 + payment_method/models/PaymentChannel.ts | 120 + payment_method/models/PaymentChannelAllOf.ts | 120 + payment_method/models/PaymentChannelList.ts | 88 + .../models/PaymentChannelListLinksInner.ts | 88 + .../PaymentChannelListLinksInnerAllOf.ts | 88 + payment_method/models/PaymentMethod.ts | 301 + payment_method/models/PaymentMethodAction.ts | 83 + .../models/PaymentMethodAuthParameters.ts | 60 + payment_method/models/PaymentMethodCountry.ts | 35 + .../models/PaymentMethodExpireParameters.ts | 67 + payment_method/models/PaymentMethodList.ts | 75 + .../models/PaymentMethodParameters.ts | 220 + .../models/PaymentMethodReusability.ts | 32 + payment_method/models/PaymentMethodStatus.ts | 36 + payment_method/models/PaymentMethodType.ts | 38 + .../models/PaymentMethodUpdateParameters.ts | 124 + payment_method/models/QRCode.ts | 96 + payment_method/models/QRCodeChannelCode.ts | 35 + .../models/QRCodeChannelProperties.ts | 67 + payment_method/models/QRCodeParameters.ts | 96 + .../models/SimulatePaymentRequest.ts | 59 + .../models/TokenizedCardInformation.ts | 140 + payment_method/models/VirtualAccount.ts | 146 + payment_method/models/VirtualAccountAllOf.ts | 66 + .../VirtualAccountAlternativeDisplay.ts | 76 + .../models/VirtualAccountChannelCode.ts | 45 + .../models/VirtualAccountChannelProperties.ts | 83 + .../VirtualAccountChannelPropertiesPatch.ts | 67 + .../models/VirtualAccountParameters.ts | 132 + .../models/VirtualAccountUpdateParameters.ts | 108 + payment_method/models/index.ts | 68 + payment_request/apis/PaymentRequest.ts | 394 + payment_request/apis/index.ts | 3 + payment_request/index.ts | 3 + payment_request/models/Capture.ts | 204 + payment_request/models/CaptureListResponse.ts | 76 + payment_request/models/CaptureParameters.ts | 68 + payment_request/models/Card.ts | 111 + .../models/CardChannelProperties.ts | 91 + payment_request/models/CardInformation.ts | 149 + .../models/CardVerificationResults.ts | 82 + .../CardVerificationResultsThreeDSecure.ts | 102 + payment_request/models/DirectDebit.ts | 125 + payment_request/models/DirectDebitAllOf.ts | 95 + .../models/DirectDebitBankAccount.ts | 67 + .../models/DirectDebitChannelCode.ts | 93 + .../models/DirectDebitChannelProperties.ts | 134 + ...DirectDebitChannelPropertiesBankAccount.ts | 83 + ...irectDebitChannelPropertiesBankRedirect.ts | 75 + .../DirectDebitChannelPropertiesDebitCard.ts | 91 + .../models/DirectDebitDebitCard.ts | 91 + .../models/DirectDebitParameters.ts | 96 + payment_request/models/DirectDebitType.ts | 33 + payment_request/models/EWallet.ts | 94 + payment_request/models/EWalletAccount.ts | 83 + payment_request/models/EWalletAllOf.ts | 66 + payment_request/models/EWalletChannelCode.ts | 49 + .../models/EWalletChannelProperties.ts | 99 + payment_request/models/EWalletParameters.ts | 80 + payment_request/models/ModelError.ts | 131 + payment_request/models/OverTheCounter.ts | 104 + .../models/OverTheCounterChannelCode.ts | 46 + .../models/OverTheCounterChannelProperties.ts | 76 + .../models/OverTheCounterParameters.ts | 104 + payment_request/models/PaymentMethod.ts | 230 + .../models/PaymentMethodParameters.ts | 168 + .../models/PaymentMethodReusability.ts | 32 + payment_request/models/PaymentMethodStatus.ts | 35 + payment_request/models/PaymentMethodType.ts | 36 + payment_request/models/PaymentRequest.ts | 304 + .../models/PaymentRequestAction.ts | 121 + .../models/PaymentRequestAuthParameters.ts | 60 + .../models/PaymentRequestBasketItem.ts | 160 + .../models/PaymentRequestCaptureMethod.ts | 32 + .../PaymentRequestCardVerificationResults.ts | 83 + ...stCardVerificationResultsThreeDeeSecure.ts | 91 + .../models/PaymentRequestChannelProperties.ts | 107 + .../models/PaymentRequestCountry.ts | 35 + .../models/PaymentRequestCurrency.ts | 35 + .../models/PaymentRequestInitiator.ts | 32 + .../models/PaymentRequestListResponse.ts | 76 + .../models/PaymentRequestParameters.ts | 207 + ...ymentRequestParametersChannelProperties.ts | 115 + ...RequestParametersChannelPropertiesAllOf.ts | 59 + .../PaymentRequestShippingInformation.ts | 100 + .../models/PaymentRequestStatus.ts | 38 + payment_request/models/QRCode.ts | 80 + payment_request/models/QRCodeChannelCode.ts | 34 + .../models/QRCodeChannelProperties.ts | 67 + payment_request/models/QRCodeParameters.ts | 80 + payment_request/models/VirtualAccount.ts | 152 + payment_request/models/VirtualAccountAllOf.ts | 66 + .../VirtualAccountAlternativeDisplay.ts | 76 + .../models/VirtualAccountChannelCode.ts | 45 + .../models/VirtualAccountChannelProperties.ts | 84 + .../models/VirtualAccountParameters.ts | 138 + payment_request/models/index.ts | 64 + payout/apis/Payout.ts | 284 + payout/apis/index.ts | 3 + payout/index.ts | 3 + payout/models/Channel.ts | 109 + payout/models/ChannelAccountType.ts | 35 + payout/models/ChannelAmountLimits.ts | 78 + payout/models/ChannelCategory.ts | 33 + payout/models/CreatePayoutRequest.ts | 133 + .../models/DigitalPayoutChannelProperties.ts | 83 + payout/models/ErrorErrorsInner.ts | 69 + payout/models/GetPayouts200Response.ts | 88 + .../models/GetPayouts200ResponseDataInner.ts | 228 + payout/models/GetPayouts200ResponseLinks.ts | 75 + payout/models/ModelError.ts | 84 + payout/models/Payout.ts | 222 + payout/models/PayoutAllOf.ts | 140 + payout/models/ReceiptNotification.ts | 75 + payout/models/index.ts | 16 + refund/apis/Refund.ts | 197 + refund/apis/index.ts | 3 + refund/index.ts | 3 + refund/models/CreateRefund.ts | 121 + refund/models/CreateRefund400Response.ts | 83 + refund/models/CreateRefund403Response.ts | 77 + refund/models/CreateRefund404Response.ts | 77 + refund/models/CreateRefund409Response.ts | 78 + refund/models/CreateRefund503Response.ts | 78 + refund/models/CreateRefundDefaultResponse.ts | 67 + refund/models/Refund.ts | 147 + refund/models/RefundList.ts | 75 + refund/models/index.ts | 11 + runtime.ts | 377 + src/balance/balance.d.ts | 20 - src/balance/balance.js | 56 - src/balance/index.d.ts | 3 - src/balance/index.js | 3 - src/card/authorization.d.ts | 20 - src/card/authorization.js | 39 - src/card/card.d.ts | 21 - src/card/card.js | 38 - src/card/card_status.js | 5 - src/card/charge.d.ts | 28 - src/card/charge.js | 99 - src/card/index.d.ts | 3 - src/card/index.js | 5 - src/card/promotion.d.ts | 14 - src/card/promotion.js | 44 - src/card/refund.d.ts | 7 - src/card/refund.js | 35 - src/customer/customer.d.ts | 53 - src/customer/customer.js | 145 - src/customer/index.d.ts | 3 - src/customer/index.js | 3 - src/direct_debit/direct_debit.d.ts | 34 - src/direct_debit/direct_debit.js | 51 - src/direct_debit/direct_debit_payment.d.ts | 44 - src/direct_debit/direct_debit_payment.js | 132 - src/direct_debit/index.d.ts | 3 - src/direct_debit/index.js | 3 - src/direct_debit/linked_account.d.ts | 35 - src/direct_debit/linked_account.js | 98 - src/direct_debit/payment_method.d.ts | 19 - src/direct_debit/payment_method.js | 51 - src/disbursement/bank.d.ts | 1 - src/disbursement/bank.js | 16 - src/disbursement/disburse.d.ts | 20 - src/disbursement/disburse.js | 139 - src/disbursement/disbursement.d.ts | 15 - src/disbursement/disbursement.js | 31 - src/disbursement/index.d.ts | 3 - src/disbursement/index.js | 3 - src/errors/index.d.ts | 4 - src/errors/index.js | 4 - src/ewallet/ewallet.d.ts | 33 - src/ewallet/ewallet.js | 49 - src/ewallet/ewallet_charge.d.ts | 59 - src/ewallet/ewallet_charge.js | 119 - src/ewallet/ewallet_payment.d.ts | 34 - src/ewallet/ewallet_payment.js | 105 - src/ewallet/index.d.ts | 3 - src/ewallet/index.js | 3 - src/ewallet/linked_account.d.ts | 18 - src/ewallet/linked_account.js | 60 - src/ewallet/payment_method.d.ts | 19 - src/ewallet/payment_method.js | 50 - src/invoice/index.d.ts | 3 - src/invoice/index.js | 3 - src/invoice/invoice.d.ts | 53 - src/invoice/invoice.js | 173 - src/payment_method_v2/index.d.ts | 3 - src/payment_method_v2/index.js | 3 - src/payment_method_v2/payment_method_v2.d.ts | 239 - src/payment_method_v2/payment_method_v2.js | 291 - src/payment_request/index.d.ts | 3 - src/payment_request/index.js | 3 - src/payment_request/payment_request.d.ts | 106 - src/payment_request/payment_request.js | 186 - src/payout/index.d.ts | 3 - src/payout/index.js | 3 - src/payout/payout.d.ts | 15 - src/payout/payout.js | 76 - src/platform/index.d.ts | 3 - src/platform/index.js | 3 - src/platform/platform.d.ts | 59 - src/platform/platform.js | 200 - src/qr_code/index.d.ts | 3 - src/qr_code/index.js | 3 - src/qr_code/qr_code.d.ts | 32 - src/qr_code/qr_code.js | 118 - src/recurring/index.d.ts | 3 - src/recurring/index.js | 3 - src/recurring/manage_cycles.d.ts | 90 - src/recurring/manage_cycles.js | 116 - src/recurring/manage_plans.d.ts | 101 - src/recurring/manage_plans.js | 130 - src/recurring/manage_schedules.d.ts | 67 - src/recurring/manage_schedules.js | 86 - src/recurring/recurring.d.ts | 44 - src/recurring/recurring.js | 92 - src/recurring_payment/index.d.ts | 3 - src/recurring_payment/index.js | 3 - src/recurring_payment/manage_payments.d.ts | 54 - src/recurring_payment/manage_payments.js | 97 - src/recurring_payment/operate_payments.d.ts | 5 - src/recurring_payment/operate_payments.js | 30 - src/recurring_payment/recurring_payment.d.ts | 29 - src/recurring_payment/recurring_payment.js | 49 - src/refund/index.d.ts | 3 - src/refund/index.js | 3 - src/refund/refund.d.ts | 39 - src/refund/refund.js | 128 - src/regional_retail_outlet/index.d.ts | 3 - src/regional_retail_outlet/index.js | 3 - .../regional_retail_outlet.d.ts | 28 - .../regional_retail_outlet.js | 100 - src/report/index.d.ts | 3 - src/report/index.js | 3 - src/report/report.d.ts | 35 - src/report/report.js | 66 - src/retail_outlet/index.d.ts | 3 - src/retail_outlet/index.js | 3 - src/retail_outlet/retail_outlet.d.ts | 30 - src/retail_outlet/retail_outlet.js | 133 - src/transaction/index.d.ts | 3 - src/transaction/index.js | 3 - src/transaction/query.js | 19 - src/transaction/transaction.d.ts | 26 - src/transaction/transaction.js | 74 - src/utils/auth.d.ts | 9 - src/utils/auth.js | 18 - src/utils/fetch_with_http_err.d.ts | 5 - src/utils/fetch_with_http_err.js | 40 - src/utils/index.js | 13 - src/utils/prom_with_js_err.d.ts | 4 - src/utils/prom_with_js_err.js | 11 - src/utils/query_string_with_no_undefined.d.ts | 3 - src/utils/query_string_with_no_undefined.js | 12 - src/utils/validate.d.ts | 15 - src/utils/validate.js | 43 - src/va/account.d.ts | 31 - src/va/account.js | 105 - src/va/bank.d.ts | 1 - src/va/bank.js | 22 - src/va/index.d.ts | 3 - src/va/index.js | 5 - src/va/payment.d.ts | 4 - src/va/payment.js | 31 - src/va/va.d.ts | 16 - src/va/va.js | 32 - src/xendit.d.ts | 47 - src/xendit.js | 74 - src/xendit_opts.d.ts | 4 - test/balance/balance.test.js | 33 - test/balance/constants.js | 5 - test/card/authorization.test.js | 82 - test/card/card.test.js | 18 - test/card/charge.test.js | 108 - test/card/constants.js | 103 - test/card/promotion.test.js | 78 - test/card/refund.test.js | 48 - test/card/token.test.js | 59 - test/customer/constants.js | 90 - test/customer/customer.test.js | 161 - test/direct_debit/constants.js | 195 - test/direct_debit/direct_debit.test.js | 16 - .../direct_debit/direct_debit_payment.test.js | 181 - test/direct_debit/linked_account.test.js | 119 - test/direct_debit/payment_method.test.js | 82 - test/disbursement/bank.test.js | 28 - test/disbursement/constants.js | 60 - test/disbursement/disburse.test.js | 204 - test/disbursement/disbursement.test.js | 14 - test/ewallet/constants.js | 144 - test/ewallet/ewallet.test.js | 18 - test/ewallet/ewallet_charge.test.js | 121 - test/ewallet/ewallet_payment.test.js | 143 - test/ewallet/linked_account.test.js | 91 - test/ewallet/payment_method.test.js | 85 - test/invoice/constants.js | 22 - test/invoice/invoice.test.js | 120 - test/payment_method_v2/constants.js | 293 - .../payment_method_v2.test.js | 162 - test/payment_request/constants.js | 239 - test/payment_request/payment_request.test.js | 156 - test/payout/constants.js | 18 - test/payout/payout.test.js | 100 - test/platform/constants.js | 129 - test/platform/platform.test.js | 240 - test/qr_code/constants.js | 48 - test/qr_code/qr_code.test.js | 123 - test/recurring/constants.js | 137 - test/recurring/recurring.test.js | 16 - test/recurring/recurring_cycle.test.js | 194 - test/recurring/recurring_plan.test.js | 216 - test/recurring/recurring_schedule.test.js | 135 - test/recurring_payment/constants.js | 60 - .../recurring_payment/manage_payments.test.js | 111 - .../operate_payments.test.js | 46 - .../recurring_payment.test.js | 14 - test/refund/constans.js | 72 - test/refund/refund.test.js | 66 - test/report/constants.js | 49 - test/report/report.test.js | 81 - test/retail_outlet/constants.js | 55 - test/retail_outlet/retail_outlet.test.js | 141 - test/transaction/constants.js | 79 - test/transaction/transaction.test.js | 69 - test/utils/validate.test.js | 32 - test/va/account.test.js | 110 - test/va/bank.test.js | 28 - test/va/constants.js | 38 - test/va/payment.test.js | 43 - test/va/va.test.js | 16 - tsconfig.json | 20 + 713 files changed, 25449 insertions(+), 33675 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .env.sample delete mode 100644 .eslintignore delete mode 100644 .eslintrc delete mode 100644 .github/workflows/api-key-scanner.yml delete mode 100644 .github/workflows/coverage.yml create mode 100644 .github/workflows/generate-release-tag.yml delete mode 100644 .github/workflows/lint.yml delete mode 100644 .github/workflows/test.yml delete mode 100644 .nvmrc create mode 100644 .openapi-generator-ignore create mode 100644 .openapi-generator/FILES create mode 100644 .openapi-generator/VERSION delete mode 100644 .prettierrc delete mode 100644 CHANGELOG.md delete mode 100644 LICENSE create mode 100644 balance_and_transaction/apis/Balance.ts create mode 100644 balance_and_transaction/apis/Transaction.ts create mode 100644 balance_and_transaction/apis/index.ts create mode 100644 balance_and_transaction/index.ts create mode 100644 balance_and_transaction/models/Balance.ts create mode 100644 balance_and_transaction/models/ChannelsCategories.ts create mode 100644 balance_and_transaction/models/Currency.ts create mode 100644 balance_and_transaction/models/DateRangeFilter.ts create mode 100644 balance_and_transaction/models/FeeResponse.ts create mode 100644 balance_and_transaction/models/LinkItem.ts create mode 100644 balance_and_transaction/models/ServerError.ts create mode 100644 balance_and_transaction/models/TransactionResponse.ts create mode 100644 balance_and_transaction/models/TransactionResponseType.ts create mode 100644 balance_and_transaction/models/TransactionStatuses.ts create mode 100644 balance_and_transaction/models/TransactionTypes.ts create mode 100644 balance_and_transaction/models/TransactionsResponse.ts create mode 100644 balance_and_transaction/models/ValidationError.ts create mode 100644 balance_and_transaction/models/index.ts create mode 100644 docs/Balance.md create mode 100644 docs/Invoice.md create mode 100644 docs/PaymentMethod.md create mode 100644 docs/PaymentRequest.md create mode 100644 docs/Payout.md create mode 100644 docs/Refund.md create mode 100644 docs/Transaction.md create mode 100644 docs/balance_and_transaction/models/Balance.md create mode 100644 docs/balance_and_transaction/models/ChannelsCategories.md create mode 100644 docs/balance_and_transaction/models/Currency.md create mode 100644 docs/balance_and_transaction/models/DateRangeFilter.md create mode 100644 docs/balance_and_transaction/models/FeeResponse.md create mode 100644 docs/balance_and_transaction/models/LinkItem.md create mode 100644 docs/balance_and_transaction/models/ServerError.md create mode 100644 docs/balance_and_transaction/models/TransactionResponse.md create mode 100644 docs/balance_and_transaction/models/TransactionResponseType.md create mode 100644 docs/balance_and_transaction/models/TransactionStatuses.md create mode 100644 docs/balance_and_transaction/models/TransactionTypes.md create mode 100644 docs/balance_and_transaction/models/TransactionsResponse.md create mode 100644 docs/balance_and_transaction/models/ValidationError.md create mode 100644 docs/invoice/models/AddressObject.md create mode 100644 docs/invoice/models/AlternativeDisplayItem.md create mode 100644 docs/invoice/models/BadRequestError.md create mode 100644 docs/invoice/models/Bank.md create mode 100644 docs/invoice/models/BankCode.md create mode 100644 docs/invoice/models/CreateInvoiceRequest.md create mode 100644 docs/invoice/models/CustomerObject.md create mode 100644 docs/invoice/models/DirectDebit.md create mode 100644 docs/invoice/models/DirectDebitType.md create mode 100644 docs/invoice/models/Ewallet.md create mode 100644 docs/invoice/models/EwalletType.md create mode 100644 docs/invoice/models/ForbiddenError.md create mode 100644 docs/invoice/models/Invoice.md create mode 100644 docs/invoice/models/InvoiceClientType.md create mode 100644 docs/invoice/models/InvoiceCurrency.md create mode 100644 docs/invoice/models/InvoiceError404ResponseDefinition.md create mode 100644 docs/invoice/models/InvoiceFee.md create mode 100644 docs/invoice/models/InvoiceItem.md create mode 100644 docs/invoice/models/InvoiceNotFoundError.md create mode 100644 docs/invoice/models/InvoicePaymentMethod.md create mode 100644 docs/invoice/models/InvoiceStatus.md create mode 100644 docs/invoice/models/NotificationChannel.md create mode 100644 docs/invoice/models/NotificationPreference.md create mode 100644 docs/invoice/models/Paylater.md create mode 100644 docs/invoice/models/PaylaterType.md create mode 100644 docs/invoice/models/QrCode.md create mode 100644 docs/invoice/models/QrCodeType.md create mode 100644 docs/invoice/models/RetailOutlet.md create mode 100644 docs/invoice/models/RetailOutletName.md create mode 100644 docs/invoice/models/ServerError.md create mode 100644 docs/invoice/models/UnauthorizedError.md create mode 100644 docs/payment_method/models/BillingInformation.md create mode 100644 docs/payment_method/models/Card.md create mode 100644 docs/payment_method/models/CardChannelProperties.md create mode 100644 docs/payment_method/models/CardParameters.md create mode 100644 docs/payment_method/models/CardParametersCardInformation.md create mode 100644 docs/payment_method/models/CardVerificationResults.md create mode 100644 docs/payment_method/models/CardVerificationResultsThreeDSecure.md create mode 100644 docs/payment_method/models/ChannelAmountLimits.md create mode 100644 docs/payment_method/models/ChannelAmountLimitsAllOf.md create mode 100644 docs/payment_method/models/ChannelProperty.md create mode 100644 docs/payment_method/models/ChannelPropertyAllOf.md create mode 100644 docs/payment_method/models/CreatePaymentMethod409Response.md create mode 100644 docs/payment_method/models/CreatePaymentMethod503Response.md create mode 100644 docs/payment_method/models/DirectDebit.md create mode 100644 docs/payment_method/models/DirectDebitAllOf.md create mode 100644 docs/payment_method/models/DirectDebitBankAccount.md create mode 100644 docs/payment_method/models/DirectDebitChannelCode.md create mode 100644 docs/payment_method/models/DirectDebitChannelProperties.md create mode 100644 docs/payment_method/models/DirectDebitDebitCard.md create mode 100644 docs/payment_method/models/DirectDebitParameters.md create mode 100644 docs/payment_method/models/DirectDebitType.md create mode 100644 docs/payment_method/models/EWallet.md create mode 100644 docs/payment_method/models/EWalletAccount.md create mode 100644 docs/payment_method/models/EWalletChannelCode.md create mode 100644 docs/payment_method/models/EWalletChannelProperties.md create mode 100644 docs/payment_method/models/EWalletParameters.md create mode 100644 docs/payment_method/models/GetAllPaymentMethods400Response.md create mode 100644 docs/payment_method/models/GetAllPaymentMethods403Response.md create mode 100644 docs/payment_method/models/GetAllPaymentMethods404Response.md create mode 100644 docs/payment_method/models/GetAllPaymentMethodsDefaultResponse.md create mode 100644 docs/payment_method/models/OverTheCounter.md create mode 100644 docs/payment_method/models/OverTheCounterChannelCode.md create mode 100644 docs/payment_method/models/OverTheCounterChannelProperties.md create mode 100644 docs/payment_method/models/OverTheCounterChannelPropertiesUpdate.md create mode 100644 docs/payment_method/models/OverTheCounterParameters.md create mode 100644 docs/payment_method/models/OverTheCounterUpdateParameters.md create mode 100644 docs/payment_method/models/PaymentChannel.md create mode 100644 docs/payment_method/models/PaymentChannelAllOf.md create mode 100644 docs/payment_method/models/PaymentChannelList.md create mode 100644 docs/payment_method/models/PaymentChannelListLinksInner.md create mode 100644 docs/payment_method/models/PaymentChannelListLinksInnerAllOf.md create mode 100644 docs/payment_method/models/PaymentMethod.md create mode 100644 docs/payment_method/models/PaymentMethodAction.md create mode 100644 docs/payment_method/models/PaymentMethodAuthParameters.md create mode 100644 docs/payment_method/models/PaymentMethodCountry.md create mode 100644 docs/payment_method/models/PaymentMethodExpireParameters.md create mode 100644 docs/payment_method/models/PaymentMethodList.md create mode 100644 docs/payment_method/models/PaymentMethodParameters.md create mode 100644 docs/payment_method/models/PaymentMethodReusability.md create mode 100644 docs/payment_method/models/PaymentMethodStatus.md create mode 100644 docs/payment_method/models/PaymentMethodType.md create mode 100644 docs/payment_method/models/PaymentMethodUpdateParameters.md create mode 100644 docs/payment_method/models/QrCode.md create mode 100644 docs/payment_method/models/QrCodeChannelCode.md create mode 100644 docs/payment_method/models/QrCodeChannelProperties.md create mode 100644 docs/payment_method/models/QrCodeParameters.md create mode 100644 docs/payment_method/models/SimulatePaymentRequest.md create mode 100644 docs/payment_method/models/TokenizedCardInformation.md create mode 100644 docs/payment_method/models/VirtualAccount.md create mode 100644 docs/payment_method/models/VirtualAccountAllOf.md create mode 100644 docs/payment_method/models/VirtualAccountAlternativeDisplay.md create mode 100644 docs/payment_method/models/VirtualAccountChannelCode.md create mode 100644 docs/payment_method/models/VirtualAccountChannelProperties.md create mode 100644 docs/payment_method/models/VirtualAccountChannelPropertiesPatch.md create mode 100644 docs/payment_method/models/VirtualAccountParameters.md create mode 100644 docs/payment_method/models/VirtualAccountUpdateParameters.md create mode 100644 docs/payment_request/models/Capture.md create mode 100644 docs/payment_request/models/CaptureListResponse.md create mode 100644 docs/payment_request/models/CaptureParameters.md create mode 100644 docs/payment_request/models/Card.md create mode 100644 docs/payment_request/models/CardChannelProperties.md create mode 100644 docs/payment_request/models/CardInformation.md create mode 100644 docs/payment_request/models/CardVerificationResults.md create mode 100644 docs/payment_request/models/CardVerificationResultsThreeDSecure.md create mode 100644 docs/payment_request/models/DirectDebit.md create mode 100644 docs/payment_request/models/DirectDebitAllOf.md create mode 100644 docs/payment_request/models/DirectDebitBankAccount.md create mode 100644 docs/payment_request/models/DirectDebitChannelCode.md create mode 100644 docs/payment_request/models/DirectDebitChannelProperties.md create mode 100644 docs/payment_request/models/DirectDebitChannelPropertiesBankAccount.md create mode 100644 docs/payment_request/models/DirectDebitChannelPropertiesBankRedirect.md create mode 100644 docs/payment_request/models/DirectDebitChannelPropertiesDebitCard.md create mode 100644 docs/payment_request/models/DirectDebitDebitCard.md create mode 100644 docs/payment_request/models/DirectDebitParameters.md create mode 100644 docs/payment_request/models/DirectDebitType.md create mode 100644 docs/payment_request/models/EWallet.md create mode 100644 docs/payment_request/models/EWalletAccount.md create mode 100644 docs/payment_request/models/EWalletAllOf.md create mode 100644 docs/payment_request/models/EWalletChannelCode.md create mode 100644 docs/payment_request/models/EWalletChannelProperties.md create mode 100644 docs/payment_request/models/EWalletParameters.md create mode 100644 docs/payment_request/models/Error.md create mode 100644 docs/payment_request/models/OverTheCounter.md create mode 100644 docs/payment_request/models/OverTheCounterChannelCode.md create mode 100644 docs/payment_request/models/OverTheCounterChannelProperties.md create mode 100644 docs/payment_request/models/OverTheCounterParameters.md create mode 100644 docs/payment_request/models/PaymentMethod.md create mode 100644 docs/payment_request/models/PaymentMethodParameters.md create mode 100644 docs/payment_request/models/PaymentMethodReusability.md create mode 100644 docs/payment_request/models/PaymentMethodStatus.md create mode 100644 docs/payment_request/models/PaymentMethodType.md create mode 100644 docs/payment_request/models/PaymentRequest.md create mode 100644 docs/payment_request/models/PaymentRequestAction.md create mode 100644 docs/payment_request/models/PaymentRequestAuthParameters.md create mode 100644 docs/payment_request/models/PaymentRequestBasketItem.md create mode 100644 docs/payment_request/models/PaymentRequestCaptureMethod.md create mode 100644 docs/payment_request/models/PaymentRequestCardVerificationResults.md create mode 100644 docs/payment_request/models/PaymentRequestCardVerificationResultsThreeDeeSecure.md create mode 100644 docs/payment_request/models/PaymentRequestChannelProperties.md create mode 100644 docs/payment_request/models/PaymentRequestCountry.md create mode 100644 docs/payment_request/models/PaymentRequestCurrency.md create mode 100644 docs/payment_request/models/PaymentRequestInitiator.md create mode 100644 docs/payment_request/models/PaymentRequestListResponse.md create mode 100644 docs/payment_request/models/PaymentRequestParameters.md create mode 100644 docs/payment_request/models/PaymentRequestParametersChannelProperties.md create mode 100644 docs/payment_request/models/PaymentRequestParametersChannelPropertiesAllOf.md create mode 100644 docs/payment_request/models/PaymentRequestShippingInformation.md create mode 100644 docs/payment_request/models/PaymentRequestStatus.md create mode 100644 docs/payment_request/models/QrCode.md create mode 100644 docs/payment_request/models/QrCodeChannelCode.md create mode 100644 docs/payment_request/models/QrCodeChannelProperties.md create mode 100644 docs/payment_request/models/QrCodeParameters.md create mode 100644 docs/payment_request/models/VirtualAccount.md create mode 100644 docs/payment_request/models/VirtualAccountAllOf.md create mode 100644 docs/payment_request/models/VirtualAccountAlternativeDisplay.md create mode 100644 docs/payment_request/models/VirtualAccountChannelCode.md create mode 100644 docs/payment_request/models/VirtualAccountChannelProperties.md create mode 100644 docs/payment_request/models/VirtualAccountParameters.md create mode 100644 docs/payout/models/Channel.md create mode 100644 docs/payout/models/ChannelAccountType.md create mode 100644 docs/payout/models/ChannelAmountLimits.md create mode 100644 docs/payout/models/ChannelCategory.md create mode 100644 docs/payout/models/CreatePayoutRequest.md create mode 100644 docs/payout/models/DigitalPayoutChannelProperties.md create mode 100644 docs/payout/models/Error.md create mode 100644 docs/payout/models/ErrorErrorsInner.md create mode 100644 docs/payout/models/GetPayouts200Response.md create mode 100644 docs/payout/models/GetPayouts200ResponseDataInner.md create mode 100644 docs/payout/models/GetPayouts200ResponseLinks.md create mode 100644 docs/payout/models/Payout.md create mode 100644 docs/payout/models/PayoutAllOf.md create mode 100644 docs/payout/models/ReceiptNotification.md create mode 100644 docs/refund/models/CreateRefund.md create mode 100644 docs/refund/models/CreateRefund400Response.md create mode 100644 docs/refund/models/CreateRefund403Response.md create mode 100644 docs/refund/models/CreateRefund404Response.md create mode 100644 docs/refund/models/CreateRefund409Response.md create mode 100644 docs/refund/models/CreateRefund503Response.md create mode 100644 docs/refund/models/CreateRefundDefaultResponse.md create mode 100644 docs/refund/models/Refund.md create mode 100644 docs/refund/models/RefundList.md delete mode 100644 examples/with_async/balance.js delete mode 100644 examples/with_async/card.js delete mode 100644 examples/with_async/customer.js delete mode 100644 examples/with_async/direct_debit.js delete mode 100644 examples/with_async/disbursement.js delete mode 100644 examples/with_async/ewallet.js delete mode 100644 examples/with_async/invoice.js delete mode 100644 examples/with_async/payment_method_v2.js delete mode 100644 examples/with_async/payment_request.js delete mode 100644 examples/with_async/payout.js delete mode 100644 examples/with_async/platform.js delete mode 100644 examples/with_async/qr_code.js delete mode 100644 examples/with_async/recurring.js delete mode 100644 examples/with_async/recurring_payment.js delete mode 100644 examples/with_async/refund.js delete mode 100644 examples/with_async/regional_retail_outlet.js delete mode 100644 examples/with_async/report.js delete mode 100644 examples/with_async/retail_outlet.js delete mode 100644 examples/with_async/transaction.js delete mode 100644 examples/with_async/va.js delete mode 100644 examples/with_promises/balance.js delete mode 100644 examples/with_promises/card.js delete mode 100644 examples/with_promises/customer.js delete mode 100644 examples/with_promises/direct_debit.js delete mode 100644 examples/with_promises/disbursement.js delete mode 100644 examples/with_promises/ewallet.js delete mode 100644 examples/with_promises/invoice.js delete mode 100644 examples/with_promises/payment_methods_v2.js delete mode 100644 examples/with_promises/payment_request.js delete mode 100644 examples/with_promises/payout.js delete mode 100644 examples/with_promises/platform.js delete mode 100644 examples/with_promises/qr_code.js delete mode 100644 examples/with_promises/recurring.js delete mode 100644 examples/with_promises/recurring_payment.js delete mode 100644 examples/with_promises/refund.js delete mode 100644 examples/with_promises/regional_retail_outlet.js delete mode 100644 examples/with_promises/report.js delete mode 100644 examples/with_promises/retail_outlet.js delete mode 100644 examples/with_promises/transaction.js delete mode 100644 examples/with_promises/va.js delete mode 100644 examples/xendit.js create mode 100644 images/header.jpg delete mode 100644 index.d.ts delete mode 100644 index.js create mode 100644 index.ts delete mode 100644 integration_test/balance.test.js delete mode 100644 integration_test/card.test.js delete mode 100644 integration_test/customer.test.js delete mode 100644 integration_test/direct_debit.test.js delete mode 100644 integration_test/disbursement.test.js delete mode 100644 integration_test/ewallet.test.js delete mode 100644 integration_test/index.js delete mode 100644 integration_test/invoice.test.js delete mode 100644 integration_test/payment_method_v2.test.js delete mode 100644 integration_test/payment_request.test.js delete mode 100644 integration_test/payout.test.js delete mode 100644 integration_test/platform.test.js delete mode 100644 integration_test/qr_code.test.js delete mode 100644 integration_test/recurring.test.js delete mode 100644 integration_test/refund.test.js delete mode 100644 integration_test/regional_retail_outlet.test.js delete mode 100644 integration_test/report.test.js delete mode 100644 integration_test/retail_outlet.test.js delete mode 100644 integration_test/transaction.test.js delete mode 100644 integration_test/va.test.js delete mode 100644 integration_test/xendit.test.js delete mode 100644 integration_test/xendit_ph.test.js create mode 100644 invoice/apis/Invoice.ts create mode 100644 invoice/apis/index.ts create mode 100644 invoice/index.ts create mode 100644 invoice/models/AddressObject.ts create mode 100644 invoice/models/AlternativeDisplayItem.ts create mode 100644 invoice/models/BadRequestError.ts create mode 100644 invoice/models/Bank.ts create mode 100644 invoice/models/BankCode.ts create mode 100644 invoice/models/CreateInvoiceRequest.ts create mode 100644 invoice/models/CustomerObject.ts create mode 100644 invoice/models/DirectDebit.ts create mode 100644 invoice/models/DirectDebitType.ts create mode 100644 invoice/models/Ewallet.ts create mode 100644 invoice/models/EwalletType.ts create mode 100644 invoice/models/ForbiddenError.ts create mode 100644 invoice/models/Invoice.ts create mode 100644 invoice/models/InvoiceClientType.ts create mode 100644 invoice/models/InvoiceCurrency.ts create mode 100644 invoice/models/InvoiceError404ResponseDefinition.ts create mode 100644 invoice/models/InvoiceFee.ts create mode 100644 invoice/models/InvoiceItem.ts create mode 100644 invoice/models/InvoiceNotFoundError.ts create mode 100644 invoice/models/InvoicePaymentMethod.ts create mode 100644 invoice/models/InvoiceStatus.ts create mode 100644 invoice/models/NotificationChannel.ts create mode 100644 invoice/models/NotificationPreference.ts create mode 100644 invoice/models/Paylater.ts create mode 100644 invoice/models/PaylaterType.ts create mode 100644 invoice/models/QrCode.ts create mode 100644 invoice/models/QrCodeType.ts create mode 100644 invoice/models/RetailOutlet.ts create mode 100644 invoice/models/RetailOutletName.ts create mode 100644 invoice/models/ServerError.ts create mode 100644 invoice/models/UnauthorizedError.ts create mode 100644 invoice/models/index.ts delete mode 100644 package-lock.json create mode 100644 payment_method/apis/PaymentMethod.ts create mode 100644 payment_method/apis/index.ts create mode 100644 payment_method/index.ts create mode 100644 payment_method/models/BillingInformation.ts create mode 100644 payment_method/models/Card.ts create mode 100644 payment_method/models/CardChannelProperties.ts create mode 100644 payment_method/models/CardParameters.ts create mode 100644 payment_method/models/CardParametersCardInformation.ts create mode 100644 payment_method/models/CardVerificationResults.ts create mode 100644 payment_method/models/CardVerificationResultsThreeDSecure.ts create mode 100644 payment_method/models/ChannelAmountLimits.ts create mode 100644 payment_method/models/ChannelAmountLimitsAllOf.ts create mode 100644 payment_method/models/ChannelProperty.ts create mode 100644 payment_method/models/ChannelPropertyAllOf.ts create mode 100644 payment_method/models/CreatePaymentMethod409Response.ts create mode 100644 payment_method/models/CreatePaymentMethod503Response.ts create mode 100644 payment_method/models/DirectDebit.ts create mode 100644 payment_method/models/DirectDebitAllOf.ts create mode 100644 payment_method/models/DirectDebitBankAccount.ts create mode 100644 payment_method/models/DirectDebitChannelCode.ts create mode 100644 payment_method/models/DirectDebitChannelProperties.ts create mode 100644 payment_method/models/DirectDebitDebitCard.ts create mode 100644 payment_method/models/DirectDebitParameters.ts create mode 100644 payment_method/models/DirectDebitType.ts create mode 100644 payment_method/models/EWallet.ts create mode 100644 payment_method/models/EWalletAccount.ts create mode 100644 payment_method/models/EWalletChannelCode.ts create mode 100644 payment_method/models/EWalletChannelProperties.ts create mode 100644 payment_method/models/EWalletParameters.ts create mode 100644 payment_method/models/GetAllPaymentMethods400Response.ts create mode 100644 payment_method/models/GetAllPaymentMethods403Response.ts create mode 100644 payment_method/models/GetAllPaymentMethods404Response.ts create mode 100644 payment_method/models/GetAllPaymentMethodsDefaultResponse.ts create mode 100644 payment_method/models/OverTheCounter.ts create mode 100644 payment_method/models/OverTheCounterChannelCode.ts create mode 100644 payment_method/models/OverTheCounterChannelProperties.ts create mode 100644 payment_method/models/OverTheCounterChannelPropertiesUpdate.ts create mode 100644 payment_method/models/OverTheCounterParameters.ts create mode 100644 payment_method/models/OverTheCounterUpdateParameters.ts create mode 100644 payment_method/models/PaymentChannel.ts create mode 100644 payment_method/models/PaymentChannelAllOf.ts create mode 100644 payment_method/models/PaymentChannelList.ts create mode 100644 payment_method/models/PaymentChannelListLinksInner.ts create mode 100644 payment_method/models/PaymentChannelListLinksInnerAllOf.ts create mode 100644 payment_method/models/PaymentMethod.ts create mode 100644 payment_method/models/PaymentMethodAction.ts create mode 100644 payment_method/models/PaymentMethodAuthParameters.ts create mode 100644 payment_method/models/PaymentMethodCountry.ts create mode 100644 payment_method/models/PaymentMethodExpireParameters.ts create mode 100644 payment_method/models/PaymentMethodList.ts create mode 100644 payment_method/models/PaymentMethodParameters.ts create mode 100644 payment_method/models/PaymentMethodReusability.ts create mode 100644 payment_method/models/PaymentMethodStatus.ts create mode 100644 payment_method/models/PaymentMethodType.ts create mode 100644 payment_method/models/PaymentMethodUpdateParameters.ts create mode 100644 payment_method/models/QRCode.ts create mode 100644 payment_method/models/QRCodeChannelCode.ts create mode 100644 payment_method/models/QRCodeChannelProperties.ts create mode 100644 payment_method/models/QRCodeParameters.ts create mode 100644 payment_method/models/SimulatePaymentRequest.ts create mode 100644 payment_method/models/TokenizedCardInformation.ts create mode 100644 payment_method/models/VirtualAccount.ts create mode 100644 payment_method/models/VirtualAccountAllOf.ts create mode 100644 payment_method/models/VirtualAccountAlternativeDisplay.ts create mode 100644 payment_method/models/VirtualAccountChannelCode.ts create mode 100644 payment_method/models/VirtualAccountChannelProperties.ts create mode 100644 payment_method/models/VirtualAccountChannelPropertiesPatch.ts create mode 100644 payment_method/models/VirtualAccountParameters.ts create mode 100644 payment_method/models/VirtualAccountUpdateParameters.ts create mode 100644 payment_method/models/index.ts create mode 100644 payment_request/apis/PaymentRequest.ts create mode 100644 payment_request/apis/index.ts create mode 100644 payment_request/index.ts create mode 100644 payment_request/models/Capture.ts create mode 100644 payment_request/models/CaptureListResponse.ts create mode 100644 payment_request/models/CaptureParameters.ts create mode 100644 payment_request/models/Card.ts create mode 100644 payment_request/models/CardChannelProperties.ts create mode 100644 payment_request/models/CardInformation.ts create mode 100644 payment_request/models/CardVerificationResults.ts create mode 100644 payment_request/models/CardVerificationResultsThreeDSecure.ts create mode 100644 payment_request/models/DirectDebit.ts create mode 100644 payment_request/models/DirectDebitAllOf.ts create mode 100644 payment_request/models/DirectDebitBankAccount.ts create mode 100644 payment_request/models/DirectDebitChannelCode.ts create mode 100644 payment_request/models/DirectDebitChannelProperties.ts create mode 100644 payment_request/models/DirectDebitChannelPropertiesBankAccount.ts create mode 100644 payment_request/models/DirectDebitChannelPropertiesBankRedirect.ts create mode 100644 payment_request/models/DirectDebitChannelPropertiesDebitCard.ts create mode 100644 payment_request/models/DirectDebitDebitCard.ts create mode 100644 payment_request/models/DirectDebitParameters.ts create mode 100644 payment_request/models/DirectDebitType.ts create mode 100644 payment_request/models/EWallet.ts create mode 100644 payment_request/models/EWalletAccount.ts create mode 100644 payment_request/models/EWalletAllOf.ts create mode 100644 payment_request/models/EWalletChannelCode.ts create mode 100644 payment_request/models/EWalletChannelProperties.ts create mode 100644 payment_request/models/EWalletParameters.ts create mode 100644 payment_request/models/ModelError.ts create mode 100644 payment_request/models/OverTheCounter.ts create mode 100644 payment_request/models/OverTheCounterChannelCode.ts create mode 100644 payment_request/models/OverTheCounterChannelProperties.ts create mode 100644 payment_request/models/OverTheCounterParameters.ts create mode 100644 payment_request/models/PaymentMethod.ts create mode 100644 payment_request/models/PaymentMethodParameters.ts create mode 100644 payment_request/models/PaymentMethodReusability.ts create mode 100644 payment_request/models/PaymentMethodStatus.ts create mode 100644 payment_request/models/PaymentMethodType.ts create mode 100644 payment_request/models/PaymentRequest.ts create mode 100644 payment_request/models/PaymentRequestAction.ts create mode 100644 payment_request/models/PaymentRequestAuthParameters.ts create mode 100644 payment_request/models/PaymentRequestBasketItem.ts create mode 100644 payment_request/models/PaymentRequestCaptureMethod.ts create mode 100644 payment_request/models/PaymentRequestCardVerificationResults.ts create mode 100644 payment_request/models/PaymentRequestCardVerificationResultsThreeDeeSecure.ts create mode 100644 payment_request/models/PaymentRequestChannelProperties.ts create mode 100644 payment_request/models/PaymentRequestCountry.ts create mode 100644 payment_request/models/PaymentRequestCurrency.ts create mode 100644 payment_request/models/PaymentRequestInitiator.ts create mode 100644 payment_request/models/PaymentRequestListResponse.ts create mode 100644 payment_request/models/PaymentRequestParameters.ts create mode 100644 payment_request/models/PaymentRequestParametersChannelProperties.ts create mode 100644 payment_request/models/PaymentRequestParametersChannelPropertiesAllOf.ts create mode 100644 payment_request/models/PaymentRequestShippingInformation.ts create mode 100644 payment_request/models/PaymentRequestStatus.ts create mode 100644 payment_request/models/QRCode.ts create mode 100644 payment_request/models/QRCodeChannelCode.ts create mode 100644 payment_request/models/QRCodeChannelProperties.ts create mode 100644 payment_request/models/QRCodeParameters.ts create mode 100644 payment_request/models/VirtualAccount.ts create mode 100644 payment_request/models/VirtualAccountAllOf.ts create mode 100644 payment_request/models/VirtualAccountAlternativeDisplay.ts create mode 100644 payment_request/models/VirtualAccountChannelCode.ts create mode 100644 payment_request/models/VirtualAccountChannelProperties.ts create mode 100644 payment_request/models/VirtualAccountParameters.ts create mode 100644 payment_request/models/index.ts create mode 100644 payout/apis/Payout.ts create mode 100644 payout/apis/index.ts create mode 100644 payout/index.ts create mode 100644 payout/models/Channel.ts create mode 100644 payout/models/ChannelAccountType.ts create mode 100644 payout/models/ChannelAmountLimits.ts create mode 100644 payout/models/ChannelCategory.ts create mode 100644 payout/models/CreatePayoutRequest.ts create mode 100644 payout/models/DigitalPayoutChannelProperties.ts create mode 100644 payout/models/ErrorErrorsInner.ts create mode 100644 payout/models/GetPayouts200Response.ts create mode 100644 payout/models/GetPayouts200ResponseDataInner.ts create mode 100644 payout/models/GetPayouts200ResponseLinks.ts create mode 100644 payout/models/ModelError.ts create mode 100644 payout/models/Payout.ts create mode 100644 payout/models/PayoutAllOf.ts create mode 100644 payout/models/ReceiptNotification.ts create mode 100644 payout/models/index.ts create mode 100644 refund/apis/Refund.ts create mode 100644 refund/apis/index.ts create mode 100644 refund/index.ts create mode 100644 refund/models/CreateRefund.ts create mode 100644 refund/models/CreateRefund400Response.ts create mode 100644 refund/models/CreateRefund403Response.ts create mode 100644 refund/models/CreateRefund404Response.ts create mode 100644 refund/models/CreateRefund409Response.ts create mode 100644 refund/models/CreateRefund503Response.ts create mode 100644 refund/models/CreateRefundDefaultResponse.ts create mode 100644 refund/models/Refund.ts create mode 100644 refund/models/RefundList.ts create mode 100644 refund/models/index.ts create mode 100644 runtime.ts delete mode 100644 src/balance/balance.d.ts delete mode 100644 src/balance/balance.js delete mode 100644 src/balance/index.d.ts delete mode 100644 src/balance/index.js delete mode 100644 src/card/authorization.d.ts delete mode 100644 src/card/authorization.js delete mode 100644 src/card/card.d.ts delete mode 100644 src/card/card.js delete mode 100644 src/card/card_status.js delete mode 100644 src/card/charge.d.ts delete mode 100644 src/card/charge.js delete mode 100644 src/card/index.d.ts delete mode 100644 src/card/index.js delete mode 100644 src/card/promotion.d.ts delete mode 100644 src/card/promotion.js delete mode 100644 src/card/refund.d.ts delete mode 100644 src/card/refund.js delete mode 100644 src/customer/customer.d.ts delete mode 100644 src/customer/customer.js delete mode 100644 src/customer/index.d.ts delete mode 100644 src/customer/index.js delete mode 100644 src/direct_debit/direct_debit.d.ts delete mode 100644 src/direct_debit/direct_debit.js delete mode 100644 src/direct_debit/direct_debit_payment.d.ts delete mode 100644 src/direct_debit/direct_debit_payment.js delete mode 100644 src/direct_debit/index.d.ts delete mode 100644 src/direct_debit/index.js delete mode 100644 src/direct_debit/linked_account.d.ts delete mode 100644 src/direct_debit/linked_account.js delete mode 100644 src/direct_debit/payment_method.d.ts delete mode 100644 src/direct_debit/payment_method.js delete mode 100644 src/disbursement/bank.d.ts delete mode 100644 src/disbursement/bank.js delete mode 100644 src/disbursement/disburse.d.ts delete mode 100644 src/disbursement/disburse.js delete mode 100644 src/disbursement/disbursement.d.ts delete mode 100644 src/disbursement/disbursement.js delete mode 100644 src/disbursement/index.d.ts delete mode 100644 src/disbursement/index.js delete mode 100644 src/errors/index.d.ts delete mode 100644 src/errors/index.js delete mode 100644 src/ewallet/ewallet.d.ts delete mode 100644 src/ewallet/ewallet.js delete mode 100644 src/ewallet/ewallet_charge.d.ts delete mode 100644 src/ewallet/ewallet_charge.js delete mode 100644 src/ewallet/ewallet_payment.d.ts delete mode 100644 src/ewallet/ewallet_payment.js delete mode 100644 src/ewallet/index.d.ts delete mode 100644 src/ewallet/index.js delete mode 100644 src/ewallet/linked_account.d.ts delete mode 100644 src/ewallet/linked_account.js delete mode 100644 src/ewallet/payment_method.d.ts delete mode 100644 src/ewallet/payment_method.js delete mode 100644 src/invoice/index.d.ts delete mode 100644 src/invoice/index.js delete mode 100644 src/invoice/invoice.d.ts delete mode 100644 src/invoice/invoice.js delete mode 100644 src/payment_method_v2/index.d.ts delete mode 100644 src/payment_method_v2/index.js delete mode 100644 src/payment_method_v2/payment_method_v2.d.ts delete mode 100644 src/payment_method_v2/payment_method_v2.js delete mode 100644 src/payment_request/index.d.ts delete mode 100644 src/payment_request/index.js delete mode 100644 src/payment_request/payment_request.d.ts delete mode 100644 src/payment_request/payment_request.js delete mode 100644 src/payout/index.d.ts delete mode 100644 src/payout/index.js delete mode 100644 src/payout/payout.d.ts delete mode 100644 src/payout/payout.js delete mode 100644 src/platform/index.d.ts delete mode 100644 src/platform/index.js delete mode 100644 src/platform/platform.d.ts delete mode 100644 src/platform/platform.js delete mode 100644 src/qr_code/index.d.ts delete mode 100644 src/qr_code/index.js delete mode 100644 src/qr_code/qr_code.d.ts delete mode 100644 src/qr_code/qr_code.js delete mode 100644 src/recurring/index.d.ts delete mode 100644 src/recurring/index.js delete mode 100644 src/recurring/manage_cycles.d.ts delete mode 100644 src/recurring/manage_cycles.js delete mode 100644 src/recurring/manage_plans.d.ts delete mode 100644 src/recurring/manage_plans.js delete mode 100644 src/recurring/manage_schedules.d.ts delete mode 100644 src/recurring/manage_schedules.js delete mode 100644 src/recurring/recurring.d.ts delete mode 100644 src/recurring/recurring.js delete mode 100644 src/recurring_payment/index.d.ts delete mode 100644 src/recurring_payment/index.js delete mode 100644 src/recurring_payment/manage_payments.d.ts delete mode 100644 src/recurring_payment/manage_payments.js delete mode 100644 src/recurring_payment/operate_payments.d.ts delete mode 100644 src/recurring_payment/operate_payments.js delete mode 100644 src/recurring_payment/recurring_payment.d.ts delete mode 100644 src/recurring_payment/recurring_payment.js delete mode 100644 src/refund/index.d.ts delete mode 100644 src/refund/index.js delete mode 100644 src/refund/refund.d.ts delete mode 100644 src/refund/refund.js delete mode 100644 src/regional_retail_outlet/index.d.ts delete mode 100644 src/regional_retail_outlet/index.js delete mode 100644 src/regional_retail_outlet/regional_retail_outlet.d.ts delete mode 100644 src/regional_retail_outlet/regional_retail_outlet.js delete mode 100644 src/report/index.d.ts delete mode 100644 src/report/index.js delete mode 100644 src/report/report.d.ts delete mode 100644 src/report/report.js delete mode 100644 src/retail_outlet/index.d.ts delete mode 100644 src/retail_outlet/index.js delete mode 100644 src/retail_outlet/retail_outlet.d.ts delete mode 100644 src/retail_outlet/retail_outlet.js delete mode 100644 src/transaction/index.d.ts delete mode 100644 src/transaction/index.js delete mode 100644 src/transaction/query.js delete mode 100644 src/transaction/transaction.d.ts delete mode 100644 src/transaction/transaction.js delete mode 100644 src/utils/auth.d.ts delete mode 100644 src/utils/auth.js delete mode 100644 src/utils/fetch_with_http_err.d.ts delete mode 100644 src/utils/fetch_with_http_err.js delete mode 100644 src/utils/index.js delete mode 100644 src/utils/prom_with_js_err.d.ts delete mode 100644 src/utils/prom_with_js_err.js delete mode 100644 src/utils/query_string_with_no_undefined.d.ts delete mode 100644 src/utils/query_string_with_no_undefined.js delete mode 100644 src/utils/validate.d.ts delete mode 100644 src/utils/validate.js delete mode 100644 src/va/account.d.ts delete mode 100644 src/va/account.js delete mode 100644 src/va/bank.d.ts delete mode 100644 src/va/bank.js delete mode 100644 src/va/index.d.ts delete mode 100644 src/va/index.js delete mode 100644 src/va/payment.d.ts delete mode 100644 src/va/payment.js delete mode 100644 src/va/va.d.ts delete mode 100644 src/va/va.js delete mode 100644 src/xendit.d.ts delete mode 100644 src/xendit.js delete mode 100644 src/xendit_opts.d.ts delete mode 100644 test/balance/balance.test.js delete mode 100644 test/balance/constants.js delete mode 100644 test/card/authorization.test.js delete mode 100644 test/card/card.test.js delete mode 100644 test/card/charge.test.js delete mode 100644 test/card/constants.js delete mode 100644 test/card/promotion.test.js delete mode 100644 test/card/refund.test.js delete mode 100644 test/card/token.test.js delete mode 100644 test/customer/constants.js delete mode 100644 test/customer/customer.test.js delete mode 100644 test/direct_debit/constants.js delete mode 100644 test/direct_debit/direct_debit.test.js delete mode 100644 test/direct_debit/direct_debit_payment.test.js delete mode 100644 test/direct_debit/linked_account.test.js delete mode 100644 test/direct_debit/payment_method.test.js delete mode 100644 test/disbursement/bank.test.js delete mode 100644 test/disbursement/constants.js delete mode 100644 test/disbursement/disburse.test.js delete mode 100644 test/disbursement/disbursement.test.js delete mode 100644 test/ewallet/constants.js delete mode 100644 test/ewallet/ewallet.test.js delete mode 100644 test/ewallet/ewallet_charge.test.js delete mode 100644 test/ewallet/ewallet_payment.test.js delete mode 100644 test/ewallet/linked_account.test.js delete mode 100644 test/ewallet/payment_method.test.js delete mode 100644 test/invoice/constants.js delete mode 100644 test/invoice/invoice.test.js delete mode 100644 test/payment_method_v2/constants.js delete mode 100644 test/payment_method_v2/payment_method_v2.test.js delete mode 100644 test/payment_request/constants.js delete mode 100644 test/payment_request/payment_request.test.js delete mode 100644 test/payout/constants.js delete mode 100644 test/payout/payout.test.js delete mode 100644 test/platform/constants.js delete mode 100644 test/platform/platform.test.js delete mode 100644 test/qr_code/constants.js delete mode 100644 test/qr_code/qr_code.test.js delete mode 100644 test/recurring/constants.js delete mode 100644 test/recurring/recurring.test.js delete mode 100644 test/recurring/recurring_cycle.test.js delete mode 100644 test/recurring/recurring_plan.test.js delete mode 100644 test/recurring/recurring_schedule.test.js delete mode 100644 test/recurring_payment/constants.js delete mode 100644 test/recurring_payment/manage_payments.test.js delete mode 100644 test/recurring_payment/operate_payments.test.js delete mode 100644 test/recurring_payment/recurring_payment.test.js delete mode 100644 test/refund/constans.js delete mode 100644 test/refund/refund.test.js delete mode 100644 test/report/constants.js delete mode 100644 test/report/report.test.js delete mode 100644 test/retail_outlet/constants.js delete mode 100644 test/retail_outlet/retail_outlet.test.js delete mode 100644 test/transaction/constants.js delete mode 100644 test/transaction/transaction.test.js delete mode 100644 test/utils/validate.test.js delete mode 100644 test/va/account.test.js delete mode 100644 test/va/bank.test.js delete mode 100644 test/va/constants.js delete mode 100644 test/va/payment.test.js delete mode 100644 test/va/va.test.js create mode 100644 tsconfig.json diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index af5c5da..0000000 --- a/.editorconfig +++ /dev/null @@ -1,16 +0,0 @@ -root = true - -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -indent_style = space -indent_size = 2 - -[*.md] -trim_trailing_whitespace = false - -[Makefile] -indent_style = tab -indent_size = 4 \ No newline at end of file diff --git a/.env.sample b/.env.sample deleted file mode 100644 index f0fe3ce..0000000 --- a/.env.sample +++ /dev/null @@ -1,2 +0,0 @@ -SECRET_KEY= -XENDIT_URL= diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 07e6e47..0000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 1a335a5..0000000 --- a/.eslintrc +++ /dev/null @@ -1,43 +0,0 @@ -{ - "extends": ["prettier"], - "plugins": ["prettier"], - "parser": "babel-eslint", - "parserOptions": { - "ecmaVersion": 5 - }, - "rules": { - "prettier/prettier": "warn", - "no-console": "error", - "new-cap": "warn", - "max-len": ["warn", { "code": 80, "ignoreUrls": true }], - "curly": ["error", "multi-line"], - "no-unused-vars": "error" - }, - "globals": { - "Promise": true, - "process": true - }, - "overrides": [ - { - "files": ["**/*.ts"], - "extends": [ - "plugin:@typescript-eslint/recommended", - "prettier/@typescript-eslint", - "prettier" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 6, - "ecmaFeatures": { "modules": true } - }, - "rules": { - "prettier/prettier": "warn", - "no-console": "error", - "new-cap": "warn", - "max-len": ["warn", { "code": 80, "ignoreUrls": true }], - "curly": ["error", "multi-line"], - "no-unused-vars": "error" - } - } - ] -} diff --git a/.github/workflows/api-key-scanner.yml b/.github/workflows/api-key-scanner.yml deleted file mode 100644 index 4e4a8b2..0000000 --- a/.github/workflows/api-key-scanner.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: Xendit API Key Scanner -on: pull_request - -jobs: - scan_job: - runs-on: ubuntu-latest - name: Xendit API Key Scanner Action Job - steps: - - name: Scan action - uses: xendit/xendit-api-key-scanner-action@v1.0.0 \ No newline at end of file diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml deleted file mode 100644 index 036c95a..0000000 --- a/.github/workflows/coverage.yml +++ /dev/null @@ -1,28 +0,0 @@ -on: - push: - branches: - - master - -name: Test Coveralls - -jobs: - build: - name: Build - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - - name: Use Node.js 13.x - uses: actions/setup-node@v1 - with: - node-version: 13.x - - - run: npm ci - - - name: generate report - run: npm run report - - - name: Coveralls - uses: coverallsapp/github-action@master - with: - github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/generate-release-tag.yml b/.github/workflows/generate-release-tag.yml new file mode 100644 index 0000000..ec4e225 --- /dev/null +++ b/.github/workflows/generate-release-tag.yml @@ -0,0 +1,36 @@ +name: Generate Release Tag +on: + repository_dispatch: + types: [create-release-tag] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set the value in bash + id: parse-changelog + run: | + echo "changelog<> "$GITHUB_OUTPUT" + echo "${{ github.event.client_payload.changelog }}" | tr -s '%0A' '\n' >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create Release + id: create-release + uses: actions/create-release@latest + env: + GITHUB_TOKEN: ${{ secrets.REPO_ACCESS_TOKEN }} + with: + tag_name: v${{ github.event.client_payload.version }} + release_name: v${{ github.event.client_payload.version }} + body: ${{ steps.parse-changelog.outputs.changelog }} + draft: false + prerelease: false + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '18.x' + registry-url: 'https://registry.npmjs.org' + - run: npm ci + - run: npm run custom-publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index 3357417..0000000 --- a/.github/workflows/lint.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: 'Code Linting' - -on: - push: - branches: - - master - pull_request: - branches: - - master - -jobs: - test: - runs-on: ubuntu-latest - name: Lint codebase - steps: - - uses: actions/checkout@v1 - - name: Setup node - uses: actions/setup-node@v1 - with: - node-version: '13' - - run: npm ci - - run: npm run lint diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 22ed22b..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: 'Integration Tests' - -on: - push: - branches: - - master - pull_request: - branches: - - master - -jobs: - test: - runs-on: ubuntu-latest - strategy: - matrix: - node: ['13', '12', '10', '8'] - name: Test with Node version ${{ matrix.node }} - steps: - - uses: actions/checkout@v1 - - name: Setup node - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node }} - - run: npm ci - - run: npm test - - run: npm run test:integration - env: - SECRET_KEY: xnd_development_oI7I6slPeYIxZPyfNxVIQt6R0JxiXGIRTBxBw5Ij26rjUwUeF29Aa9wHSETkM3 - SECRET_KEY_PH: xnd_development_Va7pPIfYxIo7letKqhZCkwniwggDGyjB0sAzmOUe1mMkED4k0nLh1TvtVi0raNne diff --git a/.gitignore b/.gitignore index 4501341..149b576 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,4 @@ -node_modules/ -.env -.nyc_output -coverage -.vscode/ -.idea +wwwroot/*.js +node_modules +typings +dist diff --git a/.npmignore b/.npmignore index 3c2e6f6..42061c0 100644 --- a/.npmignore +++ b/.npmignore @@ -1,5 +1 @@ -node_modules/ -.env* -test -.eslint* -.prettierrc +README.md \ No newline at end of file diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 53a4221..0000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v16.13.2 diff --git a/.openapi-generator-ignore b/.openapi-generator-ignore new file mode 100644 index 0000000..7484ee5 --- /dev/null +++ b/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES new file mode 100644 index 0000000..3a51f83 --- /dev/null +++ b/.openapi-generator/FILES @@ -0,0 +1,147 @@ +.github/workflows/generate-release-tag.yml +.gitignore +.npmignore +README.md +docs/PaymentMethod.md +docs/payment_method/models/BillingInformation.md +docs/payment_method/models/Card.md +docs/payment_method/models/CardChannelProperties.md +docs/payment_method/models/CardParameters.md +docs/payment_method/models/CardParametersCardInformation.md +docs/payment_method/models/CardVerificationResults.md +docs/payment_method/models/CardVerificationResultsThreeDSecure.md +docs/payment_method/models/ChannelAmountLimits.md +docs/payment_method/models/ChannelAmountLimitsAllOf.md +docs/payment_method/models/ChannelProperty.md +docs/payment_method/models/ChannelPropertyAllOf.md +docs/payment_method/models/CreatePaymentMethod409Response.md +docs/payment_method/models/CreatePaymentMethod503Response.md +docs/payment_method/models/DirectDebit.md +docs/payment_method/models/DirectDebitAllOf.md +docs/payment_method/models/DirectDebitBankAccount.md +docs/payment_method/models/DirectDebitChannelCode.md +docs/payment_method/models/DirectDebitChannelProperties.md +docs/payment_method/models/DirectDebitDebitCard.md +docs/payment_method/models/DirectDebitParameters.md +docs/payment_method/models/DirectDebitType.md +docs/payment_method/models/EWallet.md +docs/payment_method/models/EWalletAccount.md +docs/payment_method/models/EWalletChannelCode.md +docs/payment_method/models/EWalletChannelProperties.md +docs/payment_method/models/EWalletParameters.md +docs/payment_method/models/GetAllPaymentMethods400Response.md +docs/payment_method/models/GetAllPaymentMethods403Response.md +docs/payment_method/models/GetAllPaymentMethods404Response.md +docs/payment_method/models/GetAllPaymentMethodsDefaultResponse.md +docs/payment_method/models/OverTheCounter.md +docs/payment_method/models/OverTheCounterChannelCode.md +docs/payment_method/models/OverTheCounterChannelProperties.md +docs/payment_method/models/OverTheCounterChannelPropertiesUpdate.md +docs/payment_method/models/OverTheCounterParameters.md +docs/payment_method/models/OverTheCounterUpdateParameters.md +docs/payment_method/models/PaymentChannel.md +docs/payment_method/models/PaymentChannelAllOf.md +docs/payment_method/models/PaymentChannelList.md +docs/payment_method/models/PaymentChannelListLinksInner.md +docs/payment_method/models/PaymentChannelListLinksInnerAllOf.md +docs/payment_method/models/PaymentMethod.md +docs/payment_method/models/PaymentMethodAction.md +docs/payment_method/models/PaymentMethodAuthParameters.md +docs/payment_method/models/PaymentMethodCountry.md +docs/payment_method/models/PaymentMethodExpireParameters.md +docs/payment_method/models/PaymentMethodList.md +docs/payment_method/models/PaymentMethodParameters.md +docs/payment_method/models/PaymentMethodReusability.md +docs/payment_method/models/PaymentMethodStatus.md +docs/payment_method/models/PaymentMethodType.md +docs/payment_method/models/PaymentMethodUpdateParameters.md +docs/payment_method/models/QrCode.md +docs/payment_method/models/QrCodeChannelCode.md +docs/payment_method/models/QrCodeChannelProperties.md +docs/payment_method/models/QrCodeParameters.md +docs/payment_method/models/SimulatePaymentRequest.md +docs/payment_method/models/TokenizedCardInformation.md +docs/payment_method/models/VirtualAccount.md +docs/payment_method/models/VirtualAccountAllOf.md +docs/payment_method/models/VirtualAccountAlternativeDisplay.md +docs/payment_method/models/VirtualAccountChannelCode.md +docs/payment_method/models/VirtualAccountChannelProperties.md +docs/payment_method/models/VirtualAccountChannelPropertiesPatch.md +docs/payment_method/models/VirtualAccountParameters.md +docs/payment_method/models/VirtualAccountUpdateParameters.md +images/header.jpg +index.ts +index.ts +package.json +payment_method/apis/PaymentMethod.ts +payment_method/apis/index.ts +payment_method/index.ts +payment_method/models/BillingInformation.ts +payment_method/models/Card.ts +payment_method/models/CardChannelProperties.ts +payment_method/models/CardParameters.ts +payment_method/models/CardParametersCardInformation.ts +payment_method/models/CardVerificationResults.ts +payment_method/models/CardVerificationResultsThreeDSecure.ts +payment_method/models/ChannelAmountLimits.ts +payment_method/models/ChannelAmountLimitsAllOf.ts +payment_method/models/ChannelProperty.ts +payment_method/models/ChannelPropertyAllOf.ts +payment_method/models/CreatePaymentMethod409Response.ts +payment_method/models/CreatePaymentMethod503Response.ts +payment_method/models/DirectDebit.ts +payment_method/models/DirectDebitAllOf.ts +payment_method/models/DirectDebitBankAccount.ts +payment_method/models/DirectDebitChannelCode.ts +payment_method/models/DirectDebitChannelProperties.ts +payment_method/models/DirectDebitDebitCard.ts +payment_method/models/DirectDebitParameters.ts +payment_method/models/DirectDebitType.ts +payment_method/models/EWallet.ts +payment_method/models/EWalletAccount.ts +payment_method/models/EWalletChannelCode.ts +payment_method/models/EWalletChannelProperties.ts +payment_method/models/EWalletParameters.ts +payment_method/models/GetAllPaymentMethods400Response.ts +payment_method/models/GetAllPaymentMethods403Response.ts +payment_method/models/GetAllPaymentMethods404Response.ts +payment_method/models/GetAllPaymentMethodsDefaultResponse.ts +payment_method/models/OverTheCounter.ts +payment_method/models/OverTheCounterChannelCode.ts +payment_method/models/OverTheCounterChannelProperties.ts +payment_method/models/OverTheCounterChannelPropertiesUpdate.ts +payment_method/models/OverTheCounterParameters.ts +payment_method/models/OverTheCounterUpdateParameters.ts +payment_method/models/PaymentChannel.ts +payment_method/models/PaymentChannelAllOf.ts +payment_method/models/PaymentChannelList.ts +payment_method/models/PaymentChannelListLinksInner.ts +payment_method/models/PaymentChannelListLinksInnerAllOf.ts +payment_method/models/PaymentMethod.ts +payment_method/models/PaymentMethodAction.ts +payment_method/models/PaymentMethodAuthParameters.ts +payment_method/models/PaymentMethodCountry.ts +payment_method/models/PaymentMethodExpireParameters.ts +payment_method/models/PaymentMethodList.ts +payment_method/models/PaymentMethodParameters.ts +payment_method/models/PaymentMethodReusability.ts +payment_method/models/PaymentMethodStatus.ts +payment_method/models/PaymentMethodType.ts +payment_method/models/PaymentMethodUpdateParameters.ts +payment_method/models/QRCode.ts +payment_method/models/QRCodeChannelCode.ts +payment_method/models/QRCodeChannelProperties.ts +payment_method/models/QRCodeParameters.ts +payment_method/models/SimulatePaymentRequest.ts +payment_method/models/TokenizedCardInformation.ts +payment_method/models/VirtualAccount.ts +payment_method/models/VirtualAccountAllOf.ts +payment_method/models/VirtualAccountAlternativeDisplay.ts +payment_method/models/VirtualAccountChannelCode.ts +payment_method/models/VirtualAccountChannelProperties.ts +payment_method/models/VirtualAccountChannelPropertiesPatch.ts +payment_method/models/VirtualAccountParameters.ts +payment_method/models/VirtualAccountUpdateParameters.ts +payment_method/models/index.ts +runtime.ts +tsconfig.json diff --git a/.openapi-generator/VERSION b/.openapi-generator/VERSION new file mode 100644 index 0000000..cd802a1 --- /dev/null +++ b/.openapi-generator/VERSION @@ -0,0 +1 @@ +6.6.0 \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index a20502b..0000000 --- a/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "trailingComma": "all" -} diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 26031b2..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,91 +0,0 @@ -# CHANGELOG - -## 2022-03-11 - -- Added recurring service - - recurring schedules - - recurring plans - - recurring cycles - -## 2021-12-07 - -- Added metadata to credit card charge request - -## 2021-11-01 - -- Add missing recurring payment properties - -## 2021-06-01 - -- Add missing Customer and DirectDebit services types to index definition file - -## 2021-04-14 - -- Enable forUserId for Virtual Accounts product -- Enable forUserId for Cards product - -## 2020-03-05 - -- Hotfix wrong data mapped for startDate recurring payment - -## 2020-02-07 - -- Hotfix index definition file - -## 2020-01-13 - -- [#41](https://github.com/xendit/xendit-node/pull/41) LICENSE & miscellaneous docs updates - -## 2020-01-09 - -- [#36](https://github.com/xendit/xendit-node/pull/31) Add root definition file - -## 2020-01-08 - -- [#31](https://github.com/xendit/xendit-node/pull/31) Add xendit tracking headers -- [#32](https://github.com/xendit/xendit-node/pull/32) Add examples with async/await -- [#28](https://github.com/xendit/xendit-node/pull/28) Touch up README pre-launch - -## 2020-01-07 - -- [#30](https://github.com/xendit/xendit-node/pull/30) Remove `publicKey` from options -- [#29](https://github.com/xendit/xendit-node/pull/29) Add linting for ts files into CI - -## 2020-01-03 - -- [#23](https://github.com/xendit/xendit-node/pull/23) (feature) Balance -- [#24](https://github.com/xendit/xendit-node/pull/24s) (feature) Retail Outlet - -## 2019-12-29 - -- [#16](https://github.com/xendit/xendit-node/pull/16) (feature) Recurring Payments -- [#18](https://github.com/xendit/xendit-node/pull/18) (feature) Payouts -- [#20](https://github.com/xendit/xendit-node/pull/20) (feature) EWallets - -## 2019-12-28 - -- [#19](https://github.com/xendit/xendit-node/pull/19) Add linting for ts files - -## 2019-12-26 - -- [#15](https://github.com/xendit/xendit-node/pull/15) Remove tokenization & authentication from Card - -## 2019-12-16 - -- [#13](https://github.com/xendit/xendit-node/pull/13) Add integration tests - -## 2019-11-28 - -- (feature) Invoices - -## 2019-11-26 - -- (bugfix) `createdFixedVA` on nil expirationDate -- (bugfix) `updateFixedVA` on nul expirationDate - -## 2019-11-03 - -- (feature) Credit Cards -- (feature) Virtual Accounts -- (feature) Disbursements -- (feature) Batch Disbursements diff --git a/LICENSE b/LICENSE deleted file mode 100644 index fed15c6..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Xendit https://xendit.co - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md index 772cd1f..41060ef 100644 --- a/README.md +++ b/README.md @@ -1,1945 +1,64 @@ -# Xendit API Node.js Client +![Xendit Node SDK](images/header.jpg) -![Code Linting Badge](https://github.com/xendit/xendit-node/workflows/Code%20Linting/badge.svg) -![Integration Tests Badge](https://github.com/xendit/xendit-node/workflows/Integration%20Tests/badge.svg) -[![Coverage Status](https://coveralls.io/repos/github/xendit/xendit-node/badge.svg)](https://coveralls.io/github/xendit/xendit-node) +# Xendit Node SDK -This library is the abstraction of Xendit API for access from applications written with server-side Javascript. +The official Xendit Node SDK provides a simple and convenient way to call Xendit's REST API +in applications written in Node. -[![NPM](https://nodei.co/npm/xendit-node.png)](https://nodei.co/npm/xendit-node/) +* Package version: 3.0.0 -**Note**: This library is only meant for usage from server-side with Xendit secret API key. -For PCI compliance to be maintained, tokenization of credit cards info should be done on client side with [Xendit.js](https://docs.xendit.co/credit-cards/integrations/tokenization). - - - -- [API Documentation](#api-documentation) -- [Installation](#installation) -- [Usage](#usage) - - [Card Services](#card-services) - - [Create charge](#create-charge) - - [Capture charge](#capture-charge) - - [Get charge](#get-charge) - - [Create authorization](#create-authorization) - - [Reverse authorization](#reverse-authorization) - - [Create refund](#create-refund) - - [Create promotion](#create-promotion) - - [Virtual Account Services](#virtual-account-services) - - [Get banks with available virtual account service](#get-banks-with-available-virtual-account-service) - - [Create a fixed virtual account](#create-a-fixed-virtual-account) - - [Get details of your fixed virtual account](#get-details-of-your-fixed-virtual-account) - - [Update details of your fixed virtual account](#update-details-of-your-fixed-virtual-account) - - [Get details of a VA payment](#get-details-of-a-va-payment) - - [Disbursement Services](#disbursement-services) - - [Get banks with available disbursement service](#get-banks-with-available-disbursement-service) - - [Create a disbursement](#create-a-disbursement) - - [Create a batch of disbursements](#create-a-batch-of-disbursements) - - [Get a disbursement by ID](#get-a-disbursement-by-id) - - [Invoice Services](#invoice-services) - - [Create an invoice](#create-an-invoice) - - [Get an invoice](#get-an-invoice) - - [Expire an invoice](#expire-an-invoice) - - [Get all invoices](#get-all-invoices) - - [Recurring Payments Services](#recurring-payments-services) - - [Create recurring payment](#create-recurring-payment) - - [Get recurring payment](#get-recurring-payment) - - [Edit recurring payment](#edit-recurring-payment) - - [Stop recurring payment](#stop-recurring-payment) - - [Pause recurring payment](#pause-recurring-payment) - - [Resume recurring payment](#resume-recurring-payment) - - [Recurring Services](#recurring-services) - - [Create recurring schedule](#create-recurring-schedule) - - [Edit recurring schedule](#edit-recurring-schedule) - - [Get recurring schedule](#get-recurring-schedule) - - [Create recurring plan](#create-recurring-plan) - - [Create recurring plan with schedule](#create-recurring-plan-with-schedule) - - [Edit recurring plan](#edit-recurring-plan) - - [Get recurring plan](#get-recurring-plan) - - [Deactivate recurring plan](#deactivate-recurring-plan) - - [Edit recurring cycle](#edit-recurring-cycle) - - [Get recurring cycle](#get-recurring-cycle) - - [Get all recurring cycles](#get-all-recurring-cycles) - - [Cancel recurring cycle](#cancel-recurring-cycle) - - [Payout Services](#payout-services) - - [Create a payout](#create-a-payout) - - [Get a payout](#get-a-payout) - - [Void a payout](#void-a-payout) - - [EWallet Services](#ewallet-services) - - [Create payment](#create-payment) - - [Get payment](#get-payment) - - [Create an ewallet charge](#create-an-ewallet-charge) - - [Get an ewallet charge status](#get-an-ewallet-charge-status) - - [Void an ewallet charge](#void-an-ewallet-charge) - - [Initialize tokenization](#initialize-tokenization) - - [Unlink tokenization](#unlink-tokenization) - - [Create payment method (E-Wallet)](#create-payment-method-e-wallet) - - [Get payment methods by customer ID (E-Wallet)](#get-payment-methods-by-customer-id-e-wallet) - - [Balance Services](#balance-services) - - [Get balance](#get-balance) - - [Retail Outlet Services](#retail-outlet-services) - - [Create fixed payment code](#create-fixed-payment-code) - - [Get fixed payment code](#get-fixed-payment-code) - - [Get payments by fixed payment code ID](#get-payments-by-fixed-payment-code-id) - - [Update fixed payment code](#update-fixed-payment-code) - - [Simulate payment for RO (only in dev mode)](#simulate-payment-for-ro-only-in-dev-mode) - - [QR Code Services](#qr-code-services) - - [Create code](#create-code) - - [Get code](#get-code) - - [Simulate payment for QR (only in dev mode)](#simulate-payment-for-qr-only-in-dev-mode) - - [Get payments by external ID](#get-payments-by-external-id) - - [Customer services](#customer-services) - - [Create customer](#create-customer) - - [Get customer](#get-customer) - - [Get customer by reference ID](#get-customer-by-reference-id) - - [Update customer](#update-customer) - - [Direct debit services](#direct-debit-services) - - [Initialize linked account tokenization](#initialize-linked-account-tokenization) - - [Validate OTP for Linked Account Token](#validate-otp-for-linked-account-token) - - [Retrieve accessible accounts by linked account token](#retrieve-accessible-accounts-by-linked-account-token) - - [Create payment method (Direct Debit)](#create-payment-method-direct-debit) - - [Get payment methods by customer ID (Direct Debit)](#get-payment-methods-by-customer-id-direct-debit) - - [Create direct debit payment](#create-direct-debit-payment) - - [Validate OTP for direct debit payment](#validate-otp-for-direct-debit-payment) - - [Get direct debit payment status by ID](#get-direct-debit-payment-status-by-id) - - [Get direct debit payment status by reference ID](#get-direct-debit-payment-status-by-reference-id) - - [Report Service](#report-service) - - [Generate Report](#generate-report) - - [Get Report](#get-report) - - [Transaction Service](#transaction-service) - - [Get Transaction](#get-transaction) - - [List Transactions](#list-transactions) - - [XenPlatform Service](#xenplatform-service) - - [Create sub-account](#create-sub-account) - - [Create sub-account using V2](#create-sub-account-using-v2) - - [Get sub-account by ID](#get-sub-account-by-id) - - [Update sub-account](#update-sub-account) - - [Set Callback URL](#set-callback-url) - - [Create transfers](#create-transfers) - - [Create fee rules](#create-fee-rules) - - [Payment Request](#payment-request) - - [Create payment request](#create-payment-request) - - [List payment requests](#list-payment-requests) - - [Get payment request details by ID](#get-payment-request-details-by-id) - - [confirm payment request](#confirm-payment-request) - - [resend auth for payment request](#resend-auth-for-payment-request) - - [Payment Method](#payment-method) - - [Create payment method](#create-payment-method) - - [List payment methods](#list-payment-methods) - - [Get payment method details by ID](#get-payment-method-details-by-id) - - [Authorize Payment method](#authorize-payment-method) - - [Update Payment method](#update-payment-method) - - [Expire Payment method](#expire-payment-method) - - [List payments by payment method id](#list-payments-by-payment-method-id) - - [Refund Services](#refund-services) - - [Create refund](#create-refund-1) - - [List refunds](#list-refunds) - - [Get refund details by ID](#get-refund-details-by-id) -- [Contributing](#contributing) - - - -## API Documentation - -Please check [Xendit API Reference](https://xendit.github.io/apireference/). +# Getting Started ## Installation -```bash -npm install --save xendit-node -``` - -## Usage - -Configure package with your account's **secret key** obtained from your [Xendit Dashboard](https://dashboard.xendit.co/settings/developers#api-keys). - -```js -const Xendit = require('xendit-node'); -const x = new Xendit({ - secretKey: 'xnd_...', -}); -``` - -Usage examples: - -- With promises, please check [here](./examples/with_promises) -- With async/await, please check [here](./examples/with_async) - -### Card Services - -Instanitiate Card service using constructor that has been injected with Xendit keys - -```js -const { Card } = x; -const cardSpecificOptions = {}; -const card = new Card(cardSpecificOptions); -``` - -Example: Capturing a charge - -```js -card - .captureCharge({ - chargeID: 'charge-id-from-create-charge-endpoint', - externalID: 'your-system-tracking-id', - }) - .then(({ id }) => { - console.log(`Charge created with ID: ${id}`); - }) - .catch(e => { - console.error(`Charge creation failed with message: ${e.message}`); - }); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#credit-cards) for more info about methods' parameters - -#### Create charge - -```ts -card.createCharge(data: { - tokenID: string; - externalID: string; - amount?: number; - authID?: string; - cardCVN?: string; - capture?: boolean; - descriptor?: string; - currency?: string; - midLabel?: string; - billingDetails?: object; - promotion?: object; - installment?: object; - forUserID?: string; - metadata?: object; - isRecurring?: boolean; -}) -``` - -#### Capture charge - -```ts -card.captureCharge(data: { - chargeID: string; - amount: number; - forUserID?: string; -}) -``` - -#### Get charge - -```ts -card.getCharge(data: { chargeID: string; forUserID?: string }) -``` - -#### Create authorization - -```ts -card.createAuthorization(data: { - tokenID: string; - externalID: string; - amount?: number; - authID?: string; - cardCVN?: string; - descriptor?: string; - currency?: string; - midLabel?: string; - billingDetails?: object; - promotion?: object; - installment?: object; - forUserID?: string; -}) -``` - -#### Reverse authorization - -```ts -card.reverseAuthorization(data: { - chargeID: string; - externalID: string; - forUserID?: string; -}) -``` - -#### Create refund - -```ts -card.createRefund(data: { - chargeID: string; - amount: number; - externalID: string; - xIdempotencyKey?: string; - forUserID?: string; -}) -``` - -#### Create promotion - -```ts -card.createPromotion(data: { - referenceId: string; - description: string; - promoCode?: string; - binList?: string[]; - channelCode?: string; - discountPercent?: number; - discountAmount?: number; - currency: string; - startTime: Date; - endTime: Date; - minOriginalAmount?: number; - maxDiscountAmount?: number; -}) -``` - -### Virtual Account Services - -Instantiate VA service using constructor that has been injected with Xendit keys - -```js -const { VirtualAcc } = x; -const vaSpecificOptions = {}; -const va = new VirtualAcc(vaSpecificOptions); -``` - -Example: Create a fixed virtual account - -```js -va.createFixedVA({ - externalID: 'your-external-id', - bankCode: 'BCA', - name: 'Stanley Nguyen', -}) - .then(({ id }) => { - console.log(`Fixed VA created with ID: ${id}`); - }) - .catch(e => { - console.error(`VA creation failed with message: ${e.message}`); - }); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#virtual-accounts) for more info about methods' parameters - -#### Get banks with available virtual account service - -```ts -va.getVABanks(data?: { - forUserID?: string; -}); -``` - -#### Create a fixed virtual account - -```ts -va.createFixedVA(data: { - externalID: string; - bankCode: string; - name: string; - virtualAccNumber?: string; - suggestedAmt?: number; - isClosed?: boolean; - expectedAmt?: number; - expirationDate?: Date; - isSingleUse?: boolean; - description?: string; - currency?: string; - country?: string; - alternativeDisplayTypes?: string[]; - forUserID?: string; -}) -``` - -#### Get details of your fixed virtual account - -```ts -va.getFixedVA(data: { - id: string; - forUserID?: string; -}) -``` - -#### Update details of your fixed virtual account - -```ts -va.updateFixedVA(data: { - id: string; - suggestedAmt?: number; - expectedAmt?: number; - expirationDate?: Date; - isSingleUse?: boolean; - description?: string; - forUserID?: string; -}) -``` - -#### Get details of a VA payment - -```ts -va.getVAPayment(data: { - paymentID: string; - forUserID?: string; -}) -``` - -`paymentID`: ID of the payment that you obtained from your callback - -### Disbursement Services - -Instanitiate Disbursement service using constructor that has been injected with Xendit keys - -```js -const { Disbursement } = x; -const disbursementSpecificOptions = {}; -const d = new Disbursement(disbursementSpecificOptions); -``` - -Example: Create a disbursement - -```js -d.create({ - externalID: 'your-external-tracking-ID', - bankCode: 'BCA', - accountHolderName: 'Stan', - accountNumber: '1234567890', - description: 'Payment for nasi padang', - amount: 10000, -}) - .then(({ id }) => { - console.log(`Disbursement created with ID: ${id}`); - }) - .catch(e => { - console.error(`Disbursement creation failed with message: ${e.message}`); - }); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#disbursements) for more info about methods' parameters - -#### Get banks with available disbursement service - -```ts -d.getBanks(); -``` - -#### Create a disbursement - -```ts -d.create(data: { - externalID: string; - bankCode: string; - accountHolderName: string; - accountNumber: string; - description: string; - amount: number; - emailTo?: string[]; - emailCC?: string[]; - emailBCC?: string[]; - xIdempotencyKey?: string; - forUserID?: string; - withFeeRule?: string; -}) -``` - -#### Create a batch of disbursements - -```ts -d.createBatch(data: { - reference: string; - disbursements: Array<{ - externalID: string; - bankCode: string; - accountHolderName: string; - accountNumber: string; - description: string; - amount: number; - emailTo?: string[]; - emailCC?: string[]; - emailBCC?: string[]; - forUserID?: string; - withFeeRule?: string; - }>; - xIdempotencyKey?: string; -}) -``` - -#### Get a disbursement by ID - -```ts -d.getByID(data: { disbursementID: string }) -``` - -- Get a disbursement by external ID - -```ts -d.getByExtID(data: { externalID: string }) -``` - -### Invoice Services - -Instanitiate Invoice service using constructor that has been injected with Xendit keys - -```js -const { Invoice } = x; -const invoiceSpecificOptions = {}; -const i = new Invoice(invoiceSpecificOptions); -``` - -Example: Create an invoice - -```js -i.createInvoice({ - externalID: 'your-external-id', - payerEmail: 'stanley@xendit.co', - description: 'Invoice for Shoes Purchase', - amount: 100000, -}).then(({ id }) => { - console.log(`Invoice created with ID: ${id}`); -}); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#invoices) for more info about methods' parameters - -#### Create an invoice - -```ts -i.createInvoice(data: { - externalID: string; - payerEmail: string; - description: string; - amount: number; - shouldSendEmail?: boolean; - callbackVirtualAccountID?: string; - invoiceDuration?: number; - successRedirectURL?: string; - failureRedirectURL?: string; - paymentMethods?: string[]; - currency?: string; - midLabel?: string; - forUserID?: string; -}) -``` - -#### Get an invoice - -```ts -i.getInvoice(data: { invoiceID: string; forUserID?: string }) -``` - -#### Expire an invoice - -```ts -i.expireInvoice(data: { - invoiceID: string; - forUserID?: string; -}) -``` - -#### Get all invoices - -```ts -i.getAllInvoices(data?: { - statuses?: string[]; - limit?: number; - createdAfter?: Date; - createdBefore?: Date; - paidAfter?: Date; - paidBefore?: Date; - expiredAfter?: Date; - expiredBefore?: Date; - lastInvoiceID?: string; - clientTypes?: string[]; - paymentChannels?: string[]; - onDemandLink?: string; - recurringPaymentID?: string; - forUserID?: string; -}) -``` - -### Recurring Payments Services - -Instanitiate Recurring Payments service using constructor that has been injected with Xendit keys +### Requirements -```js -const { RecurringPayment } = x; -const rpSpecificOptions = {}; -const rp = new RecurringPayment(rpSpecificOptions); -``` - -Example: Create a recurring payment - -```js -rp.createPayment({ - externalID: '123', - payerEmail: 'stanley@xendit.co', - description: 'Payment for something', - amount: 10000, - interval: RecurringPayment.Interval.Month, - intervalCount: 1, -}) - .then(({ id }) => { - console.log(`Recurring payment created with ID: ${id}`); - }) - .catch(e => { - console.error( - `Recurring payment creation failed with message: ${e.message}`, - ); - }); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#recurring-payments) for more info about methods' parameters - -#### Create recurring payment - -```ts -rp.createPayment(data: { - externalID: string; - payerEmail?: string; - description?: string; - amount: number; - interval: Interval; - intervalCount: number; - totalRecurrence?: number; - invoiceDuration?: number; - shouldSendEmail?: boolean; - missedPaymentAction?: Action; - creditCardToken?: string; - startDate?: Date; - successRedirectURL?: string; - failureRedirectURL?: string; - recharge?: boolean; - chargeImmediately?: boolean; - currency?: string; - rescheduleAt?: Date; - customer?: object; - customerNotificationPreference?: object; - reminderTimeUnit?: string; - reminderTime?: number; - paymentMethodId?: string; -}) -``` - -#### Get recurring payment - -```ts -rp.getPayment(data: { id: string }) -``` - -#### Edit recurring payment - -```ts -rp.editPayment(data: { - id: string; - amount?: number; - creditCardToken?: string; - interval?: Interval; - intervalCount?: number; - shouldSendEmail?: boolean; - invoiceDuration?: number; - missedPaymentAction?: Action; - rescheduleAt?: Date; - customerId?: string; - reminderTimeUnit?: string; - reminderTime?: number; - paymentMethodId?: string; -}) -``` - -#### Stop recurring payment - -```ts -rp.stopPayment(data: { id: string }) -``` - -#### Pause recurring payment - -```ts -rp.pausePayment(data: { id: string }) -``` - -#### Resume recurring payment - -```ts -rp.resumePayment(data: { id: string }) -``` - -### Recurring Services - -Instantiate Recurring service using constructor that has been injected with Xendit keys - -```js -const { Recurring } = x; -const rSpecificOptions = {}; -const r = new Recurring(rSpecificOptions); -``` - -Example: Create a recurring plan - -```js -r.createPlan({ - businessId: '6066ebf68204c740b61aa3c6', - referenceId: 'ref-123', - customerId: 'cus-123', - recurringAction: 'PAYMENT', - currency: 'IDR', - amount: 1000, - paymentMethods: [ - { paymentMethodId: 'pm-123', rank: 1 }, - ], - scheduleId: 'resc-123', - immediateActionType: 'FULL_AMOUNT', - notificationConfig: { - recurringCreated: ['EMAIL'], - recurringSucceeded: ['SMS'], - recurringFailed: ['WHATSAPP'] - }, - failedCycleAction: 'RESUME' -}) - .then(({ id }) => { - console.log(`Recurring plan created with ID: ${id}`); - }) - .catch(e => { - console.error( - `Recurring plan creation failed with message: ${e.message}`, - ); - }); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#recurring-plans) for more info about methods' parameters - -#### Create recurring schedule - -```ts -r.createSchedule(data: { - referenceId: string; - businessId: string; - interval: string; - intervalCount: number; - totalRecurrence?: number; - anchorDate?: string; - retryInterval?: string; - retryIntervalCount?: number; - totalRetry?: number; - failedAttemptNotifications?: number[]; -}); -``` - -#### Edit recurring schedule - -```ts -r.editSchedule(data: { - id: string; - businessId: string; - interval: string; - intervalCount: number; - totalRecurrence?: number; - anchorDate?: string; - retryInterval?: string; - updateScheduledCycle?: boolean; - retryIntervalCount?: number; - totalRetry?: number; - failedAttemptNotifications?: number[]; -}); -``` - -#### Get recurring schedule - -```ts -r.getSchedule(data: { - id: string; - businessId: string; -}); -``` - -#### Create recurring plan - -```ts -r.createPlan(data: { - businessId: string; - referenceId: string; - customerId: string; - recurringAction: RecurringAction; - currency: Currency; - amount: number; - paymentMethods?: Array; - scheduleId: string; - immediateActionType?: ImmediateActionType | null; - notificationConfig?: NotificationConfig | null; - failedCycleAction?: FailingCycleAction; - metadata?: object | null; -}) -``` - -#### Create recurring plan with schedule - -```ts -r.createPlan(data: { - businessId: string; - referenceId: string; - customerId: string; - recurringAction: RecurringAction; - currency: Currency; - amount: number; - paymentMethods?: Array; - schedule: RecurringSchedule; - immediateActionType?: ImmediateActionType | null; - notificationConfig?: NotificationConfig | null; - failedCycleAction?: FailingCycleAction; - metadata?: object | null; -}) -``` - -#### Edit recurring plan - -```ts -r.editPlan(data: { - businessId: string; - customerId?: string; - currency?: Currency; - amount?: number; - paymentMethods?: Array; - notificationConfig?: NotificationConfig | null; - updateScheduledCycle?: boolean; - metadata?: object | null; - description?: string; -}) -``` - -#### Get recurring plan - -```ts -r.getPlan(data: { id: string; businessId: string; }) -``` - -#### Deactivate recurring plan - -```ts -r.deactivatePlan(data: { id: string; businessId: string; }) -``` - -#### Edit recurring cycle - -```ts -r.editCycle(data: { - id: string; - businessId: string; - planId: string; - scheduledTimestamp: string; - currency: Currency; - amount: number; - metadata?: object | null; -}) -``` - -#### Get recurring cycle - -```ts -r.getCycle(data: { - id: string; - planId: string; - businessId: string; -}) -``` - -#### Get all recurring cycles - -```ts -r.getAllCycles(data: { - planId: string; - businessId: string; - limit?: number; - beforeId?: string; - afterId?: string; - searchType?: CycleDashboardSearchType; - searchValue?: string; -}) -``` - -#### Cancel recurring cycle - -```ts -r.cancelCycle(data: { - id: string; - planId: string; - businessId: string; -}) -``` - -### Payout Services - -Instantiate Payout service using constructor that has been injected with Xendit keys - -```js -const { Payout } = x; -const payoutSpecificOptions = {}; -const p = new Payout(payoutSpecificOptions); -``` - -Example: Create a payout - -```js -p.createPayout({ - externalID: 'your-external-id', - amount: 100000, - email: 'stanley@xendit.co', -}).then(({ id }) => { - console.log(`Invoice created with ID: ${id}`); -}); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#payouts) for more info about methods' parameters - -#### Create a payout - -```ts -p.createPayout(data: { - externalID: string; - amount: string; - email: string; -}) -``` - -#### Get a payout - -```ts -p.getPayout(data: { id: string }) -``` - -#### Void a payout - -```ts -p.voidPayout(data: { id: string }) -``` +Node 16.0 and later. -### EWallet Services - -Instanitiate EWallet service using constructor that has been injected with Xendit keys - -```js -const { EWallet } = x; -const ewalletSpecificOptions = {}; -const ew = new EWallet(ewalletSpecificOptions); -``` - -Example: Create an ewallet charge - -```js -ew.createEWalletCharge({ - referenceID: 'test-reference-id', - currency: 'IDR', - amount: 50000, - checkoutMethod: 'ONE_TIME_PAYMENT', - channelCode: 'ID_OVO', - channelProperties: { - mobileNumber: '+6281234567890', - }, -}).then(r => { - console.log('created ewallet payment charge:', r); - return r; -}); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#ewallets) for more info about methods' parameters - -#### Create payment - -```ts -ew.createPayment(data: { - externalID: string; - amount: number; - phone?: string; - expirationDate?: Date; - callbackURL?: string; - redirectURL?: string; - items?: PaymentItem[]; - ewalletType: CreateSupportWalletTypes; - xApiVersion?: string; -}) -``` - -#### Get payment - -```ts -ew.getPayment(data: { - externalID: string; - ewalletType: GetSupportWalletTypes; -}) -``` - -#### Create an ewallet charge - -```ts -ew.createEWalletCharge(data: { - referenceID: string; - currency: Currency; - amount: number; - checkoutMethod: string; - channelCode?: ChannelCode; - channelProperties?: ChannelProps; - paymentMethodId?: string; - customerID?: string; - basket?: Basket[]; - metadata?: object; - forUserID?: string; - withFeeRule?: string; -}) -``` - -#### Get an ewallet charge status - -```ts -ew.getEWalletChargeStatus(data: { - chargeID: string; - forUserID?: string; -}) -``` - -#### Void an ewallet charge - -```ts -ew.voidEWalletCharge(data: { - chargeID: string; - forUserID?: string; -}) +### Install with npm +```bash +npm install xendit-node@latest --save ``` -#### Initialize tokenization - -```ts -ew.initializeTokenization(data: { - customerID: string; - channelCode: ChannelCode; - properties?: OnlineBankingAccessProperties; - metadata?: object; -}) -``` +TypeScript support is included in this package. -#### Unlink tokenization +## Authorization -```ts -ew.unlinkTokenization(data: { - linkedAccTokenID: string; -}) -``` +The SDK needs to be instantiated using your secret API key obtained from the [Xendit Dashboard](https://dashboard.xendit.co/settings/developers#api-keys). +You can sign up for a free Dashboard account [here](https://dashboard.xendit.co/register). -#### Create payment method (E-Wallet) +```typescript +import { Xendit } from 'xendit-node'; -```ts -ew.createPaymentMethod(data: { - customerID: string; - type: PaymentMethodType; - properties: PaymentMethodProperties; - metadata?: object; +const xenditClient = new Xendit({ + secretKey: SECRET_API_KEY, }) ``` -#### Get payment methods by customer ID (E-Wallet) +### Custom Xendit URL +By default, the SDK will use the Xendit production URL (`https://api.xendit.co`) to make API requests.
+If you need to override the default Xendit URL, you can pass in a custom URL to the `Xendit` constructor. -```ts -ew.getPaymentMethodsByCustomerID(data: { - customerID: string; +```typescript +const xenditClient = new Xendit({ + secretKey: SECRET_API_KEY, + xenditURL: 'https://mock-server.localhost:3000', }) ``` -### Balance Services +# Documentation -Instanitiate Balance service using constructor that has been injected with Xendit keys +Find detailed API information and examples for each of our product’s by clicking the links below, +* [Transaction](docs/Transaction.md) +* [Balance](docs/Balance.md) +* [PaymentRequest](docs/PaymentRequest.md) +* [PaymentMethod](docs/PaymentMethod.md) +* [Refund](docs/Refund.md) +* [Invoice](docs/Invoice.md) +* [Payout](docs/Payout.md) -```js -const { Balance } = x; -const balanceSpecificOptions = {}; -const i = new Balance(balanceSpecificOptions); -``` - -Example: Get balance of holding account - -```js -b.getBalance({ - accountType: Balance.AccountType.Holding, -}).then(({ balance }) => { - console.log('Holding balance amount:', balance); -}); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#balances) for more info about methods' parameters - -#### Get balance - -```ts -b.getBalance(data: { - accountType: AccountType; - forUserID?: string; -}) -``` - -### Retail Outlet Services - -Instanitiate Retail outlet service using constructor that has been injected with Xendit keys - -```js -const { RetailOutlet } = x; -const retailOutletSpecificOptions = {}; -const ro = new RetailOutlet(retailOutletSpecificOptions); -``` - -Example: Example: Create a fixed payment code - -```js -ro.createFixedPaymentCode({ - externalID: '123', - retailOutletName: 'ALFAMART', - name: 'Ervan Adetya', - expectedAmt: 10000, -}).then(({ id }) => { - console.log(`Fixed Payment Code created with ID: ${id}`); -}); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#retail-outlets) for more info about methods' parameters - -#### Create fixed payment code - -```ts -ro.createFixedPaymentCode(data: { - externalID: string; - retailOutletName: string; - name: string; - expectedAmt: number; - paymentCode?: string; - expirationDate?: Date; - isSingleUse?: boolean; -}) -``` - -#### Get fixed payment code - -```ts -ro.getFixedPaymentCode(data: { id: string }) -``` - -#### Get payments by fixed payment code ID - -```ts -ro.getPaymentsByFixedPaymentCodeId(data: { id: string }) -``` - -#### Update fixed payment code - -```ts -ro.updateFixedPaymentCode(data: { - id: string - name?: string; - expectedAmt?: number; - expirationDate?: Date; -}) -``` - -#### Simulate payment for RO (only in dev mode) - -```ts -ro.simulatePayment(data: { - retailOutletName: string; - paymentCode: string; - transferAmount: number; -}) -``` - -### QR Code Services - -Instanitiate QR Code service using constructor that has been injected with Xendit keys - -```js -const { QrCode } = x; -const qrcodeSpecificOptions = {}; -const q = new QrCode(qrcodeSpecificOptions); -``` - -Example: create a QR code - -```js -q.createCode({ - externalID: 'your-system-tracking-id', - amount: 10000, - type: QrCode.Type.Dynamic, - callback_url: 'https://yourwebsite/callback', -}) - .then(({ id }) => { - console.log(`QR code created with ID: ${id}`); - }) - .catch(e => { - console.error(`QR code creation failed with message: ${e.message}`); - }); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#qr-codes) for more info about methods' parameters - -#### Create code - -```ts -q.createCode(data: { - externalID: string; - type: QrCodeTypes; - callbackURL: string; - amount?: number; -}); -``` - -#### Get code - -```ts -q.getCode(data: { externalID: string }); -``` - -#### Simulate payment for QR (only in dev mode) - -```ts -q.simulate(data: { externalID: string; amount?: number }); -``` - -#### Get payments by external ID - -```ts -q.getPayments(data: { - externalID: string; - from?: string; - to?: string; - limit?: number; -}); -``` - -### Customer services - -Instanitiate customer service using constructor that has been injected with Xendit keys - -```js -const { Customer } = x; -const customerSpecificOptions = {}; -const c = new Customer(customerSpecificOptions); -``` - -Example: create a customer - -```js -c.createCustomer({ - referenceID: 'ref-id-example-1', - givenNames: 'customer 1', - email: 'customer@website.com', - mobileNumber: '+6281212345678', - description: 'dummy customer', - middleName: 'middle', - surname: 'surname', - addresses: [], -}) - .then(({ id }) => { - console.log(`Customer created with ID: ${id}`); - }) - .catch(e => { - console.error(`Customer creation failed with message: ${e.message}`); - }); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#customers) for more info about methods' parameters - -#### Create customer - -```ts -c.createCustomer(data: { - referenceID: string; - mobileNumber?: string; - email?: string; - givenNames: string; - middleName?: string; - surname?: string; - description?: string; - phoneNumber?: string; - nationality?: string; - addresses?: Address[]; - dateOfBirth?: string; - metadata?: object; -}); -``` - -#### Get customer - -```ts -c.getCustomer(data: { id: string }); -``` - -#### Get customer by reference ID - -```ts -c.getCustomerByReferenceID(data: { referenceID: string }); -``` - -#### Update customer - -```ts -c.updateCustomer(data: { - id: string; - referenceID?: string; - givenNames?: string; - mobileNumber?: string; - addresses?: Address[]; - description?: string; - middleName?: string; - surname?: string; - phoneNumber?: string; - nationality?: string; - dateOfBirth?: string; - metadata?: object; - }) -``` - -### Direct debit services - -Instanitiate direct debit service using constructor that has been injected with Xendit keys - -```js -const { DirectDebit } = x; -const directDebitSpecificOptions = {}; -const dd = new DirectDebit(directDebitSpecificOptions); -``` - -Example: create a direct debit payment - -```js -dd.createDirectDebitPayment({ - idempotencyKey: '7960e3fd-9a1d-469d-8b3e-2f88df139c50', - referenceID: 'merchant-ref-id-ex-1', - paymentMethodID: 'pm-8c09656d-09fe-4bdd-bd8d-87495a71d231', - currency: 'IDR', - amount: 15000, - callbackURL: 'https://payment-callback-listener/', - enableOTP: true, -}) - .then(({ id }) => { - console.log(`Direct debit payment created with ID: ${id}`); - }) - .catch(e => { - console.error(`Direct debit creation failed with message: ${e.message}`); - }); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#direct-debit) for more info about methods' parameters - -#### Initialize linked account tokenization - -```ts -dd.initializeTokenization(data: { - customerID: string; - channelCode: ChannelCode; - properties?: DebitCardProperties | OnlineBankingAccessProperties; - device?: object; - metadata?: object; -}); -``` - -#### Validate OTP for Linked Account Token - -```ts -dd.validateOTPforLinkedAccount(data: { - tokenID: string; - otpCode: string; -}); -``` - -#### Retrieve accessible accounts by linked account token - -```ts -dd.retrieveAccountsByTokenID(data: { - tokenID: string; -}); -``` - -#### Create payment method (Direct Debit) - -```ts -dd.createPaymentMethod(data: { - customerID: string; - type: PaymentMethodType; - properties: PaymentMethodProperties; - metadata?: object; -}); -``` - -#### Get payment methods by customer ID (Direct Debit) - -```ts -dd.getPaymentMethodsByCustomerID(data: { - customerID: string; -}); -``` - -#### Create direct debit payment - -```ts -dd.createDirectDebitPayment(data: { - idempotencyKey: string; - apiVersion?: string; - referenceID: string; - paymentMethodID: string; - currency: string; - amount: number; - callbackURL: string; - enableOTP?: boolean; - description?: string; - basket?: Basket[]; - device?: object; - metadata?: object; - successRedirectUrl?: string; - failureRedirectUrl?: string; -}); -``` - -#### Validate OTP for direct debit payment - -```ts -dd.validateOTPforPayment(data: { - directDebitID: string; - otpCode: string; - apiVersion?: string; -}) -``` - -#### Get direct debit payment status by ID - -```ts -dd.getDirectDebitPaymentStatusByID(data: { - directDebitID: string; -}); -``` - -#### Get direct debit payment status by reference ID - -```ts -dd.getDirectDebitPaymentStatusByReferenceID(data: { - referenceID: string; -``` - -### Report Service - -Instantiate the Report service using a constructor which has been injected with Xendit keys. - -```js -const { Report } = x; -const reportSpecificOptions = {}; -const r = new Report(reportSpecificOptions); -``` - -Example: Generating a report - -```js -r.generateReport({ - type: 'BALANCE_HISTORY', - filterDateFrom: new Date(new Date().getTime() - 24 * 60 * 60 * 1000), // Yesterday's Date - filterDateTo: new Date(), - format: 'CSV', - currency: 'IDR', -}) - .then(res => { - console.log('Generated report:', res); - }) - .catch(e => { - console.error(`Generate Report Failed with Error: ${e.message}`); - }); -``` - -#### Generate Report - -```ts -r.generateReport(data: { - type: reportTypes; - filterDateFrom?: Date; - filterDateTo?: Date; - format?: formatTypes; - currency?: currencyTypes; -}) -``` - -#### Get Report - -```ts -r.getReport(data: { - id: string -}) -``` - -### Transaction Service - -Instantiate the Transaction service using a constructor which has been injected with Xendit keys. - -```js -const { Transaction } = x; -const transactionSpecificOptions = {}; -const t = new Transaction(transactionSpecificOptions); -``` - -Example: Getting a transaction - -```js -t.getTransaction({ - id: 'txn_123', -}) - .then(res => { - console.log('Get Transaction:', res); - }) - .catch(e => { - console.error(`Get Transaction Failed with Error: ${e.message}`); - }); -``` - -#### Get Transaction - -```ts -t.getTransaction(data: { - id: string; -}) -``` - -#### List Transactions - -```ts -t.listTransactions(data: { - types?: Array; - statuses?: Array; - channelCategories?: Array; - referenceId?: string; - productId?: string; - accountIdentifier?: string; - currency?: string; - amount?: number; - limit?: number; - afterId?: string; - beforeId?: string; - createdDateFrom?: Date; - createdDateTo?: Date; - updatedDateFrom?: Date; - updatedDateTo?: Date; -}) -``` - -### XenPlatform Service - -Instanitiate Platform service using constructor that has been injected with Xendit keys - -```js -const { Platform } = x; -const platformSpecificOptions = {}; -const p = new Platform(platformSpecificOptions); -``` - -Example: Creating a sub-account - -```js -p.createAccount({ - accountEmail: 'example@gmail.com', - type: 'MANAGED', -}) - .then(({ user_id }) => { - console.log(`Account created with ID: ${user_id}`); - }) - .catch(e => { - console.error(`Account creation failed with message: ${e.message}`); - }); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#xenplatform) for more info about methods' parameters - -#### Create sub-account - -```ts -p.createAccount(data: { - accountEmail: string; - type: AccountTypes; - businessProfile?: { - businessName: string; - }; -}) -``` - -#### Create sub-account using V2 - -```ts -p.createV2Account(data: { - email: string; - type: string; - publicProfile?: { - businessName: string; - }; -}) -``` - -#### Get sub-account by ID - -```ts -p.getAccountByID(data: { - id: string; -}) -``` - -#### Update sub-account - -```ts -p.updateAccount(data: { - id: string; - email: string; - publicProfile?: { - businessName: string; - }; -}) -``` - -#### Set Callback URL - -```ts -p.setCallbackURL(data: { - type: string; - url: string; - forUserID?: string; -}) -``` - -#### Create transfers - -```ts -p.createTransfer(data: { - reference: string; - amount: number; - sourceUserID: string; - destinationUserID: string; -}) -``` - -#### Create fee rules - -```ts -p.createFeeRule(data: { - name: string; - description?: string; - routes: Array<{ - unit: string; - amount: number; - currency: string; - }>; -}) - -``` -### Payment Request - -Instanitiate Payment Request using constructor that has been injected with Xendit keys - -```js -const { PaymentRequest } = x; -const r = new PaymentRequest(); -``` - -Example: Create a Payment Request - -```js - - -r.createPaymentRequest({ - amount: 1500, - currency: 'PHP', - payment_method: { - type: 'EWALLET', - ewallet: { - channel_code: 'GRABPAY', - channel_properties: { - success_return_url: 'https://redirect.me/goodstuff', - failure_return_url: 'https://redirect.me/badstuff', - }, - }, - reusability: 'ONE_TIME_USE', - } -}).then(({ id }) => { - console.log(`payment request created with ID: ${id}`); -}); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#payment-requests) for more info about methods' parameters - - -#### Create payment request - -```ts -r.createPaymentRequest(data: { - currency: PaymentRequestCurrencies; - amount: number; - reference_id?: string; - customer_id?: string; - country: PaymentRequestCountries; - description?: string; - payment_method: object; - channel_properties?: PaymentRequestChannelProperties; - metadata?: object; - payment_method_id?: string; - shipping_information?: object; - initiator?: PaymentRequestInitiator; - capture_method?: PaymentRequestCaptureMethod; - idempotency_key?: string; - for_user_id?: string; -}) -``` - -#### List payment requests - -```ts -r.listpaymentrequests(data: { - id?: string; - reference_id?: string; - customer_id?: string; - type?: PaymentRequestType; - channel_code?: string; - status?: PaymentRequestStatuses; - limit?: number; - after_id?: string; - before_id?: string; - for_user_id?: string; -}) -``` - -#### Get payment request details by ID - -```ts -r.getPaymentRequestByID(data: { - id: string; - for_user_id?: string; -}) -``` - -#### confirm payment request - -```ts -r.confirmPaymentRequest(data: { - id: string; - auth_code: string; - idempotency_key?: string; - for_user_id?: string; -}) -``` - -#### resend auth for payment request - -```ts -r.resendAuthForPaymentRequest(data: { - id: string; - idempotency_key?: string; - for_user_id?: string; -}) -``` - - -### Payment Method - -Instanitiate Payment Method using constructor that has been injected with Xendit keys - -```js -const { PaymentMethod } = x; -const r = new PaymentMethod(); -``` - -Example: Create a Payment Method - -```js -r.createPaymentMethod({ - type: 'DIRECT_DEBIT', - reusability: 'ONE_TIME_USE', - customer_id: '16f72571-9b3a-43dc-b241-5b71f470202f', - country: 'ID', - direct_debit: { - channel_code: 'BRI', - channel_properties: { - mobile_number: '+6281299640904', - card_last_four: '8888', - card_expiry: '10/29', - email: 'dharma@xendit.co', - }, - }, -}).then(({ id }) => { - console.log(`payment method created with ID: ${id}`); -}); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#payment-methods) for more info about methods' parameters - - -#### Create payment method - -```ts -r.createPaymentMethodV2(data: { - type: PaymentMethodV2Types; - reusability: PaymentMethodV2Reusabilities; - reference_id?: string; - customer_id?: string; - country?: CreatePaymentMethodV2Countries; - description?: string; - billing_information?: BillingInformationItems; - metadata?: object; - ewallet?: EwalletItems; - direct_debit?: DirectDebitItems; - card?: CardItems; - over_the_counter?: OverTheCounterItems; - virtual_account?: VirtualAccountItems; - qr_code?: QRISItems; - for_user_id?: string; - idempotency_key?: string; -}) -``` - -#### List payment methods - -```ts -r.listPaymentMethodV2(data: { - payment_method_id?: string; - payment_method_type?: string; - channel_code?: string; - limit?: number; - after_id?: string; - before_id?: string; - for_user_id?: string; -}) -``` - -#### Get payment method details by ID - -```ts -r.getPaymentMethodByIdV2(data: { - id: string; - for_user_id?: string; -}) -``` - -#### Authorize Payment method - -```ts -r.authorizePaymentMethodV2(data: { - id: string; - auth_code: string; - for_user_id?: string; - idempotency_key?: string; -}) -``` - -#### Update Payment method - -```ts -r.updatePaymentMethodV2(data: { - id: string; - reference_id?: string; - description?: string; - metadata?: object; - status?: string; - reusability?: PaymentMethodV2Reusabilities; - over_the_counter?: UpdateOverTheCounterItems; - virtual_account?: UpdateVirtualAccountItems; - for_user_id?: string; -}) -``` - -#### Expire Payment method - -```ts -r.expirePaymentMethodV2(data: { - id: string; - for_user_id?: string; - idempotency_key?: string; -}) -``` - -#### List payments by payment method id - -```ts -r.listPaymentsByPaymentMethodIdV2(data: { - id: string; - payment_request_id?: string; - reference_id?: string; - status?: ListPaymentMethodV2StatusItems; - limit?: number; - after_id?: string; - before_id?: string; - created?: string; - updated?: string; - for_user_id?: string; -}) -``` - - -### Refund Services - -Instanitiate Refund service using constructor that has been injected with Xendit keys - -```js -const { Refund } = x; -const r = new Refund(); -``` - -Example: Create a refund - -```js -r.createRefund({ - invoice_id: 'your-invoice-id', - reason: 'FRAUDULENT', - amount: 1000, -}).then(({ id }) => { - console.log(`refund created with ID: ${id}`); -}); -``` - -Refer to [Xendit API Reference](https://developers.xendit.co/api-reference/#refunds) for more info about methods' parameters - -#### Create refund - -```ts -r.createRefund(data: { - payment_request_id?: string; - reference_id?: string; - invoice_id?: string; - currency?: string; - amount?: number; - reason: RefundReasons; - metadata?: object; - idempotency_key?: string; - for_user_id?: string; -}) -``` - -#### List refunds - -```ts -r.listRefunds(data: { - payment_request_id?: string; - invoice_id?: string; - payment_method_type?: string; - channel_code?: string; - limit?: number; - after_id?: string; - before_id?: string; - for_user_id?: string; -}) -``` - -#### Get refund details by ID - -```ts -r.getRefundById(data: { - id: string; -}) -``` - -## Contributing - -Running test suite - -```bash -npm install -npm run test -``` - -Running examples - -```bash -cp .env.sample .env # then fill in required environment variables -node examples/card.js # or whichever example you would like to run -``` -There are a commit hook to run linting and formatting and push hook to run all tests. -Please make sure they pass before making commits/pushes. +Further Reading -For any requests, bug or comments, please [open an issue](https://github.com/xendit/xendit-node/issues) or [submit a pull request](https://github.com/xendit/xendit-node/pulls). +* [Xendit Docs](https://docs.xendit.co/) +* [Xendit API Reference](https://developers.xendit.co/) \ No newline at end of file diff --git a/balance_and_transaction/apis/Balance.ts b/balance_and_transaction/apis/Balance.ts new file mode 100644 index 0000000..b5c8763 --- /dev/null +++ b/balance_and_transaction/apis/Balance.ts @@ -0,0 +1,103 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +import * as runtime from '../../runtime'; +import type { + Balance, + ServerError, + ValidationError, +} from '../models'; +import { + BalanceFromJSON, + BalanceToJSON, + ServerErrorFromJSON, + ServerErrorToJSON, + ValidationErrorFromJSON, + ValidationErrorToJSON, +} from '../models'; + +export interface GetBalanceRequest { + accountType?: GetBalanceAccountTypeEnum; + currency?: string; + forUserId?: string; + idempotencyKey?: string; +} + +/** + * + */ +export class BalanceApi extends runtime.BaseAPI { + + secretKey: string = ""; + xenditURL: string = ""; + + constructor({secretKey, xenditURL}: {secretKey: string, xenditURL?: string}) { + const conf = new runtime.Configuration({ + basePath: xenditURL || 'https://api.xendit.co' + }) + super(conf) + this.secretKey = secretKey; + } + + /** + * Retrieves balance for your business, defaults to CASH type + * Retrieves balances for a business, default to CASH type + */ + private async getBalanceRaw(requestParameters: GetBalanceRequest): Promise> { + const queryParameters: any = {}; + + if (requestParameters.accountType !== undefined) { + queryParameters['account_type'] = requestParameters.accountType; + } + + if (requestParameters.currency !== undefined) { + queryParameters['currency'] = requestParameters.currency; + } + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.forUserId !== undefined && requestParameters.forUserId !== null) { + headerParameters['for-user-id'] = String(requestParameters.forUserId); + } + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/balance`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => BalanceFromJSON(jsonValue)); + } + + /** + * Retrieves balance for your business, defaults to CASH type + * Retrieves balances for a business, default to CASH type + */ + async getBalance(requestParameters: GetBalanceRequest = {}): Promise { + const response = await this.getBalanceRaw(requestParameters); + return await response.value(); + } + +} + +/** + * @export + */ +export const GetBalanceAccountTypeEnum = { + Cash: 'CASH', + Holding: 'HOLDING', + Tax: 'TAX' +} as const; +export type GetBalanceAccountTypeEnum = typeof GetBalanceAccountTypeEnum[keyof typeof GetBalanceAccountTypeEnum]; diff --git a/balance_and_transaction/apis/Transaction.ts b/balance_and_transaction/apis/Transaction.ts new file mode 100644 index 0000000..5a26baf --- /dev/null +++ b/balance_and_transaction/apis/Transaction.ts @@ -0,0 +1,213 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +import * as runtime from '../../runtime'; +import type { + ChannelsCategories, + Currency, + DateRangeFilter, + ServerError, + TransactionResponse, + TransactionStatuses, + TransactionTypes, + TransactionsResponse, + ValidationError, +} from '../models'; +import { + ChannelsCategoriesFromJSON, + ChannelsCategoriesToJSON, + CurrencyFromJSON, + CurrencyToJSON, + DateRangeFilterFromJSON, + DateRangeFilterToJSON, + ServerErrorFromJSON, + ServerErrorToJSON, + TransactionResponseFromJSON, + TransactionResponseToJSON, + TransactionStatusesFromJSON, + TransactionStatusesToJSON, + TransactionTypesFromJSON, + TransactionTypesToJSON, + TransactionsResponseFromJSON, + TransactionsResponseToJSON, + ValidationErrorFromJSON, + ValidationErrorToJSON, +} from '../models'; + +export interface GetAllTransactionsRequest { + forUserId?: string; + types?: Array; + statuses?: Array; + channelCategories?: Array; + referenceId?: string; + productId?: string; + accountIdentifier?: string; + amount?: number; + currency?: Currency; + created?: DateRangeFilter; + updated?: DateRangeFilter; + limit?: number; + afterId?: string; + beforeId?: string; + idempotencyKey?: string; +} + +export interface GetTransactionByIDRequest { + id: string; + forUserId?: string; + idempotencyKey?: string; +} + +/** + * + */ +export class TransactionApi extends runtime.BaseAPI { + + secretKey: string = ""; + xenditURL: string = ""; + + constructor({secretKey, xenditURL}: {secretKey: string, xenditURL?: string}) { + const conf = new runtime.Configuration({ + basePath: xenditURL || 'https://api.xendit.co' + }) + super(conf) + this.secretKey = secretKey; + } + + /** + * Get a list of all transactions based on filter and search parameters. + * Get a list of transactions + */ + private async getAllTransactionsRaw(requestParameters: GetAllTransactionsRequest): Promise> { + const queryParameters: any = {}; + + if (requestParameters.types) { + queryParameters['types'] = requestParameters.types; + } + + if (requestParameters.statuses) { + queryParameters['statuses'] = requestParameters.statuses; + } + + if (requestParameters.channelCategories) { + queryParameters['channel_categories'] = requestParameters.channelCategories; + } + + if (requestParameters.referenceId !== undefined) { + queryParameters['reference_id'] = requestParameters.referenceId; + } + + if (requestParameters.productId !== undefined) { + queryParameters['product_id'] = requestParameters.productId; + } + + if (requestParameters.accountIdentifier !== undefined) { + queryParameters['account_identifier'] = requestParameters.accountIdentifier; + } + + if (requestParameters.amount !== undefined) { + queryParameters['amount'] = requestParameters.amount; + } + + if (requestParameters.currency !== undefined) { + queryParameters['currency'] = requestParameters.currency; + } + + if (requestParameters.created !== undefined) { + queryParameters['created'] = requestParameters.created; + } + + if (requestParameters.updated !== undefined) { + queryParameters['updated'] = requestParameters.updated; + } + + if (requestParameters.limit !== undefined) { + queryParameters['limit'] = requestParameters.limit; + } + + if (requestParameters.afterId !== undefined) { + queryParameters['after_id'] = requestParameters.afterId; + } + + if (requestParameters.beforeId !== undefined) { + queryParameters['before_id'] = requestParameters.beforeId; + } + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.forUserId !== undefined && requestParameters.forUserId !== null) { + headerParameters['for-user-id'] = String(requestParameters.forUserId); + } + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/transactions`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => TransactionsResponseFromJSON(jsonValue)); + } + + /** + * Get a list of all transactions based on filter and search parameters. + * Get a list of transactions + */ + async getAllTransactions(requestParameters: GetAllTransactionsRequest = {}): Promise { + const response = await this.getAllTransactionsRaw(requestParameters); + return await response.value(); + } + + /** + * Get single specific transaction by transaction id. + * Get a transaction based on its id + */ + private async getTransactionByIDRaw(requestParameters: GetTransactionByIDRequest): Promise> { + if (requestParameters.id === null || requestParameters.id === undefined) { + throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling getTransactionByID.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.forUserId !== undefined && requestParameters.forUserId !== null) { + headerParameters['for-user-id'] = String(requestParameters.forUserId); + } + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/transactions/{id}`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => TransactionResponseFromJSON(jsonValue)); + } + + /** + * Get single specific transaction by transaction id. + * Get a transaction based on its id + */ + async getTransactionByID(requestParameters: GetTransactionByIDRequest): Promise { + const response = await this.getTransactionByIDRaw(requestParameters); + return await response.value(); + } + +} diff --git a/balance_and_transaction/apis/index.ts b/balance_and_transaction/apis/index.ts new file mode 100644 index 0000000..2f7d8bb --- /dev/null +++ b/balance_and_transaction/apis/index.ts @@ -0,0 +1,4 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './Balance'; +export * from './Transaction'; diff --git a/balance_and_transaction/index.ts b/balance_and_transaction/index.ts new file mode 100644 index 0000000..4d986d2 --- /dev/null +++ b/balance_and_transaction/index.ts @@ -0,0 +1,4 @@ +export { + BalanceApi as Balance, + TransactionApi as Transaction, +} from './apis' diff --git a/balance_and_transaction/models/Balance.ts b/balance_and_transaction/models/Balance.ts new file mode 100644 index 0000000..3bca882 --- /dev/null +++ b/balance_and_transaction/models/Balance.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * The balance remaining in your account + * @export + * @interface Balance + */ +export interface Balance { + /** + * + * @type {number} + * @memberof Balance + */ + balance: number; +} + +/** + * Check if a given object implements the Balance interface. + */ +export function instanceOfBalance(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "balance" in value; + + return isInstance; +} + +export function BalanceFromJSON(json: any): Balance { + return BalanceFromJSONTyped(json, false); +} + +export function BalanceFromJSONTyped(json: any, ignoreDiscriminator: boolean): Balance { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'balance': json['balance'], + }; +} + +export function BalanceToJSON(value?: Balance | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'balance': value.balance, + }; +} + diff --git a/balance_and_transaction/models/ChannelsCategories.ts b/balance_and_transaction/models/ChannelsCategories.ts new file mode 100644 index 0000000..da3ed6b --- /dev/null +++ b/balance_and_transaction/models/ChannelsCategories.ts @@ -0,0 +1,44 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const ChannelsCategories = { + Bank: 'BANK', + CardlessCredit: 'CARDLESS_CREDIT', + Paylater: 'PAYLATER', + Cards: 'CARDS', + Cash: 'CASH', + DirectDebit: 'DIRECT_DEBIT', + Ewallet: 'EWALLET', + Invoice: 'INVOICE', + QrCode: 'QR_CODE', + RetailOutlet: 'RETAIL_OUTLET', + VirtualAccount: 'VIRTUAL_ACCOUNT', + Xenplatform: 'XENPLATFORM', + DirectBankTransfer: 'DIRECT_BANK_TRANSFER', + Other: 'OTHER' +} as const; +export type ChannelsCategories = typeof ChannelsCategories[keyof typeof ChannelsCategories]; + + +export function ChannelsCategoriesFromJSON(json: any): ChannelsCategories { + return ChannelsCategoriesFromJSONTyped(json, false); +} + +export function ChannelsCategoriesFromJSONTyped(json: any, ignoreDiscriminator: boolean): ChannelsCategories { + return json as ChannelsCategories; +} + +export function ChannelsCategoriesToJSON(value?: ChannelsCategories | null): any { + return value as any; +} + diff --git a/balance_and_transaction/models/Currency.ts b/balance_and_transaction/models/Currency.ts new file mode 100644 index 0000000..bec08a3 --- /dev/null +++ b/balance_and_transaction/models/Currency.ts @@ -0,0 +1,192 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const Currency = { + Idr: 'IDR', + Php: 'PHP', + Usd: 'USD', + Jpy: 'JPY', + Vnd: 'VND', + Sgd: 'SGD', + Aed: 'AED', + Afn: 'AFN', + All: 'ALL', + Amd: 'AMD', + Ang: 'ANG', + Aoa: 'AOA', + Ars: 'ARS', + Aud: 'AUD', + Awg: 'AWG', + Azn: 'AZN', + Bam: 'BAM', + Bbd: 'BBD', + Bdt: 'BDT', + Bgn: 'BGN', + Bhd: 'BHD', + Bif: 'BIF', + Bmd: 'BMD', + Bnd: 'BND', + Bob: 'BOB', + Brl: 'BRL', + Bsd: 'BSD', + Btn: 'BTN', + Bwp: 'BWP', + Byn: 'BYN', + Bzd: 'BZD', + Cad: 'CAD', + Cdf: 'CDF', + Chf: 'CHF', + Clp: 'CLP', + Cny: 'CNY', + Cop: 'COP', + Crc: 'CRC', + Cuc: 'CUC', + Cup: 'CUP', + Cve: 'CVE', + Czk: 'CZK', + Djf: 'DJF', + Dkk: 'DKK', + Dop: 'DOP', + Dzd: 'DZD', + Egp: 'EGP', + Ern: 'ERN', + Etb: 'ETB', + Eur: 'EUR', + Fjd: 'FJD', + Fkp: 'FKP', + Gbp: 'GBP', + Gel: 'GEL', + Ggp: 'GGP', + Ghs: 'GHS', + Gip: 'GIP', + Gmd: 'GMD', + Gnf: 'GNF', + Gtq: 'GTQ', + Gyd: 'GYD', + Hkd: 'HKD', + Hnl: 'HNL', + Hrk: 'HRK', + Htg: 'HTG', + Huf: 'HUF', + Ils: 'ILS', + Imp: 'IMP', + Inr: 'INR', + Iqd: 'IQD', + Irr: 'IRR', + Isk: 'ISK', + Jep: 'JEP', + Jmd: 'JMD', + Jod: 'JOD', + Kes: 'KES', + Kgs: 'KGS', + Khr: 'KHR', + Kmf: 'KMF', + Kpw: 'KPW', + Krw: 'KRW', + Kwd: 'KWD', + Kyd: 'KYD', + Kzt: 'KZT', + Lak: 'LAK', + Lbp: 'LBP', + Lkr: 'LKR', + Lrd: 'LRD', + Lsl: 'LSL', + Lyd: 'LYD', + Mad: 'MAD', + Mdl: 'MDL', + Mga: 'MGA', + Mkd: 'MKD', + Mmk: 'MMK', + Mnt: 'MNT', + Mop: 'MOP', + Mru: 'MRU', + Mur: 'MUR', + Mvr: 'MVR', + Mwk: 'MWK', + Mxn: 'MXN', + Myr: 'MYR', + Mzn: 'MZN', + Nad: 'NAD', + Ngn: 'NGN', + Nio: 'NIO', + Nok: 'NOK', + Npr: 'NPR', + Nzd: 'NZD', + Omr: 'OMR', + Pab: 'PAB', + Pen: 'PEN', + Pgk: 'PGK', + Pkr: 'PKR', + Pln: 'PLN', + Pyg: 'PYG', + Qar: 'QAR', + Ron: 'RON', + Rsd: 'RSD', + Rub: 'RUB', + Rwf: 'RWF', + Sar: 'SAR', + Sbd: 'SBD', + Scr: 'SCR', + Sdg: 'SDG', + Sek: 'SEK', + Shp: 'SHP', + Sll: 'SLL', + Sos: 'SOS', + Spl: 'SPL', + Srd: 'SRD', + Stn: 'STN', + Svc: 'SVC', + Syp: 'SYP', + Szl: 'SZL', + Thb: 'THB', + Tjs: 'TJS', + Tmt: 'TMT', + Tnd: 'TND', + Top: 'TOP', + Try: 'TRY', + Ttd: 'TTD', + Tvd: 'TVD', + Twd: 'TWD', + Tzs: 'TZS', + Uah: 'UAH', + Ugx: 'UGX', + Uyu: 'UYU', + Uzs: 'UZS', + Vef: 'VEF', + Vuv: 'VUV', + Wst: 'WST', + Xaf: 'XAF', + Xcd: 'XCD', + Xdr: 'XDR', + Xof: 'XOF', + Xpf: 'XPF', + Yer: 'YER', + Zar: 'ZAR', + Zmw: 'ZMW', + Zwd: 'ZWD' +} as const; +export type Currency = typeof Currency[keyof typeof Currency]; + + +export function CurrencyFromJSON(json: any): Currency { + return CurrencyFromJSONTyped(json, false); +} + +export function CurrencyFromJSONTyped(json: any, ignoreDiscriminator: boolean): Currency { + return json as Currency; +} + +export function CurrencyToJSON(value?: Currency | null): any { + return value as any; +} + diff --git a/balance_and_transaction/models/DateRangeFilter.ts b/balance_and_transaction/models/DateRangeFilter.ts new file mode 100644 index 0000000..3207c8c --- /dev/null +++ b/balance_and_transaction/models/DateRangeFilter.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface DateRangeFilter + */ +export interface DateRangeFilter { + /** + * Start time of transaction. If not specified will list all dates. + * @type {Date} + * @memberof DateRangeFilter + */ + gte?: Date; + /** + * End time of transaction. If not specified will list all dates. + * @type {Date} + * @memberof DateRangeFilter + */ + lte?: Date; +} + +/** + * Check if a given object implements the DateRangeFilter interface. + */ +export function instanceOfDateRangeFilter(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function DateRangeFilterFromJSON(json: any): DateRangeFilter { + return DateRangeFilterFromJSONTyped(json, false); +} + +export function DateRangeFilterFromJSONTyped(json: any, ignoreDiscriminator: boolean): DateRangeFilter { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'gte': !exists(json, 'gte') ? undefined : (new Date(json['gte'])), + 'lte': !exists(json, 'lte') ? undefined : (new Date(json['lte'])), + }; +} + +export function DateRangeFilterToJSON(value?: DateRangeFilter | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'gte': value.gte === undefined ? undefined : (value.gte.toISOString()), + 'lte': value.lte === undefined ? undefined : (value.lte.toISOString()), + }; +} + diff --git a/balance_and_transaction/models/FeeResponse.ts b/balance_and_transaction/models/FeeResponse.ts new file mode 100644 index 0000000..e02d6e4 --- /dev/null +++ b/balance_and_transaction/models/FeeResponse.ts @@ -0,0 +1,106 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface FeeResponse + */ +export interface FeeResponse { + /** + * Amount of the Xendit fee for this transaction. + * @type {number} + * @memberof FeeResponse + */ + xenditFee: number; + /** + * Amount of the VAT for this transaction. + * @type {number} + * @memberof FeeResponse + */ + valueAddedTax: number; + /** + * Amount of the Xendit Withholding Tax for this transaction if applicable. See [Tax Documentation](https://docs.xendit.co/fees-and-vat#vat) for more information. + * @type {number} + * @memberof FeeResponse + */ + xenditWithholdingTax?: number; + /** + * Amount of the 3rd Party Withholding Tax for this transaction if applicable. 3rd party example: Bank + * @type {number} + * @memberof FeeResponse + */ + thirdPartyWithholdingTax?: number; + /** + * + * @type {string} + * @memberof FeeResponse + */ + status?: FeeResponseStatusEnum; +} + + +/** + * @export + */ +export const FeeResponseStatusEnum = { + Pending: 'PENDING', + Completed: 'COMPLETED', + Canceled: 'CANCELED', + Reversed: 'REVERSED' +} as const; +export type FeeResponseStatusEnum = typeof FeeResponseStatusEnum[keyof typeof FeeResponseStatusEnum]; + + +/** + * Check if a given object implements the FeeResponse interface. + */ +export function instanceOfFeeResponse(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "xenditFee" in value; + isInstance = isInstance && "valueAddedTax" in value; + + return isInstance; +} + +export function FeeResponseFromJSON(json: any): FeeResponse { + return FeeResponseFromJSONTyped(json, false); +} + +export function FeeResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): FeeResponse { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'xenditFee': json['xendit_fee'], + 'valueAddedTax': json['value_added_tax'], + 'xenditWithholdingTax': !exists(json, 'xendit_withholding_tax') ? undefined : json['xendit_withholding_tax'], + 'thirdPartyWithholdingTax': !exists(json, 'third_party_withholding_tax') ? undefined : json['third_party_withholding_tax'], + 'status': !exists(json, 'status') ? undefined : json['status'], + }; +} + +export function FeeResponseToJSON(value?: FeeResponse | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'xendit_fee': value.xenditFee, + 'value_added_tax': value.valueAddedTax, + 'xendit_withholding_tax': value.xenditWithholdingTax, + 'third_party_withholding_tax': value.thirdPartyWithholdingTax, + 'status': value.status, + }; +} + diff --git a/balance_and_transaction/models/LinkItem.ts b/balance_and_transaction/models/LinkItem.ts new file mode 100644 index 0000000..666b346 --- /dev/null +++ b/balance_and_transaction/models/LinkItem.ts @@ -0,0 +1,78 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface LinkItem + */ +export interface LinkItem { + /** + * URI of target, this will be to the next link. + * @type {string} + * @memberof LinkItem + */ + href: string; + /** + * The relationship between source and target. The value will be `next`. + * @type {string} + * @memberof LinkItem + */ + rel: string; + /** + * The HTTP method, the value will be `GET`. + * @type {string} + * @memberof LinkItem + */ + method: string; +} + +/** + * Check if a given object implements the LinkItem interface. + */ +export function instanceOfLinkItem(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "href" in value; + isInstance = isInstance && "rel" in value; + isInstance = isInstance && "method" in value; + + return isInstance; +} + +export function LinkItemFromJSON(json: any): LinkItem { + return LinkItemFromJSONTyped(json, false); +} + +export function LinkItemFromJSONTyped(json: any, ignoreDiscriminator: boolean): LinkItem { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'href': json['href'], + 'rel': json['rel'], + 'method': json['method'], + }; +} + +export function LinkItemToJSON(value?: LinkItem | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'href': value.href, + 'rel': value.rel, + 'method': value.method, + }; +} + diff --git a/balance_and_transaction/models/ServerError.ts b/balance_and_transaction/models/ServerError.ts new file mode 100644 index 0000000..380f8ef --- /dev/null +++ b/balance_and_transaction/models/ServerError.ts @@ -0,0 +1,78 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface ServerError + */ +export interface ServerError { + /** + * + * @type {number} + * @memberof ServerError + */ + statusCode: number; + /** + * + * @type {string} + * @memberof ServerError + */ + error: string; + /** + * + * @type {string} + * @memberof ServerError + */ + message: string; +} + +/** + * Check if a given object implements the ServerError interface. + */ +export function instanceOfServerError(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "statusCode" in value; + isInstance = isInstance && "error" in value; + isInstance = isInstance && "message" in value; + + return isInstance; +} + +export function ServerErrorFromJSON(json: any): ServerError { + return ServerErrorFromJSONTyped(json, false); +} + +export function ServerErrorFromJSONTyped(json: any, ignoreDiscriminator: boolean): ServerError { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'statusCode': json['status_code'], + 'error': json['error'], + 'message': json['message'], + }; +} + +export function ServerErrorToJSON(value?: ServerError | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'status_code': value.statusCode, + 'error': value.error, + 'message': value.message, + }; +} + diff --git a/balance_and_transaction/models/TransactionResponse.ts b/balance_and_transaction/models/TransactionResponse.ts new file mode 100644 index 0000000..99928ca --- /dev/null +++ b/balance_and_transaction/models/TransactionResponse.ts @@ -0,0 +1,253 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { ChannelsCategories } from './ChannelsCategories'; +import { + ChannelsCategoriesFromJSON, + ChannelsCategoriesFromJSONTyped, + ChannelsCategoriesToJSON, +} from './ChannelsCategories'; +import type { Currency } from './Currency'; +import { + CurrencyFromJSON, + CurrencyFromJSONTyped, + CurrencyToJSON, +} from './Currency'; +import type { FeeResponse } from './FeeResponse'; +import { + FeeResponseFromJSON, + FeeResponseFromJSONTyped, + FeeResponseToJSON, +} from './FeeResponse'; +import type { TransactionResponseType } from './TransactionResponseType'; +import { + TransactionResponseTypeFromJSON, + TransactionResponseTypeFromJSONTyped, + TransactionResponseTypeToJSON, +} from './TransactionResponseType'; +import type { TransactionStatuses } from './TransactionStatuses'; +import { + TransactionStatusesFromJSON, + TransactionStatusesFromJSONTyped, + TransactionStatusesToJSON, +} from './TransactionStatuses'; + +/** + * + * @export + * @interface TransactionResponse + */ +export interface TransactionResponse { + /** + * The unique id of a transaction. It will have `txn_` as prefix + * @type {string} + * @memberof TransactionResponse + */ + id: string; + /** + * The product_id of the transaction. Product id will have a different prefix for each product. You can use this id to match the transaction from this API to each product API. + * @type {string} + * @memberof TransactionResponse + */ + productId: string; + /** + * + * @type {TransactionResponseType} + * @memberof TransactionResponse + */ + type: TransactionResponseType; + /** + * + * @type {TransactionStatuses} + * @memberof TransactionResponse + */ + status: TransactionStatuses; + /** + * + * @type {ChannelsCategories} + * @memberof TransactionResponse + */ + channelCategory: ChannelsCategories; + /** + * The channel of the transaction that is used. See [channel codes](https://docs.xendit.co/xendisburse/channel-codes) for the list of available per channel categories. + * @type {string} + * @memberof TransactionResponse + */ + channelCode: string | null; + /** + * Account identifier of transaction. The format will be different from each channel. + * @type {string} + * @memberof TransactionResponse + */ + accountIdentifier: string | null; + /** + * customer supplied reference/external_id + * @type {string} + * @memberof TransactionResponse + */ + referenceId: string; + /** + * + * @type {Currency} + * @memberof TransactionResponse + */ + currency: Currency; + /** + * The transaction amount. The number of decimal places will be different for each currency according to ISO 4217. + * @type {number} + * @memberof TransactionResponse + */ + amount: number; + /** + * Representing whether the transaction is money in or money out For transfer, the transfer out side it will shows up as money out and on transfer in side in will shows up as money-in. Available values are `MONEY_IN` for money in and `MONEY_OUT` for money out. + * @type {string} + * @memberof TransactionResponse + */ + cashflow: TransactionResponseCashflowEnum; + /** + * The settlement status of the transaction. `PENDING` - Transaction amount has not been settled to merchant's balance. `SETTLED` - Transaction has been settled to merchant's balance + * @type {string} + * @memberof TransactionResponse + */ + settlementStatus?: TransactionResponseSettlementStatusEnum; + /** + * Estimated settlement time will only apply to money-in transactions. For money-out transaction, the value will be `NULL`. Estimated settlement time in which transaction amount will be settled to merchant's balance. + * @type {Date} + * @memberof TransactionResponse + */ + estimatedSettlementTime?: Date | null; + /** + * The id of business where this transaction belong to + * @type {string} + * @memberof TransactionResponse + */ + businessId: string; + /** + * + * @type {FeeResponse} + * @memberof TransactionResponse + */ + fee: FeeResponse; + /** + * Transaction created timestamp (UTC+0) + * @type {Date} + * @memberof TransactionResponse + */ + created: Date; + /** + * Transaction updated timestamp (UTC+0) + * @type {Date} + * @memberof TransactionResponse + */ + updated: Date; +} + + +/** + * @export + */ +export const TransactionResponseCashflowEnum = { + In: 'MONEY_IN', + Out: 'MONEY_OUT' +} as const; +export type TransactionResponseCashflowEnum = typeof TransactionResponseCashflowEnum[keyof typeof TransactionResponseCashflowEnum]; + +/** + * @export + */ +export const TransactionResponseSettlementStatusEnum = { + Pending: 'PENDING', + Settled: 'SETTLED' +} as const; +export type TransactionResponseSettlementStatusEnum = typeof TransactionResponseSettlementStatusEnum[keyof typeof TransactionResponseSettlementStatusEnum]; + + +/** + * Check if a given object implements the TransactionResponse interface. + */ +export function instanceOfTransactionResponse(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "id" in value; + isInstance = isInstance && "productId" in value; + isInstance = isInstance && "type" in value; + isInstance = isInstance && "status" in value; + isInstance = isInstance && "channelCategory" in value; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "accountIdentifier" in value; + isInstance = isInstance && "referenceId" in value; + isInstance = isInstance && "currency" in value; + isInstance = isInstance && "amount" in value; + isInstance = isInstance && "cashflow" in value; + isInstance = isInstance && "businessId" in value; + isInstance = isInstance && "fee" in value; + isInstance = isInstance && "created" in value; + isInstance = isInstance && "updated" in value; + + return isInstance; +} + +export function TransactionResponseFromJSON(json: any): TransactionResponse { + return TransactionResponseFromJSONTyped(json, false); +} + +export function TransactionResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): TransactionResponse { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'id': json['id'], + 'productId': json['product_id'], + 'type': TransactionResponseTypeFromJSON(json['type']), + 'status': TransactionStatusesFromJSON(json['status']), + 'channelCategory': ChannelsCategoriesFromJSON(json['channel_category']), + 'channelCode': json['channel_code'], + 'accountIdentifier': json['account_identifier'], + 'referenceId': json['reference_id'], + 'currency': CurrencyFromJSON(json['currency']), + 'amount': json['amount'], + 'cashflow': json['cashflow'], + 'settlementStatus': !exists(json, 'settlement_status') ? undefined : json['settlement_status'], + 'estimatedSettlementTime': !exists(json, 'estimated_settlement_time') ? undefined : (json['estimated_settlement_time'] === null ? null : new Date(json['estimated_settlement_time'])), + 'businessId': json['business_id'], + 'fee': FeeResponseFromJSON(json['fee']), + 'created': (new Date(json['created'])), + 'updated': (new Date(json['updated'])), + }; +} + +export function TransactionResponseToJSON(value?: TransactionResponse | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'id': value.id, + 'product_id': value.productId, + 'type': TransactionResponseTypeToJSON(value.type), + 'status': TransactionStatusesToJSON(value.status), + 'channel_category': ChannelsCategoriesToJSON(value.channelCategory), + 'channel_code': value.channelCode, + 'account_identifier': value.accountIdentifier, + 'reference_id': value.referenceId, + 'currency': CurrencyToJSON(value.currency), + 'amount': value.amount, + 'cashflow': value.cashflow, + 'settlement_status': value.settlementStatus, + 'estimated_settlement_time': value.estimatedSettlementTime === undefined ? undefined : (value.estimatedSettlementTime === null ? null : value.estimatedSettlementTime.toISOString()), + 'business_id': value.businessId, + 'fee': FeeResponseToJSON(value.fee), + 'created': (value.created.toISOString()), + 'updated': (value.updated.toISOString()), + }; +} + diff --git a/balance_and_transaction/models/TransactionResponseType.ts b/balance_and_transaction/models/TransactionResponseType.ts new file mode 100644 index 0000000..e13ee4f --- /dev/null +++ b/balance_and_transaction/models/TransactionResponseType.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { TransactionTypes } from './TransactionTypes'; +import { + TransactionTypesFromJSON, + TransactionTypesFromJSONTyped, + TransactionTypesToJSON, +} from './TransactionTypes'; + +/** + * The type of the transactions. + * @export + * @interface TransactionResponseType + */ +export interface TransactionResponseType { +} + +/** + * Check if a given object implements the TransactionResponseType interface. + */ +export function instanceOfTransactionResponseType(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function TransactionResponseTypeFromJSON(json: any): TransactionResponseType { + return TransactionResponseTypeFromJSONTyped(json, false); +} + +export function TransactionResponseTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): TransactionResponseType { + return json; +} + +export function TransactionResponseTypeToJSON(value?: TransactionResponseType | null): any { + return value; +} + diff --git a/balance_and_transaction/models/TransactionStatuses.ts b/balance_and_transaction/models/TransactionStatuses.ts new file mode 100644 index 0000000..b43dfb8 --- /dev/null +++ b/balance_and_transaction/models/TransactionStatuses.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const TransactionStatuses = { + Success: 'SUCCESS', + Pending: 'PENDING', + Failed: 'FAILED', + Reversed: 'REVERSED', + Voided: 'VOIDED' +} as const; +export type TransactionStatuses = typeof TransactionStatuses[keyof typeof TransactionStatuses]; + + +export function TransactionStatusesFromJSON(json: any): TransactionStatuses { + return TransactionStatusesFromJSONTyped(json, false); +} + +export function TransactionStatusesFromJSONTyped(json: any, ignoreDiscriminator: boolean): TransactionStatuses { + return json as TransactionStatuses; +} + +export function TransactionStatusesToJSON(value?: TransactionStatuses | null): any { + return value as any; +} + diff --git a/balance_and_transaction/models/TransactionTypes.ts b/balance_and_transaction/models/TransactionTypes.ts new file mode 100644 index 0000000..887a3ae --- /dev/null +++ b/balance_and_transaction/models/TransactionTypes.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const TransactionTypes = { + BatchDisbursement: 'BATCH_DISBURSEMENT', + Disbursement: 'DISBURSEMENT', + Payment: 'PAYMENT', + Remittance: 'REMITTANCE', + RemittancePayout: 'REMITTANCE_PAYOUT', + RemittanceCollection: 'REMITTANCE_COLLECTION', + Transfer: 'TRANSFER', + PlatformFee: 'PLATFORM_FEE', + Refund: 'REFUND', + Cashback: 'CASHBACK', + Topup: 'TOPUP', + Withdrawal: 'WITHDRAWAL', + Other: 'OTHER' +} as const; +export type TransactionTypes = typeof TransactionTypes[keyof typeof TransactionTypes]; + + +export function TransactionTypesFromJSON(json: any): TransactionTypes { + return TransactionTypesFromJSONTyped(json, false); +} + +export function TransactionTypesFromJSONTyped(json: any, ignoreDiscriminator: boolean): TransactionTypes { + return json as TransactionTypes; +} + +export function TransactionTypesToJSON(value?: TransactionTypes | null): any { + return value as any; +} + diff --git a/balance_and_transaction/models/TransactionsResponse.ts b/balance_and_transaction/models/TransactionsResponse.ts new file mode 100644 index 0000000..5b53e2e --- /dev/null +++ b/balance_and_transaction/models/TransactionsResponse.ts @@ -0,0 +1,90 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { LinkItem } from './LinkItem'; +import { + LinkItemFromJSON, + LinkItemFromJSONTyped, + LinkItemToJSON, +} from './LinkItem'; +import type { TransactionResponse } from './TransactionResponse'; +import { + TransactionResponseFromJSON, + TransactionResponseFromJSONTyped, + TransactionResponseToJSON, +} from './TransactionResponse'; + +/** + * Returns an array of Transaction Objects. Returns empty array when there is no result. + * @export + * @interface TransactionsResponse + */ +export interface TransactionsResponse { + /** + * Indicates whether there are more items to be queried with `after_id` of the last item from the current result. Use the `links` to follow to the next result. + * @type {boolean} + * @memberof TransactionsResponse + */ + hasMore: boolean; + /** + * The links to the next page based on LinkItem if there is next result. + * @type {Array} + * @memberof TransactionsResponse + */ + links?: Array; + /** + * + * @type {Array} + * @memberof TransactionsResponse + */ + data: Array; +} + +/** + * Check if a given object implements the TransactionsResponse interface. + */ +export function instanceOfTransactionsResponse(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "hasMore" in value; + isInstance = isInstance && "data" in value; + + return isInstance; +} + +export function TransactionsResponseFromJSON(json: any): TransactionsResponse { + return TransactionsResponseFromJSONTyped(json, false); +} + +export function TransactionsResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): TransactionsResponse { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'hasMore': json['has_more'], + 'links': !exists(json, 'links') ? undefined : ((json['links'] as Array).map(LinkItemFromJSON)), + 'data': ((json['data'] as Array).map(TransactionResponseFromJSON)), + }; +} + +export function TransactionsResponseToJSON(value?: TransactionsResponse | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'has_more': value.hasMore, + 'links': value.links === undefined ? undefined : ((value.links as Array).map(LinkItemToJSON)), + 'data': ((value.data as Array).map(TransactionResponseToJSON)), + }; +} + diff --git a/balance_and_transaction/models/ValidationError.ts b/balance_and_transaction/models/ValidationError.ts new file mode 100644 index 0000000..67b4e3e --- /dev/null +++ b/balance_and_transaction/models/ValidationError.ts @@ -0,0 +1,86 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface ValidationError + */ +export interface ValidationError { + /** + * + * @type {number} + * @memberof ValidationError + */ + statusCode: number; + /** + * + * @type {string} + * @memberof ValidationError + */ + error: string; + /** + * + * @type {string} + * @memberof ValidationError + */ + message: string; + /** + * + * @type {object} + * @memberof ValidationError + */ + validation?: object | null; +} + +/** + * Check if a given object implements the ValidationError interface. + */ +export function instanceOfValidationError(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "statusCode" in value; + isInstance = isInstance && "error" in value; + isInstance = isInstance && "message" in value; + + return isInstance; +} + +export function ValidationErrorFromJSON(json: any): ValidationError { + return ValidationErrorFromJSONTyped(json, false); +} + +export function ValidationErrorFromJSONTyped(json: any, ignoreDiscriminator: boolean): ValidationError { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'statusCode': json['status_code'], + 'error': json['error'], + 'message': json['message'], + 'validation': !exists(json, 'validation') ? undefined : json['validation'], + }; +} + +export function ValidationErrorToJSON(value?: ValidationError | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'status_code': value.statusCode, + 'error': value.error, + 'message': value.message, + 'validation': value.validation, + }; +} + diff --git a/balance_and_transaction/models/index.ts b/balance_and_transaction/models/index.ts new file mode 100644 index 0000000..0cda894 --- /dev/null +++ b/balance_and_transaction/models/index.ts @@ -0,0 +1,15 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './Balance'; +export * from './ChannelsCategories'; +export * from './Currency'; +export * from './DateRangeFilter'; +export * from './FeeResponse'; +export * from './LinkItem'; +export * from './ServerError'; +export * from './TransactionResponse'; +export * from './TransactionResponseType'; +export * from './TransactionStatuses'; +export * from './TransactionTypes'; +export * from './TransactionsResponse'; +export * from './ValidationError'; diff --git a/docs/Balance.md b/docs/Balance.md new file mode 100644 index 0000000..21d5ffa --- /dev/null +++ b/docs/Balance.md @@ -0,0 +1,42 @@ +## Balance +You can use the APIs below to interface with Xendit's `Balance` API. +To start using the API, you need to destruct instantiated Xendit client or directly import the module and set the secret key. + +```typescript +import { Xendit, Balance as BalanceClient } from 'xendit-node'; + +const xenditClient = new Xendit({secretKey: YOUR_SECRET_KEY}) +const { Balance } = xenditClient + +const xenditBalanceClient = new BalanceClient({secretKey: YOUR_SECRET_KEY}) + +// At this point, `Balance` and `xenditBalanceClient` will have no usage difference, for example: +// Balance. +// or +// xenditBalanceClient. +``` +## Retrieves balances for a business, default to CASH type + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getBalance` | +| Request Parameters | [GetBalanceRequest](#request-parameters--GetBalanceRequest) | +| Return Type | [Balance](balance_and_transaction/models/Balance.md) | + +### Request Parameters — `GetBalanceRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| accountType| | 'CASH' | 'HOLDING' | 'TAX' | +| currency| | string | +| forUserId| | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { Balance } from 'xendit-node/balance_and_transaction/models' + +const response: Balance = await xenditBalanceClient.getBalance({ }) +``` diff --git a/docs/Invoice.md b/docs/Invoice.md new file mode 100644 index 0000000..5b44a27 --- /dev/null +++ b/docs/Invoice.md @@ -0,0 +1,137 @@ +## Invoice +You can use the APIs below to interface with Xendit's `Invoice` API. +To start using the API, you need to destruct instantiated Xendit client or directly import the module and set the secret key. + +```typescript +import { Xendit, Invoice as InvoiceClient } from 'xendit-node'; + +const xenditClient = new Xendit({secretKey: YOUR_SECRET_KEY}) +const { Invoice } = xenditClient + +const xenditInvoiceClient = new InvoiceClient({secretKey: YOUR_SECRET_KEY}) + +// At this point, `Invoice` and `xenditInvoiceClient` will have no usage difference, for example: +// Invoice. +// or +// xenditInvoiceClient. +``` +## Create an invoice + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `createInvoice` | +| Request Parameters | [CreateInvoiceOperationRequest](#request-parameters--CreateInvoiceOperationRequest) | +| Return Type | [Invoice](invoice/models/Invoice.md) | + +### Request Parameters — `CreateInvoiceOperationRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| data| ✅ | [CreateInvoiceRequest](invoice/models/CreateInvoiceRequest.md) | + +### Usage Examples +#### Create Invoice Request + +```typescript +import { CreateInvoiceRequest, Invoice } from 'xendit-node/invoice/models' + +const data: CreateInvoiceRequest = { + "amount" : 10000, + "invoiceDuration" : 172800, + "externalId" : "test1234", + "description" : "Test Invoice", + "currency" : "IDR", + "reminderTime" : 1 +} + +const response: Invoice = await xenditInvoiceClient.createInvoice({ + data +}) +``` +## Manually expire an invoice + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `expireInvoice` | +| Request Parameters | [ExpireInvoiceRequest](#request-parameters--ExpireInvoiceRequest) | +| Return Type | [Invoice](invoice/models/Invoice.md) | + +### Request Parameters — `ExpireInvoiceRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| invoiceId| ✅ | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { Invoice } from 'xendit-node/invoice/models' + +const response: Invoice = await xenditInvoiceClient.expireInvoice({ + invoiceId: "5f4708b7bd394b0400b96276", +}) +``` +## Get invoice by invoice id + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getInvoiceById` | +| Request Parameters | [GetInvoiceByIdRequest](#request-parameters--GetInvoiceByIdRequest) | +| Return Type | [Invoice](invoice/models/Invoice.md) | + +### Request Parameters — `GetInvoiceByIdRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| invoiceId| ✅ | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { Invoice } from 'xendit-node/invoice/models' + +const response: Invoice = await xenditInvoiceClient.getInvoiceById({ + invoiceId: "62efe4c33e45294d63f585f2", +}) +``` +## Get all Invoices + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getInvoices` | +| Request Parameters | [GetInvoicesRequest](#request-parameters--GetInvoicesRequest) | +| Return Type | [[]Invoice](invoice/models/Invoice.md) | + +### Request Parameters — `GetInvoicesRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| externalId| | string | +| statuses| | [[]InvoiceStatus](invoice/models/InvoiceStatus.md) | +| limit| | number | +| createdAfter| | Date | +| createdBefore| | Date | +| paidAfter| | Date | +| paidBefore| | Date | +| expiredAfter| | Date | +| expiredBefore| | Date | +| lastInvoice| | string | +| clientTypes| | [[]InvoiceClientType](invoice/models/InvoiceClientType.md) | +| paymentChannels| | []string | +| onDemandLink| | string | +| recurringPaymentId| | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { Invoice } from 'xendit-node/invoice/models' + +const response: Invoice[] = await xenditInvoiceClient.getInvoices({ }) +``` diff --git a/docs/PaymentMethod.md b/docs/PaymentMethod.md new file mode 100644 index 0000000..c6b834f --- /dev/null +++ b/docs/PaymentMethod.md @@ -0,0 +1,262 @@ +## PaymentMethod +You can use the APIs below to interface with Xendit's `PaymentMethod` API. +To start using the API, you need to destruct instantiated Xendit client or directly import the module and set the secret key. + +```typescript +import { Xendit, PaymentMethod as PaymentMethodClient } from 'xendit-node'; + +const xenditClient = new Xendit({secretKey: YOUR_SECRET_KEY}) +const { PaymentMethod } = xenditClient + +const xenditPaymentMethodClient = new PaymentMethodClient({secretKey: YOUR_SECRET_KEY}) + +// At this point, `PaymentMethod` and `xenditPaymentMethodClient` will have no usage difference, for example: +// PaymentMethod. +// or +// xenditPaymentMethodClient. +``` +## Validate a payment method\'s linking OTP + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `authPaymentMethod` | +| Request Parameters | [AuthPaymentMethodRequest](#request-parameters--AuthPaymentMethodRequest) | +| Return Type | [PaymentMethod](payment_method/models/PaymentMethod.md) | + +### Request Parameters — `AuthPaymentMethodRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| paymentMethodId| ✅ | string | +| idempotencyKey| | string | +| data| | [PaymentMethodAuthParameters](payment_method/models/PaymentMethodAuthParameters.md) | + +### Usage Examples +#### Minimum API Usage +```typescript +import { PaymentMethod } from 'xendit-node/payment_method/models' + +const response: PaymentMethod = await xenditPaymentMethodClient.authPaymentMethod({ + paymentMethodId: "pm-1fdaf346-dd2e-4b6c-b938-124c7167a822", +}) +``` +## Creates payment method + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `createPaymentMethod` | +| Request Parameters | [CreatePaymentMethodRequest](#request-parameters--CreatePaymentMethodRequest) | +| Return Type | [PaymentMethod](payment_method/models/PaymentMethod.md) | + +### Request Parameters — `CreatePaymentMethodRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| data| | [PaymentMethodParameters](payment_method/models/PaymentMethodParameters.md) | + +### Usage Examples +#### Minimum API Usage +```typescript +import { PaymentMethod } from 'xendit-node/payment_method/models' + +const response: PaymentMethod = await xenditPaymentMethodClient.createPaymentMethod({ }) +``` +## Expires a payment method + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `expirePaymentMethod` | +| Request Parameters | [ExpirePaymentMethodRequest](#request-parameters--ExpirePaymentMethodRequest) | +| Return Type | [PaymentMethod](payment_method/models/PaymentMethod.md) | + +### Request Parameters — `ExpirePaymentMethodRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| paymentMethodId| ✅ | string | +| idempotencyKey| | string | +| data| | [PaymentMethodExpireParameters](payment_method/models/PaymentMethodExpireParameters.md) | + +### Usage Examples +#### Minimum API Usage +```typescript +import { PaymentMethod } from 'xendit-node/payment_method/models' + +const response: PaymentMethod = await xenditPaymentMethodClient.expirePaymentMethod({ + paymentMethodId: "pm-1fdaf346-dd2e-4b6c-b938-124c7167a822", +}) +``` +## Get all payment channels + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getAllPaymentChannels` | +| Request Parameters | [GetAllPaymentChannelsRequest](#request-parameters--GetAllPaymentChannelsRequest) | +| Return Type | [PaymentChannelList](payment_method/models/PaymentChannelList.md) | + +### Request Parameters — `GetAllPaymentChannelsRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| isActivated| | boolean | +| type| | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { PaymentChannelList } from 'xendit-node/payment_method/models' + +const response: PaymentChannelList = await xenditPaymentMethodClient.getAllPaymentChannels({ }) +``` +## Get all payment methods by filters + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getAllPaymentMethods` | +| Request Parameters | [GetAllPaymentMethodsRequest](#request-parameters--GetAllPaymentMethodsRequest) | +| Return Type | [PaymentMethodList](payment_method/models/PaymentMethodList.md) | + +### Request Parameters — `GetAllPaymentMethodsRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| id| | []string | +| type| | []string | +| status| | [[]PaymentMethodStatus](payment_method/models/PaymentMethodStatus.md) | +| reusability| | [PaymentMethodReusability](payment_method/models/PaymentMethodReusability.md) | +| customerId| | string | +| referenceId| | string | +| afterId| | string | +| beforeId| | string | +| limit| | number | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { PaymentMethodList } from 'xendit-node/payment_method/models' + +const response: PaymentMethodList = await xenditPaymentMethodClient.getAllPaymentMethods({ }) +``` +## Get payment method by ID + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getPaymentMethodByID` | +| Request Parameters | [GetPaymentMethodByIDRequest](#request-parameters--GetPaymentMethodByIDRequest) | +| Return Type | [PaymentMethod](payment_method/models/PaymentMethod.md) | + +### Request Parameters — `GetPaymentMethodByIDRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| paymentMethodId| ✅ | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { PaymentMethod } from 'xendit-node/payment_method/models' + +const response: PaymentMethod = await xenditPaymentMethodClient.getPaymentMethodByID({ + paymentMethodId: "pm-1fdaf346-dd2e-4b6c-b938-124c7167a822", +}) +``` +## Returns payments with matching PaymentMethodID. + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getPaymentsByPaymentMethodId` | +| Request Parameters | [GetPaymentsByPaymentMethodIdRequest](#request-parameters--GetPaymentsByPaymentMethodIdRequest) | +| Return Type | object | + +### Request Parameters — `GetPaymentsByPaymentMethodIdRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| paymentMethodId| ✅ | string | +| paymentRequestId| | []string | +| paymentMethodId2| | []string | +| referenceId| | []string | +| paymentMethodType| | [[]PaymentMethodType](payment_method/models/PaymentMethodType.md) | +| channelCode| | []string | +| status| | []string | +| currency| | []string | +| createdGte| | Date | +| createdLte| | Date | +| updatedGte| | Date | +| updatedLte| | Date | +| limit| | number | +| afterId| | string | +| beforeId| | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { } from 'xendit-node/payment_method/models' + +const response: object = await xenditPaymentMethodClient.getPaymentsByPaymentMethodId({ + paymentMethodId: "pm-1fdaf346-dd2e-4b6c-b938-124c7167a822", +}) +``` +## Patch payment methods + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `patchPaymentMethod` | +| Request Parameters | [PatchPaymentMethodRequest](#request-parameters--PatchPaymentMethodRequest) | +| Return Type | [PaymentMethod](payment_method/models/PaymentMethod.md) | + +### Request Parameters — `PatchPaymentMethodRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| paymentMethodId| ✅ | string | +| idempotencyKey| | string | +| data| | [PaymentMethodUpdateParameters](payment_method/models/PaymentMethodUpdateParameters.md) | + +### Usage Examples +#### Minimum API Usage +```typescript +import { PaymentMethod } from 'xendit-node/payment_method/models' + +const response: PaymentMethod = await xenditPaymentMethodClient.patchPaymentMethod({ + paymentMethodId: "pm-1fdaf346-dd2e-4b6c-b938-124c7167a822", +}) +``` +## Makes payment with matching PaymentMethodID. + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `simulatePayment` | +| Request Parameters | [SimulatePaymentOperationRequest](#request-parameters--SimulatePaymentOperationRequest) | +| Return Type | (void) | + +### Request Parameters — `SimulatePaymentOperationRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| paymentMethodId| ✅ | string | +| idempotencyKey| | string | +| data| | [SimulatePaymentRequest](payment_method/models/SimulatePaymentRequest.md) | + +### Usage Examples +#### Minimum API Usage +```typescript +import { } from 'xendit-node/payment_method/models' + +const response: = await xenditPaymentMethodClient.simulatePayment({ + paymentMethodId: "pm-1fdaf346-dd2e-4b6c-b938-124c7167a822", +}) +``` diff --git a/docs/PaymentRequest.md b/docs/PaymentRequest.md new file mode 100644 index 0000000..97ab37e --- /dev/null +++ b/docs/PaymentRequest.md @@ -0,0 +1,198 @@ +## PaymentRequest +You can use the APIs below to interface with Xendit's `PaymentRequest` API. +To start using the API, you need to destruct instantiated Xendit client or directly import the module and set the secret key. + +```typescript +import { Xendit, PaymentRequest as PaymentRequestClient } from 'xendit-node'; + +const xenditClient = new Xendit({secretKey: YOUR_SECRET_KEY}) +const { PaymentRequest } = xenditClient + +const xenditPaymentRequestClient = new PaymentRequestClient({secretKey: YOUR_SECRET_KEY}) + +// At this point, `PaymentRequest` and `xenditPaymentRequestClient` will have no usage difference, for example: +// PaymentRequest. +// or +// xenditPaymentRequestClient. +``` +## Payment Request Authorize + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `authorizePaymentRequest` | +| Request Parameters | [AuthorizePaymentRequestRequest](#request-parameters--AuthorizePaymentRequestRequest) | +| Return Type | [PaymentRequest](payment_request/models/PaymentRequest.md) | + +### Request Parameters — `AuthorizePaymentRequestRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| paymentRequestId| ✅ | string | +| idempotencyKey| | string | +| data| | [PaymentRequestAuthParameters](payment_request/models/PaymentRequestAuthParameters.md) | + +### Usage Examples +#### Minimum API Usage +```typescript +import { PaymentRequest } from 'xendit-node/payment_request/models' + +const response: PaymentRequest = await xenditPaymentRequestClient.authorizePaymentRequest({ + paymentRequestId: "pr-1fdaf346-dd2e-4b6c-b938-124c7167a822", +}) +``` +## Payment Request Capture + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `capturePaymentRequest` | +| Request Parameters | [CapturePaymentRequestRequest](#request-parameters--CapturePaymentRequestRequest) | +| Return Type | [Capture](payment_request/models/Capture.md) | + +### Request Parameters — `CapturePaymentRequestRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| paymentRequestId| ✅ | string | +| idempotencyKey| | string | +| data| | [CaptureParameters](payment_request/models/CaptureParameters.md) | + +### Usage Examples +#### Minimum API Usage +```typescript +import { Capture } from 'xendit-node/payment_request/models' + +const response: Capture = await xenditPaymentRequestClient.capturePaymentRequest({ + paymentRequestId: "pr-1fdaf346-dd2e-4b6c-b938-124c7167a822", +}) +``` +## Create Payment Request + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `createPaymentRequest` | +| Request Parameters | [CreatePaymentRequestRequest](#request-parameters--CreatePaymentRequestRequest) | +| Return Type | [PaymentRequest](payment_request/models/PaymentRequest.md) | + +### Request Parameters — `CreatePaymentRequestRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| idempotencyKey| | string | +| data| | [PaymentRequestParameters](payment_request/models/PaymentRequestParameters.md) | + +### Usage Examples +#### Minimum API Usage +```typescript +import { PaymentRequest } from 'xendit-node/payment_request/models' + +const response: PaymentRequest = await xenditPaymentRequestClient.createPaymentRequest({ }) +``` +## Get all payment requests by filter + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getAllPaymentRequests` | +| Request Parameters | [GetAllPaymentRequestsRequest](#request-parameters--GetAllPaymentRequestsRequest) | +| Return Type | [PaymentRequestListResponse](payment_request/models/PaymentRequestListResponse.md) | + +### Request Parameters — `GetAllPaymentRequestsRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| referenceId| | []string | +| id| | []string | +| customerId| | []string | +| limit| | number | +| beforeId| | string | +| afterId| | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { PaymentRequestListResponse } from 'xendit-node/payment_request/models' + +const response: PaymentRequestListResponse = await xenditPaymentRequestClient.getAllPaymentRequests({ }) +``` +## Get payment request by ID + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getPaymentRequestByID` | +| Request Parameters | [GetPaymentRequestByIDRequest](#request-parameters--GetPaymentRequestByIDRequest) | +| Return Type | [PaymentRequest](payment_request/models/PaymentRequest.md) | + +### Request Parameters — `GetPaymentRequestByIDRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| paymentRequestId| ✅ | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { PaymentRequest } from 'xendit-node/payment_request/models' + +const response: PaymentRequest = await xenditPaymentRequestClient.getPaymentRequestByID({ + paymentRequestId: "pr-1fdaf346-dd2e-4b6c-b938-124c7167a822", +}) +``` +## Get Payment Request Capture + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getPaymentRequestCaptures` | +| Request Parameters | [GetPaymentRequestCapturesRequest](#request-parameters--GetPaymentRequestCapturesRequest) | +| Return Type | [CaptureListResponse](payment_request/models/CaptureListResponse.md) | + +### Request Parameters — `GetPaymentRequestCapturesRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| paymentRequestId| ✅ | string | +| limit| | number | +| afterId| | string | +| beforeId| | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { CaptureListResponse } from 'xendit-node/payment_request/models' + +const response: CaptureListResponse = await xenditPaymentRequestClient.getPaymentRequestCaptures({ + paymentRequestId: "pr-1fdaf346-dd2e-4b6c-b938-124c7167a822", +}) +``` +## Payment Request Resend Auth + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `resendPaymentRequestAuth` | +| Request Parameters | [ResendPaymentRequestAuthRequest](#request-parameters--ResendPaymentRequestAuthRequest) | +| Return Type | [PaymentRequest](payment_request/models/PaymentRequest.md) | + +### Request Parameters — `ResendPaymentRequestAuthRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| paymentRequestId| ✅ | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { PaymentRequest } from 'xendit-node/payment_request/models' + +const response: PaymentRequest = await xenditPaymentRequestClient.resendPaymentRequestAuth({ + paymentRequestId: "pr-1fdaf346-dd2e-4b6c-b938-124c7167a822", +}) +``` diff --git a/docs/Payout.md b/docs/Payout.md new file mode 100644 index 0000000..6f8ff37 --- /dev/null +++ b/docs/Payout.md @@ -0,0 +1,161 @@ +## Payout +You can use the APIs below to interface with Xendit's `Payout` API. +To start using the API, you need to destruct instantiated Xendit client or directly import the module and set the secret key. + +```typescript +import { Xendit, Payout as PayoutClient } from 'xendit-node'; + +const xenditClient = new Xendit({secretKey: YOUR_SECRET_KEY}) +const { Payout } = xenditClient + +const xenditPayoutClient = new PayoutClient({secretKey: YOUR_SECRET_KEY}) + +// At this point, `Payout` and `xenditPayoutClient` will have no usage difference, for example: +// Payout. +// or +// xenditPayoutClient. +``` +## API to cancel requested payouts that have not yet been sent to partner banks and e-wallets. Cancellation is possible if the payout has not been sent out via our partner and when payout status is ACCEPTED. + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `cancelPayout` | +| Request Parameters | [CancelPayoutRequest](#request-parameters--CancelPayoutRequest) | +| Return Type | [GetPayouts200ResponseDataInner](payout/models/GetPayouts200ResponseDataInner.md) | + +### Request Parameters — `CancelPayoutRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| id| ✅ | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { GetPayouts200ResponseDataInner } from 'xendit-node/payout/models' + +const response: GetPayouts200ResponseDataInner = await xenditPayoutClient.cancelPayout({ + id: "disb-7baa7335-a0b2-4678-bb8c-318c0167f332", +}) +``` +## API to send money at scale to bank accounts & eWallets + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `createPayout` | +| Request Parameters | [CreatePayoutOperationRequest](#request-parameters--CreatePayoutOperationRequest) | +| Return Type | [GetPayouts200ResponseDataInner](payout/models/GetPayouts200ResponseDataInner.md) | + +### Request Parameters — `CreatePayoutOperationRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| idempotencyKey| ✅ | string | +| forUserId| | string | +| data| | [CreatePayoutRequest](payout/models/CreatePayoutRequest.md) | + +### Usage Examples +#### Bank or EWallet Payout + +```typescript +import { CreatePayoutRequest, GetPayouts200ResponseDataInner } from 'xendit-node/payout/models' + +const data: CreatePayoutRequest = { + "amount" : 90000, + "channelProperties" : { + "accountNumber" : "000000", + "accountHolderName" : "John Doe" + }, + "description" : "Test Bank Payout", + "currency" : "PHP", + "type" : "DIRECT_DISBURSEMENT", + "referenceId" : "DISB-001", + "channelCode" : "PH_BDO" +} + +const response: GetPayouts200ResponseDataInner = await xenditPayoutClient.createPayout({ + idempotencyKey: "DISB-1234", + data +}) +``` +## API to fetch the current status, or details of the payout + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getPayoutById` | +| Request Parameters | [GetPayoutByIdRequest](#request-parameters--GetPayoutByIdRequest) | +| Return Type | [GetPayouts200ResponseDataInner](payout/models/GetPayouts200ResponseDataInner.md) | + +### Request Parameters — `GetPayoutByIdRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| id| ✅ | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { GetPayouts200ResponseDataInner } from 'xendit-node/payout/models' + +const response: GetPayouts200ResponseDataInner = await xenditPayoutClient.getPayoutById({ + id: "disb-7baa7335-a0b2-4678-bb8c-318c0167f332", +}) +``` +## API providing the current list of banks and e-wallets we support for payouts for both regions + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getPayoutChannels` | +| Request Parameters | [GetPayoutChannelsRequest](#request-parameters--GetPayoutChannelsRequest) | +| Return Type | [[]Channel](payout/models/Channel.md) | + +### Request Parameters — `GetPayoutChannelsRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| currency| | string | +| channelCategory| | [[]ChannelCategory](payout/models/ChannelCategory.md) | +| channelCode| | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { Channel } from 'xendit-node/payout/models' + +const response: Channel[] = await xenditPayoutClient.getPayoutChannels({ }) +``` +## API to retrieve all matching payouts with reference ID + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getPayouts` | +| Request Parameters | [GetPayoutsRequest](#request-parameters--GetPayoutsRequest) | +| Return Type | [GetPayouts200Response](payout/models/GetPayouts200Response.md) | + +### Request Parameters — `GetPayoutsRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| referenceId| ✅ | string | +| limit| | number | +| afterId| | string | +| beforeId| | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { GetPayouts200Response } from 'xendit-node/payout/models' + +const response: GetPayouts200Response = await xenditPayoutClient.getPayouts({ + referenceId: "DISB-123", +}) +``` diff --git a/docs/Refund.md b/docs/Refund.md new file mode 100644 index 0000000..9cde870 --- /dev/null +++ b/docs/Refund.md @@ -0,0 +1,111 @@ +## Refund +You can use the APIs below to interface with Xendit's `Refund` API. +To start using the API, you need to destruct instantiated Xendit client or directly import the module and set the secret key. + +```typescript +import { Xendit, Refund as RefundClient } from 'xendit-node'; + +const xenditClient = new Xendit({secretKey: YOUR_SECRET_KEY}) +const { Refund } = xenditClient + +const xenditRefundClient = new RefundClient({secretKey: YOUR_SECRET_KEY}) + +// At this point, `Refund` and `xenditRefundClient` will have no usage difference, for example: +// Refund. +// or +// xenditRefundClient. +``` +## + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `cancelRefund` | +| Request Parameters | [CancelRefundRequest](#request-parameters--CancelRefundRequest) | +| Return Type | [Refund](refund/models/Refund.md) | + +### Request Parameters — `CancelRefundRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| refundID| ✅ | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { Refund } from 'xendit-node/refund/models' + +const response: Refund = await xenditRefundClient.cancelRefund({ + refundID: "rfd-1fdaf346-dd2e-4b6c-b938-124c7167a822", +}) +``` +## + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `createRefund` | +| Request Parameters | [CreateRefundRequest](#request-parameters--CreateRefundRequest) | +| Return Type | [Refund](refund/models/Refund.md) | + +### Request Parameters — `CreateRefundRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| idempotencyKey| | string | +| data| | [CreateRefund](refund/models/CreateRefund.md) | + +### Usage Examples +#### Minimum API Usage +```typescript +import { Refund } from 'xendit-node/refund/models' + +const response: Refund = await xenditRefundClient.createRefund({ }) +``` +## + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getAllRefunds` | +| Request Parameters | [GetAllRefundsRequest](#request-parameters--GetAllRefundsRequest) | +| Return Type | [RefundList](refund/models/RefundList.md) | + +### Request Parameters — `GetAllRefundsRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| + +### Usage Examples +#### Minimum API Usage +```typescript +import { RefundList } from 'xendit-node/refund/models' + +const response: RefundList = await xenditRefundClient.getAllRefunds({ }) +``` +## + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getRefund` | +| Request Parameters | [GetRefundRequest](#request-parameters--GetRefundRequest) | +| Return Type | [Refund](refund/models/Refund.md) | + +### Request Parameters — `GetRefundRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| refundID| ✅ | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { Refund } from 'xendit-node/refund/models' + +const response: Refund = await xenditRefundClient.getRefund({ + refundID: "rfd-1fdaf346-dd2e-4b6c-b938-124c7167a822", +}) +``` diff --git a/docs/Transaction.md b/docs/Transaction.md new file mode 100644 index 0000000..5d7528b --- /dev/null +++ b/docs/Transaction.md @@ -0,0 +1,79 @@ +## Transaction +You can use the APIs below to interface with Xendit's `Transaction` API. +To start using the API, you need to destruct instantiated Xendit client or directly import the module and set the secret key. + +```typescript +import { Xendit, Transaction as TransactionClient } from 'xendit-node'; + +const xenditClient = new Xendit({secretKey: YOUR_SECRET_KEY}) +const { Transaction } = xenditClient + +const xenditTransactionClient = new TransactionClient({secretKey: YOUR_SECRET_KEY}) + +// At this point, `Transaction` and `xenditTransactionClient` will have no usage difference, for example: +// Transaction. +// or +// xenditTransactionClient. +``` +## Get a list of transactions + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getAllTransactions` | +| Request Parameters | [GetAllTransactionsRequest](#request-parameters--GetAllTransactionsRequest) | +| Return Type | [TransactionsResponse](balance_and_transaction/models/TransactionsResponse.md) | + +### Request Parameters — `GetAllTransactionsRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| forUserId| | string | +| types| | [[]TransactionTypes](balance_and_transaction/models/TransactionTypes.md) | +| statuses| | [[]TransactionStatuses](balance_and_transaction/models/TransactionStatuses.md) | +| channelCategories| | [[]ChannelsCategories](balance_and_transaction/models/ChannelsCategories.md) | +| referenceId| | string | +| productId| | string | +| accountIdentifier| | string | +| amount| | number | +| currency| | [Currency](balance_and_transaction/models/Currency.md) | +| created| | [DateRangeFilter](balance_and_transaction/models/DateRangeFilter.md) | +| updated| | [DateRangeFilter](balance_and_transaction/models/DateRangeFilter.md) | +| limit| | number | +| afterId| | string | +| beforeId| | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { TransactionsResponse } from 'xendit-node/balance_and_transaction/models' + +const response: TransactionsResponse = await xenditTransactionClient.getAllTransactions({ }) +``` +## Get a transaction based on its id + + +### Function Signature +| Name | Value | +|--------------------|:-------------:| +| Function Name | `getTransactionByID` | +| Request Parameters | [GetTransactionByIDRequest](#request-parameters--GetTransactionByIDRequest) | +| Return Type | [TransactionResponse](balance_and_transaction/models/TransactionResponse.md) | + +### Request Parameters — `GetTransactionByIDRequest` +| Field Name | Required | Type | +|-----------|:----------:|:----------:| +| id| ✅ | string | +| forUserId| | string | +| idempotencyKey| | string | + +### Usage Examples +#### Minimum API Usage +```typescript +import { TransactionResponse } from 'xendit-node/balance_and_transaction/models' + +const response: TransactionResponse = await xenditTransactionClient.getTransactionByID({ + id: "id_example", +}) +``` diff --git a/docs/balance_and_transaction/models/Balance.md b/docs/balance_and_transaction/models/Balance.md new file mode 100644 index 0000000..d17fc85 --- /dev/null +++ b/docs/balance_and_transaction/models/Balance.md @@ -0,0 +1,11 @@ +# Balance + +The balance remaining in your account + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **balance** | number | ✅ | | + + diff --git a/docs/balance_and_transaction/models/ChannelsCategories.md b/docs/balance_and_transaction/models/ChannelsCategories.md new file mode 100644 index 0000000..9e5982c --- /dev/null +++ b/docs/balance_and_transaction/models/ChannelsCategories.md @@ -0,0 +1,37 @@ +# ChannelsCategories + + + + +## Enum + + + * `Bank` (value: `'BANK'`) + + * `CardlessCredit` (value: `'CARDLESS_CREDIT'`) + + * `Paylater` (value: `'PAYLATER'`) + + * `Cards` (value: `'CARDS'`) + + * `Cash` (value: `'CASH'`) + + * `DirectDebit` (value: `'DIRECT_DEBIT'`) + + * `Ewallet` (value: `'EWALLET'`) + + * `Invoice` (value: `'INVOICE'`) + + * `QrCode` (value: `'QR_CODE'`) + + * `RetailOutlet` (value: `'RETAIL_OUTLET'`) + + * `VirtualAccount` (value: `'VIRTUAL_ACCOUNT'`) + + * `Xenplatform` (value: `'XENPLATFORM'`) + + * `DirectBankTransfer` (value: `'DIRECT_BANK_TRANSFER'`) + + * `Other` (value: `'OTHER'`) + + diff --git a/docs/balance_and_transaction/models/Currency.md b/docs/balance_and_transaction/models/Currency.md new file mode 100644 index 0000000..47343a2 --- /dev/null +++ b/docs/balance_and_transaction/models/Currency.md @@ -0,0 +1,333 @@ +# Currency + + + + +## Enum + + + * `Idr` (value: `'IDR'`) + + * `Php` (value: `'PHP'`) + + * `Usd` (value: `'USD'`) + + * `Jpy` (value: `'JPY'`) + + * `Vnd` (value: `'VND'`) + + * `Sgd` (value: `'SGD'`) + + * `Aed` (value: `'AED'`) + + * `Afn` (value: `'AFN'`) + + * `All` (value: `'ALL'`) + + * `Amd` (value: `'AMD'`) + + * `Ang` (value: `'ANG'`) + + * `Aoa` (value: `'AOA'`) + + * `Ars` (value: `'ARS'`) + + * `Aud` (value: `'AUD'`) + + * `Awg` (value: `'AWG'`) + + * `Azn` (value: `'AZN'`) + + * `Bam` (value: `'BAM'`) + + * `Bbd` (value: `'BBD'`) + + * `Bdt` (value: `'BDT'`) + + * `Bgn` (value: `'BGN'`) + + * `Bhd` (value: `'BHD'`) + + * `Bif` (value: `'BIF'`) + + * `Bmd` (value: `'BMD'`) + + * `Bnd` (value: `'BND'`) + + * `Bob` (value: `'BOB'`) + + * `Brl` (value: `'BRL'`) + + * `Bsd` (value: `'BSD'`) + + * `Btn` (value: `'BTN'`) + + * `Bwp` (value: `'BWP'`) + + * `Byn` (value: `'BYN'`) + + * `Bzd` (value: `'BZD'`) + + * `Cad` (value: `'CAD'`) + + * `Cdf` (value: `'CDF'`) + + * `Chf` (value: `'CHF'`) + + * `Clp` (value: `'CLP'`) + + * `Cny` (value: `'CNY'`) + + * `Cop` (value: `'COP'`) + + * `Crc` (value: `'CRC'`) + + * `Cuc` (value: `'CUC'`) + + * `Cup` (value: `'CUP'`) + + * `Cve` (value: `'CVE'`) + + * `Czk` (value: `'CZK'`) + + * `Djf` (value: `'DJF'`) + + * `Dkk` (value: `'DKK'`) + + * `Dop` (value: `'DOP'`) + + * `Dzd` (value: `'DZD'`) + + * `Egp` (value: `'EGP'`) + + * `Ern` (value: `'ERN'`) + + * `Etb` (value: `'ETB'`) + + * `Eur` (value: `'EUR'`) + + * `Fjd` (value: `'FJD'`) + + * `Fkp` (value: `'FKP'`) + + * `Gbp` (value: `'GBP'`) + + * `Gel` (value: `'GEL'`) + + * `Ggp` (value: `'GGP'`) + + * `Ghs` (value: `'GHS'`) + + * `Gip` (value: `'GIP'`) + + * `Gmd` (value: `'GMD'`) + + * `Gnf` (value: `'GNF'`) + + * `Gtq` (value: `'GTQ'`) + + * `Gyd` (value: `'GYD'`) + + * `Hkd` (value: `'HKD'`) + + * `Hnl` (value: `'HNL'`) + + * `Hrk` (value: `'HRK'`) + + * `Htg` (value: `'HTG'`) + + * `Huf` (value: `'HUF'`) + + * `Ils` (value: `'ILS'`) + + * `Imp` (value: `'IMP'`) + + * `Inr` (value: `'INR'`) + + * `Iqd` (value: `'IQD'`) + + * `Irr` (value: `'IRR'`) + + * `Isk` (value: `'ISK'`) + + * `Jep` (value: `'JEP'`) + + * `Jmd` (value: `'JMD'`) + + * `Jod` (value: `'JOD'`) + + * `Kes` (value: `'KES'`) + + * `Kgs` (value: `'KGS'`) + + * `Khr` (value: `'KHR'`) + + * `Kmf` (value: `'KMF'`) + + * `Kpw` (value: `'KPW'`) + + * `Krw` (value: `'KRW'`) + + * `Kwd` (value: `'KWD'`) + + * `Kyd` (value: `'KYD'`) + + * `Kzt` (value: `'KZT'`) + + * `Lak` (value: `'LAK'`) + + * `Lbp` (value: `'LBP'`) + + * `Lkr` (value: `'LKR'`) + + * `Lrd` (value: `'LRD'`) + + * `Lsl` (value: `'LSL'`) + + * `Lyd` (value: `'LYD'`) + + * `Mad` (value: `'MAD'`) + + * `Mdl` (value: `'MDL'`) + + * `Mga` (value: `'MGA'`) + + * `Mkd` (value: `'MKD'`) + + * `Mmk` (value: `'MMK'`) + + * `Mnt` (value: `'MNT'`) + + * `Mop` (value: `'MOP'`) + + * `Mru` (value: `'MRU'`) + + * `Mur` (value: `'MUR'`) + + * `Mvr` (value: `'MVR'`) + + * `Mwk` (value: `'MWK'`) + + * `Mxn` (value: `'MXN'`) + + * `Myr` (value: `'MYR'`) + + * `Mzn` (value: `'MZN'`) + + * `Nad` (value: `'NAD'`) + + * `Ngn` (value: `'NGN'`) + + * `Nio` (value: `'NIO'`) + + * `Nok` (value: `'NOK'`) + + * `Npr` (value: `'NPR'`) + + * `Nzd` (value: `'NZD'`) + + * `Omr` (value: `'OMR'`) + + * `Pab` (value: `'PAB'`) + + * `Pen` (value: `'PEN'`) + + * `Pgk` (value: `'PGK'`) + + * `Pkr` (value: `'PKR'`) + + * `Pln` (value: `'PLN'`) + + * `Pyg` (value: `'PYG'`) + + * `Qar` (value: `'QAR'`) + + * `Ron` (value: `'RON'`) + + * `Rsd` (value: `'RSD'`) + + * `Rub` (value: `'RUB'`) + + * `Rwf` (value: `'RWF'`) + + * `Sar` (value: `'SAR'`) + + * `Sbd` (value: `'SBD'`) + + * `Scr` (value: `'SCR'`) + + * `Sdg` (value: `'SDG'`) + + * `Sek` (value: `'SEK'`) + + * `Shp` (value: `'SHP'`) + + * `Sll` (value: `'SLL'`) + + * `Sos` (value: `'SOS'`) + + * `Spl` (value: `'SPL'`) + + * `Srd` (value: `'SRD'`) + + * `Stn` (value: `'STN'`) + + * `Svc` (value: `'SVC'`) + + * `Syp` (value: `'SYP'`) + + * `Szl` (value: `'SZL'`) + + * `Thb` (value: `'THB'`) + + * `Tjs` (value: `'TJS'`) + + * `Tmt` (value: `'TMT'`) + + * `Tnd` (value: `'TND'`) + + * `Top` (value: `'TOP'`) + + * `Try` (value: `'TRY'`) + + * `Ttd` (value: `'TTD'`) + + * `Tvd` (value: `'TVD'`) + + * `Twd` (value: `'TWD'`) + + * `Tzs` (value: `'TZS'`) + + * `Uah` (value: `'UAH'`) + + * `Ugx` (value: `'UGX'`) + + * `Uyu` (value: `'UYU'`) + + * `Uzs` (value: `'UZS'`) + + * `Vef` (value: `'VEF'`) + + * `Vuv` (value: `'VUV'`) + + * `Wst` (value: `'WST'`) + + * `Xaf` (value: `'XAF'`) + + * `Xcd` (value: `'XCD'`) + + * `Xdr` (value: `'XDR'`) + + * `Xof` (value: `'XOF'`) + + * `Xpf` (value: `'XPF'`) + + * `Yer` (value: `'YER'`) + + * `Zar` (value: `'ZAR'`) + + * `Zmw` (value: `'ZMW'`) + + * `Zwd` (value: `'ZWD'`) + + diff --git a/docs/balance_and_transaction/models/DateRangeFilter.md b/docs/balance_and_transaction/models/DateRangeFilter.md new file mode 100644 index 0000000..d7b0a58 --- /dev/null +++ b/docs/balance_and_transaction/models/DateRangeFilter.md @@ -0,0 +1,12 @@ +# DateRangeFilter + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **gte** | Date | | Start time of transaction. If not specified will list all dates. | +**lte** | Date | | End time of transaction. If not specified will list all dates. | + + diff --git a/docs/balance_and_transaction/models/FeeResponse.md b/docs/balance_and_transaction/models/FeeResponse.md new file mode 100644 index 0000000..9144f76 --- /dev/null +++ b/docs/balance_and_transaction/models/FeeResponse.md @@ -0,0 +1,15 @@ +# FeeResponse + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **xenditFee** | number | ✅ | Amount of the Xendit fee for this transaction. | +**valueAddedTax** | number | ✅ | Amount of the VAT for this transaction. | +**xenditWithholdingTax** | number | | Amount of the Xendit Withholding Tax for this transaction if applicable. See [Tax Documentation](https://docs.xendit.co/fees-and-vat#vat) for more information. | +**thirdPartyWithholdingTax** | number | | Amount of the 3rd Party Withholding Tax for this transaction if applicable. 3rd party example: Bank | +**status** | string | | | + + diff --git a/docs/balance_and_transaction/models/LinkItem.md b/docs/balance_and_transaction/models/LinkItem.md new file mode 100644 index 0000000..a9b4971 --- /dev/null +++ b/docs/balance_and_transaction/models/LinkItem.md @@ -0,0 +1,13 @@ +# LinkItem + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **href** | string | ✅ | URI of target, this will be to the next link. | +**rel** | string | ✅ | The relationship between source and target. The value will be `next`. | +**method** | string | ✅ | The HTTP method, the value will be `GET`. | + + diff --git a/docs/balance_and_transaction/models/ServerError.md b/docs/balance_and_transaction/models/ServerError.md new file mode 100644 index 0000000..e01ad89 --- /dev/null +++ b/docs/balance_and_transaction/models/ServerError.md @@ -0,0 +1,13 @@ +# ServerError + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **statusCode** | number | ✅ | | +**error** | string | ✅ | | +**message** | string | ✅ | | + + diff --git a/docs/balance_and_transaction/models/TransactionResponse.md b/docs/balance_and_transaction/models/TransactionResponse.md new file mode 100644 index 0000000..82ec772 --- /dev/null +++ b/docs/balance_and_transaction/models/TransactionResponse.md @@ -0,0 +1,27 @@ +# TransactionResponse + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **id** | string | ✅ | The unique id of a transaction. It will have `txn_` as prefix | +**productId** | string | ✅ | The product_id of the transaction. Product id will have a different prefix for each product. You can use this id to match the transaction from this API to each product API. | +**type** | [TransactionResponseType](TransactionResponseType.md) | ✅ | | +**status** | [TransactionStatuses](TransactionStatuses.md) | ✅ | | +**channelCategory** | [ChannelsCategories](ChannelsCategories.md) | ✅ | | +**channelCode** | string | ✅ | The channel of the transaction that is used. See [channel codes](https://docs.xendit.co/xendisburse/channel-codes) for the list of available per channel categories. | +**accountIdentifier** | string | ✅ | Account identifier of transaction. The format will be different from each channel. | +**referenceId** | string | ✅ | customer supplied reference/external_id | +**currency** | [Currency](Currency.md) | ✅ | | +**amount** | number | ✅ | The transaction amount. The number of decimal places will be different for each currency according to ISO 4217. | +**cashflow** | string | ✅ | Representing whether the transaction is money in or money out For transfer, the transfer out side it will shows up as money out and on transfer in side in will shows up as money-in. Available values are `MONEY_IN` for money in and `MONEY_OUT` for money out. | +**settlementStatus** | string | | The settlement status of the transaction. `PENDING` - Transaction amount has not been settled to merchant\'s balance. `SETTLED` - Transaction has been settled to merchant\'s balance | +**estimatedSettlementTime** | Date | | Estimated settlement time will only apply to money-in transactions. For money-out transaction, the value will be `NULL`. Estimated settlement time in which transaction amount will be settled to merchant\'s balance. | +**businessId** | string | ✅ | The id of business where this transaction belong to | +**fee** | [FeeResponse](FeeResponse.md) | ✅ | | +**created** | Date | ✅ | Transaction created timestamp (UTC+0) | +**updated** | Date | ✅ | Transaction updated timestamp (UTC+0) | + + diff --git a/docs/balance_and_transaction/models/TransactionResponseType.md b/docs/balance_and_transaction/models/TransactionResponseType.md new file mode 100644 index 0000000..6b813fc --- /dev/null +++ b/docs/balance_and_transaction/models/TransactionResponseType.md @@ -0,0 +1,10 @@ +# TransactionResponseType + +The type of the transactions. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| + diff --git a/docs/balance_and_transaction/models/TransactionStatuses.md b/docs/balance_and_transaction/models/TransactionStatuses.md new file mode 100644 index 0000000..9833a71 --- /dev/null +++ b/docs/balance_and_transaction/models/TransactionStatuses.md @@ -0,0 +1,19 @@ +# TransactionStatuses + + + + +## Enum + + + * `Success` (value: `'SUCCESS'`) + + * `Pending` (value: `'PENDING'`) + + * `Failed` (value: `'FAILED'`) + + * `Reversed` (value: `'REVERSED'`) + + * `Voided` (value: `'VOIDED'`) + + diff --git a/docs/balance_and_transaction/models/TransactionTypes.md b/docs/balance_and_transaction/models/TransactionTypes.md new file mode 100644 index 0000000..65697b8 --- /dev/null +++ b/docs/balance_and_transaction/models/TransactionTypes.md @@ -0,0 +1,35 @@ +# TransactionTypes + + + + +## Enum + + + * `BatchDisbursement` (value: `'BATCH_DISBURSEMENT'`) + + * `Disbursement` (value: `'DISBURSEMENT'`) + + * `Payment` (value: `'PAYMENT'`) + + * `Remittance` (value: `'REMITTANCE'`) + + * `RemittancePayout` (value: `'REMITTANCE_PAYOUT'`) + + * `RemittanceCollection` (value: `'REMITTANCE_COLLECTION'`) + + * `Transfer` (value: `'TRANSFER'`) + + * `PlatformFee` (value: `'PLATFORM_FEE'`) + + * `Refund` (value: `'REFUND'`) + + * `Cashback` (value: `'CASHBACK'`) + + * `Topup` (value: `'TOPUP'`) + + * `Withdrawal` (value: `'WITHDRAWAL'`) + + * `Other` (value: `'OTHER'`) + + diff --git a/docs/balance_and_transaction/models/TransactionsResponse.md b/docs/balance_and_transaction/models/TransactionsResponse.md new file mode 100644 index 0000000..794a04d --- /dev/null +++ b/docs/balance_and_transaction/models/TransactionsResponse.md @@ -0,0 +1,13 @@ +# TransactionsResponse + +Returns an array of Transaction Objects. Returns empty array when there is no result. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **hasMore** | boolean | ✅ | Indicates whether there are more items to be queried with `after_id` of the last item from the current result. Use the `links` to follow to the next result. | +**links** | [[]LinkItem](LinkItem.md) | | The links to the next page based on LinkItem if there is next result. | +**data** | [[]TransactionResponse](TransactionResponse.md) | ✅ | | + + diff --git a/docs/balance_and_transaction/models/ValidationError.md b/docs/balance_and_transaction/models/ValidationError.md new file mode 100644 index 0000000..54da1ee --- /dev/null +++ b/docs/balance_and_transaction/models/ValidationError.md @@ -0,0 +1,14 @@ +# ValidationError + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **statusCode** | number | ✅ | | +**error** | string | ✅ | | +**message** | string | ✅ | | +**validation** | object | | | + + diff --git a/docs/invoice/models/AddressObject.md b/docs/invoice/models/AddressObject.md new file mode 100644 index 0000000..27de69e --- /dev/null +++ b/docs/invoice/models/AddressObject.md @@ -0,0 +1,17 @@ +# AddressObject + +An object representing an address with various properties. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **country** | string | | The country where the address is located. | +**streetLine1** | string | | The first line of the street address. | +**streetLine2** | string | | The second line of the street address. | +**city** | string | | The city or locality within the address. | +**province** | string | | The province or region within the country. | +**state** | string | | The state or administrative division within the country. | +**postalCode** | string | | The postal code or ZIP code for the address. | + + diff --git a/docs/invoice/models/AlternativeDisplayItem.md b/docs/invoice/models/AlternativeDisplayItem.md new file mode 100644 index 0000000..5a30d2e --- /dev/null +++ b/docs/invoice/models/AlternativeDisplayItem.md @@ -0,0 +1,12 @@ +# AlternativeDisplayItem + +An object representing alternative display of a VA. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **type** | string | | Represent type of alternative display. | +**value** | string | | Represent value of alternative display value. | + + diff --git a/docs/invoice/models/BadRequestError.md b/docs/invoice/models/BadRequestError.md new file mode 100644 index 0000000..34bc3f1 --- /dev/null +++ b/docs/invoice/models/BadRequestError.md @@ -0,0 +1,12 @@ +# BadRequestError + +Response definition for a 400 Bad Request error when creating an invoice. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | ✅ | The error code indicating the type of error that occurred. | +**message** | string | ✅ | A human-readable error message that provides additional information about the error. | + + diff --git a/docs/invoice/models/Bank.md b/docs/invoice/models/Bank.md new file mode 100644 index 0000000..4e90025 --- /dev/null +++ b/docs/invoice/models/Bank.md @@ -0,0 +1,17 @@ +# Bank + +An object representing bank details for invoices. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **bankCode** | [BankCode](BankCode.md) | ✅ | | +**collectionType** | string | ✅ | The collection type for the bank details. | +**bankBranch** | string | | The branch of the bank. | +**bankAccountNumber** | string | | The bank account number. | +**accountHolderName** | string | ✅ | The name of the account holder. | +**transferAmount** | number | | The transfer amount. | +**alternativeDisplays** | [[]AlternativeDisplayItem](AlternativeDisplayItem.md) | | | + + diff --git a/docs/invoice/models/BankCode.md b/docs/invoice/models/BankCode.md new file mode 100644 index 0000000..9227fba --- /dev/null +++ b/docs/invoice/models/BankCode.md @@ -0,0 +1,23 @@ +# BankCode + +Representing the available bank channels used for invoice-related transactions. + + +## Enum + + + * `Bca` (value: `'BCA'`) + + * `Bni` (value: `'BNI'`) + + * `Bri` (value: `'BRI'`) + + * `Mandiri` (value: `'MANDIRI'`) + + * `Permata` (value: `'PERMATA'`) + + * `Bsi` (value: `'BSI'`) + + * `Bjb` (value: `'BJB'`) + + diff --git a/docs/invoice/models/CreateInvoiceRequest.md b/docs/invoice/models/CreateInvoiceRequest.md new file mode 100644 index 0000000..2c2b244 --- /dev/null +++ b/docs/invoice/models/CreateInvoiceRequest.md @@ -0,0 +1,30 @@ +# CreateInvoiceRequest + +An object representing for an invoice creation request. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **externalId** | string | ✅ | The external ID of the invoice. | +**amount** | number | ✅ | The invoice amount. | +**payerEmail** | string | | The email address of the payer. | +**description** | string | | A description of the payment. | +**invoiceDuration** | string | | The duration of the invoice. | +**callbackVirtualAccountId** | string | | The ID of the callback virtual account. | +**shouldSendEmail** | boolean | | Indicates whether email notifications should be sent. | +**customer** | [CustomerObject](CustomerObject.md) | | | +**customerNotificationPreference** | [NotificationPreference](NotificationPreference.md) | | | +**successRedirectUrl** | string | | The URL to redirect to on successful payment. | +**failureRedirectUrl** | string | | The URL to redirect to on payment failure. | +**paymentMethods** | []string | | An array of available payment methods. | +**midLabel** | string | | The middle label. | +**shouldAuthenticateCreditCard** | boolean | | Indicates whether credit card authentication is required. | +**currency** | string | | The currency of the invoice. | +**reminderTime** | number | | The reminder time. | +**local** | string | | The local. | +**reminderTimeUnit** | string | | The unit of the reminder time. | +**items** | [[]InvoiceItem](InvoiceItem.md) | | An array of items included in the invoice. | +**fees** | [[]InvoiceFee](InvoiceFee.md) | | An array of fees associated with the invoice. | + + diff --git a/docs/invoice/models/CustomerObject.md b/docs/invoice/models/CustomerObject.md new file mode 100644 index 0000000..8e6d8fc --- /dev/null +++ b/docs/invoice/models/CustomerObject.md @@ -0,0 +1,18 @@ +# CustomerObject + +An object representing a customer with various properties, including addresses. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **id** | string | | The unique identifier for the customer. | +**phoneNumber** | string | | The customer\'s phone number. | +**givenNames** | string | | The customer\'s given names or first names. | +**surname** | string | | The customer\'s surname or last name. | +**email** | string | | The customer\'s email address. | +**mobileNumber** | string | | The customer\'s mobile phone number. | +**customerId** | string | | An additional identifier for the customer. | +**addresses** | [[]AddressObject](AddressObject.md) | | An array of addresses associated with the customer. | + + diff --git a/docs/invoice/models/DirectDebit.md b/docs/invoice/models/DirectDebit.md new file mode 100644 index 0000000..b1e0037 --- /dev/null +++ b/docs/invoice/models/DirectDebit.md @@ -0,0 +1,11 @@ +# DirectDebit + +An object representing direct debit details for invoices. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **directDebitType** | [DirectDebitType](DirectDebitType.md) | ✅ | | + + diff --git a/docs/invoice/models/DirectDebitType.md b/docs/invoice/models/DirectDebitType.md new file mode 100644 index 0000000..68f345b --- /dev/null +++ b/docs/invoice/models/DirectDebitType.md @@ -0,0 +1,37 @@ +# DirectDebitType + +Representing the available Direct Debit channels used for invoice-related transactions. + + +## Enum + + + * `BaBri` (value: `'BA_BRI'`) + + * `DcBri` (value: `'DC_BRI'`) + + * `DdBri` (value: `'DD_BRI'`) + + * `DdMandiri` (value: `'DD_MANDIRI'`) + + * `BaBpi` (value: `'BA_BPI'`) + + * `DcBpi` (value: `'DC_BPI'`) + + * `DdBpi` (value: `'DD_BPI'`) + + * `BaUbp` (value: `'BA_UBP'`) + + * `DcUbp` (value: `'DC_UBP'`) + + * `DdUbp` (value: `'DD_UBP'`) + + * `BcaKlikpay` (value: `'BCA_KLIKPAY'`) + + * `BaBcaKlikpay` (value: `'BA_BCA_KLIKPAY'`) + + * `DcBcaKlikpay` (value: `'DC_BCA_KLIKPAY'`) + + * `DdBcaKlikpay` (value: `'DD_BCA_KLIKPAY'`) + + diff --git a/docs/invoice/models/Ewallet.md b/docs/invoice/models/Ewallet.md new file mode 100644 index 0000000..d2aaa2f --- /dev/null +++ b/docs/invoice/models/Ewallet.md @@ -0,0 +1,11 @@ +# Ewallet + +An object representing e-wallet details for invoices. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **ewalletType** | [EwalletType](EwalletType.md) | ✅ | | + + diff --git a/docs/invoice/models/EwalletType.md b/docs/invoice/models/EwalletType.md new file mode 100644 index 0000000..e359a6b --- /dev/null +++ b/docs/invoice/models/EwalletType.md @@ -0,0 +1,23 @@ +# EwalletType + +Representing the available eWallet channels used for invoice-related transactions. + + +## Enum + + + * `Ovo` (value: `'OVO'`) + + * `Dana` (value: `'DANA'`) + + * `Linkaja` (value: `'LINKAJA'`) + + * `Paymaya` (value: `'PAYMAYA'`) + + * `Shopeepay` (value: `'SHOPEEPAY'`) + + * `Gcash` (value: `'GCASH'`) + + * `Grabpay` (value: `'GRABPAY'`) + + diff --git a/docs/invoice/models/ForbiddenError.md b/docs/invoice/models/ForbiddenError.md new file mode 100644 index 0000000..3e4f586 --- /dev/null +++ b/docs/invoice/models/ForbiddenError.md @@ -0,0 +1,12 @@ +# ForbiddenError + +An error object used to indicate a 403 Forbidden response related to invoice operations. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | ✅ | The specific error code indicating that access to the invoice operation is suspended. | +**message** | string | ✅ | A human-readable error message providing additional context about the 403 Forbidden response. | + + diff --git a/docs/invoice/models/Invoice.md b/docs/invoice/models/Invoice.md new file mode 100644 index 0000000..9da0744 --- /dev/null +++ b/docs/invoice/models/Invoice.md @@ -0,0 +1,43 @@ +# Invoice + +An object representing details for an invoice. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **id** | string | | The unique identifier for the invoice. | +**externalId** | string | ✅ | The external identifier for the invoice. | +**userId** | string | ✅ | The user ID associated with the invoice. | +**payerEmail** | string | | The email address of the payer. | +**description** | string | | A description of the invoice. | +**paymentMethod** | [InvoicePaymentMethod](InvoicePaymentMethod.md) | | | +**status** | [InvoiceStatus](InvoiceStatus.md) | ✅ | | +**merchantName** | string | ✅ | The name of the merchant. | +**merchantProfilePictureUrl** | string | ✅ | The URL of the merchant\'s profile picture. | +**locale** | string | | The locale or language used for the invoice. | +**amount** | number | ✅ | The total amount of the invoice. | +**expiryDate** | Date | ✅ | Representing a date and time in ISO 8601 format. | +**invoiceUrl** | string | ✅ | The URL to view the invoice. | +**availableBanks** | [[]Bank](Bank.md) | ✅ | An array of available banks for payment. | +**availableRetailOutlets** | [[]RetailOutlet](RetailOutlet.md) | ✅ | An array of available retail outlets for payment. | +**availableEwallets** | [[]Ewallet](Ewallet.md) | ✅ | An array of available e-wallets for payment. | +**availableQrCodes** | [[]QrCode](QrCode.md) | ✅ | An array of available QR codes for payment. | +**availableDirectDebits** | [[]DirectDebit](DirectDebit.md) | ✅ | An array of available direct debit options for payment. | +**availablePaylaters** | [[]Paylater](Paylater.md) | ✅ | An array of available pay-later options for payment. | +**shouldExcludeCreditCard** | boolean | | Indicates whether credit card payments should be excluded. | +**shouldSendEmail** | boolean | ✅ | Indicates whether email notifications should be sent. | +**created** | Date | ✅ | Representing a date and time in ISO 8601 format. | +**updated** | Date | ✅ | Representing a date and time in ISO 8601 format. | +**successRedirectUrl** | string | | The URL to redirect to on successful payment. | +**failureRedirectUrl** | string | | The URL to redirect to on payment failure. | +**shouldAuthenticateCreditCard** | boolean | | Indicates whether credit card authentication is required. | +**currency** | [InvoiceCurrency](InvoiceCurrency.md) | | | +**items** | [[]InvoiceItem](InvoiceItem.md) | | An array of items included in the invoice. | +**fixedVa** | boolean | | Indicates whether the virtual account is fixed. | +**reminderDate** | Date | | Representing a date and time in ISO 8601 format. | +**customer** | [CustomerObject](CustomerObject.md) | | | +**customerNotificationPreference** | [NotificationPreference](NotificationPreference.md) | | | +**fees** | [[]InvoiceFee](InvoiceFee.md) | | An array of fees associated with the invoice. | + + diff --git a/docs/invoice/models/InvoiceClientType.md b/docs/invoice/models/InvoiceClientType.md new file mode 100644 index 0000000..efffcf2 --- /dev/null +++ b/docs/invoice/models/InvoiceClientType.md @@ -0,0 +1,21 @@ +# InvoiceClientType + +Representing the client type or source of an invoice. + + +## Enum + + + * `Dashboard` (value: `'DASHBOARD'`) + + * `ApiGateway` (value: `'API_GATEWAY'`) + + * `Integration` (value: `'INTEGRATION'`) + + * `OnDemand` (value: `'ON_DEMAND'`) + + * `Recurring` (value: `'RECURRING'`) + + * `Mobile` (value: `'MOBILE'`) + + diff --git a/docs/invoice/models/InvoiceCurrency.md b/docs/invoice/models/InvoiceCurrency.md new file mode 100644 index 0000000..44bb938 --- /dev/null +++ b/docs/invoice/models/InvoiceCurrency.md @@ -0,0 +1,15 @@ +# InvoiceCurrency + +Representing the currency used for an invoice. + + +## Enum + + + * `Idr` (value: `'IDR'`) + + * `Usd` (value: `'USD'`) + + * `Php` (value: `'PHP'`) + + diff --git a/docs/invoice/models/InvoiceError404ResponseDefinition.md b/docs/invoice/models/InvoiceError404ResponseDefinition.md new file mode 100644 index 0000000..fab9daa --- /dev/null +++ b/docs/invoice/models/InvoiceError404ResponseDefinition.md @@ -0,0 +1,12 @@ +# InvoiceError404ResponseDefinition + +An error object used to indicate that the requested resource, in this case, an invoice, was not found. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | ✅ | The specific error code indicating that the requested invoice was not found. | +**message** | string | ✅ | A human-readable error message providing additional context about the resource not being found. | + + diff --git a/docs/invoice/models/InvoiceFee.md b/docs/invoice/models/InvoiceFee.md new file mode 100644 index 0000000..2fcacca --- /dev/null +++ b/docs/invoice/models/InvoiceFee.md @@ -0,0 +1,12 @@ +# InvoiceFee + +An object representing internal details for a fee associated with an invoice. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **type** | string | ✅ | The type of fee. | +**value** | number | ✅ | The value or amount of the fee. | + + diff --git a/docs/invoice/models/InvoiceItem.md b/docs/invoice/models/InvoiceItem.md new file mode 100644 index 0000000..5d4e8de --- /dev/null +++ b/docs/invoice/models/InvoiceItem.md @@ -0,0 +1,16 @@ +# InvoiceItem + +An object representing an item within an invoice. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **name** | string | ✅ | The name of the item. | +**price** | number | ✅ | The price of the item. | +**quantity** | number | ✅ | The quantity of the item. Must be greater than or equal to 0. | +**referenceId** | string | | The reference ID of the item. | +**url** | string | | The URL associated with the item. | +**category** | string | | The category of the item. | + + diff --git a/docs/invoice/models/InvoiceNotFoundError.md b/docs/invoice/models/InvoiceNotFoundError.md new file mode 100644 index 0000000..b625c61 --- /dev/null +++ b/docs/invoice/models/InvoiceNotFoundError.md @@ -0,0 +1,12 @@ +# InvoiceNotFoundError + +Response definition for a 404 Not Found error when creating an invoice. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | ✅ | The error code indicating the type of error that occurred. | +**message** | string | ✅ | A human-readable error message that provides additional information about the error. | + + diff --git a/docs/invoice/models/InvoicePaymentMethod.md b/docs/invoice/models/InvoicePaymentMethod.md new file mode 100644 index 0000000..ed5a15f --- /dev/null +++ b/docs/invoice/models/InvoicePaymentMethod.md @@ -0,0 +1,29 @@ +# InvoicePaymentMethod + +Representing the payment method used for an invoice. + + +## Enum + + + * `Pool` (value: `'POOL'`) + + * `CallbackVirtualAccount` (value: `'CALLBACK_VIRTUAL_ACCOUNT'`) + + * `CreditCard` (value: `'CREDIT_CARD'`) + + * `RetailOutlet` (value: `'RETAIL_OUTLET'`) + + * `QrCode` (value: `'QR_CODE'`) + + * `Qris` (value: `'QRIS'`) + + * `Ewallet` (value: `'EWALLET'`) + + * `DirectDebit` (value: `'DIRECT_DEBIT'`) + + * `BankTransfer` (value: `'BANK_TRANSFER'`) + + * `Paylater` (value: `'PAYLATER'`) + + diff --git a/docs/invoice/models/InvoiceStatus.md b/docs/invoice/models/InvoiceStatus.md new file mode 100644 index 0000000..79dd27b --- /dev/null +++ b/docs/invoice/models/InvoiceStatus.md @@ -0,0 +1,17 @@ +# InvoiceStatus + +Representing the status of an invoice. + + +## Enum + + + * `Pending` (value: `'PENDING'`) + + * `Paid` (value: `'PAID'`) + + * `Settled` (value: `'SETTLED'`) + + * `Expired` (value: `'EXPIRED'`) + + diff --git a/docs/invoice/models/NotificationChannel.md b/docs/invoice/models/NotificationChannel.md new file mode 100644 index 0000000..da61671 --- /dev/null +++ b/docs/invoice/models/NotificationChannel.md @@ -0,0 +1,17 @@ +# NotificationChannel + +Representing a notification channel for sending messages. + + +## Enum + + + * `Email` (value: `'email'`) + + * `Sms` (value: `'sms'`) + + * `Whatsapp` (value: `'whatsapp'`) + + * `Viber` (value: `'viber'`) + + diff --git a/docs/invoice/models/NotificationPreference.md b/docs/invoice/models/NotificationPreference.md new file mode 100644 index 0000000..2af4c1b --- /dev/null +++ b/docs/invoice/models/NotificationPreference.md @@ -0,0 +1,14 @@ +# NotificationPreference + +An object representing notification preferences for different invoice events. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **invoiceCreated** | [[]NotificationChannel](NotificationChannel.md) | | Notification channels for when an invoice is created. | +**invoiceReminder** | [[]NotificationChannel](NotificationChannel.md) | | Notification channels for invoice reminders. | +**invoiceExpired** | [[]NotificationChannel](NotificationChannel.md) | | Notification channels for expired invoices. | +**invoicePaid** | [[]NotificationChannel](NotificationChannel.md) | | Notification channels for when an invoice is paid. | + + diff --git a/docs/invoice/models/Paylater.md b/docs/invoice/models/Paylater.md new file mode 100644 index 0000000..b4dfa25 --- /dev/null +++ b/docs/invoice/models/Paylater.md @@ -0,0 +1,12 @@ +# Paylater + +An object representing paylater details for invoices. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **paylaterType** | [PaylaterType](PaylaterType.md) | ✅ | | +**shouldExclude** | boolean | | Indicates whether this paylater option should be excluded. | + + diff --git a/docs/invoice/models/PaylaterType.md b/docs/invoice/models/PaylaterType.md new file mode 100644 index 0000000..232b416 --- /dev/null +++ b/docs/invoice/models/PaylaterType.md @@ -0,0 +1,21 @@ +# PaylaterType + +Representing the available paylater channels used for invoice-related transactions. + + +## Enum + + + * `Kredivo` (value: `'KREDIVO'`) + + * `Akulaku` (value: `'AKULAKU'`) + + * `Uangme` (value: `'UANGME'`) + + * `Billease` (value: `'BILLEASE'`) + + * `Cashalo` (value: `'CASHALO'`) + + * `Atome` (value: `'ATOME'`) + + diff --git a/docs/invoice/models/QrCode.md b/docs/invoice/models/QrCode.md new file mode 100644 index 0000000..341db8b --- /dev/null +++ b/docs/invoice/models/QrCode.md @@ -0,0 +1,11 @@ +# QrCode + +An object representing QR code details for invoices. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **qrCodeType** | [QrCodeType](QrCodeType.md) | ✅ | | + + diff --git a/docs/invoice/models/QrCodeType.md b/docs/invoice/models/QrCodeType.md new file mode 100644 index 0000000..db69989 --- /dev/null +++ b/docs/invoice/models/QrCodeType.md @@ -0,0 +1,13 @@ +# QrCodeType + +Representing the available QR Code channels used for invoice-related transactions. + + +## Enum + + + * `Qris` (value: `'QRIS'`) + + * `Promptpay` (value: `'PROMPTPAY'`) + + diff --git a/docs/invoice/models/RetailOutlet.md b/docs/invoice/models/RetailOutlet.md new file mode 100644 index 0000000..c9b280b --- /dev/null +++ b/docs/invoice/models/RetailOutlet.md @@ -0,0 +1,14 @@ +# RetailOutlet + +An object representing retail outlet details for invoices. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **retailOutletName** | [RetailOutletName](RetailOutletName.md) | ✅ | | +**paymentCode** | string | | The payment code. | +**transferAmount** | number | | The transfer amount. | +**merchantName** | string | | The name of the merchant. | + + diff --git a/docs/invoice/models/RetailOutletName.md b/docs/invoice/models/RetailOutletName.md new file mode 100644 index 0000000..06620b3 --- /dev/null +++ b/docs/invoice/models/RetailOutletName.md @@ -0,0 +1,27 @@ +# RetailOutletName + +Representing the available retail outlet channels used for invoice-related transactions. + + +## Enum + + + * `Alfamart` (value: `'ALFAMART'`) + + * `Indomaret` (value: `'INDOMARET'`) + + * `_7Eleven` (value: `'7ELEVEN'`) + + * `Cebuana` (value: `'CEBUANA'`) + + * `DpEcpayLoan` (value: `'DP_ECPAY_LOAN'`) + + * `DpMlhuillier` (value: `'DP_MLHUILLIER'`) + + * `DpPalawan` (value: `'DP_PALAWAN'`) + + * `DpEcpaySchool` (value: `'DP_ECPAY_SCHOOL'`) + + * `Lbc` (value: `'LBC'`) + + diff --git a/docs/invoice/models/ServerError.md b/docs/invoice/models/ServerError.md new file mode 100644 index 0000000..f193310 --- /dev/null +++ b/docs/invoice/models/ServerError.md @@ -0,0 +1,12 @@ +# ServerError + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | ✅ | | +**message** | string | ✅ | | + + diff --git a/docs/invoice/models/UnauthorizedError.md b/docs/invoice/models/UnauthorizedError.md new file mode 100644 index 0000000..35d39f1 --- /dev/null +++ b/docs/invoice/models/UnauthorizedError.md @@ -0,0 +1,12 @@ +# UnauthorizedError + +An error object used to indicate unauthorized access to an invoice-related resource. + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | ✅ | The specific error code associated with the unauthorized access. | +**message** | string | ✅ | A human-readable error message providing additional context about the unauthorized access. | + + diff --git a/docs/payment_method/models/BillingInformation.md b/docs/payment_method/models/BillingInformation.md new file mode 100644 index 0000000..8231e94 --- /dev/null +++ b/docs/payment_method/models/BillingInformation.md @@ -0,0 +1,16 @@ +# BillingInformation + +Billing Information + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **country** | string | ✅ | | +**streetLine1** | string | | | +**streetLine2** | string | | | +**city** | string | | | +**provinceState** | string | | | +**postalCode** | string | | | + + diff --git a/docs/payment_method/models/Card.md b/docs/payment_method/models/Card.md new file mode 100644 index 0000000..fcf12a1 --- /dev/null +++ b/docs/payment_method/models/Card.md @@ -0,0 +1,14 @@ +# Card + +Card Payment Method Details + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **currency** | string | ✅ | | +**channelProperties** | [CardChannelProperties](CardChannelProperties.md) | ✅ | | +**cardInformation** | [TokenizedCardInformation](TokenizedCardInformation.md) | | | +**cardVerificationResults** | [CardVerificationResults](CardVerificationResults.md) | | | + + diff --git a/docs/payment_method/models/CardChannelProperties.md b/docs/payment_method/models/CardChannelProperties.md new file mode 100644 index 0000000..c94bb56 --- /dev/null +++ b/docs/payment_method/models/CardChannelProperties.md @@ -0,0 +1,14 @@ +# CardChannelProperties + +Card Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **skipThreeDSecure** | boolean | | This field value is only being used for reusability = MULTIPLE_USE. To indicate whether to perform 3DS during the linking phase. Defaults to false. | +**successReturnUrl** | string | | URL where the end-customer is redirected if the authorization is successful | +**failureReturnUrl** | string | | URL where the end-customer is redirected if the authorization failed | +**cardonfileType** | string | | Type of “credential-on-file” / “card-on-file” payment being made. Indicate that this payment uses a previously linked Payment Method for charging. | + + diff --git a/docs/payment_method/models/CardParameters.md b/docs/payment_method/models/CardParameters.md new file mode 100644 index 0000000..b0fae19 --- /dev/null +++ b/docs/payment_method/models/CardParameters.md @@ -0,0 +1,13 @@ +# CardParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **currency** | string | ✅ | | +**channelProperties** | [CardChannelProperties](CardChannelProperties.md) | | | +**cardInformation** | [CardParametersCardInformation](CardParametersCardInformation.md) | | | + + diff --git a/docs/payment_method/models/CardParametersCardInformation.md b/docs/payment_method/models/CardParametersCardInformation.md new file mode 100644 index 0000000..49f4e57 --- /dev/null +++ b/docs/payment_method/models/CardParametersCardInformation.md @@ -0,0 +1,15 @@ +# CardParametersCardInformation + +Card Information + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **cardNumber** | string | ✅ | | +**expiryMonth** | string | ✅ | Card expiry month in MM format | +**expiryYear** | string | ✅ | Card expiry month in YY format | +**cardholderName** | string | | Cardholder name | +**cvv** | string | | | + + diff --git a/docs/payment_method/models/CardVerificationResults.md b/docs/payment_method/models/CardVerificationResults.md new file mode 100644 index 0000000..628d200 --- /dev/null +++ b/docs/payment_method/models/CardVerificationResults.md @@ -0,0 +1,13 @@ +# CardVerificationResults + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **threeDSecure** | [CardVerificationResultsThreeDSecure](CardVerificationResultsThreeDSecure.md) | ✅ | | +**cvvResult** | string | | | +**addressVerificationResult** | string | | | + + diff --git a/docs/payment_method/models/CardVerificationResultsThreeDSecure.md b/docs/payment_method/models/CardVerificationResultsThreeDSecure.md new file mode 100644 index 0000000..9a0991f --- /dev/null +++ b/docs/payment_method/models/CardVerificationResultsThreeDSecure.md @@ -0,0 +1,15 @@ +# CardVerificationResultsThreeDSecure + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **threeDSecureFlow** | string | | | +**eciCode** | string | | | +**threeDSecureResult** | string | | | +**threeDSecureResultReason** | string | | | +**threeDSecureVersion** | string | | | + + diff --git a/docs/payment_method/models/ChannelAmountLimits.md b/docs/payment_method/models/ChannelAmountLimits.md new file mode 100644 index 0000000..e9fecfe --- /dev/null +++ b/docs/payment_method/models/ChannelAmountLimits.md @@ -0,0 +1,13 @@ +# ChannelAmountLimits + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **currency** | string | | Currency supported by the payment channel | +**minLimit** | number | | The minimum allowed transaction amount for the payment channel | +**maxLimit** | number | | The minimum allowed transaction amount for the payment channel | + + diff --git a/docs/payment_method/models/ChannelAmountLimitsAllOf.md b/docs/payment_method/models/ChannelAmountLimitsAllOf.md new file mode 100644 index 0000000..36fda92 --- /dev/null +++ b/docs/payment_method/models/ChannelAmountLimitsAllOf.md @@ -0,0 +1,13 @@ +# ChannelAmountLimitsAllOf + +Contains objects of the support currencies and its respective limits per transaction + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **currency** | string | | Currency supported by the payment channel | +**minLimit** | number | | The minimum allowed transaction amount for the payment channel | +**maxLimit** | number | | The minimum allowed transaction amount for the payment channel | + + diff --git a/docs/payment_method/models/ChannelProperty.md b/docs/payment_method/models/ChannelProperty.md new file mode 100644 index 0000000..f6f5f58 --- /dev/null +++ b/docs/payment_method/models/ChannelProperty.md @@ -0,0 +1,13 @@ +# ChannelProperty + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **name** | string | | The corresponding parameter name | +**type** | string | | Data type of the parameter | +**isRequired** | boolean | | Indicates whether or not the parameter is required | + + diff --git a/docs/payment_method/models/ChannelPropertyAllOf.md b/docs/payment_method/models/ChannelPropertyAllOf.md new file mode 100644 index 0000000..3b9c909 --- /dev/null +++ b/docs/payment_method/models/ChannelPropertyAllOf.md @@ -0,0 +1,13 @@ +# ChannelPropertyAllOf + +Objects that enumerate the parameters needed as `channel_properties` when creating a Payment Method + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **name** | string | | The corresponding parameter name | +**type** | string | | Data type of the parameter | +**isRequired** | boolean | | Indicates whether or not the parameter is required | + + diff --git a/docs/payment_method/models/CreatePaymentMethod409Response.md b/docs/payment_method/models/CreatePaymentMethod409Response.md new file mode 100644 index 0000000..e7fb96d --- /dev/null +++ b/docs/payment_method/models/CreatePaymentMethod409Response.md @@ -0,0 +1,12 @@ +# CreatePaymentMethod409Response + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | | | +**message** | string | | | + + diff --git a/docs/payment_method/models/CreatePaymentMethod503Response.md b/docs/payment_method/models/CreatePaymentMethod503Response.md new file mode 100644 index 0000000..0177442 --- /dev/null +++ b/docs/payment_method/models/CreatePaymentMethod503Response.md @@ -0,0 +1,12 @@ +# CreatePaymentMethod503Response + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | | | +**message** | string | | | + + diff --git a/docs/payment_method/models/DirectDebit.md b/docs/payment_method/models/DirectDebit.md new file mode 100644 index 0000000..9bd6259 --- /dev/null +++ b/docs/payment_method/models/DirectDebit.md @@ -0,0 +1,15 @@ +# DirectDebit + +Direct Debit Payment Method Details + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **channelCode** | [DirectDebitChannelCode](DirectDebitChannelCode.md) | ✅ | | +**channelProperties** | [DirectDebitChannelProperties](DirectDebitChannelProperties.md) | ✅ | | +**type** | [DirectDebitType](DirectDebitType.md) | ✅ | | +**bankAccount** | [DirectDebitBankAccount](DirectDebitBankAccount.md) | | | +**debitCard** | [DirectDebitDebitCard](DirectDebitDebitCard.md) | | | + + diff --git a/docs/payment_method/models/DirectDebitAllOf.md b/docs/payment_method/models/DirectDebitAllOf.md new file mode 100644 index 0000000..fba15f0 --- /dev/null +++ b/docs/payment_method/models/DirectDebitAllOf.md @@ -0,0 +1,13 @@ +# DirectDebitAllOf + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **type** | [DirectDebitType](DirectDebitType.md) | ✅ | | +**bankAccount** | [DirectDebitBankAccount](DirectDebitBankAccount.md) | | | +**debitCard** | [DirectDebitDebitCard](DirectDebitDebitCard.md) | | | + + diff --git a/docs/payment_method/models/DirectDebitBankAccount.md b/docs/payment_method/models/DirectDebitBankAccount.md new file mode 100644 index 0000000..7556843 --- /dev/null +++ b/docs/payment_method/models/DirectDebitBankAccount.md @@ -0,0 +1,14 @@ +# DirectDebitBankAccount + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **maskedBankAccountNumber** | string | | | +**bankAccountHash** | string | | | +**mobileNumber** | string | | Mobile number of the customer registered to the partner channel | +**identityDocumentNumber** | string | | Identity number of the customer registered to the partner channel | + + diff --git a/docs/payment_method/models/DirectDebitChannelCode.md b/docs/payment_method/models/DirectDebitChannelCode.md new file mode 100644 index 0000000..e7a3c72 --- /dev/null +++ b/docs/payment_method/models/DirectDebitChannelCode.md @@ -0,0 +1,135 @@ +# DirectDebitChannelCode + +Direct Debit Channel Code + + +## Enum + + + * `BcaKlikpay` (value: `'BCA_KLIKPAY'`) + + * `BcaOneklik` (value: `'BCA_ONEKLIK'`) + + * `Bdo` (value: `'BDO'`) + + * `Bpi` (value: `'BPI'`) + + * `Bri` (value: `'BRI'`) + + * `Bni` (value: `'BNI'`) + + * `Chinabank` (value: `'CHINABANK'`) + + * `Cimbniaga` (value: `'CIMBNIAGA'`) + + * `Mtb` (value: `'MTB'`) + + * `Rcbc` (value: `'RCBC'`) + + * `Ubp` (value: `'UBP'`) + + * `Mandiri` (value: `'MANDIRI'`) + + * `Bbl` (value: `'BBL'`) + + * `Scb` (value: `'SCB'`) + + * `Ktb` (value: `'KTB'`) + + * `Bay` (value: `'BAY'`) + + * `KbankMb` (value: `'KBANK_MB'`) + + * `BayMb` (value: `'BAY_MB'`) + + * `KtbMb` (value: `'KTB_MB'`) + + * `BblMb` (value: `'BBL_MB'`) + + * `ScbMb` (value: `'SCB_MB'`) + + * `BdoEpay` (value: `'BDO_EPAY'`) + + * `AutodebitUbp` (value: `'AUTODEBIT_UBP'`) + + * `AffinFpx` (value: `'AFFIN_FPX'`) + + * `AgroFpx` (value: `'AGRO_FPX'`) + + * `AllianceFpx` (value: `'ALLIANCE_FPX'`) + + * `AmbankFpx` (value: `'AMBANK_FPX'`) + + * `IslamFpx` (value: `'ISLAM_FPX'`) + + * `MuamalatFpx` (value: `'MUAMALAT_FPX'`) + + * `BocFpx` (value: `'BOC_FPX'`) + + * `RakyatFpx` (value: `'RAKYAT_FPX'`) + + * `BsnFpx` (value: `'BSN_FPX'`) + + * `CimbFpx` (value: `'CIMB_FPX'`) + + * `HlbFpx` (value: `'HLB_FPX'`) + + * `HsbcFpx` (value: `'HSBC_FPX'`) + + * `KfhFpx` (value: `'KFH_FPX'`) + + * `Mayb2EFpx` (value: `'MAYB2E_FPX'`) + + * `Mayb2UFpx` (value: `'MAYB2U_FPX'`) + + * `OcbcFpx` (value: `'OCBC_FPX'`) + + * `PublicFpx` (value: `'PUBLIC_FPX'`) + + * `RhbFpx` (value: `'RHB_FPX'`) + + * `SchFpx` (value: `'SCH_FPX'`) + + * `UobFpx` (value: `'UOB_FPX'`) + + * `AffinFpxBusiness` (value: `'AFFIN_FPX_BUSINESS'`) + + * `AgroFpxBusiness` (value: `'AGRO_FPX_BUSINESS'`) + + * `AllianceFpxBusiness` (value: `'ALLIANCE_FPX_BUSINESS'`) + + * `AmbankFpxBusiness` (value: `'AMBANK_FPX_BUSINESS'`) + + * `IslamFpxBusiness` (value: `'ISLAM_FPX_BUSINESS'`) + + * `MuamalatFpxBusiness` (value: `'MUAMALAT_FPX_BUSINESS'`) + + * `BnpFpxBusiness` (value: `'BNP_FPX_BUSINESS'`) + + * `CimbFpxBusiness` (value: `'CIMB_FPX_BUSINESS'`) + + * `CitibankFpxBusiness` (value: `'CITIBANK_FPX_BUSINESS'`) + + * `DeutscheFpxBusiness` (value: `'DEUTSCHE_FPX_BUSINESS'`) + + * `HlbFpxBusiness` (value: `'HLB_FPX_BUSINESS'`) + + * `HsbcFpxBusiness` (value: `'HSBC_FPX_BUSINESS'`) + + * `RakyatFpxBusiness` (value: `'RAKYAT_FPX_BUSINESS'`) + + * `KfhFpxBusiness` (value: `'KFH_FPX_BUSINESS'`) + + * `Mayb2EFpxBusiness` (value: `'MAYB2E_FPX_BUSINESS'`) + + * `OcbcFpxBusiness` (value: `'OCBC_FPX_BUSINESS'`) + + * `PublicFpxBusiness` (value: `'PUBLIC_FPX_BUSINESS'`) + + * `RhbFpxBusiness` (value: `'RHB_FPX_BUSINESS'`) + + * `SchFpxBusiness` (value: `'SCH_FPX_BUSINESS'`) + + * `UobFpxBusiness` (value: `'UOB_FPX_BUSINESS'`) + + diff --git a/docs/payment_method/models/DirectDebitChannelProperties.md b/docs/payment_method/models/DirectDebitChannelProperties.md new file mode 100644 index 0000000..3dfd9bc --- /dev/null +++ b/docs/payment_method/models/DirectDebitChannelProperties.md @@ -0,0 +1,18 @@ +# DirectDebitChannelProperties + +Direct Debit Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **successReturnUrl** | string | | | +**failureReturnUrl** | string | | | +**mobileNumber** | string | | Mobile number of the customer registered to the partner channel | +**cardLastFour** | string | | Last four digits of the debit card | +**cardExpiry** | string | | Expiry month and year of the debit card (in MM/YY format) | +**email** | string | | Email address of the customer that is registered to the partner channel | +**identityDocumentNumber** | string | | Identity number of the customer registered to the partner channel | +**requireAuth** | boolean | | | + + diff --git a/docs/payment_method/models/DirectDebitDebitCard.md b/docs/payment_method/models/DirectDebitDebitCard.md new file mode 100644 index 0000000..32de6c5 --- /dev/null +++ b/docs/payment_method/models/DirectDebitDebitCard.md @@ -0,0 +1,14 @@ +# DirectDebitDebitCard + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **mobileNumber** | string | | Mobile number of the customer registered to the partner channel | +**cardLastFour** | string | | Last four digits of the debit card | +**cardExpiry** | string | | Expiry month and year of the debit card (in MM/YY format) | +**email** | string | | Email address of the customer that is registered to the partner channel | + + diff --git a/docs/payment_method/models/DirectDebitParameters.md b/docs/payment_method/models/DirectDebitParameters.md new file mode 100644 index 0000000..d56f932 --- /dev/null +++ b/docs/payment_method/models/DirectDebitParameters.md @@ -0,0 +1,12 @@ +# DirectDebitParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **channelCode** | [DirectDebitChannelCode](DirectDebitChannelCode.md) | ✅ | | +**channelProperties** | [DirectDebitChannelProperties](DirectDebitChannelProperties.md) | ✅ | | + + diff --git a/docs/payment_method/models/DirectDebitType.md b/docs/payment_method/models/DirectDebitType.md new file mode 100644 index 0000000..219cdf3 --- /dev/null +++ b/docs/payment_method/models/DirectDebitType.md @@ -0,0 +1,15 @@ +# DirectDebitType + + + + +## Enum + + + * `DebitCard` (value: `'DEBIT_CARD'`) + + * `BankAccount` (value: `'BANK_ACCOUNT'`) + + * `BankRedirect` (value: `'BANK_REDIRECT'`) + + diff --git a/docs/payment_method/models/EWallet.md b/docs/payment_method/models/EWallet.md new file mode 100644 index 0000000..68af43e --- /dev/null +++ b/docs/payment_method/models/EWallet.md @@ -0,0 +1,13 @@ +# EWallet + +Ewallet Payment Method Details + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **channelCode** | [EWalletChannelCode](EWalletChannelCode.md) | ✅ | | +**channelProperties** | [EWalletChannelProperties](EWalletChannelProperties.md) | | | +**account** | [EWalletAccount](EWalletAccount.md) | | | + + diff --git a/docs/payment_method/models/EWalletAccount.md b/docs/payment_method/models/EWalletAccount.md new file mode 100644 index 0000000..ea51026 --- /dev/null +++ b/docs/payment_method/models/EWalletAccount.md @@ -0,0 +1,14 @@ +# EWalletAccount + +EWallet Account Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **name** | string | | Name of the eWallet account holder. The value is null if unavailableName of the eWallet account holder. The value is null if unavailable | +**accountDetails** | string | | Identifier from eWallet provider e.g. phone number. The value is null if unavailable | +**balance** | number | | The main balance amount on eWallet account provided from eWallet provider. The value is null if unavailable | +**pointBalance** | number | | The point balance amount on eWallet account. Applicable only on some eWallet provider that has point system. The value is null if unavailabl | + + diff --git a/docs/payment_method/models/EWalletChannelCode.md b/docs/payment_method/models/EWalletChannelCode.md new file mode 100644 index 0000000..ad5a207 --- /dev/null +++ b/docs/payment_method/models/EWalletChannelCode.md @@ -0,0 +1,49 @@ +# EWalletChannelCode + +EWallet Channel Code + + +## Enum + + + * `Gcash` (value: `'GCASH'`) + + * `Grabpay` (value: `'GRABPAY'`) + + * `Paymaya` (value: `'PAYMAYA'`) + + * `Ovo` (value: `'OVO'`) + + * `Dana` (value: `'DANA'`) + + * `Linkaja` (value: `'LINKAJA'`) + + * `Shopeepay` (value: `'SHOPEEPAY'`) + + * `Sakuku` (value: `'SAKUKU'`) + + * `Nexcash` (value: `'NEXCASH'`) + + * `Astrapay` (value: `'ASTRAPAY'`) + + * `Jeniuspay` (value: `'JENIUSPAY'`) + + * `Appota` (value: `'APPOTA'`) + + * `Momo` (value: `'MOMO'`) + + * `Vnptwallet` (value: `'VNPTWALLET'`) + + * `Viettelpay` (value: `'VIETTELPAY'`) + + * `Zalopay` (value: `'ZALOPAY'`) + + * `Wechatpay` (value: `'WECHATPAY'`) + + * `Linepay` (value: `'LINEPAY'`) + + * `Truemoney` (value: `'TRUEMONEY'`) + + * `Alipay` (value: `'ALIPAY'`) + + diff --git a/docs/payment_method/models/EWalletChannelProperties.md b/docs/payment_method/models/EWalletChannelProperties.md new file mode 100644 index 0000000..8ff6e2b --- /dev/null +++ b/docs/payment_method/models/EWalletChannelProperties.md @@ -0,0 +1,16 @@ +# EWalletChannelProperties + +EWallet Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **successReturnUrl** | string | | URL where the end-customer is redirected if the authorization is successful | +**failureReturnUrl** | string | | URL where the end-customer is redirected if the authorization failed | +**cancelReturnUrl** | string | | URL where the end-customer is redirected if the authorization cancelled | +**mobileNumber** | string | | Mobile number of customer in E.164 format (e.g. +628123123123). For OVO one time payment use only. | +**redeemPoints** | string | | REDEEM_NONE will not use any point, REDEEM_ALL will use all available points before cash balance is used. For OVO and ShopeePay tokenized payment use only. | +**cashtag** | string | | Available for JENIUSPAY only | + + diff --git a/docs/payment_method/models/EWalletParameters.md b/docs/payment_method/models/EWalletParameters.md new file mode 100644 index 0000000..57cfaa2 --- /dev/null +++ b/docs/payment_method/models/EWalletParameters.md @@ -0,0 +1,13 @@ +# EWalletParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **channelCode** | [EWalletChannelCode](EWalletChannelCode.md) | ✅ | | +**channelProperties** | [EWalletChannelProperties](EWalletChannelProperties.md) | | | +**account** | [EWalletAccount](EWalletAccount.md) | | | + + diff --git a/docs/payment_method/models/GetAllPaymentMethods400Response.md b/docs/payment_method/models/GetAllPaymentMethods400Response.md new file mode 100644 index 0000000..48ca994 --- /dev/null +++ b/docs/payment_method/models/GetAllPaymentMethods400Response.md @@ -0,0 +1,12 @@ +# GetAllPaymentMethods400Response + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | | | +**message** | string | | | + + diff --git a/docs/payment_method/models/GetAllPaymentMethods403Response.md b/docs/payment_method/models/GetAllPaymentMethods403Response.md new file mode 100644 index 0000000..2ff3a3e --- /dev/null +++ b/docs/payment_method/models/GetAllPaymentMethods403Response.md @@ -0,0 +1,12 @@ +# GetAllPaymentMethods403Response + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | | | +**message** | string | | | + + diff --git a/docs/payment_method/models/GetAllPaymentMethods404Response.md b/docs/payment_method/models/GetAllPaymentMethods404Response.md new file mode 100644 index 0000000..6bb382e --- /dev/null +++ b/docs/payment_method/models/GetAllPaymentMethods404Response.md @@ -0,0 +1,12 @@ +# GetAllPaymentMethods404Response + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | | | +**message** | string | | | + + diff --git a/docs/payment_method/models/GetAllPaymentMethodsDefaultResponse.md b/docs/payment_method/models/GetAllPaymentMethodsDefaultResponse.md new file mode 100644 index 0000000..11653bc --- /dev/null +++ b/docs/payment_method/models/GetAllPaymentMethodsDefaultResponse.md @@ -0,0 +1,12 @@ +# GetAllPaymentMethodsDefaultResponse + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | | | +**message** | string | | | + + diff --git a/docs/payment_method/models/OverTheCounter.md b/docs/payment_method/models/OverTheCounter.md new file mode 100644 index 0000000..3f6f660 --- /dev/null +++ b/docs/payment_method/models/OverTheCounter.md @@ -0,0 +1,14 @@ +# OverTheCounter + +Over The Counter Payment Method Details + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **amount** | number | | | +**currency** | string | | | +**channelCode** | [OverTheCounterChannelCode](OverTheCounterChannelCode.md) | ✅ | | +**channelProperties** | [OverTheCounterChannelProperties](OverTheCounterChannelProperties.md) | ✅ | | + + diff --git a/docs/payment_method/models/OverTheCounterChannelCode.md b/docs/payment_method/models/OverTheCounterChannelCode.md new file mode 100644 index 0000000..73e48f2 --- /dev/null +++ b/docs/payment_method/models/OverTheCounterChannelCode.md @@ -0,0 +1,41 @@ +# OverTheCounterChannelCode + +Over The Counter Channel Code + + +## Enum + + + * `_7Eleven` (value: `'7ELEVEN'`) + + * `_7ElevenCliqq` (value: `'7ELEVEN_CLIQQ'`) + + * `Cebuana` (value: `'CEBUANA'`) + + * `Ecpay` (value: `'ECPAY'`) + + * `Palawan` (value: `'PALAWAN'`) + + * `Mlhuillier` (value: `'MLHUILLIER'`) + + * `EcpayDragonloan` (value: `'ECPAY_DRAGONLOAN'`) + + * `Lbc` (value: `'LBC'`) + + * `EcpaySchool` (value: `'ECPAY_SCHOOL'`) + + * `RdPawnshop` (value: `'RD_PAWNSHOP'`) + + * `Cvm` (value: `'CVM'`) + + * `Ussc` (value: `'USSC'`) + + * `SmBills` (value: `'SM_BILLS'`) + + * `RobinsonsBills` (value: `'ROBINSONS_BILLS'`) + + * `Alfamart` (value: `'ALFAMART'`) + + * `Indomaret` (value: `'INDOMARET'`) + + diff --git a/docs/payment_method/models/OverTheCounterChannelProperties.md b/docs/payment_method/models/OverTheCounterChannelProperties.md new file mode 100644 index 0000000..ca508b2 --- /dev/null +++ b/docs/payment_method/models/OverTheCounterChannelProperties.md @@ -0,0 +1,13 @@ +# OverTheCounterChannelProperties + +Over The Counter Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **paymentCode** | string | | The payment code that you want to assign, e.g 12345. If you do not send one, one will be picked at random. | +**customerName** | string | ✅ | Name of customer. | +**expiresAt** | Date | | The time when the payment code will be expired. The minimum is 2 hours and the maximum is 9 days for 7ELEVEN. Default expired date will be 2 days from payment code generated. | + + diff --git a/docs/payment_method/models/OverTheCounterChannelPropertiesUpdate.md b/docs/payment_method/models/OverTheCounterChannelPropertiesUpdate.md new file mode 100644 index 0000000..1e37a9c --- /dev/null +++ b/docs/payment_method/models/OverTheCounterChannelPropertiesUpdate.md @@ -0,0 +1,12 @@ +# OverTheCounterChannelPropertiesUpdate + +Over The Counter Channel properties that can be updated + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **customerName** | string | | Name of customer. | +**expiresAt** | Date | | The time when the payment code will be expired. The minimum is 2 hours and the maximum is 9 days for 7ELEVEN. Default expired date will be 2 days from payment code generated. | + + diff --git a/docs/payment_method/models/OverTheCounterParameters.md b/docs/payment_method/models/OverTheCounterParameters.md new file mode 100644 index 0000000..8412c95 --- /dev/null +++ b/docs/payment_method/models/OverTheCounterParameters.md @@ -0,0 +1,14 @@ +# OverTheCounterParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **amount** | number | | | +**currency** | string | | | +**channelCode** | [OverTheCounterChannelCode](OverTheCounterChannelCode.md) | ✅ | | +**channelProperties** | [OverTheCounterChannelProperties](OverTheCounterChannelProperties.md) | ✅ | | + + diff --git a/docs/payment_method/models/OverTheCounterUpdateParameters.md b/docs/payment_method/models/OverTheCounterUpdateParameters.md new file mode 100644 index 0000000..7f48b9b --- /dev/null +++ b/docs/payment_method/models/OverTheCounterUpdateParameters.md @@ -0,0 +1,12 @@ +# OverTheCounterUpdateParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **amount** | number | | | +**channelProperties** | [OverTheCounterChannelPropertiesUpdate](OverTheCounterChannelPropertiesUpdate.md) | | | + + diff --git a/docs/payment_method/models/PaymentChannel.md b/docs/payment_method/models/PaymentChannel.md new file mode 100644 index 0000000..ae9e0e4 --- /dev/null +++ b/docs/payment_method/models/PaymentChannel.md @@ -0,0 +1,17 @@ +# PaymentChannel + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **channelCode** | string | | The specific Xendit code used to identify the partner channel | +**type** | string | | The payment method type | +**country** | string | | The country where the channel operates in ISO 3166-2 country code | +**channelName** | string | | Official parter name of the payment channel | +**channelProperties** | [[]ChannelProperty](ChannelProperty.md) | | | +**logoUrl** | string | | If available, this contains a URL to the logo of the partner channel | +**amountLimits** | [[]ChannelAmountLimits](ChannelAmountLimits.md) | | | + + diff --git a/docs/payment_method/models/PaymentChannelAllOf.md b/docs/payment_method/models/PaymentChannelAllOf.md new file mode 100644 index 0000000..7abc604 --- /dev/null +++ b/docs/payment_method/models/PaymentChannelAllOf.md @@ -0,0 +1,17 @@ +# PaymentChannelAllOf + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **channelCode** | string | | The specific Xendit code used to identify the partner channel | +**type** | string | | The payment method type | +**country** | string | | The country where the channel operates in ISO 3166-2 country code | +**channelName** | string | | Official parter name of the payment channel | +**channelProperties** | [[]ChannelProperty](ChannelProperty.md) | | | +**logoUrl** | string | | If available, this contains a URL to the logo of the partner channel | +**amountLimits** | [[]ChannelAmountLimits](ChannelAmountLimits.md) | | | + + diff --git a/docs/payment_method/models/PaymentChannelList.md b/docs/payment_method/models/PaymentChannelList.md new file mode 100644 index 0000000..fb5c3df --- /dev/null +++ b/docs/payment_method/models/PaymentChannelList.md @@ -0,0 +1,13 @@ +# PaymentChannelList + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **data** | [[]PaymentChannel](PaymentChannel.md) | | Array of resources that match the provided filters | +**links** | [[]PaymentChannelListLinksInner](PaymentChannelListLinksInner.md) | | Array of objects that can be used to assist on navigating through the data | +**hasMore** | boolean | | Indicates whether there are more items in the list | + + diff --git a/docs/payment_method/models/PaymentChannelListLinksInner.md b/docs/payment_method/models/PaymentChannelListLinksInner.md new file mode 100644 index 0000000..7a3644b --- /dev/null +++ b/docs/payment_method/models/PaymentChannelListLinksInner.md @@ -0,0 +1,13 @@ +# PaymentChannelListLinksInner + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **href** | string | | Target URI that should contain a target to Internationalized Resource Identifiers (IRI) | +**rel** | string | | The link relation type described how the current context (source) is related to target resource | +**method** | string | | The HTTP method to be used to call `href` | + + diff --git a/docs/payment_method/models/PaymentChannelListLinksInnerAllOf.md b/docs/payment_method/models/PaymentChannelListLinksInnerAllOf.md new file mode 100644 index 0000000..f496404 --- /dev/null +++ b/docs/payment_method/models/PaymentChannelListLinksInnerAllOf.md @@ -0,0 +1,13 @@ +# PaymentChannelListLinksInnerAllOf + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **href** | string | | Target URI that should contain a target to Internationalized Resource Identifiers (IRI) | +**rel** | string | | The link relation type described how the current context (source) is related to target resource | +**method** | string | | The HTTP method to be used to call `href` | + + diff --git a/docs/payment_method/models/PaymentMethod.md b/docs/payment_method/models/PaymentMethod.md new file mode 100644 index 0000000..1dbd35b --- /dev/null +++ b/docs/payment_method/models/PaymentMethod.md @@ -0,0 +1,32 @@ +# PaymentMethod + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **id** | string | ✅ | | +**businessId** | string | | | +**type** | [PaymentMethodType](PaymentMethodType.md) | | | +**country** | [PaymentMethodCountry](PaymentMethodCountry.md) | | | +**customerId** | string | | | +**customer** | object | | | +**referenceId** | string | | | +**description** | string | | | +**status** | [PaymentMethodStatus](PaymentMethodStatus.md) | | | +**reusability** | [PaymentMethodReusability](PaymentMethodReusability.md) | | | +**actions** | [[]PaymentMethodAction](PaymentMethodAction.md) | | | +**metadata** | object | | | +**billingInformation** | [BillingInformation](BillingInformation.md) | | | +**failureCode** | string | | | +**created** | Date | | | +**updated** | Date | | | +**ewallet** | [EWallet](EWallet.md) | | | +**directDebit** | [DirectDebit](DirectDebit.md) | | | +**overTheCounter** | [OverTheCounter](OverTheCounter.md) | | | +**card** | [Card](Card.md) | | | +**qrCode** | [QRCode](QRCode.md) | | | +**virtualAccount** | [VirtualAccount](VirtualAccount.md) | | | + + diff --git a/docs/payment_method/models/PaymentMethodAction.md b/docs/payment_method/models/PaymentMethodAction.md new file mode 100644 index 0000000..8499794 --- /dev/null +++ b/docs/payment_method/models/PaymentMethodAction.md @@ -0,0 +1,14 @@ +# PaymentMethodAction + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **action** | string | | | +**method** | string | | | +**url** | string | | | +**urlType** | string | | | + + diff --git a/docs/payment_method/models/PaymentMethodAuthParameters.md b/docs/payment_method/models/PaymentMethodAuthParameters.md new file mode 100644 index 0000000..4611167 --- /dev/null +++ b/docs/payment_method/models/PaymentMethodAuthParameters.md @@ -0,0 +1,11 @@ +# PaymentMethodAuthParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **authCode** | string | ✅ | | + + diff --git a/docs/payment_method/models/PaymentMethodCountry.md b/docs/payment_method/models/PaymentMethodCountry.md new file mode 100644 index 0000000..3a1eca0 --- /dev/null +++ b/docs/payment_method/models/PaymentMethodCountry.md @@ -0,0 +1,19 @@ +# PaymentMethodCountry + + + + +## Enum + + + * `Ph` (value: `'PH'`) + + * `Id` (value: `'ID'`) + + * `Vn` (value: `'VN'`) + + * `Th` (value: `'TH'`) + + * `My` (value: `'MY'`) + + diff --git a/docs/payment_method/models/PaymentMethodExpireParameters.md b/docs/payment_method/models/PaymentMethodExpireParameters.md new file mode 100644 index 0000000..41b1f50 --- /dev/null +++ b/docs/payment_method/models/PaymentMethodExpireParameters.md @@ -0,0 +1,12 @@ +# PaymentMethodExpireParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **successReturnUrl** | string | | URL where the end customer is redirected if the unlinking authorization is successful. | +**failureReturnUrl** | string | | URL where the end customer is redirected if the unlinking authorization is failed. | + + diff --git a/docs/payment_method/models/PaymentMethodList.md b/docs/payment_method/models/PaymentMethodList.md new file mode 100644 index 0000000..dda3f94 --- /dev/null +++ b/docs/payment_method/models/PaymentMethodList.md @@ -0,0 +1,12 @@ +# PaymentMethodList + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **data** | [[]PaymentMethod](PaymentMethod.md) | ✅ | | +**hasMore** | boolean | | | + + diff --git a/docs/payment_method/models/PaymentMethodParameters.md b/docs/payment_method/models/PaymentMethodParameters.md new file mode 100644 index 0000000..217b628 --- /dev/null +++ b/docs/payment_method/models/PaymentMethodParameters.md @@ -0,0 +1,24 @@ +# PaymentMethodParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **type** | [PaymentMethodType](PaymentMethodType.md) | ✅ | | +**country** | string | | | +**reusability** | [PaymentMethodReusability](PaymentMethodReusability.md) | ✅ | | +**customerId** | string | | | +**referenceId** | string | | | +**description** | string | | | +**card** | [CardParameters](CardParameters.md) | | | +**directDebit** | [DirectDebitParameters](DirectDebitParameters.md) | | | +**ewallet** | [EWalletParameters](EWalletParameters.md) | | | +**overTheCounter** | [OverTheCounterParameters](OverTheCounterParameters.md) | | | +**virtualAccount** | [VirtualAccountParameters](VirtualAccountParameters.md) | | | +**qrCode** | [QRCodeParameters](QRCodeParameters.md) | | | +**metadata** | object | | | +**billingInformation** | [BillingInformation](BillingInformation.md) | | | + + diff --git a/docs/payment_method/models/PaymentMethodReusability.md b/docs/payment_method/models/PaymentMethodReusability.md new file mode 100644 index 0000000..86fa5b1 --- /dev/null +++ b/docs/payment_method/models/PaymentMethodReusability.md @@ -0,0 +1,13 @@ +# PaymentMethodReusability + + + + +## Enum + + + * `MultipleUse` (value: `'MULTIPLE_USE'`) + + * `OneTimeUse` (value: `'ONE_TIME_USE'`) + + diff --git a/docs/payment_method/models/PaymentMethodStatus.md b/docs/payment_method/models/PaymentMethodStatus.md new file mode 100644 index 0000000..639dca7 --- /dev/null +++ b/docs/payment_method/models/PaymentMethodStatus.md @@ -0,0 +1,21 @@ +# PaymentMethodStatus + + + + +## Enum + + + * `Active` (value: `'ACTIVE'`) + + * `Expired` (value: `'EXPIRED'`) + + * `Inactive` (value: `'INACTIVE'`) + + * `Pending` (value: `'PENDING'`) + + * `RequiresAction` (value: `'REQUIRES_ACTION'`) + + * `Failed` (value: `'FAILED'`) + + diff --git a/docs/payment_method/models/PaymentMethodType.md b/docs/payment_method/models/PaymentMethodType.md new file mode 100644 index 0000000..6f7ab3b --- /dev/null +++ b/docs/payment_method/models/PaymentMethodType.md @@ -0,0 +1,25 @@ +# PaymentMethodType + + + + +## Enum + + + * `Card` (value: `'CARD'`) + + * `Cryptocurrency` (value: `'CRYPTOCURRENCY'`) + + * `DirectBankTransfer` (value: `'DIRECT_BANK_TRANSFER'`) + + * `DirectDebit` (value: `'DIRECT_DEBIT'`) + + * `Ewallet` (value: `'EWALLET'`) + + * `OverTheCounter` (value: `'OVER_THE_COUNTER'`) + + * `QrCode` (value: `'QR_CODE'`) + + * `VirtualAccount` (value: `'VIRTUAL_ACCOUNT'`) + + diff --git a/docs/payment_method/models/PaymentMethodUpdateParameters.md b/docs/payment_method/models/PaymentMethodUpdateParameters.md new file mode 100644 index 0000000..a8b2bea --- /dev/null +++ b/docs/payment_method/models/PaymentMethodUpdateParameters.md @@ -0,0 +1,16 @@ +# PaymentMethodUpdateParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **description** | string | | | +**referenceId** | string | | | +**reusability** | [PaymentMethodReusability](PaymentMethodReusability.md) | | | +**status** | [PaymentMethodStatus](PaymentMethodStatus.md) | | | +**overTheCounter** | [OverTheCounterUpdateParameters](OverTheCounterUpdateParameters.md) | | | +**virtualAccount** | [VirtualAccountUpdateParameters](VirtualAccountUpdateParameters.md) | | | + + diff --git a/docs/payment_method/models/QrCode.md b/docs/payment_method/models/QrCode.md new file mode 100644 index 0000000..b27c718 --- /dev/null +++ b/docs/payment_method/models/QrCode.md @@ -0,0 +1,14 @@ +# QRCode + +QR Code Payment Method Details + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **amount** | number | | | +**currency** | string | | | +**channelCode** | [QRCodeChannelCode](QRCodeChannelCode.md) | | | +**channelProperties** | [QRCodeChannelProperties](QRCodeChannelProperties.md) | | | + + diff --git a/docs/payment_method/models/QrCodeChannelCode.md b/docs/payment_method/models/QrCodeChannelCode.md new file mode 100644 index 0000000..6ce748c --- /dev/null +++ b/docs/payment_method/models/QrCodeChannelCode.md @@ -0,0 +1,19 @@ +# QRCodeChannelCode + +QR Code Channel Code + + +## Enum + + + * `Qris` (value: `'QRIS'`) + + * `Dana` (value: `'DANA'`) + + * `Rcbc` (value: `'RCBC'`) + + * `Promptpay` (value: `'PROMPTPAY'`) + + * `Linkaja` (value: `'LINKAJA'`) + + diff --git a/docs/payment_method/models/QrCodeChannelProperties.md b/docs/payment_method/models/QrCodeChannelProperties.md new file mode 100644 index 0000000..d82dc18 --- /dev/null +++ b/docs/payment_method/models/QrCodeChannelProperties.md @@ -0,0 +1,12 @@ +# QRCodeChannelProperties + +QR Code Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **qrString** | string | | QR string to be rendered for display to end users. QR string to image rendering are commonly available in software libraries (e.g Nodejs, PHP, Java) | +**expiresAt** | Date | | | + + diff --git a/docs/payment_method/models/QrCodeParameters.md b/docs/payment_method/models/QrCodeParameters.md new file mode 100644 index 0000000..cbb596c --- /dev/null +++ b/docs/payment_method/models/QrCodeParameters.md @@ -0,0 +1,14 @@ +# QRCodeParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **amount** | number | | | +**currency** | string | | | +**channelCode** | [QRCodeChannelCode](QRCodeChannelCode.md) | | | +**channelProperties** | [QRCodeChannelProperties](QRCodeChannelProperties.md) | | | + + diff --git a/docs/payment_method/models/SimulatePaymentRequest.md b/docs/payment_method/models/SimulatePaymentRequest.md new file mode 100644 index 0000000..6224023 --- /dev/null +++ b/docs/payment_method/models/SimulatePaymentRequest.md @@ -0,0 +1,11 @@ +# SimulatePaymentRequest + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **amount** | number | | | + + diff --git a/docs/payment_method/models/TokenizedCardInformation.md b/docs/payment_method/models/TokenizedCardInformation.md new file mode 100644 index 0000000..a2a32a6 --- /dev/null +++ b/docs/payment_method/models/TokenizedCardInformation.md @@ -0,0 +1,20 @@ +# TokenizedCardInformation + +Tokenized Card Information + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **tokenId** | string | ✅ | | +**maskedCardNumber** | string | ✅ | 1st 6 and last 4 digits of the card | +**cardholderName** | string | | Cardholder name is optional but recommended for 3DS 2 / AVS verification | +**expiryMonth** | string | ✅ | Card expiry month in MM format | +**expiryYear** | string | ✅ | Card expiry month in YY format | +**fingerprint** | string | ✅ | Xendit-generated identifier for the unique card number. Multiple payment method objects can be created for the same account - e.g. if the user first creates a one-time payment request, and then later on creates a multiple-use payment method using the same account. The fingerprint helps to identify the unique account being used. | +**type** | string | ✅ | Whether the card is a credit or debit card | +**network** | string | ✅ | Card network - VISA, MASTERCARD, JCB, AMEX, DISCOVER, BCA | +**country** | string | ✅ | Country where the card was issued ISO 3166-1 Alpha-2 | +**issuer** | string | ✅ | Issuer of the card, most often an issuing bank For example, “BCA”, “MANDIRI” | + + diff --git a/docs/payment_method/models/VirtualAccount.md b/docs/payment_method/models/VirtualAccount.md new file mode 100644 index 0000000..e435189 --- /dev/null +++ b/docs/payment_method/models/VirtualAccount.md @@ -0,0 +1,18 @@ +# VirtualAccount + +Virtual Account Payment Method Details + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **amount** | number | | | +**minAmount** | number | | | +**maxAmount** | number | | | +**currency** | string | | | +**channelCode** | [VirtualAccountChannelCode](VirtualAccountChannelCode.md) | ✅ | | +**channelProperties** | [VirtualAccountChannelProperties](VirtualAccountChannelProperties.md) | ✅ | | +**alternativeDisplayTypes** | []string | | For payments in Vietnam only, alternative display requested for the virtual account | +**alternativeDisplays** | [[]VirtualAccountAlternativeDisplay](VirtualAccountAlternativeDisplay.md) | | | + + diff --git a/docs/payment_method/models/VirtualAccountAllOf.md b/docs/payment_method/models/VirtualAccountAllOf.md new file mode 100644 index 0000000..f32c969 --- /dev/null +++ b/docs/payment_method/models/VirtualAccountAllOf.md @@ -0,0 +1,11 @@ +# VirtualAccountAllOf + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **alternativeDisplays** | [[]VirtualAccountAlternativeDisplay](VirtualAccountAlternativeDisplay.md) | | | + + diff --git a/docs/payment_method/models/VirtualAccountAlternativeDisplay.md b/docs/payment_method/models/VirtualAccountAlternativeDisplay.md new file mode 100644 index 0000000..d8c7269 --- /dev/null +++ b/docs/payment_method/models/VirtualAccountAlternativeDisplay.md @@ -0,0 +1,12 @@ +# VirtualAccountAlternativeDisplay + +Alternative Display Object + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **type** | string | | Type of the alternative display | +**data** | string | | Data payload of the given alternative display | + + diff --git a/docs/payment_method/models/VirtualAccountChannelCode.md b/docs/payment_method/models/VirtualAccountChannelCode.md new file mode 100644 index 0000000..119dc20 --- /dev/null +++ b/docs/payment_method/models/VirtualAccountChannelCode.md @@ -0,0 +1,39 @@ +# VirtualAccountChannelCode + +Virtual Account Channel Code + + +## Enum + + + * `Bca` (value: `'BCA'`) + + * `Bjb` (value: `'BJB'`) + + * `Bni` (value: `'BNI'`) + + * `Bri` (value: `'BRI'`) + + * `Mandiri` (value: `'MANDIRI'`) + + * `Permata` (value: `'PERMATA'`) + + * `Bsi` (value: `'BSI'`) + + * `Cimb` (value: `'CIMB'`) + + * `SahabatSampoerna` (value: `'SAHABAT_SAMPOERNA'`) + + * `Artajasa` (value: `'ARTAJASA'`) + + * `Pv` (value: `'PV'`) + + * `Vietcapital` (value: `'VIETCAPITAL'`) + + * `Woori` (value: `'WOORI'`) + + * `Msb` (value: `'MSB'`) + + * `StandardChartered` (value: `'STANDARD_CHARTERED'`) + + diff --git a/docs/payment_method/models/VirtualAccountChannelProperties.md b/docs/payment_method/models/VirtualAccountChannelProperties.md new file mode 100644 index 0000000..ba7b29f --- /dev/null +++ b/docs/payment_method/models/VirtualAccountChannelProperties.md @@ -0,0 +1,14 @@ +# VirtualAccountChannelProperties + +Virtual Account Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **customerName** | string | | Name of customer. | +**virtualAccountNumber** | string | | You can assign specific Virtual Account number using this parameter. If you do not send one, one will be picked at random. Make sure the number you specify is within your Virtual Account range. | +**expiresAt** | Date | | The date and time in ISO 8601 UTC+0 when the virtual account number will be expired. Default: The default expiration date will be 31 years from creation date. | +**suggestedAmount** | number | | The suggested amount you want to assign. Note: Suggested amounts is the amounts that can see as a suggestion, but user can still put any numbers (only supported for Mandiri and BRI) | + + diff --git a/docs/payment_method/models/VirtualAccountChannelPropertiesPatch.md b/docs/payment_method/models/VirtualAccountChannelPropertiesPatch.md new file mode 100644 index 0000000..5e9ecaa --- /dev/null +++ b/docs/payment_method/models/VirtualAccountChannelPropertiesPatch.md @@ -0,0 +1,12 @@ +# VirtualAccountChannelPropertiesPatch + +Virtual Account Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **expiresAt** | Date | | The date and time in ISO 8601 UTC+0 when the virtual account number will be expired. Default: The default expiration date will be 31 years from creation date. | +**suggestedAmount** | number | | The suggested amount you want to assign. Note: Suggested amounts is the amounts that can see as a suggestion, but user can still put any numbers (only supported for Mandiri and BRI) | + + diff --git a/docs/payment_method/models/VirtualAccountParameters.md b/docs/payment_method/models/VirtualAccountParameters.md new file mode 100644 index 0000000..9054d29 --- /dev/null +++ b/docs/payment_method/models/VirtualAccountParameters.md @@ -0,0 +1,17 @@ +# VirtualAccountParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **amount** | number | | | +**minAmount** | number | | | +**maxAmount** | number | | | +**currency** | string | | | +**channelCode** | [VirtualAccountChannelCode](VirtualAccountChannelCode.md) | ✅ | | +**channelProperties** | [VirtualAccountChannelProperties](VirtualAccountChannelProperties.md) | ✅ | | +**alternativeDisplayTypes** | []string | | For payments in Vietnam only, alternative display requested for the virtual account | + + diff --git a/docs/payment_method/models/VirtualAccountUpdateParameters.md b/docs/payment_method/models/VirtualAccountUpdateParameters.md new file mode 100644 index 0000000..aadf8a2 --- /dev/null +++ b/docs/payment_method/models/VirtualAccountUpdateParameters.md @@ -0,0 +1,15 @@ +# VirtualAccountUpdateParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **amount** | number | | | +**minAmount** | number | | | +**maxAmount** | number | | | +**channelProperties** | [VirtualAccountChannelPropertiesPatch](VirtualAccountChannelPropertiesPatch.md) | | | +**alternativeDisplayTypes** | []string | | For payments in Vietnam only, alternative display requested for the virtual account | + + diff --git a/docs/payment_request/models/Capture.md b/docs/payment_request/models/Capture.md new file mode 100644 index 0000000..3a382d7 --- /dev/null +++ b/docs/payment_request/models/Capture.md @@ -0,0 +1,25 @@ +# Capture + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **id** | string | ✅ | | +**paymentRequestId** | string | ✅ | | +**paymentId** | string | ✅ | | +**referenceId** | string | ✅ | | +**currency** | string | ✅ | | +**authorizedAmount** | number | ✅ | | +**capturedAmount** | number | ✅ | | +**status** | string | ✅ | | +**paymentMethod** | [PaymentMethod](PaymentMethod.md) | ✅ | | +**failureCode** | string | ✅ | | +**customerId** | string | ✅ | | +**metadata** | object | ✅ | | +**channelProperties** | object | ✅ | | +**created** | string | ✅ | | +**updated** | string | ✅ | | + + diff --git a/docs/payment_request/models/CaptureListResponse.md b/docs/payment_request/models/CaptureListResponse.md new file mode 100644 index 0000000..fcba18a --- /dev/null +++ b/docs/payment_request/models/CaptureListResponse.md @@ -0,0 +1,12 @@ +# CaptureListResponse + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **data** | [[]Capture](Capture.md) | ✅ | | +**hasMore** | boolean | ✅ | | + + diff --git a/docs/payment_request/models/CaptureParameters.md b/docs/payment_request/models/CaptureParameters.md new file mode 100644 index 0000000..de55929 --- /dev/null +++ b/docs/payment_request/models/CaptureParameters.md @@ -0,0 +1,12 @@ +# CaptureParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **referenceId** | string | | | +**captureAmount** | number | ✅ | | + + diff --git a/docs/payment_request/models/Card.md b/docs/payment_request/models/Card.md new file mode 100644 index 0000000..6aa23bd --- /dev/null +++ b/docs/payment_request/models/Card.md @@ -0,0 +1,14 @@ +# Card + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **currency** | [PaymentRequestCurrency](PaymentRequestCurrency.md) | ✅ | | +**channelProperties** | [CardChannelProperties](CardChannelProperties.md) | ✅ | | +**cardInformation** | [CardInformation](CardInformation.md) | ✅ | | +**cardVerificationResults** | [CardVerificationResults](CardVerificationResults.md) | | | + + diff --git a/docs/payment_request/models/CardChannelProperties.md b/docs/payment_request/models/CardChannelProperties.md new file mode 100644 index 0000000..ad5bd09 --- /dev/null +++ b/docs/payment_request/models/CardChannelProperties.md @@ -0,0 +1,15 @@ +# CardChannelProperties + +Card Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **skipThreeDSecure** | boolean | | To indicate whether to perform 3DS during the linking phase | +**successReturnUrl** | string | | URL where the end-customer is redirected if the authorization is successful | +**failureReturnUrl** | string | | URL where the end-customer is redirected if the authorization failed | +**cardonfileType** | string | | Type of “credential-on-file” / “card-on-file” payment being made. Indicate that this payment uses a previously linked Payment Method for charging. | +**merchantIdTag** | string | | Tag for a Merchant ID that you want to associate this payment with. For merchants using their own MIDs to specify which MID they want to use | + + diff --git a/docs/payment_request/models/CardInformation.md b/docs/payment_request/models/CardInformation.md new file mode 100644 index 0000000..3aacd48 --- /dev/null +++ b/docs/payment_request/models/CardInformation.md @@ -0,0 +1,20 @@ +# CardInformation + +Card Information + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **tokenId** | string | ✅ | | +**maskedCardNumber** | string | ✅ | 1st 6 and last 4 digits of the card | +**expiryMonth** | string | ✅ | Card expiry month in MM format | +**expiryYear** | string | ✅ | Card expiry month in YY format | +**cardholderName** | string | | Cardholder name | +**fingerprint** | string | | | +**type** | string | | | +**network** | string | | | +**country** | string | | | +**issuer** | string | | | + + diff --git a/docs/payment_request/models/CardVerificationResults.md b/docs/payment_request/models/CardVerificationResults.md new file mode 100644 index 0000000..9d0269c --- /dev/null +++ b/docs/payment_request/models/CardVerificationResults.md @@ -0,0 +1,13 @@ +# CardVerificationResults + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **threeDSecure** | [CardVerificationResultsThreeDSecure](CardVerificationResultsThreeDSecure.md) | | | +**cvvResult** | string | | | +**addressVerificationResult** | string | | | + + diff --git a/docs/payment_request/models/CardVerificationResultsThreeDSecure.md b/docs/payment_request/models/CardVerificationResultsThreeDSecure.md new file mode 100644 index 0000000..9a0991f --- /dev/null +++ b/docs/payment_request/models/CardVerificationResultsThreeDSecure.md @@ -0,0 +1,15 @@ +# CardVerificationResultsThreeDSecure + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **threeDSecureFlow** | string | | | +**eciCode** | string | | | +**threeDSecureResult** | string | | | +**threeDSecureResultReason** | string | | | +**threeDSecureVersion** | string | | | + + diff --git a/docs/payment_request/models/DirectDebit.md b/docs/payment_request/models/DirectDebit.md new file mode 100644 index 0000000..9bd6259 --- /dev/null +++ b/docs/payment_request/models/DirectDebit.md @@ -0,0 +1,15 @@ +# DirectDebit + +Direct Debit Payment Method Details + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **channelCode** | [DirectDebitChannelCode](DirectDebitChannelCode.md) | ✅ | | +**channelProperties** | [DirectDebitChannelProperties](DirectDebitChannelProperties.md) | ✅ | | +**type** | [DirectDebitType](DirectDebitType.md) | ✅ | | +**bankAccount** | [DirectDebitBankAccount](DirectDebitBankAccount.md) | | | +**debitCard** | [DirectDebitDebitCard](DirectDebitDebitCard.md) | | | + + diff --git a/docs/payment_request/models/DirectDebitAllOf.md b/docs/payment_request/models/DirectDebitAllOf.md new file mode 100644 index 0000000..fba15f0 --- /dev/null +++ b/docs/payment_request/models/DirectDebitAllOf.md @@ -0,0 +1,13 @@ +# DirectDebitAllOf + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **type** | [DirectDebitType](DirectDebitType.md) | ✅ | | +**bankAccount** | [DirectDebitBankAccount](DirectDebitBankAccount.md) | | | +**debitCard** | [DirectDebitDebitCard](DirectDebitDebitCard.md) | | | + + diff --git a/docs/payment_request/models/DirectDebitBankAccount.md b/docs/payment_request/models/DirectDebitBankAccount.md new file mode 100644 index 0000000..bc4725b --- /dev/null +++ b/docs/payment_request/models/DirectDebitBankAccount.md @@ -0,0 +1,12 @@ +# DirectDebitBankAccount + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **maskedBankAccountNumber** | string | | | +**bankAccountHash** | string | | | + + diff --git a/docs/payment_request/models/DirectDebitChannelCode.md b/docs/payment_request/models/DirectDebitChannelCode.md new file mode 100644 index 0000000..893eb49 --- /dev/null +++ b/docs/payment_request/models/DirectDebitChannelCode.md @@ -0,0 +1,135 @@ +# DirectDebitChannelCode + +Direct Debit Channel Code + + +## Enum + + + * `BcaKlikpay` (value: `'BCA_KLIKPAY'`) + + * `BcaOneklik` (value: `'BCA_ONEKLIK'`) + + * `Bri` (value: `'BRI'`) + + * `Bni` (value: `'BNI'`) + + * `Mandiri` (value: `'MANDIRI'`) + + * `Bpi` (value: `'BPI'`) + + * `Bdo` (value: `'BDO'`) + + * `Cimbniaga` (value: `'CIMBNIAGA'`) + + * `Mtb` (value: `'MTB'`) + + * `Rcbc` (value: `'RCBC'`) + + * `Ubp` (value: `'UBP'`) + + * `AutodebitUbp` (value: `'AUTODEBIT_UBP'`) + + * `Chinabank` (value: `'CHINABANK'`) + + * `Bay` (value: `'BAY'`) + + * `Ktb` (value: `'KTB'`) + + * `Bbl` (value: `'BBL'`) + + * `Scb` (value: `'SCB'`) + + * `KbankMb` (value: `'KBANK_MB'`) + + * `BayMb` (value: `'BAY_MB'`) + + * `KtbMb` (value: `'KTB_MB'`) + + * `BblMb` (value: `'BBL_MB'`) + + * `ScbMb` (value: `'SCB_MB'`) + + * `BdoEpay` (value: `'BDO_EPAY'`) + + * `AffinFpx` (value: `'AFFIN_FPX'`) + + * `AgroFpx` (value: `'AGRO_FPX'`) + + * `AllianceFpx` (value: `'ALLIANCE_FPX'`) + + * `AmbankFpx` (value: `'AMBANK_FPX'`) + + * `IslamFpx` (value: `'ISLAM_FPX'`) + + * `MuamalatFpx` (value: `'MUAMALAT_FPX'`) + + * `BocFpx` (value: `'BOC_FPX'`) + + * `RakyatFpx` (value: `'RAKYAT_FPX'`) + + * `BsnFpx` (value: `'BSN_FPX'`) + + * `CimbFpx` (value: `'CIMB_FPX'`) + + * `HlbFpx` (value: `'HLB_FPX'`) + + * `HsbcFpx` (value: `'HSBC_FPX'`) + + * `KfhFpx` (value: `'KFH_FPX'`) + + * `Mayb2EFpx` (value: `'MAYB2E_FPX'`) + + * `Mayb2UFpx` (value: `'MAYB2U_FPX'`) + + * `OcbcFpx` (value: `'OCBC_FPX'`) + + * `PublicFpx` (value: `'PUBLIC_FPX'`) + + * `RhbFpx` (value: `'RHB_FPX'`) + + * `SchFpx` (value: `'SCH_FPX'`) + + * `UobFpx` (value: `'UOB_FPX'`) + + * `AffinFpxBusiness` (value: `'AFFIN_FPX_BUSINESS'`) + + * `AgroFpxBusiness` (value: `'AGRO_FPX_BUSINESS'`) + + * `AllianceFpxBusiness` (value: `'ALLIANCE_FPX_BUSINESS'`) + + * `AmbankFpxBusiness` (value: `'AMBANK_FPX_BUSINESS'`) + + * `IslamFpxBusiness` (value: `'ISLAM_FPX_BUSINESS'`) + + * `MuamalatFpxBusiness` (value: `'MUAMALAT_FPX_BUSINESS'`) + + * `BnpFpxBusiness` (value: `'BNP_FPX_BUSINESS'`) + + * `CimbFpxBusiness` (value: `'CIMB_FPX_BUSINESS'`) + + * `CitibankFpxBusiness` (value: `'CITIBANK_FPX_BUSINESS'`) + + * `DeutscheFpxBusiness` (value: `'DEUTSCHE_FPX_BUSINESS'`) + + * `HlbFpxBusiness` (value: `'HLB_FPX_BUSINESS'`) + + * `HsbcFpxBusiness` (value: `'HSBC_FPX_BUSINESS'`) + + * `RakyatFpxBusiness` (value: `'RAKYAT_FPX_BUSINESS'`) + + * `KfhFpxBusiness` (value: `'KFH_FPX_BUSINESS'`) + + * `Mayb2EFpxBusiness` (value: `'MAYB2E_FPX_BUSINESS'`) + + * `OcbcFpxBusiness` (value: `'OCBC_FPX_BUSINESS'`) + + * `PublicFpxBusiness` (value: `'PUBLIC_FPX_BUSINESS'`) + + * `RhbFpxBusiness` (value: `'RHB_FPX_BUSINESS'`) + + * `SchFpxBusiness` (value: `'SCH_FPX_BUSINESS'`) + + * `UobFpxBusiness` (value: `'UOB_FPX_BUSINESS'`) + + diff --git a/docs/payment_request/models/DirectDebitChannelProperties.md b/docs/payment_request/models/DirectDebitChannelProperties.md new file mode 100644 index 0000000..fd74b0a --- /dev/null +++ b/docs/payment_request/models/DirectDebitChannelProperties.md @@ -0,0 +1,18 @@ +# DirectDebitChannelProperties + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **mobileNumber** | string | | Mobile number of the customer registered to the partner channel | +**successReturnUrl** | string | | | +**failureReturnUrl** | string | | | +**identityDocumentNumber** | string | | | +**accountNumber** | string | | | +**cardLastFour** | string | | Last four digits of the debit card | +**cardExpiry** | string | | Expiry month and year of the debit card (in MM/YY format) | +**email** | string | | Email address of the customer that is registered to the partner channel | + + diff --git a/docs/payment_request/models/DirectDebitChannelPropertiesBankAccount.md b/docs/payment_request/models/DirectDebitChannelPropertiesBankAccount.md new file mode 100644 index 0000000..47c5b88 --- /dev/null +++ b/docs/payment_request/models/DirectDebitChannelPropertiesBankAccount.md @@ -0,0 +1,14 @@ +# DirectDebitChannelPropertiesBankAccount + +Direct Debit Bank Account Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **successReturnUrl** | string | | | +**failureReturnUrl** | string | | | +**mobileNumber** | string | | | +**identityDocumentNumber** | string | | | + + diff --git a/docs/payment_request/models/DirectDebitChannelPropertiesBankRedirect.md b/docs/payment_request/models/DirectDebitChannelPropertiesBankRedirect.md new file mode 100644 index 0000000..0e4f97c --- /dev/null +++ b/docs/payment_request/models/DirectDebitChannelPropertiesBankRedirect.md @@ -0,0 +1,13 @@ +# DirectDebitChannelPropertiesBankRedirect + +Direct Debit Bank Account Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **mobileNumber** | string | | Mobile number of the customer that is registered to channel | +**successReturnUrl** | string | | | +**failureReturnUrl** | string | | | + + diff --git a/docs/payment_request/models/DirectDebitChannelPropertiesDebitCard.md b/docs/payment_request/models/DirectDebitChannelPropertiesDebitCard.md new file mode 100644 index 0000000..85f0cad --- /dev/null +++ b/docs/payment_request/models/DirectDebitChannelPropertiesDebitCard.md @@ -0,0 +1,15 @@ +# DirectDebitChannelPropertiesDebitCard + +Direct Debit Debit Card Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **mobileNumber** | string | | Mobile number of the customer registered to the partner channel | +**accountNumber** | string | | | +**cardLastFour** | string | | Last four digits of the debit card | +**cardExpiry** | string | | Expiry month and year of the debit card (in MM/YY format) | +**email** | string | | Email address of the customer that is registered to the partner channel | + + diff --git a/docs/payment_request/models/DirectDebitDebitCard.md b/docs/payment_request/models/DirectDebitDebitCard.md new file mode 100644 index 0000000..876d859 --- /dev/null +++ b/docs/payment_request/models/DirectDebitDebitCard.md @@ -0,0 +1,15 @@ +# DirectDebitDebitCard + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **mobileNumber** | string | | Mobile number of the customer registered to the partner channel | +**accountNumber** | string | | | +**cardLastFour** | string | | Last four digits of the debit card | +**cardExpiry** | string | | Expiry month and year of the debit card (in MM/YY format) | +**email** | string | | Email address of the customer that is registered to the partner channel | + + diff --git a/docs/payment_request/models/DirectDebitParameters.md b/docs/payment_request/models/DirectDebitParameters.md new file mode 100644 index 0000000..b7a034d --- /dev/null +++ b/docs/payment_request/models/DirectDebitParameters.md @@ -0,0 +1,13 @@ +# DirectDebitParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **channelCode** | [DirectDebitChannelCode](DirectDebitChannelCode.md) | ✅ | | +**channelProperties** | [DirectDebitChannelProperties](DirectDebitChannelProperties.md) | ✅ | | +**type** | [DirectDebitType](DirectDebitType.md) | | | + + diff --git a/docs/payment_request/models/DirectDebitType.md b/docs/payment_request/models/DirectDebitType.md new file mode 100644 index 0000000..219cdf3 --- /dev/null +++ b/docs/payment_request/models/DirectDebitType.md @@ -0,0 +1,15 @@ +# DirectDebitType + + + + +## Enum + + + * `DebitCard` (value: `'DEBIT_CARD'`) + + * `BankAccount` (value: `'BANK_ACCOUNT'`) + + * `BankRedirect` (value: `'BANK_REDIRECT'`) + + diff --git a/docs/payment_request/models/EWallet.md b/docs/payment_request/models/EWallet.md new file mode 100644 index 0000000..8fa4a89 --- /dev/null +++ b/docs/payment_request/models/EWallet.md @@ -0,0 +1,13 @@ +# EWallet + +Ewallet Payment Method Details + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **channelCode** | [EWalletChannelCode](EWalletChannelCode.md) | | | +**channelProperties** | [EWalletChannelProperties](EWalletChannelProperties.md) | | | +**account** | [EWalletAccount](EWalletAccount.md) | | | + + diff --git a/docs/payment_request/models/EWalletAccount.md b/docs/payment_request/models/EWalletAccount.md new file mode 100644 index 0000000..ea51026 --- /dev/null +++ b/docs/payment_request/models/EWalletAccount.md @@ -0,0 +1,14 @@ +# EWalletAccount + +EWallet Account Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **name** | string | | Name of the eWallet account holder. The value is null if unavailableName of the eWallet account holder. The value is null if unavailable | +**accountDetails** | string | | Identifier from eWallet provider e.g. phone number. The value is null if unavailable | +**balance** | number | | The main balance amount on eWallet account provided from eWallet provider. The value is null if unavailable | +**pointBalance** | number | | The point balance amount on eWallet account. Applicable only on some eWallet provider that has point system. The value is null if unavailabl | + + diff --git a/docs/payment_request/models/EWalletAllOf.md b/docs/payment_request/models/EWalletAllOf.md new file mode 100644 index 0000000..1ef7a43 --- /dev/null +++ b/docs/payment_request/models/EWalletAllOf.md @@ -0,0 +1,11 @@ +# EWalletAllOf + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **account** | [EWalletAccount](EWalletAccount.md) | | | + + diff --git a/docs/payment_request/models/EWalletChannelCode.md b/docs/payment_request/models/EWalletChannelCode.md new file mode 100644 index 0000000..a8c3bad --- /dev/null +++ b/docs/payment_request/models/EWalletChannelCode.md @@ -0,0 +1,47 @@ +# EWalletChannelCode + +Ewallet Channel Code + + +## Enum + + + * `Gcash` (value: `'GCASH'`) + + * `Grabpay` (value: `'GRABPAY'`) + + * `Paymaya` (value: `'PAYMAYA'`) + + * `Dana` (value: `'DANA'`) + + * `Ovo` (value: `'OVO'`) + + * `Linkaja` (value: `'LINKAJA'`) + + * `Shopeepay` (value: `'SHOPEEPAY'`) + + * `Nexcash` (value: `'NEXCASH'`) + + * `Astrapay` (value: `'ASTRAPAY'`) + + * `Jeniuspay` (value: `'JENIUSPAY'`) + + * `Appota` (value: `'APPOTA'`) + + * `Momo` (value: `'MOMO'`) + + * `Vnptwallet` (value: `'VNPTWALLET'`) + + * `Viettelpay` (value: `'VIETTELPAY'`) + + * `Zalopay` (value: `'ZALOPAY'`) + + * `Wechatpay` (value: `'WECHATPAY'`) + + * `Linepay` (value: `'LINEPAY'`) + + * `Truemoney` (value: `'TRUEMONEY'`) + + * `Alipay` (value: `'ALIPAY'`) + + diff --git a/docs/payment_request/models/EWalletChannelProperties.md b/docs/payment_request/models/EWalletChannelProperties.md new file mode 100644 index 0000000..d81de17 --- /dev/null +++ b/docs/payment_request/models/EWalletChannelProperties.md @@ -0,0 +1,16 @@ +# EWalletChannelProperties + +Ewallet Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **successReturnUrl** | string | | URL where the end-customer is redirected if the authorization is successful | +**failureReturnUrl** | string | | URL where the end-customer is redirected if the authorization failed | +**cancelReturnUrl** | string | | URL where the end-customer is redirected if the authorization cancelled | +**redeemPoints** | string | | REDEEM_NONE will not use any point, REDEEM_ALL will use all available points before cash balance is used. For OVO and ShopeePay tokenized payment use only. | +**mobilenumber** | string | | | +**cashtag** | string | | | + + diff --git a/docs/payment_request/models/EWalletParameters.md b/docs/payment_request/models/EWalletParameters.md new file mode 100644 index 0000000..1a5756d --- /dev/null +++ b/docs/payment_request/models/EWalletParameters.md @@ -0,0 +1,12 @@ +# EWalletParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **channelCode** | [EWalletChannelCode](EWalletChannelCode.md) | | | +**channelProperties** | [EWalletChannelProperties](EWalletChannelProperties.md) | | | + + diff --git a/docs/payment_request/models/Error.md b/docs/payment_request/models/Error.md new file mode 100644 index 0000000..2d9230d --- /dev/null +++ b/docs/payment_request/models/Error.md @@ -0,0 +1,12 @@ +# ModelError + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | | | +**message** | string | | | + + diff --git a/docs/payment_request/models/OverTheCounter.md b/docs/payment_request/models/OverTheCounter.md new file mode 100644 index 0000000..2cb72b3 --- /dev/null +++ b/docs/payment_request/models/OverTheCounter.md @@ -0,0 +1,14 @@ +# OverTheCounter + +Over the Counter Payment Method Details + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **amount** | number | | | +**currency** | [PaymentRequestCurrency](PaymentRequestCurrency.md) | | | +**channelCode** | [OverTheCounterChannelCode](OverTheCounterChannelCode.md) | ✅ | | +**channelProperties** | [OverTheCounterChannelProperties](OverTheCounterChannelProperties.md) | ✅ | | + + diff --git a/docs/payment_request/models/OverTheCounterChannelCode.md b/docs/payment_request/models/OverTheCounterChannelCode.md new file mode 100644 index 0000000..73e48f2 --- /dev/null +++ b/docs/payment_request/models/OverTheCounterChannelCode.md @@ -0,0 +1,41 @@ +# OverTheCounterChannelCode + +Over The Counter Channel Code + + +## Enum + + + * `_7Eleven` (value: `'7ELEVEN'`) + + * `_7ElevenCliqq` (value: `'7ELEVEN_CLIQQ'`) + + * `Cebuana` (value: `'CEBUANA'`) + + * `Ecpay` (value: `'ECPAY'`) + + * `Palawan` (value: `'PALAWAN'`) + + * `Mlhuillier` (value: `'MLHUILLIER'`) + + * `EcpayDragonloan` (value: `'ECPAY_DRAGONLOAN'`) + + * `Lbc` (value: `'LBC'`) + + * `EcpaySchool` (value: `'ECPAY_SCHOOL'`) + + * `RdPawnshop` (value: `'RD_PAWNSHOP'`) + + * `Cvm` (value: `'CVM'`) + + * `Ussc` (value: `'USSC'`) + + * `SmBills` (value: `'SM_BILLS'`) + + * `RobinsonsBills` (value: `'ROBINSONS_BILLS'`) + + * `Alfamart` (value: `'ALFAMART'`) + + * `Indomaret` (value: `'INDOMARET'`) + + diff --git a/docs/payment_request/models/OverTheCounterChannelProperties.md b/docs/payment_request/models/OverTheCounterChannelProperties.md new file mode 100644 index 0000000..ca508b2 --- /dev/null +++ b/docs/payment_request/models/OverTheCounterChannelProperties.md @@ -0,0 +1,13 @@ +# OverTheCounterChannelProperties + +Over The Counter Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **paymentCode** | string | | The payment code that you want to assign, e.g 12345. If you do not send one, one will be picked at random. | +**customerName** | string | ✅ | Name of customer. | +**expiresAt** | Date | | The time when the payment code will be expired. The minimum is 2 hours and the maximum is 9 days for 7ELEVEN. Default expired date will be 2 days from payment code generated. | + + diff --git a/docs/payment_request/models/OverTheCounterParameters.md b/docs/payment_request/models/OverTheCounterParameters.md new file mode 100644 index 0000000..fc817f6 --- /dev/null +++ b/docs/payment_request/models/OverTheCounterParameters.md @@ -0,0 +1,14 @@ +# OverTheCounterParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **amount** | number | | | +**currency** | [PaymentRequestCurrency](PaymentRequestCurrency.md) | | | +**channelCode** | [OverTheCounterChannelCode](OverTheCounterChannelCode.md) | ✅ | | +**channelProperties** | [OverTheCounterChannelProperties](OverTheCounterChannelProperties.md) | ✅ | | + + diff --git a/docs/payment_request/models/PaymentMethod.md b/docs/payment_request/models/PaymentMethod.md new file mode 100644 index 0000000..0be4451 --- /dev/null +++ b/docs/payment_request/models/PaymentMethod.md @@ -0,0 +1,25 @@ +# PaymentMethod + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **id** | string | ✅ | | +**type** | [PaymentMethodType](PaymentMethodType.md) | ✅ | | +**created** | string | | | +**updated** | string | | | +**description** | string | | | +**referenceId** | string | | | +**card** | [Card](Card.md) | | | +**directDebit** | [DirectDebit](DirectDebit.md) | | | +**ewallet** | [EWallet](EWallet.md) | | | +**overTheCounter** | [OverTheCounter](OverTheCounter.md) | | | +**virtualAccount** | [VirtualAccount](VirtualAccount.md) | | | +**qrCode** | [QRCode](QRCode.md) | | | +**reusability** | [PaymentMethodReusability](PaymentMethodReusability.md) | ✅ | | +**status** | [PaymentMethodStatus](PaymentMethodStatus.md) | ✅ | | +**metadata** | object | | | + + diff --git a/docs/payment_request/models/PaymentMethodParameters.md b/docs/payment_request/models/PaymentMethodParameters.md new file mode 100644 index 0000000..cc5ce9b --- /dev/null +++ b/docs/payment_request/models/PaymentMethodParameters.md @@ -0,0 +1,19 @@ +# PaymentMethodParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **type** | [PaymentMethodType](PaymentMethodType.md) | ✅ | | +**reusability** | [PaymentMethodReusability](PaymentMethodReusability.md) | ✅ | | +**description** | string | | | +**referenceId** | string | | | +**directDebit** | [DirectDebitParameters](DirectDebitParameters.md) | | | +**ewallet** | [EWalletParameters](EWalletParameters.md) | | | +**overTheCounter** | [OverTheCounterParameters](OverTheCounterParameters.md) | | | +**virtualAccount** | [VirtualAccountParameters](VirtualAccountParameters.md) | | | +**qrCode** | [QRCodeParameters](QRCodeParameters.md) | | | + + diff --git a/docs/payment_request/models/PaymentMethodReusability.md b/docs/payment_request/models/PaymentMethodReusability.md new file mode 100644 index 0000000..86fa5b1 --- /dev/null +++ b/docs/payment_request/models/PaymentMethodReusability.md @@ -0,0 +1,13 @@ +# PaymentMethodReusability + + + + +## Enum + + + * `MultipleUse` (value: `'MULTIPLE_USE'`) + + * `OneTimeUse` (value: `'ONE_TIME_USE'`) + + diff --git a/docs/payment_request/models/PaymentMethodStatus.md b/docs/payment_request/models/PaymentMethodStatus.md new file mode 100644 index 0000000..1190e09 --- /dev/null +++ b/docs/payment_request/models/PaymentMethodStatus.md @@ -0,0 +1,19 @@ +# PaymentMethodStatus + + + + +## Enum + + + * `Active` (value: `'ACTIVE'`) + + * `Inactive` (value: `'INACTIVE'`) + + * `Pending` (value: `'PENDING'`) + + * `Expired` (value: `'EXPIRED'`) + + * `Failed` (value: `'FAILED'`) + + diff --git a/docs/payment_request/models/PaymentMethodType.md b/docs/payment_request/models/PaymentMethodType.md new file mode 100644 index 0000000..66f2382 --- /dev/null +++ b/docs/payment_request/models/PaymentMethodType.md @@ -0,0 +1,21 @@ +# PaymentMethodType + + + + +## Enum + + + * `Card` (value: `'CARD'`) + + * `DirectDebit` (value: `'DIRECT_DEBIT'`) + + * `Ewallet` (value: `'EWALLET'`) + + * `OverTheCounter` (value: `'OVER_THE_COUNTER'`) + + * `QrCode` (value: `'QR_CODE'`) + + * `VirtualAccount` (value: `'VIRTUAL_ACCOUNT'`) + + diff --git a/docs/payment_request/models/PaymentRequest.md b/docs/payment_request/models/PaymentRequest.md new file mode 100644 index 0000000..d1898e7 --- /dev/null +++ b/docs/payment_request/models/PaymentRequest.md @@ -0,0 +1,33 @@ +# PaymentRequest + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **id** | string | ✅ | | +**created** | string | ✅ | | +**updated** | string | ✅ | | +**referenceId** | string | ✅ | | +**businessId** | string | ✅ | | +**customerId** | string | | | +**customer** | object | | | +**amount** | number | | | +**minAmount** | number | | | +**maxAmount** | number | | | +**country** | [PaymentRequestCountry](PaymentRequestCountry.md) | | | +**currency** | [PaymentRequestCurrency](PaymentRequestCurrency.md) | ✅ | | +**paymentMethod** | [PaymentMethod](PaymentMethod.md) | ✅ | | +**description** | string | | | +**failureCode** | string | | | +**captureMethod** | [PaymentRequestCaptureMethod](PaymentRequestCaptureMethod.md) | | | +**initiator** | [PaymentRequestInitiator](PaymentRequestInitiator.md) | | | +**cardVerificationResults** | [PaymentRequestCardVerificationResults](PaymentRequestCardVerificationResults.md) | | | +**status** | [PaymentRequestStatus](PaymentRequestStatus.md) | ✅ | | +**actions** | [[]PaymentRequestAction](PaymentRequestAction.md) | | | +**metadata** | object | | | +**shippingInformation** | [PaymentRequestShippingInformation](PaymentRequestShippingInformation.md) | | | +**items** | [[]PaymentRequestBasketItem](PaymentRequestBasketItem.md) | | | + + diff --git a/docs/payment_request/models/PaymentRequestAction.md b/docs/payment_request/models/PaymentRequestAction.md new file mode 100644 index 0000000..3ba34ee --- /dev/null +++ b/docs/payment_request/models/PaymentRequestAction.md @@ -0,0 +1,15 @@ +# PaymentRequestAction + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **action** | string | ✅ | | +**urlType** | string | ✅ | | +**method** | string | ✅ | | +**url** | string | ✅ | | +**qrCode** | string | ✅ | | + + diff --git a/docs/payment_request/models/PaymentRequestAuthParameters.md b/docs/payment_request/models/PaymentRequestAuthParameters.md new file mode 100644 index 0000000..7e23c8f --- /dev/null +++ b/docs/payment_request/models/PaymentRequestAuthParameters.md @@ -0,0 +1,11 @@ +# PaymentRequestAuthParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **authCode** | string | ✅ | | + + diff --git a/docs/payment_request/models/PaymentRequestBasketItem.md b/docs/payment_request/models/PaymentRequestBasketItem.md new file mode 100644 index 0000000..708bd53 --- /dev/null +++ b/docs/payment_request/models/PaymentRequestBasketItem.md @@ -0,0 +1,23 @@ +# PaymentRequestBasketItem + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **referenceId** | string | | | +**name** | string | ✅ | | +**description** | string | | | +**type** | string | | | +**category** | string | ✅ | | +**subCategory** | string | | | +**currency** | string | ✅ | | +**quantity** | number | ✅ | | +**price** | number | ✅ | | +**payerChargedCurrency** | string | | | +**payerChargedPrice** | number | | | +**url** | string | | | +**metadata** | object | | | + + diff --git a/docs/payment_request/models/PaymentRequestCaptureMethod.md b/docs/payment_request/models/PaymentRequestCaptureMethod.md new file mode 100644 index 0000000..cfd9529 --- /dev/null +++ b/docs/payment_request/models/PaymentRequestCaptureMethod.md @@ -0,0 +1,13 @@ +# PaymentRequestCaptureMethod + + + + +## Enum + + + * `Automatic` (value: `'AUTOMATIC'`) + + * `Manual` (value: `'MANUAL'`) + + diff --git a/docs/payment_request/models/PaymentRequestCardVerificationResults.md b/docs/payment_request/models/PaymentRequestCardVerificationResults.md new file mode 100644 index 0000000..214ffed --- /dev/null +++ b/docs/payment_request/models/PaymentRequestCardVerificationResults.md @@ -0,0 +1,13 @@ +# PaymentRequestCardVerificationResults + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **threeDSecure** | [PaymentRequestCardVerificationResultsThreeDeeSecure](PaymentRequestCardVerificationResultsThreeDeeSecure.md) | ✅ | | +**cvvResult** | string | | | +**addressVerificationResult** | string | | | + + diff --git a/docs/payment_request/models/PaymentRequestCardVerificationResultsThreeDeeSecure.md b/docs/payment_request/models/PaymentRequestCardVerificationResultsThreeDeeSecure.md new file mode 100644 index 0000000..185c8ac --- /dev/null +++ b/docs/payment_request/models/PaymentRequestCardVerificationResultsThreeDeeSecure.md @@ -0,0 +1,15 @@ +# PaymentRequestCardVerificationResultsThreeDeeSecure + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **threeDSecureFlow** | string | | | +**eciCode** | string | | | +**threeDSecureResult** | string | | | +**threeDSecureResultReason** | string | | | +**threeDSecureVersion** | string | | | + + diff --git a/docs/payment_request/models/PaymentRequestChannelProperties.md b/docs/payment_request/models/PaymentRequestChannelProperties.md new file mode 100644 index 0000000..a0ac380 --- /dev/null +++ b/docs/payment_request/models/PaymentRequestChannelProperties.md @@ -0,0 +1,17 @@ +# PaymentRequestChannelProperties + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **successReturnUrl** | string | | URL where the end-customer is redirected if the authorization is successful | +**failureReturnUrl** | string | | URL where the end-customer is redirected if the authorization failed | +**cancelReturnUrl** | string | | URL where the end-customer is redirected if the authorization cancelled | +**redeemPoints** | string | | REDEEM_NONE will not use any point, REDEEM_ALL will use all available points before cash balance is used. For OVO and ShopeePay tokenized payment use only. | +**requireAuth** | boolean | | Toggle used to require end-customer to input undergo OTP validation before completing a payment. OTP will always be required for transactions greater than 1,000,000 IDR. For BRI tokenized payment use only. | +**merchantIdTag** | string | | Tag for a Merchant ID that you want to associate this payment with. For merchants using their own MIDs to specify which MID they want to use | +**cardonfileType** | string | | Type of “credential-on-file” / “card-on-file” payment being made. Indicate that this payment uses a previously linked Payment Method for charging. | + + diff --git a/docs/payment_request/models/PaymentRequestCountry.md b/docs/payment_request/models/PaymentRequestCountry.md new file mode 100644 index 0000000..126a8c1 --- /dev/null +++ b/docs/payment_request/models/PaymentRequestCountry.md @@ -0,0 +1,19 @@ +# PaymentRequestCountry + + + + +## Enum + + + * `Id` (value: `'ID'`) + + * `Ph` (value: `'PH'`) + + * `Vn` (value: `'VN'`) + + * `Th` (value: `'TH'`) + + * `My` (value: `'MY'`) + + diff --git a/docs/payment_request/models/PaymentRequestCurrency.md b/docs/payment_request/models/PaymentRequestCurrency.md new file mode 100644 index 0000000..7030e93 --- /dev/null +++ b/docs/payment_request/models/PaymentRequestCurrency.md @@ -0,0 +1,19 @@ +# PaymentRequestCurrency + + + + +## Enum + + + * `Idr` (value: `'IDR'`) + + * `Php` (value: `'PHP'`) + + * `Vnd` (value: `'VND'`) + + * `Thb` (value: `'THB'`) + + * `Myr` (value: `'MYR'`) + + diff --git a/docs/payment_request/models/PaymentRequestInitiator.md b/docs/payment_request/models/PaymentRequestInitiator.md new file mode 100644 index 0000000..f71cfe8 --- /dev/null +++ b/docs/payment_request/models/PaymentRequestInitiator.md @@ -0,0 +1,13 @@ +# PaymentRequestInitiator + + + + +## Enum + + + * `Customer` (value: `'CUSTOMER'`) + + * `Merchant` (value: `'MERCHANT'`) + + diff --git a/docs/payment_request/models/PaymentRequestListResponse.md b/docs/payment_request/models/PaymentRequestListResponse.md new file mode 100644 index 0000000..9a8f055 --- /dev/null +++ b/docs/payment_request/models/PaymentRequestListResponse.md @@ -0,0 +1,12 @@ +# PaymentRequestListResponse + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **data** | [[]PaymentRequest](PaymentRequest.md) | ✅ | | +**hasMore** | boolean | ✅ | | + + diff --git a/docs/payment_request/models/PaymentRequestParameters.md b/docs/payment_request/models/PaymentRequestParameters.md new file mode 100644 index 0000000..5315e1d --- /dev/null +++ b/docs/payment_request/models/PaymentRequestParameters.md @@ -0,0 +1,24 @@ +# PaymentRequestParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **referenceId** | string | | | +**amount** | number | | | +**currency** | [PaymentRequestCurrency](PaymentRequestCurrency.md) | ✅ | | +**paymentMethod** | [PaymentMethodParameters](PaymentMethodParameters.md) | | | +**description** | string | | | +**captureMethod** | [PaymentRequestCaptureMethod](PaymentRequestCaptureMethod.md) | | | +**initiator** | [PaymentRequestInitiator](PaymentRequestInitiator.md) | | | +**paymentMethodId** | string | | | +**channelProperties** | [PaymentRequestParametersChannelProperties](PaymentRequestParametersChannelProperties.md) | | | +**shippingInformation** | [PaymentRequestShippingInformation](PaymentRequestShippingInformation.md) | | | +**items** | [[]PaymentRequestBasketItem](PaymentRequestBasketItem.md) | | | +**customerId** | string | | | +**customer** | object | | | +**metadata** | object | | | + + diff --git a/docs/payment_request/models/PaymentRequestParametersChannelProperties.md b/docs/payment_request/models/PaymentRequestParametersChannelProperties.md new file mode 100644 index 0000000..4147bde --- /dev/null +++ b/docs/payment_request/models/PaymentRequestParametersChannelProperties.md @@ -0,0 +1,18 @@ +# PaymentRequestParametersChannelProperties + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **successReturnUrl** | string | | URL where the end-customer is redirected if the authorization is successful | +**failureReturnUrl** | string | | URL where the end-customer is redirected if the authorization failed | +**cancelReturnUrl** | string | | URL where the end-customer is redirected if the authorization cancelled | +**redeemPoints** | string | | REDEEM_NONE will not use any point, REDEEM_ALL will use all available points before cash balance is used. For OVO and ShopeePay tokenized payment use only. | +**requireAuth** | boolean | | Toggle used to require end-customer to input undergo OTP validation before completing a payment. OTP will always be required for transactions greater than 1,000,000 IDR. For BRI tokenized payment use only. | +**merchantIdTag** | string | | Tag for a Merchant ID that you want to associate this payment with. For merchants using their own MIDs to specify which MID they want to use | +**cardonfileType** | string | | Type of “credential-on-file” / “card-on-file” payment being made. Indicate that this payment uses a previously linked Payment Method for charging. | +**cvv** | string | | Three digit code written on the back of the card (usually called CVV/CVN). | + + diff --git a/docs/payment_request/models/PaymentRequestParametersChannelPropertiesAllOf.md b/docs/payment_request/models/PaymentRequestParametersChannelPropertiesAllOf.md new file mode 100644 index 0000000..dc6be1a --- /dev/null +++ b/docs/payment_request/models/PaymentRequestParametersChannelPropertiesAllOf.md @@ -0,0 +1,11 @@ +# PaymentRequestParametersChannelPropertiesAllOf + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **cvv** | string | | Three digit code written on the back of the card (usually called CVV/CVN). | + + diff --git a/docs/payment_request/models/PaymentRequestShippingInformation.md b/docs/payment_request/models/PaymentRequestShippingInformation.md new file mode 100644 index 0000000..45cd1e5 --- /dev/null +++ b/docs/payment_request/models/PaymentRequestShippingInformation.md @@ -0,0 +1,16 @@ +# PaymentRequestShippingInformation + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **country** | string | ✅ | | +**streetLine1** | string | | | +**streetLine2** | string | | | +**city** | string | | | +**provinceState** | string | | | +**postalCode** | string | | | + + diff --git a/docs/payment_request/models/PaymentRequestStatus.md b/docs/payment_request/models/PaymentRequestStatus.md new file mode 100644 index 0000000..eedb88c --- /dev/null +++ b/docs/payment_request/models/PaymentRequestStatus.md @@ -0,0 +1,25 @@ +# PaymentRequestStatus + + + + +## Enum + + + * `Pending` (value: `'PENDING'`) + + * `RequiresAction` (value: `'REQUIRES_ACTION'`) + + * `Canceled` (value: `'CANCELED'`) + + * `Succeeded` (value: `'SUCCEEDED'`) + + * `Failed` (value: `'FAILED'`) + + * `Voided` (value: `'VOIDED'`) + + * `Unknown` (value: `'UNKNOWN'`) + + * `AwaitingCapture` (value: `'AWAITING_CAPTURE'`) + + diff --git a/docs/payment_request/models/QrCode.md b/docs/payment_request/models/QrCode.md new file mode 100644 index 0000000..6b07444 --- /dev/null +++ b/docs/payment_request/models/QrCode.md @@ -0,0 +1,12 @@ +# QRCode + +QRCode Payment Method Details + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **channelCode** | [QRCodeChannelCode](QRCodeChannelCode.md) | | | +**channelProperties** | [QRCodeChannelProperties](QRCodeChannelProperties.md) | | | + + diff --git a/docs/payment_request/models/QrCodeChannelCode.md b/docs/payment_request/models/QrCodeChannelCode.md new file mode 100644 index 0000000..6d19e30 --- /dev/null +++ b/docs/payment_request/models/QrCodeChannelCode.md @@ -0,0 +1,17 @@ +# QRCodeChannelCode + +QR Code Channel Code + + +## Enum + + + * `Dana` (value: `'DANA'`) + + * `Rcbc` (value: `'RCBC'`) + + * `Linkaja` (value: `'LINKAJA'`) + + * `Promptpay` (value: `'PROMPTPAY'`) + + diff --git a/docs/payment_request/models/QrCodeChannelProperties.md b/docs/payment_request/models/QrCodeChannelProperties.md new file mode 100644 index 0000000..05249ea --- /dev/null +++ b/docs/payment_request/models/QrCodeChannelProperties.md @@ -0,0 +1,12 @@ +# QRCodeChannelProperties + +QR Code Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **qrString** | string | | | +**expiresAt** | Date | | | + + diff --git a/docs/payment_request/models/QrCodeParameters.md b/docs/payment_request/models/QrCodeParameters.md new file mode 100644 index 0000000..7f11cf2 --- /dev/null +++ b/docs/payment_request/models/QrCodeParameters.md @@ -0,0 +1,12 @@ +# QRCodeParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **channelCode** | [QRCodeChannelCode](QRCodeChannelCode.md) | | | +**channelProperties** | [QRCodeChannelProperties](QRCodeChannelProperties.md) | | | + + diff --git a/docs/payment_request/models/VirtualAccount.md b/docs/payment_request/models/VirtualAccount.md new file mode 100644 index 0000000..dfd7eba --- /dev/null +++ b/docs/payment_request/models/VirtualAccount.md @@ -0,0 +1,18 @@ +# VirtualAccount + +Virtual Account Payment Method Details + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **minAmount** | number | | | +**maxAmount** | number | | | +**amount** | number | | | +**currency** | [PaymentRequestCurrency](PaymentRequestCurrency.md) | | | +**channelCode** | [VirtualAccountChannelCode](VirtualAccountChannelCode.md) | ✅ | | +**channelProperties** | [VirtualAccountChannelProperties](VirtualAccountChannelProperties.md) | ✅ | | +**alternativeDisplayTypes** | []string | | Alternative display requested for the virtual account | +**alternativeDisplays** | [[]VirtualAccountAlternativeDisplay](VirtualAccountAlternativeDisplay.md) | | | + + diff --git a/docs/payment_request/models/VirtualAccountAllOf.md b/docs/payment_request/models/VirtualAccountAllOf.md new file mode 100644 index 0000000..f32c969 --- /dev/null +++ b/docs/payment_request/models/VirtualAccountAllOf.md @@ -0,0 +1,11 @@ +# VirtualAccountAllOf + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **alternativeDisplays** | [[]VirtualAccountAlternativeDisplay](VirtualAccountAlternativeDisplay.md) | | | + + diff --git a/docs/payment_request/models/VirtualAccountAlternativeDisplay.md b/docs/payment_request/models/VirtualAccountAlternativeDisplay.md new file mode 100644 index 0000000..d8c7269 --- /dev/null +++ b/docs/payment_request/models/VirtualAccountAlternativeDisplay.md @@ -0,0 +1,12 @@ +# VirtualAccountAlternativeDisplay + +Alternative Display Object + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **type** | string | | Type of the alternative display | +**data** | string | | Data payload of the given alternative display | + + diff --git a/docs/payment_request/models/VirtualAccountChannelCode.md b/docs/payment_request/models/VirtualAccountChannelCode.md new file mode 100644 index 0000000..119dc20 --- /dev/null +++ b/docs/payment_request/models/VirtualAccountChannelCode.md @@ -0,0 +1,39 @@ +# VirtualAccountChannelCode + +Virtual Account Channel Code + + +## Enum + + + * `Bca` (value: `'BCA'`) + + * `Bjb` (value: `'BJB'`) + + * `Bni` (value: `'BNI'`) + + * `Bri` (value: `'BRI'`) + + * `Mandiri` (value: `'MANDIRI'`) + + * `Permata` (value: `'PERMATA'`) + + * `Bsi` (value: `'BSI'`) + + * `Cimb` (value: `'CIMB'`) + + * `SahabatSampoerna` (value: `'SAHABAT_SAMPOERNA'`) + + * `Artajasa` (value: `'ARTAJASA'`) + + * `Pv` (value: `'PV'`) + + * `Vietcapital` (value: `'VIETCAPITAL'`) + + * `Woori` (value: `'WOORI'`) + + * `Msb` (value: `'MSB'`) + + * `StandardChartered` (value: `'STANDARD_CHARTERED'`) + + diff --git a/docs/payment_request/models/VirtualAccountChannelProperties.md b/docs/payment_request/models/VirtualAccountChannelProperties.md new file mode 100644 index 0000000..42b9653 --- /dev/null +++ b/docs/payment_request/models/VirtualAccountChannelProperties.md @@ -0,0 +1,14 @@ +# VirtualAccountChannelProperties + +Virtual Account Channel Properties + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **customerName** | string | ✅ | Name of customer. | +**virtualAccountNumber** | string | | You can assign specific Virtual Account number using this parameter. If you do not send one, one will be picked at random. Make sure the number you specify is within your Virtual Account range. | +**expiresAt** | Date | | The date and time in ISO 8601 UTC+0 when the virtual account number will be expired. Default: The default expiration date will be 31 years from creation date. | +**suggestedAmount** | number | | The suggested amount you want to assign. Note: Suggested amounts is the amounts that can see as a suggestion, but user can still put any numbers (only supported for Mandiri and BRI) | + + diff --git a/docs/payment_request/models/VirtualAccountParameters.md b/docs/payment_request/models/VirtualAccountParameters.md new file mode 100644 index 0000000..bb3d34c --- /dev/null +++ b/docs/payment_request/models/VirtualAccountParameters.md @@ -0,0 +1,17 @@ +# VirtualAccountParameters + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **minAmount** | number | | | +**maxAmount** | number | | | +**amount** | number | | | +**currency** | [PaymentRequestCurrency](PaymentRequestCurrency.md) | | | +**channelCode** | [VirtualAccountChannelCode](VirtualAccountChannelCode.md) | ✅ | | +**channelProperties** | [VirtualAccountChannelProperties](VirtualAccountChannelProperties.md) | ✅ | | +**alternativeDisplayTypes** | []string | | Alternative display requested for the virtual account | + + diff --git a/docs/payout/models/Channel.md b/docs/payout/models/Channel.md new file mode 100644 index 0000000..c688305 --- /dev/null +++ b/docs/payout/models/Channel.md @@ -0,0 +1,15 @@ +# Channel + +Channel information where you can send the money to + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **channelCode** | string | ✅ | Destination channel to send the money to, prefixed by ISO-3166 country code | +**channelCategory** | [ChannelCategory](ChannelCategory.md) | ✅ | | +**currency** | string | ✅ | Currency of the destination channel using ISO-4217 currency code | +**channelName** | string | ✅ | Name of the destination channel | +**amountLimits** | [ChannelAmountLimits](ChannelAmountLimits.md) | ✅ | | + + diff --git a/docs/payout/models/ChannelAccountType.md b/docs/payout/models/ChannelAccountType.md new file mode 100644 index 0000000..7e602fc --- /dev/null +++ b/docs/payout/models/ChannelAccountType.md @@ -0,0 +1,19 @@ +# ChannelAccountType + +Available account types (applicable for MY_DUITNOW) + + +## Enum + + + * `NationalId` (value: `'NATIONAL_ID'`) + + * `MobileNo` (value: `'MOBILE_NO'`) + + * `Passport` (value: `'PASSPORT'`) + + * `BusinessRegistration` (value: `'BUSINESS_REGISTRATION'`) + + * `BankAccount` (value: `'BANK_ACCOUNT'`) + + diff --git a/docs/payout/models/ChannelAmountLimits.md b/docs/payout/models/ChannelAmountLimits.md new file mode 100644 index 0000000..fd693e5 --- /dev/null +++ b/docs/payout/models/ChannelAmountLimits.md @@ -0,0 +1,13 @@ +# ChannelAmountLimits + +Supported amount ranges for payouts to this channel + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **minimum** | number | ✅ | Lowest amount supported for a payout to this channel | +**maximum** | number | ✅ | Highest amount supported for a payout to this channel | +**minimumIncrement** | number | ✅ | Supported increments | + + diff --git a/docs/payout/models/ChannelCategory.md b/docs/payout/models/ChannelCategory.md new file mode 100644 index 0000000..f0f4ec1 --- /dev/null +++ b/docs/payout/models/ChannelCategory.md @@ -0,0 +1,15 @@ +# ChannelCategory + +Category of channel code, as some channels might require more fields during processing + + +## Enum + + + * `Bank` (value: `'BANK'`) + + * `Ewallet` (value: `'EWALLET'`) + + * `Otc` (value: `'OTC'`) + + diff --git a/docs/payout/models/CreatePayoutRequest.md b/docs/payout/models/CreatePayoutRequest.md new file mode 100644 index 0000000..aadffc3 --- /dev/null +++ b/docs/payout/models/CreatePayoutRequest.md @@ -0,0 +1,18 @@ +# CreatePayoutRequest + +Information needed by Xendit to send money to the destination channel provided + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **referenceId** | string | ✅ | A client defined payout identifier | +**channelCode** | string | ✅ | Channel code of selected destination bank or e-wallet | +**channelProperties** | [DigitalPayoutChannelProperties](DigitalPayoutChannelProperties.md) | ✅ | | +**amount** | number | ✅ | Amount to be sent to the destination account and should be a multiple of the minimum increment for the selected channel | +**description** | string | | Description to send with the payout, the recipient may see this e.g., in their bank statement (if supported) or in email receipts we send on your behalf | +**currency** | string | ✅ | Currency of the destination channel using ISO-4217 currency code | +**receiptNotification** | [ReceiptNotification](ReceiptNotification.md) | | | +**metadata** | object | | Object of additional information you may use | + + diff --git a/docs/payout/models/DigitalPayoutChannelProperties.md b/docs/payout/models/DigitalPayoutChannelProperties.md new file mode 100644 index 0000000..8f2adb7 --- /dev/null +++ b/docs/payout/models/DigitalPayoutChannelProperties.md @@ -0,0 +1,13 @@ +# DigitalPayoutChannelProperties + +Channel information for digital destinations (banks, e-wallets) + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **accountHolderName** | string | | Registered account name | +**accountNumber** | string | ✅ | Registered account number | +**accountType** | [ChannelAccountType](ChannelAccountType.md) | | | + + diff --git a/docs/payout/models/Error.md b/docs/payout/models/Error.md new file mode 100644 index 0000000..912aea0 --- /dev/null +++ b/docs/payout/models/Error.md @@ -0,0 +1,13 @@ +# ModelError + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | ✅ | Specific error encountered when processing the request, can refer to the API documentation on proper handling of each available error code https://developers.xendit.co/api-reference/#payouts | +**message** | string | ✅ | Human readable error message | +**errors** | [[]ErrorErrorsInner](ErrorErrorsInner.md) | | | + + diff --git a/docs/payout/models/ErrorErrorsInner.md b/docs/payout/models/ErrorErrorsInner.md new file mode 100644 index 0000000..544ea25 --- /dev/null +++ b/docs/payout/models/ErrorErrorsInner.md @@ -0,0 +1,12 @@ +# ErrorErrorsInner + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **path** | string | ✅ | Precise location of the error | +**message** | string | ✅ | Specific description of the error | + + diff --git a/docs/payout/models/GetPayouts200Response.md b/docs/payout/models/GetPayouts200Response.md new file mode 100644 index 0000000..8e10966 --- /dev/null +++ b/docs/payout/models/GetPayouts200Response.md @@ -0,0 +1,13 @@ +# GetPayouts200Response + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **data** | [[]GetPayouts200ResponseDataInner](GetPayouts200ResponseDataInner.md) | | | +**hasMore** | boolean | | | +**links** | [GetPayouts200ResponseLinks](GetPayouts200ResponseLinks.md) | | | + + diff --git a/docs/payout/models/GetPayouts200ResponseDataInner.md b/docs/payout/models/GetPayouts200ResponseDataInner.md new file mode 100644 index 0000000..cf84b4f --- /dev/null +++ b/docs/payout/models/GetPayouts200ResponseDataInner.md @@ -0,0 +1,25 @@ +# GetPayouts200ResponseDataInner + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **referenceId** | string | ✅ | A client defined payout identifier | +**channelCode** | string | ✅ | Channel code of selected destination bank or e-wallet | +**channelProperties** | [DigitalPayoutChannelProperties](DigitalPayoutChannelProperties.md) | ✅ | | +**amount** | number | ✅ | Amount to be sent to the destination account and should be a multiple of the minimum increment for the selected channel | +**description** | string | | Description to send with the payout, the recipient may see this e.g., in their bank statement (if supported) or in email receipts we send on your behalf | +**currency** | string | ✅ | Currency of the destination channel using ISO-4217 currency code | +**receiptNotification** | [ReceiptNotification](ReceiptNotification.md) | | | +**metadata** | object | | Object of additional information you may use | +**id** | string | ✅ | Xendit-generated unique identifier for each payout | +**created** | Date | ✅ | The time payout was created on Xendit\'s system, in ISO 8601 format | +**updated** | Date | ✅ | The time payout was last updated on Xendit\'s system, in ISO 8601 format | +**businessId** | string | ✅ | Xendit Business ID | +**status** | string | ✅ | Status of payout | +**failureCode** | string | | If the Payout failed, we include a failure code for more details on the failure. | +**estimatedArrivalTime** | Date | | Our estimated time on to when your payout is reflected to the destination account | + + diff --git a/docs/payout/models/GetPayouts200ResponseLinks.md b/docs/payout/models/GetPayouts200ResponseLinks.md new file mode 100644 index 0000000..0443f55 --- /dev/null +++ b/docs/payout/models/GetPayouts200ResponseLinks.md @@ -0,0 +1,13 @@ +# GetPayouts200ResponseLinks + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **href** | string | | | +**rel** | string | | | +**method** | string | | | + + diff --git a/docs/payout/models/Payout.md b/docs/payout/models/Payout.md new file mode 100644 index 0000000..d757e63 --- /dev/null +++ b/docs/payout/models/Payout.md @@ -0,0 +1,25 @@ +# Payout + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **referenceId** | string | ✅ | A client defined payout identifier | +**channelCode** | string | ✅ | Channel code of selected destination bank or e-wallet | +**channelProperties** | [DigitalPayoutChannelProperties](DigitalPayoutChannelProperties.md) | ✅ | | +**amount** | number | ✅ | Amount to be sent to the destination account and should be a multiple of the minimum increment for the selected channel | +**description** | string | | Description to send with the payout, the recipient may see this e.g., in their bank statement (if supported) or in email receipts we send on your behalf | +**currency** | string | ✅ | Currency of the destination channel using ISO-4217 currency code | +**receiptNotification** | [ReceiptNotification](ReceiptNotification.md) | | | +**metadata** | object | | Object of additional information you may use | +**id** | string | ✅ | Xendit-generated unique identifier for each payout | +**created** | Date | ✅ | The time payout was created on Xendit\'s system, in ISO 8601 format | +**updated** | Date | ✅ | The time payout was last updated on Xendit\'s system, in ISO 8601 format | +**businessId** | string | ✅ | Xendit Business ID | +**status** | string | ✅ | Status of payout | +**failureCode** | string | | If the Payout failed, we include a failure code for more details on the failure. | +**estimatedArrivalTime** | Date | | Our estimated time on to when your payout is reflected to the destination account | + + diff --git a/docs/payout/models/PayoutAllOf.md b/docs/payout/models/PayoutAllOf.md new file mode 100644 index 0000000..7b39dc8 --- /dev/null +++ b/docs/payout/models/PayoutAllOf.md @@ -0,0 +1,17 @@ +# PayoutAllOf + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **id** | string | ✅ | Xendit-generated unique identifier for each payout | +**created** | Date | ✅ | The time payout was created on Xendit\'s system, in ISO 8601 format | +**updated** | Date | ✅ | The time payout was last updated on Xendit\'s system, in ISO 8601 format | +**businessId** | string | ✅ | Xendit Business ID | +**status** | string | ✅ | Status of payout | +**failureCode** | string | | If the Payout failed, we include a failure code for more details on the failure. | +**estimatedArrivalTime** | Date | | Our estimated time on to when your payout is reflected to the destination account | + + diff --git a/docs/payout/models/ReceiptNotification.md b/docs/payout/models/ReceiptNotification.md new file mode 100644 index 0000000..8937bc7 --- /dev/null +++ b/docs/payout/models/ReceiptNotification.md @@ -0,0 +1,13 @@ +# ReceiptNotification + +Additional notification for completed payout + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **emailTo** | []string | | Valid email address to send the payout receipt | +**emailCc** | []string | | Valid email address to cc the payout receipt | +**emailBcc** | []string | | Valid email address to bcc the payout receipt | + + diff --git a/docs/refund/models/CreateRefund.md b/docs/refund/models/CreateRefund.md new file mode 100644 index 0000000..8074324 --- /dev/null +++ b/docs/refund/models/CreateRefund.md @@ -0,0 +1,17 @@ +# CreateRefund + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **paymentRequestId** | string | | | +**invoiceId** | string | | | +**referenceId** | string | | | +**amount** | number | | | +**currency** | string | | | +**reason** | string | | | +**metadata** | object | | | + + diff --git a/docs/refund/models/CreateRefund400Response.md b/docs/refund/models/CreateRefund400Response.md new file mode 100644 index 0000000..71f66a9 --- /dev/null +++ b/docs/refund/models/CreateRefund400Response.md @@ -0,0 +1,12 @@ +# CreateRefund400Response + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | | | +**message** | string | | | + + diff --git a/docs/refund/models/CreateRefund403Response.md b/docs/refund/models/CreateRefund403Response.md new file mode 100644 index 0000000..74c6017 --- /dev/null +++ b/docs/refund/models/CreateRefund403Response.md @@ -0,0 +1,12 @@ +# CreateRefund403Response + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | | | +**message** | string | | | + + diff --git a/docs/refund/models/CreateRefund404Response.md b/docs/refund/models/CreateRefund404Response.md new file mode 100644 index 0000000..d1bb277 --- /dev/null +++ b/docs/refund/models/CreateRefund404Response.md @@ -0,0 +1,12 @@ +# CreateRefund404Response + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | | | +**message** | string | | | + + diff --git a/docs/refund/models/CreateRefund409Response.md b/docs/refund/models/CreateRefund409Response.md new file mode 100644 index 0000000..698fe9d --- /dev/null +++ b/docs/refund/models/CreateRefund409Response.md @@ -0,0 +1,12 @@ +# CreateRefund409Response + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | | | +**message** | string | | | + + diff --git a/docs/refund/models/CreateRefund503Response.md b/docs/refund/models/CreateRefund503Response.md new file mode 100644 index 0000000..112af39 --- /dev/null +++ b/docs/refund/models/CreateRefund503Response.md @@ -0,0 +1,12 @@ +# CreateRefund503Response + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | | | +**message** | string | | | + + diff --git a/docs/refund/models/CreateRefundDefaultResponse.md b/docs/refund/models/CreateRefundDefaultResponse.md new file mode 100644 index 0000000..fcded37 --- /dev/null +++ b/docs/refund/models/CreateRefundDefaultResponse.md @@ -0,0 +1,12 @@ +# CreateRefundDefaultResponse + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **errorCode** | string | | | +**message** | string | | | + + diff --git a/docs/refund/models/Refund.md b/docs/refund/models/Refund.md new file mode 100644 index 0000000..af89b56 --- /dev/null +++ b/docs/refund/models/Refund.md @@ -0,0 +1,22 @@ +# Refund + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **id** | string | | | +**paymentRequestId** | string | | | +**amount** | number | | | +**channelCode** | string | | | +**country** | string | | | +**currency** | string | | | +**referenceId** | string | | | +**failureCode** | string | | | +**refundFeeAmount** | number | | | +**created** | string | | | +**updated** | string | | | +**metadata** | object | | | + + diff --git a/docs/refund/models/RefundList.md b/docs/refund/models/RefundList.md new file mode 100644 index 0000000..2cbef1e --- /dev/null +++ b/docs/refund/models/RefundList.md @@ -0,0 +1,12 @@ +# RefundList + + + +## Properties + +| Name | Type | Required | Description | +| ------------ | ------------- | ------------- | ------------- | +| **data** | [[]Refund](Refund.md) | ✅ | | +**hasMore** | boolean | | | + + diff --git a/examples/with_async/balance.js b/examples/with_async/balance.js deleted file mode 100644 index 85854e2..0000000 --- a/examples/with_async/balance.js +++ /dev/null @@ -1,17 +0,0 @@ -const x = require('../xendit'); - -const { Balance } = x; -const b = new Balance({}); - -(async function() { - try { - const r = await b.getBalance({ - accountType: Balance.AccountType.Holding, - }); - console.log('Holding balance:', r); // eslint-disable-line no-console - process.exit(0); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/card.js b/examples/with_async/card.js deleted file mode 100644 index c2a4709..0000000 --- a/examples/with_async/card.js +++ /dev/null @@ -1,71 +0,0 @@ -const x = require('../xendit'); - -const Card = x.Card; -const card = new Card({}); - -// These IDs should be obtained using Xendit.js -// https://docs.xendit.co/xenpayments/payments-credit-cards-overview/credit-cards-integration-and-testing/collecting-card-details-tokenization/index.html -// You can generate sample token/authentication data and replace it below -// https://js.xendit.co/test_tokenize.html -// https://js.xendit.co/test_authenticate.html -const tokenID = '623d394d672113001b79c1a1'; -const authID = '623d394d672113001b79c1a2'; - -function sleepFor(sleepDuration) { - var now = new Date().getTime(); - while (new Date().getTime() < now + sleepDuration) { - /* Do nothing */ - } -} - -(async function() { - try { - const charge = await card.createCharge({ - tokenID, - authID, - amount: 10000, - // eslint-disable-next-line max-len - externalID: Date.now().toString(), // use your system's ID of the transaction - capture: false, - metadata: { - test: `data`, - }, - }); - console.log('charge created:', charge); // eslint-disable-line no-console - - const capture = await card.captureCharge({ - chargeID: charge.id, - amount: 10000, - }); - console.log('charge captured:', capture); // eslint-disable-line no-console - - sleepFor(3000); - - const refund = await card.createRefund({ - chargeID: charge.id, - externalID: charge.external_id, - amount: 5000, - }); - console.log('refund created:', refund); // eslint-disable-line no-console - - const promotion = await card.createPromotion({ - referenceId: Date.now().toString(), - description: '20% discount applied for all BRI cards', - binList: ['400000', '460000'], - discountPercent: 20, - channelCode: 'BRI', - currency: 'IDR', - minOriginalAmount: 25000, - maxDiscountAmount: 5000, - startTime: '2022-01-25T00:00:00.000Z', - endTime: '2023-01-25T00:00:00.000Z', - }); - // eslint-disable-next-line max-len - console.log('promotion created:', promotion); // eslint-disable-line no-console - - process.exit(0); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/customer.js b/examples/with_async/customer.js deleted file mode 100644 index 085e914..0000000 --- a/examples/with_async/customer.js +++ /dev/null @@ -1,38 +0,0 @@ -const x = require('../xendit'); - -const { Customer } = x; -const c = new Customer({}); - -(async function() { - try { - let customer = await c.createCustomer({ - referenceID: new Date().toISOString(), - givenNames: 'customer 1', - email: 'customer@website.com', - mobileNumber: '+6281212345678', - description: 'dummy customer', - middleName: 'middle', - surname: 'surname', - addresses: [], - apiVersion: '2020-05-19', - }); - console.log('created customer', customer); // eslint-disable-line no-console - - customer = await c.getCustomer({ - id: customer.id, - apiVersion: '2020-05-19', - }); - // eslint-disable-next-line no-console - console.log('retrieved customer', customer); - - const customers = await c.getCustomerByReferenceID({ - referenceID: customer.reference_id, - apiVersion: '2020-05-19', - }); - // eslint-disable-next-line no-console - console.log('retrieved customers', customers); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/direct_debit.js b/examples/with_async/direct_debit.js deleted file mode 100644 index c35b9f6..0000000 --- a/examples/with_async/direct_debit.js +++ /dev/null @@ -1,123 +0,0 @@ -const x = require('../xendit'); - -const { DirectDebit, Customer } = x; -const dd = new DirectDebit({}); -const c = new Customer({}); - -(async function() { - try { - let customer = await c.createCustomer({ - referenceID: new Date().toISOString(), - givenNames: 'customer 1', - email: 'customer@website.com', - mobileNumber: '+6281212345678', - description: 'dummy customer', - middleName: 'middle', - surname: 'surname', - addresses: [], - apiVersion: '2020-05-19', - }); - - let tokenization = await dd.initializeTokenization({ - customerID: customer.id, - channelCode: 'DC_BRI', - properties: { - accountMobileNumber: '+62818555988', - cardLastFour: '8888', - cardExpiry: '06/24', - accountEmail: 'test.email@xendit.co', - }, - }); - // eslint-disable-next-line no-console - console.log('initialized tokenization', tokenization); - - let validateOTP = await dd.validateOTPforLinkedAccount({ - tokenID: tokenization.id, - otpCode: '333000', - }); - // eslint-disable-next-line no-console - console.log('validated account', validateOTP); - - let accounts = await dd.retrieveAccountsByTokenID({ - tokenID: tokenization.id, - }); - // eslint-disable-next-line no-console - console.log('retrieved accounts', accounts); - - let paymentMethod = await dd.createPaymentMethod({ - customerID: customer.id, - type: 'DEBIT_CARD', - properties: { - id: accounts[0].id, - }, - }); - // eslint-disable-next-line no-console - console.log('created payment method', paymentMethod); - - let paymentMethods = await dd.getPaymentMethodsByCustomerID({ - customerID: customer.id, - }); - // eslint-disable-next-line no-console - console.log('retrieved payment methods', paymentMethods); - - let ddPayment = await dd.createDirectDebitPayment({ - idempotencyKey: new Date().toISOString(), - referenceID: 'merchant-ref-id-ex-1', - paymentMethodID: paymentMethod.id, - currency: 'IDR', - amount: 15000, - callbackURL: 'https://payment-callback-listener/', - enableOTP: true, - basket: [ - { - referenceID: 'product-ref-id-ex-1', - name: 'product 1', - market: 'ID', - type: 'good type', - description: 'good quality', - category: 'category', - subCategory: 'subcategory', - price: '10000', - url: 'https://product-url/', - metadata: { - meta: 'data', - }, - quantity: 15, - }, - { - referenceID: 'product-ref-id-ex-2', - name: 'product 2', - market: 'ID', - type: 'good type', - }, - ], - metadata: { - meta: 'data', - }, - }); - // eslint-disable-next-line no-console - console.log('created direct debit payment', ddPayment); - - validateOTP = await dd.validateOTPforPayment({ - directDebitID: ddPayment.id, - otpCode: '222000', - }); - // eslint-disable-next-line no-console - console.log('validated payment', validateOTP); - - ddPayment = await dd.getDirectDebitPaymentStatusByID({ - directDebitID: ddPayment.id, - }); - // eslint-disable-next-line no-console - console.log('retrieved direct debit payment', ddPayment); - - let ddPayments = await dd.getDirectDebitPaymentStatusByReferenceID({ - referenceID: ddPayment.reference_id, - }); - // eslint-disable-next-line no-console - console.log('retrieved direct debit payments', ddPayments); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/disbursement.js b/examples/with_async/disbursement.js deleted file mode 100644 index 84c9679..0000000 --- a/examples/with_async/disbursement.js +++ /dev/null @@ -1,47 +0,0 @@ -const x = require('../xendit'); - -const { Disbursement } = x; -const d = new Disbursement({}); - -(async function() { - try { - const banks = await d.getBanks(); - console.log('available banks:', banks); // eslint-disable-line no-console - - const disbursements = banks.slice(0, 5).map(b => ({ - externalID: `${b.name} - ${b.code}`, - bankCode: b.code, - accountHolderName: 'Stan', - accountNumber: '1234567890', - description: `purchase paid from ${b.name}`, - amount: 10000, - })); - const batch = await d.createBatch({ reference: '111', disbursements }); - console.log('batch created:', batch); // eslint-disable-line no-console - - let disb = await d.create({ - externalID: `${banks[0].name} - ${banks[0].code} single disbursement`, - bankCode: banks[0].code, - accountHolderName: 'Stan', - accountNumber: '1234567890', - description: `purchase paid from ${banks[0].name}`, - amount: 10000, - forUserID: 'for-user-id-test', - }); - // eslint-disable-next-line no-console - console.log('disbursement created:', disb); - - disb = await d.getByID({ disbursementID: disb.id }); - // eslint-disable-next-line no-console - console.log('disbursement retrieved from ID:', disb); - - disb = await d.getByExtID({ externalID: disb.external_id }); - // eslint-disable-next-line no-console - console.log('disbursement retrieved from extID:', disb); - - process.exit(0); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/ewallet.js b/examples/with_async/ewallet.js deleted file mode 100644 index 8acdf23..0000000 --- a/examples/with_async/ewallet.js +++ /dev/null @@ -1,109 +0,0 @@ -const x = require('../xendit'); - -const { EWallet, Customer } = x; -const ew = new EWallet({}); -const c = new Customer({}); - -/* - * The entire EWallet tokenization flow, at this time, - * cannot be replicated through an example - * This is because of the system design, - * once a token is created it has - * to be verified manually by using the authorizer url. - * Subsequent methods `create payment method`, - * `get payment by ID`, and `unlink tokenization` - * can only be carried out after the manual authorization - */ - -(async function() { - try { - const payment = await ew.createPayment({ - externalID: Date.now().toString(), - amount: 1, - phone: '081234567890', - ewalletType: EWallet.Type.OVO, - }); - // eslint-disable-next-line no-console - console.log('created payment detail:', payment); - - const retrievedPayment = await ew.getPayment({ - externalID: payment.external_id, - ewalletType: payment.ewallet_type, - }); - // eslint-disable-next-line no-console - console.log('EWallet payment detail:', retrievedPayment); - - const charge = await ew.createEWalletCharge({ - referenceID: Date.now().toString(), - currency: 'IDR', - amount: 1688, - checkoutMethod: 'ONE_TIME_PAYMENT', - channelCode: 'ID_OVO', - channelProperties: { - mobileNumber: '+6281234567890', - }, - basket: [ - { - referenceID: 'basket-product-ref-id', - name: 'product name', - category: 'mechanics', - currency: 'IDR', - price: 50000, - quantity: 5, - type: 'wht', - subCategory: 'evr', - metadata: { - meta: 'data', - }, - }, - ], - metadata: { - meta2: 'data2', - }, - }); - // eslint-disable-next-line no-console - console.log('created ewallet payment charge:', charge); - - const retrievedCharge = await ew.getEWalletChargeStatus({ - chargeID: charge.id, - }); - // eslint-disable-next-line no-console - console.log('retrieved ewallet payment charge:', retrievedCharge); - - const voidedCharge = await ew.voidEWalletCharge({ - chargeID: charge.id, - }); - // eslint-disable-next-line no-console - console.log('voided ewallet payment charge:', voidedCharge); - - let customer = await c.createCustomer({ - referenceID: new Date().toISOString(), - givenNames: 'customer 1', - email: 'customer@website.com', - mobileNumber: '+6281212345678', - description: 'dummy customer', - middleName: 'middle', - surname: 'surname', - addresses: [], - apiVersion: '2020-05-19', - }); - // eslint-disable-next-line no-console - console.log('created customer', customer); - - let tokenization = await ew.initializeTokenization({ - customerID: customer.id, - channelCode: 'PH_GRABPAY', - properties: { - successRedirectURL: 'https://www.google.com', - failureRedirectURL: 'https://www.google.com', - callbackURL: 'https://www.google.com', - }, - }); - // eslint-disable-next-line no-console - console.log('initialized tokenization', tokenization); - process.exit(0); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/invoice.js b/examples/with_async/invoice.js deleted file mode 100644 index 2ce1779..0000000 --- a/examples/with_async/invoice.js +++ /dev/null @@ -1,42 +0,0 @@ -const x = require('../xendit'); - -const { Invoice } = x; -const i = new Invoice({}); - -(async function() { - try { - let invoice = await i.createInvoice({ - externalID: Date.now().toString(), - payerEmail: 'example@gmail.com', - description: 'Invoice for Shoes Purchase', - amount: 100000, - customer: { - given_names: 'xen customer', - email: 'example@gmail.com', - }, - customerNotificationPreference: { - invoice_created: ['email'], - }, - }); - console.log('created invoice', invoice); // eslint-disable-line no-console - - const retrievedInvoice = await i.getInvoice({ invoiceID: invoice.id }); - // eslint-disable-next-line no-console - console.log('retrieved invoice', retrievedInvoice); - - const expiredInvoice = await i.expireInvoice({ - invoiceID: retrievedInvoice.id, - }); - // eslint-disable-next-line no-console - console.log('expired invoice', expiredInvoice); - - const invoices = await i.getAllInvoices(); - // eslint-disable-next-line no-console - console.log('first 10 invoices', invoices); - - process.exit(0); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/payment_method_v2.js b/examples/with_async/payment_method_v2.js deleted file mode 100644 index b50cc49..0000000 --- a/examples/with_async/payment_method_v2.js +++ /dev/null @@ -1,48 +0,0 @@ -const x = require('../xendit'); - -const { PaymentMethodV2 } = x; -const pm = new PaymentMethodV2({}); - -(async function() { - try { - let createdPaymentMethod = await pm.createPaymentMethodV2({ - type: 'DIRECT_DEBIT', - reusability: 'ONE_TIME_USE', - customer_id: '16f72571-9b3a-43dc-b241-5b71f470202f', - country: 'ID', - direct_debit: { - channel_code: 'BRI', - channel_properties: { - mobile_number: '+6281299640904', - card_last_four: '8888', - card_expiry: '10/29', - email: 'dharma@xendit.co', - }, - }, - }); - // eslint-disable-next-line no-console - console.log('created payment method', createdPaymentMethod); - - const paymentMethodDetailsById = await pm.getPaymentMethodByIdV2({ - id: createdPaymentMethod.id, - }); - // eslint-disable-next-line no-console - console.log('retrieved payment method', paymentMethodDetailsById); - - const listOfPaymentMethod = await pm.listPaymentMethodV2({}); - // eslint-disable-next-line no-console - console.log('retrieved payment method list', listOfPaymentMethod); - - const authorizedPaymentMethod = await pm.authorizePaymentMethodV2({ - id: createdPaymentMethod.id, - auth_code: '333000', - }); - // eslint-disable-next-line no-console - console.log('authorized payment method', authorizedPaymentMethod); - - process.exit(0); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/payment_request.js b/examples/with_async/payment_request.js deleted file mode 100644 index 78acaf5..0000000 --- a/examples/with_async/payment_request.js +++ /dev/null @@ -1,40 +0,0 @@ -const x = require('../xendit'); - -const { PaymentRequest } = x; -const r = new PaymentRequest({}); - -(async function() { - try { - let paymentrequest = await r.createPaymentRequest({ - amount: 1500, - currency: 'PHP', - payment_method: { - type: 'EWALLET', - ewallet: { - channel_code: 'GRABPAY', - channel_properties: { - success_return_url: 'https://redirect.me/goodstuff', - failure_return_url: 'https://redirect.me/badstuff', - }, - }, - reusability: 'ONE_TIME_USE', - }, - }); - console.log('created payment request', paymentrequest); // eslint-disable-line no-console - - const getpaymentrequest = await r.getPaymentRequestById({ - id: paymentrequest.id, - }); - // eslint-disable-next-line no-console - console.log('retrieved payment request', getpaymentrequest); - - const getpaymentrequestList = await r.listPaymentRequest({}); - // eslint-disable-next-line no-console - console.log('list of payment request', getpaymentrequestList); - - process.exit(0); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/payout.js b/examples/with_async/payout.js deleted file mode 100644 index 898d23c..0000000 --- a/examples/with_async/payout.js +++ /dev/null @@ -1,29 +0,0 @@ -const x = require('../xendit'); - -const { Payout } = x; -const p = new Payout({}); - -(async function() { - try { - const payout = await p.createPayout({ - externalID: Date.now().toString(), - amount: 10000, - email: 'stanley@xendit.co', - }); - console.log('created payout:', payout); // eslint-disable-line no-console - - const { id } = payout; - const retrievedPayout = await p.getPayout({ id }); - // eslint-disable-next-line no-console - console.log('retrieved payout:', retrievedPayout); - - const voidedPayout = await p.voidPayout({ id }); - // eslint-disable-next-line no-console - console.log('payout voided:', voidedPayout.id); - - process.exit(0); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/platform.js b/examples/with_async/platform.js deleted file mode 100644 index 5f2d081..0000000 --- a/examples/with_async/platform.js +++ /dev/null @@ -1,86 +0,0 @@ -const x = require('../xendit'); - -const { Platform } = x; -const p = new Platform({}); - -(async function() { - try { - const account = await p.createAccount({ - accountEmail: `example+${Date.now().toString()}@gmail.com`, - type: 'OWNED', - businessProfile: { - businessName: `example+${Date.now().toString()}`, - }, - }); - // eslint-disable-next-line no-console - console.log('created account details:', account); - - const cbResponse = await p.setCallbackURL({ - forUserID: account.user_id, - type: 'invoice', - url: 'https://httpstat.us/200', - }); - - //eslint-disable-next-line no-console - console.log('callback setting response: ', cbResponse); - - const transfer = await p.createTransfer({ - reference: `example+${Date.now().toString()}`, - amount: 1, - sourceUserID: '623d3cda7012f7478e9a7e69', - destinationUserID: account.user_id, - }); - - // eslint-disable-next-line no-console - console.log('created transfer details: ', transfer); - - const feeRule = await p.createFeeRule({ - name: `example+${Date.now().toString()}`, - description: `Fee rule created on ${Date.now().toString()}`, - routes: [ - { - unit: 'flat', - amount: 1, - currency: 'IDR', - }, - ], - }); - - // eslint-disable-next-line no-console - console.log('created fee rule detail:', feeRule); - - const accountV2 = await p.createV2Account({ - email: `example+${Date.now().toString()}@gmail.com`, - type: 'OWNED', - publicProfile: { - businessName: `example+${Date.now().toString()}`, - }, - }); - - // eslint-disable-next-line no-console - console.log('created account details (using V2):', accountV2); - - const getAccount = await p.getAccountByID({ - id: accountV2.id, - }); - - // eslint-disable-next-line no-console - console.log('get account details: ', getAccount); - - const updateAccount = await p.updateAccount({ - id: accountV2.id, - email: `example_updated+${Date.now().toString()}@gmail.com`, - publicProfile: { - businessName: `example_updated+${Date.now().toString()}`, - }, - }); - - // eslint-disable-next-line no-console - console.log('update account details: ', updateAccount); - - process.exit(0); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/qr_code.js b/examples/with_async/qr_code.js deleted file mode 100644 index 5f7e5d9..0000000 --- a/examples/with_async/qr_code.js +++ /dev/null @@ -1,37 +0,0 @@ -const x = require('../xendit'); - -const { QrCode } = x; -const q = new QrCode({}); - -(async function() { - try { - let qrcode = await q.createCode({ - externalID: Date.now().toString(), - type: QrCode.Type.Dynamic, - callbackURL: 'https://httpstat.us/200', - amount: 10000, - metadata: { - meta2: 'data2', - }, - }); - console.log('created QR code', qrcode); // eslint-disable-line no-console - - qrcode = await q.getCode({ externalID: qrcode.external_id }); - console.log('retrieved QR code', qrcode); // eslint-disable-line no-console - - const payment = await q.simulate({ externalID: qrcode.external_id }); - console.log('simulated payment', payment); // eslint-disable-line no-console - - let payments = await q.getPayments({ - externalID: qrcode.external_id, - from: '2021-01-04T08:09:30.000Z', - to: new Date().toISOString(), - limit: 10, - }); - // eslint-disable-next-line no-console - console.log('retrieved payments', payments); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/recurring.js b/examples/with_async/recurring.js deleted file mode 100644 index 0ce1a2c..0000000 --- a/examples/with_async/recurring.js +++ /dev/null @@ -1,155 +0,0 @@ -/* eslint-disable no-console */ -const x = require('../xendit'); - -const Recurring = x.Recurring; -const r = new Recurring({}); - -/** - * Before running this example consider the following - * 1. make sure to use a valid exampleCustomerId and examplePaymentMethodId - * 2. After plan has been deactivated - it's scheduled cycles become cancelled - * which makes impossible to be edit or cancel them - */ -const exampleBusinessId = '6066ebf68204c740b61aa3c1'; -const exampleReferenceId = 'cf53cdbb-f92d-4220-835d-b907915d9551'; -const exampleCustomerId = 'ba0e4584-4fc4-4cb2-a835-6191500540ef'; -const examplePaymentMethodId = 'pm-fb182048-7448-4ffe-877a-a29efa3d7195'; -const scheduledTimestamp = new Date(Date.now() + 3600 * 1000).toISOString(); - -let scheduleId; -let planId; - -async function runSchedules() { - const createdSchedule = await r.createSchedule({ - referenceId: exampleReferenceId, - businessId: exampleBusinessId, - interval: 'DAY', - intervalCount: 1, - totalRecurrence: 3, - anchorDate: '2022-01-01T00:00:00.001Z', - retryInterval: 'DAY', - retryIntervalCount: 1, - totalRetry: 1, - failedAttemptNotifications: [1], - }); - scheduleId = createdSchedule.id; - - console.log('created recurring schedule:', createdSchedule); - - const schedule = await r.getSchedule({ - id: createdSchedule.id, - businessId: exampleBusinessId, - }); - - console.log('recurring schedule:', schedule); - - const editedSchedule = await r.editSchedule({ - id: schedule.id, - businessId: exampleBusinessId, - interval: 'MONTH', - intervalCount: 1, - }); - - console.log('edited recurring schedule:', editedSchedule); -} - -async function runPlans() { - const createdPlan = await r.createPlan({ - businessId: exampleBusinessId, - referenceId: exampleReferenceId, - customerId: exampleCustomerId, - recurringAction: 'PAYMENT', - currency: 'IDR', - amount: 1000, - paymentMethods: [ - { - paymentMethodId: examplePaymentMethodId, - rank: 1, - }, - ], - scheduleId: scheduleId, - immediateActionType: null, - notification_config: { - recurring_created: ['SMS'], - recurring_succeeded: ['SMS'], - recurring_failed: ['SMS'], - }, - failedCycleAction: 'STOP', - metadata: null, - }); - planId = createdPlan.id; - - console.log('created recurring plan:', createdPlan); - - const plan = await r.getPlan({ - id: createdPlan.id, - businessId: exampleBusinessId, - }); - - console.log('recurring plan:', plan); - - const editedPlan = await r.editPlan({ - id: plan.id, - businessId: exampleBusinessId, - amount: 1000, - }); - - console.log('edited recurring plan:', editedPlan); - - /** This is commented out to allow cycle "edit" and "cancel" actions */ - // const deactivatedPlan = await r.deactivatePlan({ - // id: plan.id, - // businessId: exampleBusinessId, - // }); - - // console.log('deactivated recurring plan:', deactivatedPlan); -} - -async function runCycles() { - const response = await r.getAllCycles({ - planId: planId, - businessId: exampleBusinessId, - limit: 2, - }); - - console.log('recurring cycles:', response.data); - console.log('has more recurring cycles:', response.has_more); - - const cycle = await r.getCycle({ - id: response.data[0].id, - planId: planId, - businessId: exampleBusinessId, - }); - - console.log('recurring cycle:', cycle); - - const editedCycle = await r.editCycle({ - id: cycle.id, - planId: planId, - businessId: exampleBusinessId, - amount: 1000, - currency: 'IDR', - scheduledTimestamp: scheduledTimestamp, - }); - - console.log('edited recurring cycle:', editedCycle); - - const canceledCycle = await r.cancelCycle({ - id: cycle.id, - planId: cycle.plan_id, - businessId: exampleBusinessId, - }); - - console.log('canceled recurring cycle:', canceledCycle); -} - -(async function() { - try { - await runSchedules(); - await runPlans(); - await runCycles(); - } catch (e) { - console.error(e); - process.exit(1); - } -})(); diff --git a/examples/with_async/recurring_payment.js b/examples/with_async/recurring_payment.js deleted file mode 100644 index 74c6f06..0000000 --- a/examples/with_async/recurring_payment.js +++ /dev/null @@ -1,43 +0,0 @@ -const x = require('../xendit'); - -const RecurringPayment = x.RecurringPayment; -const rp = new RecurringPayment({}); - -(async function() { - try { - const payment = await rp.createPayment({ - externalID: '123', - payerEmail: 'stanley@xendit.co', - description: 'Payment for something', - amount: 10000, - interval: RecurringPayment.Interval.Month, - intervalCount: 1, - }); - // eslint-disable-next-line no-console - console.log('recurring payment created:', payment); - - const { id } = payment; - const retrievedPayment = await rp.getPayment({ id }); - // eslint-disable-next-line no-console - console.log('recurring payment details:', retrievedPayment); - - const editedPayment = await rp.editPayment({ id, amount: 20000 }); - // eslint-disable-next-line no-console - console.log('recurring payment updated:', editedPayment.id); - - const pausedPayment = await rp.pausePayment({ id }); - // eslint-disable-next-line no-console - console.log('recurring payment paused:', pausedPayment.id); - - const resumedPayment = await rp.resumePayment({ id }); - // eslint-disable-next-line no-console - console.log('recurring payment resumed:', resumedPayment.id); - - const stoppedPayment = await rp.stopPayment({ id }); - // eslint-disable-next-line no-console - console.log('recurring payment stopped:', stoppedPayment.id); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/refund.js b/examples/with_async/refund.js deleted file mode 100644 index 342cd98..0000000 --- a/examples/with_async/refund.js +++ /dev/null @@ -1,28 +0,0 @@ -const x = require('../xendit'); - -const { Refund } = x; -const r = new Refund({}); - -(async function() { - try { - let refund = await r.createRefund({ - invoice_id: '63676ed0eb10cf38ce0550b7', - reason: 'OTHERS', - amount: 1, - }); - console.log('created refund', refund); // eslint-disable-line no-console - - const refundDetails = await r.getRefundById({ id: refund.id }); - // eslint-disable-next-line no-console - console.log('retrieved refund', refundDetails); - - const refundList = await r.listRefunds({}); - // eslint-disable-next-line no-console - console.log('list of refunds', refundList); - - process.exit(0); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/regional_retail_outlet.js b/examples/with_async/regional_retail_outlet.js deleted file mode 100644 index 0f2dd56..0000000 --- a/examples/with_async/regional_retail_outlet.js +++ /dev/null @@ -1,36 +0,0 @@ -const x = require('../xendit'); - -const RegionalRetailOutlet = x.RegionalRetailOutlet; -const ro = new RegionalRetailOutlet({}); - -(async function() { - try { - const pmCode = await ro.createPaymentCode({ - referenceId: 'test_dharma_61', - channelCode: 'CEBUANA', - customerName: 'Dharma', - amount: 50, - currency: 'PHP', - market: 'PH', - }); - // eslint-disable-next-line no-console - console.log('fixed payment code created:', pmCode); - - const { id } = pmCode; - const retrievedPmCode = await ro.getPaymentCode({ id }); - // eslint-disable-next-line no-console - console.log('fixed payment code details:', retrievedPmCode); - - const updatedPmCode = await ro.updatePaymentCode({ - id, - customerName: 'DharmaLain', - }); - // eslint-disable-next-line no-console - console.log('updated payment code details:', updatedPmCode); - - process.exit(0); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/report.js b/examples/with_async/report.js deleted file mode 100644 index c239133..0000000 --- a/examples/with_async/report.js +++ /dev/null @@ -1,39 +0,0 @@ -const x = require('../xendit'); - -const { Report } = x; -const r = new Report({}); - -function sleepFor(sleepDuration) { - var now = new Date().getTime(); - while (new Date().getTime() < now + sleepDuration) { - /* Do nothing */ - } -} - -(async function() { - try { - const genReport = await r.generateReport({ - type: 'BALANCE_HISTORY', - // yesterday's date - filterDateFrom: new Date(new Date().getTime() - 24 * 60 * 60 * 1000), - filterDateTo: new Date(), - format: 'CSV', - currency: 'IDR', - }); - // eslint-disable-next-line no-console - console.log('generate report:', genReport); - - sleepFor(3000); - - const getReport = await r.getReport({ - id: genReport.id, - }); - // eslint-disable-next-line no-console - console.log('get report', getReport); - process.exit(0); - } catch (e) { - // eslint-disable-next-line no-console - console.error(e); - process.exit(1); - } -})(); diff --git a/examples/with_async/retail_outlet.js b/examples/with_async/retail_outlet.js deleted file mode 100644 index d28013d..0000000 --- a/examples/with_async/retail_outlet.js +++ /dev/null @@ -1,46 +0,0 @@ -const x = require('../xendit'); - -const RetailOutlet = x.RetailOutlet; -const ro = new RetailOutlet({}); - -(async function() { - try { - const pmCode = await ro.createFixedPaymentCode({ - externalID: '123', - retailOutletName: 'ALFAMART', - name: 'Ervan Adetya', - expectedAmt: 10000, - }); - // eslint-disable-next-line no-console - console.log('fixed payment code created:', pmCode); - - const { id } = pmCode; - const retrievedPmCode = await ro.getFixedPaymentCode({ id }); - // eslint-disable-next-line no-console - console.log('fixed payment code details:', retrievedPmCode); - - const updatedPmCode = await ro.updateFixedPaymentCode({ - id, - expectedAmt: 12000, - }); - // eslint-disable-next-line no-console - console.log('updated payment code details:', updatedPmCode); - - await ro.simulatePayment({ - retailOutletName: 'ALFAMART', - paymentCode: updatedPmCode.payment_code, - transferAmount: 12000, - }); - // eslint-disable-next-line no-console - console.log('simulated payment:', updatedPmCode); - - const paymentsByCodeId = await ro.getPaymentsByFixedPaymentCodeId({ id }); - // eslint-disable-next-line no-console - console.log('payments by fixed payment code ID:', paymentsByCodeId); - - process.exit(0); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_async/transaction.js b/examples/with_async/transaction.js deleted file mode 100644 index 28da205..0000000 --- a/examples/with_async/transaction.js +++ /dev/null @@ -1,32 +0,0 @@ -const x = require('../xendit'); - -const { Transaction } = x; -const t = new Transaction({}); - -(async function() { - try { - const listTransactions = await t.listTransactions({ - types: ['DISBURSEMENT', 'PAYMENT'], - statuses: ['PENDING', 'SUCCESS'], - channelCategories: ['BANK'], - createdDateFrom: new Date( - new Date().getTime() - 30 * 24 * 60 * 60 * 1000, - ), - createdDateTo: new Date(), - }); - // eslint-disable-next-line no-console - console.log('list transactions', listTransactions); - - /* Will fail if there is no transaction data in the time period */ - const getTransaction = await t.getTransaction({ - id: listTransactions.data[0].id, - }); - // eslint-disable-next-line no-console - console.log('get transaction', getTransaction); - process.exit(0); - } catch (e) { - // eslint-disable-next-line no-console - console.error(e); - process.exit(1); - } -})(); diff --git a/examples/with_async/va.js b/examples/with_async/va.js deleted file mode 100644 index 62caf86..0000000 --- a/examples/with_async/va.js +++ /dev/null @@ -1,37 +0,0 @@ -const x = require('../xendit'); - -const VirtualAcc = x.VirtualAcc; -const va = new VirtualAcc({}); - -(async function() { - try { - const banks = await va.getVABanks(); - console.log('available va banks:', banks); // eslint-disable-line no-console - - const fixedAcc = await va.createFixedVA({ - externalID: '123', - bankCode: banks[0].code, - name: 'Stanley Nguyen', - }); - // eslint-disable-next-line no-console - console.log('fixed va created:', fixedAcc); - - const { id } = fixedAcc; - const retrievedAcc = await va.getFixedVA({ id }); - // eslint-disable-next-line no-console - console.log('fixed va details:', retrievedAcc); - - const updatedAcc = await va.updateFixedVA({ - id, - suggestedAmt: 20, - expectedAmt: 30, - }); - // eslint-disable-next-line no-console - console.log('updated va details:', updatedAcc); - - process.exit(0); - } catch (e) { - console.error(e); // eslint-disable-line no-console - process.exit(1); - } -})(); diff --git a/examples/with_promises/balance.js b/examples/with_promises/balance.js deleted file mode 100644 index 10df0a9..0000000 --- a/examples/with_promises/balance.js +++ /dev/null @@ -1,16 +0,0 @@ -const x = require('../xendit'); - -const { Balance } = x; -const b = new Balance({}); - -b.getBalance({ - accountType: Balance.AccountType.Holding, -}) - .then(r => { - console.log('Holding balance:', r); // eslint-disable-line no-console - process.exit(0); - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/card.js b/examples/with_promises/card.js deleted file mode 100644 index 96adbb5..0000000 --- a/examples/with_promises/card.js +++ /dev/null @@ -1,73 +0,0 @@ -const x = require('../xendit'); - -const Card = x.Card; -const card = new Card({}); - -// These IDs should be obtained using Xendit.js -// https://docs.xendit.co/xenpayments/payments-credit-cards-overview/credit-cards-integration-and-testing/collecting-card-details-tokenization/index.html -// You can generate sample token/authentication data and replace it below -// https://js.xendit.co/test_tokenize.html -// https://js.xendit.co/test_authenticate.html -const tokenID = '6201f056382ab2001b4bc3d6'; -const authID = '6205f8dcca71c0001bc26ae6'; - -function sleepFor(sleepDuration) { - var now = new Date().getTime(); - while (new Date().getTime() < now + sleepDuration) { - /* Do nothing */ - } -} - -card - .createCharge({ - tokenID, - authID, - amount: 10000, - // eslint-disable-next-line max-len - externalID: Date.now().toString(), // use your system's ID of the transaction - capture: false, - }) - .then(r => { - console.log('charge created:', r); // eslint-disable-line no-console - return r; - }) - .then(({ id }) => - card.captureCharge({ - chargeID: id, - amount: 10000, - }), - ) - .then(r => { - console.log('charge captured:', r); // eslint-disable-line no-console - sleepFor(3000); - return r; - }) - .then(({ id, external_id }) => - card.createRefund({ chargeID: id, externalID: external_id, amount: 5000 }), - ) - .then(res => { - console.log('refund created:', res); // eslint-disable-line no-console - process.exit(0); - }) - .then(() => - card.createPromotion({ - referenceId: Date.now().toString(), - description: '20% discount applied for all BRI cards', - binList: ['400000', '460000'], - discountPercent: 20, - channelCode: 'BRI', - currency: 'IDR', - minOriginalAmount: 25000, - maxDiscountAmount: 5000, - startTime: '2022-03-25T00:00:00.000Z', - endTime: '2022-05-25T00:00:00.000Z', - }), - ) - .then(res => { - console.log('promotion created:', res); // eslint-disable-line no-console - process.exit(0); - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/customer.js b/examples/with_promises/customer.js deleted file mode 100644 index 928dbc3..0000000 --- a/examples/with_promises/customer.js +++ /dev/null @@ -1,39 +0,0 @@ -const x = require('../xendit'); - -const { Customer } = x; -const c = new Customer({}); - -c.createCustomer({ - referenceID: new Date().toISOString(), - givenNames: 'customer 1', - email: 'customer@website.com', - mobileNumber: '+6281212345678', - description: 'dummy customer', - middleName: 'middle', - surname: 'surname', - addresses: [], - apiVersion: '2020-05-19', -}) - .then(r => { - console.log('created customer', r); // eslint-disable-line no-console - return r; - }) - .then(r => c.getCustomer({ id: r.id, apiVersion: '2020-05-19' })) - .then(r => { - console.log('retrieved customer', r); // eslint-disable-line no-console - return r; - }) - .then(r => - c.getCustomerByReferenceID({ - referenceID: r.reference_id, - apiVersion: '2020-05-19', - }), - ) - .then(r => { - console.log('retrieved customers', r); // eslint-disable-line no-console - return r[0]; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/direct_debit.js b/examples/with_promises/direct_debit.js deleted file mode 100644 index 539b8c6..0000000 --- a/examples/with_promises/direct_debit.js +++ /dev/null @@ -1,154 +0,0 @@ -const x = require('../xendit'); - -const { DirectDebit, Customer } = x; -const dd = new DirectDebit({}); -const c = new Customer({}); - -c.createCustomer({ - referenceID: new Date().toISOString(), - givenNames: 'customer 1', - email: 'customer@website.com', - mobileNumber: '+6281212345678', - description: 'dummy customer', - middleName: 'middle', - surname: 'surname', - addresses: [], - apiVersion: '2020-05-19', -}) - .then(r => - dd.initializeTokenization({ - customerID: r.id, - channelCode: 'DC_BRI', - properties: { - accountMobileNumber: '+62818555988', - cardLastFour: '8888', - cardExpiry: '06/24', - accountEmail: 'test.email@xendit.co', - }, - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('initialized tokenization', r); - return r; - }) - .then(r => - dd.validateOTPforLinkedAccount({ - tokenID: r.id, - otpCode: '333000', - }), - ) - .then(r => { - console.log('validated account', r); // eslint-disable-line no-console - return r; - }) - .then(r => - Promise.all([ - r.customer_id, - dd.retrieveAccountsByTokenID({ tokenID: r.id }), - ]), - ) - .then(([customerID, r]) => { - console.log('retrieved accounts', r); // eslint-disable-line no-console - return [customerID, r]; - }) - .then(([customerID, r]) => - dd.createPaymentMethod({ - customerID: customerID, - type: 'DEBIT_CARD', - properties: { - id: r[0].id, - }, - }), - ) - .then(r => { - console.log('created payment method', r); // eslint-disable-line no-console - return r; - }) - .then(r => - dd.getPaymentMethodsByCustomerID({ - customerID: r.customer_id, - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('retrieved payment methods', r); - return r; - }) - .then(r => - dd.createDirectDebitPayment({ - idempotencyKey: new Date().toISOString(), - referenceID: 'merchant-ref-id-ex-1', - paymentMethodID: r[0].id, - currency: 'IDR', - amount: 15000, - callbackURL: 'https://payment-callback-listener/', - enableOTP: true, - basket: [ - { - referenceID: 'product-ref-id-ex-1', - name: 'product 1', - market: 'ID', - type: 'good type', - description: 'good quality', - category: 'category', - subCategory: 'subcategory', - price: '10000', - url: 'https://product-url/', - metadata: { - meta: 'data', - }, - quantity: 15, - }, - { - referenceID: 'product-ref-id-ex-2', - name: 'product 2', - market: 'ID', - type: 'good type', - }, - ], - metadata: { - meta: 'data', - }, - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('created direct debit payment', r); - return r; - }) - .then(r => - dd.validateOTPforPayment({ - directDebitID: r.id, - otpCode: '222000', - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('validated payment', r); - return r; - }) - .then(r => - dd.getDirectDebitPaymentStatusByID({ - directDebitID: r.id, - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('retrieved direct debit payment', r); - return r; - }) - .then(r => - dd.getDirectDebitPaymentStatusByReferenceID({ - referenceID: r.reference_id, - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('retrieved direct debit payments', r); - return r; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/disbursement.js b/examples/with_promises/disbursement.js deleted file mode 100644 index e31ba81..0000000 --- a/examples/with_promises/disbursement.js +++ /dev/null @@ -1,55 +0,0 @@ -const x = require('../xendit'); - -const { Disbursement } = x; -const d = new Disbursement({}); - -d.getBanks() - .then(r => { - console.log('available banks:', r); // eslint-disable-line no-console - return r; - }) - .then(r => - r.slice(0, 5).map(b => ({ - externalID: `${b.name} - ${b.code}`, - bankCode: b.code, - accountHolderName: 'Stan', - accountNumber: '1234567890', - description: `purchase paid from ${b.name}`, - amount: 10000, - })), - ) - .then(disbursements => d.createBatch({ reference: '111', disbursements })) - .then(r => { - console.log('batch created:', r); // eslint-disable-line no-console - return d.getBanks(); - }) - .then(b => - d.create({ - externalID: `${b[0].name} - ${b[0].code} single disbursement`, - bankCode: b[0].code, - accountHolderName: 'Stan', - accountNumber: '1234567890', - description: `purchase paid from ${b[0].name}`, - amount: 10000, - }), - ) - .then(r => { - console.log('disbursement created:', r); // eslint-disable-line no-console - return r; - }) - .then(r => d.getByID({ disbursementID: r.id })) - .then(r => { - // eslint-disable-next-line no-console - console.log('disbursement retrieved from ID:', r); - return r; - }) - .then(r => d.getByExtID({ externalID: r.external_id })) - .then(r => { - // eslint-disable-next-line no-console - console.log('disbursement retrieved from extID:', r); - return r; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/ewallet.js b/examples/with_promises/ewallet.js deleted file mode 100644 index 53e2184..0000000 --- a/examples/with_promises/ewallet.js +++ /dev/null @@ -1,132 +0,0 @@ -const x = require('../xendit'); - -const { EWallet, Customer } = x; -const ew = new EWallet({}); -const c = new Customer({}); - -/* - * The entire EWallet tokenization flow, at this time, - * cannot be replicated through an example - * This is because of the system design, - * once a token is created it has - * to be verified manually by using the authorizer url. - * Subsequent methods `create payment method`, - * `get payment by ID`, and `unlink tokenization` - * can only be carried out after the manual authorization - */ - -ew.createPayment({ - externalID: Date.now().toString(), - amount: 1, - phone: '081234567890', - ewalletType: EWallet.Type.OVO, -}) - .then(r => { - // eslint-disable-next-line no-console - console.log('created payment detail:', r); - return r; - }) - .then(({ external_id, ewallet_type }) => - ew.getPayment({ - externalID: external_id, - ewalletType: ewallet_type, - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('EWallet payment detail:', r); - return r; - }) - .then(() => - ew.createEWalletCharge({ - referenceID: Date.now().toString(), - currency: 'IDR', - amount: 1688, - checkoutMethod: 'ONE_TIME_PAYMENT', - channelCode: 'ID_OVO', - channelProperties: { - mobileNumber: '+6281234567890', - }, - basket: [ - { - referenceID: 'basket-product-ref-id', - name: 'product name', - category: 'mechanics', - currency: 'IDR', - price: 50000, - quantity: 5, - type: 'wht', - subCategory: 'evr', - metadata: { - meta: 'data', - }, - }, - ], - metadata: { - meta2: 'data2', - }, - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('created ewallet payment charge:', r); - return r; - }) - .then(r => - ew.getEWalletChargeStatus({ - chargeID: r.id, - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('retrieved ewallet payment charge:', r); - return r; - }) - .then(r => - ew.voidEWalletCharge({ - chargeID: r.id, - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('voided ewallet payment charge:', r); - return r; - }) - .then(() => - c.createCustomer({ - referenceID: new Date().toISOString(), - givenNames: 'customer 1', - email: 'customer@website.com', - mobileNumber: '+6281212345678', - description: 'dummy customer', - middleName: 'middle', - surname: 'surname', - addresses: [], - apiVersion: '2020-05-19', - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('created customer:', r); - return r; - }) - .then(r => - ew.initializeTokenization({ - customerID: r.id, - channelCode: 'PH_GRABPAY', - properties: { - successRedirectURL: 'https://www.google.com', - failureRedirectURL: 'https://www.google.com', - callbackURL: 'https://www.google.com', - }, - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('initialized tokenization:', r); - return r; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/invoice.js b/examples/with_promises/invoice.js deleted file mode 100644 index 0e1f8da..0000000 --- a/examples/with_promises/invoice.js +++ /dev/null @@ -1,34 +0,0 @@ -const x = require('../xendit'); - -const { Invoice } = x; -const i = new Invoice({}); - -i.createInvoice({ - externalID: Date.now().toString(), - payerEmail: 'example@gmail.com', - description: 'Invoice for Shoes Purchase', - amount: 100000, -}) - .then(r => { - console.log('created invoice', r); // eslint-disable-line no-console - return r; - }) - .then(r => i.getInvoice({ invoiceID: r.id })) - .then(r => { - console.log('retrieved invoice', r); // eslint-disable-line no-console - return r; - }) - .then(r => i.expireInvoice({ invoiceID: r.id })) - .then(r => { - console.log('expired invoice', r); // eslint-disable-line no-console - return r; - }) - .then(() => i.getAllInvoices()) - .then(r => { - console.log('first 10 invoices', r); // eslint-disable-line no-console - return r; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/payment_methods_v2.js b/examples/with_promises/payment_methods_v2.js deleted file mode 100644 index 5b0ee02..0000000 --- a/examples/with_promises/payment_methods_v2.js +++ /dev/null @@ -1,37 +0,0 @@ -const x = require('../xendit'); - -const PaymentMethodV2 = x.PaymentMethodV2; -const pm = new PaymentMethodV2(); - -pm.createPaymentMethodV2({ - type: 'DIRECT_DEBIT', - reusability: 'ONE_TIME_USE', - customer_id: '16f72571-9b3a-43dc-b241-5b71f470202f', - country: 'ID', - direct_debit: { - channel_code: 'BRI', - channel_properties: { - mobile_number: '+6281299640904', - card_last_four: '8888', - card_expiry: '10/29', - email: 'dharma@xendit.co', - }, - }, -}) - .then(id => { - pm.authorizePaymentMethodV2({ - id, - auth_code: '333000', - }); - }) - .then(id => { - pm.getPaymentMethodByIdV2({ id }); - }) - .then(() => { - pm.listPaymentMethodV2({}); - }) - .catch(e => { - throw new Error( - `payment method integration tests failed with error: ${e.message}`, - ); - }); diff --git a/examples/with_promises/payment_request.js b/examples/with_promises/payment_request.js deleted file mode 100644 index 8fd4548..0000000 --- a/examples/with_promises/payment_request.js +++ /dev/null @@ -1,44 +0,0 @@ -const x = require('../xendit'); - -const PaymentRequest = x.PaymentRequest; -const ref = new PaymentRequest(); - -ref - .createPaymentRequest({ - amount: 1500, - currency: 'PHP', - payment_method: { - type: 'EWALLET', - ewallet: { - channel_code: 'GRABPAY', - channel_properties: { - success_return_url: 'https://redirect.me/goodstuff', - failure_return_url: 'https://redirect.me/badstuff', - }, - }, - reusability: 'ONE_TIME_USE', - }, - }) - .then(r => { - // eslint-disable-next-line no-console - console.log('payment request created:', r); - return r; - }) - .then(({ id }) => ref.getPaymentRequestById({ id })) - .then(r => { - // eslint-disable-next-line no-console - console.log('payment request details:', r); - return r; - }) - .then(() => { - return ref.listPaymentRequest({}); - }) - .then(r => { - // eslint-disable-next-line no-console - console.log(':', r); - return r; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/payout.js b/examples/with_promises/payout.js deleted file mode 100644 index 2868834..0000000 --- a/examples/with_promises/payout.js +++ /dev/null @@ -1,28 +0,0 @@ -const x = require('../xendit'); - -const { Payout } = x; -const p = new Payout({}); - -p.createPayout({ - externalID: Date.now().toString(), - amount: 10000, - email: 'stanley@xendit.co', -}) - .then(r => { - console.log('created payout:', r); // eslint-disable-line no-console - return r; - }) - .then(({ id }) => p.getPayout({ id })) - .then(r => { - console.log('retrieved payout:', r); // eslint-disable-line no-console - return r; - }) - .then(({ id }) => p.voidPayout({ id })) - .then(r => { - console.log('payout voided:', r.id); // eslint-disable-line no-console - return r; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/platform.js b/examples/with_promises/platform.js deleted file mode 100644 index cfb3edf..0000000 --- a/examples/with_promises/platform.js +++ /dev/null @@ -1,102 +0,0 @@ -const x = require('../xendit'); - -const { Platform } = x; -const p = new Platform({}); - -p.createAccount({ - accountEmail: `example+${Date.now().toString()}@gmail.com`, - type: 'OWNED', - businessProfile: { - businessName: `example+${Date.now().toString()}`, - }, -}) - .then(r => { - // eslint-disable-next-line no-console - console.log('created account details:', r); - return r; - }) - .then(({ user_id }) => - p.setCallbackURL({ - forUserID: user_id, - type: 'invoice', - url: 'https://httpstat.us/200', - }), - ) - .then(r => { - //eslint-disable-next-line no-console - console.log('callback setting response: ', r); - return r; - }) - .then(({ user_id }) => - p.createTransfer({ - reference: `example+${Date.now().toString()}`, - amount: 1, - sourceUserID: '5df358652ebad7084a70ac6c', - destinationUserID: user_id, - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('created transfer details: ', r); - return r; - }) - .then(() => - p.createFeeRule({ - name: `example+${Date.now().toString()}`, - description: `Fee rule created on ${Date.now().toString()}`, - routes: [ - { - unit: 'flat', - amount: 1, - currency: 'IDR', - }, - ], - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('created fee rule detail:', r); - return r; - }) - .then(() => - p.createV2Account({ - email: `example+${Date.now().toString()}@gmail.com`, - type: 'OWNED', - publicProfile: { - businessName: `example+${Date.now().toString()}`, - }, - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('created account details (using V2):', r); - return r; - }) - .then(r => - p.getAccountByID({ - id: r.id, - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('get account details: ', r); - return r; - }) - .then(r => - p.updateAccount({ - id: r.id, - email: `example_updated+${Date.now().toString()}@gmail.com`, - publicProfile: { - businessName: `example_updated+${Date.now().toString()}`, - }, - }), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('update account details: ', r); - return r; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/qr_code.js b/examples/with_promises/qr_code.js deleted file mode 100644 index ab8118e..0000000 --- a/examples/with_promises/qr_code.js +++ /dev/null @@ -1,49 +0,0 @@ -const x = require('../xendit'); - -const { QrCode } = x; -const q = new QrCode({}); - -q.createCode({ - externalID: Date.now().toString(), - type: QrCode.Type.Dynamic, - callbackURL: 'https://httpstat.us/200', - amount: 10000, - metadata: { - meta2: 'data2', - }, -}) - .then(r => { - console.log('created QR code', r); // eslint-disable-line no-console - return r; - }) - .then(r => q.getCode({ externalID: r.external_id })) - .then(r => { - console.log('retrieved QR code', r); // eslint-disable-line no-console - return r; - }) - .then(r => - Promise.all([r.external_id, q.simulate({ externalID: r.external_id })]), - ) - .then(([externalID, r]) => { - console.log('simulated payment', r); // eslint-disable-line no-console - return externalID; - }) - .then(r => - Promise.all([ - r, - q.getPayments({ - externalID: r, - from: '2021-01-04T08:09:30.000Z', - to: new Date().toISOString(), - limit: 10, - }), - ]), - ) - .then(([externalID, r]) => { - console.log('retrieved payments', r); // eslint-disable-line no-console - return externalID; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/recurring.js b/examples/with_promises/recurring.js deleted file mode 100644 index 0f553cc..0000000 --- a/examples/with_promises/recurring.js +++ /dev/null @@ -1,184 +0,0 @@ -/* eslint-disable no-console */ -const x = require('../xendit'); - -const Recurring = x.Recurring; -const r = new Recurring({}); - -/** - * Before running this example consider the following - * 1. make sure to use a valid exampleCustomerId and examplePaymentMethodId - * 2. After plan has been deactivated - it's scheduled cycles become cancelled - * which makes impossible to be edit or cancel them - */ -const exampleBusinessId = '6066ebf68204c740b61aa3c1'; -const exampleReferenceId = 'cf53cdbb-f92d-4220-835d-b907915d9551'; -const exampleCustomerId = 'ba0e4584-4fc4-4cb2-a835-6191500540ef'; -const examplePaymentMethodId = 'pm-fb182048-7448-4ffe-877a-a29efa3d7195'; -const scheduledTimestamp = new Date(Date.now() + 3600 * 1000).toISOString(); - -let scheduleId; -let planId; - -function runSchedules() { - return r - .createSchedule({ - referenceId: exampleReferenceId, - businessId: exampleBusinessId, - interval: 'DAY', - intervalCount: 1, - totalRecurrence: 3, - anchorDate: '2022-01-01T00:00:00.001Z', - retryInterval: 'DAY', - retryIntervalCount: 1, - totalRetry: 1, - failedAttemptNotifications: [1], - }) - .then(createdSchedule => { - scheduleId = createdSchedule.id; - console.log('created recurring schedule:', createdSchedule); - return createdSchedule; - }) - .then(createdSchedule => { - return r.getSchedule({ - id: createdSchedule.id, - businessId: exampleBusinessId, - }); - }) - .then(schedule => { - console.log('recurring schedule:', schedule); - return schedule; - }) - .then(schedule => { - return r.editSchedule({ - id: schedule.id, - businessId: exampleBusinessId, - interval: 'MONTH', - intervalCount: 1, - }); - }) - .then(editedSchedule => { - console.log('edited recurring schedule:', editedSchedule); - }); -} - -function runPlans() { - return r - .createPlan({ - businessId: exampleBusinessId, - referenceId: exampleReferenceId, - customerId: exampleCustomerId, - recurringAction: 'PAYMENT', - currency: 'IDR', - amount: 1000, - paymentMethods: [ - { - paymentMethodId: examplePaymentMethodId, - rank: 1, - }, - ], - scheduleId: scheduleId, - immediateActionType: null, - notification_config: { - recurring_created: ['SMS'], - recurring_succeeded: ['SMS'], - recurring_failed: ['SMS'], - }, - failedCycleAction: 'STOP', - metadata: null, - }) - .then(createdPlan => { - planId = createdPlan.id; - console.log('created recurring plan:', createdPlan); - return createdPlan; - }) - .then(createdPlan => { - return r.getPlan({ - id: createdPlan.id, - businessId: exampleBusinessId, - }); - }) - .then(plan => { - console.log('recurring plan:', plan); - return plan; - }) - .then(plan => { - return r.editPlan({ - id: plan.id, - businessId: exampleBusinessId, - amount: 1000, - }); - }) - .then(editedPlan => { - console.log('edited recurring plan:', editedPlan); - return editedPlan; - }); - /** This is commented out to allow cycle "edit" and "cancel" actions */ - // .then(plan => { - // return r.deactivatePlan({ - // id: plan.id, - // businessId: exampleBusinessId, - // }); - // }) - // .then(deactivatedPlan => { - // console.log('deactivated recurring plan:', deactivatedPlan); - // }) -} - -function runCycles() { - return r - .getAllCycles({ - planId: planId, - businessId: exampleBusinessId, - limit: 2, - }) - .then(response => { - console.log('recurring cycles:', response.data); - console.log('has more recurring cycles:', response.has_more); - return response; - }) - .then(response => { - return r.getCycle({ - id: response.data[0].id, - planId: planId, - businessId: exampleBusinessId, - }); - }) - .then(cycle => { - console.log('recurring cycle:', cycle); - return cycle; - }) - .then(cycle => { - return r.editCycle({ - id: cycle.id, - planId: planId, - businessId: exampleBusinessId, - amount: 1000, - currency: 'IDR', - scheduledTimestamp: scheduledTimestamp, - }); - }) - .then(editedCycle => { - console.log('edited recurring cycle:', editedCycle); - return editedCycle; - }) - .then(editedCycle => { - return r.cancelCycle({ - id: editedCycle.id, - planId: planId, - businessId: exampleBusinessId, - }); - }) - .then(canceledCycle => { - console.log('canceled recurring cycle:', canceledCycle); - }); -} - -(function() { - runSchedules() - .then(() => runPlans()) - .then(() => runCycles()) - .catch(e => { - console.error(e); - process.exit(1); - }); -})(); diff --git a/examples/with_promises/recurring_payment.js b/examples/with_promises/recurring_payment.js deleted file mode 100644 index 70c7f11..0000000 --- a/examples/with_promises/recurring_payment.js +++ /dev/null @@ -1,52 +0,0 @@ -const x = require('../xendit'); - -const RecurringPayment = x.RecurringPayment; -const rp = new RecurringPayment({}); - -rp.createPayment({ - externalID: '123', - payerEmail: 'stanley@xendit.co', - description: 'Payment for something', - amount: 10000, - interval: RecurringPayment.Interval.Month, - intervalCount: 1, -}) - .then(r => { - // eslint-disable-next-line no-console - console.log('recurring payment created:', r); - return r; - }) - .then(({ id }) => rp.getPayment({ id })) - .then(r => { - // eslint-disable-next-line no-console - console.log('recurring payment details:', r); - return r; - }) - .then(({ id }) => rp.editPayment({ id, amount: 20000 })) - .then(r => { - // eslint-disable-next-line no-console - console.log('recurring payment updated:', r.id); - return r; - }) - .then(({ id }) => rp.pausePayment({ id })) - .then(r => { - // eslint-disable-next-line no-console - console.log('recurring payment paused:', r.id); - return r; - }) - .then(({ id }) => rp.resumePayment({ id })) - .then(r => { - // eslint-disable-next-line no-console - console.log('recurring payment resumed:', r.id); - return r; - }) - .then(({ id }) => rp.stopPayment({ id })) - .then(r => { - // eslint-disable-next-line no-console - console.log('recurring payment stopped:', r.id); - return r; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/refund.js b/examples/with_promises/refund.js deleted file mode 100644 index 257f451..0000000 --- a/examples/with_promises/refund.js +++ /dev/null @@ -1,34 +0,0 @@ -const x = require('../xendit'); - -const Refund = x.Refund; -const ref = new Refund(); - -ref - .createRefund({ - invoice_id: '63676ed0eb10cf38ce0550b7', - reason: 'OTHERS', - amount: 1, - }) - .then(r => { - // eslint-disable-next-line no-console - console.log('refund created:', r); - return r; - }) - .then(({ id }) => ref.getRefundById({ id })) - .then(r => { - // eslint-disable-next-line no-console - console.log('refund details:', r); - return r; - }) - .then(() => { - return ref.listRefunds({}); - }) - .then(r => { - // eslint-disable-next-line no-console - console.log(':', r); - return r; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/regional_retail_outlet.js b/examples/with_promises/regional_retail_outlet.js deleted file mode 100644 index 412e9c5..0000000 --- a/examples/with_promises/regional_retail_outlet.js +++ /dev/null @@ -1,39 +0,0 @@ -const x = require('../xendit'); - -const RegionalRetailOutlet = x.RegionalRetailOutlet; -const ro = new RegionalRetailOutlet(); - -ro.createPaymentCode({ - referenceId: 'test_dharma_4', - channelCode: 'CEBUANA', - customerName: 'Dharma', - amount: 50, - currency: 'PHP', - market: 'PH', -}) - .then(r => { - // eslint-disable-next-line no-console - console.log('fixed payment code created:', r); - return r; - }) - .then(({ id }) => ro.getPaymentCode({ id })) - .then(r => { - // eslint-disable-next-line no-console - console.log('fixed payment code details:', r); - return r; - }) - .then(({ id }) => { - return ro.updatePaymentCode({ - id, - customerName: 'DharmaLain', - }); - }) - .then(r => { - // eslint-disable-next-line no-console - console.log('updated payment code details:', r); - return r; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/report.js b/examples/with_promises/report.js deleted file mode 100644 index 02e5db3..0000000 --- a/examples/with_promises/report.js +++ /dev/null @@ -1,39 +0,0 @@ -const x = require('../xendit'); - -const { Report } = x; -const r = new Report({}); - -function sleepFor(sleepDuration) { - var now = new Date().getTime(); - while (new Date().getTime() < now + sleepDuration) { - /* Do nothing */ - } -} - -r.generateReport({ - type: 'BALANCE_HISTORY', - // Yesterday's Date - filterDateFrom: new Date(new Date().getTime() - 24 * 60 * 60 * 1000), - filterDateTo: new Date(), - format: 'CSV', - currency: 'IDR', -}) - .then(r => { - // eslint-disable-next-line no-console - console.log('generated report:', r); - return r; - }) - .then(r => { - sleepFor(3000); - return r; - }) - .then(({ id }) => r.getReport({ id })) - .then(r => { - // eslint-disable-next-line no-console - console.log('get report', r); - return r; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/retail_outlet.js b/examples/with_promises/retail_outlet.js deleted file mode 100644 index 8c25328..0000000 --- a/examples/with_promises/retail_outlet.js +++ /dev/null @@ -1,58 +0,0 @@ -const x = require('../xendit'); - -const RetailOutlet = x.RetailOutlet; -const ro = new RetailOutlet({}); - -ro.createFixedPaymentCode({ - externalID: '123', - retailOutletName: 'ALFAMART', - name: 'Ervan Adetya', - expectedAmt: 10000, -}) - .then(r => { - // eslint-disable-next-line no-console - console.log('fixed payment code created:', r); - return r; - }) - .then(({ id }) => ro.getFixedPaymentCode({ id })) - .then(r => { - // eslint-disable-next-line no-console - console.log('fixed payment code details:', r); - return r; - }) - .then(({ id }) => { - return ro.updateFixedPaymentCode({ - id, - expectedAmt: 12000, - }); - }) - .then(r => { - // eslint-disable-next-line no-console - console.log('updated payment code details:', r); - return r; - }) - .then(({ id, payment_code }) => - Promise.all([ - id, - ro.simulatePayment({ - retailOutletName: 'ALFAMART', - paymentCode: payment_code, - transferAmount: 12000, - }), - ]), - ) - .then(r => { - // eslint-disable-next-line no-console - console.log('simulated payment:', r); - return r; - }) - .then(([id]) => ro.getPaymentsByFixedPaymentCodeId({ id })) - .then(r => { - // eslint-disable-next-line no-console - console.log('payments by fixed payment code ID:', r); - return r; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/transaction.js b/examples/with_promises/transaction.js deleted file mode 100644 index e26b7fd..0000000 --- a/examples/with_promises/transaction.js +++ /dev/null @@ -1,28 +0,0 @@ -const x = require('../xendit'); - -const { Transaction } = x; -const t = new Transaction({}); - -t.listTransactions({ - types: ['DISBURSEMENT', 'PAYMENT'], - statuses: ['PENDING', 'SUCCESS'], - channelCategories: ['BANK'], - createdDateFrom: new Date(new Date().getTime() - 30 * 24 * 60 * 60 * 1000), - createdDateTo: new Date(), -}) - .then(res => { - // eslint-disable-next-line no-console - console.log('list transactions:', res); - return res; - }) - // will fail if there are no transactions in this time period - .then(res => t.getTransaction({ id: res.data[0].id })) - .then(res => { - // eslint-disable-next-line no-console - console.log('get transaction', res); - return res; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/with_promises/va.js b/examples/with_promises/va.js deleted file mode 100644 index 05b0f44..0000000 --- a/examples/with_promises/va.js +++ /dev/null @@ -1,41 +0,0 @@ -const x = require('../xendit'); - -const VirtualAcc = x.VirtualAcc; -const va = new VirtualAcc({}); - -va.getVABanks() - .then(r => { - console.log('available va banks:', r); // eslint-disable-line no-console - return r; - }) - .then(banks => { - return va.createFixedVA({ - externalID: '123', - bankCode: banks[0].code, - name: 'Stanley Nguyen', - }); - }) - .then(r => { - console.log('fixed va created:', r); // eslint-disable-line no-console - return r; - }) - .then(({ id }) => va.getFixedVA({ id })) - .then(r => { - console.log('fixed va details:', r); // eslint-disable-line no-console - return r; - }) - .then(({ id }) => { - return va.updateFixedVA({ - id, - suggestedAmt: 20, - expectedAmt: 30, - }); - }) - .then(r => { - console.log('updated va details:', r); // eslint-disable-line no-console - return r; - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/examples/xendit.js b/examples/xendit.js deleted file mode 100644 index 8470779..0000000 --- a/examples/xendit.js +++ /dev/null @@ -1,12 +0,0 @@ -// For actual usage, this should be require('xendit-node') -const Xendit = require('../src/xendit'); -const dotenv = require('dotenv'); - -dotenv.config(); - -const x = new Xendit({ - secretKey: process.env.SECRET_KEY, - xenditURL: process.env.XENDIT_URL, -}); - -module.exports = x; diff --git a/images/header.jpg b/images/header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..13e306a1dea0b42a6cc0ddb6697e2d33f6d22f95 GIT binary patch literal 134095 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 literal 0 HcmV?d00001 diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 20587b5..0000000 --- a/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import Xendit from './src/xendit'; - -export = Xendit; diff --git a/index.js b/index.js deleted file mode 100644 index e783668..0000000 --- a/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./src/xendit'); diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..22712f4 --- /dev/null +++ b/index.ts @@ -0,0 +1,73 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './runtime'; + +import { Transaction, Balance } from './balance_and_transaction'; +export { Transaction, Balance } from './balance_and_transaction'; + +import { PaymentRequest } from './payment_request'; +export { PaymentRequest } from './payment_request'; + +import { PaymentMethod } from './payment_method'; +export { PaymentMethod } from './payment_method'; + +import { Refund } from './refund'; +export { Refund } from './refund'; + +import { Invoice } from './invoice'; +export { Invoice } from './invoice'; + +import { Payout } from './payout'; +export { Payout } from './payout'; + + +export interface XenditOpts { + secretKey: string; + xenditURL?: string; +} +export class Xendit { + opts: XenditOpts; + Transaction: Transaction; + Balance: Balance; + PaymentRequest: PaymentRequest; + PaymentMethod: PaymentMethod; + Refund: Refund; + Invoice: Invoice; + Payout: Payout; + + + constructor({ secretKey: _secretKey, xenditURL: _xenditURL }: XenditOpts) { + const secretKey = _secretKey || '' + const xenditURL = _xenditURL || 'https://api.xendit.co'; + + if (secretKey.startsWith('xnd_development_')) { + console.warn(`You are using Xendit's TEST secret key. Please use your LIVE secret key when you are ready to go live.`) + } else if (secretKey.startsWith('xnd_production_')) { + // do nothing + } else { + console.error(`Invalid secret key provided. Please use your Xendit secret key that starts with 'xnd_'`) + } + + this.opts = { + secretKey, + xenditURL + } + + + this.Transaction = new Transaction(this.opts); + this.Balance = new Balance(this.opts); + + this.PaymentRequest = new PaymentRequest(this.opts); + + this.PaymentMethod = new PaymentMethod(this.opts); + + this.Refund = new Refund(this.opts); + + this.Invoice = new Invoice(this.opts); + + this.Payout = new Payout(this.opts); + + } +} + +export default Xendit; \ No newline at end of file diff --git a/integration_test/balance.test.js b/integration_test/balance.test.js deleted file mode 100644 index 7861f9c..0000000 --- a/integration_test/balance.test.js +++ /dev/null @@ -1,18 +0,0 @@ -const x = require('./xendit.test'); - -const { Balance } = x; -const b = new Balance({}); - -module.exports = function() { - return b - .getBalance() - .then(() => { - // eslint-disable-next-line no-console - console.log('Balance integration test done...'); - }) - .catch(e => { - throw new Error( - `Balance integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/card.test.js b/integration_test/card.test.js deleted file mode 100644 index f589f16..0000000 --- a/integration_test/card.test.js +++ /dev/null @@ -1,30 +0,0 @@ -const x = require('./xendit.test'); - -const Card = x.Card; -const card = new Card({}); -// 5e046a736113354249aab8bd old charge -module.exports = function() { - return card - .getCharge({ chargeID: '623d397a360c32001b0aeeda' }) - .then(() => - card.createPromotion({ - referenceId: Date.now().toString(), - description: '20% discount applied for all BRI cards', - binList: ['400000', '460000'], - discountPercent: 20, - channelCode: 'BRI', - currency: 'IDR', - minOriginalAmount: 25000, - maxDiscountAmount: 5000, - startTime: '2022-03-25T00:00:00.000Z', - endTime: '2025-05-25T00:00:00.000Z', - }), - ) - .then(() => { - // eslint-disable-next-line no-console - console.log('Card integration test done...'); - }) - .catch(e => { - throw new Error(`Card integration tests failed with error: ${e.message}`); - }); -}; diff --git a/integration_test/customer.test.js b/integration_test/customer.test.js deleted file mode 100644 index d1b9a69..0000000 --- a/integration_test/customer.test.js +++ /dev/null @@ -1,30 +0,0 @@ -const x = require('./xendit.test'); - -const { Customer } = x; -const c = new Customer({}); - -module.exports = function() { - return c - .createCustomer({ - referenceID: new Date().toISOString(), - givenNames: 'customer 1', - email: 'customer@website.com', - mobileNumber: '+6281212345678', - description: 'dummy customer', - middleName: 'middle', - surname: 'surname', - addresses: [], - apiVersion: '2020-05-19', - }) - .then(r => c.getCustomer({ id: r.id })) - .then(r => c.getCustomerByReferenceID({ referenceID: r.reference_id })) - .then(() => { - // eslint-disable-next-line no-console - console.log('Customer integration test done...'); - }) - .catch(e => { - throw new Error( - `Customer integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/direct_debit.test.js b/integration_test/direct_debit.test.js deleted file mode 100644 index bd8b63a..0000000 --- a/integration_test/direct_debit.test.js +++ /dev/null @@ -1,122 +0,0 @@ -const x = require('./xendit.test'); - -const { DirectDebit, Customer } = x; -const dd = new DirectDebit({}); -const c = new Customer({}); - -module.exports = function() { - return c - .createCustomer({ - referenceID: new Date().toISOString(), - givenNames: 'customer 1', - email: 'customer@website.com', - mobileNumber: '+6281212345678', - description: 'dummy customer', - middleName: 'middle', - surname: 'surname', - addresses: [], - apiVersion: '2020-05-19', - }) - .then(r => - dd.initializeTokenization({ - customerID: r.id, - channelCode: 'DC_BRI', - properties: { - accountMobileNumber: '+62818555988', - cardLastFour: '8888', - cardExpiry: '06/24', - accountEmail: 'test.email@xendit.co', - }, - }), - ) - .then(r => - dd.validateOTPforLinkedAccount({ - tokenID: r.id, - otpCode: '333000', - }), - ) - .then(r => - Promise.all([ - r.customer_id, - dd.retrieveAccountsByTokenID({ tokenID: r.id }), - ]), - ) - .then(([customerID, r]) => - dd.createPaymentMethod({ - customerID: customerID, - type: 'DEBIT_CARD', - properties: { - id: r[0].id, - }, - }), - ) - .then(r => - dd.getPaymentMethodsByCustomerID({ - customerID: r.customer_id, - }), - ) - .then(r => - dd.createDirectDebitPayment({ - idempotencyKey: new Date().toISOString(), - apiVersion: null, - referenceID: 'merchant-ref-id-ex-1', - paymentMethodID: r[0].id, - currency: 'IDR', - amount: 15000, - callbackURL: 'https://payment-callback-listener/', - enableOTP: true, - basket: [ - { - referenceID: 'product-ref-id-ex-1', - name: 'product 1', - market: 'ID', - type: 'good type', - description: 'good quality', - category: 'category', - subCategory: 'subcategory', - price: '10000', - url: 'https://product-url/', - metadata: { - meta: 'data', - }, - quantity: 15, - }, - { - referenceID: 'product-ref-id-ex-2', - name: 'product 2', - market: 'ID', - type: 'good type', - }, - ], - metadata: { - meta: 'data', - }, - }), - ) - .then(r => - dd.validateOTPforPayment({ - directDebitID: r.id, - otpCode: '222000', - apiVersion: null, - }), - ) - .then(r => - dd.getDirectDebitPaymentStatusByID({ - directDebitID: r.id, - }), - ) - .then(r => - dd.getDirectDebitPaymentStatusByReferenceID({ - referenceID: r.reference_id, - }), - ) - .then(() => { - // eslint-disable-next-line no-console - console.log('Direct debit integration test done...'); - }) - .catch(e => { - throw new Error( - `Direct debit integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/disbursement.test.js b/integration_test/disbursement.test.js deleted file mode 100644 index 9ec54a6..0000000 --- a/integration_test/disbursement.test.js +++ /dev/null @@ -1,42 +0,0 @@ -const x = require('./xendit.test'); - -const { Disbursement } = x; -const d = new Disbursement({}); - -module.exports = function() { - return d - .getBanks() - .then(r => - r.slice(0, 5).map(b => ({ - externalID: `${b.name} - ${b.code}`, - bankCode: b.code, - accountHolderName: 'Stan', - accountNumber: '1234567890', - description: `purchase paid from ${b.name}`, - amount: 10000, - })), - ) - .then(disbursements => d.createBatch({ reference: '111', disbursements })) - .then(() => d.getBanks()) - .then(b => - d.create({ - externalID: `${b[0].name} - ${b[0].code} single disbursement`, - bankCode: b[0].code, - accountHolderName: 'Stan', - accountNumber: '1234567890', - description: `purchase paid from ${b[0].name}`, - amount: 10000, - }), - ) - .then(r => d.getByID({ disbursementID: r.id })) - .then(r => d.getByExtID({ externalID: r.external_id })) - .then(() => { - // eslint-disable-next-line no-console - console.log('Disbursement integration test done...'); - }) - .catch(e => { - throw new Error( - `Disbursement integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/ewallet.test.js b/integration_test/ewallet.test.js deleted file mode 100644 index a6f11a8..0000000 --- a/integration_test/ewallet.test.js +++ /dev/null @@ -1,91 +0,0 @@ -const x = require('./xendit.test'); - -const { EWallet, Customer } = x; -const ew = new EWallet({}); -const c = new Customer({}); - -/* - * The entire EWallet tokenization flow, at this time, - * cannot be replicated through an integration test - * This is because of the system design, - * once a token is created it has - * to be verified manually by using the authorizer url. - * Subsequent methods `create payment method`, - * `get payment by ID`, and `unlink tokenization` - * can only be carried out after the manual authorization - */ - -module.exports = function() { - return ew - .createEWalletCharge({ - referenceID: Date.now().toString(), - currency: 'IDR', - amount: 1688, - checkoutMethod: 'ONE_TIME_PAYMENT', - channelCode: 'ID_OVO', - channelProperties: { - mobileNumber: '+6281234567890', - }, - basket: [ - { - referenceID: 'basket-product-ref-id', - name: 'product name', - category: 'mechanics', - currency: 'IDR', - price: 50000, - quantity: 5, - type: 'wht', - subCategory: 'evr', - metadata: { - meta: 'data', - }, - }, - ], - metadata: { - meta2: 'data2', - }, - }) - .then(r => - ew.getEWalletChargeStatus({ - chargeID: r.id, - }), - ) - .then(r => - ew.voidEWalletCharge({ - chargeID: r.id, - }), - ) - .then(() => - c.createCustomer({ - referenceID: new Date().toISOString(), - givenNames: 'Test Customer', - email: 'customer_test@website.com', - mobileNumber: '+6281212345678', - description: 'dummy customer', - middleName: 'middle', - surname: 'surname', - addresses: [], - apiVersion: '2020-05-19', - }), - ) - .then(r => - ew.initializeTokenization({ - customerID: r.id, - channelCode: 'PH_GRABPAY', - properties: { - successRedirectURL: 'https://www.google.com', - failureRedirectURL: 'https://www.google.com', - callbackURL: 'https://www.google.com', - }, - }), - ) - .then(() => { - // eslint-disable-next-line no-console - console.log('EWallet integration test done...'); - }) - .catch(e => { - throw new Error( - `Ewallet integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/index.js b/integration_test/index.js deleted file mode 100644 index d5379e4..0000000 --- a/integration_test/index.js +++ /dev/null @@ -1,30 +0,0 @@ -console.log('Starting Integration Test...'); // eslint-disable-line no-console -Promise.all([ - require('./card.test')(), - require('./disbursement.test')(), - require('./invoice.test')(), - require('./va.test')(), - require('./payout.test')(), - require('./recurring.test')(), - require('./balance.test')(), - require('./retail_outlet.test')(), - // require('./ewallet.test')(), - require('./qr_code.test')(), - require('./platform.test')(), - require('./regional_retail_outlet.test'), - require('./customer.test')(), - require('./direct_debit.test')(), - require('./report.test')(), - require('./transaction.test')(), - require('./payment_request.test')(), - require('./payment_method_v2.test'), - // require('./refund.test')() //test disabled until refunds endpoint is fixed -]) - .then(() => { - // eslint-disable-next-line no-console - console.log('Successful Integration Test!'); - }) - .catch(e => { - console.error(e); // eslint-disable-line no-console - process.exit(1); - }); diff --git a/integration_test/invoice.test.js b/integration_test/invoice.test.js deleted file mode 100644 index b18ac73..0000000 --- a/integration_test/invoice.test.js +++ /dev/null @@ -1,26 +0,0 @@ -const x = require('./xendit.test'); - -const { Invoice } = x; -const i = new Invoice({}); - -module.exports = function() { - return i - .createInvoice({ - externalID: Date.now().toString(), - payerEmail: 'example@gmail.com', - description: 'Invoice for Shoes Purchase', - amount: 100000, - }) - .then(r => i.getInvoice({ invoiceID: r.id })) - .then(r => i.expireInvoice({ invoiceID: r.id })) - .then(() => i.getAllInvoices()) - .then(() => { - // eslint-disable-next-line no-console - console.log('Invoice integration test done...'); - }) - .catch(e => { - throw new Error( - `Invoice integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/payment_method_v2.test.js b/integration_test/payment_method_v2.test.js deleted file mode 100644 index 27687d9..0000000 --- a/integration_test/payment_method_v2.test.js +++ /dev/null @@ -1,44 +0,0 @@ -const x = require('./xendit.test'); - -const { PaymentMethodV2 } = x; -const pm = new PaymentMethodV2({}); - -module.exports = function() { - return pm - .createPaymentMethodV2({ - type: 'DIRECT_DEBIT', - reusability: 'ONE_TIME_USE', - customer_id: '16f72571-9b3a-43dc-b241-5b71f470202f', - country: 'ID', - direct_debit: { - channel_code: 'BRI', - channel_properties: { - mobile_number: '+6281299640904', - card_last_four: '8888', - card_expiry: '10/29', - email: 'dharma@xendit.co', - }, - }, - }) - .then(id => { - pm.authorizePaymentMethodV2({ - id, - auth_code: '333000', - }); - }) - .then(id => { - pm.getPaymentMethodByIdV2({ id }); - }) - .then(() => { - pm.listPaymentMethodV2({}); - }) - .then(() => { - // eslint-disable-next-line no-console - console.log('payment method integration test done...'); - }) - .catch(e => { - throw new Error( - `payment method integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/payment_request.test.js b/integration_test/payment_request.test.js deleted file mode 100644 index 6d49416..0000000 --- a/integration_test/payment_request.test.js +++ /dev/null @@ -1,41 +0,0 @@ -const x = require('./xendit.test'); - -const { PaymentRequest } = x; -const pr = new PaymentRequest({}); - -module.exports = function() { - return pr - .createPaymentRequest({ - currency: 'IDR', - amount: 10000, - customer_id: '16f72571-9b3a-43dc-b241-5b71f470202f', - payment_method: { - type: 'DIRECT_DEBIT', - reusability: 'ONE_TIME_USE', - direct_debit: { - channel_code: 'BRI', - channel_properties: { - success_return_url: 'https://your-redirect-website.com/success', - mobile_number: '+6281299640904', - card_last_four: '8888', - card_expiry: '10/29', - email: 'dharma@gmail.co', - }, - }, - }, - }) - .then(({ id }) => - pr.getPaymentRequestById({ - id, - }), - ) - .then(() => { - // eslint-disable-next-line no-console - console.log('Payment Request integration test done...'); - }) - .catch(e => { - throw new Error( - `Payment Request integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/payout.test.js b/integration_test/payout.test.js deleted file mode 100644 index aeb11c0..0000000 --- a/integration_test/payout.test.js +++ /dev/null @@ -1,24 +0,0 @@ -const x = require('./xendit.test'); - -const { Payout } = x; -const p = new Payout({}); - -module.exports = function() { - return p - .createPayout({ - externalID: Date.now().toString(), - amount: 10000, - email: 'test@example.com', - }) - .then(({ id }) => p.getPayout({ id })) - .then(({ id }) => p.voidPayout({ id })) - .then(() => { - // eslint-disable-next-line no-console - console.log('Payout integration test done...'); - }) - .catch(e => { - throw new Error( - `Payout integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/platform.test.js b/integration_test/platform.test.js deleted file mode 100644 index 863b4ae..0000000 --- a/integration_test/platform.test.js +++ /dev/null @@ -1,75 +0,0 @@ -const x = require('./xendit.test'); - -const { Platform } = x; -const p = new Platform({}); - -module.exports = function() { - return p - .createAccount({ - accountEmail: `example+${Date.now().toString()}@gmail.com`, - type: 'OWNED', - businessProfile: { - businessName: `example+${Date.now().toString()}`, - }, - }) - .then(r => - p.setCallbackURL({ - forUserID: r.user_id, - type: 'invoice', - url: 'https://httpstat.us/200', - }), - ) - .then(r => - p.createTransfer({ - reference: `example+${Date.now().toString()}`, - amount: 1, - sourceUserID: '623d3cda7012f7478e9a7e69', - destinationUserID: r.user_id, - }), - ) - .then(() => - p.createFeeRule({ - name: `example+${Date.now().toString()}`, - description: `Fee rule created on ${Date.now().toString()}`, - routes: [ - { - unit: 'flat', - amount: 1, - currency: 'IDR', - }, - ], - }), - ) - .then(() => - p.createV2Account({ - email: `example+${Date.now().toString()}@gmail.com`, - type: 'OWNED', - publicProfile: { - businessName: `example+${Date.now().toString()}`, - }, - }), - ) - .then(r => - p.getAccountByID({ - id: r.id, - }), - ) - .then(r => - p.updateAccount({ - id: r.id, - email: `example_updated+${Date.now().toString()}@gmail.com`, - publicProfile: { - businessName: `example_updated+${Date.now().toString()}`, - }, - }), - ) - .then(() => { - // eslint-disable-next-line no-console - console.log('Platform integration test done...'); - }) - .catch(e => { - throw new Error( - `Platform integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/qr_code.test.js b/integration_test/qr_code.test.js deleted file mode 100644 index 50be4a3..0000000 --- a/integration_test/qr_code.test.js +++ /dev/null @@ -1,41 +0,0 @@ -const x = require('./xendit.test'); - -const { QrCode } = x; -const q = new QrCode({}); - -module.exports = function() { - return q - .createCode({ - externalID: Date.now().toString(), - type: QrCode.Type.Dynamic, - callbackURL: 'https://httpstat.us/200', - amount: 10000, - metadata: { - meta2: 'data2', - }, - }) - .then(r => q.getCode({ externalID: r.external_id })) - .then(r => - Promise.all([r.external_id, q.simulate({ externalID: r.external_id })]), - ) - .then(([externalId, r]) => - Promise.all([ - externalId, - q.getPayments({ - externalID: externalId, - from: r.created_at, - to: new Date().toISOString(), - limit: 10, - }), - ]), - ) - .then(() => { - // eslint-disable-next-line no-console - console.log('QR Code integration test done...'); - }) - .catch(e => { - throw new Error( - `QR Code integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/recurring.test.js b/integration_test/recurring.test.js deleted file mode 100644 index 109e640..0000000 --- a/integration_test/recurring.test.js +++ /dev/null @@ -1,30 +0,0 @@ -const x = require('./xendit.test'); - -const { RecurringPayment } = x; -const rp = new RecurringPayment({}); - -module.exports = function() { - return rp - .createPayment({ - externalID: '123', - payerEmail: 'stanley@xendit.co', - description: 'Payment for something', - amount: 10000, - interval: RecurringPayment.Interval.Month, - intervalCount: 1, - }) - .then(({ id }) => rp.getPayment({ id })) - .then(({ id }) => rp.editPayment({ id, amount: 20000 })) - .then(({ id }) => rp.pausePayment({ id })) - .then(({ id }) => rp.resumePayment({ id })) - .then(({ id }) => rp.stopPayment({ id })) - .then(() => { - // eslint-disable-next-line no-console - console.log('Recurring payments integration test done...'); - }) - .catch(e => { - throw new Error( - `Recurring integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/refund.test.js b/integration_test/refund.test.js deleted file mode 100644 index 8c1d187..0000000 --- a/integration_test/refund.test.js +++ /dev/null @@ -1,28 +0,0 @@ -const x = require('./xendit.test'); - -const { Refund } = x; -const r = new Refund({}); - -module.exports = function() { - return r - .createRefund({ - invoice_id: '63676ed0eb10cf38ce0550b7', - reason: 'FRAUDULENT', - amount: 1, - }) - .then(id => { - r.getRefundById({ id }); - }) - .then(() => { - r.listRefunds({}); - }) - .then(() => { - // eslint-disable-next-line no-console - console.log('QR Code integration test done...'); - }) - .catch(e => { - throw new Error( - `Recurring integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/regional_retail_outlet.test.js b/integration_test/regional_retail_outlet.test.js deleted file mode 100644 index 5ea9084..0000000 --- a/integration_test/regional_retail_outlet.test.js +++ /dev/null @@ -1,31 +0,0 @@ -const x = require('./xendit_ph.test'); - -const RegionalRetailOutlet = x.RegionalRetailOutlet; -const ro = new RegionalRetailOutlet({}); - -const dynamicReferenceId = Math.floor(Math.random() * 9999 + 1); - -module.exports = function() { - return ro - .createPaymentCode({ - referenceId: `test_dharma_${dynamicReferenceId}`, - channelCode: 'CEBUANA', - customerName: 'Dharma', - amount: 50, - currency: 'PHP', - market: 'PH', - }) - .then(({ id }) => ro.getPaymentCode({ id })) - .then(({ id }) => - ro.updatePaymentCode({ id: id, customerName: 'DharmaLain' }), - ) - .then(() => { - // eslint-disable-next-line no-console - console.log('Regional Retail outlet integration test done...'); - }) - .catch(e => { - throw new Error( - `Regional RO integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/report.test.js b/integration_test/report.test.js deleted file mode 100644 index 5f08d08..0000000 --- a/integration_test/report.test.js +++ /dev/null @@ -1,38 +0,0 @@ -const x = require('./xendit.test'); - -const { Report } = x; -const r = new Report({}); - -function sleepFor(sleepDuration) { - var now = new Date().getTime(); - while (new Date().getTime() < now + sleepDuration) { - /* Do nothing */ - } -} - -module.exports = function() { - return r - .generateReport({ - type: 'BALANCE_HISTORY', - filterDateFrom: new Date(new Date().getTime() - 24 * 60 * 60 * 1000), - filterDateTo: new Date(), - format: 'CSV', - currency: 'IDR', - }) - .then(res => { - sleepFor(3000); - return res; - }) - .then(res => { - r.getReport({ id: res.id }); - }) - .then(() => { - // eslint-disable-next-line no-console - console.log('Report integration test done...'); - }) - .catch(e => { - throw new Error( - `Report integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/retail_outlet.test.js b/integration_test/retail_outlet.test.js deleted file mode 100644 index af82f1c..0000000 --- a/integration_test/retail_outlet.test.js +++ /dev/null @@ -1,48 +0,0 @@ -const x = require('./xendit.test'); - -const RetailOutlet = x.RetailOutlet; -const ro = new RetailOutlet({}); -function sleepFor(sleepDuration) { - var now = new Date().getTime(); - while (new Date().getTime() < now + sleepDuration) { - /* Do nothing */ - } -} -module.exports = function() { - return ro - .createFixedPaymentCode({ - externalID: '123', - retailOutletName: 'ALFAMART', - name: 'Ervan Adetya', - expectedAmt: 10000, - }) - .then(({ id }) => { - sleepFor(3000); - return ro.getFixedPaymentCode({ id }); - }) - .then(({ id }) => { - sleepFor(3000); - return ro.updateFixedPaymentCode({ id: id, expectedAmt: 12000 }); - }) - .then(({ id, payment_code }) => - Promise.all([ - id, - ro.simulatePayment({ - retailOutletName: 'ALFAMART', - paymentCode: payment_code, - transferAmount: 12000, - }), - ]), - ) - .then(([id]) => { - sleepFor(3000); - return ro.getPaymentsByFixedPaymentCodeId({ id }); - }) - .then(() => { - // eslint-disable-next-line no-console - console.log('Retail outlet integration test done...'); - }) - .catch(e => { - throw new Error(`RO integration tests failed with error: ${e.message}`); - }); -}; diff --git a/integration_test/transaction.test.js b/integration_test/transaction.test.js deleted file mode 100644 index b1ad480..0000000 --- a/integration_test/transaction.test.js +++ /dev/null @@ -1,27 +0,0 @@ -const x = require('./xendit.test'); - -const { Transaction } = x; -const t = new Transaction({}); - -module.exports = function() { - return t - .listTransactions({ - types: ['DISBURSEMENT', 'PAYMENT'], - statuses: ['PENDING', 'SUCCESS'], - channelCategories: ['BANK'], - createdDateFrom: new Date('2022-01-01T00:00:00.000Z'), - createdDateTo: new Date('2022-02-01T00:00:00.000Z'), - }) - .then(res => { - t.getTransaction({ id: res.data[0].id }); - }) - .then(() => { - // eslint-disable-next-line no-console - console.log('Transaction integration test done...'); - }) - .catch(e => { - throw new Error( - `Transaction integration tests failed with error: ${e.message}`, - ); - }); -}; diff --git a/integration_test/va.test.js b/integration_test/va.test.js deleted file mode 100644 index f851505..0000000 --- a/integration_test/va.test.js +++ /dev/null @@ -1,41 +0,0 @@ -const x = require('./xendit.test'); - -const VirtualAcc = x.VirtualAcc; -const va = new VirtualAcc({}); -function sleepFor(sleepDuration) { - var now = new Date().getTime(); - while (new Date().getTime() < now + sleepDuration) { - /* Do nothing */ - } -} -module.exports = function() { - return va - .getVABanks() - .then(banks => { - return va.createFixedVA({ - externalID: 'VA-xendit-node-js998877', - bankCode: banks[0].code, - name: 'Stanley Nguyen', - isClosed: true, - expectedAmt: 10000, - }); - }) - .then(({ id }) => { - sleepFor(3000); - return va.getFixedVA({ id }); - }) - .then(({ id }) => { - sleepFor(5000); - return va.updateFixedVA({ - id, - expectedAmt: 12000, - }); - }) - .then(() => { - // eslint-disable-next-line no-console - console.log('VA integration test done...'); - }) - .catch(e => { - throw new Error(`VA integration tests failed with error: ${e.message}`); - }); -}; diff --git a/integration_test/xendit.test.js b/integration_test/xendit.test.js deleted file mode 100644 index 8470779..0000000 --- a/integration_test/xendit.test.js +++ /dev/null @@ -1,12 +0,0 @@ -// For actual usage, this should be require('xendit-node') -const Xendit = require('../src/xendit'); -const dotenv = require('dotenv'); - -dotenv.config(); - -const x = new Xendit({ - secretKey: process.env.SECRET_KEY, - xenditURL: process.env.XENDIT_URL, -}); - -module.exports = x; diff --git a/integration_test/xendit_ph.test.js b/integration_test/xendit_ph.test.js deleted file mode 100644 index fe2d6cd..0000000 --- a/integration_test/xendit_ph.test.js +++ /dev/null @@ -1,12 +0,0 @@ -// For actual usage, this should be require('xendit-node') -const Xendit = require('../src/xendit'); -const dotenv = require('dotenv'); - -dotenv.config(); - -const xph = new Xendit({ - secretKey: process.env.SECRET_KEY_PH, - xenditURL: process.env.XENDIT_URL, -}); - -module.exports = xph; diff --git a/invoice/apis/Invoice.ts b/invoice/apis/Invoice.ts new file mode 100644 index 0000000..e106734 --- /dev/null +++ b/invoice/apis/Invoice.ts @@ -0,0 +1,285 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +import * as runtime from '../../runtime'; +import type { + BadRequestError, + CreateInvoiceRequest, + ForbiddenError, + Invoice, + InvoiceClientType, + InvoiceError404ResponseDefinition, + InvoiceNotFoundError, + InvoiceStatus, + ServerError, + UnauthorizedError, +} from '../models'; +import { + BadRequestErrorFromJSON, + BadRequestErrorToJSON, + CreateInvoiceRequestFromJSON, + CreateInvoiceRequestToJSON, + ForbiddenErrorFromJSON, + ForbiddenErrorToJSON, + InvoiceFromJSON, + InvoiceToJSON, + InvoiceClientTypeFromJSON, + InvoiceClientTypeToJSON, + InvoiceError404ResponseDefinitionFromJSON, + InvoiceError404ResponseDefinitionToJSON, + InvoiceNotFoundErrorFromJSON, + InvoiceNotFoundErrorToJSON, + InvoiceStatusFromJSON, + InvoiceStatusToJSON, + ServerErrorFromJSON, + ServerErrorToJSON, + UnauthorizedErrorFromJSON, + UnauthorizedErrorToJSON, +} from '../models'; + +export interface CreateInvoiceOperationRequest { + data: CreateInvoiceRequest; +} + +export interface ExpireInvoiceRequest { + invoiceId: string; + idempotencyKey?: string; +} + +export interface GetInvoiceByIdRequest { + invoiceId: string; + idempotencyKey?: string; +} + +export interface GetInvoicesRequest { + externalId?: string; + statuses?: Array; + limit?: number; + createdAfter?: Date; + createdBefore?: Date; + paidAfter?: Date; + paidBefore?: Date; + expiredAfter?: Date; + expiredBefore?: Date; + lastInvoice?: string; + clientTypes?: Array; + paymentChannels?: Array; + onDemandLink?: string; + recurringPaymentId?: string; + idempotencyKey?: string; +} + +/** + * + */ +export class InvoiceApi extends runtime.BaseAPI { + + secretKey: string = ""; + xenditURL: string = ""; + + constructor({secretKey, xenditURL}: {secretKey: string, xenditURL?: string}) { + const conf = new runtime.Configuration({ + basePath: xenditURL || 'https://api.xendit.co' + }) + super(conf) + this.secretKey = secretKey; + } + + /** + * Create an invoice + */ + private async createInvoiceRaw(requestParameters: CreateInvoiceOperationRequest): Promise> { + if (requestParameters.data === null || requestParameters.data === undefined) { + throw new runtime.RequiredError('createInvoiceRequest','Required parameter requestParameters.data was null or undefined when calling createInvoice.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + headerParameters['Content-Type'] = 'application/json'; + + const response = await this.request({ + path: `/v2/invoices/`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: CreateInvoiceRequestToJSON(requestParameters.data), + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => InvoiceFromJSON(jsonValue)); + } + + /** + * Create an invoice + */ + async createInvoice(requestParameters: CreateInvoiceOperationRequest): Promise { + const response = await this.createInvoiceRaw(requestParameters); + return await response.value(); + } + + /** + * Manually expire an invoice + */ + private async expireInvoiceRaw(requestParameters: ExpireInvoiceRequest): Promise> { + if (requestParameters.invoiceId === null || requestParameters.invoiceId === undefined) { + throw new runtime.RequiredError('invoiceId','Required parameter requestParameters.invoiceId was null or undefined when calling expireInvoice.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/invoices/{invoice_id}/expire!`.replace(`{${"invoice_id"}}`, encodeURIComponent(String(requestParameters.invoiceId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => InvoiceFromJSON(jsonValue)); + } + + /** + * Manually expire an invoice + */ + async expireInvoice(requestParameters: ExpireInvoiceRequest): Promise { + const response = await this.expireInvoiceRaw(requestParameters); + return await response.value(); + } + + /** + * Get invoice by invoice id + */ + private async getInvoiceByIdRaw(requestParameters: GetInvoiceByIdRequest): Promise> { + if (requestParameters.invoiceId === null || requestParameters.invoiceId === undefined) { + throw new runtime.RequiredError('invoiceId','Required parameter requestParameters.invoiceId was null or undefined when calling getInvoiceById.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/v2/invoices/{invoice_id}`.replace(`{${"invoice_id"}}`, encodeURIComponent(String(requestParameters.invoiceId))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => InvoiceFromJSON(jsonValue)); + } + + /** + * Get invoice by invoice id + */ + async getInvoiceById(requestParameters: GetInvoiceByIdRequest): Promise { + const response = await this.getInvoiceByIdRaw(requestParameters); + return await response.value(); + } + + /** + * Get all Invoices + */ + private async getInvoicesRaw(requestParameters: GetInvoicesRequest): Promise>> { + const queryParameters: any = {}; + + if (requestParameters.externalId !== undefined) { + queryParameters['external_id'] = requestParameters.externalId; + } + + if (requestParameters.statuses) { + queryParameters['statuses'] = requestParameters.statuses; + } + + if (requestParameters.limit !== undefined) { + queryParameters['limit'] = requestParameters.limit; + } + + if (requestParameters.createdAfter !== undefined) { + queryParameters['created_after'] = (requestParameters.createdAfter as any).toISOString(); + } + + if (requestParameters.createdBefore !== undefined) { + queryParameters['created_before'] = (requestParameters.createdBefore as any).toISOString(); + } + + if (requestParameters.paidAfter !== undefined) { + queryParameters['paid_after'] = (requestParameters.paidAfter as any).toISOString(); + } + + if (requestParameters.paidBefore !== undefined) { + queryParameters['paid_before'] = (requestParameters.paidBefore as any).toISOString(); + } + + if (requestParameters.expiredAfter !== undefined) { + queryParameters['expired_after'] = (requestParameters.expiredAfter as any).toISOString(); + } + + if (requestParameters.expiredBefore !== undefined) { + queryParameters['expired_before'] = (requestParameters.expiredBefore as any).toISOString(); + } + + if (requestParameters.lastInvoice !== undefined) { + queryParameters['last_invoice'] = requestParameters.lastInvoice; + } + + if (requestParameters.clientTypes) { + queryParameters['client_types'] = requestParameters.clientTypes; + } + + if (requestParameters.paymentChannels) { + queryParameters['payment_channels'] = requestParameters.paymentChannels; + } + + if (requestParameters.onDemandLink !== undefined) { + queryParameters['on_demand_link'] = requestParameters.onDemandLink; + } + + if (requestParameters.recurringPaymentId !== undefined) { + queryParameters['recurring_payment_id'] = requestParameters.recurringPaymentId; + } + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/v2/invoices`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(InvoiceFromJSON)); + } + + /** + * Get all Invoices + */ + async getInvoices(requestParameters: GetInvoicesRequest = {}): Promise> { + const response = await this.getInvoicesRaw(requestParameters); + return await response.value(); + } + +} diff --git a/invoice/apis/index.ts b/invoice/apis/index.ts new file mode 100644 index 0000000..f7a3b4a --- /dev/null +++ b/invoice/apis/index.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './Invoice'; diff --git a/invoice/index.ts b/invoice/index.ts new file mode 100644 index 0000000..a9a6256 --- /dev/null +++ b/invoice/index.ts @@ -0,0 +1,3 @@ +export { + InvoiceApi as Invoice, +} from './apis' diff --git a/invoice/models/AddressObject.ts b/invoice/models/AddressObject.ts new file mode 100644 index 0000000..f6e7dd9 --- /dev/null +++ b/invoice/models/AddressObject.ts @@ -0,0 +1,107 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * An object representing an address with various properties. + * @export + * @interface AddressObject + */ +export interface AddressObject { + /** + * The country where the address is located. + * @type {string} + * @memberof AddressObject + */ + country?: string | null; + /** + * The first line of the street address. + * @type {string} + * @memberof AddressObject + */ + streetLine1?: string | null; + /** + * The second line of the street address. + * @type {string} + * @memberof AddressObject + */ + streetLine2?: string | null; + /** + * The city or locality within the address. + * @type {string} + * @memberof AddressObject + */ + city?: string | null; + /** + * The province or region within the country. + * @type {string} + * @memberof AddressObject + */ + province?: string | null; + /** + * The state or administrative division within the country. + * @type {string} + * @memberof AddressObject + */ + state?: string | null; + /** + * The postal code or ZIP code for the address. + * @type {string} + * @memberof AddressObject + */ + postalCode?: string | null; +} + +/** + * Check if a given object implements the AddressObject interface. + */ +export function instanceOfAddressObject(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function AddressObjectFromJSON(json: any): AddressObject { + return AddressObjectFromJSONTyped(json, false); +} + +export function AddressObjectFromJSONTyped(json: any, ignoreDiscriminator: boolean): AddressObject { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'country': !exists(json, 'country') ? undefined : json['country'], + 'streetLine1': !exists(json, 'street_line1') ? undefined : json['street_line1'], + 'streetLine2': !exists(json, 'street_line2') ? undefined : json['street_line2'], + 'city': !exists(json, 'city') ? undefined : json['city'], + 'province': !exists(json, 'province') ? undefined : json['province'], + 'state': !exists(json, 'state') ? undefined : json['state'], + 'postalCode': !exists(json, 'postal_code') ? undefined : json['postal_code'], + }; +} + +export function AddressObjectToJSON(value?: AddressObject | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'country': value.country, + 'street_line1': value.streetLine1, + 'street_line2': value.streetLine2, + 'city': value.city, + 'province': value.province, + 'state': value.state, + 'postal_code': value.postalCode, + }; +} + diff --git a/invoice/models/AlternativeDisplayItem.ts b/invoice/models/AlternativeDisplayItem.ts new file mode 100644 index 0000000..48507d9 --- /dev/null +++ b/invoice/models/AlternativeDisplayItem.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * An object representing alternative display of a VA. + * @export + * @interface AlternativeDisplayItem + */ +export interface AlternativeDisplayItem { + /** + * Represent type of alternative display. + * @type {string} + * @memberof AlternativeDisplayItem + */ + type?: string; + /** + * Represent value of alternative display value. + * @type {string} + * @memberof AlternativeDisplayItem + */ + value?: string; +} + +/** + * Check if a given object implements the AlternativeDisplayItem interface. + */ +export function instanceOfAlternativeDisplayItem(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function AlternativeDisplayItemFromJSON(json: any): AlternativeDisplayItem { + return AlternativeDisplayItemFromJSONTyped(json, false); +} + +export function AlternativeDisplayItemFromJSONTyped(json: any, ignoreDiscriminator: boolean): AlternativeDisplayItem { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'type': !exists(json, 'type') ? undefined : json['type'], + 'value': !exists(json, 'value') ? undefined : json['value'], + }; +} + +export function AlternativeDisplayItemToJSON(value?: AlternativeDisplayItem | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'type': value.type, + 'value': value.value, + }; +} + diff --git a/invoice/models/BadRequestError.ts b/invoice/models/BadRequestError.ts new file mode 100644 index 0000000..0cb3b0b --- /dev/null +++ b/invoice/models/BadRequestError.ts @@ -0,0 +1,85 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Response definition for a 400 Bad Request error when creating an invoice. + * @export + * @interface BadRequestError + */ +export interface BadRequestError { + /** + * The error code indicating the type of error that occurred. + * @type {string} + * @memberof BadRequestError + */ + errorCode: BadRequestErrorErrorCodeEnum; + /** + * A human-readable error message that provides additional information about the error. + * @type {string} + * @memberof BadRequestError + */ + message: string; +} + + +/** + * @export + */ +export const BadRequestErrorErrorCodeEnum = { + MaximumTransferAmountError: 'MAXIMUM_TRANSFER_AMOUNT_ERROR', + NoCollectionMethodsError: 'NO_COLLECTION_METHODS_ERROR', + EmailFormatError: 'EMAIL_FORMAT_ERROR', + UnavailablePaymentMethodError: 'UNAVAILABLE_PAYMENT_METHOD_ERROR', + UnsupportedCurrency: 'UNSUPPORTED_CURRENCY', + MismatchCurrencyError: 'MISMATCH_CURRENCY_ERROR', + InvalidReminderTime: 'INVALID_REMINDER_TIME' +} as const; +export type BadRequestErrorErrorCodeEnum = typeof BadRequestErrorErrorCodeEnum[keyof typeof BadRequestErrorErrorCodeEnum]; + + +/** + * Check if a given object implements the BadRequestError interface. + */ +export function instanceOfBadRequestError(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "errorCode" in value; + isInstance = isInstance && "message" in value; + + return isInstance; +} + +export function BadRequestErrorFromJSON(json: any): BadRequestError { + return BadRequestErrorFromJSONTyped(json, false); +} + +export function BadRequestErrorFromJSONTyped(json: any, ignoreDiscriminator: boolean): BadRequestError { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': json['error_code'], + 'message': json['message'], + }; +} + +export function BadRequestErrorToJSON(value?: BadRequestError | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/invoice/models/Bank.ts b/invoice/models/Bank.ts new file mode 100644 index 0000000..77d6a96 --- /dev/null +++ b/invoice/models/Bank.ts @@ -0,0 +1,123 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { AlternativeDisplayItem } from './AlternativeDisplayItem'; +import { + AlternativeDisplayItemFromJSON, + AlternativeDisplayItemFromJSONTyped, + AlternativeDisplayItemToJSON, +} from './AlternativeDisplayItem'; +import type { BankCode } from './BankCode'; +import { + BankCodeFromJSON, + BankCodeFromJSONTyped, + BankCodeToJSON, +} from './BankCode'; + +/** + * An object representing bank details for invoices. + * @export + * @interface Bank + */ +export interface Bank { + /** + * + * @type {BankCode} + * @memberof Bank + */ + bankCode: BankCode; + /** + * The collection type for the bank details. + * @type {string} + * @memberof Bank + */ + collectionType: string; + /** + * The branch of the bank. + * @type {string} + * @memberof Bank + */ + bankBranch?: string; + /** + * The bank account number. + * @type {string} + * @memberof Bank + */ + bankAccountNumber?: string; + /** + * The name of the account holder. + * @type {string} + * @memberof Bank + */ + accountHolderName: string; + /** + * The transfer amount. + * @type {number} + * @memberof Bank + */ + transferAmount?: number; + /** + * + * @type {Array} + * @memberof Bank + */ + alternativeDisplays?: Array; +} + +/** + * Check if a given object implements the Bank interface. + */ +export function instanceOfBank(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "bankCode" in value; + isInstance = isInstance && "collectionType" in value; + isInstance = isInstance && "accountHolderName" in value; + + return isInstance; +} + +export function BankFromJSON(json: any): Bank { + return BankFromJSONTyped(json, false); +} + +export function BankFromJSONTyped(json: any, ignoreDiscriminator: boolean): Bank { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'bankCode': BankCodeFromJSON(json['bank_code']), + 'collectionType': json['collection_type'], + 'bankBranch': !exists(json, 'bank_branch') ? undefined : json['bank_branch'], + 'bankAccountNumber': !exists(json, 'bank_account_number') ? undefined : json['bank_account_number'], + 'accountHolderName': json['account_holder_name'], + 'transferAmount': !exists(json, 'transfer_amount') ? undefined : json['transfer_amount'], + 'alternativeDisplays': !exists(json, 'alternative_displays') ? undefined : ((json['alternative_displays'] as Array).map(AlternativeDisplayItemFromJSON)), + }; +} + +export function BankToJSON(value?: Bank | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'bank_code': BankCodeToJSON(value.bankCode), + 'collection_type': value.collectionType, + 'bank_branch': value.bankBranch, + 'bank_account_number': value.bankAccountNumber, + 'account_holder_name': value.accountHolderName, + 'transfer_amount': value.transferAmount, + 'alternative_displays': value.alternativeDisplays === undefined ? undefined : ((value.alternativeDisplays as Array).map(AlternativeDisplayItemToJSON)), + }; +} + diff --git a/invoice/models/BankCode.ts b/invoice/models/BankCode.ts new file mode 100644 index 0000000..4f83896 --- /dev/null +++ b/invoice/models/BankCode.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Representing the available bank channels used for invoice-related transactions. + * @export + */ +export const BankCode = { + Bca: 'BCA', + Bni: 'BNI', + Bri: 'BRI', + Mandiri: 'MANDIRI', + Permata: 'PERMATA', + Bsi: 'BSI', + Bjb: 'BJB' +} as const; +export type BankCode = typeof BankCode[keyof typeof BankCode]; + + +export function BankCodeFromJSON(json: any): BankCode { + return BankCodeFromJSONTyped(json, false); +} + +export function BankCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): BankCode { + return json as BankCode; +} + +export function BankCodeToJSON(value?: BankCode | null): any { + return value as any; +} + diff --git a/invoice/models/CreateInvoiceRequest.ts b/invoice/models/CreateInvoiceRequest.ts new file mode 100644 index 0000000..a013c2c --- /dev/null +++ b/invoice/models/CreateInvoiceRequest.ts @@ -0,0 +1,238 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { CustomerObject } from './CustomerObject'; +import { + CustomerObjectFromJSON, + CustomerObjectFromJSONTyped, + CustomerObjectToJSON, +} from './CustomerObject'; +import type { InvoiceFee } from './InvoiceFee'; +import { + InvoiceFeeFromJSON, + InvoiceFeeFromJSONTyped, + InvoiceFeeToJSON, +} from './InvoiceFee'; +import type { InvoiceItem } from './InvoiceItem'; +import { + InvoiceItemFromJSON, + InvoiceItemFromJSONTyped, + InvoiceItemToJSON, +} from './InvoiceItem'; +import type { NotificationPreference } from './NotificationPreference'; +import { + NotificationPreferenceFromJSON, + NotificationPreferenceFromJSONTyped, + NotificationPreferenceToJSON, +} from './NotificationPreference'; + +/** + * An object representing for an invoice creation request. + * @export + * @interface CreateInvoiceRequest + */ +export interface CreateInvoiceRequest { + /** + * The external ID of the invoice. + * @type {string} + * @memberof CreateInvoiceRequest + */ + externalId: string; + /** + * The invoice amount. + * @type {number} + * @memberof CreateInvoiceRequest + */ + amount: number; + /** + * The email address of the payer. + * @type {string} + * @memberof CreateInvoiceRequest + */ + payerEmail?: string; + /** + * A description of the payment. + * @type {string} + * @memberof CreateInvoiceRequest + */ + description?: string; + /** + * The duration of the invoice. + * @type {string} + * @memberof CreateInvoiceRequest + */ + invoiceDuration?: string; + /** + * The ID of the callback virtual account. + * @type {string} + * @memberof CreateInvoiceRequest + */ + callbackVirtualAccountId?: string; + /** + * Indicates whether email notifications should be sent. + * @type {boolean} + * @memberof CreateInvoiceRequest + */ + shouldSendEmail?: boolean; + /** + * + * @type {CustomerObject} + * @memberof CreateInvoiceRequest + */ + customer?: CustomerObject; + /** + * + * @type {NotificationPreference} + * @memberof CreateInvoiceRequest + */ + customerNotificationPreference?: NotificationPreference; + /** + * The URL to redirect to on successful payment. + * @type {string} + * @memberof CreateInvoiceRequest + */ + successRedirectUrl?: string; + /** + * The URL to redirect to on payment failure. + * @type {string} + * @memberof CreateInvoiceRequest + */ + failureRedirectUrl?: string; + /** + * An array of available payment methods. + * @type {Array} + * @memberof CreateInvoiceRequest + */ + paymentMethods?: Array; + /** + * The middle label. + * @type {string} + * @memberof CreateInvoiceRequest + */ + midLabel?: string; + /** + * Indicates whether credit card authentication is required. + * @type {boolean} + * @memberof CreateInvoiceRequest + */ + shouldAuthenticateCreditCard?: boolean; + /** + * The currency of the invoice. + * @type {string} + * @memberof CreateInvoiceRequest + */ + currency?: string; + /** + * The reminder time. + * @type {number} + * @memberof CreateInvoiceRequest + */ + reminderTime?: number; + /** + * The local. + * @type {string} + * @memberof CreateInvoiceRequest + */ + local?: string; + /** + * The unit of the reminder time. + * @type {string} + * @memberof CreateInvoiceRequest + */ + reminderTimeUnit?: string; + /** + * An array of items included in the invoice. + * @type {Array} + * @memberof CreateInvoiceRequest + */ + items?: Array; + /** + * An array of fees associated with the invoice. + * @type {Array} + * @memberof CreateInvoiceRequest + */ + fees?: Array; +} + +/** + * Check if a given object implements the CreateInvoiceRequest interface. + */ +export function instanceOfCreateInvoiceRequest(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "externalId" in value; + isInstance = isInstance && "amount" in value; + + return isInstance; +} + +export function CreateInvoiceRequestFromJSON(json: any): CreateInvoiceRequest { + return CreateInvoiceRequestFromJSONTyped(json, false); +} + +export function CreateInvoiceRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateInvoiceRequest { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'externalId': json['external_id'], + 'amount': json['amount'], + 'payerEmail': !exists(json, 'payer_email') ? undefined : json['payer_email'], + 'description': !exists(json, 'description') ? undefined : json['description'], + 'invoiceDuration': !exists(json, 'invoice_duration') ? undefined : json['invoice_duration'], + 'callbackVirtualAccountId': !exists(json, 'callback_virtual_account_id') ? undefined : json['callback_virtual_account_id'], + 'shouldSendEmail': !exists(json, 'should_send_email') ? undefined : json['should_send_email'], + 'customer': !exists(json, 'customer') ? undefined : CustomerObjectFromJSON(json['customer']), + 'customerNotificationPreference': !exists(json, 'customer_notification_preference') ? undefined : NotificationPreferenceFromJSON(json['customer_notification_preference']), + 'successRedirectUrl': !exists(json, 'success_redirect_url') ? undefined : json['success_redirect_url'], + 'failureRedirectUrl': !exists(json, 'failure_redirect_url') ? undefined : json['failure_redirect_url'], + 'paymentMethods': !exists(json, 'payment_methods') ? undefined : json['payment_methods'], + 'midLabel': !exists(json, 'mid_label') ? undefined : json['mid_label'], + 'shouldAuthenticateCreditCard': !exists(json, 'should_authenticate_credit_card') ? undefined : json['should_authenticate_credit_card'], + 'currency': !exists(json, 'currency') ? undefined : json['currency'], + 'reminderTime': !exists(json, 'reminder_time') ? undefined : json['reminder_time'], + 'local': !exists(json, 'local') ? undefined : json['local'], + 'reminderTimeUnit': !exists(json, 'reminder_time_unit') ? undefined : json['reminder_time_unit'], + 'items': !exists(json, 'items') ? undefined : ((json['items'] as Array).map(InvoiceItemFromJSON)), + 'fees': !exists(json, 'fees') ? undefined : ((json['fees'] as Array).map(InvoiceFeeFromJSON)), + }; +} + +export function CreateInvoiceRequestToJSON(value?: CreateInvoiceRequest | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'external_id': value.externalId, + 'amount': value.amount, + 'payer_email': value.payerEmail, + 'description': value.description, + 'invoice_duration': value.invoiceDuration, + 'callback_virtual_account_id': value.callbackVirtualAccountId, + 'should_send_email': value.shouldSendEmail, + 'customer': CustomerObjectToJSON(value.customer), + 'customer_notification_preference': NotificationPreferenceToJSON(value.customerNotificationPreference), + 'success_redirect_url': value.successRedirectUrl, + 'failure_redirect_url': value.failureRedirectUrl, + 'payment_methods': value.paymentMethods, + 'mid_label': value.midLabel, + 'should_authenticate_credit_card': value.shouldAuthenticateCreditCard, + 'currency': value.currency, + 'reminder_time': value.reminderTime, + 'local': value.local, + 'reminder_time_unit': value.reminderTimeUnit, + 'items': value.items === undefined ? undefined : ((value.items as Array).map(InvoiceItemToJSON)), + 'fees': value.fees === undefined ? undefined : ((value.fees as Array).map(InvoiceFeeToJSON)), + }; +} + diff --git a/invoice/models/CustomerObject.ts b/invoice/models/CustomerObject.ts new file mode 100644 index 0000000..7227a71 --- /dev/null +++ b/invoice/models/CustomerObject.ts @@ -0,0 +1,122 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { AddressObject } from './AddressObject'; +import { + AddressObjectFromJSON, + AddressObjectFromJSONTyped, + AddressObjectToJSON, +} from './AddressObject'; + +/** + * An object representing a customer with various properties, including addresses. + * @export + * @interface CustomerObject + */ +export interface CustomerObject { + /** + * The unique identifier for the customer. + * @type {string} + * @memberof CustomerObject + */ + id?: string | null; + /** + * The customer's phone number. + * @type {string} + * @memberof CustomerObject + */ + phoneNumber?: string | null; + /** + * The customer's given names or first names. + * @type {string} + * @memberof CustomerObject + */ + givenNames?: string | null; + /** + * The customer's surname or last name. + * @type {string} + * @memberof CustomerObject + */ + surname?: string | null; + /** + * The customer's email address. + * @type {string} + * @memberof CustomerObject + */ + email?: string | null; + /** + * The customer's mobile phone number. + * @type {string} + * @memberof CustomerObject + */ + mobileNumber?: string | null; + /** + * An additional identifier for the customer. + * @type {string} + * @memberof CustomerObject + */ + customerId?: string | null; + /** + * An array of addresses associated with the customer. + * @type {Array} + * @memberof CustomerObject + */ + addresses?: Array | null; +} + +/** + * Check if a given object implements the CustomerObject interface. + */ +export function instanceOfCustomerObject(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CustomerObjectFromJSON(json: any): CustomerObject { + return CustomerObjectFromJSONTyped(json, false); +} + +export function CustomerObjectFromJSONTyped(json: any, ignoreDiscriminator: boolean): CustomerObject { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'id': !exists(json, 'id') ? undefined : json['id'], + 'phoneNumber': !exists(json, 'phone_number') ? undefined : json['phone_number'], + 'givenNames': !exists(json, 'given_names') ? undefined : json['given_names'], + 'surname': !exists(json, 'surname') ? undefined : json['surname'], + 'email': !exists(json, 'email') ? undefined : json['email'], + 'mobileNumber': !exists(json, 'mobile_number') ? undefined : json['mobile_number'], + 'customerId': !exists(json, 'customer_id') ? undefined : json['customer_id'], + 'addresses': !exists(json, 'addresses') ? undefined : (json['addresses'] === null ? null : (json['addresses'] as Array).map(AddressObjectFromJSON)), + }; +} + +export function CustomerObjectToJSON(value?: CustomerObject | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'id': value.id, + 'phone_number': value.phoneNumber, + 'given_names': value.givenNames, + 'surname': value.surname, + 'email': value.email, + 'mobile_number': value.mobileNumber, + 'customer_id': value.customerId, + 'addresses': value.addresses === undefined ? undefined : (value.addresses === null ? null : (value.addresses as Array).map(AddressObjectToJSON)), + }; +} + diff --git a/invoice/models/DirectDebit.ts b/invoice/models/DirectDebit.ts new file mode 100644 index 0000000..e8c4ddd --- /dev/null +++ b/invoice/models/DirectDebit.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { DirectDebitType } from './DirectDebitType'; +import { + DirectDebitTypeFromJSON, + DirectDebitTypeFromJSONTyped, + DirectDebitTypeToJSON, +} from './DirectDebitType'; + +/** + * An object representing direct debit details for invoices. + * @export + * @interface DirectDebit + */ +export interface DirectDebit { + /** + * + * @type {DirectDebitType} + * @memberof DirectDebit + */ + directDebitType: DirectDebitType; +} + +/** + * Check if a given object implements the DirectDebit interface. + */ +export function instanceOfDirectDebit(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "directDebitType" in value; + + return isInstance; +} + +export function DirectDebitFromJSON(json: any): DirectDebit { + return DirectDebitFromJSONTyped(json, false); +} + +export function DirectDebitFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebit { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'directDebitType': DirectDebitTypeFromJSON(json['direct_debit_type']), + }; +} + +export function DirectDebitToJSON(value?: DirectDebit | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'direct_debit_type': DirectDebitTypeToJSON(value.directDebitType), + }; +} + diff --git a/invoice/models/DirectDebitType.ts b/invoice/models/DirectDebitType.ts new file mode 100644 index 0000000..c1770db --- /dev/null +++ b/invoice/models/DirectDebitType.ts @@ -0,0 +1,44 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Representing the available Direct Debit channels used for invoice-related transactions. + * @export + */ +export const DirectDebitType = { + BaBri: 'BA_BRI', + DcBri: 'DC_BRI', + DdBri: 'DD_BRI', + DdMandiri: 'DD_MANDIRI', + BaBpi: 'BA_BPI', + DcBpi: 'DC_BPI', + DdBpi: 'DD_BPI', + BaUbp: 'BA_UBP', + DcUbp: 'DC_UBP', + DdUbp: 'DD_UBP', + BcaKlikpay: 'BCA_KLIKPAY', + BaBcaKlikpay: 'BA_BCA_KLIKPAY', + DcBcaKlikpay: 'DC_BCA_KLIKPAY', + DdBcaKlikpay: 'DD_BCA_KLIKPAY' +} as const; +export type DirectDebitType = typeof DirectDebitType[keyof typeof DirectDebitType]; + + +export function DirectDebitTypeFromJSON(json: any): DirectDebitType { + return DirectDebitTypeFromJSONTyped(json, false); +} + +export function DirectDebitTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitType { + return json as DirectDebitType; +} + +export function DirectDebitTypeToJSON(value?: DirectDebitType | null): any { + return value as any; +} + diff --git a/invoice/models/Ewallet.ts b/invoice/models/Ewallet.ts new file mode 100644 index 0000000..cb2a7f4 --- /dev/null +++ b/invoice/models/Ewallet.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { EwalletType } from './EwalletType'; +import { + EwalletTypeFromJSON, + EwalletTypeFromJSONTyped, + EwalletTypeToJSON, +} from './EwalletType'; + +/** + * An object representing e-wallet details for invoices. + * @export + * @interface Ewallet + */ +export interface Ewallet { + /** + * + * @type {EwalletType} + * @memberof Ewallet + */ + ewalletType: EwalletType; +} + +/** + * Check if a given object implements the Ewallet interface. + */ +export function instanceOfEwallet(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "ewalletType" in value; + + return isInstance; +} + +export function EwalletFromJSON(json: any): Ewallet { + return EwalletFromJSONTyped(json, false); +} + +export function EwalletFromJSONTyped(json: any, ignoreDiscriminator: boolean): Ewallet { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'ewalletType': EwalletTypeFromJSON(json['ewallet_type']), + }; +} + +export function EwalletToJSON(value?: Ewallet | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'ewallet_type': EwalletTypeToJSON(value.ewalletType), + }; +} + diff --git a/invoice/models/EwalletType.ts b/invoice/models/EwalletType.ts new file mode 100644 index 0000000..0414767 --- /dev/null +++ b/invoice/models/EwalletType.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Representing the available eWallet channels used for invoice-related transactions. + * @export + */ +export const EwalletType = { + Ovo: 'OVO', + Dana: 'DANA', + Linkaja: 'LINKAJA', + Paymaya: 'PAYMAYA', + Shopeepay: 'SHOPEEPAY', + Gcash: 'GCASH', + Grabpay: 'GRABPAY' +} as const; +export type EwalletType = typeof EwalletType[keyof typeof EwalletType]; + + +export function EwalletTypeFromJSON(json: any): EwalletType { + return EwalletTypeFromJSONTyped(json, false); +} + +export function EwalletTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): EwalletType { + return json as EwalletType; +} + +export function EwalletTypeToJSON(value?: EwalletType | null): any { + return value as any; +} + diff --git a/invoice/models/ForbiddenError.ts b/invoice/models/ForbiddenError.ts new file mode 100644 index 0000000..6016f0c --- /dev/null +++ b/invoice/models/ForbiddenError.ts @@ -0,0 +1,79 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * An error object used to indicate a 403 Forbidden response related to invoice operations. + * @export + * @interface ForbiddenError + */ +export interface ForbiddenError { + /** + * The specific error code indicating that access to the invoice operation is suspended. + * @type {string} + * @memberof ForbiddenError + */ + errorCode: ForbiddenErrorErrorCodeEnum; + /** + * A human-readable error message providing additional context about the 403 Forbidden response. + * @type {string} + * @memberof ForbiddenError + */ + message: string; +} + + +/** + * @export + */ +export const ForbiddenErrorErrorCodeEnum = { + AccessSuspended: 'ACCESS_SUSPENDED' +} as const; +export type ForbiddenErrorErrorCodeEnum = typeof ForbiddenErrorErrorCodeEnum[keyof typeof ForbiddenErrorErrorCodeEnum]; + + +/** + * Check if a given object implements the ForbiddenError interface. + */ +export function instanceOfForbiddenError(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "errorCode" in value; + isInstance = isInstance && "message" in value; + + return isInstance; +} + +export function ForbiddenErrorFromJSON(json: any): ForbiddenError { + return ForbiddenErrorFromJSONTyped(json, false); +} + +export function ForbiddenErrorFromJSONTyped(json: any, ignoreDiscriminator: boolean): ForbiddenError { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': json['error_code'], + 'message': json['message'], + }; +} + +export function ForbiddenErrorToJSON(value?: ForbiddenError | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/invoice/models/Invoice.ts b/invoice/models/Invoice.ts new file mode 100644 index 0000000..f08a1a3 --- /dev/null +++ b/invoice/models/Invoice.ts @@ -0,0 +1,411 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { Bank } from './Bank'; +import { + BankFromJSON, + BankFromJSONTyped, + BankToJSON, +} from './Bank'; +import type { CustomerObject } from './CustomerObject'; +import { + CustomerObjectFromJSON, + CustomerObjectFromJSONTyped, + CustomerObjectToJSON, +} from './CustomerObject'; +import type { DirectDebit } from './DirectDebit'; +import { + DirectDebitFromJSON, + DirectDebitFromJSONTyped, + DirectDebitToJSON, +} from './DirectDebit'; +import type { Ewallet } from './Ewallet'; +import { + EwalletFromJSON, + EwalletFromJSONTyped, + EwalletToJSON, +} from './Ewallet'; +import type { InvoiceCurrency } from './InvoiceCurrency'; +import { + InvoiceCurrencyFromJSON, + InvoiceCurrencyFromJSONTyped, + InvoiceCurrencyToJSON, +} from './InvoiceCurrency'; +import type { InvoiceFee } from './InvoiceFee'; +import { + InvoiceFeeFromJSON, + InvoiceFeeFromJSONTyped, + InvoiceFeeToJSON, +} from './InvoiceFee'; +import type { InvoiceItem } from './InvoiceItem'; +import { + InvoiceItemFromJSON, + InvoiceItemFromJSONTyped, + InvoiceItemToJSON, +} from './InvoiceItem'; +import type { InvoicePaymentMethod } from './InvoicePaymentMethod'; +import { + InvoicePaymentMethodFromJSON, + InvoicePaymentMethodFromJSONTyped, + InvoicePaymentMethodToJSON, +} from './InvoicePaymentMethod'; +import type { InvoiceStatus } from './InvoiceStatus'; +import { + InvoiceStatusFromJSON, + InvoiceStatusFromJSONTyped, + InvoiceStatusToJSON, +} from './InvoiceStatus'; +import type { NotificationPreference } from './NotificationPreference'; +import { + NotificationPreferenceFromJSON, + NotificationPreferenceFromJSONTyped, + NotificationPreferenceToJSON, +} from './NotificationPreference'; +import type { Paylater } from './Paylater'; +import { + PaylaterFromJSON, + PaylaterFromJSONTyped, + PaylaterToJSON, +} from './Paylater'; +import type { QrCode } from './QrCode'; +import { + QrCodeFromJSON, + QrCodeFromJSONTyped, + QrCodeToJSON, +} from './QrCode'; +import type { RetailOutlet } from './RetailOutlet'; +import { + RetailOutletFromJSON, + RetailOutletFromJSONTyped, + RetailOutletToJSON, +} from './RetailOutlet'; + +/** + * An object representing details for an invoice. + * @export + * @interface Invoice + */ +export interface Invoice { + /** + * The unique identifier for the invoice. + * @type {string} + * @memberof Invoice + */ + id?: string; + /** + * The external identifier for the invoice. + * @type {string} + * @memberof Invoice + */ + externalId: string; + /** + * The user ID associated with the invoice. + * @type {string} + * @memberof Invoice + */ + userId: string; + /** + * The email address of the payer. + * @type {string} + * @memberof Invoice + */ + payerEmail?: string; + /** + * A description of the invoice. + * @type {string} + * @memberof Invoice + */ + description?: string; + /** + * + * @type {InvoicePaymentMethod} + * @memberof Invoice + */ + paymentMethod?: InvoicePaymentMethod; + /** + * + * @type {InvoiceStatus} + * @memberof Invoice + */ + status: InvoiceStatus; + /** + * The name of the merchant. + * @type {string} + * @memberof Invoice + */ + merchantName: string; + /** + * The URL of the merchant's profile picture. + * @type {string} + * @memberof Invoice + */ + merchantProfilePictureUrl: string; + /** + * The locale or language used for the invoice. + * @type {string} + * @memberof Invoice + */ + locale?: string; + /** + * The total amount of the invoice. + * @type {number} + * @memberof Invoice + */ + amount: number; + /** + * Representing a date and time in ISO 8601 format. + * @type {Date} + * @memberof Invoice + */ + expiryDate: Date; + /** + * The URL to view the invoice. + * @type {string} + * @memberof Invoice + */ + invoiceUrl: string; + /** + * An array of available banks for payment. + * @type {Array} + * @memberof Invoice + */ + availableBanks: Array; + /** + * An array of available retail outlets for payment. + * @type {Array} + * @memberof Invoice + */ + availableRetailOutlets: Array; + /** + * An array of available e-wallets for payment. + * @type {Array} + * @memberof Invoice + */ + availableEwallets: Array; + /** + * An array of available QR codes for payment. + * @type {Array} + * @memberof Invoice + */ + availableQrCodes: Array; + /** + * An array of available direct debit options for payment. + * @type {Array} + * @memberof Invoice + */ + availableDirectDebits: Array; + /** + * An array of available pay-later options for payment. + * @type {Array} + * @memberof Invoice + */ + availablePaylaters: Array; + /** + * Indicates whether credit card payments should be excluded. + * @type {boolean} + * @memberof Invoice + */ + shouldExcludeCreditCard?: boolean; + /** + * Indicates whether email notifications should be sent. + * @type {boolean} + * @memberof Invoice + */ + shouldSendEmail: boolean; + /** + * Representing a date and time in ISO 8601 format. + * @type {Date} + * @memberof Invoice + */ + created: Date; + /** + * Representing a date and time in ISO 8601 format. + * @type {Date} + * @memberof Invoice + */ + updated: Date; + /** + * The URL to redirect to on successful payment. + * @type {string} + * @memberof Invoice + */ + successRedirectUrl?: string; + /** + * The URL to redirect to on payment failure. + * @type {string} + * @memberof Invoice + */ + failureRedirectUrl?: string; + /** + * Indicates whether credit card authentication is required. + * @type {boolean} + * @memberof Invoice + */ + shouldAuthenticateCreditCard?: boolean; + /** + * + * @type {InvoiceCurrency} + * @memberof Invoice + */ + currency?: InvoiceCurrency; + /** + * An array of items included in the invoice. + * @type {Array} + * @memberof Invoice + */ + items?: Array; + /** + * Indicates whether the virtual account is fixed. + * @type {boolean} + * @memberof Invoice + */ + fixedVa?: boolean; + /** + * Representing a date and time in ISO 8601 format. + * @type {Date} + * @memberof Invoice + */ + reminderDate?: Date; + /** + * + * @type {CustomerObject} + * @memberof Invoice + */ + customer?: CustomerObject; + /** + * + * @type {NotificationPreference} + * @memberof Invoice + */ + customerNotificationPreference?: NotificationPreference; + /** + * An array of fees associated with the invoice. + * @type {Array} + * @memberof Invoice + */ + fees?: Array; +} + +/** + * Check if a given object implements the Invoice interface. + */ +export function instanceOfInvoice(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "externalId" in value; + isInstance = isInstance && "userId" in value; + isInstance = isInstance && "status" in value; + isInstance = isInstance && "merchantName" in value; + isInstance = isInstance && "merchantProfilePictureUrl" in value; + isInstance = isInstance && "amount" in value; + isInstance = isInstance && "expiryDate" in value; + isInstance = isInstance && "invoiceUrl" in value; + isInstance = isInstance && "availableBanks" in value; + isInstance = isInstance && "availableRetailOutlets" in value; + isInstance = isInstance && "availableEwallets" in value; + isInstance = isInstance && "availableQrCodes" in value; + isInstance = isInstance && "availableDirectDebits" in value; + isInstance = isInstance && "availablePaylaters" in value; + isInstance = isInstance && "shouldSendEmail" in value; + isInstance = isInstance && "created" in value; + isInstance = isInstance && "updated" in value; + + return isInstance; +} + +export function InvoiceFromJSON(json: any): Invoice { + return InvoiceFromJSONTyped(json, false); +} + +export function InvoiceFromJSONTyped(json: any, ignoreDiscriminator: boolean): Invoice { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'id': !exists(json, 'id') ? undefined : json['id'], + 'externalId': json['external_id'], + 'userId': json['user_id'], + 'payerEmail': !exists(json, 'payer_email') ? undefined : json['payer_email'], + 'description': !exists(json, 'description') ? undefined : json['description'], + 'paymentMethod': !exists(json, 'payment_method') ? undefined : InvoicePaymentMethodFromJSON(json['payment_method']), + 'status': InvoiceStatusFromJSON(json['status']), + 'merchantName': json['merchant_name'], + 'merchantProfilePictureUrl': json['merchant_profile_picture_url'], + 'locale': !exists(json, 'locale') ? undefined : json['locale'], + 'amount': json['amount'], + 'expiryDate': (new Date(json['expiry_date'])), + 'invoiceUrl': json['invoice_url'], + 'availableBanks': ((json['available_banks'] as Array).map(BankFromJSON)), + 'availableRetailOutlets': ((json['available_retail_outlets'] as Array).map(RetailOutletFromJSON)), + 'availableEwallets': ((json['available_ewallets'] as Array).map(EwalletFromJSON)), + 'availableQrCodes': ((json['available_qr_codes'] as Array).map(QrCodeFromJSON)), + 'availableDirectDebits': ((json['available_direct_debits'] as Array).map(DirectDebitFromJSON)), + 'availablePaylaters': ((json['available_paylaters'] as Array).map(PaylaterFromJSON)), + 'shouldExcludeCreditCard': !exists(json, 'should_exclude_credit_card') ? undefined : json['should_exclude_credit_card'], + 'shouldSendEmail': json['should_send_email'], + 'created': (new Date(json['created'])), + 'updated': (new Date(json['updated'])), + 'successRedirectUrl': !exists(json, 'success_redirect_url') ? undefined : json['success_redirect_url'], + 'failureRedirectUrl': !exists(json, 'failure_redirect_url') ? undefined : json['failure_redirect_url'], + 'shouldAuthenticateCreditCard': !exists(json, 'should_authenticate_credit_card') ? undefined : json['should_authenticate_credit_card'], + 'currency': !exists(json, 'currency') ? undefined : InvoiceCurrencyFromJSON(json['currency']), + 'items': !exists(json, 'items') ? undefined : ((json['items'] as Array).map(InvoiceItemFromJSON)), + 'fixedVa': !exists(json, 'fixed_va') ? undefined : json['fixed_va'], + 'reminderDate': !exists(json, 'reminder_date') ? undefined : (new Date(json['reminder_date'])), + 'customer': !exists(json, 'customer') ? undefined : CustomerObjectFromJSON(json['customer']), + 'customerNotificationPreference': !exists(json, 'customer_notification_preference') ? undefined : NotificationPreferenceFromJSON(json['customer_notification_preference']), + 'fees': !exists(json, 'fees') ? undefined : ((json['fees'] as Array).map(InvoiceFeeFromJSON)), + }; +} + +export function InvoiceToJSON(value?: Invoice | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'id': value.id, + 'external_id': value.externalId, + 'user_id': value.userId, + 'payer_email': value.payerEmail, + 'description': value.description, + 'payment_method': InvoicePaymentMethodToJSON(value.paymentMethod), + 'status': InvoiceStatusToJSON(value.status), + 'merchant_name': value.merchantName, + 'merchant_profile_picture_url': value.merchantProfilePictureUrl, + 'locale': value.locale, + 'amount': value.amount, + 'expiry_date': (value.expiryDate.toISOString()), + 'invoice_url': value.invoiceUrl, + 'available_banks': ((value.availableBanks as Array).map(BankToJSON)), + 'available_retail_outlets': ((value.availableRetailOutlets as Array).map(RetailOutletToJSON)), + 'available_ewallets': ((value.availableEwallets as Array).map(EwalletToJSON)), + 'available_qr_codes': ((value.availableQrCodes as Array).map(QrCodeToJSON)), + 'available_direct_debits': ((value.availableDirectDebits as Array).map(DirectDebitToJSON)), + 'available_paylaters': ((value.availablePaylaters as Array).map(PaylaterToJSON)), + 'should_exclude_credit_card': value.shouldExcludeCreditCard, + 'should_send_email': value.shouldSendEmail, + 'created': (value.created.toISOString()), + 'updated': (value.updated.toISOString()), + 'success_redirect_url': value.successRedirectUrl, + 'failure_redirect_url': value.failureRedirectUrl, + 'should_authenticate_credit_card': value.shouldAuthenticateCreditCard, + 'currency': InvoiceCurrencyToJSON(value.currency), + 'items': value.items === undefined ? undefined : ((value.items as Array).map(InvoiceItemToJSON)), + 'fixed_va': value.fixedVa, + 'reminder_date': value.reminderDate === undefined ? undefined : (value.reminderDate.toISOString()), + 'customer': CustomerObjectToJSON(value.customer), + 'customer_notification_preference': NotificationPreferenceToJSON(value.customerNotificationPreference), + 'fees': value.fees === undefined ? undefined : ((value.fees as Array).map(InvoiceFeeToJSON)), + }; +} + diff --git a/invoice/models/InvoiceClientType.ts b/invoice/models/InvoiceClientType.ts new file mode 100644 index 0000000..ce4848b --- /dev/null +++ b/invoice/models/InvoiceClientType.ts @@ -0,0 +1,36 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Representing the client type or source of an invoice. + * @export + */ +export const InvoiceClientType = { + Dashboard: 'DASHBOARD', + ApiGateway: 'API_GATEWAY', + Integration: 'INTEGRATION', + OnDemand: 'ON_DEMAND', + Recurring: 'RECURRING', + Mobile: 'MOBILE' +} as const; +export type InvoiceClientType = typeof InvoiceClientType[keyof typeof InvoiceClientType]; + + +export function InvoiceClientTypeFromJSON(json: any): InvoiceClientType { + return InvoiceClientTypeFromJSONTyped(json, false); +} + +export function InvoiceClientTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): InvoiceClientType { + return json as InvoiceClientType; +} + +export function InvoiceClientTypeToJSON(value?: InvoiceClientType | null): any { + return value as any; +} + diff --git a/invoice/models/InvoiceCurrency.ts b/invoice/models/InvoiceCurrency.ts new file mode 100644 index 0000000..17526d6 --- /dev/null +++ b/invoice/models/InvoiceCurrency.ts @@ -0,0 +1,33 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Representing the currency used for an invoice. + * @export + */ +export const InvoiceCurrency = { + Idr: 'IDR', + Usd: 'USD', + Php: 'PHP' +} as const; +export type InvoiceCurrency = typeof InvoiceCurrency[keyof typeof InvoiceCurrency]; + + +export function InvoiceCurrencyFromJSON(json: any): InvoiceCurrency { + return InvoiceCurrencyFromJSONTyped(json, false); +} + +export function InvoiceCurrencyFromJSONTyped(json: any, ignoreDiscriminator: boolean): InvoiceCurrency { + return json as InvoiceCurrency; +} + +export function InvoiceCurrencyToJSON(value?: InvoiceCurrency | null): any { + return value as any; +} + diff --git a/invoice/models/InvoiceError404ResponseDefinition.ts b/invoice/models/InvoiceError404ResponseDefinition.ts new file mode 100644 index 0000000..5085a22 --- /dev/null +++ b/invoice/models/InvoiceError404ResponseDefinition.ts @@ -0,0 +1,79 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * An error object used to indicate that the requested resource, in this case, an invoice, was not found. + * @export + * @interface InvoiceError404ResponseDefinition + */ +export interface InvoiceError404ResponseDefinition { + /** + * The specific error code indicating that the requested invoice was not found. + * @type {string} + * @memberof InvoiceError404ResponseDefinition + */ + errorCode: InvoiceError404ResponseDefinitionErrorCodeEnum; + /** + * A human-readable error message providing additional context about the resource not being found. + * @type {string} + * @memberof InvoiceError404ResponseDefinition + */ + message: string; +} + + +/** + * @export + */ +export const InvoiceError404ResponseDefinitionErrorCodeEnum = { + InvoiceNotFoundError: 'INVOICE_NOT_FOUND_ERROR' +} as const; +export type InvoiceError404ResponseDefinitionErrorCodeEnum = typeof InvoiceError404ResponseDefinitionErrorCodeEnum[keyof typeof InvoiceError404ResponseDefinitionErrorCodeEnum]; + + +/** + * Check if a given object implements the InvoiceError404ResponseDefinition interface. + */ +export function instanceOfInvoiceError404ResponseDefinition(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "errorCode" in value; + isInstance = isInstance && "message" in value; + + return isInstance; +} + +export function InvoiceError404ResponseDefinitionFromJSON(json: any): InvoiceError404ResponseDefinition { + return InvoiceError404ResponseDefinitionFromJSONTyped(json, false); +} + +export function InvoiceError404ResponseDefinitionFromJSONTyped(json: any, ignoreDiscriminator: boolean): InvoiceError404ResponseDefinition { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': json['error_code'], + 'message': json['message'], + }; +} + +export function InvoiceError404ResponseDefinitionToJSON(value?: InvoiceError404ResponseDefinition | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/invoice/models/InvoiceFee.ts b/invoice/models/InvoiceFee.ts new file mode 100644 index 0000000..5ecd150 --- /dev/null +++ b/invoice/models/InvoiceFee.ts @@ -0,0 +1,69 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * An object representing internal details for a fee associated with an invoice. + * @export + * @interface InvoiceFee + */ +export interface InvoiceFee { + /** + * The type of fee. + * @type {string} + * @memberof InvoiceFee + */ + type: string; + /** + * The value or amount of the fee. + * @type {number} + * @memberof InvoiceFee + */ + value: number; +} + +/** + * Check if a given object implements the InvoiceFee interface. + */ +export function instanceOfInvoiceFee(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "type" in value; + isInstance = isInstance && "value" in value; + + return isInstance; +} + +export function InvoiceFeeFromJSON(json: any): InvoiceFee { + return InvoiceFeeFromJSONTyped(json, false); +} + +export function InvoiceFeeFromJSONTyped(json: any, ignoreDiscriminator: boolean): InvoiceFee { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'type': json['type'], + 'value': json['value'], + }; +} + +export function InvoiceFeeToJSON(value?: InvoiceFee | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'type': value.type, + 'value': value.value, + }; +} + diff --git a/invoice/models/InvoiceItem.ts b/invoice/models/InvoiceItem.ts new file mode 100644 index 0000000..7bf1b27 --- /dev/null +++ b/invoice/models/InvoiceItem.ts @@ -0,0 +1,102 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * An object representing an item within an invoice. + * @export + * @interface InvoiceItem + */ +export interface InvoiceItem { + /** + * The name of the item. + * @type {string} + * @memberof InvoiceItem + */ + name: string; + /** + * The price of the item. + * @type {number} + * @memberof InvoiceItem + */ + price: number; + /** + * The quantity of the item. Must be greater than or equal to 0. + * @type {number} + * @memberof InvoiceItem + */ + quantity: number; + /** + * The reference ID of the item. + * @type {string} + * @memberof InvoiceItem + */ + referenceId?: string; + /** + * The URL associated with the item. + * @type {string} + * @memberof InvoiceItem + */ + url?: string; + /** + * The category of the item. + * @type {string} + * @memberof InvoiceItem + */ + category?: string; +} + +/** + * Check if a given object implements the InvoiceItem interface. + */ +export function instanceOfInvoiceItem(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "name" in value; + isInstance = isInstance && "price" in value; + isInstance = isInstance && "quantity" in value; + + return isInstance; +} + +export function InvoiceItemFromJSON(json: any): InvoiceItem { + return InvoiceItemFromJSONTyped(json, false); +} + +export function InvoiceItemFromJSONTyped(json: any, ignoreDiscriminator: boolean): InvoiceItem { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'name': json['name'], + 'price': json['price'], + 'quantity': json['quantity'], + 'referenceId': !exists(json, 'reference_id') ? undefined : json['reference_id'], + 'url': !exists(json, 'url') ? undefined : json['url'], + 'category': !exists(json, 'category') ? undefined : json['category'], + }; +} + +export function InvoiceItemToJSON(value?: InvoiceItem | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'name': value.name, + 'price': value.price, + 'quantity': value.quantity, + 'reference_id': value.referenceId, + 'url': value.url, + 'category': value.category, + }; +} + diff --git a/invoice/models/InvoiceNotFoundError.ts b/invoice/models/InvoiceNotFoundError.ts new file mode 100644 index 0000000..cd4726d --- /dev/null +++ b/invoice/models/InvoiceNotFoundError.ts @@ -0,0 +1,81 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Response definition for a 404 Not Found error when creating an invoice. + * @export + * @interface InvoiceNotFoundError + */ +export interface InvoiceNotFoundError { + /** + * The error code indicating the type of error that occurred. + * @type {string} + * @memberof InvoiceNotFoundError + */ + errorCode: InvoiceNotFoundErrorErrorCodeEnum; + /** + * A human-readable error message that provides additional information about the error. + * @type {string} + * @memberof InvoiceNotFoundError + */ + message: string; +} + + +/** + * @export + */ +export const InvoiceNotFoundErrorErrorCodeEnum = { + CallbackVirtualAccountNotFoundError: 'CALLBACK_VIRTUAL_ACCOUNT_NOT_FOUND_ERROR', + UniqueAccountNumberUnavailableError: 'UNIQUE_ACCOUNT_NUMBER_UNAVAILABLE_ERROR', + PaymentCodeNotAvailableError: 'PAYMENT_CODE_NOT_AVAILABLE_ERROR' +} as const; +export type InvoiceNotFoundErrorErrorCodeEnum = typeof InvoiceNotFoundErrorErrorCodeEnum[keyof typeof InvoiceNotFoundErrorErrorCodeEnum]; + + +/** + * Check if a given object implements the InvoiceNotFoundError interface. + */ +export function instanceOfInvoiceNotFoundError(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "errorCode" in value; + isInstance = isInstance && "message" in value; + + return isInstance; +} + +export function InvoiceNotFoundErrorFromJSON(json: any): InvoiceNotFoundError { + return InvoiceNotFoundErrorFromJSONTyped(json, false); +} + +export function InvoiceNotFoundErrorFromJSONTyped(json: any, ignoreDiscriminator: boolean): InvoiceNotFoundError { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': json['error_code'], + 'message': json['message'], + }; +} + +export function InvoiceNotFoundErrorToJSON(value?: InvoiceNotFoundError | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/invoice/models/InvoicePaymentMethod.ts b/invoice/models/InvoicePaymentMethod.ts new file mode 100644 index 0000000..a0dc1aa --- /dev/null +++ b/invoice/models/InvoicePaymentMethod.ts @@ -0,0 +1,40 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Representing the payment method used for an invoice. + * @export + */ +export const InvoicePaymentMethod = { + Pool: 'POOL', + CallbackVirtualAccount: 'CALLBACK_VIRTUAL_ACCOUNT', + CreditCard: 'CREDIT_CARD', + RetailOutlet: 'RETAIL_OUTLET', + QrCode: 'QR_CODE', + Qris: 'QRIS', + Ewallet: 'EWALLET', + DirectDebit: 'DIRECT_DEBIT', + BankTransfer: 'BANK_TRANSFER', + Paylater: 'PAYLATER' +} as const; +export type InvoicePaymentMethod = typeof InvoicePaymentMethod[keyof typeof InvoicePaymentMethod]; + + +export function InvoicePaymentMethodFromJSON(json: any): InvoicePaymentMethod { + return InvoicePaymentMethodFromJSONTyped(json, false); +} + +export function InvoicePaymentMethodFromJSONTyped(json: any, ignoreDiscriminator: boolean): InvoicePaymentMethod { + return json as InvoicePaymentMethod; +} + +export function InvoicePaymentMethodToJSON(value?: InvoicePaymentMethod | null): any { + return value as any; +} + diff --git a/invoice/models/InvoiceStatus.ts b/invoice/models/InvoiceStatus.ts new file mode 100644 index 0000000..e6bc5af --- /dev/null +++ b/invoice/models/InvoiceStatus.ts @@ -0,0 +1,34 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Representing the status of an invoice. + * @export + */ +export const InvoiceStatus = { + Pending: 'PENDING', + Paid: 'PAID', + Settled: 'SETTLED', + Expired: 'EXPIRED' +} as const; +export type InvoiceStatus = typeof InvoiceStatus[keyof typeof InvoiceStatus]; + + +export function InvoiceStatusFromJSON(json: any): InvoiceStatus { + return InvoiceStatusFromJSONTyped(json, false); +} + +export function InvoiceStatusFromJSONTyped(json: any, ignoreDiscriminator: boolean): InvoiceStatus { + return json as InvoiceStatus; +} + +export function InvoiceStatusToJSON(value?: InvoiceStatus | null): any { + return value as any; +} + diff --git a/invoice/models/NotificationChannel.ts b/invoice/models/NotificationChannel.ts new file mode 100644 index 0000000..a6d21ca --- /dev/null +++ b/invoice/models/NotificationChannel.ts @@ -0,0 +1,34 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Representing a notification channel for sending messages. + * @export + */ +export const NotificationChannel = { + Email: 'email', + Sms: 'sms', + Whatsapp: 'whatsapp', + Viber: 'viber' +} as const; +export type NotificationChannel = typeof NotificationChannel[keyof typeof NotificationChannel]; + + +export function NotificationChannelFromJSON(json: any): NotificationChannel { + return NotificationChannelFromJSONTyped(json, false); +} + +export function NotificationChannelFromJSONTyped(json: any, ignoreDiscriminator: boolean): NotificationChannel { + return json as NotificationChannel; +} + +export function NotificationChannelToJSON(value?: NotificationChannel | null): any { + return value as any; +} + diff --git a/invoice/models/NotificationPreference.ts b/invoice/models/NotificationPreference.ts new file mode 100644 index 0000000..bdf3d1f --- /dev/null +++ b/invoice/models/NotificationPreference.ts @@ -0,0 +1,90 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { NotificationChannel } from './NotificationChannel'; +import { + NotificationChannelFromJSON, + NotificationChannelFromJSONTyped, + NotificationChannelToJSON, +} from './NotificationChannel'; + +/** + * An object representing notification preferences for different invoice events. + * @export + * @interface NotificationPreference + */ +export interface NotificationPreference { + /** + * Notification channels for when an invoice is created. + * @type {Array} + * @memberof NotificationPreference + */ + invoiceCreated?: Array; + /** + * Notification channels for invoice reminders. + * @type {Array} + * @memberof NotificationPreference + */ + invoiceReminder?: Array; + /** + * Notification channels for expired invoices. + * @type {Array} + * @memberof NotificationPreference + */ + invoiceExpired?: Array; + /** + * Notification channels for when an invoice is paid. + * @type {Array} + * @memberof NotificationPreference + */ + invoicePaid?: Array; +} + +/** + * Check if a given object implements the NotificationPreference interface. + */ +export function instanceOfNotificationPreference(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function NotificationPreferenceFromJSON(json: any): NotificationPreference { + return NotificationPreferenceFromJSONTyped(json, false); +} + +export function NotificationPreferenceFromJSONTyped(json: any, ignoreDiscriminator: boolean): NotificationPreference { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'invoiceCreated': !exists(json, 'invoice_created') ? undefined : ((json['invoice_created'] as Array).map(NotificationChannelFromJSON)), + 'invoiceReminder': !exists(json, 'invoice_reminder') ? undefined : ((json['invoice_reminder'] as Array).map(NotificationChannelFromJSON)), + 'invoiceExpired': !exists(json, 'invoice_expired') ? undefined : ((json['invoice_expired'] as Array).map(NotificationChannelFromJSON)), + 'invoicePaid': !exists(json, 'invoice_paid') ? undefined : ((json['invoice_paid'] as Array).map(NotificationChannelFromJSON)), + }; +} + +export function NotificationPreferenceToJSON(value?: NotificationPreference | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'invoice_created': value.invoiceCreated === undefined ? undefined : ((value.invoiceCreated as Array).map(NotificationChannelToJSON)), + 'invoice_reminder': value.invoiceReminder === undefined ? undefined : ((value.invoiceReminder as Array).map(NotificationChannelToJSON)), + 'invoice_expired': value.invoiceExpired === undefined ? undefined : ((value.invoiceExpired as Array).map(NotificationChannelToJSON)), + 'invoice_paid': value.invoicePaid === undefined ? undefined : ((value.invoicePaid as Array).map(NotificationChannelToJSON)), + }; +} + diff --git a/invoice/models/Paylater.ts b/invoice/models/Paylater.ts new file mode 100644 index 0000000..64d846c --- /dev/null +++ b/invoice/models/Paylater.ts @@ -0,0 +1,75 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { PaylaterType } from './PaylaterType'; +import { + PaylaterTypeFromJSON, + PaylaterTypeFromJSONTyped, + PaylaterTypeToJSON, +} from './PaylaterType'; + +/** + * An object representing paylater details for invoices. + * @export + * @interface Paylater + */ +export interface Paylater { + /** + * + * @type {PaylaterType} + * @memberof Paylater + */ + paylaterType: PaylaterType; + /** + * Indicates whether this paylater option should be excluded. + * @type {boolean} + * @memberof Paylater + */ + shouldExclude?: boolean; +} + +/** + * Check if a given object implements the Paylater interface. + */ +export function instanceOfPaylater(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "paylaterType" in value; + + return isInstance; +} + +export function PaylaterFromJSON(json: any): Paylater { + return PaylaterFromJSONTyped(json, false); +} + +export function PaylaterFromJSONTyped(json: any, ignoreDiscriminator: boolean): Paylater { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'paylaterType': PaylaterTypeFromJSON(json['paylater_type']), + 'shouldExclude': !exists(json, 'should_exclude') ? undefined : json['should_exclude'], + }; +} + +export function PaylaterToJSON(value?: Paylater | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'paylater_type': PaylaterTypeToJSON(value.paylaterType), + 'should_exclude': value.shouldExclude, + }; +} + diff --git a/invoice/models/PaylaterType.ts b/invoice/models/PaylaterType.ts new file mode 100644 index 0000000..d43cdac --- /dev/null +++ b/invoice/models/PaylaterType.ts @@ -0,0 +1,36 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Representing the available paylater channels used for invoice-related transactions. + * @export + */ +export const PaylaterType = { + Kredivo: 'KREDIVO', + Akulaku: 'AKULAKU', + Uangme: 'UANGME', + Billease: 'BILLEASE', + Cashalo: 'CASHALO', + Atome: 'ATOME' +} as const; +export type PaylaterType = typeof PaylaterType[keyof typeof PaylaterType]; + + +export function PaylaterTypeFromJSON(json: any): PaylaterType { + return PaylaterTypeFromJSONTyped(json, false); +} + +export function PaylaterTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaylaterType { + return json as PaylaterType; +} + +export function PaylaterTypeToJSON(value?: PaylaterType | null): any { + return value as any; +} + diff --git a/invoice/models/QrCode.ts b/invoice/models/QrCode.ts new file mode 100644 index 0000000..c0b7e3c --- /dev/null +++ b/invoice/models/QrCode.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { QrCodeType } from './QrCodeType'; +import { + QrCodeTypeFromJSON, + QrCodeTypeFromJSONTyped, + QrCodeTypeToJSON, +} from './QrCodeType'; + +/** + * An object representing QR code details for invoices. + * @export + * @interface QrCode + */ +export interface QrCode { + /** + * + * @type {QrCodeType} + * @memberof QrCode + */ + qrCodeType: QrCodeType; +} + +/** + * Check if a given object implements the QrCode interface. + */ +export function instanceOfQrCode(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "qrCodeType" in value; + + return isInstance; +} + +export function QrCodeFromJSON(json: any): QrCode { + return QrCodeFromJSONTyped(json, false); +} + +export function QrCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): QrCode { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'qrCodeType': QrCodeTypeFromJSON(json['qr_code_type']), + }; +} + +export function QrCodeToJSON(value?: QrCode | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'qr_code_type': QrCodeTypeToJSON(value.qrCodeType), + }; +} + diff --git a/invoice/models/QrCodeType.ts b/invoice/models/QrCodeType.ts new file mode 100644 index 0000000..5885382 --- /dev/null +++ b/invoice/models/QrCodeType.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Representing the available QR Code channels used for invoice-related transactions. + * @export + */ +export const QrCodeType = { + Qris: 'QRIS', + Promptpay: 'PROMPTPAY' +} as const; +export type QrCodeType = typeof QrCodeType[keyof typeof QrCodeType]; + + +export function QrCodeTypeFromJSON(json: any): QrCodeType { + return QrCodeTypeFromJSONTyped(json, false); +} + +export function QrCodeTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): QrCodeType { + return json as QrCodeType; +} + +export function QrCodeTypeToJSON(value?: QrCodeType | null): any { + return value as any; +} + diff --git a/invoice/models/RetailOutlet.ts b/invoice/models/RetailOutlet.ts new file mode 100644 index 0000000..457aab4 --- /dev/null +++ b/invoice/models/RetailOutlet.ts @@ -0,0 +1,91 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { RetailOutletName } from './RetailOutletName'; +import { + RetailOutletNameFromJSON, + RetailOutletNameFromJSONTyped, + RetailOutletNameToJSON, +} from './RetailOutletName'; + +/** + * An object representing retail outlet details for invoices. + * @export + * @interface RetailOutlet + */ +export interface RetailOutlet { + /** + * + * @type {RetailOutletName} + * @memberof RetailOutlet + */ + retailOutletName: RetailOutletName; + /** + * The payment code. + * @type {string} + * @memberof RetailOutlet + */ + paymentCode?: string; + /** + * The transfer amount. + * @type {number} + * @memberof RetailOutlet + */ + transferAmount?: number; + /** + * The name of the merchant. + * @type {string} + * @memberof RetailOutlet + */ + merchantName?: string; +} + +/** + * Check if a given object implements the RetailOutlet interface. + */ +export function instanceOfRetailOutlet(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "retailOutletName" in value; + + return isInstance; +} + +export function RetailOutletFromJSON(json: any): RetailOutlet { + return RetailOutletFromJSONTyped(json, false); +} + +export function RetailOutletFromJSONTyped(json: any, ignoreDiscriminator: boolean): RetailOutlet { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'retailOutletName': RetailOutletNameFromJSON(json['retail_outlet_name']), + 'paymentCode': !exists(json, 'payment_code') ? undefined : json['payment_code'], + 'transferAmount': !exists(json, 'transfer_amount') ? undefined : json['transfer_amount'], + 'merchantName': !exists(json, 'merchant_name') ? undefined : json['merchant_name'], + }; +} + +export function RetailOutletToJSON(value?: RetailOutlet | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'retail_outlet_name': RetailOutletNameToJSON(value.retailOutletName), + 'payment_code': value.paymentCode, + 'transfer_amount': value.transferAmount, + 'merchant_name': value.merchantName, + }; +} + diff --git a/invoice/models/RetailOutletName.ts b/invoice/models/RetailOutletName.ts new file mode 100644 index 0000000..51e2254 --- /dev/null +++ b/invoice/models/RetailOutletName.ts @@ -0,0 +1,39 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Representing the available retail outlet channels used for invoice-related transactions. + * @export + */ +export const RetailOutletName = { + Alfamart: 'ALFAMART', + Indomaret: 'INDOMARET', + _7Eleven: '7ELEVEN', + Cebuana: 'CEBUANA', + DpEcpayLoan: 'DP_ECPAY_LOAN', + DpMlhuillier: 'DP_MLHUILLIER', + DpPalawan: 'DP_PALAWAN', + DpEcpaySchool: 'DP_ECPAY_SCHOOL', + Lbc: 'LBC' +} as const; +export type RetailOutletName = typeof RetailOutletName[keyof typeof RetailOutletName]; + + +export function RetailOutletNameFromJSON(json: any): RetailOutletName { + return RetailOutletNameFromJSONTyped(json, false); +} + +export function RetailOutletNameFromJSONTyped(json: any, ignoreDiscriminator: boolean): RetailOutletName { + return json as RetailOutletName; +} + +export function RetailOutletNameToJSON(value?: RetailOutletName | null): any { + return value as any; +} + diff --git a/invoice/models/ServerError.ts b/invoice/models/ServerError.ts new file mode 100644 index 0000000..522f11f --- /dev/null +++ b/invoice/models/ServerError.ts @@ -0,0 +1,79 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface ServerError + */ +export interface ServerError { + /** + * + * @type {string} + * @memberof ServerError + */ + errorCode: ServerErrorErrorCodeEnum; + /** + * + * @type {string} + * @memberof ServerError + */ + message: string; +} + + +/** + * @export + */ +export const ServerErrorErrorCodeEnum = { + ServerError: 'SERVER_ERROR' +} as const; +export type ServerErrorErrorCodeEnum = typeof ServerErrorErrorCodeEnum[keyof typeof ServerErrorErrorCodeEnum]; + + +/** + * Check if a given object implements the ServerError interface. + */ +export function instanceOfServerError(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "errorCode" in value; + isInstance = isInstance && "message" in value; + + return isInstance; +} + +export function ServerErrorFromJSON(json: any): ServerError { + return ServerErrorFromJSONTyped(json, false); +} + +export function ServerErrorFromJSONTyped(json: any, ignoreDiscriminator: boolean): ServerError { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': json['error_code'], + 'message': json['message'], + }; +} + +export function ServerErrorToJSON(value?: ServerError | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/invoice/models/UnauthorizedError.ts b/invoice/models/UnauthorizedError.ts new file mode 100644 index 0000000..60ea49a --- /dev/null +++ b/invoice/models/UnauthorizedError.ts @@ -0,0 +1,79 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * An error object used to indicate unauthorized access to an invoice-related resource. + * @export + * @interface UnauthorizedError + */ +export interface UnauthorizedError { + /** + * The specific error code associated with the unauthorized access. + * @type {string} + * @memberof UnauthorizedError + */ + errorCode: UnauthorizedErrorErrorCodeEnum; + /** + * A human-readable error message providing additional context about the unauthorized access. + * @type {string} + * @memberof UnauthorizedError + */ + message: string; +} + + +/** + * @export + */ +export const UnauthorizedErrorErrorCodeEnum = { + InvalidApiKey: 'INVALID_API_KEY' +} as const; +export type UnauthorizedErrorErrorCodeEnum = typeof UnauthorizedErrorErrorCodeEnum[keyof typeof UnauthorizedErrorErrorCodeEnum]; + + +/** + * Check if a given object implements the UnauthorizedError interface. + */ +export function instanceOfUnauthorizedError(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "errorCode" in value; + isInstance = isInstance && "message" in value; + + return isInstance; +} + +export function UnauthorizedErrorFromJSON(json: any): UnauthorizedError { + return UnauthorizedErrorFromJSONTyped(json, false); +} + +export function UnauthorizedErrorFromJSONTyped(json: any, ignoreDiscriminator: boolean): UnauthorizedError { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': json['error_code'], + 'message': json['message'], + }; +} + +export function UnauthorizedErrorToJSON(value?: UnauthorizedError | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/invoice/models/index.ts b/invoice/models/index.ts new file mode 100644 index 0000000..a4c4af0 --- /dev/null +++ b/invoice/models/index.ts @@ -0,0 +1,33 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './AddressObject'; +export * from './AlternativeDisplayItem'; +export * from './BadRequestError'; +export * from './Bank'; +export * from './BankCode'; +export * from './CreateInvoiceRequest'; +export * from './CustomerObject'; +export * from './DirectDebit'; +export * from './DirectDebitType'; +export * from './Ewallet'; +export * from './EwalletType'; +export * from './ForbiddenError'; +export * from './Invoice'; +export * from './InvoiceClientType'; +export * from './InvoiceCurrency'; +export * from './InvoiceError404ResponseDefinition'; +export * from './InvoiceFee'; +export * from './InvoiceItem'; +export * from './InvoiceNotFoundError'; +export * from './InvoicePaymentMethod'; +export * from './InvoiceStatus'; +export * from './NotificationChannel'; +export * from './NotificationPreference'; +export * from './Paylater'; +export * from './PaylaterType'; +export * from './QrCode'; +export * from './QrCodeType'; +export * from './RetailOutlet'; +export * from './RetailOutletName'; +export * from './ServerError'; +export * from './UnauthorizedError'; diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 4587d74..0000000 --- a/package-lock.json +++ /dev/null @@ -1,16683 +0,0 @@ -{ - "name": "xendit-node", - "version": "1.22.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "xendit-node", - "version": "1.22.0", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.1" - }, - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^2.13.0", - "@typescript-eslint/parser": "^2.13.0", - "babel-eslint": "^10.0.3", - "chai": "^4.2.0", - "chai-as-promised": "^7.1.1", - "coveralls": "^3.0.11", - "dotenv": "^8.1.0", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.3.0", - "eslint-plugin-prettier": "^3.1.2", - "husky": "^3.0.5", - "lint-staged": "^9.3.0", - "markdown-toc": "^1.2.0", - "mocha": "^6.2.3", - "nock": "^11.9.1", - "np": "^7.4.0", - "nyc": "^15.0.1", - "prettier": "^1.18.2", - "typescript": "^3.7.4" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", - "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", - "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.12", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.10", - "@babel/types": "^7.16.8", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", - "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", - "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", - "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.10", - "@babel/types": "^7.16.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@samverschueren/stream-to-observable": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", - "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", - "dev": true, - "dependencies": { - "any-observable": "^0.3.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependenciesMeta": { - "rxjs": { - "optional": true - }, - "zen-observable": { - "optional": true - } - } - }, - "node_modules/@sindresorhus/is": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz", - "integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "node_modules/@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "17.0.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.12.tgz", - "integrity": "sha512-4YpbAsnJXWYK/fpTVFlMIcUIho2AYCi4wg5aNPrG1ng7fn/1/RZfCIpRCiBX+12RVa34RluilnvCqD+g3KiSiA==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^2.0.0", - "eslint": "^5.0.0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", - "dev": true, - "dependencies": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/aggregate-error/node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "dependencies": { - "default-require-extensions": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/autolinker": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz", - "integrity": "sha1-BlK0kYgYefB3XazgzcoyM5QqTkc=", - "dev": true, - "dependencies": { - "gulp-header": "^1.7.1" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/boxen/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/boxen/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/boxen/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/boxen/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/braces/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "node_modules/cacheable-lookup": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz", - "integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==", - "dev": true, - "dependencies": { - "@types/keyv": "^3.1.1", - "keyv": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001302", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001302.tgz", - "integrity": "sha512-YYTMO+tfwvgUN+1ZnRViE53Ma1S/oETg+J2lISsqi/ZTNThj3ZYBOKP2rHwJc37oCsPqAzJ3w2puZHn0xlLPPw==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "node_modules/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "dev": true, - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 5" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "dev": true, - "dependencies": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/clone-response/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/coffee-script": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", - "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", - "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", - "dev": true, - "bin": { - "cake": "bin/cake", - "coffee": "bin/coffee" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", - "dev": true, - "dependencies": { - "source-map": "^0.6.1" - } - }, - "node_modules/concat-with-sourcemaps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/configstore/node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cosmiconfig/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cosmiconfig/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/coveralls": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", - "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", - "dev": true, - "dependencies": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.5", - "request": "^2.88.2" - }, - "bin": { - "coveralls": "bin/coveralls.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-response": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz", - "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==", - "dev": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", - "dev": true, - "dependencies": { - "strip-bom": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/del": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", - "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", - "dev": true, - "dependencies": { - "globby": "^10.0.1", - "graceful-fs": "^4.2.2", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.1", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/del/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/diacritics-map": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/diacritics-map/-/diacritics-map-0.1.0.tgz", - "integrity": "sha1-bfwP+dAQAKLt8oZTccrDFulJd68=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.53", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.53.tgz", - "integrity": "sha512-rFveSKQczlcav+H3zkKqykU6ANseFwXwkl855jOIap5/0gnEcuIhv2ecz6aoTrXavF6I/CEBeRnBnkB51k06ew==", - "dev": true - }, - "node_modules/elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-abstract/node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", - "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "dependencies": { - "get-stdin": "^6.0.0" - }, - "bin": { - "eslint-config-prettier-check": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=3.14.1" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true, - "engines": { - "node": ">=6.5.0" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "dependencies": { - "fill-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "dependencies": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "dependencies": { - "is-buffer": "~2.0.3" - }, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/flat/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/foreground-child/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/foreground-child/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/github-url-from-git": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-url-from-git/-/github-url-from-git-1.5.0.tgz", - "integrity": "sha1-+YX+3MCpqledyI16/waNVcxiUaA=", - "dev": true - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", - "dev": true, - "dependencies": { - "ini": "1.3.7" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/got": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz", - "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^2.0.0", - "@szmarczak/http-timer": "^4.0.0", - "@types/cacheable-request": "^6.0.1", - "cacheable-lookup": "^2.0.0", - "cacheable-request": "^7.0.1", - "decompress-response": "^5.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^5.0.0", - "lowercase-keys": "^2.0.0", - "mimic-response": "^2.1.0", - "p-cancelable": "^2.0.0", - "p-event": "^4.0.0", - "responselike": "^2.0.0", - "to-readable-stream": "^2.0.0", - "type-fest": "^0.10.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got/node_modules/type-fest": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz", - "integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "node_modules/gray-matter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-2.1.1.tgz", - "integrity": "sha1-MELZrewqHe1qdwep7SOA+KF6Qw4=", - "dev": true, - "dependencies": { - "ansi-red": "^0.1.1", - "coffee-script": "^1.12.4", - "extend-shallow": "^2.0.1", - "js-yaml": "^3.8.1", - "toml": "^2.3.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/gulp-header": { - "version": "1.8.12", - "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz", - "integrity": "sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==", - "deprecated": "Removed event-stream from gulp-header", - "dev": true, - "dependencies": { - "concat-with-sourcemaps": "*", - "lodash.template": "^4.4.0", - "through2": "^2.0.0" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasha/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/husky": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-3.1.0.tgz", - "integrity": "sha512-FJkPoHHB+6s4a+jwPqBudBDvYZsoQW5/HBuMSehC8qDiCe50kpcxeqFoDSlow+9I6wg47YxBoT3WxaURlrDIIQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "chalk": "^2.4.2", - "ci-info": "^2.0.0", - "cosmiconfig": "^5.2.1", - "execa": "^1.0.0", - "get-stdin": "^7.0.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^4.2.0", - "please-upgrade-node": "^3.2.0", - "read-pkg": "^5.2.0", - "run-node": "^1.0.0", - "slash": "^3.0.0" - }, - "bin": { - "husky-run": "run.js", - "husky-upgrade": "lib/upgrader/bin.js" - }, - "engines": { - "node": ">=8.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/husky" - } - }, - "node_modules/husky/node_modules/get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true - }, - "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/inquirer-autosubmit-prompt": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/inquirer-autosubmit-prompt/-/inquirer-autosubmit-prompt-0.2.0.tgz", - "integrity": "sha512-mzNrusCk5L6kSzlN0Ioddn8yzrhYNLli+Sn2ZxMuLechMYAzakiFCIULxsxlQb5YKzthLGfrFACcWoAvM7p04Q==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "inquirer": "^6.2.1", - "rxjs": "^6.3.3" - } - }, - "node_modules/inquirer-autosubmit-prompt/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autosubmit-prompt/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autosubmit-prompt/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autosubmit-prompt/node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "node_modules/inquirer-autosubmit-prompt/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autosubmit-prompt/node_modules/inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/inquirer-autosubmit-prompt/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autosubmit-prompt/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autosubmit-prompt/node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "node_modules/inquirer-autosubmit-prompt/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autosubmit-prompt/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autosubmit-prompt/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-autosubmit-prompt/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "dev": true, - "dependencies": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "dev": true, - "dependencies": { - "symbol-observable": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-scoped": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-2.1.0.tgz", - "integrity": "sha512-Cv4OpPTHAK9kHYzkzCrof3VJh7H/PrG2MBUMvvJebaaUMbqhm0YAtXnvh0I3Hnj2tMZWwrRROWLSgfJrKqWmlQ==", - "dev": true, - "dependencies": { - "scoped-regex": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-url-superb": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", - "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "node_modules/issue-regex": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/issue-regex/-/issue-regex-3.1.0.tgz", - "integrity": "sha512-0RHjbtw9QXeSYnIEY5Yrp2QZrdtz21xBDV9C/GIlY2POmgoS6a7qjkYS5siRKXScnuAj5/SPv1C3YForNCHTJA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, - "dependencies": { - "append-transform": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", - "dev": true, - "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/keyv": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.5.tgz", - "integrity": "sha512-531pkGLqV3BMg0eDqqJFI0R1mkK1Nm5xIP2mM6keP5P8WfFtCkg2IOwplTUmlGoTgIg9yQYZ/kdihhz89XH3vA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", - "dev": true, - "dependencies": { - "set-getter": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true, - "bin": { - "lcov-parse": "bin/cli.js" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/lint-staged": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.5.0.tgz", - "integrity": "sha512-nawMob9cb/G1J98nb8v3VC/E8rcX1rryUYXVZ69aT9kde6YWX+uvNOEHY5yf2gcWcTJGiD0kqXmCnS3oD75GIA==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "commander": "^2.20.0", - "cosmiconfig": "^5.2.1", - "debug": "^4.1.1", - "dedent": "^0.7.0", - "del": "^5.0.0", - "execa": "^2.0.3", - "listr": "^0.14.3", - "log-symbols": "^3.0.0", - "micromatch": "^4.0.2", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.1.1", - "string-argv": "^0.3.0", - "stringify-object": "^3.3.0" - }, - "bin": { - "lint-staged": "bin/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/lint-staged/node_modules/execa": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz", - "integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^3.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": "^8.12.0 || >=9.7.0" - } - }, - "node_modules/lint-staged/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", - "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/list-item": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz", - "integrity": "sha1-DGXQDih8tmPMs8s4Sad+iewmilY=", - "dev": true, - "dependencies": { - "expand-range": "^1.8.1", - "extend-shallow": "^2.0.1", - "is-number": "^2.1.0", - "repeat-string": "^1.5.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", - "dev": true, - "dependencies": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/listr-input": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/listr-input/-/listr-input-0.2.1.tgz", - "integrity": "sha512-oa8iVG870qJq+OuuMK3DjGqFcwsK1SDu+kULp9kEq09TY231aideIZenr3lFOQdASpAr6asuyJBbX62/a3IIhg==", - "dev": true, - "dependencies": { - "inquirer": "^7.0.0", - "inquirer-autosubmit-prompt": "^0.2.0", - "rxjs": "^6.5.3", - "through": "^2.3.8" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "listr": "^0.14.2" - } - }, - "node_modules/listr-update-renderer/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr-update-renderer/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr-update-renderer/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr-update-renderer/node_modules/figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr-update-renderer/node_modules/log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "dependencies": { - "chalk": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr-update-renderer/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr-update-renderer/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-verbose-renderer/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-verbose-renderer/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-verbose-renderer/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-verbose-renderer/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-verbose-renderer/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "node_modules/lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "dependencies": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "node_modules/lodash.zip": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", - "dev": true - }, - "node_modules/log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true, - "engines": { - "node": ">=0.8.6" - } - }, - "node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", - "dev": true, - "dependencies": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/loupe": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz", - "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-link": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz", - "integrity": "sha1-MsXGUZmmRXMWMi0eQinRNAfIx88=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/markdown-toc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/markdown-toc/-/markdown-toc-1.2.0.tgz", - "integrity": "sha512-eOsq7EGd3asV0oBfmyqngeEIhrbkc7XVP63OwcJBIhH2EpG2PzFcbZdhy1jutXSlRBBVMNXHvMtSr5LAxSUvUg==", - "dev": true, - "dependencies": { - "concat-stream": "^1.5.2", - "diacritics-map": "^0.1.0", - "gray-matter": "^2.1.0", - "lazy-cache": "^2.0.2", - "list-item": "^1.1.1", - "markdown-link": "^0.1.1", - "minimist": "^1.2.0", - "mixin-deep": "^1.1.3", - "object.pick": "^1.2.0", - "remarkable": "^1.7.1", - "repeat-string": "^1.6.1", - "strip-color": "^0.1.0" - }, - "bin": { - "markdown-toc": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", - "dev": true - }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minimist-options/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", - "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", - "dev": true, - "dependencies": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.4", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "dependencies": { - "chalk": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha/node_modules/mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/mocha/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/new-github-release-url": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-1.0.0.tgz", - "integrity": "sha512-dle7yf655IMjyFUqn6Nxkb18r4AOAkzRcgcZv6WZ0IqrOH4QCEZ8Sm6I7XX21zvHdBeeMeTkhR9qT2Z0EJDx6A==", - "dev": true, - "dependencies": { - "type-fest": "^0.4.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/new-github-release-url/node_modules/type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/nock": { - "version": "11.9.1", - "resolved": "https://registry.npmjs.org/nock/-/nock-11.9.1.tgz", - "integrity": "sha512-U5wPctaY4/ar2JJ5Jg4wJxlbBfayxgKbiAeGh+a1kk6Pwnc2ZEuKviLyDSG6t0uXl56q7AALIxoM6FJrBSsVXA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.13", - "mkdirp": "^0.5.0", - "propagate": "^2.0.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/node-environment-flags/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, - "dependencies": { - "process-on-spawn": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/np": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/np/-/np-7.6.0.tgz", - "integrity": "sha512-WWGZtfNkE6MEkI7LE8NtG7poTqzTHj/tssBzcPnBAdMVPXkXDtX2wk0ptrj8YZ3u4TFmGSqioSohdud86aJxSg==", - "dev": true, - "dependencies": { - "@samverschueren/stream-to-observable": "^0.3.1", - "any-observable": "^0.5.1", - "async-exit-hook": "^2.0.1", - "chalk": "^4.1.0", - "cosmiconfig": "^7.0.0", - "del": "^6.0.0", - "escape-goat": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "execa": "^5.0.0", - "github-url-from-git": "^1.5.0", - "has-yarn": "^2.1.0", - "hosted-git-info": "^3.0.7", - "ignore-walk": "^3.0.3", - "import-local": "^3.0.2", - "inquirer": "^7.3.3", - "is-installed-globally": "^0.3.2", - "is-interactive": "^1.0.0", - "is-scoped": "^2.1.0", - "issue-regex": "^3.1.0", - "listr": "^0.14.3", - "listr-input": "^0.2.1", - "log-symbols": "^4.0.0", - "meow": "^8.1.0", - "minimatch": "^3.0.4", - "new-github-release-url": "^1.0.0", - "npm-name": "^6.0.1", - "onetime": "^5.1.2", - "open": "^7.3.0", - "ow": "^0.21.0", - "p-memoize": "^4.0.1", - "p-timeout": "^4.1.0", - "pkg-dir": "^5.0.0", - "read-pkg-up": "^7.0.1", - "rxjs": "^6.6.3", - "semver": "^7.3.4", - "split": "^1.0.1", - "symbol-observable": "^3.0.0", - "terminal-link": "^2.1.1", - "update-notifier": "^5.0.1" - }, - "bin": { - "np": "source/cli.js" - }, - "engines": { - "git": ">=2.11.0", - "node": ">=10", - "npm": ">=6.8.0", - "yarn": ">=1.7.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/np?sponsor=1" - } - }, - "node_modules/np/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/np/node_modules/any-observable": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.5.1.tgz", - "integrity": "sha512-8zv01bgDOp9PTmRTNCAHTw64TFP2rvlX4LvtNJLachaXY+AjmIvLT47fABNPCiIe89hKiSCo2n5zmPqI9CElPA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - }, - "peerDependenciesMeta": { - "rxjs": { - "optional": true - }, - "zen-observable": { - "optional": true - } - } - }, - "node_modules/np/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/np/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/np/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/np/node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/np/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/np/node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dev": true, - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/np/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/np/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/np/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/np/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/np/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/np/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/np/node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/np/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/np/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/np/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/np/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/np/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/np/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/np/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/np/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/np/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/np/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/np/node_modules/pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/np/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/np/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/np/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/np/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/np/node_modules/symbol-observable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-3.0.0.tgz", - "integrity": "sha512-6tDOXSHiVjuCaasQSWTmHUWn4PuG7qa3+1WT031yTc/swT7+rLiw3GOrFxaH1E3lLP09dH3bVuVDf2gK5rxG3Q==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/np/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm-name": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/npm-name/-/npm-name-6.0.1.tgz", - "integrity": "sha512-fhKRvUAxaYzMEUZim4mXWyfFbVS+M1CbrCLdAo3txWzrctxKka/h+KaBW0O9Cz5uOM00Nldn2JLWhuwnyW3SUw==", - "dev": true, - "dependencies": { - "got": "^10.6.0", - "is-scoped": "^2.1.0", - "is-url-superb": "^4.0.0", - "lodash.zip": "^4.2.0", - "org-regex": "^1.0.0", - "p-map": "^3.0.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.1.0", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, - "dependencies": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "bin": { - "nyc": "bin/nyc.js" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/nyc/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/nyc/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/nyc/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/nyc/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/nyc/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/nyc/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true, - "bin": { - "opencollective-postinstall": "index.js" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/org-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/org-regex/-/org-regex-1.0.0.tgz", - "integrity": "sha512-7bqkxkEJwzJQUAlyYniqEZ3Ilzjh0yoa62c7gL6Ijxj5bEpPL+8IE1Z0PFj0ywjjXQcdrwR51g9MIcLezR0hKQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ow": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/ow/-/ow-0.21.0.tgz", - "integrity": "sha512-dlsoDe39g7mhdsdrC1R/YwjT7yjVqE3svWwOlMGvN690waBkgEZBmKBdkmKvSt5/wZ6E0Jn/nIesPqMZOpPKqw==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "callsites": "^3.1.0", - "dot-prop": "^6.0.1", - "lodash.isequal": "^4.5.0", - "type-fest": "^0.20.2", - "vali-date": "^1.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ow/node_modules/@sindresorhus/is": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.4.0.tgz", - "integrity": "sha512-QppPM/8l3Mawvh4rn9CNEYIU9bxpXUCRMaX9yUpvBk1nMKusLKpfXGDEKExKaPhLzcn3lzil7pR6rnJ11HgeRQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/ow/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "dependencies": { - "p-timeout": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-event/node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-memoize": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-4.0.4.tgz", - "integrity": "sha512-ijdh0DP4Mk6J4FXlOM6vPPoCjPytcEseW8p/k5SDTSSfGV3E9bpt9Yzfifvzp6iohIieoLTkXRb32OWV0fB2Lw==", - "dev": true, - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.0.0", - "p-settle": "^4.1.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/p-memoize?sponsor=1" - } - }, - "node_modules/p-memoize/node_modules/mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-reflect": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz", - "integrity": "sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-settle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-4.1.1.tgz", - "integrity": "sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.2", - "p-reflect": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz", - "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json/node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json/node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/package-json/node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "node_modules/package-json/node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/package-json/node_modules/got/node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/package-json/node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "node_modules/package-json/node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/package-json/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/package-json/node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json/node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/package-json/node_modules/responselike/node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/package-json/node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "dependencies": { - "semver-compare": "^1.0.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, - "dependencies": { - "fromentries": "^1.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pupa/node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "dependencies": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/randomatic/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/randomatic/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/redent/node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "dependencies": { - "es6-error": "^4.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/remarkable": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.4.tgz", - "integrity": "sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg==", - "dev": true, - "dependencies": { - "argparse": "^1.0.10", - "autolinker": "~0.28.0" - }, - "bin": { - "remarkable": "bin/remarkable.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", - "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", - "dev": true, - "bin": { - "run-node": "run-node" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/scoped-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-2.1.0.tgz", - "integrity": "sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-getter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.1.tgz", - "integrity": "sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw==", - "dev": true, - "dependencies": { - "to-object-path": "^0.3.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "dependencies": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/spawn-wrap/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/spawn-wrap/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/stringify-object/node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-color": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", - "integrity": "sha1-EG9l09PmotlAHKwOsM6LinArT3s=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/table/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-readable-stream": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", - "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/to-regex-range/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/toml": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/toml/-/toml-2.3.6.tgz", - "integrity": "sha512-gVweAectJU3ebq//Ferr2JUY4WKSDe5N+z0FvjDncLGyHmIDoxgY/2Ie4qfEIDm4IS7OA6Rmdm7pdEEdMcV/xQ==", - "dev": true - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/update-notifier/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/update-notifier/node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/update-notifier/node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "dev": true, - "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", - "dev": true, - "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "dependencies": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/compat-data": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", - "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", - "dev": true - }, - "@babel/core": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", - "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.12", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.10", - "@babel/types": "^7.16.8", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", - "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true - }, - "@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", - "dev": true, - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", - "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", - "dev": true - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/traverse": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", - "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.10", - "@babel/types": "^7.16.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@samverschueren/stream-to-observable": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", - "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", - "dev": true, - "requires": { - "any-observable": "^0.3.0" - } - }, - "@sindresorhus/is": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz", - "integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "@types/node": { - "version": "17.0.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.12.tgz", - "integrity": "sha512-4YpbAsnJXWYK/fpTVFlMIcUIho2AYCi4wg5aNPrG1ng7fn/1/RZfCIpRCiBX+12RVa34RluilnvCqD+g3KiSiA==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" - }, - "dependencies": { - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", - "dev": true, - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "dependencies": { - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - } - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "requires": { - "string-width": "^4.1.0" - } - }, - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, - "any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", - "dev": true - }, - "append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "requires": { - "default-require-extensions": "^3.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "autolinker": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz", - "integrity": "sha1-BlK0kYgYefB3XazgzcoyM5QqTkc=", - "dev": true, - "requires": { - "gulp-header": "^1.7.1" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - }, - "dependencies": { - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - } - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "cacheable-lookup": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz", - "integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==", - "dev": true, - "requires": { - "@types/keyv": "^3.1.1", - "keyv": "^4.0.0" - } - }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "requires": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caniuse-lite": { - "version": "1.0.30001302", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001302.tgz", - "integrity": "sha512-YYTMO+tfwvgUN+1ZnRViE53Ma1S/oETg+J2lISsqi/ZTNThj3ZYBOKP2rHwJc37oCsPqAzJ3w2puZHn0xlLPPw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "dev": true, - "requires": { - "check-error": "^1.0.2" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "dev": true, - "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - }, - "dependencies": { - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "coffee-script": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", - "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - } - } - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "dependencies": { - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "coveralls": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", - "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", - "dev": true, - "requires": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.5", - "request": "^2.88.2" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - } - } - }, - "decompress-response": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz", - "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==", - "dev": true, - "requires": { - "mimic-response": "^2.0.0" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", - "dev": true, - "requires": { - "strip-bom": "^4.0.0" - } - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "del": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", - "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", - "dev": true, - "requires": { - "globby": "^10.0.1", - "graceful-fs": "^4.2.2", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.1", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "diacritics-map": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/diacritics-map/-/diacritics-map-0.1.0.tgz", - "integrity": "sha1-bfwP+dAQAKLt8oZTccrDFulJd68=", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "electron-to-chromium": { - "version": "1.4.53", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.53.tgz", - "integrity": "sha512-rFveSKQczlcav+H3zkKqykU6ANseFwXwkl855jOIap5/0gnEcuIhv2ecz6aoTrXavF6I/CEBeRnBnkB51k06ew==", - "dev": true - }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "dependencies": { - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-goat": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", - "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } - }, - "eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - } - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "github-url-from-git": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-url-from-git/-/github-url-from-git-1.5.0.tgz", - "integrity": "sha1-+YX+3MCpqledyI16/waNVcxiUaA=", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", - "dev": true, - "requires": { - "ini": "1.3.7" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "dependencies": { - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - } - } - }, - "got": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz", - "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==", - "dev": true, - "requires": { - "@sindresorhus/is": "^2.0.0", - "@szmarczak/http-timer": "^4.0.0", - "@types/cacheable-request": "^6.0.1", - "cacheable-lookup": "^2.0.0", - "cacheable-request": "^7.0.1", - "decompress-response": "^5.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^5.0.0", - "lowercase-keys": "^2.0.0", - "mimic-response": "^2.1.0", - "p-cancelable": "^2.0.0", - "p-event": "^4.0.0", - "responselike": "^2.0.0", - "to-readable-stream": "^2.0.0", - "type-fest": "^0.10.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "type-fest": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz", - "integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "gray-matter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-2.1.1.tgz", - "integrity": "sha1-MELZrewqHe1qdwep7SOA+KF6Qw4=", - "dev": true, - "requires": { - "ansi-red": "^0.1.1", - "coffee-script": "^1.12.4", - "extend-shallow": "^2.0.1", - "js-yaml": "^3.8.1", - "toml": "^2.3.2" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "gulp-header": { - "version": "1.8.12", - "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz", - "integrity": "sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==", - "dev": true, - "requires": { - "concat-with-sourcemaps": "*", - "lodash.template": "^4.4.0", - "through2": "^2.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true - }, - "hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "requires": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "dependencies": { - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "husky": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-3.1.0.tgz", - "integrity": "sha512-FJkPoHHB+6s4a+jwPqBudBDvYZsoQW5/HBuMSehC8qDiCe50kpcxeqFoDSlow+9I6wg47YxBoT3WxaURlrDIIQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "ci-info": "^2.0.0", - "cosmiconfig": "^5.2.1", - "execa": "^1.0.0", - "get-stdin": "^7.0.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^4.2.0", - "please-upgrade-node": "^3.2.0", - "read-pkg": "^5.2.0", - "run-node": "^1.0.0", - "slash": "^3.0.0" - }, - "dependencies": { - "get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", - "dev": true - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "inquirer-autosubmit-prompt": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/inquirer-autosubmit-prompt/-/inquirer-autosubmit-prompt-0.2.0.tgz", - "integrity": "sha512-mzNrusCk5L6kSzlN0Ioddn8yzrhYNLli+Sn2ZxMuLechMYAzakiFCIULxsxlQb5YKzthLGfrFACcWoAvM7p04Q==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "inquirer": "^6.2.1", - "rxjs": "^6.3.3" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - } - } - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "dev": true, - "requires": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-observable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "dev": true, - "requires": { - "symbol-observable": "^1.1.0" - } - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-scoped": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-2.1.0.tgz", - "integrity": "sha512-Cv4OpPTHAK9kHYzkzCrof3VJh7H/PrG2MBUMvvJebaaUMbqhm0YAtXnvh0I3Hnj2tMZWwrRROWLSgfJrKqWmlQ==", - "dev": true, - "requires": { - "scoped-regex": "^2.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-url-superb": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", - "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "issue-regex": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/issue-regex/-/issue-regex-3.1.0.tgz", - "integrity": "sha512-0RHjbtw9QXeSYnIEY5Yrp2QZrdtz21xBDV9C/GIlY2POmgoS6a7qjkYS5siRKXScnuAj5/SPv1C3YForNCHTJA==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, - "requires": { - "append-transform": "^2.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "keyv": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.5.tgz", - "integrity": "sha512-531pkGLqV3BMg0eDqqJFI0R1mkK1Nm5xIP2mM6keP5P8WfFtCkg2IOwplTUmlGoTgIg9yQYZ/kdihhz89XH3vA==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "requires": { - "package-json": "^6.3.0" - } - }, - "lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", - "dev": true, - "requires": { - "set-getter": "^0.1.0" - } - }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "lint-staged": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.5.0.tgz", - "integrity": "sha512-nawMob9cb/G1J98nb8v3VC/E8rcX1rryUYXVZ69aT9kde6YWX+uvNOEHY5yf2gcWcTJGiD0kqXmCnS3oD75GIA==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "commander": "^2.20.0", - "cosmiconfig": "^5.2.1", - "debug": "^4.1.1", - "dedent": "^0.7.0", - "del": "^5.0.0", - "execa": "^2.0.3", - "listr": "^0.14.3", - "log-symbols": "^3.0.0", - "micromatch": "^4.0.2", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.1.1", - "string-argv": "^0.3.0", - "stringify-object": "^3.3.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz", - "integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^3.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "npm-run-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", - "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "list-item": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz", - "integrity": "sha1-DGXQDih8tmPMs8s4Sad+iewmilY=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "extend-shallow": "^2.0.1", - "is-number": "^2.1.0", - "repeat-string": "^1.5.2" - } - }, - "listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", - "dev": true, - "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - } - } - }, - "listr-input": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/listr-input/-/listr-input-0.2.1.tgz", - "integrity": "sha512-oa8iVG870qJq+OuuMK3DjGqFcwsK1SDu+kULp9kEq09TY231aideIZenr3lFOQdASpAr6asuyJBbX62/a3IIhg==", - "dev": true, - "requires": { - "inquirer": "^7.0.0", - "inquirer-autosubmit-prompt": "^0.2.0", - "rxjs": "^6.5.3", - "through": "^2.3.8" - } - }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", - "dev": true - }, - "listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" - }, - "dependencies": { - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "lodash.zip": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", - "dev": true - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2" - } - }, - "log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - } - } - }, - "loupe": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz", - "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==", - "dev": true, - "requires": { - "get-func-name": "^2.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, - "markdown-link": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz", - "integrity": "sha1-MsXGUZmmRXMWMi0eQinRNAfIx88=", - "dev": true - }, - "markdown-toc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/markdown-toc/-/markdown-toc-1.2.0.tgz", - "integrity": "sha512-eOsq7EGd3asV0oBfmyqngeEIhrbkc7XVP63OwcJBIhH2EpG2PzFcbZdhy1jutXSlRBBVMNXHvMtSr5LAxSUvUg==", - "dev": true, - "requires": { - "concat-stream": "^1.5.2", - "diacritics-map": "^0.1.0", - "gray-matter": "^2.1.0", - "lazy-cache": "^2.0.2", - "list-item": "^1.1.1", - "markdown-link": "^0.1.1", - "minimist": "^1.2.0", - "mixin-deep": "^1.1.3", - "object.pick": "^1.2.0", - "remarkable": "^1.7.1", - "repeat-string": "^1.6.1", - "strip-color": "^0.1.0" - } - }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", - "dev": true - }, - "meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "requires": { - "mime-db": "1.51.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mocha": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", - "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", - "dev": true, - "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.4", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "new-github-release-url": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-1.0.0.tgz", - "integrity": "sha512-dle7yf655IMjyFUqn6Nxkb18r4AOAkzRcgcZv6WZ0IqrOH4QCEZ8Sm6I7XX21zvHdBeeMeTkhR9qT2Z0EJDx6A==", - "dev": true, - "requires": { - "type-fest": "^0.4.1" - }, - "dependencies": { - "type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true - } - } - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "nock": { - "version": "11.9.1", - "resolved": "https://registry.npmjs.org/nock/-/nock-11.9.1.tgz", - "integrity": "sha512-U5wPctaY4/ar2JJ5Jg4wJxlbBfayxgKbiAeGh+a1kk6Pwnc2ZEuKviLyDSG6t0uXl56q7AALIxoM6FJrBSsVXA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.13", - "mkdirp": "^0.5.0", - "propagate": "^2.0.0" - } - }, - "node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, - "requires": { - "process-on-spawn": "^1.0.0" - } - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "np": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/np/-/np-7.6.0.tgz", - "integrity": "sha512-WWGZtfNkE6MEkI7LE8NtG7poTqzTHj/tssBzcPnBAdMVPXkXDtX2wk0ptrj8YZ3u4TFmGSqioSohdud86aJxSg==", - "dev": true, - "requires": { - "@samverschueren/stream-to-observable": "^0.3.1", - "any-observable": "^0.5.1", - "async-exit-hook": "^2.0.1", - "chalk": "^4.1.0", - "cosmiconfig": "^7.0.0", - "del": "^6.0.0", - "escape-goat": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "execa": "^5.0.0", - "github-url-from-git": "^1.5.0", - "has-yarn": "^2.1.0", - "hosted-git-info": "^3.0.7", - "ignore-walk": "^3.0.3", - "import-local": "^3.0.2", - "inquirer": "^7.3.3", - "is-installed-globally": "^0.3.2", - "is-interactive": "^1.0.0", - "is-scoped": "^2.1.0", - "issue-regex": "^3.1.0", - "listr": "^0.14.3", - "listr-input": "^0.2.1", - "log-symbols": "^4.0.0", - "meow": "^8.1.0", - "minimatch": "^3.0.4", - "new-github-release-url": "^1.0.0", - "npm-name": "^6.0.1", - "onetime": "^5.1.2", - "open": "^7.3.0", - "ow": "^0.21.0", - "p-memoize": "^4.0.1", - "p-timeout": "^4.1.0", - "pkg-dir": "^5.0.0", - "read-pkg-up": "^7.0.1", - "rxjs": "^6.6.3", - "semver": "^7.3.4", - "split": "^1.0.1", - "symbol-observable": "^3.0.0", - "terminal-link": "^2.1.1", - "update-notifier": "^5.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "any-observable": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.5.1.tgz", - "integrity": "sha512-8zv01bgDOp9PTmRTNCAHTw64TFP2rvlX4LvtNJLachaXY+AjmIvLT47fABNPCiIe89hKiSCo2n5zmPqI9CElPA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dev": true, - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "requires": { - "find-up": "^5.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "symbol-observable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-3.0.0.tgz", - "integrity": "sha512-6tDOXSHiVjuCaasQSWTmHUWn4PuG7qa3+1WT031yTc/swT7+rLiw3GOrFxaH1E3lLP09dH3bVuVDf2gK5rxG3Q==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "npm-name": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/npm-name/-/npm-name-6.0.1.tgz", - "integrity": "sha512-fhKRvUAxaYzMEUZim4mXWyfFbVS+M1CbrCLdAo3txWzrctxKka/h+KaBW0O9Cz5uOM00Nldn2JLWhuwnyW3SUw==", - "dev": true, - "requires": { - "got": "^10.6.0", - "is-scoped": "^2.1.0", - "is-url-superb": "^4.0.0", - "lodash.zip": "^4.2.0", - "org-regex": "^1.0.0", - "p-map": "^3.0.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.1.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, - "requires": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "org-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/org-regex/-/org-regex-1.0.0.tgz", - "integrity": "sha512-7bqkxkEJwzJQUAlyYniqEZ3Ilzjh0yoa62c7gL6Ijxj5bEpPL+8IE1Z0PFj0ywjjXQcdrwR51g9MIcLezR0hKQ==", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "ow": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/ow/-/ow-0.21.0.tgz", - "integrity": "sha512-dlsoDe39g7mhdsdrC1R/YwjT7yjVqE3svWwOlMGvN690waBkgEZBmKBdkmKvSt5/wZ6E0Jn/nIesPqMZOpPKqw==", - "dev": true, - "requires": { - "@sindresorhus/is": "^4.0.0", - "callsites": "^3.1.0", - "dot-prop": "^6.0.1", - "lodash.isequal": "^4.5.0", - "type-fest": "^0.20.2", - "vali-date": "^1.0.0" - }, - "dependencies": { - "@sindresorhus/is": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.4.0.tgz", - "integrity": "sha512-QppPM/8l3Mawvh4rn9CNEYIU9bxpXUCRMaX9yUpvBk1nMKusLKpfXGDEKExKaPhLzcn3lzil7pR6rnJ11HgeRQ==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "requires": { - "p-timeout": "^3.1.0" - }, - "dependencies": { - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - } - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-memoize": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-4.0.4.tgz", - "integrity": "sha512-ijdh0DP4Mk6J4FXlOM6vPPoCjPytcEseW8p/k5SDTSSfGV3E9bpt9Yzfifvzp6iohIieoLTkXRb32OWV0fB2Lw==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.0.0", - "p-settle": "^4.1.1" - }, - "dependencies": { - "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true - } - } - }, - "p-reflect": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz", - "integrity": "sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==", - "dev": true - }, - "p-settle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/p-settle/-/p-settle-4.1.1.tgz", - "integrity": "sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==", - "dev": true, - "requires": { - "p-limit": "^2.2.2", - "p-reflect": "^2.1.0" - } - }, - "p-timeout": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz", - "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==", - "dev": true - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - } - } - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - }, - "dependencies": { - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - } - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - } - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, - "requires": { - "fromentries": "^1.2.0" - } - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "requires": { - "escape-goat": "^2.0.0" - }, - "dependencies": { - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true - } - } - }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - } - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "dependencies": { - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - } - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "remarkable": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.4.tgz", - "integrity": "sha512-e6NKUXgX95whv7IgddywbeN/ItCkWbISmc2DiqHJb0wTrqZIexqdco5b8Z3XZoo/48IdNVKM9ZCvTPJ4F5uvhg==", - "dev": true, - "requires": { - "argparse": "^1.0.10", - "autolinker": "~0.28.0" - } - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "requires": { - "lowercase-keys": "^2.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", - "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "scoped-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-2.1.0.tgz", - "integrity": "sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-getter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.1.tgz", - "integrity": "sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw==", - "dev": true, - "requires": { - "to-object-path": "^0.3.0" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "requires": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "dependencies": { - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - } - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-color": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", - "integrity": "sha1-EG9l09PmotlAHKwOsM6LinArT3s=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "dev": true - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-readable-stream": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", - "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - }, - "dependencies": { - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - } - } - }, - "toml": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/toml/-/toml-2.3.6.tgz", - "integrity": "sha512-gVweAectJU3ebq//Ferr2JUY4WKSDe5N+z0FvjDncLGyHmIDoxgY/2Ie4qfEIDm4IS7OA6Rmdm7pdEEdMcV/xQ==", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "requires": { - "ini": "2.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - } - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - } - }, - "word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true - }, - "wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/package.json b/package.json index 46910de..75e49b7 100644 --- a/package.json +++ b/package.json @@ -1,78 +1,36 @@ { "name": "xendit-node", - "version": "1.22.0", - "description": "NodeJS client for Xendit API", - "main": "index.js", - "types": "index.d.ts", - "scripts": { - "test": "mocha test/**/*.test.js", - "test:integration": "node integration_test", - "lint": "eslint index.js ./**/*.{js,ts}", - "lint:fix": "eslint index.js ./**/*.{js,ts} --fix", - "format": "prettier --config .prettierrc --write index.js ./**/*.{js,json,ts}", - "gentoc": "markdown-toc -i --bullets=- README.md", - "release": "np", - "report": "nyc -r text -r lcov npm run test", - "coveralls": "cat coverage/lcov.info | coveralls" - }, + "version": "3.0.0", + "description": "OpenAPI client for xendit-node", + "author": "OpenAPI-Generator", "repository": { "type": "git", - "url": "git+https://github.com/xendit/xendit-node.git" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged", - "pre-push": "npm run test" - } + "url": "https://github.com/xendit/xendit-node.git" }, - "lint-staged": { - "*.{js,json,ts}": [ - "prettier --write", - "git add" - ], - "*.{js,ts}": [ - "eslint", - "git add" - ], - "README.md": [ - "markdown-toc -i --bullets=-", - "git add" - ] - }, - "keywords": [ - "xendit", - "api", - "client", - "node" + "files": [ + "balance_and_transaction/**", + "payment_request/**", + "payment_method/**", + "refund/**", + "invoice/**", + "payout/**", + "docs/**", + "images/**", + "README.md", + "package.json", + "index.js", + "index.d.ts", + "runtime.js", + "runtime.d.ts" ], - "author": "Stanley Nguyen ", - "license": "MIT", - "bugs": { - "url": "https://github.com/xendit/xendit-node/issues" - }, - "homepage": "https://github.com/xendit/xendit-node#readme", - "dependencies": { - "node-fetch": "^2.6.1" + "main": "./index.js", + "typings": "./index.d.ts", + "scripts": { + "build": "tsc", + "prepare": "npm run build", + "custom-publish": "cp README.md dist/ && cp -R docs dist/ && cp -R images dist/ && cp package.json dist && cd dist && npm publish" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^2.13.0", - "@typescript-eslint/parser": "^2.13.0", - "babel-eslint": "^10.0.3", - "chai": "^4.2.0", - "chai-as-promised": "^7.1.1", - "coveralls": "^3.0.11", - "dotenv": "^8.1.0", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.3.0", - "eslint-plugin-prettier": "^3.1.2", - "husky": "^3.0.5", - "lint-staged": "^9.3.0", - "markdown-toc": "^1.2.0", - "mocha": "^6.2.3", - "nock": "^11.9.1", - "np": "^7.4.0", - "nyc": "^15.0.1", - "prettier": "^1.18.2", - "typescript": "^3.7.4" + "typescript": "^4.0" } } diff --git a/payment_method/apis/PaymentMethod.ts b/payment_method/apis/PaymentMethod.ts new file mode 100644 index 0000000..aa5c30d --- /dev/null +++ b/payment_method/apis/PaymentMethod.ts @@ -0,0 +1,594 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +import * as runtime from '../../runtime'; +import type { + CreatePaymentMethod409Response, + CreatePaymentMethod503Response, + GetAllPaymentMethods400Response, + GetAllPaymentMethods403Response, + GetAllPaymentMethods404Response, + GetAllPaymentMethodsDefaultResponse, + PaymentChannelList, + PaymentMethod, + PaymentMethodAuthParameters, + PaymentMethodExpireParameters, + PaymentMethodList, + PaymentMethodParameters, + PaymentMethodReusability, + PaymentMethodStatus, + PaymentMethodType, + PaymentMethodUpdateParameters, + SimulatePaymentRequest, +} from '../models'; +import { + CreatePaymentMethod409ResponseFromJSON, + CreatePaymentMethod409ResponseToJSON, + CreatePaymentMethod503ResponseFromJSON, + CreatePaymentMethod503ResponseToJSON, + GetAllPaymentMethods400ResponseFromJSON, + GetAllPaymentMethods400ResponseToJSON, + GetAllPaymentMethods403ResponseFromJSON, + GetAllPaymentMethods403ResponseToJSON, + GetAllPaymentMethods404ResponseFromJSON, + GetAllPaymentMethods404ResponseToJSON, + GetAllPaymentMethodsDefaultResponseFromJSON, + GetAllPaymentMethodsDefaultResponseToJSON, + PaymentChannelListFromJSON, + PaymentChannelListToJSON, + PaymentMethodFromJSON, + PaymentMethodToJSON, + PaymentMethodAuthParametersFromJSON, + PaymentMethodAuthParametersToJSON, + PaymentMethodExpireParametersFromJSON, + PaymentMethodExpireParametersToJSON, + PaymentMethodListFromJSON, + PaymentMethodListToJSON, + PaymentMethodParametersFromJSON, + PaymentMethodParametersToJSON, + PaymentMethodReusabilityFromJSON, + PaymentMethodReusabilityToJSON, + PaymentMethodStatusFromJSON, + PaymentMethodStatusToJSON, + PaymentMethodTypeFromJSON, + PaymentMethodTypeToJSON, + PaymentMethodUpdateParametersFromJSON, + PaymentMethodUpdateParametersToJSON, + SimulatePaymentRequestFromJSON, + SimulatePaymentRequestToJSON, +} from '../models'; + +export interface AuthPaymentMethodRequest { + paymentMethodId: string; + idempotencyKey?: string; + data?: PaymentMethodAuthParameters; +} + +export interface CreatePaymentMethodRequest { + data?: PaymentMethodParameters; +} + +export interface ExpirePaymentMethodRequest { + paymentMethodId: string; + idempotencyKey?: string; + data?: PaymentMethodExpireParameters | null; +} + +export interface GetAllPaymentChannelsRequest { + isActivated?: GetAllPaymentChannelsIsActivatedEnum; + type?: string; + idempotencyKey?: string; +} + +export interface GetAllPaymentMethodsRequest { + id?: Array; + type?: Array; + status?: Array; + reusability?: PaymentMethodReusability; + customerId?: string; + referenceId?: string; + afterId?: string; + beforeId?: string; + limit?: number; + idempotencyKey?: string; +} + +export interface GetPaymentMethodByIDRequest { + paymentMethodId: string; + idempotencyKey?: string; +} + +export interface GetPaymentsByPaymentMethodIdRequest { + paymentMethodId: string; + paymentRequestId?: Array; + paymentMethodId2?: Array; + referenceId?: Array; + paymentMethodType?: Array; + channelCode?: Array; + status?: Array; + currency?: Array; + createdGte?: Date; + createdLte?: Date; + updatedGte?: Date; + updatedLte?: Date; + limit?: number; + afterId?: string; + beforeId?: string; + idempotencyKey?: string; +} + +export interface PatchPaymentMethodRequest { + paymentMethodId: string; + idempotencyKey?: string; + data?: PaymentMethodUpdateParameters; +} + +export interface SimulatePaymentOperationRequest { + paymentMethodId: string; + idempotencyKey?: string; + data?: SimulatePaymentRequest; +} + +/** + * + */ +export class PaymentMethodApi extends runtime.BaseAPI { + + secretKey: string = ""; + xenditURL: string = ""; + + constructor({secretKey, xenditURL}: {secretKey: string, xenditURL?: string}) { + const conf = new runtime.Configuration({ + basePath: xenditURL || 'https://api.xendit.co' + }) + super(conf) + this.secretKey = secretKey; + } + + /** + * This endpoint validates a payment method linking OTP + * Validate a payment method\'s linking OTP + */ + private async authPaymentMethodRaw(requestParameters: AuthPaymentMethodRequest): Promise> { + if (requestParameters.paymentMethodId === null || requestParameters.paymentMethodId === undefined) { + throw new runtime.RequiredError('paymentMethodId','Required parameter requestParameters.paymentMethodId was null or undefined when calling authPaymentMethod.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + headerParameters['Content-Type'] = 'application/json'; + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/v2/payment_methods/{paymentMethodId}/auth`.replace(`{${"paymentMethodId"}}`, encodeURIComponent(String(requestParameters.paymentMethodId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: PaymentMethodAuthParametersToJSON(requestParameters.data), + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => PaymentMethodFromJSON(jsonValue)); + } + + /** + * This endpoint validates a payment method linking OTP + * Validate a payment method\'s linking OTP + */ + async authPaymentMethod(requestParameters: AuthPaymentMethodRequest): Promise { + const response = await this.authPaymentMethodRaw(requestParameters); + return await response.value(); + } + + /** + * This endpoint initiates creation of payment method + * Creates payment method + */ + private async createPaymentMethodRaw(requestParameters: CreatePaymentMethodRequest): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + headerParameters['Content-Type'] = 'application/json'; + + const response = await this.request({ + path: `/v2/payment_methods`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: PaymentMethodParametersToJSON(requestParameters.data), + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => PaymentMethodFromJSON(jsonValue)); + } + + /** + * This endpoint initiates creation of payment method + * Creates payment method + */ + async createPaymentMethod(requestParameters: CreatePaymentMethodRequest = {}): Promise { + const response = await this.createPaymentMethodRaw(requestParameters); + return await response.value(); + } + + /** + * This endpoint expires a payment method and performs unlinking if necessary + * Expires a payment method + */ + private async expirePaymentMethodRaw(requestParameters: ExpirePaymentMethodRequest): Promise> { + if (requestParameters.paymentMethodId === null || requestParameters.paymentMethodId === undefined) { + throw new runtime.RequiredError('paymentMethodId','Required parameter requestParameters.paymentMethodId was null or undefined when calling expirePaymentMethod.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + headerParameters['Content-Type'] = 'application/json'; + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/v2/payment_methods/{paymentMethodId}/expire`.replace(`{${"paymentMethodId"}}`, encodeURIComponent(String(requestParameters.paymentMethodId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: PaymentMethodExpireParametersToJSON(requestParameters.data), + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => PaymentMethodFromJSON(jsonValue)); + } + + /** + * This endpoint expires a payment method and performs unlinking if necessary + * Expires a payment method + */ + async expirePaymentMethod(requestParameters: ExpirePaymentMethodRequest): Promise { + const response = await this.expirePaymentMethodRaw(requestParameters); + return await response.value(); + } + + /** + * Get all payment channels + * Get all payment channels + */ + private async getAllPaymentChannelsRaw(requestParameters: GetAllPaymentChannelsRequest): Promise> { + const queryParameters: any = {}; + + if (requestParameters.isActivated !== undefined) { + queryParameters['is_activated'] = requestParameters.isActivated; + } + + if (requestParameters.type !== undefined) { + queryParameters['type'] = requestParameters.type; + } + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/v2/payment_methods/channels`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => PaymentChannelListFromJSON(jsonValue)); + } + + /** + * Get all payment channels + * Get all payment channels + */ + async getAllPaymentChannels(requestParameters: GetAllPaymentChannelsRequest = {}): Promise { + const response = await this.getAllPaymentChannelsRaw(requestParameters); + return await response.value(); + } + + /** + * Get all payment methods by filters + * Get all payment methods by filters + */ + private async getAllPaymentMethodsRaw(requestParameters: GetAllPaymentMethodsRequest): Promise> { + const queryParameters: any = {}; + + if (requestParameters.id) { + queryParameters['id'] = requestParameters.id; + } + + if (requestParameters.type) { + queryParameters['type'] = requestParameters.type; + } + + if (requestParameters.status) { + queryParameters['status'] = requestParameters.status; + } + + if (requestParameters.reusability !== undefined) { + queryParameters['reusability'] = requestParameters.reusability; + } + + if (requestParameters.customerId !== undefined) { + queryParameters['customer_id'] = requestParameters.customerId; + } + + if (requestParameters.referenceId !== undefined) { + queryParameters['reference_id'] = requestParameters.referenceId; + } + + if (requestParameters.afterId !== undefined) { + queryParameters['after_id'] = requestParameters.afterId; + } + + if (requestParameters.beforeId !== undefined) { + queryParameters['before_id'] = requestParameters.beforeId; + } + + if (requestParameters.limit !== undefined) { + queryParameters['limit'] = requestParameters.limit; + } + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/v2/payment_methods`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => PaymentMethodListFromJSON(jsonValue)); + } + + /** + * Get all payment methods by filters + * Get all payment methods by filters + */ + async getAllPaymentMethods(requestParameters: GetAllPaymentMethodsRequest = {}): Promise { + const response = await this.getAllPaymentMethodsRaw(requestParameters); + return await response.value(); + } + + /** + * Get payment method by ID + * Get payment method by ID + */ + private async getPaymentMethodByIDRaw(requestParameters: GetPaymentMethodByIDRequest): Promise> { + if (requestParameters.paymentMethodId === null || requestParameters.paymentMethodId === undefined) { + throw new runtime.RequiredError('paymentMethodId','Required parameter requestParameters.paymentMethodId was null or undefined when calling getPaymentMethodByID.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/v2/payment_methods/{paymentMethodId}`.replace(`{${"paymentMethodId"}}`, encodeURIComponent(String(requestParameters.paymentMethodId))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => PaymentMethodFromJSON(jsonValue)); + } + + /** + * Get payment method by ID + * Get payment method by ID + */ + async getPaymentMethodByID(requestParameters: GetPaymentMethodByIDRequest): Promise { + const response = await this.getPaymentMethodByIDRaw(requestParameters); + return await response.value(); + } + + /** + * Returns payments with matching PaymentMethodID. + * Returns payments with matching PaymentMethodID. + */ + private async getPaymentsByPaymentMethodIdRaw(requestParameters: GetPaymentsByPaymentMethodIdRequest): Promise> { + if (requestParameters.paymentMethodId === null || requestParameters.paymentMethodId === undefined) { + throw new runtime.RequiredError('paymentMethodId','Required parameter requestParameters.paymentMethodId was null or undefined when calling getPaymentsByPaymentMethodId.'); + } + + const queryParameters: any = {}; + + if (requestParameters.paymentRequestId) { + queryParameters['payment_request_id'] = requestParameters.paymentRequestId; + } + + if (requestParameters.paymentMethodId2) { + queryParameters['payment_method_id'] = requestParameters.paymentMethodId2; + } + + if (requestParameters.referenceId) { + queryParameters['reference_id'] = requestParameters.referenceId; + } + + if (requestParameters.paymentMethodType) { + queryParameters['payment_method_type'] = requestParameters.paymentMethodType; + } + + if (requestParameters.channelCode) { + queryParameters['channel_code'] = requestParameters.channelCode; + } + + if (requestParameters.status) { + queryParameters['status'] = requestParameters.status; + } + + if (requestParameters.currency) { + queryParameters['currency'] = requestParameters.currency; + } + + if (requestParameters.createdGte !== undefined) { + queryParameters['created[gte]'] = (requestParameters.createdGte as any).toISOString(); + } + + if (requestParameters.createdLte !== undefined) { + queryParameters['created[lte]'] = (requestParameters.createdLte as any).toISOString(); + } + + if (requestParameters.updatedGte !== undefined) { + queryParameters['updated[gte]'] = (requestParameters.updatedGte as any).toISOString(); + } + + if (requestParameters.updatedLte !== undefined) { + queryParameters['updated[lte]'] = (requestParameters.updatedLte as any).toISOString(); + } + + if (requestParameters.limit !== undefined) { + queryParameters['limit'] = requestParameters.limit; + } + + if (requestParameters.afterId !== undefined) { + queryParameters['after_id'] = requestParameters.afterId; + } + + if (requestParameters.beforeId !== undefined) { + queryParameters['before_id'] = requestParameters.beforeId; + } + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/v2/payment_methods/{paymentMethodId}/payments`.replace(`{${"paymentMethodId"}}`, encodeURIComponent(String(requestParameters.paymentMethodId))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response); + } + + /** + * Returns payments with matching PaymentMethodID. + * Returns payments with matching PaymentMethodID. + */ + async getPaymentsByPaymentMethodId(requestParameters: GetPaymentsByPaymentMethodIdRequest): Promise { + const response = await this.getPaymentsByPaymentMethodIdRaw(requestParameters); + return await response.value(); + } + + /** + * This endpoint is used to toggle the ```status``` of an e-Wallet or a Direct Debit payment method to ```ACTIVE``` or ```INACTIVE```. This is also used to update the details of an Over-the-Counter or a Virtual Account payment method. + * Patch payment methods + */ + private async patchPaymentMethodRaw(requestParameters: PatchPaymentMethodRequest): Promise> { + if (requestParameters.paymentMethodId === null || requestParameters.paymentMethodId === undefined) { + throw new runtime.RequiredError('paymentMethodId','Required parameter requestParameters.paymentMethodId was null or undefined when calling patchPaymentMethod.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + headerParameters['Content-Type'] = 'application/json'; + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/v2/payment_methods/{paymentMethodId}`.replace(`{${"paymentMethodId"}}`, encodeURIComponent(String(requestParameters.paymentMethodId))), + method: 'PATCH', + headers: headerParameters, + query: queryParameters, + body: PaymentMethodUpdateParametersToJSON(requestParameters.data), + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => PaymentMethodFromJSON(jsonValue)); + } + + /** + * This endpoint is used to toggle the ```status``` of an e-Wallet or a Direct Debit payment method to ```ACTIVE``` or ```INACTIVE```. This is also used to update the details of an Over-the-Counter or a Virtual Account payment method. + * Patch payment methods + */ + async patchPaymentMethod(requestParameters: PatchPaymentMethodRequest): Promise { + const response = await this.patchPaymentMethodRaw(requestParameters); + return await response.value(); + } + + /** + * Makes payment with matching PaymentMethodID. + * Makes payment with matching PaymentMethodID. + */ + private async simulatePaymentRaw(requestParameters: SimulatePaymentOperationRequest): Promise> { + if (requestParameters.paymentMethodId === null || requestParameters.paymentMethodId === undefined) { + throw new runtime.RequiredError('paymentMethodId','Required parameter requestParameters.paymentMethodId was null or undefined when calling simulatePayment.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + headerParameters['Content-Type'] = 'application/json'; + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/v2/payment_methods/{paymentMethodId}/payments/simulate`.replace(`{${"paymentMethodId"}}`, encodeURIComponent(String(requestParameters.paymentMethodId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: SimulatePaymentRequestToJSON(requestParameters.data), + }); + + return new runtime.VoidApiResponse(response); + } + + /** + * Makes payment with matching PaymentMethodID. + * Makes payment with matching PaymentMethodID. + */ + async simulatePayment(requestParameters: SimulatePaymentOperationRequest): Promise { + await this.simulatePaymentRaw(requestParameters); + } + +} + +/** + * @export + */ +export const GetAllPaymentChannelsIsActivatedEnum = { + True: true, + False: false +} as const; +export type GetAllPaymentChannelsIsActivatedEnum = typeof GetAllPaymentChannelsIsActivatedEnum[keyof typeof GetAllPaymentChannelsIsActivatedEnum]; diff --git a/payment_method/apis/index.ts b/payment_method/apis/index.ts new file mode 100644 index 0000000..bb815e7 --- /dev/null +++ b/payment_method/apis/index.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './PaymentMethod'; diff --git a/payment_method/index.ts b/payment_method/index.ts new file mode 100644 index 0000000..bea7e78 --- /dev/null +++ b/payment_method/index.ts @@ -0,0 +1,3 @@ +export { + PaymentMethodApi as PaymentMethod, +} from './apis' diff --git a/payment_method/models/BillingInformation.ts b/payment_method/models/BillingInformation.ts new file mode 100644 index 0000000..8190c31 --- /dev/null +++ b/payment_method/models/BillingInformation.ts @@ -0,0 +1,100 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Billing Information + * @export + * @interface BillingInformation + */ +export interface BillingInformation { + /** + * + * @type {string} + * @memberof BillingInformation + */ + country: string; + /** + * + * @type {string} + * @memberof BillingInformation + */ + streetLine1?: string | null; + /** + * + * @type {string} + * @memberof BillingInformation + */ + streetLine2?: string | null; + /** + * + * @type {string} + * @memberof BillingInformation + */ + city?: string | null; + /** + * + * @type {string} + * @memberof BillingInformation + */ + provinceState?: string | null; + /** + * + * @type {string} + * @memberof BillingInformation + */ + postalCode?: string | null; +} + +/** + * Check if a given object implements the BillingInformation interface. + */ +export function instanceOfBillingInformation(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "country" in value; + + return isInstance; +} + +export function BillingInformationFromJSON(json: any): BillingInformation { + return BillingInformationFromJSONTyped(json, false); +} + +export function BillingInformationFromJSONTyped(json: any, ignoreDiscriminator: boolean): BillingInformation { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'country': json['country'], + 'streetLine1': !exists(json, 'street_line1') ? undefined : json['street_line1'], + 'streetLine2': !exists(json, 'street_line2') ? undefined : json['street_line2'], + 'city': !exists(json, 'city') ? undefined : json['city'], + 'provinceState': !exists(json, 'province_state') ? undefined : json['province_state'], + 'postalCode': !exists(json, 'postal_code') ? undefined : json['postal_code'], + }; +} + +export function BillingInformationToJSON(value?: BillingInformation | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'country': value.country, + 'street_line1': value.streetLine1, + 'street_line2': value.streetLine2, + 'city': value.city, + 'province_state': value.provinceState, + 'postal_code': value.postalCode, + }; +} + diff --git a/payment_method/models/Card.ts b/payment_method/models/Card.ts new file mode 100644 index 0000000..f9cca7d --- /dev/null +++ b/payment_method/models/Card.ts @@ -0,0 +1,104 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { CardChannelProperties } from './CardChannelProperties'; +import { + CardChannelPropertiesFromJSON, + CardChannelPropertiesFromJSONTyped, + CardChannelPropertiesToJSON, +} from './CardChannelProperties'; +import type { CardVerificationResults } from './CardVerificationResults'; +import { + CardVerificationResultsFromJSON, + CardVerificationResultsFromJSONTyped, + CardVerificationResultsToJSON, +} from './CardVerificationResults'; +import type { TokenizedCardInformation } from './TokenizedCardInformation'; +import { + TokenizedCardInformationFromJSON, + TokenizedCardInformationFromJSONTyped, + TokenizedCardInformationToJSON, +} from './TokenizedCardInformation'; + +/** + * Card Payment Method Details + * @export + * @interface Card + */ +export interface Card { + /** + * + * @type {string} + * @memberof Card + */ + currency: string | null; + /** + * + * @type {CardChannelProperties} + * @memberof Card + */ + channelProperties: CardChannelProperties | null; + /** + * + * @type {TokenizedCardInformation} + * @memberof Card + */ + cardInformation?: TokenizedCardInformation; + /** + * + * @type {CardVerificationResults} + * @memberof Card + */ + cardVerificationResults?: CardVerificationResults | null; +} + +/** + * Check if a given object implements the Card interface. + */ +export function instanceOfCard(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "currency" in value; + isInstance = isInstance && "channelProperties" in value; + + return isInstance; +} + +export function CardFromJSON(json: any): Card { + return CardFromJSONTyped(json, false); +} + +export function CardFromJSONTyped(json: any, ignoreDiscriminator: boolean): Card { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'currency': json['currency'], + 'channelProperties': CardChannelPropertiesFromJSON(json['channel_properties']), + 'cardInformation': !exists(json, 'card_information') ? undefined : TokenizedCardInformationFromJSON(json['card_information']), + 'cardVerificationResults': !exists(json, 'card_verification_results') ? undefined : CardVerificationResultsFromJSON(json['card_verification_results']), + }; +} + +export function CardToJSON(value?: Card | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'currency': value.currency, + 'channel_properties': CardChannelPropertiesToJSON(value.channelProperties), + 'card_information': TokenizedCardInformationToJSON(value.cardInformation), + 'card_verification_results': CardVerificationResultsToJSON(value.cardVerificationResults), + }; +} + diff --git a/payment_method/models/CardChannelProperties.ts b/payment_method/models/CardChannelProperties.ts new file mode 100644 index 0000000..31f1b2e --- /dev/null +++ b/payment_method/models/CardChannelProperties.ts @@ -0,0 +1,95 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Card Channel Properties + * @export + * @interface CardChannelProperties + */ +export interface CardChannelProperties { + /** + * This field value is only being used for reusability = MULTIPLE_USE. To indicate whether to perform 3DS during the linking phase. Defaults to false. + * @type {boolean} + * @memberof CardChannelProperties + */ + skipThreeDSecure?: boolean | null; + /** + * URL where the end-customer is redirected if the authorization is successful + * @type {string} + * @memberof CardChannelProperties + */ + successReturnUrl?: string | null; + /** + * URL where the end-customer is redirected if the authorization failed + * @type {string} + * @memberof CardChannelProperties + */ + failureReturnUrl?: string | null; + /** + * Type of “credential-on-file” / “card-on-file” payment being made. Indicate that this payment uses a previously linked Payment Method for charging. + * @type {string} + * @memberof CardChannelProperties + */ + cardonfileType?: CardChannelPropertiesCardonfileTypeEnum; +} + + +/** + * @export + */ +export const CardChannelPropertiesCardonfileTypeEnum = { + MerchantUnscheduled: 'MERCHANT_UNSCHEDULED', + CustomerUnscheduled: 'CUSTOMER_UNSCHEDULED', + Recurring: 'RECURRING' +} as const; +export type CardChannelPropertiesCardonfileTypeEnum = typeof CardChannelPropertiesCardonfileTypeEnum[keyof typeof CardChannelPropertiesCardonfileTypeEnum]; + + +/** + * Check if a given object implements the CardChannelProperties interface. + */ +export function instanceOfCardChannelProperties(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CardChannelPropertiesFromJSON(json: any): CardChannelProperties { + return CardChannelPropertiesFromJSONTyped(json, false); +} + +export function CardChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): CardChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'skipThreeDSecure': !exists(json, 'skip_three_d_secure') ? undefined : json['skip_three_d_secure'], + 'successReturnUrl': !exists(json, 'success_return_url') ? undefined : json['success_return_url'], + 'failureReturnUrl': !exists(json, 'failure_return_url') ? undefined : json['failure_return_url'], + 'cardonfileType': !exists(json, 'cardonfile_type') ? undefined : json['cardonfile_type'], + }; +} + +export function CardChannelPropertiesToJSON(value?: CardChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'skip_three_d_secure': value.skipThreeDSecure, + 'success_return_url': value.successReturnUrl, + 'failure_return_url': value.failureReturnUrl, + 'cardonfile_type': value.cardonfileType, + }; +} + diff --git a/payment_method/models/CardParameters.ts b/payment_method/models/CardParameters.ts new file mode 100644 index 0000000..f3c4435 --- /dev/null +++ b/payment_method/models/CardParameters.ts @@ -0,0 +1,89 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { CardChannelProperties } from './CardChannelProperties'; +import { + CardChannelPropertiesFromJSON, + CardChannelPropertiesFromJSONTyped, + CardChannelPropertiesToJSON, +} from './CardChannelProperties'; +import type { CardParametersCardInformation } from './CardParametersCardInformation'; +import { + CardParametersCardInformationFromJSON, + CardParametersCardInformationFromJSONTyped, + CardParametersCardInformationToJSON, +} from './CardParametersCardInformation'; + +/** + * + * @export + * @interface CardParameters + */ +export interface CardParameters { + /** + * + * @type {string} + * @memberof CardParameters + */ + currency: string; + /** + * + * @type {CardChannelProperties} + * @memberof CardParameters + */ + channelProperties?: CardChannelProperties | null; + /** + * + * @type {CardParametersCardInformation} + * @memberof CardParameters + */ + cardInformation?: CardParametersCardInformation; +} + +/** + * Check if a given object implements the CardParameters interface. + */ +export function instanceOfCardParameters(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "currency" in value; + + return isInstance; +} + +export function CardParametersFromJSON(json: any): CardParameters { + return CardParametersFromJSONTyped(json, false); +} + +export function CardParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): CardParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'currency': json['currency'], + 'channelProperties': !exists(json, 'channel_properties') ? undefined : CardChannelPropertiesFromJSON(json['channel_properties']), + 'cardInformation': !exists(json, 'card_information') ? undefined : CardParametersCardInformationFromJSON(json['card_information']), + }; +} + +export function CardParametersToJSON(value?: CardParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'currency': value.currency, + 'channel_properties': CardChannelPropertiesToJSON(value.channelProperties), + 'card_information': CardParametersCardInformationToJSON(value.cardInformation), + }; +} + diff --git a/payment_method/models/CardParametersCardInformation.ts b/payment_method/models/CardParametersCardInformation.ts new file mode 100644 index 0000000..2b0c68b --- /dev/null +++ b/payment_method/models/CardParametersCardInformation.ts @@ -0,0 +1,94 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Card Information + * @export + * @interface CardParametersCardInformation + */ +export interface CardParametersCardInformation { + /** + * + * @type {string} + * @memberof CardParametersCardInformation + */ + cardNumber: string; + /** + * Card expiry month in MM format + * @type {string} + * @memberof CardParametersCardInformation + */ + expiryMonth: string; + /** + * Card expiry month in YY format + * @type {string} + * @memberof CardParametersCardInformation + */ + expiryYear: string; + /** + * Cardholder name + * @type {string} + * @memberof CardParametersCardInformation + */ + cardholderName?: string | null; + /** + * + * @type {string} + * @memberof CardParametersCardInformation + */ + cvv?: string | null; +} + +/** + * Check if a given object implements the CardParametersCardInformation interface. + */ +export function instanceOfCardParametersCardInformation(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "cardNumber" in value; + isInstance = isInstance && "expiryMonth" in value; + isInstance = isInstance && "expiryYear" in value; + + return isInstance; +} + +export function CardParametersCardInformationFromJSON(json: any): CardParametersCardInformation { + return CardParametersCardInformationFromJSONTyped(json, false); +} + +export function CardParametersCardInformationFromJSONTyped(json: any, ignoreDiscriminator: boolean): CardParametersCardInformation { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'cardNumber': json['card_number'], + 'expiryMonth': json['expiry_month'], + 'expiryYear': json['expiry_year'], + 'cardholderName': !exists(json, 'cardholder_name') ? undefined : json['cardholder_name'], + 'cvv': !exists(json, 'cvv') ? undefined : json['cvv'], + }; +} + +export function CardParametersCardInformationToJSON(value?: CardParametersCardInformation | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'card_number': value.cardNumber, + 'expiry_month': value.expiryMonth, + 'expiry_year': value.expiryYear, + 'cardholder_name': value.cardholderName, + 'cvv': value.cvv, + }; +} + diff --git a/payment_method/models/CardVerificationResults.ts b/payment_method/models/CardVerificationResults.ts new file mode 100644 index 0000000..5534064 --- /dev/null +++ b/payment_method/models/CardVerificationResults.ts @@ -0,0 +1,83 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { CardVerificationResultsThreeDSecure } from './CardVerificationResultsThreeDSecure'; +import { + CardVerificationResultsThreeDSecureFromJSON, + CardVerificationResultsThreeDSecureFromJSONTyped, + CardVerificationResultsThreeDSecureToJSON, +} from './CardVerificationResultsThreeDSecure'; + +/** + * + * @export + * @interface CardVerificationResults + */ +export interface CardVerificationResults { + /** + * + * @type {CardVerificationResultsThreeDSecure} + * @memberof CardVerificationResults + */ + threeDSecure: CardVerificationResultsThreeDSecure | null; + /** + * + * @type {string} + * @memberof CardVerificationResults + */ + cvvResult?: string | null; + /** + * + * @type {string} + * @memberof CardVerificationResults + */ + addressVerificationResult?: string | null; +} + +/** + * Check if a given object implements the CardVerificationResults interface. + */ +export function instanceOfCardVerificationResults(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "threeDSecure" in value; + + return isInstance; +} + +export function CardVerificationResultsFromJSON(json: any): CardVerificationResults { + return CardVerificationResultsFromJSONTyped(json, false); +} + +export function CardVerificationResultsFromJSONTyped(json: any, ignoreDiscriminator: boolean): CardVerificationResults { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'threeDSecure': CardVerificationResultsThreeDSecureFromJSON(json['three_d_secure']), + 'cvvResult': !exists(json, 'cvv_result') ? undefined : json['cvv_result'], + 'addressVerificationResult': !exists(json, 'address_verification_result') ? undefined : json['address_verification_result'], + }; +} + +export function CardVerificationResultsToJSON(value?: CardVerificationResults | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'three_d_secure': CardVerificationResultsThreeDSecureToJSON(value.threeDSecure), + 'cvv_result': value.cvvResult, + 'address_verification_result': value.addressVerificationResult, + }; +} + diff --git a/payment_method/models/CardVerificationResultsThreeDSecure.ts b/payment_method/models/CardVerificationResultsThreeDSecure.ts new file mode 100644 index 0000000..06fdb25 --- /dev/null +++ b/payment_method/models/CardVerificationResultsThreeDSecure.ts @@ -0,0 +1,102 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface CardVerificationResultsThreeDSecure + */ +export interface CardVerificationResultsThreeDSecure { + /** + * + * @type {string} + * @memberof CardVerificationResultsThreeDSecure + */ + threeDSecureFlow?: CardVerificationResultsThreeDSecureThreeDSecureFlowEnum; + /** + * + * @type {string} + * @memberof CardVerificationResultsThreeDSecure + */ + eciCode?: string | null; + /** + * + * @type {string} + * @memberof CardVerificationResultsThreeDSecure + */ + threeDSecureResult?: string | null; + /** + * + * @type {string} + * @memberof CardVerificationResultsThreeDSecure + */ + threeDSecureResultReason?: string | null; + /** + * + * @type {string} + * @memberof CardVerificationResultsThreeDSecure + */ + threeDSecureVersion?: string | null; +} + + +/** + * @export + */ +export const CardVerificationResultsThreeDSecureThreeDSecureFlowEnum = { + Challenge: 'CHALLENGE', + Frictionless: 'FRICTIONLESS' +} as const; +export type CardVerificationResultsThreeDSecureThreeDSecureFlowEnum = typeof CardVerificationResultsThreeDSecureThreeDSecureFlowEnum[keyof typeof CardVerificationResultsThreeDSecureThreeDSecureFlowEnum]; + + +/** + * Check if a given object implements the CardVerificationResultsThreeDSecure interface. + */ +export function instanceOfCardVerificationResultsThreeDSecure(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CardVerificationResultsThreeDSecureFromJSON(json: any): CardVerificationResultsThreeDSecure { + return CardVerificationResultsThreeDSecureFromJSONTyped(json, false); +} + +export function CardVerificationResultsThreeDSecureFromJSONTyped(json: any, ignoreDiscriminator: boolean): CardVerificationResultsThreeDSecure { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'threeDSecureFlow': !exists(json, 'three_d_secure_flow') ? undefined : json['three_d_secure_flow'], + 'eciCode': !exists(json, 'eci_code') ? undefined : json['eci_code'], + 'threeDSecureResult': !exists(json, 'three_d_secure_result') ? undefined : json['three_d_secure_result'], + 'threeDSecureResultReason': !exists(json, 'three_d_secure_result_reason') ? undefined : json['three_d_secure_result_reason'], + 'threeDSecureVersion': !exists(json, 'three_d_secure_version') ? undefined : json['three_d_secure_version'], + }; +} + +export function CardVerificationResultsThreeDSecureToJSON(value?: CardVerificationResultsThreeDSecure | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'three_d_secure_flow': value.threeDSecureFlow, + 'eci_code': value.eciCode, + 'three_d_secure_result': value.threeDSecureResult, + 'three_d_secure_result_reason': value.threeDSecureResultReason, + 'three_d_secure_version': value.threeDSecureVersion, + }; +} + diff --git a/payment_method/models/ChannelAmountLimits.ts b/payment_method/models/ChannelAmountLimits.ts new file mode 100644 index 0000000..3c4b970 --- /dev/null +++ b/payment_method/models/ChannelAmountLimits.ts @@ -0,0 +1,75 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface ChannelAmountLimits + */ +export interface ChannelAmountLimits { + /** + * Currency supported by the payment channel + * @type {string} + * @memberof ChannelAmountLimits + */ + currency?: string; + /** + * The minimum allowed transaction amount for the payment channel + * @type {number} + * @memberof ChannelAmountLimits + */ + minLimit?: number; + /** + * The minimum allowed transaction amount for the payment channel + * @type {number} + * @memberof ChannelAmountLimits + */ + maxLimit?: number; +} + +/** + * Check if a given object implements the ChannelAmountLimits interface. + */ +export function instanceOfChannelAmountLimits(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function ChannelAmountLimitsFromJSON(json: any): ChannelAmountLimits { + return ChannelAmountLimitsFromJSONTyped(json, false); +} + +export function ChannelAmountLimitsFromJSONTyped(json: any, ignoreDiscriminator: boolean): ChannelAmountLimits { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'currency': !exists(json, 'currency') ? undefined : json['currency'], + 'minLimit': !exists(json, 'min_limit') ? undefined : json['min_limit'], + 'maxLimit': !exists(json, 'max_limit') ? undefined : json['max_limit'], + }; +} + +export function ChannelAmountLimitsToJSON(value?: ChannelAmountLimits | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'currency': value.currency, + 'min_limit': value.minLimit, + 'max_limit': value.maxLimit, + }; +} + diff --git a/payment_method/models/ChannelAmountLimitsAllOf.ts b/payment_method/models/ChannelAmountLimitsAllOf.ts new file mode 100644 index 0000000..ce07085 --- /dev/null +++ b/payment_method/models/ChannelAmountLimitsAllOf.ts @@ -0,0 +1,75 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Contains objects of the support currencies and its respective limits per transaction + * @export + * @interface ChannelAmountLimitsAllOf + */ +export interface ChannelAmountLimitsAllOf { + /** + * Currency supported by the payment channel + * @type {string} + * @memberof ChannelAmountLimitsAllOf + */ + currency?: string; + /** + * The minimum allowed transaction amount for the payment channel + * @type {number} + * @memberof ChannelAmountLimitsAllOf + */ + minLimit?: number; + /** + * The minimum allowed transaction amount for the payment channel + * @type {number} + * @memberof ChannelAmountLimitsAllOf + */ + maxLimit?: number; +} + +/** + * Check if a given object implements the ChannelAmountLimitsAllOf interface. + */ +export function instanceOfChannelAmountLimitsAllOf(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function ChannelAmountLimitsAllOfFromJSON(json: any): ChannelAmountLimitsAllOf { + return ChannelAmountLimitsAllOfFromJSONTyped(json, false); +} + +export function ChannelAmountLimitsAllOfFromJSONTyped(json: any, ignoreDiscriminator: boolean): ChannelAmountLimitsAllOf { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'currency': !exists(json, 'currency') ? undefined : json['currency'], + 'minLimit': !exists(json, 'min_limit') ? undefined : json['min_limit'], + 'maxLimit': !exists(json, 'max_limit') ? undefined : json['max_limit'], + }; +} + +export function ChannelAmountLimitsAllOfToJSON(value?: ChannelAmountLimitsAllOf | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'currency': value.currency, + 'min_limit': value.minLimit, + 'max_limit': value.maxLimit, + }; +} + diff --git a/payment_method/models/ChannelProperty.ts b/payment_method/models/ChannelProperty.ts new file mode 100644 index 0000000..0c62ad4 --- /dev/null +++ b/payment_method/models/ChannelProperty.ts @@ -0,0 +1,75 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface ChannelProperty + */ +export interface ChannelProperty { + /** + * The corresponding parameter name + * @type {string} + * @memberof ChannelProperty + */ + name?: string; + /** + * Data type of the parameter + * @type {string} + * @memberof ChannelProperty + */ + type?: string; + /** + * Indicates whether or not the parameter is required + * @type {boolean} + * @memberof ChannelProperty + */ + isRequired?: boolean; +} + +/** + * Check if a given object implements the ChannelProperty interface. + */ +export function instanceOfChannelProperty(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function ChannelPropertyFromJSON(json: any): ChannelProperty { + return ChannelPropertyFromJSONTyped(json, false); +} + +export function ChannelPropertyFromJSONTyped(json: any, ignoreDiscriminator: boolean): ChannelProperty { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'name': !exists(json, 'name') ? undefined : json['name'], + 'type': !exists(json, 'type') ? undefined : json['type'], + 'isRequired': !exists(json, 'is_required') ? undefined : json['is_required'], + }; +} + +export function ChannelPropertyToJSON(value?: ChannelProperty | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'name': value.name, + 'type': value.type, + 'is_required': value.isRequired, + }; +} + diff --git a/payment_method/models/ChannelPropertyAllOf.ts b/payment_method/models/ChannelPropertyAllOf.ts new file mode 100644 index 0000000..a1eda0e --- /dev/null +++ b/payment_method/models/ChannelPropertyAllOf.ts @@ -0,0 +1,75 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Objects that enumerate the parameters needed as `channel_properties` when creating a Payment Method + * @export + * @interface ChannelPropertyAllOf + */ +export interface ChannelPropertyAllOf { + /** + * The corresponding parameter name + * @type {string} + * @memberof ChannelPropertyAllOf + */ + name?: string; + /** + * Data type of the parameter + * @type {string} + * @memberof ChannelPropertyAllOf + */ + type?: string; + /** + * Indicates whether or not the parameter is required + * @type {boolean} + * @memberof ChannelPropertyAllOf + */ + isRequired?: boolean; +} + +/** + * Check if a given object implements the ChannelPropertyAllOf interface. + */ +export function instanceOfChannelPropertyAllOf(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function ChannelPropertyAllOfFromJSON(json: any): ChannelPropertyAllOf { + return ChannelPropertyAllOfFromJSONTyped(json, false); +} + +export function ChannelPropertyAllOfFromJSONTyped(json: any, ignoreDiscriminator: boolean): ChannelPropertyAllOf { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'name': !exists(json, 'name') ? undefined : json['name'], + 'type': !exists(json, 'type') ? undefined : json['type'], + 'isRequired': !exists(json, 'is_required') ? undefined : json['is_required'], + }; +} + +export function ChannelPropertyAllOfToJSON(value?: ChannelPropertyAllOf | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'name': value.name, + 'type': value.type, + 'is_required': value.isRequired, + }; +} + diff --git a/payment_method/models/CreatePaymentMethod409Response.ts b/payment_method/models/CreatePaymentMethod409Response.ts new file mode 100644 index 0000000..00dfe63 --- /dev/null +++ b/payment_method/models/CreatePaymentMethod409Response.ts @@ -0,0 +1,80 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface CreatePaymentMethod409Response + */ +export interface CreatePaymentMethod409Response { + /** + * + * @type {string} + * @memberof CreatePaymentMethod409Response + */ + errorCode?: CreatePaymentMethod409ResponseErrorCodeEnum; + /** + * + * @type {string} + * @memberof CreatePaymentMethod409Response + */ + message?: string; +} + + +/** + * @export + */ +export const CreatePaymentMethod409ResponseErrorCodeEnum = { + PaymentMethodAlreadyActive: 'PAYMENT_METHOD_ALREADY_ACTIVE', + PaymentMethodAlreadyFailed: 'PAYMENT_METHOD_ALREADY_FAILED', + DuplicateError: 'DUPLICATE_ERROR', + IdempotencyError: 'IDEMPOTENCY_ERROR' +} as const; +export type CreatePaymentMethod409ResponseErrorCodeEnum = typeof CreatePaymentMethod409ResponseErrorCodeEnum[keyof typeof CreatePaymentMethod409ResponseErrorCodeEnum]; + + +/** + * Check if a given object implements the CreatePaymentMethod409Response interface. + */ +export function instanceOfCreatePaymentMethod409Response(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CreatePaymentMethod409ResponseFromJSON(json: any): CreatePaymentMethod409Response { + return CreatePaymentMethod409ResponseFromJSONTyped(json, false); +} + +export function CreatePaymentMethod409ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreatePaymentMethod409Response { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': !exists(json, 'error_code') ? undefined : json['error_code'], + 'message': !exists(json, 'message') ? undefined : json['message'], + }; +} + +export function CreatePaymentMethod409ResponseToJSON(value?: CreatePaymentMethod409Response | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/payment_method/models/CreatePaymentMethod503Response.ts b/payment_method/models/CreatePaymentMethod503Response.ts new file mode 100644 index 0000000..61e0aaa --- /dev/null +++ b/payment_method/models/CreatePaymentMethod503Response.ts @@ -0,0 +1,78 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface CreatePaymentMethod503Response + */ +export interface CreatePaymentMethod503Response { + /** + * + * @type {string} + * @memberof CreatePaymentMethod503Response + */ + errorCode?: CreatePaymentMethod503ResponseErrorCodeEnum; + /** + * + * @type {string} + * @memberof CreatePaymentMethod503Response + */ + message?: string; +} + + +/** + * @export + */ +export const CreatePaymentMethod503ResponseErrorCodeEnum = { + ChannelUnavailable: 'CHANNEL_UNAVAILABLE', + OtpDeliveryError: 'OTP_DELIVERY_ERROR' +} as const; +export type CreatePaymentMethod503ResponseErrorCodeEnum = typeof CreatePaymentMethod503ResponseErrorCodeEnum[keyof typeof CreatePaymentMethod503ResponseErrorCodeEnum]; + + +/** + * Check if a given object implements the CreatePaymentMethod503Response interface. + */ +export function instanceOfCreatePaymentMethod503Response(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CreatePaymentMethod503ResponseFromJSON(json: any): CreatePaymentMethod503Response { + return CreatePaymentMethod503ResponseFromJSONTyped(json, false); +} + +export function CreatePaymentMethod503ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreatePaymentMethod503Response { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': !exists(json, 'error_code') ? undefined : json['error_code'], + 'message': !exists(json, 'message') ? undefined : json['message'], + }; +} + +export function CreatePaymentMethod503ResponseToJSON(value?: CreatePaymentMethod503Response | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/payment_method/models/DirectDebit.ts b/payment_method/models/DirectDebit.ts new file mode 100644 index 0000000..3a26474 --- /dev/null +++ b/payment_method/models/DirectDebit.ts @@ -0,0 +1,125 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { DirectDebitBankAccount } from './DirectDebitBankAccount'; +import { + DirectDebitBankAccountFromJSON, + DirectDebitBankAccountFromJSONTyped, + DirectDebitBankAccountToJSON, +} from './DirectDebitBankAccount'; +import type { DirectDebitChannelCode } from './DirectDebitChannelCode'; +import { + DirectDebitChannelCodeFromJSON, + DirectDebitChannelCodeFromJSONTyped, + DirectDebitChannelCodeToJSON, +} from './DirectDebitChannelCode'; +import type { DirectDebitChannelProperties } from './DirectDebitChannelProperties'; +import { + DirectDebitChannelPropertiesFromJSON, + DirectDebitChannelPropertiesFromJSONTyped, + DirectDebitChannelPropertiesToJSON, +} from './DirectDebitChannelProperties'; +import type { DirectDebitDebitCard } from './DirectDebitDebitCard'; +import { + DirectDebitDebitCardFromJSON, + DirectDebitDebitCardFromJSONTyped, + DirectDebitDebitCardToJSON, +} from './DirectDebitDebitCard'; +import type { DirectDebitType } from './DirectDebitType'; +import { + DirectDebitTypeFromJSON, + DirectDebitTypeFromJSONTyped, + DirectDebitTypeToJSON, +} from './DirectDebitType'; + +/** + * Direct Debit Payment Method Details + * @export + * @interface DirectDebit + */ +export interface DirectDebit { + /** + * + * @type {DirectDebitChannelCode} + * @memberof DirectDebit + */ + channelCode: DirectDebitChannelCode; + /** + * + * @type {DirectDebitChannelProperties} + * @memberof DirectDebit + */ + channelProperties: DirectDebitChannelProperties | null; + /** + * + * @type {DirectDebitType} + * @memberof DirectDebit + */ + type: DirectDebitType; + /** + * + * @type {DirectDebitBankAccount} + * @memberof DirectDebit + */ + bankAccount?: DirectDebitBankAccount | null; + /** + * + * @type {DirectDebitDebitCard} + * @memberof DirectDebit + */ + debitCard?: DirectDebitDebitCard | null; +} + +/** + * Check if a given object implements the DirectDebit interface. + */ +export function instanceOfDirectDebit(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + isInstance = isInstance && "type" in value; + + return isInstance; +} + +export function DirectDebitFromJSON(json: any): DirectDebit { + return DirectDebitFromJSONTyped(json, false); +} + +export function DirectDebitFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebit { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'channelCode': DirectDebitChannelCodeFromJSON(json['channel_code']), + 'channelProperties': DirectDebitChannelPropertiesFromJSON(json['channel_properties']), + 'type': DirectDebitTypeFromJSON(json['type']), + 'bankAccount': !exists(json, 'bank_account') ? undefined : DirectDebitBankAccountFromJSON(json['bank_account']), + 'debitCard': !exists(json, 'debit_card') ? undefined : DirectDebitDebitCardFromJSON(json['debit_card']), + }; +} + +export function DirectDebitToJSON(value?: DirectDebit | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'channel_code': DirectDebitChannelCodeToJSON(value.channelCode), + 'channel_properties': DirectDebitChannelPropertiesToJSON(value.channelProperties), + 'type': DirectDebitTypeToJSON(value.type), + 'bank_account': DirectDebitBankAccountToJSON(value.bankAccount), + 'debit_card': DirectDebitDebitCardToJSON(value.debitCard), + }; +} + diff --git a/payment_method/models/DirectDebitAllOf.ts b/payment_method/models/DirectDebitAllOf.ts new file mode 100644 index 0000000..a32d8a6 --- /dev/null +++ b/payment_method/models/DirectDebitAllOf.ts @@ -0,0 +1,95 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { DirectDebitBankAccount } from './DirectDebitBankAccount'; +import { + DirectDebitBankAccountFromJSON, + DirectDebitBankAccountFromJSONTyped, + DirectDebitBankAccountToJSON, +} from './DirectDebitBankAccount'; +import type { DirectDebitDebitCard } from './DirectDebitDebitCard'; +import { + DirectDebitDebitCardFromJSON, + DirectDebitDebitCardFromJSONTyped, + DirectDebitDebitCardToJSON, +} from './DirectDebitDebitCard'; +import type { DirectDebitType } from './DirectDebitType'; +import { + DirectDebitTypeFromJSON, + DirectDebitTypeFromJSONTyped, + DirectDebitTypeToJSON, +} from './DirectDebitType'; + +/** + * + * @export + * @interface DirectDebitAllOf + */ +export interface DirectDebitAllOf { + /** + * + * @type {DirectDebitType} + * @memberof DirectDebitAllOf + */ + type: DirectDebitType; + /** + * + * @type {DirectDebitBankAccount} + * @memberof DirectDebitAllOf + */ + bankAccount?: DirectDebitBankAccount | null; + /** + * + * @type {DirectDebitDebitCard} + * @memberof DirectDebitAllOf + */ + debitCard?: DirectDebitDebitCard | null; +} + +/** + * Check if a given object implements the DirectDebitAllOf interface. + */ +export function instanceOfDirectDebitAllOf(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "type" in value; + + return isInstance; +} + +export function DirectDebitAllOfFromJSON(json: any): DirectDebitAllOf { + return DirectDebitAllOfFromJSONTyped(json, false); +} + +export function DirectDebitAllOfFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitAllOf { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'type': DirectDebitTypeFromJSON(json['type']), + 'bankAccount': !exists(json, 'bank_account') ? undefined : DirectDebitBankAccountFromJSON(json['bank_account']), + 'debitCard': !exists(json, 'debit_card') ? undefined : DirectDebitDebitCardFromJSON(json['debit_card']), + }; +} + +export function DirectDebitAllOfToJSON(value?: DirectDebitAllOf | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'type': DirectDebitTypeToJSON(value.type), + 'bank_account': DirectDebitBankAccountToJSON(value.bankAccount), + 'debit_card': DirectDebitDebitCardToJSON(value.debitCard), + }; +} + diff --git a/payment_method/models/DirectDebitBankAccount.ts b/payment_method/models/DirectDebitBankAccount.ts new file mode 100644 index 0000000..ab47619 --- /dev/null +++ b/payment_method/models/DirectDebitBankAccount.ts @@ -0,0 +1,83 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface DirectDebitBankAccount + */ +export interface DirectDebitBankAccount { + /** + * + * @type {string} + * @memberof DirectDebitBankAccount + */ + maskedBankAccountNumber?: string | null; + /** + * + * @type {string} + * @memberof DirectDebitBankAccount + */ + bankAccountHash?: string | null; + /** + * Mobile number of the customer registered to the partner channel + * @type {string} + * @memberof DirectDebitBankAccount + */ + mobileNumber?: string | null; + /** + * Identity number of the customer registered to the partner channel + * @type {string} + * @memberof DirectDebitBankAccount + */ + identityDocumentNumber?: string | null; +} + +/** + * Check if a given object implements the DirectDebitBankAccount interface. + */ +export function instanceOfDirectDebitBankAccount(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function DirectDebitBankAccountFromJSON(json: any): DirectDebitBankAccount { + return DirectDebitBankAccountFromJSONTyped(json, false); +} + +export function DirectDebitBankAccountFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitBankAccount { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'maskedBankAccountNumber': !exists(json, 'masked_bank_account_number') ? undefined : json['masked_bank_account_number'], + 'bankAccountHash': !exists(json, 'bank_account_hash') ? undefined : json['bank_account_hash'], + 'mobileNumber': !exists(json, 'mobile_number') ? undefined : json['mobile_number'], + 'identityDocumentNumber': !exists(json, 'identity_document_number') ? undefined : json['identity_document_number'], + }; +} + +export function DirectDebitBankAccountToJSON(value?: DirectDebitBankAccount | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'masked_bank_account_number': value.maskedBankAccountNumber, + 'bank_account_hash': value.bankAccountHash, + 'mobile_number': value.mobileNumber, + 'identity_document_number': value.identityDocumentNumber, + }; +} + diff --git a/payment_method/models/DirectDebitChannelCode.ts b/payment_method/models/DirectDebitChannelCode.ts new file mode 100644 index 0000000..03248b2 --- /dev/null +++ b/payment_method/models/DirectDebitChannelCode.ts @@ -0,0 +1,93 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Direct Debit Channel Code + * @export + */ +export const DirectDebitChannelCode = { + BcaKlikpay: 'BCA_KLIKPAY', + BcaOneklik: 'BCA_ONEKLIK', + Bdo: 'BDO', + Bpi: 'BPI', + Bri: 'BRI', + Bni: 'BNI', + Chinabank: 'CHINABANK', + Cimbniaga: 'CIMBNIAGA', + Mtb: 'MTB', + Rcbc: 'RCBC', + Ubp: 'UBP', + Mandiri: 'MANDIRI', + Bbl: 'BBL', + Scb: 'SCB', + Ktb: 'KTB', + Bay: 'BAY', + KbankMb: 'KBANK_MB', + BayMb: 'BAY_MB', + KtbMb: 'KTB_MB', + BblMb: 'BBL_MB', + ScbMb: 'SCB_MB', + BdoEpay: 'BDO_EPAY', + AutodebitUbp: 'AUTODEBIT_UBP', + AffinFpx: 'AFFIN_FPX', + AgroFpx: 'AGRO_FPX', + AllianceFpx: 'ALLIANCE_FPX', + AmbankFpx: 'AMBANK_FPX', + IslamFpx: 'ISLAM_FPX', + MuamalatFpx: 'MUAMALAT_FPX', + BocFpx: 'BOC_FPX', + RakyatFpx: 'RAKYAT_FPX', + BsnFpx: 'BSN_FPX', + CimbFpx: 'CIMB_FPX', + HlbFpx: 'HLB_FPX', + HsbcFpx: 'HSBC_FPX', + KfhFpx: 'KFH_FPX', + Mayb2EFpx: 'MAYB2E_FPX', + Mayb2UFpx: 'MAYB2U_FPX', + OcbcFpx: 'OCBC_FPX', + PublicFpx: 'PUBLIC_FPX', + RhbFpx: 'RHB_FPX', + SchFpx: 'SCH_FPX', + UobFpx: 'UOB_FPX', + AffinFpxBusiness: 'AFFIN_FPX_BUSINESS', + AgroFpxBusiness: 'AGRO_FPX_BUSINESS', + AllianceFpxBusiness: 'ALLIANCE_FPX_BUSINESS', + AmbankFpxBusiness: 'AMBANK_FPX_BUSINESS', + IslamFpxBusiness: 'ISLAM_FPX_BUSINESS', + MuamalatFpxBusiness: 'MUAMALAT_FPX_BUSINESS', + BnpFpxBusiness: 'BNP_FPX_BUSINESS', + CimbFpxBusiness: 'CIMB_FPX_BUSINESS', + CitibankFpxBusiness: 'CITIBANK_FPX_BUSINESS', + DeutscheFpxBusiness: 'DEUTSCHE_FPX_BUSINESS', + HlbFpxBusiness: 'HLB_FPX_BUSINESS', + HsbcFpxBusiness: 'HSBC_FPX_BUSINESS', + RakyatFpxBusiness: 'RAKYAT_FPX_BUSINESS', + KfhFpxBusiness: 'KFH_FPX_BUSINESS', + Mayb2EFpxBusiness: 'MAYB2E_FPX_BUSINESS', + OcbcFpxBusiness: 'OCBC_FPX_BUSINESS', + PublicFpxBusiness: 'PUBLIC_FPX_BUSINESS', + RhbFpxBusiness: 'RHB_FPX_BUSINESS', + SchFpxBusiness: 'SCH_FPX_BUSINESS', + UobFpxBusiness: 'UOB_FPX_BUSINESS' +} as const; +export type DirectDebitChannelCode = typeof DirectDebitChannelCode[keyof typeof DirectDebitChannelCode]; + + +export function DirectDebitChannelCodeFromJSON(json: any): DirectDebitChannelCode { + return DirectDebitChannelCodeFromJSONTyped(json, false); +} + +export function DirectDebitChannelCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitChannelCode { + return json as DirectDebitChannelCode; +} + +export function DirectDebitChannelCodeToJSON(value?: DirectDebitChannelCode | null): any { + return value as any; +} + diff --git a/payment_method/models/DirectDebitChannelProperties.ts b/payment_method/models/DirectDebitChannelProperties.ts new file mode 100644 index 0000000..a2bfc34 --- /dev/null +++ b/payment_method/models/DirectDebitChannelProperties.ts @@ -0,0 +1,115 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Direct Debit Channel Properties + * @export + * @interface DirectDebitChannelProperties + */ +export interface DirectDebitChannelProperties { + /** + * + * @type {string} + * @memberof DirectDebitChannelProperties + */ + successReturnUrl?: string; + /** + * + * @type {string} + * @memberof DirectDebitChannelProperties + */ + failureReturnUrl?: string | null; + /** + * Mobile number of the customer registered to the partner channel + * @type {string} + * @memberof DirectDebitChannelProperties + */ + mobileNumber?: string | null; + /** + * Last four digits of the debit card + * @type {string} + * @memberof DirectDebitChannelProperties + */ + cardLastFour?: string | null; + /** + * Expiry month and year of the debit card (in MM/YY format) + * @type {string} + * @memberof DirectDebitChannelProperties + */ + cardExpiry?: string | null; + /** + * Email address of the customer that is registered to the partner channel + * @type {string} + * @memberof DirectDebitChannelProperties + */ + email?: string | null; + /** + * Identity number of the customer registered to the partner channel + * @type {string} + * @memberof DirectDebitChannelProperties + */ + identityDocumentNumber?: string | null; + /** + * + * @type {boolean} + * @memberof DirectDebitChannelProperties + */ + requireAuth?: boolean | null; +} + +/** + * Check if a given object implements the DirectDebitChannelProperties interface. + */ +export function instanceOfDirectDebitChannelProperties(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function DirectDebitChannelPropertiesFromJSON(json: any): DirectDebitChannelProperties { + return DirectDebitChannelPropertiesFromJSONTyped(json, false); +} + +export function DirectDebitChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'successReturnUrl': !exists(json, 'success_return_url') ? undefined : json['success_return_url'], + 'failureReturnUrl': !exists(json, 'failure_return_url') ? undefined : json['failure_return_url'], + 'mobileNumber': !exists(json, 'mobile_number') ? undefined : json['mobile_number'], + 'cardLastFour': !exists(json, 'card_last_four') ? undefined : json['card_last_four'], + 'cardExpiry': !exists(json, 'card_expiry') ? undefined : json['card_expiry'], + 'email': !exists(json, 'email') ? undefined : json['email'], + 'identityDocumentNumber': !exists(json, 'identity_document_number') ? undefined : json['identity_document_number'], + 'requireAuth': !exists(json, 'require_auth') ? undefined : json['require_auth'], + }; +} + +export function DirectDebitChannelPropertiesToJSON(value?: DirectDebitChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'success_return_url': value.successReturnUrl, + 'failure_return_url': value.failureReturnUrl, + 'mobile_number': value.mobileNumber, + 'card_last_four': value.cardLastFour, + 'card_expiry': value.cardExpiry, + 'email': value.email, + 'identity_document_number': value.identityDocumentNumber, + 'require_auth': value.requireAuth, + }; +} + diff --git a/payment_method/models/DirectDebitDebitCard.ts b/payment_method/models/DirectDebitDebitCard.ts new file mode 100644 index 0000000..f90b733 --- /dev/null +++ b/payment_method/models/DirectDebitDebitCard.ts @@ -0,0 +1,83 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface DirectDebitDebitCard + */ +export interface DirectDebitDebitCard { + /** + * Mobile number of the customer registered to the partner channel + * @type {string} + * @memberof DirectDebitDebitCard + */ + mobileNumber?: string | null; + /** + * Last four digits of the debit card + * @type {string} + * @memberof DirectDebitDebitCard + */ + cardLastFour?: string | null; + /** + * Expiry month and year of the debit card (in MM/YY format) + * @type {string} + * @memberof DirectDebitDebitCard + */ + cardExpiry?: string | null; + /** + * Email address of the customer that is registered to the partner channel + * @type {string} + * @memberof DirectDebitDebitCard + */ + email?: string | null; +} + +/** + * Check if a given object implements the DirectDebitDebitCard interface. + */ +export function instanceOfDirectDebitDebitCard(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function DirectDebitDebitCardFromJSON(json: any): DirectDebitDebitCard { + return DirectDebitDebitCardFromJSONTyped(json, false); +} + +export function DirectDebitDebitCardFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitDebitCard { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'mobileNumber': !exists(json, 'mobile_number') ? undefined : json['mobile_number'], + 'cardLastFour': !exists(json, 'card_last_four') ? undefined : json['card_last_four'], + 'cardExpiry': !exists(json, 'card_expiry') ? undefined : json['card_expiry'], + 'email': !exists(json, 'email') ? undefined : json['email'], + }; +} + +export function DirectDebitDebitCardToJSON(value?: DirectDebitDebitCard | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'mobile_number': value.mobileNumber, + 'card_last_four': value.cardLastFour, + 'card_expiry': value.cardExpiry, + 'email': value.email, + }; +} + diff --git a/payment_method/models/DirectDebitParameters.ts b/payment_method/models/DirectDebitParameters.ts new file mode 100644 index 0000000..ff449cc --- /dev/null +++ b/payment_method/models/DirectDebitParameters.ts @@ -0,0 +1,82 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { DirectDebitChannelCode } from './DirectDebitChannelCode'; +import { + DirectDebitChannelCodeFromJSON, + DirectDebitChannelCodeFromJSONTyped, + DirectDebitChannelCodeToJSON, +} from './DirectDebitChannelCode'; +import type { DirectDebitChannelProperties } from './DirectDebitChannelProperties'; +import { + DirectDebitChannelPropertiesFromJSON, + DirectDebitChannelPropertiesFromJSONTyped, + DirectDebitChannelPropertiesToJSON, +} from './DirectDebitChannelProperties'; + +/** + * + * @export + * @interface DirectDebitParameters + */ +export interface DirectDebitParameters { + /** + * + * @type {DirectDebitChannelCode} + * @memberof DirectDebitParameters + */ + channelCode: DirectDebitChannelCode; + /** + * + * @type {DirectDebitChannelProperties} + * @memberof DirectDebitParameters + */ + channelProperties: DirectDebitChannelProperties | null; +} + +/** + * Check if a given object implements the DirectDebitParameters interface. + */ +export function instanceOfDirectDebitParameters(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + + return isInstance; +} + +export function DirectDebitParametersFromJSON(json: any): DirectDebitParameters { + return DirectDebitParametersFromJSONTyped(json, false); +} + +export function DirectDebitParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'channelCode': DirectDebitChannelCodeFromJSON(json['channel_code']), + 'channelProperties': DirectDebitChannelPropertiesFromJSON(json['channel_properties']), + }; +} + +export function DirectDebitParametersToJSON(value?: DirectDebitParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'channel_code': DirectDebitChannelCodeToJSON(value.channelCode), + 'channel_properties': DirectDebitChannelPropertiesToJSON(value.channelProperties), + }; +} + diff --git a/payment_method/models/DirectDebitType.ts b/payment_method/models/DirectDebitType.ts new file mode 100644 index 0000000..5164ee3 --- /dev/null +++ b/payment_method/models/DirectDebitType.ts @@ -0,0 +1,33 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const DirectDebitType = { + DebitCard: 'DEBIT_CARD', + BankAccount: 'BANK_ACCOUNT', + BankRedirect: 'BANK_REDIRECT' +} as const; +export type DirectDebitType = typeof DirectDebitType[keyof typeof DirectDebitType]; + + +export function DirectDebitTypeFromJSON(json: any): DirectDebitType { + return DirectDebitTypeFromJSONTyped(json, false); +} + +export function DirectDebitTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitType { + return json as DirectDebitType; +} + +export function DirectDebitTypeToJSON(value?: DirectDebitType | null): any { + return value as any; +} + diff --git a/payment_method/models/EWallet.ts b/payment_method/models/EWallet.ts new file mode 100644 index 0000000..12c5f43 --- /dev/null +++ b/payment_method/models/EWallet.ts @@ -0,0 +1,95 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { EWalletAccount } from './EWalletAccount'; +import { + EWalletAccountFromJSON, + EWalletAccountFromJSONTyped, + EWalletAccountToJSON, +} from './EWalletAccount'; +import type { EWalletChannelCode } from './EWalletChannelCode'; +import { + EWalletChannelCodeFromJSON, + EWalletChannelCodeFromJSONTyped, + EWalletChannelCodeToJSON, +} from './EWalletChannelCode'; +import type { EWalletChannelProperties } from './EWalletChannelProperties'; +import { + EWalletChannelPropertiesFromJSON, + EWalletChannelPropertiesFromJSONTyped, + EWalletChannelPropertiesToJSON, +} from './EWalletChannelProperties'; + +/** + * Ewallet Payment Method Details + * @export + * @interface EWallet + */ +export interface EWallet { + /** + * + * @type {EWalletChannelCode} + * @memberof EWallet + */ + channelCode: EWalletChannelCode; + /** + * + * @type {EWalletChannelProperties} + * @memberof EWallet + */ + channelProperties?: EWalletChannelProperties; + /** + * + * @type {EWalletAccount} + * @memberof EWallet + */ + account?: EWalletAccount; +} + +/** + * Check if a given object implements the EWallet interface. + */ +export function instanceOfEWallet(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + + return isInstance; +} + +export function EWalletFromJSON(json: any): EWallet { + return EWalletFromJSONTyped(json, false); +} + +export function EWalletFromJSONTyped(json: any, ignoreDiscriminator: boolean): EWallet { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'channelCode': EWalletChannelCodeFromJSON(json['channel_code']), + 'channelProperties': !exists(json, 'channel_properties') ? undefined : EWalletChannelPropertiesFromJSON(json['channel_properties']), + 'account': !exists(json, 'account') ? undefined : EWalletAccountFromJSON(json['account']), + }; +} + +export function EWalletToJSON(value?: EWallet | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'channel_code': EWalletChannelCodeToJSON(value.channelCode), + 'channel_properties': EWalletChannelPropertiesToJSON(value.channelProperties), + 'account': EWalletAccountToJSON(value.account), + }; +} + diff --git a/payment_method/models/EWalletAccount.ts b/payment_method/models/EWalletAccount.ts new file mode 100644 index 0000000..1bcc4ad --- /dev/null +++ b/payment_method/models/EWalletAccount.ts @@ -0,0 +1,83 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * EWallet Account Properties + * @export + * @interface EWalletAccount + */ +export interface EWalletAccount { + /** + * Name of the eWallet account holder. The value is null if unavailableName of the eWallet account holder. The value is null if unavailable + * @type {string} + * @memberof EWalletAccount + */ + name?: string | null; + /** + * Identifier from eWallet provider e.g. phone number. The value is null if unavailable + * @type {string} + * @memberof EWalletAccount + */ + accountDetails?: string | null; + /** + * The main balance amount on eWallet account provided from eWallet provider. The value is null if unavailable + * @type {number} + * @memberof EWalletAccount + */ + balance?: number | null; + /** + * The point balance amount on eWallet account. Applicable only on some eWallet provider that has point system. The value is null if unavailabl + * @type {number} + * @memberof EWalletAccount + */ + pointBalance?: number | null; +} + +/** + * Check if a given object implements the EWalletAccount interface. + */ +export function instanceOfEWalletAccount(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function EWalletAccountFromJSON(json: any): EWalletAccount { + return EWalletAccountFromJSONTyped(json, false); +} + +export function EWalletAccountFromJSONTyped(json: any, ignoreDiscriminator: boolean): EWalletAccount { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'name': !exists(json, 'name') ? undefined : json['name'], + 'accountDetails': !exists(json, 'account_details') ? undefined : json['account_details'], + 'balance': !exists(json, 'balance') ? undefined : json['balance'], + 'pointBalance': !exists(json, 'point_balance') ? undefined : json['point_balance'], + }; +} + +export function EWalletAccountToJSON(value?: EWalletAccount | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'name': value.name, + 'account_details': value.accountDetails, + 'balance': value.balance, + 'point_balance': value.pointBalance, + }; +} + diff --git a/payment_method/models/EWalletChannelCode.ts b/payment_method/models/EWalletChannelCode.ts new file mode 100644 index 0000000..a070660 --- /dev/null +++ b/payment_method/models/EWalletChannelCode.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * EWallet Channel Code + * @export + */ +export const EWalletChannelCode = { + Gcash: 'GCASH', + Grabpay: 'GRABPAY', + Paymaya: 'PAYMAYA', + Ovo: 'OVO', + Dana: 'DANA', + Linkaja: 'LINKAJA', + Shopeepay: 'SHOPEEPAY', + Sakuku: 'SAKUKU', + Nexcash: 'NEXCASH', + Astrapay: 'ASTRAPAY', + Jeniuspay: 'JENIUSPAY', + Appota: 'APPOTA', + Momo: 'MOMO', + Vnptwallet: 'VNPTWALLET', + Viettelpay: 'VIETTELPAY', + Zalopay: 'ZALOPAY', + Wechatpay: 'WECHATPAY', + Linepay: 'LINEPAY', + Truemoney: 'TRUEMONEY', + Alipay: 'ALIPAY' +} as const; +export type EWalletChannelCode = typeof EWalletChannelCode[keyof typeof EWalletChannelCode]; + + +export function EWalletChannelCodeFromJSON(json: any): EWalletChannelCode { + return EWalletChannelCodeFromJSONTyped(json, false); +} + +export function EWalletChannelCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): EWalletChannelCode { + return json as EWalletChannelCode; +} + +export function EWalletChannelCodeToJSON(value?: EWalletChannelCode | null): any { + return value as any; +} + diff --git a/payment_method/models/EWalletChannelProperties.ts b/payment_method/models/EWalletChannelProperties.ts new file mode 100644 index 0000000..262949b --- /dev/null +++ b/payment_method/models/EWalletChannelProperties.ts @@ -0,0 +1,99 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * EWallet Channel Properties + * @export + * @interface EWalletChannelProperties + */ +export interface EWalletChannelProperties { + /** + * URL where the end-customer is redirected if the authorization is successful + * @type {string} + * @memberof EWalletChannelProperties + */ + successReturnUrl?: string; + /** + * URL where the end-customer is redirected if the authorization failed + * @type {string} + * @memberof EWalletChannelProperties + */ + failureReturnUrl?: string; + /** + * URL where the end-customer is redirected if the authorization cancelled + * @type {string} + * @memberof EWalletChannelProperties + */ + cancelReturnUrl?: string; + /** + * Mobile number of customer in E.164 format (e.g. +628123123123). For OVO one time payment use only. + * @type {string} + * @memberof EWalletChannelProperties + */ + mobileNumber?: string; + /** + * REDEEM_NONE will not use any point, REDEEM_ALL will use all available points before cash balance is used. For OVO and ShopeePay tokenized payment use only. + * @type {string} + * @memberof EWalletChannelProperties + */ + redeemPoints?: string; + /** + * Available for JENIUSPAY only + * @type {string} + * @memberof EWalletChannelProperties + */ + cashtag?: string; +} + +/** + * Check if a given object implements the EWalletChannelProperties interface. + */ +export function instanceOfEWalletChannelProperties(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function EWalletChannelPropertiesFromJSON(json: any): EWalletChannelProperties { + return EWalletChannelPropertiesFromJSONTyped(json, false); +} + +export function EWalletChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): EWalletChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'successReturnUrl': !exists(json, 'success_return_url') ? undefined : json['success_return_url'], + 'failureReturnUrl': !exists(json, 'failure_return_url') ? undefined : json['failure_return_url'], + 'cancelReturnUrl': !exists(json, 'cancel_return_url') ? undefined : json['cancel_return_url'], + 'mobileNumber': !exists(json, 'mobile_number') ? undefined : json['mobile_number'], + 'redeemPoints': !exists(json, 'redeem_points') ? undefined : json['redeem_points'], + 'cashtag': !exists(json, 'cashtag') ? undefined : json['cashtag'], + }; +} + +export function EWalletChannelPropertiesToJSON(value?: EWalletChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'success_return_url': value.successReturnUrl, + 'failure_return_url': value.failureReturnUrl, + 'cancel_return_url': value.cancelReturnUrl, + 'mobile_number': value.mobileNumber, + 'redeem_points': value.redeemPoints, + 'cashtag': value.cashtag, + }; +} + diff --git a/payment_method/models/EWalletParameters.ts b/payment_method/models/EWalletParameters.ts new file mode 100644 index 0000000..2092da9 --- /dev/null +++ b/payment_method/models/EWalletParameters.ts @@ -0,0 +1,95 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { EWalletAccount } from './EWalletAccount'; +import { + EWalletAccountFromJSON, + EWalletAccountFromJSONTyped, + EWalletAccountToJSON, +} from './EWalletAccount'; +import type { EWalletChannelCode } from './EWalletChannelCode'; +import { + EWalletChannelCodeFromJSON, + EWalletChannelCodeFromJSONTyped, + EWalletChannelCodeToJSON, +} from './EWalletChannelCode'; +import type { EWalletChannelProperties } from './EWalletChannelProperties'; +import { + EWalletChannelPropertiesFromJSON, + EWalletChannelPropertiesFromJSONTyped, + EWalletChannelPropertiesToJSON, +} from './EWalletChannelProperties'; + +/** + * + * @export + * @interface EWalletParameters + */ +export interface EWalletParameters { + /** + * + * @type {EWalletChannelCode} + * @memberof EWalletParameters + */ + channelCode: EWalletChannelCode; + /** + * + * @type {EWalletChannelProperties} + * @memberof EWalletParameters + */ + channelProperties?: EWalletChannelProperties; + /** + * + * @type {EWalletAccount} + * @memberof EWalletParameters + */ + account?: EWalletAccount; +} + +/** + * Check if a given object implements the EWalletParameters interface. + */ +export function instanceOfEWalletParameters(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + + return isInstance; +} + +export function EWalletParametersFromJSON(json: any): EWalletParameters { + return EWalletParametersFromJSONTyped(json, false); +} + +export function EWalletParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): EWalletParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'channelCode': EWalletChannelCodeFromJSON(json['channel_code']), + 'channelProperties': !exists(json, 'channel_properties') ? undefined : EWalletChannelPropertiesFromJSON(json['channel_properties']), + 'account': !exists(json, 'account') ? undefined : EWalletAccountFromJSON(json['account']), + }; +} + +export function EWalletParametersToJSON(value?: EWalletParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'channel_code': EWalletChannelCodeToJSON(value.channelCode), + 'channel_properties': EWalletChannelPropertiesToJSON(value.channelProperties), + 'account': EWalletAccountToJSON(value.account), + }; +} + diff --git a/payment_method/models/GetAllPaymentMethods400Response.ts b/payment_method/models/GetAllPaymentMethods400Response.ts new file mode 100644 index 0000000..5d01203 --- /dev/null +++ b/payment_method/models/GetAllPaymentMethods400Response.ts @@ -0,0 +1,90 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface GetAllPaymentMethods400Response + */ +export interface GetAllPaymentMethods400Response { + /** + * + * @type {string} + * @memberof GetAllPaymentMethods400Response + */ + errorCode?: GetAllPaymentMethods400ResponseErrorCodeEnum; + /** + * + * @type {string} + * @memberof GetAllPaymentMethods400Response + */ + message?: string; +} + + +/** + * @export + */ +export const GetAllPaymentMethods400ResponseErrorCodeEnum = { + ApiValidationError: 'API_VALIDATION_ERROR', + NotSupportedByChannel: 'NOT_SUPPORTED_BY_CHANNEL', + ExpiredOtpError: 'EXPIRED_OTP_ERROR', + InvalidAccountDetails: 'INVALID_ACCOUNT_DETAILS', + InvalidOtpError: 'INVALID_OTP_ERROR', + InvalidPaymentMethod: 'INVALID_PAYMENT_METHOD', + MaxOtpAttemptsError: 'MAX_OTP_ATTEMPTS_ERROR', + CustomerNotFoundError: 'CUSTOMER_NOT_FOUND_ERROR', + AccountAccessBlocked: 'ACCOUNT_ACCESS_BLOCKED', + MaxAccountLinking: 'MAX_ACCOUNT_LINKING', + InactivePaymentMethod: 'INACTIVE_PAYMENT_METHOD', + PaymentMethodNotSupported: 'PAYMENT_METHOD_NOT_SUPPORTED', + IncorrectAmount: 'INCORRECT_AMOUNT', + DuplicatedFixedPaymentInstrument: 'DUPLICATED_FIXED_PAYMENT_INSTRUMENT' +} as const; +export type GetAllPaymentMethods400ResponseErrorCodeEnum = typeof GetAllPaymentMethods400ResponseErrorCodeEnum[keyof typeof GetAllPaymentMethods400ResponseErrorCodeEnum]; + + +/** + * Check if a given object implements the GetAllPaymentMethods400Response interface. + */ +export function instanceOfGetAllPaymentMethods400Response(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function GetAllPaymentMethods400ResponseFromJSON(json: any): GetAllPaymentMethods400Response { + return GetAllPaymentMethods400ResponseFromJSONTyped(json, false); +} + +export function GetAllPaymentMethods400ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): GetAllPaymentMethods400Response { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': !exists(json, 'error_code') ? undefined : json['error_code'], + 'message': !exists(json, 'message') ? undefined : json['message'], + }; +} + +export function GetAllPaymentMethods400ResponseToJSON(value?: GetAllPaymentMethods400Response | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/payment_method/models/GetAllPaymentMethods403Response.ts b/payment_method/models/GetAllPaymentMethods403Response.ts new file mode 100644 index 0000000..00384f1 --- /dev/null +++ b/payment_method/models/GetAllPaymentMethods403Response.ts @@ -0,0 +1,78 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface GetAllPaymentMethods403Response + */ +export interface GetAllPaymentMethods403Response { + /** + * + * @type {string} + * @memberof GetAllPaymentMethods403Response + */ + errorCode?: GetAllPaymentMethods403ResponseErrorCodeEnum; + /** + * + * @type {string} + * @memberof GetAllPaymentMethods403Response + */ + message?: string; +} + + +/** + * @export + */ +export const GetAllPaymentMethods403ResponseErrorCodeEnum = { + Unauthorized: 'UNAUTHORIZED', + ChannelNotActivated: 'CHANNEL_NOT_ACTIVATED' +} as const; +export type GetAllPaymentMethods403ResponseErrorCodeEnum = typeof GetAllPaymentMethods403ResponseErrorCodeEnum[keyof typeof GetAllPaymentMethods403ResponseErrorCodeEnum]; + + +/** + * Check if a given object implements the GetAllPaymentMethods403Response interface. + */ +export function instanceOfGetAllPaymentMethods403Response(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function GetAllPaymentMethods403ResponseFromJSON(json: any): GetAllPaymentMethods403Response { + return GetAllPaymentMethods403ResponseFromJSONTyped(json, false); +} + +export function GetAllPaymentMethods403ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): GetAllPaymentMethods403Response { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': !exists(json, 'error_code') ? undefined : json['error_code'], + 'message': !exists(json, 'message') ? undefined : json['message'], + }; +} + +export function GetAllPaymentMethods403ResponseToJSON(value?: GetAllPaymentMethods403Response | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/payment_method/models/GetAllPaymentMethods404Response.ts b/payment_method/models/GetAllPaymentMethods404Response.ts new file mode 100644 index 0000000..9b333d2 --- /dev/null +++ b/payment_method/models/GetAllPaymentMethods404Response.ts @@ -0,0 +1,77 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface GetAllPaymentMethods404Response + */ +export interface GetAllPaymentMethods404Response { + /** + * + * @type {string} + * @memberof GetAllPaymentMethods404Response + */ + errorCode?: GetAllPaymentMethods404ResponseErrorCodeEnum; + /** + * + * @type {string} + * @memberof GetAllPaymentMethods404Response + */ + message?: string; +} + + +/** + * @export + */ +export const GetAllPaymentMethods404ResponseErrorCodeEnum = { + DataNotFound: 'DATA_NOT_FOUND' +} as const; +export type GetAllPaymentMethods404ResponseErrorCodeEnum = typeof GetAllPaymentMethods404ResponseErrorCodeEnum[keyof typeof GetAllPaymentMethods404ResponseErrorCodeEnum]; + + +/** + * Check if a given object implements the GetAllPaymentMethods404Response interface. + */ +export function instanceOfGetAllPaymentMethods404Response(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function GetAllPaymentMethods404ResponseFromJSON(json: any): GetAllPaymentMethods404Response { + return GetAllPaymentMethods404ResponseFromJSONTyped(json, false); +} + +export function GetAllPaymentMethods404ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): GetAllPaymentMethods404Response { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': !exists(json, 'error_code') ? undefined : json['error_code'], + 'message': !exists(json, 'message') ? undefined : json['message'], + }; +} + +export function GetAllPaymentMethods404ResponseToJSON(value?: GetAllPaymentMethods404Response | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/payment_method/models/GetAllPaymentMethodsDefaultResponse.ts b/payment_method/models/GetAllPaymentMethodsDefaultResponse.ts new file mode 100644 index 0000000..e8780b1 --- /dev/null +++ b/payment_method/models/GetAllPaymentMethodsDefaultResponse.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface GetAllPaymentMethodsDefaultResponse + */ +export interface GetAllPaymentMethodsDefaultResponse { + /** + * + * @type {string} + * @memberof GetAllPaymentMethodsDefaultResponse + */ + errorCode?: string; + /** + * + * @type {string} + * @memberof GetAllPaymentMethodsDefaultResponse + */ + message?: string; +} + +/** + * Check if a given object implements the GetAllPaymentMethodsDefaultResponse interface. + */ +export function instanceOfGetAllPaymentMethodsDefaultResponse(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function GetAllPaymentMethodsDefaultResponseFromJSON(json: any): GetAllPaymentMethodsDefaultResponse { + return GetAllPaymentMethodsDefaultResponseFromJSONTyped(json, false); +} + +export function GetAllPaymentMethodsDefaultResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): GetAllPaymentMethodsDefaultResponse { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': !exists(json, 'error_code') ? undefined : json['error_code'], + 'message': !exists(json, 'message') ? undefined : json['message'], + }; +} + +export function GetAllPaymentMethodsDefaultResponseToJSON(value?: GetAllPaymentMethodsDefaultResponse | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/payment_method/models/OverTheCounter.ts b/payment_method/models/OverTheCounter.ts new file mode 100644 index 0000000..83223a4 --- /dev/null +++ b/payment_method/models/OverTheCounter.ts @@ -0,0 +1,98 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { OverTheCounterChannelCode } from './OverTheCounterChannelCode'; +import { + OverTheCounterChannelCodeFromJSON, + OverTheCounterChannelCodeFromJSONTyped, + OverTheCounterChannelCodeToJSON, +} from './OverTheCounterChannelCode'; +import type { OverTheCounterChannelProperties } from './OverTheCounterChannelProperties'; +import { + OverTheCounterChannelPropertiesFromJSON, + OverTheCounterChannelPropertiesFromJSONTyped, + OverTheCounterChannelPropertiesToJSON, +} from './OverTheCounterChannelProperties'; + +/** + * Over The Counter Payment Method Details + * @export + * @interface OverTheCounter + */ +export interface OverTheCounter { + /** + * + * @type {number} + * @memberof OverTheCounter + */ + amount?: number | null; + /** + * + * @type {string} + * @memberof OverTheCounter + */ + currency?: string; + /** + * + * @type {OverTheCounterChannelCode} + * @memberof OverTheCounter + */ + channelCode: OverTheCounterChannelCode; + /** + * + * @type {OverTheCounterChannelProperties} + * @memberof OverTheCounter + */ + channelProperties: OverTheCounterChannelProperties; +} + +/** + * Check if a given object implements the OverTheCounter interface. + */ +export function instanceOfOverTheCounter(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + + return isInstance; +} + +export function OverTheCounterFromJSON(json: any): OverTheCounter { + return OverTheCounterFromJSONTyped(json, false); +} + +export function OverTheCounterFromJSONTyped(json: any, ignoreDiscriminator: boolean): OverTheCounter { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'currency': !exists(json, 'currency') ? undefined : json['currency'], + 'channelCode': OverTheCounterChannelCodeFromJSON(json['channel_code']), + 'channelProperties': OverTheCounterChannelPropertiesFromJSON(json['channel_properties']), + }; +} + +export function OverTheCounterToJSON(value?: OverTheCounter | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'amount': value.amount, + 'currency': value.currency, + 'channel_code': OverTheCounterChannelCodeToJSON(value.channelCode), + 'channel_properties': OverTheCounterChannelPropertiesToJSON(value.channelProperties), + }; +} + diff --git a/payment_method/models/OverTheCounterChannelCode.ts b/payment_method/models/OverTheCounterChannelCode.ts new file mode 100644 index 0000000..ef95074 --- /dev/null +++ b/payment_method/models/OverTheCounterChannelCode.ts @@ -0,0 +1,46 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Over The Counter Channel Code + * @export + */ +export const OverTheCounterChannelCode = { + _7Eleven: '7ELEVEN', + _7ElevenCliqq: '7ELEVEN_CLIQQ', + Cebuana: 'CEBUANA', + Ecpay: 'ECPAY', + Palawan: 'PALAWAN', + Mlhuillier: 'MLHUILLIER', + EcpayDragonloan: 'ECPAY_DRAGONLOAN', + Lbc: 'LBC', + EcpaySchool: 'ECPAY_SCHOOL', + RdPawnshop: 'RD_PAWNSHOP', + Cvm: 'CVM', + Ussc: 'USSC', + SmBills: 'SM_BILLS', + RobinsonsBills: 'ROBINSONS_BILLS', + Alfamart: 'ALFAMART', + Indomaret: 'INDOMARET' +} as const; +export type OverTheCounterChannelCode = typeof OverTheCounterChannelCode[keyof typeof OverTheCounterChannelCode]; + + +export function OverTheCounterChannelCodeFromJSON(json: any): OverTheCounterChannelCode { + return OverTheCounterChannelCodeFromJSONTyped(json, false); +} + +export function OverTheCounterChannelCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): OverTheCounterChannelCode { + return json as OverTheCounterChannelCode; +} + +export function OverTheCounterChannelCodeToJSON(value?: OverTheCounterChannelCode | null): any { + return value as any; +} + diff --git a/payment_method/models/OverTheCounterChannelProperties.ts b/payment_method/models/OverTheCounterChannelProperties.ts new file mode 100644 index 0000000..2ab46f8 --- /dev/null +++ b/payment_method/models/OverTheCounterChannelProperties.ts @@ -0,0 +1,76 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Over The Counter Channel Properties + * @export + * @interface OverTheCounterChannelProperties + */ +export interface OverTheCounterChannelProperties { + /** + * The payment code that you want to assign, e.g 12345. If you do not send one, one will be picked at random. + * @type {string} + * @memberof OverTheCounterChannelProperties + */ + paymentCode?: string; + /** + * Name of customer. + * @type {string} + * @memberof OverTheCounterChannelProperties + */ + customerName: string; + /** + * The time when the payment code will be expired. The minimum is 2 hours and the maximum is 9 days for 7ELEVEN. Default expired date will be 2 days from payment code generated. + * @type {Date} + * @memberof OverTheCounterChannelProperties + */ + expiresAt?: Date; +} + +/** + * Check if a given object implements the OverTheCounterChannelProperties interface. + */ +export function instanceOfOverTheCounterChannelProperties(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "customerName" in value; + + return isInstance; +} + +export function OverTheCounterChannelPropertiesFromJSON(json: any): OverTheCounterChannelProperties { + return OverTheCounterChannelPropertiesFromJSONTyped(json, false); +} + +export function OverTheCounterChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): OverTheCounterChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'paymentCode': !exists(json, 'payment_code') ? undefined : json['payment_code'], + 'customerName': json['customer_name'], + 'expiresAt': !exists(json, 'expires_at') ? undefined : (new Date(json['expires_at'])), + }; +} + +export function OverTheCounterChannelPropertiesToJSON(value?: OverTheCounterChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'payment_code': value.paymentCode, + 'customer_name': value.customerName, + 'expires_at': value.expiresAt === undefined ? undefined : (value.expiresAt.toISOString()), + }; +} + diff --git a/payment_method/models/OverTheCounterChannelPropertiesUpdate.ts b/payment_method/models/OverTheCounterChannelPropertiesUpdate.ts new file mode 100644 index 0000000..e367c52 --- /dev/null +++ b/payment_method/models/OverTheCounterChannelPropertiesUpdate.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Over The Counter Channel properties that can be updated + * @export + * @interface OverTheCounterChannelPropertiesUpdate + */ +export interface OverTheCounterChannelPropertiesUpdate { + /** + * Name of customer. + * @type {string} + * @memberof OverTheCounterChannelPropertiesUpdate + */ + customerName?: string; + /** + * The time when the payment code will be expired. The minimum is 2 hours and the maximum is 9 days for 7ELEVEN. Default expired date will be 2 days from payment code generated. + * @type {Date} + * @memberof OverTheCounterChannelPropertiesUpdate + */ + expiresAt?: Date; +} + +/** + * Check if a given object implements the OverTheCounterChannelPropertiesUpdate interface. + */ +export function instanceOfOverTheCounterChannelPropertiesUpdate(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function OverTheCounterChannelPropertiesUpdateFromJSON(json: any): OverTheCounterChannelPropertiesUpdate { + return OverTheCounterChannelPropertiesUpdateFromJSONTyped(json, false); +} + +export function OverTheCounterChannelPropertiesUpdateFromJSONTyped(json: any, ignoreDiscriminator: boolean): OverTheCounterChannelPropertiesUpdate { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'customerName': !exists(json, 'customer_name') ? undefined : json['customer_name'], + 'expiresAt': !exists(json, 'expires_at') ? undefined : (new Date(json['expires_at'])), + }; +} + +export function OverTheCounterChannelPropertiesUpdateToJSON(value?: OverTheCounterChannelPropertiesUpdate | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'customer_name': value.customerName, + 'expires_at': value.expiresAt === undefined ? undefined : (value.expiresAt.toISOString()), + }; +} + diff --git a/payment_method/models/OverTheCounterParameters.ts b/payment_method/models/OverTheCounterParameters.ts new file mode 100644 index 0000000..ba6b0a9 --- /dev/null +++ b/payment_method/models/OverTheCounterParameters.ts @@ -0,0 +1,98 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { OverTheCounterChannelCode } from './OverTheCounterChannelCode'; +import { + OverTheCounterChannelCodeFromJSON, + OverTheCounterChannelCodeFromJSONTyped, + OverTheCounterChannelCodeToJSON, +} from './OverTheCounterChannelCode'; +import type { OverTheCounterChannelProperties } from './OverTheCounterChannelProperties'; +import { + OverTheCounterChannelPropertiesFromJSON, + OverTheCounterChannelPropertiesFromJSONTyped, + OverTheCounterChannelPropertiesToJSON, +} from './OverTheCounterChannelProperties'; + +/** + * + * @export + * @interface OverTheCounterParameters + */ +export interface OverTheCounterParameters { + /** + * + * @type {number} + * @memberof OverTheCounterParameters + */ + amount?: number | null; + /** + * + * @type {string} + * @memberof OverTheCounterParameters + */ + currency?: string; + /** + * + * @type {OverTheCounterChannelCode} + * @memberof OverTheCounterParameters + */ + channelCode: OverTheCounterChannelCode; + /** + * + * @type {OverTheCounterChannelProperties} + * @memberof OverTheCounterParameters + */ + channelProperties: OverTheCounterChannelProperties; +} + +/** + * Check if a given object implements the OverTheCounterParameters interface. + */ +export function instanceOfOverTheCounterParameters(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + + return isInstance; +} + +export function OverTheCounterParametersFromJSON(json: any): OverTheCounterParameters { + return OverTheCounterParametersFromJSONTyped(json, false); +} + +export function OverTheCounterParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): OverTheCounterParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'currency': !exists(json, 'currency') ? undefined : json['currency'], + 'channelCode': OverTheCounterChannelCodeFromJSON(json['channel_code']), + 'channelProperties': OverTheCounterChannelPropertiesFromJSON(json['channel_properties']), + }; +} + +export function OverTheCounterParametersToJSON(value?: OverTheCounterParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'amount': value.amount, + 'currency': value.currency, + 'channel_code': OverTheCounterChannelCodeToJSON(value.channelCode), + 'channel_properties': OverTheCounterChannelPropertiesToJSON(value.channelProperties), + }; +} + diff --git a/payment_method/models/OverTheCounterUpdateParameters.ts b/payment_method/models/OverTheCounterUpdateParameters.ts new file mode 100644 index 0000000..6156639 --- /dev/null +++ b/payment_method/models/OverTheCounterUpdateParameters.ts @@ -0,0 +1,74 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { OverTheCounterChannelPropertiesUpdate } from './OverTheCounterChannelPropertiesUpdate'; +import { + OverTheCounterChannelPropertiesUpdateFromJSON, + OverTheCounterChannelPropertiesUpdateFromJSONTyped, + OverTheCounterChannelPropertiesUpdateToJSON, +} from './OverTheCounterChannelPropertiesUpdate'; + +/** + * + * @export + * @interface OverTheCounterUpdateParameters + */ +export interface OverTheCounterUpdateParameters { + /** + * + * @type {number} + * @memberof OverTheCounterUpdateParameters + */ + amount?: number | null; + /** + * + * @type {OverTheCounterChannelPropertiesUpdate} + * @memberof OverTheCounterUpdateParameters + */ + channelProperties?: OverTheCounterChannelPropertiesUpdate; +} + +/** + * Check if a given object implements the OverTheCounterUpdateParameters interface. + */ +export function instanceOfOverTheCounterUpdateParameters(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function OverTheCounterUpdateParametersFromJSON(json: any): OverTheCounterUpdateParameters { + return OverTheCounterUpdateParametersFromJSONTyped(json, false); +} + +export function OverTheCounterUpdateParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): OverTheCounterUpdateParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'channelProperties': !exists(json, 'channel_properties') ? undefined : OverTheCounterChannelPropertiesUpdateFromJSON(json['channel_properties']), + }; +} + +export function OverTheCounterUpdateParametersToJSON(value?: OverTheCounterUpdateParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'amount': value.amount, + 'channel_properties': OverTheCounterChannelPropertiesUpdateToJSON(value.channelProperties), + }; +} + diff --git a/payment_method/models/PaymentChannel.ts b/payment_method/models/PaymentChannel.ts new file mode 100644 index 0000000..90cd4b3 --- /dev/null +++ b/payment_method/models/PaymentChannel.ts @@ -0,0 +1,120 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { ChannelAmountLimits } from './ChannelAmountLimits'; +import { + ChannelAmountLimitsFromJSON, + ChannelAmountLimitsFromJSONTyped, + ChannelAmountLimitsToJSON, +} from './ChannelAmountLimits'; +import type { ChannelProperty } from './ChannelProperty'; +import { + ChannelPropertyFromJSON, + ChannelPropertyFromJSONTyped, + ChannelPropertyToJSON, +} from './ChannelProperty'; + +/** + * + * @export + * @interface PaymentChannel + */ +export interface PaymentChannel { + /** + * The specific Xendit code used to identify the partner channel + * @type {string} + * @memberof PaymentChannel + */ + channelCode?: string; + /** + * The payment method type + * @type {string} + * @memberof PaymentChannel + */ + type?: string; + /** + * The country where the channel operates in ISO 3166-2 country code + * @type {string} + * @memberof PaymentChannel + */ + country?: string; + /** + * Official parter name of the payment channel + * @type {string} + * @memberof PaymentChannel + */ + channelName?: string; + /** + * + * @type {Array} + * @memberof PaymentChannel + */ + channelProperties?: Array; + /** + * If available, this contains a URL to the logo of the partner channel + * @type {string} + * @memberof PaymentChannel + */ + logoUrl?: string; + /** + * + * @type {Array} + * @memberof PaymentChannel + */ + amountLimits?: Array; +} + +/** + * Check if a given object implements the PaymentChannel interface. + */ +export function instanceOfPaymentChannel(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function PaymentChannelFromJSON(json: any): PaymentChannel { + return PaymentChannelFromJSONTyped(json, false); +} + +export function PaymentChannelFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentChannel { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'channelCode': !exists(json, 'channel_code') ? undefined : json['channel_code'], + 'type': !exists(json, 'type') ? undefined : json['type'], + 'country': !exists(json, 'country') ? undefined : json['country'], + 'channelName': !exists(json, 'channel_name') ? undefined : json['channel_name'], + 'channelProperties': !exists(json, 'channel_properties') ? undefined : ((json['channel_properties'] as Array).map(ChannelPropertyFromJSON)), + 'logoUrl': !exists(json, 'logo_url') ? undefined : json['logo_url'], + 'amountLimits': !exists(json, 'amount_limits') ? undefined : ((json['amount_limits'] as Array).map(ChannelAmountLimitsFromJSON)), + }; +} + +export function PaymentChannelToJSON(value?: PaymentChannel | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'channel_code': value.channelCode, + 'type': value.type, + 'country': value.country, + 'channel_name': value.channelName, + 'channel_properties': value.channelProperties === undefined ? undefined : ((value.channelProperties as Array).map(ChannelPropertyToJSON)), + 'logo_url': value.logoUrl, + 'amount_limits': value.amountLimits === undefined ? undefined : ((value.amountLimits as Array).map(ChannelAmountLimitsToJSON)), + }; +} + diff --git a/payment_method/models/PaymentChannelAllOf.ts b/payment_method/models/PaymentChannelAllOf.ts new file mode 100644 index 0000000..115c478 --- /dev/null +++ b/payment_method/models/PaymentChannelAllOf.ts @@ -0,0 +1,120 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { ChannelAmountLimits } from './ChannelAmountLimits'; +import { + ChannelAmountLimitsFromJSON, + ChannelAmountLimitsFromJSONTyped, + ChannelAmountLimitsToJSON, +} from './ChannelAmountLimits'; +import type { ChannelProperty } from './ChannelProperty'; +import { + ChannelPropertyFromJSON, + ChannelPropertyFromJSONTyped, + ChannelPropertyToJSON, +} from './ChannelProperty'; + +/** + * + * @export + * @interface PaymentChannelAllOf + */ +export interface PaymentChannelAllOf { + /** + * The specific Xendit code used to identify the partner channel + * @type {string} + * @memberof PaymentChannelAllOf + */ + channelCode?: string; + /** + * The payment method type + * @type {string} + * @memberof PaymentChannelAllOf + */ + type?: string; + /** + * The country where the channel operates in ISO 3166-2 country code + * @type {string} + * @memberof PaymentChannelAllOf + */ + country?: string; + /** + * Official parter name of the payment channel + * @type {string} + * @memberof PaymentChannelAllOf + */ + channelName?: string; + /** + * + * @type {Array} + * @memberof PaymentChannelAllOf + */ + channelProperties?: Array; + /** + * If available, this contains a URL to the logo of the partner channel + * @type {string} + * @memberof PaymentChannelAllOf + */ + logoUrl?: string; + /** + * + * @type {Array} + * @memberof PaymentChannelAllOf + */ + amountLimits?: Array; +} + +/** + * Check if a given object implements the PaymentChannelAllOf interface. + */ +export function instanceOfPaymentChannelAllOf(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function PaymentChannelAllOfFromJSON(json: any): PaymentChannelAllOf { + return PaymentChannelAllOfFromJSONTyped(json, false); +} + +export function PaymentChannelAllOfFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentChannelAllOf { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'channelCode': !exists(json, 'channel_code') ? undefined : json['channel_code'], + 'type': !exists(json, 'type') ? undefined : json['type'], + 'country': !exists(json, 'country') ? undefined : json['country'], + 'channelName': !exists(json, 'channel_name') ? undefined : json['channel_name'], + 'channelProperties': !exists(json, 'channel_properties') ? undefined : ((json['channel_properties'] as Array).map(ChannelPropertyFromJSON)), + 'logoUrl': !exists(json, 'logo_url') ? undefined : json['logo_url'], + 'amountLimits': !exists(json, 'amount_limits') ? undefined : ((json['amount_limits'] as Array).map(ChannelAmountLimitsFromJSON)), + }; +} + +export function PaymentChannelAllOfToJSON(value?: PaymentChannelAllOf | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'channel_code': value.channelCode, + 'type': value.type, + 'country': value.country, + 'channel_name': value.channelName, + 'channel_properties': value.channelProperties === undefined ? undefined : ((value.channelProperties as Array).map(ChannelPropertyToJSON)), + 'logo_url': value.logoUrl, + 'amount_limits': value.amountLimits === undefined ? undefined : ((value.amountLimits as Array).map(ChannelAmountLimitsToJSON)), + }; +} + diff --git a/payment_method/models/PaymentChannelList.ts b/payment_method/models/PaymentChannelList.ts new file mode 100644 index 0000000..38e36fe --- /dev/null +++ b/payment_method/models/PaymentChannelList.ts @@ -0,0 +1,88 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { PaymentChannel } from './PaymentChannel'; +import { + PaymentChannelFromJSON, + PaymentChannelFromJSONTyped, + PaymentChannelToJSON, +} from './PaymentChannel'; +import type { PaymentChannelListLinksInner } from './PaymentChannelListLinksInner'; +import { + PaymentChannelListLinksInnerFromJSON, + PaymentChannelListLinksInnerFromJSONTyped, + PaymentChannelListLinksInnerToJSON, +} from './PaymentChannelListLinksInner'; + +/** + * + * @export + * @interface PaymentChannelList + */ +export interface PaymentChannelList { + /** + * Array of resources that match the provided filters + * @type {Array} + * @memberof PaymentChannelList + */ + data?: Array; + /** + * Array of objects that can be used to assist on navigating through the data + * @type {Array} + * @memberof PaymentChannelList + */ + links?: Array; + /** + * Indicates whether there are more items in the list + * @type {boolean} + * @memberof PaymentChannelList + */ + hasMore?: boolean; +} + +/** + * Check if a given object implements the PaymentChannelList interface. + */ +export function instanceOfPaymentChannelList(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function PaymentChannelListFromJSON(json: any): PaymentChannelList { + return PaymentChannelListFromJSONTyped(json, false); +} + +export function PaymentChannelListFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentChannelList { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'data': !exists(json, 'data') ? undefined : ((json['data'] as Array).map(PaymentChannelFromJSON)), + 'links': !exists(json, 'links') ? undefined : ((json['links'] as Array).map(PaymentChannelListLinksInnerFromJSON)), + 'hasMore': !exists(json, 'has_more') ? undefined : json['has_more'], + }; +} + +export function PaymentChannelListToJSON(value?: PaymentChannelList | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'data': value.data === undefined ? undefined : ((value.data as Array).map(PaymentChannelToJSON)), + 'links': value.links === undefined ? undefined : ((value.links as Array).map(PaymentChannelListLinksInnerToJSON)), + 'has_more': value.hasMore, + }; +} + diff --git a/payment_method/models/PaymentChannelListLinksInner.ts b/payment_method/models/PaymentChannelListLinksInner.ts new file mode 100644 index 0000000..229784f --- /dev/null +++ b/payment_method/models/PaymentChannelListLinksInner.ts @@ -0,0 +1,88 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface PaymentChannelListLinksInner + */ +export interface PaymentChannelListLinksInner { + /** + * Target URI that should contain a target to Internationalized Resource Identifiers (IRI) + * @type {string} + * @memberof PaymentChannelListLinksInner + */ + href?: string; + /** + * The link relation type described how the current context (source) is related to target resource + * @type {string} + * @memberof PaymentChannelListLinksInner + */ + rel?: PaymentChannelListLinksInnerRelEnum; + /** + * The HTTP method to be used to call `href` + * @type {string} + * @memberof PaymentChannelListLinksInner + */ + method?: string; +} + + +/** + * @export + */ +export const PaymentChannelListLinksInnerRelEnum = { + First: 'first', + Last: 'last', + Next: 'next', + Prev: 'prev' +} as const; +export type PaymentChannelListLinksInnerRelEnum = typeof PaymentChannelListLinksInnerRelEnum[keyof typeof PaymentChannelListLinksInnerRelEnum]; + + +/** + * Check if a given object implements the PaymentChannelListLinksInner interface. + */ +export function instanceOfPaymentChannelListLinksInner(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function PaymentChannelListLinksInnerFromJSON(json: any): PaymentChannelListLinksInner { + return PaymentChannelListLinksInnerFromJSONTyped(json, false); +} + +export function PaymentChannelListLinksInnerFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentChannelListLinksInner { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'href': !exists(json, 'href') ? undefined : json['href'], + 'rel': !exists(json, 'rel') ? undefined : json['rel'], + 'method': !exists(json, 'method') ? undefined : json['method'], + }; +} + +export function PaymentChannelListLinksInnerToJSON(value?: PaymentChannelListLinksInner | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'href': value.href, + 'rel': value.rel, + 'method': value.method, + }; +} + diff --git a/payment_method/models/PaymentChannelListLinksInnerAllOf.ts b/payment_method/models/PaymentChannelListLinksInnerAllOf.ts new file mode 100644 index 0000000..cc67df5 --- /dev/null +++ b/payment_method/models/PaymentChannelListLinksInnerAllOf.ts @@ -0,0 +1,88 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface PaymentChannelListLinksInnerAllOf + */ +export interface PaymentChannelListLinksInnerAllOf { + /** + * Target URI that should contain a target to Internationalized Resource Identifiers (IRI) + * @type {string} + * @memberof PaymentChannelListLinksInnerAllOf + */ + href?: string; + /** + * The link relation type described how the current context (source) is related to target resource + * @type {string} + * @memberof PaymentChannelListLinksInnerAllOf + */ + rel?: PaymentChannelListLinksInnerAllOfRelEnum; + /** + * The HTTP method to be used to call `href` + * @type {string} + * @memberof PaymentChannelListLinksInnerAllOf + */ + method?: string; +} + + +/** + * @export + */ +export const PaymentChannelListLinksInnerAllOfRelEnum = { + First: 'first', + Last: 'last', + Next: 'next', + Prev: 'prev' +} as const; +export type PaymentChannelListLinksInnerAllOfRelEnum = typeof PaymentChannelListLinksInnerAllOfRelEnum[keyof typeof PaymentChannelListLinksInnerAllOfRelEnum]; + + +/** + * Check if a given object implements the PaymentChannelListLinksInnerAllOf interface. + */ +export function instanceOfPaymentChannelListLinksInnerAllOf(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function PaymentChannelListLinksInnerAllOfFromJSON(json: any): PaymentChannelListLinksInnerAllOf { + return PaymentChannelListLinksInnerAllOfFromJSONTyped(json, false); +} + +export function PaymentChannelListLinksInnerAllOfFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentChannelListLinksInnerAllOf { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'href': !exists(json, 'href') ? undefined : json['href'], + 'rel': !exists(json, 'rel') ? undefined : json['rel'], + 'method': !exists(json, 'method') ? undefined : json['method'], + }; +} + +export function PaymentChannelListLinksInnerAllOfToJSON(value?: PaymentChannelListLinksInnerAllOf | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'href': value.href, + 'rel': value.rel, + 'method': value.method, + }; +} + diff --git a/payment_method/models/PaymentMethod.ts b/payment_method/models/PaymentMethod.ts new file mode 100644 index 0000000..b01a9cf --- /dev/null +++ b/payment_method/models/PaymentMethod.ts @@ -0,0 +1,301 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { BillingInformation } from './BillingInformation'; +import { + BillingInformationFromJSON, + BillingInformationFromJSONTyped, + BillingInformationToJSON, +} from './BillingInformation'; +import type { Card } from './Card'; +import { + CardFromJSON, + CardFromJSONTyped, + CardToJSON, +} from './Card'; +import type { DirectDebit } from './DirectDebit'; +import { + DirectDebitFromJSON, + DirectDebitFromJSONTyped, + DirectDebitToJSON, +} from './DirectDebit'; +import type { EWallet } from './EWallet'; +import { + EWalletFromJSON, + EWalletFromJSONTyped, + EWalletToJSON, +} from './EWallet'; +import type { OverTheCounter } from './OverTheCounter'; +import { + OverTheCounterFromJSON, + OverTheCounterFromJSONTyped, + OverTheCounterToJSON, +} from './OverTheCounter'; +import type { PaymentMethodAction } from './PaymentMethodAction'; +import { + PaymentMethodActionFromJSON, + PaymentMethodActionFromJSONTyped, + PaymentMethodActionToJSON, +} from './PaymentMethodAction'; +import type { PaymentMethodCountry } from './PaymentMethodCountry'; +import { + PaymentMethodCountryFromJSON, + PaymentMethodCountryFromJSONTyped, + PaymentMethodCountryToJSON, +} from './PaymentMethodCountry'; +import type { PaymentMethodReusability } from './PaymentMethodReusability'; +import { + PaymentMethodReusabilityFromJSON, + PaymentMethodReusabilityFromJSONTyped, + PaymentMethodReusabilityToJSON, +} from './PaymentMethodReusability'; +import type { PaymentMethodStatus } from './PaymentMethodStatus'; +import { + PaymentMethodStatusFromJSON, + PaymentMethodStatusFromJSONTyped, + PaymentMethodStatusToJSON, +} from './PaymentMethodStatus'; +import type { PaymentMethodType } from './PaymentMethodType'; +import { + PaymentMethodTypeFromJSON, + PaymentMethodTypeFromJSONTyped, + PaymentMethodTypeToJSON, +} from './PaymentMethodType'; +import type { QRCode } from './QRCode'; +import { + QRCodeFromJSON, + QRCodeFromJSONTyped, + QRCodeToJSON, +} from './QRCode'; +import type { VirtualAccount } from './VirtualAccount'; +import { + VirtualAccountFromJSON, + VirtualAccountFromJSONTyped, + VirtualAccountToJSON, +} from './VirtualAccount'; + +/** + * + * @export + * @interface PaymentMethod + */ +export interface PaymentMethod { + /** + * + * @type {string} + * @memberof PaymentMethod + */ + id: string; + /** + * + * @type {string} + * @memberof PaymentMethod + */ + businessId?: string; + /** + * + * @type {PaymentMethodType} + * @memberof PaymentMethod + */ + type?: PaymentMethodType; + /** + * + * @type {PaymentMethodCountry} + * @memberof PaymentMethod + */ + country?: PaymentMethodCountry; + /** + * + * @type {string} + * @memberof PaymentMethod + */ + customerId?: string | null; + /** + * + * @type {object} + * @memberof PaymentMethod + */ + customer?: object | null; + /** + * + * @type {string} + * @memberof PaymentMethod + */ + referenceId?: string; + /** + * + * @type {string} + * @memberof PaymentMethod + */ + description?: string | null; + /** + * + * @type {PaymentMethodStatus} + * @memberof PaymentMethod + */ + status?: PaymentMethodStatus; + /** + * + * @type {PaymentMethodReusability} + * @memberof PaymentMethod + */ + reusability?: PaymentMethodReusability; + /** + * + * @type {Array} + * @memberof PaymentMethod + */ + actions?: Array; + /** + * + * @type {object} + * @memberof PaymentMethod + */ + metadata?: object | null; + /** + * + * @type {BillingInformation} + * @memberof PaymentMethod + */ + billingInformation?: BillingInformation | null; + /** + * + * @type {string} + * @memberof PaymentMethod + */ + failureCode?: string | null; + /** + * + * @type {Date} + * @memberof PaymentMethod + */ + created?: Date; + /** + * + * @type {Date} + * @memberof PaymentMethod + */ + updated?: Date; + /** + * + * @type {EWallet} + * @memberof PaymentMethod + */ + ewallet?: EWallet | null; + /** + * + * @type {DirectDebit} + * @memberof PaymentMethod + */ + directDebit?: DirectDebit | null; + /** + * + * @type {OverTheCounter} + * @memberof PaymentMethod + */ + overTheCounter?: OverTheCounter | null; + /** + * + * @type {Card} + * @memberof PaymentMethod + */ + card?: Card | null; + /** + * + * @type {QRCode} + * @memberof PaymentMethod + */ + qrCode?: QRCode | null; + /** + * + * @type {VirtualAccount} + * @memberof PaymentMethod + */ + virtualAccount?: VirtualAccount | null; +} + +/** + * Check if a given object implements the PaymentMethod interface. + */ +export function instanceOfPaymentMethod(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "id" in value; + + return isInstance; +} + +export function PaymentMethodFromJSON(json: any): PaymentMethod { + return PaymentMethodFromJSONTyped(json, false); +} + +export function PaymentMethodFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethod { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'id': json['id'], + 'businessId': !exists(json, 'business_id') ? undefined : json['business_id'], + 'type': !exists(json, 'type') ? undefined : PaymentMethodTypeFromJSON(json['type']), + 'country': !exists(json, 'country') ? undefined : PaymentMethodCountryFromJSON(json['country']), + 'customerId': !exists(json, 'customer_id') ? undefined : json['customer_id'], + 'customer': !exists(json, 'customer') ? undefined : json['customer'], + 'referenceId': !exists(json, 'reference_id') ? undefined : json['reference_id'], + 'description': !exists(json, 'description') ? undefined : json['description'], + 'status': !exists(json, 'status') ? undefined : PaymentMethodStatusFromJSON(json['status']), + 'reusability': !exists(json, 'reusability') ? undefined : PaymentMethodReusabilityFromJSON(json['reusability']), + 'actions': !exists(json, 'actions') ? undefined : ((json['actions'] as Array).map(PaymentMethodActionFromJSON)), + 'metadata': !exists(json, 'metadata') ? undefined : json['metadata'], + 'billingInformation': !exists(json, 'billing_information') ? undefined : BillingInformationFromJSON(json['billing_information']), + 'failureCode': !exists(json, 'failure_code') ? undefined : json['failure_code'], + 'created': !exists(json, 'created') ? undefined : (new Date(json['created'])), + 'updated': !exists(json, 'updated') ? undefined : (new Date(json['updated'])), + 'ewallet': !exists(json, 'ewallet') ? undefined : EWalletFromJSON(json['ewallet']), + 'directDebit': !exists(json, 'direct_debit') ? undefined : DirectDebitFromJSON(json['direct_debit']), + 'overTheCounter': !exists(json, 'over_the_counter') ? undefined : OverTheCounterFromJSON(json['over_the_counter']), + 'card': !exists(json, 'card') ? undefined : CardFromJSON(json['card']), + 'qrCode': !exists(json, 'qr_code') ? undefined : QRCodeFromJSON(json['qr_code']), + 'virtualAccount': !exists(json, 'virtual_account') ? undefined : VirtualAccountFromJSON(json['virtual_account']), + }; +} + +export function PaymentMethodToJSON(value?: PaymentMethod | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'id': value.id, + 'business_id': value.businessId, + 'type': PaymentMethodTypeToJSON(value.type), + 'country': PaymentMethodCountryToJSON(value.country), + 'customer_id': value.customerId, + 'customer': value.customer, + 'reference_id': value.referenceId, + 'description': value.description, + 'status': PaymentMethodStatusToJSON(value.status), + 'reusability': PaymentMethodReusabilityToJSON(value.reusability), + 'actions': value.actions === undefined ? undefined : ((value.actions as Array).map(PaymentMethodActionToJSON)), + 'metadata': value.metadata, + 'billing_information': BillingInformationToJSON(value.billingInformation), + 'failure_code': value.failureCode, + 'created': value.created === undefined ? undefined : (value.created.toISOString()), + 'updated': value.updated === undefined ? undefined : (value.updated.toISOString()), + 'ewallet': EWalletToJSON(value.ewallet), + 'direct_debit': DirectDebitToJSON(value.directDebit), + 'over_the_counter': OverTheCounterToJSON(value.overTheCounter), + 'card': CardToJSON(value.card), + 'qr_code': QRCodeToJSON(value.qrCode), + 'virtual_account': VirtualAccountToJSON(value.virtualAccount), + }; +} + diff --git a/payment_method/models/PaymentMethodAction.ts b/payment_method/models/PaymentMethodAction.ts new file mode 100644 index 0000000..2d275b0 --- /dev/null +++ b/payment_method/models/PaymentMethodAction.ts @@ -0,0 +1,83 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface PaymentMethodAction + */ +export interface PaymentMethodAction { + /** + * + * @type {string} + * @memberof PaymentMethodAction + */ + action?: string; + /** + * + * @type {string} + * @memberof PaymentMethodAction + */ + method?: string; + /** + * + * @type {string} + * @memberof PaymentMethodAction + */ + url?: string; + /** + * + * @type {string} + * @memberof PaymentMethodAction + */ + urlType?: string; +} + +/** + * Check if a given object implements the PaymentMethodAction interface. + */ +export function instanceOfPaymentMethodAction(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function PaymentMethodActionFromJSON(json: any): PaymentMethodAction { + return PaymentMethodActionFromJSONTyped(json, false); +} + +export function PaymentMethodActionFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethodAction { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'action': !exists(json, 'action') ? undefined : json['action'], + 'method': !exists(json, 'method') ? undefined : json['method'], + 'url': !exists(json, 'url') ? undefined : json['url'], + 'urlType': !exists(json, 'url_type') ? undefined : json['url_type'], + }; +} + +export function PaymentMethodActionToJSON(value?: PaymentMethodAction | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'action': value.action, + 'method': value.method, + 'url': value.url, + 'url_type': value.urlType, + }; +} + diff --git a/payment_method/models/PaymentMethodAuthParameters.ts b/payment_method/models/PaymentMethodAuthParameters.ts new file mode 100644 index 0000000..469a064 --- /dev/null +++ b/payment_method/models/PaymentMethodAuthParameters.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface PaymentMethodAuthParameters + */ +export interface PaymentMethodAuthParameters { + /** + * + * @type {string} + * @memberof PaymentMethodAuthParameters + */ + authCode: string; +} + +/** + * Check if a given object implements the PaymentMethodAuthParameters interface. + */ +export function instanceOfPaymentMethodAuthParameters(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "authCode" in value; + + return isInstance; +} + +export function PaymentMethodAuthParametersFromJSON(json: any): PaymentMethodAuthParameters { + return PaymentMethodAuthParametersFromJSONTyped(json, false); +} + +export function PaymentMethodAuthParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethodAuthParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'authCode': json['auth_code'], + }; +} + +export function PaymentMethodAuthParametersToJSON(value?: PaymentMethodAuthParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'auth_code': value.authCode, + }; +} + diff --git a/payment_method/models/PaymentMethodCountry.ts b/payment_method/models/PaymentMethodCountry.ts new file mode 100644 index 0000000..6b6e255 --- /dev/null +++ b/payment_method/models/PaymentMethodCountry.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const PaymentMethodCountry = { + Ph: 'PH', + Id: 'ID', + Vn: 'VN', + Th: 'TH', + My: 'MY' +} as const; +export type PaymentMethodCountry = typeof PaymentMethodCountry[keyof typeof PaymentMethodCountry]; + + +export function PaymentMethodCountryFromJSON(json: any): PaymentMethodCountry { + return PaymentMethodCountryFromJSONTyped(json, false); +} + +export function PaymentMethodCountryFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethodCountry { + return json as PaymentMethodCountry; +} + +export function PaymentMethodCountryToJSON(value?: PaymentMethodCountry | null): any { + return value as any; +} + diff --git a/payment_method/models/PaymentMethodExpireParameters.ts b/payment_method/models/PaymentMethodExpireParameters.ts new file mode 100644 index 0000000..fa8069d --- /dev/null +++ b/payment_method/models/PaymentMethodExpireParameters.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface PaymentMethodExpireParameters + */ +export interface PaymentMethodExpireParameters { + /** + * URL where the end customer is redirected if the unlinking authorization is successful. + * @type {string} + * @memberof PaymentMethodExpireParameters + */ + successReturnUrl?: string | null; + /** + * URL where the end customer is redirected if the unlinking authorization is failed. + * @type {string} + * @memberof PaymentMethodExpireParameters + */ + failureReturnUrl?: string | null; +} + +/** + * Check if a given object implements the PaymentMethodExpireParameters interface. + */ +export function instanceOfPaymentMethodExpireParameters(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function PaymentMethodExpireParametersFromJSON(json: any): PaymentMethodExpireParameters { + return PaymentMethodExpireParametersFromJSONTyped(json, false); +} + +export function PaymentMethodExpireParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethodExpireParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'successReturnUrl': !exists(json, 'success_return_url') ? undefined : json['success_return_url'], + 'failureReturnUrl': !exists(json, 'failure_return_url') ? undefined : json['failure_return_url'], + }; +} + +export function PaymentMethodExpireParametersToJSON(value?: PaymentMethodExpireParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'success_return_url': value.successReturnUrl, + 'failure_return_url': value.failureReturnUrl, + }; +} + diff --git a/payment_method/models/PaymentMethodList.ts b/payment_method/models/PaymentMethodList.ts new file mode 100644 index 0000000..95b1639 --- /dev/null +++ b/payment_method/models/PaymentMethodList.ts @@ -0,0 +1,75 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { PaymentMethod } from './PaymentMethod'; +import { + PaymentMethodFromJSON, + PaymentMethodFromJSONTyped, + PaymentMethodToJSON, +} from './PaymentMethod'; + +/** + * + * @export + * @interface PaymentMethodList + */ +export interface PaymentMethodList { + /** + * + * @type {Array} + * @memberof PaymentMethodList + */ + data: Array; + /** + * + * @type {boolean} + * @memberof PaymentMethodList + */ + hasMore?: boolean; +} + +/** + * Check if a given object implements the PaymentMethodList interface. + */ +export function instanceOfPaymentMethodList(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "data" in value; + + return isInstance; +} + +export function PaymentMethodListFromJSON(json: any): PaymentMethodList { + return PaymentMethodListFromJSONTyped(json, false); +} + +export function PaymentMethodListFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethodList { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'data': ((json['data'] as Array).map(PaymentMethodFromJSON)), + 'hasMore': !exists(json, 'has_more') ? undefined : json['has_more'], + }; +} + +export function PaymentMethodListToJSON(value?: PaymentMethodList | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'data': ((value.data as Array).map(PaymentMethodToJSON)), + 'has_more': value.hasMore, + }; +} + diff --git a/payment_method/models/PaymentMethodParameters.ts b/payment_method/models/PaymentMethodParameters.ts new file mode 100644 index 0000000..2a2bd0f --- /dev/null +++ b/payment_method/models/PaymentMethodParameters.ts @@ -0,0 +1,220 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { BillingInformation } from './BillingInformation'; +import { + BillingInformationFromJSON, + BillingInformationFromJSONTyped, + BillingInformationToJSON, +} from './BillingInformation'; +import type { CardParameters } from './CardParameters'; +import { + CardParametersFromJSON, + CardParametersFromJSONTyped, + CardParametersToJSON, +} from './CardParameters'; +import type { DirectDebitParameters } from './DirectDebitParameters'; +import { + DirectDebitParametersFromJSON, + DirectDebitParametersFromJSONTyped, + DirectDebitParametersToJSON, +} from './DirectDebitParameters'; +import type { EWalletParameters } from './EWalletParameters'; +import { + EWalletParametersFromJSON, + EWalletParametersFromJSONTyped, + EWalletParametersToJSON, +} from './EWalletParameters'; +import type { OverTheCounterParameters } from './OverTheCounterParameters'; +import { + OverTheCounterParametersFromJSON, + OverTheCounterParametersFromJSONTyped, + OverTheCounterParametersToJSON, +} from './OverTheCounterParameters'; +import type { PaymentMethodReusability } from './PaymentMethodReusability'; +import { + PaymentMethodReusabilityFromJSON, + PaymentMethodReusabilityFromJSONTyped, + PaymentMethodReusabilityToJSON, +} from './PaymentMethodReusability'; +import type { PaymentMethodType } from './PaymentMethodType'; +import { + PaymentMethodTypeFromJSON, + PaymentMethodTypeFromJSONTyped, + PaymentMethodTypeToJSON, +} from './PaymentMethodType'; +import type { QRCodeParameters } from './QRCodeParameters'; +import { + QRCodeParametersFromJSON, + QRCodeParametersFromJSONTyped, + QRCodeParametersToJSON, +} from './QRCodeParameters'; +import type { VirtualAccountParameters } from './VirtualAccountParameters'; +import { + VirtualAccountParametersFromJSON, + VirtualAccountParametersFromJSONTyped, + VirtualAccountParametersToJSON, +} from './VirtualAccountParameters'; + +/** + * + * @export + * @interface PaymentMethodParameters + */ +export interface PaymentMethodParameters { + /** + * + * @type {PaymentMethodType} + * @memberof PaymentMethodParameters + */ + type: PaymentMethodType; + /** + * + * @type {string} + * @memberof PaymentMethodParameters + */ + country?: string | null; + /** + * + * @type {PaymentMethodReusability} + * @memberof PaymentMethodParameters + */ + reusability: PaymentMethodReusability; + /** + * + * @type {string} + * @memberof PaymentMethodParameters + */ + customerId?: string | null; + /** + * + * @type {string} + * @memberof PaymentMethodParameters + */ + referenceId?: string; + /** + * + * @type {string} + * @memberof PaymentMethodParameters + */ + description?: string | null; + /** + * + * @type {CardParameters} + * @memberof PaymentMethodParameters + */ + card?: CardParameters; + /** + * + * @type {DirectDebitParameters} + * @memberof PaymentMethodParameters + */ + directDebit?: DirectDebitParameters; + /** + * + * @type {EWalletParameters} + * @memberof PaymentMethodParameters + */ + ewallet?: EWalletParameters; + /** + * + * @type {OverTheCounterParameters} + * @memberof PaymentMethodParameters + */ + overTheCounter?: OverTheCounterParameters; + /** + * + * @type {VirtualAccountParameters} + * @memberof PaymentMethodParameters + */ + virtualAccount?: VirtualAccountParameters; + /** + * + * @type {QRCodeParameters} + * @memberof PaymentMethodParameters + */ + qrCode?: QRCodeParameters; + /** + * + * @type {object} + * @memberof PaymentMethodParameters + */ + metadata?: object | null; + /** + * + * @type {BillingInformation} + * @memberof PaymentMethodParameters + */ + billingInformation?: BillingInformation | null; +} + +/** + * Check if a given object implements the PaymentMethodParameters interface. + */ +export function instanceOfPaymentMethodParameters(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "type" in value; + isInstance = isInstance && "reusability" in value; + + return isInstance; +} + +export function PaymentMethodParametersFromJSON(json: any): PaymentMethodParameters { + return PaymentMethodParametersFromJSONTyped(json, false); +} + +export function PaymentMethodParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethodParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'type': PaymentMethodTypeFromJSON(json['type']), + 'country': !exists(json, 'country') ? undefined : json['country'], + 'reusability': PaymentMethodReusabilityFromJSON(json['reusability']), + 'customerId': !exists(json, 'customer_id') ? undefined : json['customer_id'], + 'referenceId': !exists(json, 'reference_id') ? undefined : json['reference_id'], + 'description': !exists(json, 'description') ? undefined : json['description'], + 'card': !exists(json, 'card') ? undefined : CardParametersFromJSON(json['card']), + 'directDebit': !exists(json, 'direct_debit') ? undefined : DirectDebitParametersFromJSON(json['direct_debit']), + 'ewallet': !exists(json, 'ewallet') ? undefined : EWalletParametersFromJSON(json['ewallet']), + 'overTheCounter': !exists(json, 'over_the_counter') ? undefined : OverTheCounterParametersFromJSON(json['over_the_counter']), + 'virtualAccount': !exists(json, 'virtual_account') ? undefined : VirtualAccountParametersFromJSON(json['virtual_account']), + 'qrCode': !exists(json, 'qr_code') ? undefined : QRCodeParametersFromJSON(json['qr_code']), + 'metadata': !exists(json, 'metadata') ? undefined : json['metadata'], + 'billingInformation': !exists(json, 'billing_information') ? undefined : BillingInformationFromJSON(json['billing_information']), + }; +} + +export function PaymentMethodParametersToJSON(value?: PaymentMethodParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'type': PaymentMethodTypeToJSON(value.type), + 'country': value.country, + 'reusability': PaymentMethodReusabilityToJSON(value.reusability), + 'customer_id': value.customerId, + 'reference_id': value.referenceId, + 'description': value.description, + 'card': CardParametersToJSON(value.card), + 'direct_debit': DirectDebitParametersToJSON(value.directDebit), + 'ewallet': EWalletParametersToJSON(value.ewallet), + 'over_the_counter': OverTheCounterParametersToJSON(value.overTheCounter), + 'virtual_account': VirtualAccountParametersToJSON(value.virtualAccount), + 'qr_code': QRCodeParametersToJSON(value.qrCode), + 'metadata': value.metadata, + 'billing_information': BillingInformationToJSON(value.billingInformation), + }; +} + diff --git a/payment_method/models/PaymentMethodReusability.ts b/payment_method/models/PaymentMethodReusability.ts new file mode 100644 index 0000000..f085d23 --- /dev/null +++ b/payment_method/models/PaymentMethodReusability.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const PaymentMethodReusability = { + MultipleUse: 'MULTIPLE_USE', + OneTimeUse: 'ONE_TIME_USE' +} as const; +export type PaymentMethodReusability = typeof PaymentMethodReusability[keyof typeof PaymentMethodReusability]; + + +export function PaymentMethodReusabilityFromJSON(json: any): PaymentMethodReusability { + return PaymentMethodReusabilityFromJSONTyped(json, false); +} + +export function PaymentMethodReusabilityFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethodReusability { + return json as PaymentMethodReusability; +} + +export function PaymentMethodReusabilityToJSON(value?: PaymentMethodReusability | null): any { + return value as any; +} + diff --git a/payment_method/models/PaymentMethodStatus.ts b/payment_method/models/PaymentMethodStatus.ts new file mode 100644 index 0000000..f0fe7db --- /dev/null +++ b/payment_method/models/PaymentMethodStatus.ts @@ -0,0 +1,36 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const PaymentMethodStatus = { + Active: 'ACTIVE', + Expired: 'EXPIRED', + Inactive: 'INACTIVE', + Pending: 'PENDING', + RequiresAction: 'REQUIRES_ACTION', + Failed: 'FAILED' +} as const; +export type PaymentMethodStatus = typeof PaymentMethodStatus[keyof typeof PaymentMethodStatus]; + + +export function PaymentMethodStatusFromJSON(json: any): PaymentMethodStatus { + return PaymentMethodStatusFromJSONTyped(json, false); +} + +export function PaymentMethodStatusFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethodStatus { + return json as PaymentMethodStatus; +} + +export function PaymentMethodStatusToJSON(value?: PaymentMethodStatus | null): any { + return value as any; +} + diff --git a/payment_method/models/PaymentMethodType.ts b/payment_method/models/PaymentMethodType.ts new file mode 100644 index 0000000..93b23eb --- /dev/null +++ b/payment_method/models/PaymentMethodType.ts @@ -0,0 +1,38 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const PaymentMethodType = { + Card: 'CARD', + Cryptocurrency: 'CRYPTOCURRENCY', + DirectBankTransfer: 'DIRECT_BANK_TRANSFER', + DirectDebit: 'DIRECT_DEBIT', + Ewallet: 'EWALLET', + OverTheCounter: 'OVER_THE_COUNTER', + QrCode: 'QR_CODE', + VirtualAccount: 'VIRTUAL_ACCOUNT' +} as const; +export type PaymentMethodType = typeof PaymentMethodType[keyof typeof PaymentMethodType]; + + +export function PaymentMethodTypeFromJSON(json: any): PaymentMethodType { + return PaymentMethodTypeFromJSONTyped(json, false); +} + +export function PaymentMethodTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethodType { + return json as PaymentMethodType; +} + +export function PaymentMethodTypeToJSON(value?: PaymentMethodType | null): any { + return value as any; +} + diff --git a/payment_method/models/PaymentMethodUpdateParameters.ts b/payment_method/models/PaymentMethodUpdateParameters.ts new file mode 100644 index 0000000..de3457a --- /dev/null +++ b/payment_method/models/PaymentMethodUpdateParameters.ts @@ -0,0 +1,124 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { OverTheCounterUpdateParameters } from './OverTheCounterUpdateParameters'; +import { + OverTheCounterUpdateParametersFromJSON, + OverTheCounterUpdateParametersFromJSONTyped, + OverTheCounterUpdateParametersToJSON, +} from './OverTheCounterUpdateParameters'; +import type { PaymentMethodReusability } from './PaymentMethodReusability'; +import { + PaymentMethodReusabilityFromJSON, + PaymentMethodReusabilityFromJSONTyped, + PaymentMethodReusabilityToJSON, +} from './PaymentMethodReusability'; +import type { PaymentMethodStatus } from './PaymentMethodStatus'; +import { + PaymentMethodStatusFromJSON, + PaymentMethodStatusFromJSONTyped, + PaymentMethodStatusToJSON, +} from './PaymentMethodStatus'; +import type { VirtualAccountUpdateParameters } from './VirtualAccountUpdateParameters'; +import { + VirtualAccountUpdateParametersFromJSON, + VirtualAccountUpdateParametersFromJSONTyped, + VirtualAccountUpdateParametersToJSON, +} from './VirtualAccountUpdateParameters'; + +/** + * + * @export + * @interface PaymentMethodUpdateParameters + */ +export interface PaymentMethodUpdateParameters { + /** + * + * @type {string} + * @memberof PaymentMethodUpdateParameters + */ + description?: string; + /** + * + * @type {string} + * @memberof PaymentMethodUpdateParameters + */ + referenceId?: string; + /** + * + * @type {PaymentMethodReusability} + * @memberof PaymentMethodUpdateParameters + */ + reusability?: PaymentMethodReusability; + /** + * + * @type {PaymentMethodStatus} + * @memberof PaymentMethodUpdateParameters + */ + status?: PaymentMethodStatus; + /** + * + * @type {OverTheCounterUpdateParameters} + * @memberof PaymentMethodUpdateParameters + */ + overTheCounter?: OverTheCounterUpdateParameters; + /** + * + * @type {VirtualAccountUpdateParameters} + * @memberof PaymentMethodUpdateParameters + */ + virtualAccount?: VirtualAccountUpdateParameters; +} + +/** + * Check if a given object implements the PaymentMethodUpdateParameters interface. + */ +export function instanceOfPaymentMethodUpdateParameters(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function PaymentMethodUpdateParametersFromJSON(json: any): PaymentMethodUpdateParameters { + return PaymentMethodUpdateParametersFromJSONTyped(json, false); +} + +export function PaymentMethodUpdateParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethodUpdateParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'description': !exists(json, 'description') ? undefined : json['description'], + 'referenceId': !exists(json, 'reference_id') ? undefined : json['reference_id'], + 'reusability': !exists(json, 'reusability') ? undefined : PaymentMethodReusabilityFromJSON(json['reusability']), + 'status': !exists(json, 'status') ? undefined : PaymentMethodStatusFromJSON(json['status']), + 'overTheCounter': !exists(json, 'over_the_counter') ? undefined : OverTheCounterUpdateParametersFromJSON(json['over_the_counter']), + 'virtualAccount': !exists(json, 'virtual_account') ? undefined : VirtualAccountUpdateParametersFromJSON(json['virtual_account']), + }; +} + +export function PaymentMethodUpdateParametersToJSON(value?: PaymentMethodUpdateParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'description': value.description, + 'reference_id': value.referenceId, + 'reusability': PaymentMethodReusabilityToJSON(value.reusability), + 'status': PaymentMethodStatusToJSON(value.status), + 'over_the_counter': OverTheCounterUpdateParametersToJSON(value.overTheCounter), + 'virtual_account': VirtualAccountUpdateParametersToJSON(value.virtualAccount), + }; +} + diff --git a/payment_method/models/QRCode.ts b/payment_method/models/QRCode.ts new file mode 100644 index 0000000..aacd966 --- /dev/null +++ b/payment_method/models/QRCode.ts @@ -0,0 +1,96 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { QRCodeChannelCode } from './QRCodeChannelCode'; +import { + QRCodeChannelCodeFromJSON, + QRCodeChannelCodeFromJSONTyped, + QRCodeChannelCodeToJSON, +} from './QRCodeChannelCode'; +import type { QRCodeChannelProperties } from './QRCodeChannelProperties'; +import { + QRCodeChannelPropertiesFromJSON, + QRCodeChannelPropertiesFromJSONTyped, + QRCodeChannelPropertiesToJSON, +} from './QRCodeChannelProperties'; + +/** + * QR Code Payment Method Details + * @export + * @interface QRCode + */ +export interface QRCode { + /** + * + * @type {number} + * @memberof QRCode + */ + amount?: number | null; + /** + * + * @type {string} + * @memberof QRCode + */ + currency?: string; + /** + * + * @type {QRCodeChannelCode} + * @memberof QRCode + */ + channelCode?: QRCodeChannelCode | null; + /** + * + * @type {QRCodeChannelProperties} + * @memberof QRCode + */ + channelProperties?: QRCodeChannelProperties | null; +} + +/** + * Check if a given object implements the QRCode interface. + */ +export function instanceOfQRCode(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function QRCodeFromJSON(json: any): QRCode { + return QRCodeFromJSONTyped(json, false); +} + +export function QRCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): QRCode { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'currency': !exists(json, 'currency') ? undefined : json['currency'], + 'channelCode': !exists(json, 'channel_code') ? undefined : QRCodeChannelCodeFromJSON(json['channel_code']), + 'channelProperties': !exists(json, 'channel_properties') ? undefined : QRCodeChannelPropertiesFromJSON(json['channel_properties']), + }; +} + +export function QRCodeToJSON(value?: QRCode | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'amount': value.amount, + 'currency': value.currency, + 'channel_code': QRCodeChannelCodeToJSON(value.channelCode), + 'channel_properties': QRCodeChannelPropertiesToJSON(value.channelProperties), + }; +} + diff --git a/payment_method/models/QRCodeChannelCode.ts b/payment_method/models/QRCodeChannelCode.ts new file mode 100644 index 0000000..5b80780 --- /dev/null +++ b/payment_method/models/QRCodeChannelCode.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * QR Code Channel Code + * @export + */ +export const QRCodeChannelCode = { + Qris: 'QRIS', + Dana: 'DANA', + Rcbc: 'RCBC', + Promptpay: 'PROMPTPAY', + Linkaja: 'LINKAJA' +} as const; +export type QRCodeChannelCode = typeof QRCodeChannelCode[keyof typeof QRCodeChannelCode]; + + +export function QRCodeChannelCodeFromJSON(json: any): QRCodeChannelCode { + return QRCodeChannelCodeFromJSONTyped(json, false); +} + +export function QRCodeChannelCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): QRCodeChannelCode { + return json as QRCodeChannelCode; +} + +export function QRCodeChannelCodeToJSON(value?: QRCodeChannelCode | null): any { + return value as any; +} + diff --git a/payment_method/models/QRCodeChannelProperties.ts b/payment_method/models/QRCodeChannelProperties.ts new file mode 100644 index 0000000..fc2f73d --- /dev/null +++ b/payment_method/models/QRCodeChannelProperties.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * QR Code Channel Properties + * @export + * @interface QRCodeChannelProperties + */ +export interface QRCodeChannelProperties { + /** + * QR string to be rendered for display to end users. QR string to image rendering are commonly available in software libraries (e.g Nodejs, PHP, Java) + * @type {string} + * @memberof QRCodeChannelProperties + */ + qrString?: string; + /** + * + * @type {Date} + * @memberof QRCodeChannelProperties + */ + expiresAt?: Date; +} + +/** + * Check if a given object implements the QRCodeChannelProperties interface. + */ +export function instanceOfQRCodeChannelProperties(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function QRCodeChannelPropertiesFromJSON(json: any): QRCodeChannelProperties { + return QRCodeChannelPropertiesFromJSONTyped(json, false); +} + +export function QRCodeChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): QRCodeChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'qrString': !exists(json, 'qr_string') ? undefined : json['qr_string'], + 'expiresAt': !exists(json, 'expires_at') ? undefined : (new Date(json['expires_at'])), + }; +} + +export function QRCodeChannelPropertiesToJSON(value?: QRCodeChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'qr_string': value.qrString, + 'expires_at': value.expiresAt === undefined ? undefined : (value.expiresAt.toISOString()), + }; +} + diff --git a/payment_method/models/QRCodeParameters.ts b/payment_method/models/QRCodeParameters.ts new file mode 100644 index 0000000..1c92338 --- /dev/null +++ b/payment_method/models/QRCodeParameters.ts @@ -0,0 +1,96 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { QRCodeChannelCode } from './QRCodeChannelCode'; +import { + QRCodeChannelCodeFromJSON, + QRCodeChannelCodeFromJSONTyped, + QRCodeChannelCodeToJSON, +} from './QRCodeChannelCode'; +import type { QRCodeChannelProperties } from './QRCodeChannelProperties'; +import { + QRCodeChannelPropertiesFromJSON, + QRCodeChannelPropertiesFromJSONTyped, + QRCodeChannelPropertiesToJSON, +} from './QRCodeChannelProperties'; + +/** + * + * @export + * @interface QRCodeParameters + */ +export interface QRCodeParameters { + /** + * + * @type {number} + * @memberof QRCodeParameters + */ + amount?: number | null; + /** + * + * @type {string} + * @memberof QRCodeParameters + */ + currency?: string; + /** + * + * @type {QRCodeChannelCode} + * @memberof QRCodeParameters + */ + channelCode?: QRCodeChannelCode | null; + /** + * + * @type {QRCodeChannelProperties} + * @memberof QRCodeParameters + */ + channelProperties?: QRCodeChannelProperties | null; +} + +/** + * Check if a given object implements the QRCodeParameters interface. + */ +export function instanceOfQRCodeParameters(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function QRCodeParametersFromJSON(json: any): QRCodeParameters { + return QRCodeParametersFromJSONTyped(json, false); +} + +export function QRCodeParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): QRCodeParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'currency': !exists(json, 'currency') ? undefined : json['currency'], + 'channelCode': !exists(json, 'channel_code') ? undefined : QRCodeChannelCodeFromJSON(json['channel_code']), + 'channelProperties': !exists(json, 'channel_properties') ? undefined : QRCodeChannelPropertiesFromJSON(json['channel_properties']), + }; +} + +export function QRCodeParametersToJSON(value?: QRCodeParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'amount': value.amount, + 'currency': value.currency, + 'channel_code': QRCodeChannelCodeToJSON(value.channelCode), + 'channel_properties': QRCodeChannelPropertiesToJSON(value.channelProperties), + }; +} + diff --git a/payment_method/models/SimulatePaymentRequest.ts b/payment_method/models/SimulatePaymentRequest.ts new file mode 100644 index 0000000..44d13c3 --- /dev/null +++ b/payment_method/models/SimulatePaymentRequest.ts @@ -0,0 +1,59 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface SimulatePaymentRequest + */ +export interface SimulatePaymentRequest { + /** + * + * @type {number} + * @memberof SimulatePaymentRequest + */ + amount?: number; +} + +/** + * Check if a given object implements the SimulatePaymentRequest interface. + */ +export function instanceOfSimulatePaymentRequest(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function SimulatePaymentRequestFromJSON(json: any): SimulatePaymentRequest { + return SimulatePaymentRequestFromJSONTyped(json, false); +} + +export function SimulatePaymentRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): SimulatePaymentRequest { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + }; +} + +export function SimulatePaymentRequestToJSON(value?: SimulatePaymentRequest | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'amount': value.amount, + }; +} + diff --git a/payment_method/models/TokenizedCardInformation.ts b/payment_method/models/TokenizedCardInformation.ts new file mode 100644 index 0000000..b342bfe --- /dev/null +++ b/payment_method/models/TokenizedCardInformation.ts @@ -0,0 +1,140 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Tokenized Card Information + * @export + * @interface TokenizedCardInformation + */ +export interface TokenizedCardInformation { + /** + * + * @type {string} + * @memberof TokenizedCardInformation + */ + tokenId: string; + /** + * 1st 6 and last 4 digits of the card + * @type {string} + * @memberof TokenizedCardInformation + */ + maskedCardNumber: string; + /** + * Cardholder name is optional but recommended for 3DS 2 / AVS verification + * @type {string} + * @memberof TokenizedCardInformation + */ + cardholderName?: string | null; + /** + * Card expiry month in MM format + * @type {string} + * @memberof TokenizedCardInformation + */ + expiryMonth: string; + /** + * Card expiry month in YY format + * @type {string} + * @memberof TokenizedCardInformation + */ + expiryYear: string; + /** + * Xendit-generated identifier for the unique card number. Multiple payment method objects can be created for the same account - e.g. if the user first creates a one-time payment request, and then later on creates a multiple-use payment method using the same account. The fingerprint helps to identify the unique account being used. + * @type {string} + * @memberof TokenizedCardInformation + */ + fingerprint: string; + /** + * Whether the card is a credit or debit card + * @type {string} + * @memberof TokenizedCardInformation + */ + type: string; + /** + * Card network - VISA, MASTERCARD, JCB, AMEX, DISCOVER, BCA + * @type {string} + * @memberof TokenizedCardInformation + */ + network: string; + /** + * Country where the card was issued ISO 3166-1 Alpha-2 + * @type {string} + * @memberof TokenizedCardInformation + */ + country: string; + /** + * Issuer of the card, most often an issuing bank For example, “BCA”, “MANDIRI” + * @type {string} + * @memberof TokenizedCardInformation + */ + issuer: string; +} + +/** + * Check if a given object implements the TokenizedCardInformation interface. + */ +export function instanceOfTokenizedCardInformation(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "tokenId" in value; + isInstance = isInstance && "maskedCardNumber" in value; + isInstance = isInstance && "expiryMonth" in value; + isInstance = isInstance && "expiryYear" in value; + isInstance = isInstance && "fingerprint" in value; + isInstance = isInstance && "type" in value; + isInstance = isInstance && "network" in value; + isInstance = isInstance && "country" in value; + isInstance = isInstance && "issuer" in value; + + return isInstance; +} + +export function TokenizedCardInformationFromJSON(json: any): TokenizedCardInformation { + return TokenizedCardInformationFromJSONTyped(json, false); +} + +export function TokenizedCardInformationFromJSONTyped(json: any, ignoreDiscriminator: boolean): TokenizedCardInformation { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'tokenId': json['token_id'], + 'maskedCardNumber': json['masked_card_number'], + 'cardholderName': !exists(json, 'cardholder_name') ? undefined : json['cardholder_name'], + 'expiryMonth': json['expiry_month'], + 'expiryYear': json['expiry_year'], + 'fingerprint': json['fingerprint'], + 'type': json['type'], + 'network': json['network'], + 'country': json['country'], + 'issuer': json['issuer'], + }; +} + +export function TokenizedCardInformationToJSON(value?: TokenizedCardInformation | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'token_id': value.tokenId, + 'masked_card_number': value.maskedCardNumber, + 'cardholder_name': value.cardholderName, + 'expiry_month': value.expiryMonth, + 'expiry_year': value.expiryYear, + 'fingerprint': value.fingerprint, + 'type': value.type, + 'network': value.network, + 'country': value.country, + 'issuer': value.issuer, + }; +} + diff --git a/payment_method/models/VirtualAccount.ts b/payment_method/models/VirtualAccount.ts new file mode 100644 index 0000000..acf3650 --- /dev/null +++ b/payment_method/models/VirtualAccount.ts @@ -0,0 +1,146 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { VirtualAccountAlternativeDisplay } from './VirtualAccountAlternativeDisplay'; +import { + VirtualAccountAlternativeDisplayFromJSON, + VirtualAccountAlternativeDisplayFromJSONTyped, + VirtualAccountAlternativeDisplayToJSON, +} from './VirtualAccountAlternativeDisplay'; +import type { VirtualAccountChannelCode } from './VirtualAccountChannelCode'; +import { + VirtualAccountChannelCodeFromJSON, + VirtualAccountChannelCodeFromJSONTyped, + VirtualAccountChannelCodeToJSON, +} from './VirtualAccountChannelCode'; +import type { VirtualAccountChannelProperties } from './VirtualAccountChannelProperties'; +import { + VirtualAccountChannelPropertiesFromJSON, + VirtualAccountChannelPropertiesFromJSONTyped, + VirtualAccountChannelPropertiesToJSON, +} from './VirtualAccountChannelProperties'; + +/** + * Virtual Account Payment Method Details + * @export + * @interface VirtualAccount + */ +export interface VirtualAccount { + /** + * + * @type {number} + * @memberof VirtualAccount + */ + amount?: number | null; + /** + * + * @type {number} + * @memberof VirtualAccount + */ + minAmount?: number | null; + /** + * + * @type {number} + * @memberof VirtualAccount + */ + maxAmount?: number | null; + /** + * + * @type {string} + * @memberof VirtualAccount + */ + currency?: string; + /** + * + * @type {VirtualAccountChannelCode} + * @memberof VirtualAccount + */ + channelCode: VirtualAccountChannelCode; + /** + * + * @type {VirtualAccountChannelProperties} + * @memberof VirtualAccount + */ + channelProperties: VirtualAccountChannelProperties; + /** + * For payments in Vietnam only, alternative display requested for the virtual account + * @type {Array} + * @memberof VirtualAccount + */ + alternativeDisplayTypes?: Array; + /** + * + * @type {Array} + * @memberof VirtualAccount + */ + alternativeDisplays?: Array; +} + + +/** + * @export + */ +export const VirtualAccountAlternativeDisplayTypesEnum = { + QrString: 'QR_STRING' +} as const; +export type VirtualAccountAlternativeDisplayTypesEnum = typeof VirtualAccountAlternativeDisplayTypesEnum[keyof typeof VirtualAccountAlternativeDisplayTypesEnum]; + + +/** + * Check if a given object implements the VirtualAccount interface. + */ +export function instanceOfVirtualAccount(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + + return isInstance; +} + +export function VirtualAccountFromJSON(json: any): VirtualAccount { + return VirtualAccountFromJSONTyped(json, false); +} + +export function VirtualAccountFromJSONTyped(json: any, ignoreDiscriminator: boolean): VirtualAccount { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'minAmount': !exists(json, 'min_amount') ? undefined : json['min_amount'], + 'maxAmount': !exists(json, 'max_amount') ? undefined : json['max_amount'], + 'currency': !exists(json, 'currency') ? undefined : json['currency'], + 'channelCode': VirtualAccountChannelCodeFromJSON(json['channel_code']), + 'channelProperties': VirtualAccountChannelPropertiesFromJSON(json['channel_properties']), + 'alternativeDisplayTypes': !exists(json, 'alternative_display_types') ? undefined : json['alternative_display_types'], + 'alternativeDisplays': !exists(json, 'alternative_displays') ? undefined : ((json['alternative_displays'] as Array).map(VirtualAccountAlternativeDisplayFromJSON)), + }; +} + +export function VirtualAccountToJSON(value?: VirtualAccount | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'amount': value.amount, + 'min_amount': value.minAmount, + 'max_amount': value.maxAmount, + 'currency': value.currency, + 'channel_code': VirtualAccountChannelCodeToJSON(value.channelCode), + 'channel_properties': VirtualAccountChannelPropertiesToJSON(value.channelProperties), + 'alternative_display_types': value.alternativeDisplayTypes, + 'alternative_displays': value.alternativeDisplays === undefined ? undefined : ((value.alternativeDisplays as Array).map(VirtualAccountAlternativeDisplayToJSON)), + }; +} + diff --git a/payment_method/models/VirtualAccountAllOf.ts b/payment_method/models/VirtualAccountAllOf.ts new file mode 100644 index 0000000..a57fa5b --- /dev/null +++ b/payment_method/models/VirtualAccountAllOf.ts @@ -0,0 +1,66 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { VirtualAccountAlternativeDisplay } from './VirtualAccountAlternativeDisplay'; +import { + VirtualAccountAlternativeDisplayFromJSON, + VirtualAccountAlternativeDisplayFromJSONTyped, + VirtualAccountAlternativeDisplayToJSON, +} from './VirtualAccountAlternativeDisplay'; + +/** + * + * @export + * @interface VirtualAccountAllOf + */ +export interface VirtualAccountAllOf { + /** + * + * @type {Array} + * @memberof VirtualAccountAllOf + */ + alternativeDisplays?: Array; +} + +/** + * Check if a given object implements the VirtualAccountAllOf interface. + */ +export function instanceOfVirtualAccountAllOf(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function VirtualAccountAllOfFromJSON(json: any): VirtualAccountAllOf { + return VirtualAccountAllOfFromJSONTyped(json, false); +} + +export function VirtualAccountAllOfFromJSONTyped(json: any, ignoreDiscriminator: boolean): VirtualAccountAllOf { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'alternativeDisplays': !exists(json, 'alternative_displays') ? undefined : ((json['alternative_displays'] as Array).map(VirtualAccountAlternativeDisplayFromJSON)), + }; +} + +export function VirtualAccountAllOfToJSON(value?: VirtualAccountAllOf | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'alternative_displays': value.alternativeDisplays === undefined ? undefined : ((value.alternativeDisplays as Array).map(VirtualAccountAlternativeDisplayToJSON)), + }; +} + diff --git a/payment_method/models/VirtualAccountAlternativeDisplay.ts b/payment_method/models/VirtualAccountAlternativeDisplay.ts new file mode 100644 index 0000000..d0d13a3 --- /dev/null +++ b/payment_method/models/VirtualAccountAlternativeDisplay.ts @@ -0,0 +1,76 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Alternative Display Object + * @export + * @interface VirtualAccountAlternativeDisplay + */ +export interface VirtualAccountAlternativeDisplay { + /** + * Type of the alternative display + * @type {string} + * @memberof VirtualAccountAlternativeDisplay + */ + readonly type?: VirtualAccountAlternativeDisplayTypeEnum; + /** + * Data payload of the given alternative display + * @type {string} + * @memberof VirtualAccountAlternativeDisplay + */ + data?: string; +} + + +/** + * @export + */ +export const VirtualAccountAlternativeDisplayTypeEnum = { + QrString: 'QR_STRING' +} as const; +export type VirtualAccountAlternativeDisplayTypeEnum = typeof VirtualAccountAlternativeDisplayTypeEnum[keyof typeof VirtualAccountAlternativeDisplayTypeEnum]; + + +/** + * Check if a given object implements the VirtualAccountAlternativeDisplay interface. + */ +export function instanceOfVirtualAccountAlternativeDisplay(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function VirtualAccountAlternativeDisplayFromJSON(json: any): VirtualAccountAlternativeDisplay { + return VirtualAccountAlternativeDisplayFromJSONTyped(json, false); +} + +export function VirtualAccountAlternativeDisplayFromJSONTyped(json: any, ignoreDiscriminator: boolean): VirtualAccountAlternativeDisplay { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'type': !exists(json, 'type') ? undefined : json['type'], + 'data': !exists(json, 'data') ? undefined : json['data'], + }; +} + +export function VirtualAccountAlternativeDisplayToJSON(value?: VirtualAccountAlternativeDisplay | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'data': value.data, + }; +} + diff --git a/payment_method/models/VirtualAccountChannelCode.ts b/payment_method/models/VirtualAccountChannelCode.ts new file mode 100644 index 0000000..7d77834 --- /dev/null +++ b/payment_method/models/VirtualAccountChannelCode.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Virtual Account Channel Code + * @export + */ +export const VirtualAccountChannelCode = { + Bca: 'BCA', + Bjb: 'BJB', + Bni: 'BNI', + Bri: 'BRI', + Mandiri: 'MANDIRI', + Permata: 'PERMATA', + Bsi: 'BSI', + Cimb: 'CIMB', + SahabatSampoerna: 'SAHABAT_SAMPOERNA', + Artajasa: 'ARTAJASA', + Pv: 'PV', + Vietcapital: 'VIETCAPITAL', + Woori: 'WOORI', + Msb: 'MSB', + StandardChartered: 'STANDARD_CHARTERED' +} as const; +export type VirtualAccountChannelCode = typeof VirtualAccountChannelCode[keyof typeof VirtualAccountChannelCode]; + + +export function VirtualAccountChannelCodeFromJSON(json: any): VirtualAccountChannelCode { + return VirtualAccountChannelCodeFromJSONTyped(json, false); +} + +export function VirtualAccountChannelCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): VirtualAccountChannelCode { + return json as VirtualAccountChannelCode; +} + +export function VirtualAccountChannelCodeToJSON(value?: VirtualAccountChannelCode | null): any { + return value as any; +} + diff --git a/payment_method/models/VirtualAccountChannelProperties.ts b/payment_method/models/VirtualAccountChannelProperties.ts new file mode 100644 index 0000000..3f843e4 --- /dev/null +++ b/payment_method/models/VirtualAccountChannelProperties.ts @@ -0,0 +1,83 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Virtual Account Channel Properties + * @export + * @interface VirtualAccountChannelProperties + */ +export interface VirtualAccountChannelProperties { + /** + * Name of customer. + * @type {string} + * @memberof VirtualAccountChannelProperties + */ + customerName?: string; + /** + * You can assign specific Virtual Account number using this parameter. If you do not send one, one will be picked at random. Make sure the number you specify is within your Virtual Account range. + * @type {string} + * @memberof VirtualAccountChannelProperties + */ + virtualAccountNumber?: string; + /** + * The date and time in ISO 8601 UTC+0 when the virtual account number will be expired. Default: The default expiration date will be 31 years from creation date. + * @type {Date} + * @memberof VirtualAccountChannelProperties + */ + expiresAt?: Date; + /** + * The suggested amount you want to assign. Note: Suggested amounts is the amounts that can see as a suggestion, but user can still put any numbers (only supported for Mandiri and BRI) + * @type {number} + * @memberof VirtualAccountChannelProperties + */ + suggestedAmount?: number; +} + +/** + * Check if a given object implements the VirtualAccountChannelProperties interface. + */ +export function instanceOfVirtualAccountChannelProperties(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function VirtualAccountChannelPropertiesFromJSON(json: any): VirtualAccountChannelProperties { + return VirtualAccountChannelPropertiesFromJSONTyped(json, false); +} + +export function VirtualAccountChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): VirtualAccountChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'customerName': !exists(json, 'customer_name') ? undefined : json['customer_name'], + 'virtualAccountNumber': !exists(json, 'virtual_account_number') ? undefined : json['virtual_account_number'], + 'expiresAt': !exists(json, 'expires_at') ? undefined : (new Date(json['expires_at'])), + 'suggestedAmount': !exists(json, 'suggested_amount') ? undefined : json['suggested_amount'], + }; +} + +export function VirtualAccountChannelPropertiesToJSON(value?: VirtualAccountChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'customer_name': value.customerName, + 'virtual_account_number': value.virtualAccountNumber, + 'expires_at': value.expiresAt === undefined ? undefined : (value.expiresAt.toISOString()), + 'suggested_amount': value.suggestedAmount, + }; +} + diff --git a/payment_method/models/VirtualAccountChannelPropertiesPatch.ts b/payment_method/models/VirtualAccountChannelPropertiesPatch.ts new file mode 100644 index 0000000..f420318 --- /dev/null +++ b/payment_method/models/VirtualAccountChannelPropertiesPatch.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Virtual Account Channel Properties + * @export + * @interface VirtualAccountChannelPropertiesPatch + */ +export interface VirtualAccountChannelPropertiesPatch { + /** + * The date and time in ISO 8601 UTC+0 when the virtual account number will be expired. Default: The default expiration date will be 31 years from creation date. + * @type {Date} + * @memberof VirtualAccountChannelPropertiesPatch + */ + expiresAt?: Date; + /** + * The suggested amount you want to assign. Note: Suggested amounts is the amounts that can see as a suggestion, but user can still put any numbers (only supported for Mandiri and BRI) + * @type {number} + * @memberof VirtualAccountChannelPropertiesPatch + */ + suggestedAmount?: number; +} + +/** + * Check if a given object implements the VirtualAccountChannelPropertiesPatch interface. + */ +export function instanceOfVirtualAccountChannelPropertiesPatch(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function VirtualAccountChannelPropertiesPatchFromJSON(json: any): VirtualAccountChannelPropertiesPatch { + return VirtualAccountChannelPropertiesPatchFromJSONTyped(json, false); +} + +export function VirtualAccountChannelPropertiesPatchFromJSONTyped(json: any, ignoreDiscriminator: boolean): VirtualAccountChannelPropertiesPatch { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'expiresAt': !exists(json, 'expires_at') ? undefined : (new Date(json['expires_at'])), + 'suggestedAmount': !exists(json, 'suggested_amount') ? undefined : json['suggested_amount'], + }; +} + +export function VirtualAccountChannelPropertiesPatchToJSON(value?: VirtualAccountChannelPropertiesPatch | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'expires_at': value.expiresAt === undefined ? undefined : (value.expiresAt.toISOString()), + 'suggested_amount': value.suggestedAmount, + }; +} + diff --git a/payment_method/models/VirtualAccountParameters.ts b/payment_method/models/VirtualAccountParameters.ts new file mode 100644 index 0000000..e31ece4 --- /dev/null +++ b/payment_method/models/VirtualAccountParameters.ts @@ -0,0 +1,132 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { VirtualAccountChannelCode } from './VirtualAccountChannelCode'; +import { + VirtualAccountChannelCodeFromJSON, + VirtualAccountChannelCodeFromJSONTyped, + VirtualAccountChannelCodeToJSON, +} from './VirtualAccountChannelCode'; +import type { VirtualAccountChannelProperties } from './VirtualAccountChannelProperties'; +import { + VirtualAccountChannelPropertiesFromJSON, + VirtualAccountChannelPropertiesFromJSONTyped, + VirtualAccountChannelPropertiesToJSON, +} from './VirtualAccountChannelProperties'; + +/** + * + * @export + * @interface VirtualAccountParameters + */ +export interface VirtualAccountParameters { + /** + * + * @type {number} + * @memberof VirtualAccountParameters + */ + amount?: number | null; + /** + * + * @type {number} + * @memberof VirtualAccountParameters + */ + minAmount?: number | null; + /** + * + * @type {number} + * @memberof VirtualAccountParameters + */ + maxAmount?: number | null; + /** + * + * @type {string} + * @memberof VirtualAccountParameters + */ + currency?: string; + /** + * + * @type {VirtualAccountChannelCode} + * @memberof VirtualAccountParameters + */ + channelCode: VirtualAccountChannelCode; + /** + * + * @type {VirtualAccountChannelProperties} + * @memberof VirtualAccountParameters + */ + channelProperties: VirtualAccountChannelProperties; + /** + * For payments in Vietnam only, alternative display requested for the virtual account + * @type {Array} + * @memberof VirtualAccountParameters + */ + alternativeDisplayTypes?: Array; +} + + +/** + * @export + */ +export const VirtualAccountParametersAlternativeDisplayTypesEnum = { + QrString: 'QR_STRING' +} as const; +export type VirtualAccountParametersAlternativeDisplayTypesEnum = typeof VirtualAccountParametersAlternativeDisplayTypesEnum[keyof typeof VirtualAccountParametersAlternativeDisplayTypesEnum]; + + +/** + * Check if a given object implements the VirtualAccountParameters interface. + */ +export function instanceOfVirtualAccountParameters(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + + return isInstance; +} + +export function VirtualAccountParametersFromJSON(json: any): VirtualAccountParameters { + return VirtualAccountParametersFromJSONTyped(json, false); +} + +export function VirtualAccountParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): VirtualAccountParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'minAmount': !exists(json, 'min_amount') ? undefined : json['min_amount'], + 'maxAmount': !exists(json, 'max_amount') ? undefined : json['max_amount'], + 'currency': !exists(json, 'currency') ? undefined : json['currency'], + 'channelCode': VirtualAccountChannelCodeFromJSON(json['channel_code']), + 'channelProperties': VirtualAccountChannelPropertiesFromJSON(json['channel_properties']), + 'alternativeDisplayTypes': !exists(json, 'alternative_display_types') ? undefined : json['alternative_display_types'], + }; +} + +export function VirtualAccountParametersToJSON(value?: VirtualAccountParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'amount': value.amount, + 'min_amount': value.minAmount, + 'max_amount': value.maxAmount, + 'currency': value.currency, + 'channel_code': VirtualAccountChannelCodeToJSON(value.channelCode), + 'channel_properties': VirtualAccountChannelPropertiesToJSON(value.channelProperties), + 'alternative_display_types': value.alternativeDisplayTypes, + }; +} + diff --git a/payment_method/models/VirtualAccountUpdateParameters.ts b/payment_method/models/VirtualAccountUpdateParameters.ts new file mode 100644 index 0000000..6e76c81 --- /dev/null +++ b/payment_method/models/VirtualAccountUpdateParameters.ts @@ -0,0 +1,108 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { VirtualAccountChannelPropertiesPatch } from './VirtualAccountChannelPropertiesPatch'; +import { + VirtualAccountChannelPropertiesPatchFromJSON, + VirtualAccountChannelPropertiesPatchFromJSONTyped, + VirtualAccountChannelPropertiesPatchToJSON, +} from './VirtualAccountChannelPropertiesPatch'; + +/** + * + * @export + * @interface VirtualAccountUpdateParameters + */ +export interface VirtualAccountUpdateParameters { + /** + * + * @type {number} + * @memberof VirtualAccountUpdateParameters + */ + amount?: number | null; + /** + * + * @type {number} + * @memberof VirtualAccountUpdateParameters + */ + minAmount?: number | null; + /** + * + * @type {number} + * @memberof VirtualAccountUpdateParameters + */ + maxAmount?: number | null; + /** + * + * @type {VirtualAccountChannelPropertiesPatch} + * @memberof VirtualAccountUpdateParameters + */ + channelProperties?: VirtualAccountChannelPropertiesPatch; + /** + * For payments in Vietnam only, alternative display requested for the virtual account + * @type {Array} + * @memberof VirtualAccountUpdateParameters + */ + alternativeDisplayTypes?: Array; +} + + +/** + * @export + */ +export const VirtualAccountUpdateParametersAlternativeDisplayTypesEnum = { + QrString: 'QR_STRING' +} as const; +export type VirtualAccountUpdateParametersAlternativeDisplayTypesEnum = typeof VirtualAccountUpdateParametersAlternativeDisplayTypesEnum[keyof typeof VirtualAccountUpdateParametersAlternativeDisplayTypesEnum]; + + +/** + * Check if a given object implements the VirtualAccountUpdateParameters interface. + */ +export function instanceOfVirtualAccountUpdateParameters(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function VirtualAccountUpdateParametersFromJSON(json: any): VirtualAccountUpdateParameters { + return VirtualAccountUpdateParametersFromJSONTyped(json, false); +} + +export function VirtualAccountUpdateParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): VirtualAccountUpdateParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'minAmount': !exists(json, 'min_amount') ? undefined : json['min_amount'], + 'maxAmount': !exists(json, 'max_amount') ? undefined : json['max_amount'], + 'channelProperties': !exists(json, 'channel_properties') ? undefined : VirtualAccountChannelPropertiesPatchFromJSON(json['channel_properties']), + 'alternativeDisplayTypes': !exists(json, 'alternative_display_types') ? undefined : json['alternative_display_types'], + }; +} + +export function VirtualAccountUpdateParametersToJSON(value?: VirtualAccountUpdateParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'amount': value.amount, + 'min_amount': value.minAmount, + 'max_amount': value.maxAmount, + 'channel_properties': VirtualAccountChannelPropertiesPatchToJSON(value.channelProperties), + 'alternative_display_types': value.alternativeDisplayTypes, + }; +} + diff --git a/payment_method/models/index.ts b/payment_method/models/index.ts new file mode 100644 index 0000000..8141ce8 --- /dev/null +++ b/payment_method/models/index.ts @@ -0,0 +1,68 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './BillingInformation'; +export * from './Card'; +export * from './CardChannelProperties'; +export * from './CardParameters'; +export * from './CardParametersCardInformation'; +export * from './CardVerificationResults'; +export * from './CardVerificationResultsThreeDSecure'; +export * from './ChannelAmountLimits'; +export * from './ChannelAmountLimitsAllOf'; +export * from './ChannelProperty'; +export * from './ChannelPropertyAllOf'; +export * from './CreatePaymentMethod409Response'; +export * from './CreatePaymentMethod503Response'; +export * from './DirectDebit'; +export * from './DirectDebitAllOf'; +export * from './DirectDebitBankAccount'; +export * from './DirectDebitChannelCode'; +export * from './DirectDebitChannelProperties'; +export * from './DirectDebitDebitCard'; +export * from './DirectDebitParameters'; +export * from './DirectDebitType'; +export * from './EWallet'; +export * from './EWalletAccount'; +export * from './EWalletChannelCode'; +export * from './EWalletChannelProperties'; +export * from './EWalletParameters'; +export * from './GetAllPaymentMethods400Response'; +export * from './GetAllPaymentMethods403Response'; +export * from './GetAllPaymentMethods404Response'; +export * from './GetAllPaymentMethodsDefaultResponse'; +export * from './OverTheCounter'; +export * from './OverTheCounterChannelCode'; +export * from './OverTheCounterChannelProperties'; +export * from './OverTheCounterChannelPropertiesUpdate'; +export * from './OverTheCounterParameters'; +export * from './OverTheCounterUpdateParameters'; +export * from './PaymentChannel'; +export * from './PaymentChannelAllOf'; +export * from './PaymentChannelList'; +export * from './PaymentChannelListLinksInner'; +export * from './PaymentChannelListLinksInnerAllOf'; +export * from './PaymentMethod'; +export * from './PaymentMethodAction'; +export * from './PaymentMethodAuthParameters'; +export * from './PaymentMethodCountry'; +export * from './PaymentMethodExpireParameters'; +export * from './PaymentMethodList'; +export * from './PaymentMethodParameters'; +export * from './PaymentMethodReusability'; +export * from './PaymentMethodStatus'; +export * from './PaymentMethodType'; +export * from './PaymentMethodUpdateParameters'; +export * from './QRCode'; +export * from './QRCodeChannelCode'; +export * from './QRCodeChannelProperties'; +export * from './QRCodeParameters'; +export * from './SimulatePaymentRequest'; +export * from './TokenizedCardInformation'; +export * from './VirtualAccount'; +export * from './VirtualAccountAllOf'; +export * from './VirtualAccountAlternativeDisplay'; +export * from './VirtualAccountChannelCode'; +export * from './VirtualAccountChannelProperties'; +export * from './VirtualAccountChannelPropertiesPatch'; +export * from './VirtualAccountParameters'; +export * from './VirtualAccountUpdateParameters'; diff --git a/payment_request/apis/PaymentRequest.ts b/payment_request/apis/PaymentRequest.ts new file mode 100644 index 0000000..a67e2b9 --- /dev/null +++ b/payment_request/apis/PaymentRequest.ts @@ -0,0 +1,394 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +import * as runtime from '../../runtime'; +import type { + Capture, + CaptureListResponse, + CaptureParameters, + PaymentRequest, + PaymentRequestAuthParameters, + PaymentRequestListResponse, + PaymentRequestParameters, +} from '../models'; +import { + CaptureFromJSON, + CaptureToJSON, + CaptureListResponseFromJSON, + CaptureListResponseToJSON, + CaptureParametersFromJSON, + CaptureParametersToJSON, + PaymentRequestFromJSON, + PaymentRequestToJSON, + PaymentRequestAuthParametersFromJSON, + PaymentRequestAuthParametersToJSON, + PaymentRequestListResponseFromJSON, + PaymentRequestListResponseToJSON, + PaymentRequestParametersFromJSON, + PaymentRequestParametersToJSON, +} from '../models'; + +export interface AuthorizePaymentRequestRequest { + paymentRequestId: string; + idempotencyKey?: string; + data?: PaymentRequestAuthParameters; +} + +export interface CapturePaymentRequestRequest { + paymentRequestId: string; + idempotencyKey?: string; + data?: CaptureParameters; +} + +export interface CreatePaymentRequestRequest { + idempotencyKey?: string; + data?: PaymentRequestParameters; +} + +export interface GetAllPaymentRequestsRequest { + referenceId?: Array; + id?: Array; + customerId?: Array; + limit?: number; + beforeId?: string; + afterId?: string; + idempotencyKey?: string; +} + +export interface GetPaymentRequestByIDRequest { + paymentRequestId: string; + idempotencyKey?: string; +} + +export interface GetPaymentRequestCapturesRequest { + paymentRequestId: string; + limit?: number; + afterId?: string; + beforeId?: string; + idempotencyKey?: string; +} + +export interface ResendPaymentRequestAuthRequest { + paymentRequestId: string; + idempotencyKey?: string; +} + +/** + * + */ +export class PaymentRequestApi extends runtime.BaseAPI { + + secretKey: string = ""; + xenditURL: string = ""; + + constructor({secretKey, xenditURL}: {secretKey: string, xenditURL?: string}) { + const conf = new runtime.Configuration({ + basePath: xenditURL || 'https://api.xendit.co' + }) + super(conf) + this.secretKey = secretKey; + } + + /** + * Payment Request Authorize + * Payment Request Authorize + */ + private async authorizePaymentRequestRaw(requestParameters: AuthorizePaymentRequestRequest): Promise> { + if (requestParameters.paymentRequestId === null || requestParameters.paymentRequestId === undefined) { + throw new runtime.RequiredError('paymentRequestId','Required parameter requestParameters.paymentRequestId was null or undefined when calling authorizePaymentRequest.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + headerParameters['Content-Type'] = 'application/json'; + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/payment_requests/{paymentRequestId}/auth`.replace(`{${"paymentRequestId"}}`, encodeURIComponent(String(requestParameters.paymentRequestId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: PaymentRequestAuthParametersToJSON(requestParameters.data), + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => PaymentRequestFromJSON(jsonValue)); + } + + /** + * Payment Request Authorize + * Payment Request Authorize + */ + async authorizePaymentRequest(requestParameters: AuthorizePaymentRequestRequest): Promise { + const response = await this.authorizePaymentRequestRaw(requestParameters); + return await response.value(); + } + + /** + * Payment Request Capture + * Payment Request Capture + */ + private async capturePaymentRequestRaw(requestParameters: CapturePaymentRequestRequest): Promise> { + if (requestParameters.paymentRequestId === null || requestParameters.paymentRequestId === undefined) { + throw new runtime.RequiredError('paymentRequestId','Required parameter requestParameters.paymentRequestId was null or undefined when calling capturePaymentRequest.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + headerParameters['Content-Type'] = 'application/json'; + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/payment_requests/{paymentRequestId}/captures`.replace(`{${"paymentRequestId"}}`, encodeURIComponent(String(requestParameters.paymentRequestId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: CaptureParametersToJSON(requestParameters.data), + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => CaptureFromJSON(jsonValue)); + } + + /** + * Payment Request Capture + * Payment Request Capture + */ + async capturePaymentRequest(requestParameters: CapturePaymentRequestRequest): Promise { + const response = await this.capturePaymentRequestRaw(requestParameters); + return await response.value(); + } + + /** + * Create Payment Request + * Create Payment Request + */ + private async createPaymentRequestRaw(requestParameters: CreatePaymentRequestRequest): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + headerParameters['Content-Type'] = 'application/json'; + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/payment_requests`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: PaymentRequestParametersToJSON(requestParameters.data), + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => PaymentRequestFromJSON(jsonValue)); + } + + /** + * Create Payment Request + * Create Payment Request + */ + async createPaymentRequest(requestParameters: CreatePaymentRequestRequest = {}): Promise { + const response = await this.createPaymentRequestRaw(requestParameters); + return await response.value(); + } + + /** + * Get all payment requests by filter + * Get all payment requests by filter + */ + private async getAllPaymentRequestsRaw(requestParameters: GetAllPaymentRequestsRequest): Promise> { + const queryParameters: any = {}; + + if (requestParameters.referenceId) { + queryParameters['reference_id'] = requestParameters.referenceId; + } + + if (requestParameters.id) { + queryParameters['id'] = requestParameters.id; + } + + if (requestParameters.customerId) { + queryParameters['customer_id'] = requestParameters.customerId; + } + + if (requestParameters.limit !== undefined) { + queryParameters['limit'] = requestParameters.limit; + } + + if (requestParameters.beforeId !== undefined) { + queryParameters['before_id'] = requestParameters.beforeId; + } + + if (requestParameters.afterId !== undefined) { + queryParameters['after_id'] = requestParameters.afterId; + } + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/payment_requests`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => PaymentRequestListResponseFromJSON(jsonValue)); + } + + /** + * Get all payment requests by filter + * Get all payment requests by filter + */ + async getAllPaymentRequests(requestParameters: GetAllPaymentRequestsRequest = {}): Promise { + const response = await this.getAllPaymentRequestsRaw(requestParameters); + return await response.value(); + } + + /** + * Get payment request by ID + * Get payment request by ID + */ + private async getPaymentRequestByIDRaw(requestParameters: GetPaymentRequestByIDRequest): Promise> { + if (requestParameters.paymentRequestId === null || requestParameters.paymentRequestId === undefined) { + throw new runtime.RequiredError('paymentRequestId','Required parameter requestParameters.paymentRequestId was null or undefined when calling getPaymentRequestByID.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/payment_requests/{paymentRequestId}`.replace(`{${"paymentRequestId"}}`, encodeURIComponent(String(requestParameters.paymentRequestId))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => PaymentRequestFromJSON(jsonValue)); + } + + /** + * Get payment request by ID + * Get payment request by ID + */ + async getPaymentRequestByID(requestParameters: GetPaymentRequestByIDRequest): Promise { + const response = await this.getPaymentRequestByIDRaw(requestParameters); + return await response.value(); + } + + /** + * Get Payment Request Capture + * Get Payment Request Capture + */ + private async getPaymentRequestCapturesRaw(requestParameters: GetPaymentRequestCapturesRequest): Promise> { + if (requestParameters.paymentRequestId === null || requestParameters.paymentRequestId === undefined) { + throw new runtime.RequiredError('paymentRequestId','Required parameter requestParameters.paymentRequestId was null or undefined when calling getPaymentRequestCaptures.'); + } + + const queryParameters: any = {}; + + if (requestParameters.limit !== undefined) { + queryParameters['limit'] = requestParameters.limit; + } + + if (requestParameters.afterId !== undefined) { + queryParameters['after_id'] = requestParameters.afterId; + } + + if (requestParameters.beforeId !== undefined) { + queryParameters['before_id'] = requestParameters.beforeId; + } + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/payment_requests/{paymentRequestId}/captures`.replace(`{${"paymentRequestId"}}`, encodeURIComponent(String(requestParameters.paymentRequestId))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => CaptureListResponseFromJSON(jsonValue)); + } + + /** + * Get Payment Request Capture + * Get Payment Request Capture + */ + async getPaymentRequestCaptures(requestParameters: GetPaymentRequestCapturesRequest): Promise { + const response = await this.getPaymentRequestCapturesRaw(requestParameters); + return await response.value(); + } + + /** + * Payment Request Resend Auth + * Payment Request Resend Auth + */ + private async resendPaymentRequestAuthRaw(requestParameters: ResendPaymentRequestAuthRequest): Promise> { + if (requestParameters.paymentRequestId === null || requestParameters.paymentRequestId === undefined) { + throw new runtime.RequiredError('paymentRequestId','Required parameter requestParameters.paymentRequestId was null or undefined when calling resendPaymentRequestAuth.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/payment_requests/{paymentRequestId}/auth/resend`.replace(`{${"paymentRequestId"}}`, encodeURIComponent(String(requestParameters.paymentRequestId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => PaymentRequestFromJSON(jsonValue)); + } + + /** + * Payment Request Resend Auth + * Payment Request Resend Auth + */ + async resendPaymentRequestAuth(requestParameters: ResendPaymentRequestAuthRequest): Promise { + const response = await this.resendPaymentRequestAuthRaw(requestParameters); + return await response.value(); + } + +} diff --git a/payment_request/apis/index.ts b/payment_request/apis/index.ts new file mode 100644 index 0000000..c0e605c --- /dev/null +++ b/payment_request/apis/index.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './PaymentRequest'; diff --git a/payment_request/index.ts b/payment_request/index.ts new file mode 100644 index 0000000..85173f1 --- /dev/null +++ b/payment_request/index.ts @@ -0,0 +1,3 @@ +export { + PaymentRequestApi as PaymentRequest, +} from './apis' diff --git a/payment_request/models/Capture.ts b/payment_request/models/Capture.ts new file mode 100644 index 0000000..4da8b50 --- /dev/null +++ b/payment_request/models/Capture.ts @@ -0,0 +1,204 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { PaymentMethod } from './PaymentMethod'; +import { + PaymentMethodFromJSON, + PaymentMethodFromJSONTyped, + PaymentMethodToJSON, +} from './PaymentMethod'; + +/** + * + * @export + * @interface Capture + */ +export interface Capture { + /** + * + * @type {string} + * @memberof Capture + */ + id: string; + /** + * + * @type {string} + * @memberof Capture + */ + paymentRequestId: string; + /** + * + * @type {string} + * @memberof Capture + */ + paymentId: string; + /** + * + * @type {string} + * @memberof Capture + */ + referenceId: string; + /** + * + * @type {string} + * @memberof Capture + */ + currency: string; + /** + * + * @type {number} + * @memberof Capture + */ + authorizedAmount: number; + /** + * + * @type {number} + * @memberof Capture + */ + capturedAmount: number; + /** + * + * @type {string} + * @memberof Capture + */ + status: CaptureStatusEnum; + /** + * + * @type {PaymentMethod} + * @memberof Capture + */ + paymentMethod: PaymentMethod; + /** + * + * @type {string} + * @memberof Capture + */ + failureCode: string | null; + /** + * + * @type {string} + * @memberof Capture + */ + customerId: string | null; + /** + * + * @type {object} + * @memberof Capture + */ + metadata: object | null; + /** + * + * @type {object} + * @memberof Capture + */ + channelProperties: object | null; + /** + * + * @type {string} + * @memberof Capture + */ + created: string; + /** + * + * @type {string} + * @memberof Capture + */ + updated: string; +} + + +/** + * @export + */ +export const CaptureStatusEnum = { + Succeeded: 'SUCCEEDED', + Failed: 'FAILED' +} as const; +export type CaptureStatusEnum = typeof CaptureStatusEnum[keyof typeof CaptureStatusEnum]; + + +/** + * Check if a given object implements the Capture interface. + */ +export function instanceOfCapture(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "id" in value; + isInstance = isInstance && "paymentRequestId" in value; + isInstance = isInstance && "paymentId" in value; + isInstance = isInstance && "referenceId" in value; + isInstance = isInstance && "currency" in value; + isInstance = isInstance && "authorizedAmount" in value; + isInstance = isInstance && "capturedAmount" in value; + isInstance = isInstance && "status" in value; + isInstance = isInstance && "paymentMethod" in value; + isInstance = isInstance && "failureCode" in value; + isInstance = isInstance && "customerId" in value; + isInstance = isInstance && "metadata" in value; + isInstance = isInstance && "channelProperties" in value; + isInstance = isInstance && "created" in value; + isInstance = isInstance && "updated" in value; + + return isInstance; +} + +export function CaptureFromJSON(json: any): Capture { + return CaptureFromJSONTyped(json, false); +} + +export function CaptureFromJSONTyped(json: any, ignoreDiscriminator: boolean): Capture { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'id': json['id'], + 'paymentRequestId': json['payment_request_id'], + 'paymentId': json['payment_id'], + 'referenceId': json['reference_id'], + 'currency': json['currency'], + 'authorizedAmount': json['authorized_amount'], + 'capturedAmount': json['captured_amount'], + 'status': json['status'], + 'paymentMethod': PaymentMethodFromJSON(json['payment_method']), + 'failureCode': json['failure_code'], + 'customerId': json['customer_id'], + 'metadata': json['metadata'], + 'channelProperties': json['channel_properties'], + 'created': json['created'], + 'updated': json['updated'], + }; +} + +export function CaptureToJSON(value?: Capture | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'id': value.id, + 'payment_request_id': value.paymentRequestId, + 'payment_id': value.paymentId, + 'reference_id': value.referenceId, + 'currency': value.currency, + 'authorized_amount': value.authorizedAmount, + 'captured_amount': value.capturedAmount, + 'status': value.status, + 'payment_method': PaymentMethodToJSON(value.paymentMethod), + 'failure_code': value.failureCode, + 'customer_id': value.customerId, + 'metadata': value.metadata, + 'channel_properties': value.channelProperties, + 'created': value.created, + 'updated': value.updated, + }; +} + diff --git a/payment_request/models/CaptureListResponse.ts b/payment_request/models/CaptureListResponse.ts new file mode 100644 index 0000000..750e192 --- /dev/null +++ b/payment_request/models/CaptureListResponse.ts @@ -0,0 +1,76 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { Capture } from './Capture'; +import { + CaptureFromJSON, + CaptureFromJSONTyped, + CaptureToJSON, +} from './Capture'; + +/** + * + * @export + * @interface CaptureListResponse + */ +export interface CaptureListResponse { + /** + * + * @type {Array} + * @memberof CaptureListResponse + */ + data: Array; + /** + * + * @type {boolean} + * @memberof CaptureListResponse + */ + hasMore: boolean; +} + +/** + * Check if a given object implements the CaptureListResponse interface. + */ +export function instanceOfCaptureListResponse(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "data" in value; + isInstance = isInstance && "hasMore" in value; + + return isInstance; +} + +export function CaptureListResponseFromJSON(json: any): CaptureListResponse { + return CaptureListResponseFromJSONTyped(json, false); +} + +export function CaptureListResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CaptureListResponse { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'data': ((json['data'] as Array).map(CaptureFromJSON)), + 'hasMore': json['has_more'], + }; +} + +export function CaptureListResponseToJSON(value?: CaptureListResponse | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'data': ((value.data as Array).map(CaptureToJSON)), + 'has_more': value.hasMore, + }; +} + diff --git a/payment_request/models/CaptureParameters.ts b/payment_request/models/CaptureParameters.ts new file mode 100644 index 0000000..16e9b10 --- /dev/null +++ b/payment_request/models/CaptureParameters.ts @@ -0,0 +1,68 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface CaptureParameters + */ +export interface CaptureParameters { + /** + * + * @type {string} + * @memberof CaptureParameters + */ + referenceId?: string | null; + /** + * + * @type {number} + * @memberof CaptureParameters + */ + captureAmount: number; +} + +/** + * Check if a given object implements the CaptureParameters interface. + */ +export function instanceOfCaptureParameters(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "captureAmount" in value; + + return isInstance; +} + +export function CaptureParametersFromJSON(json: any): CaptureParameters { + return CaptureParametersFromJSONTyped(json, false); +} + +export function CaptureParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): CaptureParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'referenceId': !exists(json, 'reference_id') ? undefined : json['reference_id'], + 'captureAmount': json['capture_amount'], + }; +} + +export function CaptureParametersToJSON(value?: CaptureParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'reference_id': value.referenceId, + 'capture_amount': value.captureAmount, + }; +} + diff --git a/payment_request/models/Card.ts b/payment_request/models/Card.ts new file mode 100644 index 0000000..e5e194f --- /dev/null +++ b/payment_request/models/Card.ts @@ -0,0 +1,111 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { CardChannelProperties } from './CardChannelProperties'; +import { + CardChannelPropertiesFromJSON, + CardChannelPropertiesFromJSONTyped, + CardChannelPropertiesToJSON, +} from './CardChannelProperties'; +import type { CardInformation } from './CardInformation'; +import { + CardInformationFromJSON, + CardInformationFromJSONTyped, + CardInformationToJSON, +} from './CardInformation'; +import type { CardVerificationResults } from './CardVerificationResults'; +import { + CardVerificationResultsFromJSON, + CardVerificationResultsFromJSONTyped, + CardVerificationResultsToJSON, +} from './CardVerificationResults'; +import type { PaymentRequestCurrency } from './PaymentRequestCurrency'; +import { + PaymentRequestCurrencyFromJSON, + PaymentRequestCurrencyFromJSONTyped, + PaymentRequestCurrencyToJSON, +} from './PaymentRequestCurrency'; + +/** + * + * @export + * @interface Card + */ +export interface Card { + /** + * + * @type {PaymentRequestCurrency} + * @memberof Card + */ + currency: PaymentRequestCurrency; + /** + * + * @type {CardChannelProperties} + * @memberof Card + */ + channelProperties: CardChannelProperties; + /** + * + * @type {CardInformation} + * @memberof Card + */ + cardInformation: CardInformation; + /** + * + * @type {CardVerificationResults} + * @memberof Card + */ + cardVerificationResults?: CardVerificationResults | null; +} + +/** + * Check if a given object implements the Card interface. + */ +export function instanceOfCard(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "currency" in value; + isInstance = isInstance && "channelProperties" in value; + isInstance = isInstance && "cardInformation" in value; + + return isInstance; +} + +export function CardFromJSON(json: any): Card { + return CardFromJSONTyped(json, false); +} + +export function CardFromJSONTyped(json: any, ignoreDiscriminator: boolean): Card { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'currency': PaymentRequestCurrencyFromJSON(json['currency']), + 'channelProperties': CardChannelPropertiesFromJSON(json['channel_properties']), + 'cardInformation': CardInformationFromJSON(json['card_information']), + 'cardVerificationResults': !exists(json, 'card_verification_results') ? undefined : CardVerificationResultsFromJSON(json['card_verification_results']), + }; +} + +export function CardToJSON(value?: Card | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'currency': PaymentRequestCurrencyToJSON(value.currency), + 'channel_properties': CardChannelPropertiesToJSON(value.channelProperties), + 'card_information': CardInformationToJSON(value.cardInformation), + 'card_verification_results': CardVerificationResultsToJSON(value.cardVerificationResults), + }; +} + diff --git a/payment_request/models/CardChannelProperties.ts b/payment_request/models/CardChannelProperties.ts new file mode 100644 index 0000000..734fdc8 --- /dev/null +++ b/payment_request/models/CardChannelProperties.ts @@ -0,0 +1,91 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Card Channel Properties + * @export + * @interface CardChannelProperties + */ +export interface CardChannelProperties { + /** + * To indicate whether to perform 3DS during the linking phase + * @type {boolean} + * @memberof CardChannelProperties + */ + skipThreeDSecure?: boolean | null; + /** + * URL where the end-customer is redirected if the authorization is successful + * @type {string} + * @memberof CardChannelProperties + */ + successReturnUrl?: string | null; + /** + * URL where the end-customer is redirected if the authorization failed + * @type {string} + * @memberof CardChannelProperties + */ + failureReturnUrl?: string | null; + /** + * Type of “credential-on-file” / “card-on-file” payment being made. Indicate that this payment uses a previously linked Payment Method for charging. + * @type {string} + * @memberof CardChannelProperties + */ + cardonfileType?: string | null; + /** + * Tag for a Merchant ID that you want to associate this payment with. For merchants using their own MIDs to specify which MID they want to use + * @type {string} + * @memberof CardChannelProperties + */ + merchantIdTag?: string; +} + +/** + * Check if a given object implements the CardChannelProperties interface. + */ +export function instanceOfCardChannelProperties(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CardChannelPropertiesFromJSON(json: any): CardChannelProperties { + return CardChannelPropertiesFromJSONTyped(json, false); +} + +export function CardChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): CardChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'skipThreeDSecure': !exists(json, 'skip_three_d_secure') ? undefined : json['skip_three_d_secure'], + 'successReturnUrl': !exists(json, 'success_return_url') ? undefined : json['success_return_url'], + 'failureReturnUrl': !exists(json, 'failure_return_url') ? undefined : json['failure_return_url'], + 'cardonfileType': !exists(json, 'cardonfile_type') ? undefined : json['cardonfile_type'], + 'merchantIdTag': !exists(json, 'merchant_id_tag') ? undefined : json['merchant_id_tag'], + }; +} + +export function CardChannelPropertiesToJSON(value?: CardChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'skip_three_d_secure': value.skipThreeDSecure, + 'success_return_url': value.successReturnUrl, + 'failure_return_url': value.failureReturnUrl, + 'cardonfile_type': value.cardonfileType, + 'merchant_id_tag': value.merchantIdTag, + }; +} + diff --git a/payment_request/models/CardInformation.ts b/payment_request/models/CardInformation.ts new file mode 100644 index 0000000..3ec8d6f --- /dev/null +++ b/payment_request/models/CardInformation.ts @@ -0,0 +1,149 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Card Information + * @export + * @interface CardInformation + */ +export interface CardInformation { + /** + * + * @type {string} + * @memberof CardInformation + */ + tokenId: string; + /** + * 1st 6 and last 4 digits of the card + * @type {string} + * @memberof CardInformation + */ + maskedCardNumber: string; + /** + * Card expiry month in MM format + * @type {string} + * @memberof CardInformation + */ + expiryMonth: string; + /** + * Card expiry month in YY format + * @type {string} + * @memberof CardInformation + */ + expiryYear: string; + /** + * Cardholder name + * @type {string} + * @memberof CardInformation + */ + cardholderName?: string | null; + /** + * + * @type {string} + * @memberof CardInformation + */ + fingerprint?: string; + /** + * + * @type {string} + * @memberof CardInformation + */ + type?: string; + /** + * + * @type {string} + * @memberof CardInformation + */ + network?: CardInformationNetworkEnum; + /** + * + * @type {string} + * @memberof CardInformation + */ + country?: string; + /** + * + * @type {string} + * @memberof CardInformation + */ + issuer?: string; +} + + +/** + * @export + */ +export const CardInformationNetworkEnum = { + Visa: 'VISA', + Mastercard: 'MASTERCARD', + Jcb: 'JCB', + Amex: 'AMEX', + Discover: 'DISCOVER' +} as const; +export type CardInformationNetworkEnum = typeof CardInformationNetworkEnum[keyof typeof CardInformationNetworkEnum]; + + +/** + * Check if a given object implements the CardInformation interface. + */ +export function instanceOfCardInformation(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "tokenId" in value; + isInstance = isInstance && "maskedCardNumber" in value; + isInstance = isInstance && "expiryMonth" in value; + isInstance = isInstance && "expiryYear" in value; + + return isInstance; +} + +export function CardInformationFromJSON(json: any): CardInformation { + return CardInformationFromJSONTyped(json, false); +} + +export function CardInformationFromJSONTyped(json: any, ignoreDiscriminator: boolean): CardInformation { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'tokenId': json['token_id'], + 'maskedCardNumber': json['masked_card_number'], + 'expiryMonth': json['expiry_month'], + 'expiryYear': json['expiry_year'], + 'cardholderName': !exists(json, 'cardholder_name') ? undefined : json['cardholder_name'], + 'fingerprint': !exists(json, 'fingerprint') ? undefined : json['fingerprint'], + 'type': !exists(json, 'type') ? undefined : json['type'], + 'network': !exists(json, 'network') ? undefined : json['network'], + 'country': !exists(json, 'country') ? undefined : json['country'], + 'issuer': !exists(json, 'issuer') ? undefined : json['issuer'], + }; +} + +export function CardInformationToJSON(value?: CardInformation | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'token_id': value.tokenId, + 'masked_card_number': value.maskedCardNumber, + 'expiry_month': value.expiryMonth, + 'expiry_year': value.expiryYear, + 'cardholder_name': value.cardholderName, + 'fingerprint': value.fingerprint, + 'type': value.type, + 'network': value.network, + 'country': value.country, + 'issuer': value.issuer, + }; +} + diff --git a/payment_request/models/CardVerificationResults.ts b/payment_request/models/CardVerificationResults.ts new file mode 100644 index 0000000..761e7e7 --- /dev/null +++ b/payment_request/models/CardVerificationResults.ts @@ -0,0 +1,82 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { CardVerificationResultsThreeDSecure } from './CardVerificationResultsThreeDSecure'; +import { + CardVerificationResultsThreeDSecureFromJSON, + CardVerificationResultsThreeDSecureFromJSONTyped, + CardVerificationResultsThreeDSecureToJSON, +} from './CardVerificationResultsThreeDSecure'; + +/** + * + * @export + * @interface CardVerificationResults + */ +export interface CardVerificationResults { + /** + * + * @type {CardVerificationResultsThreeDSecure} + * @memberof CardVerificationResults + */ + threeDSecure?: CardVerificationResultsThreeDSecure; + /** + * + * @type {string} + * @memberof CardVerificationResults + */ + cvvResult?: string | null; + /** + * + * @type {string} + * @memberof CardVerificationResults + */ + addressVerificationResult?: string | null; +} + +/** + * Check if a given object implements the CardVerificationResults interface. + */ +export function instanceOfCardVerificationResults(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CardVerificationResultsFromJSON(json: any): CardVerificationResults { + return CardVerificationResultsFromJSONTyped(json, false); +} + +export function CardVerificationResultsFromJSONTyped(json: any, ignoreDiscriminator: boolean): CardVerificationResults { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'threeDSecure': !exists(json, 'three_d_secure') ? undefined : CardVerificationResultsThreeDSecureFromJSON(json['three_d_secure']), + 'cvvResult': !exists(json, 'cvv_result') ? undefined : json['cvv_result'], + 'addressVerificationResult': !exists(json, 'address_verification_result') ? undefined : json['address_verification_result'], + }; +} + +export function CardVerificationResultsToJSON(value?: CardVerificationResults | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'three_d_secure': CardVerificationResultsThreeDSecureToJSON(value.threeDSecure), + 'cvv_result': value.cvvResult, + 'address_verification_result': value.addressVerificationResult, + }; +} + diff --git a/payment_request/models/CardVerificationResultsThreeDSecure.ts b/payment_request/models/CardVerificationResultsThreeDSecure.ts new file mode 100644 index 0000000..06fdb25 --- /dev/null +++ b/payment_request/models/CardVerificationResultsThreeDSecure.ts @@ -0,0 +1,102 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface CardVerificationResultsThreeDSecure + */ +export interface CardVerificationResultsThreeDSecure { + /** + * + * @type {string} + * @memberof CardVerificationResultsThreeDSecure + */ + threeDSecureFlow?: CardVerificationResultsThreeDSecureThreeDSecureFlowEnum; + /** + * + * @type {string} + * @memberof CardVerificationResultsThreeDSecure + */ + eciCode?: string | null; + /** + * + * @type {string} + * @memberof CardVerificationResultsThreeDSecure + */ + threeDSecureResult?: string | null; + /** + * + * @type {string} + * @memberof CardVerificationResultsThreeDSecure + */ + threeDSecureResultReason?: string | null; + /** + * + * @type {string} + * @memberof CardVerificationResultsThreeDSecure + */ + threeDSecureVersion?: string | null; +} + + +/** + * @export + */ +export const CardVerificationResultsThreeDSecureThreeDSecureFlowEnum = { + Challenge: 'CHALLENGE', + Frictionless: 'FRICTIONLESS' +} as const; +export type CardVerificationResultsThreeDSecureThreeDSecureFlowEnum = typeof CardVerificationResultsThreeDSecureThreeDSecureFlowEnum[keyof typeof CardVerificationResultsThreeDSecureThreeDSecureFlowEnum]; + + +/** + * Check if a given object implements the CardVerificationResultsThreeDSecure interface. + */ +export function instanceOfCardVerificationResultsThreeDSecure(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CardVerificationResultsThreeDSecureFromJSON(json: any): CardVerificationResultsThreeDSecure { + return CardVerificationResultsThreeDSecureFromJSONTyped(json, false); +} + +export function CardVerificationResultsThreeDSecureFromJSONTyped(json: any, ignoreDiscriminator: boolean): CardVerificationResultsThreeDSecure { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'threeDSecureFlow': !exists(json, 'three_d_secure_flow') ? undefined : json['three_d_secure_flow'], + 'eciCode': !exists(json, 'eci_code') ? undefined : json['eci_code'], + 'threeDSecureResult': !exists(json, 'three_d_secure_result') ? undefined : json['three_d_secure_result'], + 'threeDSecureResultReason': !exists(json, 'three_d_secure_result_reason') ? undefined : json['three_d_secure_result_reason'], + 'threeDSecureVersion': !exists(json, 'three_d_secure_version') ? undefined : json['three_d_secure_version'], + }; +} + +export function CardVerificationResultsThreeDSecureToJSON(value?: CardVerificationResultsThreeDSecure | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'three_d_secure_flow': value.threeDSecureFlow, + 'eci_code': value.eciCode, + 'three_d_secure_result': value.threeDSecureResult, + 'three_d_secure_result_reason': value.threeDSecureResultReason, + 'three_d_secure_version': value.threeDSecureVersion, + }; +} + diff --git a/payment_request/models/DirectDebit.ts b/payment_request/models/DirectDebit.ts new file mode 100644 index 0000000..3a26474 --- /dev/null +++ b/payment_request/models/DirectDebit.ts @@ -0,0 +1,125 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { DirectDebitBankAccount } from './DirectDebitBankAccount'; +import { + DirectDebitBankAccountFromJSON, + DirectDebitBankAccountFromJSONTyped, + DirectDebitBankAccountToJSON, +} from './DirectDebitBankAccount'; +import type { DirectDebitChannelCode } from './DirectDebitChannelCode'; +import { + DirectDebitChannelCodeFromJSON, + DirectDebitChannelCodeFromJSONTyped, + DirectDebitChannelCodeToJSON, +} from './DirectDebitChannelCode'; +import type { DirectDebitChannelProperties } from './DirectDebitChannelProperties'; +import { + DirectDebitChannelPropertiesFromJSON, + DirectDebitChannelPropertiesFromJSONTyped, + DirectDebitChannelPropertiesToJSON, +} from './DirectDebitChannelProperties'; +import type { DirectDebitDebitCard } from './DirectDebitDebitCard'; +import { + DirectDebitDebitCardFromJSON, + DirectDebitDebitCardFromJSONTyped, + DirectDebitDebitCardToJSON, +} from './DirectDebitDebitCard'; +import type { DirectDebitType } from './DirectDebitType'; +import { + DirectDebitTypeFromJSON, + DirectDebitTypeFromJSONTyped, + DirectDebitTypeToJSON, +} from './DirectDebitType'; + +/** + * Direct Debit Payment Method Details + * @export + * @interface DirectDebit + */ +export interface DirectDebit { + /** + * + * @type {DirectDebitChannelCode} + * @memberof DirectDebit + */ + channelCode: DirectDebitChannelCode; + /** + * + * @type {DirectDebitChannelProperties} + * @memberof DirectDebit + */ + channelProperties: DirectDebitChannelProperties | null; + /** + * + * @type {DirectDebitType} + * @memberof DirectDebit + */ + type: DirectDebitType; + /** + * + * @type {DirectDebitBankAccount} + * @memberof DirectDebit + */ + bankAccount?: DirectDebitBankAccount | null; + /** + * + * @type {DirectDebitDebitCard} + * @memberof DirectDebit + */ + debitCard?: DirectDebitDebitCard | null; +} + +/** + * Check if a given object implements the DirectDebit interface. + */ +export function instanceOfDirectDebit(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + isInstance = isInstance && "type" in value; + + return isInstance; +} + +export function DirectDebitFromJSON(json: any): DirectDebit { + return DirectDebitFromJSONTyped(json, false); +} + +export function DirectDebitFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebit { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'channelCode': DirectDebitChannelCodeFromJSON(json['channel_code']), + 'channelProperties': DirectDebitChannelPropertiesFromJSON(json['channel_properties']), + 'type': DirectDebitTypeFromJSON(json['type']), + 'bankAccount': !exists(json, 'bank_account') ? undefined : DirectDebitBankAccountFromJSON(json['bank_account']), + 'debitCard': !exists(json, 'debit_card') ? undefined : DirectDebitDebitCardFromJSON(json['debit_card']), + }; +} + +export function DirectDebitToJSON(value?: DirectDebit | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'channel_code': DirectDebitChannelCodeToJSON(value.channelCode), + 'channel_properties': DirectDebitChannelPropertiesToJSON(value.channelProperties), + 'type': DirectDebitTypeToJSON(value.type), + 'bank_account': DirectDebitBankAccountToJSON(value.bankAccount), + 'debit_card': DirectDebitDebitCardToJSON(value.debitCard), + }; +} + diff --git a/payment_request/models/DirectDebitAllOf.ts b/payment_request/models/DirectDebitAllOf.ts new file mode 100644 index 0000000..a32d8a6 --- /dev/null +++ b/payment_request/models/DirectDebitAllOf.ts @@ -0,0 +1,95 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { DirectDebitBankAccount } from './DirectDebitBankAccount'; +import { + DirectDebitBankAccountFromJSON, + DirectDebitBankAccountFromJSONTyped, + DirectDebitBankAccountToJSON, +} from './DirectDebitBankAccount'; +import type { DirectDebitDebitCard } from './DirectDebitDebitCard'; +import { + DirectDebitDebitCardFromJSON, + DirectDebitDebitCardFromJSONTyped, + DirectDebitDebitCardToJSON, +} from './DirectDebitDebitCard'; +import type { DirectDebitType } from './DirectDebitType'; +import { + DirectDebitTypeFromJSON, + DirectDebitTypeFromJSONTyped, + DirectDebitTypeToJSON, +} from './DirectDebitType'; + +/** + * + * @export + * @interface DirectDebitAllOf + */ +export interface DirectDebitAllOf { + /** + * + * @type {DirectDebitType} + * @memberof DirectDebitAllOf + */ + type: DirectDebitType; + /** + * + * @type {DirectDebitBankAccount} + * @memberof DirectDebitAllOf + */ + bankAccount?: DirectDebitBankAccount | null; + /** + * + * @type {DirectDebitDebitCard} + * @memberof DirectDebitAllOf + */ + debitCard?: DirectDebitDebitCard | null; +} + +/** + * Check if a given object implements the DirectDebitAllOf interface. + */ +export function instanceOfDirectDebitAllOf(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "type" in value; + + return isInstance; +} + +export function DirectDebitAllOfFromJSON(json: any): DirectDebitAllOf { + return DirectDebitAllOfFromJSONTyped(json, false); +} + +export function DirectDebitAllOfFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitAllOf { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'type': DirectDebitTypeFromJSON(json['type']), + 'bankAccount': !exists(json, 'bank_account') ? undefined : DirectDebitBankAccountFromJSON(json['bank_account']), + 'debitCard': !exists(json, 'debit_card') ? undefined : DirectDebitDebitCardFromJSON(json['debit_card']), + }; +} + +export function DirectDebitAllOfToJSON(value?: DirectDebitAllOf | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'type': DirectDebitTypeToJSON(value.type), + 'bank_account': DirectDebitBankAccountToJSON(value.bankAccount), + 'debit_card': DirectDebitDebitCardToJSON(value.debitCard), + }; +} + diff --git a/payment_request/models/DirectDebitBankAccount.ts b/payment_request/models/DirectDebitBankAccount.ts new file mode 100644 index 0000000..447b6bd --- /dev/null +++ b/payment_request/models/DirectDebitBankAccount.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface DirectDebitBankAccount + */ +export interface DirectDebitBankAccount { + /** + * + * @type {string} + * @memberof DirectDebitBankAccount + */ + maskedBankAccountNumber?: string | null; + /** + * + * @type {string} + * @memberof DirectDebitBankAccount + */ + bankAccountHash?: string | null; +} + +/** + * Check if a given object implements the DirectDebitBankAccount interface. + */ +export function instanceOfDirectDebitBankAccount(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function DirectDebitBankAccountFromJSON(json: any): DirectDebitBankAccount { + return DirectDebitBankAccountFromJSONTyped(json, false); +} + +export function DirectDebitBankAccountFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitBankAccount { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'maskedBankAccountNumber': !exists(json, 'masked_bank_account_number') ? undefined : json['masked_bank_account_number'], + 'bankAccountHash': !exists(json, 'bank_account_hash') ? undefined : json['bank_account_hash'], + }; +} + +export function DirectDebitBankAccountToJSON(value?: DirectDebitBankAccount | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'masked_bank_account_number': value.maskedBankAccountNumber, + 'bank_account_hash': value.bankAccountHash, + }; +} + diff --git a/payment_request/models/DirectDebitChannelCode.ts b/payment_request/models/DirectDebitChannelCode.ts new file mode 100644 index 0000000..e19b459 --- /dev/null +++ b/payment_request/models/DirectDebitChannelCode.ts @@ -0,0 +1,93 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Direct Debit Channel Code + * @export + */ +export const DirectDebitChannelCode = { + BcaKlikpay: 'BCA_KLIKPAY', + BcaOneklik: 'BCA_ONEKLIK', + Bri: 'BRI', + Bni: 'BNI', + Mandiri: 'MANDIRI', + Bpi: 'BPI', + Bdo: 'BDO', + Cimbniaga: 'CIMBNIAGA', + Mtb: 'MTB', + Rcbc: 'RCBC', + Ubp: 'UBP', + AutodebitUbp: 'AUTODEBIT_UBP', + Chinabank: 'CHINABANK', + Bay: 'BAY', + Ktb: 'KTB', + Bbl: 'BBL', + Scb: 'SCB', + KbankMb: 'KBANK_MB', + BayMb: 'BAY_MB', + KtbMb: 'KTB_MB', + BblMb: 'BBL_MB', + ScbMb: 'SCB_MB', + BdoEpay: 'BDO_EPAY', + AffinFpx: 'AFFIN_FPX', + AgroFpx: 'AGRO_FPX', + AllianceFpx: 'ALLIANCE_FPX', + AmbankFpx: 'AMBANK_FPX', + IslamFpx: 'ISLAM_FPX', + MuamalatFpx: 'MUAMALAT_FPX', + BocFpx: 'BOC_FPX', + RakyatFpx: 'RAKYAT_FPX', + BsnFpx: 'BSN_FPX', + CimbFpx: 'CIMB_FPX', + HlbFpx: 'HLB_FPX', + HsbcFpx: 'HSBC_FPX', + KfhFpx: 'KFH_FPX', + Mayb2EFpx: 'MAYB2E_FPX', + Mayb2UFpx: 'MAYB2U_FPX', + OcbcFpx: 'OCBC_FPX', + PublicFpx: 'PUBLIC_FPX', + RhbFpx: 'RHB_FPX', + SchFpx: 'SCH_FPX', + UobFpx: 'UOB_FPX', + AffinFpxBusiness: 'AFFIN_FPX_BUSINESS', + AgroFpxBusiness: 'AGRO_FPX_BUSINESS', + AllianceFpxBusiness: 'ALLIANCE_FPX_BUSINESS', + AmbankFpxBusiness: 'AMBANK_FPX_BUSINESS', + IslamFpxBusiness: 'ISLAM_FPX_BUSINESS', + MuamalatFpxBusiness: 'MUAMALAT_FPX_BUSINESS', + BnpFpxBusiness: 'BNP_FPX_BUSINESS', + CimbFpxBusiness: 'CIMB_FPX_BUSINESS', + CitibankFpxBusiness: 'CITIBANK_FPX_BUSINESS', + DeutscheFpxBusiness: 'DEUTSCHE_FPX_BUSINESS', + HlbFpxBusiness: 'HLB_FPX_BUSINESS', + HsbcFpxBusiness: 'HSBC_FPX_BUSINESS', + RakyatFpxBusiness: 'RAKYAT_FPX_BUSINESS', + KfhFpxBusiness: 'KFH_FPX_BUSINESS', + Mayb2EFpxBusiness: 'MAYB2E_FPX_BUSINESS', + OcbcFpxBusiness: 'OCBC_FPX_BUSINESS', + PublicFpxBusiness: 'PUBLIC_FPX_BUSINESS', + RhbFpxBusiness: 'RHB_FPX_BUSINESS', + SchFpxBusiness: 'SCH_FPX_BUSINESS', + UobFpxBusiness: 'UOB_FPX_BUSINESS' +} as const; +export type DirectDebitChannelCode = typeof DirectDebitChannelCode[keyof typeof DirectDebitChannelCode]; + + +export function DirectDebitChannelCodeFromJSON(json: any): DirectDebitChannelCode { + return DirectDebitChannelCodeFromJSONTyped(json, false); +} + +export function DirectDebitChannelCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitChannelCode { + return json as DirectDebitChannelCode; +} + +export function DirectDebitChannelCodeToJSON(value?: DirectDebitChannelCode | null): any { + return value as any; +} + diff --git a/payment_request/models/DirectDebitChannelProperties.ts b/payment_request/models/DirectDebitChannelProperties.ts new file mode 100644 index 0000000..df436a2 --- /dev/null +++ b/payment_request/models/DirectDebitChannelProperties.ts @@ -0,0 +1,134 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { DirectDebitChannelPropertiesBankAccount } from './DirectDebitChannelPropertiesBankAccount'; +import { + DirectDebitChannelPropertiesBankAccountFromJSON, + DirectDebitChannelPropertiesBankAccountFromJSONTyped, + DirectDebitChannelPropertiesBankAccountToJSON, +} from './DirectDebitChannelPropertiesBankAccount'; +import type { DirectDebitChannelPropertiesBankRedirect } from './DirectDebitChannelPropertiesBankRedirect'; +import { + DirectDebitChannelPropertiesBankRedirectFromJSON, + DirectDebitChannelPropertiesBankRedirectFromJSONTyped, + DirectDebitChannelPropertiesBankRedirectToJSON, +} from './DirectDebitChannelPropertiesBankRedirect'; +import type { DirectDebitChannelPropertiesDebitCard } from './DirectDebitChannelPropertiesDebitCard'; +import { + DirectDebitChannelPropertiesDebitCardFromJSON, + DirectDebitChannelPropertiesDebitCardFromJSONTyped, + DirectDebitChannelPropertiesDebitCardToJSON, +} from './DirectDebitChannelPropertiesDebitCard'; + +/** + * + * @export + * @interface DirectDebitChannelProperties + */ +export interface DirectDebitChannelProperties { + /** + * Mobile number of the customer registered to the partner channel + * @type {string} + * @memberof DirectDebitChannelProperties + */ + mobileNumber?: string; + /** + * + * @type {string} + * @memberof DirectDebitChannelProperties + */ + successReturnUrl?: string; + /** + * + * @type {string} + * @memberof DirectDebitChannelProperties + */ + failureReturnUrl?: string; + /** + * + * @type {string} + * @memberof DirectDebitChannelProperties + */ + identityDocumentNumber?: string; + /** + * + * @type {string} + * @memberof DirectDebitChannelProperties + */ + accountNumber?: string; + /** + * Last four digits of the debit card + * @type {string} + * @memberof DirectDebitChannelProperties + */ + cardLastFour?: string; + /** + * Expiry month and year of the debit card (in MM/YY format) + * @type {string} + * @memberof DirectDebitChannelProperties + */ + cardExpiry?: string; + /** + * Email address of the customer that is registered to the partner channel + * @type {string} + * @memberof DirectDebitChannelProperties + */ + email?: string; +} + +/** + * Check if a given object implements the DirectDebitChannelProperties interface. + */ +export function instanceOfDirectDebitChannelProperties(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function DirectDebitChannelPropertiesFromJSON(json: any): DirectDebitChannelProperties { + return DirectDebitChannelPropertiesFromJSONTyped(json, false); +} + +export function DirectDebitChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'mobileNumber': !exists(json, 'mobile_number') ? undefined : json['mobile_number'], + 'successReturnUrl': !exists(json, 'success_return_url') ? undefined : json['success_return_url'], + 'failureReturnUrl': !exists(json, 'failure_return_url') ? undefined : json['failure_return_url'], + 'identityDocumentNumber': !exists(json, 'identity_document_number') ? undefined : json['identity_document_number'], + 'accountNumber': !exists(json, 'account_number') ? undefined : json['account_number'], + 'cardLastFour': !exists(json, 'card_last_four') ? undefined : json['card_last_four'], + 'cardExpiry': !exists(json, 'card_expiry') ? undefined : json['card_expiry'], + 'email': !exists(json, 'email') ? undefined : json['email'], + }; +} + +export function DirectDebitChannelPropertiesToJSON(value?: DirectDebitChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'mobile_number': value.mobileNumber, + 'success_return_url': value.successReturnUrl, + 'failure_return_url': value.failureReturnUrl, + 'identity_document_number': value.identityDocumentNumber, + 'account_number': value.accountNumber, + 'card_last_four': value.cardLastFour, + 'card_expiry': value.cardExpiry, + 'email': value.email, + }; +} + diff --git a/payment_request/models/DirectDebitChannelPropertiesBankAccount.ts b/payment_request/models/DirectDebitChannelPropertiesBankAccount.ts new file mode 100644 index 0000000..f9ec483 --- /dev/null +++ b/payment_request/models/DirectDebitChannelPropertiesBankAccount.ts @@ -0,0 +1,83 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Direct Debit Bank Account Channel Properties + * @export + * @interface DirectDebitChannelPropertiesBankAccount + */ +export interface DirectDebitChannelPropertiesBankAccount { + /** + * + * @type {string} + * @memberof DirectDebitChannelPropertiesBankAccount + */ + successReturnUrl?: string; + /** + * + * @type {string} + * @memberof DirectDebitChannelPropertiesBankAccount + */ + failureReturnUrl?: string; + /** + * + * @type {string} + * @memberof DirectDebitChannelPropertiesBankAccount + */ + mobileNumber?: string; + /** + * + * @type {string} + * @memberof DirectDebitChannelPropertiesBankAccount + */ + identityDocumentNumber?: string; +} + +/** + * Check if a given object implements the DirectDebitChannelPropertiesBankAccount interface. + */ +export function instanceOfDirectDebitChannelPropertiesBankAccount(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function DirectDebitChannelPropertiesBankAccountFromJSON(json: any): DirectDebitChannelPropertiesBankAccount { + return DirectDebitChannelPropertiesBankAccountFromJSONTyped(json, false); +} + +export function DirectDebitChannelPropertiesBankAccountFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitChannelPropertiesBankAccount { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'successReturnUrl': !exists(json, 'success_return_url') ? undefined : json['success_return_url'], + 'failureReturnUrl': !exists(json, 'failure_return_url') ? undefined : json['failure_return_url'], + 'mobileNumber': !exists(json, 'mobile_number') ? undefined : json['mobile_number'], + 'identityDocumentNumber': !exists(json, 'identity_document_number') ? undefined : json['identity_document_number'], + }; +} + +export function DirectDebitChannelPropertiesBankAccountToJSON(value?: DirectDebitChannelPropertiesBankAccount | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'success_return_url': value.successReturnUrl, + 'failure_return_url': value.failureReturnUrl, + 'mobile_number': value.mobileNumber, + 'identity_document_number': value.identityDocumentNumber, + }; +} + diff --git a/payment_request/models/DirectDebitChannelPropertiesBankRedirect.ts b/payment_request/models/DirectDebitChannelPropertiesBankRedirect.ts new file mode 100644 index 0000000..cd0f5f6 --- /dev/null +++ b/payment_request/models/DirectDebitChannelPropertiesBankRedirect.ts @@ -0,0 +1,75 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Direct Debit Bank Account Channel Properties + * @export + * @interface DirectDebitChannelPropertiesBankRedirect + */ +export interface DirectDebitChannelPropertiesBankRedirect { + /** + * Mobile number of the customer that is registered to channel + * @type {string} + * @memberof DirectDebitChannelPropertiesBankRedirect + */ + mobileNumber?: string; + /** + * + * @type {string} + * @memberof DirectDebitChannelPropertiesBankRedirect + */ + successReturnUrl?: string; + /** + * + * @type {string} + * @memberof DirectDebitChannelPropertiesBankRedirect + */ + failureReturnUrl?: string; +} + +/** + * Check if a given object implements the DirectDebitChannelPropertiesBankRedirect interface. + */ +export function instanceOfDirectDebitChannelPropertiesBankRedirect(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function DirectDebitChannelPropertiesBankRedirectFromJSON(json: any): DirectDebitChannelPropertiesBankRedirect { + return DirectDebitChannelPropertiesBankRedirectFromJSONTyped(json, false); +} + +export function DirectDebitChannelPropertiesBankRedirectFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitChannelPropertiesBankRedirect { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'mobileNumber': !exists(json, 'mobile_number') ? undefined : json['mobile_number'], + 'successReturnUrl': !exists(json, 'success_return_url') ? undefined : json['success_return_url'], + 'failureReturnUrl': !exists(json, 'failure_return_url') ? undefined : json['failure_return_url'], + }; +} + +export function DirectDebitChannelPropertiesBankRedirectToJSON(value?: DirectDebitChannelPropertiesBankRedirect | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'mobile_number': value.mobileNumber, + 'success_return_url': value.successReturnUrl, + 'failure_return_url': value.failureReturnUrl, + }; +} + diff --git a/payment_request/models/DirectDebitChannelPropertiesDebitCard.ts b/payment_request/models/DirectDebitChannelPropertiesDebitCard.ts new file mode 100644 index 0000000..84ba2c2 --- /dev/null +++ b/payment_request/models/DirectDebitChannelPropertiesDebitCard.ts @@ -0,0 +1,91 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Direct Debit Debit Card Channel Properties + * @export + * @interface DirectDebitChannelPropertiesDebitCard + */ +export interface DirectDebitChannelPropertiesDebitCard { + /** + * Mobile number of the customer registered to the partner channel + * @type {string} + * @memberof DirectDebitChannelPropertiesDebitCard + */ + mobileNumber?: string; + /** + * + * @type {string} + * @memberof DirectDebitChannelPropertiesDebitCard + */ + accountNumber?: string; + /** + * Last four digits of the debit card + * @type {string} + * @memberof DirectDebitChannelPropertiesDebitCard + */ + cardLastFour?: string; + /** + * Expiry month and year of the debit card (in MM/YY format) + * @type {string} + * @memberof DirectDebitChannelPropertiesDebitCard + */ + cardExpiry?: string; + /** + * Email address of the customer that is registered to the partner channel + * @type {string} + * @memberof DirectDebitChannelPropertiesDebitCard + */ + email?: string; +} + +/** + * Check if a given object implements the DirectDebitChannelPropertiesDebitCard interface. + */ +export function instanceOfDirectDebitChannelPropertiesDebitCard(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function DirectDebitChannelPropertiesDebitCardFromJSON(json: any): DirectDebitChannelPropertiesDebitCard { + return DirectDebitChannelPropertiesDebitCardFromJSONTyped(json, false); +} + +export function DirectDebitChannelPropertiesDebitCardFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitChannelPropertiesDebitCard { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'mobileNumber': !exists(json, 'mobile_number') ? undefined : json['mobile_number'], + 'accountNumber': !exists(json, 'account_number') ? undefined : json['account_number'], + 'cardLastFour': !exists(json, 'card_last_four') ? undefined : json['card_last_four'], + 'cardExpiry': !exists(json, 'card_expiry') ? undefined : json['card_expiry'], + 'email': !exists(json, 'email') ? undefined : json['email'], + }; +} + +export function DirectDebitChannelPropertiesDebitCardToJSON(value?: DirectDebitChannelPropertiesDebitCard | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'mobile_number': value.mobileNumber, + 'account_number': value.accountNumber, + 'card_last_four': value.cardLastFour, + 'card_expiry': value.cardExpiry, + 'email': value.email, + }; +} + diff --git a/payment_request/models/DirectDebitDebitCard.ts b/payment_request/models/DirectDebitDebitCard.ts new file mode 100644 index 0000000..010067b --- /dev/null +++ b/payment_request/models/DirectDebitDebitCard.ts @@ -0,0 +1,91 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface DirectDebitDebitCard + */ +export interface DirectDebitDebitCard { + /** + * Mobile number of the customer registered to the partner channel + * @type {string} + * @memberof DirectDebitDebitCard + */ + mobileNumber?: string | null; + /** + * + * @type {string} + * @memberof DirectDebitDebitCard + */ + accountNumber?: string; + /** + * Last four digits of the debit card + * @type {string} + * @memberof DirectDebitDebitCard + */ + cardLastFour?: string | null; + /** + * Expiry month and year of the debit card (in MM/YY format) + * @type {string} + * @memberof DirectDebitDebitCard + */ + cardExpiry?: string | null; + /** + * Email address of the customer that is registered to the partner channel + * @type {string} + * @memberof DirectDebitDebitCard + */ + email?: string | null; +} + +/** + * Check if a given object implements the DirectDebitDebitCard interface. + */ +export function instanceOfDirectDebitDebitCard(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function DirectDebitDebitCardFromJSON(json: any): DirectDebitDebitCard { + return DirectDebitDebitCardFromJSONTyped(json, false); +} + +export function DirectDebitDebitCardFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitDebitCard { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'mobileNumber': !exists(json, 'mobile_number') ? undefined : json['mobile_number'], + 'accountNumber': !exists(json, 'account_number') ? undefined : json['account_number'], + 'cardLastFour': !exists(json, 'card_last_four') ? undefined : json['card_last_four'], + 'cardExpiry': !exists(json, 'card_expiry') ? undefined : json['card_expiry'], + 'email': !exists(json, 'email') ? undefined : json['email'], + }; +} + +export function DirectDebitDebitCardToJSON(value?: DirectDebitDebitCard | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'mobile_number': value.mobileNumber, + 'account_number': value.accountNumber, + 'card_last_four': value.cardLastFour, + 'card_expiry': value.cardExpiry, + 'email': value.email, + }; +} + diff --git a/payment_request/models/DirectDebitParameters.ts b/payment_request/models/DirectDebitParameters.ts new file mode 100644 index 0000000..26696a5 --- /dev/null +++ b/payment_request/models/DirectDebitParameters.ts @@ -0,0 +1,96 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { DirectDebitChannelCode } from './DirectDebitChannelCode'; +import { + DirectDebitChannelCodeFromJSON, + DirectDebitChannelCodeFromJSONTyped, + DirectDebitChannelCodeToJSON, +} from './DirectDebitChannelCode'; +import type { DirectDebitChannelProperties } from './DirectDebitChannelProperties'; +import { + DirectDebitChannelPropertiesFromJSON, + DirectDebitChannelPropertiesFromJSONTyped, + DirectDebitChannelPropertiesToJSON, +} from './DirectDebitChannelProperties'; +import type { DirectDebitType } from './DirectDebitType'; +import { + DirectDebitTypeFromJSON, + DirectDebitTypeFromJSONTyped, + DirectDebitTypeToJSON, +} from './DirectDebitType'; + +/** + * + * @export + * @interface DirectDebitParameters + */ +export interface DirectDebitParameters { + /** + * + * @type {DirectDebitChannelCode} + * @memberof DirectDebitParameters + */ + channelCode: DirectDebitChannelCode; + /** + * + * @type {DirectDebitChannelProperties} + * @memberof DirectDebitParameters + */ + channelProperties: DirectDebitChannelProperties | null; + /** + * + * @type {DirectDebitType} + * @memberof DirectDebitParameters + */ + type?: DirectDebitType; +} + +/** + * Check if a given object implements the DirectDebitParameters interface. + */ +export function instanceOfDirectDebitParameters(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + + return isInstance; +} + +export function DirectDebitParametersFromJSON(json: any): DirectDebitParameters { + return DirectDebitParametersFromJSONTyped(json, false); +} + +export function DirectDebitParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'channelCode': DirectDebitChannelCodeFromJSON(json['channel_code']), + 'channelProperties': DirectDebitChannelPropertiesFromJSON(json['channel_properties']), + 'type': !exists(json, 'type') ? undefined : DirectDebitTypeFromJSON(json['type']), + }; +} + +export function DirectDebitParametersToJSON(value?: DirectDebitParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'channel_code': DirectDebitChannelCodeToJSON(value.channelCode), + 'channel_properties': DirectDebitChannelPropertiesToJSON(value.channelProperties), + 'type': DirectDebitTypeToJSON(value.type), + }; +} + diff --git a/payment_request/models/DirectDebitType.ts b/payment_request/models/DirectDebitType.ts new file mode 100644 index 0000000..5164ee3 --- /dev/null +++ b/payment_request/models/DirectDebitType.ts @@ -0,0 +1,33 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const DirectDebitType = { + DebitCard: 'DEBIT_CARD', + BankAccount: 'BANK_ACCOUNT', + BankRedirect: 'BANK_REDIRECT' +} as const; +export type DirectDebitType = typeof DirectDebitType[keyof typeof DirectDebitType]; + + +export function DirectDebitTypeFromJSON(json: any): DirectDebitType { + return DirectDebitTypeFromJSONTyped(json, false); +} + +export function DirectDebitTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): DirectDebitType { + return json as DirectDebitType; +} + +export function DirectDebitTypeToJSON(value?: DirectDebitType | null): any { + return value as any; +} + diff --git a/payment_request/models/EWallet.ts b/payment_request/models/EWallet.ts new file mode 100644 index 0000000..01d4f02 --- /dev/null +++ b/payment_request/models/EWallet.ts @@ -0,0 +1,94 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { EWalletAccount } from './EWalletAccount'; +import { + EWalletAccountFromJSON, + EWalletAccountFromJSONTyped, + EWalletAccountToJSON, +} from './EWalletAccount'; +import type { EWalletChannelCode } from './EWalletChannelCode'; +import { + EWalletChannelCodeFromJSON, + EWalletChannelCodeFromJSONTyped, + EWalletChannelCodeToJSON, +} from './EWalletChannelCode'; +import type { EWalletChannelProperties } from './EWalletChannelProperties'; +import { + EWalletChannelPropertiesFromJSON, + EWalletChannelPropertiesFromJSONTyped, + EWalletChannelPropertiesToJSON, +} from './EWalletChannelProperties'; + +/** + * Ewallet Payment Method Details + * @export + * @interface EWallet + */ +export interface EWallet { + /** + * + * @type {EWalletChannelCode} + * @memberof EWallet + */ + channelCode?: EWalletChannelCode; + /** + * + * @type {EWalletChannelProperties} + * @memberof EWallet + */ + channelProperties?: EWalletChannelProperties; + /** + * + * @type {EWalletAccount} + * @memberof EWallet + */ + account?: EWalletAccount; +} + +/** + * Check if a given object implements the EWallet interface. + */ +export function instanceOfEWallet(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function EWalletFromJSON(json: any): EWallet { + return EWalletFromJSONTyped(json, false); +} + +export function EWalletFromJSONTyped(json: any, ignoreDiscriminator: boolean): EWallet { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'channelCode': !exists(json, 'channel_code') ? undefined : EWalletChannelCodeFromJSON(json['channel_code']), + 'channelProperties': !exists(json, 'channel_properties') ? undefined : EWalletChannelPropertiesFromJSON(json['channel_properties']), + 'account': !exists(json, 'account') ? undefined : EWalletAccountFromJSON(json['account']), + }; +} + +export function EWalletToJSON(value?: EWallet | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'channel_code': EWalletChannelCodeToJSON(value.channelCode), + 'channel_properties': EWalletChannelPropertiesToJSON(value.channelProperties), + 'account': EWalletAccountToJSON(value.account), + }; +} + diff --git a/payment_request/models/EWalletAccount.ts b/payment_request/models/EWalletAccount.ts new file mode 100644 index 0000000..1bcc4ad --- /dev/null +++ b/payment_request/models/EWalletAccount.ts @@ -0,0 +1,83 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * EWallet Account Properties + * @export + * @interface EWalletAccount + */ +export interface EWalletAccount { + /** + * Name of the eWallet account holder. The value is null if unavailableName of the eWallet account holder. The value is null if unavailable + * @type {string} + * @memberof EWalletAccount + */ + name?: string | null; + /** + * Identifier from eWallet provider e.g. phone number. The value is null if unavailable + * @type {string} + * @memberof EWalletAccount + */ + accountDetails?: string | null; + /** + * The main balance amount on eWallet account provided from eWallet provider. The value is null if unavailable + * @type {number} + * @memberof EWalletAccount + */ + balance?: number | null; + /** + * The point balance amount on eWallet account. Applicable only on some eWallet provider that has point system. The value is null if unavailabl + * @type {number} + * @memberof EWalletAccount + */ + pointBalance?: number | null; +} + +/** + * Check if a given object implements the EWalletAccount interface. + */ +export function instanceOfEWalletAccount(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function EWalletAccountFromJSON(json: any): EWalletAccount { + return EWalletAccountFromJSONTyped(json, false); +} + +export function EWalletAccountFromJSONTyped(json: any, ignoreDiscriminator: boolean): EWalletAccount { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'name': !exists(json, 'name') ? undefined : json['name'], + 'accountDetails': !exists(json, 'account_details') ? undefined : json['account_details'], + 'balance': !exists(json, 'balance') ? undefined : json['balance'], + 'pointBalance': !exists(json, 'point_balance') ? undefined : json['point_balance'], + }; +} + +export function EWalletAccountToJSON(value?: EWalletAccount | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'name': value.name, + 'account_details': value.accountDetails, + 'balance': value.balance, + 'point_balance': value.pointBalance, + }; +} + diff --git a/payment_request/models/EWalletAllOf.ts b/payment_request/models/EWalletAllOf.ts new file mode 100644 index 0000000..281a887 --- /dev/null +++ b/payment_request/models/EWalletAllOf.ts @@ -0,0 +1,66 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { EWalletAccount } from './EWalletAccount'; +import { + EWalletAccountFromJSON, + EWalletAccountFromJSONTyped, + EWalletAccountToJSON, +} from './EWalletAccount'; + +/** + * + * @export + * @interface EWalletAllOf + */ +export interface EWalletAllOf { + /** + * + * @type {EWalletAccount} + * @memberof EWalletAllOf + */ + account?: EWalletAccount; +} + +/** + * Check if a given object implements the EWalletAllOf interface. + */ +export function instanceOfEWalletAllOf(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function EWalletAllOfFromJSON(json: any): EWalletAllOf { + return EWalletAllOfFromJSONTyped(json, false); +} + +export function EWalletAllOfFromJSONTyped(json: any, ignoreDiscriminator: boolean): EWalletAllOf { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'account': !exists(json, 'account') ? undefined : EWalletAccountFromJSON(json['account']), + }; +} + +export function EWalletAllOfToJSON(value?: EWalletAllOf | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'account': EWalletAccountToJSON(value.account), + }; +} + diff --git a/payment_request/models/EWalletChannelCode.ts b/payment_request/models/EWalletChannelCode.ts new file mode 100644 index 0000000..b9e1bf7 --- /dev/null +++ b/payment_request/models/EWalletChannelCode.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Ewallet Channel Code + * @export + */ +export const EWalletChannelCode = { + Gcash: 'GCASH', + Grabpay: 'GRABPAY', + Paymaya: 'PAYMAYA', + Dana: 'DANA', + Ovo: 'OVO', + Linkaja: 'LINKAJA', + Shopeepay: 'SHOPEEPAY', + Nexcash: 'NEXCASH', + Astrapay: 'ASTRAPAY', + Jeniuspay: 'JENIUSPAY', + Appota: 'APPOTA', + Momo: 'MOMO', + Vnptwallet: 'VNPTWALLET', + Viettelpay: 'VIETTELPAY', + Zalopay: 'ZALOPAY', + Wechatpay: 'WECHATPAY', + Linepay: 'LINEPAY', + Truemoney: 'TRUEMONEY', + Alipay: 'ALIPAY' +} as const; +export type EWalletChannelCode = typeof EWalletChannelCode[keyof typeof EWalletChannelCode]; + + +export function EWalletChannelCodeFromJSON(json: any): EWalletChannelCode { + return EWalletChannelCodeFromJSONTyped(json, false); +} + +export function EWalletChannelCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): EWalletChannelCode { + return json as EWalletChannelCode; +} + +export function EWalletChannelCodeToJSON(value?: EWalletChannelCode | null): any { + return value as any; +} + diff --git a/payment_request/models/EWalletChannelProperties.ts b/payment_request/models/EWalletChannelProperties.ts new file mode 100644 index 0000000..761c547 --- /dev/null +++ b/payment_request/models/EWalletChannelProperties.ts @@ -0,0 +1,99 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Ewallet Channel Properties + * @export + * @interface EWalletChannelProperties + */ +export interface EWalletChannelProperties { + /** + * URL where the end-customer is redirected if the authorization is successful + * @type {string} + * @memberof EWalletChannelProperties + */ + successReturnUrl?: string; + /** + * URL where the end-customer is redirected if the authorization failed + * @type {string} + * @memberof EWalletChannelProperties + */ + failureReturnUrl?: string; + /** + * URL where the end-customer is redirected if the authorization cancelled + * @type {string} + * @memberof EWalletChannelProperties + */ + cancelReturnUrl?: string; + /** + * REDEEM_NONE will not use any point, REDEEM_ALL will use all available points before cash balance is used. For OVO and ShopeePay tokenized payment use only. + * @type {string} + * @memberof EWalletChannelProperties + */ + redeemPoints?: string; + /** + * + * @type {string} + * @memberof EWalletChannelProperties + */ + mobilenumber?: string; + /** + * + * @type {string} + * @memberof EWalletChannelProperties + */ + cashtag?: string; +} + +/** + * Check if a given object implements the EWalletChannelProperties interface. + */ +export function instanceOfEWalletChannelProperties(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function EWalletChannelPropertiesFromJSON(json: any): EWalletChannelProperties { + return EWalletChannelPropertiesFromJSONTyped(json, false); +} + +export function EWalletChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): EWalletChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'successReturnUrl': !exists(json, 'success_return_url') ? undefined : json['success_return_url'], + 'failureReturnUrl': !exists(json, 'failure_return_url') ? undefined : json['failure_return_url'], + 'cancelReturnUrl': !exists(json, 'cancel_return_url') ? undefined : json['cancel_return_url'], + 'redeemPoints': !exists(json, 'redeem_points') ? undefined : json['redeem_points'], + 'mobilenumber': !exists(json, 'mobile:number') ? undefined : json['mobile:number'], + 'cashtag': !exists(json, 'cashtag') ? undefined : json['cashtag'], + }; +} + +export function EWalletChannelPropertiesToJSON(value?: EWalletChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'success_return_url': value.successReturnUrl, + 'failure_return_url': value.failureReturnUrl, + 'cancel_return_url': value.cancelReturnUrl, + 'redeem_points': value.redeemPoints, + 'mobile:number': value.mobilenumber, + 'cashtag': value.cashtag, + }; +} + diff --git a/payment_request/models/EWalletParameters.ts b/payment_request/models/EWalletParameters.ts new file mode 100644 index 0000000..2566587 --- /dev/null +++ b/payment_request/models/EWalletParameters.ts @@ -0,0 +1,80 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { EWalletChannelCode } from './EWalletChannelCode'; +import { + EWalletChannelCodeFromJSON, + EWalletChannelCodeFromJSONTyped, + EWalletChannelCodeToJSON, +} from './EWalletChannelCode'; +import type { EWalletChannelProperties } from './EWalletChannelProperties'; +import { + EWalletChannelPropertiesFromJSON, + EWalletChannelPropertiesFromJSONTyped, + EWalletChannelPropertiesToJSON, +} from './EWalletChannelProperties'; + +/** + * + * @export + * @interface EWalletParameters + */ +export interface EWalletParameters { + /** + * + * @type {EWalletChannelCode} + * @memberof EWalletParameters + */ + channelCode?: EWalletChannelCode; + /** + * + * @type {EWalletChannelProperties} + * @memberof EWalletParameters + */ + channelProperties?: EWalletChannelProperties; +} + +/** + * Check if a given object implements the EWalletParameters interface. + */ +export function instanceOfEWalletParameters(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function EWalletParametersFromJSON(json: any): EWalletParameters { + return EWalletParametersFromJSONTyped(json, false); +} + +export function EWalletParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): EWalletParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'channelCode': !exists(json, 'channel_code') ? undefined : EWalletChannelCodeFromJSON(json['channel_code']), + 'channelProperties': !exists(json, 'channel_properties') ? undefined : EWalletChannelPropertiesFromJSON(json['channel_properties']), + }; +} + +export function EWalletParametersToJSON(value?: EWalletParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'channel_code': EWalletChannelCodeToJSON(value.channelCode), + 'channel_properties': EWalletChannelPropertiesToJSON(value.channelProperties), + }; +} + diff --git a/payment_request/models/ModelError.ts b/payment_request/models/ModelError.ts new file mode 100644 index 0000000..79806ed --- /dev/null +++ b/payment_request/models/ModelError.ts @@ -0,0 +1,131 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface ModelError + */ +export interface ModelError { + /** + * + * @type {string} + * @memberof ModelError + */ + errorCode?: ModelErrorErrorCodeEnum; + /** + * + * @type {string} + * @memberof ModelError + */ + message?: string | null; +} + + +/** + * @export + */ +export const ModelErrorErrorCodeEnum = { + AccountAccessBlocked: 'ACCOUNT_ACCESS_BLOCKED', + AddressValidationFailed: 'ADDRESS_VALIDATION_FAILED', + AmountMismatched: 'AMOUNT_MISMATCHED', + ApiValidationError: 'API_VALIDATION_ERROR', + AuthenticationFailed: 'AUTHENTICATION_FAILED', + AuthenticationRequired: 'AUTHENTICATION_REQUIRED', + CardDeclined: 'CARD_DECLINED', + ChannelCodeNotSupportedError: 'CHANNEL_CODE_NOT_SUPPORTED_ERROR', + ChannelNotActivated: 'CHANNEL_NOT_ACTIVATED', + ChannelUnavailable: 'CHANNEL_UNAVAILABLE', + CofCombinationNotAllowedError: 'COF_COMBINATION_NOT_ALLOWED_ERROR', + CurrencyMismatched: 'CURRENCY_MISMATCHED', + CustomerNotFoundError: 'CUSTOMER_NOT_FOUND_ERROR', + CustomerPaymentMethodMismatched: 'CUSTOMER_PAYMENT_METHOD_MISMATCHED', + DataNotFound: 'DATA_NOT_FOUND', + DataNotFoundError: 'DATA_NOT_FOUND_ERROR', + DeclinedByIssuer: 'DECLINED_BY_ISSUER', + DeclinedByProcessor: 'DECLINED_BY_PROCESSOR', + DeniedPersonListMatched: 'DENIED_PERSON_LIST_MATCHED', + DuplicateError: 'DUPLICATE_ERROR', + DuplicateReference: 'DUPLICATE_REFERENCE', + ExceedsCapturableAmount: 'EXCEEDS_CAPTURABLE_AMOUNT', + ExpiredCard: 'EXPIRED_CARD', + ExpiredOtpError: 'EXPIRED_OTP_ERROR', + FeatureNotActivated: 'FEATURE_NOT_ACTIVATED', + IdempotencyError: 'IDEMPOTENCY_ERROR', + InactiveOrUnauthorizedCard: 'INACTIVE_OR_UNAUTHORIZED_CARD', + InsufficientBalance: 'INSUFFICIENT_BALANCE', + InvalidAccountDetails: 'INVALID_ACCOUNT_DETAILS', + InvalidCvv: 'INVALID_CVV', + InvalidOtpError: 'INVALID_OTP_ERROR', + InvalidPaymentMethod: 'INVALID_PAYMENT_METHOD', + IssuerUnavailable: 'ISSUER_UNAVAILABLE', + ManualCaptureNotSupported: 'MANUAL_CAPTURE_NOT_SUPPORTED', + MaxAccountLinking: 'MAX_ACCOUNT_LINKING', + MaxAmountLimitError: 'MAX_AMOUNT_LIMIT_ERROR', + MaxOtpAttemptsError: 'MAX_OTP_ATTEMPTS_ERROR', + OperationNotAllowed: 'OPERATION_NOT_ALLOWED', + OtpDeliveryError: 'OTP_DELIVERY_ERROR', + PaymentMethodNotFoundError: 'PAYMENT_METHOD_NOT_FOUND_ERROR', + PaymentRequestAlreadyCompleted: 'PAYMENT_REQUEST_ALREADY_COMPLETED', + PaymentRequestAlreadyFailed: 'PAYMENT_REQUEST_ALREADY_FAILED', + PaymentRequestAlreadyFullyCaptured: 'PAYMENT_REQUEST_ALREADY_FULLY_CAPTURED', + PaymentStatusFailed: 'PAYMENT_STATUS_FAILED', + ProcessorConfigurationError: 'PROCESSOR_CONFIGURATION_ERROR', + ProcessorError: 'PROCESSOR_ERROR', + ProcessorTemporarilyUnavailable: 'PROCESSOR_TEMPORARILY_UNAVAILABLE', + ProcessorTimeout: 'PROCESSOR_TIMEOUT', + RejectedByAcquirer: 'REJECTED_BY_ACQUIRER', + ServerError: 'SERVER_ERROR', + StolenCard: 'STOLEN_CARD', + StrongCustomerAuthenticationRequired: 'STRONG_CUSTOMER_AUTHENTICATION_REQUIRED', + SuspectedFraudulent: 'SUSPECTED_FRAUDULENT', + Unauthorized: 'UNAUTHORIZED', + DuplicatedFixedPaymentInstrument: 'DUPLICATED_FIXED_PAYMENT_INSTRUMENT' +} as const; +export type ModelErrorErrorCodeEnum = typeof ModelErrorErrorCodeEnum[keyof typeof ModelErrorErrorCodeEnum]; + + +/** + * Check if a given object implements the ModelError interface. + */ +export function instanceOfModelError(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function ModelErrorFromJSON(json: any): ModelError { + return ModelErrorFromJSONTyped(json, false); +} + +export function ModelErrorFromJSONTyped(json: any, ignoreDiscriminator: boolean): ModelError { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': !exists(json, 'error_code') ? undefined : json['error_code'], + 'message': !exists(json, 'message') ? undefined : json['message'], + }; +} + +export function ModelErrorToJSON(value?: ModelError | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/payment_request/models/OverTheCounter.ts b/payment_request/models/OverTheCounter.ts new file mode 100644 index 0000000..50d14ab --- /dev/null +++ b/payment_request/models/OverTheCounter.ts @@ -0,0 +1,104 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { OverTheCounterChannelCode } from './OverTheCounterChannelCode'; +import { + OverTheCounterChannelCodeFromJSON, + OverTheCounterChannelCodeFromJSONTyped, + OverTheCounterChannelCodeToJSON, +} from './OverTheCounterChannelCode'; +import type { OverTheCounterChannelProperties } from './OverTheCounterChannelProperties'; +import { + OverTheCounterChannelPropertiesFromJSON, + OverTheCounterChannelPropertiesFromJSONTyped, + OverTheCounterChannelPropertiesToJSON, +} from './OverTheCounterChannelProperties'; +import type { PaymentRequestCurrency } from './PaymentRequestCurrency'; +import { + PaymentRequestCurrencyFromJSON, + PaymentRequestCurrencyFromJSONTyped, + PaymentRequestCurrencyToJSON, +} from './PaymentRequestCurrency'; + +/** + * Over the Counter Payment Method Details + * @export + * @interface OverTheCounter + */ +export interface OverTheCounter { + /** + * + * @type {number} + * @memberof OverTheCounter + */ + amount?: number | null; + /** + * + * @type {PaymentRequestCurrency} + * @memberof OverTheCounter + */ + currency?: PaymentRequestCurrency; + /** + * + * @type {OverTheCounterChannelCode} + * @memberof OverTheCounter + */ + channelCode: OverTheCounterChannelCode; + /** + * + * @type {OverTheCounterChannelProperties} + * @memberof OverTheCounter + */ + channelProperties: OverTheCounterChannelProperties; +} + +/** + * Check if a given object implements the OverTheCounter interface. + */ +export function instanceOfOverTheCounter(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + + return isInstance; +} + +export function OverTheCounterFromJSON(json: any): OverTheCounter { + return OverTheCounterFromJSONTyped(json, false); +} + +export function OverTheCounterFromJSONTyped(json: any, ignoreDiscriminator: boolean): OverTheCounter { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'currency': !exists(json, 'currency') ? undefined : PaymentRequestCurrencyFromJSON(json['currency']), + 'channelCode': OverTheCounterChannelCodeFromJSON(json['channel_code']), + 'channelProperties': OverTheCounterChannelPropertiesFromJSON(json['channel_properties']), + }; +} + +export function OverTheCounterToJSON(value?: OverTheCounter | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'amount': value.amount, + 'currency': PaymentRequestCurrencyToJSON(value.currency), + 'channel_code': OverTheCounterChannelCodeToJSON(value.channelCode), + 'channel_properties': OverTheCounterChannelPropertiesToJSON(value.channelProperties), + }; +} + diff --git a/payment_request/models/OverTheCounterChannelCode.ts b/payment_request/models/OverTheCounterChannelCode.ts new file mode 100644 index 0000000..ef95074 --- /dev/null +++ b/payment_request/models/OverTheCounterChannelCode.ts @@ -0,0 +1,46 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Over The Counter Channel Code + * @export + */ +export const OverTheCounterChannelCode = { + _7Eleven: '7ELEVEN', + _7ElevenCliqq: '7ELEVEN_CLIQQ', + Cebuana: 'CEBUANA', + Ecpay: 'ECPAY', + Palawan: 'PALAWAN', + Mlhuillier: 'MLHUILLIER', + EcpayDragonloan: 'ECPAY_DRAGONLOAN', + Lbc: 'LBC', + EcpaySchool: 'ECPAY_SCHOOL', + RdPawnshop: 'RD_PAWNSHOP', + Cvm: 'CVM', + Ussc: 'USSC', + SmBills: 'SM_BILLS', + RobinsonsBills: 'ROBINSONS_BILLS', + Alfamart: 'ALFAMART', + Indomaret: 'INDOMARET' +} as const; +export type OverTheCounterChannelCode = typeof OverTheCounterChannelCode[keyof typeof OverTheCounterChannelCode]; + + +export function OverTheCounterChannelCodeFromJSON(json: any): OverTheCounterChannelCode { + return OverTheCounterChannelCodeFromJSONTyped(json, false); +} + +export function OverTheCounterChannelCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): OverTheCounterChannelCode { + return json as OverTheCounterChannelCode; +} + +export function OverTheCounterChannelCodeToJSON(value?: OverTheCounterChannelCode | null): any { + return value as any; +} + diff --git a/payment_request/models/OverTheCounterChannelProperties.ts b/payment_request/models/OverTheCounterChannelProperties.ts new file mode 100644 index 0000000..2ab46f8 --- /dev/null +++ b/payment_request/models/OverTheCounterChannelProperties.ts @@ -0,0 +1,76 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Over The Counter Channel Properties + * @export + * @interface OverTheCounterChannelProperties + */ +export interface OverTheCounterChannelProperties { + /** + * The payment code that you want to assign, e.g 12345. If you do not send one, one will be picked at random. + * @type {string} + * @memberof OverTheCounterChannelProperties + */ + paymentCode?: string; + /** + * Name of customer. + * @type {string} + * @memberof OverTheCounterChannelProperties + */ + customerName: string; + /** + * The time when the payment code will be expired. The minimum is 2 hours and the maximum is 9 days for 7ELEVEN. Default expired date will be 2 days from payment code generated. + * @type {Date} + * @memberof OverTheCounterChannelProperties + */ + expiresAt?: Date; +} + +/** + * Check if a given object implements the OverTheCounterChannelProperties interface. + */ +export function instanceOfOverTheCounterChannelProperties(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "customerName" in value; + + return isInstance; +} + +export function OverTheCounterChannelPropertiesFromJSON(json: any): OverTheCounterChannelProperties { + return OverTheCounterChannelPropertiesFromJSONTyped(json, false); +} + +export function OverTheCounterChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): OverTheCounterChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'paymentCode': !exists(json, 'payment_code') ? undefined : json['payment_code'], + 'customerName': json['customer_name'], + 'expiresAt': !exists(json, 'expires_at') ? undefined : (new Date(json['expires_at'])), + }; +} + +export function OverTheCounterChannelPropertiesToJSON(value?: OverTheCounterChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'payment_code': value.paymentCode, + 'customer_name': value.customerName, + 'expires_at': value.expiresAt === undefined ? undefined : (value.expiresAt.toISOString()), + }; +} + diff --git a/payment_request/models/OverTheCounterParameters.ts b/payment_request/models/OverTheCounterParameters.ts new file mode 100644 index 0000000..c25b7dd --- /dev/null +++ b/payment_request/models/OverTheCounterParameters.ts @@ -0,0 +1,104 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { OverTheCounterChannelCode } from './OverTheCounterChannelCode'; +import { + OverTheCounterChannelCodeFromJSON, + OverTheCounterChannelCodeFromJSONTyped, + OverTheCounterChannelCodeToJSON, +} from './OverTheCounterChannelCode'; +import type { OverTheCounterChannelProperties } from './OverTheCounterChannelProperties'; +import { + OverTheCounterChannelPropertiesFromJSON, + OverTheCounterChannelPropertiesFromJSONTyped, + OverTheCounterChannelPropertiesToJSON, +} from './OverTheCounterChannelProperties'; +import type { PaymentRequestCurrency } from './PaymentRequestCurrency'; +import { + PaymentRequestCurrencyFromJSON, + PaymentRequestCurrencyFromJSONTyped, + PaymentRequestCurrencyToJSON, +} from './PaymentRequestCurrency'; + +/** + * + * @export + * @interface OverTheCounterParameters + */ +export interface OverTheCounterParameters { + /** + * + * @type {number} + * @memberof OverTheCounterParameters + */ + amount?: number | null; + /** + * + * @type {PaymentRequestCurrency} + * @memberof OverTheCounterParameters + */ + currency?: PaymentRequestCurrency; + /** + * + * @type {OverTheCounterChannelCode} + * @memberof OverTheCounterParameters + */ + channelCode: OverTheCounterChannelCode; + /** + * + * @type {OverTheCounterChannelProperties} + * @memberof OverTheCounterParameters + */ + channelProperties: OverTheCounterChannelProperties; +} + +/** + * Check if a given object implements the OverTheCounterParameters interface. + */ +export function instanceOfOverTheCounterParameters(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + + return isInstance; +} + +export function OverTheCounterParametersFromJSON(json: any): OverTheCounterParameters { + return OverTheCounterParametersFromJSONTyped(json, false); +} + +export function OverTheCounterParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): OverTheCounterParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'currency': !exists(json, 'currency') ? undefined : PaymentRequestCurrencyFromJSON(json['currency']), + 'channelCode': OverTheCounterChannelCodeFromJSON(json['channel_code']), + 'channelProperties': OverTheCounterChannelPropertiesFromJSON(json['channel_properties']), + }; +} + +export function OverTheCounterParametersToJSON(value?: OverTheCounterParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'amount': value.amount, + 'currency': PaymentRequestCurrencyToJSON(value.currency), + 'channel_code': OverTheCounterChannelCodeToJSON(value.channelCode), + 'channel_properties': OverTheCounterChannelPropertiesToJSON(value.channelProperties), + }; +} + diff --git a/payment_request/models/PaymentMethod.ts b/payment_request/models/PaymentMethod.ts new file mode 100644 index 0000000..089c6a1 --- /dev/null +++ b/payment_request/models/PaymentMethod.ts @@ -0,0 +1,230 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { Card } from './Card'; +import { + CardFromJSON, + CardFromJSONTyped, + CardToJSON, +} from './Card'; +import type { DirectDebit } from './DirectDebit'; +import { + DirectDebitFromJSON, + DirectDebitFromJSONTyped, + DirectDebitToJSON, +} from './DirectDebit'; +import type { EWallet } from './EWallet'; +import { + EWalletFromJSON, + EWalletFromJSONTyped, + EWalletToJSON, +} from './EWallet'; +import type { OverTheCounter } from './OverTheCounter'; +import { + OverTheCounterFromJSON, + OverTheCounterFromJSONTyped, + OverTheCounterToJSON, +} from './OverTheCounter'; +import type { PaymentMethodReusability } from './PaymentMethodReusability'; +import { + PaymentMethodReusabilityFromJSON, + PaymentMethodReusabilityFromJSONTyped, + PaymentMethodReusabilityToJSON, +} from './PaymentMethodReusability'; +import type { PaymentMethodStatus } from './PaymentMethodStatus'; +import { + PaymentMethodStatusFromJSON, + PaymentMethodStatusFromJSONTyped, + PaymentMethodStatusToJSON, +} from './PaymentMethodStatus'; +import type { PaymentMethodType } from './PaymentMethodType'; +import { + PaymentMethodTypeFromJSON, + PaymentMethodTypeFromJSONTyped, + PaymentMethodTypeToJSON, +} from './PaymentMethodType'; +import type { QRCode } from './QRCode'; +import { + QRCodeFromJSON, + QRCodeFromJSONTyped, + QRCodeToJSON, +} from './QRCode'; +import type { VirtualAccount } from './VirtualAccount'; +import { + VirtualAccountFromJSON, + VirtualAccountFromJSONTyped, + VirtualAccountToJSON, +} from './VirtualAccount'; + +/** + * + * @export + * @interface PaymentMethod + */ +export interface PaymentMethod { + /** + * + * @type {string} + * @memberof PaymentMethod + */ + id: string; + /** + * + * @type {PaymentMethodType} + * @memberof PaymentMethod + */ + type: PaymentMethodType; + /** + * + * @type {string} + * @memberof PaymentMethod + */ + created?: string; + /** + * + * @type {string} + * @memberof PaymentMethod + */ + updated?: string; + /** + * + * @type {string} + * @memberof PaymentMethod + */ + description?: string | null; + /** + * + * @type {string} + * @memberof PaymentMethod + */ + referenceId?: string; + /** + * + * @type {Card} + * @memberof PaymentMethod + */ + card?: Card | null; + /** + * + * @type {DirectDebit} + * @memberof PaymentMethod + */ + directDebit?: DirectDebit | null; + /** + * + * @type {EWallet} + * @memberof PaymentMethod + */ + ewallet?: EWallet | null; + /** + * + * @type {OverTheCounter} + * @memberof PaymentMethod + */ + overTheCounter?: OverTheCounter | null; + /** + * + * @type {VirtualAccount} + * @memberof PaymentMethod + */ + virtualAccount?: VirtualAccount | null; + /** + * + * @type {QRCode} + * @memberof PaymentMethod + */ + qrCode?: QRCode | null; + /** + * + * @type {PaymentMethodReusability} + * @memberof PaymentMethod + */ + reusability: PaymentMethodReusability; + /** + * + * @type {PaymentMethodStatus} + * @memberof PaymentMethod + */ + status: PaymentMethodStatus; + /** + * + * @type {object} + * @memberof PaymentMethod + */ + metadata?: object | null; +} + +/** + * Check if a given object implements the PaymentMethod interface. + */ +export function instanceOfPaymentMethod(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "id" in value; + isInstance = isInstance && "type" in value; + isInstance = isInstance && "reusability" in value; + isInstance = isInstance && "status" in value; + + return isInstance; +} + +export function PaymentMethodFromJSON(json: any): PaymentMethod { + return PaymentMethodFromJSONTyped(json, false); +} + +export function PaymentMethodFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethod { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'id': json['id'], + 'type': PaymentMethodTypeFromJSON(json['type']), + 'created': !exists(json, 'created') ? undefined : json['created'], + 'updated': !exists(json, 'updated') ? undefined : json['updated'], + 'description': !exists(json, 'description') ? undefined : json['description'], + 'referenceId': !exists(json, 'reference_id') ? undefined : json['reference_id'], + 'card': !exists(json, 'card') ? undefined : CardFromJSON(json['card']), + 'directDebit': !exists(json, 'direct_debit') ? undefined : DirectDebitFromJSON(json['direct_debit']), + 'ewallet': !exists(json, 'ewallet') ? undefined : EWalletFromJSON(json['ewallet']), + 'overTheCounter': !exists(json, 'over_the_counter') ? undefined : OverTheCounterFromJSON(json['over_the_counter']), + 'virtualAccount': !exists(json, 'virtual_account') ? undefined : VirtualAccountFromJSON(json['virtual_account']), + 'qrCode': !exists(json, 'qr_code') ? undefined : QRCodeFromJSON(json['qr_code']), + 'reusability': PaymentMethodReusabilityFromJSON(json['reusability']), + 'status': PaymentMethodStatusFromJSON(json['status']), + 'metadata': !exists(json, 'metadata') ? undefined : json['metadata'], + }; +} + +export function PaymentMethodToJSON(value?: PaymentMethod | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'id': value.id, + 'type': PaymentMethodTypeToJSON(value.type), + 'created': value.created, + 'updated': value.updated, + 'description': value.description, + 'reference_id': value.referenceId, + 'card': CardToJSON(value.card), + 'direct_debit': DirectDebitToJSON(value.directDebit), + 'ewallet': EWalletToJSON(value.ewallet), + 'over_the_counter': OverTheCounterToJSON(value.overTheCounter), + 'virtual_account': VirtualAccountToJSON(value.virtualAccount), + 'qr_code': QRCodeToJSON(value.qrCode), + 'reusability': PaymentMethodReusabilityToJSON(value.reusability), + 'status': PaymentMethodStatusToJSON(value.status), + 'metadata': value.metadata, + }; +} + diff --git a/payment_request/models/PaymentMethodParameters.ts b/payment_request/models/PaymentMethodParameters.ts new file mode 100644 index 0000000..072e71c --- /dev/null +++ b/payment_request/models/PaymentMethodParameters.ts @@ -0,0 +1,168 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { DirectDebitParameters } from './DirectDebitParameters'; +import { + DirectDebitParametersFromJSON, + DirectDebitParametersFromJSONTyped, + DirectDebitParametersToJSON, +} from './DirectDebitParameters'; +import type { EWalletParameters } from './EWalletParameters'; +import { + EWalletParametersFromJSON, + EWalletParametersFromJSONTyped, + EWalletParametersToJSON, +} from './EWalletParameters'; +import type { OverTheCounterParameters } from './OverTheCounterParameters'; +import { + OverTheCounterParametersFromJSON, + OverTheCounterParametersFromJSONTyped, + OverTheCounterParametersToJSON, +} from './OverTheCounterParameters'; +import type { PaymentMethodReusability } from './PaymentMethodReusability'; +import { + PaymentMethodReusabilityFromJSON, + PaymentMethodReusabilityFromJSONTyped, + PaymentMethodReusabilityToJSON, +} from './PaymentMethodReusability'; +import type { PaymentMethodType } from './PaymentMethodType'; +import { + PaymentMethodTypeFromJSON, + PaymentMethodTypeFromJSONTyped, + PaymentMethodTypeToJSON, +} from './PaymentMethodType'; +import type { QRCodeParameters } from './QRCodeParameters'; +import { + QRCodeParametersFromJSON, + QRCodeParametersFromJSONTyped, + QRCodeParametersToJSON, +} from './QRCodeParameters'; +import type { VirtualAccountParameters } from './VirtualAccountParameters'; +import { + VirtualAccountParametersFromJSON, + VirtualAccountParametersFromJSONTyped, + VirtualAccountParametersToJSON, +} from './VirtualAccountParameters'; + +/** + * + * @export + * @interface PaymentMethodParameters + */ +export interface PaymentMethodParameters { + /** + * + * @type {PaymentMethodType} + * @memberof PaymentMethodParameters + */ + type: PaymentMethodType; + /** + * + * @type {PaymentMethodReusability} + * @memberof PaymentMethodParameters + */ + reusability: PaymentMethodReusability; + /** + * + * @type {string} + * @memberof PaymentMethodParameters + */ + description?: string | null; + /** + * + * @type {string} + * @memberof PaymentMethodParameters + */ + referenceId?: string; + /** + * + * @type {DirectDebitParameters} + * @memberof PaymentMethodParameters + */ + directDebit?: DirectDebitParameters | null; + /** + * + * @type {EWalletParameters} + * @memberof PaymentMethodParameters + */ + ewallet?: EWalletParameters | null; + /** + * + * @type {OverTheCounterParameters} + * @memberof PaymentMethodParameters + */ + overTheCounter?: OverTheCounterParameters | null; + /** + * + * @type {VirtualAccountParameters} + * @memberof PaymentMethodParameters + */ + virtualAccount?: VirtualAccountParameters | null; + /** + * + * @type {QRCodeParameters} + * @memberof PaymentMethodParameters + */ + qrCode?: QRCodeParameters | null; +} + +/** + * Check if a given object implements the PaymentMethodParameters interface. + */ +export function instanceOfPaymentMethodParameters(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "type" in value; + isInstance = isInstance && "reusability" in value; + + return isInstance; +} + +export function PaymentMethodParametersFromJSON(json: any): PaymentMethodParameters { + return PaymentMethodParametersFromJSONTyped(json, false); +} + +export function PaymentMethodParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethodParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'type': PaymentMethodTypeFromJSON(json['type']), + 'reusability': PaymentMethodReusabilityFromJSON(json['reusability']), + 'description': !exists(json, 'description') ? undefined : json['description'], + 'referenceId': !exists(json, 'reference_id') ? undefined : json['reference_id'], + 'directDebit': !exists(json, 'direct_debit') ? undefined : DirectDebitParametersFromJSON(json['direct_debit']), + 'ewallet': !exists(json, 'ewallet') ? undefined : EWalletParametersFromJSON(json['ewallet']), + 'overTheCounter': !exists(json, 'over_the_counter') ? undefined : OverTheCounterParametersFromJSON(json['over_the_counter']), + 'virtualAccount': !exists(json, 'virtual_account') ? undefined : VirtualAccountParametersFromJSON(json['virtual_account']), + 'qrCode': !exists(json, 'qr_code') ? undefined : QRCodeParametersFromJSON(json['qr_code']), + }; +} + +export function PaymentMethodParametersToJSON(value?: PaymentMethodParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'type': PaymentMethodTypeToJSON(value.type), + 'reusability': PaymentMethodReusabilityToJSON(value.reusability), + 'description': value.description, + 'reference_id': value.referenceId, + 'direct_debit': DirectDebitParametersToJSON(value.directDebit), + 'ewallet': EWalletParametersToJSON(value.ewallet), + 'over_the_counter': OverTheCounterParametersToJSON(value.overTheCounter), + 'virtual_account': VirtualAccountParametersToJSON(value.virtualAccount), + 'qr_code': QRCodeParametersToJSON(value.qrCode), + }; +} + diff --git a/payment_request/models/PaymentMethodReusability.ts b/payment_request/models/PaymentMethodReusability.ts new file mode 100644 index 0000000..f085d23 --- /dev/null +++ b/payment_request/models/PaymentMethodReusability.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const PaymentMethodReusability = { + MultipleUse: 'MULTIPLE_USE', + OneTimeUse: 'ONE_TIME_USE' +} as const; +export type PaymentMethodReusability = typeof PaymentMethodReusability[keyof typeof PaymentMethodReusability]; + + +export function PaymentMethodReusabilityFromJSON(json: any): PaymentMethodReusability { + return PaymentMethodReusabilityFromJSONTyped(json, false); +} + +export function PaymentMethodReusabilityFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethodReusability { + return json as PaymentMethodReusability; +} + +export function PaymentMethodReusabilityToJSON(value?: PaymentMethodReusability | null): any { + return value as any; +} + diff --git a/payment_request/models/PaymentMethodStatus.ts b/payment_request/models/PaymentMethodStatus.ts new file mode 100644 index 0000000..e3c4875 --- /dev/null +++ b/payment_request/models/PaymentMethodStatus.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const PaymentMethodStatus = { + Active: 'ACTIVE', + Inactive: 'INACTIVE', + Pending: 'PENDING', + Expired: 'EXPIRED', + Failed: 'FAILED' +} as const; +export type PaymentMethodStatus = typeof PaymentMethodStatus[keyof typeof PaymentMethodStatus]; + + +export function PaymentMethodStatusFromJSON(json: any): PaymentMethodStatus { + return PaymentMethodStatusFromJSONTyped(json, false); +} + +export function PaymentMethodStatusFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethodStatus { + return json as PaymentMethodStatus; +} + +export function PaymentMethodStatusToJSON(value?: PaymentMethodStatus | null): any { + return value as any; +} + diff --git a/payment_request/models/PaymentMethodType.ts b/payment_request/models/PaymentMethodType.ts new file mode 100644 index 0000000..e3b3c42 --- /dev/null +++ b/payment_request/models/PaymentMethodType.ts @@ -0,0 +1,36 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const PaymentMethodType = { + Card: 'CARD', + DirectDebit: 'DIRECT_DEBIT', + Ewallet: 'EWALLET', + OverTheCounter: 'OVER_THE_COUNTER', + QrCode: 'QR_CODE', + VirtualAccount: 'VIRTUAL_ACCOUNT' +} as const; +export type PaymentMethodType = typeof PaymentMethodType[keyof typeof PaymentMethodType]; + + +export function PaymentMethodTypeFromJSON(json: any): PaymentMethodType { + return PaymentMethodTypeFromJSONTyped(json, false); +} + +export function PaymentMethodTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentMethodType { + return json as PaymentMethodType; +} + +export function PaymentMethodTypeToJSON(value?: PaymentMethodType | null): any { + return value as any; +} + diff --git a/payment_request/models/PaymentRequest.ts b/payment_request/models/PaymentRequest.ts new file mode 100644 index 0000000..db2efd7 --- /dev/null +++ b/payment_request/models/PaymentRequest.ts @@ -0,0 +1,304 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { PaymentMethod } from './PaymentMethod'; +import { + PaymentMethodFromJSON, + PaymentMethodFromJSONTyped, + PaymentMethodToJSON, +} from './PaymentMethod'; +import type { PaymentRequestAction } from './PaymentRequestAction'; +import { + PaymentRequestActionFromJSON, + PaymentRequestActionFromJSONTyped, + PaymentRequestActionToJSON, +} from './PaymentRequestAction'; +import type { PaymentRequestBasketItem } from './PaymentRequestBasketItem'; +import { + PaymentRequestBasketItemFromJSON, + PaymentRequestBasketItemFromJSONTyped, + PaymentRequestBasketItemToJSON, +} from './PaymentRequestBasketItem'; +import type { PaymentRequestCaptureMethod } from './PaymentRequestCaptureMethod'; +import { + PaymentRequestCaptureMethodFromJSON, + PaymentRequestCaptureMethodFromJSONTyped, + PaymentRequestCaptureMethodToJSON, +} from './PaymentRequestCaptureMethod'; +import type { PaymentRequestCardVerificationResults } from './PaymentRequestCardVerificationResults'; +import { + PaymentRequestCardVerificationResultsFromJSON, + PaymentRequestCardVerificationResultsFromJSONTyped, + PaymentRequestCardVerificationResultsToJSON, +} from './PaymentRequestCardVerificationResults'; +import type { PaymentRequestCountry } from './PaymentRequestCountry'; +import { + PaymentRequestCountryFromJSON, + PaymentRequestCountryFromJSONTyped, + PaymentRequestCountryToJSON, +} from './PaymentRequestCountry'; +import type { PaymentRequestCurrency } from './PaymentRequestCurrency'; +import { + PaymentRequestCurrencyFromJSON, + PaymentRequestCurrencyFromJSONTyped, + PaymentRequestCurrencyToJSON, +} from './PaymentRequestCurrency'; +import type { PaymentRequestInitiator } from './PaymentRequestInitiator'; +import { + PaymentRequestInitiatorFromJSON, + PaymentRequestInitiatorFromJSONTyped, + PaymentRequestInitiatorToJSON, +} from './PaymentRequestInitiator'; +import type { PaymentRequestShippingInformation } from './PaymentRequestShippingInformation'; +import { + PaymentRequestShippingInformationFromJSON, + PaymentRequestShippingInformationFromJSONTyped, + PaymentRequestShippingInformationToJSON, +} from './PaymentRequestShippingInformation'; +import type { PaymentRequestStatus } from './PaymentRequestStatus'; +import { + PaymentRequestStatusFromJSON, + PaymentRequestStatusFromJSONTyped, + PaymentRequestStatusToJSON, +} from './PaymentRequestStatus'; + +/** + * + * @export + * @interface PaymentRequest + */ +export interface PaymentRequest { + /** + * + * @type {string} + * @memberof PaymentRequest + */ + id: string; + /** + * + * @type {string} + * @memberof PaymentRequest + */ + created: string; + /** + * + * @type {string} + * @memberof PaymentRequest + */ + updated: string; + /** + * + * @type {string} + * @memberof PaymentRequest + */ + referenceId: string; + /** + * + * @type {string} + * @memberof PaymentRequest + */ + businessId: string; + /** + * + * @type {string} + * @memberof PaymentRequest + */ + customerId?: string | null; + /** + * + * @type {object} + * @memberof PaymentRequest + */ + customer?: object | null; + /** + * + * @type {number} + * @memberof PaymentRequest + */ + amount?: number; + /** + * + * @type {number} + * @memberof PaymentRequest + */ + minAmount?: number | null; + /** + * + * @type {number} + * @memberof PaymentRequest + */ + maxAmount?: number | null; + /** + * + * @type {PaymentRequestCountry} + * @memberof PaymentRequest + */ + country?: PaymentRequestCountry; + /** + * + * @type {PaymentRequestCurrency} + * @memberof PaymentRequest + */ + currency: PaymentRequestCurrency; + /** + * + * @type {PaymentMethod} + * @memberof PaymentRequest + */ + paymentMethod: PaymentMethod; + /** + * + * @type {string} + * @memberof PaymentRequest + */ + description?: string | null; + /** + * + * @type {string} + * @memberof PaymentRequest + */ + failureCode?: string | null; + /** + * + * @type {PaymentRequestCaptureMethod} + * @memberof PaymentRequest + */ + captureMethod?: PaymentRequestCaptureMethod | null; + /** + * + * @type {PaymentRequestInitiator} + * @memberof PaymentRequest + */ + initiator?: PaymentRequestInitiator | null; + /** + * + * @type {PaymentRequestCardVerificationResults} + * @memberof PaymentRequest + */ + cardVerificationResults?: PaymentRequestCardVerificationResults | null; + /** + * + * @type {PaymentRequestStatus} + * @memberof PaymentRequest + */ + status: PaymentRequestStatus; + /** + * + * @type {Array} + * @memberof PaymentRequest + */ + actions?: Array; + /** + * + * @type {object} + * @memberof PaymentRequest + */ + metadata?: object | null; + /** + * + * @type {PaymentRequestShippingInformation} + * @memberof PaymentRequest + */ + shippingInformation?: PaymentRequestShippingInformation | null; + /** + * + * @type {Array} + * @memberof PaymentRequest + */ + items?: Array | null; +} + +/** + * Check if a given object implements the PaymentRequest interface. + */ +export function instanceOfPaymentRequest(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "id" in value; + isInstance = isInstance && "created" in value; + isInstance = isInstance && "updated" in value; + isInstance = isInstance && "referenceId" in value; + isInstance = isInstance && "businessId" in value; + isInstance = isInstance && "currency" in value; + isInstance = isInstance && "paymentMethod" in value; + isInstance = isInstance && "status" in value; + + return isInstance; +} + +export function PaymentRequestFromJSON(json: any): PaymentRequest { + return PaymentRequestFromJSONTyped(json, false); +} + +export function PaymentRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequest { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'id': json['id'], + 'created': json['created'], + 'updated': json['updated'], + 'referenceId': json['reference_id'], + 'businessId': json['business_id'], + 'customerId': !exists(json, 'customer_id') ? undefined : json['customer_id'], + 'customer': !exists(json, 'customer') ? undefined : json['customer'], + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'minAmount': !exists(json, 'min_amount') ? undefined : json['min_amount'], + 'maxAmount': !exists(json, 'max_amount') ? undefined : json['max_amount'], + 'country': !exists(json, 'country') ? undefined : PaymentRequestCountryFromJSON(json['country']), + 'currency': PaymentRequestCurrencyFromJSON(json['currency']), + 'paymentMethod': PaymentMethodFromJSON(json['payment_method']), + 'description': !exists(json, 'description') ? undefined : json['description'], + 'failureCode': !exists(json, 'failure_code') ? undefined : json['failure_code'], + 'captureMethod': !exists(json, 'capture_method') ? undefined : PaymentRequestCaptureMethodFromJSON(json['capture_method']), + 'initiator': !exists(json, 'initiator') ? undefined : PaymentRequestInitiatorFromJSON(json['initiator']), + 'cardVerificationResults': !exists(json, 'card_verification_results') ? undefined : PaymentRequestCardVerificationResultsFromJSON(json['card_verification_results']), + 'status': PaymentRequestStatusFromJSON(json['status']), + 'actions': !exists(json, 'actions') ? undefined : ((json['actions'] as Array).map(PaymentRequestActionFromJSON)), + 'metadata': !exists(json, 'metadata') ? undefined : json['metadata'], + 'shippingInformation': !exists(json, 'shipping_information') ? undefined : PaymentRequestShippingInformationFromJSON(json['shipping_information']), + 'items': !exists(json, 'items') ? undefined : (json['items'] === null ? null : (json['items'] as Array).map(PaymentRequestBasketItemFromJSON)), + }; +} + +export function PaymentRequestToJSON(value?: PaymentRequest | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'id': value.id, + 'created': value.created, + 'updated': value.updated, + 'reference_id': value.referenceId, + 'business_id': value.businessId, + 'customer_id': value.customerId, + 'customer': value.customer, + 'amount': value.amount, + 'min_amount': value.minAmount, + 'max_amount': value.maxAmount, + 'country': PaymentRequestCountryToJSON(value.country), + 'currency': PaymentRequestCurrencyToJSON(value.currency), + 'payment_method': PaymentMethodToJSON(value.paymentMethod), + 'description': value.description, + 'failure_code': value.failureCode, + 'capture_method': PaymentRequestCaptureMethodToJSON(value.captureMethod), + 'initiator': PaymentRequestInitiatorToJSON(value.initiator), + 'card_verification_results': PaymentRequestCardVerificationResultsToJSON(value.cardVerificationResults), + 'status': PaymentRequestStatusToJSON(value.status), + 'actions': value.actions === undefined ? undefined : ((value.actions as Array).map(PaymentRequestActionToJSON)), + 'metadata': value.metadata, + 'shipping_information': PaymentRequestShippingInformationToJSON(value.shippingInformation), + 'items': value.items === undefined ? undefined : (value.items === null ? null : (value.items as Array).map(PaymentRequestBasketItemToJSON)), + }; +} + diff --git a/payment_request/models/PaymentRequestAction.ts b/payment_request/models/PaymentRequestAction.ts new file mode 100644 index 0000000..4eed961 --- /dev/null +++ b/payment_request/models/PaymentRequestAction.ts @@ -0,0 +1,121 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface PaymentRequestAction + */ +export interface PaymentRequestAction { + /** + * + * @type {string} + * @memberof PaymentRequestAction + */ + action: PaymentRequestActionActionEnum; + /** + * + * @type {string} + * @memberof PaymentRequestAction + */ + urlType: PaymentRequestActionUrlTypeEnum; + /** + * + * @type {string} + * @memberof PaymentRequestAction + */ + method: string | null; + /** + * + * @type {string} + * @memberof PaymentRequestAction + */ + url: string | null; + /** + * + * @type {string} + * @memberof PaymentRequestAction + */ + qrCode: string | null; +} + + +/** + * @export + */ +export const PaymentRequestActionActionEnum = { + Auth: 'AUTH', + ResendAuth: 'RESEND_AUTH', + Capture: 'CAPTURE', + Cancel: 'CANCEL', + PresentToCustomer: 'PRESENT_TO_CUSTOMER' +} as const; +export type PaymentRequestActionActionEnum = typeof PaymentRequestActionActionEnum[keyof typeof PaymentRequestActionActionEnum]; + +/** + * @export + */ +export const PaymentRequestActionUrlTypeEnum = { + Api: 'API', + Web: 'WEB', + Mobile: 'MOBILE', + Deeplink: 'DEEPLINK' +} as const; +export type PaymentRequestActionUrlTypeEnum = typeof PaymentRequestActionUrlTypeEnum[keyof typeof PaymentRequestActionUrlTypeEnum]; + + +/** + * Check if a given object implements the PaymentRequestAction interface. + */ +export function instanceOfPaymentRequestAction(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "action" in value; + isInstance = isInstance && "urlType" in value; + isInstance = isInstance && "method" in value; + isInstance = isInstance && "url" in value; + isInstance = isInstance && "qrCode" in value; + + return isInstance; +} + +export function PaymentRequestActionFromJSON(json: any): PaymentRequestAction { + return PaymentRequestActionFromJSONTyped(json, false); +} + +export function PaymentRequestActionFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestAction { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'action': json['action'], + 'urlType': json['url_type'], + 'method': json['method'], + 'url': json['url'], + 'qrCode': json['qr_code'], + }; +} + +export function PaymentRequestActionToJSON(value?: PaymentRequestAction | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'action': value.action, + 'url_type': value.urlType, + 'method': value.method, + 'url': value.url, + 'qr_code': value.qrCode, + }; +} + diff --git a/payment_request/models/PaymentRequestAuthParameters.ts b/payment_request/models/PaymentRequestAuthParameters.ts new file mode 100644 index 0000000..7fec698 --- /dev/null +++ b/payment_request/models/PaymentRequestAuthParameters.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface PaymentRequestAuthParameters + */ +export interface PaymentRequestAuthParameters { + /** + * + * @type {string} + * @memberof PaymentRequestAuthParameters + */ + authCode: string; +} + +/** + * Check if a given object implements the PaymentRequestAuthParameters interface. + */ +export function instanceOfPaymentRequestAuthParameters(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "authCode" in value; + + return isInstance; +} + +export function PaymentRequestAuthParametersFromJSON(json: any): PaymentRequestAuthParameters { + return PaymentRequestAuthParametersFromJSONTyped(json, false); +} + +export function PaymentRequestAuthParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestAuthParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'authCode': json['auth_code'], + }; +} + +export function PaymentRequestAuthParametersToJSON(value?: PaymentRequestAuthParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'auth_code': value.authCode, + }; +} + diff --git a/payment_request/models/PaymentRequestBasketItem.ts b/payment_request/models/PaymentRequestBasketItem.ts new file mode 100644 index 0000000..15d9df4 --- /dev/null +++ b/payment_request/models/PaymentRequestBasketItem.ts @@ -0,0 +1,160 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface PaymentRequestBasketItem + */ +export interface PaymentRequestBasketItem { + /** + * + * @type {string} + * @memberof PaymentRequestBasketItem + */ + referenceId?: string; + /** + * + * @type {string} + * @memberof PaymentRequestBasketItem + */ + name: string; + /** + * + * @type {string} + * @memberof PaymentRequestBasketItem + */ + description?: string; + /** + * + * @type {string} + * @memberof PaymentRequestBasketItem + */ + type?: string; + /** + * + * @type {string} + * @memberof PaymentRequestBasketItem + */ + category: string; + /** + * + * @type {string} + * @memberof PaymentRequestBasketItem + */ + subCategory?: string; + /** + * + * @type {string} + * @memberof PaymentRequestBasketItem + */ + currency: string; + /** + * + * @type {number} + * @memberof PaymentRequestBasketItem + */ + quantity: number; + /** + * + * @type {number} + * @memberof PaymentRequestBasketItem + */ + price: number; + /** + * + * @type {string} + * @memberof PaymentRequestBasketItem + */ + payerChargedCurrency?: string; + /** + * + * @type {number} + * @memberof PaymentRequestBasketItem + */ + payerChargedPrice?: number; + /** + * + * @type {string} + * @memberof PaymentRequestBasketItem + */ + url?: string; + /** + * + * @type {object} + * @memberof PaymentRequestBasketItem + */ + metadata?: object; +} + +/** + * Check if a given object implements the PaymentRequestBasketItem interface. + */ +export function instanceOfPaymentRequestBasketItem(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "name" in value; + isInstance = isInstance && "category" in value; + isInstance = isInstance && "currency" in value; + isInstance = isInstance && "quantity" in value; + isInstance = isInstance && "price" in value; + + return isInstance; +} + +export function PaymentRequestBasketItemFromJSON(json: any): PaymentRequestBasketItem { + return PaymentRequestBasketItemFromJSONTyped(json, false); +} + +export function PaymentRequestBasketItemFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestBasketItem { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'referenceId': !exists(json, 'reference_id') ? undefined : json['reference_id'], + 'name': json['name'], + 'description': !exists(json, 'description') ? undefined : json['description'], + 'type': !exists(json, 'type') ? undefined : json['type'], + 'category': json['category'], + 'subCategory': !exists(json, 'sub_category') ? undefined : json['sub_category'], + 'currency': json['currency'], + 'quantity': json['quantity'], + 'price': json['price'], + 'payerChargedCurrency': !exists(json, 'payer_charged_currency') ? undefined : json['payer_charged_currency'], + 'payerChargedPrice': !exists(json, 'payer_charged_price') ? undefined : json['payer_charged_price'], + 'url': !exists(json, 'url') ? undefined : json['url'], + 'metadata': !exists(json, 'metadata') ? undefined : json['metadata'], + }; +} + +export function PaymentRequestBasketItemToJSON(value?: PaymentRequestBasketItem | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'reference_id': value.referenceId, + 'name': value.name, + 'description': value.description, + 'type': value.type, + 'category': value.category, + 'sub_category': value.subCategory, + 'currency': value.currency, + 'quantity': value.quantity, + 'price': value.price, + 'payer_charged_currency': value.payerChargedCurrency, + 'payer_charged_price': value.payerChargedPrice, + 'url': value.url, + 'metadata': value.metadata, + }; +} + diff --git a/payment_request/models/PaymentRequestCaptureMethod.ts b/payment_request/models/PaymentRequestCaptureMethod.ts new file mode 100644 index 0000000..faa6e27 --- /dev/null +++ b/payment_request/models/PaymentRequestCaptureMethod.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const PaymentRequestCaptureMethod = { + Automatic: 'AUTOMATIC', + Manual: 'MANUAL' +} as const; +export type PaymentRequestCaptureMethod = typeof PaymentRequestCaptureMethod[keyof typeof PaymentRequestCaptureMethod]; + + +export function PaymentRequestCaptureMethodFromJSON(json: any): PaymentRequestCaptureMethod { + return PaymentRequestCaptureMethodFromJSONTyped(json, false); +} + +export function PaymentRequestCaptureMethodFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestCaptureMethod { + return json as PaymentRequestCaptureMethod; +} + +export function PaymentRequestCaptureMethodToJSON(value?: PaymentRequestCaptureMethod | null): any { + return value as any; +} + diff --git a/payment_request/models/PaymentRequestCardVerificationResults.ts b/payment_request/models/PaymentRequestCardVerificationResults.ts new file mode 100644 index 0000000..a9d0918 --- /dev/null +++ b/payment_request/models/PaymentRequestCardVerificationResults.ts @@ -0,0 +1,83 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { PaymentRequestCardVerificationResultsThreeDeeSecure } from './PaymentRequestCardVerificationResultsThreeDeeSecure'; +import { + PaymentRequestCardVerificationResultsThreeDeeSecureFromJSON, + PaymentRequestCardVerificationResultsThreeDeeSecureFromJSONTyped, + PaymentRequestCardVerificationResultsThreeDeeSecureToJSON, +} from './PaymentRequestCardVerificationResultsThreeDeeSecure'; + +/** + * + * @export + * @interface PaymentRequestCardVerificationResults + */ +export interface PaymentRequestCardVerificationResults { + /** + * + * @type {PaymentRequestCardVerificationResultsThreeDeeSecure} + * @memberof PaymentRequestCardVerificationResults + */ + threeDSecure: PaymentRequestCardVerificationResultsThreeDeeSecure | null; + /** + * + * @type {string} + * @memberof PaymentRequestCardVerificationResults + */ + cvvResult?: string | null; + /** + * + * @type {string} + * @memberof PaymentRequestCardVerificationResults + */ + addressVerificationResult?: string | null; +} + +/** + * Check if a given object implements the PaymentRequestCardVerificationResults interface. + */ +export function instanceOfPaymentRequestCardVerificationResults(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "threeDSecure" in value; + + return isInstance; +} + +export function PaymentRequestCardVerificationResultsFromJSON(json: any): PaymentRequestCardVerificationResults { + return PaymentRequestCardVerificationResultsFromJSONTyped(json, false); +} + +export function PaymentRequestCardVerificationResultsFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestCardVerificationResults { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'threeDSecure': PaymentRequestCardVerificationResultsThreeDeeSecureFromJSON(json['three_d_secure']), + 'cvvResult': !exists(json, 'cvv_result') ? undefined : json['cvv_result'], + 'addressVerificationResult': !exists(json, 'address_verification_result') ? undefined : json['address_verification_result'], + }; +} + +export function PaymentRequestCardVerificationResultsToJSON(value?: PaymentRequestCardVerificationResults | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'three_d_secure': PaymentRequestCardVerificationResultsThreeDeeSecureToJSON(value.threeDSecure), + 'cvv_result': value.cvvResult, + 'address_verification_result': value.addressVerificationResult, + }; +} + diff --git a/payment_request/models/PaymentRequestCardVerificationResultsThreeDeeSecure.ts b/payment_request/models/PaymentRequestCardVerificationResultsThreeDeeSecure.ts new file mode 100644 index 0000000..e97d59c --- /dev/null +++ b/payment_request/models/PaymentRequestCardVerificationResultsThreeDeeSecure.ts @@ -0,0 +1,91 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface PaymentRequestCardVerificationResultsThreeDeeSecure + */ +export interface PaymentRequestCardVerificationResultsThreeDeeSecure { + /** + * + * @type {string} + * @memberof PaymentRequestCardVerificationResultsThreeDeeSecure + */ + threeDSecureFlow?: string; + /** + * + * @type {string} + * @memberof PaymentRequestCardVerificationResultsThreeDeeSecure + */ + eciCode?: string; + /** + * + * @type {string} + * @memberof PaymentRequestCardVerificationResultsThreeDeeSecure + */ + threeDSecureResult?: string; + /** + * + * @type {string} + * @memberof PaymentRequestCardVerificationResultsThreeDeeSecure + */ + threeDSecureResultReason?: string | null; + /** + * + * @type {string} + * @memberof PaymentRequestCardVerificationResultsThreeDeeSecure + */ + threeDSecureVersion?: string; +} + +/** + * Check if a given object implements the PaymentRequestCardVerificationResultsThreeDeeSecure interface. + */ +export function instanceOfPaymentRequestCardVerificationResultsThreeDeeSecure(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function PaymentRequestCardVerificationResultsThreeDeeSecureFromJSON(json: any): PaymentRequestCardVerificationResultsThreeDeeSecure { + return PaymentRequestCardVerificationResultsThreeDeeSecureFromJSONTyped(json, false); +} + +export function PaymentRequestCardVerificationResultsThreeDeeSecureFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestCardVerificationResultsThreeDeeSecure { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'threeDSecureFlow': !exists(json, 'three_d_secure_flow') ? undefined : json['three_d_secure_flow'], + 'eciCode': !exists(json, 'eci_code') ? undefined : json['eci_code'], + 'threeDSecureResult': !exists(json, 'three_d_secure_result') ? undefined : json['three_d_secure_result'], + 'threeDSecureResultReason': !exists(json, 'three_d_secure_result_reason') ? undefined : json['three_d_secure_result_reason'], + 'threeDSecureVersion': !exists(json, 'three_d_secure_version') ? undefined : json['three_d_secure_version'], + }; +} + +export function PaymentRequestCardVerificationResultsThreeDeeSecureToJSON(value?: PaymentRequestCardVerificationResultsThreeDeeSecure | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'three_d_secure_flow': value.threeDSecureFlow, + 'eci_code': value.eciCode, + 'three_d_secure_result': value.threeDSecureResult, + 'three_d_secure_result_reason': value.threeDSecureResultReason, + 'three_d_secure_version': value.threeDSecureVersion, + }; +} + diff --git a/payment_request/models/PaymentRequestChannelProperties.ts b/payment_request/models/PaymentRequestChannelProperties.ts new file mode 100644 index 0000000..a613f66 --- /dev/null +++ b/payment_request/models/PaymentRequestChannelProperties.ts @@ -0,0 +1,107 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface PaymentRequestChannelProperties + */ +export interface PaymentRequestChannelProperties { + /** + * URL where the end-customer is redirected if the authorization is successful + * @type {string} + * @memberof PaymentRequestChannelProperties + */ + successReturnUrl?: string; + /** + * URL where the end-customer is redirected if the authorization failed + * @type {string} + * @memberof PaymentRequestChannelProperties + */ + failureReturnUrl?: string; + /** + * URL where the end-customer is redirected if the authorization cancelled + * @type {string} + * @memberof PaymentRequestChannelProperties + */ + cancelReturnUrl?: string; + /** + * REDEEM_NONE will not use any point, REDEEM_ALL will use all available points before cash balance is used. For OVO and ShopeePay tokenized payment use only. + * @type {string} + * @memberof PaymentRequestChannelProperties + */ + redeemPoints?: string; + /** + * Toggle used to require end-customer to input undergo OTP validation before completing a payment. OTP will always be required for transactions greater than 1,000,000 IDR. For BRI tokenized payment use only. + * @type {boolean} + * @memberof PaymentRequestChannelProperties + */ + requireAuth?: boolean; + /** + * Tag for a Merchant ID that you want to associate this payment with. For merchants using their own MIDs to specify which MID they want to use + * @type {string} + * @memberof PaymentRequestChannelProperties + */ + merchantIdTag?: string; + /** + * Type of “credential-on-file” / “card-on-file” payment being made. Indicate that this payment uses a previously linked Payment Method for charging. + * @type {string} + * @memberof PaymentRequestChannelProperties + */ + cardonfileType?: string | null; +} + +/** + * Check if a given object implements the PaymentRequestChannelProperties interface. + */ +export function instanceOfPaymentRequestChannelProperties(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function PaymentRequestChannelPropertiesFromJSON(json: any): PaymentRequestChannelProperties { + return PaymentRequestChannelPropertiesFromJSONTyped(json, false); +} + +export function PaymentRequestChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'successReturnUrl': !exists(json, 'success_return_url') ? undefined : json['success_return_url'], + 'failureReturnUrl': !exists(json, 'failure_return_url') ? undefined : json['failure_return_url'], + 'cancelReturnUrl': !exists(json, 'cancel_return_url') ? undefined : json['cancel_return_url'], + 'redeemPoints': !exists(json, 'redeem_points') ? undefined : json['redeem_points'], + 'requireAuth': !exists(json, 'require_auth') ? undefined : json['require_auth'], + 'merchantIdTag': !exists(json, 'merchant_id_tag') ? undefined : json['merchant_id_tag'], + 'cardonfileType': !exists(json, 'cardonfile_type') ? undefined : json['cardonfile_type'], + }; +} + +export function PaymentRequestChannelPropertiesToJSON(value?: PaymentRequestChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'success_return_url': value.successReturnUrl, + 'failure_return_url': value.failureReturnUrl, + 'cancel_return_url': value.cancelReturnUrl, + 'redeem_points': value.redeemPoints, + 'require_auth': value.requireAuth, + 'merchant_id_tag': value.merchantIdTag, + 'cardonfile_type': value.cardonfileType, + }; +} + diff --git a/payment_request/models/PaymentRequestCountry.ts b/payment_request/models/PaymentRequestCountry.ts new file mode 100644 index 0000000..a69b0b9 --- /dev/null +++ b/payment_request/models/PaymentRequestCountry.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const PaymentRequestCountry = { + Id: 'ID', + Ph: 'PH', + Vn: 'VN', + Th: 'TH', + My: 'MY' +} as const; +export type PaymentRequestCountry = typeof PaymentRequestCountry[keyof typeof PaymentRequestCountry]; + + +export function PaymentRequestCountryFromJSON(json: any): PaymentRequestCountry { + return PaymentRequestCountryFromJSONTyped(json, false); +} + +export function PaymentRequestCountryFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestCountry { + return json as PaymentRequestCountry; +} + +export function PaymentRequestCountryToJSON(value?: PaymentRequestCountry | null): any { + return value as any; +} + diff --git a/payment_request/models/PaymentRequestCurrency.ts b/payment_request/models/PaymentRequestCurrency.ts new file mode 100644 index 0000000..6cad834 --- /dev/null +++ b/payment_request/models/PaymentRequestCurrency.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const PaymentRequestCurrency = { + Idr: 'IDR', + Php: 'PHP', + Vnd: 'VND', + Thb: 'THB', + Myr: 'MYR' +} as const; +export type PaymentRequestCurrency = typeof PaymentRequestCurrency[keyof typeof PaymentRequestCurrency]; + + +export function PaymentRequestCurrencyFromJSON(json: any): PaymentRequestCurrency { + return PaymentRequestCurrencyFromJSONTyped(json, false); +} + +export function PaymentRequestCurrencyFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestCurrency { + return json as PaymentRequestCurrency; +} + +export function PaymentRequestCurrencyToJSON(value?: PaymentRequestCurrency | null): any { + return value as any; +} + diff --git a/payment_request/models/PaymentRequestInitiator.ts b/payment_request/models/PaymentRequestInitiator.ts new file mode 100644 index 0000000..ba29f70 --- /dev/null +++ b/payment_request/models/PaymentRequestInitiator.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const PaymentRequestInitiator = { + Customer: 'CUSTOMER', + Merchant: 'MERCHANT' +} as const; +export type PaymentRequestInitiator = typeof PaymentRequestInitiator[keyof typeof PaymentRequestInitiator]; + + +export function PaymentRequestInitiatorFromJSON(json: any): PaymentRequestInitiator { + return PaymentRequestInitiatorFromJSONTyped(json, false); +} + +export function PaymentRequestInitiatorFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestInitiator { + return json as PaymentRequestInitiator; +} + +export function PaymentRequestInitiatorToJSON(value?: PaymentRequestInitiator | null): any { + return value as any; +} + diff --git a/payment_request/models/PaymentRequestListResponse.ts b/payment_request/models/PaymentRequestListResponse.ts new file mode 100644 index 0000000..cbe824b --- /dev/null +++ b/payment_request/models/PaymentRequestListResponse.ts @@ -0,0 +1,76 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { PaymentRequest } from './PaymentRequest'; +import { + PaymentRequestFromJSON, + PaymentRequestFromJSONTyped, + PaymentRequestToJSON, +} from './PaymentRequest'; + +/** + * + * @export + * @interface PaymentRequestListResponse + */ +export interface PaymentRequestListResponse { + /** + * + * @type {Array} + * @memberof PaymentRequestListResponse + */ + data: Array; + /** + * + * @type {boolean} + * @memberof PaymentRequestListResponse + */ + hasMore: boolean; +} + +/** + * Check if a given object implements the PaymentRequestListResponse interface. + */ +export function instanceOfPaymentRequestListResponse(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "data" in value; + isInstance = isInstance && "hasMore" in value; + + return isInstance; +} + +export function PaymentRequestListResponseFromJSON(json: any): PaymentRequestListResponse { + return PaymentRequestListResponseFromJSONTyped(json, false); +} + +export function PaymentRequestListResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestListResponse { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'data': ((json['data'] as Array).map(PaymentRequestFromJSON)), + 'hasMore': json['has_more'], + }; +} + +export function PaymentRequestListResponseToJSON(value?: PaymentRequestListResponse | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'data': ((value.data as Array).map(PaymentRequestToJSON)), + 'has_more': value.hasMore, + }; +} + diff --git a/payment_request/models/PaymentRequestParameters.ts b/payment_request/models/PaymentRequestParameters.ts new file mode 100644 index 0000000..d3c0d0f --- /dev/null +++ b/payment_request/models/PaymentRequestParameters.ts @@ -0,0 +1,207 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { PaymentMethodParameters } from './PaymentMethodParameters'; +import { + PaymentMethodParametersFromJSON, + PaymentMethodParametersFromJSONTyped, + PaymentMethodParametersToJSON, +} from './PaymentMethodParameters'; +import type { PaymentRequestBasketItem } from './PaymentRequestBasketItem'; +import { + PaymentRequestBasketItemFromJSON, + PaymentRequestBasketItemFromJSONTyped, + PaymentRequestBasketItemToJSON, +} from './PaymentRequestBasketItem'; +import type { PaymentRequestCaptureMethod } from './PaymentRequestCaptureMethod'; +import { + PaymentRequestCaptureMethodFromJSON, + PaymentRequestCaptureMethodFromJSONTyped, + PaymentRequestCaptureMethodToJSON, +} from './PaymentRequestCaptureMethod'; +import type { PaymentRequestCurrency } from './PaymentRequestCurrency'; +import { + PaymentRequestCurrencyFromJSON, + PaymentRequestCurrencyFromJSONTyped, + PaymentRequestCurrencyToJSON, +} from './PaymentRequestCurrency'; +import type { PaymentRequestInitiator } from './PaymentRequestInitiator'; +import { + PaymentRequestInitiatorFromJSON, + PaymentRequestInitiatorFromJSONTyped, + PaymentRequestInitiatorToJSON, +} from './PaymentRequestInitiator'; +import type { PaymentRequestParametersChannelProperties } from './PaymentRequestParametersChannelProperties'; +import { + PaymentRequestParametersChannelPropertiesFromJSON, + PaymentRequestParametersChannelPropertiesFromJSONTyped, + PaymentRequestParametersChannelPropertiesToJSON, +} from './PaymentRequestParametersChannelProperties'; +import type { PaymentRequestShippingInformation } from './PaymentRequestShippingInformation'; +import { + PaymentRequestShippingInformationFromJSON, + PaymentRequestShippingInformationFromJSONTyped, + PaymentRequestShippingInformationToJSON, +} from './PaymentRequestShippingInformation'; + +/** + * + * @export + * @interface PaymentRequestParameters + */ +export interface PaymentRequestParameters { + /** + * + * @type {string} + * @memberof PaymentRequestParameters + */ + referenceId?: string; + /** + * + * @type {number} + * @memberof PaymentRequestParameters + */ + amount?: number; + /** + * + * @type {PaymentRequestCurrency} + * @memberof PaymentRequestParameters + */ + currency: PaymentRequestCurrency; + /** + * + * @type {PaymentMethodParameters} + * @memberof PaymentRequestParameters + */ + paymentMethod?: PaymentMethodParameters; + /** + * + * @type {string} + * @memberof PaymentRequestParameters + */ + description?: string | null; + /** + * + * @type {PaymentRequestCaptureMethod} + * @memberof PaymentRequestParameters + */ + captureMethod?: PaymentRequestCaptureMethod | null; + /** + * + * @type {PaymentRequestInitiator} + * @memberof PaymentRequestParameters + */ + initiator?: PaymentRequestInitiator | null; + /** + * + * @type {string} + * @memberof PaymentRequestParameters + */ + paymentMethodId?: string; + /** + * + * @type {PaymentRequestParametersChannelProperties} + * @memberof PaymentRequestParameters + */ + channelProperties?: PaymentRequestParametersChannelProperties; + /** + * + * @type {PaymentRequestShippingInformation} + * @memberof PaymentRequestParameters + */ + shippingInformation?: PaymentRequestShippingInformation | null; + /** + * + * @type {Array} + * @memberof PaymentRequestParameters + */ + items?: Array | null; + /** + * + * @type {string} + * @memberof PaymentRequestParameters + */ + customerId?: string | null; + /** + * + * @type {object} + * @memberof PaymentRequestParameters + */ + customer?: object | null; + /** + * + * @type {object} + * @memberof PaymentRequestParameters + */ + metadata?: object | null; +} + +/** + * Check if a given object implements the PaymentRequestParameters interface. + */ +export function instanceOfPaymentRequestParameters(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "currency" in value; + + return isInstance; +} + +export function PaymentRequestParametersFromJSON(json: any): PaymentRequestParameters { + return PaymentRequestParametersFromJSONTyped(json, false); +} + +export function PaymentRequestParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'referenceId': !exists(json, 'reference_id') ? undefined : json['reference_id'], + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'currency': PaymentRequestCurrencyFromJSON(json['currency']), + 'paymentMethod': !exists(json, 'payment_method') ? undefined : PaymentMethodParametersFromJSON(json['payment_method']), + 'description': !exists(json, 'description') ? undefined : json['description'], + 'captureMethod': !exists(json, 'capture_method') ? undefined : PaymentRequestCaptureMethodFromJSON(json['capture_method']), + 'initiator': !exists(json, 'initiator') ? undefined : PaymentRequestInitiatorFromJSON(json['initiator']), + 'paymentMethodId': !exists(json, 'payment_method_id') ? undefined : json['payment_method_id'], + 'channelProperties': !exists(json, 'channel_properties') ? undefined : PaymentRequestParametersChannelPropertiesFromJSON(json['channel_properties']), + 'shippingInformation': !exists(json, 'shipping_information') ? undefined : PaymentRequestShippingInformationFromJSON(json['shipping_information']), + 'items': !exists(json, 'items') ? undefined : (json['items'] === null ? null : (json['items'] as Array).map(PaymentRequestBasketItemFromJSON)), + 'customerId': !exists(json, 'customer_id') ? undefined : json['customer_id'], + 'customer': !exists(json, 'customer') ? undefined : json['customer'], + 'metadata': !exists(json, 'metadata') ? undefined : json['metadata'], + }; +} + +export function PaymentRequestParametersToJSON(value?: PaymentRequestParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'reference_id': value.referenceId, + 'amount': value.amount, + 'currency': PaymentRequestCurrencyToJSON(value.currency), + 'payment_method': PaymentMethodParametersToJSON(value.paymentMethod), + 'description': value.description, + 'capture_method': PaymentRequestCaptureMethodToJSON(value.captureMethod), + 'initiator': PaymentRequestInitiatorToJSON(value.initiator), + 'payment_method_id': value.paymentMethodId, + 'channel_properties': PaymentRequestParametersChannelPropertiesToJSON(value.channelProperties), + 'shipping_information': PaymentRequestShippingInformationToJSON(value.shippingInformation), + 'items': value.items === undefined ? undefined : (value.items === null ? null : (value.items as Array).map(PaymentRequestBasketItemToJSON)), + 'customer_id': value.customerId, + 'customer': value.customer, + 'metadata': value.metadata, + }; +} + diff --git a/payment_request/models/PaymentRequestParametersChannelProperties.ts b/payment_request/models/PaymentRequestParametersChannelProperties.ts new file mode 100644 index 0000000..a3fa03c --- /dev/null +++ b/payment_request/models/PaymentRequestParametersChannelProperties.ts @@ -0,0 +1,115 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface PaymentRequestParametersChannelProperties + */ +export interface PaymentRequestParametersChannelProperties { + /** + * URL where the end-customer is redirected if the authorization is successful + * @type {string} + * @memberof PaymentRequestParametersChannelProperties + */ + successReturnUrl?: string; + /** + * URL where the end-customer is redirected if the authorization failed + * @type {string} + * @memberof PaymentRequestParametersChannelProperties + */ + failureReturnUrl?: string; + /** + * URL where the end-customer is redirected if the authorization cancelled + * @type {string} + * @memberof PaymentRequestParametersChannelProperties + */ + cancelReturnUrl?: string; + /** + * REDEEM_NONE will not use any point, REDEEM_ALL will use all available points before cash balance is used. For OVO and ShopeePay tokenized payment use only. + * @type {string} + * @memberof PaymentRequestParametersChannelProperties + */ + redeemPoints?: string; + /** + * Toggle used to require end-customer to input undergo OTP validation before completing a payment. OTP will always be required for transactions greater than 1,000,000 IDR. For BRI tokenized payment use only. + * @type {boolean} + * @memberof PaymentRequestParametersChannelProperties + */ + requireAuth?: boolean; + /** + * Tag for a Merchant ID that you want to associate this payment with. For merchants using their own MIDs to specify which MID they want to use + * @type {string} + * @memberof PaymentRequestParametersChannelProperties + */ + merchantIdTag?: string; + /** + * Type of “credential-on-file” / “card-on-file” payment being made. Indicate that this payment uses a previously linked Payment Method for charging. + * @type {string} + * @memberof PaymentRequestParametersChannelProperties + */ + cardonfileType?: string | null; + /** + * Three digit code written on the back of the card (usually called CVV/CVN). + * @type {string} + * @memberof PaymentRequestParametersChannelProperties + */ + cvv?: string; +} + +/** + * Check if a given object implements the PaymentRequestParametersChannelProperties interface. + */ +export function instanceOfPaymentRequestParametersChannelProperties(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function PaymentRequestParametersChannelPropertiesFromJSON(json: any): PaymentRequestParametersChannelProperties { + return PaymentRequestParametersChannelPropertiesFromJSONTyped(json, false); +} + +export function PaymentRequestParametersChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestParametersChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'successReturnUrl': !exists(json, 'success_return_url') ? undefined : json['success_return_url'], + 'failureReturnUrl': !exists(json, 'failure_return_url') ? undefined : json['failure_return_url'], + 'cancelReturnUrl': !exists(json, 'cancel_return_url') ? undefined : json['cancel_return_url'], + 'redeemPoints': !exists(json, 'redeem_points') ? undefined : json['redeem_points'], + 'requireAuth': !exists(json, 'require_auth') ? undefined : json['require_auth'], + 'merchantIdTag': !exists(json, 'merchant_id_tag') ? undefined : json['merchant_id_tag'], + 'cardonfileType': !exists(json, 'cardonfile_type') ? undefined : json['cardonfile_type'], + 'cvv': !exists(json, 'cvv') ? undefined : json['cvv'], + }; +} + +export function PaymentRequestParametersChannelPropertiesToJSON(value?: PaymentRequestParametersChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'success_return_url': value.successReturnUrl, + 'failure_return_url': value.failureReturnUrl, + 'cancel_return_url': value.cancelReturnUrl, + 'redeem_points': value.redeemPoints, + 'require_auth': value.requireAuth, + 'merchant_id_tag': value.merchantIdTag, + 'cardonfile_type': value.cardonfileType, + 'cvv': value.cvv, + }; +} + diff --git a/payment_request/models/PaymentRequestParametersChannelPropertiesAllOf.ts b/payment_request/models/PaymentRequestParametersChannelPropertiesAllOf.ts new file mode 100644 index 0000000..2d4dff8 --- /dev/null +++ b/payment_request/models/PaymentRequestParametersChannelPropertiesAllOf.ts @@ -0,0 +1,59 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface PaymentRequestParametersChannelPropertiesAllOf + */ +export interface PaymentRequestParametersChannelPropertiesAllOf { + /** + * Three digit code written on the back of the card (usually called CVV/CVN). + * @type {string} + * @memberof PaymentRequestParametersChannelPropertiesAllOf + */ + cvv?: string; +} + +/** + * Check if a given object implements the PaymentRequestParametersChannelPropertiesAllOf interface. + */ +export function instanceOfPaymentRequestParametersChannelPropertiesAllOf(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function PaymentRequestParametersChannelPropertiesAllOfFromJSON(json: any): PaymentRequestParametersChannelPropertiesAllOf { + return PaymentRequestParametersChannelPropertiesAllOfFromJSONTyped(json, false); +} + +export function PaymentRequestParametersChannelPropertiesAllOfFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestParametersChannelPropertiesAllOf { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'cvv': !exists(json, 'cvv') ? undefined : json['cvv'], + }; +} + +export function PaymentRequestParametersChannelPropertiesAllOfToJSON(value?: PaymentRequestParametersChannelPropertiesAllOf | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'cvv': value.cvv, + }; +} + diff --git a/payment_request/models/PaymentRequestShippingInformation.ts b/payment_request/models/PaymentRequestShippingInformation.ts new file mode 100644 index 0000000..6446509 --- /dev/null +++ b/payment_request/models/PaymentRequestShippingInformation.ts @@ -0,0 +1,100 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface PaymentRequestShippingInformation + */ +export interface PaymentRequestShippingInformation { + /** + * + * @type {string} + * @memberof PaymentRequestShippingInformation + */ + country: string; + /** + * + * @type {string} + * @memberof PaymentRequestShippingInformation + */ + streetLine1?: string; + /** + * + * @type {string} + * @memberof PaymentRequestShippingInformation + */ + streetLine2?: string; + /** + * + * @type {string} + * @memberof PaymentRequestShippingInformation + */ + city?: string; + /** + * + * @type {string} + * @memberof PaymentRequestShippingInformation + */ + provinceState?: string; + /** + * + * @type {string} + * @memberof PaymentRequestShippingInformation + */ + postalCode?: string; +} + +/** + * Check if a given object implements the PaymentRequestShippingInformation interface. + */ +export function instanceOfPaymentRequestShippingInformation(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "country" in value; + + return isInstance; +} + +export function PaymentRequestShippingInformationFromJSON(json: any): PaymentRequestShippingInformation { + return PaymentRequestShippingInformationFromJSONTyped(json, false); +} + +export function PaymentRequestShippingInformationFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestShippingInformation { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'country': json['country'], + 'streetLine1': !exists(json, 'street_line1') ? undefined : json['street_line1'], + 'streetLine2': !exists(json, 'street_line2') ? undefined : json['street_line2'], + 'city': !exists(json, 'city') ? undefined : json['city'], + 'provinceState': !exists(json, 'province_state') ? undefined : json['province_state'], + 'postalCode': !exists(json, 'postal_code') ? undefined : json['postal_code'], + }; +} + +export function PaymentRequestShippingInformationToJSON(value?: PaymentRequestShippingInformation | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'country': value.country, + 'street_line1': value.streetLine1, + 'street_line2': value.streetLine2, + 'city': value.city, + 'province_state': value.provinceState, + 'postal_code': value.postalCode, + }; +} + diff --git a/payment_request/models/PaymentRequestStatus.ts b/payment_request/models/PaymentRequestStatus.ts new file mode 100644 index 0000000..e86f6f4 --- /dev/null +++ b/payment_request/models/PaymentRequestStatus.ts @@ -0,0 +1,38 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * + * @export + */ +export const PaymentRequestStatus = { + Pending: 'PENDING', + RequiresAction: 'REQUIRES_ACTION', + Canceled: 'CANCELED', + Succeeded: 'SUCCEEDED', + Failed: 'FAILED', + Voided: 'VOIDED', + Unknown: 'UNKNOWN', + AwaitingCapture: 'AWAITING_CAPTURE' +} as const; +export type PaymentRequestStatus = typeof PaymentRequestStatus[keyof typeof PaymentRequestStatus]; + + +export function PaymentRequestStatusFromJSON(json: any): PaymentRequestStatus { + return PaymentRequestStatusFromJSONTyped(json, false); +} + +export function PaymentRequestStatusFromJSONTyped(json: any, ignoreDiscriminator: boolean): PaymentRequestStatus { + return json as PaymentRequestStatus; +} + +export function PaymentRequestStatusToJSON(value?: PaymentRequestStatus | null): any { + return value as any; +} + diff --git a/payment_request/models/QRCode.ts b/payment_request/models/QRCode.ts new file mode 100644 index 0000000..41bc2c7 --- /dev/null +++ b/payment_request/models/QRCode.ts @@ -0,0 +1,80 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { QRCodeChannelCode } from './QRCodeChannelCode'; +import { + QRCodeChannelCodeFromJSON, + QRCodeChannelCodeFromJSONTyped, + QRCodeChannelCodeToJSON, +} from './QRCodeChannelCode'; +import type { QRCodeChannelProperties } from './QRCodeChannelProperties'; +import { + QRCodeChannelPropertiesFromJSON, + QRCodeChannelPropertiesFromJSONTyped, + QRCodeChannelPropertiesToJSON, +} from './QRCodeChannelProperties'; + +/** + * QRCode Payment Method Details + * @export + * @interface QRCode + */ +export interface QRCode { + /** + * + * @type {QRCodeChannelCode} + * @memberof QRCode + */ + channelCode?: QRCodeChannelCode | null; + /** + * + * @type {QRCodeChannelProperties} + * @memberof QRCode + */ + channelProperties?: QRCodeChannelProperties; +} + +/** + * Check if a given object implements the QRCode interface. + */ +export function instanceOfQRCode(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function QRCodeFromJSON(json: any): QRCode { + return QRCodeFromJSONTyped(json, false); +} + +export function QRCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): QRCode { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'channelCode': !exists(json, 'channel_code') ? undefined : QRCodeChannelCodeFromJSON(json['channel_code']), + 'channelProperties': !exists(json, 'channel_properties') ? undefined : QRCodeChannelPropertiesFromJSON(json['channel_properties']), + }; +} + +export function QRCodeToJSON(value?: QRCode | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'channel_code': QRCodeChannelCodeToJSON(value.channelCode), + 'channel_properties': QRCodeChannelPropertiesToJSON(value.channelProperties), + }; +} + diff --git a/payment_request/models/QRCodeChannelCode.ts b/payment_request/models/QRCodeChannelCode.ts new file mode 100644 index 0000000..16b83fe --- /dev/null +++ b/payment_request/models/QRCodeChannelCode.ts @@ -0,0 +1,34 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * QR Code Channel Code + * @export + */ +export const QRCodeChannelCode = { + Dana: 'DANA', + Rcbc: 'RCBC', + Linkaja: 'LINKAJA', + Promptpay: 'PROMPTPAY' +} as const; +export type QRCodeChannelCode = typeof QRCodeChannelCode[keyof typeof QRCodeChannelCode]; + + +export function QRCodeChannelCodeFromJSON(json: any): QRCodeChannelCode { + return QRCodeChannelCodeFromJSONTyped(json, false); +} + +export function QRCodeChannelCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): QRCodeChannelCode { + return json as QRCodeChannelCode; +} + +export function QRCodeChannelCodeToJSON(value?: QRCodeChannelCode | null): any { + return value as any; +} + diff --git a/payment_request/models/QRCodeChannelProperties.ts b/payment_request/models/QRCodeChannelProperties.ts new file mode 100644 index 0000000..2675e51 --- /dev/null +++ b/payment_request/models/QRCodeChannelProperties.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * QR Code Channel Properties + * @export + * @interface QRCodeChannelProperties + */ +export interface QRCodeChannelProperties { + /** + * + * @type {string} + * @memberof QRCodeChannelProperties + */ + qrString?: string; + /** + * + * @type {Date} + * @memberof QRCodeChannelProperties + */ + expiresAt?: Date; +} + +/** + * Check if a given object implements the QRCodeChannelProperties interface. + */ +export function instanceOfQRCodeChannelProperties(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function QRCodeChannelPropertiesFromJSON(json: any): QRCodeChannelProperties { + return QRCodeChannelPropertiesFromJSONTyped(json, false); +} + +export function QRCodeChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): QRCodeChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'qrString': !exists(json, 'qr_string') ? undefined : json['qr_string'], + 'expiresAt': !exists(json, 'expires_at') ? undefined : (new Date(json['expires_at'])), + }; +} + +export function QRCodeChannelPropertiesToJSON(value?: QRCodeChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'qr_string': value.qrString, + 'expires_at': value.expiresAt === undefined ? undefined : (value.expiresAt.toISOString()), + }; +} + diff --git a/payment_request/models/QRCodeParameters.ts b/payment_request/models/QRCodeParameters.ts new file mode 100644 index 0000000..4520da7 --- /dev/null +++ b/payment_request/models/QRCodeParameters.ts @@ -0,0 +1,80 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { QRCodeChannelCode } from './QRCodeChannelCode'; +import { + QRCodeChannelCodeFromJSON, + QRCodeChannelCodeFromJSONTyped, + QRCodeChannelCodeToJSON, +} from './QRCodeChannelCode'; +import type { QRCodeChannelProperties } from './QRCodeChannelProperties'; +import { + QRCodeChannelPropertiesFromJSON, + QRCodeChannelPropertiesFromJSONTyped, + QRCodeChannelPropertiesToJSON, +} from './QRCodeChannelProperties'; + +/** + * + * @export + * @interface QRCodeParameters + */ +export interface QRCodeParameters { + /** + * + * @type {QRCodeChannelCode} + * @memberof QRCodeParameters + */ + channelCode?: QRCodeChannelCode | null; + /** + * + * @type {QRCodeChannelProperties} + * @memberof QRCodeParameters + */ + channelProperties?: QRCodeChannelProperties; +} + +/** + * Check if a given object implements the QRCodeParameters interface. + */ +export function instanceOfQRCodeParameters(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function QRCodeParametersFromJSON(json: any): QRCodeParameters { + return QRCodeParametersFromJSONTyped(json, false); +} + +export function QRCodeParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): QRCodeParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'channelCode': !exists(json, 'channel_code') ? undefined : QRCodeChannelCodeFromJSON(json['channel_code']), + 'channelProperties': !exists(json, 'channel_properties') ? undefined : QRCodeChannelPropertiesFromJSON(json['channel_properties']), + }; +} + +export function QRCodeParametersToJSON(value?: QRCodeParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'channel_code': QRCodeChannelCodeToJSON(value.channelCode), + 'channel_properties': QRCodeChannelPropertiesToJSON(value.channelProperties), + }; +} + diff --git a/payment_request/models/VirtualAccount.ts b/payment_request/models/VirtualAccount.ts new file mode 100644 index 0000000..e89610c --- /dev/null +++ b/payment_request/models/VirtualAccount.ts @@ -0,0 +1,152 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { PaymentRequestCurrency } from './PaymentRequestCurrency'; +import { + PaymentRequestCurrencyFromJSON, + PaymentRequestCurrencyFromJSONTyped, + PaymentRequestCurrencyToJSON, +} from './PaymentRequestCurrency'; +import type { VirtualAccountAlternativeDisplay } from './VirtualAccountAlternativeDisplay'; +import { + VirtualAccountAlternativeDisplayFromJSON, + VirtualAccountAlternativeDisplayFromJSONTyped, + VirtualAccountAlternativeDisplayToJSON, +} from './VirtualAccountAlternativeDisplay'; +import type { VirtualAccountChannelCode } from './VirtualAccountChannelCode'; +import { + VirtualAccountChannelCodeFromJSON, + VirtualAccountChannelCodeFromJSONTyped, + VirtualAccountChannelCodeToJSON, +} from './VirtualAccountChannelCode'; +import type { VirtualAccountChannelProperties } from './VirtualAccountChannelProperties'; +import { + VirtualAccountChannelPropertiesFromJSON, + VirtualAccountChannelPropertiesFromJSONTyped, + VirtualAccountChannelPropertiesToJSON, +} from './VirtualAccountChannelProperties'; + +/** + * Virtual Account Payment Method Details + * @export + * @interface VirtualAccount + */ +export interface VirtualAccount { + /** + * + * @type {number} + * @memberof VirtualAccount + */ + minAmount?: number | null; + /** + * + * @type {number} + * @memberof VirtualAccount + */ + maxAmount?: number | null; + /** + * + * @type {number} + * @memberof VirtualAccount + */ + amount?: number | null; + /** + * + * @type {PaymentRequestCurrency} + * @memberof VirtualAccount + */ + currency?: PaymentRequestCurrency; + /** + * + * @type {VirtualAccountChannelCode} + * @memberof VirtualAccount + */ + channelCode: VirtualAccountChannelCode; + /** + * + * @type {VirtualAccountChannelProperties} + * @memberof VirtualAccount + */ + channelProperties: VirtualAccountChannelProperties; + /** + * Alternative display requested for the virtual account + * @type {Array} + * @memberof VirtualAccount + */ + alternativeDisplayTypes?: Array; + /** + * + * @type {Array} + * @memberof VirtualAccount + */ + alternativeDisplays?: Array; +} + + +/** + * @export + */ +export const VirtualAccountAlternativeDisplayTypesEnum = { + QrString: 'QR_STRING' +} as const; +export type VirtualAccountAlternativeDisplayTypesEnum = typeof VirtualAccountAlternativeDisplayTypesEnum[keyof typeof VirtualAccountAlternativeDisplayTypesEnum]; + + +/** + * Check if a given object implements the VirtualAccount interface. + */ +export function instanceOfVirtualAccount(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + + return isInstance; +} + +export function VirtualAccountFromJSON(json: any): VirtualAccount { + return VirtualAccountFromJSONTyped(json, false); +} + +export function VirtualAccountFromJSONTyped(json: any, ignoreDiscriminator: boolean): VirtualAccount { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'minAmount': !exists(json, 'min_amount') ? undefined : json['min_amount'], + 'maxAmount': !exists(json, 'max_amount') ? undefined : json['max_amount'], + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'currency': !exists(json, 'currency') ? undefined : PaymentRequestCurrencyFromJSON(json['currency']), + 'channelCode': VirtualAccountChannelCodeFromJSON(json['channel_code']), + 'channelProperties': VirtualAccountChannelPropertiesFromJSON(json['channel_properties']), + 'alternativeDisplayTypes': !exists(json, 'alternative_display_types') ? undefined : json['alternative_display_types'], + 'alternativeDisplays': !exists(json, 'alternative_displays') ? undefined : ((json['alternative_displays'] as Array).map(VirtualAccountAlternativeDisplayFromJSON)), + }; +} + +export function VirtualAccountToJSON(value?: VirtualAccount | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'min_amount': value.minAmount, + 'max_amount': value.maxAmount, + 'amount': value.amount, + 'currency': PaymentRequestCurrencyToJSON(value.currency), + 'channel_code': VirtualAccountChannelCodeToJSON(value.channelCode), + 'channel_properties': VirtualAccountChannelPropertiesToJSON(value.channelProperties), + 'alternative_display_types': value.alternativeDisplayTypes, + 'alternative_displays': value.alternativeDisplays === undefined ? undefined : ((value.alternativeDisplays as Array).map(VirtualAccountAlternativeDisplayToJSON)), + }; +} + diff --git a/payment_request/models/VirtualAccountAllOf.ts b/payment_request/models/VirtualAccountAllOf.ts new file mode 100644 index 0000000..a57fa5b --- /dev/null +++ b/payment_request/models/VirtualAccountAllOf.ts @@ -0,0 +1,66 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { VirtualAccountAlternativeDisplay } from './VirtualAccountAlternativeDisplay'; +import { + VirtualAccountAlternativeDisplayFromJSON, + VirtualAccountAlternativeDisplayFromJSONTyped, + VirtualAccountAlternativeDisplayToJSON, +} from './VirtualAccountAlternativeDisplay'; + +/** + * + * @export + * @interface VirtualAccountAllOf + */ +export interface VirtualAccountAllOf { + /** + * + * @type {Array} + * @memberof VirtualAccountAllOf + */ + alternativeDisplays?: Array; +} + +/** + * Check if a given object implements the VirtualAccountAllOf interface. + */ +export function instanceOfVirtualAccountAllOf(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function VirtualAccountAllOfFromJSON(json: any): VirtualAccountAllOf { + return VirtualAccountAllOfFromJSONTyped(json, false); +} + +export function VirtualAccountAllOfFromJSONTyped(json: any, ignoreDiscriminator: boolean): VirtualAccountAllOf { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'alternativeDisplays': !exists(json, 'alternative_displays') ? undefined : ((json['alternative_displays'] as Array).map(VirtualAccountAlternativeDisplayFromJSON)), + }; +} + +export function VirtualAccountAllOfToJSON(value?: VirtualAccountAllOf | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'alternative_displays': value.alternativeDisplays === undefined ? undefined : ((value.alternativeDisplays as Array).map(VirtualAccountAlternativeDisplayToJSON)), + }; +} + diff --git a/payment_request/models/VirtualAccountAlternativeDisplay.ts b/payment_request/models/VirtualAccountAlternativeDisplay.ts new file mode 100644 index 0000000..d0d13a3 --- /dev/null +++ b/payment_request/models/VirtualAccountAlternativeDisplay.ts @@ -0,0 +1,76 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Alternative Display Object + * @export + * @interface VirtualAccountAlternativeDisplay + */ +export interface VirtualAccountAlternativeDisplay { + /** + * Type of the alternative display + * @type {string} + * @memberof VirtualAccountAlternativeDisplay + */ + readonly type?: VirtualAccountAlternativeDisplayTypeEnum; + /** + * Data payload of the given alternative display + * @type {string} + * @memberof VirtualAccountAlternativeDisplay + */ + data?: string; +} + + +/** + * @export + */ +export const VirtualAccountAlternativeDisplayTypeEnum = { + QrString: 'QR_STRING' +} as const; +export type VirtualAccountAlternativeDisplayTypeEnum = typeof VirtualAccountAlternativeDisplayTypeEnum[keyof typeof VirtualAccountAlternativeDisplayTypeEnum]; + + +/** + * Check if a given object implements the VirtualAccountAlternativeDisplay interface. + */ +export function instanceOfVirtualAccountAlternativeDisplay(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function VirtualAccountAlternativeDisplayFromJSON(json: any): VirtualAccountAlternativeDisplay { + return VirtualAccountAlternativeDisplayFromJSONTyped(json, false); +} + +export function VirtualAccountAlternativeDisplayFromJSONTyped(json: any, ignoreDiscriminator: boolean): VirtualAccountAlternativeDisplay { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'type': !exists(json, 'type') ? undefined : json['type'], + 'data': !exists(json, 'data') ? undefined : json['data'], + }; +} + +export function VirtualAccountAlternativeDisplayToJSON(value?: VirtualAccountAlternativeDisplay | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'data': value.data, + }; +} + diff --git a/payment_request/models/VirtualAccountChannelCode.ts b/payment_request/models/VirtualAccountChannelCode.ts new file mode 100644 index 0000000..7d77834 --- /dev/null +++ b/payment_request/models/VirtualAccountChannelCode.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Virtual Account Channel Code + * @export + */ +export const VirtualAccountChannelCode = { + Bca: 'BCA', + Bjb: 'BJB', + Bni: 'BNI', + Bri: 'BRI', + Mandiri: 'MANDIRI', + Permata: 'PERMATA', + Bsi: 'BSI', + Cimb: 'CIMB', + SahabatSampoerna: 'SAHABAT_SAMPOERNA', + Artajasa: 'ARTAJASA', + Pv: 'PV', + Vietcapital: 'VIETCAPITAL', + Woori: 'WOORI', + Msb: 'MSB', + StandardChartered: 'STANDARD_CHARTERED' +} as const; +export type VirtualAccountChannelCode = typeof VirtualAccountChannelCode[keyof typeof VirtualAccountChannelCode]; + + +export function VirtualAccountChannelCodeFromJSON(json: any): VirtualAccountChannelCode { + return VirtualAccountChannelCodeFromJSONTyped(json, false); +} + +export function VirtualAccountChannelCodeFromJSONTyped(json: any, ignoreDiscriminator: boolean): VirtualAccountChannelCode { + return json as VirtualAccountChannelCode; +} + +export function VirtualAccountChannelCodeToJSON(value?: VirtualAccountChannelCode | null): any { + return value as any; +} + diff --git a/payment_request/models/VirtualAccountChannelProperties.ts b/payment_request/models/VirtualAccountChannelProperties.ts new file mode 100644 index 0000000..065bc15 --- /dev/null +++ b/payment_request/models/VirtualAccountChannelProperties.ts @@ -0,0 +1,84 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Virtual Account Channel Properties + * @export + * @interface VirtualAccountChannelProperties + */ +export interface VirtualAccountChannelProperties { + /** + * Name of customer. + * @type {string} + * @memberof VirtualAccountChannelProperties + */ + customerName: string; + /** + * You can assign specific Virtual Account number using this parameter. If you do not send one, one will be picked at random. Make sure the number you specify is within your Virtual Account range. + * @type {string} + * @memberof VirtualAccountChannelProperties + */ + virtualAccountNumber?: string; + /** + * The date and time in ISO 8601 UTC+0 when the virtual account number will be expired. Default: The default expiration date will be 31 years from creation date. + * @type {Date} + * @memberof VirtualAccountChannelProperties + */ + expiresAt?: Date; + /** + * The suggested amount you want to assign. Note: Suggested amounts is the amounts that can see as a suggestion, but user can still put any numbers (only supported for Mandiri and BRI) + * @type {number} + * @memberof VirtualAccountChannelProperties + */ + suggestedAmount?: number; +} + +/** + * Check if a given object implements the VirtualAccountChannelProperties interface. + */ +export function instanceOfVirtualAccountChannelProperties(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "customerName" in value; + + return isInstance; +} + +export function VirtualAccountChannelPropertiesFromJSON(json: any): VirtualAccountChannelProperties { + return VirtualAccountChannelPropertiesFromJSONTyped(json, false); +} + +export function VirtualAccountChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): VirtualAccountChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'customerName': json['customer_name'], + 'virtualAccountNumber': !exists(json, 'virtual_account_number') ? undefined : json['virtual_account_number'], + 'expiresAt': !exists(json, 'expires_at') ? undefined : (new Date(json['expires_at'])), + 'suggestedAmount': !exists(json, 'suggested_amount') ? undefined : json['suggested_amount'], + }; +} + +export function VirtualAccountChannelPropertiesToJSON(value?: VirtualAccountChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'customer_name': value.customerName, + 'virtual_account_number': value.virtualAccountNumber, + 'expires_at': value.expiresAt === undefined ? undefined : (value.expiresAt.toISOString()), + 'suggested_amount': value.suggestedAmount, + }; +} + diff --git a/payment_request/models/VirtualAccountParameters.ts b/payment_request/models/VirtualAccountParameters.ts new file mode 100644 index 0000000..e91e024 --- /dev/null +++ b/payment_request/models/VirtualAccountParameters.ts @@ -0,0 +1,138 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { PaymentRequestCurrency } from './PaymentRequestCurrency'; +import { + PaymentRequestCurrencyFromJSON, + PaymentRequestCurrencyFromJSONTyped, + PaymentRequestCurrencyToJSON, +} from './PaymentRequestCurrency'; +import type { VirtualAccountChannelCode } from './VirtualAccountChannelCode'; +import { + VirtualAccountChannelCodeFromJSON, + VirtualAccountChannelCodeFromJSONTyped, + VirtualAccountChannelCodeToJSON, +} from './VirtualAccountChannelCode'; +import type { VirtualAccountChannelProperties } from './VirtualAccountChannelProperties'; +import { + VirtualAccountChannelPropertiesFromJSON, + VirtualAccountChannelPropertiesFromJSONTyped, + VirtualAccountChannelPropertiesToJSON, +} from './VirtualAccountChannelProperties'; + +/** + * + * @export + * @interface VirtualAccountParameters + */ +export interface VirtualAccountParameters { + /** + * + * @type {number} + * @memberof VirtualAccountParameters + */ + minAmount?: number | null; + /** + * + * @type {number} + * @memberof VirtualAccountParameters + */ + maxAmount?: number | null; + /** + * + * @type {number} + * @memberof VirtualAccountParameters + */ + amount?: number | null; + /** + * + * @type {PaymentRequestCurrency} + * @memberof VirtualAccountParameters + */ + currency?: PaymentRequestCurrency; + /** + * + * @type {VirtualAccountChannelCode} + * @memberof VirtualAccountParameters + */ + channelCode: VirtualAccountChannelCode; + /** + * + * @type {VirtualAccountChannelProperties} + * @memberof VirtualAccountParameters + */ + channelProperties: VirtualAccountChannelProperties; + /** + * Alternative display requested for the virtual account + * @type {Array} + * @memberof VirtualAccountParameters + */ + alternativeDisplayTypes?: Array; +} + + +/** + * @export + */ +export const VirtualAccountParametersAlternativeDisplayTypesEnum = { + QrString: 'QR_STRING' +} as const; +export type VirtualAccountParametersAlternativeDisplayTypesEnum = typeof VirtualAccountParametersAlternativeDisplayTypesEnum[keyof typeof VirtualAccountParametersAlternativeDisplayTypesEnum]; + + +/** + * Check if a given object implements the VirtualAccountParameters interface. + */ +export function instanceOfVirtualAccountParameters(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + + return isInstance; +} + +export function VirtualAccountParametersFromJSON(json: any): VirtualAccountParameters { + return VirtualAccountParametersFromJSONTyped(json, false); +} + +export function VirtualAccountParametersFromJSONTyped(json: any, ignoreDiscriminator: boolean): VirtualAccountParameters { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'minAmount': !exists(json, 'min_amount') ? undefined : json['min_amount'], + 'maxAmount': !exists(json, 'max_amount') ? undefined : json['max_amount'], + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'currency': !exists(json, 'currency') ? undefined : PaymentRequestCurrencyFromJSON(json['currency']), + 'channelCode': VirtualAccountChannelCodeFromJSON(json['channel_code']), + 'channelProperties': VirtualAccountChannelPropertiesFromJSON(json['channel_properties']), + 'alternativeDisplayTypes': !exists(json, 'alternative_display_types') ? undefined : json['alternative_display_types'], + }; +} + +export function VirtualAccountParametersToJSON(value?: VirtualAccountParameters | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'min_amount': value.minAmount, + 'max_amount': value.maxAmount, + 'amount': value.amount, + 'currency': PaymentRequestCurrencyToJSON(value.currency), + 'channel_code': VirtualAccountChannelCodeToJSON(value.channelCode), + 'channel_properties': VirtualAccountChannelPropertiesToJSON(value.channelProperties), + 'alternative_display_types': value.alternativeDisplayTypes, + }; +} + diff --git a/payment_request/models/index.ts b/payment_request/models/index.ts new file mode 100644 index 0000000..4c84eca --- /dev/null +++ b/payment_request/models/index.ts @@ -0,0 +1,64 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './Capture'; +export * from './CaptureListResponse'; +export * from './CaptureParameters'; +export * from './Card'; +export * from './CardChannelProperties'; +export * from './CardInformation'; +export * from './CardVerificationResults'; +export * from './CardVerificationResultsThreeDSecure'; +export * from './DirectDebit'; +export * from './DirectDebitAllOf'; +export * from './DirectDebitBankAccount'; +export * from './DirectDebitChannelCode'; +export * from './DirectDebitChannelProperties'; +export * from './DirectDebitChannelPropertiesBankAccount'; +export * from './DirectDebitChannelPropertiesBankRedirect'; +export * from './DirectDebitChannelPropertiesDebitCard'; +export * from './DirectDebitDebitCard'; +export * from './DirectDebitParameters'; +export * from './DirectDebitType'; +export * from './EWallet'; +export * from './EWalletAccount'; +export * from './EWalletAllOf'; +export * from './EWalletChannelCode'; +export * from './EWalletChannelProperties'; +export * from './EWalletParameters'; +export * from './ModelError'; +export * from './OverTheCounter'; +export * from './OverTheCounterChannelCode'; +export * from './OverTheCounterChannelProperties'; +export * from './OverTheCounterParameters'; +export * from './PaymentMethod'; +export * from './PaymentMethodParameters'; +export * from './PaymentMethodReusability'; +export * from './PaymentMethodStatus'; +export * from './PaymentMethodType'; +export * from './PaymentRequest'; +export * from './PaymentRequestAction'; +export * from './PaymentRequestAuthParameters'; +export * from './PaymentRequestBasketItem'; +export * from './PaymentRequestCaptureMethod'; +export * from './PaymentRequestCardVerificationResults'; +export * from './PaymentRequestCardVerificationResultsThreeDeeSecure'; +export * from './PaymentRequestChannelProperties'; +export * from './PaymentRequestCountry'; +export * from './PaymentRequestCurrency'; +export * from './PaymentRequestInitiator'; +export * from './PaymentRequestListResponse'; +export * from './PaymentRequestParameters'; +export * from './PaymentRequestParametersChannelProperties'; +export * from './PaymentRequestParametersChannelPropertiesAllOf'; +export * from './PaymentRequestShippingInformation'; +export * from './PaymentRequestStatus'; +export * from './QRCode'; +export * from './QRCodeChannelCode'; +export * from './QRCodeChannelProperties'; +export * from './QRCodeParameters'; +export * from './VirtualAccount'; +export * from './VirtualAccountAllOf'; +export * from './VirtualAccountAlternativeDisplay'; +export * from './VirtualAccountChannelCode'; +export * from './VirtualAccountChannelProperties'; +export * from './VirtualAccountParameters'; diff --git a/payout/apis/Payout.ts b/payout/apis/Payout.ts new file mode 100644 index 0000000..fd617fd --- /dev/null +++ b/payout/apis/Payout.ts @@ -0,0 +1,284 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +import * as runtime from '../../runtime'; +import type { + Channel, + ChannelCategory, + CreatePayoutRequest, + GetPayouts200Response, + GetPayouts200ResponseDataInner, +} from '../models'; +import { + ChannelFromJSON, + ChannelToJSON, + ChannelCategoryFromJSON, + ChannelCategoryToJSON, + CreatePayoutRequestFromJSON, + CreatePayoutRequestToJSON, + GetPayouts200ResponseFromJSON, + GetPayouts200ResponseToJSON, + GetPayouts200ResponseDataInnerFromJSON, + GetPayouts200ResponseDataInnerToJSON, +} from '../models'; + +export interface CancelPayoutRequest { + id: string; + idempotencyKey?: string; +} + +export interface CreatePayoutOperationRequest { + idempotencyKey: string; + forUserId?: string; + data?: CreatePayoutRequest; +} + +export interface GetPayoutByIdRequest { + id: string; + idempotencyKey?: string; +} + +export interface GetPayoutChannelsRequest { + currency?: string; + channelCategory?: Array; + channelCode?: string; + idempotencyKey?: string; +} + +export interface GetPayoutsRequest { + referenceId: string; + limit?: number; + afterId?: string; + beforeId?: string; + idempotencyKey?: string; +} + +/** + * + */ +export class PayoutApi extends runtime.BaseAPI { + + secretKey: string = ""; + xenditURL: string = ""; + + constructor({secretKey, xenditURL}: {secretKey: string, xenditURL?: string}) { + const conf = new runtime.Configuration({ + basePath: xenditURL || 'https://api.xendit.co' + }) + super(conf) + this.secretKey = secretKey; + } + + /** + * API to cancel requested payouts that have not yet been sent to partner banks and e-wallets. Cancellation is possible if the payout has not been sent out via our partner and when payout status is ACCEPTED. + */ + private async cancelPayoutRaw(requestParameters: CancelPayoutRequest): Promise> { + if (requestParameters.id === null || requestParameters.id === undefined) { + throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling cancelPayout.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/v2/payouts/{id}/cancel`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => GetPayouts200ResponseDataInnerFromJSON(jsonValue)); + } + + /** + * API to cancel requested payouts that have not yet been sent to partner banks and e-wallets. Cancellation is possible if the payout has not been sent out via our partner and when payout status is ACCEPTED. + */ + async cancelPayout(requestParameters: CancelPayoutRequest): Promise { + const response = await this.cancelPayoutRaw(requestParameters); + return await response.value(); + } + + /** + * API to send money at scale to bank accounts & eWallets + */ + private async createPayoutRaw(requestParameters: CreatePayoutOperationRequest): Promise> { + if (requestParameters.idempotencyKey === null || requestParameters.idempotencyKey === undefined) { + throw new runtime.RequiredError('idempotencyKey','Required parameter requestParameters.idempotencyKey was null or undefined when calling createPayout.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + headerParameters['Content-Type'] = 'application/json'; + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + if (requestParameters.forUserId !== undefined && requestParameters.forUserId !== null) { + headerParameters['for-user-id'] = String(requestParameters.forUserId); + } + + const response = await this.request({ + path: `/v2/payouts`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: CreatePayoutRequestToJSON(requestParameters.data), + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => GetPayouts200ResponseDataInnerFromJSON(jsonValue)); + } + + /** + * API to send money at scale to bank accounts & eWallets + */ + async createPayout(requestParameters: CreatePayoutOperationRequest): Promise { + const response = await this.createPayoutRaw(requestParameters); + return await response.value(); + } + + /** + * API to fetch the current status, or details of the payout + */ + private async getPayoutByIdRaw(requestParameters: GetPayoutByIdRequest): Promise> { + if (requestParameters.id === null || requestParameters.id === undefined) { + throw new runtime.RequiredError('id','Required parameter requestParameters.id was null or undefined when calling getPayoutById.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/v2/payouts/{id}`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => GetPayouts200ResponseDataInnerFromJSON(jsonValue)); + } + + /** + * API to fetch the current status, or details of the payout + */ + async getPayoutById(requestParameters: GetPayoutByIdRequest): Promise { + const response = await this.getPayoutByIdRaw(requestParameters); + return await response.value(); + } + + /** + * API providing the current list of banks and e-wallets we support for payouts for both regions + */ + private async getPayoutChannelsRaw(requestParameters: GetPayoutChannelsRequest): Promise>> { + const queryParameters: any = {}; + + if (requestParameters.currency !== undefined) { + queryParameters['currency'] = requestParameters.currency; + } + + if (requestParameters.channelCategory) { + queryParameters['channel_category'] = requestParameters.channelCategory.join(runtime.COLLECTION_FORMATS["csv"]); + } + + if (requestParameters.channelCode !== undefined) { + queryParameters['channel_code'] = requestParameters.channelCode; + } + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/payouts_channels`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(ChannelFromJSON)); + } + + /** + * API providing the current list of banks and e-wallets we support for payouts for both regions + */ + async getPayoutChannels(requestParameters: GetPayoutChannelsRequest = {}): Promise> { + const response = await this.getPayoutChannelsRaw(requestParameters); + return await response.value(); + } + + /** + * API to retrieve all matching payouts with reference ID + */ + private async getPayoutsRaw(requestParameters: GetPayoutsRequest): Promise> { + if (requestParameters.referenceId === null || requestParameters.referenceId === undefined) { + throw new runtime.RequiredError('referenceId','Required parameter requestParameters.referenceId was null or undefined when calling getPayouts.'); + } + + const queryParameters: any = {}; + + if (requestParameters.referenceId !== undefined) { + queryParameters['reference_id'] = requestParameters.referenceId; + } + + if (requestParameters.limit !== undefined) { + queryParameters['limit'] = requestParameters.limit; + } + + if (requestParameters.afterId !== undefined) { + queryParameters['after_id'] = requestParameters.afterId; + } + + if (requestParameters.beforeId !== undefined) { + queryParameters['before_id'] = requestParameters.beforeId; + } + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/v2/payouts`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => GetPayouts200ResponseFromJSON(jsonValue)); + } + + /** + * API to retrieve all matching payouts with reference ID + */ + async getPayouts(requestParameters: GetPayoutsRequest): Promise { + const response = await this.getPayoutsRaw(requestParameters); + return await response.value(); + } + +} diff --git a/payout/apis/index.ts b/payout/apis/index.ts new file mode 100644 index 0000000..e0fafcd --- /dev/null +++ b/payout/apis/index.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './Payout'; diff --git a/payout/index.ts b/payout/index.ts new file mode 100644 index 0000000..9c2e280 --- /dev/null +++ b/payout/index.ts @@ -0,0 +1,3 @@ +export { + PayoutApi as Payout, +} from './apis' diff --git a/payout/models/Channel.ts b/payout/models/Channel.ts new file mode 100644 index 0000000..e05f1a8 --- /dev/null +++ b/payout/models/Channel.ts @@ -0,0 +1,109 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { ChannelAmountLimits } from './ChannelAmountLimits'; +import { + ChannelAmountLimitsFromJSON, + ChannelAmountLimitsFromJSONTyped, + ChannelAmountLimitsToJSON, +} from './ChannelAmountLimits'; +import type { ChannelCategory } from './ChannelCategory'; +import { + ChannelCategoryFromJSON, + ChannelCategoryFromJSONTyped, + ChannelCategoryToJSON, +} from './ChannelCategory'; + +/** + * Channel information where you can send the money to + * @export + * @interface Channel + */ +export interface Channel { + /** + * Destination channel to send the money to, prefixed by ISO-3166 country code + * @type {string} + * @memberof Channel + */ + channelCode: string; + /** + * + * @type {ChannelCategory} + * @memberof Channel + */ + channelCategory: ChannelCategory; + /** + * Currency of the destination channel using ISO-4217 currency code + * @type {string} + * @memberof Channel + */ + currency: string; + /** + * Name of the destination channel + * @type {string} + * @memberof Channel + */ + channelName: string; + /** + * + * @type {ChannelAmountLimits} + * @memberof Channel + */ + amountLimits: ChannelAmountLimits; +} + +/** + * Check if a given object implements the Channel interface. + */ +export function instanceOfChannel(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelCategory" in value; + isInstance = isInstance && "currency" in value; + isInstance = isInstance && "channelName" in value; + isInstance = isInstance && "amountLimits" in value; + + return isInstance; +} + +export function ChannelFromJSON(json: any): Channel { + return ChannelFromJSONTyped(json, false); +} + +export function ChannelFromJSONTyped(json: any, ignoreDiscriminator: boolean): Channel { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'channelCode': json['channel_code'], + 'channelCategory': ChannelCategoryFromJSON(json['channel_category']), + 'currency': json['currency'], + 'channelName': json['channel_name'], + 'amountLimits': ChannelAmountLimitsFromJSON(json['amount_limits']), + }; +} + +export function ChannelToJSON(value?: Channel | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'channel_code': value.channelCode, + 'channel_category': ChannelCategoryToJSON(value.channelCategory), + 'currency': value.currency, + 'channel_name': value.channelName, + 'amount_limits': ChannelAmountLimitsToJSON(value.amountLimits), + }; +} + diff --git a/payout/models/ChannelAccountType.ts b/payout/models/ChannelAccountType.ts new file mode 100644 index 0000000..d26ecc9 --- /dev/null +++ b/payout/models/ChannelAccountType.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Available account types (applicable for MY_DUITNOW) + * @export + */ +export const ChannelAccountType = { + NationalId: 'NATIONAL_ID', + MobileNo: 'MOBILE_NO', + Passport: 'PASSPORT', + BusinessRegistration: 'BUSINESS_REGISTRATION', + BankAccount: 'BANK_ACCOUNT' +} as const; +export type ChannelAccountType = typeof ChannelAccountType[keyof typeof ChannelAccountType]; + + +export function ChannelAccountTypeFromJSON(json: any): ChannelAccountType { + return ChannelAccountTypeFromJSONTyped(json, false); +} + +export function ChannelAccountTypeFromJSONTyped(json: any, ignoreDiscriminator: boolean): ChannelAccountType { + return json as ChannelAccountType; +} + +export function ChannelAccountTypeToJSON(value?: ChannelAccountType | null): any { + return value as any; +} + diff --git a/payout/models/ChannelAmountLimits.ts b/payout/models/ChannelAmountLimits.ts new file mode 100644 index 0000000..7e4e53f --- /dev/null +++ b/payout/models/ChannelAmountLimits.ts @@ -0,0 +1,78 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Supported amount ranges for payouts to this channel + * @export + * @interface ChannelAmountLimits + */ +export interface ChannelAmountLimits { + /** + * Lowest amount supported for a payout to this channel + * @type {number} + * @memberof ChannelAmountLimits + */ + minimum: number; + /** + * Highest amount supported for a payout to this channel + * @type {number} + * @memberof ChannelAmountLimits + */ + maximum: number; + /** + * Supported increments + * @type {number} + * @memberof ChannelAmountLimits + */ + minimumIncrement: number; +} + +/** + * Check if a given object implements the ChannelAmountLimits interface. + */ +export function instanceOfChannelAmountLimits(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "minimum" in value; + isInstance = isInstance && "maximum" in value; + isInstance = isInstance && "minimumIncrement" in value; + + return isInstance; +} + +export function ChannelAmountLimitsFromJSON(json: any): ChannelAmountLimits { + return ChannelAmountLimitsFromJSONTyped(json, false); +} + +export function ChannelAmountLimitsFromJSONTyped(json: any, ignoreDiscriminator: boolean): ChannelAmountLimits { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'minimum': json['minimum'], + 'maximum': json['maximum'], + 'minimumIncrement': json['minimum_increment'], + }; +} + +export function ChannelAmountLimitsToJSON(value?: ChannelAmountLimits | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'minimum': value.minimum, + 'maximum': value.maximum, + 'minimum_increment': value.minimumIncrement, + }; +} + diff --git a/payout/models/ChannelCategory.ts b/payout/models/ChannelCategory.ts new file mode 100644 index 0000000..8259b1d --- /dev/null +++ b/payout/models/ChannelCategory.ts @@ -0,0 +1,33 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +/** + * Category of channel code, as some channels might require more fields during processing + * @export + */ +export const ChannelCategory = { + Bank: 'BANK', + Ewallet: 'EWALLET', + Otc: 'OTC' +} as const; +export type ChannelCategory = typeof ChannelCategory[keyof typeof ChannelCategory]; + + +export function ChannelCategoryFromJSON(json: any): ChannelCategory { + return ChannelCategoryFromJSONTyped(json, false); +} + +export function ChannelCategoryFromJSONTyped(json: any, ignoreDiscriminator: boolean): ChannelCategory { + return json as ChannelCategory; +} + +export function ChannelCategoryToJSON(value?: ChannelCategory | null): any { + return value as any; +} + diff --git a/payout/models/CreatePayoutRequest.ts b/payout/models/CreatePayoutRequest.ts new file mode 100644 index 0000000..915cccb --- /dev/null +++ b/payout/models/CreatePayoutRequest.ts @@ -0,0 +1,133 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { DigitalPayoutChannelProperties } from './DigitalPayoutChannelProperties'; +import { + DigitalPayoutChannelPropertiesFromJSON, + DigitalPayoutChannelPropertiesFromJSONTyped, + DigitalPayoutChannelPropertiesToJSON, +} from './DigitalPayoutChannelProperties'; +import type { ReceiptNotification } from './ReceiptNotification'; +import { + ReceiptNotificationFromJSON, + ReceiptNotificationFromJSONTyped, + ReceiptNotificationToJSON, +} from './ReceiptNotification'; + +/** + * Information needed by Xendit to send money to the destination channel provided + * @export + * @interface CreatePayoutRequest + */ +export interface CreatePayoutRequest { + /** + * A client defined payout identifier + * @type {string} + * @memberof CreatePayoutRequest + */ + referenceId: string; + /** + * Channel code of selected destination bank or e-wallet + * @type {string} + * @memberof CreatePayoutRequest + */ + channelCode: string; + /** + * + * @type {DigitalPayoutChannelProperties} + * @memberof CreatePayoutRequest + */ + channelProperties: DigitalPayoutChannelProperties; + /** + * Amount to be sent to the destination account and should be a multiple of the minimum increment for the selected channel + * @type {number} + * @memberof CreatePayoutRequest + */ + amount: number; + /** + * Description to send with the payout, the recipient may see this e.g., in their bank statement (if supported) or in email receipts we send on your behalf + * @type {string} + * @memberof CreatePayoutRequest + */ + description?: string; + /** + * Currency of the destination channel using ISO-4217 currency code + * @type {string} + * @memberof CreatePayoutRequest + */ + currency: string; + /** + * + * @type {ReceiptNotification} + * @memberof CreatePayoutRequest + */ + receiptNotification?: ReceiptNotification; + /** + * Object of additional information you may use + * @type {object} + * @memberof CreatePayoutRequest + */ + metadata?: object; +} + +/** + * Check if a given object implements the CreatePayoutRequest interface. + */ +export function instanceOfCreatePayoutRequest(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "referenceId" in value; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + isInstance = isInstance && "amount" in value; + isInstance = isInstance && "currency" in value; + + return isInstance; +} + +export function CreatePayoutRequestFromJSON(json: any): CreatePayoutRequest { + return CreatePayoutRequestFromJSONTyped(json, false); +} + +export function CreatePayoutRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreatePayoutRequest { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'referenceId': json['reference_id'], + 'channelCode': json['channel_code'], + 'channelProperties': DigitalPayoutChannelPropertiesFromJSON(json['channel_properties']), + 'amount': json['amount'], + 'description': !exists(json, 'description') ? undefined : json['description'], + 'currency': json['currency'], + 'receiptNotification': !exists(json, 'receipt_notification') ? undefined : ReceiptNotificationFromJSON(json['receipt_notification']), + 'metadata': !exists(json, 'metadata') ? undefined : json['metadata'], + }; +} + +export function CreatePayoutRequestToJSON(value?: CreatePayoutRequest | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'reference_id': value.referenceId, + 'channel_code': value.channelCode, + 'channel_properties': DigitalPayoutChannelPropertiesToJSON(value.channelProperties), + 'amount': value.amount, + 'description': value.description, + 'currency': value.currency, + 'receipt_notification': ReceiptNotificationToJSON(value.receiptNotification), + 'metadata': value.metadata, + }; +} + diff --git a/payout/models/DigitalPayoutChannelProperties.ts b/payout/models/DigitalPayoutChannelProperties.ts new file mode 100644 index 0000000..31e907f --- /dev/null +++ b/payout/models/DigitalPayoutChannelProperties.ts @@ -0,0 +1,83 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { ChannelAccountType } from './ChannelAccountType'; +import { + ChannelAccountTypeFromJSON, + ChannelAccountTypeFromJSONTyped, + ChannelAccountTypeToJSON, +} from './ChannelAccountType'; + +/** + * Channel information for digital destinations (banks, e-wallets) + * @export + * @interface DigitalPayoutChannelProperties + */ +export interface DigitalPayoutChannelProperties { + /** + * Registered account name + * @type {string} + * @memberof DigitalPayoutChannelProperties + */ + accountHolderName?: string | null; + /** + * Registered account number + * @type {string} + * @memberof DigitalPayoutChannelProperties + */ + accountNumber: string; + /** + * + * @type {ChannelAccountType} + * @memberof DigitalPayoutChannelProperties + */ + accountType?: ChannelAccountType; +} + +/** + * Check if a given object implements the DigitalPayoutChannelProperties interface. + */ +export function instanceOfDigitalPayoutChannelProperties(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "accountNumber" in value; + + return isInstance; +} + +export function DigitalPayoutChannelPropertiesFromJSON(json: any): DigitalPayoutChannelProperties { + return DigitalPayoutChannelPropertiesFromJSONTyped(json, false); +} + +export function DigitalPayoutChannelPropertiesFromJSONTyped(json: any, ignoreDiscriminator: boolean): DigitalPayoutChannelProperties { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'accountHolderName': !exists(json, 'account_holder_name') ? undefined : json['account_holder_name'], + 'accountNumber': json['account_number'], + 'accountType': !exists(json, 'account_type') ? undefined : ChannelAccountTypeFromJSON(json['account_type']), + }; +} + +export function DigitalPayoutChannelPropertiesToJSON(value?: DigitalPayoutChannelProperties | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'account_holder_name': value.accountHolderName, + 'account_number': value.accountNumber, + 'account_type': ChannelAccountTypeToJSON(value.accountType), + }; +} + diff --git a/payout/models/ErrorErrorsInner.ts b/payout/models/ErrorErrorsInner.ts new file mode 100644 index 0000000..1eee355 --- /dev/null +++ b/payout/models/ErrorErrorsInner.ts @@ -0,0 +1,69 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface ErrorErrorsInner + */ +export interface ErrorErrorsInner { + /** + * Precise location of the error + * @type {string} + * @memberof ErrorErrorsInner + */ + path: string; + /** + * Specific description of the error + * @type {string} + * @memberof ErrorErrorsInner + */ + message: string; +} + +/** + * Check if a given object implements the ErrorErrorsInner interface. + */ +export function instanceOfErrorErrorsInner(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "path" in value; + isInstance = isInstance && "message" in value; + + return isInstance; +} + +export function ErrorErrorsInnerFromJSON(json: any): ErrorErrorsInner { + return ErrorErrorsInnerFromJSONTyped(json, false); +} + +export function ErrorErrorsInnerFromJSONTyped(json: any, ignoreDiscriminator: boolean): ErrorErrorsInner { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'path': json['path'], + 'message': json['message'], + }; +} + +export function ErrorErrorsInnerToJSON(value?: ErrorErrorsInner | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'path': value.path, + 'message': value.message, + }; +} + diff --git a/payout/models/GetPayouts200Response.ts b/payout/models/GetPayouts200Response.ts new file mode 100644 index 0000000..dd20c9f --- /dev/null +++ b/payout/models/GetPayouts200Response.ts @@ -0,0 +1,88 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { GetPayouts200ResponseDataInner } from './GetPayouts200ResponseDataInner'; +import { + GetPayouts200ResponseDataInnerFromJSON, + GetPayouts200ResponseDataInnerFromJSONTyped, + GetPayouts200ResponseDataInnerToJSON, +} from './GetPayouts200ResponseDataInner'; +import type { GetPayouts200ResponseLinks } from './GetPayouts200ResponseLinks'; +import { + GetPayouts200ResponseLinksFromJSON, + GetPayouts200ResponseLinksFromJSONTyped, + GetPayouts200ResponseLinksToJSON, +} from './GetPayouts200ResponseLinks'; + +/** + * + * @export + * @interface GetPayouts200Response + */ +export interface GetPayouts200Response { + /** + * + * @type {Array} + * @memberof GetPayouts200Response + */ + data?: Array; + /** + * + * @type {boolean} + * @memberof GetPayouts200Response + */ + hasMore?: boolean; + /** + * + * @type {GetPayouts200ResponseLinks} + * @memberof GetPayouts200Response + */ + links?: GetPayouts200ResponseLinks; +} + +/** + * Check if a given object implements the GetPayouts200Response interface. + */ +export function instanceOfGetPayouts200Response(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function GetPayouts200ResponseFromJSON(json: any): GetPayouts200Response { + return GetPayouts200ResponseFromJSONTyped(json, false); +} + +export function GetPayouts200ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): GetPayouts200Response { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'data': !exists(json, 'data') ? undefined : ((json['data'] as Array).map(GetPayouts200ResponseDataInnerFromJSON)), + 'hasMore': !exists(json, 'has_more') ? undefined : json['has_more'], + 'links': !exists(json, 'links') ? undefined : GetPayouts200ResponseLinksFromJSON(json['links']), + }; +} + +export function GetPayouts200ResponseToJSON(value?: GetPayouts200Response | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'data': value.data === undefined ? undefined : ((value.data as Array).map(GetPayouts200ResponseDataInnerToJSON)), + 'has_more': value.hasMore, + 'links': GetPayouts200ResponseLinksToJSON(value.links), + }; +} + diff --git a/payout/models/GetPayouts200ResponseDataInner.ts b/payout/models/GetPayouts200ResponseDataInner.ts new file mode 100644 index 0000000..d9ae3d8 --- /dev/null +++ b/payout/models/GetPayouts200ResponseDataInner.ts @@ -0,0 +1,228 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { DigitalPayoutChannelProperties } from './DigitalPayoutChannelProperties'; +import { + DigitalPayoutChannelPropertiesFromJSON, + DigitalPayoutChannelPropertiesFromJSONTyped, + DigitalPayoutChannelPropertiesToJSON, +} from './DigitalPayoutChannelProperties'; +import type { Payout } from './Payout'; +import { + PayoutFromJSON, + PayoutFromJSONTyped, + PayoutToJSON, +} from './Payout'; +import type { ReceiptNotification } from './ReceiptNotification'; +import { + ReceiptNotificationFromJSON, + ReceiptNotificationFromJSONTyped, + ReceiptNotificationToJSON, +} from './ReceiptNotification'; + +/** + * + * @export + * @interface GetPayouts200ResponseDataInner + */ +export interface GetPayouts200ResponseDataInner { + /** + * A client defined payout identifier + * @type {string} + * @memberof GetPayouts200ResponseDataInner + */ + referenceId: string; + /** + * Channel code of selected destination bank or e-wallet + * @type {string} + * @memberof GetPayouts200ResponseDataInner + */ + channelCode: string; + /** + * + * @type {DigitalPayoutChannelProperties} + * @memberof GetPayouts200ResponseDataInner + */ + channelProperties: DigitalPayoutChannelProperties; + /** + * Amount to be sent to the destination account and should be a multiple of the minimum increment for the selected channel + * @type {number} + * @memberof GetPayouts200ResponseDataInner + */ + amount: number; + /** + * Description to send with the payout, the recipient may see this e.g., in their bank statement (if supported) or in email receipts we send on your behalf + * @type {string} + * @memberof GetPayouts200ResponseDataInner + */ + description?: string; + /** + * Currency of the destination channel using ISO-4217 currency code + * @type {string} + * @memberof GetPayouts200ResponseDataInner + */ + currency: string; + /** + * + * @type {ReceiptNotification} + * @memberof GetPayouts200ResponseDataInner + */ + receiptNotification?: ReceiptNotification; + /** + * Object of additional information you may use + * @type {object} + * @memberof GetPayouts200ResponseDataInner + */ + metadata?: object; + /** + * Xendit-generated unique identifier for each payout + * @type {string} + * @memberof GetPayouts200ResponseDataInner + */ + id: string; + /** + * The time payout was created on Xendit's system, in ISO 8601 format + * @type {Date} + * @memberof GetPayouts200ResponseDataInner + */ + created: Date; + /** + * The time payout was last updated on Xendit's system, in ISO 8601 format + * @type {Date} + * @memberof GetPayouts200ResponseDataInner + */ + updated: Date; + /** + * Xendit Business ID + * @type {string} + * @memberof GetPayouts200ResponseDataInner + */ + businessId: string; + /** + * Status of payout + * @type {string} + * @memberof GetPayouts200ResponseDataInner + */ + status: GetPayouts200ResponseDataInnerStatusEnum; + /** + * If the Payout failed, we include a failure code for more details on the failure. + * @type {string} + * @memberof GetPayouts200ResponseDataInner + */ + failureCode?: GetPayouts200ResponseDataInnerFailureCodeEnum; + /** + * Our estimated time on to when your payout is reflected to the destination account + * @type {Date} + * @memberof GetPayouts200ResponseDataInner + */ + estimatedArrivalTime?: Date; +} + + +/** + * @export + */ +export const GetPayouts200ResponseDataInnerStatusEnum = { + Succeeded: 'SUCCEEDED', + Failed: 'FAILED', + Accepted: 'ACCEPTED', + Requested: 'REQUESTED', + Locked: 'LOCKED', + Cancelled: 'CANCELLED', + Reversed: 'REVERSED' +} as const; +export type GetPayouts200ResponseDataInnerStatusEnum = typeof GetPayouts200ResponseDataInnerStatusEnum[keyof typeof GetPayouts200ResponseDataInnerStatusEnum]; + +/** + * @export + */ +export const GetPayouts200ResponseDataInnerFailureCodeEnum = { + InsufficientBalance: 'INSUFFICIENT_BALANCE', + RejectedByChannel: 'REJECTED_BY_CHANNEL', + TemporaryTransferError: 'TEMPORARY_TRANSFER_ERROR', + InvalidDestination: 'INVALID_DESTINATION', + TransferError: 'TRANSFER_ERROR' +} as const; +export type GetPayouts200ResponseDataInnerFailureCodeEnum = typeof GetPayouts200ResponseDataInnerFailureCodeEnum[keyof typeof GetPayouts200ResponseDataInnerFailureCodeEnum]; + + +/** + * Check if a given object implements the GetPayouts200ResponseDataInner interface. + */ +export function instanceOfGetPayouts200ResponseDataInner(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "referenceId" in value; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + isInstance = isInstance && "amount" in value; + isInstance = isInstance && "currency" in value; + isInstance = isInstance && "id" in value; + isInstance = isInstance && "created" in value; + isInstance = isInstance && "updated" in value; + isInstance = isInstance && "businessId" in value; + isInstance = isInstance && "status" in value; + + return isInstance; +} + +export function GetPayouts200ResponseDataInnerFromJSON(json: any): GetPayouts200ResponseDataInner { + return GetPayouts200ResponseDataInnerFromJSONTyped(json, false); +} + +export function GetPayouts200ResponseDataInnerFromJSONTyped(json: any, ignoreDiscriminator: boolean): GetPayouts200ResponseDataInner { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'referenceId': json['reference_id'], + 'channelCode': json['channel_code'], + 'channelProperties': DigitalPayoutChannelPropertiesFromJSON(json['channel_properties']), + 'amount': json['amount'], + 'description': !exists(json, 'description') ? undefined : json['description'], + 'currency': json['currency'], + 'receiptNotification': !exists(json, 'receipt_notification') ? undefined : ReceiptNotificationFromJSON(json['receipt_notification']), + 'metadata': !exists(json, 'metadata') ? undefined : json['metadata'], + 'id': json['id'], + 'created': (new Date(json['created'])), + 'updated': (new Date(json['updated'])), + 'businessId': json['business_id'], + 'status': json['status'], + 'failureCode': !exists(json, 'failure_code') ? undefined : json['failure_code'], + 'estimatedArrivalTime': !exists(json, 'estimated_arrival_time') ? undefined : (new Date(json['estimated_arrival_time'])), + }; +} + +export function GetPayouts200ResponseDataInnerToJSON(value?: GetPayouts200ResponseDataInner | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'reference_id': value.referenceId, + 'channel_code': value.channelCode, + 'channel_properties': DigitalPayoutChannelPropertiesToJSON(value.channelProperties), + 'amount': value.amount, + 'description': value.description, + 'currency': value.currency, + 'receipt_notification': ReceiptNotificationToJSON(value.receiptNotification), + 'metadata': value.metadata, + 'id': value.id, + 'created': (value.created.toISOString()), + 'updated': (value.updated.toISOString()), + 'business_id': value.businessId, + 'status': value.status, + 'failure_code': value.failureCode, + 'estimated_arrival_time': value.estimatedArrivalTime === undefined ? undefined : (value.estimatedArrivalTime.toISOString()), + }; +} + diff --git a/payout/models/GetPayouts200ResponseLinks.ts b/payout/models/GetPayouts200ResponseLinks.ts new file mode 100644 index 0000000..f21e603 --- /dev/null +++ b/payout/models/GetPayouts200ResponseLinks.ts @@ -0,0 +1,75 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface GetPayouts200ResponseLinks + */ +export interface GetPayouts200ResponseLinks { + /** + * + * @type {string} + * @memberof GetPayouts200ResponseLinks + */ + href?: string; + /** + * + * @type {string} + * @memberof GetPayouts200ResponseLinks + */ + rel?: string; + /** + * + * @type {string} + * @memberof GetPayouts200ResponseLinks + */ + method?: string; +} + +/** + * Check if a given object implements the GetPayouts200ResponseLinks interface. + */ +export function instanceOfGetPayouts200ResponseLinks(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function GetPayouts200ResponseLinksFromJSON(json: any): GetPayouts200ResponseLinks { + return GetPayouts200ResponseLinksFromJSONTyped(json, false); +} + +export function GetPayouts200ResponseLinksFromJSONTyped(json: any, ignoreDiscriminator: boolean): GetPayouts200ResponseLinks { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'href': !exists(json, 'href') ? undefined : json['href'], + 'rel': !exists(json, 'rel') ? undefined : json['rel'], + 'method': !exists(json, 'method') ? undefined : json['method'], + }; +} + +export function GetPayouts200ResponseLinksToJSON(value?: GetPayouts200ResponseLinks | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'href': value.href, + 'rel': value.rel, + 'method': value.method, + }; +} + diff --git a/payout/models/ModelError.ts b/payout/models/ModelError.ts new file mode 100644 index 0000000..63944e2 --- /dev/null +++ b/payout/models/ModelError.ts @@ -0,0 +1,84 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { ErrorErrorsInner } from './ErrorErrorsInner'; +import { + ErrorErrorsInnerFromJSON, + ErrorErrorsInnerFromJSONTyped, + ErrorErrorsInnerToJSON, +} from './ErrorErrorsInner'; + +/** + * + * @export + * @interface ModelError + */ +export interface ModelError { + /** + * Specific error encountered when processing the request, can refer to the API documentation on proper handling of each available error code https://developers.xendit.co/api-reference/#payouts + * @type {string} + * @memberof ModelError + */ + errorCode: string; + /** + * Human readable error message + * @type {string} + * @memberof ModelError + */ + message: string; + /** + * + * @type {Array} + * @memberof ModelError + */ + errors?: Array; +} + +/** + * Check if a given object implements the ModelError interface. + */ +export function instanceOfModelError(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "errorCode" in value; + isInstance = isInstance && "message" in value; + + return isInstance; +} + +export function ModelErrorFromJSON(json: any): ModelError { + return ModelErrorFromJSONTyped(json, false); +} + +export function ModelErrorFromJSONTyped(json: any, ignoreDiscriminator: boolean): ModelError { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': json['error_code'], + 'message': json['message'], + 'errors': !exists(json, 'errors') ? undefined : ((json['errors'] as Array).map(ErrorErrorsInnerFromJSON)), + }; +} + +export function ModelErrorToJSON(value?: ModelError | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + 'errors': value.errors === undefined ? undefined : ((value.errors as Array).map(ErrorErrorsInnerToJSON)), + }; +} + diff --git a/payout/models/Payout.ts b/payout/models/Payout.ts new file mode 100644 index 0000000..c740597 --- /dev/null +++ b/payout/models/Payout.ts @@ -0,0 +1,222 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { DigitalPayoutChannelProperties } from './DigitalPayoutChannelProperties'; +import { + DigitalPayoutChannelPropertiesFromJSON, + DigitalPayoutChannelPropertiesFromJSONTyped, + DigitalPayoutChannelPropertiesToJSON, +} from './DigitalPayoutChannelProperties'; +import type { ReceiptNotification } from './ReceiptNotification'; +import { + ReceiptNotificationFromJSON, + ReceiptNotificationFromJSONTyped, + ReceiptNotificationToJSON, +} from './ReceiptNotification'; + +/** + * + * @export + * @interface Payout + */ +export interface Payout { + /** + * A client defined payout identifier + * @type {string} + * @memberof Payout + */ + referenceId: string; + /** + * Channel code of selected destination bank or e-wallet + * @type {string} + * @memberof Payout + */ + channelCode: string; + /** + * + * @type {DigitalPayoutChannelProperties} + * @memberof Payout + */ + channelProperties: DigitalPayoutChannelProperties; + /** + * Amount to be sent to the destination account and should be a multiple of the minimum increment for the selected channel + * @type {number} + * @memberof Payout + */ + amount: number; + /** + * Description to send with the payout, the recipient may see this e.g., in their bank statement (if supported) or in email receipts we send on your behalf + * @type {string} + * @memberof Payout + */ + description?: string; + /** + * Currency of the destination channel using ISO-4217 currency code + * @type {string} + * @memberof Payout + */ + currency: string; + /** + * + * @type {ReceiptNotification} + * @memberof Payout + */ + receiptNotification?: ReceiptNotification; + /** + * Object of additional information you may use + * @type {object} + * @memberof Payout + */ + metadata?: object; + /** + * Xendit-generated unique identifier for each payout + * @type {string} + * @memberof Payout + */ + id: string; + /** + * The time payout was created on Xendit's system, in ISO 8601 format + * @type {Date} + * @memberof Payout + */ + created: Date; + /** + * The time payout was last updated on Xendit's system, in ISO 8601 format + * @type {Date} + * @memberof Payout + */ + updated: Date; + /** + * Xendit Business ID + * @type {string} + * @memberof Payout + */ + businessId: string; + /** + * Status of payout + * @type {string} + * @memberof Payout + */ + status: PayoutStatusEnum; + /** + * If the Payout failed, we include a failure code for more details on the failure. + * @type {string} + * @memberof Payout + */ + failureCode?: PayoutFailureCodeEnum; + /** + * Our estimated time on to when your payout is reflected to the destination account + * @type {Date} + * @memberof Payout + */ + estimatedArrivalTime?: Date; +} + + +/** + * @export + */ +export const PayoutStatusEnum = { + Succeeded: 'SUCCEEDED', + Failed: 'FAILED', + Accepted: 'ACCEPTED', + Requested: 'REQUESTED', + Locked: 'LOCKED', + Cancelled: 'CANCELLED', + Reversed: 'REVERSED' +} as const; +export type PayoutStatusEnum = typeof PayoutStatusEnum[keyof typeof PayoutStatusEnum]; + +/** + * @export + */ +export const PayoutFailureCodeEnum = { + InsufficientBalance: 'INSUFFICIENT_BALANCE', + RejectedByChannel: 'REJECTED_BY_CHANNEL', + TemporaryTransferError: 'TEMPORARY_TRANSFER_ERROR', + InvalidDestination: 'INVALID_DESTINATION', + TransferError: 'TRANSFER_ERROR' +} as const; +export type PayoutFailureCodeEnum = typeof PayoutFailureCodeEnum[keyof typeof PayoutFailureCodeEnum]; + + +/** + * Check if a given object implements the Payout interface. + */ +export function instanceOfPayout(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "referenceId" in value; + isInstance = isInstance && "channelCode" in value; + isInstance = isInstance && "channelProperties" in value; + isInstance = isInstance && "amount" in value; + isInstance = isInstance && "currency" in value; + isInstance = isInstance && "id" in value; + isInstance = isInstance && "created" in value; + isInstance = isInstance && "updated" in value; + isInstance = isInstance && "businessId" in value; + isInstance = isInstance && "status" in value; + + return isInstance; +} + +export function PayoutFromJSON(json: any): Payout { + return PayoutFromJSONTyped(json, false); +} + +export function PayoutFromJSONTyped(json: any, ignoreDiscriminator: boolean): Payout { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'referenceId': json['reference_id'], + 'channelCode': json['channel_code'], + 'channelProperties': DigitalPayoutChannelPropertiesFromJSON(json['channel_properties']), + 'amount': json['amount'], + 'description': !exists(json, 'description') ? undefined : json['description'], + 'currency': json['currency'], + 'receiptNotification': !exists(json, 'receipt_notification') ? undefined : ReceiptNotificationFromJSON(json['receipt_notification']), + 'metadata': !exists(json, 'metadata') ? undefined : json['metadata'], + 'id': json['id'], + 'created': (new Date(json['created'])), + 'updated': (new Date(json['updated'])), + 'businessId': json['business_id'], + 'status': json['status'], + 'failureCode': !exists(json, 'failure_code') ? undefined : json['failure_code'], + 'estimatedArrivalTime': !exists(json, 'estimated_arrival_time') ? undefined : (new Date(json['estimated_arrival_time'])), + }; +} + +export function PayoutToJSON(value?: Payout | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'reference_id': value.referenceId, + 'channel_code': value.channelCode, + 'channel_properties': DigitalPayoutChannelPropertiesToJSON(value.channelProperties), + 'amount': value.amount, + 'description': value.description, + 'currency': value.currency, + 'receipt_notification': ReceiptNotificationToJSON(value.receiptNotification), + 'metadata': value.metadata, + 'id': value.id, + 'created': (value.created.toISOString()), + 'updated': (value.updated.toISOString()), + 'business_id': value.businessId, + 'status': value.status, + 'failure_code': value.failureCode, + 'estimated_arrival_time': value.estimatedArrivalTime === undefined ? undefined : (value.estimatedArrivalTime.toISOString()), + }; +} + diff --git a/payout/models/PayoutAllOf.ts b/payout/models/PayoutAllOf.ts new file mode 100644 index 0000000..d71b2b1 --- /dev/null +++ b/payout/models/PayoutAllOf.ts @@ -0,0 +1,140 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface PayoutAllOf + */ +export interface PayoutAllOf { + /** + * Xendit-generated unique identifier for each payout + * @type {string} + * @memberof PayoutAllOf + */ + id: string; + /** + * The time payout was created on Xendit's system, in ISO 8601 format + * @type {Date} + * @memberof PayoutAllOf + */ + created: Date; + /** + * The time payout was last updated on Xendit's system, in ISO 8601 format + * @type {Date} + * @memberof PayoutAllOf + */ + updated: Date; + /** + * Xendit Business ID + * @type {string} + * @memberof PayoutAllOf + */ + businessId: string; + /** + * Status of payout + * @type {string} + * @memberof PayoutAllOf + */ + status: PayoutAllOfStatusEnum; + /** + * If the Payout failed, we include a failure code for more details on the failure. + * @type {string} + * @memberof PayoutAllOf + */ + failureCode?: PayoutAllOfFailureCodeEnum; + /** + * Our estimated time on to when your payout is reflected to the destination account + * @type {Date} + * @memberof PayoutAllOf + */ + estimatedArrivalTime?: Date; +} + + +/** + * @export + */ +export const PayoutAllOfStatusEnum = { + Succeeded: 'SUCCEEDED', + Failed: 'FAILED', + Accepted: 'ACCEPTED', + Requested: 'REQUESTED', + Locked: 'LOCKED', + Cancelled: 'CANCELLED', + Reversed: 'REVERSED' +} as const; +export type PayoutAllOfStatusEnum = typeof PayoutAllOfStatusEnum[keyof typeof PayoutAllOfStatusEnum]; + +/** + * @export + */ +export const PayoutAllOfFailureCodeEnum = { + InsufficientBalance: 'INSUFFICIENT_BALANCE', + RejectedByChannel: 'REJECTED_BY_CHANNEL', + TemporaryTransferError: 'TEMPORARY_TRANSFER_ERROR', + InvalidDestination: 'INVALID_DESTINATION', + TransferError: 'TRANSFER_ERROR' +} as const; +export type PayoutAllOfFailureCodeEnum = typeof PayoutAllOfFailureCodeEnum[keyof typeof PayoutAllOfFailureCodeEnum]; + + +/** + * Check if a given object implements the PayoutAllOf interface. + */ +export function instanceOfPayoutAllOf(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "id" in value; + isInstance = isInstance && "created" in value; + isInstance = isInstance && "updated" in value; + isInstance = isInstance && "businessId" in value; + isInstance = isInstance && "status" in value; + + return isInstance; +} + +export function PayoutAllOfFromJSON(json: any): PayoutAllOf { + return PayoutAllOfFromJSONTyped(json, false); +} + +export function PayoutAllOfFromJSONTyped(json: any, ignoreDiscriminator: boolean): PayoutAllOf { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'id': json['id'], + 'created': (new Date(json['created'])), + 'updated': (new Date(json['updated'])), + 'businessId': json['business_id'], + 'status': json['status'], + 'failureCode': !exists(json, 'failure_code') ? undefined : json['failure_code'], + 'estimatedArrivalTime': !exists(json, 'estimated_arrival_time') ? undefined : (new Date(json['estimated_arrival_time'])), + }; +} + +export function PayoutAllOfToJSON(value?: PayoutAllOf | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'id': value.id, + 'created': (value.created.toISOString()), + 'updated': (value.updated.toISOString()), + 'business_id': value.businessId, + 'status': value.status, + 'failure_code': value.failureCode, + 'estimated_arrival_time': value.estimatedArrivalTime === undefined ? undefined : (value.estimatedArrivalTime.toISOString()), + }; +} + diff --git a/payout/models/ReceiptNotification.ts b/payout/models/ReceiptNotification.ts new file mode 100644 index 0000000..b51507f --- /dev/null +++ b/payout/models/ReceiptNotification.ts @@ -0,0 +1,75 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * Additional notification for completed payout + * @export + * @interface ReceiptNotification + */ +export interface ReceiptNotification { + /** + * Valid email address to send the payout receipt + * @type {Array} + * @memberof ReceiptNotification + */ + emailTo?: Array | null; + /** + * Valid email address to cc the payout receipt + * @type {Array} + * @memberof ReceiptNotification + */ + emailCc?: Array | null; + /** + * Valid email address to bcc the payout receipt + * @type {Array} + * @memberof ReceiptNotification + */ + emailBcc?: Array | null; +} + +/** + * Check if a given object implements the ReceiptNotification interface. + */ +export function instanceOfReceiptNotification(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function ReceiptNotificationFromJSON(json: any): ReceiptNotification { + return ReceiptNotificationFromJSONTyped(json, false); +} + +export function ReceiptNotificationFromJSONTyped(json: any, ignoreDiscriminator: boolean): ReceiptNotification { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'emailTo': !exists(json, 'email_to') ? undefined : json['email_to'], + 'emailCc': !exists(json, 'email_cc') ? undefined : json['email_cc'], + 'emailBcc': !exists(json, 'email_bcc') ? undefined : json['email_bcc'], + }; +} + +export function ReceiptNotificationToJSON(value?: ReceiptNotification | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'email_to': value.emailTo, + 'email_cc': value.emailCc, + 'email_bcc': value.emailBcc, + }; +} + diff --git a/payout/models/index.ts b/payout/models/index.ts new file mode 100644 index 0000000..3239724 --- /dev/null +++ b/payout/models/index.ts @@ -0,0 +1,16 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './Channel'; +export * from './ChannelAccountType'; +export * from './ChannelAmountLimits'; +export * from './ChannelCategory'; +export * from './CreatePayoutRequest'; +export * from './DigitalPayoutChannelProperties'; +export * from './ErrorErrorsInner'; +export * from './GetPayouts200Response'; +export * from './GetPayouts200ResponseDataInner'; +export * from './GetPayouts200ResponseLinks'; +export * from './ModelError'; +export * from './Payout'; +export * from './PayoutAllOf'; +export * from './ReceiptNotification'; diff --git a/refund/apis/Refund.ts b/refund/apis/Refund.ts new file mode 100644 index 0000000..048f02c --- /dev/null +++ b/refund/apis/Refund.ts @@ -0,0 +1,197 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +import * as runtime from '../../runtime'; +import type { + CreateRefund, + CreateRefund400Response, + CreateRefund403Response, + CreateRefund404Response, + CreateRefund409Response, + CreateRefund503Response, + CreateRefundDefaultResponse, + Refund, + RefundList, +} from '../models'; +import { + CreateRefundFromJSON, + CreateRefundToJSON, + CreateRefund400ResponseFromJSON, + CreateRefund400ResponseToJSON, + CreateRefund403ResponseFromJSON, + CreateRefund403ResponseToJSON, + CreateRefund404ResponseFromJSON, + CreateRefund404ResponseToJSON, + CreateRefund409ResponseFromJSON, + CreateRefund409ResponseToJSON, + CreateRefund503ResponseFromJSON, + CreateRefund503ResponseToJSON, + CreateRefundDefaultResponseFromJSON, + CreateRefundDefaultResponseToJSON, + RefundFromJSON, + RefundToJSON, + RefundListFromJSON, + RefundListToJSON, +} from '../models'; + +export interface CancelRefundRequest { + refundID: string; + idempotencyKey?: string; +} + +export interface CreateRefundRequest { + idempotencyKey?: string; + data?: CreateRefund; +} + +export interface GetRefundRequest { + refundID: string; + idempotencyKey?: string; +} + +/** + * + */ +export class RefundApi extends runtime.BaseAPI { + + secretKey: string = ""; + xenditURL: string = ""; + + constructor({secretKey, xenditURL}: {secretKey: string, xenditURL?: string}) { + const conf = new runtime.Configuration({ + basePath: xenditURL || 'https://api.xendit.co' + }) + super(conf) + this.secretKey = secretKey; + } + + /** + */ + private async cancelRefundRaw(requestParameters: CancelRefundRequest): Promise> { + if (requestParameters.refundID === null || requestParameters.refundID === undefined) { + throw new runtime.RequiredError('refundID','Required parameter requestParameters.refundID was null or undefined when calling cancelRefund.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/refunds/{refundID}/cancel`.replace(`{${"refundID"}}`, encodeURIComponent(String(requestParameters.refundID))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => RefundFromJSON(jsonValue)); + } + + /** + */ + async cancelRefund(requestParameters: CancelRefundRequest): Promise { + const response = await this.cancelRefundRaw(requestParameters); + return await response.value(); + } + + /** + */ + private async createRefundRaw(requestParameters: CreateRefundRequest): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + headerParameters['Content-Type'] = 'application/json'; + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/refunds`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: CreateRefundToJSON(requestParameters.data), + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => RefundFromJSON(jsonValue)); + } + + /** + */ + async createRefund(requestParameters: CreateRefundRequest = {}): Promise { + const response = await this.createRefundRaw(requestParameters); + return await response.value(); + } + + /** + */ + private async getAllRefundsRaw(): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + const response = await this.request({ + path: `/refunds/`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => RefundListFromJSON(jsonValue)); + } + + /** + */ + async getAllRefunds(): Promise { + const response = await this.getAllRefundsRaw(); + return await response.value(); + } + + /** + */ + private async getRefundRaw(requestParameters: GetRefundRequest): Promise> { + if (requestParameters.refundID === null || requestParameters.refundID === undefined) { + throw new runtime.RequiredError('refundID','Required parameter requestParameters.refundID was null or undefined when calling getRefund.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + headerParameters["Authorization"] = "Basic " + btoa(this.secretKey + ":"); + + if (requestParameters.idempotencyKey !== undefined && requestParameters.idempotencyKey !== null) { + headerParameters['idempotency-key'] = String(requestParameters.idempotencyKey); + } + + const response = await this.request({ + path: `/refunds/{refundID}`.replace(`{${"refundID"}}`, encodeURIComponent(String(requestParameters.refundID))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + + return new runtime.JSONApiResponse(response, (jsonValue) => RefundFromJSON(jsonValue)); + } + + /** + */ + async getRefund(requestParameters: GetRefundRequest): Promise { + const response = await this.getRefundRaw(requestParameters); + return await response.value(); + } + +} diff --git a/refund/apis/index.ts b/refund/apis/index.ts new file mode 100644 index 0000000..6516f37 --- /dev/null +++ b/refund/apis/index.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './Refund'; diff --git a/refund/index.ts b/refund/index.ts new file mode 100644 index 0000000..749eb8c --- /dev/null +++ b/refund/index.ts @@ -0,0 +1,3 @@ +export { + RefundApi as Refund, +} from './apis' diff --git a/refund/models/CreateRefund.ts b/refund/models/CreateRefund.ts new file mode 100644 index 0000000..723d342 --- /dev/null +++ b/refund/models/CreateRefund.ts @@ -0,0 +1,121 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface CreateRefund + */ +export interface CreateRefund { + /** + * + * @type {string} + * @memberof CreateRefund + */ + paymentRequestId?: string; + /** + * + * @type {string} + * @memberof CreateRefund + */ + invoiceId?: string; + /** + * + * @type {string} + * @memberof CreateRefund + */ + referenceId?: string; + /** + * + * @type {number} + * @memberof CreateRefund + */ + amount?: number; + /** + * + * @type {string} + * @memberof CreateRefund + */ + currency?: string; + /** + * + * @type {string} + * @memberof CreateRefund + */ + reason?: CreateRefundReasonEnum; + /** + * + * @type {object} + * @memberof CreateRefund + */ + metadata?: object | null; +} + + +/** + * @export + */ +export const CreateRefundReasonEnum = { + Fraudulent: 'FRAUDULENT', + Duplicate: 'DUPLICATE', + RequestedByCustomer: 'REQUESTED_BY_CUSTOMER', + Cancellation: 'CANCELLATION', + Others: 'OTHERS' +} as const; +export type CreateRefundReasonEnum = typeof CreateRefundReasonEnum[keyof typeof CreateRefundReasonEnum]; + + +/** + * Check if a given object implements the CreateRefund interface. + */ +export function instanceOfCreateRefund(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CreateRefundFromJSON(json: any): CreateRefund { + return CreateRefundFromJSONTyped(json, false); +} + +export function CreateRefundFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateRefund { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'paymentRequestId': !exists(json, 'payment_request_id') ? undefined : json['payment_request_id'], + 'invoiceId': !exists(json, 'invoice_id') ? undefined : json['invoice_id'], + 'referenceId': !exists(json, 'reference_id') ? undefined : json['reference_id'], + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'currency': !exists(json, 'currency') ? undefined : json['currency'], + 'reason': !exists(json, 'reason') ? undefined : json['reason'], + 'metadata': !exists(json, 'metadata') ? undefined : json['metadata'], + }; +} + +export function CreateRefundToJSON(value?: CreateRefund | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'payment_request_id': value.paymentRequestId, + 'invoice_id': value.invoiceId, + 'reference_id': value.referenceId, + 'amount': value.amount, + 'currency': value.currency, + 'reason': value.reason, + 'metadata': value.metadata, + }; +} + diff --git a/refund/models/CreateRefund400Response.ts b/refund/models/CreateRefund400Response.ts new file mode 100644 index 0000000..7735902 --- /dev/null +++ b/refund/models/CreateRefund400Response.ts @@ -0,0 +1,83 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface CreateRefund400Response + */ +export interface CreateRefund400Response { + /** + * + * @type {string} + * @memberof CreateRefund400Response + */ + errorCode?: CreateRefund400ResponseErrorCodeEnum; + /** + * + * @type {string} + * @memberof CreateRefund400Response + */ + message?: string; +} + + +/** + * @export + */ +export const CreateRefund400ResponseErrorCodeEnum = { + ApiValidationError: 'API_VALIDATION_ERROR', + IneligibleTransaction: 'INELIGIBLE_TRANSACTION', + InsufficientBalance: 'INSUFFICIENT_BALANCE', + MaximumRefundAmountReached: 'MAXIMUM_REFUND_AMOUNT_REACHED', + PartialRefundNotSupported: 'PARTIAL_REFUND_NOT_SUPPORTED', + RefundNotSupported: 'REFUND_NOT_SUPPORTED', + TransactionNotFound: 'TRANSACTION_NOT_FOUND' +} as const; +export type CreateRefund400ResponseErrorCodeEnum = typeof CreateRefund400ResponseErrorCodeEnum[keyof typeof CreateRefund400ResponseErrorCodeEnum]; + + +/** + * Check if a given object implements the CreateRefund400Response interface. + */ +export function instanceOfCreateRefund400Response(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CreateRefund400ResponseFromJSON(json: any): CreateRefund400Response { + return CreateRefund400ResponseFromJSONTyped(json, false); +} + +export function CreateRefund400ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateRefund400Response { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': !exists(json, 'error_code') ? undefined : json['error_code'], + 'message': !exists(json, 'message') ? undefined : json['message'], + }; +} + +export function CreateRefund400ResponseToJSON(value?: CreateRefund400Response | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/refund/models/CreateRefund403Response.ts b/refund/models/CreateRefund403Response.ts new file mode 100644 index 0000000..998682f --- /dev/null +++ b/refund/models/CreateRefund403Response.ts @@ -0,0 +1,77 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface CreateRefund403Response + */ +export interface CreateRefund403Response { + /** + * + * @type {string} + * @memberof CreateRefund403Response + */ + errorCode?: CreateRefund403ResponseErrorCodeEnum; + /** + * + * @type {string} + * @memberof CreateRefund403Response + */ + message?: string; +} + + +/** + * @export + */ +export const CreateRefund403ResponseErrorCodeEnum = { + Unauthorized: 'UNAUTHORIZED' +} as const; +export type CreateRefund403ResponseErrorCodeEnum = typeof CreateRefund403ResponseErrorCodeEnum[keyof typeof CreateRefund403ResponseErrorCodeEnum]; + + +/** + * Check if a given object implements the CreateRefund403Response interface. + */ +export function instanceOfCreateRefund403Response(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CreateRefund403ResponseFromJSON(json: any): CreateRefund403Response { + return CreateRefund403ResponseFromJSONTyped(json, false); +} + +export function CreateRefund403ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateRefund403Response { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': !exists(json, 'error_code') ? undefined : json['error_code'], + 'message': !exists(json, 'message') ? undefined : json['message'], + }; +} + +export function CreateRefund403ResponseToJSON(value?: CreateRefund403Response | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/refund/models/CreateRefund404Response.ts b/refund/models/CreateRefund404Response.ts new file mode 100644 index 0000000..de629e9 --- /dev/null +++ b/refund/models/CreateRefund404Response.ts @@ -0,0 +1,77 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface CreateRefund404Response + */ +export interface CreateRefund404Response { + /** + * + * @type {string} + * @memberof CreateRefund404Response + */ + errorCode?: CreateRefund404ResponseErrorCodeEnum; + /** + * + * @type {string} + * @memberof CreateRefund404Response + */ + message?: string; +} + + +/** + * @export + */ +export const CreateRefund404ResponseErrorCodeEnum = { + DataNotFound: 'DATA_NOT_FOUND' +} as const; +export type CreateRefund404ResponseErrorCodeEnum = typeof CreateRefund404ResponseErrorCodeEnum[keyof typeof CreateRefund404ResponseErrorCodeEnum]; + + +/** + * Check if a given object implements the CreateRefund404Response interface. + */ +export function instanceOfCreateRefund404Response(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CreateRefund404ResponseFromJSON(json: any): CreateRefund404Response { + return CreateRefund404ResponseFromJSONTyped(json, false); +} + +export function CreateRefund404ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateRefund404Response { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': !exists(json, 'error_code') ? undefined : json['error_code'], + 'message': !exists(json, 'message') ? undefined : json['message'], + }; +} + +export function CreateRefund404ResponseToJSON(value?: CreateRefund404Response | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/refund/models/CreateRefund409Response.ts b/refund/models/CreateRefund409Response.ts new file mode 100644 index 0000000..cb7a748 --- /dev/null +++ b/refund/models/CreateRefund409Response.ts @@ -0,0 +1,78 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface CreateRefund409Response + */ +export interface CreateRefund409Response { + /** + * + * @type {string} + * @memberof CreateRefund409Response + */ + errorCode?: CreateRefund409ResponseErrorCodeEnum; + /** + * + * @type {string} + * @memberof CreateRefund409Response + */ + message?: string; +} + + +/** + * @export + */ +export const CreateRefund409ResponseErrorCodeEnum = { + DuplicateError: 'DUPLICATE_ERROR', + IdempotencyError: 'IDEMPOTENCY_ERROR' +} as const; +export type CreateRefund409ResponseErrorCodeEnum = typeof CreateRefund409ResponseErrorCodeEnum[keyof typeof CreateRefund409ResponseErrorCodeEnum]; + + +/** + * Check if a given object implements the CreateRefund409Response interface. + */ +export function instanceOfCreateRefund409Response(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CreateRefund409ResponseFromJSON(json: any): CreateRefund409Response { + return CreateRefund409ResponseFromJSONTyped(json, false); +} + +export function CreateRefund409ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateRefund409Response { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': !exists(json, 'error_code') ? undefined : json['error_code'], + 'message': !exists(json, 'message') ? undefined : json['message'], + }; +} + +export function CreateRefund409ResponseToJSON(value?: CreateRefund409Response | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/refund/models/CreateRefund503Response.ts b/refund/models/CreateRefund503Response.ts new file mode 100644 index 0000000..f6f03f7 --- /dev/null +++ b/refund/models/CreateRefund503Response.ts @@ -0,0 +1,78 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface CreateRefund503Response + */ +export interface CreateRefund503Response { + /** + * + * @type {string} + * @memberof CreateRefund503Response + */ + errorCode?: CreateRefund503ResponseErrorCodeEnum; + /** + * + * @type {string} + * @memberof CreateRefund503Response + */ + message?: string; +} + + +/** + * @export + */ +export const CreateRefund503ResponseErrorCodeEnum = { + ChannelUnavailable: 'CHANNEL_UNAVAILABLE', + OtpDeliveryError: 'OTP_DELIVERY_ERROR' +} as const; +export type CreateRefund503ResponseErrorCodeEnum = typeof CreateRefund503ResponseErrorCodeEnum[keyof typeof CreateRefund503ResponseErrorCodeEnum]; + + +/** + * Check if a given object implements the CreateRefund503Response interface. + */ +export function instanceOfCreateRefund503Response(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CreateRefund503ResponseFromJSON(json: any): CreateRefund503Response { + return CreateRefund503ResponseFromJSONTyped(json, false); +} + +export function CreateRefund503ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateRefund503Response { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': !exists(json, 'error_code') ? undefined : json['error_code'], + 'message': !exists(json, 'message') ? undefined : json['message'], + }; +} + +export function CreateRefund503ResponseToJSON(value?: CreateRefund503Response | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/refund/models/CreateRefundDefaultResponse.ts b/refund/models/CreateRefundDefaultResponse.ts new file mode 100644 index 0000000..32d5db3 --- /dev/null +++ b/refund/models/CreateRefundDefaultResponse.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface CreateRefundDefaultResponse + */ +export interface CreateRefundDefaultResponse { + /** + * + * @type {string} + * @memberof CreateRefundDefaultResponse + */ + errorCode?: string; + /** + * + * @type {string} + * @memberof CreateRefundDefaultResponse + */ + message?: string; +} + +/** + * Check if a given object implements the CreateRefundDefaultResponse interface. + */ +export function instanceOfCreateRefundDefaultResponse(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function CreateRefundDefaultResponseFromJSON(json: any): CreateRefundDefaultResponse { + return CreateRefundDefaultResponseFromJSONTyped(json, false); +} + +export function CreateRefundDefaultResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateRefundDefaultResponse { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'errorCode': !exists(json, 'error_code') ? undefined : json['error_code'], + 'message': !exists(json, 'message') ? undefined : json['message'], + }; +} + +export function CreateRefundDefaultResponseToJSON(value?: CreateRefundDefaultResponse | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'error_code': value.errorCode, + 'message': value.message, + }; +} + diff --git a/refund/models/Refund.ts b/refund/models/Refund.ts new file mode 100644 index 0000000..feaa152 --- /dev/null +++ b/refund/models/Refund.ts @@ -0,0 +1,147 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +/** + * + * @export + * @interface Refund + */ +export interface Refund { + /** + * + * @type {string} + * @memberof Refund + */ + id?: string; + /** + * + * @type {string} + * @memberof Refund + */ + paymentRequestId?: string; + /** + * + * @type {number} + * @memberof Refund + */ + amount?: number; + /** + * + * @type {string} + * @memberof Refund + */ + channelCode?: string; + /** + * + * @type {string} + * @memberof Refund + */ + country?: string; + /** + * + * @type {string} + * @memberof Refund + */ + currency?: string; + /** + * + * @type {string} + * @memberof Refund + */ + referenceId?: string | null; + /** + * + * @type {string} + * @memberof Refund + */ + failureCode?: string | null; + /** + * + * @type {number} + * @memberof Refund + */ + refundFeeAmount?: number | null; + /** + * + * @type {string} + * @memberof Refund + */ + created?: string; + /** + * + * @type {string} + * @memberof Refund + */ + updated?: string; + /** + * + * @type {object} + * @memberof Refund + */ + metadata?: object | null; +} + +/** + * Check if a given object implements the Refund interface. + */ +export function instanceOfRefund(value: object): boolean { + let isInstance = true; + + return isInstance; +} + +export function RefundFromJSON(json: any): Refund { + return RefundFromJSONTyped(json, false); +} + +export function RefundFromJSONTyped(json: any, ignoreDiscriminator: boolean): Refund { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'id': !exists(json, 'id') ? undefined : json['id'], + 'paymentRequestId': !exists(json, 'payment_request_id') ? undefined : json['payment_request_id'], + 'amount': !exists(json, 'amount') ? undefined : json['amount'], + 'channelCode': !exists(json, 'channel_code') ? undefined : json['channel_code'], + 'country': !exists(json, 'country') ? undefined : json['country'], + 'currency': !exists(json, 'currency') ? undefined : json['currency'], + 'referenceId': !exists(json, 'reference_id') ? undefined : json['reference_id'], + 'failureCode': !exists(json, 'failure_code') ? undefined : json['failure_code'], + 'refundFeeAmount': !exists(json, 'refund_fee_amount') ? undefined : json['refund_fee_amount'], + 'created': !exists(json, 'created') ? undefined : json['created'], + 'updated': !exists(json, 'updated') ? undefined : json['updated'], + 'metadata': !exists(json, 'metadata') ? undefined : json['metadata'], + }; +} + +export function RefundToJSON(value?: Refund | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'id': value.id, + 'payment_request_id': value.paymentRequestId, + 'amount': value.amount, + 'channel_code': value.channelCode, + 'country': value.country, + 'currency': value.currency, + 'reference_id': value.referenceId, + 'failure_code': value.failureCode, + 'refund_fee_amount': value.refundFeeAmount, + 'created': value.created, + 'updated': value.updated, + 'metadata': value.metadata, + }; +} + diff --git a/refund/models/RefundList.ts b/refund/models/RefundList.ts new file mode 100644 index 0000000..3c08382 --- /dev/null +++ b/refund/models/RefundList.ts @@ -0,0 +1,75 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + +import { exists, mapValues } from '../../runtime'; +import type { Refund } from './Refund'; +import { + RefundFromJSON, + RefundFromJSONTyped, + RefundToJSON, +} from './Refund'; + +/** + * + * @export + * @interface RefundList + */ +export interface RefundList { + /** + * + * @type {Array} + * @memberof RefundList + */ + data: Array; + /** + * + * @type {boolean} + * @memberof RefundList + */ + hasMore?: boolean; +} + +/** + * Check if a given object implements the RefundList interface. + */ +export function instanceOfRefundList(value: object): boolean { + let isInstance = true; + isInstance = isInstance && "data" in value; + + return isInstance; +} + +export function RefundListFromJSON(json: any): RefundList { + return RefundListFromJSONTyped(json, false); +} + +export function RefundListFromJSONTyped(json: any, ignoreDiscriminator: boolean): RefundList { + if ((json === undefined) || (json === null)) { + return json; + } + return { + + 'data': ((json['data'] as Array).map(RefundFromJSON)), + 'hasMore': !exists(json, 'has_more') ? undefined : json['has_more'], + }; +} + +export function RefundListToJSON(value?: RefundList | null): any { + if (value === undefined) { + return undefined; + } + if (value === null) { + return null; + } + return { + + 'data': ((value.data as Array).map(RefundToJSON)), + 'has_more': value.hasMore, + }; +} + diff --git a/refund/models/index.ts b/refund/models/index.ts new file mode 100644 index 0000000..d58289f --- /dev/null +++ b/refund/models/index.ts @@ -0,0 +1,11 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './CreateRefund'; +export * from './CreateRefund400Response'; +export * from './CreateRefund403Response'; +export * from './CreateRefund404Response'; +export * from './CreateRefund409Response'; +export * from './CreateRefund503Response'; +export * from './CreateRefundDefaultResponse'; +export * from './Refund'; +export * from './RefundList'; diff --git a/runtime.ts b/runtime.ts new file mode 100644 index 0000000..fb70e5a --- /dev/null +++ b/runtime.ts @@ -0,0 +1,377 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * NOTE: This file is auto generated by Xendit. + * Do not edit the class manually. + * Improvements? Share your ideas at https://github.com/xendit/xendit-node + */ + + +export const BASE_PATH = "https://api.xendit.co".replace(/\/+$/, ""); + +export interface ConfigurationParameters { + basePath?: string; // override base path + fetchApi?: FetchAPI; // override for fetch implementation + middleware?: Middleware[]; // middleware to apply before/after fetch requests + queryParamsStringify?: (params: HTTPQuery) => string; // stringify function for query strings + username?: string; // parameter for basic security + password?: string; // parameter for basic security + apiKey?: string | ((name: string) => string); // parameter for apiKey security + accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string | Promise); // parameter for oauth2 security + headers?: HTTPHeaders; //header params we want to use on every request + credentials?: RequestCredentials; //value for the credentials param we want to use on each request +} + +export class Configuration { + constructor(private configuration: ConfigurationParameters = {}) {} + + set config(configuration: Configuration) { + this.configuration = configuration; + } + + get basePath(): string { + return this.configuration.basePath != null ? this.configuration.basePath : BASE_PATH; + } + + get fetchApi(): FetchAPI | undefined { + return this.configuration.fetchApi; + } + + get middleware(): Middleware[] { + return this.configuration.middleware || []; + } + + get queryParamsStringify(): (params: HTTPQuery) => string { + return this.configuration.queryParamsStringify || querystring; + } + + get username(): string | undefined { + return this.configuration.username; + } + + get password(): string | undefined { + return this.configuration.password; + } + + get apiKey(): ((name: string) => string) | undefined { + const apiKey = this.configuration.apiKey; + if (apiKey) { + return typeof apiKey === 'function' ? apiKey : () => apiKey; + } + return undefined; + } + + get accessToken(): ((name?: string, scopes?: string[]) => string | Promise) | undefined { + const accessToken = this.configuration.accessToken; + if (accessToken) { + return typeof accessToken === 'function' ? accessToken : async () => accessToken; + } + return undefined; + } + + get headers(): HTTPHeaders | undefined { + return this.configuration.headers; + } + + get credentials(): RequestCredentials | undefined { + return this.configuration.credentials; + } +} + +export const DefaultConfig = new Configuration(); + +/** + * This is the base class for all generated API classes. + */ +export class BaseAPI { + + private static readonly jsonRegex = new RegExp('^(:?application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(:?;.*)?$', 'i'); + private middleware: Middleware[]; + + constructor(protected configuration = DefaultConfig) { + this.middleware = configuration.middleware; + } + + /** + * Check if the given MIME is a JSON MIME. + * JSON MIME examples: + * application/json + * application/json; charset=UTF8 + * APPLICATION/JSON + * application/vnd.company+json + * @param mime - MIME (Multipurpose Internet Mail Extensions) + * @return True if the given MIME is JSON, false otherwise. + */ + protected isJsonMime(mime: string | null | undefined): boolean { + if (!mime) { + return false; + } + return BaseAPI.jsonRegex.test(mime); + } + + protected async request(context: RequestOpts): Promise { + const { url, init } = await this.createFetchParams(context); + const response = await this.fetchApi(url, init); + if (response && (response.status >= 200 && response.status < 300)) { + return response; + } + let errorResponse; + try { + errorResponse = await response.json(); + } catch (e) { + errorResponse = await response.text(); + } + throw new XenditSdkError(errorResponse, response.status, response.statusText); + } + + private async createFetchParams(context: RequestOpts) { + let url = this.configuration.basePath + context.path; + if (context.query !== undefined && Object.keys(context.query).length !== 0) { + // only add the querystring to the URL if there are query parameters. + // this is done to avoid urls ending with a "?" character which buggy webservers + // do not handle correctly sometimes. + url += '?' + this.configuration.queryParamsStringify(context.query); + } + + const headers = Object.assign({}, this.configuration.headers, context.headers); + Object.keys(headers).forEach(key => headers[key] === undefined ? delete headers[key] : {}); + headers['xendit-lib'] = 'node'; + headers['xendit-lib-ver'] = '3.0.0'; + + const initParams = { + method: context.method, + headers, + body: context.body, + credentials: this.configuration.credentials, + }; + + const overriddenInit: RequestInit = { + ...initParams, + }; + + const init: RequestInit = { + ...overriddenInit, + body: + isFormData(overriddenInit.body) || + overriddenInit.body instanceof URLSearchParams || + isBlob(overriddenInit.body) + ? overriddenInit.body + : JSON.stringify(overriddenInit.body), + }; + + return { url, init }; + } + + private fetchApi = async (url: string, init: RequestInit) => { + let fetchParams = { url, init }; + for (const middleware of this.middleware) { + if (middleware.pre) { + fetchParams = await middleware.pre({ + fetch: this.fetchApi, + ...fetchParams, + }) || fetchParams; + } + } + return await (this.configuration.fetchApi || fetch)(fetchParams.url, fetchParams.init); + } + + /** + * Create a shallow clone of `this` by constructing a new instance + * and then shallow cloning data members. + */ + private clone(this: T): T { + const constructor = this.constructor as any; + const next = new constructor(this.configuration); + next.middleware = this.middleware.slice(); + return next; + } +}; + +function isBlob(value: any): value is Blob { + return typeof Blob !== 'undefined' && value instanceof Blob; +} + +function isFormData(value: any): value is FormData { + return typeof FormData !== "undefined" && value instanceof FormData; +} + +export class XenditSdkError extends Error { + override name: "XenditSdkError" = "XenditSdkError"; + rawResponse?: any; + status: string; + errorCode?: string; + errorMessage?: string; + constructor(private response: any, status, statusText) { + super(`[Xendit SDK Error] ${status} ${statusText}`); + this.rawResponse = response; + this.status = status || this.rawResponse?.status || this.rawResponse?.status_code || this.rawResponse?.statusCode; + this.errorCode = this.rawResponse?.error || this.rawResponse?.error_code || this.rawResponse?.errorCode; + this.errorMessage = this.rawResponse?.message || this.rawResponse?.error_message || this.rawResponse?.errorMessage || statusText; + } +} + +export class ResponseError extends Error { + override name: "ResponseError" = "ResponseError"; + constructor(public response: Response, msg?: string) { + super(msg); + } +} + +export class FetchError extends Error { + override name: "FetchError" = "FetchError"; + constructor(public cause: Error, msg?: string) { + super(msg); + } +} + +export class RequiredError extends Error { + override name: "RequiredError" = "RequiredError"; + constructor(public field: string, msg?: string) { + super(msg); + } +} + +export const COLLECTION_FORMATS = { + csv: ",", + ssv: " ", + tsv: "\t", + pipes: "|", +}; + +export type FetchAPI = WindowOrWorkerGlobalScope['fetch']; + +export type Json = any; +export type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD'; +export type HTTPHeaders = { [key: string]: string }; +export type HTTPQuery = { [key: string]: string | number | null | boolean | Array | Set | HTTPQuery }; +export type HTTPBody = Json | FormData | URLSearchParams; + +export interface FetchParams { + url: string; + init: RequestInit; +} + +export interface RequestOpts { + path: string; + method: HTTPMethod; + headers: HTTPHeaders; + query?: HTTPQuery; + body?: HTTPBody; +} + +export function exists(json: any, key: string) { + const value = json[key]; + return value !== null && value !== undefined; +} + +export function querystring(params: HTTPQuery, prefix: string = ''): string { + return Object.keys(params) + .map(key => querystringSingleKey(key, params[key], prefix)) + .filter(part => part.length > 0) + .join('&'); +} + +function querystringSingleKey(key: string, value: string | number | null | undefined | boolean | Array | Set | HTTPQuery, keyPrefix: string = ''): string { + const fullKey = keyPrefix + (keyPrefix.length ? `[${key}]` : key); + if (value instanceof Array) { + const multiValue = value.map(singleValue => encodeURIComponent(String(singleValue))) + .join(`&${encodeURIComponent(fullKey)}=`); + return `${encodeURIComponent(fullKey)}=${multiValue}`; + } + if (value instanceof Set) { + const valueAsArray = Array.from(value); + return querystringSingleKey(key, valueAsArray, keyPrefix); + } + if (value instanceof Date) { + return `${encodeURIComponent(fullKey)}=${encodeURIComponent(value.toISOString())}`; + } + if (value instanceof Object) { + return querystring(value as HTTPQuery, fullKey); + } + return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`; +} + +export function mapValues(data: any, fn: (item: any) => any) { + return Object.keys(data).reduce( + (acc, key) => ({ ...acc, [key]: fn(data[key]) }), + {} + ); +} + +export function canConsumeForm(consumes: Consume[]): boolean { + for (const consume of consumes) { + if ('multipart/form-data' === consume.contentType) { + return true; + } + } + return false; +} + +export interface Consume { + contentType: string; +} + +export interface RequestContext { + fetch: FetchAPI; + url: string; + init: RequestInit; +} + +export interface ResponseContext { + fetch: FetchAPI; + url: string; + init: RequestInit; + response: Response; +} + +export interface ErrorContext { + error: unknown; + response?: Response; +} + +export interface Middleware { + pre?(context: RequestContext): Promise; + post?(context: ResponseContext): Promise; + onError?(context: ErrorContext): Promise; +} + +export interface ApiResponse { + raw: Response; + value(): Promise; +} + +export interface ResponseTransformer { + (json: any): T; +} + +export class JSONApiResponse { + constructor(public raw: Response, private transformer: ResponseTransformer = (jsonValue: any) => jsonValue) {} + + async value(): Promise { + return this.transformer(await this.raw.json()); + } +} + +export class VoidApiResponse { + constructor(public raw: Response) {} + + async value(): Promise { + return undefined; + } +} + +export class BlobApiResponse { + constructor(public raw: Response) {} + + async value(): Promise { + return await this.raw.blob(); + }; +} + +export class TextApiResponse { + constructor(public raw: Response) {} + + async value(): Promise { + return await this.raw.text(); + }; +} diff --git a/src/balance/balance.d.ts b/src/balance/balance.d.ts deleted file mode 100644 index f41a0c5..0000000 --- a/src/balance/balance.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; - -enum AccountType { - Cash = 'CASH', - Holding = 'HOLDING', - Tax = 'TAX', -} - -export = class Balance { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof Balance; - static AccountType: { - Cash: AccountType; - Holding: AccountType; - Tax: AccountType; - }; - getBalance(data: { accountType: AccountType }): Promise; -}; diff --git a/src/balance/balance.js b/src/balance/balance.js deleted file mode 100644 index 1de078b..0000000 --- a/src/balance/balance.js +++ /dev/null @@ -1,56 +0,0 @@ -const { - promWithJsErr, - Auth, - fetchWithHTTPErr, - queryStringWithoutUndefined, -} = require('../utils'); - -const BALANCE_PATH = '/balance'; - -function Balance(options) { - let aggOpts = options; - if (Balance._injectedOpts && Object.keys(Balance._injectedOpts).length > 0) { - aggOpts = Object.assign({}, options, Balance._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + BALANCE_PATH; -} - -Balance._injectedOpts = {}; -Balance._constructorWithInjectedXenditOpts = function(options) { - Balance._injectedOpts = options; - return Balance; -}; - -Balance.AccountType = { - Cash: 'CASH', - Holding: 'HOLDING', - Tax: 'TAX', -}; - -Balance.prototype.getBalance = function(data) { - return promWithJsErr((resolve, reject) => { - const queryStr = data - ? queryStringWithoutUndefined({ account_type: data.accountType }) - : ''; - const queryStrWithQuestionMark = queryStr ? `?${queryStr}` : ''; - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }; - - if (data && data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}${queryStrWithQuestionMark}`, { - method: 'GET', - headers, - }) - .then(resolve) - .catch(reject); - }); -}; - -module.exports = Balance; diff --git a/src/balance/index.d.ts b/src/balance/index.d.ts deleted file mode 100644 index d311c24..0000000 --- a/src/balance/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import BalanceServices = require('./balance'); - -export { BalanceServices }; diff --git a/src/balance/index.js b/src/balance/index.js deleted file mode 100644 index aa4258f..0000000 --- a/src/balance/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const BalanceServices = require('./balance'); - -module.exports = { BalanceServices }; diff --git a/src/card/authorization.d.ts b/src/card/authorization.d.ts deleted file mode 100644 index f0a5e82..0000000 --- a/src/card/authorization.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -export function createAuthorization(data: { - tokenID: string; - externalID: string; - amount?: number; - authID?: string; - cardCVN?: string; - descriptor?: string; - currency?: string; - midLabel?: string; - billingDetails?: object; - promotion?: object; - installment?: object; - forUserID?: string; -}): Promise; - -export function reverseAuthorization(data: { - chargeID: string; - externalID: string; - forUserID?: string; -}): Promise; diff --git a/src/card/authorization.js b/src/card/authorization.js deleted file mode 100644 index ca4aebf..0000000 --- a/src/card/authorization.js +++ /dev/null @@ -1,39 +0,0 @@ -const { Validate, Auth, fetchWithHTTPErr, promWithJsErr } = require('../utils'); - -function createAuthorization(data) { - data.capture = false; - return this.createCharge(data); -} - -function reverseAuthorization(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['chargeID', 'externalID']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr( - // eslint-disable-next-line max-len - `${this.API_ENDPOINT}/credit_card_charges/${data.chargeID}/auth_reversal`, - { - method: 'POST', - headers, - body: JSON.stringify({ external_id: data.externalID }), - }, - ) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { - createAuthorization, - reverseAuthorization, -}; diff --git a/src/card/card.d.ts b/src/card/card.d.ts deleted file mode 100644 index 3bb206c..0000000 --- a/src/card/card.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { createCharge, captureCharge, getCharge } from './charge'; -import { createRefund } from './refund'; -import { createPromotion } from './promotion'; -import { createAuthorization, reverseAuthorization } from './authorization'; -import CardStatus from './card_status'; -import { XenditOptions } from '../xendit_opts'; - -export = class Card { - constructor({}); - static Status = CardStatus; - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof Card; - createCharge = createCharge; - captureCharge = captureCharge; - getCharge = getCharge; - createAuthorization = createAuthorization; - reverseAuthorization = reverseAuthorization; - createRefund = createRefund; - createPromotion = createPromotion; -}; diff --git a/src/card/card.js b/src/card/card.js deleted file mode 100644 index 02baeae..0000000 --- a/src/card/card.js +++ /dev/null @@ -1,38 +0,0 @@ -const { createCharge, captureCharge, getCharge } = require('./charge'); -const { createPromotion } = require('./promotion'); -const { - createAuthorization, - reverseAuthorization, -} = require('./authorization'); -const { createRefund } = require('./refund'); -const CardStatus = require('./card_status'); - -const CARD_PATH = ''; - -function Card(options) { - let aggOpts = options; - if (Card._injectedOpts && Object.keys(Card._injectedOpts).length > 0) { - aggOpts = Object.assign({}, options, Card._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + CARD_PATH; -} - -Card._injectedOpts = {}; -Card._constructorWithInjectedXenditOpts = function(options) { - Card._injectedOpts = options; - return Card; -}; - -Card.Status = CardStatus; - -Card.prototype.createCharge = createCharge; -Card.prototype.captureCharge = captureCharge; -Card.prototype.getCharge = getCharge; -Card.prototype.createAuthorization = createAuthorization; -Card.prototype.reverseAuthorization = reverseAuthorization; -Card.prototype.createRefund = createRefund; -Card.prototype.createPromotion = createPromotion; - -module.exports = Card; diff --git a/src/card/card_status.js b/src/card/card_status.js deleted file mode 100644 index 63850f7..0000000 --- a/src/card/card_status.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - VERIFIED: 'VERIFIED', - IN_REVIEW: 'IN_REVIEW', - FAILED: 'FAILED', -}; diff --git a/src/card/charge.d.ts b/src/card/charge.d.ts deleted file mode 100644 index 2110bcc..0000000 --- a/src/card/charge.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -export function createCharge(data: { - tokenID: string; - externalID: string; - amount?: number; - authID?: string; - cardCVN?: string; - capture?: boolean; - descriptor?: string; - currency?: string; - midLabel?: string; - billingDetails?: object; - promotion?: object; - installment?: object; - forUserID?: string; - metadata?: object; - isRecurring: boolean; -}): Promise; - -export function captureCharge(data: { - chargeID: string; - amount: number; - forUserID?: string; -}): Promise; - -export function getCharge(data: { - chargeID: string; - forUserID?: string; -}): Promise; diff --git a/src/card/charge.js b/src/card/charge.js deleted file mode 100644 index 85e8a90..0000000 --- a/src/card/charge.js +++ /dev/null @@ -1,99 +0,0 @@ -const { Validate, Auth, fetchWithHTTPErr, promWithJsErr } = require('../utils'); - -function createCharge(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['tokenID', 'externalID', 'amount']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/credit_card_charges`, { - method: 'POST', - headers, - body: JSON.stringify({ - token_id: data.tokenID, - external_id: data.externalID, - amount: data.amount, - authentication_id: data.authID, - card_cvn: data.cardCVN, - capture: data.capture, - descriptor: data.descriptor, - currency: data.currency, - mid_label: data.midLabel, - billing_details: data.billingDetails, - promotion: data.promotion, - installment: data.installment, - metadata: data.metadata, - is_recurring: data.isRecurring, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -function captureCharge(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['chargeID', 'amount']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/credit_card_charges/${data.chargeID}/capture`, - { - method: 'POST', - headers, - body: JSON.stringify({ amount: data.amount }), - }, - ) - .then(resolve) - .catch(reject); - }); -} - -function getCharge(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['chargeID']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/credit_card_charges/${data.chargeID}`, - { - method: 'GET', - headers, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { - createCharge, - captureCharge, - getCharge, -}; diff --git a/src/card/index.d.ts b/src/card/index.d.ts deleted file mode 100644 index 5f751b7..0000000 --- a/src/card/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import CardService from './card'; - -export { CardService }; diff --git a/src/card/index.js b/src/card/index.js deleted file mode 100644 index 1da9c7f..0000000 --- a/src/card/index.js +++ /dev/null @@ -1,5 +0,0 @@ -const CardService = require('./card'); - -module.exports = { - CardService, -}; diff --git a/src/card/promotion.d.ts b/src/card/promotion.d.ts deleted file mode 100644 index 96ec636..0000000 --- a/src/card/promotion.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -export function createPromotion(data: { - referenceId: string; - description: string; - promoCode?: string; - binList?: string[]; - channelCode?: string; - discountPercent?: number; - discountAmount?: number; - currency: string; - startTime: Date; - endTime: Date; - minOriginalAmount?: number; - maxDiscountAmount?: number; -}): Promise; diff --git a/src/card/promotion.js b/src/card/promotion.js deleted file mode 100644 index 4b8aee7..0000000 --- a/src/card/promotion.js +++ /dev/null @@ -1,44 +0,0 @@ -const { Validate, Auth, fetchWithHTTPErr, promWithJsErr } = require('../utils'); - -function createPromotion(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = [ - 'referenceId', - 'description', - 'currency', - 'startTime', - 'endTime', - ]; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - fetchWithHTTPErr(`${this.API_ENDPOINT}/promotions`, { - method: 'POST', - headers, - body: JSON.stringify({ - reference_id: data.referenceId, - description: data.description, - promo_code: data.promoCode, - bin_list: data.binList, - channel_code: data.channelCode, - discount_percent: data.discountPercent, - discount_amount: data.discountAmount, - currency: data.currency, - start_time: data.startTime, - end_time: data.endTime, - min_original_amount: data.minOriginalAmount, - max_discount_amount: data.maxDiscountAmount, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { - createPromotion, -}; diff --git a/src/card/refund.d.ts b/src/card/refund.d.ts deleted file mode 100644 index 463e92d..0000000 --- a/src/card/refund.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export function createRefund(data: { - chargeID: string; - amount: number; - externalID: string; - xIdempotencyKey?: string; - forUserID?: string; -}): Promise; diff --git a/src/card/refund.js b/src/card/refund.js deleted file mode 100644 index a86b2de..0000000 --- a/src/card/refund.js +++ /dev/null @@ -1,35 +0,0 @@ -const { Validate, Auth, fetchWithHTTPErr, promWithJsErr } = require('../utils'); - -function createRefund(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['chargeID', 'amount', 'externalID']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - const headers = Auth.basicHeaderWithIdempotencyKey( - this.opts.secretKey, - data.xIdempotencyKey, - ); - - if (data && data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/credit_card_charges/${data.chargeID}/refunds`, - { - method: 'POST', - headers, - body: JSON.stringify({ - external_id: data.externalID, - amount: data.amount, - }), - }, - ) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { - createRefund, -}; diff --git a/src/customer/customer.d.ts b/src/customer/customer.d.ts deleted file mode 100644 index 0eed4ad..0000000 --- a/src/customer/customer.d.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; - -interface Address { - country: string; - streetLine1?: string; - streetLine2?: string; - city?: string; - province?: string; - state?: string; - postalCode?: string; -} - -export = class Customer { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof Customer; - createCustomer(data: { - referenceID: string; - mobileNumber?: string; - email?: string; - givenNames: string; - middleName?: string; - surname?: string; - description?: string; - phoneNumber?: string; - nationality?: string; - addresses?: Address[]; - dateOfBirth?: string; - metadata?: object; - apiVersion?: string; - }): Promise; - getCustomer(data: { id: string; apiVersion?: string }): Promise; - getCustomerByReferenceID(data: { - referenceID: string; - apiVersion?: string; - }): Promise; - updateCustomer(data: { - id: string; - referenceID?: string; - givenNames?: string; - mobileNumber?: string; - addresses?: Address[]; - description?: string; - middleName?: string; - surname?: string; - phoneNumber?: string; - nationality?: string; - dateOfBirth?: string; - metadata?: object; - apiVersion?: string; - }): Promise; -}; diff --git a/src/customer/customer.js b/src/customer/customer.js deleted file mode 100644 index 4351d34..0000000 --- a/src/customer/customer.js +++ /dev/null @@ -1,145 +0,0 @@ -const { promWithJsErr, fetchWithHTTPErr, Auth, Validate } = require('../utils'); - -const CUSTOMER_PATH = ''; - -function Customer(options) { - let aggOpts = options; - if ( - Customer._injectedOpts && - Object.keys(Customer._injectedOpts).length > 0 - ) { - aggOpts = Object.assign({}, options, Customer._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + CUSTOMER_PATH; -} - -Customer._injectedOpts = {}; -Customer._constructorWithInjectedXenditOpts = function(options) { - Customer._injectedOpts = options; - return Customer; -}; - -Customer.prototype.createCustomer = function(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['referenceID', 'givenNames']; - if (!data.mobileNumber) { - compulsoryFields.push('email'); - } - if (!data.email) { - compulsoryFields.push('mobileNumber'); - } - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/customers`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'API-VERSION': data.apiVersion ? data.apiVersion : '', - }, - body: JSON.stringify({ - reference_id: data.referenceID, - mobile_number: data.mobileNumber, - email: data.email, - given_names: data.givenNames, - middle_name: data.middleName, - surname: data.surname, - description: data.description, - phone_number: data.phoneNumber, - nationality: data.nationality, - addresses: data.addresses - ? data.addresses.map(address => ({ - country: address.country, - street_line1: address.streetLine1, - street_line2: address.streetLine2, - city: address.city, - province: address.province, - state: address.state, - postal_code: address.postalCode, - })) - : [], - date_of_birth: data.dateOfBirth, - metadata: data.metadata, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -Customer.prototype.getCustomer = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/customers/${data.id}`, { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'API-VERSION': data.apiVersion ? data.apiVersion : '', - }, - }) - .then(resolve) - .catch(reject); - }); -}; - -Customer.prototype.getCustomerByReferenceID = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['referenceID'], data, reject); - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/customers?reference_id=${data.referenceID}`, - { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'API-VERSION': data.apiVersion ? data.apiVersion : '', - }, - }, - ) - .then(resolve) - .catch(reject); - }); -}; - -Customer.prototype.updateCustomer = function(data) { - return promWithJsErr((resolve, reject) => { - fetchWithHTTPErr(`${this.API_ENDPOINT}/customers/${data.id}`, { - method: 'PATCH', - headers: { - 'Content-Type': 'application/json', - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'API-VERSION': data.apiVersion ? data.apiVersion : '', - }, - body: JSON.stringify({ - reference_id: data.referenceID, - mobile_number: data.mobileNumber, - given_names: data.givenNames, - middle_name: data.middleName, - surname: data.surname, - description: data.description, - phone_number: data.phoneNumber, - nationality: data.nationality, - addresses: data.addresses - ? data.addresses.map(address => ({ - country: address.country, - street_line1: address.streetLine1, - street_line2: address.streetLine2, - city: address.city, - province: address.province, - state: address.state, - postal_code: address.postalCode, - })) - : [], - date_of_birth: data.dateOfBirth, - metadata: data.metadata, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -module.exports = Customer; diff --git a/src/customer/index.d.ts b/src/customer/index.d.ts deleted file mode 100644 index 4097824..0000000 --- a/src/customer/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import CustomerService from './customer'; - -export { CustomerService }; diff --git a/src/customer/index.js b/src/customer/index.js deleted file mode 100644 index 1fb9b95..0000000 --- a/src/customer/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const CustomerService = require('./customer'); - -module.exports = { CustomerService }; diff --git a/src/direct_debit/direct_debit.d.ts b/src/direct_debit/direct_debit.d.ts deleted file mode 100644 index e9d1ad3..0000000 --- a/src/direct_debit/direct_debit.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { - initializeTokenization, - validateOTPforLinkedAccount, - retrieveAccountsByTokenID, -} from './linked_account'; -import { - createPaymentMethod, - getPaymentMethodsByCustomerID, -} from './payment_method'; -import { - createDirectDebitPayment, - validateOTPforPayment, - getDirectDebitPaymentStatusByID, - getDirectDebitPaymentStatusByReferenceID, -} from './direct_debit_payment'; - -import { XenditOptions } from '../xendit_opts'; - -export = class DirectDebit { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof DirectDebit; - initializeTokenization = initializeTokenization; - validateOTPforLinkedAccount = validateOTPforLinkedAccount; - retrieveAccountsByTokenID = retrieveAccountsByTokenID; - createPaymentMethod = createPaymentMethod; - getPaymentMethodsByCustomerID = getPaymentMethodsByCustomerID; - createDirectDebitPayment = createDirectDebitPayment; - validateOTPforPayment = validateOTPforPayment; - getDirectDebitPaymentStatusByID = getDirectDebitPaymentStatusByID; - // eslint-disable-next-line max-len - getDirectDebitPaymentStatusByReferenceID = getDirectDebitPaymentStatusByReferenceID; -}; diff --git a/src/direct_debit/direct_debit.js b/src/direct_debit/direct_debit.js deleted file mode 100644 index 1c752b0..0000000 --- a/src/direct_debit/direct_debit.js +++ /dev/null @@ -1,51 +0,0 @@ -const { - initializeTokenization, - validateOTPforLinkedAccount, - retrieveAccountsByTokenID, -} = require('./linked_account'); -const { - createPaymentMethod, - getPaymentMethodsByCustomerID, -} = require('./payment_method'); -const { - createDirectDebitPayment, - validateOTPforPayment, - getDirectDebitPaymentStatusByID, - getDirectDebitPaymentStatusByReferenceID, -} = require('./direct_debit_payment'); - -const DIRECT_DEBIT_PATH = ''; - -function DirectDebit(options) { - let aggOpts = options; - if ( - DirectDebit._injectedOpts && - Object.keys(DirectDebit._injectedOpts).length > 0 - ) { - aggOpts = Object.assign({}, options, DirectDebit._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + DIRECT_DEBIT_PATH; -} - -DirectDebit._injectedOpts = {}; -DirectDebit._constructorWithInjectedXenditOpts = function(options) { - DirectDebit._injectedOpts = options; - return DirectDebit; -}; - -DirectDebit.prototype.initializeTokenization = initializeTokenization; -DirectDebit.prototype.validateOTPforLinkedAccount = validateOTPforLinkedAccount; -DirectDebit.prototype.retrieveAccountsByTokenID = retrieveAccountsByTokenID; -DirectDebit.prototype.createPaymentMethod = createPaymentMethod; -// eslint-disable-next-line max-len -DirectDebit.prototype.getPaymentMethodsByCustomerID = getPaymentMethodsByCustomerID; -DirectDebit.prototype.createDirectDebitPayment = createDirectDebitPayment; -DirectDebit.prototype.validateOTPforPayment = validateOTPforPayment; -// eslint-disable-next-line max-len -DirectDebit.prototype.getDirectDebitPaymentStatusByID = getDirectDebitPaymentStatusByID; -// eslint-disable-next-line max-len -DirectDebit.prototype.getDirectDebitPaymentStatusByReferenceID = getDirectDebitPaymentStatusByReferenceID; - -module.exports = DirectDebit; diff --git a/src/direct_debit/direct_debit_payment.d.ts b/src/direct_debit/direct_debit_payment.d.ts deleted file mode 100644 index c300158..0000000 --- a/src/direct_debit/direct_debit_payment.d.ts +++ /dev/null @@ -1,44 +0,0 @@ -interface Basket { - referenceID: string; - name: string; - market: string; - type: string; - description?: string; - category?: string; - subCategory?: string; - price?: string; - url?: string; - metadata?: object; - quantity?: number; -} - -export function createDirectDebitPayment(data: { - idempotencyKey: string; - apiVersion?: string; - referenceID: string; - paymentMethodID: string; - currency: string; - amount: number; - callbackURL: string; - enableOTP?: boolean; - description?: string; - basket?: Basket[]; - device?: object; - metadata?: object; - successRedirectUrl?: string; - failureRedirectUrl?: string; -}): Promise; - -export function validateOTPforPayment(data: { - directDebitID: string; - otpCode: string; - apiVersion?: string; -}): Promise; - -export function getDirectDebitPaymentStatusByID(data: { - directDebitID: string; -}): Promise; - -export function getDirectDebitPaymentStatusByReferenceID(data: { - referenceID: string; -}): Promise; diff --git a/src/direct_debit/direct_debit_payment.js b/src/direct_debit/direct_debit_payment.js deleted file mode 100644 index 1e94b2c..0000000 --- a/src/direct_debit/direct_debit_payment.js +++ /dev/null @@ -1,132 +0,0 @@ -const { Validate, Auth, fetchWithHTTPErr, promWithJsErr } = require('../utils'); - -function createDirectDebitPayment(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = [ - 'idempotencyKey', - 'referenceID', - 'paymentMethodID', - 'currency', - 'amount', - 'callbackURL', - ]; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - const headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - 'Idempotency-key': data.idempotencyKey, - }; - if (data.apiVersion !== null) { - headers['Api-Version'] = data.apiVersion; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/direct_debits`, { - method: 'POST', - headers, - body: JSON.stringify({ - reference_id: data.referenceID, - payment_method_id: data.paymentMethodID, - currency: data.currency, - amount: data.amount, - callback_url: data.callbackURL, - enable_otp: data.enableOTP, - description: data.description, - device: data.channelCode === 'BCA_ONEKLIK' ? data.device : undefined, - success_redirect_url: data.successRedirectUrl, - failure_redirect_url: data.failureRedirectUrl, - basket: data.basket - ? data.basket.map(product => ({ - reference_id: product.referenceID, - name: product.name, - market: product.market, - type: product.type, - description: product.description, - category: product.category, - sub_category: product.subCategory, - price: product.price, - url: product.url, - metadata: product.metadata, - quantity: product.quantity, - })) - : null, - metadata: data.metadata, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -function validateOTPforPayment(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['directDebitID', 'otpCode']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - const headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - if (data.apiVersion !== null) { - headers['Api-Version'] = data.apiVersion; - } - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/direct_debits/${data.directDebitID}/validate_otp/`, - { - method: 'POST', - headers, - body: JSON.stringify({ - otp_code: data.otpCode, - }), - }, - ) - .then(resolve) - .catch(reject); - }); -} - -function getDirectDebitPaymentStatusByID(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['directDebitID']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/direct_debits/${data.directDebitID}`, - { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -function getDirectDebitPaymentStatusByReferenceID(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['referenceID']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/direct_debits?reference_id=${data.referenceID}`, - { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { - createDirectDebitPayment, - validateOTPforPayment, - getDirectDebitPaymentStatusByID, - getDirectDebitPaymentStatusByReferenceID, -}; diff --git a/src/direct_debit/index.d.ts b/src/direct_debit/index.d.ts deleted file mode 100644 index 84bbdb3..0000000 --- a/src/direct_debit/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import DirectDebitService from './direct_debit'; - -export { DirectDebitService }; diff --git a/src/direct_debit/index.js b/src/direct_debit/index.js deleted file mode 100644 index 3510345..0000000 --- a/src/direct_debit/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const DirectDebitService = require('./direct_debit'); - -module.exports = { DirectDebitService }; diff --git a/src/direct_debit/linked_account.d.ts b/src/direct_debit/linked_account.d.ts deleted file mode 100644 index c37022f..0000000 --- a/src/direct_debit/linked_account.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -enum ChannelCode { - DC_BRI = 'DC_BRI', - BA_BPI = 'BA_BPI', -} - -interface DebitCardProperties { - accountMobileNumber: string; - cardLastFour: number; - cardExpiry: string; - accountEmail: string; -} - -interface OnlineBankingAccessProperties { - successRedirectURL: string; - accountMobileNumber?: string; - failureRedirectURL?: string; - callbackURL?: string; -} - -export function initializeTokenization(data: { - customerID: string; - channelCode: ChannelCode; - properties?: DebitCardProperties | OnlineBankingAccessProperties; - device?: object; - metadata?: object; -}): Promise; - -export function validateOTPforLinkedAccount(data: { - tokenID: string; - otpCode: string; -}): Promise; - -export function retrieveAccountsByTokenID(data: { - tokenID: string; -}): Promise; diff --git a/src/direct_debit/linked_account.js b/src/direct_debit/linked_account.js deleted file mode 100644 index 71d5ca5..0000000 --- a/src/direct_debit/linked_account.js +++ /dev/null @@ -1,98 +0,0 @@ -const { Validate, Auth, fetchWithHTTPErr, promWithJsErr } = require('../utils'); - -function initializeTokenization(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['customerID', 'channelCode']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/linked_account_tokens/auth`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - customer_id: data.customerID, - channel_code: data.channelCode, - properties: getProperties(data), - metadata: data.metadata, - device: data.device, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -function getProperties(data) { - if (data.channelCode === 'DC_BRI') { - return { - account_mobile_number: data.properties.accountMobileNumber, - card_last_four: data.properties.cardLastFour, - card_expiry: data.properties.cardExpiry, - account_email: data.properties.accountEmail, - }; - } else if (data.channelCode === 'BCA_ONEKLIK') { - return { - account_mobile_number: data.properties.accountMobileNumber, - success_redirect_url: data.properties.successRedirectURL, - failure_redirect_url: data.properties.failureRedirectURL, - callback_url: data.properties.callbackURL, - }; - } else { - return { - account_mobile_number: data.properties.accountMobileNumber, - success_redirect_url: data.properties.successRedirectURL, - failure_redirect_url: data.properties.failureRedirectURL, - callback_url: data.properties.callbackURL, - }; - } -} - -function validateOTPforLinkedAccount(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['tokenID', 'otpCode']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/linked_account_tokens/${data.tokenID}/validate_otp`, - { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - otp_code: data.otpCode, - }), - }, - ) - .then(resolve) - .catch(reject); - }); -} - -function retrieveAccountsByTokenID(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['tokenID']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/linked_account_tokens/${data.tokenID}/accounts`, - { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { - initializeTokenization, - validateOTPforLinkedAccount, - retrieveAccountsByTokenID, -}; diff --git a/src/direct_debit/payment_method.d.ts b/src/direct_debit/payment_method.d.ts deleted file mode 100644 index be560dc..0000000 --- a/src/direct_debit/payment_method.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -enum PaymentMethodType { - DEBIT_CARD = 'DEBIT_CARD', - BANK_ACCOUNT = 'BANK_ACCOUNT', -} - -interface PaymentMethodProperties { - id: string; -} - -export function createPaymentMethod(data: { - customerID: string; - type: PaymentMethodType; - properties: PaymentMethodProperties; - metadata?: object; -}): Promise; - -export function getPaymentMethodsByCustomerID(data: { - customerID: string; -}): Promise; diff --git a/src/direct_debit/payment_method.js b/src/direct_debit/payment_method.js deleted file mode 100644 index 7a77271..0000000 --- a/src/direct_debit/payment_method.js +++ /dev/null @@ -1,51 +0,0 @@ -const { Validate, Auth, fetchWithHTTPErr, promWithJsErr } = require('../utils'); - -function createPaymentMethod(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['customerID', 'type', 'properties']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/payment_methods`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - customer_id: data.customerID, - type: data.type, - properties: { - id: data.properties.id, - channel_code: data.properties.channelCode, - }, - metadata: data.metadata, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -function getPaymentMethodsByCustomerID(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['customerID']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/payment_methods?customer_id=${data.customerID}`, - { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { - createPaymentMethod, - getPaymentMethodsByCustomerID, -}; diff --git a/src/disbursement/bank.d.ts b/src/disbursement/bank.d.ts deleted file mode 100644 index fd34069..0000000 --- a/src/disbursement/bank.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function getBanks(): Promise; diff --git a/src/disbursement/bank.js b/src/disbursement/bank.js deleted file mode 100644 index 2d2f514..0000000 --- a/src/disbursement/bank.js +++ /dev/null @@ -1,16 +0,0 @@ -const { Auth, promWithJsErr, fetchWithHTTPErr } = require('../utils'); - -function getBanks() { - return promWithJsErr((resolve, reject) => { - fetchWithHTTPErr(`${this.API_ENDPOINT}/available_disbursements_banks`, { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { getBanks }; diff --git a/src/disbursement/disburse.d.ts b/src/disbursement/disburse.d.ts deleted file mode 100644 index d391630..0000000 --- a/src/disbursement/disburse.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -interface DisbursementItem { - externalID: string; - bankCode: string; - accountHolderName: string; - accountNumber: string; - description: string; - amount: number; - emailTo?: string[]; - emailCC?: string[]; - emailBCC?: string[]; -} - -export function create(data: DisbursementItem): Promise; -export function createBatch(data: { - reference: string; - disbursements: DisbursementItem[]; - xIdempotencyKey?: string; -}): Promise; -export function getByID(data: { disbursementID: string }): Promise; -export function getByExtID(data: { externalID: string }): Promise; diff --git a/src/disbursement/disburse.js b/src/disbursement/disburse.js deleted file mode 100644 index cb60a68..0000000 --- a/src/disbursement/disburse.js +++ /dev/null @@ -1,139 +0,0 @@ -const { Validate, Auth, fetchWithHTTPErr, promWithJsErr } = require('../utils'); -const errors = require('../errors'); - -const disbursementCompulsoryFields = [ - 'externalID', - 'bankCode', - 'accountHolderName', - 'accountNumber', - 'description', - 'amount', -]; - -function create(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(disbursementCompulsoryFields, data, reject); - - const headers = Auth.basicHeaderWithIdempotencyKey( - this.opts.secretKey, - data.xIdempotencyKey, - ); - - if (data && data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - if (data && data.withFeeRule) { - headers['with-fee-rule'] = data.withFeeRule; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/disbursements`, { - method: 'POST', - headers, - body: JSON.stringify(_transformDisbursementForRequestBody(data)), - }) - .then(resolve) - .catch(reject); - }); -} - -function createBatch(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['reference', 'disbursements']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - if (!Array.isArray(data.disbursements) || data.disbursements.length <= 0) { - reject({ - status: 400, - code: errors.API_VALIDATION_ERROR, - message: '`disbursements` should be an array with length > 0', - }); - } - data.disbursements.forEach((d, i) => { - const missingFields = Validate.requiredFields( - disbursementCompulsoryFields, - ).validate(d); - if (missingFields.length > 0) { - let message = `Missing required fields in disbursements[${i}]: `; - message += Validate.missingFieldsToStr(missingFields); - reject({ status: 400, code: errors.API_VALIDATION_ERROR, message }); - } - }); - - const headers = Auth.basicHeaderWithIdempotencyKey( - this.opts.secretKey, - data.xIdempotencyKey, - ); - if (data && data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - if (data && data.withFeeRule) { - headers['with-fee-rule'] = data.withFeeRule; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/batch_disbursements`, { - method: 'POST', - headers, - body: JSON.stringify({ - reference: data.reference, - disbursements: data.disbursements.map( - _transformDisbursementForRequestBody, - ), - }), - }) - .then(resolve) - .catch(reject); - }); -} - -function _transformDisbursementForRequestBody(disbursement) { - return { - external_id: disbursement.externalID, - bank_code: disbursement.bankCode, - account_holder_name: disbursement.accountHolderName, - bank_account_name: disbursement.accountHolderName, - account_number: disbursement.accountNumber, - bank_account_number: disbursement.accountNumber, - description: disbursement.description, - amount: disbursement.amount, - email_to: disbursement.emailTo, - email_cc: disbursement.emailCC, - email_bcc: disbursement.emailBCC, - }; -} - -function getByID(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['disbursementID'], data, reject); - fetchWithHTTPErr( - `${this.API_ENDPOINT}/disbursements/${data.disbursementID}`, - { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -function getByExtID(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['externalID'], data, reject); - fetchWithHTTPErr( - `${this.API_ENDPOINT}/disbursements?external_id=${data.externalID}`, - { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { create, createBatch, getByID, getByExtID }; diff --git a/src/disbursement/disbursement.d.ts b/src/disbursement/disbursement.d.ts deleted file mode 100644 index 4311eeb..0000000 --- a/src/disbursement/disbursement.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; -import { getBanks } from './bank'; -import { create, createBatch, getByID, getByExtID } from './disburse'; - -export = class Disbursement { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof Disbursement; - getBanks = getBanks; - create = create; - createBatch = createBatch; - getByID = getByID; - getByExtID = getByExtID; -}; diff --git a/src/disbursement/disbursement.js b/src/disbursement/disbursement.js deleted file mode 100644 index 5cba690..0000000 --- a/src/disbursement/disbursement.js +++ /dev/null @@ -1,31 +0,0 @@ -const { getBanks } = require('./bank'); -const { create, createBatch, getByExtID, getByID } = require('./disburse'); - -const DISBURSE_PATH = ''; - -function Disbursement(options) { - let aggOpts = options; - if ( - Disbursement._injectedOpts && - Object.keys(Disbursement._injectedOpts).length > 0 - ) { - aggOpts = Object.assign({}, options, Disbursement._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + DISBURSE_PATH; -} - -Disbursement._injectedOpts = {}; -Disbursement._constructorWithInjectedXenditOpts = function(options) { - Disbursement._injectedOpts = options; - return Disbursement; -}; - -Disbursement.prototype.getBanks = getBanks; -Disbursement.prototype.create = create; -Disbursement.prototype.createBatch = createBatch; -Disbursement.prototype.getByID = getByID; -Disbursement.prototype.getByExtID = getByExtID; - -module.exports = Disbursement; diff --git a/src/disbursement/index.d.ts b/src/disbursement/index.d.ts deleted file mode 100644 index 96c1c61..0000000 --- a/src/disbursement/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import DisbursementService from './disbursement'; - -export { DisbursementService }; diff --git a/src/disbursement/index.js b/src/disbursement/index.js deleted file mode 100644 index e4e8b5d..0000000 --- a/src/disbursement/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const DisbursementService = require('./disbursement'); - -module.exports = { DisbursementService }; diff --git a/src/errors/index.d.ts b/src/errors/index.d.ts deleted file mode 100644 index be515fd..0000000 --- a/src/errors/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum Errors { - JS_ERROR = 'JS_ERROR', - API_VALIDATION_ERROR = 'API_VALIDATION_ERROR', -} diff --git a/src/errors/index.js b/src/errors/index.js deleted file mode 100644 index 661ff8c..0000000 --- a/src/errors/index.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - JS_ERROR: 'JS_ERROR', - API_VALIDATION_ERROR: 'API_VALIDATION_ERROR', -}; diff --git a/src/ewallet/ewallet.d.ts b/src/ewallet/ewallet.d.ts deleted file mode 100644 index c390cd3..0000000 --- a/src/ewallet/ewallet.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; -import { - createEWalletCharge, - getEWalletChargeStatus, - voidEWalletCharge, -} from './ewallet_charge'; -import { createPayment, getPayment } from './ewallet_payment'; -import { initializeTokenization, unlinkTokenization } from './linked_account'; -import { - createPaymentMethod, - getPaymentMethodsByCustomerID, -} from require('./payment_method'); - -export = class EWallet { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof EWallet; - static Type: { - OVO: string; - Dana: string; - LinkAja: string; - }; - createPayment = createPayment; - getPayment = getPayment; - createEWalletCharge = createEWalletCharge; - getEWalletChargeStatus = getEWalletChargeStatus; - voidEWalletCharge = voidEWalletCharge; - initializeTokenization = initializeTokenization; - unlinkTokenization = unlinkTokenization; - createPaymentMethod = createPaymentMethod; - getPaymentMethodsByCustomerID = getPaymentMethodsByCustomerID; -}; diff --git a/src/ewallet/ewallet.js b/src/ewallet/ewallet.js deleted file mode 100644 index 0835357..0000000 --- a/src/ewallet/ewallet.js +++ /dev/null @@ -1,49 +0,0 @@ -const { - createEWalletCharge, - getEWalletChargeStatus, - voidEWalletCharge, -} = require('./ewallet_charge'); -const { createPayment, getPayment } = require('./ewallet_payment'); -const { - initializeTokenization, - unlinkTokenization, -} = require('./linked_account'); -const { - createPaymentMethod, - getPaymentMethodsByCustomerID, -} = require('./payment_method'); - -const EWALLET_PATH = ''; - -function EWallet(options) { - let aggOpts = options; - if (EWallet._injectedOpts && Object.keys(EWallet._injectedOpts).length > 0) { - aggOpts = Object.assign({}, options, EWallet._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + EWALLET_PATH; -} - -EWallet._injectedOpts = {}; -EWallet._constructorWithInjectedXenditOpts = function(options) { - EWallet._injectedOpts = options; - return EWallet; -}; -EWallet.Type = { - OVO: 'OVO', - Dana: 'DANA', - LinkAja: 'LINKAJA', -}; - -EWallet.prototype.createPayment = createPayment; -EWallet.prototype.getPayment = getPayment; -EWallet.prototype.createEWalletCharge = createEWalletCharge; -EWallet.prototype.getEWalletChargeStatus = getEWalletChargeStatus; -EWallet.prototype.voidEWalletCharge = voidEWalletCharge; -EWallet.prototype.initializeTokenization = initializeTokenization; -EWallet.prototype.unlinkTokenization = unlinkTokenization; -EWallet.prototype.createPaymentMethod = createPaymentMethod; -EWallet.prototype.getPaymentMethodsByCustomerID = getPaymentMethodsByCustomerID; - -module.exports = EWallet; diff --git a/src/ewallet/ewallet_charge.d.ts b/src/ewallet/ewallet_charge.d.ts deleted file mode 100644 index 052f6ef..0000000 --- a/src/ewallet/ewallet_charge.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -enum Currency { - IDR = 'IDR', - PHP = 'PHP', -} - -enum ChannelCode { - ID_OVO = 'ID_OVO', - ID_DANA = 'ID_DANA', - ID_LINKAJA = 'ID_LINKAJA', - ID_SHOPEEPAY = 'ID_SHOPEEPAY', - PH_PAYMAYA = 'PH_PAYMAYA', -} - -interface ChannelProps { - mobileNumber?: string; - successRedirectURL?: string; - failureRedirectURL?: string; - cancelRedirectURL?: string; - redeemPoints?: string; -} - -interface Basket { - referenceID: string; - name: string; - category: string; - currency: string; - price: number; - quantity: number; - type: string; - url?: string; - description?: string; - subCategory?: string; - metadata?: object; -} - -export function createEWalletCharge(data: { - referenceID: string; - currency: Currency; - amount: number; - checkoutMethod: string; - channelCode?: ChannelCode; - channelProperties?: ChannelProps; - paymentMethodId?: string; - customerID?: string; - basket?: Basket[]; - metadata?: object; - forUserID?: string; - withFeeRule?: string; -}): Promise; - -export function getEWalletChargeStatus(data: { - chargeID: string; - forUserID?: string; -}): Promise; - -export function voidEWalletCharge(data: { - chargeID: string; - forUserID?: string; -}): Promise; diff --git a/src/ewallet/ewallet_charge.js b/src/ewallet/ewallet_charge.js deleted file mode 100644 index 988187b..0000000 --- a/src/ewallet/ewallet_charge.js +++ /dev/null @@ -1,119 +0,0 @@ -const { Validate, Auth, fetchWithHTTPErr, promWithJsErr } = require('../utils'); - -function createEWalletCharge(data) { - return promWithJsErr((resolve, reject) => { - let compulsoryFields = [ - 'referenceID', - 'currency', - 'amount', - 'checkoutMethod', - ]; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - if (data.withFeeRule) { - headers['with-fee-rule'] = data.withFeeRule; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/ewallets/charges`, { - method: 'POST', - headers: headers, - body: JSON.stringify({ - reference_id: data.referenceID, - currency: data.currency, - amount: data.amount, - checkout_method: data.checkoutMethod, - channel_code: data.channelCode, - channel_properties: data.channelProperties - ? { - mobile_number: data.channelProperties.mobileNumber, - success_redirect_url: data.channelProperties.successRedirectURL, - failure_redirect_url: data.channelProperties.failureRedirectURL, - cancel_redirect_url: data.channelProperties.cancelRedirectURL, - redeem_points: data.channelProperties.redeemPoints, - } - : data.channelProperties, - payment_method_id: data.paymentMethodId, - customer_id: data.customerID, - basket: data.basket - ? data.basket.map(product => ({ - reference_id: product.referenceID, - name: product.name, - category: product.category, - currency: product.currency, - price: product.price, - quantity: product.quantity, - type: product.type, - url: product.url, - description: product.description, - sub_category: product.subCategory, - metadata: product.metadata, - })) - : null, - metadata: data.metadata, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -function getEWalletChargeStatus(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['chargeID'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }; - - if (data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/ewallets/charges/${data.chargeID}`, { - method: 'GET', - headers: headers, - }) - .then(resolve) - .catch(reject); - }); -} - -function voidEWalletCharge(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['chargeID'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/ewallets/charges/${data.chargeID}/void`, - { - method: 'POST', - headers: headers, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { - createEWalletCharge, - getEWalletChargeStatus, - voidEWalletCharge, -}; diff --git a/src/ewallet/ewallet_payment.d.ts b/src/ewallet/ewallet_payment.d.ts deleted file mode 100644 index 39e7d6c..0000000 --- a/src/ewallet/ewallet_payment.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -enum CreateSupportWalletTypes { - OVO = 'OVO', - Dana = 'DANA', - Linkaja = 'LINKAJA', -} - -enum GetSupportWalletTypes { - OVO = 'OVO', - Dana = 'DANA', -} - -interface PaymentItem { - id: string; - name: string; - price: number; - quantity: number; -} - -export function createPayment(data: { - externalID: string; - amount: number; - phone?: string; - expirationDate?: Date; - callbackURL?: string; - redirectURL?: string; - items?: PaymentItem[]; - ewalletType: CreateSupportWalletTypes; - xApiVersion?: string; -}): Promise; - -export function getPayment(data: { - externalID: string; - ewalletType: GetSupportWalletTypes; -}): Promise; diff --git a/src/ewallet/ewallet_payment.js b/src/ewallet/ewallet_payment.js deleted file mode 100644 index 2a90f69..0000000 --- a/src/ewallet/ewallet_payment.js +++ /dev/null @@ -1,105 +0,0 @@ -const { - Validate, - Auth, - fetchWithHTTPErr, - promWithJsErr, - queryStringWithoutUndefined, -} = require('../utils'); -const errors = require('../errors'); - -function createPayment(data) { - const Type = Object.freeze({ OVO: 'OVO', Dana: 'DANA', LinkAja: 'LINKAJA' }); - return promWithJsErr((resolve, reject) => { - let compulsoryFields = ['ewalletType']; - - if (data.ewalletType) { - switch (data.ewalletType) { - case Type.OVO: - compulsoryFields = ['externalID', 'amount', 'phone', 'ewalletType']; - break; - case Type.Dana: - compulsoryFields = [ - 'externalID', - 'amount', - 'callbackURL', - 'redirectURL', - 'ewalletType', - ]; - break; - case Type.LinkAja: - compulsoryFields = [ - 'externalID', - 'phone', - 'amount', - 'items', - 'callbackURL', - 'redirectURL', - 'ewalletType', - ]; - break; - default: - reject({ - status: 400, - code: errors.API_VALIDATION_ERROR, - message: 'Invalid EWallet Type', - }); - } - } - - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - const headers = { - 'Content-Type': 'application/json', - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }; - if (data.xApiVersion) { - headers['X-API-VERSION'] = data.xApiVersion; - } - - fetchWithHTTPErr(this.API_ENDPOINT + '/ewallets', { - method: 'POST', - headers, - body: JSON.stringify({ - external_id: data.externalID, - amount: data.amount, - phone: data.phone, - expiration_date: data.expirationDate - ? data.expirationDate.toISOString() - : undefined, - callback_url: data.callbackURL, - redirect_url: data.redirectURL, - items: data.items, - ewallet_type: data.ewalletType, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -function getPayment(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['externalID', 'ewalletType'], data, reject); - - const queryStr = data - ? queryStringWithoutUndefined({ - external_id: data.externalID, - ewallet_type: data.ewalletType, - }) - : ''; - - fetchWithHTTPErr(this.API_ENDPOINT + `/ewallets?${queryStr}`, { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { - createPayment, - getPayment, -}; diff --git a/src/ewallet/index.d.ts b/src/ewallet/index.d.ts deleted file mode 100644 index d18c19e..0000000 --- a/src/ewallet/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import EWalletService from './ewallet'; - -export { EWalletService }; diff --git a/src/ewallet/index.js b/src/ewallet/index.js deleted file mode 100644 index 6636228..0000000 --- a/src/ewallet/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const EWalletService = require('./ewallet'); - -module.exports = { EWalletService }; diff --git a/src/ewallet/linked_account.d.ts b/src/ewallet/linked_account.d.ts deleted file mode 100644 index 4b4cbd1..0000000 --- a/src/ewallet/linked_account.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -interface OnlineBankingAccessProperties { - successRedirectURL: string; - failureRedirectURL: string; - cancelRedirectURL?: string; - callbackURL: string; - metadata?: object; -} - -export function initializeTokenization(data: { - customerID: string; - channelCode: ChannelCode; - properties?: OnlineBankingAccessProperties; - metadata?: object; -}): Promise; - -export function unlinkTokenization(data: { - linkedAccTokenID: string; -}): Promise; diff --git a/src/ewallet/linked_account.js b/src/ewallet/linked_account.js deleted file mode 100644 index 55e3ed6..0000000 --- a/src/ewallet/linked_account.js +++ /dev/null @@ -1,60 +0,0 @@ -const { Validate, Auth, fetchWithHTTPErr, promWithJsErr } = require('../utils'); - -function initializeTokenization(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['customerID', 'channelCode']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/linked_account_tokens/auth`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - customer_id: data.customerID, - channel_code: data.channelCode, - properties: - data.channelCode === 'PH_PAYMAYA' - ? { - success_redirect_url: data.properties.successRedirectURL, - failure_redirect_url: data.properties.failureRedirectURL, - cancel_redirect_url: data.properties.cancelRedirectURL, - callback_url: data.properties.callbackURL, - } - : { - success_redirect_url: data.properties.successRedirectURL, - failure_redirect_url: data.properties.failureRedirectURL, - callback_url: data.properties.callbackURL, - }, - metadata: data.metadata, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -function unlinkTokenization(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['linkedAccTokenID']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/linked_account_tokens/${data.linkedAccTokenID}`, - { - method: 'DELETE', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { - initializeTokenization, - unlinkTokenization, -}; diff --git a/src/ewallet/payment_method.d.ts b/src/ewallet/payment_method.d.ts deleted file mode 100644 index 24ccf5a..0000000 --- a/src/ewallet/payment_method.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -enum PaymentMethodType { - EWALLET = 'EWALLET', -} - -interface PaymentMethodProperties { - id?: string; - channelCode?: string; -} - -export function createPaymentMethod(data: { - customerID: string; - type: PaymentMethodType; - properties: PaymentMethodProperties; - metadata?: object; -}): Promise; - -export function getPaymentMethodsByCustomerID(data: { - customerID: string; -}): Promise; diff --git a/src/ewallet/payment_method.js b/src/ewallet/payment_method.js deleted file mode 100644 index b371c66..0000000 --- a/src/ewallet/payment_method.js +++ /dev/null @@ -1,50 +0,0 @@ -const { Validate, Auth, fetchWithHTTPErr, promWithJsErr } = require('../utils'); - -function createPaymentMethod(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['customerID', 'type', 'properties']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/payment_methods`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - customer_id: data.customerID, - type: data.type, - properties: { - id: data.properties.id, - }, - metadata: data.metadata, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -function getPaymentMethodsByCustomerID(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['customerID']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/payment_methods?customer_id=${data.customerID}`, - { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { - createPaymentMethod, - getPaymentMethodsByCustomerID, -}; diff --git a/src/invoice/index.d.ts b/src/invoice/index.d.ts deleted file mode 100644 index 25001f5..0000000 --- a/src/invoice/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import InvoiceService from './invoice'; - -export { InvoiceService }; diff --git a/src/invoice/index.js b/src/invoice/index.js deleted file mode 100644 index 8ba9e8a..0000000 --- a/src/invoice/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const InvoiceService = require('./invoice'); - -module.exports = { InvoiceService }; diff --git a/src/invoice/invoice.d.ts b/src/invoice/invoice.d.ts deleted file mode 100644 index 99bc5a5..0000000 --- a/src/invoice/invoice.d.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; - -export = class Invoice { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof Invoice; - createInvoice(data: { - externalID: string; - amount: number; - payerEmail?: string; - description?: string; - shouldSendEmail?: boolean; - customer?: object; - customerNotificationPreference?: object; - items?: object[]; - fees?: object[]; - callbackVirtualAccountID?: string; - invoiceDuration?: number; - successRedirectURL?: string; - failureRedirectURL?: string; - paymentMethods?: string[]; - currency?: string; - midLabel?: string; - forUserID?: string; - reminderTimeUnit?: string; - reminderTime?: number; - locale?: string; - shouldAuthenticateCreditCard?: boolean; - withFeeRule?: string; - }): Promise; - getInvoice(data: { invoiceID: string; forUserID?: string }): Promise; - expireInvoice(data: { - invoiceID: string; - forUserID?: string; - }): Promise; - getAllInvoices(data?: { - statuses?: string[]; - limit?: number; - createdAfter?: Date; - createdBefore?: Date; - paidAfter?: Date; - paidBefore?: Date; - expiredAfter?: Date; - expiredBefore?: Date; - lastInvoiceID?: string; - clientTypes?: string[]; - paymentChannels?: string[]; - onDemandLink?: string; - recurringPaymentID?: string; - forUserID?: string; - }): Promise; -}; diff --git a/src/invoice/invoice.js b/src/invoice/invoice.js deleted file mode 100644 index e9aee20..0000000 --- a/src/invoice/invoice.js +++ /dev/null @@ -1,173 +0,0 @@ -const { - promWithJsErr, - Auth, - Validate, - fetchWithHTTPErr, - queryStringWithoutUndefined, -} = require('../utils'); - -const INVOICE_PATH = ''; - -function Invoice(options) { - let aggOpts = options; - if (Invoice._injectedOpts && Object.keys(Invoice._injectedOpts).length > 0) { - aggOpts = Object.assign({}, options, Invoice._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + INVOICE_PATH; -} - -Invoice._injectedOpts = {}; -Invoice._constructorWithInjectedXenditOpts = function(options) { - Invoice._injectedOpts = options; - return Invoice; -}; - -Invoice.prototype.createInvoice = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['externalID', 'amount'], data, reject); - - let headers = { - 'Content-Type': 'application/json', - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }; - - if (data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - if (data && data.withFeeRule) { - headers['with-fee-rule'] = data.withFeeRule; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/v2/invoices`, { - method: 'POST', - headers, - body: JSON.stringify({ - external_id: data.externalID, - payer_email: data.payerEmail, - description: data.description, - amount: data.amount, - should_send_email: data.shouldSendEmail, - callback_virtual_account_id: data.callbackVirtualAccountID, - invoice_duration: data.invoiceDuration, - success_redirect_url: data.successRedirectURL, - failure_redirect_url: data.failureRedirectURL, - payment_methods: data.paymentMethods, - mid_label: data.midLabel, - currency: data.currency, - fixed_va: data.fixedVA, - customer: data.customer, - customer_notification_preference: data.customerNotificationPreference, - items: data.items, - fees: data.fees, - reminder_time_unit: data.reminderTimeUnit, - reminder_time: data.reminderTime, - locale: data.locale, - should_authenticate_credit_card: data.shouldAuthenticateCreditCard, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -Invoice.prototype.getInvoice = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['invoiceID'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }; - - if (data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/v2/invoices/${data.invoiceID}`, { - method: 'GET', - headers, - }) - .then(resolve) - .catch(reject); - }); -}; - -Invoice.prototype.expireInvoice = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['invoiceID'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }; - - if (data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/invoices/${data.invoiceID}/expire!`, - { - method: 'POST', - headers, - }, - ) - .then(resolve) - .catch(reject); - }); -}; - -Invoice.prototype.getAllInvoices = function(data) { - return promWithJsErr((resolve, reject) => { - // if no data provided, querystring should be empty - const queryStr = data - ? queryStringWithoutUndefined({ - statuses: data.statuses, - limit: data.limit, - created_after: data.createdAfter - ? data.createdAfter.toISOString() - : undefined, - created_before: data.createdBefore - ? data.createdBefore.toISOString() - : undefined, - paid_after: data.paidAfter ? data.paidAfter.toISOString() : undefined, - paid_before: data.paidBefore - ? data.paidBefore.toISOString() - : undefined, - expired_after: data.expiredAfter - ? data.expiredAfter.toISOString() - : undefined, - expired_before: data.expiredBefore - ? data.expiredBefore.toISOString() - : undefined, - last_invoice_id: data.lastInvoiceID, - client_types: data.clientTypes, - payment_channels: data.paymentChannels, - on_demand_link: data.onDemandLink, - recurring_payment_id: data.recurringPaymentID, - }) - : ''; - const queryStrWithQuestionMark = queryStr ? `?${queryStr}` : ''; - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }; - - if (data && data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/v2/invoices${queryStrWithQuestionMark}`, - { - method: 'GET', - headers, - }, - ) - .then(resolve) - .catch(reject); - }); -}; - -module.exports = Invoice; diff --git a/src/payment_method_v2/index.d.ts b/src/payment_method_v2/index.d.ts deleted file mode 100644 index 5364e16..0000000 --- a/src/payment_method_v2/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import PaymentMethodV2Service from './payment_method_v2'; - -export { PaymentMethodV2Service }; diff --git a/src/payment_method_v2/index.js b/src/payment_method_v2/index.js deleted file mode 100644 index 95c0c9e..0000000 --- a/src/payment_method_v2/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const PaymentMethodV2Service = require('./payment_method_v2'); - -module.exports = { PaymentMethodV2Service }; diff --git a/src/payment_method_v2/payment_method_v2.d.ts b/src/payment_method_v2/payment_method_v2.d.ts deleted file mode 100644 index 3c24526..0000000 --- a/src/payment_method_v2/payment_method_v2.d.ts +++ /dev/null @@ -1,239 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; - -enum PaymentMethodV2Types { - Card = 'CARD', - eWallet = 'EWALLET', - DirectDebit = 'DIRECT_DEBIT', - OverTheCounter = 'OVER_THE_COUNTER', - QRCODE = 'QR_CODE', - VirtualAccount = 'VIRTUAL_ACCOUNT', -} - -enum PaymentMethodV2Reusabilities { - OneTimeUse = 'ONE_TIME_USE', - MultipleUse = 'MULTIPLE_USE', -} - -enum CreatePaymentMethodV2Countries { - ID = 'ID', - PH = 'PH', -} - -enum EWalletChannelCodes { - Dana = 'DANA', - OVO = 'OVO', - LinkAja = 'LINKAJA', - Astrapay = 'ASTRAPAY', - JeniusPay = 'JENIUSPAY', - ShopeePay = 'SHOPEEPAY', - GrabPay = 'GRABPAY', - Paymaya = 'PAYMAYA', - GCash = 'GCASH', -} - -enum DirectDebitChannelCodes { - BRI = 'BRI', - Mandiri = 'MANDIRI', - BPI = 'BPI', - UBP = 'UBP', - RCBC = 'RCBC', - ChinaBank = 'CHINABANK', -} - -enum CardCurrencies { - IDR = 'IDR', - PHP = 'PHP', - USD = 'USD', -} - -enum OverTheCounterChannelCodes { - Alfamart = 'ALFAMART', - Indomaret = 'INDOMARET', - '7Eleven' = '7ELEVEN', - '7ElevenCLIQQ' = '7ELEVEN_CLIQQ', - Cebuana = 'CEBUANA', - ECPay = 'ECPAY', - Palawan = 'PALAWAN', - MLhuillier = 'MLHUILLIER', - DragonLoanECPAY = 'DRAGONLOAN_ECPAY', -} - -enum OverTheCounterCurrencies { - IDR = 'IDR', - PHP = 'PHP', -} - -enum VirtualAccountChannelCodes { - BCA = 'BCA', - BSI = 'BSI', - BJB = 'BJB', - CIMB = 'CIMB', - SahabatSampoerna = 'SAHABAT_SAMPOERNA', - Artajasa = 'ARTAJASA', - BRI = 'BRI', - BNI = 'BNI', - Mandiri = 'MANDIRI', - Permata = 'PERMATA', -} - -enum VirtualAccountCurrencies { - IDR = 'IDR', -} - -enum QRISChannelCodes { - QRIS = 'QRIS', -} - -enum QRISCurrencies { - IDR = 'IDR', -} - -enum PaymentMethodV2Statuses { - Succeeded = 'SUCCEEDED', - Failed = 'FAILED', - Pending = 'PENDING', -} - -interface BillingInformationItems { - country: string; - street_line1?: string; - street_line2?: string; - city?: string; - province_state?: string; - postal_code?: string; -} - -interface EwalletItems { - channel_code: EWalletChannelCodes; - channel_properties: object; -} - -interface DirectDebitItems { - channel_code: DirectDebitChannelCodes; - channel_properties: object; -} - -interface CardItems { - currency: CardCurrencies; - channel_properties: object; - card_information: { - card_number: string; - expiry_month: string; - expiry_year: string; - cardholder_name?: string; - }; -} - -interface OverTheCounterItems { - channel_code: OverTheCounterChannelCodes; - currency?: OverTheCounterCurrencies; - amount?: number; - channel_properties: object; -} - -interface VirtualAccountItems { - channel_code: VirtualAccountChannelCodes; - currency?: VirtualAccountCurrencies; - amount?: number; - channel_properties: object; -} - -interface QRISItems { - channel_code: QRISChannelCodes; - currency?: QRISCurrencies; - amount?: number; -} - -interface UpdateOverTheCounterItems { - amount?: number; - channel_properties: object; -} - -interface UpdateVirtualAccountItems { - amount?: number; - channel_properties: object; -} - -interface ListPaymentMethodV2StatusItems { - status?: PaymentMethodV2Statuses; -} - -export = class PaymentMethodV2 { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof PaymentMethodV2; - createPaymentMethodV2(data: { - type: PaymentMethodV2Types; - reusability: PaymentMethodV2Reusabilities; - reference_id?: string; - customer_id?: string; - country?: CreatePaymentMethodV2Countries; - description?: string; - billing_information?: BillingInformationItems; - metadata?: object; - ewallet?: EwalletItems; - direct_debit?: DirectDebitItems; - card?: CardItems; - over_the_counter?: OverTheCounterItems; - virtual_account?: VirtualAccountItems; - qr_code?: QRISItems; - for_user_id?: string; - idempotency_key?: string; - }): Promise; - - listPaymentMethodV2(data: { - id: string; - type?: PaymentMethodV2Types; - reusability?: PaymentMethodV2Reusabilities; - reference_id?: string; - customer_id?: string; - limit?: string; - after_id?: string; - before_id?: string; - for_user_id?: string; - }): Promise; - - authorizePaymentMethodV2(data: { - id: string; - auth_code: string; - for_user_id?: string; - idempotency_key?: string; - }): Promise; - - getPaymentMethodByIdV2(data: { - id: string; - for_user_id?: string; - }): Promise; - - updatePaymentMethodV2(data: { - id: string; - reference_id?: string; - description?: string; - metadata?: object; - status?: string; - reusability?: PaymentMethodV2Reusabilities; - over_the_counter?: UpdateOverTheCounterItems; - virtual_account?: UpdateVirtualAccountItems; - for_user_id?: string; - }): Promise; - - expirePaymentMethodV2(data: { - id: string; - for_user_id?: string; - idempotency_key?: string; - }): Promise; - - listPaymentsByPaymentMethodIdV2(data: { - id: string; - payment_request_id?: string; - reference_id?: string; - status?: ListPaymentMethodV2StatusItems; - limit?: number; - after_id?: string; - before_id?: string; - created?: string; - updated?: string; - for_user_id?: string; - }): Promise; -}; diff --git a/src/payment_method_v2/payment_method_v2.js b/src/payment_method_v2/payment_method_v2.js deleted file mode 100644 index b2ab376..0000000 --- a/src/payment_method_v2/payment_method_v2.js +++ /dev/null @@ -1,291 +0,0 @@ -const { - promWithJsErr, - Validate, - fetchWithHTTPErr, - Auth, - queryStringWithoutUndefined, -} = require('../utils'); - -const PAYMENT_METHOD_V2_PATH = '/v2/payment_methods'; - -function PaymentMethodV2(options) { - let aggOpts = options; - if ( - PaymentMethodV2._injectedOpts && - Object.keys(PaymentMethodV2._injectedOpts).length > 0 - ) { - aggOpts = Object.assign({}, options, PaymentMethodV2._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + PAYMENT_METHOD_V2_PATH; -} - -PaymentMethodV2._injectedOpts = {}; -PaymentMethodV2._constructorWithInjectedXenditOpts = function(options) { - PaymentMethodV2._injectedOpts = options; - return PaymentMethodV2; -}; - -PaymentMethodV2.prototype.createPaymentMethodV2 = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['type', 'reusability'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.for_user_id; - } - - if (data && data.idempotency_key) { - headers['idempotency-key'] = data.idempotency_key; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}`, { - method: 'POST', - headers, - body: JSON.stringify({ - type: data.type, - reusability: data.reusability, - reference_id: data.reference_id, - customer_id: data.customer_id, - country: data.country, - description: data.description, - billing_information: data.billing_information, - metadata: data.metadata, - ewallet: data.ewallet, - direct_debit: data.direct_debit, - card: data.card, - over_the_counter: data.over_the_counter, - virtual_account: data.virtual_account, - qr_code: data.qr_code, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -PaymentMethodV2.prototype.listPaymentMethodV2 = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields([], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.for_user_id; - } - - const queryStr = data - ? queryStringWithoutUndefined({ - id: data.id ? data.id : undefined, - type: data.type ? data.type : undefined, - reusability: data.reusability ? data.reusability : undefined, - reference_id: data.reference_id ? data.reference_id : undefined, - customer_id: data.customer_id ? data.customer_id : undefined, - limit: data.limit ? data.limit : undefined, - after_id: data.after_id ? data.after_id : undefined, - before_id: data.before_id ? data.before_id : undefined, - }) - : ''; - - const queryStrWithQuestionMark = queryStr ? `?${queryStr}` : ''; - - fetchWithHTTPErr(`${this.API_ENDPOINT}${queryStrWithQuestionMark}`, { - method: 'GET', - headers, - }) - .then(resolve) - .catch(reject); - }); -}; - -PaymentMethodV2.prototype.authorizePaymentMethodV2 = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.forUserID; - } - - if (data && data.idempotency_key) { - headers['idempotency-key'] = data.idempotency_key; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}/auth`, { - method: 'POST', - headers, - body: JSON.stringify({ - auth_code: data.auth_code, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -PaymentMethodV2.prototype.getPaymentMethodByIdV2 = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}`, { - method: 'GET', - headers, - }) - .then(resolve) - .catch(reject); - }); -}; - -PaymentMethodV2.prototype.updatePaymentMethodV2 = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}`, { - method: 'PATCH', - headers, - body: JSON.stringify({ - reference_id: data.reference_id, - description: data.description, - metadata: data.metadata, - status: data.status, - reusability: data.reusability, - over_the_counter: data.over_the_counter, - virtual_account: data.virtual_account, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -PaymentMethodV2.prototype.expirePaymentMethodV2 = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.forUserID; - } - - if (data && data.idempotency_key) { - headers['idempotency-key'] = data.idempotency_key; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}/expire`, { - method: 'POST', - headers, - body: JSON.stringify({ - auth_code: data.auth_code, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -PaymentMethodV2.prototype.expirePaymentMethodV2 = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.forUserID; - } - - if (data && data.idempotency_key) { - headers['idempotency-key'] = data.idempotency_key; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}/expire`, { - method: 'POST', - headers, - body: JSON.stringify({ - auth_code: data.auth_code, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -PaymentMethodV2.prototype.listPaymentsByPaymentMethodIdV2 = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields([], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.for_user_id; - } - - const queryStr = data - ? queryStringWithoutUndefined({ - payment_request_id: data.payment_request_id - ? data.payment_request_id - : undefined, - reference_id: data.reference_id ? data.reference_id : undefined, - status: data.status ? data.status : undefined, - limit: data.limit ? data.limit : undefined, - after_id: data.after_id ? data.after_id : undefined, - before_id: data.before_id ? data.before_id : undefined, - created: data.created ? data.created : undefined, - updated: data.updated ? data.updated : undefined, - }) - : ''; - - const queryStrWithQuestionMark = queryStr ? `?${queryStr}` : ''; - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/${data.id}/payments${queryStrWithQuestionMark}`, - { - method: 'GET', - headers, - }, - ) - .then(resolve) - .catch(reject); - }); -}; - -module.exports = PaymentMethodV2; diff --git a/src/payment_request/index.d.ts b/src/payment_request/index.d.ts deleted file mode 100644 index 56000ec..0000000 --- a/src/payment_request/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import PaymentRequestService from './payment_request'; - -export { PaymentRequestService }; diff --git a/src/payment_request/index.js b/src/payment_request/index.js deleted file mode 100644 index 36c2466..0000000 --- a/src/payment_request/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const PaymentRequestService = require('./payment_request'); - -module.exports = { PaymentRequestService }; diff --git a/src/payment_request/payment_request.d.ts b/src/payment_request/payment_request.d.ts deleted file mode 100644 index 75f4623..0000000 --- a/src/payment_request/payment_request.d.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; - -export enum PaymentRequestCurrencies { - IDR = 'IDR', - PHP = 'PHP', -} - -export enum PaymentRequestCountries { - ID = 'ID', - PH = 'PH', -} - -export enum PaymentRequestInitiator { - Customer = 'CUSTOMER', - Merchant = 'MERCHANT', -} - -export enum PaymentRequestCaptureMethod { - Automatic = 'AUTOMATIC', - Manual = 'MANUAL', -} - -export enum PaymentRequestRedeemPoints { - RedeemNone = 'REDEEM_NONE', - RedeemAll = 'REDEEM_ALL', -} - -export enum PaymentRequestType { - Card = 'CARD', - EWallet = 'EWALLET', - DirectDebit = 'DIRECT_DEBIT', - OverTheCounter = 'OVER_THE_COUNTER', - QRCode = 'QR_CODE', - VirtualAccount = 'VIRTUAL_ACCOUNT', -} - -export enum PaymentRequestStatuses { - Succeeded = 'SUCCEEDED', - Failed = 'FAILED', - Pending = 'PENDING', - RequiresAction = 'REQUIRE_ACTIONS', -} - -interface PaymentRequestChannelProperties { - redeem_points: PaymentRequestRedeemPoints; - success_return_url?: string; - failure_return_url?: string; - cancel_return_url?: string; - require_auth?: string; -} - -export = class PaymentRequest { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof PaymentRequest; - - createPaymentRequest(data: { - currency: PaymentRequestCurrencies; - amount: number; - reference_id?: string; - customer_id?: string; - country?: PaymentRequestCountries; - description?: string; - payment_method?: object; - channel_properties?: PaymentRequestChannelProperties; - metadata?: object; - payment_method_id?: string; - shipping_information?: object; - initiator?: PaymentRequestInitiator; - capture_method?: PaymentRequestCaptureMethod; - idempotency_key?: string; - for_user_id?: string; - }): Promise; - - confirmPaymentRequest(data: { - id: string; - auth_code: string; - idempotency_key?: string; - for_user_id?: string; - }): Promise; - - resendAuthForPaymentRequest(data: { - id: string; - idempotency_key?: string; - for_user_id?: string; - }): Promise; - - getPaymentRequestById(data: { - id: string; - for_user_id?: string; - }): Promise; - - listPaymentRequest(data: { - id?: string; - reference_id?: string; - customer_id?: string; - type?: PaymentRequestType; - channel_code?: string; - status?: PaymentRequestStatuses; - limit?: number; - after_id?: string; - before_id?: string; - for_user_id?: string; - }): Promise; -}; diff --git a/src/payment_request/payment_request.js b/src/payment_request/payment_request.js deleted file mode 100644 index 82c5ac5..0000000 --- a/src/payment_request/payment_request.js +++ /dev/null @@ -1,186 +0,0 @@ -const { - promWithJsErr, - Validate, - fetchWithHTTPErr, - Auth, - queryStringWithoutUndefined, -} = require('../utils'); - -const PAYMENT_REQUEST_PATH = '/payment_requests'; - -function PaymentRequest(options) { - let aggOpts = options; - if ( - PaymentRequest._injectedOpts && - Object.keys(PaymentRequest._injectedOpts).length > 0 - ) { - aggOpts = Object.assign({}, options, PaymentRequest._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + PAYMENT_REQUEST_PATH; -} - -PaymentRequest._injectedOpts = {}; -PaymentRequest._constructorWithInjectedXenditOpts = function(options) { - PaymentRequest._injectedOpts = options; - return PaymentRequest; -}; - -PaymentRequest.prototype.createPaymentRequest = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['amount'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.for_user_id; - } - - if (data && data.idempotency_key) { - headers['idempotency-key'] = data.idempotency_key; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}`, { - method: 'POST', - headers, - body: JSON.stringify({ - currency: data.currency, - amount: data.amount, - reference_id: data.reference_id, - customer_id: data.customer_id, - country: data.country, - description: data.description, - payment_method: data.payment_method, - channel_properties: data.channel_properties, - metadata: data.metadata, - payment_method_id: data.payment_method_id, - capture_method: data.capture_method, - shipping_information: data.shipping_information, - initiator: data.initiator, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -PaymentRequest.prototype.confirmPaymentRequest = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id', 'auth_code'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.forUserID; - } - - if (data && data.idempotency_key) { - headers['idempotency-key'] = data.idempotency_key; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}/auth`, { - method: 'POST', - headers, - body: JSON.stringify({ - auth_code: data.auth_code, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -PaymentRequest.prototype.resendAuthForPaymentRequest = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.forUserID; - } - - if (data && data.idempotency_key) { - headers['idempotency-key'] = data.idempotency_key; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}/auth/resend`, { - method: 'POST', - headers, - }) - .then(resolve) - .catch(reject); - }); -}; - -PaymentRequest.prototype.listPaymentRequest = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields([], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.for_user_id; - } - - const queryStr = data - ? queryStringWithoutUndefined({ - id: data.id ? data.id : undefined, - reference_id: data.reference_id ? data.reference_id : undefined, - customer_id: data.customer_id ? data.customer_id : undefined, - type: data.type ? data.type : undefined, - channel_code: data.channel_code ? data.channel_code : undefined, - status: data.status ? data.status : undefined, - limit: data.limit ? data.limit : undefined, - after_id: data.after_id ? data.after_id : undefined, - before_id: data.before_id ? data.before_id : undefined, - }) - : ''; - - const queryStrWithQuestionMark = queryStr ? `?${queryStr}` : ''; - - fetchWithHTTPErr(`${this.API_ENDPOINT}${queryStrWithQuestionMark}`, { - method: 'GET', - headers, - }) - .then(resolve) - .catch(reject); - }); -}; - -PaymentRequest.prototype.getPaymentRequestById = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}`, { - method: 'GET', - headers, - }) - .then(resolve) - .catch(reject); - }); -}; - -module.exports = PaymentRequest; diff --git a/src/payout/index.d.ts b/src/payout/index.d.ts deleted file mode 100644 index 00d3547..0000000 --- a/src/payout/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import PayoutService from './payout'; - -export { PayoutService }; diff --git a/src/payout/index.js b/src/payout/index.js deleted file mode 100644 index d0cbc36..0000000 --- a/src/payout/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const PayoutService = require('./payout'); - -module.exports = { PayoutService }; diff --git a/src/payout/payout.d.ts b/src/payout/payout.d.ts deleted file mode 100644 index 17f1be2..0000000 --- a/src/payout/payout.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; - -export = class Payout { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof Payout; - createPayout(data: { - externalID: string; - amount: string; - email: string; - }): Promise; - getPayout(data: { id: string }): Promise; - voidPayout(data: { id: string }): Promise; -}; diff --git a/src/payout/payout.js b/src/payout/payout.js deleted file mode 100644 index c3ff3ae..0000000 --- a/src/payout/payout.js +++ /dev/null @@ -1,76 +0,0 @@ -const { promWithJsErr, Validate, fetchWithHTTPErr, Auth } = require('../utils'); - -const PAYOUT_PATH = '/payouts'; - -function Payout(options) { - let aggOpts = options; - if (Payout._injectedOpts && Object.keys(Payout._injectedOpts).length > 0) { - aggOpts = Object.assign({}, options, Payout._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + PAYOUT_PATH; -} - -Payout._injectedOpts = {}; -Payout._constructorWithInjectedXenditOpts = function(options) { - Payout._injectedOpts = options; - return Payout; -}; - -Payout.prototype.createPayout = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields( - ['externalID', 'amount', 'email'], - data, - reject, - ); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - external_id: data.externalID, - amount: data.amount, - email: data.email, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -Payout.prototype.getPayout = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}`, { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }) - .then(resolve) - .catch(reject); - }); -}; - -Payout.prototype.voidPayout = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}/void`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }) - .then(resolve) - .catch(reject); - }); -}; - -module.exports = Payout; diff --git a/src/platform/index.d.ts b/src/platform/index.d.ts deleted file mode 100644 index 73ba2e9..0000000 --- a/src/platform/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import PlatformService from './platform'; - -export { PlatformService }; diff --git a/src/platform/index.js b/src/platform/index.js deleted file mode 100644 index 2aeb6a3..0000000 --- a/src/platform/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const PlatformService = require('./platform'); - -module.exports = { PlatformService }; diff --git a/src/platform/platform.d.ts b/src/platform/platform.d.ts deleted file mode 100644 index 4c6dca4..0000000 --- a/src/platform/platform.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; - -enum AccountTypes { - Owned = 'OWNED', - Managed = 'MANAGED', -} - -export = class Platform { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof Platform; - static AccountType: { - Owned: string; - Managed: string; - }; - createAccount(data: { - accountEmail: string; - type: AccountTypes; - businessProfile?: { - businessName: string; - }; - }): Promise; - createV2Account(data: { - email: string; - type: string; - publicProfile?: { - businessName: string; - }; - }): Promise; - getAccountByID(data: { id: string }): Promise; - updateAccount(data: { - id: string; - email: string; - publicProfile?: { - businessName: string; - }; - }): Promise; - setCallbackURL(data: { - type: string; - url: string; - forUserID?: string; - }): Promise; - createTransfer(data: { - reference: string; - amount: number; - sourceUserID: string; - destinationUserID: string; - }): Promise; - createFeeRule(data: { - name: string; - description?: string; - routes: Array<{ - unit: string; - amount: number; - currency: string; - }>; - }): Promise; -}; diff --git a/src/platform/platform.js b/src/platform/platform.js deleted file mode 100644 index 624b1d0..0000000 --- a/src/platform/platform.js +++ /dev/null @@ -1,200 +0,0 @@ -const { promWithJsErr, Validate, fetchWithHTTPErr, Auth } = require('../utils'); - -function Platform(options) { - let aggOpts = options; - if ( - Platform._injectedOpts && - Object.keys(Platform._injectedOpts).length > 0 - ) { - aggOpts = Object.assign({}, options, Platform._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL; -} - -Platform._injectedOpts = {}; -Platform._constructorWithInjectedXenditOpts = function(options) { - Platform._injectedOpts = options; - return Platform; -}; -Platform.AccountType = { - Owned: 'OWNED', - Managed: 'MANAGED', -}; - -Platform.prototype.createAccount = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['accountEmail', 'type'], data, reject); - - const body = { - account_email: data.accountEmail, - type: data.type, - }; - if (data.businessProfile) { - body.business_profile = { - business_name: data.businessProfile.businessName, - }; - } - fetchWithHTTPErr(`${this.API_ENDPOINT}/accounts`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - body: JSON.stringify(body), - }) - .then(resolve) - .catch(reject); - }); -}; - -Platform.prototype.createV2Account = function(data) { - return promWithJsErr((resolve, reject) => { - let validationFields = ['email', 'type']; - if (data.type === 'OWNED') { - validationFields.push('publicProfile'); - } - Validate.rejectOnMissingFields(validationFields, data, reject); - const body = { email: data.email, type: data.type }; - if (data.publicProfile) { - body.public_profile = { - business_name: data.publicProfile.businessName, - }; - } - fetchWithHTTPErr(`${this.API_ENDPOINT}/v2/accounts`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - body: JSON.stringify(body), - }) - .then(resolve) - .catch(reject); - }); -}; - -Platform.prototype.getAccountByID = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - fetchWithHTTPErr(`${this.API_ENDPOINT}/v2/accounts/${data.id}`, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }) - .then(resolve) - .catch(reject); - }); -}; - -Platform.prototype.updateAccount = function(data) { - return promWithJsErr((resolve, reject) => { - let validationFields = ['email', 'id']; - if (data.type === 'OWNED') { - validationFields.push('publicProfile'); - } - Validate.rejectOnMissingFields(validationFields, data, reject); - const body = { email: data.email }; - if (data.publicProfile) { - body.public_profile = { - business_name: data.publicProfile.businessName, - }; - } - fetchWithHTTPErr(`${this.API_ENDPOINT}/v2/accounts/${data.id}`, { - method: 'PATCH', - headers: { - 'Content-Type': 'application/json', - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - body: JSON.stringify(body), - }) - .then(resolve) - .catch(reject); - }); -}; - -Platform.prototype.setCallbackURL = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['type', 'url'], data, reject); - - const headers = { - 'Content-Type': 'application/json', - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }; - if (data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/callback_urls/${data.type}`, { - method: 'POST', - headers, - body: JSON.stringify({ - url: data.url, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -Platform.prototype.createTransfer = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields( - ['reference', 'amount', 'sourceUserID', 'destinationUserID'], - data, - reject, - ); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/transfers`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - body: JSON.stringify({ - reference: data.reference, - amount: data.amount, - source_user_id: data.sourceUserID, - destination_user_id: data.destinationUserID, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -Platform.prototype.createFeeRule = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['name', 'routes'], data, reject); - - // transform from routes function input type to HTTP JSON body - let routes = []; - if (data.routes && data.routes.length > 0) { - routes = data.routes.map(r => ({ - unit: r.unit, - amount: r.amount, - currency: r.currency, - })); - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/fee_rules`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - body: JSON.stringify({ - name: data.name, - description: data.description, - routes, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -module.exports = Platform; diff --git a/src/qr_code/index.d.ts b/src/qr_code/index.d.ts deleted file mode 100644 index ee8509c..0000000 --- a/src/qr_code/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import QrCode from './qr_code'; - -export { QrCode }; diff --git a/src/qr_code/index.js b/src/qr_code/index.js deleted file mode 100644 index d1cec94..0000000 --- a/src/qr_code/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const QrCode = require('./qr_code'); - -module.exports = { QrCode }; diff --git a/src/qr_code/qr_code.d.ts b/src/qr_code/qr_code.d.ts deleted file mode 100644 index 98f05be..0000000 --- a/src/qr_code/qr_code.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; - -enum QrCodeTypes { - Dynamic = 'DYNAMIC', - Static = 'STATIC', -} - -export = class QrCode { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof QrCode; - static Type: { - Dynamic: string; - Static: string; - }; - createCode(data: { - externalID: string; - type: QrCodeTypes; - callbackURL: string; - amount?: number; - metadata?: object; - }): Promise; - getCode(data: { externalID: string }): Promise; - getPayments(data: { - externalID: string; - from?: string; - to?: string; - limit?: number; - }): Promise; - simulate(data: { externalID: string; amount?: number }): Promise; -}; diff --git a/src/qr_code/qr_code.js b/src/qr_code/qr_code.js deleted file mode 100644 index 207bb03..0000000 --- a/src/qr_code/qr_code.js +++ /dev/null @@ -1,118 +0,0 @@ -const { promWithJsErr, fetchWithHTTPErr, Auth, Validate } = require('../utils'); - -const QR_CODE_PATH = '/qr_codes'; - -function QrCode(options) { - let aggOpts = options; - if (QrCode._injectedOpts && Object.keys(QrCode._injectedOpts).length > 0) { - aggOpts = Object.assign({}, options, QrCode._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + QR_CODE_PATH; -} - -QrCode._injectedOpts = {}; -QrCode._constructorWithInjectedXenditOpts = function(options) { - QrCode._injectedOpts = options; - return QrCode; -}; -QrCode.Type = { - Dynamic: 'DYNAMIC', - Static: 'STATIC', -}; - -QrCode.prototype.createCode = function(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['externalID', 'type', 'callbackURL']; - if (data.type === QrCode.Type.Dynamic) { - compulsoryFields.push('amount'); - } - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - body: JSON.stringify({ - external_id: data.externalID, - type: data.type, - callback_url: data.callbackURL, - amount: data.amount, - metadata: data.metadata, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -QrCode.prototype.getCode = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['externalID'], data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.externalID}`, { - method: 'GET', - headers: { Authorization: Auth.basicAuthHeader(this.opts.secretKey) }, - }) - .then(resolve) - .catch(reject); - }); -}; - -QrCode.prototype.simulate = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['externalID'], data, reject); - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/${data.externalID}/payments/simulate`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - body: JSON.stringify({ amount: data.amount }), - }, - ) - .then(resolve) - .catch(reject); - }); -}; - -QrCode.prototype.getPayments = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['externalID'], data, reject); - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/payments?external_id=${ - data.externalID - }${getPaymentsOptionalRequestParameters(data)}`, - { - method: 'GET', - headers: { Authorization: Auth.basicAuthHeader(this.opts.secretKey) }, - }, - ) - .then(resolve) - .catch(reject); - }); -}; - -function getPaymentsOptionalRequestParameters(data) { - let url = ''; - if (data.from) { - url += `&from=${data.from}`; - } - if (data.to) { - url += `&to=${data.to}`; - } - if (data.limit != null) { - url += `&limit=${data.limit}`; - } - - return url; -} - -module.exports = QrCode; diff --git a/src/recurring/index.d.ts b/src/recurring/index.d.ts deleted file mode 100644 index 9862f8b..0000000 --- a/src/recurring/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import Recurring from './recurring'; - -export { Recurring }; diff --git a/src/recurring/index.js b/src/recurring/index.js deleted file mode 100644 index a65ea12..0000000 --- a/src/recurring/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const Recurring = require('./recurring'); - -module.exports = { Recurring }; diff --git a/src/recurring/manage_cycles.d.ts b/src/recurring/manage_cycles.d.ts deleted file mode 100644 index 466ea75..0000000 --- a/src/recurring/manage_cycles.d.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { RecurringAction, Currency } from './manage_plans'; - -export interface List { - data: T[]; - has_more: boolean; -} - -export interface UpdateCycleRequest { - id: string; - businessId: string; - planId: string; - scheduledTimestamp: string; - currency: Currency; - amount: number; - metadata?: object | null; -} - -export interface RecurringCycle { - id: string; - type: RecurringCycleType; - reference_id?: string; - plan_id: string; - customer_id: string | null; - recurring_action: RecurringAction; - attempt_count: number; - cycle_number: number; - attempt_details: Array; - status: RecurringCycleStatus; - scheduled_timestamp: string; - created: string; - updated: string; - currency: Currency; - amount: number; - metadata?: object | null; -} - -export interface RecurringCycleAttempt { - attempt_number: number; - created: string; - action_id: string | null; - status: RecurringCycleAttemptStatus; - failure_code?: string | null; - next_retry_timestamp: string | null; -} - -export enum RecurringCycleAttemptStatus { - SUCCEEDED = 'SUCCEEDED', - FAILED = 'FAILED', - PENDING = 'PENDING', -} - -export enum RecurringCycleType { - SCHEDULED = 'SCHEDULED', - IMMEDIATE = 'IMMEDIATE', -} - -export enum RecurringCycleStatus { - SCHEDULED = 'SCHEDULED', - PENDING = 'PENDING', - RETRYING = 'RETRYING', - FAILED = 'FAILED', - SUCCEEDED = 'SUCCEEDED', - CANCELLED = 'CANCELLED', -} - -export enum CycleDashboardSearchType { - CYCLE_ID = 'id', - REFERENCE_ID = 'reference_id', -} - -export function editCycle(data: UpdateCycleRequest): Promise; -export function getCycle(data: { - id: string; - planId: string; - businessId: string; -}): Promise; -export function cancelCycle(data: { - id: string; - planId: string; - businessId: string; -}): Promise; -export function getAllCycles(data: { - businessId: string; - planId: string; - limit?: number; - beforeId?: string; - afterId?: string; - searchType?: CycleDashboardSearchType; - searchValue?: string; -}): Promise>; diff --git a/src/recurring/manage_cycles.js b/src/recurring/manage_cycles.js deleted file mode 100644 index 6193b67..0000000 --- a/src/recurring/manage_cycles.js +++ /dev/null @@ -1,116 +0,0 @@ -const querystring = require('querystring'); -const { promWithJsErr, Validate, fetchWithHTTPErr, Auth } = require('../utils'); - -function getCycle(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields( - ['id', 'businessId', 'planId'], - data, - reject, - ); - fetchWithHTTPErr( - `${this.API_ENDPOINT_PLANS}/${data.planId}/cycles/${data.id}`, - { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'business-id': data.businessId, - }, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -function getAllCycles(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['businessId', 'planId'], data, reject); - const query = {}; - if (data.limit) { - query.limit = data.limit; - } - if (data.beforeId) { - query.before_id = data.beforeId; - } - if (data.afterId) { - query.after_id = data.afterId; - } - if (data.searchType) { - query.search_type = data.searchType; - } - if (data.searchValue) { - query.search_value = data.searchValue; - } - - const urlSearchParams = querystring.stringify(query); - - fetchWithHTTPErr( - `${this.API_ENDPOINT_PLANS}/${ - data.planId - }/cycles?${urlSearchParams.toString()}`, - { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'business-id': data.businessId, - }, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -function cancelCycle(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields( - ['id', 'businessId', 'planId'], - data, - reject, - ); - fetchWithHTTPErr( - `${this.API_ENDPOINT_PLANS}/${data.planId}/cycles/${data.id}/cancel`, - { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'business-id': data.businessId, - }, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -function editCycle(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields( - ['id', 'businessId', 'planId'], - data, - reject, - ); - fetchWithHTTPErr( - `${this.API_ENDPOINT_PLANS}/${data.planId}/cycles/${data.id}`, - { - method: 'PATCH', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - 'business-id': data.businessId, - }, - body: JSON.stringify({ - scheduled_timestamp: data.scheduledTimestamp, - currency: data.currency, - amount: data.amount, - metadata: data.metadata, - }), - }, - ) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { getCycle, getAllCycles, cancelCycle, editCycle }; diff --git a/src/recurring/manage_plans.d.ts b/src/recurring/manage_plans.d.ts deleted file mode 100644 index 7461fc7..0000000 --- a/src/recurring/manage_plans.d.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { CreateScheduleRequest } from './manage_schedules'; -export interface CreatePlanRequest { - businessId: string; - referenceId: string; - customerId: string; - recurringAction: RecurringAction; - currency: Currency; - amount: number; - paymentMethods?: Array; - scheduleId?: string; - schedule?: Omit; - immediateActionType?: ImmediateActionType | null; - notificationConfig?: NotificationConfig | null; - failedCycleAction?: FailingCycleAction; - metadata?: object | null; -} - -export interface UpdatePlanRequest { - id: string; - businessId: string; - customerId?: string; - currency?: Currency; - amount?: number; - paymentMethods?: Array; - notificationConfig?: NotificationConfig | null; - updateScheduledCycle?: boolean; - metadata?: object | null; - description?: string; -} - -export interface RecurringPlan { - id: string; - reference_id: string; - business_id: string; - customer_id: string | null; - recurring_action: RecurringAction; - recurring_cycle_count: number; - currency: Currency; - amount: number; - status: RecurringPlanStatus; - created: string; - updated?: string; - payment_methods?: Array; - schedule_id: string; - immediate_action_type?: ImmediateActionType | null; - notification_config?: NotificationConfig | null; - failed_cycle_action?: FailingCycleAction; - metadata?: object | null; - description?: string; -} - -export enum RecurringAction { - PAYMENT = 'PAYMENT', - DISBURSEMENT = 'DISBURSEMENT', -} -export enum ImmediateActionType { - FULL_AMOUNT = 'FULL_AMOUNT', -} -export interface NotificationConfig { - recurringCreated?: Array; - recurringSucceeded?: Array; - recurringFailed?: Array; - locale?: NotificationConfigLocale; -} -export enum NotificationChannel { - WHATSAPP = 'WHATSAPP', - SMS = 'SMS', - EMAIL = 'EMAIL', -} -export enum NotificationConfigLocale { - en = 'en', - id = 'id', -} -export enum FailingCycleAction { - RESUME = 'RESUME', - STOP = 'STOP', -} -export enum Currency { - PHP = 'PHP', - IDR = 'IDR', -} -export enum RecurringPlanStatus { - ACTIVE = 'ACTIVE', - INACTIVE = 'INACTIVE', - PENDING = 'PENDING', -} -export interface PaymentMethodIdRanked { - paymentMethodId: string; - rank: number; -} - -export function createPlan(data: CreatePlanRequest): Promise; -export function editPlan(data: UpdatePlanRequest): Promise; -export function getPlan(data: { - id: string; - businessId: string; -}): Promise; -export function deactivatePlan(data: { - id: string; - businessId: string; -}): Promise; diff --git a/src/recurring/manage_plans.js b/src/recurring/manage_plans.js deleted file mode 100644 index 9692756..0000000 --- a/src/recurring/manage_plans.js +++ /dev/null @@ -1,130 +0,0 @@ -const { promWithJsErr, Validate, fetchWithHTTPErr, Auth } = require('../utils'); - -function createPlan(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = [ - 'referenceId', - 'businessId', - 'customerId', - 'recurringAction', - 'currency', - 'amount', - ]; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT_PLANS}/`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - 'business-id': data.businessId, - }, - body: JSON.stringify({ - reference_id: data.referenceId, - customer_id: data.customerId, - recurring_action: data.recurringAction, - currency: data.currency, - amount: data.amount, - payment_methods: (data.paymentMethods || []).map( - ({ paymentMethodId: id, rank }) => ({ - payment_method_id: id, - rank, - }), - ), - schedule_id: data.scheduleId, - schedule: data.schedule && { - reference_id: data.schedule.referenceId, - interval: data.schedule.interval, - interval_count: data.schedule.intervalCount, - total_recurrence: data.schedule.totalRecurrence, - anchor_date: data.schedule.anchorDate, - retry_interval: data.schedule.retryInterval, - retry_interval_count: data.schedule.retryIntervalCount, - total_retry: data.schedule.totalRetry, - failed_attempt_notifications: - data.schedule.failedAttemptNotifications, - }, - immediate_action_type: data.immediateActionType, - notification_config: data.notificationConfig && { - recurring_created: data.notificationConfig.recurringCreated, - recurring_succeeded: data.notificationConfig.recurringSucceeded, - recurring_failed: data.notificationConfig.recurringFailed, - locale: data.notificationConfig.locale, - }, - failed_cycle_action: data.failedCycleAction, - metadata: data.metadata, - description: data.description, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -function getPlan(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id', 'businessId'], data, reject); - fetchWithHTTPErr(`${this.API_ENDPOINT_PLANS}/${data.id}`, { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'business-id': data.businessId, - }, - }) - .then(resolve) - .catch(reject); - }); -} - -function deactivatePlan(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id', 'businessId'], data, reject); - fetchWithHTTPErr(`${this.API_ENDPOINT_PLANS}/${data.id}/deactivate`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'business-id': data.businessId, - }, - }) - .then(resolve) - .catch(reject); - }); -} - -function editPlan(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id', 'businessId'], data, reject); - fetchWithHTTPErr(`${this.API_ENDPOINT_PLANS}/${data.id}`, { - method: 'PATCH', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - 'business-id': data.businessId, - 'update-scheduled-cycle': data.updateScheduledCycle || false, - }, - body: JSON.stringify({ - customer_id: data.customerId, - currency: data.currency, - amount: data.amount, - payment_methods: - data.paymentMethods && - data.paymentMethods.map(({ paymentMethodId: id, rank }) => ({ - payment_method_id: id, - rank, - })), - notification_config: data.notificationConfig && { - recurring_created: data.notificationConfig.recurringCreated || [], - recurring_succeeded: data.notificationConfig.recurringSucceeded || [], - recurring_failed: data.notificationConfig.recurringFailed || [], - locale: data.notificationConfig.locale, - }, - metadata: data.metadata, - description: data.description, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { createPlan, getPlan, editPlan, deactivatePlan }; diff --git a/src/recurring/manage_schedules.d.ts b/src/recurring/manage_schedules.d.ts deleted file mode 100644 index e950236..0000000 --- a/src/recurring/manage_schedules.d.ts +++ /dev/null @@ -1,67 +0,0 @@ -export interface CreateScheduleRequest { - referenceId: string; - businessId: string; - interval: Interval | null; - intervalCount: number; - totalRecurrence?: number; - anchorDate?: string; - retryInterval?: Interval | null; - retryIntervalCount?: number; - totalRetry?: number | null; - failedAttemptNotifications?: Array; -} - -export interface UpdateScheduleRequest { - id: string; - businessId: string; - interval: Interval | null; - intervalCount: number; - totalRecurrence?: number; - anchorDate?: string; - retryInterval?: Interval | null; - updateScheduledCycle?: boolean; - retryIntervalCount?: number; - totalRetry?: number | null; - failedAttemptNotifications?: Array; -} - -export interface RecurringSchedule { - id: string; - reference_id: string; - business_id: string; - interval: Interval | null; - interval_count: number; - total_recurrence?: number | null; - anchor_date?: string; - retry_interval?: Interval | null; - retry_interval_count?: number | null; - total_retry?: number | null; - failed_attempt_notifications?: Array; - created?: string; - updated?: string; -} - -export enum Currency { - Php = 'PHP', - Idr = 'IDR', -} - -export enum Interval { - Day = 'DAY', - Week = 'WEEK', - Month = 'MONTH', - Null = 'null', -} - -export function createSchedule( - data: CreateScheduleRequest, -): Promise; - -export function getSchedule(data: { - id: string; - businessId: string; -}): Promise; - -export function editSchedule( - data: UpdateScheduleRequest, -): Promise; diff --git a/src/recurring/manage_schedules.js b/src/recurring/manage_schedules.js deleted file mode 100644 index 281a24b..0000000 --- a/src/recurring/manage_schedules.js +++ /dev/null @@ -1,86 +0,0 @@ -const { promWithJsErr, Validate, fetchWithHTTPErr, Auth } = require('../utils'); - -function getSchedule(data) { - return promWithJsErr((resolve, reject) => { - const requiredFields = ['id', 'businessId']; - - Validate.rejectOnMissingFields(requiredFields, data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT_SCHEDULES}/${data.id}`, { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'business-id': data.businessId, - }, - }) - .then(resolve) - .catch(reject); - }); -} - -function createSchedule(data) { - return promWithJsErr((resolve, reject) => { - const requiredFields = [ - 'businessId', - 'referenceId', - 'interval', - 'intervalCount', - ]; - - Validate.rejectOnMissingFields(requiredFields, data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT_SCHEDULES}/`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'business-id': data.businessId, - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - reference_id: data.referenceId, - interval: data.interval, - interval_count: data.intervalCount, - total_recurrence: data.totalRecurrence, - anchor_date: data.anchorDate, - retry_interval: data.retryInterval, - retry_interval_count: data.retryIntervalCount, - total_retry: data.totalRetry, - failed_attempt_notifications: data.failedAttemptNotifications, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -function editSchedule(data) { - return promWithJsErr((resolve, reject) => { - const requiredFields = ['id', 'businessId', 'interval', 'intervalCount']; - - Validate.rejectOnMissingFields(requiredFields, data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT_SCHEDULES}/${data.id}`, { - method: 'PATCH', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'business-id': data.businessId, - 'Content-Type': 'application/json', - 'update-scheduled-cycle': data.updateScheduledCycle || false, - }, - body: JSON.stringify({ - interval: data.interval, - interval_count: data.intervalCount, - total_recurrence: data.totalRecurrence, - anchor_date: data.anchorDate, - retry_interval: data.retryInterval, - retry_interval_count: data.retryIntervalCount, - total_retry: data.totalRetry, - failed_attempt_notifications: data.failedAttemptNotifications, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { createSchedule, getSchedule, editSchedule }; diff --git a/src/recurring/recurring.d.ts b/src/recurring/recurring.d.ts deleted file mode 100644 index c9b8139..0000000 --- a/src/recurring/recurring.d.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; -import { - ImmediateActionType, - NotificationChannel, - NotificationConfigLocale, - RecurringAction, - FailingCycleAction, - RecurringPlanStatus, -} from './manage_plans'; -import { createPlan, editPlan, getPlan, deactivatePlan } from './manage_plans'; -import { - getCycle, - editCycle, - getAllCycles, - cancelCycle, -} from './manage_cycles'; -import { createSchedule, getSchedule, editSchedule } from './manage_schedules'; - -export default class Recurring { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof RecurringPlan; - static recurringAction: RecurringAction; - static immediateActionType: ImmediateActionType; - static notificationChannel: NotificationChannel; - static locale: NotificationConfigLocale; - static failedCycleAction: FailingCycleAction; - static status: RecurringPlanStatus; - - createPlan: typeof createPlan; - editPlan: typeof editPlan; - getPlan: typeof getPlan; - deactivatePlan: typeof deactivatePlan; - - createSchedule: typeof createSchedule; - getSchedule: typeof getSchedule; - editSchedule: typeof editSchedule; - - getCycle: typeof getCycle; - editCycle: typeof editCycle; - getAllCycles: typeof getAllCycles; - cancelCycle: typeof cancelCycle; -} diff --git a/src/recurring/recurring.js b/src/recurring/recurring.js deleted file mode 100644 index 07c89cc..0000000 --- a/src/recurring/recurring.js +++ /dev/null @@ -1,92 +0,0 @@ -const { - createPlan, - editPlan, - getPlan, - deactivatePlan, -} = require('./manage_plans'); -const { - createSchedule, - getSchedule, - editSchedule, -} = require('./manage_schedules'); -const { - getCycle, - getAllCycles, - cancelCycle, - editCycle, -} = require('./manage_cycles'); - -const RECURRING_PATH = '/recurring'; - -class Recurring { - constructor(options) { - let aggOpts = Object.assign({}, options); - if (Object.keys(Recurring._injectedOpts || {}).length) { - aggOpts = Object.assign({}, options, Recurring._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT_PLANS = this.opts.xenditURL + `${RECURRING_PATH}/plans`; - this.API_ENDPOINT_SCHEDULES = - this.opts.xenditURL + `${RECURRING_PATH}/schedules`; - } - - static _constructorWithInjectedXenditOpts(options) { - Recurring._injectedOpts = options; - return Recurring; - } -} - -Object.assign(Recurring, { - _injectedOpts: {}, - Interval: { - Day: 'DAY', - Week: 'WEEK', - Month: 'MONTH', - }, - Action: { - Stop: 'STOP', - Ignore: 'IGNORE', - }, - recurringAction: { - payment: 'PAYMENT', - disbursment: 'DISBURSEMENT', - }, - immediateActionType: { - fullAmount: 'FULL_AMOUNT', - }, - notificationChannel: { - whatsapp: 'WHATSAPP', - sms: 'SMS', - email: 'EMAIL', - }, - locale: { - en: 'en', - id: 'id', - }, - failedCycleAction: { - resume: 'RESUME', - stop: 'STOP', - }, - status: { - active: 'ACTIVE', - inactive: 'INACTIVE', - pending: 'PENDING', - }, -}); - -Object.assign(Recurring.prototype, { - createPlan, - editPlan, - getPlan, - deactivatePlan, - createSchedule, - getSchedule, - editSchedule, - getCycle, - getAllCycles, - editCycle, - cancelCycle, -}); - -module.exports = Recurring; diff --git a/src/recurring_payment/index.d.ts b/src/recurring_payment/index.d.ts deleted file mode 100644 index 971b54b..0000000 --- a/src/recurring_payment/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import RecurringPayment from './recurring_payment'; - -export { RecurringPayment }; diff --git a/src/recurring_payment/index.js b/src/recurring_payment/index.js deleted file mode 100644 index cf1c6cd..0000000 --- a/src/recurring_payment/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const RecurringPayment = require('./recurring_payment'); - -module.exports = { RecurringPayment }; diff --git a/src/recurring_payment/manage_payments.d.ts b/src/recurring_payment/manage_payments.d.ts deleted file mode 100644 index dc9d796..0000000 --- a/src/recurring_payment/manage_payments.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -export enum Interval { - Day = 'DAY', - Week = 'WEEK', - Month = 'MONTH', -} - -export enum Action { - Stop = 'STOP', - Ignore = 'IGNORE', -} - -export function createPayment(data: { - externalID: string; - payerEmail?: string; - description?: string; - amount: number; - interval: Interval; - intervalCount: number; - totalRecurrence?: number; - invoiceDuration?: number; - shouldSendEmail?: boolean; - missedPaymentAction?: Action; - creditCardToken?: string; - startDate?: Date; - successRedirectURL?: string; - failureRedirectURL?: string; - recharge?: boolean; - chargeImmediately?: boolean; - currency?: string; - rescheduleAt?: Date; - customer?: object; - customerNotificationPreference?: object; - reminderTimeUnit?: string; - reminderTime?: number; - paymentMethodId?: string; -}): Promise; - -export function getPayment(data: { id: string }): Promise; - -export function editPayment(data: { - id: string; - amount?: number; - creditCardToken?: string; - interval?: Interval; - intervalCount?: number; - shouldSendEmail?: boolean; - invoiceDuration?: number; - missedPaymentAction?: Action; - rescheduleAt?: Date; - customerId?: string; - reminderTimeUnit?: string; - reminderTime?: number; - paymentMethodId?: string; -}): Promise; diff --git a/src/recurring_payment/manage_payments.js b/src/recurring_payment/manage_payments.js deleted file mode 100644 index 96b363c..0000000 --- a/src/recurring_payment/manage_payments.js +++ /dev/null @@ -1,97 +0,0 @@ -const { promWithJsErr, Validate, fetchWithHTTPErr, Auth } = require('../utils'); - -function createPayment(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = [ - 'externalID', - 'amount', - 'interval', - 'intervalCount', - ]; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - external_id: data.externalID, - payer_email: data.payerEmail, - description: data.description, - amount: data.amount, - interval: data.interval, - interval_count: data.intervalCount, - total_recurrence: data.totalRecurrence, - invoice_duration: data.invoiceDuration, - should_send_email: data.shouldSendEmail, - missed_payment_action: data.missedPaymentAction, - credit_card_token: data.creditCardToken, - start_date: data.startDate ? data.startDate.toISOString() : undefined, - success_redirect_url: data.successRedirectURL, - failure_redirect_url: data.failureRedirectURL, - recharge: data.recharge, - charge_immediately: data.chargeImmediately, - currency: data.currency, - reschedule_at: data.rescheduleAt - ? data.rescheduleAt.toISOString() - : undefined, - customer: data.customer, - customer_notification_preference: data.customerNotificationPreference, - reminder_time_unit: data.reminderTimeUnit, - reminder_time: data.reminderTime, - payment_method_id: data.paymentMethodId, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -function getPayment(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}`, { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }) - .then(resolve) - .catch(reject); - }); -} - -function editPayment(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}`, { - method: 'PATCH', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - amount: data.amount, - credit_card_token: data.creditCardToken, - interval: data.interval, - interval_count: data.intervalCount, - should_send_email: data.shouldSendEmail, - invoice_duration: data.invoiceDuration, - missed_payment_action: data.missedPaymentAction, - reschedule_at: data.rescheduleAt - ? data.rescheduleAt.toISOString() - : undefined, - customer_id: data.customerId, - reminder_time_unit: data.reminderTimeUnit, - reminder_time: data.reminderTime, - payment_method_id: data.paymentMethodId, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { createPayment, getPayment, editPayment }; diff --git a/src/recurring_payment/operate_payments.d.ts b/src/recurring_payment/operate_payments.d.ts deleted file mode 100644 index 8b23810..0000000 --- a/src/recurring_payment/operate_payments.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export function stopPayment(data: { id: string }): Promise; - -export function pausePayment(data: { id: string }): Promise; - -export function resumePayment(data: { id: string }): Promise; diff --git a/src/recurring_payment/operate_payments.js b/src/recurring_payment/operate_payments.js deleted file mode 100644 index 3b95550..0000000 --- a/src/recurring_payment/operate_payments.js +++ /dev/null @@ -1,30 +0,0 @@ -const { promWithJsErr, Validate, fetchWithHTTPErr, Auth } = require('../utils'); - -function operatePayment(action, data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}/${action}!`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }) - .then(resolve) - .catch(reject); - }); -} - -function stopPayment(data) { - return operatePayment.bind(this)('stop', data); -} - -function pausePayment(data) { - return operatePayment.bind(this)('pause', data); -} - -function resumePayment(data) { - return operatePayment.bind(this)('resume', data); -} - -module.exports = { stopPayment, pausePayment, resumePayment }; diff --git a/src/recurring_payment/recurring_payment.d.ts b/src/recurring_payment/recurring_payment.d.ts deleted file mode 100644 index f34dab5..0000000 --- a/src/recurring_payment/recurring_payment.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; -import { - Interval as IntervalEnum, - Action as ActionEnum, -} from './manage_payments'; -import { createPayment, getPayment, editPayment } from './manage_payments'; -import { stopPayment, pausePayment, resumePayment } from './operate_payments'; - -export default class RecurringPayment { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof RecurringPayment; - static Interval: { - Day: IntervalEnum; - Week: IntervalEnum; - Month: IntervalEnum; - }; - static Action: { - Stop: ActionEnum; - Ignore: ActionEnum; - }; - createPayment: typeof createPayment; - getPayment: typeof getPayment; - editPayment: typeof editPayment; - stopPayment: typeof stopPayment; - pausePayment: typeof pausePayment; - resumePayment: typeof resumePayment; -} diff --git a/src/recurring_payment/recurring_payment.js b/src/recurring_payment/recurring_payment.js deleted file mode 100644 index 4827abd..0000000 --- a/src/recurring_payment/recurring_payment.js +++ /dev/null @@ -1,49 +0,0 @@ -const { createPayment, getPayment, editPayment } = require('./manage_payments'); -const { - stopPayment, - pausePayment, - resumePayment, -} = require('./operate_payments'); - -const RECURRING_PATH = '/recurring'; - -class RecurringPayment { - constructor(options) { - let aggOpts = Object.assign({}, options); - if (Object.keys(RecurringPayment._injectedOpts || {}).length) { - aggOpts = Object.assign({}, options, RecurringPayment._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + `${RECURRING_PATH}_payments`; - } - - static _constructorWithInjectedXenditOpts(options) { - RecurringPayment._injectedOpts = options; - return RecurringPayment; - } -} - -Object.assign(RecurringPayment, { - _injectedOpts: {}, - Interval: { - Day: 'DAY', - Week: 'WEEK', - Month: 'MONTH', - }, - Action: { - Stop: 'STOP', - Ignore: 'IGNORE', - }, -}); - -Object.assign(RecurringPayment.prototype, { - createPayment, - getPayment, - editPayment, - stopPayment, - pausePayment, - resumePayment, -}); - -module.exports = RecurringPayment; diff --git a/src/refund/index.d.ts b/src/refund/index.d.ts deleted file mode 100644 index 99fbb45..0000000 --- a/src/refund/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import RefundService from './refund'; - -export { RefundService }; diff --git a/src/refund/index.js b/src/refund/index.js deleted file mode 100644 index abbc369..0000000 --- a/src/refund/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const RefundService = require('./refund'); - -module.exports = { RefundService }; diff --git a/src/refund/refund.d.ts b/src/refund/refund.d.ts deleted file mode 100644 index ad396d1..0000000 --- a/src/refund/refund.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -enum RefundReasons { - Fraudulent = 'FRAUDULENT', - Duplicate = 'DUPLICATE', - RequestedByCustomer = 'REQUESTED_BY_CUSTOMER', - Cancellation = 'CANCELLATION', - Others = 'OTHERS', -} - -export = class Refund { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof Refund; - - createRefund(data: { - payment_request_id?: string; - reference_id?: string; - invoice_id?: string; - currency?: string; - amount?: number; - reason: RefundReasons; - metadata?: object; - idempotency_key?: string; - for_user_id?: string; - }): Promise; - - listRefunds(data: { - payment_request_id?: string; - invoice_id?: string; - payment_method_type?: string; - channel_code?: string; - limit?: number; - after_id?: string; - before_id?: string; - for_user_id?: string; - }): Promise; - - getRefundById(data: { id: string }): Promise; -}; diff --git a/src/refund/refund.js b/src/refund/refund.js deleted file mode 100644 index 3d08f2e..0000000 --- a/src/refund/refund.js +++ /dev/null @@ -1,128 +0,0 @@ -const { - promWithJsErr, - Validate, - fetchWithHTTPErr, - Auth, - queryStringWithoutUndefined, -} = require('../utils'); - -const REFUND_PATH = '/refunds'; - -function Refund(options) { - let aggOpts = options; - if (Refund._injectedOpts && Object.keys(Refund._injectedOpts).length > 0) { - aggOpts = Object.assign({}, options, Refund._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + REFUND_PATH; -} - -Refund._injectedOpts = {}; -Refund._constructorWithInjectedXenditOpts = function(options) { - Refund._injectedOpts = options; - return Refund; -}; - -Refund.prototype.createRefund = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['reason', 'amount'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.for_user_id; - } - - if (data && data.idempotency_key) { - headers['idempotency-key'] = data.idempotency_key; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}`, { - method: 'POST', - headers, - body: JSON.stringify({ - payment_request_id: data.payment_request_id, - reference_id: data.reference_id, - invoice_id: data.invoice_id, - currency: data.currency, - amount: data.amount, - reason: data.reason, - metadata: data.metadata, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -Refund.prototype.getRefundById = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.forUserID; - } - - if (data && data.idempotency_key) { - headers['idempotency-key'] = data.idempotency_key; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}`, { - method: 'GET', - headers, - }) - .then(resolve) - .catch(reject); - }); -}; - -Refund.prototype.listRefunds = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields([], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.for_user_id) { - headers['for-user-id'] = data.for_user_id; - } - - const queryStr = data - ? queryStringWithoutUndefined({ - payment_request_id: data.payment_request_id - ? data.payment_request_id - : undefined, - invoice_id: data.invoice_id ? data.invoice_id : undefined, - payment_method_id: data.payment_method_id - ? data.payment_method_id - : undefined, - channel_code: data.channel_code ? data.channel_code : undefined, - limit: data.limit ? data.limit : undefined, - after_id: data.after_id ? data.after_id : undefined, - before_id: data.before_id ? data.before_id : undefined, - }) - : ''; - - const queryStrWithQuestionMark = queryStr ? `?${queryStr}` : ''; - - fetchWithHTTPErr(`${this.API_ENDPOINT}${queryStrWithQuestionMark}`, { - method: 'GET', - headers, - }) - .then(resolve) - .catch(reject); - }); -}; - -module.exports = Refund; diff --git a/src/regional_retail_outlet/index.d.ts b/src/regional_retail_outlet/index.d.ts deleted file mode 100644 index 3c47edf..0000000 --- a/src/regional_retail_outlet/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import RegionalRetailOutletService from './regional_retail_outlet'; - -export { RegionalRetailOutletService }; diff --git a/src/regional_retail_outlet/index.js b/src/regional_retail_outlet/index.js deleted file mode 100644 index c9ac636..0000000 --- a/src/regional_retail_outlet/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const RegionalRetailOutletService = require('./regional_retail_outlet'); - -module.exports = { RegionalRetailOutletService }; diff --git a/src/regional_retail_outlet/regional_retail_outlet.d.ts b/src/regional_retail_outlet/regional_retail_outlet.d.ts deleted file mode 100644 index 4b42dbf..0000000 --- a/src/regional_retail_outlet/regional_retail_outlet.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; - -export = class RegionalRetailOutlet { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof RetailOutlet; - createPaymentCode(data: { - reference_id: string; - channel_code: string; - amount: number; - currency: number; - customer_name: string; - market: string; - payment_code?: string; - expires_at?: Date; - is_single_use?: boolean; - desciption?: string; - metadata?: object[]; - }): Promise; - updateFixedPaymentCode(data: { - id: string; - name?: string; - expectedAmt?: number; - expirationDate?: Date; - }): Promise; - getFixedPaymentCode(data: { id: string }): Promise; -}; diff --git a/src/regional_retail_outlet/regional_retail_outlet.js b/src/regional_retail_outlet/regional_retail_outlet.js deleted file mode 100644 index d8ed4c7..0000000 --- a/src/regional_retail_outlet/regional_retail_outlet.js +++ /dev/null @@ -1,100 +0,0 @@ -const { promWithJsErr, Validate, fetchWithHTTPErr, Auth } = require('../utils'); - -const REGIONAL_RETAIL_OUTLET_PATH = '/payment_codes'; - -function RegionalRetailOutlet(options) { - let aggOpts = options; - if ( - RegionalRetailOutlet._injectedOpts && - Object.keys(RegionalRetailOutlet._injectedOpts).length > 0 - ) { - aggOpts = Object.assign({}, options, RegionalRetailOutlet._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + REGIONAL_RETAIL_OUTLET_PATH; -} - -RegionalRetailOutlet._injectedOpts = {}; -RegionalRetailOutlet._constructorWithInjectedXenditOpts = function(options) { - RegionalRetailOutlet._injectedOpts = options; - return RegionalRetailOutlet; -}; - -RegionalRetailOutlet.prototype.createPaymentCode = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields( - [ - 'referenceId', - 'channelCode', - 'amount', - 'currency', - 'customerName', - 'market', - ], - data, - reject, - ); - - fetchWithHTTPErr(`${this.API_ENDPOINT}`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - reference_id: data.referenceId, - channel_code: data.channelCode, - amount: data.amount, - currency: data.currency, - customer_name: data.customerName, - market: data.market, - payment_code: data.paymentCode, - description: data.description, - metadata: data.metadata, - expires_at: data.expiresAt ? data.expiresAt.toISOString() : undefined, - is_single_use: data.isSingleUse, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -RegionalRetailOutlet.prototype.updatePaymentCode = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}`, { - method: 'PATCH', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - amount: data.amount, - currency: data.amount, - customer_name: data.customerName, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -RegionalRetailOutlet.prototype.getPaymentCode = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}`, { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }) - .then(resolve) - .catch(reject); - }); -}; - -module.exports = RegionalRetailOutlet; diff --git a/src/report/index.d.ts b/src/report/index.d.ts deleted file mode 100644 index 509ed0b..0000000 --- a/src/report/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import ReportService from './report'; - -export { ReportService }; diff --git a/src/report/index.js b/src/report/index.js deleted file mode 100644 index 4256767..0000000 --- a/src/report/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const ReportService = require('./report'); - -module.exports = { ReportService }; diff --git a/src/report/report.d.ts b/src/report/report.d.ts deleted file mode 100644 index 207ca1f..0000000 --- a/src/report/report.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; - -enum reportTypes { - balanceHistory = 'BALANCE_HISTORY', - transactions = 'TRANSACTIONS', - upcomingTransactions = 'UPCOMING_TRANSACTIONS', -} - -enum currencyTypes { - IDR = 'IDR', - PHP = 'PHP', - VND = 'VND', - JPY = 'JPY', - USD = 'USD', - SGD = 'SGD', -} - -enum formatTypes { - csv = 'CSV', -} - -export = class Report { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof Report; - generateReport(data: { - type: reportTypes; - filterDateFrom?: Date; - filterDateTo?: Date; - format?: formatTypes; - currency?: currencyTypes; - }): Promise; - getReport(data: { id: string }): Promise; -}; diff --git a/src/report/report.js b/src/report/report.js deleted file mode 100644 index e60b9a7..0000000 --- a/src/report/report.js +++ /dev/null @@ -1,66 +0,0 @@ -const { promWithJsErr, Validate, fetchWithHTTPErr, Auth } = require('../utils'); - -const REPORT_PATH = '/reports'; - -function Report(options) { - let aggOpts = options; - if (Report._injectedOpts && Object.keys(Report._injectedOpts).length > 0) { - aggOpts = Object.assign({}, options, Report._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + REPORT_PATH; -} - -Report._injectedOpts = {}; -Report._constructorWithInjectedXenditOpts = function(options) { - Report._injectedOpts = options; - return Report; -}; - -Report.prototype.generateReport = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['type'], data, reject); - - const filterOpts = {}; - // eslint-disable-next-line - if (data.filterDateFrom) { - filterOpts.from = data.filterDateFrom.toISOString(); - } - if (data.filterDateTo) filterOpts.to = data.filterDateTo.toISOString(); - - fetchWithHTTPErr(`${this.API_ENDPOINT}`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - type: data.type, - filter: filterOpts, - format: data.format ? data.format : 'CSV', - currency: data.currency ? data.currency : 'IDR', - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -Report.prototype.getReport = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}`, { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - }) - .then(resolve) - .catch(reject); - }); -}; - -module.exports = Report; diff --git a/src/retail_outlet/index.d.ts b/src/retail_outlet/index.d.ts deleted file mode 100644 index 73f56df..0000000 --- a/src/retail_outlet/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import RetailOutletService from './retail_outlet'; - -export { RetailOutletService }; diff --git a/src/retail_outlet/index.js b/src/retail_outlet/index.js deleted file mode 100644 index 6d2b4fa..0000000 --- a/src/retail_outlet/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const RetailOutletService = require('./retail_outlet'); - -module.exports = { RetailOutletService }; diff --git a/src/retail_outlet/retail_outlet.d.ts b/src/retail_outlet/retail_outlet.d.ts deleted file mode 100644 index f221ac0..0000000 --- a/src/retail_outlet/retail_outlet.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; - -export = class RetailOutlet { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof RetailOutlet; - createFixedPaymentCode(data: { - externalID: string; - retailOutletName: string; - name: string; - expectedAmt: number; - paymentCode?: string; - expirationDate?: Date; - isSingleUse?: boolean; - }): Promise; - updateFixedPaymentCode(data: { - id: string; - name?: string; - expectedAmt?: number; - expirationDate?: Date; - }): Promise; - getFixedPaymentCode(data: { id: string }): Promise; - getPaymentsByFixedPaymentCodeId(data: { id: string }): Promise; - simulatePayment(data: { - retailOutletName: string; - paymentCode: string; - transferAmount: number; - }): Promise; -}; diff --git a/src/retail_outlet/retail_outlet.js b/src/retail_outlet/retail_outlet.js deleted file mode 100644 index b5d6a7e..0000000 --- a/src/retail_outlet/retail_outlet.js +++ /dev/null @@ -1,133 +0,0 @@ -const { promWithJsErr, Validate, fetchWithHTTPErr, Auth } = require('../utils'); - -const RETAIL_OUTLET_PATH = '/fixed_payment_code'; - -function RetailOutlet(options) { - let aggOpts = options; - if ( - RetailOutlet._injectedOpts && - Object.keys(RetailOutlet._injectedOpts).length > 0 - ) { - aggOpts = Object.assign({}, options, RetailOutlet._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + RETAIL_OUTLET_PATH; -} - -RetailOutlet._injectedOpts = {}; -RetailOutlet._constructorWithInjectedXenditOpts = function(options) { - RetailOutlet._injectedOpts = options; - return RetailOutlet; -}; - -RetailOutlet.prototype.createFixedPaymentCode = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields( - ['externalID', 'retailOutletName', 'name', 'expectedAmt'], - data, - reject, - ); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - external_id: data.externalID, - retail_outlet_name: data.retailOutletName, - name: data.name, - expected_amount: data.expectedAmt, - payment_code: data.paymentCode, - expiration_date: data.expirationDate - ? data.expirationDate.toISOString() - : undefined, - is_single_use: data.isSingleUse, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -RetailOutlet.prototype.updateFixedPaymentCode = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}`, { - method: 'PATCH', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - name: data.name, - expected_amount: data.expectedAmt, - expiration_date: data.expirationDate - ? data.expirationDate.toISOString() - : undefined, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -RetailOutlet.prototype.getFixedPaymentCode = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}`, { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }) - .then(resolve) - .catch(reject); - }); -}; - -RetailOutlet.prototype.getPaymentsByFixedPaymentCodeId = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}/payments`, { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }, - }) - .then(resolve) - .catch(reject); - }); -}; - -RetailOutlet.prototype.simulatePayment = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields( - ['retailOutletName', 'paymentCode', 'transferAmount'], - data, - reject, - ); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/simulate_payment`, { - method: 'POST', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - retail_outlet_name: data.retailOutletName, - payment_code: data.paymentCode, - transfer_amount: data.transferAmount, - }), - }) - .then(resolve) - .catch(reject); - }); -}; - -module.exports = RetailOutlet; diff --git a/src/transaction/index.d.ts b/src/transaction/index.d.ts deleted file mode 100644 index d71d7c9..0000000 --- a/src/transaction/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import TransactionService from './transaction'; - -export { TransactionService }; diff --git a/src/transaction/index.js b/src/transaction/index.js deleted file mode 100644 index e03a207..0000000 --- a/src/transaction/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const TransactionService = require('./transaction'); - -module.exports = { TransactionService }; diff --git a/src/transaction/query.js b/src/transaction/query.js deleted file mode 100644 index e364f42..0000000 --- a/src/transaction/query.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = { - types: 'types', - statuses: 'statuses', - channelCategories: 'channel_categories', - createdDateFrom: 'created[gte]', - createdDateTo: 'created[lte]', - referenceId: 'reference_id', - productId: 'product_id', - accountIdentifier: 'account_identifier', - currency: 'currency', - amount: 'amount', - updatedDateFrom: 'updated[gte]', - updatedDateTo: 'updated[lte]', - limit: 'limit', - afterId: 'after_id', - beforeId: 'before_id', - searchType: 'search_type', - searchValue: 'search_value', -}; diff --git a/src/transaction/transaction.d.ts b/src/transaction/transaction.d.ts deleted file mode 100644 index ee75ab0..0000000 --- a/src/transaction/transaction.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { XenditOptions } from '../xendit_opts'; - -export = class Transaction { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof Transaction; - getTransaction(data: { id: string }): Promise; - listTransactions(data: { - types?: Array; - statuses?: Array; - channelCategories?: Array; - referenceId?: string; - productId?: string; - accountIdentifier?: string; - currency?: string; - amount?: number; - limit?: number; - afterId?: string; - beforeId?: string; - createdDateFrom?: Date; - createdDateTo?: Date; - updatedDateFrom?: Date; - updatedDateTo?: Date; - }): Promise; -}; diff --git a/src/transaction/transaction.js b/src/transaction/transaction.js deleted file mode 100644 index d23773d..0000000 --- a/src/transaction/transaction.js +++ /dev/null @@ -1,74 +0,0 @@ -const { promWithJsErr, Validate, fetchWithHTTPErr, Auth } = require('../utils'); - -const queryTypes = require('./query'); - -const TRANSACTION_PATH = '/transactions'; - -function Transaction(options) { - let aggOpts = options; - if ( - Transaction._injectedOpts && - Object.keys(Transaction._injectedOpts).length > 0 - ) { - aggOpts = Object.assign({}, options, Transaction._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + TRANSACTION_PATH; -} - -Transaction._injectedOpts = {}; -Transaction._constructorWithInjectedXenditOpts = function(options) { - Transaction._injectedOpts = options; - return Transaction; -}; - -Transaction.prototype.getTransaction = function(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - fetchWithHTTPErr(`${this.API_ENDPOINT}/${data.id}`, { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - }) - .then(resolve) - .catch(reject); - }); -}; - -Transaction.prototype.listTransactions = function(data) { - return promWithJsErr((resolve, reject) => { - let QUERY_STRING = '?'; - // Generate the Query String by iterating over the data array - // If the data is an array we have to loop over the values with the same key - // If the data is a date we convert to an ISO string format for dates - // Else we simply add the key-value pair - for (let field of Object.keys(data)) { - if (Array.isArray(data[field])) { - for (let v of data[field]) { - QUERY_STRING += `${queryTypes[field]}=${v}&`; - } - } else if (data[field] instanceof Date) { - QUERY_STRING += `${queryTypes[field]}=${data[field].toISOString()}&`; - } else { - QUERY_STRING += `${queryTypes[field]}=${data[field]}&`; - } - } - QUERY_STRING = QUERY_STRING.slice(0, -1); - - fetchWithHTTPErr(`${this.API_ENDPOINT}${QUERY_STRING}`, { - method: 'GET', - headers: { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }, - }) - .then(resolve) - .catch(reject); - }); -}; - -module.exports = Transaction; diff --git a/src/utils/auth.d.ts b/src/utils/auth.d.ts deleted file mode 100644 index 90818d6..0000000 --- a/src/utils/auth.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export function basicAuthHeader(key: string): string; -export function basicHeaderWithIdempotencyKey( - secretKey, - xIdempotencyKey, -): { - Authorization: string; - 'Content-Type': string; - 'X-IDEMPOTENCY-KEY'?: string; -}; diff --git a/src/utils/auth.js b/src/utils/auth.js deleted file mode 100644 index 1fab574..0000000 --- a/src/utils/auth.js +++ /dev/null @@ -1,18 +0,0 @@ -const Auth = { - basicAuthHeader(key) { - return `Basic ${Buffer.from(`${key}:`).toString('base64')}`; - }, - basicHeaderWithIdempotencyKey(secretKey, xIdempotencyKey) { - const headers = { - Authorization: Auth.basicAuthHeader(secretKey), - 'Content-Type': 'application/json', - }; - if (xIdempotencyKey) { - headers['X-IDEMPOTENCY-KEY'] = xIdempotencyKey; - } - - return headers; - }, -}; - -module.exports = Auth; diff --git a/src/utils/fetch_with_http_err.d.ts b/src/utils/fetch_with_http_err.d.ts deleted file mode 100644 index 9f8c831..0000000 --- a/src/utils/fetch_with_http_err.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { RequestInit } from 'node-fetch'; - -function f(endpointURL: string, opts: RequestInit): Promise; - -export = f; diff --git a/src/utils/fetch_with_http_err.js b/src/utils/fetch_with_http_err.js deleted file mode 100644 index ada9265..0000000 --- a/src/utils/fetch_with_http_err.js +++ /dev/null @@ -1,40 +0,0 @@ -const fetch = require('node-fetch'); - -module.exports = function(endpointURL, opts) { - return new Promise((resolve, reject) => { - try { - opts.headers = injectTrackingHeaders(opts.headers); - fetch(endpointURL, opts) - .then(res => { - if (res.status < 200 || res.status > 299) { - res.text().then(txt => { - try { - const { error_code, message } = JSON.parse(txt); - reject({ status: res.status, code: error_code, message }); - } catch (e) { - reject({ status: res.status, message: txt }); - } - }); - - return; - } - - res.json().then(resolve); - }) - .catch(reject); - } catch (e) { - reject(e); - } - }); -}; - -const clientVersion = require('../../package.json').version; -function injectTrackingHeaders(headers) { - // Making this function pure - not affecting the original headers object - // This assignment also handles undefined/null values of headers arg - const injectedHeaders = Object.assign({}, headers); - injectedHeaders['xendit-lib'] = 'node'; - injectedHeaders['xendit-lib-ver'] = clientVersion; - - return injectedHeaders; -} diff --git a/src/utils/index.js b/src/utils/index.js deleted file mode 100644 index dd94f64..0000000 --- a/src/utils/index.js +++ /dev/null @@ -1,13 +0,0 @@ -const Auth = require('./auth'); -const Validate = require('./validate'); -const fetchWithHTTPErr = require('./fetch_with_http_err'); -const promWithJsErr = require('./prom_with_js_err'); -const queryStringWithoutUndefined = require('./query_string_with_no_undefined'); - -module.exports = { - Auth, - Validate, - fetchWithHTTPErr, - promWithJsErr, - queryStringWithoutUndefined, -}; diff --git a/src/utils/prom_with_js_err.d.ts b/src/utils/prom_with_js_err.d.ts deleted file mode 100644 index 4b529f9..0000000 --- a/src/utils/prom_with_js_err.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -function f(fn: (resolve: function, reject: function) => any): Promise; - -export = f; diff --git a/src/utils/prom_with_js_err.js b/src/utils/prom_with_js_err.js deleted file mode 100644 index abce871..0000000 --- a/src/utils/prom_with_js_err.js +++ /dev/null @@ -1,11 +0,0 @@ -const errors = require('../errors'); - -module.exports = function(fn) { - return new Promise((resolve, reject) => { - try { - fn(resolve, reject); - } catch (e) { - reject({ status: 418, code: errors.JS_ERROR, message: e.message }); - } - }); -}; diff --git a/src/utils/query_string_with_no_undefined.d.ts b/src/utils/query_string_with_no_undefined.d.ts deleted file mode 100644 index be559d0..0000000 --- a/src/utils/query_string_with_no_undefined.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -function f(args: object): string; - -export = f; diff --git a/src/utils/query_string_with_no_undefined.js b/src/utils/query_string_with_no_undefined.js deleted file mode 100644 index 1a5cb69..0000000 --- a/src/utils/query_string_with_no_undefined.js +++ /dev/null @@ -1,12 +0,0 @@ -const querystring = require('querystring'); - -module.exports = function(data) { - const dataWithoutFieldsOfUndefinedValue = {}; - Object.keys(data).forEach(k => { - if (data[k] !== undefined) { - dataWithoutFieldsOfUndefinedValue[k] = data[k]; - } - }); - - return querystring.stringify(dataWithoutFieldsOfUndefinedValue); -}; diff --git a/src/utils/validate.d.ts b/src/utils/validate.d.ts deleted file mode 100644 index a220fa8..0000000 --- a/src/utils/validate.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -export function requiredFields( - fieldsArr: Array, -): { - validate: (data: object) => Array; -}; - -export function missingFieldsToStr(missingFields: Array): string; - -export function missingFieldsErrMsg(missingFields: Array): string; - -export function rejectOnMissingFields( - compulsoryFields: Array, - data: object, - rejectFn: function, -): void; diff --git a/src/utils/validate.js b/src/utils/validate.js deleted file mode 100644 index bb3e391..0000000 --- a/src/utils/validate.js +++ /dev/null @@ -1,43 +0,0 @@ -const errors = require('../errors'); - -const Validate = { - requiredFields(fieldsArr) { - this.validate = function(data) { - const missing = []; - fieldsArr.forEach(function(f) { - if (!data || !data.hasOwnProperty(f)) { - missing.push(f); - } - }); - return missing; - }; - - return this; - }, - - missingFieldsToStr(missingFields) { - let rtv = ''; - missingFields.forEach((f, i) => - i < missingFields.length - 1 ? (rtv += `'${f}', `) : (rtv += `'${f}'`), - ); - return rtv; - }, - - missingFieldsErrMsg(missingFields) { - let message = 'Missing required fields: '; - message += Validate.missingFieldsToStr(missingFields); - return message; - }, - - rejectOnMissingFields(compulsoryFields, data, rejectFn) { - const missingFields = Validate.requiredFields(compulsoryFields).validate( - data, - ); - if (missingFields.length > 0) { - let message = Validate.missingFieldsErrMsg(missingFields); - rejectFn({ status: 400, code: errors.API_VALIDATION_ERROR, message }); - } - }, -}; - -module.exports = Validate; diff --git a/src/va/account.d.ts b/src/va/account.d.ts deleted file mode 100644 index c3ea89e..0000000 --- a/src/va/account.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -export function createFixedVA(data: { - externalID: string; - bankCode: string; - name: string; - virtualAccNumber?: string; - suggestedAmt?: number; - isClosed?: boolean; - expectedAmt?: number; - expirationDate?: Date; - isSingleUse?: boolean; - description?: string; - currency?: string; - country?: string; - alternativeDisplayTypes?: string[]; - forUserID?: string; -}): Promise; - -export function getFixedVA(data: { - id: string; - forUserID?: string; -}): Promise; - -export function updateFixedVA(data: { - id: string; - suggestedAmt?: number; - expectedAmt?: number; - expirationDate?: Date; - isSingleUse?: boolean; - description?: string; - forUserID?: string; -}): Promise; diff --git a/src/va/account.js b/src/va/account.js deleted file mode 100644 index 9e78e42..0000000 --- a/src/va/account.js +++ /dev/null @@ -1,105 +0,0 @@ -const { promWithJsErr, Validate, fetchWithHTTPErr, Auth } = require('../utils'); - -function createFixedVA(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['externalID', 'bankCode', 'name']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/callback_virtual_accounts`, { - method: 'POST', - headers, - body: JSON.stringify({ - external_id: data.externalID, - bank_code: data.bankCode, - name: data.name, - virtual_account_number: data.virtualAccNumber, - suggested_amount: data.suggestedAmt, - is_closed: data.isClosed, - expected_amount: data.expectedAmt, - expiration_date: data.expirationDate - ? data.expirationDate.toISOString() - : undefined, - is_single_use: data.isSingleUse, - description: data.description, - currency: data.currency, - country: data.country, - alternative_display_types: data.alternativeDisplayTypes, - }), - }) - .then(resolve) - .catch(reject); - }); -} - -function getFixedVA(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }; - - if (data && data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/callback_virtual_accounts/${data.id}`, - { - method: 'GET', - headers, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -function updateFixedVA(data) { - return promWithJsErr((resolve, reject) => { - Validate.rejectOnMissingFields(['id'], data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - 'Content-Type': 'application/json', - }; - - if (data && data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr( - `${this.API_ENDPOINT}/callback_virtual_accounts/${data.id}`, - { - method: 'PATCH', - headers, - body: JSON.stringify({ - suggested_amount: data.suggestedAmt, - expected_amount: data.expectedAmt, - expiration_date: data.expirationDate - ? data.expirationDate.toISOString() - : undefined, - is_single_use: data.isSingleUse, - description: data.description, - }), - }, - ) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { - createFixedVA, - getFixedVA, - updateFixedVA, -}; diff --git a/src/va/bank.d.ts b/src/va/bank.d.ts deleted file mode 100644 index b614550..0000000 --- a/src/va/bank.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function getVABanks(data?: { forUserID?: string }): Promise; diff --git a/src/va/bank.js b/src/va/bank.js deleted file mode 100644 index b33ba1e..0000000 --- a/src/va/bank.js +++ /dev/null @@ -1,22 +0,0 @@ -const { Auth, fetchWithHTTPErr, promWithJsErr } = require('../utils'); - -function getVABanks(data = {}) { - return promWithJsErr((resolve, reject) => { - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }; - - if (data && data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr(`${this.API_ENDPOINT}/available_virtual_account_banks`, { - method: 'GET', - headers, - }) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { getVABanks }; diff --git a/src/va/index.d.ts b/src/va/index.d.ts deleted file mode 100644 index 0cb6f9d..0000000 --- a/src/va/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import VAService from './va'; - -export { VAService }; diff --git a/src/va/index.js b/src/va/index.js deleted file mode 100644 index 44b84e7..0000000 --- a/src/va/index.js +++ /dev/null @@ -1,5 +0,0 @@ -const VAService = require('./va'); - -module.exports = { - VAService, -}; diff --git a/src/va/payment.d.ts b/src/va/payment.d.ts deleted file mode 100644 index 3f4f595..0000000 --- a/src/va/payment.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export function getVAPayment(data: { - paymentID: string; - forUserID?: string; -}): Promise; diff --git a/src/va/payment.js b/src/va/payment.js deleted file mode 100644 index 0d7b932..0000000 --- a/src/va/payment.js +++ /dev/null @@ -1,31 +0,0 @@ -const { promWithJsErr, Validate, Auth, fetchWithHTTPErr } = require('../utils'); - -function getVAPayment(data) { - return promWithJsErr((resolve, reject) => { - const compulsoryFields = ['paymentID']; - Validate.rejectOnMissingFields(compulsoryFields, data, reject); - - let headers = { - Authorization: Auth.basicAuthHeader(this.opts.secretKey), - }; - - if (data && data.forUserID) { - headers['for-user-id'] = data.forUserID; - } - - fetchWithHTTPErr( - // eslint-disable-next-line max-len - `${this.API_ENDPOINT}/callback_virtual_account_payments/payment_id=${data.paymentID}`, - { - method: 'GET', - headers, - }, - ) - .then(resolve) - .catch(reject); - }); -} - -module.exports = { - getVAPayment, -}; diff --git a/src/va/va.d.ts b/src/va/va.d.ts deleted file mode 100644 index b7ba19f..0000000 --- a/src/va/va.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { getVABanks } from './bank'; -import { createFixedVA, getFixedVA, updateFixedVA } from './account'; -import { getVAPayment } from './payment'; -import { XenditOptions } from '../xendit_opts'; - -export = class VirtualAcc { - constructor({}); - static _constructorWithInjectedXenditOpts: ( - opts: XenditOptions, - ) => typeof VirtualAcc; - getVABanks = getVABanks; - createFixedVA = createFixedVA; - getFixedVA = getFixedVA; - updateFixedVA = updateFixedVA; - getVAPayment = getVAPayment; -}; diff --git a/src/va/va.js b/src/va/va.js deleted file mode 100644 index bb3b8dc..0000000 --- a/src/va/va.js +++ /dev/null @@ -1,32 +0,0 @@ -const { getVABanks } = require('./bank'); -const { createFixedVA, getFixedVA, updateFixedVA } = require('./account'); -const { getVAPayment } = require('./payment'); - -const VA_PATH = ''; - -function VirtualAcc(options) { - let aggOpts = options; - if ( - VirtualAcc._injectedOpts && - Object.keys(VirtualAcc._injectedOpts).length > 0 - ) { - aggOpts = Object.assign({}, options, VirtualAcc._injectedOpts); - } - - this.opts = aggOpts; - this.API_ENDPOINT = this.opts.xenditURL + VA_PATH; -} - -VirtualAcc._injectedOpts = {}; -VirtualAcc._constructorWithInjectedXenditOpts = function(options) { - VirtualAcc._injectedOpts = options; - return VirtualAcc; -}; - -VirtualAcc.prototype.getVABanks = getVABanks; -VirtualAcc.prototype.createFixedVA = createFixedVA; -VirtualAcc.prototype.getFixedVA = getFixedVA; -VirtualAcc.prototype.updateFixedVA = updateFixedVA; -VirtualAcc.prototype.getVAPayment = getVAPayment; - -module.exports = VirtualAcc; diff --git a/src/xendit.d.ts b/src/xendit.d.ts deleted file mode 100644 index 5120f21..0000000 --- a/src/xendit.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -import Errors from './errors'; -import { CardService } from './card'; -import { VAService } from './va'; -import { DisbursementService } from './disbursement'; -import { InvoiceService } from './invoice'; -import { PayoutService } from './payout'; -import { RecurringPayment } from './recurring_payment'; -import { Recurring } from './recurring'; -import { XenditOptions } from './xendit_opts'; -import { EWalletService } from './ewallet'; -import { BalanceServices } from './balance'; -import { RetailOutletService } from './retail_outlet'; -import { QrCode } from './qr_code'; -import { PlatformService } from './platform'; -import { CustomerService } from './customer'; -import { DirectDebitService } from './direct_debit'; -import { ReportService } from './report'; -import { TransactionService } from './transaction'; -import { PaymentRequestService } from './payment_request'; -import { PaymentMethodV2Service } from './payment_method_v2'; -import { RefundService } from './refund'; - -declare class Xendit { - constructor(opts: XenditOptions); - static Errors: typeof Errors; - Card: typeof CardService; - VirtualAcc: typeof VAService; - Disbursement: typeof DisbursementService; - Invoice: typeof InvoiceService; - Payout: typeof PayoutService; - RecurringPayment: typeof RecurringPayment; - Recurring: typeof Recurring; - RecurringPlan: typeof RecurringPlan; - EWallet: typeof EWalletService; - Balance: typeof BalanceServices; - RetailOutlet: typeof RetailOutletService; - QrCode: typeof QrCode; - Platform: typeof PlatformService; - Customer: typeof CustomerService; - DirectDebit: typeof DirectDebitService; - Report: typeof ReportService; - Transaction: typeof TransactionService; - PaymentRequest: typeof PaymentRequestService; - PaymentMethodV2: typeof PaymentMethodV2Service; - Refund: typeof RefundService; -} -export = Xendit; diff --git a/src/xendit.js b/src/xendit.js deleted file mode 100644 index 6b863a0..0000000 --- a/src/xendit.js +++ /dev/null @@ -1,74 +0,0 @@ -const { CardService } = require('./card'); -const { VAService } = require('./va'); -const { DisbursementService } = require('./disbursement'); -const { InvoiceService } = require('./invoice'); -const { PayoutService } = require('./payout'); -const { Recurring } = require('./recurring'); -const { RecurringPayment } = require('./recurring_payment'); -const { EWalletService } = require('./ewallet'); -const { BalanceServices } = require('./balance'); -const { RetailOutletService } = require('./retail_outlet'); -const { QrCode } = require('./qr_code'); -const { PlatformService } = require('./platform'); -const { CustomerService } = require('./customer'); -const { DirectDebitService } = require('./direct_debit'); -const { RegionalRetailOutletService } = require('./regional_retail_outlet'); -const { ReportService } = require('./report'); -const { TransactionService } = require('./transaction'); -const { PaymentRequestService } = require('./payment_request'); -const { PaymentMethodV2Service } = require('./payment_method_v2'); -const { RefundService } = require('./refund'); -const Errors = require('./errors'); - -function Xendit(options) { - let { - secretKey, // customer's secret API key - xenditURL, // should there be a need to override API base URL - } = options; - - // default values of opts - xenditURL = xenditURL || 'https://api.xendit.co'; - - this.opts = { secretKey, xenditURL }; - this.Card = CardService._constructorWithInjectedXenditOpts(this.opts); - this.VirtualAcc = VAService._constructorWithInjectedXenditOpts(this.opts); - this.Disbursement = DisbursementService._constructorWithInjectedXenditOpts( - this.opts, - ); - this.Invoice = InvoiceService._constructorWithInjectedXenditOpts(this.opts); - this.Payout = PayoutService._constructorWithInjectedXenditOpts(this.opts); - this.Recurring = Recurring._constructorWithInjectedXenditOpts(this.opts); - this.RecurringPayment = RecurringPayment._constructorWithInjectedXenditOpts( - this.opts, - ); - this.EWallet = EWalletService._constructorWithInjectedXenditOpts(this.opts); - this.Balance = BalanceServices._constructorWithInjectedXenditOpts(this.opts); - this.RetailOutlet = RetailOutletService._constructorWithInjectedXenditOpts( - this.opts, - ); - this.PaymentRequest = PaymentRequestService._constructorWithInjectedXenditOpts( - this.opts, - ); - this.PaymentMethodV2 = PaymentMethodV2Service._constructorWithInjectedXenditOpts( - this.opts, - ); - // eslint-disable-next-line - this.RegionalRetailOutlet = RegionalRetailOutletService._constructorWithInjectedXenditOpts( - this.opts, - ); - this.QrCode = QrCode._constructorWithInjectedXenditOpts(this.opts); - this.Platform = PlatformService._constructorWithInjectedXenditOpts(this.opts); - this.Customer = CustomerService._constructorWithInjectedXenditOpts(this.opts); - this.DirectDebit = DirectDebitService._constructorWithInjectedXenditOpts( - this.opts, - ); - this.Report = ReportService._constructorWithInjectedXenditOpts(this.opts); - this.Transaction = TransactionService._constructorWithInjectedXenditOpts( - this.opts, - ); - this.Refund = RefundService._constructorWithInjectedXenditOpts(this.opts); -} - -Xendit.Errors = Errors; - -module.exports = Xendit; diff --git a/src/xendit_opts.d.ts b/src/xendit_opts.d.ts deleted file mode 100644 index 2d8f6c3..0000000 --- a/src/xendit_opts.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface XenditOptions { - secretKey: string; - xenditURL?: string; -} diff --git a/test/balance/balance.test.js b/test/balance/balance.test.js deleted file mode 100644 index 415728e..0000000 --- a/test/balance/balance.test.js +++ /dev/null @@ -1,33 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const Xendit = require('../../src/xendit'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -chai.use(chaiAsProm); - -const { Balance } = x; -let b = new Balance({}); -beforeEach(function() { - b = new Balance({}); -}); -before(function() { - nock(x.opts.xenditURL) - .get('/balance?account_type=HOLDING') - .reply(200, TestConstants.BALANCE_RESPONSE); -}); - -describe('Balance Service', function() { - describe('getBalance', () => { - it("should get user's balance", done => { - expect(b.getBalance({ accountType: Balance.AccountType.Holding })) - .to.eventually.deep.equal(TestConstants.BALANCE_RESPONSE) - .and.notify(done); - }); - }); -}); diff --git a/test/balance/constants.js b/test/balance/constants.js deleted file mode 100644 index c685994..0000000 --- a/test/balance/constants.js +++ /dev/null @@ -1,5 +0,0 @@ -const BALANCE_RESPONSE = { - balance: '1000000', -}; - -module.exports = { BALANCE_RESPONSE }; diff --git a/test/card/authorization.test.js b/test/card/authorization.test.js deleted file mode 100644 index 499ef4a..0000000 --- a/test/card/authorization.test.js +++ /dev/null @@ -1,82 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { Card } = x; - beforeEach(function() { - card = new Card({}); - }); - before(function() { - nock(x.opts.xenditURL) - .post('/credit_card_charges', { - token_id: TestConstants.VALID_TOKEN_ID, - external_id: TestConstants.EXT_ID, - amount: TestConstants.AMOUNT, - capture: false, - }) - .reply(200, TestConstants.VALID_CRE_AUTH_RESPONSE); - nock(x.opts.xenditURL) - .post( - `/credit_card_charges/${TestConstants.VALID_CHARGE_ID}/auth_reversal`, - { - external_id: TestConstants.EXT_ID, - }, - ) - .reply(200, { external_id: TestConstants.EXT_ID }); - }); - - describe('createAuthorization', () => { - it('should create authorization', done => { - expect( - card.createAuthorization({ - tokenID: TestConstants.VALID_TOKEN_ID, - externalID: TestConstants.EXT_ID, - amount: TestConstants.AMOUNT, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_CRE_AUTH_RESPONSE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(card.createAuthorization({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('reverseAuthorization', () => { - it('should reverse authorization', done => { - expect( - card.reverseAuthorization({ - chargeID: TestConstants.VALID_CHARGE_ID, - externalID: TestConstants.EXT_ID, - }), - ) - .to.eventually.deep.equal({ external_id: TestConstants.EXT_ID }) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(card.reverseAuthorization({})) - .to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/card/card.test.js b/test/card/card.test.js deleted file mode 100644 index cec4d23..0000000 --- a/test/card/card.test.js +++ /dev/null @@ -1,18 +0,0 @@ -process.env.NODE_ENV = 'test'; - -const Xendit = require('../../src/xendit'); -const chargeTest = require('./charge.test'); -const authorizationTest = require('./authorization.test'); -const refundTest = require('./refund.test'); -const promotionTest = require('./promotion.test'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -describe('Card Service', function() { - chargeTest(x); - authorizationTest(x); - refundTest(x); - promotionTest(x); -}); diff --git a/test/card/charge.test.js b/test/card/charge.test.js deleted file mode 100644 index eb3556a..0000000 --- a/test/card/charge.test.js +++ /dev/null @@ -1,108 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { Card } = x; - let card; - beforeEach(function() { - card = new Card({}); - }); - before(function() { - nock(x.opts.xenditURL) - .post('/credit_card_charges', { - token_id: TestConstants.VALID_TOKEN_ID, - external_id: TestConstants.EXT_ID, - amount: TestConstants.AMOUNT, - capture: true, - }) - .reply(200, TestConstants.VALID_CRE_CHARGE_RESPONSE); - - nock(x.opts.xenditURL) - .post(`/credit_card_charges/${TestConstants.VALID_CHARGE_ID}/capture`, { - amount: TestConstants.AMOUNT, - }) - .reply(200, TestConstants.VALID_CAP_CHARGE_RESPONSE); - nock(x.opts.xenditURL) - .get(`/credit_card_charges/${TestConstants.VALID_CHARGE_ID}`) - .reply(200, { id: TestConstants.VALID_CHARGE_ID }); - }); - - describe('createCharge', () => { - it('should create and capture charge', done => { - expect( - card.createCharge({ - tokenID: TestConstants.VALID_TOKEN_ID, - externalID: TestConstants.EXT_ID, - amount: TestConstants.AMOUNT, - capture: true, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_CRE_CHARGE_RESPONSE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(card.createCharge({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('captureCharge', () => { - it('should capture charge', done => { - expect( - card.captureCharge({ - chargeID: TestConstants.VALID_CHARGE_ID, - amount: TestConstants.AMOUNT, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_CAP_CHARGE_RESPONSE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(card.captureCharge({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getCharge', () => { - it('should get charge', done => { - expect( - card.getCharge({ - chargeID: TestConstants.VALID_CHARGE_ID, - }), - ) - .to.eventually.deep.equal({ id: TestConstants.VALID_CHARGE_ID }) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(card.getCharge({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/card/constants.js b/test/card/constants.js deleted file mode 100644 index 9350b89..0000000 --- a/test/card/constants.js +++ /dev/null @@ -1,103 +0,0 @@ -const CardStatus = require('../../src/card/card_status'); - -const VALID_CARD_NUM = '4000000000000002'; -const VALID_EXP_MNTH = '12'; -const VALID_EXP_YR = '2020'; -const VALID_CVN = '123'; -const VALID_TOKEN_ID = '5d8c611f6f86303720b1f16f'; -const VALID_TOKEN_RESPONSE = { - id: VALID_TOKEN_ID, - masked_card_number: '400000XXXXXX0002', - status: CardStatus.VERIFIED, -}; -const VALID_CHARGE_ID = '5d8d7fc86f86303720b1f30b'; -const AMOUNT = 10000; -const EXT_ID = '123'; -const VALID_CRE_CHARGE_RESPONSE = { - id: VALID_CHARGE_ID, - authorized_amount: AMOUNT, - capture_amount: AMOUNT, - external_id: EXT_ID, -}; -const VALID_CAP_CHARGE_RESPONSE = { - id: VALID_CHARGE_ID, - capture_amount: AMOUNT, -}; -const VALID_AUTH_ID = '5d8d7fa86f86303720b1f309'; -const VALID_CRE_AUTH_RESPONSE = { - id: VALID_CHARGE_ID, - authorized_amount: AMOUNT, - external_id: EXT_ID, -}; -const VALID_REFUND_ID = '5d8d9479a4271a6c9bc5b2ec'; -const VALID_REFUND_RESPONSE = { - id: VALID_REFUND_ID, - external_id: EXT_ID, - credit_card_charge_id: VALID_CHARGE_ID, - amount: AMOUNT, -}; - -const VALID_PROMOTION_ID = '36ab1517-208a-4f22-b155-96fb101cb378'; -const VALID_PROMOTION_REF_ID = 'BRI_20_JAN'; -const VALID_PROMOTION_PROMO_CODE = 'TEST'; -const VALID_PROMOTION_BUSINESS_ID = '5e61664b3dba955c203d232e'; -const VALID_PROMOTION_DESCRIPTION = '20% discount applied for all BRI cards'; -const VALID_PROMOTION_START_TIME = '2022-01-01 00:00:00.000Z'; -const VALID_PROMOTION_END_TIME = '2022-02-01 00:00:00.000Z'; -const VALID_PROMOTION_STATUS = 'ACTIVE'; -const VALID_PROMOTION_BIN_LIST = ['400000', '460000']; -const VALID_PROMOTION_DISCOUNT_PERCENTAGE = 20; -const VALID_PROMOTION_DISCOUNT_AMOUNT = 200; -const VALID_PROMOTION_CHANNEL_CODE = 'BRI'; -const VALID_PROMOTION_CURRENCY = 'IDR'; -const VALID_PROMOTION_MIN_AMOUNT = 1200; -const VALID_PROMOTION_MAX_AMOUNT = 5000; -const VALID_PROMOTION_RESPONSE = { - id: VALID_PROMOTION_ID, - business_id: VALID_PROMOTION_BUSINESS_ID, - reference_id: VALID_PROMOTION_REF_ID, - description: VALID_PROMOTION_DESCRIPTION, - start_time: VALID_PROMOTION_START_TIME, - end_time: VALID_PROMOTION_END_TIME, - status: VALID_PROMOTION_STATUS, - bin_list: VALID_PROMOTION_BIN_LIST, - discount_percent: VALID_PROMOTION_DISCOUNT_PERCENTAGE, - channel_code: VALID_PROMOTION_CHANNEL_CODE, - currency: VALID_PROMOTION_CURRENCY, - min_original_amount: VALID_PROMOTION_MIN_AMOUNT, - max_discount_amount: VALID_PROMOTION_MAX_AMOUNT, -}; - -module.exports = { - VALID_CARD_NUM, - VALID_EXP_MNTH, - VALID_EXP_YR, - VALID_CVN, - VALID_TOKEN_ID, - VALID_TOKEN_RESPONSE, - VALID_CHARGE_ID, - AMOUNT, - EXT_ID, - VALID_CRE_CHARGE_RESPONSE, - VALID_CAP_CHARGE_RESPONSE, - VALID_AUTH_ID, - VALID_CRE_AUTH_RESPONSE, - VALID_REFUND_RESPONSE, - VALID_REFUND_ID, - VALID_PROMOTION_RESPONSE, - VALID_PROMOTION_ID, - VALID_PROMOTION_REF_ID, - VALID_PROMOTION_PROMO_CODE, - VALID_PROMOTION_BUSINESS_ID, - VALID_PROMOTION_DESCRIPTION, - VALID_PROMOTION_START_TIME, - VALID_PROMOTION_END_TIME, - VALID_PROMOTION_STATUS, - VALID_PROMOTION_BIN_LIST, - VALID_PROMOTION_DISCOUNT_PERCENTAGE, - VALID_PROMOTION_DISCOUNT_AMOUNT, - VALID_PROMOTION_CHANNEL_CODE, - VALID_PROMOTION_CURRENCY, - VALID_PROMOTION_MIN_AMOUNT, - VALID_PROMOTION_MAX_AMOUNT, -}; diff --git a/test/card/promotion.test.js b/test/card/promotion.test.js deleted file mode 100644 index 066eec0..0000000 --- a/test/card/promotion.test.js +++ /dev/null @@ -1,78 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { Card } = x; - let card; - beforeEach(function() { - card = new Card({}); - }); - before(function() { - nock(x.opts.xenditURL) - .post('/promotions', { - reference_id: TestConstants.VALID_PROMOTION_REF_ID, - description: TestConstants.VALID_PROMOTION_DESCRIPTION, - promo_code: TestConstants.VALID_PROMOTION_PROMO_CODE, - bin_list: TestConstants.VALID_PROMOTION_BIN_LIST, - channel_code: TestConstants.VALID_PROMOTION_CHANNEL_CODE, - discount_percent: TestConstants.VALID_PROMOTION_DISCOUNT_PERCENTAGE, - discount_amount: TestConstants.VALID_PROMOTION_DISCOUNT_AMOUNT, - currency: TestConstants.VALID_PROMOTION_CURRENCY, - start_time: TestConstants.VALID_PROMOTION_START_TIME, - end_time: TestConstants.VALID_PROMOTION_END_TIME, - min_original_amount: TestConstants.VALID_PROMOTION_MIN_AMOUNT, - max_discount_amount: TestConstants.VALID_PROMOTION_MAX_AMOUNT, - }) - .reply(200, TestConstants.VALID_PROMOTION_RESPONSE); - }); - - describe('createPromotion', () => { - it('should create promotion', done => { - expect( - card.createPromotion({ - referenceId: TestConstants.VALID_PROMOTION_REF_ID, - description: TestConstants.VALID_PROMOTION_DESCRIPTION, - promoCode: TestConstants.VALID_PROMOTION_PROMO_CODE, - binList: TestConstants.VALID_PROMOTION_BIN_LIST, - channelCode: TestConstants.VALID_PROMOTION_CHANNEL_CODE, - discountPercent: TestConstants.VALID_PROMOTION_DISCOUNT_PERCENTAGE, - discountAmount: TestConstants.VALID_PROMOTION_DISCOUNT_AMOUNT, - currency: TestConstants.VALID_PROMOTION_CURRENCY, - startTime: TestConstants.VALID_PROMOTION_START_TIME, - endTime: TestConstants.VALID_PROMOTION_END_TIME, - minOriginalAmount: TestConstants.VALID_PROMOTION_MIN_AMOUNT, - maxDiscountAmount: TestConstants.VALID_PROMOTION_MAX_AMOUNT, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_PROMOTION_RESPONSE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect( - card.createCharge({ - promoCode: TestConstants.VALID_PROMOTION_PROMO_CODE, - binList: TestConstants.VALID_PROMOTION_BIN_LIST, - channelCode: TestConstants.VALID_PROMOTION_CHANNEL_CODE, - discountPercent: TestConstants.VALID_PROMOTION_DISCOUNT_PERCENTAGE, - discountAmount: TestConstants.VALID_PROMOTION_DISCOUNT_AMOUNT, - minOriginalAmount: TestConstants.VALID_PROMOTION_MIN_AMOUNT, - maxDiscountAmount: TestConstants.VALID_PROMOTION_MAX_AMOUNT, - }), - ) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/card/refund.test.js b/test/card/refund.test.js deleted file mode 100644 index cbc51e5..0000000 --- a/test/card/refund.test.js +++ /dev/null @@ -1,48 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { Card } = x; - beforeEach(function() { - card = new Card({}); - }); - before(function() { - nock(x.opts.xenditURL) - .post(`/credit_card_charges/${TestConstants.VALID_CHARGE_ID}/refunds`, { - amount: TestConstants.AMOUNT, - external_id: TestConstants.EXT_ID, - }) - .reply(200, TestConstants.VALID_REFUND_RESPONSE); - }); - - describe('createRefund', () => { - it('should create refund', done => { - expect( - card.createRefund({ - chargeID: TestConstants.VALID_CHARGE_ID, - amount: TestConstants.AMOUNT, - externalID: TestConstants.EXT_ID, - }), - ) - .to.eventually.be.deep.equal(TestConstants.VALID_REFUND_RESPONSE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(card.createRefund({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/card/token.test.js b/test/card/token.test.js deleted file mode 100644 index a5d9797..0000000 --- a/test/card/token.test.js +++ /dev/null @@ -1,59 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { Card } = x; - let card; - beforeEach(function() { - card = new Card({}); - }); - before(function() { - nock(x.opts.xenditURL) - .post('/v2/credit_card_tokens', { - card_data: { - account_number: TestConstants.VALID_CARD_NUM, - exp_month: TestConstants.VALID_EXP_MNTH, - exp_year: TestConstants.VALID_EXP_YR, - cvn: TestConstants.VALID_CVN, - }, - is_single_use: false, - should_authenticate: true, - }) - .reply(200, TestConstants.VALID_TOKEN_RESPONSE); - }); - - describe('createToken', () => { - it('should generate token', done => { - expect( - card.createToken({ - cardNumber: TestConstants.VALID_CARD_NUM, - expMonth: TestConstants.VALID_EXP_MNTH, - expYear: TestConstants.VALID_EXP_YR, - cardCVN: TestConstants.VALID_CVN, - isSingleUse: false, - shouldAuthenticate: true, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_TOKEN_RESPONSE) - .and.notify(done); - }); - - it('should report missing required fields', done => { - expect(card.createToken({})) - .to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/customer/constants.js b/test/customer/constants.js deleted file mode 100644 index 41ff3de..0000000 --- a/test/customer/constants.js +++ /dev/null @@ -1,90 +0,0 @@ -const CUSTOMER_ID = 'ccf51fe5-b715-4d28-b28b-cec420f3e96f'; -const REFERENCE_ID = 'customer-reference-id-example'; -const GIVEN_NAMES = 'customer 1'; -const EMAIL = 'customer@website.com'; -const MOBILE_NUMBER = '+6281212345678'; -const MIDDLE_NAME = 'middle'; -const SURNAME = 'surname'; -const VALID_CREATE_CUSTOMER_RESPONSE = { - id: CUSTOMER_ID, - reference_id: REFERENCE_ID, - given_names: GIVEN_NAMES, - email: EMAIL, - mobile_number: MOBILE_NUMBER, - description: 'dummy customer', - middle_name: MIDDLE_NAME, - surname: SURNAME, - phone_number: null, - nationality: null, - date_of_birth: null, - metadata: null, - employment: null, - addresses: null, - source_of_wealth: null, -}; -const VALID_CUSTOMER = { - id: CUSTOMER_ID, - reference_id: REFERENCE_ID, - given_names: GIVEN_NAMES, - email: EMAIL, - mobile_number: MOBILE_NUMBER, - description: 'customer dummy', - middle_name: MIDDLE_NAME, - surname: SURNAME, - phone_number: '+628987654321', - nationality: 'ID', - date_of_birth: '2000-06-13T00:00:00.000Z', - metadata: null, - employment: null, - addresses: [ - { - address_id: '9b28de5e-57b2-4072-896a-72995a5802cd', - country_code: 'ID', - state: null, - province: null, - city: 'Jakarta', - suburb: null, - line_1: 'jalan raya 2', - line_2: null, - created: '2021-02-01T06:35:13.536Z', - zip_code: null, - category: null, - is_preferred: false, - meta: null, - status: 'ACTIVE', - updated: '2021-02-01T06:35:13.536Z', - }, - { - address_id: '95a9346b-adae-4dd1-aeaf-1a961eda2cb2', - country_code: 'ID', - state: null, - province: null, - city: 'Jakarta', - suburb: null, - line_1: 'jalan raya', - line_2: null, - created: '2021-02-01T06:35:13.536Z', - zip_code: null, - category: null, - is_preferred: false, - meta: null, - status: 'ACTIVE', - updated: '2021-02-01T06:35:13.536Z', - }, - ], - source_of_wealth: null, -}; -const VALID_CUSTOMER_ARRAY = [VALID_CUSTOMER, VALID_CUSTOMER]; - -module.exports = { - CUSTOMER_ID, - REFERENCE_ID, - GIVEN_NAMES, - EMAIL, - MOBILE_NUMBER, - MIDDLE_NAME, - SURNAME, - VALID_CREATE_CUSTOMER_RESPONSE, - VALID_CUSTOMER, - VALID_CUSTOMER_ARRAY, -}; diff --git a/test/customer/customer.test.js b/test/customer/customer.test.js deleted file mode 100644 index 95f13a1..0000000 --- a/test/customer/customer.test.js +++ /dev/null @@ -1,161 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); -const Xendit = require('../../src/xendit'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -chai.use(chaiAsProm); - -const { Customer } = x; -let customer = new Customer({}); -beforeEach(function() { - customer = new Customer({}); -}); -before(function() { - nock(customer.API_ENDPOINT) - .post('/customers', { - reference_id: TestConstants.REFERENCE_ID, - given_names: TestConstants.GIVEN_NAMES, - email: TestConstants.EMAIL, - mobile_number: TestConstants.MOBILE_NUMBER, - description: 'dummy customer', - middle_name: TestConstants.MIDDLE_NAME, - surname: TestConstants.SURNAME, - addresses: [], - }) - .reply(200, TestConstants.VALID_CREATE_CUSTOMER_RESPONSE); - nock(customer.API_ENDPOINT) - .get(`/customers/${TestConstants.CUSTOMER_ID}`) - .reply(200, TestConstants.VALID_CREATE_CUSTOMER_RESPONSE); - nock(customer.API_ENDPOINT) - .patch(`/customers/${TestConstants.CUSTOMER_ID}`, { - description: 'customer dummy', - phone_number: '+628987654321', - nationality: 'ID', - date_of_birth: '2000-06-13', - addresses: [ - { - street_line1: 'jalan raya', - country: 'ID', - city: 'Jakarta', - }, - { - street_line1: 'jalan raya 2', - country: 'ID', - city: 'Jakarta', - }, - ], - }) - .reply(200, TestConstants.VALID_CUSTOMER); - nock(customer.API_ENDPOINT) - .get(`/customers?reference_id=${TestConstants.REFERENCE_ID}`) - .reply(200, TestConstants.VALID_CUSTOMER_ARRAY); -}); - -describe('Customer Service', function() { - describe('createCustomer', () => { - it('should create a customer', done => { - expect( - customer.createCustomer({ - referenceID: TestConstants.REFERENCE_ID, - givenNames: TestConstants.GIVEN_NAMES, - email: TestConstants.EMAIL, - mobileNumber: TestConstants.MOBILE_NUMBER, - description: 'dummy customer', - middleName: TestConstants.MIDDLE_NAME, - surname: TestConstants.SURNAME, - addresses: [], - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_CREATE_CUSTOMER_RESPONSE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(customer.createCustomer({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getCustomer', () => { - it('should get a customer', done => { - expect(customer.getCustomer({ id: TestConstants.CUSTOMER_ID })) - .to.eventually.deep.equal(TestConstants.VALID_CREATE_CUSTOMER_RESPONSE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(customer.getCustomer({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('updateCustomer', () => { - it('should update a customer', done => { - expect( - customer.updateCustomer({ - id: TestConstants.CUSTOMER_ID, - description: 'customer dummy', - phoneNumber: '+628987654321', - nationality: 'ID', - dateOfBirth: '2000-06-13', - addresses: [ - { - streetLine1: 'jalan raya', - country: 'ID', - city: 'Jakarta', - }, - { - streetLine1: 'jalan raya 2', - country: 'ID', - city: 'Jakarta', - }, - ], - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_CUSTOMER) - .and.notify(done); - }); - }); - - describe('getCustomerByReferenceID', () => { - it('should get customers by reference ID', done => { - expect( - customer.getCustomerByReferenceID({ - referenceID: TestConstants.REFERENCE_ID, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_CUSTOMER_ARRAY) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(customer.getCustomerByReferenceID({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}); diff --git a/test/direct_debit/constants.js b/test/direct_debit/constants.js deleted file mode 100644 index b1d2600..0000000 --- a/test/direct_debit/constants.js +++ /dev/null @@ -1,195 +0,0 @@ -const TOKEN_ID = 'lat-f274979c-8f79-4317-915d-1ffc194a924a'; -const CUSTOMER_ID = 'd32d1a7f-1ed9-4ab2-a502-f7e636ce69da'; -const CHANNEL_CODE = 'DC_BRI'; -const ACCOUNT_ID = 'la-c0eadde1-1d75-4e81-9767-4e54b50580a9'; -const ACCOUNT_MOBILE_NUMBER = '+62818555988'; -const CARD_EXPIRY = '06/24'; -const CARD_LAST_FOUR = '8888'; -const ACCOUNT_EMAIL = 'test.email@xendit.co'; -const CURRENCY = 'IDR'; -const LINKED_ACCOUNT_OTP_CODE = '333000'; -const DIRECT_DEBIT_PAYMENT_OTP_CODE = '222000'; -const PAYMENT_METHOD_ID = 'pm-8c09656d-09fe-4bdd-bd8d-87495a71d231'; -const IDEMPOTENCY_KEY = '7960e3fd-9a1d-469d-8b3e-2f88df139c50'; -const REFERENCE_ID = 'merchant-ref-id-ex-1'; -const DIRECT_DEBIT_PAYMENT_ID = 'ddpy-b4b6f301-5008-4c32-91b1-418ac04dfd10'; -const AMOUNT = 15000; -const PAYMENT_CALLBACK_URL = 'https://payment-callback-listener/'; -const COUNTRY_CODE = 'ID'; -const PRODUCT_TYPE = 'product type'; -const VALID_INITIALIZE_TOKENIZATION_RESPONSE = { - id: TOKEN_ID, - customer_id: CUSTOMER_ID, - channel_code: CHANNEL_CODE, - authorizer_url: null, - status: 'PENDING', - metadata: null, -}; -const VALID_VALIDATED_ACCOUNT_RESPONSE = { - id: TOKEN_ID, - customer_id: CUSTOMER_ID, - channel_code: CHANNEL_CODE, - status: 'SUCCESS', - metadata: null, -}; -const VALID_RETRIEVE_ACCOUNT_RESPONSE = { - channel_code: CHANNEL_CODE, - id: ACCOUNT_ID, - properties: { - card_expiry: CARD_EXPIRY, - card_last_four: CARD_LAST_FOUR, - currency: CURRENCY, - description: '', - }, - type: 'DEBIT_CARD', -}; -const VALID_ACCOUNT_ARRAY = [ - VALID_RETRIEVE_ACCOUNT_RESPONSE, - VALID_RETRIEVE_ACCOUNT_RESPONSE, -]; -const VALID_CREATE_PAYMENT_METHOD_RESPONSE = { - customer_id: CUSTOMER_ID, - type: 'DEBIT_CARD', - properties: { - id: ACCOUNT_ID, - currency: CURRENCY, - card_expiry: CARD_EXPIRY, - description: '', - channel_code: CHANNEL_CODE, - card_last_four: CARD_LAST_FOUR, - }, - status: 'ACTIVE', - metadata: {}, - id: PAYMENT_METHOD_ID, - created: '2021-02-03T02:56:38.856Z', - updated: '2021-02-03T02:56:38.856Z', -}; -const VALID_PAYMENT_METHOD_ARRAY = [ - VALID_CREATE_PAYMENT_METHOD_RESPONSE, - VALID_CREATE_PAYMENT_METHOD_RESPONSE, -]; -const VALID_CREATE_DIRECT_DEBIT_PAYMENT_RESPONSE = { - failure_code: null, - otp_mobile_number: null, - otp_expiration_timestamp: null, - id: DIRECT_DEBIT_PAYMENT_ID, - reference_id: REFERENCE_ID, - payment_method_id: PAYMENT_METHOD_ID, - channel_code: CHANNEL_CODE, - currency: CURRENCY, - amount: AMOUNT, - is_otp_required: true, - basket: [ - { - reference_id: 'product-ref-id-ex-1', - name: 'product 1', - market: COUNTRY_CODE, - description: '', - type: PRODUCT_TYPE, - category: '', - sub_category: '', - price: 0, - url: '', - metadata: null, - quatity: 0, - }, - { - reference_id: 'product-ref-id-ex-2', - name: 'product 2', - market: COUNTRY_CODE, - description: '', - type: PRODUCT_TYPE, - category: '', - sub_category: '', - price: 0, - url: '', - metadata: null, - quatity: 0, - }, - ], - description: '', - status: 'PENDING', - metadata: null, - created: '2021-02-03T04:15:07.977269Z', - updated: '2021-02-03T04:15:07.977269Z', -}; -const VALID_VALIDATED_DIRECT_DEBIT_PAYMENT_RESPONSE = { - failure_code: null, - otp_mobile_number: null, - otp_expiration_timestamp: null, - id: DIRECT_DEBIT_PAYMENT_ID, - reference_id: REFERENCE_ID, - payment_method_id: PAYMENT_METHOD_ID, - channel_code: CHANNEL_CODE, - currency: CURRENCY, - amount: AMOUNT, - is_otp_required: true, - basket: [ - { - reference_id: 'product-ref-id-ex-1', - name: 'product 1', - market: COUNTRY_CODE, - description: '', - type: PRODUCT_TYPE, - category: '', - sub_category: '', - price: 0, - url: '', - metadata: null, - quatity: 0, - }, - { - reference_id: 'product-ref-id-ex-2', - name: 'product 2', - market: COUNTRY_CODE, - description: '', - type: PRODUCT_TYPE, - category: '', - sub_category: '', - price: 0, - url: '', - metadata: null, - quatity: 0, - }, - ], - description: '', - status: 'COMPLETED', - metadata: null, - created: '2021-02-03T04:15:07.977269Z', - updated: '2021-02-03T04:15:07.977269Z', -}; -const VALID_DIRECT_DEBIT_PAYMENT_ARRAY = [ - VALID_VALIDATED_DIRECT_DEBIT_PAYMENT_RESPONSE, - VALID_VALIDATED_DIRECT_DEBIT_PAYMENT_RESPONSE, -]; - -module.exports = { - TOKEN_ID, - CUSTOMER_ID, - CHANNEL_CODE, - ACCOUNT_ID, - ACCOUNT_MOBILE_NUMBER, - CARD_EXPIRY, - CARD_LAST_FOUR, - ACCOUNT_EMAIL, - CURRENCY, - LINKED_ACCOUNT_OTP_CODE, - DIRECT_DEBIT_PAYMENT_OTP_CODE, - PAYMENT_METHOD_ID, - IDEMPOTENCY_KEY, - REFERENCE_ID, - DIRECT_DEBIT_PAYMENT_ID, - AMOUNT, - PAYMENT_CALLBACK_URL, - COUNTRY_CODE, - PRODUCT_TYPE, - VALID_INITIALIZE_TOKENIZATION_RESPONSE, - VALID_VALIDATED_ACCOUNT_RESPONSE, - VALID_RETRIEVE_ACCOUNT_RESPONSE, - VALID_ACCOUNT_ARRAY, - VALID_CREATE_PAYMENT_METHOD_RESPONSE, - VALID_PAYMENT_METHOD_ARRAY, - VALID_CREATE_DIRECT_DEBIT_PAYMENT_RESPONSE, - VALID_VALIDATED_DIRECT_DEBIT_PAYMENT_RESPONSE, - VALID_DIRECT_DEBIT_PAYMENT_ARRAY, -}; diff --git a/test/direct_debit/direct_debit.test.js b/test/direct_debit/direct_debit.test.js deleted file mode 100644 index 252e7b4..0000000 --- a/test/direct_debit/direct_debit.test.js +++ /dev/null @@ -1,16 +0,0 @@ -process.env.NODE_ENV = 'test'; - -const Xendit = require('../../src/xendit'); -const linkedAccountTest = require('./linked_account.test'); -const paymentMethodTest = require('./payment_method.test'); -const directDebitPaymentTest = require('./direct_debit_payment.test'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -describe('Direct Debit Service', function() { - linkedAccountTest(x); - paymentMethodTest(x); - directDebitPaymentTest(x); -}); diff --git a/test/direct_debit/direct_debit_payment.test.js b/test/direct_debit/direct_debit_payment.test.js deleted file mode 100644 index d5e60ae..0000000 --- a/test/direct_debit/direct_debit_payment.test.js +++ /dev/null @@ -1,181 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { DirectDebit } = x; - let dd; - beforeEach(function() { - dd = new DirectDebit({}); - }); - before(function() { - nock(x.opts.xenditURL, { - reqheaders: { - 'Idempotency-key': TestConstants.IDEMPOTENCY_KEY, - }, - }) - .post(`/direct_debits`, { - reference_id: TestConstants.REFERENCE_ID, - payment_method_id: TestConstants.PAYMENT_METHOD_ID, - currency: TestConstants.CURRENCY, - amount: TestConstants.AMOUNT, - callback_url: TestConstants.PAYMENT_CALLBACK_URL, - enable_otp: true, - basket: [ - { - reference_id: 'product-ref-id-ex-1', - name: 'product 1', - market: TestConstants.COUNTRY_CODE, - type: TestConstants.PRODUCT_TYPE, - }, - { - reference_id: 'product-ref-id-ex-2', - name: 'product 2', - market: TestConstants.COUNTRY_CODE, - type: TestConstants.PRODUCT_TYPE, - }, - ], - }) - .reply(200, TestConstants.VALID_CREATE_DIRECT_DEBIT_PAYMENT_RESPONSE); - nock(x.opts.xenditURL) - .post( - `/direct_debits/${TestConstants.DIRECT_DEBIT_PAYMENT_ID}/validate_otp/`, - { - otp_code: TestConstants.DIRECT_DEBIT_PAYMENT_OTP_CODE, - }, - ) - .reply(200, TestConstants.VALID_VALIDATED_DIRECT_DEBIT_PAYMENT_RESPONSE); - nock(x.opts.xenditURL) - .get(`/direct_debits/${TestConstants.DIRECT_DEBIT_PAYMENT_ID}`) - .reply(200, TestConstants.VALID_VALIDATED_DIRECT_DEBIT_PAYMENT_RESPONSE); - nock(x.opts.xenditURL) - .get(`/direct_debits?reference_id=${TestConstants.REFERENCE_ID}`) - .reply(200, TestConstants.VALID_DIRECT_DEBIT_PAYMENT_ARRAY); - }); - - describe('createDirectDebitPayment', () => { - it('should create direct debit payment', done => { - expect( - dd.createDirectDebitPayment({ - idempotencyKey: TestConstants.IDEMPOTENCY_KEY, - referenceID: TestConstants.REFERENCE_ID, - paymentMethodID: TestConstants.PAYMENT_METHOD_ID, - currency: TestConstants.CURRENCY, - amount: TestConstants.AMOUNT, - callbackURL: TestConstants.PAYMENT_CALLBACK_URL, - enableOTP: true, - basket: [ - { - referenceID: 'product-ref-id-ex-1', - name: 'product 1', - market: TestConstants.COUNTRY_CODE, - type: TestConstants.PRODUCT_TYPE, - }, - { - referenceID: 'product-ref-id-ex-2', - name: 'product 2', - market: TestConstants.COUNTRY_CODE, - type: TestConstants.PRODUCT_TYPE, - }, - ], - }), - ) - .to.eventually.deep.equal( - TestConstants.VALID_CREATE_DIRECT_DEBIT_PAYMENT_RESPONSE, - ) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(dd.createDirectDebitPayment({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('validateOTPforPayment', () => { - it('should validate direct debit payment using otp', done => { - expect( - dd.validateOTPforPayment({ - directDebitID: TestConstants.DIRECT_DEBIT_PAYMENT_ID, - otpCode: TestConstants.DIRECT_DEBIT_PAYMENT_OTP_CODE, - }), - ) - .to.eventually.deep.equal( - TestConstants.VALID_VALIDATED_DIRECT_DEBIT_PAYMENT_RESPONSE, - ) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(dd.validateOTPforPayment({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getDirectDebitPaymentStatusByID', () => { - it('should retrieve direct debit payment status by ID', done => { - expect( - dd.getDirectDebitPaymentStatusByID({ - directDebitID: TestConstants.DIRECT_DEBIT_PAYMENT_ID, - }), - ) - .to.eventually.deep.equal( - TestConstants.VALID_VALIDATED_DIRECT_DEBIT_PAYMENT_RESPONSE, - ) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(dd.getDirectDebitPaymentStatusByID({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getDirectDebitPaymentStatusByReferenceID', () => { - it('should retrieve direct debit payment status by reference ID', done => { - expect( - dd.getDirectDebitPaymentStatusByReferenceID({ - referenceID: TestConstants.REFERENCE_ID, - }), - ) - .to.eventually.deep.equal( - TestConstants.VALID_DIRECT_DEBIT_PAYMENT_ARRAY, - ) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(dd.getDirectDebitPaymentStatusByReferenceID({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/direct_debit/linked_account.test.js b/test/direct_debit/linked_account.test.js deleted file mode 100644 index 84144ac..0000000 --- a/test/direct_debit/linked_account.test.js +++ /dev/null @@ -1,119 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { DirectDebit } = x; - let dd; - beforeEach(function() { - dd = new DirectDebit({}); - }); - before(function() { - nock(x.opts.xenditURL) - .post(`/linked_account_tokens/auth`, { - customer_id: TestConstants.CUSTOMER_ID, - channel_code: TestConstants.CHANNEL_CODE, - properties: { - account_mobile_number: TestConstants.ACCOUNT_MOBILE_NUMBER, - card_last_four: TestConstants.CARD_LAST_FOUR, - card_expiry: TestConstants.CARD_EXPIRY, - account_email: TestConstants.ACCOUNT_EMAIL, - }, - }) - .reply(200, TestConstants.VALID_INITIALIZE_TOKENIZATION_RESPONSE); - nock(x.opts.xenditURL) - .post(`/linked_account_tokens/${TestConstants.TOKEN_ID}/validate_otp`, { - otp_code: TestConstants.LINKED_ACCOUNT_OTP_CODE, - }) - .reply(200, TestConstants.VALID_VALIDATED_ACCOUNT_RESPONSE); - nock(x.opts.xenditURL) - .get(`/linked_account_tokens/${TestConstants.TOKEN_ID}/accounts`) - .reply(200, TestConstants.VALID_ACCOUNT_ARRAY); - }); - - describe('initializeTokenization', () => { - it('should initialize tokenization', done => { - expect( - dd.initializeTokenization({ - customerID: TestConstants.CUSTOMER_ID, - channelCode: TestConstants.CHANNEL_CODE, - properties: { - accountMobileNumber: TestConstants.ACCOUNT_MOBILE_NUMBER, - cardLastFour: TestConstants.CARD_LAST_FOUR, - cardExpiry: TestConstants.CARD_EXPIRY, - accountEmail: TestConstants.ACCOUNT_EMAIL, - }, - }), - ) - .to.eventually.deep.equal( - TestConstants.VALID_INITIALIZE_TOKENIZATION_RESPONSE, - ) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(dd.initializeTokenization({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('validateOTPforLinkedAccount', () => { - it('should validate account using otp', done => { - expect( - dd.validateOTPforLinkedAccount({ - tokenID: TestConstants.TOKEN_ID, - otpCode: TestConstants.LINKED_ACCOUNT_OTP_CODE, - }), - ) - .to.eventually.deep.equal( - TestConstants.VALID_VALIDATED_ACCOUNT_RESPONSE, - ) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(dd.validateOTPforLinkedAccount({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('retrieveAccountsByTokenID', () => { - it('should retrieve accounts by token ID', done => { - expect( - dd.retrieveAccountsByTokenID({ - tokenID: TestConstants.TOKEN_ID, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_ACCOUNT_ARRAY) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(dd.retrieveAccountsByTokenID({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/direct_debit/payment_method.test.js b/test/direct_debit/payment_method.test.js deleted file mode 100644 index 60251b2..0000000 --- a/test/direct_debit/payment_method.test.js +++ /dev/null @@ -1,82 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { DirectDebit } = x; - let dd; - beforeEach(function() { - dd = new DirectDebit({}); - }); - before(function() { - nock(x.opts.xenditURL) - .post(`/payment_methods`, { - customer_id: TestConstants.CUSTOMER_ID, - type: 'DEBIT_CARD', - properties: { - id: TestConstants.ACCOUNT_ID, - }, - }) - .reply(200, TestConstants.VALID_CREATE_PAYMENT_METHOD_RESPONSE); - nock(x.opts.xenditURL) - .get(`/payment_methods?customer_id=${TestConstants.CUSTOMER_ID}`) - .reply(200, TestConstants.VALID_PAYMENT_METHOD_ARRAY); - }); - - describe('createPaymentMethod', () => { - it('should create payment method', done => { - expect( - dd.createPaymentMethod({ - customerID: TestConstants.CUSTOMER_ID, - type: 'DEBIT_CARD', - properties: { - id: TestConstants.ACCOUNT_ID, - }, - }), - ) - .to.eventually.deep.equal( - TestConstants.VALID_CREATE_PAYMENT_METHOD_RESPONSE, - ) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(dd.createPaymentMethod({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getPaymentMethodsByCustomerID', () => { - it('should get payment methods', done => { - expect( - dd.getPaymentMethodsByCustomerID({ - customerID: TestConstants.CUSTOMER_ID, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_PAYMENT_METHOD_ARRAY) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(dd.getPaymentMethodsByCustomerID({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/disbursement/bank.test.js b/test/disbursement/bank.test.js deleted file mode 100644 index d2a7e09..0000000 --- a/test/disbursement/bank.test.js +++ /dev/null @@ -1,28 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { Disbursement } = x; - let d; - beforeEach(function() { - d = new Disbursement({}); - }); - before(function() { - nock(x.opts.xenditURL) - .get('/available_disbursements_banks') - .reply(200, TestConstants.VALID_BANKS_RESPONSE); - }); - - describe('getBanks', () => { - it('should get a list of banks with disbursement available', done => { - expect(d.getBanks()) - .to.eventually.deep.equal(TestConstants.VALID_BANKS_RESPONSE) - .and.notify(done); - }); - }); -}; diff --git a/test/disbursement/constants.js b/test/disbursement/constants.js deleted file mode 100644 index 51c866a..0000000 --- a/test/disbursement/constants.js +++ /dev/null @@ -1,60 +0,0 @@ -const VALID_BANKS_RESPONSE = [ - { - name: 'Bank Central Asia (BCA)', - code: 'BCA', - can_disburse: true, - can_name_validate: true, - }, - { - name: 'Bank Danamon', - code: 'DANAMON', - can_disburse: true, - can_name_validate: true, - }, - { - name: 'Bank Artha Graha International', - code: 'ARTHA', - can_disburse: true, - can_name_validate: true, - }, -]; -const EXT_ID = '123'; -const BANK_CODE = 'BCA'; -const ACC_HOLDER_NAME = 'Stan'; -const ACC_NUMBER = '1234567890'; -const DESCRIPTION = 'Purchase of something'; -const AMOUNT = 10000; -const ID = '5dba923cf6977e002259377c'; -const REF = '111'; -const VALID_CREATE_RESPONSE = { - status: 'PENDING', - user_id: '5d88f30005827c2cbd6a0d81', - external_id: EXT_ID, - amount: AMOUNT, - bank_code: BANK_CODE, - account_holder_name: ACC_HOLDER_NAME, - disbursement_description: DESCRIPTION, - id: ID, -}; -const VALID_BATCH_RESPONSE = { - status: 'NEEDS_APPROVAL', - reference: REF, - total_uploaded_amount: AMOUNT, - total_uploaded_count: 1, - created: '2019-10-31T07:52:38.504Z', - id: '5dba92c6f6977e002259377e', -}; - -module.exports = { - VALID_BANKS_RESPONSE, - EXT_ID, - BANK_CODE, - ACC_HOLDER_NAME, - ACC_NUMBER, - DESCRIPTION, - AMOUNT, - ID, - REF, - VALID_CREATE_RESPONSE, - VALID_BATCH_RESPONSE, -}; diff --git a/test/disbursement/disburse.test.js b/test/disbursement/disburse.test.js deleted file mode 100644 index 5e18611..0000000 --- a/test/disbursement/disburse.test.js +++ /dev/null @@ -1,204 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { Disbursement } = x; - let d; - beforeEach(function() { - d = new Disbursement({}); - }); - before(function() { - nock(x.opts.xenditURL) - .post('/disbursements', { - external_id: TestConstants.EXT_ID, - bank_code: TestConstants.BANK_CODE, - account_holder_name: TestConstants.ACC_HOLDER_NAME, - account_number: TestConstants.ACC_NUMBER, - bank_account_name: TestConstants.ACC_HOLDER_NAME, - bank_account_number: TestConstants.ACC_NUMBER, - description: TestConstants.DESCRIPTION, - amount: TestConstants.AMOUNT, - }) - .reply(201, TestConstants.VALID_CREATE_RESPONSE); - nock(x.opts.xenditURL) - .post('/batch_disbursements', { - reference: TestConstants.REF, - disbursements: [ - { - external_id: TestConstants.EXT_ID, - bank_code: TestConstants.BANK_CODE, - bank_account_name: TestConstants.ACC_HOLDER_NAME, - bank_account_number: TestConstants.ACC_NUMBER, - account_holder_name: TestConstants.ACC_HOLDER_NAME, - account_number: TestConstants.ACC_NUMBER, - description: TestConstants.DESCRIPTION, - amount: TestConstants.AMOUNT, - }, - ], - }) - .reply(201, TestConstants.VALID_BATCH_RESPONSE); - nock(x.opts.xenditURL) - .get(`/disbursements/${TestConstants.ID}`) - .reply(200, TestConstants.VALID_CREATE_RESPONSE); - nock(x.opts.xenditURL) - .get(`/disbursements?external_id=${TestConstants.EXT_ID}`) - .reply(200, TestConstants.VALID_CREATE_RESPONSE); - }); - - describe('create', () => { - it('should create disbursement', done => { - expect( - d.create({ - externalID: TestConstants.EXT_ID, - bankCode: TestConstants.BANK_CODE, - accountHolderName: TestConstants.ACC_HOLDER_NAME, - accountNumber: TestConstants.ACC_NUMBER, - description: TestConstants.DESCRIPTION, - amount: TestConstants.AMOUNT, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_CREATE_RESPONSE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(d.create({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('createBatch', () => { - it('should create a batch of disbursements', done => { - expect( - d.createBatch({ - reference: TestConstants.REF, - disbursements: [ - { - externalID: TestConstants.EXT_ID, - bankCode: TestConstants.BANK_CODE, - accountHolderName: TestConstants.ACC_HOLDER_NAME, - accountNumber: TestConstants.ACC_NUMBER, - description: TestConstants.DESCRIPTION, - amount: TestConstants.AMOUNT, - }, - ], - }), - ) - .to.eventually.be.deep.equal(TestConstants.VALID_BATCH_RESPONSE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(d.createBatch({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - it('should report `disbursements` not being an array', done => { - expect( - d.createBatch({ - reference: TestConstants.REF, - disbursements: {}, - }), - ) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - it('should report `disbursements` not having length > 0', done => { - expect( - d.createBatch({ - reference: TestConstants.REF, - disbursements: [], - }), - ) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - it('should report missing disbursementItem required fields', done => { - expect( - d.createBatch({ - reference: TestConstants.REF, - disbursements: [{}], - }), - ) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getByID', () => { - it('should get disbursement by ID', done => { - expect(d.getByID({ disbursementID: TestConstants.ID })) - .to.eventually.deep.equal(TestConstants.VALID_CREATE_RESPONSE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(d.getByID({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getByExtID', () => { - it('should get disbursement by external ID', done => { - expect( - d.getByExtID({ - externalID: TestConstants.EXT_ID, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_CREATE_RESPONSE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(d.getByExtID({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/disbursement/disbursement.test.js b/test/disbursement/disbursement.test.js deleted file mode 100644 index e0bce1b..0000000 --- a/test/disbursement/disbursement.test.js +++ /dev/null @@ -1,14 +0,0 @@ -process.env.NODE_ENV = 'test'; - -const Xendit = require('../../src/xendit'); -const bankTest = require('./bank.test'); -const disburseTest = require('./disburse.test'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -describe('Disbursement Service', function() { - bankTest(x); - disburseTest(x); -}); diff --git a/test/ewallet/constants.js b/test/ewallet/constants.js deleted file mode 100644 index f472345..0000000 --- a/test/ewallet/constants.js +++ /dev/null @@ -1,144 +0,0 @@ -const OVO_EWALLET_TYPE = 'OVO'; -const DANA_EWALLET_TYPE = 'DANA'; -const LINKAJA_EWALLET_TYPE = 'LINKAJA'; - -const EXT_ID = '123'; -const PHONE = '081234567890'; -const AMOUNT = 10000; -const CALLBACK_URL = 'https://yourwebsite.com/callback'; -const REDIRECT_URL = 'https://yourwebsite.com/order/123'; -const REFERENCE_ID = 'test-reference-id'; -const CURRENCY = 'IDR'; -const CHECKOUT_METHOD = 'ONE_TIME_PAYMENT'; -const CHANNEL_CODE = 'ID_OVO'; -const CHARGE_ID = 'ewc_f3925450-5c54-4777-98c1-fcf22b0d1e1c'; -const CUSTOMER_ID = '0e0dc5ee-0057-45c4-bd32-e6294348e6cc'; -const LINKED_ACCOUNT_TOKEN_ID = 'lat-531ad3f6-6c03-4b78-b084-c4fe9a14fbe7'; -const LINKED_ACCOUNT_ID = 'la-ddf78482-ca60-473b-91d1-eb87729a1606'; -const PAYMENT_METHOD_ID = 'pm-3d375a3e-7e9d-4727-b5c5-bff92fbb80c9'; -const SUCCESS_REDIRECT_URL = 'https://www.google.com'; -const FAILURE_REDIRECT_URL = 'https://www.google.com'; -const ITEMS = [ - { - id: '123123', - name: 'Phone Case', - price: 100000, - quantity: 1, - }, - { - id: '345678', - name: 'Powerbank', - price: 200000, - quantity: 1, - }, -]; - -const VALID_CREATE_OVO_RESPONSE = { - transaction_date: String(new Date()), - amount: AMOUNT, - external_id: EXT_ID, - ewallet_type: OVO_EWALLET_TYPE, - business_id: '12121212', -}; - -const VALID_GET_OVO_PAYMENT_STATUS_RESPONSE = { - external_id: EXT_ID, - amount: AMOUNT, - transaction_date: String(new Date()), - business_id: '12121212', - ewallet_type: OVO_EWALLET_TYPE, - status: 'COMPLETED', -}; - -const VALID_EWALLET_PAYMENT_CHARGE = { - id: CHARGE_ID, - business_id: 'business-id-example', - reference_id: REFERENCE_ID, - status: 'PENDING', - currency: CURRENCY, - charge_amount: AMOUNT, - capture_amount: AMOUNT, - checkout_method: CHECKOUT_METHOD, - channel_code: CHANNEL_CODE, - channel_properties: { - mobile_number: PHONE, - }, - actions: { - desktop_web_checkout_url: null, - mobile_web_checkout_url: null, - mobile_deeplink_checkout_url: 'https://mobile.deeplink.checkout.url', - qr_checkout_string: 'test-qr-string', - }, - is_redirect_required: true, - callback_url: REDIRECT_URL, - created: '2021-02-09T06:22:35.064408Z', - updated: '2021-02-09T06:22:35.064408Z', - voided_at: null, - capture_now: true, - customer_id: null, - payment_method_id: null, - failure_code: null, - basket: null, - metadata: null, -}; - -const VALID_CREATE_PAYMENT_METHOD_RESPONSE = { - id: PAYMENT_METHOD_ID, - customer_id: CUSTOMER_ID, - type: 'EWALLET', - status: 'ACTIVE', - properties: { - id: LINKED_ACCOUNT_ID, - }, - metadata: {}, - created: '2021-02-03T02:56:38.856Z', - updated: '2021-02-03T02:56:38.856Z', -}; - -const VALID_PAYMENT_METHOD_ARRAY = [ - VALID_CREATE_PAYMENT_METHOD_RESPONSE, - VALID_CREATE_PAYMENT_METHOD_RESPONSE, -]; - -const VALID_INITIALIZE_TOKENIZATION_RESPONSE = { - id: LINKED_ACCOUNT_TOKEN_ID, - customer_id: CUSTOMER_ID, - channel_code: 'PH_GRABPAY', - authorization_url: 'https://www.google.com', - status: 'PENDING', - metadata: null, -}; - -const VALID_UNLINK_TOKENIZATION_RESPONSE = { - id: LINKED_ACCOUNT_TOKEN_ID, - is_deleted: true, -}; - -module.exports = { - OVO_EWALLET_TYPE, - DANA_EWALLET_TYPE, - LINKAJA_EWALLET_TYPE, - EXT_ID, - PHONE, - AMOUNT, - CALLBACK_URL, - REDIRECT_URL, - REFERENCE_ID, - CURRENCY, - CHECKOUT_METHOD, - CHANNEL_CODE, - CHARGE_ID, - CUSTOMER_ID, - LINKED_ACCOUNT_ID, - LINKED_ACCOUNT_TOKEN_ID, - SUCCESS_REDIRECT_URL, - FAILURE_REDIRECT_URL, - ITEMS, - VALID_CREATE_PAYMENT_METHOD_RESPONSE, - VALID_PAYMENT_METHOD_ARRAY, - VALID_CREATE_OVO_RESPONSE, - VALID_GET_OVO_PAYMENT_STATUS_RESPONSE, - VALID_EWALLET_PAYMENT_CHARGE, - VALID_INITIALIZE_TOKENIZATION_RESPONSE, - VALID_UNLINK_TOKENIZATION_RESPONSE, -}; diff --git a/test/ewallet/ewallet.test.js b/test/ewallet/ewallet.test.js deleted file mode 100644 index 2d6555f..0000000 --- a/test/ewallet/ewallet.test.js +++ /dev/null @@ -1,18 +0,0 @@ -process.env.NODE_ENV = 'test'; - -const Xendit = require('../../src/xendit'); -const eWalletPaymentTest = require('./ewallet_payment.test'); -const eWalletChargeTest = require('./ewallet_charge.test'); -const paymentMethodTest = require('./payment_method.test'); -const linkedAccountTest = require('./linked_account.test'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -describe('EWallet Service Test', function() { - eWalletPaymentTest(x); - eWalletChargeTest(x); - paymentMethodTest(x); - linkedAccountTest(x); -}); diff --git a/test/ewallet/ewallet_charge.test.js b/test/ewallet/ewallet_charge.test.js deleted file mode 100644 index 6482473..0000000 --- a/test/ewallet/ewallet_charge.test.js +++ /dev/null @@ -1,121 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { EWallet } = x; - - let ew; - - beforeEach(function() { - ew = new EWallet({}); - }); - - before(function() { - nock(x.opts.xenditURL) - .post('/ewallets/charges', { - reference_id: TestConstants.REFERENCE_ID, - currency: TestConstants.CURRENCY, - amount: TestConstants.AMOUNT, - checkout_method: TestConstants.CHECKOUT_METHOD, - channel_code: TestConstants.CHANNEL_CODE, - channel_properties: { - mobile_number: TestConstants.PHONE, - }, - basket: null, - }) - .reply(200, TestConstants.VALID_EWALLET_PAYMENT_CHARGE); - nock(x.opts.xenditURL) - .get(`/ewallets/charges/${TestConstants.CHARGE_ID}`) - .reply(200, TestConstants.VALID_EWALLET_PAYMENT_CHARGE); - nock(x.opts.xenditURL) - .post(`/ewallets/charges/${TestConstants.CHARGE_ID}/void`) - .reply(200, TestConstants.VALID_EWALLET_PAYMENT_CHARGE); - }); - - describe('createEWalletCharge', () => { - it('should create a ewallet payment charge', done => { - expect( - ew.createEWalletCharge({ - referenceID: TestConstants.REFERENCE_ID, - currency: TestConstants.CURRENCY, - amount: TestConstants.AMOUNT, - checkoutMethod: TestConstants.CHECKOUT_METHOD, - channelCode: TestConstants.CHANNEL_CODE, - channelProperties: { - mobileNumber: TestConstants.PHONE, - }, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_EWALLET_PAYMENT_CHARGE) - .then(() => done()) - .catch(e => done(e)); - }); - - it('should report missing required fields', done => { - expect(ew.createEWalletCharge({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getEWalletChargeStatus', () => { - it('should get ewallet payment charge', done => { - expect( - ew.getEWalletChargeStatus({ - chargeID: TestConstants.CHARGE_ID, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_EWALLET_PAYMENT_CHARGE) - .then(() => done()) - .catch(e => done(e)); - }); - it('should report missing required fields', done => { - expect(ew.getEWalletChargeStatus({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('voidEWalletCharge', () => { - it('should void an ewallet payment charge', done => { - expect( - ew.voidEWalletCharge({ - chargeID: TestConstants.CHARGE_ID, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_EWALLET_PAYMENT_CHARGE) - .then(() => done()) - .catch(e => done(e)); - }); - - it('should report missing required fields', done => { - expect(ew.voidEWalletCharge({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/ewallet/ewallet_payment.test.js b/test/ewallet/ewallet_payment.test.js deleted file mode 100644 index 2277580..0000000 --- a/test/ewallet/ewallet_payment.test.js +++ /dev/null @@ -1,143 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { EWallet } = x; - - let ew; - - beforeEach(function() { - ew = new EWallet({}); - }); - - before(function() { - nock(x.opts.xenditURL) - .post('/ewallets', { - external_id: TestConstants.EXT_ID, - phone: TestConstants.PHONE, - amount: TestConstants.AMOUNT, - ewallet_type: TestConstants.OVO_EWALLET_TYPE, - }) - .reply(200, TestConstants.VALID_CREATE_OVO_RESPONSE); - nock(x.opts.xenditURL) - .get( - // eslint-disable-next-line max-len - `/ewallets?external_id=${TestConstants.EXT_ID}&ewallet_type=${TestConstants.OVO_EWALLET_TYPE}`, - ) - .reply(200, TestConstants.VALID_GET_OVO_PAYMENT_STATUS_RESPONSE); - }); - - describe('createPayment', () => { - it('should create an OVO Payment', done => { - expect( - ew.createPayment({ - externalID: TestConstants.EXT_ID, - phone: TestConstants.PHONE, - amount: TestConstants.AMOUNT, - ewalletType: TestConstants.OVO_EWALLET_TYPE, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_CREATE_OVO_RESPONSE) - .then(() => done()) - .catch(e => done(e)); - }); - it('should report missing required fields', done => { - expect(ew.createPayment({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - it('should report missing OVO required fields', done => { - expect( - ew.createPayment({ - external_id: TestConstants.EXT_ID, - amount: TestConstants.AMOUNT, - ewallet_type: TestConstants.OVO_EWALLET_TYPE, - }), - ) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - it('should report missing Dana required fields', done => { - expect( - ew.createPayment({ - externalID: TestConstants.EXT_ID, - amount: TestConstants.AMOUNT, - redirectURL: TestConstants.REDIRECT_URL, - ewallet_type: TestConstants.DANA_EWALLET_TYPE, - }), - ) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - it('should report missing LinkAja required fields', done => { - expect( - ew.createPayment({ - externalID: TestConstants.EXT_ID, - phone: TestConstants.PHONE, - amount: TestConstants.AMOUNT, - callbackURL: TestConstants.CALLBACK_URL, - redirectURL: TestConstants.REDIRECT_URL, - }), - ) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getPayment', () => { - it('should get OVO Payment Status', done => { - expect( - ew.getPayment({ - externalID: TestConstants.EXT_ID, - ewalletType: TestConstants.OVO_EWALLET_TYPE, - }), - ) - .to.eventually.deep.equal( - TestConstants.VALID_GET_OVO_PAYMENT_STATUS_RESPONSE, - ) - .then(() => done()) - .catch(e => done(e)); - }); - it('should report missing required fields', done => { - expect(ew.getPayment({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/ewallet/linked_account.test.js b/test/ewallet/linked_account.test.js deleted file mode 100644 index 252c281..0000000 --- a/test/ewallet/linked_account.test.js +++ /dev/null @@ -1,91 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { EWallet } = x; - - let ew; - - beforeEach(function() { - ew = new EWallet({}); - }); - - before(function() { - nock(x.opts.xenditURL) - .post('/linked_account_tokens/auth', { - customer_id: TestConstants.CUSTOMER_ID, - channel_code: 'PH_GRABPAY', - properties: { - success_redirect_url: TestConstants.SUCCESS_REDIRECT_URL, - failure_redirect_url: TestConstants.FAILURE_REDIRECT_URL, - callback_url: TestConstants.CALLBACK_URL, - }, - }) - .reply(200, TestConstants.VALID_INITIALIZE_TOKENIZATION_RESPONSE); - nock(x.opts.xenditURL) - .delete(`/linked_account_tokens/${TestConstants.LINKED_ACCOUNT_TOKEN_ID}`) - .reply(200, TestConstants.VALID_UNLINK_TOKENIZATION_RESPONSE); - }); - - describe('initializeTokenization', () => { - it('should initialize the tokenization flow', done => { - expect( - ew.initializeTokenization({ - customerID: TestConstants.CUSTOMER_ID, - channelCode: 'PH_GRABPAY', - properties: { - successRedirectURL: TestConstants.SUCCESS_REDIRECT_URL, - failureRedirectURL: TestConstants.FAILURE_REDIRECT_URL, - callbackURL: TestConstants.CALLBACK_URL, - }, - }), - ) - .to.eventually.deep.equal( - TestConstants.VALID_INITIALIZE_TOKENIZATION_RESPONSE, - ) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(ew.initializeTokenization({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('unlinkTokenization', () => { - it('should unlink the token', done => { - expect( - ew.unlinkTokenization({ - linkedAccTokenID: TestConstants.LINKED_ACCOUNT_TOKEN_ID, - }), - ) - .to.eventually.deep.equal( - TestConstants.VALID_UNLINK_TOKENIZATION_RESPONSE, - ) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(ew.unlinkTokenization({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/ewallet/payment_method.test.js b/test/ewallet/payment_method.test.js deleted file mode 100644 index 52301a4..0000000 --- a/test/ewallet/payment_method.test.js +++ /dev/null @@ -1,85 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { EWallet } = x; - - let ew; - - beforeEach(function() { - ew = new EWallet({}); - }); - - before(function() { - nock(x.opts.xenditURL) - .post('/payment_methods', { - customer_id: TestConstants.CUSTOMER_ID, - type: 'EWALLET', - properties: { - id: TestConstants.LINKED_ACCOUNT_ID, - }, - }) - .reply(200, TestConstants.VALID_CREATE_PAYMENT_METHOD_RESPONSE); - nock(x.opts.xenditURL) - .get(`/payment_methods?customer_id=${TestConstants.CUSTOMER_ID}`) - .reply(200, TestConstants.VALID_PAYMENT_METHOD_ARRAY); - }); - - describe('createPaymentMethod', () => { - it('should create payment method', done => { - expect( - ew.createPaymentMethod({ - customerID: TestConstants.CUSTOMER_ID, - type: 'EWALLET', - properties: { - id: TestConstants.LINKED_ACCOUNT_ID, - }, - }), - ) - .to.eventually.deep.equal( - TestConstants.VALID_CREATE_PAYMENT_METHOD_RESPONSE, - ) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(ew.createPaymentMethod({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getPaymentMethodsByCustomerID', () => { - it('should get payment methods', done => { - expect( - ew.getPaymentMethodsByCustomerID({ - customerID: TestConstants.CUSTOMER_ID, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_PAYMENT_METHOD_ARRAY) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(ew.getPaymentMethodsByCustomerID({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/invoice/constants.js b/test/invoice/constants.js deleted file mode 100644 index 5e197c7..0000000 --- a/test/invoice/constants.js +++ /dev/null @@ -1,22 +0,0 @@ -const EXT_ID = '123'; -const DESCRIPTION = 'Purchase of something'; -const AMT = 100000; -const PAYER_EMAIL = 'example@gmail.com'; -const ID = '5ddf9112e4e17325c9917be3'; - -const VALID_INVOICE = { - id: ID, - external_id: EXT_ID, - amount: AMT, - payer_email: PAYER_EMAIL, - description: DESCRIPTION, -}; - -module.exports = { - EXT_ID, - DESCRIPTION, - PAYER_EMAIL, - AMT, - ID, - VALID_INVOICE, -}; diff --git a/test/invoice/invoice.test.js b/test/invoice/invoice.test.js deleted file mode 100644 index 43154f1..0000000 --- a/test/invoice/invoice.test.js +++ /dev/null @@ -1,120 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); -const Xendit = require('../../src/xendit'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -chai.use(chaiAsProm); - -const { Invoice } = x; -let i; -beforeEach(function() { - i = new Invoice({}); -}); -before(function() { - nock(x.opts.xenditURL) - .post('/v2/invoices', { - external_id: TestConstants.EXT_ID, - payer_email: TestConstants.PAYER_EMAIL, - description: TestConstants.DESCRIPTION, - amount: TestConstants.AMT, - }) - .reply(201, TestConstants.VALID_INVOICE); - nock(x.opts.xenditURL) - .get(`/v2/invoices/${TestConstants.ID}`) - .reply(200, TestConstants.VALID_INVOICE); - nock(x.opts.xenditURL) - .post(`/invoices/${TestConstants.ID}/expire!`) - .reply(200, TestConstants.VALID_INVOICE); - nock(x.opts.xenditURL) - .get(`/v2/invoices`) - .reply(200, [ - TestConstants.VALID_INVOICE, - TestConstants.VALID_INVOICE, - TestConstants.VALID_INVOICE, - ]); -}); - -describe('Invoice Service', function() { - describe('createInvoice', () => { - it('should create an invoice', done => { - expect( - i.createInvoice({ - externalID: TestConstants.EXT_ID, - amount: TestConstants.AMT, - description: TestConstants.DESCRIPTION, - payerEmail: TestConstants.PAYER_EMAIL, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_INVOICE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(i.createInvoice({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getInvoice', () => { - it('should get an invoice', done => { - expect(i.getInvoice({ invoiceID: TestConstants.ID })) - .to.eventually.deep.equal(TestConstants.VALID_INVOICE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(i.createInvoice({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('expireInvoice', () => { - it('should expire an invoice', done => { - expect(i.expireInvoice({ invoiceID: TestConstants.ID })) - .to.eventually.deep.equal(TestConstants.VALID_INVOICE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(i.expireInvoice({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getInvoice', () => { - it('should get a list of invoices', done => { - expect(i.getAllInvoices()) - .to.eventually.deep.equal([ - TestConstants.VALID_INVOICE, - TestConstants.VALID_INVOICE, - TestConstants.VALID_INVOICE, - ]) - .and.notify(done); - }); - }); -}); diff --git a/test/payment_method_v2/constants.js b/test/payment_method_v2/constants.js deleted file mode 100644 index 189f76b..0000000 --- a/test/payment_method_v2/constants.js +++ /dev/null @@ -1,293 +0,0 @@ -const CREATE_PAYMENT_RESPONSE = { - id: 'pm-77de3ae9-0795-4de4-a08f-b8a463ae8eb4', - type: 'QR_CODE', - country: 'ID', - business_id: '58cd618ba0464eb64acdb246', - customer_id: null, - reference_id: '117e6382-d612-4d7c-94b0-21b76b136f64', - reusability: 'ONE_TIME_USE', - status: 'ACTIVE', - actions: [], - description: null, - created: '2022-11-02T10:14:20.8306107Z', - updated: '2022-11-02T10:14:20.8306107Z', - metadata: null, - billing_information: null, - failure_code: null, - ewallet: null, - direct_bank_transfer: null, - direct_debit: null, - card: null, - over_the_counter: null, - qr_code: { - amount: 10000, - currency: 'IDR', - channel_code: 'QRIS', - channel_properties: { - qr_string: - '00020101021226660014ID.LINKAJA.WWW011893600911002414220002152003260414220010303UME51450015ID.OR.GPNQR.WWW02150000000000000000303UME520454995802ID5909Xendit QR6007Jakarta61051216062380115WxFFAGZrEbCqdch0715WxFFAGZrEbCqdch53033605405100006304716E', - }, - }, - virtual_account: null, -}; - -const CREATE_PAYMENT_MISSING_TYPE_RESPONSE = { - error_code: 'API_VALIDATION_ERROR', - message: 'Failed to validate the request, 1 error occurred.', - errors: [ - { - path: 'body.type', - message: "Property 'type' is missing", - }, - ], -}; - -const LIST_PAYMENT_METHOD_RESPONSE = { - data: [ - { - id: 'pm-77de3ae9-0795-4de4-a08f-b8a463ae8eb4', - type: 'QR_CODE', - country: 'ID', - business_id: '58cd618ba0464eb64acdb246', - customer_id: null, - reference_id: '117e6382-d612-4d7c-94b0-21b76b136f64', - reusability: 'ONE_TIME_USE', - status: 'ACTIVE', - actions: [], - description: null, - created: '2022-11-02T10:14:20.830611Z', - updated: '2022-11-02T10:14:20.830611Z', - metadata: null, - billing_information: null, - failure_code: null, - ewallet: null, - direct_bank_transfer: null, - direct_debit: null, - card: null, - over_the_counter: null, - qr_code: { - amount: 10000, - currency: 'IDR', - channel_code: 'QRIS', - channel_properties: { - qr_string: - '00020101021226660014ID.LINKAJA.WWW011893600911002414220002152003260414220010303UME51450015ID.OR.GPNQR.WWW02150000000000000000303UME520454995802ID5909Xendit QR6007Jakarta61051216062380115WxFFAGZrEbCqdch0715WxFFAGZrEbCqdch53033605405100006304716E', - }, - }, - virtual_account: null, - }, - ], - has_more: false, -}; - -const PAYMENT_METHOD_AUTH_SUCCESS_RESPONSE = { - id: 'pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a', - card: null, - type: 'DIRECT_DEBIT', - status: 'ACTIVE', - actions: [], - country: 'ID', - created: '2022-08-12T13:30:26.579048Z', - ewallet: null, - qr_code: null, - updated: '2022-08-12T13:30:58.908220358Z', - metadata: null, - customer_id: 'e2878b4c-d57e-4a2c-922d-c0313c2800a3', - description: null, - reusability: 'MULTIPLE_USE', - direct_debit: { - type: 'DEBIT_CARD', - debit_card: { - mobile_number: '+62818555988', - card_last_four: '8888', - card_expiry: '06/24', - email: 'email@email.com', - }, - bank_account: null, - channel_code: 'BRI', - channel_properties: { - mobile_number: '+62818555988', - card_last_four: '8888', - card_expiry: '06/24', - email: 'test.email@xendit.co', - }, - }, - failure_code: null, - reference_id: '620b9df4-fe69-4bfd-b9d4-5cba6861db8a', - virtual_account: null, - over_the_counter: null, - billing_information: null, - direct_bank_transfer: null, - business_id: '5f27a14a9bf05c73dd040bc8', -}; - -const GET_PAYMENT_METHOD_LIST_BY_ID_SUCCESS_RESPONSE = { - id: 'pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a', - card: null, - type: 'DIRECT_DEBIT', - status: 'ACTIVE', - actions: [], - country: 'ID', - created: '2022-08-12T13:30:26.579048Z', - ewallet: null, - qr_code: null, - updated: '2022-08-12T13:30:58.908220358Z', - metadata: null, - customer_id: 'e2878b4c-d57e-4a2c-922d-c0313c2800a3', - description: null, - reusability: 'MULTIPLE_USE', - direct_debit: { - type: 'DEBIT_CARD', - debit_card: { - mobile_number: '+62818555988', - card_last_four: '8888', - card_expiry: '06/24', - email: 'email@email.com', - }, - bank_account: null, - channel_code: 'BRI', - channel_properties: { - mobile_number: '+62818555988', - card_last_four: '8888', - card_expiry: '06/24', - email: 'test.email@xendit.co', - }, - }, - failure_code: null, - reference_id: '620b9df4-fe69-4bfd-b9d4-5cba6861db8a', - virtual_account: null, - over_the_counter: null, - billing_information: null, - direct_bank_transfer: null, - business_id: '5f27a14a9bf05c73dd040bc8', -}; - -const UPDATE_PAYMENT_METHOD_SUCCESS_RESPONSE = { - actions: [], - billing_information: null, - business_id: '5f27a14a9bf05c73dd040bc8', - card: null, - country: 'ID', - created: '2022-08-12T13:30:26.579048Z', - customer_id: 'e2878b4c-d57e-4a2c-922d-c0313c2800a3', - description: null, - direct_bank_transfer: null, - direct_debit: { - bank_account: null, - channel_code: 'BRI', - channel_properties: { - card_expiry: '06/24', - card_last_four: '8888', - email: 'test.email@xendit.co', - mobile_number: '+62818555988', - }, - debit_card: { - card_expiry: '06/24', - card_last_four: '8888', - email: 'email@email.com', - mobile_number: '+62818555988', - }, - type: 'DEBIT_CARD', - }, - ewallet: null, - failure_code: null, - id: 'pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a', - metadata: null, - over_the_counter: null, - qr_code: null, - reference_id: '620b9df4-fe69-4bfd-b9d4-5cba6861db8a', - reusability: 'MULTIPLE_USE', - status: 'ACTIVE', - type: 'DIRECT_DEBIT', - updated: '2022-08-12T13:30:58.908220358Z', - virtual_account: null, -}; - -const EXPIRE_PAYMENT_METHOD_SUCCESS_RESPONSE = { - id: 'pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a', - card: null, - type: 'DIRECT_DEBIT', - status: 'EXPIRED', - actions: [], - country: 'PH', - created: '2022-08-12T13:30:26.579048Z', - ewallet: null, - qr_code: null, - updated: '2022-08-12T13:30:58.908220358Z', - metadata: null, - customer_id: 'e2878b4c-d57e-4a2c-922d-c0313c2800a3', - description: null, - reusability: 'MULTIPLE_USE', - direct_debit: { - type: 'BANK_ACCOUNT', - debit_card: null, - bank_account: { - bank_account_hash: 'b4dfa99c9b60c77f2e3962b73c098945', - masked_bank_account_number: 'XXXXXX1234', - }, - channel_code: 'BPI', - channel_propertie: { - failure_return_url: 'https://your-redirect-website.com/failure', - success_return_url: 'https://your-redirect-website.com/success', - }, - }, - failure_code: null, - reference_id: '620b9df4-fe69-4bfd-b9d4-5cba6861db8a', - virtual_account: null, - over_the_counter: null, - billing_information: null, - direct_bank_transfer: null, - business_id: '5f27a14a9bf05c73dd040bc8', -}; - -const LIST_PAYMENTS_BY_PAYMENT_METHOD_ID_SUCCESS_RESPONSE = { - actions: [], - billing_information: null, - business_id: '5f27a14a9bf05c73dd040bc8', - card: null, - country: 'ID', - created: '2022-08-12T13:30:26.579048Z', - customer_id: 'e2878b4c-d57e-4a2c-922d-c0313c2800a3', - description: null, - direct_bank_transfer: null, - direct_debit: { - bank_account: null, - channel_code: 'BRI', - channel_properties: { - card_expiry: '06/24', - card_last_four: '8888', - email: 'test.email@xendit.co', - mobile_number: '+62818555988', - }, - debit_card: { - card_expiry: '06/24', - card_last_four: '8888', - email: 'email@email.com', - mobile_number: '+62818555988', - }, - type: 'DEBIT_CARD', - }, - ewallet: null, - failure_code: null, - id: 'pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a', - metadata: null, - over_the_counter: null, - qr_code: null, - reference_id: '620b9df4-fe69-4bfd-b9d4-5cba6861db8a', - reusability: 'MULTIPLE_USE', - status: 'ACTIVE', - type: 'DIRECT_DEBIT', - updated: '2022-08-12T13:30:58.908220358Z', - virtual_account: null, -}; - -module.exports = { - CREATE_PAYMENT_RESPONSE, - CREATE_PAYMENT_MISSING_TYPE_RESPONSE, - LIST_PAYMENT_METHOD_RESPONSE, - PAYMENT_METHOD_AUTH_SUCCESS_RESPONSE, - GET_PAYMENT_METHOD_LIST_BY_ID_SUCCESS_RESPONSE, - UPDATE_PAYMENT_METHOD_SUCCESS_RESPONSE, - EXPIRE_PAYMENT_METHOD_SUCCESS_RESPONSE, - LIST_PAYMENTS_BY_PAYMENT_METHOD_ID_SUCCESS_RESPONSE, -}; diff --git a/test/payment_method_v2/payment_method_v2.test.js b/test/payment_method_v2/payment_method_v2.test.js deleted file mode 100644 index dff04ff..0000000 --- a/test/payment_method_v2/payment_method_v2.test.js +++ /dev/null @@ -1,162 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); -const Xendit = require('../../src/xendit'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -chai.use(chaiAsProm); - -const { PaymentMethodV2 } = x; -let p = new PaymentMethodV2({}); -beforeEach(function() { - p = new PaymentMethodV2({}); -}); -before(function() { - nock(x.opts.xenditURL) - .post('/v2/payment_methods', { - type: 'QR_CODE', - reusability: 'ONE_TIME_USE', - qr_code: { - channel_code: 'QRIS', - amount: 10000, - }, - }) - .reply(201, TestConstants.CREATE_PAYMENT_RESPONSE) - .get('/v2/payment_methods') - .reply(200, TestConstants.LIST_PAYMENT_METHOD_RESPONSE) - .post('/v2/payment_methods/pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a/auth') - .reply(200, TestConstants.PAYMENT_METHOD_AUTH_SUCCESS_RESPONSE) - .get('/v2/payment_methods/pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a') - .reply(200, TestConstants.GET_PAYMENT_METHOD_LIST_BY_ID_SUCCESS_RESPONSE) - .patch('/v2/payment_methods/pm-4c85fd2c-29da-4bc4-b642-064a42727d89') - .reply(200, TestConstants.UPDATE_PAYMENT_METHOD_SUCCESS_RESPONSE) - .post('/v2/payment_methods/pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a/expire') - .reply(200, TestConstants.EXPIRE_PAYMENT_METHOD_SUCCESS_RESPONSE) - .get( - '/v2/payment_methods/qrpy_0de1622b-677c-48c5-ac8c-ea1b9636c48f/payments', - ) - .reply( - 200, - TestConstants.LIST_PAYMENTS_BY_PAYMENT_METHOD_ID_SUCCESS_RESPONSE, - ); -}); - -describe('Payment Method V2 Service', () => { - describe('create payments', () => { - it('should get a response of payment created', done => { - expect( - p.createPaymentMethodV2({ - type: 'QR_CODE', - reusability: 'ONE_TIME_USE', - qr_code: { - channel_code: 'QRIS', - amount: 10000, - }, - }), - ) - .to.eventually.deep.equal(TestConstants.CREATE_PAYMENT_RESPONSE) - .and.notify(done); - }); - it('should reject with missing field', done => { - expect( - p.createPaymentMethodV2({ - reusability: 'ONE_TIME_USE', - qr_code: { - channel_code: 'QRIS', - amount: 10000, - }, - }), - ) - .to.eventually.deep.equal( - TestConstants.CREATE_PAYMENT_MISSING_TYPE_RESPONSE, - ) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - describe('list payments', () => { - it('should get a list of payment created', done => { - expect(p.listPaymentMethodV2({})) - .to.eventually.deep.equal(TestConstants.LIST_PAYMENT_METHOD_RESPONSE) - .and.notify(done); - }); - }); - describe('auth payments', () => { - it('should get a success response of payment authorized', done => { - expect( - p.authorizePaymentMethodV2({ - auth_code: '12345', - id: 'pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a', - }), - ) - .to.eventually.deep.equal( - TestConstants.PAYMENT_METHOD_AUTH_SUCCESS_RESPONSE, - ) - .and.notify(done); - }); - }); - describe('get payment method by id', () => { - it('should get a response of payment method by id', done => { - expect( - p.getPaymentMethodByIdV2({ - id: 'pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a', - }), - ) - .to.eventually.deep.equal( - TestConstants.PAYMENT_METHOD_AUTH_SUCCESS_RESPONSE, - ) - .and.notify(done); - }); - }); - describe('update payment method', () => { - it('should get a response of updated payment method by id', done => { - expect( - p.updatePaymentMethodV2({ - id: 'pm-4c85fd2c-29da-4bc4-b642-064a42727d89', - }), - ) - .to.eventually.deep.equal( - TestConstants.UPDATE_PAYMENT_METHOD_SUCCESS_RESPONSE, - ) - .and.notify(done); - }); - }); - describe('expire payment method', () => { - it('should get a response of expired payment method by id', done => { - expect( - p.expirePaymentMethodV2({ - id: 'pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a', - }), - ) - .to.eventually.deep.equal( - TestConstants.EXPIRE_PAYMENT_METHOD_SUCCESS_RESPONSE, - ) - .and.notify(done); - }); - }); - describe('list payments by payment method', () => { - it('should get a list of payments by payment method', done => { - expect( - p.listPaymentsByPaymentMethodIdV2({ - id: 'qrpy_0de1622b-677c-48c5-ac8c-ea1b9636c48f', - }), - ) - .to.eventually.deep.equal( - TestConstants.UPDATE_PAYMENT_METHOD_SUCCESS_RESPONSE, - ) - .and.notify(done); - }); - }); -}); diff --git a/test/payment_request/constants.js b/test/payment_request/constants.js deleted file mode 100644 index 4d08d90..0000000 --- a/test/payment_request/constants.js +++ /dev/null @@ -1,239 +0,0 @@ -const CREATE_PAYMENT_REQUEST_SUCCESS_RESPONSE = { - currency: 'IDR', - amount: 100000, - payment_method: { - id: 'pm-6d1c8be4-f4d9-421c-9f0b-dh4rm4', - type: 'EWALLET', - reusability: 'ONE_TIME_USE', - status: 'ACTIVE', - ewallet: { - channel_code: 'SHOPEEPAY', - channel_properties: { - success_return_url: 'https://your-redirect-website.com/success', - }, - }, - }, -}; - -const CREATE_PAYMENT_REQUEST_MISSING_AMOUNT_RESPONSE = { - error_code: 'API_VALIDATION_ERROR', - message: "amount required for 'EWALLET'", -}; - -const CONFIRM_PAYMENT_REQUEST_SUCCESS_RESPONSE = { - id: 'pr-6e9778ea-7d62-40fe-8b25-a4d740754c5f', - currency: 'PHP', - amount: 10000, - customer_id: 'e2878b4c-d57e-4a2c-922d-c0313c2800a3', - business_id: '5f27a14a9bf05c73dd040bc8', - status: 'PENDING', - reference_id: 'a2c66ceb-2cbe-4541-bb69-9f50fd2040e0', - payment_method: { - id: 'pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a', - card: null, - type: 'DIRECT_DEBIT', - status: 'ACTIVE', - actions: [], - country: 'PH', - ewallet: null, - qr_code: null, - metadata: null, - description: null, - reusability: 'MULTIPLE_USE', - direct_debit: { - type: 'BANK_ACCOUNT', - debit_card: null, - bank_account: { - bank_account_hash: 'b4dfa99c9b60c77f2e3962b73c098945', - masked_bank_account_number: 'XXXXXX1234', - }, - channel_code: 'BPI', - channel_properties: { - failure_return_url: 'https://your-redirect-website.com/failure', - success_return_url: 'https://your-redirect-website.com/success', - }, - }, - failure_code: null, - reference_id: '620b9df4-fe69-4bfd-b9d4-5cba6861db8a', - virtual_account: null, - over_the_counter: null, - billing_information: null, - direct_bank_transfer: null, - created: '2022-08-12T13:30:26.579048Z', - updated: '2022-08-12T13:30:58.908220358Z', - }, - channel_properties: null, - actions: [], - created: '2020-08-29T09:12:33.001Z', - updated: '2020-08-29T09:12:33.001Z', - metadata: { - sku: 'ABCDEFGH', - }, -}; - -const RESEND_PAYMENT_REQUEST_SUCCESS_RESPONSE = { - id: 'pr-6e9778ea-7d62-40fe-8b25-a4d740754c5f', - currency: 'PHP', - amount: 10000, - customer_id: 'e2878b4c-d57e-4a2c-922d-c0313c2800a3', - business_id: '5f27a14a9bf05c73dd040bc8', - status: 'PENDING', - reference_id: 'a2c66ceb-2cbe-4541-bb69-9f50fd2040e0', - payment_method: { - id: 'pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a', - card: null, - type: 'DIRECT_DEBIT', - status: 'ACTIVE', - actions: [], - country: 'PH', - ewallet: null, - qr_code: null, - metadata: null, - description: null, - reusability: 'MULTIPLE_USE', - direct_debit: { - type: 'BANK_ACCOUNT', - debit_card: null, - bank_account: { - bank_account_hash: 'b4dfa99c9b60c77f2e3962b73c098945', - masked_bank_account_number: 'XXXXXX1234', - }, - channel_code: 'BPI', - channel_properties: { - failure_return_url: 'https://your-redirect-website.com/failure', - success_return_url: 'https://your-redirect-website.com/success', - }, - }, - failure_code: null, - reference_id: '620b9df4-fe69-4bfd-b9d4-5cba6861db8a', - virtual_account: null, - over_the_counter: null, - billing_information: null, - direct_bank_transfer: null, - created: '2022-08-12T13:30:26.579048Z', - updated: '2022-08-12T13:30:58.908220358Z', - }, - channel_properties: null, - actions: [], - created: '2020-08-29T09:12:33.001Z', - updated: '2020-08-29T09:12:33.001Z', - metadata: { - sku: 'ABCDEFGH', - }, -}; - -const GET_PAYMENT_REQUEST_BY_ID_SUCCESS_RESPONSE = { - id: 'pr-6e9778ea-7d62-40fe-8b25-a4d740754c5f', - currency: 'PHP', - amount: 10000, - customer_id: 'e2878b4c-d57e-4a2c-922d-c0313c2800a3', - business_id: '5f27a14a9bf05c73dd040bc8', - status: 'PENDING', - reference_id: 'a2c66ceb-2cbe-4541-bb69-9f50fd2040e0', - payment_method: { - id: 'pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a', - card: null, - type: 'DIRECT_DEBIT', - status: 'ACTIVE', - actions: [], - country: 'PH', - ewallet: null, - qr_code: null, - metadata: null, - description: null, - reusability: 'MULTIPLE_USE', - direct_debit: { - type: 'BANK_ACCOUNT', - debit_card: null, - bank_account: { - bank_account_hash: 'b4dfa99c9b60c77f2e3962b73c098945', - masked_bank_account_number: 'XXXXXX1234', - }, - channel_code: 'BPI', - channel_properties: { - failure_return_url: 'https://your-redirect-website.com/failure', - success_return_url: 'https://your-redirect-website.com/success', - }, - }, - failure_code: null, - reference_id: '620b9df4-fe69-4bfd-b9d4-5cba6861db8a', - virtual_account: null, - over_the_counter: null, - billing_information: null, - direct_bank_transfer: null, - created: '2022-08-12T13:30:26.579048Z', - updated: '2022-08-12T13:30:58.908220358Z', - }, - channel_properties: null, - actions: [], - created: '2020-08-29T09:12:33.001Z', - updated: '2020-08-29T09:12:33.001Z', - metadata: { - sku: 'ABCDEFGH', - }, -}; - -const LIST_PAYMENT_REQUEST_SUCCESS_RESPONSE = { - data: [ - { - id: 'pr-6e9778ea-7d62-40fe-8b25-a4d740754c5f', - currency: 'PHP', - amount: 10000, - customer_id: 'e2878b4c-d57e-4a2c-922d-c0313c2800a3', - business_id: '5f27a14a9bf05c73dd040bc8', - status: 'SUCCEEDED', - reference_id: 'a2c66ceb-2cbe-4541-bb69-9f50fd2040e0', - payment_method: { - id: 'pm-6ff0b6f2-f5de-457f-b08f-bc98fbae485a', - card: null, - type: 'DIRECT_DEBIT', - status: 'ACTIVE', - actions: [], - country: 'PH', - ewallet: null, - qr_code: null, - metadata: null, - description: null, - reusability: 'MULTIPLE_USE', - direct_debit: { - type: 'BANK_ACCOUNT', - debit_card: null, - bank_account: { - bank_account_hash: 'b4dfa99c9b60c77f2e3962b73c098945', - masked_bank_account_number: 'XXXXXX1234', - }, - channel_code: 'BPI', - channel_properties: { - failure_return_url: 'https://your-redirect-website.com/failure', - success_return_url: 'https://your-redirect-website.com/success', - }, - }, - failure_code: null, - reference_id: '620b9df4-fe69-4bfd-b9d4-5cba6861db8a', - virtual_account: null, - over_the_counter: null, - billing_information: null, - direct_bank_transfer: null, - created: '2022-08-12T13:30:26.579048Z', - updated: '2022-08-12T13:30:58.908220358Z', - }, - channel_properties: null, - actions: [], - created: '2020-08-29T09:12:33.001Z', - updated: '2020-08-29T09:12:33.001Z', - metadata: { - sku: 'ABCDEFGH', - }, - }, - ], - has_more: false, -}; - -module.exports = { - CREATE_PAYMENT_REQUEST_SUCCESS_RESPONSE, - CREATE_PAYMENT_REQUEST_MISSING_AMOUNT_RESPONSE, - CONFIRM_PAYMENT_REQUEST_SUCCESS_RESPONSE, - RESEND_PAYMENT_REQUEST_SUCCESS_RESPONSE, - GET_PAYMENT_REQUEST_BY_ID_SUCCESS_RESPONSE, - LIST_PAYMENT_REQUEST_SUCCESS_RESPONSE, -}; diff --git a/test/payment_request/payment_request.test.js b/test/payment_request/payment_request.test.js deleted file mode 100644 index 5f2fd01..0000000 --- a/test/payment_request/payment_request.test.js +++ /dev/null @@ -1,156 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); -const Xendit = require('../../src/xendit'); -const { - CREATE_PAYMENT_REQUEST_SUCCESS_RESPONSE, - CREATE_PAYMENT_REQUEST_MISSING_AMOUNT_RESPONSE, - CONFIRM_PAYMENT_REQUEST_SUCCESS_RESPONSE, - RESEND_PAYMENT_REQUEST_SUCCESS_RESPONSE, - GET_PAYMENT_REQUEST_BY_ID_SUCCESS_RESPONSE, - LIST_PAYMENT_REQUEST_SUCCESS_RESPONSE, -} = require('./constants'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -chai.use(chaiAsProm); - -const { PaymentRequest } = x; -let pr = new PaymentRequest({}); -before(function() { - nock(x.opts.xenditURL) - .post('/payment_requests', { - currency: 'IDR', - amount: 100000, - payment_method: { - id: 'pm-6d1c8be4-f4d9-421c-9f0b-dh4rm4', - type: 'EWALLET', - reusability: 'ONE_TIME_USE', - status: 'ACTIVE', - ewallet: { - channel_code: 'SHOPEEPAY', - channel_properties: { - success_return_url: 'https://your-redirect-website.com/success', - }, - }, - }, - }) - .reply(201, CREATE_PAYMENT_REQUEST_SUCCESS_RESPONSE) - .post('/payment_requests/pr-6e9778ea-7d62-40fe-8b25-a4d740754c5f/auth') - .reply(200, CONFIRM_PAYMENT_REQUEST_SUCCESS_RESPONSE) - .post( - '/payment_requests/pr-6e9778ea-7d62-40fe-8b25-a4d740754c5f/auth/resend', - ) - .reply(200, RESEND_PAYMENT_REQUEST_SUCCESS_RESPONSE) - .get('/payment_requests/pr-6e9778ea-7d62-40fe-8b25-a4d740754c5f') - .reply(200, GET_PAYMENT_REQUEST_BY_ID_SUCCESS_RESPONSE) - .get('/payment_requests?type=DIRECT_DEBIT&status=SUCCESS') - .reply(200, LIST_PAYMENT_REQUEST_SUCCESS_RESPONSE); -}); - -describe('Payment Request Service', () => { - describe('create payments request', () => { - it('should get a response of payment request created', done => { - expect( - pr.createPaymentRequest({ - currency: 'IDR', - amount: 100000, - payment_method: { - id: 'pm-6d1c8be4-f4d9-421c-9f0b-dh4rm4', - type: 'EWALLET', - reusability: 'ONE_TIME_USE', - status: 'ACTIVE', - ewallet: { - channel_code: 'SHOPEEPAY', - channel_properties: { - success_return_url: 'https://your-redirect-website.com/success', - }, - }, - }, - }), - ) - .to.eventually.deep.equal(CREATE_PAYMENT_REQUEST_SUCCESS_RESPONSE) - .and.notify(done); - }); - it('should reject with missing field', done => { - expect( - pr.createPaymentRequest({ - currency: 'IDR', - payment_method: { - id: 'pm-6d1c8be4-f4d9-421c-9f0b-dh4rm4', - type: 'EWALLET', - reusability: 'ONE_TIME_USE', - status: 'ACTIVE', - ewallet: { - channel_code: 'SHOPEEPAY', - channel_properties: { - success_return_url: 'https://your-redirect-website.com/success', - }, - }, - }, - }), - ) - .to.eventually.deep.equal( - CREATE_PAYMENT_REQUEST_MISSING_AMOUNT_RESPONSE, - ) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - describe('confirm payments request', () => { - it('should get a response of payment request confirmed', done => { - expect( - pr.confirmPaymentRequest({ - id: 'pr-6e9778ea-7d62-40fe-8b25-a4d740754c5f', - auth_code: '1234', - }), - ) - .to.eventually.deep.equal(CONFIRM_PAYMENT_REQUEST_SUCCESS_RESPONSE) - .and.notify(done); - }); - }); - describe('resend payments request', () => { - it('should get a response of payment request confirmed', done => { - expect( - pr.resendAuthForPaymentRequest({ - id: 'pr-6e9778ea-7d62-40fe-8b25-a4d740754c5f', - }), - ) - .to.eventually.deep.equal(RESEND_PAYMENT_REQUEST_SUCCESS_RESPONSE) - .and.notify(done); - }); - }); - describe('get payments request by id', () => { - it('should get a response of payment request by id', done => { - expect( - pr.getPaymentRequestById({ - id: 'pr-6e9778ea-7d62-40fe-8b25-a4d740754c5f', - }), - ) - .to.eventually.deep.equal(GET_PAYMENT_REQUEST_BY_ID_SUCCESS_RESPONSE) - .and.notify(done); - }); - }); - describe('list payments request by id', () => { - it('should get a list of payment request', done => { - expect( - pr.listPaymentRequest({ - type: 'DIRECT_DEBIT', - status: 'SUCCESS', - }), - ) - .to.eventually.deep.equal(LIST_PAYMENT_REQUEST_SUCCESS_RESPONSE) - .and.notify(done); - }); - }); -}); diff --git a/test/payout/constants.js b/test/payout/constants.js deleted file mode 100644 index d4dab32..0000000 --- a/test/payout/constants.js +++ /dev/null @@ -1,18 +0,0 @@ -const EXT_ID = '123'; -const PAYOUT_ID = '34a2fcb6-37d8-4c11-b2dc-c46615662f23'; -const AMOUNT = 10000; -const VALID_PAYOUT = { - id: PAYOUT_ID, - external_id: EXT_ID, - amount: AMOUNT, - passcode: '123456', -}; -const EMAIL = 'example@example.com'; - -module.exports = { - EXT_ID, - PAYOUT_ID, - AMOUNT, - VALID_PAYOUT, - EMAIL, -}; diff --git a/test/payout/payout.test.js b/test/payout/payout.test.js deleted file mode 100644 index 28edcd9..0000000 --- a/test/payout/payout.test.js +++ /dev/null @@ -1,100 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); -const Xendit = require('../../src/xendit'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -chai.use(chaiAsProm); - -const { Payout } = x; -let p = new Payout({}); -beforeEach(function() { - p = new Payout({}); -}); -before(function() { - nock(p.API_ENDPOINT) - .post('/', { - external_id: TestConstants.EXT_ID, - amount: TestConstants.AMOUNT, - email: TestConstants.EMAIL, - }) - .reply(201, TestConstants.VALID_PAYOUT) - .get(`/${TestConstants.PAYOUT_ID}`) - .reply(200, TestConstants.VALID_PAYOUT) - .post(`/${TestConstants.PAYOUT_ID}/void`) - .reply(200, TestConstants.VALID_PAYOUT); -}); - -describe('Payout Service', () => { - describe('createPayout', () => { - it('should create a payout', done => { - expect( - p.createPayout({ - externalID: TestConstants.EXT_ID, - amount: TestConstants.AMOUNT, - email: TestConstants.EMAIL, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_PAYOUT) - .and.notify(done); - }); - - it('should report missing required fields', done => { - expect(p.createPayout({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getPayout', () => { - it('should retrieve payout details', done => { - expect(p.getPayout({ id: TestConstants.PAYOUT_ID })) - .to.eventually.deep.equal(TestConstants.VALID_PAYOUT) - .and.notify(done); - }); - - it('should report missing required fields', done => { - expect(p.getPayout({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('voidPayout', () => { - it('should void a payout', done => { - expect(p.voidPayout({ id: TestConstants.PAYOUT_ID })) - .to.eventually.deep.equal(TestConstants.VALID_PAYOUT) - .and.notify(done); - }); - - it('should report missing required fields', done => { - expect(p.voidPayout({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}); diff --git a/test/platform/constants.js b/test/platform/constants.js deleted file mode 100644 index 7ff2c5d..0000000 --- a/test/platform/constants.js +++ /dev/null @@ -1,129 +0,0 @@ -const ACCOUNT_EMAIL = 'angie@pinkpanther.com'; -const ID = '61fb6d4d92b2ff75d2b45059'; -const BUSINESS_NAME = 'angies pink panther'; -const UPDATED_EMAIL = 'angie_updated@pinkpanther.com'; -const UPDATED_BUSINESS_NAME = 'angies updated pink panther'; -const TYPE = 'MANAGED'; -const URL = 'https://www.xendit.co/callback_catcher'; -const CALLBACK_TYPE = 'invoice'; -const REFERENCE = 'transfer001'; -const SOURCE_USER_ID = '54afeb170a2b18519b1b8768'; -const DESTINATION_USER_ID = '5cafeb170a2b1851246b8768'; -const AMOUNT = 10000; -const FEE_NAME = 'Standard platform fee'; -const ROUTES = [ - { - unit: 'flat', - amount: 3000, - currency: 'IDR', - }, -]; - -const PUBLIC_PROFILE = { - business_name: BUSINESS_NAME, -}; - -const UPDATED_PUBLIC_PROFILE = { - business_name: UPDATED_BUSINESS_NAME, -}; - -const VALID_CREATE_ACCOUNT_RESPONSE = { - created: '2019-01-01T08:51:44.484Z', - status: 'SUCCESSFUL', - account_email: ACCOUNT_EMAIL, - user_id: '57fb4e076fb3fa296b7f5a17', - type: TYPE, -}; - -const VALID_SET_CALLBACK_URL_RESPONSE = { - status: 'SUCCESSFUL', - user_id: '5e6b30d967627b957de8c123', - url: URL, - environment: 'TEST', - callback_token: - '66a6680348e1c33ed2b9053a8eb9291b9e2230ff4f4d3057c9f4ac26405d2123', -}; - -const VALID_CREATE_TRANSFER_RESPONSE = { - created: '2020-01-01T08:51:44.484Z', - transfer_id: '60b9d810-d9a3-456c-abbf-2786ec7a9651', - reference: REFERENCE, - source_user_id: SOURCE_USER_ID, - destination_user_id: DESTINATION_USER_ID, - status: 'SUCCESSFUL', - amount: AMOUNT, -}; - -const VALID_CREATE_FEE_RULE_RESPONSE = { - id: 'xpfeeru_d9e069f2-4da7-4562-93b7-ded87023d749', - name: FEE_NAME, - routes: ROUTES, - created: '2020-09-01T07:00:00.007Z', - updated: '2020-09-01T07:00:00.007Z', - metadata: {}, -}; - -const VALID_CREATE_V2_ACCOUNT_RESPONSE = { - id: ID, - created: '2022-02-01T07:00:00.000Z', - updated: '2022-02-01T07:00:00.000Z', - email: ACCOUNT_EMAIL, - type: TYPE, - public_profile: { - business_name: BUSINESS_NAME, - }, - country: 'ID', - status: 'REGISTERED', -}; - -const VALID_GET_ACCOUNT_RESPONSE = { - id: ID, - created: '2022-02-01T07:00:00.000Z', - updated: '2022-02-01T07:00:00.000Z', - email: ACCOUNT_EMAIL, - type: TYPE, - public_profile: { - business_name: BUSINESS_NAME, - }, - country: 'ID', - status: 'REGISTERED', -}; - -const VALID_UPDATE_ACCOUNT_RESPONSE = { - id: ID, - created: '2022-02-01T07:00:00.000Z', - updated: '2022-02-01T07:00:00.000Z', - email: UPDATED_EMAIL, - type: TYPE, - public_profile: { - business_name: UPDATED_BUSINESS_NAME, - }, - country: 'ID', - status: 'REGISTERED', -}; - -module.exports = { - ID, - ACCOUNT_EMAIL, - TYPE, - UPDATED_EMAIL, - BUSINESS_NAME, - UPDATED_BUSINESS_NAME, - PUBLIC_PROFILE, - UPDATED_PUBLIC_PROFILE, - URL, - CALLBACK_TYPE, - REFERENCE, - SOURCE_USER_ID, - DESTINATION_USER_ID, - AMOUNT, - FEE_NAME, - ROUTES, - VALID_CREATE_ACCOUNT_RESPONSE, - VALID_SET_CALLBACK_URL_RESPONSE, - VALID_CREATE_TRANSFER_RESPONSE, - VALID_CREATE_FEE_RULE_RESPONSE, - VALID_CREATE_V2_ACCOUNT_RESPONSE, - VALID_GET_ACCOUNT_RESPONSE, - VALID_UPDATE_ACCOUNT_RESPONSE, -}; diff --git a/test/platform/platform.test.js b/test/platform/platform.test.js deleted file mode 100644 index 034fa64..0000000 --- a/test/platform/platform.test.js +++ /dev/null @@ -1,240 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); -const Xendit = require('../../src/xendit'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -chai.use(chaiAsProm); - -const { Platform } = x; -let platform = new Platform({}); -beforeEach(function() { - platform = new Platform({}); -}); -before(function() { - nock(x.opts.xenditURL) - .post('/accounts', { - account_email: TestConstants.ACCOUNT_EMAIL, - type: TestConstants.TYPE, - }) - .reply(200, TestConstants.VALID_CREATE_ACCOUNT_RESPONSE); - nock(x.opts.xenditURL) - .post(`/callback_urls/${TestConstants.CALLBACK_TYPE}`, { - url: TestConstants.URL, - }) - .reply(200, TestConstants.VALID_SET_CALLBACK_URL_RESPONSE); - nock(x.opts.xenditURL) - .post('/transfers', { - reference: TestConstants.REFERENCE, - amount: TestConstants.AMOUNT, - source_user_id: TestConstants.SOURCE_USER_ID, - destination_user_id: TestConstants.DESTINATION_USER_ID, - }) - .reply(200, TestConstants.VALID_CREATE_TRANSFER_RESPONSE); - nock(x.opts.xenditURL) - .post('/fee_rules', { - name: TestConstants.FEE_NAME, - routes: TestConstants.ROUTES, - }) - .reply(200, TestConstants.VALID_CREATE_FEE_RULE_RESPONSE); - nock(x.opts.xenditURL) - .post('/v2/accounts', { - email: TestConstants.ACCOUNT_EMAIL, - type: TestConstants.TYPE, - public_profile: TestConstants.PUBLIC_PROFILE, - }) - .reply(200, TestConstants.VALID_CREATE_V2_ACCOUNT_RESPONSE); - nock(x.opts.xenditURL) - .get(`/v2/accounts/${TestConstants.ID}`) - .reply(200, TestConstants.VALID_GET_ACCOUNT_RESPONSE); - nock(x.opts.xenditURL) - .patch(`/v2/accounts/${TestConstants.ID}`, { - email: TestConstants.UPDATED_EMAIL, - public_profile: TestConstants.UPDATED_PUBLIC_PROFILE, - }) - .reply(200, TestConstants.VALID_UPDATE_ACCOUNT_RESPONSE); -}); - -describe('Platform Service', function() { - describe('createAccount', () => { - it('should create a sub-account', done => { - expect( - platform.createAccount({ - accountEmail: TestConstants.ACCOUNT_EMAIL, - type: TestConstants.TYPE, - }), - ) - .to.eventually.deep.eq(TestConstants.VALID_CREATE_ACCOUNT_RESPONSE) - .then(() => done()) - .catch(done); - }); - it('should report missing required fields', done => { - expect(platform.createAccount({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(done); - }); - }); - describe('createV2Account', () => { - it('should create a sub-account using the V2 endpoint', done => { - expect( - platform.createV2Account({ - email: TestConstants.ACCOUNT_EMAIL, - type: TestConstants.TYPE, - publicProfile: { - businessName: TestConstants.BUSINESS_NAME, - }, - }), - ) - .to.eventually.deep.eq(TestConstants.VALID_CREATE_V2_ACCOUNT_RESPONSE) - .then(() => done()) - .catch(done); - }); - it('should report missing required fields', done => { - expect(platform.createV2Account({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(done); - }); - }); - describe('getAccountByID', () => { - it('should get a sub-account using the V2 endpoint', done => { - expect( - platform.getAccountByID({ - id: TestConstants.ID, - }), - ) - .to.eventually.deep.eq(TestConstants.VALID_GET_ACCOUNT_RESPONSE) - .then(() => done()) - .catch(done); - }); - it('should report missing required fields', done => { - expect(platform.getAccountByID({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(done); - }); - }); - describe('updateAccount', () => { - it('should update a sub-account using the V2 endpoint', done => { - expect( - platform.updateAccount({ - id: TestConstants.ID, - email: TestConstants.UPDATED_EMAIL, - publicProfile: { - businessName: TestConstants.UPDATED_BUSINESS_NAME, - }, - }), - ) - .to.eventually.deep.eq(TestConstants.VALID_UPDATE_ACCOUNT_RESPONSE) - .then(() => done()) - .catch(done); - }); - it('should report missing required fields', done => { - expect(platform.updateAccount({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(done); - }); - }); - describe('setCallbackURL', () => { - it('should set callback URL of an account', done => { - expect( - platform.setCallbackURL({ - type: TestConstants.CALLBACK_TYPE, - url: TestConstants.URL, - }), - ) - .to.eventually.deep.eq(TestConstants.VALID_SET_CALLBACK_URL_RESPONSE) - .then(() => done()) - .catch(done); - }); - it('should report missing required fields', done => { - expect(platform.setCallbackURL({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(done); - }); - }); - describe('createTransfer', () => { - it('should create a transfer', done => { - expect( - platform.createTransfer({ - reference: TestConstants.REFERENCE, - amount: TestConstants.AMOUNT, - sourceUserID: TestConstants.SOURCE_USER_ID, - destinationUserID: TestConstants.DESTINATION_USER_ID, - }), - ) - .to.eventually.deep.eq(TestConstants.VALID_CREATE_TRANSFER_RESPONSE) - .then(() => done()) - .catch(done); - }); - it('should report missing required fields', done => { - expect(platform.createTransfer({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(done); - }); - }); - describe('createFeeRule', () => { - it('should create a fee rule', done => { - expect( - platform.createFeeRule({ - name: TestConstants.FEE_NAME, - routes: TestConstants.ROUTES, - }), - ) - .to.eventually.deep.eq(TestConstants.VALID_CREATE_FEE_RULE_RESPONSE) - .then(() => done()) - .catch(done); - }); - it('should report missing required fields', done => { - expect(platform.createFeeRule({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(done); - }); - }); -}); diff --git a/test/qr_code/constants.js b/test/qr_code/constants.js deleted file mode 100644 index e26cad7..0000000 --- a/test/qr_code/constants.js +++ /dev/null @@ -1,48 +0,0 @@ -const EXT_ID = 'qris_merchant_reference_id'; -const TYPE = 'DYNAMIC'; -const AMOUNT = 10000; -const CALLBACK_URL = 'https://yourwebsite.com/callback'; -const VALID_CREATE_CODE_RESPONSE = { - id: 'qr_8182837te-87st-49ing-8696-1239bd4d759c', - external_id: EXT_ID, - amount: AMOUNT, - qr_string: - '0002010102##########CO.XENDIT.WWW011893600#######14220002152#####414220' + - '010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045######ID5' + - '911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h11111111#3k1mOnF73' + - 'h6v53033605401163040BDB', - merchant_callback_url: CALLBACK_URL, - type: TYPE, - status: 'ACTIVE', - metadata: null, - created: '2020-01-08T18:18:18.661Z', - updated: '2020-01-08T18:18:18.661Z', -}; -const VALID_PAYMENT = { - id: 'qrpy_8182837te-87st-49ing-8696-1239bd4d759c', - amount: AMOUNT, - created: '2020-01-08T18:18:18.857Z', - qr_code: { - id: 'qr_8182837te-87st-49ing-8696-1239bd4d759c', - external_id: EXT_ID, - qr_string: - '0002010102##########CO.XENDIT.WWW011893600#######14220002152#####4' + - '14220010303TTT####015CO.XENDIT.WWW02180000000000000000000TTT52045##' + - '####ID5911XenditQRIS6007Jakarta6105121606##########3k1mOnF73h111111' + - '11#3k1mOnF73h6v53033605401163040BDB', - type: TYPE, - }, - status: 'COMPLETED', - metadata: null, -}; -const VALID_PAYMENT_ARRAY = [VALID_PAYMENT, VALID_PAYMENT]; - -module.exports = { - EXT_ID, - TYPE, - AMOUNT, - CALLBACK_URL, - VALID_CREATE_CODE_RESPONSE, - VALID_PAYMENT, - VALID_PAYMENT_ARRAY, -}; diff --git a/test/qr_code/qr_code.test.js b/test/qr_code/qr_code.test.js deleted file mode 100644 index de3036b..0000000 --- a/test/qr_code/qr_code.test.js +++ /dev/null @@ -1,123 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); -const Xendit = require('../../src/xendit'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -chai.use(chaiAsProm); - -const { QrCode } = x; -let qrcode = new QrCode({}); -beforeEach(function() { - qrcode = new QrCode({}); -}); -before(function() { - nock(qrcode.API_ENDPOINT) - .post('/', { - external_id: TestConstants.EXT_ID, - amount: TestConstants.AMOUNT, - callback_url: TestConstants.CALLBACK_URL, - type: TestConstants.TYPE, - }) - .reply(200, TestConstants.VALID_CREATE_CODE_RESPONSE); - nock(qrcode.API_ENDPOINT) - .get(`/${TestConstants.EXT_ID}`) - .reply(200, TestConstants.VALID_CREATE_CODE_RESPONSE); - nock(qrcode.API_ENDPOINT) - .post(`/${TestConstants.EXT_ID}/payments/simulate`) - .reply(200, TestConstants.VALID_PAYMENT); - nock(qrcode.API_ENDPOINT) - .get(`/payments?external_id=${TestConstants.EXT_ID}`) - .reply(200, TestConstants.VALID_PAYMENT_ARRAY); -}); - -describe('QrCode Service', function() { - describe('creatCode', () => { - it('should create a QR code', done => { - expect( - qrcode.createCode({ - externalID: TestConstants.EXT_ID, - type: TestConstants.TYPE, - callbackURL: TestConstants.CALLBACK_URL, - amount: TestConstants.AMOUNT, - }), - ) - .to.eventually.deep.equal(TestConstants.VALID_CREATE_CODE_RESPONSE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(qrcode.createCode({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getCode', () => { - it('should get a QR code', done => { - expect(qrcode.getCode({ externalID: TestConstants.EXT_ID })) - .to.eventually.deep.equal(TestConstants.VALID_CREATE_CODE_RESPONSE) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(qrcode.getCode({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('simulate', () => { - it('should simulate a payment', done => { - expect(qrcode.simulate({ externalID: TestConstants.EXT_ID })) - .to.eventually.deep.equal(TestConstants.VALID_PAYMENT) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(qrcode.simulate({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getPaymentsByExternalID', () => { - it('should get list of payments', done => { - expect(qrcode.getPayments({ externalID: TestConstants.EXT_ID })) - .to.eventually.deep.equal(TestConstants.VALID_PAYMENT_ARRAY) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(qrcode.getPayments({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}); diff --git a/test/recurring/constants.js b/test/recurring/constants.js deleted file mode 100644 index 56120b2..0000000 --- a/test/recurring/constants.js +++ /dev/null @@ -1,137 +0,0 @@ -const REF_ID = 'ref-123'; -const BUSINESS_ID = 'fake-BID'; -const CUSTOMER_ID = 'cust-123'; -const CURRENCY = 'IDR'; -const EXT_ID = '123'; -const PAYER_EMAIL = 'dummy@email.co'; -const DESCRIPTION = 'Payment for something'; -const AMOUNT = 10000; -const INTERVAL = 'MONTH'; -const INTERVAL_COUNT = 1; -const PAYMENT_ID = '5e0577bdf4d38b20d542009b'; -const SCHEDULE_ID = '5e0577bdf4d38b20d542009b'; -const ANCHOR_DATE = new Date().toISOString(); -const START_DATE = '2020-01-31T17:00:00.000Z'; -const UPDATE_SCHEDULED_CYCLE = 'false'; -const CUSTOMER = { - given_names: 'stan', - email: 'dummy@email.co', - mobile_number: '', - address: '', -}; -const PAYMENT_METHOD_ID = 'pm-123'; -const UPDATED_AMOUNT = 20000; - -const SCHEDULE_DETAILS = { - reference_id: REF_ID, - interval: INTERVAL, - business_id: BUSINESS_ID, - interval_count: INTERVAL_COUNT, - total_recurrence: INTERVAL_COUNT + 2, - anchor_date: ANCHOR_DATE, - retry_interval: INTERVAL, - retry_interval_count: INTERVAL_COUNT, - total_retry: INTERVAL_COUNT, - failed_attempt_notifications: [INTERVAL_COUNT], -}; - -const UPDATED_SCHEDULE_DETAILS = Object.assign({}, SCHEDULE_DETAILS, { - interval_count: INTERVAL_COUNT + 1, -}); - -const PLAN_ID = 'repl-123'; - -const PLAN_DETAILS = { - id: PLAN_ID, - reference_id: REF_ID, - business_id: BUSINESS_ID, - customer_id: CUSTOMER_ID, - recurring_action: 'PAYMENT', - recurring_cycle_count: 0, - currency: 'IDR', - amount: 1000, - status: 'SUCCEEDED', - created: new Date().toISOString(), - updated: new Date().toISOString(), - schedule_id: SCHEDULE_ID, - payment_methods: [], - immediate_action_type: 'FULL_AMOUNT', - notification_config: { - recurring_created: ['email'], - recurring_succeeded: ['sms'], - recurring_failed: ['whatsapp'], - }, - failed_cycle_action: 'RESUME', - metadata: { foo: 'bar' }, - description: 'baz', -}; - -const UPDATED_PLAN_DETAILS = Object.assign({}, PLAN_DETAILS, { - amount: UPDATED_AMOUNT, -}); - -const CYCLE_ID = 'recy-1234'; -const SCHEDULED_TIMESTAMP = new Date(Date.now() + 60 * 1000).toISOString(); -const CYCLE_DETAILS = { - id: CYCLE_ID, - type: 'IMMEDIATE', - reference_id: REF_ID, - plan_id: PLAN_ID, - customer_id: CUSTOMER_ID, - recurring_action: 'PAYMENT', - attempt_count: 1, - cycle_number: 1, - attempt_details: [], - status: 'PENDING', - scheduled_timestamp: new Date().toISOString(), - created: new Date().toISOString(), - updated: new Date().toISOString(), - currency: CURRENCY, - amount: AMOUNT, - metadata: { foo: 'bar' }, -}; - -const UPDATED_CYCLE_DETAILS = Object.assign({}, CYCLE_DETAILS, { - amount: UPDATED_AMOUNT, -}); - -const CYCLES_FILTER = { - limit: 10, - afterId: 'recy-987', - beforeId: 'recy-087', - search_type_id: 'id', - search_type_reference_id: 'reference_id', - search_value_id: CYCLE_ID, - search_value_reference_id: REF_ID, -}; - -module.exports = { - CUSTOMER_ID, - CURRENCY, - PLAN_DETAILS, - PLAN_ID, - EXT_ID, - PAYER_EMAIL, - DESCRIPTION, - AMOUNT, - INTERVAL, - INTERVAL_COUNT, - PAYMENT_ID, - PAYMENT_METHOD_ID, - START_DATE, - UPDATED_AMOUNT, - UPDATED_PLAN_DETAILS, - CUSTOMER, - REF_ID, - BUSINESS_ID, - SCHEDULE_ID, - ANCHOR_DATE, - SCHEDULE_DETAILS, - UPDATED_SCHEDULE_DETAILS, - CYCLE_ID, - CYCLE_DETAILS, - SCHEDULED_TIMESTAMP, - UPDATED_CYCLE_DETAILS, - UPDATE_SCHEDULED_CYCLE, - CYCLES_FILTER, -}; diff --git a/test/recurring/recurring.test.js b/test/recurring/recurring.test.js deleted file mode 100644 index 06980bd..0000000 --- a/test/recurring/recurring.test.js +++ /dev/null @@ -1,16 +0,0 @@ -process.env.NODE_ENV = 'test'; - -const Xendit = require('../../src/xendit'); -const recurringPlansTest = require('./recurring_plan.test'); -const recurringScheduleTest = require('./recurring_schedule.test'); -const recurringCycleTest = require('./recurring_cycle.test'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -describe('Recurring Service', function() { - recurringPlansTest(x); - recurringScheduleTest(x); - recurringCycleTest(x); -}); diff --git a/test/recurring/recurring_cycle.test.js b/test/recurring/recurring_cycle.test.js deleted file mode 100644 index 9ce97d5..0000000 --- a/test/recurring/recurring_cycle.test.js +++ /dev/null @@ -1,194 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { Recurring } = x; - let rp = new Recurring({}); - beforeEach(function() { - rp = new Recurring({}); - }); - before(function() { - nock(rp.API_ENDPOINT_PLANS) - .matchHeader('business-id', TestConstants.BUSINESS_ID) - .get(`/${TestConstants.PLAN_ID}/cycles/${TestConstants.CYCLE_ID}`) - .reply(200, TestConstants.CYCLE_DETAILS); - nock(rp.API_ENDPOINT_PLANS) - .matchHeader('business-id', TestConstants.BUSINESS_ID) - .get( - // eslint-disable-next-line max-len - `/${TestConstants.PLAN_ID}/cycles?limit=${TestConstants.CYCLES_FILTER.limit}&before_id=${TestConstants.CYCLES_FILTER.beforeId}&after_id=${TestConstants.CYCLES_FILTER.afterId}`, - ) - .reply(200, [TestConstants.CYCLE_DETAILS]); - nock(rp.API_ENDPOINT_PLANS) - .matchHeader('business-id', TestConstants.BUSINESS_ID) - .get( - // eslint-disable-next-line max-len - `/${TestConstants.PLAN_ID}/cycles?search_type=${TestConstants.CYCLES_FILTER.search_type_id}&search_value=${TestConstants.CYCLES_FILTER.search_value_id}`, - ) - .reply(200, [TestConstants.CYCLE_DETAILS]); - nock(rp.API_ENDPOINT_PLANS) - .matchHeader('business-id', TestConstants.BUSINESS_ID) - .get( - // eslint-disable-next-line max-len - `/${TestConstants.PLAN_ID}/cycles?search_type=${TestConstants.CYCLES_FILTER.search_type_reference_id}&search_value=${TestConstants.CYCLES_FILTER.search_value_reference_id}`, - ) - .reply(200, [TestConstants.CYCLE_DETAILS]); - nock(rp.API_ENDPOINT_PLANS) - .matchHeader('business-id', TestConstants.BUSINESS_ID) - .patch(`/${TestConstants.PLAN_ID}/cycles/${TestConstants.CYCLE_ID}`, { - scheduled_timestamp: TestConstants.SCHEDULED_TIMESTAMP, - currency: TestConstants.CURRENCY, - amount: TestConstants.UPDATED_AMOUNT, - metadata: { foo: 'bar' }, - }) - .reply(200, TestConstants.UPDATED_CYCLE_DETAILS); - nock(rp.API_ENDPOINT_PLANS) - .matchHeader('business-id', TestConstants.BUSINESS_ID) - .post(`/${TestConstants.PLAN_ID}/cycles/${TestConstants.CYCLE_ID}/cancel`) - .reply(200, TestConstants.CYCLE_DETAILS); - }); - - describe('getCycle', () => { - it('should be able to retrieve cycle details', done => { - expect( - rp.getCycle({ - id: TestConstants.CYCLE_ID, - planId: TestConstants.PLAN_ID, - businessId: TestConstants.BUSINESS_ID, - }), - ) - .to.eventually.deep.equal(TestConstants.CYCLE_DETAILS) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(rp.getCycle({ id: TestConstants.CYCLE_ID })) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e.status).to.eq(400), - expect(e.code).to.eq(Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getAllCycles', () => { - it('should be able to retrieve cycles list', done => { - expect( - rp.getAllCycles({ - id: TestConstants.CYCLE_ID, - businessId: TestConstants.BUSINESS_ID, - planId: TestConstants.PLAN_ID, - limit: TestConstants.CYCLES_FILTER.limit, - beforeId: TestConstants.CYCLES_FILTER.beforeId, - afterId: TestConstants.CYCLES_FILTER.afterId, - }), - ) - .to.eventually.deep.equal([TestConstants.CYCLE_DETAILS]) - .and.notify(done); - }); - it('should be able to search cycles by id', done => { - expect( - rp.getAllCycles({ - id: TestConstants.CYCLE_ID, - businessId: TestConstants.BUSINESS_ID, - planId: TestConstants.PLAN_ID, - searchType: TestConstants.CYCLES_FILTER.search_type_id, - searchValue: TestConstants.CYCLES_FILTER.search_value_id, - }), - ) - .to.eventually.deep.equal([TestConstants.CYCLE_DETAILS]) - .and.notify(done); - }); - it('should be able to search cycles by reference_id', done => { - expect( - rp.getAllCycles({ - id: TestConstants.CYCLE_ID, - businessId: TestConstants.BUSINESS_ID, - planId: TestConstants.PLAN_ID, - searchType: TestConstants.CYCLES_FILTER.search_type_reference_id, - searchValue: TestConstants.CYCLES_FILTER.search_value_reference_id, - }), - ) - .to.eventually.deep.equal([TestConstants.CYCLE_DETAILS]) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(rp.getPlan({ id: TestConstants.CYCLE_ID })) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e.status).to.eq(400), - expect(e.code).to.eq(Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('cancelCycle', () => { - it('should be able to cancel cycle', done => { - expect( - rp.cancelCycle({ - id: TestConstants.CYCLE_ID, - planId: TestConstants.PLAN_ID, - businessId: TestConstants.BUSINESS_ID, - }), - ) - .to.eventually.deep.equal(TestConstants.CYCLE_DETAILS) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect( - rp.cancelCycle({ - id: TestConstants.CYCLE_ID, - businessId: TestConstants.BUSINESS_ID, - }), - ) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e.status).to.eq(400), - expect(e.code).to.eq(Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('editCycle', () => { - it('should be able to update cycle details', done => { - expect( - rp.editCycle({ - id: TestConstants.CYCLE_ID, - planId: TestConstants.PLAN_ID, - businessId: TestConstants.BUSINESS_ID, - scheduledTimestamp: TestConstants.SCHEDULED_TIMESTAMP, - currency: TestConstants.CURRENCY, - amount: TestConstants.UPDATED_AMOUNT, - metadata: { foo: 'bar' }, - }), - ) - .to.eventually.deep.equal(TestConstants.UPDATED_CYCLE_DETAILS) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(rp.editCycle({ id: TestConstants.CYCLE_ID })) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e.status).to.eq(400), - expect(e.code).to.eq(Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/recurring/recurring_plan.test.js b/test/recurring/recurring_plan.test.js deleted file mode 100644 index 346bcbd..0000000 --- a/test/recurring/recurring_plan.test.js +++ /dev/null @@ -1,216 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { Recurring } = x; - let rp = new Recurring({}); - beforeEach(function() { - rp = new Recurring({}); - }); - before(function() { - nock(rp.API_ENDPOINT_PLANS) - .matchHeader('business-id', TestConstants.BUSINESS_ID) - .post('/', { - reference_id: TestConstants.REF_ID, - customer_id: TestConstants.CUSTOMER_ID, - recurring_action: Recurring.recurringAction.payment, - currency: TestConstants.CURRENCY, - amount: TestConstants.AMOUNT, - payment_methods: [ - { payment_method_id: TestConstants.PAYMENT_METHOD_ID, rank: 1 }, - ], - schedule_id: 'sch-123', - immediate_action_type: Recurring.immediateActionType.fullAmount, - notification_config: { - recurring_created: [Recurring.notificationChannel.email], - recurring_succeeded: [Recurring.notificationChannel.sms], - recurring_failed: [Recurring.notificationChannel.whatsapp], - locale: Recurring.locale.en, - }, - failed_cycle_action: Recurring.failedCycleAction.resume, - metadata: { foo: 'bar' }, - description: 'baz', - }) - .reply(201, TestConstants.PLAN_DETAILS); - nock(rp.API_ENDPOINT_PLANS) - .matchHeader('business-id', TestConstants.BUSINESS_ID) - .post('/', { - reference_id: TestConstants.REF_ID, - customer_id: TestConstants.CUSTOMER_ID, - recurring_action: Recurring.recurringAction.payment, - currency: TestConstants.CURRENCY, - amount: TestConstants.AMOUNT, - payment_methods: [ - { payment_method_id: TestConstants.PAYMENT_METHOD_ID, rank: 1 }, - ], - schedule: { - reference_id: `schedule-${TestConstants.REF_ID}`, - interval: TestConstants.INTERVAL, - interval_count: TestConstants.INTERVAL_COUNT, - }, - }) - .reply(201, TestConstants.PLAN_DETAILS); - nock(rp.API_ENDPOINT_PLANS) - .matchHeader('business-id', TestConstants.BUSINESS_ID) - .get(`/${TestConstants.PLAN_ID}`) - .reply(200, TestConstants.PLAN_DETAILS); - nock(rp.API_ENDPOINT_PLANS) - .matchHeader('business-id', TestConstants.BUSINESS_ID) - .matchHeader( - 'update-scheduled-cycle', - TestConstants.UPDATE_SCHEDULED_CYCLE, - ) - .patch(`/${TestConstants.PLAN_ID}`, { - amount: TestConstants.UPDATED_AMOUNT, - }) - .reply(200, TestConstants.UPDATED_PLAN_DETAILS); - nock(rp.API_ENDPOINT_PLANS) - .matchHeader('business-id', TestConstants.BUSINESS_ID) - .post(`/${TestConstants.PLAN_ID}/deactivate`) - .reply(200, TestConstants.PLAN_DETAILS); - }); - - describe('createPlan', () => { - it('should create a recurring plan with schedule_id', done => { - expect( - rp.createPlan({ - referenceId: TestConstants.REF_ID, - businessId: TestConstants.BUSINESS_ID, - customerId: TestConstants.CUSTOMER_ID, - recurringAction: Recurring.recurringAction.payment, - currency: TestConstants.CURRENCY, - amount: TestConstants.AMOUNT, - paymentMethods: [ - { paymentMethodId: TestConstants.PAYMENT_METHOD_ID, rank: 1 }, - ], - scheduleId: 'sch-123', - immediateActionType: Recurring.immediateActionType.fullAmount, - notificationConfig: { - recurringCreated: [Recurring.notificationChannel.email], - recurringSucceeded: [Recurring.notificationChannel.sms], - recurringFailed: [Recurring.notificationChannel.whatsapp], - locale: Recurring.locale.en, - }, - failedCycleAction: Recurring.failedCycleAction.resume, - metadata: { foo: 'bar' }, - description: 'baz', - }), - ) - .to.eventually.deep.equal(TestConstants.PLAN_DETAILS) - .and.notify(done); - }); - it('should create a recurring plan with schedule', done => { - expect( - rp.createPlan({ - referenceId: TestConstants.REF_ID, - businessId: TestConstants.BUSINESS_ID, - customerId: TestConstants.CUSTOMER_ID, - recurringAction: Recurring.recurringAction.payment, - currency: TestConstants.CURRENCY, - amount: TestConstants.AMOUNT, - paymentMethods: [ - { paymentMethodId: TestConstants.PAYMENT_METHOD_ID, rank: 1 }, - ], - schedule: { - referenceId: `schedule-${TestConstants.REF_ID}`, - businessId: TestConstants.BUSINESS_ID, - interval: TestConstants.INTERVAL, - intervalCount: TestConstants.INTERVAL_COUNT, - }, - }), - ) - .to.eventually.deep.equal(TestConstants.PLAN_DETAILS) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(rp.createPlan({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getPlan', () => { - it('should be able to retrieve plan details', done => { - expect( - rp.getPlan({ - id: TestConstants.PLAN_ID, - businessId: TestConstants.BUSINESS_ID, - }), - ) - .to.eventually.deep.equal(TestConstants.PLAN_DETAILS) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(rp.getPlan({ id: TestConstants.PLAN_ID })) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('deactivatePlan', () => { - it('should be able to deactivate plan', done => { - expect( - rp.deactivatePlan({ - id: TestConstants.PLAN_ID, - businessId: TestConstants.BUSINESS_ID, - }), - ) - .to.eventually.deep.equal(TestConstants.PLAN_DETAILS) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(rp.deactivatePlan({ id: TestConstants.PLAN_ID })) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('editPlan', () => { - it('should be able to update plan details', done => { - expect( - rp.editPlan({ - id: TestConstants.PLAN_ID, - amount: TestConstants.UPDATED_AMOUNT, - businessId: TestConstants.BUSINESS_ID, - }), - ) - .to.eventually.deep.equal(TestConstants.UPDATED_PLAN_DETAILS) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(rp.editPlan({ id: TestConstants.PLAN_ID })) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/recurring/recurring_schedule.test.js b/test/recurring/recurring_schedule.test.js deleted file mode 100644 index 70c700a..0000000 --- a/test/recurring/recurring_schedule.test.js +++ /dev/null @@ -1,135 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { Recurring } = x; - let recurring = new Recurring({}); - - beforeEach(() => { - recurring = new Recurring({}); - }); - - before(() => { - nock(recurring.API_ENDPOINT_SCHEDULES) - .matchHeader('business-id', TestConstants.BUSINESS_ID) - .post('/', { - reference_id: TestConstants.REF_ID, - interval: TestConstants.INTERVAL, - interval_count: TestConstants.INTERVAL_COUNT, - total_recurrence: TestConstants.INTERVAL_COUNT + 2, - anchor_date: TestConstants.ANCHOR_DATE, - retry_interval: TestConstants.INTERVAL, - retry_interval_count: TestConstants.INTERVAL_COUNT, - total_retry: TestConstants.INTERVAL_COUNT, - failed_attempt_notifications: [TestConstants.INTERVAL_COUNT], - }) - .reply(201, TestConstants.SCHEDULE_DETAILS); - - nock(recurring.API_ENDPOINT_SCHEDULES) - .matchHeader('business-id', TestConstants.BUSINESS_ID) - .get(`/${TestConstants.SCHEDULE_ID}`) - .reply(200, TestConstants.SCHEDULE_DETAILS); - - nock(recurring.API_ENDPOINT_SCHEDULES) - .matchHeader('business-id', TestConstants.BUSINESS_ID) - .matchHeader( - 'update-scheduled-cycle', - TestConstants.UPDATE_SCHEDULED_CYCLE, - ) - .patch(`/${TestConstants.SCHEDULE_ID}`, { - interval: TestConstants.INTERVAL, - interval_count: TestConstants.INTERVAL_COUNT + 1, - }) - .reply(200, TestConstants.UPDATED_SCHEDULE_DETAILS); - }); - - describe('createSchedule', () => { - it('should create a recurring schedule', done => { - expect( - recurring.createSchedule({ - referenceId: TestConstants.REF_ID, - interval: TestConstants.INTERVAL, - businessId: TestConstants.BUSINESS_ID, - intervalCount: TestConstants.INTERVAL_COUNT, - totalRecurrence: TestConstants.INTERVAL_COUNT + 2, - anchorDate: TestConstants.ANCHOR_DATE, - retryInterval: TestConstants.INTERVAL, - retryIntervalCount: TestConstants.INTERVAL_COUNT, - totalRetry: TestConstants.INTERVAL_COUNT, - failedAttemptNotifications: [TestConstants.INTERVAL_COUNT], - }), - ) - .to.eventually.deep.equal(TestConstants.SCHEDULE_DETAILS) - .and.notify(done); - }); - - it('should report missing required fields', done => { - expect(recurring.createSchedule({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getSchedule', () => { - it('should be able to retrieve schedule details', done => { - expect( - recurring.getSchedule({ - id: TestConstants.SCHEDULE_ID, - businessId: TestConstants.BUSINESS_ID, - }), - ) - .to.eventually.deep.equal(TestConstants.SCHEDULE_DETAILS) - .and.notify(done); - }); - - it('should report missing required fields', done => { - expect(recurring.getSchedule({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('editSchedule', () => { - it('should be able to update schedule details', done => { - expect( - recurring.editSchedule({ - id: TestConstants.SCHEDULE_ID, - businessId: TestConstants.BUSINESS_ID, - interval: TestConstants.INTERVAL, - intervalCount: TestConstants.INTERVAL_COUNT + 1, - }), - ) - .to.eventually.deep.equal(TestConstants.UPDATED_SCHEDULE_DETAILS) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(recurring.editSchedule({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/recurring_payment/constants.js b/test/recurring_payment/constants.js deleted file mode 100644 index 3e6599f..0000000 --- a/test/recurring_payment/constants.js +++ /dev/null @@ -1,60 +0,0 @@ -const REF_ID = 'ref-123'; -const BUSINESS_ID = 'fake-BID'; -const CUSTOMER_ID = 'cust-123'; -const CURRENCY = 'IDR'; -const EXT_ID = '123'; -const PAYER_EMAIL = 'dummy@email.co'; -const DESCRIPTION = 'Payment for something'; -const AMOUNT = 10000; -const INTERVAL = 'MONTH'; -const INTERVAL_COUNT = 1; -const PAYMENT_ID = '5e0577bdf4d38b20d542009b'; -const ANCHOR_DATE = new Date().toISOString(); -const START_DATE = '2020-01-31T17:00:00.000Z'; -const CUSTOMER = { - given_names: 'stan', - email: 'dummy@email.co', - mobile_number: '', - address: '', -}; - -const PAYMENT_METHOD_ID = 'pm-123'; - -const UPDATED_AMOUNT = 20000; - -const PAYMENT_DETAILS = { - id: PAYMENT_ID, - external_id: EXT_ID, - payer_email: PAYER_EMAIL, - description: DESCRIPTION, - amount: AMOUNT, - interval: INTERVAL, - interval_count: INTERVAL_COUNT, - start_date: START_DATE, - customer: CUSTOMER, -}; - -const UPDATED_PAYMENT_DETAILS = Object.assign({}, PAYMENT_DETAILS, { - amount: UPDATED_AMOUNT, -}); - -module.exports = { - PAYMENT_METHOD_ID, - CUSTOMER_ID, - CURRENCY, - EXT_ID, - PAYER_EMAIL, - DESCRIPTION, - AMOUNT, - INTERVAL, - INTERVAL_COUNT, - PAYMENT_ID, - PAYMENT_DETAILS, - START_DATE, - UPDATED_AMOUNT, - UPDATED_PAYMENT_DETAILS, - CUSTOMER, - REF_ID, - BUSINESS_ID, - ANCHOR_DATE, -}; diff --git a/test/recurring_payment/manage_payments.test.js b/test/recurring_payment/manage_payments.test.js deleted file mode 100644 index 5b5a511..0000000 --- a/test/recurring_payment/manage_payments.test.js +++ /dev/null @@ -1,111 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { RecurringPayment } = x; - let rp = new RecurringPayment({}); - beforeEach(function() { - rp = new RecurringPayment({}); - }); - before(function() { - nock(rp.API_ENDPOINT) - .post('/', { - external_id: TestConstants.EXT_ID, - payer_email: TestConstants.PAYER_EMAIL, - description: TestConstants.DESCRIPTION, - amount: TestConstants.AMOUNT, - interval: TestConstants.INTERVAL, - interval_count: TestConstants.INTERVAL_COUNT, - start_date: TestConstants.START_DATE, - customer: TestConstants.CUSTOMER, - }) - .reply(201, TestConstants.PAYMENT_DETAILS); - nock(rp.API_ENDPOINT) - .get(`/${TestConstants.PAYMENT_ID}`) - .reply(200, TestConstants.PAYMENT_DETAILS); - nock(rp.API_ENDPOINT) - .patch(`/${TestConstants.PAYMENT_ID}`, { - amount: TestConstants.UPDATED_AMOUNT, - }) - .reply(200, TestConstants.UPDATED_PAYMENT_DETAILS); - }); - - describe('createPayment', () => { - it('should create a recurring payment', done => { - expect( - rp.createPayment({ - externalID: TestConstants.EXT_ID, - payerEmail: TestConstants.PAYER_EMAIL, - description: TestConstants.DESCRIPTION, - amount: TestConstants.AMOUNT, - interval: RecurringPayment.Interval.Month, - intervalCount: TestConstants.INTERVAL_COUNT, - startDate: new Date(TestConstants.PAYMENT_DETAILS.start_date), - customer: TestConstants.CUSTOMER, - }), - ) - .to.eventually.deep.equal(TestConstants.PAYMENT_DETAILS) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(rp.createPayment({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getPayment', () => { - it('should be able to retrieve payment details', done => { - expect(rp.getPayment({ id: TestConstants.PAYMENT_ID })) - .to.eventually.deep.equal(TestConstants.PAYMENT_DETAILS) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(rp.getPayment({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('editPayment', () => { - it('should be able to update payment details', done => { - expect( - rp.editPayment({ - id: TestConstants.PAYMENT_ID, - amount: TestConstants.UPDATED_AMOUNT, - }), - ) - .to.eventually.deep.equal(TestConstants.UPDATED_PAYMENT_DETAILS) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(rp.editPayment({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/recurring_payment/operate_payments.test.js b/test/recurring_payment/operate_payments.test.js deleted file mode 100644 index aa7d251..0000000 --- a/test/recurring_payment/operate_payments.test.js +++ /dev/null @@ -1,46 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { RecurringPayment } = x; - let rp = new RecurringPayment({}); - beforeEach(function() { - rp = new RecurringPayment({}); - }); - before(function() { - nock(rp.API_ENDPOINT) - .post(`/${TestConstants.PAYMENT_ID}/stop!`) - .reply(200, TestConstants.PAYMENT_DETAILS) - .post(`/${TestConstants.PAYMENT_ID}/pause!`) - .reply(200, TestConstants.PAYMENT_DETAILS) - .post(`/${TestConstants.PAYMENT_ID}/resume!`) - .reply(200, TestConstants.PAYMENT_DETAILS); - }); - - describe('stopPayment', () => { - it('should stop a recurring payment', done => { - expect(rp.stopPayment({ id: TestConstants.PAYMENT_ID })) - .to.eventually.deep.equal(TestConstants.PAYMENT_DETAILS) - .and.notify(done); - }); - }); - describe('pausePayment', () => { - it('should pause a recurring payment', done => { - expect(rp.pausePayment({ id: TestConstants.PAYMENT_ID })) - .to.eventually.deep.equal(TestConstants.PAYMENT_DETAILS) - .and.notify(done); - }); - }); - describe('resumePayment', () => { - it('should resume a recurring payment', done => { - expect(rp.resumePayment({ id: TestConstants.PAYMENT_ID })) - .to.eventually.deep.equal(TestConstants.PAYMENT_DETAILS) - .and.notify(done); - }); - }); -}; diff --git a/test/recurring_payment/recurring_payment.test.js b/test/recurring_payment/recurring_payment.test.js deleted file mode 100644 index 4107336..0000000 --- a/test/recurring_payment/recurring_payment.test.js +++ /dev/null @@ -1,14 +0,0 @@ -process.env.NODE_ENV = 'test'; - -const Xendit = require('../../src/xendit'); -const managePaymentsTest = require('./manage_payments.test'); -const operatePaymentsTest = require('./operate_payments.test'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -describe('Recurring Payment Service', function() { - managePaymentsTest(x); - operatePaymentsTest(x); -}); diff --git a/test/refund/constans.js b/test/refund/constans.js deleted file mode 100644 index 895a6c9..0000000 --- a/test/refund/constans.js +++ /dev/null @@ -1,72 +0,0 @@ -const CREATE_REFUND_SUCCESS_RESPONSE = { - id: 'rfd-6f4a377d-a201-437f-9119-f8b00cbbe857', - payment_id: 'ddpy-3cd658ae-25b9-4659-aa36-596ae41a809f', - invoice_id: null, - amount: 10000, - payment_method_type: 'DIRECT_DEBIT', - channel_code: 'BPI', - currency: 'PHP', - status: 'SUCCEEDED', - reason: 'CANCELLATION', - reference_id: 'b2756a1e-e6cd-4352-9a68-0483aa2b6a2', - failure_code: null, - refund_fee_amount: null, - created: '2020-08-30T09:12:33.001Z', - updated: '2020-08-30T09:12:33.001Z', - metadata: null, -}; - -const LIST_REFUNDS_SUCCESS_RESPONSE = { - data: [ - { - id: 'rfd-6f4a377d-a201-437f-9119-f8b00cbbe857', - payment_id: 'ddpy-3cd658ae-25b9-4659-aa36-596ae41a809f', - invoice_id: null, - amount: 10000, - payment_method_type: 'DIRECT_DEBIT', - channel_code: 'BPI', - currency: 'PHP', - status: 'SUCCEEDED', - reason: 'CANCELLATION', - reference_id: 'b2756a1e-e6cd-4352-9a68-0483aa2b6a2', - failure_code: null, - refund_fee_amount: null, - created: '2020-08-30T09:12:33.001Z', - updated: '2020-08-30T09:12:33.001Z', - metadata: null, - }, - ], - links: [ - { - href: - "/refunds?after_id='rfd-7a836151-7a2c-4cc9-b158-07a617cc0e3a'&limit=10", - rel: 'first', - method: 'GET', - }, - ], - has_more: true, -}; - -const GET_REFUND_BY_ID_RESPONSE = { - id: 'rfd-6f4a377d-a201-437f-9119-f8b00cbbe857', - payment_id: 'ddpy-3cd658ae-25b9-4659-aa36-596ae41a809f', - invoice_id: null, - amount: 10000, - payment_method_type: 'DIRECT_DEBIT', - channel_code: 'BPI', - currency: 'PHP', - status: 'SUCCEEDED', - reason: 'CANCELLATION', - reference_id: 'b2756a1e-e6cd-4352-9a68-0483aa2b6a2', - failure_code: null, - refund_fee_amount: null, - created: '2020-08-30T09:12:33.001Z', - updated: '2020-08-30T09:12:33.001Z', - metadata: null, -}; - -module.exports = { - CREATE_REFUND_SUCCESS_RESPONSE, - LIST_REFUNDS_SUCCESS_RESPONSE, - GET_REFUND_BY_ID_RESPONSE, -}; diff --git a/test/refund/refund.test.js b/test/refund/refund.test.js deleted file mode 100644 index 7b6888a..0000000 --- a/test/refund/refund.test.js +++ /dev/null @@ -1,66 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const { expect } = chai; -const nock = require('nock'); -const Xendit = require('../../src/xendit'); -const { - CREATE_REFUND_SUCCESS_RESPONSE, - LIST_REFUNDS_SUCCESS_RESPONSE, - GET_REFUND_BY_ID_RESPONSE, -} = require('./constans'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -chai.use(chaiAsProm); - -const { Refund } = x; -let r = new Refund({}); -before(function() { - nock(x.opts.xenditURL) - .post('/refunds', { - invoice_id: '63676ed0eb10cf38ce0550b7', - reason: 'OTHERS', - amount: 1, - }) - .reply(201, CREATE_REFUND_SUCCESS_RESPONSE) - .get('/refunds') - .reply(200, LIST_REFUNDS_SUCCESS_RESPONSE) - .get('/refunds/rfd-e9601c54-cacc-4b77-90e7-17c899c19106') - .reply(200, GET_REFUND_BY_ID_RESPONSE); -}); - -describe('Refund Service', () => { - describe('create refund', () => { - it('should get a response of refund created', done => { - expect( - r.createRefund({ - invoice_id: '63676ed0eb10cf38ce0550b7', - reason: 'OTHERS', - amount: 1, - }), - ) - .to.eventually.deep.equal(CREATE_REFUND_SUCCESS_RESPONSE) - .and.notify(done); - }); - }); - describe('list refunds', () => { - it('should get a response of refunds', done => { - expect(r.listRefunds()) - .to.eventually.deep.equal(LIST_REFUNDS_SUCCESS_RESPONSE) - .and.notify(done); - }); - }); - describe('get refund by id', () => { - it('should get a response detail of refund by id', done => { - expect( - r.getRefundById({ - id: 'rfd-e9601c54-cacc-4b77-90e7-17c899c19106', - }), - ) - .to.eventually.deep.equal(GET_REFUND_BY_ID_RESPONSE) - .and.notify(done); - }); - }); -}); diff --git a/test/report/constants.js b/test/report/constants.js deleted file mode 100644 index 67dbfd9..0000000 --- a/test/report/constants.js +++ /dev/null @@ -1,49 +0,0 @@ -const TYPE = 'BALANCE_HISTORY'; -const FILTER_DATE_FROM = new Date('2022-01-01T00:00:00.000Z'); -const FILTER_DATE_TO = new Date('2022-01-02T00:00:00.000Z'); -const FORMAT = 'CSV'; -const CURRENCY = 'IDR'; - -const REPORT_ID = 'report_123123'; -const BUSINESS_ID = '123123'; -const FILTER = { - from: FILTER_DATE_FROM.toISOString(), - to: FILTER_DATE_TO.toISOString(), -}; - -const GENERATE_REPORT_RESPONSE = { - id: REPORT_ID, - type: TYPE, - status: 'PENDING', - filter: FILTER, - format: FORMAT, - currency: CURRENCY, - business_id: BUSINESS_ID, - created: '2022-01-02T00:00:00.000Z', - updated: '2022-01-02T00:00:00.000Z', -}; - -const GET_REPORT_RESPONSE = { - id: REPORT_ID, - type: TYPE, - status: 'COMPLETED', - filter: FILTER, - format: FORMAT, - currency: CURRENCY, - url: 'https://www.google.com', - business_id: BUSINESS_ID, - created: '2022-01-02T00:00:00.000Z', - updated: '2022-01-02T00:00:00.000Z', -}; - -module.exports = { - TYPE, - FILTER, - FILTER_DATE_FROM, - FILTER_DATE_TO, - FORMAT, - CURRENCY, - REPORT_ID, - GENERATE_REPORT_RESPONSE, - GET_REPORT_RESPONSE, -}; diff --git a/test/report/report.test.js b/test/report/report.test.js deleted file mode 100644 index 68a1064..0000000 --- a/test/report/report.test.js +++ /dev/null @@ -1,81 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); -const Xendit = require('../../src/xendit'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -chai.use(chaiAsProm); - -const { Report } = x; -let r = new Report({}); -beforeEach(function() { - r = new Report({}); -}); -before(function() { - nock(x.opts.xenditURL) - .post('/reports', { - type: TestConstants.TYPE, - filter: TestConstants.FILTER, - format: TestConstants.FORMAT, - currency: TestConstants.CURRENCY, - }) - .reply(200, TestConstants.GENERATE_REPORT_RESPONSE) - .get(`/reports/${TestConstants.REPORT_ID}`) - .reply(200, TestConstants.GET_REPORT_RESPONSE); -}); - -describe('Report Service', () => { - describe('generateReport', () => { - it('should generate a report', done => { - expect( - r.generateReport({ - type: TestConstants.TYPE, - filterDateFrom: TestConstants.FILTER_DATE_FROM, - filterDateTo: TestConstants.FILTER_DATE_TO, - format: TestConstants.FORMAT, - currency: TestConstants.CURRENCY, - }), - ) - .to.eventually.deep.equal(TestConstants.GENERATE_REPORT_RESPONSE) - .and.notify(done); - }); - - it('should report missing required fields', done => { - expect(r.generateReport({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getReport', () => { - it('should retrieve report information and url', done => { - expect(r.getReport({ id: TestConstants.REPORT_ID })) - .to.eventually.deep.equal(TestConstants.GET_REPORT_RESPONSE) - .and.notify(done); - }); - - it('should report missing required fields', done => { - expect(r.getReport({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}); diff --git a/test/retail_outlet/constants.js b/test/retail_outlet/constants.js deleted file mode 100644 index 221321e..0000000 --- a/test/retail_outlet/constants.js +++ /dev/null @@ -1,55 +0,0 @@ -const EXT_ID = '123'; -const AMOUNT = 10000; -const NAME = 'Uvuvwevwevwe Osas'; -const ALFMART_RETAIL_OUTLET_NAME = 'ALFAMART'; -const FIXED_PAYMENT_CODE_ID = '5e0ed8797bc384e60435ec62'; -const UPDATED_AMOUNT = 12000; -const API_ENDPOINT = 'https://api.xendit.co'; -const AFTER_ID = '61c53c4f6'; - -const FIXED_PAYMENT_CODE_DETAILS = { - owner_id: '12121212', - external_id: EXT_ID, - retail_outlet_name: ALFMART_RETAIL_OUTLET_NAME, - prefix: 'XND', - name: NAME, - payment_code: 'XND642680', - type: 'USER', - expected_amount: AMOUNT, - status: 'ACTIVE', - is_single_use: false, - expiration_date: '2021-10-10T00:00:00.000Z', - id: FIXED_PAYMENT_CODE_ID, -}; - -const PAYMENTS_BY_FIXED_PAYMENT_CODE_ID = { - data: [FIXED_PAYMENT_CODE_DETAILS], - has_more: true, - links: { - href: - `${API_ENDPOINT}/fixed_payment_code/` + - `${FIXED_PAYMENT_CODE_ID}/payments?after_id=${AFTER_ID}`, - rel: 'next', - method: 'GET', - }, -}; - -const UPDATED_FIXED_PAYMENT_CODE_DETAILS = Object.assign( - {}, - FIXED_PAYMENT_CODE_DETAILS, - { - expected_amount: UPDATED_AMOUNT, - }, -); - -module.exports = { - EXT_ID, - AMOUNT, - NAME, - ALFMART_RETAIL_OUTLET_NAME, - FIXED_PAYMENT_CODE_ID, - UPDATED_AMOUNT, - FIXED_PAYMENT_CODE_DETAILS, - PAYMENTS_BY_FIXED_PAYMENT_CODE_ID, - UPDATED_FIXED_PAYMENT_CODE_DETAILS, -}; diff --git a/test/retail_outlet/retail_outlet.test.js b/test/retail_outlet/retail_outlet.test.js deleted file mode 100644 index 609c2a4..0000000 --- a/test/retail_outlet/retail_outlet.test.js +++ /dev/null @@ -1,141 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); -const Xendit = require('../../src/xendit'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -chai.use(chaiAsProm); - -const { RetailOutlet } = x; -let ro = new RetailOutlet({}); -beforeEach(function() { - ro = new RetailOutlet({}); -}); -before(function() { - nock(ro.API_ENDPOINT) - .post('/', { - external_id: TestConstants.EXT_ID, - retail_outlet_name: TestConstants.ALFMART_RETAIL_OUTLET_NAME, - name: TestConstants.NAME, - expected_amount: TestConstants.AMOUNT, - }) - .reply(200, TestConstants.FIXED_PAYMENT_CODE_DETAILS) - .get(`/${TestConstants.FIXED_PAYMENT_CODE_ID}`) - .reply(200, TestConstants.FIXED_PAYMENT_CODE_DETAILS) - .get(`/${TestConstants.FIXED_PAYMENT_CODE_ID}/payments`) - .reply(200, TestConstants.PAYMENTS_BY_FIXED_PAYMENT_CODE_ID) - .patch(`/${TestConstants.FIXED_PAYMENT_CODE_ID}`, { - expected_amount: TestConstants.UPDATED_AMOUNT, - }) - .reply(200, TestConstants.UPDATED_FIXED_PAYMENT_CODE_DETAILS); -}); - -describe('Retaiil Outlet Service', () => { - describe('createFixedPaymentCode', () => { - it('should create a fixed payment code', done => { - expect( - ro.createFixedPaymentCode({ - externalID: TestConstants.EXT_ID, - retailOutletName: TestConstants.ALFMART_RETAIL_OUTLET_NAME, - name: TestConstants.NAME, - expectedAmt: TestConstants.AMOUNT, - }), - ) - .to.eventually.deep.equal(TestConstants.FIXED_PAYMENT_CODE_DETAILS) - .and.notify(done); - }); - - it('should report missing required fields', done => { - expect(ro.createFixedPaymentCode({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getFixedPaymentCode', () => { - it('should retrieve fixed payment code details', done => { - expect( - ro.getFixedPaymentCode({ id: TestConstants.FIXED_PAYMENT_CODE_ID }), - ) - .to.eventually.deep.equal(TestConstants.FIXED_PAYMENT_CODE_DETAILS) - .and.notify(done); - }); - - it('should report missing required fields', done => { - expect(ro.getFixedPaymentCode({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('getPaymentsByFixedPaymentCodeId', () => { - it('should retrieve payments by fixed payment code id', done => { - expect( - ro.getPaymentsByFixedPaymentCodeId({ - id: TestConstants.FIXED_PAYMENT_CODE_ID, - }), - ) - .to.eventually.deep.equal( - TestConstants.PAYMENTS_BY_FIXED_PAYMENT_CODE_ID, - ) - .and.notify(done); - }); - - it('should report missing required fields', done => { - expect(ro.getPaymentsByFixedPaymentCodeId({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('updateFixedPaymentCode', () => { - it('should update a fixed payment code', done => { - expect( - ro.updateFixedPaymentCode({ - id: TestConstants.FIXED_PAYMENT_CODE_ID, - expectedAmt: TestConstants.UPDATED_AMOUNT, - }), - ) - .to.eventually.deep.equal( - TestConstants.UPDATED_FIXED_PAYMENT_CODE_DETAILS, - ) - .and.notify(done); - }); - - it('should report missing required fields', done => { - expect(ro.updateFixedPaymentCode({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}); diff --git a/test/transaction/constants.js b/test/transaction/constants.js deleted file mode 100644 index ec62544..0000000 --- a/test/transaction/constants.js +++ /dev/null @@ -1,79 +0,0 @@ -const TYPES = ['DISBURSEMENT', 'PAYMENT']; -const STATUSES = ['PENDING', 'SUCCESS']; -const CHANNEL_CATEGORIES = ['BANK']; -const CREATED_DATE_FROM = new Date('2022-01-01T00:00:00.000Z'); -const CREATED_DATE_TO = new Date('2022-02-01T00:00:00.000Z'); - -const TRANSACTION_ID = 'txn_123123'; -const QUERY_STRING = - 'types=DISBURSEMENT&types=PAYMENT&statuses=PENDING&statuses=SUCCESS&' + - 'channel_categories=BANK&created[gte]=2022-01-01T00:00:00.000Z&' + - 'created[lte]=2022-02-01T00:00:00.000Z'; - -const GET_TRANSACTION_RESPONSE = { - id: TRANSACTION_ID, - product_id: '1232131', - type: TYPES[0], - status: STATUSES[0], - channel_category: CHANNEL_CATEGORIES[0], - channel_code: 'BCA', - reference_id: 'Bank Central Asia (BCA) - BCA single disbursement', - account_identifier: '123123', - currency: 'IDR', - amount: 10000, - net_amount: 10000, - cashflow: 'MONEY_OUT', - business_id: '13123', - created: '2022-02-01T00:00:00.000Z', - updated: '2022-02-01T00:00:00.000Z', - fee: { - xendit_fee: 0, - value_added_tax: 0, - xendit_withholding_tax: 0, - third_party_withholding_tax: 0, - status: 'COMPLETED', - }, -}; - -const ANOTHER_TRANSACTION_RESPONSE = { - id: TRANSACTION_ID, - product_id: '1232132131', - type: TYPES[1], - status: STATUSES[1], - channel_category: CHANNEL_CATEGORIES[0], - channel_code: 'BCA', - reference_id: 'Bank Central Asia (BCA) - BCA single disbursement', - account_identifier: '123123', - currency: 'IDR', - amount: 100001, - net_amount: 100001, - cashflow: 'MONEY_OUT', - business_id: '13123', - created: '2022-02-01T00:00:00.000Z', - updated: '2022-02-01T00:00:00.000Z', - fee: { - xendit_fee: 0, - value_added_tax: 0, - xendit_withholding_tax: 0, - third_party_withholding_tax: 0, - status: 'COMPLETED', - }, -}; - -const LIST_TRANSACTIONS_RESPONSE = { - has_more: false, - data: [GET_TRANSACTION_RESPONSE, ANOTHER_TRANSACTION_RESPONSE], - links: [], -}; - -module.exports = { - TYPES, - STATUSES, - CHANNEL_CATEGORIES, - CREATED_DATE_FROM, - CREATED_DATE_TO, - TRANSACTION_ID, - GET_TRANSACTION_RESPONSE, - LIST_TRANSACTIONS_RESPONSE, - QUERY_STRING, -}; diff --git a/test/transaction/transaction.test.js b/test/transaction/transaction.test.js deleted file mode 100644 index 9207d99..0000000 --- a/test/transaction/transaction.test.js +++ /dev/null @@ -1,69 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); -const Xendit = require('../../src/xendit'); -const { QUERY_STRING } = require('./constants'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -chai.use(chaiAsProm); - -const { Transaction } = x; -let t = new Transaction({}); -beforeEach(function() { - t = new Transaction({}); -}); -before(function() { - nock(x.opts.xenditURL) - .get(`/transactions/${TestConstants.TRANSACTION_ID}`) - .reply(200, TestConstants.GET_TRANSACTION_RESPONSE) - .get(`/transactions?${QUERY_STRING}`) - .reply(200, TestConstants.LIST_TRANSACTIONS_RESPONSE); -}); - -describe('Transaction Service', () => { - describe('getTransaction', () => { - it('should get a single transaction', done => { - expect( - t.getTransaction({ - id: TestConstants.TRANSACTION_ID, - }), - ) - .to.eventually.deep.equal(TestConstants.GET_TRANSACTION_RESPONSE) - .and.notify(done); - }); - - it('should report missing required fields', done => { - expect(t.getTransaction({})) - .to.eventually.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - - describe('listTransactions', () => { - it('should retrieve a list of transactions', done => { - expect( - t.listTransactions({ - types: TestConstants.TYPES, - statuses: TestConstants.STATUSES, - channelCategories: TestConstants.CHANNEL_CATEGORIES, - createdDateFrom: TestConstants.CREATED_DATE_FROM, - createdDateTo: TestConstants.CREATED_DATE_TO, - }), - ) - .to.eventually.deep.equal(TestConstants.LIST_TRANSACTIONS_RESPONSE) - .and.notify(done); - }); - }); -}); diff --git a/test/utils/validate.test.js b/test/utils/validate.test.js deleted file mode 100644 index dd9210a..0000000 --- a/test/utils/validate.test.js +++ /dev/null @@ -1,32 +0,0 @@ -const chai = require('chai'); -const { expect } = chai; - -const { Validate } = require('../../src/utils'); -const { Errors } = require('../../src/xendit'); - -describe('Validate utils', () => { - it('should reject with the right errors', () => { - const testCases = [ - { fields: ['id'], data: {}, message: `Missing required fields: 'id'` }, - { - fields: ['id', 'foo', 'bar'], - data: {}, - message: `Missing required fields: 'id', 'foo', 'bar'`, - }, - { - fields: ['id', 'foo', 'bar'], - data: { id: 1 }, - message: `Missing required fields: 'foo', 'bar'`, - }, - ]; - testCases.forEach(tc => - Validate.rejectOnMissingFields(tc.fields, tc.data, e => { - expect(e).to.deep.equal({ - status: 400, - code: Errors.API_VALIDATION_ERROR, - message: tc.message, - }); - }), - ); - }); -}); diff --git a/test/va/account.test.js b/test/va/account.test.js deleted file mode 100644 index 37cd9c1..0000000 --- a/test/va/account.test.js +++ /dev/null @@ -1,110 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { VirtualAcc } = x; - let va; - beforeEach(function() { - va = new VirtualAcc({}); - }); - before(function() { - nock(x.opts.xenditURL) - .post('/callback_virtual_accounts', { - external_id: TestConstants.EXT_ID, - bank_code: TestConstants.BANK_CODE, - name: TestConstants.NAME, - }) - .reply(200, TestConstants.VA_DETAILS); - nock(x.opts.xenditURL) - .get(`/callback_virtual_accounts/${TestConstants.VA_ID}`) - .reply(200, TestConstants.VA_DETAILS); - nock(x.opts.xenditURL) - .patch(`/callback_virtual_accounts/${TestConstants.VA_ID}`, { - expected_amount: TestConstants.EXPECTED_AMT, - }) - .reply(200, TestConstants.UPDATED_VA_DETAILS); - nock(x.opts.xenditURL) - .post('/callback_virtual_accounts', { - external_id: TestConstants.EXT_ID, - bank_code: TestConstants.BANK_CODE, - name: TestConstants.NAME, - expiration_date: null, - }) - .reply(400, { - status: 400, - code: 'API_VALIDATION_ERROR', - message: 'There was an error with the format submitted to the server.', - }); - nock(x.opts.xenditURL) - .patch(`/callback_virtual_accounts/${TestConstants.VA_ID}`, { - expected_amount: TestConstants.EXPECTED_AMT, - expiration_date: null, - }) - .reply(400, { - status: 400, - code: 'API_VALIDATION_ERROR', - message: 'There was an error with the format submitted to the server.', - }); - }); - - describe('createFixedVA', () => { - it('should create a virtual account', done => { - expect( - va.createFixedVA({ - externalID: TestConstants.EXT_ID, - bankCode: TestConstants.BANK_CODE, - name: TestConstants.NAME, - }), - ) - .to.eventually.deep.equal(TestConstants.VA_DETAILS) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(va.createFixedVA({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - describe('getFixedVA', () => { - it('should be able to retrieve VA details', done => { - expect(va.getFixedVA({ id: TestConstants.VA_ID })) - .to.eventually.deep.equal(TestConstants.VA_DETAILS) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(va.getFixedVA({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); - describe('updateFixedVA', () => { - it('should be able to update fixed VA', done => { - expect( - va.updateFixedVA({ - id: TestConstants.VA_ID, - expectedAmt: TestConstants.EXPECTED_AMT, - }), - ) - .to.eventually.deep.equal(TestConstants.UPDATED_VA_DETAILS) - .and.notify(done); - }); - }); -}; diff --git a/test/va/bank.test.js b/test/va/bank.test.js deleted file mode 100644 index 70f7a56..0000000 --- a/test/va/bank.test.js +++ /dev/null @@ -1,28 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { VirtualAcc } = x; - let va; - beforeEach(function() { - va = new VirtualAcc({}); - }); - before(function() { - nock(x.opts.xenditURL) - .get('/available_virtual_account_banks') - .reply(200, TestConstants.VALID_VA_BANKS_RESPONSE); - }); - - describe('getVABanks', () => { - it('should get a list of banks with VA', done => { - expect(va.getVABanks()) - .to.eventually.deep.equal(TestConstants.VALID_VA_BANKS_RESPONSE) - .and.notify(done); - }); - }); -}; diff --git a/test/va/constants.js b/test/va/constants.js deleted file mode 100644 index 558bf30..0000000 --- a/test/va/constants.js +++ /dev/null @@ -1,38 +0,0 @@ -const VALID_VA_BANKS_RESPONSE = [ - { name: 'Bank Mandiri', code: 'MANDIRI' }, - { name: 'Bank Negara Indonesia', code: 'BNI' }, -]; -const EXT_ID = '123'; -const BANK_CODE = 'BNI'; -const NAME = 'Uvuvwevwevwe Osas'; -const VA_ID = '57f6fbf26b9f064272622aa6'; -const VA_DETAILS = { - id: VA_ID, - bank_code: BANK_CODE, - name: NAME, - external_id: EXT_ID, -}; -const EXPECTED_AMT = 50; -const UPDATED_VA_DETAILS = Object.assign({}, VA_DETAILS, { - expected_amount: EXPECTED_AMT, -}); -const PAYMENT_ID = '1502450097080'; -const PAYMENT_DETAILS = { - id: VA_ID, - payment_id: PAYMENT_ID, - external_id: EXT_ID, - bank_code: BANK_CODE, -}; - -module.exports = { - VALID_VA_BANKS_RESPONSE, - EXT_ID, - BANK_CODE, - NAME, - VA_DETAILS, - VA_ID, - UPDATED_VA_DETAILS, - EXPECTED_AMT, - PAYMENT_ID, - PAYMENT_DETAILS, -}; diff --git a/test/va/payment.test.js b/test/va/payment.test.js deleted file mode 100644 index cb4d537..0000000 --- a/test/va/payment.test.js +++ /dev/null @@ -1,43 +0,0 @@ -const chai = require('chai'); -const chaiAsProm = require('chai-as-promised'); -const TestConstants = require('./constants'); -const { expect } = chai; -const nock = require('nock'); -const { Errors } = require('../../src/xendit'); - -chai.use(chaiAsProm); - -module.exports = function(x) { - const { VirtualAcc } = x; - let va; - beforeEach(function() { - va = new VirtualAcc({}); - }); - before(function() { - nock(x.opts.xenditURL) - .get( - // eslint-disable-next-line max-len - `/callback_virtual_account_payments/payment_id=${TestConstants.PAYMENT_ID}`, - ) - .reply(200, TestConstants.PAYMENT_DETAILS); - }); - - describe('getVAPayment', () => { - it('should be able to get payment', done => { - expect(va.getVAPayment({ paymentID: TestConstants.PAYMENT_ID })) - .to.eventually.deep.equal(TestConstants.PAYMENT_DETAILS) - .and.notify(done); - }); - it('should report missing required fields', done => { - expect(va.getVAPayment({})) - .to.eventually.to.be.rejected.then(e => - Promise.all([ - expect(e).to.have.property('status', 400), - expect(e).to.have.property('code', Errors.API_VALIDATION_ERROR), - ]), - ) - .then(() => done()) - .catch(e => done(e)); - }); - }); -}; diff --git a/test/va/va.test.js b/test/va/va.test.js deleted file mode 100644 index c4b1607..0000000 --- a/test/va/va.test.js +++ /dev/null @@ -1,16 +0,0 @@ -process.env.NODE_ENV = 'test'; - -const Xendit = require('../../src/xendit'); -const bankTest = require('./bank.test'); -const accountTest = require('./account.test'); -const paymentTest = require('./payment.test'); - -const x = new Xendit({ - secretKey: 'fake_secret_key', -}); - -describe('VA Service', function() { - bankTest(x); - accountTest(x); - paymentTest(x); -}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..4567ec1 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "declaration": true, + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "outDir": "dist", + "lib": [ + "es6", + "dom" + ], + "typeRoots": [ + "node_modules/@types" + ] + }, + "exclude": [ + "dist", + "node_modules" + ] +}