ente/src/services/subscriptionService.ts

89 lines
2.6 KiB
TypeScript
Raw Normal View History

2021-03-09 16:23:13 +00:00
import { getEndpoint } from 'utils/common/apiUtil';
import HTTPService from './HTTPService';
const ENDPOINT = getEndpoint();
import { getToken } from 'utils/common/key';
2021-03-12 12:30:33 +00:00
import { ExecFileOptionsWithStringEncoding } from 'node:child_process';
export interface Subscription {
id: number;
userID: number;
productID: string;
storage: number;
originalTransactionID: string;
expiryTime: number;
paymentProvider: string;
}
2021-03-12 12:30:33 +00:00
export interface Plan {
id: string;
androidID: string;
iosID: string;
storage: number;
price: string;
period: string;
stripeID: string;
2021-03-12 12:30:33 +00:00
}
2021-03-09 16:23:13 +00:00
class SubscriptionService {
private stripe;
public init() {
let publishableKey = process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY;
2021-03-12 09:13:38 +00:00
this.stripe = window['Stripe'](publishableKey);
2021-03-09 16:23:13 +00:00
}
2021-03-12 12:30:33 +00:00
public async getPlans(): Promise<Plan[]> {
try {
const response = await HTTPService.get(`${ENDPOINT}/billing/plans`);
return response.data['plans'];
} catch (e) {
console.error('failed to get plans', e);
}
}
public async buySubscription(priceID) {
2021-03-09 16:23:13 +00:00
try {
2021-03-12 12:30:33 +00:00
const response = await this.createCheckoutSession(priceID);
await this.stripe.redirectToCheckout({
sessionId: response.data['sessionID'],
2021-03-09 16:23:13 +00:00
});
} catch (e) {
console.error(e);
}
}
private async createCheckoutSession(priceId) {
return HTTPService.post(`${ENDPOINT}/billing/create-checkout-session`, {
priceId: priceId,
});
}
2021-03-10 03:25:00 +00:00
public async getCheckoutSession(sessionId) {
try {
const session = await HTTPService.get(
`${ENDPOINT}/billing/checkout-session`,
{
sessionId: sessionId,
}
2021-03-10 03:25:00 +00:00
);
return JSON.stringify(session, null, 2);
} catch (err) {
console.error('Error when fetching Checkout session', err);
2021-03-10 03:25:00 +00:00
}
}
2021-03-11 16:04:52 +00:00
async getUsage() {
try {
const response = await HTTPService.get(
`${ENDPOINT}/billing/usage`,
{ startTime: 0, endTime: Date.now() * 1000 },
{
'X-Auth-Token': getToken(),
2021-03-11 16:04:52 +00:00
}
);
return this.convertBytesToGBs(response.data.usage);
} catch (e) {
console.error('error getting usage', e);
}
}
public convertBytesToGBs(bytes): string {
return (bytes / (1024 * 1024 * 1024)).toFixed(2);
}
2021-03-09 16:23:13 +00:00
}
export default new SubscriptionService();