54 lines
1.3 KiB
TypeScript
54 lines
1.3 KiB
TypeScript
import { Inject, Service } from 'typedi';
|
|
import { Router, Request, Response } from 'express';
|
|
import BaseController from '@/api/controllers/BaseController';
|
|
import { PlaidApplication } from '@/services/Banking/Plaid/PlaidApplication';
|
|
|
|
@Service()
|
|
export class PlaidBankingController extends BaseController {
|
|
@Inject()
|
|
private plaidApp: PlaidApplication;
|
|
|
|
/**
|
|
* Router constructor.
|
|
*/
|
|
router() {
|
|
const router = Router();
|
|
|
|
router.post('/link-token', this.linkToken.bind(this));
|
|
router.post('/exchange-token', this.exchangeToken.bind(this));
|
|
|
|
return router;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the Plaid link token.
|
|
* @param {Request} req
|
|
* @param {response} res
|
|
* @returns {Response}
|
|
*/
|
|
private async linkToken(req: Request, res: Response) {
|
|
const { tenantId } = req;
|
|
|
|
const linkToken = await this.plaidApp.getLinkToken(tenantId);
|
|
|
|
return res.status(200).send(linkToken);
|
|
}
|
|
|
|
/**
|
|
* Exchanges the given public token.
|
|
* @param {Request} req
|
|
* @param {response} res
|
|
* @returns {Response}
|
|
*/
|
|
public async exchangeToken(req: Request, res: Response) {
|
|
const { tenantId } = req;
|
|
const { public_token, institution_id } = req.body;
|
|
|
|
await this.plaidApp.exchangeToken(tenantId, {
|
|
institutionId: institution_id,
|
|
publicToken: public_token,
|
|
});
|
|
return res.status(200).send({});
|
|
}
|
|
}
|