@yosle/tropipayjs 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +69 -9
- package/index.d.ts +358 -76
- package/index.js +421 -342
- package/index.js.map +1 -0
- package/package.json +10 -2
- package/.nvmrc +0 -1
- package/.vscode/launch.json +0 -18
- package/SECURITY.md +0 -43
- package/api/TropipayAPI.d.ts +0 -133
- package/config/TropipayConfig.d.ts +0 -2
- package/constants/TropipayConstants.d.ts +0 -2
- package/depositAccount/depositAccounts.d.ts +0 -36
- package/docs/readme.md +0 -3
- package/globals.d.ts +0 -75
- package/hooks/TropipayHooks.d.ts +0 -38
- package/interfaces/countries/index.d.ts +0 -1
- package/interfaces/depositaccounts/index.d.ts +0 -68
- package/interfaces/index.d.ts +0 -176
- package/interfaces/mediation/index.d.ts +0 -22
- package/interfaces/paymentlink/index.d.ts +0 -87
- package/jest.config.js +0 -5
- package/mediationPaymentCard/MediationPaymentCard.d.ts +0 -17
- package/paymentcard/PaymentCard.d.ts +0 -37
- package/paymentcard/paymentcard.spec.d.ts +0 -1
- package/rollup.config.js +0 -23
- package/src/api/TropipayAPI.ts +0 -459
- package/src/config/TropipayConfig.ts +0 -2
- package/src/constants/TropipayConstants.ts +0 -2
- package/src/depositAccount/depositAccounts.ts +0 -139
- package/src/hooks/TropipayHooks.ts +0 -154
- package/src/index.ts +0 -29
- package/src/interfaces/depositaccounts/index.ts +0 -70
- package/src/interfaces/index.js +0 -2
- package/src/interfaces/index.ts +0 -212
- package/src/interfaces/mediation/index.ts +0 -23
- package/src/interfaces/paymentlink/index.d.ts +0 -36
- package/src/interfaces/paymentlink/index.js +0 -3
- package/src/interfaces/paymentlink/index.ts +0 -91
- package/src/mediationPaymentCard/MediationPaymentCard.ts +0 -42
- package/src/mocks/tropipay.ts +0 -0
- package/src/paymentcard/PaymentCard.ts +0 -123
- package/src/paymentcard/paymentcard.spec.ts +0 -79
- package/src/utils/TropipayUtils.ts +0 -126
- package/src/utils/errors.ts +0 -92
- package/tsconfig.json +0 -96
- package/utils/TropipayUtils.d.ts +0 -45
- package/utils/errors.d.ts +0 -16
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["dist/constants/TropipayConstants.js","dist/utils/errors.js","dist/hooks/TropipayHooks.js","dist/paymentcard/PaymentCard.js","dist/depositAccount/depositAccounts.js","dist/accounts/Accounts.js","dist/transfers/Transfers.js","dist/api/TropipayAPI.js","dist/utils/TropipayUtils.js","dist/interfaces/index.js","dist/interfaces/depositaccounts/index.js","dist/config/TropipayConfig.js","dist/index.js"],"sourcesContent":["export const MAX_IMAGE_SIZE_MB = 2;\n/**\n * Base path for the Tropipay API. All SDK endpoints target API v3\n * (v2 is deprecated).\n */\nexport const API_BASE = \"/api/v3\";\n//# sourceMappingURL=TropipayConstants.js.map","import { AxiosError } from \"axios\";\nconst ErrorType = {\n VALIDATION_ERROR: \"VALIDATION_ERROR\", // 400\n UNAUTHORIZED_ERROR: \"UNAUTHORIZED_ERROR\", // 401 (Not valid credentials)\n FORBIDDEN_ERROR: \"FORBIDDEN_ERROR\", // 403 (Valid credentials but insufficient to grant access)\n NOT_FOUND: \"NOT_FOUND\", // 404\n RATE_LIMIT_ERROR: \"RATE_LIMIT_ERROR\", // 429 (Used only in cloudflare for now)\n OPERATION_ERROR: \"OPERATION_ERROR\", // 500\n};\nconst ErrorCode = {\n VALIDATION_ERROR: \"VALIDATION_ERROR\",\n UNAUTHORIZED_ERROR: \"UNAUTHORIZED_ERROR\",\n FORBIDDEN_ERROR: \"FORBIDDEN_ERROR\",\n NOT_FOUND: \"NOT_FOUND\",\n RATE_LIMIT_ERROR: \"RATE_LIMIT_ERROR\",\n OPERATION_ERROR: \"OPERATION_ERROR\",\n SYNTAX_ERROR: \"SYNTAX_ERROR\",\n INVALID_PARAM: \"INVALID_PARAM\",\n UNHANDLED_ERROR: \"SERVER_ERROR\",\n};\nexport function handleExceptions(error) {\n // already mapped (e.g. thrown by login() inside the request interceptor)\n if (error instanceof TropipayJSException)\n return error;\n if (error instanceof AxiosError) {\n if (error.response) {\n const axiosResponse = error.response;\n const errorMessage = axiosResponse.data?.error?.message || \"An error occurred\";\n switch (axiosResponse.status) {\n case 400:\n case 401:\n case 403:\n case 404:\n return new TropipayJSException(errorMessage, axiosResponse.status, axiosResponse.data.error);\n case 429:\n return new TropipayJSException(`${errorMessage} Too many request or rate limited`, axiosResponse.status, axiosResponse.data.error);\n default:\n return new TropipayJSException(errorMessage, axiosResponse.status, axiosResponse.data.error);\n }\n }\n else if (error.request) {\n // Axios request was made but no response received (e.g., network error)\n return new TropipayJSException(\"Request failed: No response received\", 500, null);\n }\n else {\n // Something else went wrong\n return new TropipayJSException(\"An error occurred\", 500, null);\n }\n }\n else {\n return new TropipayJSException(\"An Unknown error occurred\", 500, null);\n }\n}\nexport class TropipayJSException extends Error {\n code; // Status code\n error;\n message;\n constructor(message, code, data) {\n super(message);\n // Set the prototype explicitly.\n Object.setPrototypeOf(this, TropipayJSException.prototype);\n this.code = code;\n this.error = data;\n this.message = message;\n }\n}\n//# sourceMappingURL=errors.js.map","import { API_BASE } from \"../constants/TropipayConstants\";\nimport { handleExceptions } from \"../utils/errors\";\nexport default class TropipayHooks {\n tropipay;\n // ... hook-related functionality ...\n constructor(tropipayInstance) {\n this.tropipay = tropipayInstance;\n }\n /**\n * Subscribe a new hook\n * @param event String that represents the name of the event,\n * you must select from the list of available events, otherwise\n * it will not produce an error but it will not be executed.\n * For get full list of available events see endpoint\n * GET /api/v3/user/hooks/events.\n * @param target String representing the type of event supported.\n * It is currently available: 'web' (allows to receive information in a url),\n * 'email' (allows to receive information in an email address).\n * @param value if the selected 'target' is email the value would be an\n * email address, likewise if the selected 'target' is 'web' the expected\n * value corresponds to a url that receives information through the\n * HTTP POST method.\n * @returns\n */\n async subscribe({ eventType, target, value, }) {\n try {\n const hooks = await this.tropipay.request.post(`${API_BASE}/user/hooks`, {\n event: eventType,\n target: target,\n value: value,\n });\n return hooks.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Get the subscribed hook info by his event type.\n * If no event type is passed, it will return\n * all subscribed hooks or empty Array if none exist.\n * @param eventType or no params for retrieving all hooks\n * @returns All subscribed hooks or empty Array if none exist.\n */\n async list(eventType) {\n try {\n const hooks = await this.tropipay.request.get(`${API_BASE}/user/hooks/${eventType || \"\"}`);\n return hooks.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n async update(eventType, target, value) {\n try {\n const hooks = await this.tropipay.request.put(`${API_BASE}/user/hooks`, {\n event: eventType,\n target: target,\n value: value,\n });\n return hooks.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n async delete(eventType, target) {\n try {\n const hooks = await this.tropipay.request.delete(`${API_BASE}/user/hooks/${eventType}/${target}`);\n return hooks.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n async events() {\n try {\n const hooks = await this.tropipay.request.get(`${API_BASE}/user/hooks/events`);\n return hooks.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n}\n//# sourceMappingURL=TropipayHooks.js.map","import { API_BASE } from \"../constants/TropipayConstants\";\nimport { handleExceptions } from \"../utils/errors\";\nexport default class PaymentCard {\n tropipay;\n constructor(tropipayInstance) {\n this.tropipay = tropipayInstance;\n }\n /**\n * Create a paymentLink with the specified options.\n * Supports multi-account via the optional `accountId` field of the\n * payload (defaults to the user's default account).\n * @param payload PaymentLinkPayload Object.\n * @returns Promise<PaymentLink> or throws an Exception.\n * @see https://doc.tropipay.com/docs/api-reference/payment-cards\n */\n async create(payload) {\n try {\n const paylink = await this.tropipay.request.post(`${API_BASE}/paymentcards`, payload);\n return paylink.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Shows a list of stored paymentcards created by user.\n * This list includes active and closed paylinks\n * @returns Array of paymentlinks\n */\n async list() {\n try {\n const paymentcards = await this.tropipay.request.get(`${API_BASE}/paymentcards`);\n return paymentcards.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Retrieves a payment card with the specified ID.\n *\n * @param {string} id - The ID of the payment card to retrieve.\n * @return {Promise<any>} A Promise that resolves to the payment card data.\n * @throws {Error} If an error occurs while retrieving the payment card.\n */\n async get(id) {\n try {\n const paymentcard = await this.tropipay.request.get(`${API_BASE}/paymentcards/${id}`);\n return paymentcard.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Updates a payment card. Send the card id in `cardId` plus the\n * fields to modify.\n *\n * @param payload Object with `cardId` and the fields to update.\n * @return {Promise<any>} A Promise that resolves to the updated payment card data.\n * @throws {Error} If an error occurs while updating the payment card.\n */\n async update(payload) {\n try {\n const paymentcard = await this.tropipay.request.put(`${API_BASE}/paymentcards/`, payload);\n return paymentcard.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Deletes a payment card with the specified ID. Its a LOGIC delete\n * so this will delete the paymentcard from paymentcard list and\n * disable shortUrl but not paymentUrl\n * @param {string} id - The ID of the payment card to delete.\n * @return {Promise<any>} A Promise that resolves to the deleted payment card data.\n * @throws {Error} If an error occurs while deleting the payment card.\n */\n async delete(id) {\n try {\n const paymentcard = await this.tropipay.request.delete(`${API_BASE}/paymentcards/`, {\n data: {\n cardId: id,\n },\n });\n return paymentcard.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n}\n//# sourceMappingURL=PaymentCard.js.map","import { API_BASE } from \"../constants/TropipayConstants\";\nimport { handleExceptions } from \"../utils/errors\";\nexport default class DepositAccounts {\n tropipay;\n constructor(tropipayInstance) {\n this.tropipay = tropipayInstance;\n }\n /**\n * List od all beneficiaries of this account\n * @returns Array of DepositAccounts\n */\n async list() {\n try {\n const deposit = await this.tropipay.request.get(`${API_BASE}/deposit_accounts`);\n return deposit.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Adds a new beneficiary to the user account.\n * For crypto wallet beneficiaries use `beneficiaryType: 3`, put the\n * wallet address in `accountNumber` and set the `network`.\n * @param payload\n * @returns\n */\n async create(depositAccountObj) {\n try {\n const deposit = await this.tropipay.request.post(`${API_BASE}/deposit_accounts`, depositAccountObj);\n return deposit.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * This returns details of a specific\n * Deposit Account (beneficiary) specified by its ID\n * @param id\n * @returns\n */\n async get(id) {\n try {\n const deposit = await this.tropipay.request.get(`${API_BASE}/deposit_accounts/${id}`);\n return deposit.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Updates certain beneficiary data.\n * @param depositAccountObj Object with the beneficiary id and the fields to update.\n * @returns\n */\n async update(depositAccountObj) {\n try {\n const deposit = await this.tropipay.request.put(`${API_BASE}/deposit_accounts`, depositAccountObj);\n return deposit.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Deletes the beneficiary indicated by id\n * @param id\n * @returns\n */\n async delete(id) {\n try {\n const deposit = await this.tropipay.request.delete(`${API_BASE}/deposit_accounts/${id}`);\n return deposit.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Validates a beneficiary account number (bank account, card or\n * crypto wallet address) before creating it.\n * @param payload Account number data to validate (e.g. { accountNumber, paymentType, network, currency })\n * @returns\n */\n async validateAccountNumber(payload) {\n try {\n const validation = await this.tropipay.request.post(`${API_BASE}/deposit_accounts/validate_account_number`, payload);\n return validation.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n}\n//# sourceMappingURL=depositAccounts.js.map","import { API_BASE } from \"../constants/TropipayConstants\";\nimport { handleExceptions } from \"../utils/errors\";\n/**\n * Multi-account support. A Tropipay user can hold several accounts\n * (one per currency). Use `list()` to discover the `accountId` values\n * accepted by `paymentCards.create()` and `transfers.payout()`.\n */\nexport default class Accounts {\n tropipay;\n constructor(tropipayInstance) {\n this.tropipay = tropipayInstance;\n }\n /**\n * List all the accounts of the current user with their id,\n * accountNumber, currency, balance and enabled payment methods.\n * @param type Optional comma-separated account types filter.\n * @returns Array of Account objects.\n */\n async list(type) {\n try {\n const accounts = await this.tropipay.request.get(`${API_BASE}/accounts`, {\n params: type ? { type } : undefined,\n });\n // accept both a plain array and a paginated { count, rows } body\n const data = accounts.data;\n return Array.isArray(data) ? data : data?.rows ?? [];\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Get the balance of every account of the user.\n * @returns Balances for all accounts.\n */\n async allBalances() {\n try {\n const balances = await this.tropipay.request.get(`${API_BASE}/accounts/allBalance`);\n return balances.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Get the balance of one account by its account number\n * (note: accountNumber, not account id — get it from `list()`).\n * @param accountNumber The account number.\n */\n async balance(accountNumber) {\n try {\n const balance = await this.tropipay.request.get(`${API_BASE}/accounts/balance/${accountNumber}`);\n return balance.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * List the movements of one account.\n * @param accountId The account id (from `list()`).\n * @param options Pagination: limit (max 50, default 20) and offset.\n */\n async movements(accountId, options = {}) {\n try {\n const movements = await this.tropipay.request.get(`${API_BASE}/accounts/${accountId}/movements`, {\n params: { limit: options.limit ?? 20, offset: options.offset ?? 0 },\n });\n return movements.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n}\n//# sourceMappingURL=Accounts.js.map","import { API_BASE } from \"../constants/TropipayConstants\";\nimport { handleExceptions } from \"../utils/errors\";\n/**\n * Money transfers (payouts) to beneficiaries. Requires 2FA and the\n * ALLOW_EXTERNAL_TRANSFER permission on the Tropipay account.\n *\n * Typical flow:\n * 1. `simulate(payload)` to preview amounts and fees.\n * 2. `requestSecurityCode()` to receive the 2FA code (SMS/email).\n * 3. `payout({ ...payload, securityCode })` to execute the transfer.\n */\nexport default class Transfers {\n tropipay;\n constructor(tropipayInstance) {\n this.tropipay = tropipayInstance;\n }\n /**\n * Simulate a payout without executing it: returns the resulting\n * amounts, rates and fees for the given payload.\n * Note the payload shape differs from `payout()`: it uses\n * `currencyToPay`/`currencyToGet`, `amountToPay`/`amountToGet` and\n * requires `accountId`.\n * @param payload Simulation data (no securityCode needed).\n */\n async simulate(payload) {\n try {\n const simulation = await this.tropipay.request.post(`${API_BASE}/booking/payout/simulate`, payload);\n return simulation.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Execute a payout (external transfer) to a beneficiary.\n * Requires the 2FA `securityCode` in the payload (use\n * `requestSecurityCode()` first; in Development mode \"123456\" works).\n * Supports multi-account via the optional `accountId` field.\n * @param payload Payout data including securityCode.\n */\n async payout(payload) {\n try {\n const booking = await this.tropipay.request.post(`${API_BASE}/booking/payout`, payload);\n return booking.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Request the 2FA security code needed to confirm a payout.\n * The code is delivered by SMS or email depending on the user's\n * 2FA settings.\n */\n async requestSecurityCode() {\n try {\n const response = await this.tropipay.request.post(`${API_BASE}/booking/sendSecurityCode`, {});\n return response.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n}\n//# sourceMappingURL=Transfers.js.map","/**\n * Tropipayjs is a Typescript/Javascript library for the Tropipay API.\n *\n * @author Yosleivy Baez Acosta\n *\n */\nimport axios from \"axios\";\nimport { API_BASE } from \"../constants/TropipayConstants\";\nimport TropipayHooks from \"../hooks/TropipayHooks\";\nimport PaymentCard from \"../paymentcard/PaymentCard\";\nimport DepositAccounts from \"../depositAccount/depositAccounts\";\nimport Accounts from \"../accounts/Accounts\";\nimport Transfers from \"../transfers/Transfers\";\nimport { TropipayJSException, handleExceptions } from \"../utils/errors\";\nconst TOKEN_URL = `${API_BASE}/access/token`;\nexport class Tropipay {\n clientId;\n clientSecret;\n scopes;\n request;\n // Per instance, so several credentials (or environments) never share a token\n accessToken = null;\n refreshToken = null;\n expiresIn = null;\n serverMode;\n hooks;\n paymentCards;\n depositAccounts;\n accounts;\n transfers;\n /**\n * Initializes a new instance of the Tropipay class.\n *\n * @param {TropipayConfig} config - The configuration object.\n */\n constructor(config) {\n // use all scopes if none is passed\n if (!config?.scopes) {\n this.scopes = [\n \"ALLOW_GET_PROFILE_DATA\",\n \"ALLOW_PAYMENT_IN\",\n \"ALLOW_EXTERNAL_CHARGE\",\n \"KYC3_FULL_ALLOW\",\n \"ALLOW_PAYMENT_OUT\",\n \"ALLOW_MARKET_PURCHASES\",\n \"ALLOW_GET_BALANCE\",\n \"ALLOW_GET_MOVEMENT_LIST\",\n \"ALLOW_GET_CREDENTIAL\",\n \"ALLOW_REFUND\",\n ];\n }\n else {\n this.scopes = config.scopes;\n }\n if (!config.clientId || !config.clientSecret) {\n throw new TropipayJSException(`You must pass clientId and clientSecret in Tropipay constructor`, 400, null);\n }\n this.clientId = config.clientId;\n this.clientSecret = config.clientSecret;\n this.serverMode = config.serverMode || \"Development\";\n const tpp_env = this.serverMode === \"Production\"\n ? \"https://www.tropipay.com\"\n : \"https://sandbox.tropipay.me\";\n this.request = axios.create({\n baseURL: config.customTropipayUrl || tpp_env,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n });\n // Log in (or refresh an expired token) and attach the current token to\n // every request. The token endpoint itself is skipped, otherwise login()\n // would re-enter this interceptor forever.\n this.request.interceptors.request.use(async (config) => {\n if (config.url === TOKEN_URL)\n return config;\n const currentTimestamp = Math.floor(Date.now() / 1000); // Current time in seconds\n const expired = this.expiresIn !== null && this.expiresIn < currentTimestamp;\n if (!this.accessToken || expired) {\n await this.login();\n }\n config.headers.Authorization = `Bearer ${this.accessToken}`;\n return config;\n }, (error) => {\n return Promise.reject(error);\n });\n this.hooks = new TropipayHooks(this);\n this.paymentCards = new PaymentCard(this);\n this.depositAccounts = new DepositAccounts(this);\n this.accounts = new Accounts(this);\n this.transfers = new Transfers(this);\n }\n async login() {\n try {\n if (this.refreshToken) {\n const { data } = await this.request.post(TOKEN_URL, {\n client_id: this.clientId,\n client_secret: this.clientSecret,\n grant_type: \"refresh_token\",\n refresh_token: this.refreshToken,\n });\n this.accessToken = data.access_token;\n this.refreshToken = data.refresh_token;\n this.expiresIn = data.expires_in;\n return data;\n }\n // normal credetials login\n const { data } = await this.request.post(TOKEN_URL, {\n client_id: this.clientId,\n client_secret: this.clientSecret,\n grant_type: \"client_credentials\",\n scope: this.scopes.join(\" \"), // \"ALLOW_GET_PROFILE_DATA ALLOW_PAYMENT_IN ALLOW_EXTERNAL_CHARGE KYC3_FULL_ALLOW ALLOW_PAYMENT_OUT ALLOW_MARKET_PURCHASES ALLOW_GET_BALANCE ALLOW_GET_MOVEMENT_LIST ALLOW_GET_CREDENTIAL\",\n });\n this.accessToken = data.access_token;\n this.refreshToken = data.refresh_token;\n this.expiresIn = data.expires_in;\n return data;\n }\n catch (error) {\n this.accessToken = null;\n this.refreshToken = null;\n this.expiresIn = null;\n throw handleExceptions(error);\n }\n }\n /**\n * Get the list of all supported countries by Tropipay.\n * @returns Array of Countries Data\n * @see https://doc.tropipay.com/docs/api-reference/countries\n */\n async countries() {\n try {\n const countries = await this.request.get(`${API_BASE}/countries`);\n return countries.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Get balance of the user's default account.\n * For per-account balances use `accounts.balance()` or\n * `accounts.allBalances()`.\n * @returns balance Object { balance: number, pendingIn: number, pendingOut: number }\n */\n async getBalance() {\n try {\n const balance = await this.request.get(`${API_BASE}/users/balance`);\n return balance.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Get the list of all detination countries supported by Tropipay.\n * Obtaining the list of valid countries to send funds to. Useful\n * when adding new beneficiaries to some user.\n *\n * @returns Array of Country Objects\n * @see https://doc.tropipay.com/docs/api-reference/countries\n */\n async destinations() {\n try {\n const countries = await this.request.get(`${API_BASE}/countries/destinations`);\n return countries.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Get list of all the favorites payment links.\n * @returns Array of account Object or throws an error\n */\n async favorites() {\n try {\n const favoritesList = await this.request.get(`${API_BASE}/paymentcards/filters`, {\n params: { favorite: true },\n });\n return favoritesList?.data?.rows;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * List all account movements. You can optionaly specify\n * offset and limit params for pagination (limit is capped\n * to 50 by the API).\n * For the movements of one specific account use\n * `accounts.movements(accountId)`.\n * @returns\n */\n async movements(offset = 0, limit = 10) {\n try {\n const movements = await this.request.get(`${API_BASE}/movements`, {\n params: { limit: limit, offset: offset },\n });\n return movements.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Return profile data for current Tropipay account.\n * @returns account object\n */\n async profile() {\n try {\n const profile = await this.request.get(`${API_BASE}/users/profile`);\n return profile.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Obtain current Tropipay conversion rate. For example USD to EUR\n * targetCurrency must be 'EUR'\n * @param originCurrency Target currency code supported by Tropipay.\n * @param targetCurrency Must be 'EUR'? (not documented by Tropipay)\n * @returns Conversion rate (number)\n * @see https://doc.tropipay.com/docs/api-reference/movements\n */\n async rates(originCurrency, targetCurrency = \"EUR\") {\n try {\n const rates = await this.request.post(`${API_BASE}/movements/get_rate`, {\n currencyFrom: originCurrency,\n currencyTo: targetCurrency,\n });\n // the v3 API returns the rate as a numeric string\n return Number(rates.data.rate);\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Refund a completed transaction.\n * Requires 2FA enabled and ALLOW_REFUND permission on the Tropipay account.\n *\n * In Development mode, `securityCode` defaults to `\"123456\"` when omitted.\n * In Production mode, you must first call `requestSecurityCode()` to receive\n * the 2FA code via SMS, then pass it as the `securityCode` parameter.\n *\n * @see https://doc.tropipay.com/docs/api-reference/movements#refund-a-transaction\n * @param orderCode Code of the order/transaction to refund (e.g. \"ORD-123456\")\n * @param amount Amount to refund in cents (e.g. 5000 = 50.00 USD/EUR)\n * @param securityCode 2FA confirmation code. Use \"123456\" in Development or\n * the code received via SMS in Production (obtained via requestSecurityCode()).\n */\n async refundMovement(orderCode, amount, securityCode) {\n if (!this.scopes.includes(\"ALLOW_REFUND\")) {\n throw new TropipayJSException(\"The credential does not have the ALLOW_REFUND scope required to perform refunds. If you believe your account should have this permission, please contact Tropipay support.\", 403, null);\n }\n try {\n const response = await this.request.post(`${API_BASE}/movements/in/refund`, { orderCode, amount, securityCode });\n return response.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n /**\n * Request a 2FA security code to be sent via SMS for confirming sensitive\n * operations like refunds.\n *\n * In Production mode, you must call this method first to trigger an SMS with\n * the code, then use the received code when calling `refundMovement()`.\n * In Development mode this is not required as the default code \"123456\"\n * is used automatically.\n *\n * @see https://doc.tropipay.com/docs/api-reference/movements#refund-a-transaction\n * @returns The API response confirming the code was sent\n */\n async requestSecurityCode(type = \"sms\") {\n try {\n const response = await this.request.post(`${API_BASE}/users/sendSecurityCode`, { type });\n return response.data;\n }\n catch (error) {\n throw handleExceptions(error);\n }\n }\n}\nexport const Scopes = {\n ALLOW_PAYMENT_IN: \"ALLOW_PAYMENT_IN\",\n ALLOW_EXTERNAL_CHARGE: \"ALLOW_EXTERNAL_CHARGE\",\n KYC3_FULL_ALLOW: \"KYC3_FULL_ALLOW\",\n ALLOW_PAYMENT_OUT: \"ALLOW_PAYMENT_OUT\",\n ALLOW_MARKET_PURCHASES: \"ALLOW_MARKET_PURCHASES\",\n ALLOW_GET_BALANCE: \"ALLOW_GET_BALANCE\",\n ALLOW_GET_MOVEMENT_LIST: \"ALLOW_GET_MOVEMENT_LIST\",\n ALLOW_GET_CREDENTIAL: \"ALLOW_GET_CREDENTIAL\",\n ALLOW_REFUND: \"ALLOW_REFUND\",\n};\n//# sourceMappingURL=TropipayAPI.js.map","import * as crypto from \"crypto\";\nimport axios from \"axios\";\nimport fs from \"fs/promises\";\nimport { MAX_IMAGE_SIZE_MB } from \"../constants/TropipayConstants\";\nexport class ServerSideUtils {\n tropipay;\n constructor(tropipayInstance) {\n this.tropipay = tropipayInstance;\n }\n /**\n * Verify Topipay's signature on webhooks.\n * @param credentials Credential object or Tropipay instance\n * @param {String} originalCurrencyAmount\n * @param bankOrderCode\n * @param signature\n * @returns {Boolean}\n */\n static verifySignature(credentials, originalCurrencyAmount, bankOrderCode, signature) {\n const localSignature = crypto\n .createHash(\"sha256\")\n .update(bankOrderCode +\n credentials.clientId +\n credentials.clientSecret +\n originalCurrencyAmount)\n .digest(\"hex\");\n return localSignature === signature;\n }\n /**\n * Checks if the provided base64 string represents a square image.\n * Supports PNG and JPEG images (dimensions are read directly from\n * the binary header, no DOM required).\n *\n * @param {string} base64String - The base64 string of the image\n * @return {Promise<boolean>} A Promise that resolves to a boolean indicating whether the image is square\n */\n static async isBase64ImageSquare(base64String) {\n const dimensions = ServerSideUtils.getImageDimensions(base64String);\n return dimensions.width === dimensions.height;\n }\n /**\n * Reads the width/height of a base64 encoded PNG or JPEG image\n * from its binary header.\n *\n * @param {string} base64String - base64 image, with or without the data: prefix\n * @return {{width: number, height: number}} the image dimensions\n */\n static getImageDimensions(base64String) {\n const base64Data = base64String.replace(/^data:image\\/\\w+;base64,/, \"\");\n const buffer = Buffer.from(base64Data, \"base64\");\n // PNG signature: 89 50 4E 47, IHDR width/height at offsets 16/20\n if (buffer.length > 24 &&\n buffer[0] === 0x89 &&\n buffer[1] === 0x50 &&\n buffer[2] === 0x4e &&\n buffer[3] === 0x47) {\n return {\n width: buffer.readUInt32BE(16),\n height: buffer.readUInt32BE(20),\n };\n }\n // JPEG signature: FF D8. Scan segments for a SOFn marker with the frame size.\n if (buffer.length > 4 && buffer[0] === 0xff && buffer[1] === 0xd8) {\n let offset = 2;\n while (offset + 9 < buffer.length) {\n if (buffer[offset] !== 0xff) {\n offset++;\n continue;\n }\n const marker = buffer[offset + 1];\n // 0xFF fill bytes may pad the stream before a marker\n if (marker === 0xff) {\n offset++;\n continue;\n }\n // standalone markers (TEM, RST0-RST7) carry no length field\n if (marker === 0x01 || (marker >= 0xd0 && marker <= 0xd7)) {\n offset += 2;\n continue;\n }\n // SOF0-SOF15 markers except DHT (C4), JPG (C8) and DAC (CC)\n if (marker >= 0xc0 &&\n marker <= 0xcf &&\n marker !== 0xc4 &&\n marker !== 0xc8 &&\n marker !== 0xcc) {\n return {\n height: buffer.readUInt16BE(offset + 5),\n width: buffer.readUInt16BE(offset + 7),\n };\n }\n offset += 2 + buffer.readUInt16BE(offset + 2);\n }\n }\n throw new Error(\"Unsupported image format: only PNG and JPEG are allowed\");\n }\n /**\n * Takes a local file path and returns a base64 representation of the file content.\n *\n * @param {string} filepath - the path of the file to be converted to base64\n * @return {Promise<string>} a Promise that resolves to the base64 representation of the file content\n */\n static async fileToBase64(filepath) {\n const contents = await fs.readFile(filepath);\n let base64content = contents.toString(\"base64\");\n const ext = filepath.split(\".\").pop();\n return `data:image/${ext};base64,` + base64content;\n }\n /**\n * Get the base64 representation of a remote file from the given URL.\n *\n * @param {string} url - the URL of the file\n * @return {Promise<string>} the base64 representation of the file\n */\n static async getBase64FromFileUrl(url) {\n const response = await axios.get(url, {\n responseType: \"arraybuffer\",\n maxRedirects: 5,\n });\n return Buffer.from(response.data, \"binary\").toString(\"base64\");\n }\n /**\n * Check if the base64 string represents a valid image and has a valid size\n *\n * @param {string} base64Image - the base64 image to be validated\n * @return {Promise<string>} the valid base64 image\n */\n static isValidImage(base64Image) {\n // Check if the base64 string represents a valid image and has a valid size\n try {\n const isBase64Image = base64Image.startsWith(\"data:image/\");\n if (!isBase64Image) {\n console.error(\"Not a valid base64 image\");\n throw new Error(\"Not a valid base64 image\");\n }\n const isSizeValid = base64Image.length * 0.75 <= MAX_IMAGE_SIZE_MB * 1024 * 1024;\n if (!isSizeValid) {\n console.error(`The image should be less than ${MAX_IMAGE_SIZE_MB}mb`);\n throw new Error(`The image should be less than ${MAX_IMAGE_SIZE_MB}mb`);\n }\n // all is fine\n return true;\n }\n catch (error) {\n console.error(\"Error checking base64 image:\", error);\n throw new Error(`Error checking base64 image`);\n }\n }\n}\n//# sourceMappingURL=TropipayUtils.js.map","/**\n * Payment reasons accepted in the `reasonId` field.\n */\nexport var Reasons;\n(function (Reasons) {\n Reasons[Reasons[\"HOUSING_ARRANGEMENT\"] = 1] = \"HOUSING_ARRANGEMENT\";\n Reasons[Reasons[\"FINANCIAL_AID\"] = 2] = \"FINANCIAL_AID\";\n Reasons[Reasons[\"FAMILY_SUPPORT\"] = 3] = \"FAMILY_SUPPORT\";\n Reasons[Reasons[\"TRAVEL_FUND\"] = 4] = \"TRAVEL_FUND\";\n Reasons[Reasons[\"REAL_ESTATE_PURCHASE\"] = 5] = \"REAL_ESTATE_PURCHASE\";\n Reasons[Reasons[\"FURNITURE_PURCHASE\"] = 6] = \"FURNITURE_PURCHASE\";\n Reasons[Reasons[\"EDUCATION\"] = 7] = \"EDUCATION\";\n Reasons[Reasons[\"MEDICAL_EXPENSES\"] = 8] = \"MEDICAL_EXPENSES\";\n Reasons[Reasons[\"OTHER\"] = 9] = \"OTHER\";\n Reasons[Reasons[\"DEBT_PAYMENT\"] = 10] = \"DEBT_PAYMENT\";\n Reasons[Reasons[\"TOURISM\"] = 11] = \"TOURISM\";\n Reasons[Reasons[\"SELF_SHIPPING\"] = 12] = \"SELF_SHIPPING\";\n Reasons[Reasons[\"ACCOUNT_ACTIVATION\"] = 13] = \"ACCOUNT_ACTIVATION\";\n Reasons[Reasons[\"SPORTS_ACTIVITIES\"] = 14] = \"SPORTS_ACTIVITIES\";\n Reasons[Reasons[\"DONATION\"] = 15] = \"DONATION\";\n Reasons[Reasons[\"AFFILIATE_COMMISSION\"] = 16] = \"AFFILIATE_COMMISSION\";\n Reasons[Reasons[\"SALARY\"] = 17] = \"SALARY\";\n Reasons[Reasons[\"SAVINGS\"] = 18] = \"SAVINGS\";\n Reasons[Reasons[\"RENT_AND_LEASING\"] = 19] = \"RENT_AND_LEASING\";\n Reasons[Reasons[\"SHARED_EXPENSES\"] = 20] = \"SHARED_EXPENSES\";\n Reasons[Reasons[\"SERVICE_PAYMENT\"] = 21] = \"SERVICE_PAYMENT\";\n Reasons[Reasons[\"GIFT\"] = 22] = \"GIFT\";\n Reasons[Reasons[\"CRYPTOCURRENCY_PURCHASE\"] = 23] = \"CRYPTOCURRENCY_PURCHASE\";\n Reasons[Reasons[\"OPERATING_EXPENSES\"] = 24] = \"OPERATING_EXPENSES\";\n Reasons[Reasons[\"CURRENCY_EXCHANGE\"] = 25] = \"CURRENCY_EXCHANGE\";\n Reasons[Reasons[\"ACCOMMODATION\"] = 26] = \"ACCOMMODATION\";\n Reasons[Reasons[\"EQUIPMENT_PURCHASE\"] = 27] = \"EQUIPMENT_PURCHASE\";\n Reasons[Reasons[\"CONSULTING\"] = 28] = \"CONSULTING\";\n Reasons[Reasons[\"SOFTWARE_DEVELOPMENT\"] = 29] = \"SOFTWARE_DEVELOPMENT\";\n Reasons[Reasons[\"REFUND\"] = 30] = \"REFUND\";\n Reasons[Reasons[\"PACKAGE_DELIVERY\"] = 31] = \"PACKAGE_DELIVERY\";\n Reasons[Reasons[\"PERSONAL_EXPENSES\"] = 32] = \"PERSONAL_EXPENSES\";\n Reasons[Reasons[\"INVESTMENT\"] = 33] = \"INVESTMENT\";\n Reasons[Reasons[\"BILL_PAYMENT\"] = 34] = \"BILL_PAYMENT\";\n Reasons[Reasons[\"HOST_PAYMENT\"] = 35] = \"HOST_PAYMENT\";\n Reasons[Reasons[\"TRANSPORTATION\"] = 36] = \"TRANSPORTATION\";\n Reasons[Reasons[\"LOAN\"] = 37] = \"LOAN\";\n Reasons[Reasons[\"BONUS\"] = 38] = \"BONUS\";\n Reasons[Reasons[\"HALLOWEEN_REMITTANCE\"] = 39] = \"HALLOWEEN_REMITTANCE\";\n Reasons[Reasons[\"PLINK_REMITTANCE\"] = 41] = \"PLINK_REMITTANCE\";\n Reasons[Reasons[\"R1_2023\"] = 78] = \"R1_2023\";\n Reasons[Reasons[\"HAPPYWEEK\"] = 79] = \"HAPPYWEEK\";\n Reasons[Reasons[\"SENDING_YOU_A_KISS\"] = 80] = \"SENDING_YOU_A_KISS\";\n})(Reasons || (Reasons = {}));\n//# sourceMappingURL=index.js.map","export const DepositAccountTypesList = {\n /**\n * Banco Metropolitano (Cuba) Bank Account\n */\n BANMET_BANK_ACCOUNT: 0,\n /**\n * Banco Popular de Ahorro\n */\n BPA_BANK_ACCOUNT: 1,\n /**\n * Banco de Credito y Comercio (Cuba) Bank Account\n */\n BANDEC_BANK_ACCOUNT: 2,\n /**\n * Banco Metropilitano (Cuba) card\n */\n BANMET_CARD: 3,\n /**\n * Banco Popular de Ahorro (Cuba) card\n */\n BPA_CARD: 4,\n /**\n * Not available anymore\n * @deprecated\n */\n AIS_CUC_CARD: 5,\n /**\n * Not available\n * @deprecated\n */\n AIS_USD_CARD: 6,\n /**\n * For international bank accounts\n */\n OTHER: 7,\n /**\n * Banco de Credito y comercio card\n */\n BANDEC_CARD: 8,\n};\n//# sourceMappingURL=index.js.map","export const SERVER_MODE = \"Development\"; // Move the constant here\n//# sourceMappingURL=TropipayConfig.js.map","/**\n * TropipayJS is a powerful TypeScript/JavaScript library designed to provide seamless interaction\n * with the Tropipay API. It simplifies the process of integrating Tropipay's functionality into\n * your applications.\n *\n * Developed by Yosleivy Baez Acosta\n * GitHub: https://github.com/yosle/tropipayjs\n *\n * @license MIT\n */\nif (typeof window !== \"undefined\") {\n const err_msg = `⚠️ **Warning:** The Tropipay SDK should only be instantiated server-side for security reasons. Using it client-side may lead to unexpected behavior and security vulnerabilities. YOUR CREDENTIALS COULD BE EXPOSED. Check https://yosle.github.io/tropipayjs-docs/guides/installation/ for more details.`;\n console.error(err_msg);\n throw new Error(err_msg);\n}\nexport { Tropipay } from \"./api/TropipayAPI\";\nexport { ServerSideUtils } from \"./utils/TropipayUtils\";\nexport { default as TropipayHooks } from \"./hooks/TropipayHooks\";\nexport { default as PaymentCard } from \"./paymentcard/PaymentCard\";\nexport { default as DepositAccounts } from \"./depositAccount/depositAccounts\";\nexport { default as Accounts } from \"./accounts/Accounts\";\nexport { default as Transfers } from \"./transfers/Transfers\";\nexport * from \"./interfaces/index\";\nexport * from \"./interfaces/depositaccounts/index\";\nexport { SERVER_MODE } from \"./config/TropipayConfig\";\nexport * from \"./constants/TropipayConstants\";\n//# sourceMappingURL=index.js.map"],"names":["AxiosError","crypto","Reasons"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yosle/tropipayjs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Javascript / Typescript SDK for the Tropipay API",
|
|
5
5
|
"main": "index.js",
|
|
6
|
+
"types": "index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"index.js",
|
|
9
|
+
"index.js.map",
|
|
10
|
+
"index.d.ts"
|
|
11
|
+
],
|
|
6
12
|
"scripts": {
|
|
7
13
|
"test": "jest --passWithNoTests --updateSnapshot --coverage",
|
|
8
|
-
"
|
|
14
|
+
"smoke": "npm run build && node scripts/smoke-test.js",
|
|
15
|
+
"prepublishOnly": "npm run build",
|
|
16
|
+
"_clear": "rimraf dist",
|
|
9
17
|
"_tsc": "tsc",
|
|
10
18
|
"_make-bundle": "rollup --config",
|
|
11
19
|
"build": "npm run _clear && npm run _tsc && npm run _make-bundle"
|
package/.nvmrc
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
v20.10.0
|
package/.vscode/launch.json
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
// Use IntelliSense to learn about possible attributes.
|
|
3
|
-
// Hover to view descriptions of existing attributes.
|
|
4
|
-
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
5
|
-
"version": "0.2.0",
|
|
6
|
-
"configurations": [
|
|
7
|
-
{
|
|
8
|
-
"type": "node",
|
|
9
|
-
"name": "vscode-jest-tests",
|
|
10
|
-
"request": "launch",
|
|
11
|
-
"program": "${workspaceFolder}/node_modules/jest/bin/jest",
|
|
12
|
-
"args": ["paymentcard.spec.ts"],
|
|
13
|
-
"cwd": "${workspaceFolder}",
|
|
14
|
-
"console": "integratedTerminal",
|
|
15
|
-
"runtimeExecutable": "/home/yosle/.nvm/versions/node/v20.10.0/bin/node"
|
|
16
|
-
}
|
|
17
|
-
]
|
|
18
|
-
}
|
package/SECURITY.md
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# Supply Chain Security Plan
|
|
2
|
-
|
|
3
|
-
## 1. Lockfile Integrity
|
|
4
|
-
- Always commit `package-lock.json` — it pins exact sub-dependency versions
|
|
5
|
-
- Verify integrity: `npm audit signatures` after install (requires npm 9+)
|
|
6
|
-
|
|
7
|
-
## 2. Automated Scanning
|
|
8
|
-
```yaml
|
|
9
|
-
# CI steps
|
|
10
|
-
- run: npm audit --audit-level=high # fail on high/critical known CVEs
|
|
11
|
-
- run: npx socket-cli scan # detect protestware, typo-squatting, obfuscation
|
|
12
|
-
```
|
|
13
|
-
- [Socket.dev](https://socket.dev) — free tier detects behavioral risks (not just CVEs)
|
|
14
|
-
- [Snyk](https://snyk.io) — broader CVE coverage, integrates with GitHub
|
|
15
|
-
|
|
16
|
-
## 3. Dependency Updates
|
|
17
|
-
- Enable **Dependabot** or **Renovate** — auto-create PRs for security patches
|
|
18
|
-
- Review every new dependency before adding: check downloads, maintenance, publisher
|
|
19
|
-
|
|
20
|
-
## 4. Overrides for Transitive Dependencies
|
|
21
|
-
```json
|
|
22
|
-
{
|
|
23
|
-
"overrides": {
|
|
24
|
-
"axios": "1.18.1",
|
|
25
|
-
"semver": "^7.6.0"
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
```
|
|
29
|
-
Use `overrides` to force-patch transitive deps when upstream is slow to release.
|
|
30
|
-
|
|
31
|
-
## 5. Minimal Surface Area
|
|
32
|
-
- Fewer dependencies = fewer attack vectors
|
|
33
|
-
- Regularly audit with `npm ls --depth=0` and remove unused packages
|
|
34
|
-
|
|
35
|
-
## 6. SBOM Generation
|
|
36
|
-
```bash
|
|
37
|
-
npm sbom --sbom-format cyclonedx > sbom.json
|
|
38
|
-
```
|
|
39
|
-
Generate a Software Bill of Materials for compliance and tracking.
|
|
40
|
-
|
|
41
|
-
## 7. Package Provenance
|
|
42
|
-
- Prefer packages with [provenance attestations](https://docs.npmjs.com/generating-provenance-statements) (npm publish --provenance)
|
|
43
|
-
- Check publisher reputation and maintainer count before adding
|
package/api/TropipayAPI.d.ts
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tropipayjs is a Typescript/Javascript library for the Tropipay API.
|
|
3
|
-
*
|
|
4
|
-
* @author Yosleivy Baez Acosta
|
|
5
|
-
*
|
|
6
|
-
*/
|
|
7
|
-
import { Axios } from "axios";
|
|
8
|
-
import { TropipayConfig, AccountBalance, Country, PaymentLink, MediationPaymentCardConfig, LoginResponse, RefundResponse } from "../interfaces";
|
|
9
|
-
type ServerMode = "Development" | "Production";
|
|
10
|
-
import TropipayHooks from "../hooks/TropipayHooks";
|
|
11
|
-
import PaymentCard from "../paymentcard/PaymentCard";
|
|
12
|
-
import MediationPaymentCard from "../mediationPaymentCard/MediationPaymentCard";
|
|
13
|
-
import DepositAccounts from "../depositAccount/depositAccounts";
|
|
14
|
-
export declare class Tropipay {
|
|
15
|
-
readonly clientId: string;
|
|
16
|
-
readonly clientSecret: string;
|
|
17
|
-
readonly scopes: String[];
|
|
18
|
-
request: Axios;
|
|
19
|
-
static accessToken: string | null;
|
|
20
|
-
static refreshToken: string | null;
|
|
21
|
-
static expiresIn: number | null;
|
|
22
|
-
serverMode: ServerMode;
|
|
23
|
-
hooks: TropipayHooks;
|
|
24
|
-
paymentCards: PaymentCard;
|
|
25
|
-
depositAccounts: DepositAccounts;
|
|
26
|
-
mediationPaymentCard: MediationPaymentCard;
|
|
27
|
-
/**
|
|
28
|
-
* Initializes a new instance of the Tropipay class.
|
|
29
|
-
*
|
|
30
|
-
* @param {TropipayConfig} config - The configuration object.
|
|
31
|
-
*/
|
|
32
|
-
constructor(config: TropipayConfig);
|
|
33
|
-
login(): Promise<LoginResponse>;
|
|
34
|
-
/**
|
|
35
|
-
* Get the list of all supported countries by Tropipay.
|
|
36
|
-
* @returns Array of Countries Data
|
|
37
|
-
* @see https://tpp.stoplight.io/docs/tropipay-api-doc/bfac21259e2ff-getting-users-countries-list
|
|
38
|
-
*/
|
|
39
|
-
countries(): Promise<Country[]>;
|
|
40
|
-
/**
|
|
41
|
-
* Get user balance
|
|
42
|
-
* @returns balance Object { balance: number, pendingIn: number, pendingOut: number }
|
|
43
|
-
*/
|
|
44
|
-
getBalance(): Promise<AccountBalance>;
|
|
45
|
-
/**
|
|
46
|
-
* Get the list of all detination countries supported by Tropipay.
|
|
47
|
-
* Obtaining the list of valid countries to send funds to. Useful
|
|
48
|
-
* when adding new beneficiaries to some user.
|
|
49
|
-
*
|
|
50
|
-
* @returns Array of Country Objects
|
|
51
|
-
* @see https://tpp.stoplight.io/docs/tropipay-api-doc/3cfe5504f0524-getting-list-of-beneficiary-countries
|
|
52
|
-
*/
|
|
53
|
-
destinations(): Promise<Country[]>;
|
|
54
|
-
/**
|
|
55
|
-
* Get list of all the favorites payment links.
|
|
56
|
-
* @returns Array of account Object or throws an error
|
|
57
|
-
*/
|
|
58
|
-
favorites(): Promise<any>;
|
|
59
|
-
/**
|
|
60
|
-
* List all account movements. You can optionaly specify
|
|
61
|
-
* offset and limit params for pagination.
|
|
62
|
-
* @returns
|
|
63
|
-
*/
|
|
64
|
-
movements(offset?: number, limit?: number): Promise<any>;
|
|
65
|
-
/**
|
|
66
|
-
* Return profile data for current Tropipay account.
|
|
67
|
-
* @returns account object
|
|
68
|
-
*/
|
|
69
|
-
profile(): Promise<any>;
|
|
70
|
-
/**
|
|
71
|
-
* Obtain current Tropipay conversion rate. For example USD to EUR
|
|
72
|
-
* targetCurrency must be 'EUR'
|
|
73
|
-
* @param originCurrency Target currency code supported by Tropipay.
|
|
74
|
-
* @param targetCurrency Must be 'EUR'? (not documented by Tropipay)
|
|
75
|
-
* @returns Conversion rate (number)
|
|
76
|
-
* @see https://tpp.stoplight.io/docs/tropipay-api-doc/85163f6f28b23-get-rate
|
|
77
|
-
*/
|
|
78
|
-
rates(originCurrency: string, targetCurrency?: string): Promise<number | Error>;
|
|
79
|
-
/**
|
|
80
|
-
* (ONLY in Bussiness Accounts)
|
|
81
|
-
* An escrow payment link. This allows a payment to be made to persons
|
|
82
|
-
* belonging or not to the TropiPay platform with the particularity
|
|
83
|
-
* that the payment will be held in custody or retained until it is
|
|
84
|
-
* released with the approval of the payer.
|
|
85
|
-
* @deprecated This method is no longer supported and may be removed in a future release.
|
|
86
|
-
* @see https://tpp.stoplight.io/docs/tropipay-api-doc/12a128ff971e4-creating-a-mediation-payment-card
|
|
87
|
-
* @param config Payload with the payment details
|
|
88
|
-
*/
|
|
89
|
-
createMediationPaymentCard(config: MediationPaymentCardConfig): Promise<PaymentLink>;
|
|
90
|
-
/**
|
|
91
|
-
* Refund a completed transaction.
|
|
92
|
-
* Requires 2FA enabled and ALLOW_REFUND permission on the Tropipay account.
|
|
93
|
-
*
|
|
94
|
-
* In Development mode, `securityCode` defaults to `"123456"` when omitted.
|
|
95
|
-
* In Production mode, you must first call `requestSecurityCode()` to receive
|
|
96
|
-
* the 2FA code via SMS, then pass it as the `securityCode` parameter.
|
|
97
|
-
*
|
|
98
|
-
* @see https://doc.tropipay.com/docs/api-reference/movements#refund-a-transaction
|
|
99
|
-
* @param orderCode Code of the order/transaction to refund (e.g. "ORD-123456")
|
|
100
|
-
* @param amount Amount to refund in cents (e.g. 5000 = 50.00 USD/EUR)
|
|
101
|
-
* @param securityCode 2FA confirmation code. Use "123456" in Development or
|
|
102
|
-
* the code received via SMS in Production (obtained via requestSecurityCode()).
|
|
103
|
-
*/
|
|
104
|
-
refundMovement(orderCode: string, amount: number, securityCode: string): Promise<RefundResponse>;
|
|
105
|
-
/**
|
|
106
|
-
* Request a 2FA security code to be sent via SMS for confirming sensitive
|
|
107
|
-
* operations like refunds.
|
|
108
|
-
*
|
|
109
|
-
* In Production mode, you must call this method first to trigger an SMS with
|
|
110
|
-
* the code, then use the received code when calling `refundMovement()`.
|
|
111
|
-
* In Development mode this is not required as the default code "123456"
|
|
112
|
-
* is used automatically.
|
|
113
|
-
*
|
|
114
|
-
* @see https://doc.tropipay.com/docs/api-reference/movements#refund-a-transaction
|
|
115
|
-
* @returns The API response confirming the code was sent
|
|
116
|
-
*/
|
|
117
|
-
requestSecurityCode(type?: "sms" | "email"): Promise<any>;
|
|
118
|
-
}
|
|
119
|
-
export declare class ClientSideUtils {
|
|
120
|
-
constructor(tropipayInstance: Tropipay);
|
|
121
|
-
}
|
|
122
|
-
export declare const Scopes: {
|
|
123
|
-
ALLOW_PAYMENT_IN: string;
|
|
124
|
-
ALLOW_EXTERNAL_CHARGE: string;
|
|
125
|
-
KYC3_FULL_ALLOW: string;
|
|
126
|
-
ALLOW_PAYMENT_OUT: string;
|
|
127
|
-
ALLOW_MARKET_PURCHASES: string;
|
|
128
|
-
ALLOW_GET_BALANCE: string;
|
|
129
|
-
ALLOW_GET_MOVEMENT_LIST: string;
|
|
130
|
-
ALLOW_GET_CREDENTIAL: string;
|
|
131
|
-
ALLOW_REFUND: string;
|
|
132
|
-
};
|
|
133
|
-
export {};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { Tropipay } from "../api/TropipayAPI";
|
|
2
|
-
import { DepositAccountConfig } from "../interfaces/depositaccounts";
|
|
3
|
-
export default class DepositAccounts {
|
|
4
|
-
private tropipay;
|
|
5
|
-
constructor(tropipayInstance: Tropipay);
|
|
6
|
-
/**
|
|
7
|
-
* List od all beneficiaries of this account
|
|
8
|
-
* @returns Array of DepositAccounts
|
|
9
|
-
*/
|
|
10
|
-
list(): Promise<any>;
|
|
11
|
-
/**
|
|
12
|
-
* Adds a new beneficiary to the user account.
|
|
13
|
-
* @param payload
|
|
14
|
-
* @returns
|
|
15
|
-
*/
|
|
16
|
-
create(depositAccountObj: DepositAccountConfig): Promise<any>;
|
|
17
|
-
/**
|
|
18
|
-
* This returns details of a specific
|
|
19
|
-
* Deposit Account (beneficiary) specified by its ID
|
|
20
|
-
* @param id
|
|
21
|
-
* @returns
|
|
22
|
-
*/
|
|
23
|
-
get(id: string): Promise<any>;
|
|
24
|
-
/**
|
|
25
|
-
* Updates certain beneficiary data.
|
|
26
|
-
* @param depositAccountObj
|
|
27
|
-
* @returns
|
|
28
|
-
*/
|
|
29
|
-
update(depositAccountObj: Partial<DepositAccountConfig>): Promise<any>;
|
|
30
|
-
/**
|
|
31
|
-
* (UNTESTED) Deletes the beneficiary indicated by id
|
|
32
|
-
* @param id
|
|
33
|
-
* @returns
|
|
34
|
-
*/
|
|
35
|
-
delete(id: number): Promise<any>;
|
|
36
|
-
}
|
package/docs/readme.md
DELETED
package/globals.d.ts
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
type LoginResponse = {
|
|
2
|
-
access_token: string,
|
|
3
|
-
refresh_token: string
|
|
4
|
-
token_type: "Bearer",
|
|
5
|
-
expires_in: number,
|
|
6
|
-
scope: string
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
type LoginError = {
|
|
10
|
-
error: string
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
type Country = {
|
|
14
|
-
id: number,
|
|
15
|
-
name: string,
|
|
16
|
-
sepaZone: boolean,
|
|
17
|
-
state: number,
|
|
18
|
-
slug: string,
|
|
19
|
-
slugn: number,
|
|
20
|
-
callingCode: number,
|
|
21
|
-
isDestination: boolean,
|
|
22
|
-
isRisky: boolean,
|
|
23
|
-
currentCurrency: string | null,
|
|
24
|
-
createdAt: string,
|
|
25
|
-
updatedAt: string,
|
|
26
|
-
isFavorite: boolean,
|
|
27
|
-
position: any
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
type Deposit = {
|
|
32
|
-
id: number,
|
|
33
|
-
accountNumber: string,
|
|
34
|
-
alias: string,
|
|
35
|
-
swift: string,
|
|
36
|
-
type: number,
|
|
37
|
-
country: number | null,
|
|
38
|
-
firstName: string,
|
|
39
|
-
default: null,
|
|
40
|
-
state: number,
|
|
41
|
-
userId: string,
|
|
42
|
-
countryDestinationId: number,
|
|
43
|
-
lastName: string,
|
|
44
|
-
documentNumber: number,
|
|
45
|
-
userRelationTypeId: number,
|
|
46
|
-
city: string,
|
|
47
|
-
postalCode: string,
|
|
48
|
-
address: string,
|
|
49
|
-
phone: string,
|
|
50
|
-
checked: boolean,
|
|
51
|
-
province: string,
|
|
52
|
-
beneficiaryType: number,
|
|
53
|
-
relatedUserId: null | string,
|
|
54
|
-
currency: string,
|
|
55
|
-
correspondent?: any,
|
|
56
|
-
location: any,
|
|
57
|
-
office: any,
|
|
58
|
-
officeValue: any,
|
|
59
|
-
paymentType: number,
|
|
60
|
-
paymentEntityBeneficiaryId: number,
|
|
61
|
-
paymentEntityAccountId: number,
|
|
62
|
-
verified: any,
|
|
63
|
-
paymentEntityInfo: any,
|
|
64
|
-
documentTypeId: any,
|
|
65
|
-
documentExpirationDate: Date,
|
|
66
|
-
createdAt: Date<string>,
|
|
67
|
-
updatedAt: Date<string>,
|
|
68
|
-
countryDestination: Country
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
type AccountDeposits = {
|
|
72
|
-
count: number,
|
|
73
|
-
rows: Deposit[]
|
|
74
|
-
}
|
|
75
|
-
|
package/hooks/TropipayHooks.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { HookEventType, UserHookSubscribed } from "../interfaces";
|
|
2
|
-
import { Tropipay } from "../api/TropipayAPI";
|
|
3
|
-
export default class TropipayHooks {
|
|
4
|
-
private tropipay;
|
|
5
|
-
constructor(tropipayInstance: Tropipay);
|
|
6
|
-
/**
|
|
7
|
-
* Subscribe a new hook
|
|
8
|
-
* @param event String that represents the name of the event,
|
|
9
|
-
* you must select from the list of available events, otherwise
|
|
10
|
-
* it will not produce an error but it will not be executed.
|
|
11
|
-
* For get full list of available events see endpoint
|
|
12
|
-
* GET /api/v2/hook/events.
|
|
13
|
-
* @param target String representing the type of event supported.
|
|
14
|
-
* It is currently available: 'web' (allows to receive information in a url),
|
|
15
|
-
* 'email' (allows to receive information in an email address).
|
|
16
|
-
* @param value if the selected 'target' is email the value would be an
|
|
17
|
-
* email address, likewise if the selected 'target' is 'web' the expected
|
|
18
|
-
* value corresponds to a url that receives information through the
|
|
19
|
-
* HTTP POST method.
|
|
20
|
-
* @returns
|
|
21
|
-
*/
|
|
22
|
-
subscribe({ eventType, target, value, }: {
|
|
23
|
-
eventType: HookEventType;
|
|
24
|
-
target: "email" | "web";
|
|
25
|
-
value: string;
|
|
26
|
-
}): Promise<any>;
|
|
27
|
-
/**
|
|
28
|
-
* Get the subscribed hook info by his event type.
|
|
29
|
-
* If no event type is passed, it will return
|
|
30
|
-
* all subscribed hooks or empty Array if none exist.
|
|
31
|
-
* @param eventType or no params for retrieving all hooks
|
|
32
|
-
* @returns All subscribed hooks or empty Array if none exist.
|
|
33
|
-
*/
|
|
34
|
-
list(eventType?: HookEventType): Promise<UserHookSubscribed[]>;
|
|
35
|
-
update(eventType: HookEventType, target: "web" | "email", value: string): Promise<any>;
|
|
36
|
-
delete(eventType: HookEventType, target: string): Promise<any>;
|
|
37
|
-
events(): Promise<any>;
|
|
38
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export type TropipayCountry = {};
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
export interface DepositAccountConfig {
|
|
2
|
-
searchValue?: string;
|
|
3
|
-
alias: string;
|
|
4
|
-
userRelationTypeId: number;
|
|
5
|
-
beneficiaryType: BeneficiaryType;
|
|
6
|
-
searchBy?: number;
|
|
7
|
-
accountNumber?: string;
|
|
8
|
-
swift?: string;
|
|
9
|
-
type: DepositAccountType;
|
|
10
|
-
firstName?: string;
|
|
11
|
-
lastName?: string;
|
|
12
|
-
secondLastName?: string;
|
|
13
|
-
countryDestinationId?: number;
|
|
14
|
-
city?: string;
|
|
15
|
-
postalCode?: number;
|
|
16
|
-
address?: string;
|
|
17
|
-
documentNumber?: string;
|
|
18
|
-
phone?: string;
|
|
19
|
-
province?: string;
|
|
20
|
-
paymentType?: string;
|
|
21
|
-
documentTypeId?: number;
|
|
22
|
-
documentExpirationDate: string;
|
|
23
|
-
}
|
|
24
|
-
type INTERNAL = 1;
|
|
25
|
-
type EXTERNAL = 2;
|
|
26
|
-
export type BeneficiaryType = INTERNAL | EXTERNAL;
|
|
27
|
-
export declare const DepositAccountTypesList: {
|
|
28
|
-
/**
|
|
29
|
-
* Banco Metropolitano (Cuba) Bank Account
|
|
30
|
-
*/
|
|
31
|
-
readonly BANMET_BANK_ACCOUNT: 0;
|
|
32
|
-
/**
|
|
33
|
-
* Banco Popular de Ahorro
|
|
34
|
-
*/
|
|
35
|
-
readonly BPA_BANK_ACCOUNT: 1;
|
|
36
|
-
/**
|
|
37
|
-
* Banco de Credito y Comercio (Cuba) Bank Account
|
|
38
|
-
*/
|
|
39
|
-
readonly BANDEC_BANK_ACCOUNT: 2;
|
|
40
|
-
/**
|
|
41
|
-
* Banco Metropilitano (Cuba) card
|
|
42
|
-
*/
|
|
43
|
-
readonly BANMET_CARD: 3;
|
|
44
|
-
/**
|
|
45
|
-
* Banco Popular de Ahorro (Cuba) card
|
|
46
|
-
*/
|
|
47
|
-
readonly BPA_CARD: 4;
|
|
48
|
-
/**
|
|
49
|
-
* Not available anymore
|
|
50
|
-
* @deprecated
|
|
51
|
-
*/
|
|
52
|
-
readonly AIS_CUC_CARD: 5;
|
|
53
|
-
/**
|
|
54
|
-
* Not available
|
|
55
|
-
* @deprecated
|
|
56
|
-
*/
|
|
57
|
-
readonly AIS_USD_CARD: 6;
|
|
58
|
-
/**
|
|
59
|
-
* For international bank accounts
|
|
60
|
-
*/
|
|
61
|
-
readonly OTHER: 7;
|
|
62
|
-
/**
|
|
63
|
-
* Banco de Credito y comercio card
|
|
64
|
-
*/
|
|
65
|
-
readonly BANDEC_CARD: 8;
|
|
66
|
-
};
|
|
67
|
-
export type DepositAccountType = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11;
|
|
68
|
-
export {};
|