UNPKG

@sapphire/plugin-api

Version:

Plugin for @sapphire/framework to expose a REST API

112 lines (110 loc) 3.44 kB
import { __name, __publicField } from '../../../chunk-S573YWRP.mjs'; import { container } from '@sapphire/pieces'; import { AsyncEventEmitter } from '@vladfrangu/async_event_emitter'; import { createServer } from 'http'; import { MiddlewareStore } from '../MiddlewareStore.mjs'; import { RouteStore } from '../RouteStore.mjs'; import { ApiRequest } from '../api/ApiRequest.mjs'; import { ApiResponse } from '../api/ApiResponse.mjs'; import { Auth } from './Auth.mjs'; var ServerEvent = /* @__PURE__ */ ((ServerEvent2) => { ServerEvent2["Error"] = "error"; ServerEvent2["Request"] = "request"; ServerEvent2["RouterBranchNotFound"] = "routerBranchNotFound"; ServerEvent2["RouterBranchMethodNotAllowed"] = "routerBranchMethodNotAllowed"; ServerEvent2["RouterFound"] = "routerFound"; ServerEvent2["RouteError"] = "routeError"; ServerEvent2["MiddlewareFailure"] = "middlewareFailure"; ServerEvent2["MiddlewareError"] = "middlewareError"; ServerEvent2["MiddlewareSuccess"] = "middlewareSuccess"; return ServerEvent2; })(ServerEvent || {}); var _Server = class _Server extends AsyncEventEmitter { /** * @since 1.0.0 * @param options The options for this server */ constructor({ auth, ...options } = {}) { super(); /** * The routes this server holds. * @since 1.0.0 */ __publicField(this, "routes"); /** * The middlewares this server holds. * @since 1.0.0 */ __publicField(this, "middlewares"); /** * The authentication system. * @since 1.0.0 */ __publicField(this, "auth"); /** * The http.Server instance that manages the recieved HTTP requests. * @since 1.0.0 */ __publicField(this, "server"); /** * The options for this server. * @since 1.0.0 */ __publicField(this, "options"); container.server = this; this.options = options; this.server = createServer({ IncomingMessage: ApiRequest, ServerResponse: ApiResponse, ...options.server ?? {} }); this.routes = new RouteStore(); this.middlewares = new MiddlewareStore(); this.auth = Auth.create(auth); this.server.on("error", this.emit.bind(this, "error" /* Error */)); this.server.on("request", this.emit.bind(this, "request" /* Request */)); } connect() { const { server } = this; server.listen({ port: 4e3, ...this.options.listenOptions ?? {} }); return new Promise((resolve, reject) => { function listening() { cleanup(); resolve(); } __name(listening, "listening"); function error(error2) { cleanup(); reject(error2); } __name(error, "error"); function close() { cleanup(); reject(new Error("Closed unexpectedly.")); } __name(close, "close"); function cleanup() { server.off("listening", listening); server.off("error", error); server.off("close", close); } __name(cleanup, "cleanup"); server.on("listening", listening); server.on("error", error); server.on("close", close); }); } disconnect() { return new Promise((resolve, reject) => { this.server.close((error) => error ? reject(error) : resolve()); }); } }; __name(_Server, "Server"); var Server = _Server; export { Server, ServerEvent }; //# sourceMappingURL=Server.mjs.map //# sourceMappingURL=Server.mjs.map