i18n: Upgrade translations from crowdin (253f51dd). (docs)
[ProtonMail-WebClient.git] / packages / chargebee / src / chargebee.ts
blob546552cc9fbc944a6197cc91e35467daa6b87b1f
1 import type { ChargebeeInstanceConfiguration } from '../lib';
2 import { addCheckpoint } from './checkpoints';
4 let chargebee: any | null = null;
5 export function resetChargebee() {
6     chargebee = null;
9 export function createChargebee(config: ChargebeeInstanceConfiguration) {
10     try {
11         if (chargebee) {
12             return chargebee;
13         }
15         addCheckpoint('chargebee.init', config);
16         const instance = (window as any).Chargebee.init(config);
17         addCheckpoint('chargebee.init.done');
18         chargebee = instance;
19         return instance;
20     } catch (error: any) {
21         addCheckpoint('chargebee.init.error', {
22             message: error?.message,
23             stack: error?.stack,
24         });
25         throw error;
26     }
29 export function getChargebeeInstance() {
30     if (!chargebee) {
31         throw new Error('Chargebee is not initialized');
32     }
34     return chargebee;
37 export function isChargebeeLoaded(): boolean {
38     return !!(window as any).Chargebee;
41 export async function wait(ms: number) {
42     return new Promise((resolve) => setTimeout(resolve, ms));
45 export async function pollUntilLoaded(): Promise<void> {
46     const timeStep = 500;
47     const maxTime = 55000;
49     let timeElapsed = 0;
50     while (timeElapsed < maxTime) {
51         if (isChargebeeLoaded()) {
52             addCheckpoint('chargebee.loaded', {
53                 timeElapsed,
54             });
55             return;
56         }
57         await wait(timeStep);
58         timeElapsed += timeStep;
59     }
61     throw new Error('Chargebee did not load');