@colyseus/tools 0.15.17 → 0.15.19
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.js +9 -6
- package/build/index.js.map +2 -2
- package/build/index.mjs +9 -6
- package/build/index.mjs.map +2 -2
- package/package.json +2 -2
package/build/index.js
CHANGED
|
@@ -101,12 +101,12 @@ async function listen(options, port = Number(process.env.PORT || 2567)) {
|
|
|
101
101
|
const processNumber = Number(process.env.NODE_APP_INSTANCE || "0");
|
|
102
102
|
port += processNumber;
|
|
103
103
|
if (process.env.COLYSEUS_CLOUD !== void 0) {
|
|
104
|
-
const
|
|
105
|
-
if (!serverOptions.driver &&
|
|
104
|
+
const useRedisConfig = import_os.default.cpus().length > 1 || process.env.REDIS_URI !== void 0;
|
|
105
|
+
if (!serverOptions.driver && useRedisConfig) {
|
|
106
106
|
let RedisDriver = void 0;
|
|
107
107
|
try {
|
|
108
108
|
RedisDriver = require("@colyseus/redis-driver").RedisDriver;
|
|
109
|
-
serverOptions.driver = new RedisDriver();
|
|
109
|
+
serverOptions.driver = new RedisDriver(process.env.REDIS_URI);
|
|
110
110
|
} catch (e) {
|
|
111
111
|
import_core.logger.warn("");
|
|
112
112
|
import_core.logger.warn("\u274C coult not initialize RedisDriver.");
|
|
@@ -114,11 +114,11 @@ async function listen(options, port = Number(process.env.PORT || 2567)) {
|
|
|
114
114
|
import_core.logger.warn("");
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
if (!serverOptions.presence &&
|
|
117
|
+
if (!serverOptions.presence && useRedisConfig) {
|
|
118
118
|
let RedisPresence = void 0;
|
|
119
119
|
try {
|
|
120
120
|
RedisPresence = require("@colyseus/redis-presence").RedisPresence;
|
|
121
|
-
serverOptions.presence = new RedisPresence();
|
|
121
|
+
serverOptions.presence = new RedisPresence(process.env.REDIS_URI);
|
|
122
122
|
} catch (e) {
|
|
123
123
|
import_core.logger.warn("");
|
|
124
124
|
import_core.logger.warn("\u274C coult not initialize RedisPresence.");
|
|
@@ -127,7 +127,7 @@ async function listen(options, port = Number(process.env.PORT || 2567)) {
|
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
serverOptions.publicAddress = process.env.SUBDOMAIN + "." + process.env.SERVER_NAME;
|
|
130
|
-
if (
|
|
130
|
+
if (useRedisConfig) {
|
|
131
131
|
serverOptions.publicAddress += "/" + port;
|
|
132
132
|
}
|
|
133
133
|
}
|
|
@@ -159,6 +159,9 @@ async function getTransport(options) {
|
|
|
159
159
|
let app = (0, import_express.default)();
|
|
160
160
|
let server = import_http.default.createServer(app);
|
|
161
161
|
transport = await options.initializeTransport({ server });
|
|
162
|
+
if (transport["expressApp"]) {
|
|
163
|
+
app = transport["expressApp"];
|
|
164
|
+
}
|
|
162
165
|
if (options.initializeExpress) {
|
|
163
166
|
if (transport["app"]) {
|
|
164
167
|
if (typeof uWebSocketsExpressCompatibility === "function") {
|
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 fs from \"fs\";\nimport os from \"os\";\nimport http from \"http\";\nimport path from \"path\";\nimport cors from \"cors\";\nimport express from \"express\";\nimport dotenv from \"dotenv\";\nimport osUtils from \"node-os-utils\";\nimport { logger, Server, ServerOptions, Transport, matchMaker } from '@colyseus/core';\nimport { WebSocketTransport } from '@colyseus/ws-transport';\n\n// try to import uWebSockets-express compatibility layer.\nlet uWebSocketsExpressCompatibility: any;\ntry {\n uWebSocketsExpressCompatibility = require('uwebsockets-express').default;\n} catch (e) {}\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 logger.info(`\u2705 ${path.basename(envPath)} loaded.`);\n }\n\n } else if (log === \"both\") {\n logger.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}\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,\n port: number = Number(process.env.PORT || 2567),\n) {\n const serverOptions = options.options || {};\n options.displayLogs = options.displayLogs ?? true;\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 // 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
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAe;AACf,gBAAe;AACf,kBAAiB;AACjB,kBAAiB;AACjB,kBAAiB;AACjB,qBAAoB;AACpB,oBAAmB;AACnB,2BAAoB;AACpB,kBAAqE;AACrE,0BAAmC;AAGnC,IAAI;AACJ,IAAI;AACF,oCAAkC,QAAQ,qBAAqB,EAAE;AACnE,SAAS,GAAP;AAAW;AAEb,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,yBAAO,KAAK,UAAK,YAAAH,QAAK,SAAS,OAAO,WAAW;AAAA,IACrD;AAAA,EAEJ,WAAW,QAAQ,QAAQ;AACvB,uBAAO,KAAK,+CAAqC,eAAe,KAAK,IAAI,GAAG;AAAA,EAChF;AACJ;AAGA,IAAI,QAAQ,IAAI,mBAAmB,QAAW;AAC1C,cAAY,CAAC,YAAY,CAAC;AAC9B;AAGA,YAAY,CAAC,QAAQ,WAAW,KAAK,MAAM,GAAG,MAAM;AAEpD,IAAI,QAAQ,IAAI,WAAW,QAAW;AACpC,cAAY,CAAC,QAAQ,UAAU,KAAK,WAAW,GAAG,GAAG,SAAS;AAChE;AAYA,MAAM,eAAyD;AAAA,EAC7D,eAAe;AAAA,EACf,WAAW;AAAA,EACX,SAAS;AAAA,EACT,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,gBAAgB;AAClB;AAEe,SAAR,YAAkB,SAAwB;AAC/C,aAAW,UAAU,SAAS;AAC5B,QAAI,CAAC,aAAa,SAAS;AACzB,YAAM,IAAI,MAAM,0BAAqB,iCAAiC,OAAO,KAAK,YAAY,EAAE,KAAK,IAAI,GAAG;AAAA,IAC9G;AACA,QAAG,QAAQ,YAAY,UAAa,OAAO,QAAQ,YAAa,aAAa,SAAS;AACpF,YAAM,IAAI,MAAM,2BAAsB,4BAA4B,aAAa,gBAAgB;AAAA,IACjG;AAAA,EACF;AAEA,SAAO;AACT;AAOA,eAAsB,OAClB,SACA,OAAe,OAAO,QAAQ,IAAI,QAAQ,IAAI,GAChD;AACE,QAAM,gBAAgB,QAAQ,WAAW,CAAC;AAC1C,UAAQ,cAAc,QAAQ,eAAe;AAG7C,MAAI,QAAQ,IAAI,mBAAmB,QAAW;AAC1C,WAAO;AAAA,EACX;AAMA,QAAM,gBAAgB,OAAO,QAAQ,IAAI,qBAAqB,GAAG;AACjE,UAAQ;AAGR,MAAI,QAAQ,IAAI,mBAAmB,QAAW;AAE1C,UAAM,iBAAkB,UAAAI,QAAG,KAAK,EAAE,SAAS;
|
|
4
|
+
"sourcesContent": ["import fs from \"fs\";\nimport os from \"os\";\nimport http from \"http\";\nimport path from \"path\";\nimport cors from \"cors\";\nimport express from \"express\";\nimport dotenv from \"dotenv\";\nimport osUtils from \"node-os-utils\";\nimport { logger, Server, ServerOptions, Transport, matchMaker } from '@colyseus/core';\nimport { WebSocketTransport } from '@colyseus/ws-transport';\n\n// try to import uWebSockets-express compatibility layer.\nlet uWebSocketsExpressCompatibility: any;\ntry {\n uWebSocketsExpressCompatibility = require('uwebsockets-express').default;\n} catch (e) {}\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 logger.info(`\u2705 ${path.basename(envPath)} loaded.`);\n }\n\n } else if (log === \"both\") {\n logger.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}\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,\n port: number = Number(process.env.PORT || 2567),\n) {\n const serverOptions = options.options || {};\n options.displayLogs = options.displayLogs ?? true;\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 // 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 coult 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 coult not initialize RedisPresence.\");\n logger.warn(\"\uD83D\uDC49 npm install --save @colyseus/redis-presence\");\n logger.warn(\"\");\n }\n }\n\n // force \"publicAddress\" when deployed on \"Colyseus Cloud\".\n serverOptions.publicAddress = process.env.SUBDOMAIN + \".\" + process.env.SERVER_NAME;\n\n // nginx is responsible for forwarding /{port}/ to this process\n if (useRedisConfig) {\n serverOptions.publicAddress += \"/\" + port;\n }\n }\n\n const transport = await getTransport(options);\n const gameServer = new Server({\n ...serverOptions,\n transport,\n });\n await options.initializeGameServer?.(gameServer);\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 (options.displayLogs) {\n logger.info(`\u2694\uFE0F Listening on http://localhost:${port}`);\n }\n return gameServer;\n}\n\n\nexport async function getTransport(options: ConfigOptions) {\n let transport: Transport;\n\n if (!options.initializeTransport) {\n // use WebSocketTransport by default\n options.initializeTransport = (options: any) => new WebSocketTransport(options);\n }\n\n let app: express.Express | undefined = express();\n let server = http.createServer(app);\n\n transport = await options.initializeTransport({ server });\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 (options.initializeExpress) {\n // uWebSockets.js + Express compatibility layer.\n // @ts-ignore\n if (transport['app']) {\n if (typeof (uWebSocketsExpressCompatibility) === \"function\") {\n if (options.displayLogs){\n logger.info(\"\u2705 uWebSockets.js + Express compatibility enabled\");\n }\n\n // @ts-ignore\n server = undefined;\n // @ts-ignore\n app = uWebSocketsExpressCompatibility(transport['app']);\n\n } else {\n if (options.displayLogs) {\n logger.warn(\"\");\n logger.warn(\"\u274C uWebSockets.js + Express compatibility mode couldn't be loaded, run the following command to fix:\");\n logger.warn(\"\uD83D\uDC49 npm install --save uwebsockets-express\");\n logger.warn(\"\");\n }\n app = undefined;\n }\n }\n }\n\n if (app) {\n // Enable CORS + JSON parsing.\n app.use(cors());\n app.use(express.json());\n\n if (options.initializeExpress) {\n await options.initializeExpress(app);\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 const roomCountPerProcess = await matchMaker.presence.hgetall(\"roomcount\");\n let rooms = 0;\n for (const processId in roomCountPerProcess) {\n rooms += Number(roomCountPerProcess[processId]);\n }\n\n const ccu = await matchMaker.presence.get(\"_ccu\");\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": ["path", "envPath", "fs", "dotenv", "os", "options", "express", "http", "cors", "osUtils"]
|
|
7
7
|
}
|
package/build/index.mjs
CHANGED
|
@@ -71,12 +71,12 @@ async function listen(options, port = Number(process.env.PORT || 2567)) {
|
|
|
71
71
|
const processNumber = Number(process.env.NODE_APP_INSTANCE || "0");
|
|
72
72
|
port += processNumber;
|
|
73
73
|
if (process.env.COLYSEUS_CLOUD !== void 0) {
|
|
74
|
-
const
|
|
75
|
-
if (!serverOptions.driver &&
|
|
74
|
+
const useRedisConfig = os.cpus().length > 1 || process.env.REDIS_URI !== void 0;
|
|
75
|
+
if (!serverOptions.driver && useRedisConfig) {
|
|
76
76
|
let RedisDriver = void 0;
|
|
77
77
|
try {
|
|
78
78
|
RedisDriver = require("@colyseus/redis-driver").RedisDriver;
|
|
79
|
-
serverOptions.driver = new RedisDriver();
|
|
79
|
+
serverOptions.driver = new RedisDriver(process.env.REDIS_URI);
|
|
80
80
|
} catch (e) {
|
|
81
81
|
logger.warn("");
|
|
82
82
|
logger.warn("\u274C coult not initialize RedisDriver.");
|
|
@@ -84,11 +84,11 @@ async function listen(options, port = Number(process.env.PORT || 2567)) {
|
|
|
84
84
|
logger.warn("");
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
|
-
if (!serverOptions.presence &&
|
|
87
|
+
if (!serverOptions.presence && useRedisConfig) {
|
|
88
88
|
let RedisPresence = void 0;
|
|
89
89
|
try {
|
|
90
90
|
RedisPresence = require("@colyseus/redis-presence").RedisPresence;
|
|
91
|
-
serverOptions.presence = new RedisPresence();
|
|
91
|
+
serverOptions.presence = new RedisPresence(process.env.REDIS_URI);
|
|
92
92
|
} catch (e) {
|
|
93
93
|
logger.warn("");
|
|
94
94
|
logger.warn("\u274C coult not initialize RedisPresence.");
|
|
@@ -97,7 +97,7 @@ async function listen(options, port = Number(process.env.PORT || 2567)) {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
serverOptions.publicAddress = process.env.SUBDOMAIN + "." + process.env.SERVER_NAME;
|
|
100
|
-
if (
|
|
100
|
+
if (useRedisConfig) {
|
|
101
101
|
serverOptions.publicAddress += "/" + port;
|
|
102
102
|
}
|
|
103
103
|
}
|
|
@@ -129,6 +129,9 @@ async function getTransport(options) {
|
|
|
129
129
|
let app = express();
|
|
130
130
|
let server = http.createServer(app);
|
|
131
131
|
transport = await options.initializeTransport({ server });
|
|
132
|
+
if (transport["expressApp"]) {
|
|
133
|
+
app = transport["expressApp"];
|
|
134
|
+
}
|
|
132
135
|
if (options.initializeExpress) {
|
|
133
136
|
if (transport["app"]) {
|
|
134
137
|
if (typeof uWebSocketsExpressCompatibility === "function") {
|
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 fs from \"fs\";\nimport os from \"os\";\nimport http from \"http\";\nimport path from \"path\";\nimport cors from \"cors\";\nimport express from \"express\";\nimport dotenv from \"dotenv\";\nimport osUtils from \"node-os-utils\";\nimport { logger, Server, ServerOptions, Transport, matchMaker } from '@colyseus/core';\nimport { WebSocketTransport } from '@colyseus/ws-transport';\n\n// try to import uWebSockets-express compatibility layer.\nlet uWebSocketsExpressCompatibility: any;\ntry {\n uWebSocketsExpressCompatibility = require('uwebsockets-express').default;\n} catch (e) {}\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 logger.info(`\u2705 ${path.basename(envPath)} loaded.`);\n }\n\n } else if (log === \"both\") {\n logger.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}\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,\n port: number = Number(process.env.PORT || 2567),\n) {\n const serverOptions = options.options || {};\n options.displayLogs = options.displayLogs ?? true;\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 // 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
|
|
5
|
-
"mappings": "AAAA,OAAO,QAAQ;AACf,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAO,UAAU;AACjB,OAAO,UAAU;AACjB,OAAO,aAAa;AACpB,OAAO,YAAY;AACnB,OAAO,aAAa;AACpB,SAAS,QAAQ,QAAkC,kBAAkB;AACrE,SAAS,0BAA0B;AAGnC,IAAI;AACJ,IAAI;AACF,oCAAkC,QAAQ,qBAAqB,EAAE;AACnE,SAAS,GAAP;AAAW;AAEb,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,SAAS,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,aAAO,KAAK,UAAK,KAAK,SAAS,OAAO,WAAW;AAAA,IACrD;AAAA,EAEJ,WAAW,QAAQ,QAAQ;AACvB,WAAO,KAAK,+CAAqC,eAAe,KAAK,IAAI,GAAG;AAAA,EAChF;AACJ;AAGA,IAAI,QAAQ,IAAI,mBAAmB,QAAW;AAC1C,cAAY,CAAC,YAAY,CAAC;AAC9B;AAGA,YAAY,CAAC,QAAQ,WAAW,KAAK,MAAM,GAAG,MAAM;AAEpD,IAAI,QAAQ,IAAI,WAAW,QAAW;AACpC,cAAY,CAAC,QAAQ,UAAU,KAAK,WAAW,GAAG,GAAG,SAAS;AAChE;AAYA,MAAM,eAAyD;AAAA,EAC7D,eAAe;AAAA,EACf,WAAW;AAAA,EACX,SAAS;AAAA,EACT,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,gBAAgB;AAClB;AAEe,SAAR,YAAkB,SAAwB;AAC/C,aAAW,UAAU,SAAS;AAC5B,QAAI,CAAC,aAAa,SAAS;AACzB,YAAM,IAAI,MAAM,0BAAqB,iCAAiC,OAAO,KAAK,YAAY,EAAE,KAAK,IAAI,GAAG;AAAA,IAC9G;AACA,QAAG,QAAQ,YAAY,UAAa,OAAO,QAAQ,YAAa,aAAa,SAAS;AACpF,YAAM,IAAI,MAAM,2BAAsB,4BAA4B,aAAa,gBAAgB;AAAA,IACjG;AAAA,EACF;AAEA,SAAO;AACT;AAOA,eAAsB,OAClB,SACA,OAAe,OAAO,QAAQ,IAAI,QAAQ,IAAI,GAChD;AACE,QAAM,gBAAgB,QAAQ,WAAW,CAAC;AAC1C,UAAQ,cAAc,QAAQ,eAAe;AAG7C,MAAI,QAAQ,IAAI,mBAAmB,QAAW;AAC1C,WAAO;AAAA,EACX;AAMA,QAAM,gBAAgB,OAAO,QAAQ,IAAI,qBAAqB,GAAG;AACjE,UAAQ;AAGR,MAAI,QAAQ,IAAI,mBAAmB,QAAW;AAE1C,UAAM,iBAAkB,GAAG,KAAK,EAAE,SAAS;
|
|
4
|
+
"sourcesContent": ["import fs from \"fs\";\nimport os from \"os\";\nimport http from \"http\";\nimport path from \"path\";\nimport cors from \"cors\";\nimport express from \"express\";\nimport dotenv from \"dotenv\";\nimport osUtils from \"node-os-utils\";\nimport { logger, Server, ServerOptions, Transport, matchMaker } from '@colyseus/core';\nimport { WebSocketTransport } from '@colyseus/ws-transport';\n\n// try to import uWebSockets-express compatibility layer.\nlet uWebSocketsExpressCompatibility: any;\ntry {\n uWebSocketsExpressCompatibility = require('uwebsockets-express').default;\n} catch (e) {}\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 logger.info(`\u2705 ${path.basename(envPath)} loaded.`);\n }\n\n } else if (log === \"both\") {\n logger.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}\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,\n port: number = Number(process.env.PORT || 2567),\n) {\n const serverOptions = options.options || {};\n options.displayLogs = options.displayLogs ?? true;\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 // 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 coult 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 coult not initialize RedisPresence.\");\n logger.warn(\"\uD83D\uDC49 npm install --save @colyseus/redis-presence\");\n logger.warn(\"\");\n }\n }\n\n // force \"publicAddress\" when deployed on \"Colyseus Cloud\".\n serverOptions.publicAddress = process.env.SUBDOMAIN + \".\" + process.env.SERVER_NAME;\n\n // nginx is responsible for forwarding /{port}/ to this process\n if (useRedisConfig) {\n serverOptions.publicAddress += \"/\" + port;\n }\n }\n\n const transport = await getTransport(options);\n const gameServer = new Server({\n ...serverOptions,\n transport,\n });\n await options.initializeGameServer?.(gameServer);\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 (options.displayLogs) {\n logger.info(`\u2694\uFE0F Listening on http://localhost:${port}`);\n }\n return gameServer;\n}\n\n\nexport async function getTransport(options: ConfigOptions) {\n let transport: Transport;\n\n if (!options.initializeTransport) {\n // use WebSocketTransport by default\n options.initializeTransport = (options: any) => new WebSocketTransport(options);\n }\n\n let app: express.Express | undefined = express();\n let server = http.createServer(app);\n\n transport = await options.initializeTransport({ server });\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 (options.initializeExpress) {\n // uWebSockets.js + Express compatibility layer.\n // @ts-ignore\n if (transport['app']) {\n if (typeof (uWebSocketsExpressCompatibility) === \"function\") {\n if (options.displayLogs){\n logger.info(\"\u2705 uWebSockets.js + Express compatibility enabled\");\n }\n\n // @ts-ignore\n server = undefined;\n // @ts-ignore\n app = uWebSocketsExpressCompatibility(transport['app']);\n\n } else {\n if (options.displayLogs) {\n logger.warn(\"\");\n logger.warn(\"\u274C uWebSockets.js + Express compatibility mode couldn't be loaded, run the following command to fix:\");\n logger.warn(\"\uD83D\uDC49 npm install --save uwebsockets-express\");\n logger.warn(\"\");\n }\n app = undefined;\n }\n }\n }\n\n if (app) {\n // Enable CORS + JSON parsing.\n app.use(cors());\n app.use(express.json());\n\n if (options.initializeExpress) {\n await options.initializeExpress(app);\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 const roomCountPerProcess = await matchMaker.presence.hgetall(\"roomcount\");\n let rooms = 0;\n for (const processId in roomCountPerProcess) {\n rooms += Number(roomCountPerProcess[processId]);\n }\n\n const ccu = await matchMaker.presence.get(\"_ccu\");\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": ["envPath", "options"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@colyseus/tools",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.19",
|
|
4
4
|
"description": "Colyseus Tools for Production",
|
|
5
5
|
"input": "./src/index.ts",
|
|
6
6
|
"main": "./build/index.js",
|
|
@@ -50,5 +50,5 @@
|
|
|
50
50
|
"publishConfig": {
|
|
51
51
|
"access": "public"
|
|
52
52
|
},
|
|
53
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "45e71fef81d12583a6e925982567aa4e7aca215f"
|
|
54
54
|
}
|