plaid-cli
Version:
A CLI interface to interact with the Plaid API
157 lines (137 loc) • 4.12 kB
JavaScript
console.log('Welcome to the Plaid CLI');
console.log('Type "help" for more information');
require('dotenv').config({ path: process.env.HOME + '/.plaidrc' });
const argv = require('minimist')(process.argv.slice(2));
const plaid = require('plaid');
// Initializing the Plaid Client
const client_id = argv['client_id'] || process.env.CLIENT_ID
const secret = argv['secret'] || process.env.SECRET
const public_key = argv['public_key'] || process.env.PUBLIC_KEY
const plaid_env = computePlaidEnv(plaid, argv['plaid_env'] || process.env.PLAID_ENV)
const plaidClient = new plaid.Client(
client_id,
secret,
public_key,
plaid_env,
{ version: '2018-05-22' }
);
const vorpal = require('vorpal')();
vorpal
.delimiter('Plaid CLI $>')
.show();
vorpal
.command('get_item <accessToken>')
.description('Get the item')
.action(function(args, callback) {
plaidClient.getItem(args.accessToken, function(err, res){
prettyPrint(res);
callback();
});
});
vorpal
.command('accounts <accessToken>', 'Get accounts for an item')
.alias('accts')
.action(function(args, callback) {
plaidClient.getAccounts(args.accessToken, args.options, function(err, res) {
prettyPrint(res);
callback();
});
});
vorpal
.command('auth <accessToken>', 'Get auth for an item')
.action(function(args, callback) {
plaidClient.getAuth(args.accessToken, args.options, function(err, res) {
prettyPrint(res);
callback();
});
});
vorpal
.command('balance <accessToken>', 'Get balance for an item')
.action(function(args, callback) {
plaidClient.getBalance(args.accessToken, args.options, function(err, res) {
prettyPrint(res);
callback();
});
});
vorpal
.command('categories', 'Get transaction categories')
.action(function(args, callback) {
plaidClient.getCategories(function(err, res) {
prettyPrint(res);
callback();
});
});
vorpal
.command('credit_details <accessToken>', 'Get credit details for an item')
.alias('credit')
.hidden()
.action(function(args, callback) {
plaidClient.getCreditDetails(args.accessToken, function(err, res) {
prettyPrint(res);
callback();
});
});
vorpal
.command('identity <accessToken>', 'Get identity for an item')
.alias('id')
.action(function(args, callback) {
plaidClient.getIdentity(args.accessToken, function(err, res) {
prettyPrint(res);
callback();
});
});
vorpal
.command('income <accessToken>', 'Get income for an item')
.action(function(args, callback) {
plaidClient.getIncome(args.accessToken, function(err, res) {
prettyPrint(res);
callback();
});
});
vorpal
.command('institution <id>', 'Get institution by institution id')
.action(function(args, callback) {
plaidClient.getIncome(args.id, args.options, function(err, res) {
prettyPrint(res);
callback();
});
});
vorpal
.command('transactions <accessToken> <startDate> <endDate>')
.description('Get transactions for an item using dates formatted as YYYY-MM-DD')
.alias('txns')
.option('-c, --count <count>', 'Between 0 and 500')
.option('-o, --offset <offset>', 'Must be >0')
.action(function(args, callback) {
plaidClient.getTransactions(args.accessToken, args.startDate, args.endDate, args.options, function(err, res) {
prettyPrint(res);
callback();
});
});
vorpal
.command('remove_item <accessToken>')
.description('Remove an item')
.alias('rm')
.action(function(args, callback){
plaidClient.removeItem(args.accessToken, function(err, res){
prettyPrint(res);
callback();
})
})
function computePlaidEnv(plaid, value) {
const val = value.toLowerCase();
if (val === 'sandbox') {
return plaid.environments.sandbox;
} else if (val === 'development') {
return plaid.environments.development;
} else if (val === 'production') {
return plaid.environments.production;
} else {
return undefined;
}
}
function prettyPrint(res) {
const str = JSON.stringify(res, null, 2);
console.log(str);
}