@antelopejs/api 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ import type * as net from "node:net";
2
+ import { type DevServerEndpoint } from "@antelopejs/interface-core/runtime";
3
+ import { type Config, type ServerConfig } from "./server-config";
4
+ export declare function shouldAllowPortFallback(config: Config): Promise<boolean>;
5
+ export declare function collectListeningEndpoints(servers: net.Server[], configs?: ServerConfig[]): DevServerEndpoint[];
6
+ export declare function registerDevServerEndpoints(endpoints: DevServerEndpoint[]): Promise<void>;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shouldAllowPortFallback = shouldAllowPortFallback;
4
+ exports.collectListeningEndpoints = collectListeningEndpoints;
5
+ exports.registerDevServerEndpoints = registerDevServerEndpoints;
6
+ const logging_1 = require("@antelopejs/interface-core/logging");
7
+ const runtime_1 = require("@antelopejs/interface-core/runtime");
8
+ const port_binding_1 = require("./port-binding");
9
+ const server_config_1 = require("./server-config");
10
+ const DEV_SERVER_NAME = "api";
11
+ async function shouldAllowPortFallback(config) {
12
+ if (config.strictPort) {
13
+ return false;
14
+ }
15
+ const runtimeInfo = await (0, runtime_1.GetRuntimeInfo)();
16
+ return runtimeInfo.dev;
17
+ }
18
+ function buildEndpoint(server, config) {
19
+ if (!config || !server.listening) {
20
+ return null;
21
+ }
22
+ const port = (0, port_binding_1.resolveBoundPort)(server, config.port ?? server_config_1.DEFAULT_HTTP_PORT);
23
+ return {
24
+ protocol: config.protocol,
25
+ host: config.host ?? server_config_1.DEFAULT_HOST,
26
+ port,
27
+ };
28
+ }
29
+ function collectListeningEndpoints(servers, configs = []) {
30
+ return servers
31
+ .map((server, index) => buildEndpoint(server, configs[index]))
32
+ .filter((endpoint) => endpoint !== null);
33
+ }
34
+ async function registerDevServerEndpoints(endpoints) {
35
+ try {
36
+ await (0, runtime_1.RegisterDevServer)(DEV_SERVER_NAME, endpoints);
37
+ }
38
+ catch (error) {
39
+ const message = error instanceof Error ? error.message : String(error);
40
+ logging_1.Logging.Warn(`Unable to register dev server endpoints: ${message}`);
41
+ }
42
+ }
43
+ //# sourceMappingURL=dev-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-registry.js","sourceRoot":"","sources":["../src/dev-registry.ts"],"names":[],"mappings":";;AAiBA,0DASC;AAkBD,8DAOC;AAED,gEASC;AA7DD,gEAA6D;AAC7D,gEAI4C;AAC5C,iDAAkD;AAClD,mDAKyB;AAEzB,MAAM,eAAe,GAAG,KAAK,CAAC;AAEvB,KAAK,UAAU,uBAAuB,CAC3C,MAAc;IAEd,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,IAAA,wBAAc,GAAE,CAAC;IAC3C,OAAO,WAAW,CAAC,GAAG,CAAC;AACzB,CAAC;AAED,SAAS,aAAa,CACpB,MAAkB,EAClB,MAAqB;IAErB,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,IAAA,+BAAgB,EAAC,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,iCAAiB,CAAC,CAAC;IACxE,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,4BAAY;QACjC,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAgB,yBAAyB,CACvC,OAAqB,EACrB,UAA0B,EAAE;IAE5B,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;SAC7D,MAAM,CAAC,CAAC,QAAQ,EAAiC,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;AAC5E,CAAC;AAEM,KAAK,UAAU,0BAA0B,CAC9C,SAA8B;IAE9B,IAAI,CAAC;QACH,MAAM,IAAA,2BAAiB,EAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,iBAAO,CAAC,IAAI,CAAC,4CAA4C,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
@@ -1,8 +1,10 @@
1
- import { type RouteHandler } from "@antelopejs/interface-api";
1
+ import { type CorsConfig, type RouteHandler } from "@antelopejs/interface-api";
2
2
  import type { Class } from "@antelopejs/interface-core/decorators";
3
3
  import { type RequestContext } from "../../server";
4
4
  export declare function GetControllerInstance(controllerClass: Class<unknown>, context: RequestContext): Promise<unknown>;
5
5
  export declare function Listen(): Promise<void>;
