paypal/ts/paypal.classes.account.ts

63 lines
2.1 KiB
TypeScript
Raw Permalink Normal View History

2020-08-21 15:40:04 +00:00
import * as plugins from './paypal.plugins';
2020-08-24 01:55:50 +00:00
import { PayPalTransaction } from './paypal.classes.transaction';
2020-08-21 15:40:04 +00:00
export interface IPayPalOptions {
clientId: string;
clientSecret: string;
}
2020-08-23 15:35:28 +00:00
export class PayPalAccount {
2020-08-21 15:40:04 +00:00
public apiBaseUrl: string = 'https://api.paypal.com'
public options: IPayPalOptions;
private apiToken: string;
private apiTokenExpirationTime: number;
constructor(optionsArg: IPayPalOptions) {
this.options = optionsArg;
}
2020-08-24 01:55:50 +00:00
public async getTransactionsFromTo (fromTimeMillisArg: number, toTimeMillisArg: number) {
let returnTransactions: PayPalTransaction[] = [];
do {
const transactions = await PayPalTransaction.getTransactionFor30days(this, fromTimeMillisArg);
returnTransactions = returnTransactions.concat(transactions);
fromTimeMillisArg = fromTimeMillisArg + plugins.smarttime.getMilliSecondsFromUnits({days: 30});
} while (fromTimeMillisArg < toTimeMillisArg);
return returnTransactions;
}
2020-08-23 13:33:19 +00:00
public async request(methodArg: 'GET' | 'POST', routeArg: string, payloadArg: any) {
2020-08-21 15:40:04 +00:00
if (!this.apiToken || this.apiTokenExpirationTime < Date.now()) {
const authHeader = `Basic ${plugins.smartstring.base64.encode(
`${this.options.clientId}:${this.options.clientSecret}`
)}`;
const response = await plugins.smartrequest.request(
`${this.apiBaseUrl}/v1/oauth2/token?grant_type=client_credentials`,
{
method: 'POST',
headers: {
Accept: 'application/json',
'Accept-Language': 'en_US',
Authorization: authHeader,
},
keepAlive: false,
}
);
this.apiToken = response.body.access_token;
this.apiTokenExpirationTime = Date.now() + response.body.expires_in * 1000 - 600000;
}
// we have a token
2020-08-23 13:33:19 +00:00
const response = await plugins.smartrequest.request(`${this.apiBaseUrl}${routeArg}`, {
2020-08-21 15:40:04 +00:00
method: 'GET',
headers: {
Accept: 'application/json',
'Accept-Language': 'en_US',
Authorization: `Bearer ${this.apiToken}`,
},
});
2020-08-23 13:33:19 +00:00
return response.body;
2020-08-21 15:40:04 +00:00
}
}