@common-stack/server-stack 9.0.2-alpha.3 → 9.0.2-alpha.8
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/lib/MainStackServer.cjs +75 -24
- package/lib/MainStackServer.cjs.map +1 -1
- package/lib/MainStackServer.mjs +75 -24
- package/lib/MainStackServer.mjs.map +1 -1
- package/lib/config/env-config.cjs +3 -0
- package/lib/config/env-config.cjs.map +1 -1
- package/lib/config/env-config.mjs +3 -0
- package/lib/config/env-config.mjs.map +1 -1
- package/lib/express-adapter.cjs +73 -0
- package/lib/express-adapter.cjs.map +1 -0
- package/lib/express-adapter.mjs +73 -0
- package/lib/express-adapter.mjs.map +1 -0
- package/lib/servers/ExpressApp.cjs +4 -4
- package/lib/servers/ExpressApp.cjs.map +1 -1
- package/lib/servers/ExpressApp.mjs +3 -3
- package/lib/servers/ExpressApp.mjs.map +1 -1
- package/lib/servers/GraphqlServer.cjs +30 -18
- package/lib/servers/GraphqlServer.cjs.map +1 -1
- package/lib/servers/GraphqlServer.mjs +29 -17
- package/lib/servers/GraphqlServer.mjs.map +1 -1
- package/lib/servers/GraphqlWs.cjs +10 -1
- package/lib/servers/GraphqlWs.cjs.map +1 -1
- package/lib/servers/GraphqlWs.mjs +10 -1
- package/lib/servers/GraphqlWs.mjs.map +1 -1
- package/lib/servers/WebsocketMultipathUpdate.cjs +39 -38
- package/lib/servers/WebsocketMultipathUpdate.cjs.map +1 -1
- package/lib/servers/WebsocketMultipathUpdate.mjs +38 -37
- package/lib/servers/WebsocketMultipathUpdate.mjs.map +1 -1
- package/package.json +7 -7
package/lib/MainStackServer.cjs
CHANGED
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
'use strict';require('reflect-metadata');var
|
|
1
|
+
'use strict';require('reflect-metadata');var expressAdapter=require('./express-adapter.cjs'),server=require('@cdm-logger/server'),serverCore=require('@common-stack/server-core'),_=require('lodash-es'),graphqlModule=require('@common-stack/graphql-api/lib/module.js'),ExpressApp=require('./servers/ExpressApp.cjs'),GraphqlServer=require('./servers/GraphqlServer.cjs'),envConfig=require('./config/env-config.cjs'),schemaBuilder=require('./api/schema-builder.cjs'),WebsocketMultipathUpdate=require('./servers/WebsocketMultipathUpdate.cjs'),migrations=require('./utils/migrations.cjs');require('graphql');var subGraphSchemaBuilder=require('./api/sub-graph-schema-builder.cjs'),setup=require('./inngest/setup.cjs');require('inversify'),require('common/server'),require('@common-stack/core');var infrastructureFactory=require('./infrastructure/infrastructure-factory.cjs');require('inngest');/* eslint-disable import/namespace */
|
|
2
2
|
/* eslint-disable import/no-unresolved */
|
|
3
3
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
4
4
|
// version 08/25/2021
|
|
5
5
|
const graphqlApiFeature = graphqlModule.default ?? graphqlModule;
|
|
6
|
-
function startListening(port) {
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
8
|
-
const server = this;
|
|
9
|
-
return new Promise((resolve) => {
|
|
10
|
-
server.listen(port, resolve);
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
6
|
/**
|
|
14
7
|
* Controls the lifecycle of the Application Server
|
|
15
8
|
*
|
|
@@ -17,8 +10,16 @@ function startListening(port) {
|
|
|
17
10
|
* @class StackServer
|
|
18
11
|
*/
|
|
19
12
|
class MainStackServer {
|
|
20
|
-
httpServer;
|
|
21
13
|
app;
|
|
14
|
+
/**
|
|
15
|
+
* The underlying HTTP server.
|
|
16
|
+
* - ultimate-express: null (uWebSockets.js manages the server internally)
|
|
17
|
+
* - classic express: http.Server from http.createServer(app)
|
|
18
|
+
*
|
|
19
|
+
* Also provides backward-compatible startListening() and close() methods.
|
|
20
|
+
*/
|
|
21
|
+
httpServer;
|
|
22
|
+
listenSocket;
|
|
22
23
|
logger;
|
|
23
24
|
infrastructureFactory;
|
|
24
25
|
mainServiceContext;
|
|
@@ -79,8 +80,18 @@ class MainStackServer {
|
|
|
79
80
|
await originalStart();
|
|
80
81
|
// Use main container if microservice container is null (due to module reuse)
|
|
81
82
|
const containerToUse = this.microserviceContext.container || this.mainServiceContext.container;
|
|
82
|
-
|
|
83
|
-
|
|
83
|
+
try {
|
|
84
|
+
await this.serverFeature.microservicePreStart(containerToUse);
|
|
85
|
+
}
|
|
86
|
+
catch (preStartErr) {
|
|
87
|
+
this.logger.error('Error in microservicePreStart hooks:', preStartErr);
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
await this.serverFeature.microservicePostStart(containerToUse);
|
|
91
|
+
}
|
|
92
|
+
catch (postStartErr) {
|
|
93
|
+
this.logger.error('Error in microservicePostStart hooks:', postStartErr);
|
|
94
|
+
}
|
|
84
95
|
};
|
|
85
96
|
}
|
|
86
97
|
async setupGraphQLSchema() {
|
|
@@ -151,28 +162,37 @@ class MainStackServer {
|
|
|
151
162
|
}
|
|
152
163
|
async setupHttpServer() {
|
|
153
164
|
const { context } = this.mainServiceContext;
|
|
154
|
-
// Initialize
|
|
155
|
-
|
|
165
|
+
// Initialize Express app using the configured engine (ultimate-express or classic express)
|
|
166
|
+
// The adapter selects the engine based on EXPRESS_ENGINE env var.
|
|
156
167
|
// Pass Redis client to expressApp so it can be attached at the very top of middleware stack
|
|
157
|
-
this.app = await ExpressApp.expressApp(this.allModules, this.serviceBroker, null,
|
|
168
|
+
this.app = await ExpressApp.expressApp(this.allModules, this.serviceBroker, null, undefined, context.redisClient);
|
|
169
|
+
// Create HTTP server (null for ultimate-express, http.Server for classic express)
|
|
170
|
+
const rawHttpServer = expressAdapter.createHttpServer(this.app);
|
|
171
|
+
// Provide backward-compatible httpServer with startListening() and close()
|
|
172
|
+
this.httpServer = Object.assign(rawHttpServer || {}, {
|
|
173
|
+
startListening: (port) => this.startListening(port),
|
|
174
|
+
close: () => {
|
|
175
|
+
if (rawHttpServer) {
|
|
176
|
+
rawHttpServer.close();
|
|
177
|
+
}
|
|
178
|
+
// ultimate-express handles cleanup internally
|
|
179
|
+
},
|
|
180
|
+
});
|
|
158
181
|
// Register existing express middleware (Redis client middleware is already attached in expressApp)
|
|
159
182
|
this.allModules.registerExpressMiddleware(this.app, this.mainServiceContext.container);
|
|
160
183
|
// Setup Inngest functions
|
|
161
184
|
setup.setupInngestFunctions(this.allModules, this.app, this.mainServiceContext.container, this.logger);
|
|
162
|
-
this.httpServer.startListening = startListening.bind(this.httpServer);
|
|
163
|
-
this.httpServer.on('request', this.app);
|
|
164
|
-
this.httpServer.on('close', () => {
|
|
165
|
-
this.httpServer = undefined;
|
|
166
|
-
});
|
|
167
185
|
// Setup WebSocket if configured
|
|
168
186
|
const customWebsocket = this.allModules.getWebsocketConfig();
|
|
169
187
|
const customWebsocketEnable = !_.isEmpty(customWebsocket);
|
|
170
188
|
if (customWebsocketEnable) {
|
|
171
|
-
this.multiPathWebsocket = new WebsocketMultipathUpdate.WebsocketMultiPathServer(this.serviceBroker, context.redisClient, customWebsocket);
|
|
172
|
-
this.httpServer = this.multiPathWebsocket.httpServerUpgrade(this.httpServer);
|
|
189
|
+
this.multiPathWebsocket = new WebsocketMultipathUpdate.WebsocketMultiPathServer(this.serviceBroker, context.redisClient, expressAdapter.isUltimateEngine ? this.app : rawHttpServer, customWebsocket);
|
|
173
190
|
}
|
|
174
191
|
// Setup GraphQL server
|
|
175
|
-
|
|
192
|
+
// Pass the appropriate server object based on engine:
|
|
193
|
+
// - ultimate-express: pass the app (WebSocket servers bind via { server: app })
|
|
194
|
+
// - classic express: pass the httpServer (WebSocket servers bind via { server: httpServer })
|
|
195
|
+
const graphqlServer = new GraphqlServer.GraphqlServer(this.app, expressAdapter.isUltimateEngine ? this.app : rawHttpServer, context.redisClient, this.serviceBroker, !customWebsocketEnable, this.allModules.apolloCacheKeyGenerator.bind(this.allModules), this.allModules.apolloInvalidateCacheKeyGenerator.bind(this.allModules), this.allModules.graphqlPlugins);
|
|
176
196
|
await graphqlServer.initialize();
|
|
177
197
|
this.app.use('/graphql', (req, res, next) => {
|
|
178
198
|
res.append('Access-Control-Allow-Credentials', JSON.stringify(true));
|
|
@@ -182,9 +202,39 @@ class MainStackServer {
|
|
|
182
202
|
next();
|
|
183
203
|
});
|
|
184
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* Start listening on the given port.
|
|
207
|
+
* - ultimate-express: uses the built-in high-performance uWebSockets.js server
|
|
208
|
+
* - classic express: uses http.Server.listen()
|
|
209
|
+
*/
|
|
210
|
+
startListening(port) {
|
|
211
|
+
return new Promise((resolve) => {
|
|
212
|
+
const server = expressAdapter.isUltimateEngine ? this.app : this.httpServer;
|
|
213
|
+
server.listen(port, () => {
|
|
214
|
+
this.logger.info('Server listening on port %d (engine: %s)', port, expressAdapter.isUltimateEngine ? 'ultimate-express' : 'express');
|
|
215
|
+
resolve();
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
}
|
|
185
219
|
async start() {
|
|
186
220
|
if (envConfig.config.NODE_ENV === 'development' && this.microserviceContext) {
|
|
221
|
+
// Start both brokers in parallel to avoid blocking on service dependencies
|
|
222
|
+
// Services on one broker may depend on services on the other broker
|
|
187
223
|
await Promise.all([this.mainServiceContext.broker.start(), this.microserviceContext.broker.start()]);
|
|
224
|
+
// Wait for service discovery between brokers
|
|
225
|
+
// The TCP transporter needs time to discover services from other nodes
|
|
226
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
227
|
+
// Now run migrations after both brokers are fully started
|
|
228
|
+
// This ensures all Moleculer services (like MailerService) are available
|
|
229
|
+
try {
|
|
230
|
+
this.logger.info('Starting Migration');
|
|
231
|
+
await migrations.migrate(this.mainServiceContext.context.mongoClient, this.mainServiceContext.container, this.logger);
|
|
232
|
+
this.logger.info('End Migration');
|
|
233
|
+
}
|
|
234
|
+
catch (e) {
|
|
235
|
+
this.logger.error('Error while running migrations', e);
|
|
236
|
+
this.logger.error(e.stack);
|
|
237
|
+
}
|
|
188
238
|
}
|
|
189
239
|
else {
|
|
190
240
|
await this.mainServiceContext.broker.start();
|
|
@@ -207,8 +257,9 @@ class MainStackServer {
|
|
|
207
257
|
if (this.multiPathWebsocket) {
|
|
208
258
|
this.multiPathWebsocket.close();
|
|
209
259
|
}
|
|
210
|
-
if
|
|
211
|
-
|
|
260
|
+
// Close HTTP server if using classic express
|
|
261
|
+
if (this.httpServer && typeof this.httpServer.close === 'function') {
|
|
262
|
+
this.httpServer.close();
|
|
212
263
|
}
|
|
213
264
|
if (this.infrastructureFactory) {
|
|
214
265
|
await this.infrastructureFactory.cleanup();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MainStackServer.cjs","sources":["../src/MainStackServer.ts"],"sourcesContent":[null],"names":["serverLogger","InfrastructureFactory","config","Feature","SubGraphSchemaBuilder","GatewaySchemaBuilder","merge","
|
|
1
|
+
{"version":3,"file":"MainStackServer.cjs","sources":["../src/MainStackServer.ts"],"sourcesContent":[null],"names":["serverLogger","InfrastructureFactory","config","Feature","SubGraphSchemaBuilder","GatewaySchemaBuilder","merge","expressApp","createHttpServer","setupInngestFunctions","isEmpty","WebsocketMultiPathServer","isUltimateEngine","GraphqlServer","migrate"],"mappings":"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"}
|
package/lib/MainStackServer.mjs
CHANGED
|
@@ -1,15 +1,8 @@
|
|
|
1
|
-
import'reflect-metadata';import
|
|
1
|
+
import'reflect-metadata';import {createHttpServer,isUltimateEngine}from'./express-adapter.mjs';import {logger}from'@cdm-logger/server';import {Feature}from'@common-stack/server-core';import {isEmpty,merge}from'lodash-es';import graphqlModule from'@common-stack/graphql-api/lib/module.js';import {expressApp}from'./servers/ExpressApp.mjs';import {GraphqlServer}from'./servers/GraphqlServer.mjs';import {config}from'./config/env-config.mjs';import {GatewaySchemaBuilder}from'./api/schema-builder.mjs';import {WebsocketMultiPathServer}from'./servers/WebsocketMultipathUpdate.mjs';import {migrate}from'./utils/migrations.mjs';import'graphql';import {SubGraphSchemaBuilder}from'./api/sub-graph-schema-builder.mjs';import {setupInngestFunctions}from'./inngest/setup.mjs';import'inversify';import'common/server';import'@common-stack/core';import {InfrastructureFactory}from'./infrastructure/infrastructure-factory.mjs';import'inngest';/* eslint-disable import/namespace */
|
|
2
2
|
/* eslint-disable import/no-unresolved */
|
|
3
3
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
4
4
|
// version 08/25/2021
|
|
5
5
|
const graphqlApiFeature = graphqlModule.default ?? graphqlModule;
|
|
6
|
-
function startListening(port) {
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
8
|
-
const server = this;
|
|
9
|
-
return new Promise((resolve) => {
|
|
10
|
-
server.listen(port, resolve);
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
6
|
/**
|
|
14
7
|
* Controls the lifecycle of the Application Server
|
|
15
8
|
*
|
|
@@ -17,8 +10,16 @@ function startListening(port) {
|
|
|
17
10
|
* @class StackServer
|
|
18
11
|
*/
|
|
19
12
|
class MainStackServer {
|
|
20
|
-
httpServer;
|
|
21
13
|
app;
|
|
14
|
+
/**
|
|
15
|
+
* The underlying HTTP server.
|
|
16
|
+
* - ultimate-express: null (uWebSockets.js manages the server internally)
|
|
17
|
+
* - classic express: http.Server from http.createServer(app)
|
|
18
|
+
*
|
|
19
|
+
* Also provides backward-compatible startListening() and close() methods.
|
|
20
|
+
*/
|
|
21
|
+
httpServer;
|
|
22
|
+
listenSocket;
|
|
22
23
|
logger;
|
|
23
24
|
infrastructureFactory;
|
|
24
25
|
mainServiceContext;
|
|
@@ -79,8 +80,18 @@ class MainStackServer {
|
|
|
79
80
|
await originalStart();
|
|
80
81
|
// Use main container if microservice container is null (due to module reuse)
|
|
81
82
|
const containerToUse = this.microserviceContext.container || this.mainServiceContext.container;
|
|
82
|
-
|
|
83
|
-
|
|
83
|
+
try {
|
|
84
|
+
await this.serverFeature.microservicePreStart(containerToUse);
|
|
85
|
+
}
|
|
86
|
+
catch (preStartErr) {
|
|
87
|
+
this.logger.error('Error in microservicePreStart hooks:', preStartErr);
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
await this.serverFeature.microservicePostStart(containerToUse);
|
|
91
|
+
}
|
|
92
|
+
catch (postStartErr) {
|
|
93
|
+
this.logger.error('Error in microservicePostStart hooks:', postStartErr);
|
|
94
|
+
}
|
|
84
95
|
};
|
|
85
96
|
}
|
|
86
97
|
async setupGraphQLSchema() {
|
|
@@ -151,28 +162,37 @@ class MainStackServer {
|
|
|
151
162
|
}
|
|
152
163
|
async setupHttpServer() {
|
|
153
164
|
const { context } = this.mainServiceContext;
|
|
154
|
-
// Initialize
|
|
155
|
-
|
|
165
|
+
// Initialize Express app using the configured engine (ultimate-express or classic express)
|
|
166
|
+
// The adapter selects the engine based on EXPRESS_ENGINE env var.
|
|
156
167
|
// Pass Redis client to expressApp so it can be attached at the very top of middleware stack
|
|
157
|
-
this.app = await expressApp(this.allModules, this.serviceBroker, null,
|
|
168
|
+
this.app = await expressApp(this.allModules, this.serviceBroker, null, undefined, context.redisClient);
|
|
169
|
+
// Create HTTP server (null for ultimate-express, http.Server for classic express)
|
|
170
|
+
const rawHttpServer = createHttpServer(this.app);
|
|
171
|
+
// Provide backward-compatible httpServer with startListening() and close()
|
|
172
|
+
this.httpServer = Object.assign(rawHttpServer || {}, {
|
|
173
|
+
startListening: (port) => this.startListening(port),
|
|
174
|
+
close: () => {
|
|
175
|
+
if (rawHttpServer) {
|
|
176
|
+
rawHttpServer.close();
|
|
177
|
+
}
|
|
178
|
+
// ultimate-express handles cleanup internally
|
|
179
|
+
},
|
|
180
|
+
});
|
|
158
181
|
// Register existing express middleware (Redis client middleware is already attached in expressApp)
|
|
159
182
|
this.allModules.registerExpressMiddleware(this.app, this.mainServiceContext.container);
|
|
160
183
|
// Setup Inngest functions
|
|
161
184
|
setupInngestFunctions(this.allModules, this.app, this.mainServiceContext.container, this.logger);
|
|
162
|
-
this.httpServer.startListening = startListening.bind(this.httpServer);
|
|
163
|
-
this.httpServer.on('request', this.app);
|
|
164
|
-
this.httpServer.on('close', () => {
|
|
165
|
-
this.httpServer = undefined;
|
|
166
|
-
});
|
|
167
185
|
// Setup WebSocket if configured
|
|
168
186
|
const customWebsocket = this.allModules.getWebsocketConfig();
|
|
169
187
|
const customWebsocketEnable = !isEmpty(customWebsocket);
|
|
170
188
|
if (customWebsocketEnable) {
|
|
171
|
-
this.multiPathWebsocket = new WebsocketMultiPathServer(this.serviceBroker, context.redisClient, customWebsocket);
|
|
172
|
-
this.httpServer = this.multiPathWebsocket.httpServerUpgrade(this.httpServer);
|
|
189
|
+
this.multiPathWebsocket = new WebsocketMultiPathServer(this.serviceBroker, context.redisClient, isUltimateEngine ? this.app : rawHttpServer, customWebsocket);
|
|
173
190
|
}
|
|
174
191
|
// Setup GraphQL server
|
|
175
|
-
|
|
192
|
+
// Pass the appropriate server object based on engine:
|
|
193
|
+
// - ultimate-express: pass the app (WebSocket servers bind via { server: app })
|
|
194
|
+
// - classic express: pass the httpServer (WebSocket servers bind via { server: httpServer })
|
|
195
|
+
const graphqlServer = new GraphqlServer(this.app, isUltimateEngine ? this.app : rawHttpServer, context.redisClient, this.serviceBroker, !customWebsocketEnable, this.allModules.apolloCacheKeyGenerator.bind(this.allModules), this.allModules.apolloInvalidateCacheKeyGenerator.bind(this.allModules), this.allModules.graphqlPlugins);
|
|
176
196
|
await graphqlServer.initialize();
|
|
177
197
|
this.app.use('/graphql', (req, res, next) => {
|
|
178
198
|
res.append('Access-Control-Allow-Credentials', JSON.stringify(true));
|
|
@@ -182,9 +202,39 @@ class MainStackServer {
|
|
|
182
202
|
next();
|
|
183
203
|
});
|
|
184
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* Start listening on the given port.
|
|
207
|
+
* - ultimate-express: uses the built-in high-performance uWebSockets.js server
|
|
208
|
+
* - classic express: uses http.Server.listen()
|
|
209
|
+
*/
|
|
210
|
+
startListening(port) {
|
|
211
|
+
return new Promise((resolve) => {
|
|
212
|
+
const server = isUltimateEngine ? this.app : this.httpServer;
|
|
213
|
+
server.listen(port, () => {
|
|
214
|
+
this.logger.info('Server listening on port %d (engine: %s)', port, isUltimateEngine ? 'ultimate-express' : 'express');
|
|
215
|
+
resolve();
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
}
|
|
185
219
|
async start() {
|
|
186
220
|
if (config.NODE_ENV === 'development' && this.microserviceContext) {
|
|
221
|
+
// Start both brokers in parallel to avoid blocking on service dependencies
|
|
222
|
+
// Services on one broker may depend on services on the other broker
|
|
187
223
|
await Promise.all([this.mainServiceContext.broker.start(), this.microserviceContext.broker.start()]);
|
|
224
|
+
// Wait for service discovery between brokers
|
|
225
|
+
// The TCP transporter needs time to discover services from other nodes
|
|
226
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
227
|
+
// Now run migrations after both brokers are fully started
|
|
228
|
+
// This ensures all Moleculer services (like MailerService) are available
|
|
229
|
+
try {
|
|
230
|
+
this.logger.info('Starting Migration');
|
|
231
|
+
await migrate(this.mainServiceContext.context.mongoClient, this.mainServiceContext.container, this.logger);
|
|
232
|
+
this.logger.info('End Migration');
|
|
233
|
+
}
|
|
234
|
+
catch (e) {
|
|
235
|
+
this.logger.error('Error while running migrations', e);
|
|
236
|
+
this.logger.error(e.stack);
|
|
237
|
+
}
|
|
188
238
|
}
|
|
189
239
|
else {
|
|
190
240
|
await this.mainServiceContext.broker.start();
|
|
@@ -207,8 +257,9 @@ class MainStackServer {
|
|
|
207
257
|
if (this.multiPathWebsocket) {
|
|
208
258
|
this.multiPathWebsocket.close();
|
|
209
259
|
}
|
|
210
|
-
if
|
|
211
|
-
|
|
260
|
+
// Close HTTP server if using classic express
|
|
261
|
+
if (this.httpServer && typeof this.httpServer.close === 'function') {
|
|
262
|
+
this.httpServer.close();
|
|
212
263
|
}
|
|
213
264
|
if (this.infrastructureFactory) {
|
|
214
265
|
await this.infrastructureFactory.cleanup();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MainStackServer.mjs","sources":["../src/MainStackServer.ts"],"sourcesContent":[null],"names":["serverLogger"],"mappings":"
|
|
1
|
+
{"version":3,"file":"MainStackServer.mjs","sources":["../src/MainStackServer.ts"],"sourcesContent":[null],"names":["serverLogger"],"mappings":"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"}
|
|
@@ -51,6 +51,9 @@ const config = envalid__namespace.cleanEnv(process.env,
|
|
|
51
51
|
INNGEST_CLIENT_ID: str({ devDefault: '', default: '' }),
|
|
52
52
|
// Stable application ID used for Inngest client registration across deployments
|
|
53
53
|
APPLICATION_ID: str({ devDefault: '', default: '' }),
|
|
54
|
+
// HTTP server engine: 'ultimate' (uWebSockets.js, faster) or 'express' (classic Node.js http)
|
|
55
|
+
// ultimate-express is a drop-in replacement but requires app.listen() instead of http.createServer()
|
|
56
|
+
EXPRESS_ENGINE: str({ default: 'ultimate', choices: ['ultimate', 'express'], devDefault: 'ultimate' }),
|
|
54
57
|
// WebSocket connection limits per pod instance
|
|
55
58
|
// Recommended: ~20000 per 1Gi memory
|
|
56
59
|
WEBSOCKET_MAX_CONNECTIONS: num({ default: 20000, devDefault: 10000 }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-config.cjs","sources":["../../src/config/env-config.ts"],"sourcesContent":[null],"names":["envalid"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"env-config.cjs","sources":["../../src/config/env-config.ts"],"sourcesContent":[null],"names":["envalid"],"mappings":"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"}
|
|
@@ -51,6 +51,9 @@ const config = envalid.cleanEnv(process.env,
|
|
|
51
51
|
INNGEST_CLIENT_ID: str({ devDefault: '', default: '' }),
|
|
52
52
|
// Stable application ID used for Inngest client registration across deployments
|
|
53
53
|
APPLICATION_ID: str({ devDefault: '', default: '' }),
|
|
54
|
+
// HTTP server engine: 'ultimate' (uWebSockets.js, faster) or 'express' (classic Node.js http)
|
|
55
|
+
// ultimate-express is a drop-in replacement but requires app.listen() instead of http.createServer()
|
|
56
|
+
EXPRESS_ENGINE: str({ default: 'ultimate', choices: ['ultimate', 'express'], devDefault: 'ultimate' }),
|
|
54
57
|
// WebSocket connection limits per pod instance
|
|
55
58
|
// Recommended: ~20000 per 1Gi memory
|
|
56
59
|
WEBSOCKET_MAX_CONNECTIONS: num({ default: 20000, devDefault: 10000 }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-config.mjs","sources":["../../src/config/env-config.ts"],"sourcesContent":[null],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"env-config.mjs","sources":["../../src/config/env-config.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var node_module=require('node:module');var_documentCurrentScript=typeofdocument!=='undefined'?document.currentScript:null;/**
|
|
2
|
+
* Express Engine Adapter
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified interface for both Express 4 and ultimate-express (uWebSockets.js).
|
|
5
|
+
* The engine is selected at startup via the `EXPRESS_ENGINE` environment variable:
|
|
6
|
+
*
|
|
7
|
+
* - `EXPRESS_ENGINE=ultimate` (default) — uses ultimate-express + ultimate-ws for best performance
|
|
8
|
+
* - `EXPRESS_ENGINE=express` — uses classic Express 4 + ws for maximum compatibility
|
|
9
|
+
*
|
|
10
|
+
* All server modules import from this adapter instead of directly from 'express' or 'ultimate-express',
|
|
11
|
+
* so switching engines requires zero code changes — just set the env var.
|
|
12
|
+
*
|
|
13
|
+
* IMPORTANT: ultimate-express does NOT support http.createServer(). The server is started via app.listen().
|
|
14
|
+
* Classic express works with both http.createServer() and app.listen().
|
|
15
|
+
* This adapter normalizes both to use app.listen() for consistency.
|
|
16
|
+
*/
|
|
17
|
+
// ─── Engine Detection ────────────────────────────────────────────────────────
|
|
18
|
+
// Read engine choice early (before envalid config is available).
|
|
19
|
+
// This module is loaded at import time, so we read directly from process.env.
|
|
20
|
+
const engine = (process.env.EXPRESS_ENGINE || 'ultimate').toLowerCase();
|
|
21
|
+
/** Whether the ultimate-express (uWebSockets.js) engine is active */
|
|
22
|
+
const isUltimateEngine = engine === 'ultimate';
|
|
23
|
+
const _require = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('express-adapter.cjs', document.baseURI).href)));
|
|
24
|
+
/**
|
|
25
|
+
* The express factory function — creates an Express application.
|
|
26
|
+
* When engine='ultimate', this is ultimate-express (uWS.js-backed).
|
|
27
|
+
* When engine='express', this is classic Express 4.
|
|
28
|
+
*/
|
|
29
|
+
const express = isUltimateEngine
|
|
30
|
+
? _require('ultimate-express')
|
|
31
|
+
: _require('express');
|
|
32
|
+
/**
|
|
33
|
+
* WebSocketServer class.
|
|
34
|
+
* When engine='ultimate', this is ultimate-ws (uWS.js-backed).
|
|
35
|
+
* When engine='express', this is the standard `ws` package.
|
|
36
|
+
*/
|
|
37
|
+
const WebSocketServer = isUltimateEngine
|
|
38
|
+
? _require('ultimate-ws').WebSocketServer
|
|
39
|
+
: _require('ws').WebSocketServer;
|
|
40
|
+
/**
|
|
41
|
+
* Create an HTTP server for the given express app.
|
|
42
|
+
*
|
|
43
|
+
* - ultimate-express: returns null (uWS manages the server internally via app.listen())
|
|
44
|
+
* - classic express: returns http.createServer(app)
|
|
45
|
+
*/
|
|
46
|
+
function createHttpServer(app) {
|
|
47
|
+
if (isUltimateEngine) {
|
|
48
|
+
// ultimate-express manages its own uWS server; no http.Server is created
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const http = _require('http');
|
|
52
|
+
return http.createServer(app);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Body parser middleware.
|
|
56
|
+
*
|
|
57
|
+
* - ultimate-express: uses built-in express.json() / express.urlencoded() for best perf
|
|
58
|
+
* - classic express: uses body-parser package (more battle-tested options)
|
|
59
|
+
*/
|
|
60
|
+
function jsonParser(options) {
|
|
61
|
+
if (isUltimateEngine) {
|
|
62
|
+
return express.json(options);
|
|
63
|
+
}
|
|
64
|
+
const bodyParser = _require('body-parser');
|
|
65
|
+
return bodyParser.json(options);
|
|
66
|
+
}
|
|
67
|
+
function urlencodedParser(options) {
|
|
68
|
+
if (isUltimateEngine) {
|
|
69
|
+
return express.urlencoded(options);
|
|
70
|
+
}
|
|
71
|
+
const bodyParser = _require('body-parser');
|
|
72
|
+
return bodyParser.urlencoded(options);
|
|
73
|
+
}exports.WebSocketServer=WebSocketServer;exports.createHttpServer=createHttpServer;exports.default=express;exports.express=express;exports.isUltimateEngine=isUltimateEngine;exports.jsonParser=jsonParser;exports.urlencodedParser=urlencodedParser;//# sourceMappingURL=express-adapter.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"express-adapter.cjs","sources":["../src/express-adapter.ts"],"sourcesContent":[null],"names":["createRequire"],"mappings":"gMAAA;;;;;;;;;;;;;;;AAeG;AAQH;AACA;AACA;AACA,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,UAAU,EAAE,WAAW,EAAE,CAAC;AAExE;AACa,MAAA,gBAAgB,GAAY,MAAM,KAAK,WAAW;AAK/D,MAAM,QAAQ,GAAGA,yBAAa,CAAC,qQAAe,CAAC,CAAC;AAEhD;;;;AAIG;AACI,MAAM,OAAO,GAAG,gBAAgB;AACnC,MAAE,QAAQ,CAAC,kBAAkB,CAAC;AAC9B,MAAE,QAAQ,CAAC,SAAS,EAAE;AAI1B;;;;AAIG;AACI,MAAM,eAAe,GAAG,gBAAgB;AAC3C,MAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,eAAe;AACzC,MAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,gBAAgB;AAKrC;;;;;AAKG;AACG,SAAU,gBAAgB,CAAC,GAAY,EAAA;IACzC,IAAI,gBAAgB,EAAE;;AAElB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAuBD;;;;;AAKG;AACG,SAAU,UAAU,CAAC,OAAa,EAAA;IACpC,IAAI,gBAAgB,EAAE;AAClB,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAChC;AACD,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC3C,IAAA,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAEK,SAAU,gBAAgB,CAAC,OAAa,EAAA;IAC1C,IAAI,gBAAgB,EAAE;AAClB,QAAA,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KACtC;AACD,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC3C,IAAA,OAAO,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC1C"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import {createRequire}from'node:module';/**
|
|
2
|
+
* Express Engine Adapter
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified interface for both Express 4 and ultimate-express (uWebSockets.js).
|
|
5
|
+
* The engine is selected at startup via the `EXPRESS_ENGINE` environment variable:
|
|
6
|
+
*
|
|
7
|
+
* - `EXPRESS_ENGINE=ultimate` (default) — uses ultimate-express + ultimate-ws for best performance
|
|
8
|
+
* - `EXPRESS_ENGINE=express` — uses classic Express 4 + ws for maximum compatibility
|
|
9
|
+
*
|
|
10
|
+
* All server modules import from this adapter instead of directly from 'express' or 'ultimate-express',
|
|
11
|
+
* so switching engines requires zero code changes — just set the env var.
|
|
12
|
+
*
|
|
13
|
+
* IMPORTANT: ultimate-express does NOT support http.createServer(). The server is started via app.listen().
|
|
14
|
+
* Classic express works with both http.createServer() and app.listen().
|
|
15
|
+
* This adapter normalizes both to use app.listen() for consistency.
|
|
16
|
+
*/
|
|
17
|
+
// ─── Engine Detection ────────────────────────────────────────────────────────
|
|
18
|
+
// Read engine choice early (before envalid config is available).
|
|
19
|
+
// This module is loaded at import time, so we read directly from process.env.
|
|
20
|
+
const engine = (process.env.EXPRESS_ENGINE || 'ultimate').toLowerCase();
|
|
21
|
+
/** Whether the ultimate-express (uWebSockets.js) engine is active */
|
|
22
|
+
const isUltimateEngine = engine === 'ultimate';
|
|
23
|
+
const _require = createRequire(import.meta.url);
|
|
24
|
+
/**
|
|
25
|
+
* The express factory function — creates an Express application.
|
|
26
|
+
* When engine='ultimate', this is ultimate-express (uWS.js-backed).
|
|
27
|
+
* When engine='express', this is classic Express 4.
|
|
28
|
+
*/
|
|
29
|
+
const express = isUltimateEngine
|
|
30
|
+
? _require('ultimate-express')
|
|
31
|
+
: _require('express');
|
|
32
|
+
/**
|
|
33
|
+
* WebSocketServer class.
|
|
34
|
+
* When engine='ultimate', this is ultimate-ws (uWS.js-backed).
|
|
35
|
+
* When engine='express', this is the standard `ws` package.
|
|
36
|
+
*/
|
|
37
|
+
const WebSocketServer = isUltimateEngine
|
|
38
|
+
? _require('ultimate-ws').WebSocketServer
|
|
39
|
+
: _require('ws').WebSocketServer;
|
|
40
|
+
/**
|
|
41
|
+
* Create an HTTP server for the given express app.
|
|
42
|
+
*
|
|
43
|
+
* - ultimate-express: returns null (uWS manages the server internally via app.listen())
|
|
44
|
+
* - classic express: returns http.createServer(app)
|
|
45
|
+
*/
|
|
46
|
+
function createHttpServer(app) {
|
|
47
|
+
if (isUltimateEngine) {
|
|
48
|
+
// ultimate-express manages its own uWS server; no http.Server is created
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const http = _require('http');
|
|
52
|
+
return http.createServer(app);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Body parser middleware.
|
|
56
|
+
*
|
|
57
|
+
* - ultimate-express: uses built-in express.json() / express.urlencoded() for best perf
|
|
58
|
+
* - classic express: uses body-parser package (more battle-tested options)
|
|
59
|
+
*/
|
|
60
|
+
function jsonParser(options) {
|
|
61
|
+
if (isUltimateEngine) {
|
|
62
|
+
return express.json(options);
|
|
63
|
+
}
|
|
64
|
+
const bodyParser = _require('body-parser');
|
|
65
|
+
return bodyParser.json(options);
|
|
66
|
+
}
|
|
67
|
+
function urlencodedParser(options) {
|
|
68
|
+
if (isUltimateEngine) {
|
|
69
|
+
return express.urlencoded(options);
|
|
70
|
+
}
|
|
71
|
+
const bodyParser = _require('body-parser');
|
|
72
|
+
return bodyParser.urlencoded(options);
|
|
73
|
+
}export{WebSocketServer,createHttpServer,express as default,express,isUltimateEngine,jsonParser,urlencodedParser};//# sourceMappingURL=express-adapter.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"express-adapter.mjs","sources":["../src/express-adapter.ts"],"sourcesContent":[null],"names":[],"mappings":"wCAAA;;;;;;;;;;;;;;;AAeG;AAQH;AACA;AACA;AACA,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,UAAU,EAAE,WAAW,EAAE,CAAC;AAExE;AACa,MAAA,gBAAgB,GAAY,MAAM,KAAK,WAAW;AAK/D,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEhD;;;;AAIG;AACI,MAAM,OAAO,GAAG,gBAAgB;AACnC,MAAE,QAAQ,CAAC,kBAAkB,CAAC;AAC9B,MAAE,QAAQ,CAAC,SAAS,EAAE;AAI1B;;;;AAIG;AACI,MAAM,eAAe,GAAG,gBAAgB;AAC3C,MAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,eAAe;AACzC,MAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,gBAAgB;AAKrC;;;;;AAKG;AACG,SAAU,gBAAgB,CAAC,GAAY,EAAA;IACzC,IAAI,gBAAgB,EAAE;;AAElB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAuBD;;;;;AAKG;AACG,SAAU,UAAU,CAAC,OAAa,EAAA;IACpC,IAAI,gBAAgB,EAAE;AAClB,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAChC;AACD,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC3C,IAAA,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAEK,SAAU,gBAAgB,CAAC,OAAa,EAAA;IAC1C,IAAI,gBAAgB,EAAE;AAClB,QAAA,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KACtC;AACD,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC3C,IAAA,OAAO,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC1C"}
|