6
+ export declare function GetCorsConfig(): CorsConfig;
7
+ export declare function SetCorsConfig(config: CorsConfig): void;
6
8
  interface RouteInfo {
7
9
  id: string;
8
10
  uri: string;
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.routesProxy = void 0;
4
4
  exports.GetControllerInstance = GetControllerInstance;
5
5
  exports.Listen = Listen;
6
+ exports.GetCorsConfig = GetCorsConfig;
7
+ exports.SetCorsConfig = SetCorsConfig;
6
8
  const interface_api_1 = require("@antelopejs/interface-api");
7
9
  const interface_core_1 = require("@antelopejs/interface-core");
8
10
  const index_1 = require("../../index");
@@ -38,6 +40,12 @@ async function GetControllerInstance(controllerClass, context) {
38
40
  async function Listen() {
39
41
  await (0, index_1.listenServers)();
40
42
  }
43
+ function GetCorsConfig() {
44
+ return (0, index_1.getConfig)().cors ?? {};
45
+ }
46
+ function SetCorsConfig(config) {
47
+ (0, index_1.setCorsConfig)(config);
48
+ }
41
49
  async function invokeHandler(handler, context) {
42
50
  const controllerClass = handler.proto.constructor;
43
51
  const controllerInstance = await GetControllerInstance(controllerClass, context);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/implementations/api/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/implementations/api/index.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,31 +1,13 @@
1
- import * as http from "node:http";
2
- import * as https from "node:https";
1
+ import type { CorsConfig } from "@antelopejs/interface-api";
2
+ import type { DevServerEndpoint } from "@antelopejs/interface-core/runtime";
3
+ import { type Config } from "./server-config";
3
4
  import "./middlewares/cors";
4
- interface ServerNetworkConfig {
5
- host?: string;
6
- port?: number;
7
- }
8
- interface HTTPConfig extends http.ServerOptions, ServerNetworkConfig {
9
- protocol: "http";
10
- }
11
- interface HTTPSConfig extends https.ServerOptions, ServerNetworkConfig {
12
- protocol: "https";
13
- }
14
- type ServerConfig = HTTPConfig | HTTPSConfig;
15
- type AllowedOrigin = string | RegExp | Array<string | RegExp>;
16
- interface CorsConfig {
17
- allowedOrigins?: AllowedOrigin;
18
- allowedMethods?: string[];
19
- }
20
- interface Config {
21
- servers?: ServerConfig[];
22
- cors?: CorsConfig;
23
- autoListen?: boolean;
24
- }
25
5
  export declare function getConfig(): Config;
6
+ export declare function configure(config: Config): void;
7
+ export declare function setCorsConfig(cors: CorsConfig): void;
26
8
  export declare function construct(config: Config): Promise<void>;
27
9
  export declare function destroy(): void;
28
10
  export declare function start(): void;
11
+ export declare function getListeningEndpoints(): DevServerEndpoint[];
29
12
  export declare function listenServers(): Promise<void>;
30
- export declare function stop(): void;
31
- export {};
13
+ export declare function stop(): Promise<void>;
package/dist/index.js CHANGED
@@ -34,118 +34,82 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.getConfig = getConfig;
37
+ exports.configure = configure;
38
+ exports.setCorsConfig = setCorsConfig;
37
39
  exports.construct = construct;
38
40
  exports.destroy = destroy;
39
41
  exports.start = start;
42
+ exports.getListeningEndpoints = getListeningEndpoints;
40
43
  exports.listenServers = listenServers;
41
44
  exports.stop = stop;
42
- const http = __importStar(require("node:http"));
43
- const https = __importStar(require("node:https"));
44
45
  const interface_core_1 = require("@antelopejs/interface-core");
45
- const server_1 = require("./server");
46
- require("./middlewares/cors");
47
46
  const logging_1 = require("@antelopejs/interface-core/logging");
48
- const DEFAULT_HTTP_PORT = 80;
49
- const DEFAULT_HOST = "localhost";
50
- const DEFAULT_SERVER_CONFIG = {
51
- protocol: "http",
52
- port: DEFAULT_HTTP_PORT,
53
- };
54
- const SERVER_FACTORY_BY_PROTOCOL = {
55
- http: (config) => createHTTPServer(config),
56
- https: (config) => createHTTPSServer(config),
57
- };
47
+ const dev_registry_1 = require("./dev-registry");
48
+ const port_binding_1 = require("./port-binding");
49
+ const server_config_1 = require("./server-config");
50
+ const server_factory_1 = require("./server-factory");
51
+ require("./middlewares/cors");
58
52
  let conf = {
59
53
  servers: [],
60
54
  };
61
55
  let servers = [];
62
56
  let listening = false;
63
- function createHTTPServer(config) {
64
- const server = http.createServer(config);
65
- attachServerListeners(server, "http", "ws");
66
- return server;
67
- }
68
- function createHTTPSServer(config) {
69
- const server = https.createServer(config);
70
- attachServerListeners(server, "https", "wss");
71
- return server;
72
- }
73
- function attachServerListeners(server, protocol, socketProtocol) {
74
- server.on("request", (req, res) => void (0, server_1.requestListener)(req, res, protocol));
75
- server.on("upgrade", (req, socket, head) => void (0, server_1.upgradeListener)(req, socket, head, socketProtocol));
76
- }
77
- function resolveServers(config) {
78
- if (config.servers && config.servers.length > 0) {
79
- return config.servers;
80
- }
81
- return [DEFAULT_SERVER_CONFIG];
82
- }
83
- function createConfiguredServer(config) {
84
- const serverFactory = SERVER_FACTORY_BY_PROTOCOL[config.protocol];
85
- return serverFactory(config);
86
- }
87
- function listenServer(server, config) {
88
- if (server.listening) {
89
- return Promise.resolve();
90
- }
91
- return new Promise((resolve, reject) => {
92
- const onListening = () => {
93
- cleanup();
94
- logging_1.Logging.Info(`Server started, listening on ${config.protocol}://${config.host ?? DEFAULT_HOST}:${config.port}`);
95
- resolve();
96
- };
97
- const onError = (error) => {
98
- cleanup();
99
- reject(error);
100
- };
101
- const cleanup = () => {
102
- server.off("listening", onListening);
103
- server.off("error", onError);
104
- };
105
- server.once("listening", onListening);
106
- server.once("error", onError);
107
- server.listen(config.port, config.host);
108
- });
109
- }
110
57
  function getConfig() {
111
58
  return conf;
112
59
  }
113
- async function construct(config) {
60
+ function configure(config) {
114
61
  conf = {
115
62
  ...config,
116
- servers: resolveServers(config),
63
+ servers: (0, server_config_1.resolveServers)(config),
117
64
  };
65
+ }
66
+ function setCorsConfig(cors) {
67
+ conf = { ...conf, cors };
68
+ }
69
+ async function construct(config) {
70
+ configure(config);
118
71
  void (0, interface_core_1.ImplementInterface)(await Promise.resolve().then(() => __importStar(require("@antelopejs/interface-api"))), await Promise.resolve().then(() => __importStar(require("./implementations/api"))));
119
72
  }
120
73
  function destroy() { }
121
- function start() {
122
- servers = (conf.servers ?? []).map((serverConfig) => createConfiguredServer(serverConfig));
74
+ function closeServers() {
75
+ const closing = servers.map((server) => new Promise((resolve) => {
76
+ server.close(() => resolve());
77
+ }));
78
+ servers = [];
123
79
  listening = false;
80
+ return Promise.all(closing).then(() => undefined);
81
+ }
82
+ function start() {
83
+ const serversClosed = closeServers();
84
+ servers = (conf.servers ?? []).map((serverConfig) => (0, server_factory_1.createConfiguredServer)(serverConfig));
124
85
  if (conf.autoListen !== false) {
125
- void listenServers().catch((error) => {
86
+ void serversClosed
87
+ .then(() => listenServers())
88
+ .catch((error) => {
126
89
  const message = error instanceof Error ? error.message : String(error);
127
- logging_1.Logging.Info(`Unable to start listening servers: ${message}`);
90
+ logging_1.Logging.Error(`Unable to start listening servers: ${message}`);
128
91
  });
129
92
  }
130
93
  }
94
+ function getListeningEndpoints() {
95
+ return (0, dev_registry_1.collectListeningEndpoints)(servers, conf.servers);
96
+ }
131
97
  async function listenServers() {
132
98
  if (listening || servers.length === 0) {
133
99
  return;
134
100
  }
135
101
  listening = true;
136
102
  try {
137
- await Promise.all((conf.servers ?? []).map((serverConfig, index) => listenServer(servers[index], serverConfig)));
103
+ const allowPortFallback = await (0, dev_registry_1.shouldAllowPortFallback)(conf);
104
+ await Promise.all((conf.servers ?? []).map((serverConfig, index) => (0, port_binding_1.listenServer)(servers[index], serverConfig, allowPortFallback)));
138
105
  }
139
106
  catch (error) {
140
107
  listening = false;
141
108
  throw error;
142
109
  }
110
+ await (0, dev_registry_1.registerDevServerEndpoints)(getListeningEndpoints());
143
111
  }
144
112
  function stop() {
145
- for (const server of servers) {
146
- server.close();
147
- }
148
- servers = [];
149
- listening = false;
113
+ return closeServers();
150
114
  }
151
115
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqIA,8BAEC;AAED,8BAUC;AAED,0BAAkC;AAElC,sBAYC;AAED,sCAiBC;AAED,oBAMC;AA9LD,gDAAkC;AAClC,kDAAoC;AAGpC,+DAAgE;AAChE,qCAA4D;AAC5D,8BAA4B;AAC5B,gEAA6D;AAmC7D,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,YAAY,GAAG,WAAW,CAAC;AACjC,MAAM,qBAAqB,GAAe;IACxC,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,iBAAiB;CACxB,CAAC;AAEF,MAAM,0BAA0B,GAA0C;IACxE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAoB,CAAC;IACxD,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAqB,CAAC;CAC5D,CAAC;AAEF,IAAI,IAAI,GAAW;IACjB,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,IAAI,OAAO,GAAiB,EAAE,CAAC;AAC/B,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,SAAS,gBAAgB,CAAC,MAAkB;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACzC,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAmB;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC1C,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAAkB,EAClB,QAAwB,EACxB,cAA8B;IAE9B,MAAM,CAAC,EAAE,CACP,SAAS,EACT,CAAC,GAAyB,EAAE,GAAwB,EAAE,EAAE,CACtD,KAAK,IAAA,wBAAe,EAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAC3C,CAAC;IACF,MAAM,CAAC,EAAE,CACP,SAAS,EACT,CAAC,GAAyB,EAAE,MAAqB,EAAE,IAAY,EAAE,EAAE,CACjE,KAAK,IAAA,wBAAe,EAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,OAAO,CAAC,qBAAqB,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAoB;IAClD,MAAM,aAAa,GAAG,0BAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,YAAY,CAAC,MAAkB,EAAE,MAAoB;IAC5D,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,OAAO,EAAE,CAAC;YACV,iBAAO,CAAC,IAAI,CACV,gCAAgC,MAAM,CAAC,QAAQ,MAAM,MAAM,CAAC,IAAI,IAAI,YAAY,IAAI,MAAM,CAAC,IAAI,EAAE,CAClG,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;YAC/B,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,SAAS;IACvB,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,MAAc;IAC5C,IAAI,GAAG;QACL,GAAG,MAAM;QACT,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC;KAChC,CAAC;IAEF,KAAK,IAAA,mCAAkB,EACrB,wDAAa,2BAA2B,GAAC,EACzC,wDAAa,uBAAuB,GAAC,CACtC,CAAC;AACJ,CAAC;AAED,SAAgB,OAAO,KAAU,CAAC;AAElC,SAAgB,KAAK;IACnB,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAClD,sBAAsB,CAAC,YAAY,CAAC,CACrC,CAAC;IACF,SAAS,GAAG,KAAK,CAAC;IAElB,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QAC9B,KAAK,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YAC5C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,iBAAO,CAAC,IAAI,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,aAAa;IACjC,IAAI,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO;IACT,CAAC;IAED,SAAS,GAAG,IAAI,CAAC;IAEjB,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CACf,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAC/C,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAC3C,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,GAAG,KAAK,CAAC;QAClB,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,IAAI;IAClB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,EAAE,CAAC;IACb,SAAS,GAAG,KAAK,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -17,8 +17,9 @@ const interface_api_1 = require("@antelopejs/interface-api");
17
17
  const __1 = require("..");
18
18
  const DEFAULT_ALLOWED_METHODS = "GET,HEAD,PUT,PATCH,POST,DELETE";
19
19
  const FALSE_ORIGIN = "false";
20
- const TRUE_CREDENTIALS = "true";
20
+ const CREDENTIALS_ENABLED_VALUE = "true";
21
21
  const NO_BODY_LENGTH = "0";
22
+ const DEFAULT_CREDENTIALS = true;
22
23
  function isString(value) {
23
24
  return typeof value === "string" || value instanceof String;
24
25
  }
@@ -40,40 +41,61 @@ function isOriginAllowed(origin, allowedOrigin) {
40
41
  }
41
42
  return Boolean(allowedOrigin);
42
43
  }
43
- function addPreflightHeaders(response, requestContext, allowedOriginHeader) {
44
- const config = (0, __1.getConfig)();
45
- const allowedMethods = config.cors?.allowedMethods?.join(",") ?? DEFAULT_ALLOWED_METHODS;
46
- const requestedHeaders = toHeaderValue(requestContext.rawRequest.headers["access-control-request-headers"]);
44
+ function isCredentialsEnabled(cors) {
45
+ return cors.credentials ?? DEFAULT_CREDENTIALS;
46
+ }
47
+ function addCredentialsHeader(response, cors) {
48
+ if (isCredentialsEnabled(cors)) {
49
+ response.addHeader("Access-Control-Allow-Credentials", CREDENTIALS_ENABLED_VALUE);
50
+ }
51
+ }
52
+ function hasStaticAllowedHeaders(cors) {
53
+ return Boolean(cors.allowedHeaders && cors.allowedHeaders.length > 0);
54
+ }
55
+ function resolveAllowedHeaders(cors, requestContext) {
56
+ const { allowedHeaders } = cors;
57
+ if (allowedHeaders && allowedHeaders.length > 0) {
58
+ return allowedHeaders.join(",");
59
+ }
60
+ return toHeaderValue(requestContext.rawRequest.headers["access-control-request-headers"]);
61
+ }
62
+ function addPreflightHeaders(response, requestContext, allowedOriginHeader, cors) {
63
+ const allowedMethods = cors.allowedMethods?.join(",") ?? DEFAULT_ALLOWED_METHODS;
47
64
  response.addHeader("Access-Control-Allow-Origin", allowedOriginHeader);
48
65
  response.addHeader("Vary", "Origin");
49
66
  response.addHeader("Access-Control-Allow-Methods", allowedMethods);
50
- response.addHeader("Access-Control-Allow-Credentials", TRUE_CREDENTIALS);
51
- response.addHeader("Access-Control-Allow-Headers", requestedHeaders);
52
- response.addHeader("Vary", "Access-Control-Request-Headers");
67
+ addCredentialsHeader(response, cors);
68
+ response.addHeader("Access-Control-Allow-Headers", resolveAllowedHeaders(cors, requestContext));
69
+ if (!hasStaticAllowedHeaders(cors)) {
70
+ response.addHeader("Vary", "Access-Control-Request-Headers");
71
+ }
72
+ if (cors.maxAge !== undefined) {
73
+ response.addHeader("Access-Control-Max-Age", String(cors.maxAge));
74
+ }
53
75
  response.addHeader("Content-Length", NO_BODY_LENGTH);
54
76
  }
55
- function addStandardCorsHeaders(requestContext, allowedOriginHeader) {
77
+ function addStandardCorsHeaders(requestContext, allowedOriginHeader, cors) {
56
78
  requestContext.response.addHeader("Access-Control-Allow-Origin", allowedOriginHeader);
57
79
  requestContext.response.addHeader("Vary", "Origin");
58
- requestContext.response.addHeader("Access-Control-Allow-Credentials", TRUE_CREDENTIALS);
80
+ addCredentialsHeader(requestContext.response, cors);
59
81
  }
60
82
  class Cors extends (0, interface_api_1.Controller)("") {
61
83
  cors(requestContext) {
62
- const config = (0, __1.getConfig)();
63
- if (!config.cors) {
84
+ const cors = (0, __1.getConfig)().cors;
85
+ if (!cors) {
64
86
  return undefined;
65
87
  }
66
88
  const requestOrigin = requestContext.rawRequest.headers.origin;
67
89
  const isAllowed = requestOrigin
68
- ? isOriginAllowed(requestOrigin, config.cors.allowedOrigins)
90
+ ? isOriginAllowed(requestOrigin, cors.allowedOrigins)
69
91
  : false;
70
92
  const allowedOriginHeader = isAllowed && requestOrigin ? requestOrigin : FALSE_ORIGIN;
71
93
  if (requestContext.rawRequest.method === "OPTIONS") {
72
94
  const response = new interface_api_1.HTTPResult(204, null);
73
- addPreflightHeaders(response, requestContext, allowedOriginHeader);
95
+ addPreflightHeaders(response, requestContext, allowedOriginHeader, cors);
74
96
  return response;
75
97
  }
76
- addStandardCorsHeaders(requestContext, allowedOriginHeader);
98
+ addStandardCorsHeaders(requestContext, allowedOriginHeader, cors);
77
99
  return undefined;
78
100
  }
79
101
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cors.js","sourceRoot":"","sources":["../../src/middlewares/cors.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6DAOmC;AACnC,0BAA+B;AAM/B,MAAM,uBAAuB,GAAG,gCAAgC,CAAC;AACjE,MAAM,YAAY,GAAG,OAAO,CAAC;AAC7B,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM,CAAC;AAC9D,CAAC;AAED,SAAS,aAAa,CAAC,KAAyB;IAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,KAAK,IAAI,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CACtB,MAAc,EACd,aAA6B;IAE7B,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5B,OAAO,MAAM,KAAK,aAAa,CAAC;IAClC,CAAC;IAED,IAAI,aAAa,YAAY,MAAM,EAAE,CAAC;QACpC,OAAO,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAAoB,EACpB,cAA8B,EAC9B,mBAA2B;IAE3B,MAAM,MAAM,GAAG,IAAA,aAAS,GAAE,CAAC;IAC3B,MAAM,cAAc,GAClB,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,uBAAuB,CAAC;IACpE,MAAM,gBAAgB,GAAG,aAAa,CACpC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,gCAAgC,CAAC,CACpE,CAAC;IAEF,QAAQ,CAAC,SAAS,CAAC,6BAA6B,EAAE,mBAAmB,CAAC,CAAC;IACvE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;IACnE,QAAQ,CAAC,SAAS,CAAC,kCAAkC,EAAE,gBAAgB,CAAC,CAAC;IACzE,QAAQ,CAAC,SAAS,CAAC,8BAA8B,EAAE,gBAAgB,CAAC,CAAC;IACrE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;IAC7D,QAAQ,CAAC,SAAS,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,sBAAsB,CAC7B,cAA8B,EAC9B,mBAA2B;IAE3B,cAAc,CAAC,QAAQ,CAAC,SAAS,CAC/B,6BAA6B,EAC7B,mBAAmB,CACpB,CAAC;IACF,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACpD,cAAc,CAAC,QAAQ,CAAC,SAAS,CAC/B,kCAAkC,EAClC,gBAAgB,CACjB,CAAC;AACJ,CAAC;AAED,MAAa,IAAK,SAAQ,IAAA,0BAAU,EAAC,EAAE,CAAC;IAEtC,IAAI,CAAY,cAA8B;QAC5C,MAAM,MAAM,GAAG,IAAA,aAAS,GAAE,CAAC;QAE3B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;QAC/D,MAAM,SAAS,GAAG,aAAa;YAC7B,CAAC,CAAC,eAAe,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YAC5D,CAAC,CAAC,KAAK,CAAC;QACV,MAAM,mBAAmB,GACvB,SAAS,IAAI,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;QAE5D,IAAI,cAAc,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,0BAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC3C,mBAAmB,CAAC,QAAQ,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC;YACnE,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,sBAAsB,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QAC5D,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAzBD,oBAyBC;AAvBC;IADC,IAAA,sBAAM,EAAC,KAAK,EAAE,GAAG,EAAE,+BAAe,CAAC,OAAO,CAAC;IACtC,WAAA,IAAA,uBAAO,GAAE,CAAA;;;;gCAsBd"}
1
+ {"version":3,"file":"cors.js","sourceRoot":"","sources":["../../src/middlewares/cors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type * as net from "node:net";
2
+ import { type ServerConfig } from "./server-config";
3
+ export declare function resolveBoundPort(server: net.Server, fallbackPort: number): number;
4
+ export declare function listenServer(server: net.Server, config: ServerConfig, allowPortFallback: boolean): Promise<void>;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveBoundPort = resolveBoundPort;
4
+ exports.listenServer = listenServer;
5
+ const logging_1 = require("@antelopejs/interface-core/logging");
6
+ const server_config_1 = require("./server-config");
7
+ const MAX_PORT_FALLBACK_OFFSET = 20;
8
+ function listenOnce(server, port, host) {
9
+ return new Promise((resolve, reject) => {
10
+ const onListening = () => {
11
+ cleanup();
12
+ resolve();
13
+ };
14
+ const onError = (error) => {
15
+ cleanup();
16
+ reject(error);
17
+ };
18
+ const cleanup = () => {
19
+ server.off("listening", onListening);
20
+ server.off("error", onError);
21
+ };
22
+ server.once("listening", onListening);
23
+ server.once("error", onError);
24
+ server.listen(port, host);
25
+ });
26
+ }
27
+ function isPortInUseError(error) {
28
+ return error?.code === "EADDRINUSE";
29
+ }
30
+ function resolveBoundPort(server, fallbackPort) {
31
+ const address = server.address();
32
+ if (address && typeof address === "object") {
33
+ return address.port;
34
+ }
35
+ return fallbackPort;
36
+ }
37
+ function buildCandidatePorts(requestedPort, allowPortFallback) {
38
+ if (!allowPortFallback || requestedPort === server_config_1.RANDOM_PORT) {
39
+ return [requestedPort];
40
+ }
41
+ const sequentialPorts = Array.from({ length: MAX_PORT_FALLBACK_OFFSET + 1 }, (_, offset) => requestedPort + offset);
42
+ return [...sequentialPorts, server_config_1.RANDOM_PORT];
43
+ }
44
+ async function listenServerWithFallback(server, config, allowPortFallback) {
45
+ const requestedPort = config.port ?? server_config_1.DEFAULT_HTTP_PORT;
46
+ const candidatePorts = buildCandidatePorts(requestedPort, allowPortFallback);
47
+ let portInUseError = new Error(`Unable to bind ${config.protocol} server on port ${requestedPort}`);
48
+ for (const candidatePort of candidatePorts) {
49
+ try {
50
+ await listenOnce(server, candidatePort, config.host);
51
+ return resolveBoundPort(server, candidatePort);
52
+ }
53
+ catch (error) {
54
+ if (!isPortInUseError(error)) {
55
+ throw error;
56
+ }
57
+ portInUseError = error;
58
+ }
59
+ }
60
+ throw portInUseError;
61
+ }
62
+ function logServerStarted(config, requestedPort, boundPort) {
63
+ const serverUrl = `${config.protocol}://${config.host ?? server_config_1.DEFAULT_HOST}:${boundPort}`;
64
+ if (boundPort === requestedPort || requestedPort === server_config_1.RANDOM_PORT) {
65
+ logging_1.Logging.Info(`Server started, listening on ${serverUrl}`);
66
+ return;
67
+ }
68
+ logging_1.Logging.Info(`Port ${requestedPort} in use, listening on ${serverUrl} instead`);
69
+ }
70
+ async function listenServer(server, config, allowPortFallback) {
71
+ if (server.listening) {
72
+ return;
73
+ }
74
+ const requestedPort = config.port ?? server_config_1.DEFAULT_HTTP_PORT;
75
+ const boundPort = await listenServerWithFallback(server, config, allowPortFallback);
76
+ config.port = boundPort;
77
+ logServerStarted(config, requestedPort, boundPort);
78
+ }
79
+ //# sourceMappingURL=port-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port-binding.js","sourceRoot":"","sources":["../src/port-binding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type * as http from "node:http";
2
+ import type * as https from "node:https";
3
+ import type { CorsConfig } from "@antelopejs/interface-api";
4
+ export type ServerProtocol = "http" | "https";
5
+ export type SocketProtocol = "ws" | "wss";
6
+ interface ServerNetworkConfig {
7
+ host?: string;
8
+ port?: number;
9
+ }
10
+ export interface HTTPConfig extends http.ServerOptions, ServerNetworkConfig {
11
+ protocol: "http";
12
+ }
13
+ export interface HTTPSConfig extends https.ServerOptions, ServerNetworkConfig {
14
+ protocol: "https";
15
+ }
16
+ export type ServerConfig = HTTPConfig | HTTPSConfig;
17
+ export interface Config {
18
+ servers?: ServerConfig[];
19
+ cors?: CorsConfig;
20
+ autoListen?: boolean;
21
+ strictPort?: boolean;
22
+ }
23
+ export declare const DEFAULT_HTTP_PORT = 80;
24
+ export declare const DEFAULT_HOST = "localhost";
25
+ export declare const RANDOM_PORT = 0;
26
+ export declare function resolveServers(config: Config): ServerConfig[];
27
+ export {};
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RANDOM_PORT = exports.DEFAULT_HOST = exports.DEFAULT_HTTP_PORT = void 0;
4
+ exports.resolveServers = resolveServers;
5
+ exports.DEFAULT_HTTP_PORT = 80;
6
+ exports.DEFAULT_HOST = "localhost";
7
+ exports.RANDOM_PORT = 0;
8
+ const DEFAULT_SERVER_CONFIG = {
9
+ protocol: "http",
10
+ port: exports.DEFAULT_HTTP_PORT,
11
+ };
12
+ function resolveServers(config) {
13
+ if (config.servers && config.servers.length > 0) {
14
+ return config.servers;
15
+ }
16
+ return [DEFAULT_SERVER_CONFIG];
17
+ }
18
+ //# sourceMappingURL=server-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-config.js","sourceRoot":"","sources":["../src/server-config.ts"],"names":[],"mappings":";;;AAsCA,wCAMC;AAfY,QAAA,iBAAiB,GAAG,EAAE,CAAC;AACvB,QAAA,YAAY,GAAG,WAAW,CAAC;AAC3B,QAAA,WAAW,GAAG,CAAC,CAAC;AAE7B,MAAM,qBAAqB,GAAe;IACxC,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,yBAAiB;CACxB,CAAC;AAEF,SAAgB,cAAc,CAAC,MAAc;IAC3C,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,OAAO,CAAC,qBAAqB,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type * as net from "node:net";
2
+ import type { ServerConfig } from "./server-config";
3
+ export declare function createConfiguredServer(config: ServerConfig): net.Server;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createConfiguredServer = createConfiguredServer;
37
+ const http = __importStar(require("node:http"));
38
+ const https = __importStar(require("node:https"));
39
+ const server_1 = require("./server");
40
+ function attachServerListeners(server, protocol, socketProtocol) {
41
+ server.on("request", (req, res) => void (0, server_1.requestListener)(req, res, protocol));
42
+ server.on("upgrade", (req, socket, head) => void (0, server_1.upgradeListener)(req, socket, head, socketProtocol));
43
+ }
44
+ function createHTTPServer(config) {
45
+ const server = http.createServer(config);
46
+ attachServerListeners(server, "http", "ws");
47
+ return server;
48
+ }
49
+ function createHTTPSServer(config) {
50
+ const server = https.createServer(config);
51
+ attachServerListeners(server, "https", "wss");
52
+ return server;
53
+ }
54
+ const SERVER_FACTORY_BY_PROTOCOL = {
55
+ http: (config) => createHTTPServer(config),
56
+ https: (config) => createHTTPSServer(config),
57
+ };
58
+ function createConfiguredServer(config) {
59
+ return SERVER_FACTORY_BY_PROTOCOL[config.protocol](config);
60
+ }
61
+ //# sourceMappingURL=server-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-factory.js","sourceRoot":"","sources":["../src/server-factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,wDAEC;AAnDD,gDAAkC;AAClC,kDAAoC;AAGpC,qCAA4D;AAW5D,SAAS,qBAAqB,CAC5B,MAAkB,EAClB,QAAwB,EACxB,cAA8B;IAE9B,MAAM,CAAC,EAAE,CACP,SAAS,EACT,CAAC,GAAyB,EAAE,GAAwB,EAAE,EAAE,CACtD,KAAK,IAAA,wBAAe,EAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAC3C,CAAC;IACF,MAAM,CAAC,EAAE,CACP,SAAS,EACT,CAAC,GAAyB,EAAE,MAAqB,EAAE,IAAY,EAAE,EAAE,CACjE,KAAK,IAAA,wBAAe,EAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAkB;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACzC,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAmB;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC1C,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,0BAA0B,GAA0C;IACxE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAoB,CAAC;IACxD,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAqB,CAAC;CAC5D,CAAC;AAEF,SAAgB,sBAAsB,CAAC,MAAoB;IACzD,OAAO,0BAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_assert_1 = __importDefault(require("node:assert"));
7
+ const interface_api_1 = require("@antelopejs/interface-api");
8
+ const api_1 = require("../implementations/api");
9
+ const index_1 = require("../index");
10
+ const cors_1 = require("../middlewares/cors");
11
+ const ALLOWED_ORIGIN = "https://example.com";
12
+ const DISALLOWED_ORIGIN = "https://evil.com";
13
+ const REQUESTED_HEADERS = "x-custom";
14
+ const PREFLIGHT_STATUS = 204;
15
+ const corsController = new cors_1.Cors();
16
+ function buildContext(method, headers) {
17
+ return {
18
+ rawRequest: { method, headers },
19
+ response: new interface_api_1.HTTPResult(),
20
+ };
21
+ }
22
+ function preflightHeaders(headers) {
23
+ const result = corsController.cors(buildContext("OPTIONS", headers));
24
+ node_assert_1.default.ok(result instanceof interface_api_1.HTTPResult);
25
+ return result.getHeaders();
26
+ }
27
+ describe("CORS", () => {
28
+ let originalConfig;
29
+ before(() => {
30
+ originalConfig = (0, index_1.getConfig)();
31
+ });
32
+ after(() => {
33
+ (0, index_1.configure)(originalConfig);
34
+ });
35
+ it("round-trips the configuration through the contract functions", () => {
36
+ (0, api_1.SetCorsConfig)({ allowedOrigins: ALLOWED_ORIGIN, credentials: false });
37
+ node_assert_1.default.deepEqual((0, api_1.GetCorsConfig)(), {
38
+ allowedOrigins: ALLOWED_ORIGIN,
39
+ credentials: false,
40
+ });
41
+ node_assert_1.default.deepEqual((0, index_1.getConfig)().cors, {
42
+ allowedOrigins: ALLOWED_ORIGIN,
43
+ credentials: false,
44
+ });
45
+ });
46
+ it("returns an empty configuration when CORS is unset", () => {
47
+ (0, index_1.configure)({ servers: [] });
48
+ node_assert_1.default.deepEqual((0, api_1.GetCorsConfig)(), {});
49
+ });
50
+ it("skips handling when no configuration is set", () => {
51
+ (0, index_1.configure)({ servers: [] });
52
+ const context = buildContext("GET", { origin: ALLOWED_ORIGIN });
53
+ const result = corsController.cors(context);
54
+ node_assert_1.default.equal(result, undefined);
55
+ node_assert_1.default.deepEqual(context.response.getHeaders(), {});
56
+ });
57
+ it("adds standard headers for an allowed origin", () => {
58
+ (0, index_1.setCorsConfig)({ allowedOrigins: ALLOWED_ORIGIN });
59
+ const context = buildContext("GET", { origin: ALLOWED_ORIGIN });
60
+ const result = corsController.cors(context);
61
+ const headers = context.response.getHeaders();
62
+ node_assert_1.default.equal(result, undefined);
63
+ node_assert_1.default.equal(headers["Access-Control-Allow-Origin"], ALLOWED_ORIGIN);
64
+ node_assert_1.default.equal(headers["Access-Control-Allow-Credentials"], "true");
65
+ });
66
+ it("reports a disallowed origin as false", () => {
67
+ (0, index_1.setCorsConfig)({ allowedOrigins: ALLOWED_ORIGIN });
68
+ const context = buildContext("GET", { origin: DISALLOWED_ORIGIN });
69
+ corsController.cors(context);
70
+ node_assert_1.default.equal(context.response.getHeaders()["Access-Control-Allow-Origin"], "false");
71
+ });
72
+ it("omits the credentials header when credentials are disabled", () => {
73
+ (0, index_1.setCorsConfig)({ allowedOrigins: ALLOWED_ORIGIN, credentials: false });
74
+ const context = buildContext("GET", { origin: ALLOWED_ORIGIN });
75
+ corsController.cors(context);
76
+ node_assert_1.default.equal(context.response.getHeaders()["Access-Control-Allow-Credentials"], undefined);
77
+ });
78
+ it("emits preflight headers with configured methods and max-age", () => {
79
+ (0, index_1.setCorsConfig)({
80
+ allowedOrigins: ALLOWED_ORIGIN,
81
+ allowedMethods: ["GET", "POST"],
82
+ maxAge: 600,
83
+ });
84
+ const result = corsController.cors(buildContext("OPTIONS", { origin: ALLOWED_ORIGIN }));
85
+ node_assert_1.default.ok(result instanceof interface_api_1.HTTPResult);
86
+ node_assert_1.default.equal(result.getStatus(), PREFLIGHT_STATUS);
87
+ const headers = result.getHeaders();
88
+ node_assert_1.default.equal(headers["Access-Control-Allow-Methods"], "GET,POST");
89
+ node_assert_1.default.equal(headers["Access-Control-Max-Age"], "600");
90
+ });
91
+ it("reflects the requested headers when none are configured", () => {
92
+ (0, index_1.setCorsConfig)({ allowedOrigins: ALLOWED_ORIGIN });
93
+ const headers = preflightHeaders({
94
+ origin: ALLOWED_ORIGIN,
95
+ "access-control-request-headers": REQUESTED_HEADERS,
96
+ });
97
+ node_assert_1.default.equal(headers["Access-Control-Allow-Headers"], REQUESTED_HEADERS);
98
+ node_assert_1.default.equal(headers.Vary, "Access-Control-Request-Headers");
99
+ });
100
+ it("uses the configured allowed headers over the requested ones", () => {
101
+ (0, index_1.setCorsConfig)({
102
+ allowedOrigins: ALLOWED_ORIGIN,
103
+ allowedHeaders: ["X-A", "X-B"],
104
+ });
105
+ const headers = preflightHeaders({
106
+ origin: ALLOWED_ORIGIN,
107
+ "access-control-request-headers": REQUESTED_HEADERS,
108
+ });
109
+ node_assert_1.default.equal(headers["Access-Control-Allow-Headers"], "X-A,X-B");
110
+ node_assert_1.default.equal(headers.Vary, "Origin");
111
+ });
112
+ it("omits the max-age header when it is not configured", () => {
113
+ (0, index_1.setCorsConfig)({ allowedOrigins: ALLOWED_ORIGIN });
114
+ const headers = preflightHeaders({ origin: ALLOWED_ORIGIN });
115
+ node_assert_1.default.equal(headers["Access-Control-Max-Age"], undefined);
116
+ });
117
+ });
118
+ //# sourceMappingURL=cors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.test.js","sourceRoot":"","sources":["../../src/test/cors.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const node_assert_1 = __importDefault(require("node:assert"));
40
+ const net = __importStar(require("node:net"));
41
+ const coreRuntime = __importStar(require("@antelopejs/interface-core/runtime"));
42
+ const sinon_1 = __importDefault(require("sinon"));
43
+ const index_1 = require("../index");
44
+ const TEST_HOST = "127.0.0.1";
45
+ const FALLBACK_BASE_PORT = 25040;
46
+ const EXPLICIT_FALSE_PORT = 25060;
47
+ const STRICT_FREE_PORT = 25070;
48
+ const STRICT_PORT = 25080;
49
+ const PROD_PORT = 25090;
50
+ const EXHAUSTED_BASE_PORT = 25100;
51
+ const EXHAUSTED_RANGE_SIZE = 21;
52
+ const MULTI_OCCUPIED_PORT = 25140;
53
+ const MULTI_FREE_PORT = 25150;
54
+ const RANDOM_PORT = 0;
55
+ function occupyPort(port) {
56
+ return new Promise((resolve, reject) => {
57
+ const blocker = net.createServer();
58
+ blocker.once("error", reject);
59
+ blocker.listen(port, TEST_HOST, () => resolve(blocker));
60
+ });
61
+ }
62
+ function closeServer(server) {
63
+ return new Promise((resolve) => {
64
+ server.close(() => resolve());
65
+ });
66
+ }
67
+ function configureSingleServer(port, strictPort) {
68
+ (0, index_1.configure)({
69
+ autoListen: false,
70
+ strictPort,
71
+ servers: [{ protocol: "http", host: TEST_HOST, port }],
72
+ });
73
+ (0, index_1.start)();
74
+ }
75
+ function isPortInUseError(error) {
76
+ return error.code === "EADDRINUSE";
77
+ }
78
+ function stubRuntime(dev) {
79
+ sinon_1.default
80
+ .stub(coreRuntime, "GetRuntimeInfo")
81
+ .resolves({ dev, projectPath: "", env: "test" });
82
+ return sinon_1.default.stub(coreRuntime, "RegisterDevServer").resolves();
83
+ }
84
+ const LISTEN_POLL_INTERVAL_MS = 50;
85
+ const LISTEN_POLL_TIMEOUT_MS = 2000;
86
+ function delay(ms) {
87
+ return new Promise((resolve) => setTimeout(resolve, ms));
88
+ }
89
+ async function waitForListening() {
90
+ const deadline = Date.now() + LISTEN_POLL_TIMEOUT_MS;
91
+ while ((0, index_1.getListeningEndpoints)().length === 0) {
92
+ if (Date.now() > deadline) {
93
+ throw new Error("Timed out waiting for servers to listen");
94
+ }
95
+ await delay(LISTEN_POLL_INTERVAL_MS);
96
+ }
97
+ }
98
+ describe("Port fallback", () => {
99
+ const blockers = [];
100
+ let originalConfig;
101
+ async function blockPort(port) {
102
+ blockers.push(await occupyPort(port));
103
+ }
104
+ before(() => {
105
+ originalConfig = (0, index_1.getConfig)();
106
+ });
107
+ after(async () => {
108
+ if (!originalConfig.servers?.length) {
109
+ return;
110
+ }
111
+ (0, index_1.configure)(originalConfig);
112
+ (0, index_1.start)();
113
+ if (originalConfig.autoListen !== false) {
114
+ await waitForListening();
115
+ }
116
+ });
117
+ afterEach(async () => {
118
+ await (0, index_1.stop)();
119
+ sinon_1.default.restore();
120
+ await Promise.all(blockers.map((blocker) => closeServer(blocker)));
121
+ blockers.length = 0;
122
+ });
123
+ it("falls back to the next available port in dev runtime", async () => {
124
+ const registerStub = stubRuntime(true);
125
+ await blockPort(FALLBACK_BASE_PORT);
126
+ configureSingleServer(FALLBACK_BASE_PORT);
127
+ await (0, index_1.listenServers)();
128
+ const endpoints = (0, index_1.getListeningEndpoints)();
129
+ node_assert_1.default.equal(endpoints.length, 1);
130
+ node_assert_1.default.equal(endpoints[0].port, FALLBACK_BASE_PORT + 1);
131
+ node_assert_1.default.equal((0, index_1.getConfig)().servers?.[0].port, FALLBACK_BASE_PORT + 1);
132
+ sinon_1.default.assert.calledOnce(registerStub);
133
+ node_assert_1.default.deepEqual(registerStub.firstCall.args, ["api", endpoints]);
134
+ });
135
+ it("falls back to a random port when the whole range is occupied", async () => {
136
+ stubRuntime(true);
137
+ const occupiedPorts = Array.from({ length: EXHAUSTED_RANGE_SIZE }, (_, offset) => EXHAUSTED_BASE_PORT + offset);
138
+ await Promise.all(occupiedPorts.map((port) => blockPort(port)));
139
+ configureSingleServer(EXHAUSTED_BASE_PORT);
140
+ await (0, index_1.listenServers)();
141
+ const endpoints = (0, index_1.getListeningEndpoints)();
142
+ node_assert_1.default.equal(endpoints.length, 1);
143
+ node_assert_1.default.ok(endpoints[0].port > 0);
144
+ node_assert_1.default.ok(!occupiedPorts.includes(endpoints[0].port));
145
+ });
146
+ it("falls back when strictPort is explicitly false in dev runtime", async () => {
147
+ stubRuntime(true);
148
+ await blockPort(EXPLICIT_FALSE_PORT);
149
+ configureSingleServer(EXPLICIT_FALSE_PORT, false);
150
+ await (0, index_1.listenServers)();
151
+ const endpoints = (0, index_1.getListeningEndpoints)();
152
+ node_assert_1.default.equal(endpoints.length, 1);
153
+ node_assert_1.default.equal(endpoints[0].port, EXPLICIT_FALSE_PORT + 1);
154
+ });
155
+ it("rejects when the port is in use and strictPort is enabled", async () => {
156
+ stubRuntime(true);
157
+ await blockPort(STRICT_PORT);
158
+ configureSingleServer(STRICT_PORT, true);
159
+ await node_assert_1.default.rejects((0, index_1.listenServers)(), isPortInUseError);
160
+ });
161
+ it("binds the requested port when strictPort is enabled and the port is free", async () => {
162
+ stubRuntime(true);
163
+ configureSingleServer(STRICT_FREE_PORT, true);
164
+ await (0, index_1.listenServers)();
165
+ const endpoints = (0, index_1.getListeningEndpoints)();
166
+ node_assert_1.default.equal(endpoints.length, 1);
167
+ node_assert_1.default.equal(endpoints[0].port, STRICT_FREE_PORT);
168
+ node_assert_1.default.equal((0, index_1.getConfig)().servers?.[0].port, STRICT_FREE_PORT);
169
+ });
170
+ it("rejects when the port is in use outside of dev runtime", async () => {
171
+ stubRuntime(false);
172
+ await blockPort(PROD_PORT);
173
+ configureSingleServer(PROD_PORT);
174
+ await node_assert_1.default.rejects((0, index_1.listenServers)(), isPortInUseError);
175
+ });
176
+ it("reports actual endpoints when listening on a random port", async () => {
177
+ stubRuntime(false);
178
+ configureSingleServer(RANDOM_PORT);
179
+ await (0, index_1.listenServers)();
180
+ const endpoints = (0, index_1.getListeningEndpoints)();
181
+ node_assert_1.default.equal(endpoints.length, 1);
182
+ node_assert_1.default.ok(endpoints[0].port > 0);
183
+ node_assert_1.default.equal(endpoints[0].protocol, "http");
184
+ node_assert_1.default.equal(endpoints[0].host, TEST_HOST);
185
+ node_assert_1.default.equal((0, index_1.getConfig)().servers?.[0].port, endpoints[0].port);
186
+ });
187
+ it("binds a single random port when port 0 is requested in dev runtime", async () => {
188
+ stubRuntime(true);
189
+ configureSingleServer(RANDOM_PORT);
190
+ await (0, index_1.listenServers)();
191
+ const endpoints = (0, index_1.getListeningEndpoints)();
192
+ node_assert_1.default.equal(endpoints.length, 1);
193
+ node_assert_1.default.ok(endpoints[0].port > 0);
194
+ node_assert_1.default.equal((0, index_1.getConfig)().servers?.[0].port, endpoints[0].port);
195
+ });
196
+ it("falls back per server when multiple servers are configured", async () => {
197
+ const registerStub = stubRuntime(true);
198
+ await blockPort(MULTI_OCCUPIED_PORT);
199
+ (0, index_1.configure)({
200
+ autoListen: false,
201
+ servers: [
202
+ { protocol: "http", host: TEST_HOST, port: MULTI_OCCUPIED_PORT },
203
+ { protocol: "http", host: TEST_HOST, port: MULTI_FREE_PORT },
204
+ ],
205
+ });
206
+ (0, index_1.start)();
207
+ await (0, index_1.listenServers)();
208
+ const endpoints = (0, index_1.getListeningEndpoints)();
209
+ node_assert_1.default.equal(endpoints.length, 2);
210
+ node_assert_1.default.equal(endpoints[0].port, MULTI_OCCUPIED_PORT + 1);
211
+ node_assert_1.default.equal(endpoints[1].port, MULTI_FREE_PORT);
212
+ node_assert_1.default.equal((0, index_1.getConfig)().servers?.[0].port, MULTI_OCCUPIED_PORT + 1);
213
+ node_assert_1.default.equal((0, index_1.getConfig)().servers?.[1].port, MULTI_FREE_PORT);
214
+ sinon_1.default.assert.calledOnce(registerStub);
215
+ node_assert_1.default.deepEqual(registerStub.firstCall.args, ["api", endpoints]);
216
+ });
217
+ it("clears endpoints after stop", async () => {
218
+ stubRuntime(false);
219
+ configureSingleServer(RANDOM_PORT);
220
+ await (0, index_1.listenServers)();
221
+ await (0, index_1.stop)();
222
+ node_assert_1.default.deepEqual((0, index_1.getListeningEndpoints)(), []);
223
+ });
224
+ });
225
+ //# sourceMappingURL=listen.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen.test.js","sourceRoot":"","sources":["../../src/test/listen.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antelopejs/api",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "A flexible API module that implements the API interfaces of antelopejs with HTTP and WebSocket support",
5
5
  "keywords": [
6
6
  "antelopejs",
@@ -30,7 +30,7 @@
30
30
  "lint": "biome check .",
31
31
  "prepack": "pnpm run build",
32
32
  "release": "pnpm run lint && pnpm run test && pnpm run prepack && release-it",
33
- "test": "ajs module test ."
33
+ "test": "pnpm run build && ajs module test ."
34
34
  },
35
35
  "antelopeJs": {
36
36
  "implements": [
@@ -49,21 +49,22 @@
49
49
  }
50
50
  },
51
51
  "dependencies": {
52
- "@antelopejs/interface-api": "^0.0.2",
52
+ "@antelopejs/interface-api": "^0.0.4",
53
53
  "@antelopejs/interface-api-util": "^0.0.2",
54
- "@antelopejs/interface-core": "^0.0.2",
54
+ "@antelopejs/interface-core": "^0.0.5",
55
55
  "reflect-metadata": "^0.2.2",
56
- "ws": "^8.18.1"
56
+ "ws": "^8.20.0"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@biomejs/biome": "2.3.2",
60
- "@types/node": "^22.14.1",
60
+ "@types/mocha": "^10.0.10",
61
+ "@types/node": "^22.19.15",
61
62
  "@types/sinon": "^21.0.0",
62
63
  "@types/ws": "^8.18.1",
63
64
  "release-it": "^19.2.4",
64
65
  "release-it-changelogen": "^0.1.0",
65
- "rimraf": "^6.0.1",
66
+ "rimraf": "^6.1.3",
66
67
  "sinon": "^21.0.3",
67
- "typescript": "^5.8.3"
68
+ "typescript": "^5.9.3"
68
69
  }
69
70
  }