Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
@kevin.eu/kevin-platform-client
Advanced tools
Node JS library implementing kevin. platform API.
kevin. API implementation for node.js
On success, an exact response documented in https://api-reference.kevin.eu is returned.
Example below displays possible response from /auth/countries
endpoint
{
data: [
'AT', 'BE', 'BG', 'CZ', 'DE',
'DK', 'EE', 'ES', 'FI', 'FR',
'GB', 'GR', 'HR', 'HU', 'IE',
'IS', 'IT', 'LT', 'LU', 'LV',
'NL', 'NO', 'PL', 'PT', 'RO',
'SE', 'SI', 'SK'
]
}
On failure, an error inheriting KevinError
class is thrown. Possible errors are:
Each error contains useful information such as httpCode
, errorName
, errorCode
etc.
const kevin = require('@kevin.eu/kevin-platform-client');
const clientId = 'my-client-id';
const clientSecret = 'my-client-secret';
const client = new kevin.Client(clientId, clientSecret);
Get list of countries that are supported by kevin.
const response = await client.general.getCountries();
const countries = response.data;
Get single bank data from the bank list
const bankId = 'SEB_LT_TEST';
const bank = await client.general.getBank(bankId);
Get all the supported banks for country or project
❗️If no country code is provided, all banks available to the project are returned
const countryCode = 'LT';
const response = await client.general.getBanks(countryCode);
const banks = response.data;
Get savings bank list for given bank
❗️Not all banks have savings banks
const bankId = 'SEB_LT_TEST';
const response = await client.general.getBanks(countryCode);
const banks = response.data;
Get list of supported payment methods for given project
const response = await client.general.getPaymentMethods();
const paymentMethods = response.data;
Get all project settings
const projectSettings = await client.general.getProjectSettings();
Initiate bank payment
const options = {
headers: {
'Redirect-URL': 'https://redirect.kevin.eu/payment.html',
},
query: {
redirectPreferred: true
},
body: {
amount: '1.23',
currencyCode: 'EUR',
description: 'Lorem Ipsum',
bankPaymentMethod: {
creditorName: 'John Doe',
endToEndId: '123',
creditorAccount: {
iban: 'LT000000000000000000',
}
}
},
}
const payment = await client.payment.initiatePayment(options);
Initiate a card payment
❗️All card payments are required to contain bank payment data
const options = {
headers: {
'Redirect-URL': 'https://redirect.kevin.eu/payment.html',
},
query: {
redirectPreferred: true
},
body: {
amount: '1.23',
currencyCode: 'EUR',
description: 'Lorem Ipsum',
bankPaymentMethod: {
creditorName: 'John Doe',
endToEndId: '123',
creditorAccount: {
iban: 'LT000000000000000000',
}
},
cardPaymentMethod: {}
},
}
const payment = await client.payment.initiatePayment(options);
Returns information for given payment
const options = { paymentId: 'my-payment-id' };
const payment = await client.payment.getPayment(options);
Returns current status for given payment
const options = { paymentId: 'my-payment-id' };
const paymentStatus = await client.payment.getPaymentStatus(options);
Initiate payment refund
❗️You can initiate one or more partial refunds for one payment
const options = {
paymentId: 'my-payment-id',
amount: '1.23',
};
const refund = await client.payment.initiatePaymentRefund(options);
Returns all refunds for given payment
const paymentId = 'my-payment-id';
const response = await client.payment.getPaymentRefunds(paymentId);
const paymentRefunds = response.data;
Returns auth key which can be exchanged to token
const options = {
headers: {
'Request-Id': '123',
'Redirect-URL': 'https://redirect.kevin.eu/authorization.html'
},
query: {
scopes: ['payments', 'accounts_basic'],
},
};
const authenticationData = await client.auth.authenticate(options);
Exchange auth key to a bearer token and refresh token pair
const authKey = 'my-auth-key';
const tokenData = await client.auth.receiveToken(authKey);
Exchange refresh token to a new bearer token
const refreshToken = 'my-refresh-token';
const tokenData = await client.auth.refreshToken(refreshToken);
Receive information about a bearer token
const token = 'my-bearer-token';
const tokenContentData = await client.auth.receiveTokenContent(token);
Get user accounts information
const options = {
token: 'my-bearer-token',
headers: {
'PSU-IP-Address': 'my-ip-address',
'PSU-User-Agent': 'my-user-agent',
'PSU-IP-Port': 'my-port',
'PSU-Http-Method': 'GET',
'PSU-Device-ID': 'my-device-id',
},
};
const accountList = await client.account.getAccounts(options);
Receive user account information
const options = {
token: 'my-bearer-token',
accountId: 'my-account-id',
headers: {
'PSU-IP-Address': 'my-ip-address',
'PSU-User-Agent': 'my-user-agent',
'PSU-IP-Port': 'my-port',
'PSU-Http-Method': 'GET',
'PSU-Device-ID': 'my-device-id',
},
};
const accountData = await client.account.getAccount(options);
Get user account transaction history
const options = {
token: 'my-bearer-token',
accountId: 'my-account-id',
dateFrom: '1970-01-01',
dateTo: '1970-01-01',
headers: {
'PSU-IP-Address': 'my-ip-address',
'PSU-User-Agent': 'my-user-agent',
'PSU-IP-Port': 'my-port',
'PSU-Http-Method': 'GET',
'PSU-Device-ID': 'my-device-id',
},
};
const accountTransactions = await client.account.getAccountTransactions(options);
Get user account balance
const options = {
token: 'my-bearer-token',
accountId: 'my-account-id',
headers: {
'PSU-IP-Address': 'my-ip-address',
'PSU-User-Agent': 'my-user-agent',
'PSU-IP-Port': 'my-port',
'PSU-Http-Method': 'GET',
'PSU-Device-ID': 'my-device-id',
},
};
const response = await client.account.getAccountBalance(options);
const accountTransactions = response.data;
Make sure that received webhook is authentic
const endpointSecret = 'my-endpoint-secret';
const securityManager = new kevin.SecurityManager(endpointSecret);
// webhook request headers object
const headers = req.headers;
// webhook request body object
const body = req.body;
// URL to which webhook was requested
const webhookUrl = 'https://example.com/notify?orderId=123';
// Timestamp timeout in milliseconds
const timestampTimeout = '300000';
const isWebhookSignatureValid = securityManager.verifySignature(body, headers, webhookUrl, timestampTimeout);
FAQs
Node JS library implementing kevin. platform API.
The npm package @kevin.eu/kevin-platform-client receives a total of 282 weekly downloads. As such, @kevin.eu/kevin-platform-client popularity was classified as not popular.
We found that @kevin.eu/kevin-platform-client demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.