mirror of
https://github.com/jlengrand/adyen-node-api-library.git
synced 2026-03-10 08:01:20 +00:00
Initial commit
This commit is contained in:
22
.babelrc
Executable file
22
.babelrc
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
"@babel/env",
|
||||||
|
[
|
||||||
|
"@babel/preset-typescript",
|
||||||
|
{
|
||||||
|
"targets": {
|
||||||
|
"node": "current"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"plugins": [
|
||||||
|
"@babel/proposal-class-properties",
|
||||||
|
"@babel/proposal-object-rest-spread"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"test": {
|
||||||
|
"plugins": ["@babel/plugin-transform-runtime"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
.eslintignore
Normal file
2
.eslintignore
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/src/typings/**/*.ts
|
||||||
|
/examples
|
||||||
29
.eslintrc.json
Normal file
29
.eslintrc.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"parser": "@typescript-eslint/parser",
|
||||||
|
"plugins": ["@typescript-eslint"],
|
||||||
|
"parserOptions": {
|
||||||
|
"ecmaVersion": 6,
|
||||||
|
"sourceType": "module",
|
||||||
|
"ecmaFeatures": {
|
||||||
|
"modules": true
|
||||||
|
},
|
||||||
|
"project": "./tsconfig.json"
|
||||||
|
},
|
||||||
|
"extends": [
|
||||||
|
"eslint:recommended",
|
||||||
|
"plugin:@typescript-eslint/eslint-recommended",
|
||||||
|
"plugin:@typescript-eslint/recommended"
|
||||||
|
],
|
||||||
|
"rules": {
|
||||||
|
"quotes": ["error", "double"],
|
||||||
|
"semi": ["error", "always"]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"files": ["*.ts"],
|
||||||
|
"rules": {
|
||||||
|
"no-dupe-class-members": "off"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
17
.gitignore
vendored
Normal file
17
.gitignore
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
.src/main/test
|
||||||
|
.vagrant
|
||||||
|
Vagrantfile
|
||||||
|
build
|
||||||
|
node_modules
|
||||||
|
.idea
|
||||||
|
dist
|
||||||
|
.DS_Store
|
||||||
|
.bash_history
|
||||||
|
.config/
|
||||||
|
.docker/
|
||||||
|
.npm/
|
||||||
|
.ssh/
|
||||||
|
.viminfo
|
||||||
|
local/
|
||||||
|
coverage/
|
||||||
|
package-lock.json
|
||||||
10
.npmignore
Normal file
10
.npmignore
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
src/
|
||||||
|
.babelrc
|
||||||
|
.eslintignore
|
||||||
|
.eslintrc.json
|
||||||
|
.gitignore
|
||||||
|
.travis.yml
|
||||||
|
tsconfig.json
|
||||||
|
jest.config.js
|
||||||
|
tslint.json
|
||||||
|
webpack.config.js
|
||||||
12
.travis.yml
Normal file
12
.travis.yml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- stable
|
||||||
|
before_install:
|
||||||
|
- rm -rf package-lock.json node_modules
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- "node_modules"
|
||||||
|
script:
|
||||||
|
- npm run lint:fix
|
||||||
|
- npm run lint
|
||||||
|
- npm run test
|
||||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019 Adyen
|
||||||
|
|
||||||
|
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.
|
||||||
94
README.md
Normal file
94
README.md
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
# Adyen Node.js API Library
|
||||||
|
[](https://travis-ci.com/Adyen/adyen-node-api-library)
|
||||||
|
|
||||||
|
The Adyen API Library for NodeJS enables you to work with Adyen APIs and Hosted Payment Pages.
|
||||||
|
|
||||||
|
## Integration
|
||||||
|
The Library supports all APIs under the following services:
|
||||||
|
|
||||||
|
* [x] checkout
|
||||||
|
* [x] checkout utility
|
||||||
|
* [x] payments
|
||||||
|
* [x] modifications
|
||||||
|
* [x] payouts
|
||||||
|
* [x] recurring
|
||||||
|
* [x] notifications
|
||||||
|
* [x] BIN lookup
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
* Node 8.1.1 or higher
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
You can use NPM to add our library to your project
|
||||||
|
|
||||||
|
### NPM
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install --save adyen-node-api-library
|
||||||
|
```
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
* https://docs.adyen.com/developers/development-resources/libraries
|
||||||
|
* https://docs.adyen.com/developers/checkout/api-integration
|
||||||
|
|
||||||
|
## HTTP Client Configuration
|
||||||
|
|
||||||
|
By default, NodeJS [https](https://nodejs.org/api/https.html) will be used to submit requests to the API. But you can change that by injecting your own HttpClient on your client instance. In the example below, we use `axios`:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const {Client, Config} = require('adyen-node-api-library');
|
||||||
|
const axios = require("axios");
|
||||||
|
...
|
||||||
|
const config = new Config();
|
||||||
|
const client = new Client({
|
||||||
|
config,
|
||||||
|
httpClient: {
|
||||||
|
async request(endpoint, json, config, isApiKeyRequired, requestOptions) {
|
||||||
|
const response = await axios({
|
||||||
|
method: 'POST',
|
||||||
|
url: endpoint,
|
||||||
|
data: JSON.parse(json),
|
||||||
|
headers: {
|
||||||
|
"X-API-Key": config.apiKey,
|
||||||
|
"Content-type": "application/json"
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
## Proxy configuration
|
||||||
|
|
||||||
|
You can configure a proxy connection by injecting your own HttpURLConnectionClient on your client instance and changing the `proxy` setter value.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```javascript
|
||||||
|
const {HttpURLConnectionClient, Client, Config} = require('adyen-node-api-library');
|
||||||
|
...
|
||||||
|
const config = new Config();
|
||||||
|
const client = new Client({ config });
|
||||||
|
const httpClient = new HttpURLConnectionClient();
|
||||||
|
httpClient.proxy = { host: "http://google.com", port: 8888, };
|
||||||
|
|
||||||
|
client.setEnvironment('TEST');
|
||||||
|
client.httpClient = httpClient;
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
If you have any problems, questions or suggestions, create an issue here or send your inquiry to support@adyen.com.
|
||||||
|
|
||||||
|
## Licence
|
||||||
|
|
||||||
|
MIT license. For more information, see the LICENSE file.
|
||||||
|
|
||||||
|
## Other
|
||||||
|
|
||||||
|
You can find examples inside the `examples` folder in this repo.
|
||||||
24
examples/payments/async.js
Normal file
24
examples/payments/async.js
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
const TerminalAPI = require("./terminalApi");
|
||||||
|
const terminalAPI = new TerminalAPI();
|
||||||
|
|
||||||
|
const asyncPayment = async () => {
|
||||||
|
console.log("Starting transaction...");
|
||||||
|
const sentRequest = await terminalAPI.paymentRequestAsync();
|
||||||
|
|
||||||
|
console.log("Request sent. Waiting to retrieve status...");
|
||||||
|
setTimeout(async () => {
|
||||||
|
console.log("Retrieving status...");
|
||||||
|
const statusResponse = await terminalAPI.transactionStatusRequestSync(sentRequest);
|
||||||
|
|
||||||
|
const {TransactionStatusResponse} = statusResponse.SaleToPOIResponse;
|
||||||
|
if (TransactionStatusResponse && TransactionStatusResponse.Response.Result === 'Success') {
|
||||||
|
console.log("Response [result:%s data:%s]",
|
||||||
|
statusResponse.SaleToPOIResponse.TransactionStatusResponse.RepeatedMessageResponse.RepeatedResponseMessageBody.PaymentResponse.Response.Result,
|
||||||
|
statusResponse.SaleToPOIResponse.TransactionStatusResponse.RepeatedMessageResponse.RepeatedResponseMessageBody.PaymentResponse.Response.AdditionalResponse
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
console.log("Response [result:%s]", statusResponse.SaleToPOIResponse.TransactionStatusResponse.Response.Result)
|
||||||
|
}
|
||||||
|
}, 10000);
|
||||||
|
}
|
||||||
|
|
||||||
12
examples/payments/local.js
Normal file
12
examples/payments/local.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
const TerminalAPI = require("./terminalApi");
|
||||||
|
const terminalAPI = new TerminalAPI();
|
||||||
|
|
||||||
|
const localPayment = async () => {
|
||||||
|
const paymentsResponse = await terminalAPI.paymentRequestLocal();
|
||||||
|
|
||||||
|
console.log("Response [result:%s data:%s]",
|
||||||
|
paymentsResponse.SaleToPOIResponse.PaymentResponse.Response.Result,
|
||||||
|
paymentsResponse.SaleToPOIResponse.PaymentResponse.Response.AdditionalResponse
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
13
examples/payments/sync.js
Normal file
13
examples/payments/sync.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
const TerminalAPI = require("./terminalApi");
|
||||||
|
const terminalAPI = new TerminalAPI();
|
||||||
|
|
||||||
|
const syncPayment = async () => {
|
||||||
|
console.log("Starting transaction...");
|
||||||
|
const paymentsResponse = await terminalAPI.paymentRequestSync();
|
||||||
|
|
||||||
|
console.log("Response [result:%s data:%s]",
|
||||||
|
paymentsResponse.SaleToPOIResponse.PaymentResponse.Response.Result,
|
||||||
|
paymentsResponse.SaleToPOIResponse.PaymentResponse.Response.AdditionalResponse
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
135
examples/payments/terminalApi.js
Normal file
135
examples/payments/terminalApi.js
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
const {Client, Config, TerminalCloudAPI, TerminalLocalAPI} = require("../../src");
|
||||||
|
|
||||||
|
class TerminalApi {
|
||||||
|
terminalCloudAPI;
|
||||||
|
terminalLocalAPI;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
const merchantAccount = "[MERCHANT ACCOUNT]";
|
||||||
|
const xApiKey = "[X_API_KEY]";
|
||||||
|
|
||||||
|
const config = new Config();
|
||||||
|
config.merchantAccount = merchantAccount;
|
||||||
|
config.apiKey = xApiKey; // alternatively you can authenticate with your username + password
|
||||||
|
// config.username = "[USERNAME]"
|
||||||
|
// config.password = "[PASSWORD]"
|
||||||
|
|
||||||
|
|
||||||
|
const client = new Client({config});
|
||||||
|
client.setEnvironment("[LIVE | TEST]");
|
||||||
|
|
||||||
|
this.terminalCloudAPI = new TerminalCloudAPI(client);
|
||||||
|
|
||||||
|
const localConfig = new Config();
|
||||||
|
localConfig.merchantAccount = merchantAccount;
|
||||||
|
localConfig.apiKey = xApiKey; // or username + password
|
||||||
|
localConfig.terminalApiLocalEndpoint = "[PROTOCOL]//[TERMINAL_IP]:[PORT]";
|
||||||
|
|
||||||
|
const localClient = new Client({config: localConfig});
|
||||||
|
this.terminalLocalAPI = new TerminalLocalAPI(localClient);
|
||||||
|
}
|
||||||
|
|
||||||
|
async paymentRequestLocal() {
|
||||||
|
const paymentsRequest = this.createPaymentRequest();
|
||||||
|
const securityKey = {
|
||||||
|
keyVersion: 1,
|
||||||
|
adyenCryptoVersion: 1,
|
||||||
|
keyIdentifier: "[CRYPTO_KEY_IDENTIFIER]",
|
||||||
|
passphrase: "[CRYPTO_KEY_PASSPHRASE]"
|
||||||
|
};
|
||||||
|
return this.terminalLocalAPI.request(paymentsRequest, securityKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
paymentRequestSync() {
|
||||||
|
const paymentsRequest = this.createPaymentRequest();
|
||||||
|
|
||||||
|
console.log(`Payment [poiId:${paymentsRequest.SaleToPOIRequest.MessageHeader.POIID} serviceId:${paymentsRequest.SaleToPOIRequest.MessageHeader.ServiceID} saleId:${paymentsRequest.SaleToPOIRequest.MessageHeader.SaleID} amount:${paymentsRequest.SaleToPOIRequest.PaymentRequest.PaymentTransaction.AmountsReq.RequestedAmount} ${paymentsRequest.SaleToPOIRequest.PaymentRequest.PaymentTransaction.AmountsReq.Currency}]`)
|
||||||
|
|
||||||
|
return this.terminalCloudAPI.sync(paymentsRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
async paymentRequestAsync() {
|
||||||
|
const paymentsRequest = this.createPaymentRequest();
|
||||||
|
|
||||||
|
console.log(`Payment [poiId:${paymentsRequest.SaleToPOIRequest.MessageHeader.POIID} serviceId:${paymentsRequest.SaleToPOIRequest.MessageHeader.ServiceID} saleId:${paymentsRequest.SaleToPOIRequest.MessageHeader.SaleID} amount:${paymentsRequest.SaleToPOIRequest.PaymentRequest.PaymentTransaction.AmountsReq.RequestedAmount} ${paymentsRequest.SaleToPOIRequest.PaymentRequest.PaymentTransaction.AmountsReq.Currency}]`);
|
||||||
|
|
||||||
|
const response = await this.terminalCloudAPI.async(paymentsRequest);
|
||||||
|
|
||||||
|
return response === "ok" ? paymentsRequest : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
createPaymentRequest() {
|
||||||
|
const saleToPOIRequest = {};
|
||||||
|
|
||||||
|
const messageHeader = this.createMessageHeader("Payment");
|
||||||
|
saleToPOIRequest.MessageHeader = messageHeader;
|
||||||
|
|
||||||
|
const paymentRequest = {};
|
||||||
|
|
||||||
|
const saleData = {};
|
||||||
|
const transactionIdentification = {};
|
||||||
|
transactionIdentification.TransactionID = "[TRANSACTION_ID]";
|
||||||
|
transactionIdentification.TimeStamp = new Date().toISOString();
|
||||||
|
saleData.SaleTransactionID = transactionIdentification;
|
||||||
|
|
||||||
|
const paymentTransation = {};
|
||||||
|
const amountsReq = {};
|
||||||
|
amountsReq.Currency = "EUR";
|
||||||
|
amountsReq.RequestedAmount = 1;
|
||||||
|
paymentTransation.AmountsReq = amountsReq;
|
||||||
|
|
||||||
|
paymentRequest.SaleData = saleData;
|
||||||
|
paymentRequest.PaymentTransaction = paymentTransation;
|
||||||
|
|
||||||
|
saleToPOIRequest.PaymentRequest = paymentRequest;
|
||||||
|
|
||||||
|
const terminalApiRequest = {};
|
||||||
|
terminalApiRequest.SaleToPOIRequest = saleToPOIRequest;
|
||||||
|
|
||||||
|
return terminalApiRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
createMessageHeader(messageCategoryType) {
|
||||||
|
const id = new Date().getTime() % 1000000000;
|
||||||
|
|
||||||
|
const messageHeader = {};
|
||||||
|
messageHeader.ProtocolVersion = "3.0";
|
||||||
|
messageHeader.MessageClass = "Service";
|
||||||
|
messageHeader.MessageCategory = messageCategoryType;
|
||||||
|
messageHeader.MessageType = "Request";
|
||||||
|
messageHeader.SaleID = id.toString();
|
||||||
|
messageHeader.ServiceID = id.toString();
|
||||||
|
messageHeader.POIID = "[POI_ID]";
|
||||||
|
|
||||||
|
return messageHeader;
|
||||||
|
}
|
||||||
|
|
||||||
|
createTransactionStatusRequest(paymentRequest) {
|
||||||
|
const saleToPOIRequest = {};
|
||||||
|
|
||||||
|
const messageHeader = this.createMessageHeader("TransactionStatus");
|
||||||
|
saleToPOIRequest.MessageHeader = messageHeader;
|
||||||
|
|
||||||
|
const transactionStatusRequest = {};
|
||||||
|
const messageReference = {};
|
||||||
|
messageReference.MessageCategory = "Payment";
|
||||||
|
messageReference.SaleID = paymentRequest.SaleToPOIRequest.MessageHeader.SaleID;
|
||||||
|
messageReference.ServiceID = paymentRequest.SaleToPOIRequest.MessageHeader.ServiceID;
|
||||||
|
|
||||||
|
transactionStatusRequest.MessageReference = messageReference;
|
||||||
|
|
||||||
|
saleToPOIRequest.TransactionStatusRequest = transactionStatusRequest;
|
||||||
|
|
||||||
|
const terminalAPIRequest = {};
|
||||||
|
terminalAPIRequest.SaleToPOIRequest = saleToPOIRequest;
|
||||||
|
|
||||||
|
return terminalAPIRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
transactionStatusRequestSync(terminalAPIRequest) {
|
||||||
|
const transactionStatusRequest = this.createTransactionStatusRequest(terminalAPIRequest);
|
||||||
|
return this.terminalCloudAPI.sync(transactionStatusRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = TerminalApi;
|
||||||
36
jest.config.js
Normal file
36
jest.config.js
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen Node API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
moduleFileExtensions: [
|
||||||
|
"ts",
|
||||||
|
"js"
|
||||||
|
],
|
||||||
|
coveragePathIgnorePatterns: [
|
||||||
|
"<rootDir>/src/typings"
|
||||||
|
],
|
||||||
|
unmockedModulePathPatterns: [
|
||||||
|
"/dist"
|
||||||
|
],
|
||||||
|
testMatch: [
|
||||||
|
"**/__tests__/*.ts"
|
||||||
|
]
|
||||||
|
};
|
||||||
53
package.json
Normal file
53
package.json
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
"name": "adyen-node-api-library",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "The Adyen API Library for NodeJS enables you to work with Adyen APIs and Hosted Payment Pages.",
|
||||||
|
"main": "dist/lib/index.js",
|
||||||
|
"types": "dist/lib/index.d.ts",
|
||||||
|
"module": "dist/lib-esm/index.js",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.1.1"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/Adyen/adyen-node-api-library.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"adyen",
|
||||||
|
"api",
|
||||||
|
"nodejs"
|
||||||
|
],
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/Adyen/adyen-node-api-library/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/Adyen/adyen-node-api-library#readme",
|
||||||
|
"scripts": {
|
||||||
|
"clean": "rm -rf ./dist",
|
||||||
|
"build": "npm run clean && tsc && tsc -m es6 --outDir dist/lib-esm && webpack",
|
||||||
|
"lint": "eslint 'src/**/*.ts'",
|
||||||
|
"lint:fix": "eslint --fix 'src/**/*.ts'",
|
||||||
|
"test": "jest"
|
||||||
|
},
|
||||||
|
"author": "Ricardo Ambrogi",
|
||||||
|
"license": "MIT",
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/core": "^7.1.6",
|
||||||
|
"@babel/plugin-proposal-class-properties": "^7.3.4",
|
||||||
|
"@babel/plugin-proposal-object-rest-spread": "^7.3.2",
|
||||||
|
"@babel/plugin-transform-runtime": "^7.3.4",
|
||||||
|
"@babel/preset-env": "^7.1.6",
|
||||||
|
"@babel/preset-typescript": "^7.1.0",
|
||||||
|
"@babel/runtime": "^7.3.4",
|
||||||
|
"@types/jest": "^23.3.5",
|
||||||
|
"@types/node": "^11.13.7",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^1.9.0",
|
||||||
|
"@typescript-eslint/parser": "^1.9.0",
|
||||||
|
"babel-loader": "^8.0.4",
|
||||||
|
"eslint": "^5.12.1",
|
||||||
|
"jest": "^24.0.0",
|
||||||
|
"ts-loader": "^5.4.5",
|
||||||
|
"typescript": "^3.4.5",
|
||||||
|
"webpack": "^4.28.4",
|
||||||
|
"webpack-cli": "^3.2.3"
|
||||||
|
}
|
||||||
|
}
|
||||||
120
src/__mocks__/base.ts
Normal file
120
src/__mocks__/base.ts
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Client from "../client";
|
||||||
|
import Config from "../config";
|
||||||
|
import HttpURLConnectionClient from "../httpClient/httpURLConnectionClient";
|
||||||
|
import {
|
||||||
|
AmountsReq,
|
||||||
|
MessageCategoryType,
|
||||||
|
MessageClassType,
|
||||||
|
MessageHeader,
|
||||||
|
MessageType,
|
||||||
|
PaymentRequest,
|
||||||
|
PaymentTransaction,
|
||||||
|
SaleData,
|
||||||
|
SaleToPoiRequest,
|
||||||
|
TerminalApiRequest,
|
||||||
|
TransactionIdentification,
|
||||||
|
} from "../typings/terminal";
|
||||||
|
import HttpClientException from "../httpClient/httpClientException";
|
||||||
|
|
||||||
|
jest.mock("../httpClient/httpURLConnectionClient");
|
||||||
|
|
||||||
|
interface Options { code: number }
|
||||||
|
export const createMockClientFromResponse = (response: string, { code }: Options = {code: 200}): Client => {
|
||||||
|
const httpURLConnectionClient: HttpURLConnectionClient = new HttpURLConnectionClient();
|
||||||
|
// @ts-ignore
|
||||||
|
httpURLConnectionClient.request.mockImplementation(
|
||||||
|
(endpoint: string, json: string, config: Config, isApiRequired: boolean): Promise<string> => {
|
||||||
|
if (
|
||||||
|
typeof endpoint === "string" &&
|
||||||
|
typeof json === "string" &&
|
||||||
|
config instanceof Config &&
|
||||||
|
(isApiRequired ? typeof isApiRequired === "boolean" : true) &&
|
||||||
|
code >= 200 && code < 300
|
||||||
|
) {
|
||||||
|
return Promise.resolve(response);
|
||||||
|
} else {
|
||||||
|
return Promise.reject(new HttpClientException(response, code));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const config: Config = new Config();
|
||||||
|
config.terminalApiCloudEndpoint = Client.TERMINAL_API_ENDPOINT_TEST;
|
||||||
|
config.hmacKey = "DFB1EB5485895CFA84146406857104ABB4CBCABDC8AAF103A624C8F6A3EAAB00";
|
||||||
|
config.endpoint = Client.ENDPOINT_TEST;
|
||||||
|
config.checkoutEndpoint = Client.CHECKOUT_ENDPOINT_TEST;
|
||||||
|
|
||||||
|
const client: Client = new Client({ config });
|
||||||
|
client.httpClient = httpURLConnectionClient;
|
||||||
|
|
||||||
|
return client;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const createTerminalAPIPaymentRequest = (): TerminalApiRequest => {
|
||||||
|
|
||||||
|
const messageHeader: MessageHeader = {
|
||||||
|
messageCategory: MessageCategoryType.Payment,
|
||||||
|
messageClass: MessageClassType.Service,
|
||||||
|
messageType: MessageType.Request,
|
||||||
|
poiid: "P400Plus-123456789",
|
||||||
|
protocolVersion: "3.0",
|
||||||
|
saleId: "001",
|
||||||
|
serviceId: "001",
|
||||||
|
};
|
||||||
|
|
||||||
|
const timestamp = new Date().toISOString();
|
||||||
|
const transactionIdentification: TransactionIdentification = {
|
||||||
|
timeStamp: timestamp,
|
||||||
|
transactionId: "001",
|
||||||
|
};
|
||||||
|
|
||||||
|
const saleData: SaleData = {
|
||||||
|
saleTransactionId: transactionIdentification,
|
||||||
|
};
|
||||||
|
|
||||||
|
const amountsReq: AmountsReq = {
|
||||||
|
currency: "EUR",
|
||||||
|
requestedAmount: 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
const paymentTransaction: PaymentTransaction = {
|
||||||
|
amountsReq: amountsReq,
|
||||||
|
};
|
||||||
|
|
||||||
|
const paymentRequest: PaymentRequest = {
|
||||||
|
paymentTransaction: paymentTransaction,
|
||||||
|
saleData: saleData,
|
||||||
|
};
|
||||||
|
|
||||||
|
const saleToPOIRequest: SaleToPoiRequest = {
|
||||||
|
messageHeader: messageHeader,
|
||||||
|
paymentRequest: paymentRequest,
|
||||||
|
};
|
||||||
|
|
||||||
|
const terminalApiRequest: TerminalApiRequest = {
|
||||||
|
saleToPoiRequest: saleToPOIRequest,
|
||||||
|
};
|
||||||
|
|
||||||
|
return terminalApiRequest;
|
||||||
|
};
|
||||||
986
src/__mocks__/checkout/paymentMethodsSuccess.ts
Normal file
986
src/__mocks__/checkout/paymentMethodsSuccess.ts
Normal file
@@ -0,0 +1,986 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
export const paymentMethodsSuccess = JSON.stringify({
|
||||||
|
paymentMethods: [
|
||||||
|
{
|
||||||
|
name: "AliPay",
|
||||||
|
type: "alipay",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "AliPay",
|
||||||
|
type: "alipay_wap",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
details: [
|
||||||
|
{
|
||||||
|
key: "additionalData.card.encrypted.json",
|
||||||
|
type: "cardToken",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "Credit Card",
|
||||||
|
type: "scheme",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Credit Card via AsiaPay",
|
||||||
|
type: "asiapay",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "BancNet",
|
||||||
|
type: "bancnet",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Bank Transfer (BE)",
|
||||||
|
type: "bankTransfer_BE",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Bank Transfer (DE)",
|
||||||
|
type: "bankTransfer_DE",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Bank Transfer (DK)",
|
||||||
|
type: "bankTransfer_DK",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Bank Transfer (GB)",
|
||||||
|
type: "bankTransfer_GB",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "SEPA Bank Transfer",
|
||||||
|
type: "bankTransfer_IBAN",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Bank Transfer (NL)",
|
||||||
|
type: "bankTransfer_NL",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Bank Transfer (NO)",
|
||||||
|
type: "bankTransfer_NO",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Bank Transfer (PL)",
|
||||||
|
type: "bankTransfer_PL",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Bank Transfer (SE)",
|
||||||
|
type: "bankTransfer_SE",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Russian Bank Transfer",
|
||||||
|
type: "bank_ru",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
details: [
|
||||||
|
{
|
||||||
|
key: "additionalData.card.encrypted.json",
|
||||||
|
type: "cardToken",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "Bancontact card",
|
||||||
|
type: "bcmc",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Boleto Bancario via HSBC",
|
||||||
|
type: "boletobancario_hsbc",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Boleto Bancario via Itau",
|
||||||
|
type: "boletobancario_itau",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Boleto Bancario via Santander",
|
||||||
|
type: "boletobancario_santander",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "c_cash",
|
||||||
|
type: "c_cash",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "CashU",
|
||||||
|
type: "cashu",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Paiement en 3 fois par Cartes Bancaires",
|
||||||
|
type: "cofinoga_3xcb",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "DineroMail",
|
||||||
|
type: "dineromail",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Online bank transfer.",
|
||||||
|
type: "directEbanking",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Direct Debit Brazil - Banco do Brazil",
|
||||||
|
type: "directdebit_BR_bancodobrasil",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Direct Debit Brazil - Bradesco",
|
||||||
|
type: "directdebit_BR_bradesco",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Direct Debit Brazil - Caixa Economica Federal",
|
||||||
|
type: "directdebit_BR_caixa",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Direct Debit Brazil - HSBC",
|
||||||
|
type: "directdebit_BR_hsbc",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Direct Debit Brazil - Itau",
|
||||||
|
type: "directdebit_BR_itau",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Direct Debit Brazil - Santander",
|
||||||
|
type: "directdebit_BR_santander",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Eenmalige machtiging",
|
||||||
|
type: "directdebit_NL",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
details: [
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: "11",
|
||||||
|
name: "Bank transfer / postal",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "74",
|
||||||
|
name: "Banki Spółdzielcze",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "73",
|
||||||
|
name: "BLIK",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "32",
|
||||||
|
name: "BNP Paribas",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "16",
|
||||||
|
name: "Credit Agricole",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "83",
|
||||||
|
name: "EnveloBank",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "55",
|
||||||
|
name: "erata - dotpay installment",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "93",
|
||||||
|
name: "eSKOK",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "56",
|
||||||
|
name: "eurobank płatności online",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "76",
|
||||||
|
name: "Getin Bank PBL",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "81",
|
||||||
|
name: "Idea Cloud",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "7",
|
||||||
|
name: "ING Corporate customers",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "35",
|
||||||
|
name: "Kantor Polski",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "44",
|
||||||
|
name: "Millennium - Płatności Internetowe",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "10",
|
||||||
|
name: "Millennium Corporate customers",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "68",
|
||||||
|
name: "mRaty",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "1",
|
||||||
|
name: "mTransfer",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "80",
|
||||||
|
name: "Noble Pay",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "50",
|
||||||
|
name: "Pay Way Toyota Bank",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "45",
|
||||||
|
name: "Pay with Alior Bank",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "65",
|
||||||
|
name: "Paylink Idea Bank",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "36",
|
||||||
|
name: "Pekao24Przelew",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "70",
|
||||||
|
name: "Pocztowy24",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "6",
|
||||||
|
name: "Przelew24",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "46",
|
||||||
|
name: "Płacę z Citi Handlowy",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "38",
|
||||||
|
name: "Płacę z ING",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "2",
|
||||||
|
name: "Płacę z Inteligo",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "4",
|
||||||
|
name: "Płacę z iPKO",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "72",
|
||||||
|
name: "Płacę z Orange",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "66",
|
||||||
|
name: "Płacę z PBS",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "75",
|
||||||
|
name: "Płacę z Plus Bank",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "51",
|
||||||
|
name: "Płać z BOŚ",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "48",
|
||||||
|
name: "R-Przelew",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "88",
|
||||||
|
name: "Raiffeisen",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "52",
|
||||||
|
name: "SkyCash",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "58",
|
||||||
|
name: "Szybkie Platnosci Internetowe z Deutsche Bank PBC",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "60",
|
||||||
|
name: "T-Mobile usługi bankowe",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "21",
|
||||||
|
name: "VIA - Moje Rachunki",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "84",
|
||||||
|
name: "Volkswagen Bank direct",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "31",
|
||||||
|
name: "Zaplac w Zabce i we Freshmarket",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "24",
|
||||||
|
name: "mPay",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
key: "issuer",
|
||||||
|
type: "select",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "Local Polish Payment Methods",
|
||||||
|
type: "dotpay",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Finnish E-Banking",
|
||||||
|
type: "ebanking_FI",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Lastschrift (ELV)",
|
||||||
|
type: "elv",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
details: [
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: "550",
|
||||||
|
name: "?eská spo?itelna",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "231",
|
||||||
|
name: "POP Pankki",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "551",
|
||||||
|
name: "Kb",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "232",
|
||||||
|
name: "Aktia",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "552",
|
||||||
|
name: "Raiffeisen",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "750",
|
||||||
|
name: "Swedbank",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "211",
|
||||||
|
name: "Nordea",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "233",
|
||||||
|
name: "Säästöpankki",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "553",
|
||||||
|
name: "Csob",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "751",
|
||||||
|
name: "SEB",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "234",
|
||||||
|
name: "S-Pankki",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "554",
|
||||||
|
name: "Moneta",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "752",
|
||||||
|
name: "Nordea",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "235",
|
||||||
|
name: "OmaSP",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "213",
|
||||||
|
name: "Op-Pohjola",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "555",
|
||||||
|
name: "UniCredit",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "753",
|
||||||
|
name: "LHV",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "556",
|
||||||
|
name: "Fio",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "557",
|
||||||
|
name: "mBank",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "216",
|
||||||
|
name: "Handelsbanken",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "260",
|
||||||
|
name: "Länsförsäkringar",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "240",
|
||||||
|
name: "BankDeposit",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "265",
|
||||||
|
name: "Sparbanken",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "640",
|
||||||
|
name: "BankDeposit",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "200",
|
||||||
|
name: "Ålandsbanken",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "720",
|
||||||
|
name: "Swedbank",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "940",
|
||||||
|
name: "Swedbank",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "204",
|
||||||
|
name: "Danske Bank",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "721",
|
||||||
|
name: "SEB",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "941",
|
||||||
|
name: "SEB",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "722",
|
||||||
|
name: "DNB",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "942",
|
||||||
|
name: "Citadele",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "205",
|
||||||
|
name: "Handelsbanken",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "723",
|
||||||
|
name: "Šiaulių Bankas",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "943",
|
||||||
|
name: "DNB",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "206",
|
||||||
|
name: "Nordea",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "724",
|
||||||
|
name: "Nordea",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "207",
|
||||||
|
name: "SEB",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "208",
|
||||||
|
name: "Skandiabanken",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "209",
|
||||||
|
name: "Swedbank",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
key: "issuer",
|
||||||
|
type: "select",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "Bank Payment",
|
||||||
|
type: "entercash",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Nationale Entertainment Card",
|
||||||
|
type: "entertainmentcard",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gall & Gall",
|
||||||
|
type: "gallgall",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Generic GiftCard",
|
||||||
|
type: "genericgiftcard",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
details: [
|
||||||
|
{
|
||||||
|
key: "bic",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "GiroPay",
|
||||||
|
type: "giropay",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Globe GCash",
|
||||||
|
type: "globegcash",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Hunkemoller Lingerie Card",
|
||||||
|
type: "hmlingerie",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
details: [
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: "1121",
|
||||||
|
name: "Test Issuer",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "1154",
|
||||||
|
name: "Test Issuer 5",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "1153",
|
||||||
|
name: "Test Issuer 4",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "1152",
|
||||||
|
name: "Test Issuer 3",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "1151",
|
||||||
|
name: "Test Issuer 2",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "1162",
|
||||||
|
name: "Test Issuer Cancelled",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "1161",
|
||||||
|
name: "Test Issuer Pending",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "1160",
|
||||||
|
name: "Test Issuer Refused",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "1159",
|
||||||
|
name: "Test Issuer 10",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "1158",
|
||||||
|
name: "Test Issuer 9",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "1157",
|
||||||
|
name: "Test Issuer 8",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "1156",
|
||||||
|
name: "Test Issuer 7",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "1155",
|
||||||
|
name: "Test Issuer 6",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
key: "idealIssuer",
|
||||||
|
type: "select",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "iDEAL",
|
||||||
|
type: "ideal",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Phone Payment",
|
||||||
|
type: "ivr",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Landline phone",
|
||||||
|
type: "ivrLandline",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Mobile phone",
|
||||||
|
type: "ivrMobile",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
details: [
|
||||||
|
{
|
||||||
|
details: [
|
||||||
|
{
|
||||||
|
key: "firstName",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "infix",
|
||||||
|
optional: "true",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "lastName",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: "M",
|
||||||
|
name: "MALE",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "F",
|
||||||
|
name: "FEMALE",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
key: "gender",
|
||||||
|
type: "radio",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "dateOfBirth",
|
||||||
|
type: "date",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "telephoneNumber",
|
||||||
|
type: "tel",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "socialSecurityNumber",
|
||||||
|
optional: "true",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "shopperEmail",
|
||||||
|
type: "emailAddress",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
key: "personalDetails",
|
||||||
|
type: "fieldSet",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
details: [
|
||||||
|
{
|
||||||
|
key: "street",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "houseNumberOrName",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "city",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "postalCode",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "stateOrProvince",
|
||||||
|
optional: "true",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: "SE",
|
||||||
|
name: "SWEDEN",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "NO",
|
||||||
|
name: "NORWAY",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "FI",
|
||||||
|
name: "FINLAND",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "DK",
|
||||||
|
name: "DENMARK",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "AT",
|
||||||
|
name: "AUSTRIA",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "DE",
|
||||||
|
name: "GERMANY",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "NL",
|
||||||
|
name: "NETHERLANDS",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
key: "country",
|
||||||
|
type: "select",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
key: "billingAddress",
|
||||||
|
type: "address",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "separateDeliveryAddress",
|
||||||
|
optional: "true",
|
||||||
|
type: "boolean",
|
||||||
|
value: "false",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
details: [
|
||||||
|
{
|
||||||
|
key: "street",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "houseNumberOrName",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "city",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "postalCode",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "stateOrProvince",
|
||||||
|
optional: "true",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: "SE",
|
||||||
|
name: "SWEDEN",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "NO",
|
||||||
|
name: "NORWAY",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "FI",
|
||||||
|
name: "FINLAND",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "DK",
|
||||||
|
name: "DENMARK",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "AT",
|
||||||
|
name: "AUSTRIA",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "DE",
|
||||||
|
name: "GERMANY",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "NL",
|
||||||
|
name: "NETHERLANDS",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
key: "country",
|
||||||
|
type: "select",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
key: "deliveryAddress",
|
||||||
|
optional: "true",
|
||||||
|
type: "address",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "Pay later with Klarna.",
|
||||||
|
type: "klarna",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Multibanco",
|
||||||
|
type: "multibanco",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Russian Online Payments",
|
||||||
|
type: "online_RU",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Invoice",
|
||||||
|
type: "openinvoice",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "PayPal",
|
||||||
|
type: "paypal",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Paysafecard",
|
||||||
|
type: "paysafecard",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "POLi",
|
||||||
|
type: "poli",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
details: [
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: "+7",
|
||||||
|
name: "RU",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+9955",
|
||||||
|
name: "GE",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+507",
|
||||||
|
name: "PA",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+44",
|
||||||
|
name: "GB",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+992",
|
||||||
|
name: "TJ",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+370",
|
||||||
|
name: "LT",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+972",
|
||||||
|
name: "IL",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+996",
|
||||||
|
name: "KG",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+380",
|
||||||
|
name: "UA",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+84",
|
||||||
|
name: "VN",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+90",
|
||||||
|
name: "TR",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+994",
|
||||||
|
name: "AZ",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+374",
|
||||||
|
name: "AM",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+371",
|
||||||
|
name: "LV",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+91",
|
||||||
|
name: "IN",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+66",
|
||||||
|
name: "TH",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+373",
|
||||||
|
name: "MD",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+1",
|
||||||
|
name: "US",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+81",
|
||||||
|
name: "JP",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+998",
|
||||||
|
name: "UZ",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+77",
|
||||||
|
name: "KZ",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+375",
|
||||||
|
name: "BY",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+372",
|
||||||
|
name: "EE",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+40",
|
||||||
|
name: "RO",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "+82",
|
||||||
|
name: "KR",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
key: "qiwiwallet.telephoneNumberPrefix",
|
||||||
|
type: "select",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "qiwiwallet.telephoneNumber",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "Qiwi Wallet",
|
||||||
|
type: "qiwiwallet",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "RatePay Invoice",
|
||||||
|
type: "ratepay",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "SafetyPay",
|
||||||
|
type: "safetypay",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
details: [
|
||||||
|
{
|
||||||
|
key: "sepa.ownerName",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "sepa.ibanNumber",
|
||||||
|
type: "text",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: "SEPA Direct Debit",
|
||||||
|
type: "sepadirectdebit",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Premium SMS",
|
||||||
|
type: "sms",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "TenPay",
|
||||||
|
type: "tenpay",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Russian Cash Terminal Payments",
|
||||||
|
type: "terminal_RU",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Trustly Direct bank e-Payments",
|
||||||
|
type: "trustly",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Online Banking by Trustpay",
|
||||||
|
type: "trustpay",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "UnionPay",
|
||||||
|
type: "unionpay",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Russian Wallet Payments",
|
||||||
|
type: "wallet_RU",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Webshop Giftcard",
|
||||||
|
type: "webshopgiftcard",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Your Gift",
|
||||||
|
type: "yourgift",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
export const paymentSessionError = JSON.stringify({
|
||||||
|
status: 422,
|
||||||
|
errorCode: "14_012",
|
||||||
|
message: "The provided SDK token could not be parsed.",
|
||||||
|
errorType: "validation",
|
||||||
|
});
|
||||||
5
src/__mocks__/checkout/paymentSessionSucess.ts
Normal file
5
src/__mocks__/checkout/paymentSessionSucess.ts
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,6 @@
|
|||||||
|
export const paymentMethodsError = JSON.stringify({
|
||||||
|
errorCode: "901",
|
||||||
|
errorType: "security",
|
||||||
|
message: "Invalid Merchant Account",
|
||||||
|
status: 403,
|
||||||
|
});
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
export const paymentDetailsError = JSON.stringify({
|
||||||
|
status: 422,
|
||||||
|
errorCode: "101",
|
||||||
|
message: "Invalid card number",
|
||||||
|
errorType: "validation",
|
||||||
|
});
|
||||||
9
src/__mocks__/checkout/paymentsDetailsSuccess.ts
Normal file
9
src/__mocks__/checkout/paymentsDetailsSuccess.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
export const paymentDetailsSuccess = JSON.stringify({
|
||||||
|
pspReference: "8515232733321252",
|
||||||
|
resultCode: "Authorised",
|
||||||
|
additionalData: {
|
||||||
|
liabilityShift: "true",
|
||||||
|
refusalReasonRaw: "AUTHORISED",
|
||||||
|
},
|
||||||
|
});
|
||||||
7
src/__mocks__/checkout/paymentsErrorInvalidData422.ts
Normal file
7
src/__mocks__/checkout/paymentsErrorInvalidData422.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
export const paymentsError = JSON.stringify({
|
||||||
|
status: 422,
|
||||||
|
errorCode: "130",
|
||||||
|
message: "Reference Missing",
|
||||||
|
errorType: "validation",
|
||||||
|
});
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
export const paymentsResultError = JSON.stringify({
|
||||||
|
status: 422,
|
||||||
|
errorCode: "14_018",
|
||||||
|
message: "Invalid payload provided",
|
||||||
|
errorType: "validation",
|
||||||
|
});
|
||||||
15
src/__mocks__/checkout/paymentsResultMultibancoSuccess.ts
Normal file
15
src/__mocks__/checkout/paymentsResultMultibancoSuccess.ts
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
export const paymentsResultMultibancoSuccess = JSON.stringify({
|
||||||
|
additionalData: {
|
||||||
|
"cvcResult": "0",
|
||||||
|
"avsResult": "0",
|
||||||
|
"comprafacil.deadline": "3",
|
||||||
|
"comprafacil.reference": "123 123 123",
|
||||||
|
"paymentMethod": "multibanco",
|
||||||
|
"paymentMethodVariant": "multibanco",
|
||||||
|
"comprafacil.entity": "12345",
|
||||||
|
"comprafacil.amount": "101.01",
|
||||||
|
},
|
||||||
|
pspReference: "8111111111111111",
|
||||||
|
resultCode: "Received",
|
||||||
|
});
|
||||||
5
src/__mocks__/checkout/paymentsResultSucess.ts
Normal file
5
src/__mocks__/checkout/paymentsResultSucess.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
export const paymentsResultSuccess = JSON.stringify({
|
||||||
|
pspReference: "8535253563623704",
|
||||||
|
resultCode: "Authorised",
|
||||||
|
});
|
||||||
98
src/__mocks__/checkout/paymentsSuccess.ts
Normal file
98
src/__mocks__/checkout/paymentsSuccess.ts
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
export const paymentsSuccess = JSON.stringify({
|
||||||
|
additionalData: {
|
||||||
|
expiryDate: "8/2018",
|
||||||
|
fraudResultType: "GREEN",
|
||||||
|
cardBin: "411111",
|
||||||
|
cardSummary: "1111",
|
||||||
|
fraudManualReview: "false",
|
||||||
|
aliasType: "Default",
|
||||||
|
alias: "H167852639363479",
|
||||||
|
cardPaymentMethod: "visa",
|
||||||
|
cardIssuingCountry: "NL",
|
||||||
|
},
|
||||||
|
fraudResult: {
|
||||||
|
accountScore: 0,
|
||||||
|
results: [
|
||||||
|
{
|
||||||
|
FraudCheckResult: {
|
||||||
|
accountScore: 0,
|
||||||
|
checkId: 2,
|
||||||
|
name: "CardChunkUsage",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
FraudCheckResult: {
|
||||||
|
accountScore: 0,
|
||||||
|
checkId: 3,
|
||||||
|
name: "PaymentDetailUsage",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
FraudCheckResult: {
|
||||||
|
accountScore: 0,
|
||||||
|
checkId: 4,
|
||||||
|
name: "HolderNameUsage",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
FraudCheckResult: {
|
||||||
|
accountScore: 0,
|
||||||
|
checkId: 1,
|
||||||
|
name: "PaymentDetailRefCheck",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
FraudCheckResult: {
|
||||||
|
accountScore: 0,
|
||||||
|
checkId: 13,
|
||||||
|
name: "IssuerRefCheck",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
FraudCheckResult: {
|
||||||
|
accountScore: 0,
|
||||||
|
checkId: 15,
|
||||||
|
name: "IssuingCountryReferral",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
FraudCheckResult: {
|
||||||
|
accountScore: 0,
|
||||||
|
checkId: 27,
|
||||||
|
name: "PmOwnerRefCheck",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
FraudCheckResult: {
|
||||||
|
accountScore: 0,
|
||||||
|
checkId: 10,
|
||||||
|
name: "HolderNameContainsNumber",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
FraudCheckResult: {
|
||||||
|
accountScore: 0,
|
||||||
|
checkId: 11,
|
||||||
|
name: "HolderNameIsOneWord",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
FraudCheckResult: {
|
||||||
|
accountScore: 0,
|
||||||
|
checkId: 82,
|
||||||
|
name: "CustomFieldCheck",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
FraudCheckResult: {
|
||||||
|
accountScore: 0,
|
||||||
|
checkId: 25,
|
||||||
|
name: "CVCAuthResultCheck",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
pspReference: "8535296650153317",
|
||||||
|
resultCode: "Authorised",
|
||||||
|
});
|
||||||
7
src/__mocks__/checkoutUtility/originkeysSuccess.ts
Normal file
7
src/__mocks__/checkoutUtility/originkeysSuccess.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
export const originKeysSuccess = JSON.stringify({
|
||||||
|
originKeys: {
|
||||||
|
"https://www.your-domain1.com": "pub.v2.7814286629520534.aHR0cHM6Ly93d3cueW91ci1kb21haW4xLmNvbQ.UEwIBmW9-c_uXo5wSEr2w8Hz8hVIpujXPHjpcEse3xI",
|
||||||
|
"https://www.your-domain2.com": "pub.v2.7814286629520534.aHR0cHM6Ly93d3cueW91ci1kb21haW4yLmNvbQ.EP6eXBJKk0t7-QIUl6e_b1qMuMHGepxG_SlUqxAYrfY",
|
||||||
|
"https://www.your-domain3.com": "pub.v2.7814286629520534.aHR0cHM6Ly93d3cueW91ci1kb21haW4zLmNvbQ.fUvflu-YIdZSsLEH8Qqmr7ksE4ag_NYiiMXK0s6aq_4",
|
||||||
|
},
|
||||||
|
});
|
||||||
36
src/__mocks__/notification/authorisationTrue.json
Normal file
36
src/__mocks__/notification/authorisationTrue.json
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"live": "false",
|
||||||
|
"notificationItems": [
|
||||||
|
{
|
||||||
|
"NotificationRequestItem": {
|
||||||
|
"additionalData": {
|
||||||
|
"expiryDate": "12\/2012",
|
||||||
|
" NAME1 ": "VALUE1",
|
||||||
|
"authCode": "1234",
|
||||||
|
"cardSummary": "7777",
|
||||||
|
"totalFraudScore": "10",
|
||||||
|
"hmacSignature": "OzDjCMZIsdtDqrZ+cl\/FWC+WdESrorctXTzAzW33dXI=",
|
||||||
|
"NAME2": " VALUE2 ",
|
||||||
|
"fraudCheck-6-ShopperIpUsage": "10"
|
||||||
|
},
|
||||||
|
"amount": {
|
||||||
|
"currency": "EUR",
|
||||||
|
"value": 10100
|
||||||
|
},
|
||||||
|
"eventCode": "AUTHORISATION",
|
||||||
|
"eventDate": "2017-01-19T16:42:03+01:00",
|
||||||
|
"merchantAccountCode": "MagentoMerchantTest2",
|
||||||
|
"merchantReference": "8313842560770001",
|
||||||
|
"operations": [
|
||||||
|
"CANCEL",
|
||||||
|
"CAPTURE",
|
||||||
|
"REFUND"
|
||||||
|
],
|
||||||
|
"paymentMethod": "visa",
|
||||||
|
"pspReference": "123456789",
|
||||||
|
"reason": "1234:7777:12\/2012",
|
||||||
|
"success": "true"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
25
src/__mocks__/notification/captureFalse.json
Normal file
25
src/__mocks__/notification/captureFalse.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"live": "false",
|
||||||
|
"notificationItems": [
|
||||||
|
{
|
||||||
|
"NotificationRequestItem": {
|
||||||
|
"additionalData": {
|
||||||
|
"hmacSignature": "KujHNqpyCAMdGefj7lfQ8AeD0Jke9Zs2bVAqScQDWi4="
|
||||||
|
},
|
||||||
|
"amount": {
|
||||||
|
"currency": "USD",
|
||||||
|
"value": 23623
|
||||||
|
},
|
||||||
|
"eventCode": "CAPTURE",
|
||||||
|
"eventDate": "2017-01-25T18:08:19+01:00",
|
||||||
|
"merchantAccountCode": "MagentoMerchantTest2",
|
||||||
|
"merchantReference": "00000001",
|
||||||
|
"originalReference": "ORIGINAL_PSP",
|
||||||
|
"paymentMethod": "visa",
|
||||||
|
"pspReference": "PSP_REFERENCE",
|
||||||
|
"reason": "Insufficient balance on payment",
|
||||||
|
"success": "false"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
25
src/__mocks__/notification/captureTrue.json
Normal file
25
src/__mocks__/notification/captureTrue.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"live": "false",
|
||||||
|
"notificationItems": [
|
||||||
|
{
|
||||||
|
"NotificationRequestItem": {
|
||||||
|
"additionalData": {
|
||||||
|
"hmacSignature": "qvS6I3Gdi1jx+jSh7IopAgcHtMoxvXlNL7DYQ+j1hd0="
|
||||||
|
},
|
||||||
|
"amount": {
|
||||||
|
"currency": "USD",
|
||||||
|
"value": 23623
|
||||||
|
},
|
||||||
|
"eventCode": "CAPTURE",
|
||||||
|
"eventDate": "2017-01-25T18:08:19+01:00",
|
||||||
|
"merchantAccountCode": "MagentoMerchantTest2",
|
||||||
|
"merchantReference": "00000001",
|
||||||
|
"originalReference": "ORIGINAL_PSP",
|
||||||
|
"paymentMethod": "visa",
|
||||||
|
"pspReference": "PSP_REFERENCE",
|
||||||
|
"reason": "",
|
||||||
|
"success": "true"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
25
src/__mocks__/notification/refundFalse.json
Normal file
25
src/__mocks__/notification/refundFalse.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"live": "false",
|
||||||
|
"notificationItems": [
|
||||||
|
{
|
||||||
|
"NotificationRequestItem": {
|
||||||
|
"additionalData": {
|
||||||
|
"hmacSignature": "HZXziBYopfDIzDhk49iC\/\/yCfxmy\/z0xWuvvTxFNUSA="
|
||||||
|
},
|
||||||
|
"amount": {
|
||||||
|
"currency": "EUR",
|
||||||
|
"value": 1500
|
||||||
|
},
|
||||||
|
"eventCode": "REFUND",
|
||||||
|
"eventDate": "2017-02-17T11:04:07+01:00",
|
||||||
|
"merchantAccountCode": "MagentoMerchantTest2",
|
||||||
|
"merchantReference": "payment-2017-1-17-11-refund",
|
||||||
|
"originalReference": "ORIGINAL_PSP",
|
||||||
|
"paymentMethod": "visa",
|
||||||
|
"pspReference": "PSP_REFERENCE",
|
||||||
|
"reason": "Insufficient balance on payment",
|
||||||
|
"success": "false"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
25
src/__mocks__/notification/refundTrue.json
Normal file
25
src/__mocks__/notification/refundTrue.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"live": "false",
|
||||||
|
"notificationItems": [
|
||||||
|
{
|
||||||
|
"NotificationRequestItem": {
|
||||||
|
"additionalData": {
|
||||||
|
"hmacSignature": "KJFhURWP8Pv9m8k+7NGHNJAupBj6X6J\/VWAikFxeWhA="
|
||||||
|
},
|
||||||
|
"amount": {
|
||||||
|
"currency": "EUR",
|
||||||
|
"value": 1500
|
||||||
|
},
|
||||||
|
"eventCode": "REFUND",
|
||||||
|
"eventDate": "2017-02-17T11:11:44+01:00",
|
||||||
|
"merchantAccountCode": "MagentoMerchantTest2",
|
||||||
|
"merchantReference": "payment-2017-1-17-11-refund",
|
||||||
|
"originalReference": "ORIGINAL_PSP",
|
||||||
|
"paymentMethod": "visa",
|
||||||
|
"pspReference": "PSP_REFERENCE",
|
||||||
|
"reason": "",
|
||||||
|
"success": "true"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
3
src/__mocks__/recurring/disableSuccess.ts
Normal file
3
src/__mocks__/recurring/disableSuccess.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export const disableSuccess = JSON.stringify({
|
||||||
|
response: "[detail-successfully-disabled]",
|
||||||
|
});
|
||||||
52
src/__mocks__/recurring/listRecurringDetailsSuccess.ts
Normal file
52
src/__mocks__/recurring/listRecurringDetailsSuccess.ts
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
export const listRecurringDetailsSuccess = JSON.stringify({
|
||||||
|
creationDate: new Date("2017-03-01T11:53:11+01:00"),
|
||||||
|
details: [
|
||||||
|
{
|
||||||
|
additionalData: {
|
||||||
|
cardBin: "411111",
|
||||||
|
},
|
||||||
|
alias: "cardAlias",
|
||||||
|
aliasType: "Default",
|
||||||
|
card: {
|
||||||
|
expiryMonth: "8",
|
||||||
|
expiryYear: "2018",
|
||||||
|
holderName: "Holder",
|
||||||
|
number: "1111",
|
||||||
|
},
|
||||||
|
contractTypes: [
|
||||||
|
"ONECLICK",
|
||||||
|
],
|
||||||
|
creationDate: new Date("2017-03-07T09:43:33+01:00"),
|
||||||
|
firstPspReference: "8524888762135795",
|
||||||
|
paymentMethodVariant: "visa",
|
||||||
|
recurringDetailReference: "recurringReference",
|
||||||
|
variant: "visa",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
billingAddress: {
|
||||||
|
city: "City",
|
||||||
|
country: "NL",
|
||||||
|
houseNumberOrName: "1",
|
||||||
|
postalCode: "2312aa",
|
||||||
|
stateOrProvince: "NA",
|
||||||
|
street: "Street",
|
||||||
|
},
|
||||||
|
contractTypes: [
|
||||||
|
"RECURRING",
|
||||||
|
],
|
||||||
|
creationDate: new Date("2017-10-10T08:50:02+02:00"),
|
||||||
|
firstPspReference: "8515076181707110",
|
||||||
|
paymentMethodVariant: "paypal",
|
||||||
|
recurringDetailReference: "8315076181982020",
|
||||||
|
tokenDetails: {
|
||||||
|
tokenData: {
|
||||||
|
"BillingAgreementId": "B-7MA42752FE774625C",
|
||||||
|
"EmailId": "tedtest@test.nl",
|
||||||
|
"PayPal.PayerId": "H95EPL8B2KFE6",
|
||||||
|
},
|
||||||
|
tokenDataType: "PayPal",
|
||||||
|
},
|
||||||
|
variant: "paypal",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
1
src/__mocks__/terminalApi/async.ts
Normal file
1
src/__mocks__/terminalApi/async.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export const asyncRes = "ok";
|
||||||
107
src/__mocks__/terminalApi/local.ts
Normal file
107
src/__mocks__/terminalApi/local.ts
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
export const localRes = JSON.stringify({
|
||||||
|
SaleToPOIResponse: {
|
||||||
|
MessageHeader: {
|
||||||
|
MessageCategory: "Payment",
|
||||||
|
MessageClass: "Service",
|
||||||
|
MessageType: "Response",
|
||||||
|
POIID: "P400Plus-275039202",
|
||||||
|
ProtocolVersion: "3.0",
|
||||||
|
SaleID: "325488592",
|
||||||
|
ServiceID: "325488592",
|
||||||
|
},
|
||||||
|
NexoBlob: `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`,
|
||||||
|
SecurityTrailer: {
|
||||||
|
AdyenCryptoVersion: 1,
|
||||||
|
Hmac: "l+5/pYiAbC0V9Xx78ELNDcLMaqTlqx2OyGha37i/g5g=",
|
||||||
|
KeyIdentifier: "CryptoKeyIdentifier12345",
|
||||||
|
KeyVersion: 1,
|
||||||
|
Nonce: "9iiJMpzKfYs3106ozIKNFQ==",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
329
src/__mocks__/terminalApi/sync.ts
Normal file
329
src/__mocks__/terminalApi/sync.ts
Normal file
@@ -0,0 +1,329 @@
|
|||||||
|
export const syncRes = JSON.stringify({
|
||||||
|
SaleToPOIResponse: {
|
||||||
|
MessageHeader: {
|
||||||
|
MessageCategory: "Payment",
|
||||||
|
MessageClass: "Service",
|
||||||
|
MessageType: "Response",
|
||||||
|
POIID: "P400Plus-123456789",
|
||||||
|
ProtocolVersion: "3.0",
|
||||||
|
SaleID: "001",
|
||||||
|
ServiceID: "1234567890",
|
||||||
|
},
|
||||||
|
PaymentResponse: {
|
||||||
|
POIData: {
|
||||||
|
POIReconciliationID: "1000",
|
||||||
|
POITransactionID: {
|
||||||
|
TimeStamp: "2019-04-29T00:00:00.000Z",
|
||||||
|
TransactionID: "4r7i001556529591000.8515565295894301",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
PaymentReceipt: [
|
||||||
|
{
|
||||||
|
DocumentQualifier: "CashierReceipt",
|
||||||
|
OutputContent: {
|
||||||
|
OutputFormat: "Text",
|
||||||
|
OutputText: [
|
||||||
|
{
|
||||||
|
CharacterStyle: "Bold",
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=header1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
CharacterStyle: "Bold",
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=header2",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
CharacterStyle: "Bold",
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=MERCHANT%20COPY&key=merchantTitle",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=filler",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Date&value=29%2f04%2f19&key=txdate",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Time&value=10%3a19%3a51&key=txtime",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=filler",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Card&value=%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a3511&key=pan",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Pref.%20name&value=MCC%20351%20v1%202&key=preferredName",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Card%20type&value=mc&key=cardType",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Payment%20method&value=mc&key=paymentMethod",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Payment%20variant&value=mc&key=paymentMethodVariant",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Entry%20mode&value=Contactless%20swipe&key=posEntryMode",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=filler",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=AID&value=A0000000041010&key=aid",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=MID&value=1000&key=mid",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=TID&value=P400Plus-275039202&key=tid",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=PTID&value=75039202&key=ptid",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=filler",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Auth.%20code&value=123456&key=authCode",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Tender&value=4r7i001556529591000&key=txRef",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Reference&value=003&key=mref",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=filler",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Type&value=GOODS_SERVICES&key=txtype",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
CharacterStyle: "Bold",
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=TOTAL&value=%e2%82%ac%c2%a01.00&key=totalAmount",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=filler",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
CharacterStyle: "Bold",
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=APPROVED&key=approved",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
RequiredSignatureFlag: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
DocumentQualifier: "CustomerReceipt",
|
||||||
|
OutputContent: {
|
||||||
|
OutputFormat: "Text",
|
||||||
|
OutputText: [
|
||||||
|
{
|
||||||
|
CharacterStyle: "Bold",
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=header1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
CharacterStyle: "Bold",
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=header2",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
CharacterStyle: "Bold",
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=CARDHOLDER%20COPY&key=cardholderHeader",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=filler",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Date&value=29%2f04%2f19&key=txdate",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Time&value=10%3a19%3a51&key=txtime",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=filler",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Card&value=%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a3511&key=pan",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Pref.%20name&value=MCC%20351%20v1%202&key=preferredName",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Card%20type&value=mc&key=cardType",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Payment%20method&value=mc&key=paymentMethod",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Payment%20variant&value=mc&key=paymentMethodVariant",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Entry%20mode&value=Contactless%20swipe&key=posEntryMode",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=filler",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=AID&value=A0000000041010&key=aid",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=MID&value=1000&key=mid",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=TID&value=P400Plus-275039202&key=tid",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=PTID&value=75039202&key=ptid",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=filler",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Auth.%20code&value=123456&key=authCode",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Tender&value=4r7i001556529591000&key=txRef",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Reference&value=003&key=mref",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=filler",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Type&value=GOODS_SERVICES&key=txtype",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
CharacterStyle: "Bold",
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=TOTAL&value=%e2%82%ac%c2%a01.00&key=totalAmount",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=filler",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
CharacterStyle: "Bold",
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=APPROVED&key=approved",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "key=filler",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Please%20retain%20for%20your%20records&key=retain",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
EndOfLineFlag: true,
|
||||||
|
Text: "name=Thank%20you&key=thanks",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
RequiredSignatureFlag: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
PaymentResult: {
|
||||||
|
AmountsResp: {
|
||||||
|
AuthorizedAmount: 1,
|
||||||
|
Currency: "EUR",
|
||||||
|
},
|
||||||
|
OnlineFlag: true,
|
||||||
|
PaymentAcquirerData: {
|
||||||
|
AcquirerPOIID: "P400Plus-123456789",
|
||||||
|
AcquirerTransactionID: {
|
||||||
|
TimeStamp: "2019-04-29T09:19:51.000Z",
|
||||||
|
TransactionID: "8515565295894301",
|
||||||
|
},
|
||||||
|
ApprovalCode: "123456",
|
||||||
|
MerchantID: "TestMerchant",
|
||||||
|
},
|
||||||
|
PaymentInstrumentData: {
|
||||||
|
CardData: {
|
||||||
|
EntryMode: [
|
||||||
|
"Tapped",
|
||||||
|
],
|
||||||
|
MaskedPan: "411111 **** 1111",
|
||||||
|
PaymentBrand: "mc",
|
||||||
|
SensitiveCardData: {
|
||||||
|
ExpiryDate: "1225",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
PaymentInstrumentType: "Card",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Response: {
|
||||||
|
AdditionalResponse: `tid=75039202&AID=A0000000041010&transactionType=GOODS_SERVICES&backendGiftcardIndi
|
||||||
|
cator=false&expiryYear=2025&acquirerAccountCode=TestPmmAcquirerAccount&alias=M900978995070104&posOrigin
|
||||||
|
alAmountCurrency=EUR&giftcardIndicator=false&authorisedAmountValue=100&pspReference=8515565295894301&pa
|
||||||
|
ymentMethodVariant=mc&cardHolderName=N%2fA&refusalReasonRaw=APPROVED&authorisationMid=1000&expiryDate=1
|
||||||
|
2%2f2025&applicationPreferredName=MCC%20351%20v1%202&acquirerCode=TestPmmAcquirer&txtime=10%3a19%3a51&i
|
||||||
|
so8601TxDate=2019-04-29T09%3a19%3a51.0000000%2b0000&cardType=mc&posOriginalAmountValue=100&offline=fals
|
||||||
|
e&aliasType=Default&txdate=29-04-2019&paymentMethod=mc&cvcResult=0%20Unknown&avsResult=0%20Unknown&mid=
|
||||||
|
1000&merchantReference=003&transactionReferenceNumber=8515565295894301&expiryMonth=12&cardSummary=3511&
|
||||||
|
posTotalAmountValue=100&posAuthAmountCurrency=EUR&cardHolderVerificationMethodResults=3F0300&authCode=1
|
||||||
|
23456&shopperCountry=NL&posEntryMode=CLESS_SWIPE&cardScheme=mc&cardBin=541333&posAuthAmountValue=100`,
|
||||||
|
Result: "Success",
|
||||||
|
},
|
||||||
|
SaleData: {
|
||||||
|
SaleTransactionID: {
|
||||||
|
TimeStamp: "2019-04-29T00:00:00.000Z",
|
||||||
|
TransactionID: "001",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
116
src/__tests__/binLookup.spec.ts
Normal file
116
src/__tests__/binLookup.spec.ts
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import { createMockClientFromResponse } from "../__mocks__/base";
|
||||||
|
import BinLookup from "../service/binLookup";
|
||||||
|
import {CostEstimateRequest, ThreeDSAvailabilityRequest, ThreeDSAvailabilityResponse} from "../typings/binLookup";
|
||||||
|
|
||||||
|
const threeDSAvailabilitySuccess = {
|
||||||
|
dsPublicKeys: [{
|
||||||
|
brand: "visa",
|
||||||
|
directoryServerId: "F013371337",
|
||||||
|
publicKey: "eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiI4VFBxZkFOWk4xSUEzcHFuMkdhUVZjZ1g4LUpWZ1Y0M2diWURtYmdTY0N5SkVSN3lPWEJqQmQyaTBEcVFBQWpVUVBXVUxZU1FsRFRKYm91bVB1aXVoeVMxUHN2NTM4UHBRRnEySkNaSERkaV85WThVZG9hbmlrU095c2NHQWtBVmJJWHA5cnVOSm1wTTBwZ0s5VGxJSWVHYlE3ZEJaR01OQVJLQXRKeTY3dVlvbVpXV0ZBbWpwM2d4SDVzNzdCR2xkaE9RUVlQTFdybDdyS0pLQlUwNm1tZlktUDNpazk5MmtPUTNEak02bHR2WmNvLThET2RCR0RKYmdWRGFmb29LUnVNd2NUTXhDdTRWYWpyNmQyZkppVXlqNUYzcVBrYng4WDl6a1c3UmlxVno2SU1qdE54NzZicmg3aU9Vd2JiWmoxYWF6VG1GQ2xEb0dyY2JxOV80Nnc9PSJ9"
|
||||||
|
}],
|
||||||
|
threeDS1Supported: true,
|
||||||
|
threeDS2CardRangeDetails: [{
|
||||||
|
brandCode: "visa",
|
||||||
|
endRange: "411111111111",
|
||||||
|
startRange: "411111111111",
|
||||||
|
threeDS2Version: "2.1.0",
|
||||||
|
threeDSMethodURL: "https://pal-test.adyen.com/threeds2simulator/acs/startMethod.shtml"
|
||||||
|
}],
|
||||||
|
threeDS2supported: true
|
||||||
|
};
|
||||||
|
|
||||||
|
describe("Bin Lookup", function (): void {
|
||||||
|
it("should succeed on get 3ds availability", async function (): Promise<void> {
|
||||||
|
const client = createMockClientFromResponse(JSON.stringify(threeDSAvailabilitySuccess));
|
||||||
|
const binLookup = new BinLookup(client);
|
||||||
|
|
||||||
|
const threeDSAvailabilityRequest: ThreeDSAvailabilityRequest = {
|
||||||
|
merchantAccount: client.config.merchantAccount,
|
||||||
|
brands: ["randomBrand"],
|
||||||
|
cardNumber: "4111111111111111"
|
||||||
|
};
|
||||||
|
|
||||||
|
const {
|
||||||
|
dsPublicKeys,
|
||||||
|
threeDS2CardRangeDetails,
|
||||||
|
threeDS1Supported
|
||||||
|
}: ThreeDSAvailabilityResponse = await binLookup.get3dsAvailability(threeDSAvailabilityRequest);
|
||||||
|
expect(dsPublicKeys[0].brand).toEqual("visa");
|
||||||
|
expect(threeDS2CardRangeDetails[0].brandCode).toEqual("visa");
|
||||||
|
expect(threeDS1Supported).toEqual(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should have invalid merchant", async function (): Promise<void> {
|
||||||
|
const client = createMockClientFromResponse(JSON.stringify({
|
||||||
|
status: 403,
|
||||||
|
errorCode: "901",
|
||||||
|
message: "Invalid Merchant Account",
|
||||||
|
errorType: "security"
|
||||||
|
}), {code: 403});
|
||||||
|
const binLookup = new BinLookup(client);
|
||||||
|
|
||||||
|
const threeDSAvailabilityRequest: ThreeDSAvailabilityRequest = {
|
||||||
|
merchantAccount: undefined,
|
||||||
|
cardNumber: "4111111111111",
|
||||||
|
brands: []
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
await binLookup.get3dsAvailability(threeDSAvailabilityRequest);
|
||||||
|
fail("Expected request to fail");
|
||||||
|
} catch (e) {
|
||||||
|
expect(e.statusCode).toEqual(403);
|
||||||
|
expect(JSON.parse(e.message).errorCode).toEqual("901");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should succeed on get cost estimate", async function (): Promise<void> {
|
||||||
|
const client = createMockClientFromResponse(JSON.stringify({
|
||||||
|
cardBin: {summary: "1111"},
|
||||||
|
resultCode: "Unsupported",
|
||||||
|
surchargeType: "ZERO"
|
||||||
|
}));
|
||||||
|
const binLookup = new BinLookup(client);
|
||||||
|
const costEstimateRequest: CostEstimateRequest = {
|
||||||
|
amount: { currency: "EUR", value: 1000 },
|
||||||
|
assumptions: {
|
||||||
|
assumeLevel3Data: true,
|
||||||
|
assume3DSecureAuthenticated: true
|
||||||
|
},
|
||||||
|
cardNumber: "411111111111",
|
||||||
|
merchantAccount: client.config.merchantAccount,
|
||||||
|
merchantDetails: {
|
||||||
|
countryCode: "NL",
|
||||||
|
mcc: "7411",
|
||||||
|
enrolledIn3DSecure: true
|
||||||
|
},
|
||||||
|
shopperInteraction: "Ecommerce"
|
||||||
|
};
|
||||||
|
|
||||||
|
const {cardBin, resultCode, surchargeType} = await binLookup.getCostEstimate(costEstimateRequest);
|
||||||
|
|
||||||
|
expect(cardBin.summary).toEqual("1111");
|
||||||
|
expect(resultCode).toEqual("Unsupported");
|
||||||
|
expect(surchargeType).toEqual("ZERO");
|
||||||
|
});
|
||||||
|
});
|
||||||
267
src/__tests__/checkout.spec.ts
Normal file
267
src/__tests__/checkout.spec.ts
Normal file
@@ -0,0 +1,267 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { createMockClientFromResponse } from "../__mocks__/base";
|
||||||
|
import {paymentMethodsError} from "../__mocks__/checkout/paymentmethodsErrorForbidden403";
|
||||||
|
import {paymentMethodsSuccess} from "../__mocks__/checkout/paymentMethodsSuccess";
|
||||||
|
import {paymentsError} from "../__mocks__/checkout/paymentsErrorInvalidData422";
|
||||||
|
import {paymentsSuccess} from "../__mocks__/checkout/paymentsSuccess";
|
||||||
|
import {paymentDetailsError} from "../__mocks__/checkout/paymentsDetailsErrorInvalidData422";
|
||||||
|
import {paymentDetailsSuccess} from "../__mocks__/checkout/paymentsDetailsSuccess";
|
||||||
|
import {paymentSessionError} from "../__mocks__/checkout/paymentSessionErrorInvalidData422";
|
||||||
|
import {paymentSessionSuccess} from "../__mocks__/checkout/paymentSessionSucess";
|
||||||
|
import {paymentsResultError} from "../__mocks__/checkout/paymentsResultErrorInvalidDataPayload422";
|
||||||
|
import {paymentsResultMultibancoSuccess} from "../__mocks__/checkout/paymentsResultMultibancoSuccess";
|
||||||
|
import {paymentsResultSuccess} from "../__mocks__/checkout/paymentsResultSucess";
|
||||||
|
import Client from "../client";
|
||||||
|
import { TYPE_SCHEME } from "../typings/constants/apiConstants";
|
||||||
|
import Checkout from "../service/checkout";
|
||||||
|
import {
|
||||||
|
Amount,
|
||||||
|
DetailsRequest,
|
||||||
|
PaymentMethodsRequest,
|
||||||
|
PaymentRequest,
|
||||||
|
PaymentResponse,
|
||||||
|
PaymentSetupRequest, PaymentVerificationRequest
|
||||||
|
} from "../typings/checkout";
|
||||||
|
|
||||||
|
function createAmountObject(currency: string, value: number): Amount {
|
||||||
|
return {
|
||||||
|
currency,
|
||||||
|
value,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function createPaymentsDetailsRequest(): DetailsRequest {
|
||||||
|
return {
|
||||||
|
details: {
|
||||||
|
MD: "mdValue",
|
||||||
|
PaRes: "paResValue",
|
||||||
|
},
|
||||||
|
paymentData: "Ab02b4c0!BQABAgCJN1wRZuGJmq8dMncmypvknj9s7l5Tj...",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function createPaymentsCheckoutRequest(): PaymentRequest {
|
||||||
|
const paymentMethodDetails = {
|
||||||
|
cvc: "737",
|
||||||
|
expiryMonth: "10",
|
||||||
|
expiryYear: "2018",
|
||||||
|
holderName: "John Smith",
|
||||||
|
number: "4111111111111111",
|
||||||
|
type: TYPE_SCHEME,
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
amount: createAmountObject("USD", 1000),
|
||||||
|
merchantAccount: "MagentoMerchantTest",
|
||||||
|
paymentMethod: paymentMethodDetails,
|
||||||
|
reference: "Your order number",
|
||||||
|
returnUrl: "https://your-company.com/...",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function createPaymentSessionRequest(): PaymentSetupRequest {
|
||||||
|
return {
|
||||||
|
amount: createAmountObject("USD", 1000),
|
||||||
|
countryCode: "NL",
|
||||||
|
merchantAccount: "MagentoMerchantTest",
|
||||||
|
reference: "Your order number",
|
||||||
|
returnUrl: "https://your-company.com/...",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("Checkout", (): void => {
|
||||||
|
it("should make a payment", async (): Promise<void> => {
|
||||||
|
const client: Client = createMockClientFromResponse(paymentsSuccess);
|
||||||
|
const checkout: Checkout = new Checkout(client);
|
||||||
|
const paymentsRequest: PaymentRequest = createPaymentsCheckoutRequest();
|
||||||
|
const paymentsResponse: PaymentResponse = await checkout.payments(paymentsRequest);
|
||||||
|
expect(paymentsResponse.pspReference).toEqual("8535296650153317");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not make a payment", async (): Promise<void> => {
|
||||||
|
const client: Client = createMockClientFromResponse(paymentsError);
|
||||||
|
const checkout: Checkout = new Checkout(client);
|
||||||
|
const paymentsRequest: PaymentRequest = createPaymentsCheckoutRequest();
|
||||||
|
const paymentsResponse: PaymentResponse = await checkout.payments(paymentsRequest);
|
||||||
|
expect(paymentsResponse.pspReference).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should have valid payment methods", async (): Promise<void> => {
|
||||||
|
const client = createMockClientFromResponse(paymentMethodsSuccess);
|
||||||
|
const checkout: Checkout = new Checkout(client);
|
||||||
|
const paymentMethodsRequest: PaymentMethodsRequest = {
|
||||||
|
merchantAccount: "MagentoMerchantTest",
|
||||||
|
};
|
||||||
|
const paymentMethodsResponse = await checkout.paymentMethods(paymentMethodsRequest);
|
||||||
|
expect(paymentMethodsResponse.paymentMethods.length).toEqual(65);
|
||||||
|
expect(paymentMethodsResponse.paymentMethods[0].name).toEqual("AliPay");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not have valid payment methods", async (): Promise<void> => {
|
||||||
|
const client = createMockClientFromResponse(paymentMethodsError);
|
||||||
|
const checkout: Checkout = new Checkout(client);
|
||||||
|
const paymentMethodsRequest: PaymentMethodsRequest = {
|
||||||
|
merchantAccount: "MagentoMerchantTest",
|
||||||
|
};
|
||||||
|
const paymentMethodsResponse = await checkout.paymentMethods(paymentMethodsRequest);
|
||||||
|
expect(paymentMethodsResponse.paymentMethods).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should have payment details", async (): Promise<void> => {
|
||||||
|
const client: Client = createMockClientFromResponse(paymentDetailsSuccess);
|
||||||
|
const checkout: Checkout = new Checkout(client);
|
||||||
|
const paymentsResponse = await checkout.paymentsDetails(createPaymentsDetailsRequest());
|
||||||
|
expect(paymentsResponse.resultCode).toEqual("Authorised");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not have payment details", async (): Promise<void> => {
|
||||||
|
const client: Client = createMockClientFromResponse(paymentDetailsError);
|
||||||
|
const checkout: Checkout = new Checkout(client);
|
||||||
|
const paymentsResponse = await checkout.paymentsDetails(createPaymentsDetailsRequest());
|
||||||
|
expect(paymentsResponse.resultCode).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should have payment session success", async (): Promise<void> => {
|
||||||
|
const client: Client = createMockClientFromResponse(paymentSessionSuccess);
|
||||||
|
const checkout: Checkout = new Checkout(client);
|
||||||
|
const paymentSessionRequest: PaymentSetupRequest = createPaymentSessionRequest();
|
||||||
|
const paymentSessionResponse = await checkout.paymentSession(paymentSessionRequest);
|
||||||
|
expect(paymentSessionResponse.paymentSession).not.toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not have payment session success", async (): Promise<void> => {
|
||||||
|
const client: Client = createMockClientFromResponse(paymentSessionError);
|
||||||
|
const checkout: Checkout = new Checkout(client);
|
||||||
|
const paymentSessionRequest: PaymentSetupRequest = createPaymentSessionRequest();
|
||||||
|
const paymentSessionResponse = await checkout.paymentSession(paymentSessionRequest);
|
||||||
|
expect(paymentSessionResponse.paymentSession).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should have payments result", async (): Promise<void> => {
|
||||||
|
const client = createMockClientFromResponse(paymentsResultSuccess);
|
||||||
|
const checkout = new Checkout(client);
|
||||||
|
const paymentResultRequest: PaymentVerificationRequest = {
|
||||||
|
payload: "This is a test payload",
|
||||||
|
};
|
||||||
|
const paymentResultResponse = await checkout.paymentResult(paymentResultRequest);
|
||||||
|
expect(paymentResultResponse.resultCode).toEqual("Authorised");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not have payments result", async (): Promise<void> => {
|
||||||
|
const client = createMockClientFromResponse(paymentsResultError);
|
||||||
|
const checkout = new Checkout(client);
|
||||||
|
const paymentResultRequest: PaymentVerificationRequest = {
|
||||||
|
payload: "This is a test payload",
|
||||||
|
};
|
||||||
|
const paymentResultResponse = await checkout.paymentResult(paymentResultRequest);
|
||||||
|
expect(paymentResultResponse.resultCode).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should have missing identifier on live", async (): Promise<void> => {
|
||||||
|
const client = createMockClientFromResponse(paymentsResultError);
|
||||||
|
client.setEnvironment("TEST");
|
||||||
|
try {
|
||||||
|
new Checkout(client);
|
||||||
|
} catch (e) {
|
||||||
|
expect(e.message).toEqual("Please provide your unique live url prefix on the setEnvironment() call on the Client or provide checkoutEndpoint in your config object.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should have custom payment details", async (): Promise<void> => {
|
||||||
|
const paymentsRequest = createPaymentsCheckoutRequest();
|
||||||
|
expect(JSON.parse("{\n"
|
||||||
|
+ " \"amount\": {\n"
|
||||||
|
+ " \"value\": 1000,\n"
|
||||||
|
+ " \"currency\": \"USD\"\n"
|
||||||
|
+ " },\n"
|
||||||
|
+ " \"merchantAccount\": \"MagentoMerchantTest\",\n"
|
||||||
|
+ " \"paymentMethod\": {\n"
|
||||||
|
+ " \"type\": \"scheme\",\n"
|
||||||
|
+ " \"number\": \"4111111111111111\",\n"
|
||||||
|
+ " \"expiryMonth\": \"10\",\n"
|
||||||
|
+ " \"expiryYear\": \"2018\",\n"
|
||||||
|
+ " \"holderName\": \"John Smith\",\n"
|
||||||
|
+ " \"cvc\": \"737\"\n"
|
||||||
|
+ " },\n"
|
||||||
|
+ " \"reference\": \"Your order number\",\n"
|
||||||
|
+ " \"returnUrl\": \"https://your-company.com/...\"\n"
|
||||||
|
+ "}")).toEqual(paymentsRequest);
|
||||||
|
|
||||||
|
paymentsRequest.paymentMethod = {
|
||||||
|
testKey: "testValue",
|
||||||
|
type: "testType",
|
||||||
|
};
|
||||||
|
|
||||||
|
expect(JSON.parse("{\n"
|
||||||
|
+ " \"amount\": {\n"
|
||||||
|
+ " \"value\": 1000,\n"
|
||||||
|
+ " \"currency\": \"USD\"\n"
|
||||||
|
+ " },\n"
|
||||||
|
+ " \"merchantAccount\": \"MagentoMerchantTest\",\n"
|
||||||
|
+ " \"paymentMethod\": {\n"
|
||||||
|
+ " \"testKey\": \"testValue\",\n"
|
||||||
|
+ " \"type\": \"testType\"\n"
|
||||||
|
+ " },\n"
|
||||||
|
+ " \"reference\": \"Your order number\",\n"
|
||||||
|
+ " \"returnUrl\": \"https://your-company.com/...\"\n"
|
||||||
|
+ "}")).toEqual(JSON.parse(JSON.stringify(paymentsRequest)));
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should succeed on multibanco payment", async (): Promise<void> => {
|
||||||
|
const client: Client = createMockClientFromResponse(paymentsResultMultibancoSuccess);
|
||||||
|
const checkout: Checkout = new Checkout(client);
|
||||||
|
const paymentsRequest: PaymentRequest = createPaymentsCheckoutRequest();
|
||||||
|
const paymentsResponse: PaymentResponse = await checkout.payments(paymentsRequest);
|
||||||
|
expect(paymentsResponse.pspReference).toEqual("8111111111111111");
|
||||||
|
expect(paymentsResponse.additionalData["comprafacil.amount"]).toEqual("101.01");
|
||||||
|
expect(paymentsResponse.additionalData["comprafacil.deadline"]).toEqual("3");
|
||||||
|
expect(paymentsResponse.additionalData["comprafacil.entity"]).toEqual("12345");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return sepa payment method details", async (): Promise<void> => {
|
||||||
|
const defaultPaymentMethods = {
|
||||||
|
sepaIbanNumber: "DE87123456781234567890",
|
||||||
|
sepaOwnerName: "A. Schneider",
|
||||||
|
type: "sepadirectdebit",
|
||||||
|
};
|
||||||
|
|
||||||
|
const paymentsRequest = createPaymentsCheckoutRequest();
|
||||||
|
paymentsRequest.paymentMethod = defaultPaymentMethods;
|
||||||
|
|
||||||
|
expect(JSON.parse("{\n"
|
||||||
|
+ " \"amount\": {\n"
|
||||||
|
+ " \"value\": 1000,\n"
|
||||||
|
+ " \"currency\": \"USD\"\n"
|
||||||
|
+ " },\n"
|
||||||
|
+ " \"merchantAccount\": \"MagentoMerchantTest\",\n"
|
||||||
|
+ " \"paymentMethod\": {\n"
|
||||||
|
+ " \"type\": \"sepadirectdebit\",\n"
|
||||||
|
+ " \"sepaOwnerName\": \"A. Schneider\",\n"
|
||||||
|
+ " \"sepaIbanNumber\": \"DE87123456781234567890\"\n"
|
||||||
|
+ " },\n"
|
||||||
|
+ " \"reference\": \"Your order number\",\n"
|
||||||
|
+ " \"returnUrl\": \"https://your-company.com/...\"\n"
|
||||||
|
+ "}")).toEqual(JSON.parse(JSON.stringify(paymentsRequest)));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
17
src/__tests__/checkoutUtility.spec.ts
Normal file
17
src/__tests__/checkoutUtility.spec.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { createMockClientFromResponse } from "../__mocks__/base";
|
||||||
|
import {originKeysSuccess} from "../__mocks__/checkoutUtility/originkeysSuccess";
|
||||||
|
import CheckoutUtility from "../service/checkoutUtility";
|
||||||
|
import {CheckoutUtilityRequest} from "../typings/checkoutUtility";
|
||||||
|
|
||||||
|
describe("Checkout Utility", (): void => {
|
||||||
|
it("should get origin keys", async (): Promise<void> => {
|
||||||
|
const client = createMockClientFromResponse(originKeysSuccess);
|
||||||
|
const checkoutUtility = new CheckoutUtility(client);
|
||||||
|
const originKeysRequest: CheckoutUtilityRequest = {
|
||||||
|
originDomains: ["www.test.com", "https://www.your-domain2.com"],
|
||||||
|
};
|
||||||
|
const originKeysResponse = await checkoutUtility.originKeys(originKeysRequest);
|
||||||
|
expect(originKeysResponse.originKeys["https://www.your-domain1.com"])
|
||||||
|
.toEqual("pub.v2.7814286629520534.aHR0cHM6Ly93d3cueW91ci1kb21haW4xLmNvbQ.UEwIBmW9-c_uXo5wSEr2w8Hz8hVIpujXPHjpcEse3xI");
|
||||||
|
});
|
||||||
|
});
|
||||||
65
src/__tests__/notification.spec.ts
Normal file
65
src/__tests__/notification.spec.ts
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
import authorisationTrue from "../__mocks__/notification/authorisationTrue.json";
|
||||||
|
import captureTrue from "../__mocks__/notification/captureTrue.json";
|
||||||
|
import captureFalse from "../__mocks__/notification/captureFalse.json";
|
||||||
|
import refundTrue from "../__mocks__/notification/refundTrue.json";
|
||||||
|
import refundFalse from "../__mocks__/notification/refundFalse.json";
|
||||||
|
import NotificationRequest from "../notification/notificationRequest";
|
||||||
|
import {NotificationEnum, NotificationRequestItem} from "../typings/notification";
|
||||||
|
|
||||||
|
describe("Notification Test", function (): void {
|
||||||
|
it("should return authorisation success", function (): void {
|
||||||
|
const notificationRequest = new NotificationRequest(authorisationTrue);
|
||||||
|
expect(notificationRequest.notificationItems).toHaveLength(1);
|
||||||
|
|
||||||
|
const notificationRequestItem: NotificationRequestItem = notificationRequest.notificationItems[0];
|
||||||
|
expect(NotificationEnum.EVENT_CODE_AUTHORISATION).toEqual(notificationRequestItem.eventCode);
|
||||||
|
expect(notificationRequestItem.success === "true").toBeTruthy();
|
||||||
|
expect(notificationRequestItem.pspReference).toEqual("123456789");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return capture success", function (): void {
|
||||||
|
const notificationRequest = new NotificationRequest(captureTrue);
|
||||||
|
expect(notificationRequest.notificationItems).toHaveLength(1);
|
||||||
|
|
||||||
|
const notificationRequestItem = notificationRequest.notificationItems[0];
|
||||||
|
expect(NotificationEnum.EVENT_CODE_CAPTURE).toEqual(notificationRequestItem.eventCode);
|
||||||
|
expect(notificationRequestItem.success === "true").toBeTruthy();
|
||||||
|
expect(notificationRequestItem.pspReference).toEqual("PSP_REFERENCE");
|
||||||
|
expect(notificationRequestItem.originalReference).toEqual("ORIGINAL_PSP");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return capture fail", function (): void {
|
||||||
|
const notificationRequest = new NotificationRequest(captureFalse);
|
||||||
|
expect(notificationRequest.notificationItems).toHaveLength(1);
|
||||||
|
|
||||||
|
const notificationRequestItem = notificationRequest.notificationItems[0];
|
||||||
|
expect(NotificationEnum.EVENT_CODE_CAPTURE).toEqual(notificationRequestItem.eventCode);
|
||||||
|
expect(notificationRequestItem.success === "true").toBeFalsy();
|
||||||
|
expect(notificationRequestItem.pspReference).toEqual("PSP_REFERENCE");
|
||||||
|
expect(notificationRequestItem.originalReference).toEqual("ORIGINAL_PSP");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return refund success", function (): void {
|
||||||
|
const notificationRequest = new NotificationRequest(refundTrue);
|
||||||
|
expect(notificationRequest.notificationItems).toHaveLength(1);
|
||||||
|
|
||||||
|
const notificationRequestItem = notificationRequest.notificationItems[0];
|
||||||
|
expect(NotificationEnum.EVENT_CODE_REFUND).toEqual(notificationRequestItem.eventCode);
|
||||||
|
expect(notificationRequestItem.success === "true").toBeTruthy();
|
||||||
|
expect(notificationRequestItem.pspReference).toEqual("PSP_REFERENCE");
|
||||||
|
expect(notificationRequestItem.originalReference).toEqual("ORIGINAL_PSP");
|
||||||
|
expect(notificationRequestItem.eventDate).toBeDefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return refund fail", function (): void {
|
||||||
|
const notificationRequest = new NotificationRequest(refundFalse);
|
||||||
|
expect(notificationRequest.notificationItems).toHaveLength(1);
|
||||||
|
|
||||||
|
const notificationRequestItem = notificationRequest.notificationItems[0];
|
||||||
|
expect(NotificationEnum.EVENT_CODE_REFUND).toEqual(notificationRequestItem.eventCode);
|
||||||
|
expect(notificationRequestItem.success === "true").toBeFalsy();
|
||||||
|
expect(notificationRequestItem.pspReference).toEqual("PSP_REFERENCE");
|
||||||
|
expect(notificationRequestItem.originalReference).toEqual("ORIGINAL_PSP");
|
||||||
|
expect(notificationRequestItem.eventDate).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
139
src/__tests__/payout.spec.ts
Normal file
139
src/__tests__/payout.spec.ts
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
import { createMockClientFromResponse } from "../__mocks__/base";
|
||||||
|
import Payout from "../service/payout";
|
||||||
|
import {
|
||||||
|
ModifyRequest,
|
||||||
|
StoreDetailAndSubmitRequest,
|
||||||
|
StoreDetailRequest, SubmitRequest
|
||||||
|
} from "../typings/payout";
|
||||||
|
import { FRAUD_MANUAL_REVIEW, FRAUD_RESULT_TYPE } from "../typings/constants/apiConstants";
|
||||||
|
|
||||||
|
const storeDetailAndSubmitThirdParty = JSON.stringify({
|
||||||
|
additionalData: {
|
||||||
|
fraudResultType: "GREEN",
|
||||||
|
fraudManualReview: "false",
|
||||||
|
|
||||||
|
},
|
||||||
|
pspReference: "8515131751004933",
|
||||||
|
resultCode: "[payout-submit-received]"
|
||||||
|
});
|
||||||
|
|
||||||
|
const storeDetail = JSON.stringify({
|
||||||
|
pspReference: "8515136787207087",
|
||||||
|
recurringDetailReference: "8415088571022720",
|
||||||
|
resultCode: "Success"
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
const amountAndReference = {
|
||||||
|
amount: {
|
||||||
|
value: 1000,
|
||||||
|
currency: "USD"
|
||||||
|
},
|
||||||
|
reference: "randomReference",
|
||||||
|
};
|
||||||
|
|
||||||
|
const defaultData = {
|
||||||
|
dateOfBirth: new Date(),
|
||||||
|
nationality: "NL",
|
||||||
|
shopperEmail: "johndoe@email.com",
|
||||||
|
shopperReference: "shopperReference",
|
||||||
|
};
|
||||||
|
|
||||||
|
const mockStoreDetailRequest = (merchantAccount: string): StoreDetailRequest => ({
|
||||||
|
...defaultData,
|
||||||
|
entityType: "NaturalPerson",
|
||||||
|
recurring: {
|
||||||
|
contract: "ONECLICK"
|
||||||
|
},
|
||||||
|
merchantAccount,
|
||||||
|
});
|
||||||
|
|
||||||
|
const mockSubmitRequest = (merchantAccount: string): SubmitRequest => ({
|
||||||
|
selectedRecurringDetailReference: "LATEST",
|
||||||
|
recurring: {
|
||||||
|
contract: "ONECLICK"
|
||||||
|
},
|
||||||
|
...defaultData,
|
||||||
|
...amountAndReference,
|
||||||
|
merchantAccount,
|
||||||
|
});
|
||||||
|
|
||||||
|
const mockStoreDetailAndSubmitRequest = (merchantAccount: string): StoreDetailAndSubmitRequest => ({
|
||||||
|
...amountAndReference,
|
||||||
|
...(mockStoreDetailRequest(merchantAccount)),
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
describe("PayoutTest", function (): void {
|
||||||
|
it("should succeed on store detail and submit third party", async function (): Promise<void> {
|
||||||
|
const client = createMockClientFromResponse(storeDetailAndSubmitThirdParty);
|
||||||
|
const payout = new Payout(client);
|
||||||
|
|
||||||
|
const request: StoreDetailAndSubmitRequest = mockStoreDetailAndSubmitRequest(client.config.merchantAccount);
|
||||||
|
|
||||||
|
const result = await payout.storeDetail(request);
|
||||||
|
expect(result.resultCode).toEqual("[payout-submit-received]");
|
||||||
|
expect(result.pspReference).toEqual("8515131751004933");
|
||||||
|
expect(result.additionalData[FRAUD_RESULT_TYPE]).toEqual("GREEN");
|
||||||
|
expect(result.additionalData[FRAUD_MANUAL_REVIEW]).toEqual("false");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should succeed on store detail", async function (): Promise<void> {
|
||||||
|
const client = createMockClientFromResponse(storeDetail);
|
||||||
|
const payout = new Payout(client);
|
||||||
|
|
||||||
|
const request: StoreDetailRequest = mockStoreDetailRequest(client.config.merchantAccount);
|
||||||
|
const result = await payout.storeDetail(request);
|
||||||
|
|
||||||
|
expect("Success").toEqual(result.resultCode);
|
||||||
|
expect("8515136787207087").toEqual(result.pspReference);
|
||||||
|
expect("8415088571022720").toEqual(result.recurringDetailReference);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should succeed on confirm third party", async function (): Promise<void> {
|
||||||
|
const client = createMockClientFromResponse(JSON.stringify({
|
||||||
|
pspReference: "8815131762537886",
|
||||||
|
response: "[payout-confirm-received]"
|
||||||
|
}));
|
||||||
|
const payout = new Payout(client);
|
||||||
|
|
||||||
|
const request: ModifyRequest = {
|
||||||
|
merchantAccount: client.config.merchantAccount,
|
||||||
|
originalReference: "reference"
|
||||||
|
};
|
||||||
|
const result = await payout.confirmThirdParty(request);
|
||||||
|
|
||||||
|
expect(result.response).toEqual("[payout-confirm-received]");
|
||||||
|
expect(result.pspReference).toEqual("8815131762537886");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should succeed on submit third party", async function (): Promise<void> {
|
||||||
|
const client = createMockClientFromResponse(storeDetailAndSubmitThirdParty);
|
||||||
|
const payout = new Payout(client);
|
||||||
|
|
||||||
|
const request: SubmitRequest = mockSubmitRequest(client.config.merchantAccount);
|
||||||
|
const result = await payout.submitThirdparty(request);
|
||||||
|
|
||||||
|
expect(result.resultCode).toEqual("[payout-submit-received]");
|
||||||
|
expect(result.pspReference).toEqual("8515131751004933");
|
||||||
|
expect(result.additionalData[FRAUD_RESULT_TYPE]).toEqual("GREEN");
|
||||||
|
expect(result.additionalData[FRAUD_MANUAL_REVIEW]).toEqual("false");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should succeed on decline third party", async function (): Promise<void> {
|
||||||
|
const client = createMockClientFromResponse(JSON.stringify({
|
||||||
|
pspReference: "8815131762537886",
|
||||||
|
response: "[payout-confirm-received]"
|
||||||
|
}));
|
||||||
|
const payout = new Payout(client);
|
||||||
|
|
||||||
|
const request: ModifyRequest = {
|
||||||
|
merchantAccount: client.config.merchantAccount,
|
||||||
|
originalReference: "reference"
|
||||||
|
};
|
||||||
|
const result = await payout.declineThirdParty(request);
|
||||||
|
|
||||||
|
expect(result.response).toEqual("[payout-confirm-received]");
|
||||||
|
expect(result.pspReference).toEqual("8815131762537886");
|
||||||
|
});
|
||||||
|
});
|
||||||
40
src/__tests__/recurring.spec.ts
Normal file
40
src/__tests__/recurring.spec.ts
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
import { createMockClientFromResponse } from "../__mocks__/base";
|
||||||
|
import { disableSuccess } from "../__mocks__/recurring/disableSuccess";
|
||||||
|
import { listRecurringDetailsSuccess } from "../__mocks__/recurring/listRecurringDetailsSuccess";
|
||||||
|
import Recurring from "../service/recurring";
|
||||||
|
import { DisableRequest, RecurringDetailsRequest } from "../typings/recurring";
|
||||||
|
|
||||||
|
const createRecurringDetailsRequest = (): RecurringDetailsRequest => {
|
||||||
|
return {
|
||||||
|
merchantAccount: "MerchantAccount",
|
||||||
|
recurring: {contract: "ONECLICK"},
|
||||||
|
shopperReference: "test-123",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
describe("Recurring", (): void => {
|
||||||
|
it("should test have recurring details list", async (): Promise<void> => {
|
||||||
|
const client = createMockClientFromResponse(listRecurringDetailsSuccess);
|
||||||
|
const recurring = new Recurring(client);
|
||||||
|
const request = createRecurringDetailsRequest();
|
||||||
|
const result = await recurring.listRecurringDetails(request);
|
||||||
|
expect(result.details).toHaveLength(2);
|
||||||
|
|
||||||
|
const [recurringDetail] = result.details;
|
||||||
|
expect(recurringDetail.recurringDetailReference).toEqual("recurringReference");
|
||||||
|
expect(recurringDetail.alias).toEqual("cardAlias");
|
||||||
|
expect(recurringDetail.card.number).toEqual("1111");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should disable", async (): Promise<void> => {
|
||||||
|
const client = createMockClientFromResponse(disableSuccess);
|
||||||
|
const recurring = new Recurring(client);
|
||||||
|
const request: DisableRequest = {
|
||||||
|
merchantAccount: "MerchantAccount",
|
||||||
|
recurringDetailReference: "reference",
|
||||||
|
shopperReference: "test-123",
|
||||||
|
};
|
||||||
|
const result = await recurring.disable(request);
|
||||||
|
expect(result.response).toEqual("[detail-successfully-disabled]");
|
||||||
|
});
|
||||||
|
});
|
||||||
69
src/__tests__/terminalCloudAPI.spec.ts
Normal file
69
src/__tests__/terminalCloudAPI.spec.ts
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
import {createMockClientFromResponse, createTerminalAPIPaymentRequest} from "../__mocks__/base";
|
||||||
|
import {asyncRes} from "../__mocks__/terminalApi/async";
|
||||||
|
import {syncRes} from "../__mocks__/terminalApi/sync";
|
||||||
|
import Client from "../client";
|
||||||
|
import TerminalCloudAPI from "../service/terminalCloudAPI";
|
||||||
|
import {MessageHeader, SaleToPoiResponse, TerminalApiRequest, TerminalApiResponse} from "../typings/terminal";
|
||||||
|
|
||||||
|
describe("Terminal Cloud API", (): void => {
|
||||||
|
it("should make an async payment request", async (): Promise<void> => {
|
||||||
|
const client: Client = createMockClientFromResponse(asyncRes);
|
||||||
|
const terminalCloudAPI: TerminalCloudAPI = new TerminalCloudAPI(client);
|
||||||
|
|
||||||
|
const terminalAPIPaymentRequest: TerminalApiRequest = createTerminalAPIPaymentRequest() as TerminalApiRequest;
|
||||||
|
|
||||||
|
const requestResponse: string = await terminalCloudAPI.async(terminalAPIPaymentRequest);
|
||||||
|
|
||||||
|
expect(requestResponse).toEqual("ok");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should make a sync payment request", async (): Promise<void> => {
|
||||||
|
const client: Client = createMockClientFromResponse(syncRes);
|
||||||
|
const terminalCloudAPI: TerminalCloudAPI = new TerminalCloudAPI(client);
|
||||||
|
const terminalAPIPaymentRequest: TerminalApiRequest = createTerminalAPIPaymentRequest() as TerminalApiRequest;
|
||||||
|
const terminalAPIResponse: TerminalApiResponse = await terminalCloudAPI.sync(terminalAPIPaymentRequest);
|
||||||
|
|
||||||
|
const saleToPoiResponse: SaleToPoiResponse = terminalAPIResponse.saleToPoiResponse;
|
||||||
|
|
||||||
|
const messageHeader: MessageHeader = saleToPoiResponse.messageHeader;
|
||||||
|
expect(messageHeader.messageType).toEqual("Response");
|
||||||
|
expect(messageHeader.messageClass).toEqual("Service");
|
||||||
|
expect(messageHeader.messageCategory).toEqual("Payment");
|
||||||
|
expect(messageHeader.protocolVersion).toEqual("3.0");
|
||||||
|
expect(messageHeader.saleId).toEqual("001");
|
||||||
|
expect(messageHeader.serviceId).toEqual("1234567890");
|
||||||
|
expect(messageHeader.poiid).toEqual("P400Plus-123456789");
|
||||||
|
|
||||||
|
const response = saleToPoiResponse.paymentResponse.response;
|
||||||
|
expect(response.result).toEqual("Success");
|
||||||
|
expect(response.additionalResponse).toBeTruthy();
|
||||||
|
|
||||||
|
const poiData = saleToPoiResponse.paymentResponse.poiData;
|
||||||
|
expect(poiData.poiReconciliationId).toEqual("1000");
|
||||||
|
expect(poiData.poiTransactionId.transactionId).toEqual("4r7i001556529591000.8515565295894301");
|
||||||
|
expect(poiData.poiTransactionId.timeStamp).toEqual("2019-04-29T00:00:00.000Z");
|
||||||
|
|
||||||
|
const saleData = saleToPoiResponse.paymentResponse.saleData;
|
||||||
|
expect(saleData.saleTransactionId.transactionId).toEqual("001");
|
||||||
|
expect(saleData.saleTransactionId.timeStamp).toEqual("2019-04-29T00:00:00.000Z");
|
||||||
|
|
||||||
|
expect(saleToPoiResponse.paymentResponse.paymentReceipt.length).toBeGreaterThan(0);
|
||||||
|
saleToPoiResponse.paymentResponse.paymentReceipt.forEach((receipt): void => {
|
||||||
|
expect(receipt.outputContent.outputFormat).toEqual("Text");
|
||||||
|
expect(receipt.outputContent.outputText.length).toBeGreaterThan(0);
|
||||||
|
receipt.outputContent.outputText.forEach((outputText): void => {
|
||||||
|
expect(outputText.text).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
const {paymentResult} = saleToPoiResponse.paymentResponse;
|
||||||
|
expect(paymentResult.onlineFlag).toBeTruthy();
|
||||||
|
expect(paymentResult.paymentAcquirerData.acquirerPoiid).toEqual("P400Plus-123456789");
|
||||||
|
expect(paymentResult.paymentAcquirerData.approvalCode).toEqual("123456");
|
||||||
|
expect(paymentResult.paymentAcquirerData.merchantId).toEqual("TestMerchant");
|
||||||
|
expect(paymentResult.paymentInstrumentData.cardData.paymentBrand).toEqual("mc");
|
||||||
|
expect(paymentResult.paymentInstrumentData.cardData.maskedPan).toEqual("411111 **** 1111");
|
||||||
|
expect(paymentResult.paymentInstrumentData.paymentInstrumentType).toEqual("Card");
|
||||||
|
expect(paymentResult.amountsResp.currency).toEqual("EUR");
|
||||||
|
expect(paymentResult.amountsResp.authorizedAmount).toEqual(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
67
src/__tests__/terminalLocalAPI.spec.ts
Normal file
67
src/__tests__/terminalLocalAPI.spec.ts
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
import {createMockClientFromResponse, createTerminalAPIPaymentRequest} from "../__mocks__/base";
|
||||||
|
import {localRes} from "../__mocks__/terminalApi/local";
|
||||||
|
import Client from "../client";
|
||||||
|
import TerminalLocalAPI from "../service/terminalLocalAPI";
|
||||||
|
import {SecurityKey, TerminalApiRequest, TerminalApiResponse} from "../typings/terminal";
|
||||||
|
|
||||||
|
describe("Terminal Local API", (): void => {
|
||||||
|
it("should make a local payment", async (): Promise<void> => {
|
||||||
|
const client: Client = createMockClientFromResponse(localRes);
|
||||||
|
const terminalLocalAPI: TerminalLocalAPI = new TerminalLocalAPI(client);
|
||||||
|
|
||||||
|
const terminalAPIPaymentRequest = createTerminalAPIPaymentRequest() as TerminalApiRequest;
|
||||||
|
|
||||||
|
const securityKey: SecurityKey = {
|
||||||
|
adyenCryptoVersion: 1,
|
||||||
|
keyIdentifier: "CryptoKeyIdentifier12345",
|
||||||
|
keyVersion: 1,
|
||||||
|
passphrase: "p@ssw0rd123456",
|
||||||
|
};
|
||||||
|
|
||||||
|
const terminalApiResponse: TerminalApiResponse =
|
||||||
|
await terminalLocalAPI.request(terminalAPIPaymentRequest, securityKey);
|
||||||
|
const saleToPoiResponse = terminalApiResponse.saleToPoiResponse;
|
||||||
|
const messageHeader = saleToPoiResponse.messageHeader;
|
||||||
|
|
||||||
|
expect(messageHeader.messageType).toEqual("Response");
|
||||||
|
expect(messageHeader.messageClass).toEqual("Service");
|
||||||
|
expect(messageHeader.messageCategory).toEqual("Payment");
|
||||||
|
expect(messageHeader.protocolVersion).toEqual("3.0");
|
||||||
|
expect(messageHeader.saleId).toEqual("325488592");
|
||||||
|
expect(messageHeader.serviceId).toEqual("325488592");
|
||||||
|
expect(messageHeader.poiid).toEqual("P400Plus-275039202");
|
||||||
|
|
||||||
|
const response = saleToPoiResponse.paymentResponse.response;
|
||||||
|
expect(response.result).toEqual("Success");
|
||||||
|
expect(response.additionalResponse).toBeTruthy();
|
||||||
|
|
||||||
|
const poiData = saleToPoiResponse.paymentResponse.poiData;
|
||||||
|
expect(poiData.poiReconciliationId).toEqual("1000");
|
||||||
|
expect(poiData.poiTransactionId.transactionId).toEqual("4r7i001557325515012.8815573255107661");
|
||||||
|
expect(poiData.poiTransactionId.timeStamp).toEqual("2019-05-08T14:25:15.000Z");
|
||||||
|
|
||||||
|
const saleData = saleToPoiResponse.paymentResponse.saleData;
|
||||||
|
expect(saleData.saleTransactionId.transactionId).toEqual("999");
|
||||||
|
expect(saleData.saleTransactionId.timeStamp).toEqual("2019-05-08T14:24:48.598Z");
|
||||||
|
|
||||||
|
expect(saleToPoiResponse.paymentResponse.paymentReceipt.length).toBeGreaterThan(0);
|
||||||
|
saleToPoiResponse.paymentResponse.paymentReceipt.forEach((receipt): void => {
|
||||||
|
expect(receipt.outputContent.outputFormat).toEqual("Text");
|
||||||
|
expect(receipt.outputContent.outputText.length).toBeGreaterThan(0);
|
||||||
|
receipt.outputContent.outputText.forEach((outputText): void => {
|
||||||
|
expect(outputText.text).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const paymentResult = saleToPoiResponse.paymentResponse.paymentResult;
|
||||||
|
expect(paymentResult.onlineFlag).toBeTruthy();
|
||||||
|
expect(paymentResult.paymentAcquirerData.acquirerPoiid).toEqual("P400Plus-275039202");
|
||||||
|
expect(paymentResult.paymentAcquirerData.approvalCode).toEqual("123456");
|
||||||
|
expect(paymentResult.paymentAcquirerData.merchantId).toEqual("TestMerchantRenatoTest");
|
||||||
|
expect(paymentResult.paymentInstrumentData.cardData.paymentBrand).toEqual("mc");
|
||||||
|
expect(paymentResult.paymentInstrumentData.cardData.maskedPan).toEqual("541333 **** 0010");
|
||||||
|
expect(paymentResult.paymentInstrumentData.paymentInstrumentType).toEqual("Card");
|
||||||
|
expect(paymentResult.amountsResp.currency).toEqual("EUR");
|
||||||
|
expect(paymentResult.amountsResp.authorizedAmount).toEqual(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
31
src/apiKeyAuthenticatedService.ts
Normal file
31
src/apiKeyAuthenticatedService.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Client from "./client";
|
||||||
|
import Service from "./service";
|
||||||
|
|
||||||
|
class ApiKeyAuthenticatedService extends Service {
|
||||||
|
protected constructor(client: Client) {
|
||||||
|
super(client);
|
||||||
|
this.apiKeyRequired = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ApiKeyAuthenticatedService;
|
||||||
157
src/client.ts
Normal file
157
src/client.ts
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Config from "./config";
|
||||||
|
import ClientInterface from "./httpClient/clientInterface";
|
||||||
|
import HttpURLConnectionClient from "./httpClient/httpURLConnectionClient";
|
||||||
|
import { Environment } from "./typings/enums/environment";
|
||||||
|
|
||||||
|
type ClientParametersOverload =
|
||||||
|
| { config: Config }
|
||||||
|
| { config: Config; httpClient: ClientInterface }
|
||||||
|
| { username: string; password: string; environment: Environment; applicationName: string }
|
||||||
|
| { username: string; password: string; environment: Environment; applicationName: string; httpClient: ClientInterface }
|
||||||
|
| { username: string; password: string; environment: Environment; applicationName: string; liveEndpointUrlPrefix: string }
|
||||||
|
| { username: string; password: string; environment: Environment; applicationName: string; liveEndpointUrlPrefix: string; httpClient: ClientInterface }
|
||||||
|
| { apiKey: string; environment: Environment }
|
||||||
|
| { apiKey: string; environment: Environment; httpClient: ClientInterface }
|
||||||
|
| { apiKey: string; environment: Environment; liveEndpointUrlPrefix: string; httpClient: ClientInterface };
|
||||||
|
|
||||||
|
interface ClientParameters {
|
||||||
|
config?: Config;
|
||||||
|
username?: string;
|
||||||
|
password?: string;
|
||||||
|
environment?: Environment;
|
||||||
|
applicationName?: string;
|
||||||
|
liveEndpointUrlPrefix?: string;
|
||||||
|
apiKey?: string;
|
||||||
|
httpClient?: ClientInterface;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Client {
|
||||||
|
public static ENDPOINT_TEST: string = "https://pal-test.adyen.com";
|
||||||
|
public static ENDPOINT_LIVE: string = "https://pal-live.adyen.com";
|
||||||
|
public static ENDPOINT_LIVE_SUFFIX: string = "-pal-live.adyenpayments.com";
|
||||||
|
public static HPP_TEST: string = "https://test.adyen.com/hpp";
|
||||||
|
public static HPP_LIVE: string = "https://live.adyen.com/hpp";
|
||||||
|
public static MARKETPAY_ENDPOINT_TEST: string = "https://cal-test.adyen.com/cal/services";
|
||||||
|
public static MARKETPAY_ENDPOINT_LIVE: string = "https://cal-live.adyen.com/cal/services";
|
||||||
|
public static API_VERSION: string = "v49";
|
||||||
|
public static RECURRING_API_VERSION: string = "v30";
|
||||||
|
public static MARKETPAY_ACCOUNT_API_VERSION: string = "v4";
|
||||||
|
public static MARKETPAY_FUND_API_VERSION: string = "v3";
|
||||||
|
public static MARKETPAY_NOTIFICATION_API_VERSION: string = "v1";
|
||||||
|
public static LIB_NAME: string = "adyen-node-api-library";
|
||||||
|
public static LIB_VERSION: string = "1.0.0";
|
||||||
|
public static CHECKOUT_ENDPOINT_TEST: string = "https://checkout-test.adyen.com/checkout";
|
||||||
|
public static CHECKOUT_ENDPOINT_LIVE_SUFFIX: string = "-checkout-live.adyenpayments.com/checkout";
|
||||||
|
public static CHECKOUT_API_VERSION: string = "v49";
|
||||||
|
public static BIN_LOOKUP_PAL_SUFFIX = "/pal/servlet/BinLookup/";
|
||||||
|
public static BIN_LOOKUP_API_VERSION = "v40";
|
||||||
|
public static CHECKOUT_UTILITY_API_VERSION: string = "v1";
|
||||||
|
public static TERMINAL_API_ENDPOINT_TEST: string = "https://terminal-api-test.adyen.com";
|
||||||
|
public static TERMINAL_API_ENDPOINT_LIVE: string = "https://terminal-api-live.adyen.com";
|
||||||
|
public static ENDPOINT_PROTOCOL: string = "https://";
|
||||||
|
|
||||||
|
private _httpClient: ClientInterface;
|
||||||
|
private _config: Config;
|
||||||
|
|
||||||
|
public constructor(clientParameters: ClientParametersOverload);
|
||||||
|
public constructor(options: ClientParameters) {
|
||||||
|
if (options.config) {
|
||||||
|
this._config = options.config;
|
||||||
|
} else {
|
||||||
|
this._config = new Config();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.environment) {
|
||||||
|
this.setEnvironment(options.environment, options.liveEndpointUrlPrefix);
|
||||||
|
if (options.username && options.password && options.applicationName) {
|
||||||
|
this._config.username = options.username;
|
||||||
|
this._config.password = options.password;
|
||||||
|
this._config.applicationName = options.applicationName;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.apiKey) {
|
||||||
|
this._config.apiKey = options.apiKey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.httpClient) {
|
||||||
|
this._httpClient = options.httpClient;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public setEnvironment(environment: Environment, liveEndpointUrlPrefix?: string): void {
|
||||||
|
this._config.environment = environment;
|
||||||
|
if (environment === "TEST") {
|
||||||
|
this._config.endpoint = Client.ENDPOINT_TEST;
|
||||||
|
this._config.marketPayEndpoint = Client.MARKETPAY_ENDPOINT_TEST;
|
||||||
|
this._config.hppEndpoint = Client.HPP_TEST;
|
||||||
|
this._config.checkoutEndpoint = Client.CHECKOUT_ENDPOINT_TEST;
|
||||||
|
this._config.terminalApiCloudEndpoint = Client.TERMINAL_API_ENDPOINT_TEST;
|
||||||
|
} else if (environment === "LIVE") {
|
||||||
|
this._config.endpoint = Client.ENDPOINT_LIVE;
|
||||||
|
this._config.marketPayEndpoint = Client.MARKETPAY_ENDPOINT_LIVE;
|
||||||
|
this._config.hppEndpoint = Client.HPP_LIVE;
|
||||||
|
if (liveEndpointUrlPrefix) {
|
||||||
|
this._config.endpoint =
|
||||||
|
`${Client.ENDPOINT_PROTOCOL}${liveEndpointUrlPrefix}${Client.ENDPOINT_LIVE_SUFFIX}`;
|
||||||
|
this._config.checkoutEndpoint =
|
||||||
|
`${Client.ENDPOINT_PROTOCOL}${liveEndpointUrlPrefix}${Client.CHECKOUT_ENDPOINT_LIVE_SUFFIX}`;
|
||||||
|
} else {
|
||||||
|
this._config.endpoint = Client.ENDPOINT_LIVE;
|
||||||
|
this._config.checkoutEndpoint = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public get httpClient(): ClientInterface {
|
||||||
|
if (!this._httpClient) {
|
||||||
|
this._httpClient = new HttpURLConnectionClient();
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._httpClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set httpClient(httpClient: ClientInterface) {
|
||||||
|
this._httpClient = httpClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get config(): Config {
|
||||||
|
return this._config;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set config(config: Config) {
|
||||||
|
this._config = config;
|
||||||
|
}
|
||||||
|
|
||||||
|
public setApplicationName(applicationName: string): void {
|
||||||
|
this.config.applicationName = applicationName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public setTimeouts(connectionTimeoutMillis: number, readTimeoutMillis: number): void {
|
||||||
|
this.config.connectionTimeoutMillis = connectionTimeoutMillis;
|
||||||
|
this.config.readTimeoutMillis = readTimeoutMillis;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Client;
|
||||||
226
src/config.ts
Normal file
226
src/config.ts
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import { Environment } from "./typings/enums/environment";
|
||||||
|
|
||||||
|
interface ConfigConstructor {
|
||||||
|
username?: string;
|
||||||
|
password?: string;
|
||||||
|
merchantAccount?: string;
|
||||||
|
environment?: Environment;
|
||||||
|
endpoint?: string;
|
||||||
|
marketPayEndpoint?: string;
|
||||||
|
applicationName?: string;
|
||||||
|
apiKey?: string;
|
||||||
|
connectionTimeoutMillis?: number;
|
||||||
|
readTimeoutMillis?: number;
|
||||||
|
certificatePath?: string;
|
||||||
|
hppEndpoint?: string;
|
||||||
|
skinCode?: string;
|
||||||
|
hmacKey?: string;
|
||||||
|
checkoutEndpoint?: string;
|
||||||
|
terminalApiCloudEndpoint?: string;
|
||||||
|
terminalApiLocalEndpoint?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
class Config {
|
||||||
|
protected _username: string;
|
||||||
|
protected _password: string;
|
||||||
|
protected _merchantAccount: string;
|
||||||
|
protected _environment: Environment;
|
||||||
|
protected _endpoint: string;
|
||||||
|
protected _marketPayEndpoint: string;
|
||||||
|
protected _applicationName: string;
|
||||||
|
protected _apiKey: string;
|
||||||
|
protected _connectionTimeoutMillis: number;
|
||||||
|
protected _readTimeoutMillis: number;
|
||||||
|
protected _certificatePath: string;
|
||||||
|
|
||||||
|
protected _hppEndpoint: string;
|
||||||
|
protected _skinCode: string;
|
||||||
|
protected _hmacKey: string;
|
||||||
|
|
||||||
|
protected _checkoutEndpoint: string;
|
||||||
|
|
||||||
|
protected _terminalApiCloudEndpoint: string;
|
||||||
|
protected _terminalApiLocalEndpoint: string;
|
||||||
|
|
||||||
|
public constructor(options: ConfigConstructor = {}) {
|
||||||
|
this._username = options.username;
|
||||||
|
this._password = options.password;
|
||||||
|
this._merchantAccount = options.merchantAccount;
|
||||||
|
this._environment = options.environment;
|
||||||
|
this._endpoint = options.endpoint;
|
||||||
|
this._marketPayEndpoint = options.marketPayEndpoint;
|
||||||
|
this._applicationName = options.applicationName;
|
||||||
|
this._apiKey = options.apiKey;
|
||||||
|
this._connectionTimeoutMillis = options.connectionTimeoutMillis || 30000;
|
||||||
|
this._readTimeoutMillis = options.readTimeoutMillis || 3000;
|
||||||
|
this._certificatePath = options.certificatePath;
|
||||||
|
this._hppEndpoint = options.hppEndpoint;
|
||||||
|
this._skinCode = options.skinCode;
|
||||||
|
this._hmacKey = options.hmacKey;
|
||||||
|
this._checkoutEndpoint = options.checkoutEndpoint;
|
||||||
|
this._terminalApiCloudEndpoint = options.terminalApiCloudEndpoint;
|
||||||
|
this._terminalApiLocalEndpoint = options.terminalApiLocalEndpoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get username(): string {
|
||||||
|
return this._username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set username(username: string) {
|
||||||
|
this._username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get password(): string {
|
||||||
|
return this._password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set password(password: string) {
|
||||||
|
this._password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get merchantAccount(): string {
|
||||||
|
return this._merchantAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set merchantAccount(merchantAccount: string) {
|
||||||
|
this._merchantAccount = merchantAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get environment(): Environment {
|
||||||
|
return this._environment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set environment(environment: Environment) {
|
||||||
|
this._environment = environment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get endpoint(): string {
|
||||||
|
return this._endpoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set endpoint(endpoint: string) {
|
||||||
|
this._endpoint = endpoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get marketPayEndpoint(): string {
|
||||||
|
return this._marketPayEndpoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set marketPayEndpoint(marketPayEndpoint: string) {
|
||||||
|
this._marketPayEndpoint = marketPayEndpoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get applicationName(): string {
|
||||||
|
return this._applicationName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set applicationName(applicationName: string) {
|
||||||
|
this._applicationName = applicationName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get apiKey(): string {
|
||||||
|
return this._apiKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set apiKey(apiKey: string) {
|
||||||
|
this._apiKey = apiKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get hppEndpoint(): string {
|
||||||
|
return this._hppEndpoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set hppEndpoint(hppEndpoint: string) {
|
||||||
|
this._hppEndpoint = hppEndpoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get skinCode(): string {
|
||||||
|
return this._skinCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set skinCode(skinCode: string) {
|
||||||
|
this._skinCode = skinCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get hmacKey(): string {
|
||||||
|
return this._hmacKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set hmacKey(hmacKey: string) {
|
||||||
|
this._hmacKey = hmacKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get checkoutEndpoint(): string {
|
||||||
|
if (!this._checkoutEndpoint) {
|
||||||
|
const message = "Please provide your unique live url prefix on the setEnvironment() call on the Client or provide checkoutEndpoint in your config object.";
|
||||||
|
throw new Error(message);
|
||||||
|
}
|
||||||
|
return this._checkoutEndpoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set checkoutEndpoint(checkoutEndpoint: string) {
|
||||||
|
this._checkoutEndpoint = checkoutEndpoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get terminalApiCloudEndpoint(): string {
|
||||||
|
return this._terminalApiCloudEndpoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set terminalApiCloudEndpoint(terminalApiCloudEndpoint: string) {
|
||||||
|
this._terminalApiCloudEndpoint = terminalApiCloudEndpoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get terminalApiLocalEndpoint(): string {
|
||||||
|
return this._terminalApiLocalEndpoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set terminalApiLocalEndpoint(terminalApiLocalEndpoint: string) {
|
||||||
|
this._terminalApiLocalEndpoint = terminalApiLocalEndpoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get connectionTimeoutMillis(): number {
|
||||||
|
return this._connectionTimeoutMillis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set connectionTimeoutMillis(connectionTimeoutMillis: number) {
|
||||||
|
this._connectionTimeoutMillis = connectionTimeoutMillis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get readTimeoutMillis(): number {
|
||||||
|
return this._readTimeoutMillis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set readTimeoutMillis(readTimeoutMillis: number) {
|
||||||
|
this._readTimeoutMillis = readTimeoutMillis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set certificatePath(certificatePath: string) {
|
||||||
|
this._certificatePath = certificatePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get certificatePath(): string {
|
||||||
|
return this._certificatePath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Config;
|
||||||
42
src/helpers/getJsonResponse.ts
Normal file
42
src/helpers/getJsonResponse.ts
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Resource from "../service/resource";
|
||||||
|
import { RequestOptions } from "../typings/requestOptions";
|
||||||
|
|
||||||
|
async function getJsonResponse<T>(resource: Resource, jsonRequest: T | string, requestOptions?: RequestOptions): Promise<string>;
|
||||||
|
async function getJsonResponse<T, R>(resource: Resource, jsonRequest: T | string, requestOptions?: RequestOptions): Promise<R>;
|
||||||
|
|
||||||
|
async function getJsonResponse<T, R>(
|
||||||
|
resource: Resource,
|
||||||
|
jsonRequest: T | string,
|
||||||
|
requestOptions: RequestOptions = {},
|
||||||
|
): Promise<R | string> {
|
||||||
|
const response = await resource.request(
|
||||||
|
typeof jsonRequest === "string" ? jsonRequest : JSON.stringify(jsonRequest),
|
||||||
|
requestOptions);
|
||||||
|
try {
|
||||||
|
return JSON.parse(response);
|
||||||
|
} catch (e) {
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export default getJsonResponse;
|
||||||
33
src/httpClient/clientInterface.ts
Normal file
33
src/httpClient/clientInterface.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Config from "../config";
|
||||||
|
import { RequestOptions } from "../typings/requestOptions";
|
||||||
|
import { AgentOptions } from "https";
|
||||||
|
|
||||||
|
interface ClientInterface {
|
||||||
|
request(
|
||||||
|
endpoint: string, json: string, config: Config, isApiKeyRequired: boolean, requestOptions?: RequestOptions,
|
||||||
|
): Promise<string>;
|
||||||
|
post(endpoint: string, postParameters: [string, string][], config: Config): Promise<string>;
|
||||||
|
proxy?: AgentOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ClientInterface;
|
||||||
72
src/httpClient/httpClientException.ts
Normal file
72
src/httpClient/httpClientException.ts
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {IncomingHttpHeaders, IncomingMessage} from "http";
|
||||||
|
|
||||||
|
class HttpClientException implements Error {
|
||||||
|
private _code: number = 0;
|
||||||
|
private _responseHeaders: IncomingHttpHeaders;
|
||||||
|
private readonly _message: string;
|
||||||
|
private readonly _name: string;
|
||||||
|
private _responseBody: IncomingMessage;
|
||||||
|
|
||||||
|
public constructor(message: string, code?: number, responseHeaders?: IncomingHttpHeaders, responseBody?: IncomingMessage) {
|
||||||
|
this._name = "HttpClientException";
|
||||||
|
this._message = message;
|
||||||
|
this._code = code;
|
||||||
|
this._responseHeaders = responseHeaders;
|
||||||
|
this._responseBody = responseBody;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get message(): string {
|
||||||
|
return this._message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get name(): string {
|
||||||
|
return this._name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get code(): number {
|
||||||
|
return this._code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set code(value: number) {
|
||||||
|
this._code = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get responseHeaders(): IncomingHttpHeaders {
|
||||||
|
return this._responseHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set responseHeaders(value: IncomingHttpHeaders) {
|
||||||
|
this._responseHeaders = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get responseBody(): IncomingMessage {
|
||||||
|
return this._responseBody;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set responseBody(value: IncomingMessage) {
|
||||||
|
this._responseBody = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default HttpClientException;
|
||||||
181
src/httpClient/httpURLConnectionClient.ts
Normal file
181
src/httpClient/httpURLConnectionClient.ts
Normal file
@@ -0,0 +1,181 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {ClientRequest, IncomingMessage} from "http";
|
||||||
|
import { Agent, AgentOptions, request as httpRequest } from "https";
|
||||||
|
|
||||||
|
import * as fs from "fs";
|
||||||
|
import {URL} from "url";
|
||||||
|
import Client from "../client";
|
||||||
|
import Config from "../config";
|
||||||
|
import {
|
||||||
|
ACCEPT_CHARSET,
|
||||||
|
API_KEY,
|
||||||
|
APPLICATION_JSON_TYPE,
|
||||||
|
CONTENT_TYPE,
|
||||||
|
IDEMPOTENCY_KEY,
|
||||||
|
METHOD_POST,
|
||||||
|
USER_AGENT,
|
||||||
|
} from "../typings/constants/apiConstants";
|
||||||
|
import { RequestOptions } from "../typings/requestOptions";
|
||||||
|
import ClientInterface from "./clientInterface";
|
||||||
|
import HttpClientException from "./httpClientException";
|
||||||
|
|
||||||
|
class HttpURLConnectionClient implements ClientInterface {
|
||||||
|
private static CHARSET: string = "utf-8";
|
||||||
|
private _proxy: AgentOptions;
|
||||||
|
private agentOptions: AgentOptions;
|
||||||
|
|
||||||
|
public request(
|
||||||
|
endpoint: string, json: string, config: Config, isApiRequired: boolean,
|
||||||
|
requestOptions: RequestOptions = {},
|
||||||
|
): Promise<string> {
|
||||||
|
requestOptions.headers = {};
|
||||||
|
requestOptions.timeout = config.connectionTimeoutMillis;
|
||||||
|
|
||||||
|
if (config.certificatePath) {
|
||||||
|
this.installCertificateVerifier(config.certificatePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
const apiKey = config.apiKey;
|
||||||
|
|
||||||
|
if (isApiRequired || apiKey) {
|
||||||
|
requestOptions.headers[API_KEY] = apiKey;
|
||||||
|
} else {
|
||||||
|
const authString = `${config.username}:${config.password}`;
|
||||||
|
const authEncBytes = new Buffer(authString);
|
||||||
|
const authStringEnc = authEncBytes.toString();
|
||||||
|
|
||||||
|
requestOptions.headers.Authorization = `Basic ${authStringEnc}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
requestOptions.headers[CONTENT_TYPE] = APPLICATION_JSON_TYPE;
|
||||||
|
const httpConnection: ClientRequest = this.createRequest(endpoint, config.applicationName, requestOptions);
|
||||||
|
|
||||||
|
return this.doPostRequest(httpConnection, json);
|
||||||
|
}
|
||||||
|
|
||||||
|
public post(endpoint: string, postParameters: [string, string][], config: Config): Promise<string> {
|
||||||
|
const postQuery: string = this.getQuery(postParameters);
|
||||||
|
const httpConnection: ClientRequest = this.createRequest(endpoint, config.applicationName, {});
|
||||||
|
return this.doPostRequest(httpConnection, postQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
public set proxy(agentOptions: AgentOptions) {
|
||||||
|
this._proxy = agentOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
private createRequest(endpoint: string, applicationName: string, requestOptions: RequestOptions): ClientRequest {
|
||||||
|
const url = new URL(endpoint);
|
||||||
|
requestOptions.hostname = url.hostname;
|
||||||
|
requestOptions.protocol = url.protocol;
|
||||||
|
requestOptions.port = url.port;
|
||||||
|
requestOptions.path = url.pathname;
|
||||||
|
|
||||||
|
if (this._proxy) {
|
||||||
|
this.agentOptions = {...this._proxy, ...this.agentOptions};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requestOptions && requestOptions.idempotencyKey) {
|
||||||
|
requestOptions.headers[IDEMPOTENCY_KEY] = requestOptions.idempotencyKey;
|
||||||
|
delete requestOptions.idempotencyKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
requestOptions.agent = new Agent(this.agentOptions);
|
||||||
|
requestOptions.headers["Cache-Control"] = "no-cache";
|
||||||
|
requestOptions.method = METHOD_POST;
|
||||||
|
requestOptions.headers[ACCEPT_CHARSET] = HttpURLConnectionClient.CHARSET;
|
||||||
|
requestOptions.headers[USER_AGENT] = `${applicationName} ${Client.LIB_NAME}/${Client.LIB_VERSION}`;
|
||||||
|
|
||||||
|
return httpRequest(requestOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private getQuery(params: [string, string][]): string {
|
||||||
|
return params.map(([key, value]): string => `${key}=${value}`).join("&");
|
||||||
|
}
|
||||||
|
|
||||||
|
private doPostRequest(httpConnection: ClientRequest, json: string): Promise<string> {
|
||||||
|
return new Promise((resolve, reject): void => {
|
||||||
|
httpConnection.flushHeaders();
|
||||||
|
|
||||||
|
httpConnection.on("response", (res: IncomingMessage): void => {
|
||||||
|
let resData = "";
|
||||||
|
if (res.statusCode && res.statusCode !== 200) {
|
||||||
|
const exception = new HttpClientException(
|
||||||
|
`HTTP Exception: ${res.statusCode}. ${res.statusMessage}`,
|
||||||
|
res.statusCode,
|
||||||
|
res.headers,
|
||||||
|
res,
|
||||||
|
);
|
||||||
|
reject(exception);
|
||||||
|
}
|
||||||
|
res.on("data", (data): void => {
|
||||||
|
resData += data;
|
||||||
|
});
|
||||||
|
|
||||||
|
res.on("end", (): void => {
|
||||||
|
if (!res.complete) {
|
||||||
|
reject(new Error("The connection was terminated while the message was still being sent"));
|
||||||
|
}
|
||||||
|
resolve(resData);
|
||||||
|
});
|
||||||
|
|
||||||
|
res.on("error", reject);
|
||||||
|
});
|
||||||
|
|
||||||
|
httpConnection.on("timeout", (): void => {
|
||||||
|
httpConnection.abort();
|
||||||
|
});
|
||||||
|
httpConnection.on("error", reject);
|
||||||
|
httpConnection.write(Buffer.from(json));
|
||||||
|
httpConnection.end();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static setBasicAuthentication(httpConnection: ClientRequest, username: string, password: string): ClientRequest {
|
||||||
|
const authString = `${username}:${password}`;
|
||||||
|
const authEncBytes = new Buffer(authString);
|
||||||
|
const authStringEnc = authEncBytes.toString();
|
||||||
|
|
||||||
|
httpConnection.setHeader("Authorization", `Basic ${authStringEnc}`);
|
||||||
|
return httpConnection;
|
||||||
|
}
|
||||||
|
|
||||||
|
private installCertificateVerifier(terminalCertificatePath: string): void {
|
||||||
|
try {
|
||||||
|
const certificateInput = fs.readFileSync(terminalCertificatePath);
|
||||||
|
|
||||||
|
this.agentOptions = {
|
||||||
|
ca: certificateInput,
|
||||||
|
checkServerIdentity: (): undefined => {
|
||||||
|
return undefined;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
throw new HttpClientException(`Error loading certificate from path: ${e.message}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default HttpURLConnectionClient;
|
||||||
25
src/index.ts
Normal file
25
src/index.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export { default as Client } from "./client";
|
||||||
|
export { default as Config } from "./config";
|
||||||
|
export * from "./service/";
|
||||||
|
export { default as HttpURLConnectionClient } from "./httpClient/httpURLConnectionClient";
|
||||||
58
src/notification/notificationRequest.ts
Normal file
58
src/notification/notificationRequest.ts
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import {Convert, Notification, NotificationItem, NotificationRequestItem} from "../typings/notification";
|
||||||
|
|
||||||
|
class NotificationRequest {
|
||||||
|
public constructor(json: Notification) {
|
||||||
|
const notification = Convert.toNotification(JSON.stringify(json));
|
||||||
|
this._notificationItemContainers = notification.notificationItems;
|
||||||
|
this._live = notification.live;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get notificationItemContainers(): NotificationItem[] {
|
||||||
|
return this._notificationItemContainers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set notificationItemContainers(value: NotificationItem[]) {
|
||||||
|
this._notificationItemContainers = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get live(): string {
|
||||||
|
return this._live;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set live(value: string) {
|
||||||
|
this._live = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get notificationItems(): NotificationRequestItem[] {
|
||||||
|
if (!this._notificationItemContainers) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._notificationItemContainers.map((container): NotificationRequestItem => container.notificationRequestItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _live: string;
|
||||||
|
private _notificationItemContainers: NotificationItem[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export default NotificationRequest;
|
||||||
40
src/security/exception/invalidSecurityKeyException.ts
Normal file
40
src/security/exception/invalidSecurityKeyException.ts
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class InvalidSecurityKeyException implements Error {
|
||||||
|
private readonly _message: string;
|
||||||
|
private readonly _name: string;
|
||||||
|
|
||||||
|
public constructor(message: string) {
|
||||||
|
this._message = message;
|
||||||
|
this._name = "InvalidSecurityKeyException";
|
||||||
|
}
|
||||||
|
|
||||||
|
public get message(): string {
|
||||||
|
return this._message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get name(): string {
|
||||||
|
return this._name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default InvalidSecurityKeyException;
|
||||||
128
src/security/nexoCrypto.ts
Normal file
128
src/security/nexoCrypto.ts
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {Cipher, createCipheriv, createDecipheriv, createHmac, randomBytes} from "crypto";
|
||||||
|
import NexoCryptoException from "../service/exception/nexoCryptoException";
|
||||||
|
import {NEXO_IV_LENGTH} from "../typings/constants/nexoConstants";
|
||||||
|
import {
|
||||||
|
MessageHeader,
|
||||||
|
NexoDerivedKey,
|
||||||
|
SaleToPoiSecuredMessage,
|
||||||
|
SecurityKey,
|
||||||
|
SecurityTrailer,
|
||||||
|
} from "../typings/terminal";
|
||||||
|
import InvalidSecurityKeyException from "./exception/invalidSecurityKeyException";
|
||||||
|
import NexoDerivedKeyGenerator from "./nexoDerivedKeyGenerator";
|
||||||
|
|
||||||
|
enum Modes {
|
||||||
|
ENCRYPT,
|
||||||
|
DECRYPT,
|
||||||
|
}
|
||||||
|
|
||||||
|
class NexoCrypto {
|
||||||
|
public static encrypt(
|
||||||
|
messageHeader: MessageHeader,
|
||||||
|
saleToPoiMessageJson: string,
|
||||||
|
securityKey: SecurityKey,
|
||||||
|
): SaleToPoiSecuredMessage {
|
||||||
|
const derivedKey: NexoDerivedKey = NexoDerivedKeyGenerator.deriveKeyMaterial(securityKey.passphrase);
|
||||||
|
const saleToPoiMessageByteArray = Buffer.from(saleToPoiMessageJson, "ascii");
|
||||||
|
const ivNonce = NexoCrypto.generateRandomIvNonce();
|
||||||
|
const encryptedSaleToPoiMessage = NexoCrypto.crypt(saleToPoiMessageByteArray, derivedKey, ivNonce, Modes.ENCRYPT);
|
||||||
|
const encryptedSaleToPoiMessageHmac = NexoCrypto.hmac(saleToPoiMessageByteArray, derivedKey);
|
||||||
|
|
||||||
|
const securityTrailer: SecurityTrailer = {
|
||||||
|
adyenCryptoVersion: securityKey.adyenCryptoVersion,
|
||||||
|
hmac: encryptedSaleToPoiMessageHmac.toString("base64"),
|
||||||
|
keyIdentifier: securityKey.keyIdentifier,
|
||||||
|
keyVersion: securityKey.keyVersion,
|
||||||
|
nonce: ivNonce.toString("base64"),
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
messageHeader,
|
||||||
|
nexoBlob: encryptedSaleToPoiMessage.toString("base64"),
|
||||||
|
securityTrailer: securityTrailer,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public decrypt(saleToPoiSecureMessage: SaleToPoiSecuredMessage, securityKey: SecurityKey): string {
|
||||||
|
NexoCrypto.validateSecurityKey(securityKey);
|
||||||
|
|
||||||
|
const encryptedSaleToPoiMessageByteArray = Buffer.from(saleToPoiSecureMessage.nexoBlob, "base64");
|
||||||
|
const derivedKey = NexoDerivedKeyGenerator.deriveKeyMaterial(securityKey.passphrase);
|
||||||
|
const ivNonce = Buffer.from(saleToPoiSecureMessage.securityTrailer.nonce, "base64");
|
||||||
|
const decryptedSaleToPoiMessageByteArray =
|
||||||
|
NexoCrypto.crypt(encryptedSaleToPoiMessageByteArray, derivedKey, ivNonce, Modes.DECRYPT);
|
||||||
|
|
||||||
|
const receivedHmac = Buffer.from(saleToPoiSecureMessage.securityTrailer.hmac, "base64");
|
||||||
|
this.validateHmac(receivedHmac, decryptedSaleToPoiMessageByteArray, derivedKey);
|
||||||
|
|
||||||
|
return decryptedSaleToPoiMessageByteArray.toString("ascii");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static validateSecurityKey(securityKey: SecurityKey): void {
|
||||||
|
const isValid = securityKey
|
||||||
|
&& securityKey.passphrase
|
||||||
|
&& securityKey.keyIdentifier
|
||||||
|
&& securityKey.keyVersion
|
||||||
|
&& securityKey.adyenCryptoVersion;
|
||||||
|
if (!isValid) {
|
||||||
|
throw new InvalidSecurityKeyException("Invalid Security Key");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static crypt(bytes: Buffer, dk: NexoDerivedKey, ivNonce: Buffer, mode: Modes): Buffer {
|
||||||
|
const actualIV = Buffer.alloc(NEXO_IV_LENGTH);
|
||||||
|
for (let i = 0; i < NEXO_IV_LENGTH; i++) {
|
||||||
|
actualIV[i] = dk.iv[i] ^ ivNonce[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
const cipher = mode === Modes.ENCRYPT
|
||||||
|
? createCipheriv("aes-256-cbc", dk.cipherKey, actualIV)
|
||||||
|
: createDecipheriv("aes-256-cbc", dk.cipherKey, actualIV);
|
||||||
|
|
||||||
|
let encrypted = (cipher as Cipher).update(bytes);
|
||||||
|
encrypted = Buffer.concat([encrypted, cipher.final()]);
|
||||||
|
return encrypted;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static hmac(bytes: Buffer, derivedKey: NexoDerivedKey): Buffer {
|
||||||
|
const mac = createHmac("sha256", derivedKey.hmacKey);
|
||||||
|
return mac.update(bytes).digest();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static generateRandomIvNonce(): Buffer {
|
||||||
|
return randomBytes(NEXO_IV_LENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
private validateHmac(receivedHmac: Buffer, decryptedMessage: Buffer, derivedKey: NexoDerivedKey): void {
|
||||||
|
const hmac = NexoCrypto.hmac(decryptedMessage, derivedKey);
|
||||||
|
|
||||||
|
const isValid = hmac.every((item, index): boolean => item === receivedHmac[index]);
|
||||||
|
|
||||||
|
if (!isValid) {
|
||||||
|
throw new NexoCryptoException("Hmac validation failed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default NexoCrypto;
|
||||||
48
src/security/nexoDerivedKeyGenerator.ts
Normal file
48
src/security/nexoDerivedKeyGenerator.ts
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {pbkdf2Sync} from "crypto";
|
||||||
|
import {NEXO_CIPHER_KEY_LENGTH, NEXO_HMAC_KEY_LENGTH, NEXO_IV_LENGTH} from "../typings/constants/nexoConstants";
|
||||||
|
import { NexoDerivedKey } from "../typings/terminal";
|
||||||
|
|
||||||
|
class NexoDerivedKeyGenerator {
|
||||||
|
public static deriveKeyMaterial(passphrase: string): NexoDerivedKey {
|
||||||
|
const pass = Buffer.from(passphrase, "binary");
|
||||||
|
const salt = Buffer.from("AdyenNexoV1Salt", "binary");
|
||||||
|
const iterations = 4000;
|
||||||
|
const keylen = NEXO_CIPHER_KEY_LENGTH + NEXO_HMAC_KEY_LENGTH + NEXO_IV_LENGTH;
|
||||||
|
const key = pbkdf2Sync(pass, salt, iterations, keylen * 8, "sha1");
|
||||||
|
return NexoDerivedKeyGenerator.readKeyData(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static readKeyData(key: Buffer): NexoDerivedKey {
|
||||||
|
return {
|
||||||
|
cipherKey: key.slice(NEXO_HMAC_KEY_LENGTH, NEXO_HMAC_KEY_LENGTH + NEXO_CIPHER_KEY_LENGTH),
|
||||||
|
hmacKey: key.slice(0, NEXO_HMAC_KEY_LENGTH),
|
||||||
|
iv: key.slice(
|
||||||
|
NEXO_HMAC_KEY_LENGTH + NEXO_CIPHER_KEY_LENGTH,
|
||||||
|
NEXO_CIPHER_KEY_LENGTH + NEXO_HMAC_KEY_LENGTH + NEXO_IV_LENGTH,
|
||||||
|
),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default NexoDerivedKeyGenerator;
|
||||||
49
src/service.ts
Normal file
49
src/service.ts
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Client from "./client";
|
||||||
|
|
||||||
|
class Service {
|
||||||
|
protected _apiKeyRequired: boolean = false;
|
||||||
|
private _client: Client;
|
||||||
|
|
||||||
|
protected constructor(client: Client) {
|
||||||
|
this._client = client;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get client(): Client {
|
||||||
|
return this._client;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set client(client: Client) {
|
||||||
|
this._client = client;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get apiKeyRequired(): boolean {
|
||||||
|
return this._apiKeyRequired;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set apiKeyRequired(apiKeyRequired: boolean) {
|
||||||
|
this._apiKeyRequired = apiKeyRequired;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Service;
|
||||||
58
src/service/binLookup.ts
Normal file
58
src/service/binLookup.ts
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import ApiKeyAuthenticatedService from "../apiKeyAuthenticatedService";
|
||||||
|
import Client from "../client";
|
||||||
|
import GetCostEstimate from "./resource/binLookup/getCostEstimate";
|
||||||
|
import Get3dsAvailability from "./resource/binLookup/get3dsAvailability";
|
||||||
|
import {
|
||||||
|
CostEstimateRequest,
|
||||||
|
CostEstimateResponse,
|
||||||
|
ThreeDSAvailabilityRequest,
|
||||||
|
ThreeDSAvailabilityResponse
|
||||||
|
} from "../typings/binLookup";
|
||||||
|
import getJsonResponse from "../helpers/getJsonResponse";
|
||||||
|
|
||||||
|
class BinLookup extends ApiKeyAuthenticatedService {
|
||||||
|
private readonly _get3dsAvailability: Get3dsAvailability;
|
||||||
|
private readonly _getCostEstimate: GetCostEstimate;
|
||||||
|
|
||||||
|
public constructor(client: Client) {
|
||||||
|
super(client);
|
||||||
|
this._get3dsAvailability = new Get3dsAvailability(this);
|
||||||
|
this._getCostEstimate = new GetCostEstimate(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async get3dsAvailability(request: ThreeDSAvailabilityRequest): Promise<ThreeDSAvailabilityResponse> {
|
||||||
|
return await getJsonResponse<ThreeDSAvailabilityRequest, ThreeDSAvailabilityResponse>(
|
||||||
|
this._get3dsAvailability,
|
||||||
|
request
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getCostEstimate(request: CostEstimateRequest): Promise<CostEstimateResponse> {
|
||||||
|
return await getJsonResponse<CostEstimateRequest, CostEstimateResponse>(
|
||||||
|
this._getCostEstimate,
|
||||||
|
request
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default BinLookup;
|
||||||
96
src/service/checkout.ts
Normal file
96
src/service/checkout.ts
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import ApiKeyAuthenticatedService from "../apiKeyAuthenticatedService";
|
||||||
|
import Client from "../client";
|
||||||
|
import getJsonResponse from "../helpers/getJsonResponse";
|
||||||
|
import {
|
||||||
|
DetailsRequest, PaymentMethodsRequest, PaymentMethodsResponse, PaymentRequest, PaymentResponse, PaymentSetupRequest,
|
||||||
|
PaymentSetupResponse, PaymentVerificationRequest, PaymentVerificationResponse,
|
||||||
|
} from "../typings/checkout";
|
||||||
|
import { RequestOptions } from "../typings/requestOptions";
|
||||||
|
import PaymentMethods from "./resource/checkout/paymentMethods";
|
||||||
|
import Payments from "./resource/checkout/payments";
|
||||||
|
import PaymentsDetails from "./resource/checkout/paymentsDetails";
|
||||||
|
import PaymentSession from "./resource/checkout/paymentSession";
|
||||||
|
import PaymentsResult from "./resource/checkout/paymentsResult";
|
||||||
|
|
||||||
|
class Checkout extends ApiKeyAuthenticatedService {
|
||||||
|
private readonly _payments: Payments;
|
||||||
|
private readonly _paymentMethods: PaymentMethods;
|
||||||
|
private readonly _paymentsDetails: PaymentsDetails;
|
||||||
|
private readonly _paymentSession: PaymentSession;
|
||||||
|
private readonly _paymentsResult: PaymentsResult;
|
||||||
|
|
||||||
|
public constructor(client: Client) {
|
||||||
|
super(client);
|
||||||
|
this._payments = new Payments(this);
|
||||||
|
this._paymentMethods = new PaymentMethods(this);
|
||||||
|
this._paymentsDetails = new PaymentsDetails(this);
|
||||||
|
this._paymentSession = new PaymentSession(this);
|
||||||
|
this._paymentsResult = new PaymentsResult(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async payments(
|
||||||
|
paymentsRequest: PaymentRequest,
|
||||||
|
requestOptions?: RequestOptions,
|
||||||
|
): Promise<PaymentResponse> {
|
||||||
|
return getJsonResponse<PaymentRequest, PaymentResponse>(
|
||||||
|
this._payments,
|
||||||
|
paymentsRequest,
|
||||||
|
requestOptions,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async paymentMethods(paymentMethodsRequest: PaymentMethodsRequest): Promise<PaymentMethodsResponse> {
|
||||||
|
return getJsonResponse<PaymentMethodsRequest, PaymentMethodsResponse>(
|
||||||
|
this._paymentMethods,
|
||||||
|
paymentMethodsRequest,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async paymentsDetails(paymentsDetailsRequest: DetailsRequest): Promise<PaymentResponse> {
|
||||||
|
return getJsonResponse<DetailsRequest, PaymentResponse>(
|
||||||
|
this._paymentsDetails,
|
||||||
|
paymentsDetailsRequest,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async paymentSession(
|
||||||
|
paymentSessionRequest: PaymentSetupRequest,
|
||||||
|
requestOptions?: RequestOptions,
|
||||||
|
): Promise<PaymentSetupResponse> {
|
||||||
|
return getJsonResponse<PaymentSetupRequest, PaymentSetupResponse>(
|
||||||
|
this._paymentSession,
|
||||||
|
paymentSessionRequest,
|
||||||
|
requestOptions,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async paymentResult(paymentResultRequest: PaymentVerificationRequest): Promise<PaymentVerificationResponse> {
|
||||||
|
return getJsonResponse<PaymentVerificationRequest, PaymentVerificationResponse>(
|
||||||
|
this._paymentsResult,
|
||||||
|
paymentResultRequest,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Checkout;
|
||||||
44
src/service/checkoutUtility.ts
Normal file
44
src/service/checkoutUtility.ts
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import ApiKeyAuthenticatedService from "../apiKeyAuthenticatedService";
|
||||||
|
import Client from "../client";
|
||||||
|
import getJsonResponse from "../helpers/getJsonResponse";
|
||||||
|
import { CheckoutUtilityRequest, CheckoutUtilityResponse } from "../typings/checkoutUtility";
|
||||||
|
import OriginKeys from "./resource/checkoutUtility/originKeys";
|
||||||
|
|
||||||
|
class CheckoutUtility extends ApiKeyAuthenticatedService {
|
||||||
|
private readonly _originKeys: OriginKeys;
|
||||||
|
|
||||||
|
public constructor(client: Client) {
|
||||||
|
super(client);
|
||||||
|
this._originKeys = new OriginKeys(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async originKeys(originKeysRequest: CheckoutUtilityRequest): Promise<CheckoutUtilityResponse> {
|
||||||
|
return getJsonResponse<CheckoutUtilityRequest, CheckoutUtilityResponse>(
|
||||||
|
this._originKeys,
|
||||||
|
originKeysRequest,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default CheckoutUtility;
|
||||||
61
src/service/exception/apiException.ts
Normal file
61
src/service/exception/apiException.ts
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { ApiError } from "../../typings/apiError";
|
||||||
|
|
||||||
|
class ApiException implements Error {
|
||||||
|
private _error: ApiError;
|
||||||
|
private _statusCode: number;
|
||||||
|
private readonly _message: string;
|
||||||
|
private readonly _name: string;
|
||||||
|
|
||||||
|
public constructor(message: string, statusCode: number) {
|
||||||
|
this._name = "ApiException";
|
||||||
|
this._message = message;
|
||||||
|
this._statusCode = statusCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get error(): ApiError {
|
||||||
|
return this._error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set error(error: ApiError) {
|
||||||
|
this._error = error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get statusCode(): number {
|
||||||
|
return this._statusCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public set statusCode(statusCode: number) {
|
||||||
|
this._statusCode = statusCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get message(): string {
|
||||||
|
return this._message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get name(): string {
|
||||||
|
return this._name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ApiException;
|
||||||
40
src/service/exception/nexoCryptoException.ts
Normal file
40
src/service/exception/nexoCryptoException.ts
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class NexoCryptoException implements Error {
|
||||||
|
private readonly _message: string;
|
||||||
|
private readonly _name: string;
|
||||||
|
|
||||||
|
public constructor(message: string) {
|
||||||
|
this._name = "NexoCryptoException";
|
||||||
|
this._message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get message(): string {
|
||||||
|
return this._message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get name(): string {
|
||||||
|
return this._name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default NexoCryptoException;
|
||||||
29
src/service/index.ts
Normal file
29
src/service/index.ts
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export { default as TerminalLocalAPI } from "./terminalLocalAPI";
|
||||||
|
export { default as TerminalCloudAPI } from "./terminalCloudAPI";
|
||||||
|
export { default as CheckoutAPI } from "./checkout";
|
||||||
|
export { default as CheckoutUtility } from "./checkoutUtility";
|
||||||
|
export { default as Recurring } from "./recurring";
|
||||||
|
export { default as Modification } from "./modification";
|
||||||
|
export { default as BinLookup } from "./binLookup";
|
||||||
|
export { default as Payout } from "./payout";
|
||||||
118
src/service/modification.ts
Normal file
118
src/service/modification.ts
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Client from "../client";
|
||||||
|
import getJsonResponse from "../helpers/getJsonResponse";
|
||||||
|
import Service from "../service";
|
||||||
|
import { ModificationRequest, ModificationResult } from "../typings/payments";
|
||||||
|
import { RequestOptions } from "../typings/requestOptions";
|
||||||
|
import AdjustAuthorisation from "./resource/modification/adjustAuthorisation";
|
||||||
|
import Cancel from "./resource/modification/cancel";
|
||||||
|
import CancelOrRefund from "./resource/modification/cancelOrRefund";
|
||||||
|
import Capture from "./resource/modification/capture";
|
||||||
|
import Refund from "./resource/modification/refund";
|
||||||
|
import TechnicalCancel from "./resource/modification/technicalCancel";
|
||||||
|
|
||||||
|
class Modification extends Service {
|
||||||
|
private readonly _cancelOrRefund: CancelOrRefund;
|
||||||
|
private readonly _cancel: Cancel;
|
||||||
|
private readonly _capture: Capture;
|
||||||
|
private readonly _refund: Refund;
|
||||||
|
private readonly _adjustAuthorisation: AdjustAuthorisation;
|
||||||
|
private readonly _technicalCancel: TechnicalCancel;
|
||||||
|
|
||||||
|
public constructor(client: Client) {
|
||||||
|
super(client);
|
||||||
|
this._capture = new Capture(this);
|
||||||
|
this._cancelOrRefund = new CancelOrRefund(this);
|
||||||
|
this._cancel = new Cancel(this);
|
||||||
|
this._refund = new Refund(this);
|
||||||
|
this._adjustAuthorisation = new AdjustAuthorisation(this);
|
||||||
|
this._technicalCancel = new TechnicalCancel(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async capture(
|
||||||
|
captureRequest: ModificationRequest,
|
||||||
|
requestOptions?: RequestOptions,
|
||||||
|
): Promise<ModificationResult> {
|
||||||
|
return await getJsonResponse<ModificationRequest, ModificationResult>(
|
||||||
|
this._capture,
|
||||||
|
captureRequest,
|
||||||
|
requestOptions,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async cancelOrRefund(
|
||||||
|
cancelOrRefundRequest: ModificationRequest,
|
||||||
|
requestOptions?: RequestOptions,
|
||||||
|
): Promise<ModificationResult> {
|
||||||
|
return await getJsonResponse<ModificationRequest, ModificationResult>(
|
||||||
|
this._cancelOrRefund,
|
||||||
|
cancelOrRefundRequest,
|
||||||
|
requestOptions,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async refund(
|
||||||
|
refundRequest: ModificationRequest,
|
||||||
|
requestOptions?: RequestOptions,
|
||||||
|
): Promise<ModificationResult> {
|
||||||
|
return await getJsonResponse<ModificationRequest, ModificationResult>(
|
||||||
|
this._refund,
|
||||||
|
refundRequest,
|
||||||
|
requestOptions,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async cancel(
|
||||||
|
cancelRequest: ModificationRequest,
|
||||||
|
requestOptions?: RequestOptions,
|
||||||
|
): Promise<ModificationResult> {
|
||||||
|
return await getJsonResponse<ModificationRequest, ModificationResult>(
|
||||||
|
this._cancel,
|
||||||
|
cancelRequest,
|
||||||
|
requestOptions,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async technicalCancel(
|
||||||
|
technicalCancelRequest: ModificationRequest,
|
||||||
|
requestOptions?: RequestOptions,
|
||||||
|
): Promise<ModificationResult> {
|
||||||
|
return await getJsonResponse<ModificationRequest, ModificationResult>(
|
||||||
|
this._technicalCancel,
|
||||||
|
technicalCancelRequest,
|
||||||
|
requestOptions,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async adjustAuthorisation(
|
||||||
|
adjustAuthorisationRequest: ModificationRequest,
|
||||||
|
requestOptions?: RequestOptions,
|
||||||
|
): Promise<ModificationResult> {
|
||||||
|
return await getJsonResponse<ModificationRequest, ModificationResult>(
|
||||||
|
this._adjustAuthorisation,
|
||||||
|
adjustAuthorisationRequest,
|
||||||
|
requestOptions,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Modification;
|
||||||
89
src/service/payout.ts
Normal file
89
src/service/payout.ts
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Client from "../client";
|
||||||
|
import Service from "../service";
|
||||||
|
import DeclineThirdParty from "./resource/payout/declineThirdParty";
|
||||||
|
import StoreDetail from "./resource/payout/storeDetail";
|
||||||
|
import SubmitThirdParty from "./resource/payout/submitThirdParty";
|
||||||
|
import ConfirmThirdParty from "./resource/payout/confirmThirdParty";
|
||||||
|
import StoreDetailAndSubmitThirdParty from "./resource/payout/storeDetailAndSubmitThirdParty";
|
||||||
|
import {
|
||||||
|
ModifyRequest,
|
||||||
|
ModifyResponse,
|
||||||
|
StoreDetailAndSubmitRequest,
|
||||||
|
StoreDetailAndSubmitResponse, StoreDetailRequest, StoreDetailResponse, SubmitRequest, SubmitResponse
|
||||||
|
} from "../typings/payout";
|
||||||
|
import getJsonResponse from "../helpers/getJsonResponse";
|
||||||
|
|
||||||
|
class Payout extends Service {
|
||||||
|
private readonly _storeDetailAndSubmitThirdParty: StoreDetailAndSubmitThirdParty;
|
||||||
|
private readonly _confirmThirdParty: ConfirmThirdParty;
|
||||||
|
private readonly _declineThirdParty: DeclineThirdParty;
|
||||||
|
private readonly _storeDetail: StoreDetail;
|
||||||
|
private readonly _submitThirdParty: SubmitThirdParty;
|
||||||
|
|
||||||
|
public constructor(client: Client) {
|
||||||
|
super(client);
|
||||||
|
|
||||||
|
this._storeDetailAndSubmitThirdParty = new StoreDetailAndSubmitThirdParty(this);
|
||||||
|
this._confirmThirdParty = new ConfirmThirdParty(this);
|
||||||
|
this._declineThirdParty = new DeclineThirdParty(this);
|
||||||
|
this._storeDetail = new StoreDetail(this);
|
||||||
|
this._submitThirdParty = new SubmitThirdParty(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async storeDetailAndSubmitThirdParty(request: StoreDetailAndSubmitRequest): Promise<StoreDetailAndSubmitResponse> {
|
||||||
|
return await getJsonResponse<StoreDetailAndSubmitRequest, StoreDetailAndSubmitResponse>(
|
||||||
|
this._storeDetailAndSubmitThirdParty,
|
||||||
|
request
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async confirmThirdParty(request: ModifyRequest): Promise<ModifyResponse> {
|
||||||
|
return await getJsonResponse<ModifyRequest, ModifyResponse>(
|
||||||
|
this._confirmThirdParty,
|
||||||
|
request
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async declineThirdParty(request: ModifyRequest): Promise<ModifyResponse> {
|
||||||
|
return await getJsonResponse<ModifyRequest, ModifyResponse>(
|
||||||
|
this._declineThirdParty,
|
||||||
|
request
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async storeDetail(request: StoreDetailRequest): Promise<StoreDetailResponse> {
|
||||||
|
return await getJsonResponse<StoreDetailRequest, StoreDetailResponse>(
|
||||||
|
this._storeDetail,
|
||||||
|
request
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async submitThirdparty(request: SubmitRequest): Promise<SubmitResponse> {
|
||||||
|
return await getJsonResponse<SubmitRequest, SubmitResponse>(
|
||||||
|
this._submitThirdParty,
|
||||||
|
request
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Payout;
|
||||||
54
src/service/recurring.ts
Normal file
54
src/service/recurring.ts
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Client from "../client";
|
||||||
|
import getJsonResponse from "../helpers/getJsonResponse";
|
||||||
|
import Service from "../service";
|
||||||
|
import { DisableRequest, DisableResult, RecurringDetailsRequest, RecurringDetailsResult } from "../typings/recurring";
|
||||||
|
import Disable from "./resource/recurring/disable";
|
||||||
|
import ListRecurringDetails from "./resource/recurring/listRecurringDetails";
|
||||||
|
|
||||||
|
class Recurring extends Service {
|
||||||
|
private readonly _listRecurringDetails: ListRecurringDetails;
|
||||||
|
private readonly _disable: Disable;
|
||||||
|
|
||||||
|
public constructor(client: Client) {
|
||||||
|
super(client);
|
||||||
|
this._listRecurringDetails = new ListRecurringDetails(this);
|
||||||
|
this._disable = new Disable(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async listRecurringDetails(request: RecurringDetailsRequest): Promise<RecurringDetailsResult> {
|
||||||
|
return await getJsonResponse<RecurringDetailsRequest, RecurringDetailsResult>(
|
||||||
|
this._listRecurringDetails,
|
||||||
|
request,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async disable(request: DisableRequest): Promise<DisableResult> {
|
||||||
|
return await getJsonResponse<DisableRequest, DisableResult>(
|
||||||
|
this._disable,
|
||||||
|
request,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Recurring;
|
||||||
65
src/service/resource.ts
Normal file
65
src/service/resource.ts
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Config from "../config";
|
||||||
|
import ClientInterface from "../httpClient/clientInterface";
|
||||||
|
import Service from "../service";
|
||||||
|
import { RequestOptions } from "../typings/requestOptions";
|
||||||
|
import ApiException from "./exception/apiException";
|
||||||
|
|
||||||
|
class Resource {
|
||||||
|
protected endpoint: string;
|
||||||
|
private service: Service;
|
||||||
|
|
||||||
|
public constructor(service: Service, endpoint: string) {
|
||||||
|
this.service = service;
|
||||||
|
this.endpoint = endpoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async request(json: string, requestOptions?: RequestOptions): Promise<string> {
|
||||||
|
const clientInterface: ClientInterface = this.service.client.httpClient;
|
||||||
|
const config: Config = this.service.client.config;
|
||||||
|
let responseBody;
|
||||||
|
let apiException: ApiException;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return await clientInterface.request(
|
||||||
|
this.endpoint,
|
||||||
|
json, config,
|
||||||
|
this.service.apiKeyRequired,
|
||||||
|
requestOptions,
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
responseBody = e.responseBody;
|
||||||
|
apiException = new ApiException(e.message, e.code);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
apiException.error = responseBody;
|
||||||
|
} catch (e) {
|
||||||
|
throw new ApiException("Invalid response or an invalid X-API-Key key was used", e.statusCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw apiException;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Resource;
|
||||||
35
src/service/resource/binLookup/get3dsAvailability.ts
Normal file
35
src/service/resource/binLookup/get3dsAvailability.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Resource from "../../resource";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Client from "../../../client";
|
||||||
|
|
||||||
|
class Get3dsAvailability extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}${Client.BIN_LOOKUP_PAL_SUFFIX}${Client.BIN_LOOKUP_API_VERSION}/get3dsAvailability`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Get3dsAvailability;
|
||||||
35
src/service/resource/binLookup/getCostEstimate.ts
Normal file
35
src/service/resource/binLookup/getCostEstimate.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Resource from "../../resource";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Client from "../../../client";
|
||||||
|
|
||||||
|
class GetCostEstimate extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}${Client.BIN_LOOKUP_PAL_SUFFIX}${Client.BIN_LOOKUP_API_VERSION}/getCostEstimate`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default GetCostEstimate;
|
||||||
35
src/service/resource/checkout/paymentMethods.ts
Normal file
35
src/service/resource/checkout/paymentMethods.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Client from "../../../client";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Resource from "../../resource";
|
||||||
|
|
||||||
|
class PaymentMethods extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.checkoutEndpoint}/${Client.CHECKOUT_API_VERSION}/paymentMethods`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default PaymentMethods;
|
||||||
35
src/service/resource/checkout/paymentSession.ts
Normal file
35
src/service/resource/checkout/paymentSession.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Client from "../../../client";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Resource from "../../resource";
|
||||||
|
|
||||||
|
class PaymentSession extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.checkoutEndpoint}/${Client.CHECKOUT_API_VERSION}/paymentSession`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default PaymentSession;
|
||||||
35
src/service/resource/checkout/payments.ts
Normal file
35
src/service/resource/checkout/payments.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Client from "../../../client";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Resource from "../../resource";
|
||||||
|
|
||||||
|
class Payments extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.checkoutEndpoint}/${Client.CHECKOUT_API_VERSION}/payments`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Payments;
|
||||||
35
src/service/resource/checkout/paymentsDetails.ts
Normal file
35
src/service/resource/checkout/paymentsDetails.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Client from "../../../client";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Resource from "../../resource";
|
||||||
|
|
||||||
|
class PaymentsDetails extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.checkoutEndpoint}/${Client.CHECKOUT_API_VERSION}/payments/details`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default PaymentsDetails;
|
||||||
35
src/service/resource/checkout/paymentsResult.ts
Normal file
35
src/service/resource/checkout/paymentsResult.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Client from "../../../client";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Resource from "../../resource";
|
||||||
|
|
||||||
|
class PaymentsResult extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.checkoutEndpoint}/${Client.CHECKOUT_API_VERSION}/payments/result`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default PaymentsResult;
|
||||||
35
src/service/resource/checkoutUtility/originKeys.ts
Normal file
35
src/service/resource/checkoutUtility/originKeys.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Client from "../../../client";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Resource from "../../resource";
|
||||||
|
|
||||||
|
class OriginKeys extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.checkoutEndpoint}/${Client.CHECKOUT_UTILITY_API_VERSION}/originKeys`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default OriginKeys;
|
||||||
34
src/service/resource/modification/adjustAuthorisation.ts
Normal file
34
src/service/resource/modification/adjustAuthorisation.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Client from "../../../client";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Resource from "../../resource";
|
||||||
|
|
||||||
|
class AdjustAuthorisation extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}/pal/servlet/Payment/${Client.API_VERSION}/adjustAuthorisation`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default AdjustAuthorisation;
|
||||||
34
src/service/resource/modification/cancel.ts
Normal file
34
src/service/resource/modification/cancel.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Client from "../../../client";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Resource from "../../resource";
|
||||||
|
|
||||||
|
class Cancel extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}/pal/servlet/Payment/${Client.API_VERSION}/cancel`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Cancel;
|
||||||
34
src/service/resource/modification/cancelOrRefund.ts
Normal file
34
src/service/resource/modification/cancelOrRefund.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Client from "../../../client";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Resource from "../../resource";
|
||||||
|
|
||||||
|
class CancelOrRefund extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}/pal/servlet/Payment/${Client.API_VERSION}/cancelOrRefund`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default CancelOrRefund;
|
||||||
34
src/service/resource/modification/capture.ts
Normal file
34
src/service/resource/modification/capture.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Client from "../../../client";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Resource from "../../resource";
|
||||||
|
|
||||||
|
class Capture extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}/pal/servlet/Payment/${Client.API_VERSION}/capture`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Capture;
|
||||||
34
src/service/resource/modification/refund.ts
Normal file
34
src/service/resource/modification/refund.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Client from "../../../client";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Resource from "../../resource";
|
||||||
|
|
||||||
|
class Refund extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}/pal/servlet/Payment/${Client.API_VERSION}/refund`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Refund;
|
||||||
34
src/service/resource/modification/technicalCancel.ts
Normal file
34
src/service/resource/modification/technicalCancel.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Resource from "../../resource";
|
||||||
|
import Client from "../../../client";
|
||||||
|
import Service from "../../../service";
|
||||||
|
|
||||||
|
class TechnicalCancel extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}/pal/servlet/Payment/${Client.API_VERSION}/technicalCancel`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default TechnicalCancel;
|
||||||
34
src/service/resource/payout/confirmThirdParty.ts
Normal file
34
src/service/resource/payout/confirmThirdParty.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Resource from "../../resource";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Client from "../../../client";
|
||||||
|
|
||||||
|
class ConfirmThirdParty extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}/pal/servlet/Payout/${Client.API_VERSION}/declineThirdParty`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ConfirmThirdParty;
|
||||||
34
src/service/resource/payout/declineThirdParty.ts
Normal file
34
src/service/resource/payout/declineThirdParty.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Resource from "../../resource";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Client from "../../../client";
|
||||||
|
|
||||||
|
class DeclineThirdParty extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}/pal/servlet/Payout/${Client.API_VERSION}/storeDetailAndSubmitThirdParty`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default DeclineThirdParty;
|
||||||
34
src/service/resource/payout/storeDetail.ts
Normal file
34
src/service/resource/payout/storeDetail.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Resource from "../../resource";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Client from "../../../client";
|
||||||
|
|
||||||
|
class StoreDetail extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}/pal/servlet/Payout/${Client.API_VERSION}/storeDetail`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default StoreDetail;
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Resource from "../../resource";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Client from "../../../client";
|
||||||
|
|
||||||
|
class StoreDetailAndSubmitThirdParty extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}/pal/servlet/Payout/${Client.API_VERSION}/storeDetailAndSubmitThirdParty`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default StoreDetailAndSubmitThirdParty;
|
||||||
34
src/service/resource/payout/submitThirdParty.ts
Normal file
34
src/service/resource/payout/submitThirdParty.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
import Resource from "../../resource";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Client from "../../../client";
|
||||||
|
|
||||||
|
class SubmitThirdParty extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}/pal/servlet/Payout/${Client.API_VERSION}/submitThirdParty`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default SubmitThirdParty;
|
||||||
35
src/service/resource/recurring/disable.ts
Normal file
35
src/service/resource/recurring/disable.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Client from "../../../client";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Resource from "../../resource";
|
||||||
|
|
||||||
|
class Disable extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}/pal/servlet/Recurring/${Client.RECURRING_API_VERSION}/disable`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Disable;
|
||||||
35
src/service/resource/recurring/listRecurringDetails.ts
Normal file
35
src/service/resource/recurring/listRecurringDetails.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Client from "../../../client";
|
||||||
|
import Service from "../../../service";
|
||||||
|
import Resource from "../../resource";
|
||||||
|
|
||||||
|
class ListRecurringDetails extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(
|
||||||
|
service,
|
||||||
|
`${service.client.config.endpoint}/pal/servlet/Recurring/${Client.RECURRING_API_VERSION}/listRecurringDetails`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ListRecurringDetails;
|
||||||
32
src/service/resource/terminal/cloud/async.ts
Normal file
32
src/service/resource/terminal/cloud/async.ts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Service from "../../../../service";
|
||||||
|
import Resource from "../../../resource";
|
||||||
|
|
||||||
|
class Async extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(service, service.client.config.terminalApiCloudEndpoint + "/async");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Async;
|
||||||
32
src/service/resource/terminal/cloud/sync.ts
Normal file
32
src/service/resource/terminal/cloud/sync.ts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Service from "../../../../service";
|
||||||
|
import Resource from "../../../resource";
|
||||||
|
|
||||||
|
class Sync extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(service, service.client.config.terminalApiCloudEndpoint + "/sync");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Sync;
|
||||||
31
src/service/resource/terminal/local/localRequest.ts
Normal file
31
src/service/resource/terminal/local/localRequest.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Service from "../../../../service";
|
||||||
|
import Resource from "../../../resource";
|
||||||
|
|
||||||
|
class LocalRequest extends Resource {
|
||||||
|
public constructor(service: Service) {
|
||||||
|
super(service, service.client.config.terminalApiLocalEndpoint + ":8443/nexo/");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default LocalRequest;
|
||||||
56
src/service/terminalCloudAPI.ts
Normal file
56
src/service/terminalCloudAPI.ts
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import ApiKeyAuthenticatedService from "../apiKeyAuthenticatedService";
|
||||||
|
import Client from "../client";
|
||||||
|
import getJsonResponse from "../helpers/getJsonResponse";
|
||||||
|
import {Convert, TerminalApiRequest, TerminalApiResponse} from "../typings/terminal";
|
||||||
|
import Async from "./resource/terminal/cloud/async";
|
||||||
|
import Sync from "./resource/terminal/cloud/sync";
|
||||||
|
|
||||||
|
class TerminalCloudAPI extends ApiKeyAuthenticatedService {
|
||||||
|
private readonly terminalApiAsync: Async;
|
||||||
|
private readonly terminalApiSync: Sync;
|
||||||
|
|
||||||
|
public constructor(client: Client) {
|
||||||
|
super(client);
|
||||||
|
this.terminalApiAsync = new Async(this);
|
||||||
|
this.terminalApiSync = new Sync(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async(terminalApiRequest: TerminalApiRequest): Promise<string> {
|
||||||
|
return getJsonResponse<TerminalApiRequest>(
|
||||||
|
this.terminalApiAsync,
|
||||||
|
Convert.terminalApiRequestToJson(terminalApiRequest),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async sync(terminalApiRequest: TerminalApiRequest): Promise<TerminalApiResponse> {
|
||||||
|
const response = await getJsonResponse<TerminalApiRequest, TerminalApiResponse>(
|
||||||
|
this.terminalApiSync,
|
||||||
|
Convert.terminalApiRequestToJson(terminalApiRequest),
|
||||||
|
);
|
||||||
|
|
||||||
|
return Convert.toTerminalApiResponse(JSON.stringify(response));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default TerminalCloudAPI;
|
||||||
75
src/service/terminalLocalAPI.ts
Normal file
75
src/service/terminalLocalAPI.ts
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
* ######
|
||||||
|
* ######
|
||||||
|
* ############ ####( ###### #####. ###### ############ ############
|
||||||
|
* ############# #####( ###### #####. ###### ############# #############
|
||||||
|
* ###### #####( ###### #####. ###### ##### ###### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
|
||||||
|
* ###### ###### #####( ###### #####. ###### ##### ##### ######
|
||||||
|
* ############# ############# ############# ############# ##### ######
|
||||||
|
* ############ ############ ############# ############ ##### ######
|
||||||
|
* ######
|
||||||
|
* #############
|
||||||
|
* ############
|
||||||
|
*
|
||||||
|
* Adyen NodeJS API Library
|
||||||
|
*
|
||||||
|
* Copyright (c) 2019 Adyen B.V.
|
||||||
|
* This file is open source and available under the MIT license.
|
||||||
|
* See the LICENSE file for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import ApiKeyAuthenticatedService from "../apiKeyAuthenticatedService";
|
||||||
|
import Client from "../client";
|
||||||
|
import getJsonResponse from "../helpers/getJsonResponse";
|
||||||
|
import NexoCrypto from "../security/nexoCrypto";
|
||||||
|
import {
|
||||||
|
Convert,
|
||||||
|
SaleToPoiSecuredMessage,
|
||||||
|
SecurityKey,
|
||||||
|
TerminalApiRequest, TerminalApiResponse,
|
||||||
|
TerminalApiSecuredRequest,
|
||||||
|
} from "../typings/terminal";
|
||||||
|
import LocalRequest from "./resource/terminal/local/localRequest";
|
||||||
|
|
||||||
|
class TerminalLocalAPI extends ApiKeyAuthenticatedService {
|
||||||
|
private readonly localRequest: LocalRequest;
|
||||||
|
private nexoCrypto: NexoCrypto;
|
||||||
|
|
||||||
|
public constructor(client: Client) {
|
||||||
|
super(client);
|
||||||
|
this.localRequest = new LocalRequest(this);
|
||||||
|
this.nexoCrypto = new NexoCrypto();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async request(
|
||||||
|
terminalApiRequest: TerminalApiRequest,
|
||||||
|
securityKey: SecurityKey,
|
||||||
|
): Promise<TerminalApiResponse> {
|
||||||
|
const saleToPoiSecuredMessage: SaleToPoiSecuredMessage = NexoCrypto.encrypt(
|
||||||
|
terminalApiRequest.saleToPoiRequest.messageHeader,
|
||||||
|
Convert.terminalApiRequestToJson(terminalApiRequest),
|
||||||
|
securityKey,
|
||||||
|
);
|
||||||
|
|
||||||
|
const securedPaymentRequest: TerminalApiSecuredRequest = {
|
||||||
|
saleToPoiRequest: saleToPoiSecuredMessage,
|
||||||
|
};
|
||||||
|
|
||||||
|
const jsonResponse = await getJsonResponse<TerminalApiSecuredRequest, TerminalApiResponse>(
|
||||||
|
this.localRequest,
|
||||||
|
Convert.terminalApiSecuredRequestToJson(securedPaymentRequest),
|
||||||
|
);
|
||||||
|
|
||||||
|
const terminalApiSecuredResponse = Convert.toTerminalApiSecuredResponse(JSON.stringify(jsonResponse));
|
||||||
|
|
||||||
|
const response = this.nexoCrypto.decrypt(
|
||||||
|
terminalApiSecuredResponse.saleToPoiResponse,
|
||||||
|
securityKey,
|
||||||
|
);
|
||||||
|
|
||||||
|
return Convert.toTerminalApiResponse(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default TerminalLocalAPI;
|
||||||
4
src/typings/amount.ts
Normal file
4
src/typings/amount.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
export interface Amount {
|
||||||
|
currency: string;
|
||||||
|
value: number;
|
||||||
|
}
|
||||||
9
src/typings/apiError.ts
Normal file
9
src/typings/apiError.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
// Generated using typescript-generator version 2.14.505 on 2019-06-04 08:51:10.
|
||||||
|
|
||||||
|
export interface ApiError {
|
||||||
|
status?: number;
|
||||||
|
errorCode?: string;
|
||||||
|
message?: string;
|
||||||
|
errorType?: string;
|
||||||
|
pspReference?: string;
|
||||||
|
}
|
||||||
41
src/typings/applicationInfo.ts
Normal file
41
src/typings/applicationInfo.ts
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
// Generated using typescript-generator version 2.14.505 on 2019-06-11 10:28:22.
|
||||||
|
|
||||||
|
import Client from "../client";
|
||||||
|
|
||||||
|
export class ApplicationInfo {
|
||||||
|
adyenLibrary?: CommonField;
|
||||||
|
adyenPaymentSource?: CommonField;
|
||||||
|
externalPlatform?: ExternalPlatform;
|
||||||
|
merchantApplication?: CommonField;
|
||||||
|
merchantDevice?: MerchantDevice;
|
||||||
|
paymentDetailsSource?: CommonField;
|
||||||
|
shopperInteractionDevice?: ShopperInteractionDevice;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.adyenLibrary = {
|
||||||
|
name: Client.LIB_NAME,
|
||||||
|
version: Client.LIB_VERSION,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CommonField {
|
||||||
|
name?: string;
|
||||||
|
version?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ExternalPlatform extends CommonField {
|
||||||
|
integrator?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MerchantDevice {
|
||||||
|
os?: string;
|
||||||
|
osVersion?: string;
|
||||||
|
reference?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ShopperInteractionDevice {
|
||||||
|
os?: string;
|
||||||
|
osVersion?: string;
|
||||||
|
locale?: string;
|
||||||
|
}
|
||||||
22
src/typings/binLookup/amount.ts
Executable file
22
src/typings/binLookup/amount.ts
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* Adyen BinLookup Service
|
||||||
|
* The BIN Lookup API provides endpoints for retrieving information, such as [cost estimates](https://docs.adyen.com/features/cost-estimation), and 3D Secure supported version based on a given [BIN](https://docs.adyen.com/payments-basics/payment-glossary#bankidentificationnumberbin).
|
||||||
|
*
|
||||||
|
* OpenAPI spec version: 40
|
||||||
|
* Contact: support@adyen.com
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by the swagger code generator program.
|
||||||
|
* https://github.com/swagger-api/swagger-codegen.git
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export interface Amount {
|
||||||
|
/**
|
||||||
|
* The three-character [ISO currency code](https://docs.adyen.com/development-resources/currency-codes).
|
||||||
|
*/
|
||||||
|
currency: string;
|
||||||
|
/**
|
||||||
|
* The payable amount that can be charged for the transaction. The transaction amount needs to be represented in minor units according to the [following table](https://docs.adyen.com/development-resources/currency-codes).
|
||||||
|
*/
|
||||||
|
value: number;
|
||||||
|
}
|
||||||
54
src/typings/binLookup/cardBin.ts
Executable file
54
src/typings/binLookup/cardBin.ts
Executable file
@@ -0,0 +1,54 @@
|
|||||||
|
/**
|
||||||
|
* Adyen BinLookup Service
|
||||||
|
* The BIN Lookup API provides endpoints for retrieving information, such as [cost estimates](https://docs.adyen.com/features/cost-estimation), and 3D Secure supported version based on a given [BIN](https://docs.adyen.com/payments-basics/payment-glossary#bankidentificationnumberbin).
|
||||||
|
*
|
||||||
|
* OpenAPI spec version: 40
|
||||||
|
* Contact: support@adyen.com
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by the swagger code generator program.
|
||||||
|
* https://github.com/swagger-api/swagger-codegen.git
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export interface CardBin {
|
||||||
|
/**
|
||||||
|
* The first 6 digit of the card number. Enable this field via merchant account settings.
|
||||||
|
*/
|
||||||
|
bin?: string;
|
||||||
|
/**
|
||||||
|
* If true, it indicates a commercial card. Enable this field via merchant account settings.
|
||||||
|
*/
|
||||||
|
commercial?: boolean;
|
||||||
|
/**
|
||||||
|
* The card funding source. Valid values are: * CREDIT * DEBIT * PREPAID * PREPAID_RELOADABLE * DEFERRED_DEBIT * CHARGED > Enable this field via merchant account settings.
|
||||||
|
*/
|
||||||
|
fundingSource?: string;
|
||||||
|
/**
|
||||||
|
* Indicates availability of funds. Visa: * \"I\" (fast funds are supported) * \"N\" (otherwise) Mastercard: * \"I\" (product type is Prepaid or Debit, or issuing country is in CEE/HGEM list) * \"N\" (otherwise) > Returned when you verify a card BIN or estimate costs, and only if `payoutEligible` is different from \"N\" or \"U\".
|
||||||
|
*/
|
||||||
|
fundsAvailability?: string;
|
||||||
|
/**
|
||||||
|
* The issuing bank of the card.
|
||||||
|
*/
|
||||||
|
issuingBank?: string;
|
||||||
|
/**
|
||||||
|
* The country where the card was issued from.
|
||||||
|
*/
|
||||||
|
issuingCountry?: string;
|
||||||
|
/**
|
||||||
|
* The currency of the card.
|
||||||
|
*/
|
||||||
|
issuingCurrency?: string;
|
||||||
|
/**
|
||||||
|
* The payment method associated with the card (e.g. visa, mc, or amex).
|
||||||
|
*/
|
||||||
|
paymentMethod?: string;
|
||||||
|
/**
|
||||||
|
* Indicates whether a payout is eligible or not for this card. Visa: * \"Y\" * \"N\" Mastercard: * \"Y\" (domestic and cross-border) * \"D\" (only domestic) * \"N\" (no MoneySend) * \"U\" (unknown) > Returned when you verify a card BIN or estimate costs, and only if `payoutEligible` is different from \"N\" or \"U\".
|
||||||
|
*/
|
||||||
|
payoutEligible?: string;
|
||||||
|
/**
|
||||||
|
* The last four digits of the card number.
|
||||||
|
*/
|
||||||
|
summary?: string;
|
||||||
|
}
|
||||||
26
src/typings/binLookup/costEstimateAssumptions.ts
Executable file
26
src/typings/binLookup/costEstimateAssumptions.ts
Executable file
@@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* Adyen BinLookup Service
|
||||||
|
* The BIN Lookup API provides endpoints for retrieving information, such as [cost estimates](https://docs.adyen.com/features/cost-estimation), and 3D Secure supported version based on a given [BIN](https://docs.adyen.com/payments-basics/payment-glossary#bankidentificationnumberbin).
|
||||||
|
*
|
||||||
|
* OpenAPI spec version: 40
|
||||||
|
* Contact: support@adyen.com
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by the swagger code generator program.
|
||||||
|
* https://github.com/swagger-api/swagger-codegen.git
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export interface CostEstimateAssumptions {
|
||||||
|
/**
|
||||||
|
* If true, the cardholder is expected to successfully authorise via 3D Secure.
|
||||||
|
*/
|
||||||
|
assume3DSecureAuthenticated?: boolean;
|
||||||
|
/**
|
||||||
|
* If true, the transaction is expected to have valid Level 3 data.
|
||||||
|
*/
|
||||||
|
assumeLevel3Data?: boolean;
|
||||||
|
/**
|
||||||
|
* If not zero, the number of installments.
|
||||||
|
*/
|
||||||
|
installments?: number;
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user