pluggy-sdk
Version:
Official Node SDK for Pluggy API.
442 lines (441 loc) • 16.3 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PluggyClient = void 0;
const acquirerClient_1 = require("./acquirerClient");
const baseApi_1 = require("./baseApi");
const paymentsClient_1 = require("./paymentsClient");
/**
* Creates a new client instance for interacting with Pluggy API
* @constructor
* @param API_KEY for authenticating to the API
* @returns {PluggyClient} a client for making requests
*/
class PluggyClient extends baseApi_1.BaseApi {
constructor(params) {
super(params);
this.payments = new paymentsClient_1.PluggyPaymentsClient(params);
this.acquirer = new acquirerClient_1.PluggyAcquirerClient(params);
}
/**
* Fetch all available connectors
* @returns {PageResponse<Connector>} paged response of connectors
*/
fetchConnectors(options = {}) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest('connectors', options);
});
}
/**
* Fetch a single Connector
* @param id The Connector ID
* @returns {Connector} a connector object
*/
fetchConnector(id) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest(`connectors/${id}`);
});
}
/**
* Fetch a single item
* @param id The Item ID
* @returns {Item} a item object
*/
fetchItem(id) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest(`items/${id}`);
});
}
/**
* Check that connector parameters are valid
* @param id The Connector ID
* @param parameters A map of name and value for the credentials to be validated
* @returns {ValidationResult} an object with the info of which parameters are wrong
*/
validateParameters(id, parameters) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createPostRequest(`connectors/${id}/validate`, null, parameters);
});
}
/**
* Creates an item
* @param connectorId The Connector's id
* @param parameters A map of name and value for the needed credentials
* @param options Options available to set to the item
* @returns {Item} a item object
*/
createItem(connectorId, parameters, options) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createPostRequest(`items`, null, Object.assign({ connectorId,
parameters }, (options || {})));
});
}
/**
* Updates an item
* @param id The Item ID
* @param parameters A map of name and value for the credentials to be updated.
* Optional; if none submitted, an Item update will be attempted with the latest used credentials.
* @returns {Item} a item object
*/
updateItem(id, parameters, options) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createPatchRequest(`items/${id}`, null, Object.assign({ id,
parameters }, (options || {})));
});
}
/**
* Send MFA for item execution
* @param id The Item ID
* @param parameters A map of name and value for the mfa requested
* @returns {Item} a item object
*/
updateItemMFA(id, parameters = undefined) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createPostRequest(`items/${id}/mfa`, null, parameters);
});
}
/**
* Deletes an item
*/
deleteItem(id) {
return __awaiter(this, void 0, void 0, function* () {
yield this.createDeleteRequest(`items/${id}`);
});
}
/**
* Fetch accounts from an Item
* @param itemId The Item id
* @returns {PageResponse<Account>} paged response of accounts
*/
fetchAccounts(itemId, type) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest('accounts', { itemId, type });
});
}
/**
* Fetch a single account
* @returns {Account} an account object
*/
fetchAccount(id) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest(`accounts/${id}`);
});
}
/**
* Fetch transactions from an account
* @param accountId The account id
* @param {TransactionFilters} options Transaction options to filter
* @returns {PageResponse<Transaction[]>} object which contains the transactions list and related paging data
*/
fetchTransactions(accountId, options = {}) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest('transactions', Object.assign(Object.assign({}, options), { accountId }));
});
}
/**
* Fetch all transactions from an account
* @param accountId The account id
* @returns {Transaction[]} an array of transactions
*/
fetchAllTransactions(accountId) {
return __awaiter(this, void 0, void 0, function* () {
const MAX_PAGE_SIZE = 500;
const { totalPages, results: firstPageResults } = yield this.fetchTransactions(accountId, {
pageSize: MAX_PAGE_SIZE,
});
if (totalPages === 1) {
// just one page return transactions
return firstPageResults;
}
const transactions = [...firstPageResults];
// first page already fetched
let page = 1;
while (page < totalPages) {
page++;
const paginatedTransactions = yield this.fetchTransactions(accountId, {
page,
pageSize: MAX_PAGE_SIZE,
});
transactions.push(...paginatedTransactions.results);
}
return transactions;
});
}
/**
* Post transaction user category for transactin
* @param id The Transaction id
*
* @returns {Transaction} updated transaction object
*/
updateTransactionCategory(id, categoryId) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createPatchRequest(`transactions/${id}`, null, {
categoryId,
});
});
}
/**
* Fetch a single transaction
*
* @returns {Transaction} an transaction object
*/
fetchTransaction(id) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest(`transactions/${id}`);
});
}
/**
* Fetch investments from an Item
*
* @param itemId The Item id
* @returns {PageResponse<Investment>} paged response of investments
*/
fetchInvestments(itemId, type, options = {}) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest('investments', Object.assign(Object.assign({}, options), { itemId,
type }));
});
}
/**
* Fetch a single investment
*
* @returns {Investment} an investment object
*/
fetchInvestment(id) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest(`investments/${id}`);
});
}
/**
* Fetch transactions from an investment
*
* @param investmentId The investment id
* @param {TransactionFilters} options Transaction options to filter
* @returns {PageResponse<InvestmentTransaction[]>} object which contains the transactions list and related paging data
*/
fetchInvestmentTransactions(investmentId, options = {}) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest(`investments/${investmentId}/transactions`, Object.assign(Object.assign({}, options), { investmentId }));
});
}
/**
* Fetch all investment transactions from an investment
* @param investmentId The investment id
* @returns {InvestmentTransaction[]} an array of investment transactions
*/
fetchAllInvestmentTransactions(investmentId) {
return __awaiter(this, void 0, void 0, function* () {
const MAX_PAGE_SIZE = 500;
const { totalPages, results: firstPageResults, } = yield this.fetchInvestmentTransactions(investmentId, { pageSize: MAX_PAGE_SIZE });
if (totalPages === 1) {
return firstPageResults;
}
const transactions = [...firstPageResults];
let page = 1;
while (page < totalPages) {
page++;
const paginatedTransactions = yield this.fetchInvestmentTransactions(investmentId, {
page,
pageSize: MAX_PAGE_SIZE,
});
transactions.push(...paginatedTransactions.results);
}
return transactions;
});
}
/**
* Fetch opportunities from an Item
*
* @param itemId the Item id
* @param options - request search filters
* @returns {PageResponse<Opportunity>} paged response of opportunities
*/
fetchOpportunities(itemId, options = {}) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest('opportunities', Object.assign(Object.assign({}, options), { itemId }));
});
}
/**
* Fetch loans from an Item
*
* @param {string} itemId
* @param {PageFilters} options - request search filters
* @returns {Promise<PageResponse<Loan>>} - paged response of loans
*/
fetchLoans(itemId, options = {}) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest('loans', Object.assign(Object.assign({}, options), { itemId }));
});
}
/**
* Fetch loan by id
*
* @param {string} id - the loan id
* @returns {Promise<Loan>} - loan object, if found
*/
fetchLoan(id) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest(`loans/${id}`);
});
}
/**
* Fetch benefits from an Item
*
* @param {string} itemId
* @param {PageFilters} options - request search filters
* @returns {Promise<PageResponse<Benefit>>} - paged response of benefits
*/
fetchBenefits(itemId, options = {}) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest('benefits', Object.assign(Object.assign({}, options), { itemId }));
});
}
/**
* Fetch benefit by id
*
* @param {string} id - the benefit id
* @returns {Promise<Benefit>} - benefit object, if found
*/
fetchBenefit(id) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest(`benefits/${id}`);
});
}
/**
* Fetch the identity resource
* @returns {IdentityResponse} an identity object
*/
fetchIdentity(id) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest(`identity/${id}`);
});
}
/**
* Fetch the identity resource by it's Item ID
* @returns {IdentityResponse} an identity object
*/
fetchIdentityByItemId(itemId) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest(`identity?itemId=${itemId}`);
});
}
/**
* Fetch credit card bills from an accountId
* @returns {PageResponse<CreditCardBills>} an credit card bills object
*/
fetchCreditCardBills(accountId, options = {}) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest('bills', Object.assign(Object.assign({}, options), { accountId }));
});
}
/**
* Fetch a single credit card bill by its id
* @param {string} id - the credit card bill id
* @returns {Promise<CreditCardBills>} - credit card bill object, if found
*/
fetchCreditCardBill(id) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest(`bills/${id}`);
});
}
/**
* Fetch all available categories
* @returns {Categories[]} an paging response of categories
*/
fetchCategories() {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest('categories');
});
}
/**
* Fetch a single category
* @returns {Category} a category object
*/
fetchCategory(id) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest(`categories/${id}`);
});
}
/**
* Fetch a single webhook
* @returns {Webhook} a webhook object
*/
fetchWebhook(id) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest(`webhooks/${id}`);
});
}
/**
* Fetch all available webhooks
* @returns {Webhook[]} a paging response of webhooks
*/
fetchWebhooks() {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest('webhooks');
});
}
/**
* Creates a Webhook
* @param webhookParams - The webhook params to create, this includes:
* - url: The url where will receive notifications
* - event: The event to listen for
* - headers (optional): The headers to send with the webhook
* @returns {Webhook} the created webhook object
*/
createWebhook(event, url, headers) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createPostRequest(`webhooks`, null, {
event,
url,
headers,
});
});
}
/**
* Updates a Webhook
* @param id - The Webhook ID
* @param updatedWebhookParams - The webhook params to update
* @returns {Webhook} The webhook updated
*/
updateWebhook(id, updatedWebhookParams) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createPatchRequest(`webhooks/${id}`, null, updatedWebhookParams);
});
}
/**
* Deletes a Webhook
*/
deleteWebhook(id) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createDeleteRequest(`webhooks/${id}`);
});
}
/**
* Fetch all income reports for the last years that the Financial Institution provides
* @param {string} itemId - The Item ID to fetch income reports for
* @returns {PageResponse<IncomeReport>} paged response of income reports
*/
fetchIncomeReports(itemId) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createGetRequest('income-reports', { itemId });
});
}
/**
* Creates a connect token that can be used as API KEY to connect items from the Frontend
* @returns {string} Access token to connect items with restrict access
*/
createConnectToken(itemId, options) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.createPostRequest(`connect_token`, null, { itemId, options });
});
}
}
exports.PluggyClient = PluggyClient;