@sapphire/plugin-api
Version:
Plugin for @sapphire/framework to expose a REST API
112 lines (110 loc) • 3.44 kB
JavaScript
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