@sapphire/plugin-api
Version:
Plugin for @sapphire/framework to expose a REST API
118 lines (115 loc) • 3.92 kB
JavaScript
;
var pieces = require('@sapphire/pieces');
var async_event_emitter = require('@vladfrangu/async_event_emitter');
var http = require('http');
var MiddlewareStore_cjs = require('../MiddlewareStore.cjs');
var RouteStore_cjs = require('../RouteStore.cjs');
var ApiRequest_cjs = require('../api/ApiRequest.cjs');
var ApiResponse_cjs = require('../api/ApiResponse.cjs');
var Auth_cjs = require('./Auth.cjs');
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
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 async_event_emitter.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");
pieces.container.server = this;
this.options = options;
this.server = http.createServer({
IncomingMessage: ApiRequest_cjs.ApiRequest,
ServerResponse: ApiResponse_cjs.ApiResponse,
...options.server ?? {}
});
this.routes = new RouteStore_cjs.RouteStore();
this.middlewares = new MiddlewareStore_cjs.MiddlewareStore();
this.auth = Auth_cjs.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;
exports.Server = Server;
exports.ServerEvent = ServerEvent;
//# sourceMappingURL=Server.cjs.map
//# sourceMappingURL=Server.cjs.map