UNPKG

@ptrumpis/snap-camerakit-bridge

Version:

Library for calling the Snapchat Camera-Kit API in Node.js Hackerman style 🤓

91 lines (73 loc) • 2.82 kB
import HttpServer from "./http/HttpServer.js"; import SocketServer from "./socket/SocketServer.js"; import { dirname } from 'path'; import { fileURLToPath } from 'url'; class CameraKitServer { #httpServer; #socketServer; #httpPort; #socketPort; #rootDir; constructor({ rootDir = dirname(fileURLToPath(import.meta.url)), httpPort = 8080, socketPort = 3000 } = {}) { this.#rootDir = rootDir; this.#httpPort = httpPort; this.#socketPort = socketPort; this.#httpServer = null; this.#socketServer = null; } getHttpPort() { return this.#httpPort; } getSocketPort() { return this.#socketPort; } async start() { if (this.#httpServer || this.#socketServer) { return Promise.resolve(false); } return new Promise(async (resolve, reject) => { try { this.#httpServer = new HttpServer({ rootDir: this.#rootDir, port: this.#httpPort }); this.#socketServer = new SocketServer(this.#socketPort); const results = await Promise.allSettled([ this.#httpServer.start(), this.#socketServer.start(), ]); const hasError = results.some(result => result.status === 'rejected'); if (hasError) { await this.close(); const errors = results.filter(r => r.status === 'rejected').map(r => r.reason); throw new AggregateError(errors, `Failed to start server due to:\n${errors.map(error => error.message).join('\n')}`); } return resolve(true); } catch (err) { reject(err); } }); } async close() { if (!this.#httpServer || !this.#socketServer) { return Promise.resolve(false); } return new Promise(async (resolve, reject) => { try { const results = await Promise.allSettled([ this.#httpServer.close(), this.#socketServer.close() ]); this.#httpServer = null; this.#socketServer = null; const hasError = results.some(result => result.status === 'rejected'); if (hasError) { const errors = results.filter(r => r.status === 'rejected').map(r => r.reason); throw new AggregateError(errors, `Failed to stop server due to:\n${errors.map(error => error.message).join('\n')}`); } return resolve(true); } catch (err) { reject(err); } }); } } export { CameraKitServer }; export default CameraKitServer;