Untitled

 avatar
unknown
plain_text
17 days ago
1.5 kB
3
Indexable
export async function nodejsFetch(input: RequestInfo | URL, init?: RequestInit) {
    const { url, method, headers, body } = processFetchInput(input, init);

    return new Promise<CapacitorResponse>((resolve, reject) => {
        let response: CapacitorResponse | undefined;
        const reqid = Date.now() + Math.random().toString(36).substring(2);

        NodeJS.whenReady().then(() => {
            const cleanup = () => NodeJS.removeAllListeners(reqid);

            NodeJS.addListener(reqid, (event) => {
                try {
                    const [operationStatus, ...args] = event.args;
                    switch (operationStatus) {
                        case 'error':
                            cleanup();
                            reject(new Error(args[0]));
                            break;
                        case 'success':
                            response = new CapacitorResponse(args[0]);
                            break;
                        case 'done':
                            cleanup();
                            if (response) resolve(response);
                            else reject(new Error('No response received'));
                            break;
                    }
                } catch (err) {
                    cleanup();
                    reject(err);
                }
            });

            NodeJS.send({
                eventName: 'fetch',
                args: [reqid, url, method, headers, body],
            });
        }).catch(reject);
    });
}
Leave a Comment