@colyseus/tools 0.16.0-preview.1 → 0.16.0-preview.3
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.
- package/build/index.d.ts +3 -3
- package/build/index.js +31 -47
- package/build/index.js.map +3 -3
- package/build/index.mjs +43 -51
- package/build/index.mjs.map +2 -2
- package/build/loadenv.js.map +1 -1
- package/build/loadenv.mjs +9 -1
- package/build/loadenv.mjs.map +2 -2
- package/package.json +10 -4
package/build/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import express from
|
|
1
|
+
import './loadenv.js';
|
|
2
|
+
import express from 'express';
|
|
3
3
|
import { Server, ServerOptions, Transport } from '@colyseus/core';
|
|
4
4
|
export interface ConfigOptions {
|
|
5
5
|
options?: ServerOptions;
|
|
@@ -16,5 +16,5 @@ export default function (options: ConfigOptions): ConfigOptions;
|
|
|
16
16
|
* @param options Application options
|
|
17
17
|
* @param port Port number to bind Colyseus + Express
|
|
18
18
|
*/
|
|
19
|
-
export declare function listen(options: ConfigOptions, port?: number): Promise<Server>;
|
|
19
|
+
export declare function listen(options: ConfigOptions | Server, port?: number): Promise<Server>;
|
|
20
20
|
export declare function getTransport(options: ConfigOptions): Promise<Transport>;
|
package/build/index.js
CHANGED
|
@@ -32,7 +32,7 @@ __export(src_exports, {
|
|
|
32
32
|
listen: () => listen
|
|
33
33
|
});
|
|
34
34
|
module.exports = __toCommonJS(src_exports);
|
|
35
|
-
var import_loadenv = require("./loadenv");
|
|
35
|
+
var import_loadenv = require("./loadenv.js");
|
|
36
36
|
var import_os = __toESM(require("os"));
|
|
37
37
|
var import_http = __toESM(require("http"));
|
|
38
38
|
var import_cors = __toESM(require("cors"));
|
|
@@ -40,16 +40,9 @@ var import_express = __toESM(require("express"));
|
|
|
40
40
|
var import_node_os_utils = __toESM(require("node-os-utils"));
|
|
41
41
|
var import_core = require("@colyseus/core");
|
|
42
42
|
var import_ws_transport = require("@colyseus/ws-transport");
|
|
43
|
-
let uWebSocketsExpressCompatibility = void 0;
|
|
44
|
-
try {
|
|
45
|
-
uWebSocketsExpressCompatibility = require("uwebsockets-express").default;
|
|
46
|
-
} catch (e) {
|
|
47
|
-
}
|
|
48
43
|
let BunWebSockets = void 0;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
} catch (e) {
|
|
52
|
-
}
|
|
44
|
+
import("@colyseus/bun-websockets").then((module2) => BunWebSockets = module2).catch(() => {
|
|
45
|
+
});
|
|
53
46
|
const ALLOWED_KEYS = {
|
|
54
47
|
"displayLogs": "boolean",
|
|
55
48
|
"options": "object",
|
|
@@ -71,13 +64,38 @@ function src_default(options) {
|
|
|
71
64
|
return options;
|
|
72
65
|
}
|
|
73
66
|
async function listen(options, port = Number(process.env.PORT || 2567)) {
|
|
74
|
-
const serverOptions = options.options || {};
|
|
75
|
-
options.displayLogs = options.displayLogs ?? true;
|
|
76
67
|
if (process.env.COLYSEUS_CLOUD !== void 0) {
|
|
77
68
|
port = 2567;
|
|
78
69
|
}
|
|
79
70
|
const processNumber = Number(process.env.NODE_APP_INSTANCE || "0");
|
|
80
71
|
port += processNumber;
|
|
72
|
+
let gameServer;
|
|
73
|
+
let displayLogs = true;
|
|
74
|
+
if (options instanceof import_core.Server) {
|
|
75
|
+
gameServer = options;
|
|
76
|
+
} else {
|
|
77
|
+
gameServer = await buildServerFromOptions(options, port);
|
|
78
|
+
displayLogs = options.displayLogs;
|
|
79
|
+
await options.initializeGameServer?.(gameServer);
|
|
80
|
+
await import_core.matchMaker.onReady;
|
|
81
|
+
await options.beforeListen?.();
|
|
82
|
+
}
|
|
83
|
+
if (process.env.COLYSEUS_CLOUD !== void 0) {
|
|
84
|
+
await gameServer.listen(`/run/colyseus/${port}.sock`);
|
|
85
|
+
} else {
|
|
86
|
+
await gameServer.listen(port);
|
|
87
|
+
}
|
|
88
|
+
if (typeof process.send === "function") {
|
|
89
|
+
process.send("ready");
|
|
90
|
+
}
|
|
91
|
+
if (displayLogs) {
|
|
92
|
+
import_core.logger.info(`\u2694\uFE0F Listening on http://localhost:${port}`);
|
|
93
|
+
}
|
|
94
|
+
return gameServer;
|
|
95
|
+
}
|
|
96
|
+
async function buildServerFromOptions(options, port) {
|
|
97
|
+
const serverOptions = options.options || {};
|
|
98
|
+
options.displayLogs = options.displayLogs ?? true;
|
|
81
99
|
if (process.env.COLYSEUS_CLOUD !== void 0) {
|
|
82
100
|
const useRedisConfig = import_os.default.cpus().length > 1 || process.env.REDIS_URI !== void 0;
|
|
83
101
|
if (!serverOptions.driver && useRedisConfig) {
|
|
@@ -110,25 +128,10 @@ async function listen(options, port = Number(process.env.PORT || 2567)) {
|
|
|
110
128
|
}
|
|
111
129
|
}
|
|
112
130
|
const transport = await getTransport(options);
|
|
113
|
-
|
|
131
|
+
return new import_core.Server({
|
|
114
132
|
...serverOptions,
|
|
115
133
|
transport
|
|
116
134
|
});
|
|
117
|
-
await options.initializeGameServer?.(gameServer);
|
|
118
|
-
await import_core.matchMaker.onReady;
|
|
119
|
-
await options.beforeListen?.();
|
|
120
|
-
if (process.env.COLYSEUS_CLOUD !== void 0) {
|
|
121
|
-
await gameServer.listen(`/run/colyseus/${port}.sock`);
|
|
122
|
-
} else {
|
|
123
|
-
await gameServer.listen(port);
|
|
124
|
-
}
|
|
125
|
-
if (typeof process.send === "function") {
|
|
126
|
-
process.send("ready");
|
|
127
|
-
}
|
|
128
|
-
if (options.displayLogs) {
|
|
129
|
-
import_core.logger.info(`\u2694\uFE0F Listening on http://localhost:${port}`);
|
|
130
|
-
}
|
|
131
|
-
return gameServer;
|
|
132
135
|
}
|
|
133
136
|
async function getTransport(options) {
|
|
134
137
|
let transport;
|
|
@@ -145,25 +148,6 @@ async function getTransport(options) {
|
|
|
145
148
|
if (transport["expressApp"]) {
|
|
146
149
|
app = transport["expressApp"];
|
|
147
150
|
}
|
|
148
|
-
if (options.initializeExpress) {
|
|
149
|
-
if (transport["app"]) {
|
|
150
|
-
if (typeof uWebSocketsExpressCompatibility === "function") {
|
|
151
|
-
if (options.displayLogs) {
|
|
152
|
-
import_core.logger.info("\u2705 uWebSockets.js + Express compatibility enabled");
|
|
153
|
-
}
|
|
154
|
-
server = void 0;
|
|
155
|
-
app = uWebSocketsExpressCompatibility(transport["app"]);
|
|
156
|
-
} else {
|
|
157
|
-
if (options.displayLogs) {
|
|
158
|
-
import_core.logger.warn("");
|
|
159
|
-
import_core.logger.warn("\u274C uWebSockets.js + Express compatibility mode couldn't be loaded, run the following command to fix:");
|
|
160
|
-
import_core.logger.warn("\u{1F449} npm install --save uwebsockets-express");
|
|
161
|
-
import_core.logger.warn("");
|
|
162
|
-
}
|
|
163
|
-
app = void 0;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
151
|
if (app) {
|
|
168
152
|
app.use((0, import_cors.default)({ origin: true, credentials: true }));
|
|
169
153
|
app.use(import_express.default.json());
|
package/build/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["import
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAO;AACP,gBAAe;AACf,kBAAiB;AACjB,kBAAiB;AACjB,qBAAoB;AACpB,2BAAoB;AACpB,kBAAqE;AACrE,0BAAmC;
|
|
6
|
-
"names": ["os", "options", "express", "http", "cors", "osUtils"]
|
|
4
|
+
"sourcesContent": ["import './loadenv.js';\nimport os from 'os';\nimport http from 'http';\nimport cors from 'cors';\nimport express from 'express';\nimport osUtils from 'node-os-utils';\nimport { logger, Server, ServerOptions, Transport, matchMaker } from '@colyseus/core';\nimport { WebSocketTransport } from '@colyseus/ws-transport';\n\nlet BunWebSockets: any = undefined;\n\n// @ts-ignore\nimport('@colyseus/bun-websockets')\n .then((module) => BunWebSockets = module)\n .catch(() => { });\n\nexport interface ConfigOptions {\n options?: ServerOptions,\n displayLogs?: boolean,\n getId?: () => string,\n initializeTransport?: (options: any) => Transport,\n initializeExpress?: (app: express.Express) => void,\n initializeGameServer?: (app: Server) => void,\n beforeListen?: () => void,\n}\n\nconst ALLOWED_KEYS: { [key in keyof ConfigOptions]: string } = {\n 'displayLogs': \"boolean\",\n 'options': \"object\",\n 'getId': \"function\",\n 'initializeTransport': \"function\",\n 'initializeExpress': \"function\",\n 'initializeGameServer': \"function\",\n 'beforeListen': \"function\"\n};\n\nexport default function (options: ConfigOptions) {\n for (const option in options) {\n if (!ALLOWED_KEYS[option]) {\n throw new Error(`\u274C Invalid option '${option}'. Allowed options are: ${Object.keys(ALLOWED_KEYS).join(\", \")}`);\n }\n if(options[option] !== undefined && typeof(options[option]) !== ALLOWED_KEYS[option]) {\n throw new Error(`\u274C Invalid type for ${option}: please provide a ${ALLOWED_KEYS[option]} value.`);\n }\n }\n\n return options;\n}\n\n/**\n * Listen on your development environment\n * @param options Application options\n * @param port Port number to bind Colyseus + Express\n */\nexport async function listen(\n options: ConfigOptions | Server,\n port: number = Number(process.env.PORT || 2567),\n) {\n // Force 2567 port on Colyseus Cloud\n if (process.env.COLYSEUS_CLOUD !== undefined) {\n port = 2567;\n }\n\n //\n // Handling multiple processes\n // Use NODE_APP_INSTANCE to play nicely with pm2\n //\n const processNumber = Number(process.env.NODE_APP_INSTANCE || \"0\");\n port += processNumber;\n\n let gameServer: Server;\n let displayLogs = true;\n\n if (options instanceof Server) {\n gameServer = options;\n\n } else {\n gameServer = await buildServerFromOptions(options, port);\n displayLogs = options.displayLogs;\n\n await options.initializeGameServer?.(gameServer);\n await matchMaker.onReady;\n await options.beforeListen?.();\n }\n\n if (process.env.COLYSEUS_CLOUD !== undefined) {\n // listening on socket\n // @ts-ignore\n await gameServer.listen(`/run/colyseus/${port}.sock`);\n\n } else {\n // listening on port\n await gameServer.listen(port);\n }\n\n // notify process manager (production)\n if (typeof(process.send) === \"function\") {\n process.send('ready');\n }\n\n if (displayLogs) {\n logger.info(`\u2694\uFE0F Listening on http://localhost:${port}`);\n }\n\n return gameServer;\n}\n\nasync function buildServerFromOptions(options: ConfigOptions, port: number) {\n const serverOptions = options.options || {};\n options.displayLogs = options.displayLogs ?? true;\n\n // automatically configure for production under Colyseus Cloud\n if (process.env.COLYSEUS_CLOUD !== undefined) {\n // special configuration is required when using multiple processes\n const useRedisConfig = (os.cpus().length > 1) || (process.env.REDIS_URI !== undefined);\n\n if (!serverOptions.driver && useRedisConfig) {\n let RedisDriver: any = undefined;\n try {\n RedisDriver = require('@colyseus/redis-driver').RedisDriver;\n serverOptions.driver = new RedisDriver(process.env.REDIS_URI);\n } catch (e) {\n logger.warn(\"\");\n logger.warn(\"\u274C could not initialize RedisDriver.\");\n logger.warn(\"\uD83D\uDC49 npm install --save @colyseus/redis-driver\");\n logger.warn(\"\");\n }\n }\n\n if (!serverOptions.presence && useRedisConfig) {\n let RedisPresence: any = undefined;\n try {\n RedisPresence = require('@colyseus/redis-presence').RedisPresence;\n serverOptions.presence = new RedisPresence(process.env.REDIS_URI);\n } catch (e) {\n logger.warn(\"\");\n logger.warn(\"\u274C could not initialize RedisPresence.\");\n logger.warn(\"\uD83D\uDC49 npm install --save @colyseus/redis-presence\");\n logger.warn(\"\");\n }\n }\n\n if (useRedisConfig) {\n // force \"publicAddress\" when more than 1 process is available\n serverOptions.publicAddress = process.env.SUBDOMAIN + \".\" + process.env.SERVER_NAME;\n\n // nginx is responsible for forwarding /{port}/ to this process\n serverOptions.publicAddress += \"/\" + port;\n }\n }\n\n const transport = await getTransport(options);\n return new Server({\n ...serverOptions,\n transport,\n });\n}\n\nexport async function getTransport(options: ConfigOptions) {\n let transport: Transport;\n\n if (!options.initializeTransport) {\n if (BunWebSockets !== undefined) {\n // @colyseus/bun-websockets\n options.initializeTransport = (options: any) => new BunWebSockets.BunWebSockets(options);\n\n } else {\n // use WebSocketTransport by default\n options.initializeTransport = (options: any) => new WebSocketTransport(options);\n }\n }\n\n let app: express.Express | undefined = express();\n let server = http.createServer(app);\n\n transport = await options.initializeTransport({ server, app });\n\n //\n // TODO: refactor me!\n // BunWebSockets: There's no need to instantiate \"app\" and \"server\" above\n //\n if (transport['expressApp']) {\n app = transport['expressApp'];\n }\n\n if (app) {\n // Enable CORS\n app.use(cors({ origin: true, credentials: true, }));\n\n // Enable JSON parsing.\n app.use(express.json());\n\n if (options.initializeExpress) {\n await options.initializeExpress(app);\n }\n\n // health check for load balancers\n app.get(\"/__healthcheck\", (req, res) => {\n res.status(200).end();\n });\n\n app.get(\"/__cloudstats\", async (req, res) => {\n if (\n process.env.CLOUD_SECRET &&\n req.headers.authorization !== process.env.CLOUD_SECRET\n ) {\n res.status(401).end();\n return;\n }\n\n // count rooms per process\n const rooms = (await matchMaker.stats.fetchAll()).reduce((prev, curr) => {\n return prev + curr.roomCount;\n }, 0);\n\n const ccu = await matchMaker.stats.getGlobalCCU();\n const mem = await osUtils.mem.used();\n const cpu = (await osUtils.cpu.usage()) / 100;\n\n res.json({\n version: 1,\n mem: (mem.usedMemMb / mem.totalMemMb),\n cpu,\n ccu,\n rooms,\n });\n });\n\n if (options.displayLogs) {\n logger.info(\"\u2705 Express initialized\");\n }\n }\n\n return transport;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["module", "os", "options", "express", "http", "cors", "osUtils"]
|
|
7
7
|
}
|
package/build/index.mjs
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
|
+
}) : x)(function(x) {
|
|
4
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
5
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
// packages/tools/src/index.ts
|
|
9
|
+
import "./loadenv.mjs";
|
|
2
10
|
import os from "os";
|
|
3
11
|
import http from "http";
|
|
4
12
|
import cors from "cors";
|
|
@@ -6,17 +14,10 @@ import express from "express";
|
|
|
6
14
|
import osUtils from "node-os-utils";
|
|
7
15
|
import { logger, Server, matchMaker } from "@colyseus/core";
|
|
8
16
|
import { WebSocketTransport } from "@colyseus/ws-transport";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
let BunWebSockets = void 0;
|
|
15
|
-
try {
|
|
16
|
-
BunWebSockets = require("@colyseus/bun-websockets");
|
|
17
|
-
} catch (e) {
|
|
18
|
-
}
|
|
19
|
-
const ALLOWED_KEYS = {
|
|
17
|
+
var BunWebSockets = void 0;
|
|
18
|
+
import("@colyseus/bun-websockets").then((module) => BunWebSockets = module).catch(() => {
|
|
19
|
+
});
|
|
20
|
+
var ALLOWED_KEYS = {
|
|
20
21
|
"displayLogs": "boolean",
|
|
21
22
|
"options": "object",
|
|
22
23
|
"getId": "function",
|
|
@@ -37,19 +38,44 @@ function src_default(options) {
|
|
|
37
38
|
return options;
|
|
38
39
|
}
|
|
39
40
|
async function listen(options, port = Number(process.env.PORT || 2567)) {
|
|
40
|
-
const serverOptions = options.options || {};
|
|
41
|
-
options.displayLogs = options.displayLogs ?? true;
|
|
42
41
|
if (process.env.COLYSEUS_CLOUD !== void 0) {
|
|
43
42
|
port = 2567;
|
|
44
43
|
}
|
|
45
44
|
const processNumber = Number(process.env.NODE_APP_INSTANCE || "0");
|
|
46
45
|
port += processNumber;
|
|
46
|
+
let gameServer;
|
|
47
|
+
let displayLogs = true;
|
|
48
|
+
if (options instanceof Server) {
|
|
49
|
+
gameServer = options;
|
|
50
|
+
} else {
|
|
51
|
+
gameServer = await buildServerFromOptions(options, port);
|
|
52
|
+
displayLogs = options.displayLogs;
|
|
53
|
+
await options.initializeGameServer?.(gameServer);
|
|
54
|
+
await matchMaker.onReady;
|
|
55
|
+
await options.beforeListen?.();
|
|
56
|
+
}
|
|
57
|
+
if (process.env.COLYSEUS_CLOUD !== void 0) {
|
|
58
|
+
await gameServer.listen(`/run/colyseus/${port}.sock`);
|
|
59
|
+
} else {
|
|
60
|
+
await gameServer.listen(port);
|
|
61
|
+
}
|
|
62
|
+
if (typeof process.send === "function") {
|
|
63
|
+
process.send("ready");
|
|
64
|
+
}
|
|
65
|
+
if (displayLogs) {
|
|
66
|
+
logger.info(`\u2694\uFE0F Listening on http://localhost:${port}`);
|
|
67
|
+
}
|
|
68
|
+
return gameServer;
|
|
69
|
+
}
|
|
70
|
+
async function buildServerFromOptions(options, port) {
|
|
71
|
+
const serverOptions = options.options || {};
|
|
72
|
+
options.displayLogs = options.displayLogs ?? true;
|
|
47
73
|
if (process.env.COLYSEUS_CLOUD !== void 0) {
|
|
48
74
|
const useRedisConfig = os.cpus().length > 1 || process.env.REDIS_URI !== void 0;
|
|
49
75
|
if (!serverOptions.driver && useRedisConfig) {
|
|
50
76
|
let RedisDriver = void 0;
|
|
51
77
|
try {
|
|
52
|
-
RedisDriver =
|
|
78
|
+
RedisDriver = __require("@colyseus/redis-driver").RedisDriver;
|
|
53
79
|
serverOptions.driver = new RedisDriver(process.env.REDIS_URI);
|
|
54
80
|
} catch (e) {
|
|
55
81
|
logger.warn("");
|
|
@@ -61,7 +87,7 @@ async function listen(options, port = Number(process.env.PORT || 2567)) {
|
|
|
61
87
|
if (!serverOptions.presence && useRedisConfig) {
|
|
62
88
|
let RedisPresence = void 0;
|
|
63
89
|
try {
|
|
64
|
-
RedisPresence =
|
|
90
|
+
RedisPresence = __require("@colyseus/redis-presence").RedisPresence;
|
|
65
91
|
serverOptions.presence = new RedisPresence(process.env.REDIS_URI);
|
|
66
92
|
} catch (e) {
|
|
67
93
|
logger.warn("");
|
|
@@ -76,25 +102,10 @@ async function listen(options, port = Number(process.env.PORT || 2567)) {
|
|
|
76
102
|
}
|
|
77
103
|
}
|
|
78
104
|
const transport = await getTransport(options);
|
|
79
|
-
|
|
105
|
+
return new Server({
|
|
80
106
|
...serverOptions,
|
|
81
107
|
transport
|
|
82
108
|
});
|
|
83
|
-
await options.initializeGameServer?.(gameServer);
|
|
84
|
-
await matchMaker.onReady;
|
|
85
|
-
await options.beforeListen?.();
|
|
86
|
-
if (process.env.COLYSEUS_CLOUD !== void 0) {
|
|
87
|
-
await gameServer.listen(`/run/colyseus/${port}.sock`);
|
|
88
|
-
} else {
|
|
89
|
-
await gameServer.listen(port);
|
|
90
|
-
}
|
|
91
|
-
if (typeof process.send === "function") {
|
|
92
|
-
process.send("ready");
|
|
93
|
-
}
|
|
94
|
-
if (options.displayLogs) {
|
|
95
|
-
logger.info(`\u2694\uFE0F Listening on http://localhost:${port}`);
|
|
96
|
-
}
|
|
97
|
-
return gameServer;
|
|
98
109
|
}
|
|
99
110
|
async function getTransport(options) {
|
|
100
111
|
let transport;
|
|
@@ -111,25 +122,6 @@ async function getTransport(options) {
|
|
|
111
122
|
if (transport["expressApp"]) {
|
|
112
123
|
app = transport["expressApp"];
|
|
113
124
|
}
|
|
114
|
-
if (options.initializeExpress) {
|
|
115
|
-
if (transport["app"]) {
|
|
116
|
-
if (typeof uWebSocketsExpressCompatibility === "function") {
|
|
117
|
-
if (options.displayLogs) {
|
|
118
|
-
logger.info("\u2705 uWebSockets.js + Express compatibility enabled");
|
|
119
|
-
}
|
|
120
|
-
server = void 0;
|
|
121
|
-
app = uWebSocketsExpressCompatibility(transport["app"]);
|
|
122
|
-
} else {
|
|
123
|
-
if (options.displayLogs) {
|
|
124
|
-
logger.warn("");
|
|
125
|
-
logger.warn("\u274C uWebSockets.js + Express compatibility mode couldn't be loaded, run the following command to fix:");
|
|
126
|
-
logger.warn("\u{1F449} npm install --save uwebsockets-express");
|
|
127
|
-
logger.warn("");
|
|
128
|
-
}
|
|
129
|
-
app = void 0;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
125
|
if (app) {
|
|
134
126
|
app.use(cors({ origin: true, credentials: true }));
|
|
135
127
|
app.use(express.json());
|
package/build/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["import
|
|
5
|
-
"mappings": "AAAA,OAAO;AACP,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAO,UAAU;AACjB,OAAO,aAAa;AACpB,OAAO,aAAa;AACpB,SAAS,QAAQ,QAAkC,kBAAkB;AACrE,SAAS,0BAA0B;
|
|
4
|
+
"sourcesContent": ["import './loadenv.js';\nimport os from 'os';\nimport http from 'http';\nimport cors from 'cors';\nimport express from 'express';\nimport osUtils from 'node-os-utils';\nimport { logger, Server, ServerOptions, Transport, matchMaker } from '@colyseus/core';\nimport { WebSocketTransport } from '@colyseus/ws-transport';\n\nlet BunWebSockets: any = undefined;\n\n// @ts-ignore\nimport('@colyseus/bun-websockets')\n .then((module) => BunWebSockets = module)\n .catch(() => { });\n\nexport interface ConfigOptions {\n options?: ServerOptions,\n displayLogs?: boolean,\n getId?: () => string,\n initializeTransport?: (options: any) => Transport,\n initializeExpress?: (app: express.Express) => void,\n initializeGameServer?: (app: Server) => void,\n beforeListen?: () => void,\n}\n\nconst ALLOWED_KEYS: { [key in keyof ConfigOptions]: string } = {\n 'displayLogs': \"boolean\",\n 'options': \"object\",\n 'getId': \"function\",\n 'initializeTransport': \"function\",\n 'initializeExpress': \"function\",\n 'initializeGameServer': \"function\",\n 'beforeListen': \"function\"\n};\n\nexport default function (options: ConfigOptions) {\n for (const option in options) {\n if (!ALLOWED_KEYS[option]) {\n throw new Error(`\u274C Invalid option '${option}'. Allowed options are: ${Object.keys(ALLOWED_KEYS).join(\", \")}`);\n }\n if(options[option] !== undefined && typeof(options[option]) !== ALLOWED_KEYS[option]) {\n throw new Error(`\u274C Invalid type for ${option}: please provide a ${ALLOWED_KEYS[option]} value.`);\n }\n }\n\n return options;\n}\n\n/**\n * Listen on your development environment\n * @param options Application options\n * @param port Port number to bind Colyseus + Express\n */\nexport async function listen(\n options: ConfigOptions | Server,\n port: number = Number(process.env.PORT || 2567),\n) {\n // Force 2567 port on Colyseus Cloud\n if (process.env.COLYSEUS_CLOUD !== undefined) {\n port = 2567;\n }\n\n //\n // Handling multiple processes\n // Use NODE_APP_INSTANCE to play nicely with pm2\n //\n const processNumber = Number(process.env.NODE_APP_INSTANCE || \"0\");\n port += processNumber;\n\n let gameServer: Server;\n let displayLogs = true;\n\n if (options instanceof Server) {\n gameServer = options;\n\n } else {\n gameServer = await buildServerFromOptions(options, port);\n displayLogs = options.displayLogs;\n\n await options.initializeGameServer?.(gameServer);\n await matchMaker.onReady;\n await options.beforeListen?.();\n }\n\n if (process.env.COLYSEUS_CLOUD !== undefined) {\n // listening on socket\n // @ts-ignore\n await gameServer.listen(`/run/colyseus/${port}.sock`);\n\n } else {\n // listening on port\n await gameServer.listen(port);\n }\n\n // notify process manager (production)\n if (typeof(process.send) === \"function\") {\n process.send('ready');\n }\n\n if (displayLogs) {\n logger.info(`\u2694\uFE0F Listening on http://localhost:${port}`);\n }\n\n return gameServer;\n}\n\nasync function buildServerFromOptions(options: ConfigOptions, port: number) {\n const serverOptions = options.options || {};\n options.displayLogs = options.displayLogs ?? true;\n\n // automatically configure for production under Colyseus Cloud\n if (process.env.COLYSEUS_CLOUD !== undefined) {\n // special configuration is required when using multiple processes\n const useRedisConfig = (os.cpus().length > 1) || (process.env.REDIS_URI !== undefined);\n\n if (!serverOptions.driver && useRedisConfig) {\n let RedisDriver: any = undefined;\n try {\n RedisDriver = require('@colyseus/redis-driver').RedisDriver;\n serverOptions.driver = new RedisDriver(process.env.REDIS_URI);\n } catch (e) {\n logger.warn(\"\");\n logger.warn(\"\u274C could not initialize RedisDriver.\");\n logger.warn(\"\uD83D\uDC49 npm install --save @colyseus/redis-driver\");\n logger.warn(\"\");\n }\n }\n\n if (!serverOptions.presence && useRedisConfig) {\n let RedisPresence: any = undefined;\n try {\n RedisPresence = require('@colyseus/redis-presence').RedisPresence;\n serverOptions.presence = new RedisPresence(process.env.REDIS_URI);\n } catch (e) {\n logger.warn(\"\");\n logger.warn(\"\u274C could not initialize RedisPresence.\");\n logger.warn(\"\uD83D\uDC49 npm install --save @colyseus/redis-presence\");\n logger.warn(\"\");\n }\n }\n\n if (useRedisConfig) {\n // force \"publicAddress\" when more than 1 process is available\n serverOptions.publicAddress = process.env.SUBDOMAIN + \".\" + process.env.SERVER_NAME;\n\n // nginx is responsible for forwarding /{port}/ to this process\n serverOptions.publicAddress += \"/\" + port;\n }\n }\n\n const transport = await getTransport(options);\n return new Server({\n ...serverOptions,\n transport,\n });\n}\n\nexport async function getTransport(options: ConfigOptions) {\n let transport: Transport;\n\n if (!options.initializeTransport) {\n if (BunWebSockets !== undefined) {\n // @colyseus/bun-websockets\n options.initializeTransport = (options: any) => new BunWebSockets.BunWebSockets(options);\n\n } else {\n // use WebSocketTransport by default\n options.initializeTransport = (options: any) => new WebSocketTransport(options);\n }\n }\n\n let app: express.Express | undefined = express();\n let server = http.createServer(app);\n\n transport = await options.initializeTransport({ server, app });\n\n //\n // TODO: refactor me!\n // BunWebSockets: There's no need to instantiate \"app\" and \"server\" above\n //\n if (transport['expressApp']) {\n app = transport['expressApp'];\n }\n\n if (app) {\n // Enable CORS\n app.use(cors({ origin: true, credentials: true, }));\n\n // Enable JSON parsing.\n app.use(express.json());\n\n if (options.initializeExpress) {\n await options.initializeExpress(app);\n }\n\n // health check for load balancers\n app.get(\"/__healthcheck\", (req, res) => {\n res.status(200).end();\n });\n\n app.get(\"/__cloudstats\", async (req, res) => {\n if (\n process.env.CLOUD_SECRET &&\n req.headers.authorization !== process.env.CLOUD_SECRET\n ) {\n res.status(401).end();\n return;\n }\n\n // count rooms per process\n const rooms = (await matchMaker.stats.fetchAll()).reduce((prev, curr) => {\n return prev + curr.roomCount;\n }, 0);\n\n const ccu = await matchMaker.stats.getGlobalCCU();\n const mem = await osUtils.mem.used();\n const cpu = (await osUtils.cpu.usage()) / 100;\n\n res.json({\n version: 1,\n mem: (mem.usedMemMb / mem.totalMemMb),\n cpu,\n ccu,\n rooms,\n });\n });\n\n if (options.displayLogs) {\n logger.info(\"\u2705 Express initialized\");\n }\n }\n\n return transport;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["options"]
|
|
7
7
|
}
|
package/build/loadenv.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/loadenv.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from
|
|
4
|
+
"sourcesContent": ["import fs from 'fs';\nimport path from 'path';\nimport dotenv from 'dotenv';\n\nfunction getNodeEnv() {\n return process.env.NODE_ENV || \"development\";\n}\n\nfunction getRegion() {\n // EU, NA, AS, AF, AU, SA, UNKNOWN\n return (process.env.REGION || \"unknown\").toLowerCase();\n}\n\nfunction loadEnvFile(envFileOptions: string[], log: 'none' | 'success' | 'both' = 'none') {\n const envPaths = [];\n envFileOptions.forEach((envFilename) => {\n envPaths.push(path.resolve(path.dirname(require?.main?.filename || process.cwd()), \"..\", envFilename));\n envPaths.push(path.resolve(process.cwd(), envFilename));\n });\n\n // return the first .env path found\n const envPath = envPaths.find((envPath) => fs.existsSync(envPath));\n\n if (envPath) {\n dotenv.config({ path: envPath });\n\n if (log !== \"none\") {\n console.info(`\u2705 ${path.basename(envPath)} loaded.`);\n }\n\n } else if (log === \"both\") {\n console.info(`\u2139\uFE0F optional .env file not found: ${envFileOptions.join(\", \")}`);\n }\n}\n\n// load .env.cloud defined on admin panel\nif (process.env.COLYSEUS_CLOUD !== undefined) {\n loadEnvFile([`.env.cloud`]);\n}\n\n// (overrides previous env configs)\nloadEnvFile([`.env.${getNodeEnv()}`, `.env`], 'both');\n\nif (process.env.REGION !== undefined) {\n loadEnvFile([`.env.${getRegion()}.${getNodeEnv()}`], 'success');\n}"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA,gBAAe;AACf,kBAAiB;AACjB,oBAAmB;AAEnB,SAAS,aAAa;AACpB,SAAO,QAAQ,IAAI,YAAY;AACjC;AAEA,SAAS,YAAY;AAEnB,UAAQ,QAAQ,IAAI,UAAU,WAAW,YAAY;AACvD;AAEA,SAAS,YAAY,gBAA0B,MAAoC,QAAQ;AACvF,QAAM,WAAW,CAAC;AAClB,iBAAe,QAAQ,CAAC,gBAAgB;AACtC,aAAS,KAAK,YAAAA,QAAK,QAAQ,YAAAA,QAAK,QAAQ,SAAS,MAAM,YAAY,QAAQ,IAAI,CAAC,GAAG,MAAM,WAAW,CAAC;AACrG,aAAS,KAAK,YAAAA,QAAK,QAAQ,QAAQ,IAAI,GAAG,WAAW,CAAC;AAAA,EACxD,CAAC;AAGD,QAAM,UAAU,SAAS,KAAK,CAACC,aAAY,UAAAC,QAAG,WAAWD,QAAO,CAAC;AAEjE,MAAI,SAAS;AACT,kBAAAE,QAAO,OAAO,EAAE,MAAM,QAAQ,CAAC;AAE/B,QAAI,QAAQ,QAAQ;AAChB,cAAQ,KAAK,UAAK,YAAAH,QAAK,SAAS,OAAO,CAAC,UAAU;AAAA,IACtD;AAAA,EAEJ,WAAW,QAAQ,QAAQ;AACvB,YAAQ,KAAK,+CAAqC,eAAe,KAAK,IAAI,CAAC,EAAE;AAAA,EACjF;AACJ;AAGA,IAAI,QAAQ,IAAI,mBAAmB,QAAW;AAC1C,cAAY,CAAC,YAAY,CAAC;AAC9B;AAGA,YAAY,CAAC,QAAQ,WAAW,CAAC,IAAI,MAAM,GAAG,MAAM;AAEpD,IAAI,QAAQ,IAAI,WAAW,QAAW;AACpC,cAAY,CAAC,QAAQ,UAAU,CAAC,IAAI,WAAW,CAAC,EAAE,GAAG,SAAS;AAChE;",
|
|
6
6
|
"names": ["path", "envPath", "fs", "dotenv"]
|
|
7
7
|
}
|
package/build/loadenv.mjs
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
|
+
}) : x)(function(x) {
|
|
4
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
5
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
// packages/tools/src/loadenv.ts
|
|
1
9
|
import fs from "fs";
|
|
2
10
|
import path from "path";
|
|
3
11
|
import dotenv from "dotenv";
|
|
@@ -10,7 +18,7 @@ function getRegion() {
|
|
|
10
18
|
function loadEnvFile(envFileOptions, log = "none") {
|
|
11
19
|
const envPaths = [];
|
|
12
20
|
envFileOptions.forEach((envFilename) => {
|
|
13
|
-
envPaths.push(path.resolve(path.dirname(
|
|
21
|
+
envPaths.push(path.resolve(path.dirname(__require?.main?.filename || process.cwd()), "..", envFilename));
|
|
14
22
|
envPaths.push(path.resolve(process.cwd(), envFilename));
|
|
15
23
|
});
|
|
16
24
|
const envPath = envPaths.find((envPath2) => fs.existsSync(envPath2));
|
package/build/loadenv.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/loadenv.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from
|
|
5
|
-
"mappings": "AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAO,YAAY;AAEnB,SAAS,aAAa;AACpB,SAAO,QAAQ,IAAI,YAAY;AACjC;AAEA,SAAS,YAAY;AAEnB,UAAQ,QAAQ,IAAI,UAAU,WAAW,YAAY;AACvD;AAEA,SAAS,YAAY,gBAA0B,MAAoC,QAAQ;AACvF,QAAM,WAAW,CAAC;AAClB,iBAAe,QAAQ,CAAC,gBAAgB;AACtC,aAAS,KAAK,KAAK,QAAQ,KAAK,QAAQ,
|
|
4
|
+
"sourcesContent": ["import fs from 'fs';\nimport path from 'path';\nimport dotenv from 'dotenv';\n\nfunction getNodeEnv() {\n return process.env.NODE_ENV || \"development\";\n}\n\nfunction getRegion() {\n // EU, NA, AS, AF, AU, SA, UNKNOWN\n return (process.env.REGION || \"unknown\").toLowerCase();\n}\n\nfunction loadEnvFile(envFileOptions: string[], log: 'none' | 'success' | 'both' = 'none') {\n const envPaths = [];\n envFileOptions.forEach((envFilename) => {\n envPaths.push(path.resolve(path.dirname(require?.main?.filename || process.cwd()), \"..\", envFilename));\n envPaths.push(path.resolve(process.cwd(), envFilename));\n });\n\n // return the first .env path found\n const envPath = envPaths.find((envPath) => fs.existsSync(envPath));\n\n if (envPath) {\n dotenv.config({ path: envPath });\n\n if (log !== \"none\") {\n console.info(`\u2705 ${path.basename(envPath)} loaded.`);\n }\n\n } else if (log === \"both\") {\n console.info(`\u2139\uFE0F optional .env file not found: ${envFileOptions.join(\", \")}`);\n }\n}\n\n// load .env.cloud defined on admin panel\nif (process.env.COLYSEUS_CLOUD !== undefined) {\n loadEnvFile([`.env.cloud`]);\n}\n\n// (overrides previous env configs)\nloadEnvFile([`.env.${getNodeEnv()}`, `.env`], 'both');\n\nif (process.env.REGION !== undefined) {\n loadEnvFile([`.env.${getRegion()}.${getNodeEnv()}`], 'success');\n}"],
|
|
5
|
+
"mappings": ";;;;;;;;AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAO,YAAY;AAEnB,SAAS,aAAa;AACpB,SAAO,QAAQ,IAAI,YAAY;AACjC;AAEA,SAAS,YAAY;AAEnB,UAAQ,QAAQ,IAAI,UAAU,WAAW,YAAY;AACvD;AAEA,SAAS,YAAY,gBAA0B,MAAoC,QAAQ;AACvF,QAAM,WAAW,CAAC;AAClB,iBAAe,QAAQ,CAAC,gBAAgB;AACtC,aAAS,KAAK,KAAK,QAAQ,KAAK,QAAQ,WAAS,MAAM,YAAY,QAAQ,IAAI,CAAC,GAAG,MAAM,WAAW,CAAC;AACrG,aAAS,KAAK,KAAK,QAAQ,QAAQ,IAAI,GAAG,WAAW,CAAC;AAAA,EACxD,CAAC;AAGD,QAAM,UAAU,SAAS,KAAK,CAACA,aAAY,GAAG,WAAWA,QAAO,CAAC;AAEjE,MAAI,SAAS;AACT,WAAO,OAAO,EAAE,MAAM,QAAQ,CAAC;AAE/B,QAAI,QAAQ,QAAQ;AAChB,cAAQ,KAAK,UAAK,KAAK,SAAS,OAAO,CAAC,UAAU;AAAA,IACtD;AAAA,EAEJ,WAAW,QAAQ,QAAQ;AACvB,YAAQ,KAAK,+CAAqC,eAAe,KAAK,IAAI,CAAC,EAAE;AAAA,EACjF;AACJ;AAGA,IAAI,QAAQ,IAAI,mBAAmB,QAAW;AAC1C,cAAY,CAAC,YAAY,CAAC;AAC9B;AAGA,YAAY,CAAC,QAAQ,WAAW,CAAC,IAAI,MAAM,GAAG,MAAM;AAEpD,IAAI,QAAQ,IAAI,WAAW,QAAW;AACpC,cAAY,CAAC,QAAQ,UAAU,CAAC,IAAI,WAAW,CAAC,EAAE,GAAG,SAAS;AAChE;",
|
|
6
6
|
"names": ["envPath"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@colyseus/tools",
|
|
3
|
-
"version": "0.16.0-preview.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.16.0-preview.3",
|
|
4
|
+
"description": "Simplify the development and production settings for your Colyseus project.",
|
|
5
5
|
"input": "./src/index.ts",
|
|
6
6
|
"main": "./build/index.js",
|
|
7
7
|
"module": "./build/index.mjs",
|
|
8
8
|
"typings": "./build/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./build/index.mjs",
|
|
12
|
+
"require": "./build/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
9
15
|
"bin": {
|
|
10
16
|
"colyseus-system-boot": "system-boot.js",
|
|
11
17
|
"colyseus-post-deploy": "post-deploy.js"
|
|
@@ -41,8 +47,8 @@
|
|
|
41
47
|
"cors": "^2.8.5",
|
|
42
48
|
"dotenv": "^8.2.0",
|
|
43
49
|
"express": "^4.16.2",
|
|
44
|
-
"@colyseus/core": "^0.16.0-preview.
|
|
45
|
-
"@colyseus/ws-transport": "^0.16.0-preview.
|
|
50
|
+
"@colyseus/core": "^0.16.0-preview.30",
|
|
51
|
+
"@colyseus/ws-transport": "^0.16.0-preview.7"
|
|
46
52
|
},
|
|
47
53
|
"publishConfig": {
|
|
48
54
|
"access": "public"
|