@weconjs/core 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +460 -41
- package/dist/database/index.d.ts +108 -5
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +148 -12
- package/dist/database/index.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/logger/index.d.ts +102 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +147 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/server/index.d.ts +138 -10
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +300 -25
- package/dist/server/index.js.map +1 -1
- package/package.json +19 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -3,9 +3,54 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Creates and configures the Express application with all framework features.
|
|
5
5
|
* This is the main entry point for the Wecon framework.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createWecon, loadConfig } from '@weconjs/core';
|
|
10
|
+
*
|
|
11
|
+
* const config = await loadConfig('./wecon.config.ts');
|
|
12
|
+
*
|
|
13
|
+
* const app = await createWecon({
|
|
14
|
+
* config,
|
|
15
|
+
* modules: [authModule, usersModule],
|
|
16
|
+
* database: { enabled: true },
|
|
17
|
+
* plugins: { fieldShield: true },
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* await app.start();
|
|
21
|
+
* ```
|
|
6
22
|
*/
|
|
7
|
-
import
|
|
8
|
-
import
|
|
23
|
+
import http from "http";
|
|
24
|
+
import https from "https";
|
|
25
|
+
import type { Application, RequestHandler } from "express";
|
|
26
|
+
import type { ResolvedConfig, WeconModule, WeconContext } from "../types.js";
|
|
27
|
+
import { type DatabaseConnection } from "../database/index.js";
|
|
28
|
+
/**
|
|
29
|
+
* API Error format
|
|
30
|
+
*/
|
|
31
|
+
export interface ApiError {
|
|
32
|
+
code: string;
|
|
33
|
+
message: string;
|
|
34
|
+
field?: string;
|
|
35
|
+
params?: Record<string, unknown>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Standard API Response format
|
|
39
|
+
*/
|
|
40
|
+
export interface ApiResponse<T = unknown> {
|
|
41
|
+
success: boolean;
|
|
42
|
+
data: T | null;
|
|
43
|
+
errors: ApiError[] | null;
|
|
44
|
+
meta: Record<string, unknown> | null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Response options for res.respond()
|
|
48
|
+
*/
|
|
49
|
+
export interface RespondOptions<T = unknown> {
|
|
50
|
+
data?: T;
|
|
51
|
+
errors?: ApiError[];
|
|
52
|
+
meta?: Record<string, unknown>;
|
|
53
|
+
}
|
|
9
54
|
/**
|
|
10
55
|
* Options for creating a Wecon application
|
|
11
56
|
*/
|
|
@@ -19,25 +64,98 @@ export interface CreateWeconOptions {
|
|
|
19
64
|
*/
|
|
20
65
|
modules: WeconModule[];
|
|
21
66
|
/**
|
|
22
|
-
*
|
|
67
|
+
* The @weconjs/lib Wecon instance (for route handling)
|
|
68
|
+
* If provided, wecon.handler() is mounted automatically
|
|
69
|
+
*/
|
|
70
|
+
wecon?: {
|
|
71
|
+
handler: () => RequestHandler;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Custom middleware to apply before routes
|
|
75
|
+
*/
|
|
76
|
+
middleware?: RequestHandler[];
|
|
77
|
+
/**
|
|
78
|
+
* Database options
|
|
79
|
+
*/
|
|
80
|
+
database?: {
|
|
81
|
+
/**
|
|
82
|
+
* Enable database connection
|
|
83
|
+
*/
|
|
84
|
+
enabled?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Direct MongoDB URI (overrides config)
|
|
87
|
+
*/
|
|
88
|
+
uri?: string;
|
|
89
|
+
/**
|
|
90
|
+
* Mongoose plugins to register
|
|
91
|
+
*/
|
|
92
|
+
plugins?: Array<{
|
|
93
|
+
plugin: (schema: unknown, options?: unknown) => void;
|
|
94
|
+
options?: unknown;
|
|
95
|
+
}>;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Plugin options
|
|
23
99
|
*/
|
|
24
|
-
|
|
100
|
+
plugins?: {
|
|
101
|
+
/**
|
|
102
|
+
* Enable FieldShield integration
|
|
103
|
+
*/
|
|
104
|
+
fieldShield?: boolean | {
|
|
105
|
+
strict?: boolean;
|
|
106
|
+
debug?: boolean;
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* i18n options
|
|
111
|
+
*/
|
|
112
|
+
i18n?: {
|
|
113
|
+
/**
|
|
114
|
+
* Enable i18n middleware
|
|
115
|
+
* @default true if config.features.i18n.enabled
|
|
116
|
+
*/
|
|
117
|
+
enabled?: boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Path to modules directory for translation discovery
|
|
120
|
+
*/
|
|
121
|
+
modulesDir?: string;
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Logger options
|
|
125
|
+
*/
|
|
126
|
+
logger?: {
|
|
127
|
+
/**
|
|
128
|
+
* Use Winston logger (requires winston package)
|
|
129
|
+
* @default true
|
|
130
|
+
*/
|
|
131
|
+
useWinston?: boolean;
|
|
132
|
+
/**
|
|
133
|
+
* Enable file logging
|
|
134
|
+
* @default false
|
|
135
|
+
*/
|
|
136
|
+
enableFile?: boolean;
|
|
137
|
+
/**
|
|
138
|
+
* Log directory
|
|
139
|
+
* @default 'logs'
|
|
140
|
+
*/
|
|
141
|
+
logDir?: string;
|
|
142
|
+
};
|
|
25
143
|
/**
|
|
26
144
|
* Lifecycle hooks
|
|
27
145
|
*/
|
|
28
146
|
hooks?: {
|
|
29
147
|
/**
|
|
30
|
-
* Called before server starts
|
|
148
|
+
* Called before server starts (after middleware setup)
|
|
31
149
|
*/
|
|
32
|
-
onBoot?: () => Promise<void> | void;
|
|
150
|
+
onBoot?: (ctx: WeconContext) => Promise<void> | void;
|
|
33
151
|
/**
|
|
34
152
|
* Called when server is shutting down
|
|
35
153
|
*/
|
|
36
|
-
onShutdown?: () => Promise<void> | void;
|
|
154
|
+
onShutdown?: (ctx: WeconContext) => Promise<void> | void;
|
|
37
155
|
/**
|
|
38
156
|
* Called after each module is initialized
|
|
39
157
|
*/
|
|
40
|
-
onModuleInit?: (module: WeconModule) => Promise<void> | void;
|
|
158
|
+
onModuleInit?: (module: WeconModule, ctx: WeconContext) => Promise<void> | void;
|
|
41
159
|
};
|
|
42
160
|
}
|
|
43
161
|
/**
|
|
@@ -48,10 +166,18 @@ export interface WeconApp {
|
|
|
48
166
|
* The underlying Express application
|
|
49
167
|
*/
|
|
50
168
|
app: Application;
|
|
169
|
+
/**
|
|
170
|
+
* The application context
|
|
171
|
+
*/
|
|
172
|
+
ctx: WeconContext;
|
|
173
|
+
/**
|
|
174
|
+
* Database connection (if enabled)
|
|
175
|
+
*/
|
|
176
|
+
db?: DatabaseConnection;
|
|
51
177
|
/**
|
|
52
178
|
* Start the server
|
|
53
179
|
*/
|
|
54
|
-
start: (port?: number) => Promise<
|
|
180
|
+
start: (port?: number) => Promise<http.Server | https.Server>;
|
|
55
181
|
/**
|
|
56
182
|
* Gracefully shutdown the server
|
|
57
183
|
*/
|
|
@@ -64,7 +190,9 @@ export interface WeconApp {
|
|
|
64
190
|
* - Database connection
|
|
65
191
|
* - i18n initialization
|
|
66
192
|
* - Module loading
|
|
67
|
-
* -
|
|
193
|
+
* - Logging
|
|
194
|
+
* - HTTPS support
|
|
195
|
+
* - Graceful shutdown
|
|
68
196
|
*
|
|
69
197
|
* @param options - Configuration options
|
|
70
198
|
* @returns Wecon application instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,WAAW,EAAmC,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5F,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAe,YAAY,EAAE,MAAM,aAAa,CAAC;AAE1F,OAAO,EAAgD,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI7G;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC;IAEvB;;OAEG;IACH,OAAO,EAAE,WAAW,EAAE,CAAC;IAEvB;;;OAGG;IACH,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,cAAc,CAAA;KAAE,CAAC;IAE1C;;OAEG;IACH,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,EAAE;QACT;;WAEG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAElB;;WAEG;QACH,GAAG,CAAC,EAAE,MAAM,CAAC;QAEb;;WAEG;QACH,OAAO,CAAC,EAAE,KAAK,CAAC;YACd,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;YACrD,OAAO,CAAC,EAAE,OAAO,CAAC;SACnB,CAAC,CAAC;KACJ,CAAC;IAEF;;OAEG;IACH,OAAO,CAAC,EAAE;QACR;;WAEG;QACH,WAAW,CAAC,EAAE,OAAO,GAAG;YAAE,MAAM,CAAC,EAAE,OAAO,CAAC;YAAC,KAAK,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;KAC/D,CAAC;IAEF;;OAEG;IACH,IAAI,CAAC,EAAE;QACL;;;WAGG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAElB;;WAEG;QACH,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,EAAE;QACP;;;WAGG;QACH,UAAU,CAAC,EAAE,OAAO,CAAC;QAErB;;;WAGG;QACH,UAAU,CAAC,EAAE,OAAO,CAAC;QAErB;;;WAGG;QACH,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF;;OAEG;IACH,KAAK,CAAC,EAAE;QACN;;WAEG;QACH,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAErD;;WAEG;QACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAEzD;;WAEG;QACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KACjF,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,GAAG,EAAE,WAAW,CAAC;IAEjB;;OAEG;IACH,GAAG,EAAE,YAAY,CAAC;IAElB;;OAEG;IACH,EAAE,CAAC,EAAE,kBAAkB,CAAC;IAExB;;OAEG;IACH,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAE9D;;OAEG;IACH,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAyID;;;;;;;;;;;;;GAaG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAqPhF"}
|
package/dist/server/index.js
CHANGED
|
@@ -3,7 +3,138 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Creates and configures the Express application with all framework features.
|
|
5
5
|
* This is the main entry point for the Wecon framework.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createWecon, loadConfig } from '@weconjs/core';
|
|
10
|
+
*
|
|
11
|
+
* const config = await loadConfig('./wecon.config.ts');
|
|
12
|
+
*
|
|
13
|
+
* const app = await createWecon({
|
|
14
|
+
* config,
|
|
15
|
+
* modules: [authModule, usersModule],
|
|
16
|
+
* database: { enabled: true },
|
|
17
|
+
* plugins: { fieldShield: true },
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* await app.start();
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
import http from "http";
|
|
24
|
+
import https from "https";
|
|
25
|
+
import fs from "fs";
|
|
26
|
+
import path from "path";
|
|
27
|
+
import { createWinstonLogger, createConsoleLogger } from "../logger/index.js";
|
|
28
|
+
import { createDatabaseConnection, buildUriFromConfig } from "../database/index.js";
|
|
29
|
+
import { initI18n } from "../i18n/index.js";
|
|
30
|
+
import { createContext } from "../context.js";
|
|
31
|
+
/**
|
|
32
|
+
* Install respond helper on Express Response prototype
|
|
33
|
+
*/
|
|
34
|
+
function installRespond() {
|
|
35
|
+
// Dynamic import to get express.response
|
|
36
|
+
import("express").then((express) => {
|
|
37
|
+
const response = express.default.response;
|
|
38
|
+
// Only install if response prototype exists (not in mock environments)
|
|
39
|
+
if (response && !response.respond) {
|
|
40
|
+
response.respond = function (options = {}) {
|
|
41
|
+
const { data, errors, meta } = options;
|
|
42
|
+
const hasErrors = errors && errors.length > 0;
|
|
43
|
+
const apiResponse = {
|
|
44
|
+
success: !hasErrors,
|
|
45
|
+
data: hasErrors ? null : (data ?? null),
|
|
46
|
+
errors: hasErrors ? errors : null,
|
|
47
|
+
meta: meta ?? null,
|
|
48
|
+
};
|
|
49
|
+
return this.json(apiResponse);
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}).catch(() => {
|
|
53
|
+
// Express not available yet, will be installed later
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create HTTPS server if SSL certificates are available
|
|
58
|
+
*/
|
|
59
|
+
function createHttpsServer(app, config, logger) {
|
|
60
|
+
try {
|
|
61
|
+
const httpsConfig = config.https;
|
|
62
|
+
if (!httpsConfig?.enabled) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
const keyPath = path.resolve(httpsConfig.keyPath ?? "");
|
|
66
|
+
const certPath = path.resolve(httpsConfig.certPath ?? "");
|
|
67
|
+
// Check if certificate files exist
|
|
68
|
+
if (!fs.existsSync(keyPath) || !fs.existsSync(certPath)) {
|
|
69
|
+
logger.warn("SSL certificates not found, falling back to HTTP", {
|
|
70
|
+
keyPath,
|
|
71
|
+
certPath,
|
|
72
|
+
});
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
const httpsOptions = {
|
|
76
|
+
key: fs.readFileSync(keyPath),
|
|
77
|
+
cert: fs.readFileSync(certPath),
|
|
78
|
+
};
|
|
79
|
+
return https.createServer(httpsOptions, app);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
logger.warn("Error creating HTTPS server, falling back to HTTP", {
|
|
83
|
+
error: error.message,
|
|
84
|
+
});
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create graceful shutdown handler
|
|
6
90
|
*/
|
|
91
|
+
function createGracefulShutdown(server, ctx, db, onShutdown) {
|
|
92
|
+
let isShuttingDown = false;
|
|
93
|
+
return async (signal) => {
|
|
94
|
+
if (isShuttingDown)
|
|
95
|
+
return;
|
|
96
|
+
isShuttingDown = true;
|
|
97
|
+
ctx.logger.info(`Received ${signal}. Starting graceful shutdown...`);
|
|
98
|
+
// Call shutdown hook
|
|
99
|
+
if (onShutdown) {
|
|
100
|
+
try {
|
|
101
|
+
await onShutdown(ctx);
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
ctx.logger.error("Error in onShutdown hook", {
|
|
105
|
+
error: err.message,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Close database connection
|
|
110
|
+
if (db) {
|
|
111
|
+
try {
|
|
112
|
+
await db.disconnect();
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
ctx.logger.error("Error closing database", {
|
|
116
|
+
error: err.message,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Close server
|
|
121
|
+
server.close((err) => {
|
|
122
|
+
if (err) {
|
|
123
|
+
ctx.logger.error("Error during server shutdown", {
|
|
124
|
+
error: err.message,
|
|
125
|
+
});
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
ctx.logger.info("Server closed successfully");
|
|
129
|
+
process.exit(0);
|
|
130
|
+
});
|
|
131
|
+
// Force close after 10 seconds
|
|
132
|
+
setTimeout(() => {
|
|
133
|
+
ctx.logger.error("Forced shutdown after timeout");
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}, 10000);
|
|
136
|
+
};
|
|
137
|
+
}
|
|
7
138
|
/**
|
|
8
139
|
* Create a Wecon application
|
|
9
140
|
*
|
|
@@ -11,84 +142,228 @@
|
|
|
11
142
|
* - Database connection
|
|
12
143
|
* - i18n initialization
|
|
13
144
|
* - Module loading
|
|
14
|
-
* -
|
|
145
|
+
* - Logging
|
|
146
|
+
* - HTTPS support
|
|
147
|
+
* - Graceful shutdown
|
|
15
148
|
*
|
|
16
149
|
* @param options - Configuration options
|
|
17
150
|
* @returns Wecon application instance
|
|
18
151
|
*/
|
|
19
152
|
export async function createWecon(options) {
|
|
20
|
-
|
|
153
|
+
const { config, modules, wecon, middleware = [], hooks = {} } = options;
|
|
154
|
+
// Install respond helper (wrapped in try-catch as express may not be available yet)
|
|
155
|
+
try {
|
|
156
|
+
installRespond();
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// Will be installed when express is imported
|
|
160
|
+
}
|
|
161
|
+
// Create logger with defensive fallbacks
|
|
162
|
+
let logger;
|
|
163
|
+
const loggerOptions = {
|
|
164
|
+
level: config.logging?.level ?? "info",
|
|
165
|
+
appName: config.app?.name ?? "wecon",
|
|
166
|
+
enableFile: options.logger?.enableFile ?? config.logging?.enableFile ?? false,
|
|
167
|
+
logDir: options.logger?.logDir ?? "logs",
|
|
168
|
+
};
|
|
169
|
+
if (options.logger?.useWinston !== false) {
|
|
170
|
+
try {
|
|
171
|
+
logger = await createWinstonLogger(loggerOptions);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
logger = createConsoleLogger(loggerOptions);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
logger = createConsoleLogger(loggerOptions);
|
|
179
|
+
}
|
|
180
|
+
// Dynamic import Express
|
|
21
181
|
const express = (await import("express")).default;
|
|
22
182
|
const app = express();
|
|
23
|
-
|
|
183
|
+
// Create context (will update with app/io later)
|
|
184
|
+
const ctx = createContext({
|
|
185
|
+
config,
|
|
186
|
+
app,
|
|
187
|
+
logger,
|
|
188
|
+
});
|
|
189
|
+
// Connect database if enabled
|
|
190
|
+
let db;
|
|
191
|
+
const shouldConnectDb = options.database?.enabled ?? (config.database?.mongoose?.host !== undefined);
|
|
192
|
+
if (shouldConnectDb) {
|
|
193
|
+
try {
|
|
194
|
+
const uri = options.database?.uri ?? buildUriFromConfig(config.database);
|
|
195
|
+
const fieldShieldConfig = options.plugins?.fieldShield;
|
|
196
|
+
db = await createDatabaseConnection({
|
|
197
|
+
uri,
|
|
198
|
+
plugins: options.database?.plugins,
|
|
199
|
+
fieldShield: fieldShieldConfig
|
|
200
|
+
? {
|
|
201
|
+
enabled: true,
|
|
202
|
+
strict: typeof fieldShieldConfig === "object" ? fieldShieldConfig.strict : true,
|
|
203
|
+
debug: typeof fieldShieldConfig === "object" ? fieldShieldConfig.debug : false,
|
|
204
|
+
}
|
|
205
|
+
: undefined,
|
|
206
|
+
debug: config.database.debug,
|
|
207
|
+
});
|
|
208
|
+
await db.connect();
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
logger.error("Failed to connect to database", {
|
|
212
|
+
error: err.message,
|
|
213
|
+
});
|
|
214
|
+
throw err;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
24
217
|
// Apply default middleware
|
|
25
218
|
app.use(express.json());
|
|
26
219
|
app.use(express.urlencoded({ extended: true }));
|
|
220
|
+
// Initialize i18n if enabled
|
|
221
|
+
const i18nEnabled = options.i18n?.enabled ?? config.features?.i18n?.enabled;
|
|
222
|
+
if (i18nEnabled) {
|
|
223
|
+
try {
|
|
224
|
+
const modulesDir = options.i18n?.modulesDir ?? "./src/modules";
|
|
225
|
+
const defaultLocale = config.features?.i18n?.defaultLocale ?? "en";
|
|
226
|
+
const i18nMiddleware = await initI18n(modulesDir, defaultLocale);
|
|
227
|
+
app.use(i18nMiddleware);
|
|
228
|
+
logger.debug("i18n initialized");
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
logger.warn("Failed to initialize i18n", {
|
|
232
|
+
error: err.message,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
27
236
|
// Apply custom middleware
|
|
28
237
|
for (const mw of middleware) {
|
|
29
238
|
app.use(mw);
|
|
30
239
|
}
|
|
31
240
|
// Health check endpoint
|
|
32
241
|
app.get("/health", (_req, res) => {
|
|
33
|
-
res.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
242
|
+
const response = res.respond;
|
|
243
|
+
if (response) {
|
|
244
|
+
response.call(res, {
|
|
245
|
+
data: {
|
|
246
|
+
status: "ok",
|
|
247
|
+
timestamp: new Date().toISOString(),
|
|
248
|
+
environment: config.mode,
|
|
249
|
+
app: config.app.name,
|
|
250
|
+
version: config.app.version,
|
|
251
|
+
},
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
res.json({
|
|
256
|
+
success: true,
|
|
257
|
+
data: {
|
|
258
|
+
status: "ok",
|
|
259
|
+
timestamp: new Date().toISOString(),
|
|
260
|
+
environment: config.mode,
|
|
261
|
+
app: config.app.name,
|
|
262
|
+
version: config.app.version,
|
|
263
|
+
},
|
|
264
|
+
});
|
|
265
|
+
}
|
|
40
266
|
});
|
|
267
|
+
// Mount Wecon router if provided
|
|
268
|
+
if (wecon) {
|
|
269
|
+
app.use(wecon.handler());
|
|
270
|
+
logger.debug("Wecon routes mounted");
|
|
271
|
+
}
|
|
41
272
|
// Initialize modules
|
|
42
273
|
for (const mod of modules) {
|
|
43
274
|
if (mod.onInit) {
|
|
44
|
-
await mod.onInit(
|
|
275
|
+
await mod.onInit(ctx);
|
|
45
276
|
}
|
|
46
277
|
if (hooks.onModuleInit) {
|
|
47
|
-
await hooks.onModuleInit(mod);
|
|
278
|
+
await hooks.onModuleInit(mod, ctx);
|
|
48
279
|
}
|
|
280
|
+
logger.debug(`Module initialized: ${mod.name}`);
|
|
49
281
|
}
|
|
50
282
|
// Global error handler
|
|
51
283
|
app.use((err, _req, res, _next) => {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
message: err.message || "Internal Server Error",
|
|
284
|
+
logger.error("Unhandled error", {
|
|
285
|
+
error: err.message,
|
|
286
|
+
stack: err.stack,
|
|
56
287
|
});
|
|
288
|
+
const response = res.respond;
|
|
289
|
+
if (response) {
|
|
290
|
+
res.status(500);
|
|
291
|
+
response.call(res, {
|
|
292
|
+
errors: [{ code: "INTERNAL_ERROR", message: err.message || "Internal Server Error" }],
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
res.status(500).json({
|
|
297
|
+
success: false,
|
|
298
|
+
errors: [{ code: "INTERNAL_ERROR", message: err.message || "Internal Server Error" }],
|
|
299
|
+
});
|
|
300
|
+
}
|
|
57
301
|
});
|
|
58
302
|
let server = null;
|
|
59
303
|
return {
|
|
60
304
|
app,
|
|
305
|
+
ctx,
|
|
306
|
+
db,
|
|
61
307
|
async start(port) {
|
|
62
308
|
const serverPort = port ?? config.port ?? 3000;
|
|
63
309
|
// Call onBoot hook
|
|
64
310
|
if (hooks.onBoot) {
|
|
65
|
-
await hooks.onBoot();
|
|
311
|
+
await hooks.onBoot(ctx);
|
|
312
|
+
}
|
|
313
|
+
// Try HTTPS first
|
|
314
|
+
const httpsServer = createHttpsServer(app, config, logger);
|
|
315
|
+
if (httpsServer) {
|
|
316
|
+
server = httpsServer;
|
|
317
|
+
const httpsPort = config.https.port ?? 443;
|
|
318
|
+
return new Promise((resolve) => {
|
|
319
|
+
server.listen(httpsPort, () => {
|
|
320
|
+
logger.info(`${config.app.name} v${config.app.version} running`, {
|
|
321
|
+
protocol: "https",
|
|
322
|
+
port: httpsPort,
|
|
323
|
+
mode: config.mode,
|
|
324
|
+
});
|
|
325
|
+
resolve(server);
|
|
326
|
+
});
|
|
327
|
+
});
|
|
66
328
|
}
|
|
329
|
+
// Fall back to HTTP
|
|
330
|
+
server = http.createServer(app);
|
|
331
|
+
// Setup graceful shutdown
|
|
332
|
+
const gracefulShutdown = createGracefulShutdown(server, ctx, db, hooks.onShutdown);
|
|
333
|
+
process.on("SIGTERM", () => gracefulShutdown("SIGTERM"));
|
|
334
|
+
process.on("SIGINT", () => gracefulShutdown("SIGINT"));
|
|
335
|
+
process.on("SIGUSR2", () => gracefulShutdown("SIGUSR2"));
|
|
67
336
|
return new Promise((resolve) => {
|
|
68
|
-
server
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
337
|
+
server.listen(serverPort, () => {
|
|
338
|
+
logger.info(`${config.app.name} v${config.app.version} running`, {
|
|
339
|
+
protocol: "http",
|
|
340
|
+
port: serverPort,
|
|
341
|
+
mode: config.mode,
|
|
342
|
+
});
|
|
343
|
+
resolve(server);
|
|
73
344
|
});
|
|
74
345
|
});
|
|
75
346
|
},
|
|
76
347
|
async shutdown() {
|
|
77
348
|
// Call onShutdown hook
|
|
78
349
|
if (hooks.onShutdown) {
|
|
79
|
-
await hooks.onShutdown();
|
|
350
|
+
await hooks.onShutdown(ctx);
|
|
351
|
+
}
|
|
352
|
+
// Close database
|
|
353
|
+
if (db) {
|
|
354
|
+
await db.disconnect();
|
|
80
355
|
}
|
|
81
356
|
// Destroy modules
|
|
82
357
|
for (const mod of modules) {
|
|
83
358
|
if (mod.onDestroy) {
|
|
84
|
-
await mod.onDestroy(
|
|
359
|
+
await mod.onDestroy(ctx);
|
|
85
360
|
}
|
|
86
361
|
}
|
|
87
362
|
// Close server
|
|
88
363
|
if (server) {
|
|
89
364
|
return new Promise((resolve) => {
|
|
90
365
|
server.close(() => {
|
|
91
|
-
|
|
366
|
+
logger.info("Server shut down gracefully");
|
|
92
367
|
resolve();
|
|
93
368
|
});
|
|
94
369
|
});
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
|