@asenajs/ergenecore 1.0.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/LICENSE +21 -0
- package/README.md +636 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/Ergenecore.d.ts +598 -0
- package/dist/lib/Ergenecore.js +1406 -0
- package/dist/lib/Ergenecore.js.map +1 -0
- package/dist/lib/ErgenecoreContextWrapper.d.ts +190 -0
- package/dist/lib/ErgenecoreContextWrapper.js +387 -0
- package/dist/lib/ErgenecoreContextWrapper.js.map +1 -0
- package/dist/lib/ErgenecoreWebsocketAdapter.d.ts +68 -0
- package/dist/lib/ErgenecoreWebsocketAdapter.js +233 -0
- package/dist/lib/ErgenecoreWebsocketAdapter.js.map +1 -0
- package/dist/lib/defaults/ConfigService.d.ts +39 -0
- package/dist/lib/defaults/ConfigService.js +30 -0
- package/dist/lib/defaults/ConfigService.js.map +1 -0
- package/dist/lib/defaults/MiddlewareService.d.ts +39 -0
- package/dist/lib/defaults/MiddlewareService.js +30 -0
- package/dist/lib/defaults/MiddlewareService.js.map +1 -0
- package/dist/lib/defaults/StaticServeService.d.ts +24 -0
- package/dist/lib/defaults/StaticServeService.js +23 -0
- package/dist/lib/defaults/StaticServeService.js.map +1 -0
- package/dist/lib/defaults/ValidationService.d.ts +35 -0
- package/dist/lib/defaults/ValidationService.js +34 -0
- package/dist/lib/defaults/ValidationService.js.map +1 -0
- package/dist/lib/defaults/index.d.ts +25 -0
- package/dist/lib/defaults/index.js +26 -0
- package/dist/lib/defaults/index.js.map +1 -0
- package/dist/lib/errors.d.ts +84 -0
- package/dist/lib/errors.js +108 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/index.d.ts +36 -0
- package/dist/lib/index.js +37 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/middlewares/CorsMiddleware.d.ts +147 -0
- package/dist/lib/middlewares/CorsMiddleware.js +163 -0
- package/dist/lib/middlewares/CorsMiddleware.js.map +1 -0
- package/dist/lib/middlewares/RateLimiterMiddleware.d.ts +330 -0
- package/dist/lib/middlewares/RateLimiterMiddleware.js +300 -0
- package/dist/lib/middlewares/RateLimiterMiddleware.js.map +1 -0
- package/dist/lib/types/Handler.d.ts +65 -0
- package/dist/lib/types/Handler.js +10 -0
- package/dist/lib/types/Handler.js.map +1 -0
- package/dist/lib/types/StaticServeExtras.d.ts +29 -0
- package/dist/lib/types/StaticServeExtras.js +2 -0
- package/dist/lib/types/StaticServeExtras.js.map +1 -0
- package/dist/lib/types/Validation.d.ts +7 -0
- package/dist/lib/types/Validation.js +2 -0
- package/dist/lib/types/Validation.js.map +1 -0
- package/dist/lib/types/index.d.ts +24 -0
- package/dist/lib/types/index.js +25 -0
- package/dist/lib/types/index.js.map +1 -0
- package/dist/lib/utils/factory.d.ts +121 -0
- package/dist/lib/utils/factory.js +144 -0
- package/dist/lib/utils/factory.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { AsenaWebsocketAdapter } from '@asenajs/asena/adapter';
|
|
2
|
+
import type { ServerLogger } from '@asenajs/asena/logger';
|
|
3
|
+
import type { Server } from 'bun';
|
|
4
|
+
import type { AsenaWebSocketService } from '@asenajs/asena/web-socket';
|
|
5
|
+
import { type WSOptions } from '@asenajs/asena/web-socket';
|
|
6
|
+
/**
|
|
7
|
+
* CoreWebsocketAdapter - WebSocket adapter for Bun
|
|
8
|
+
*
|
|
9
|
+
* Uses Bun's native WebSocket API with namespace-based routing
|
|
10
|
+
*/
|
|
11
|
+
export declare class ErgenecoreWebsocketAdapter extends AsenaWebsocketAdapter {
|
|
12
|
+
name: string;
|
|
13
|
+
private activeConnections;
|
|
14
|
+
private connectionLimits;
|
|
15
|
+
private heartbeatIntervals;
|
|
16
|
+
constructor(logger: ServerLogger);
|
|
17
|
+
/**
|
|
18
|
+
* Registers a WebSocket service with namespace (base class implementation)
|
|
19
|
+
* @param webSocketService - WebSocket service to register
|
|
20
|
+
*/
|
|
21
|
+
registerWebSocket(webSocketService: AsenaWebSocketService<any>): void;
|
|
22
|
+
/**
|
|
23
|
+
* Sets maximum connections allowed per namespace
|
|
24
|
+
* @param namespace - WebSocket namespace
|
|
25
|
+
* @param limit - Maximum number of concurrent connections
|
|
26
|
+
*/
|
|
27
|
+
setConnectionLimit(namespace: string, limit: number): void;
|
|
28
|
+
/**
|
|
29
|
+
* Gets active connection count for a namespace
|
|
30
|
+
* @param namespace - WebSocket namespace
|
|
31
|
+
* @returns Number of active connections
|
|
32
|
+
*/
|
|
33
|
+
getConnectionCount(namespace: string): number;
|
|
34
|
+
/**
|
|
35
|
+
* Graceful shutdown - closes all connections
|
|
36
|
+
* @param _timeoutMs - Timeout for graceful shutdown (default: 5000)
|
|
37
|
+
*/
|
|
38
|
+
shutdown(_timeoutMs?: number): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Prepares WebSocket configuration with lifecycle handlers
|
|
41
|
+
* @param options - WebSocket options
|
|
42
|
+
*/
|
|
43
|
+
prepareWebSocket(options?: WSOptions & {
|
|
44
|
+
heartbeatInterval?: number;
|
|
45
|
+
}): void;
|
|
46
|
+
/**
|
|
47
|
+
* Starts WebSocket server and initializes AsenaWebSocketServer for each namespace
|
|
48
|
+
* @param server - Bun Server instance
|
|
49
|
+
*/
|
|
50
|
+
startWebsocket(server: Server<any>): void;
|
|
51
|
+
/**
|
|
52
|
+
* Starts heartbeat for a connection
|
|
53
|
+
* @param ws - WebSocket connection
|
|
54
|
+
* @param intervalMs - Heartbeat interval in milliseconds (default: 30000)
|
|
55
|
+
*/
|
|
56
|
+
private startHeartbeat;
|
|
57
|
+
/**
|
|
58
|
+
* Stops heartbeat for a connection
|
|
59
|
+
* @param connectionId - Connection ID
|
|
60
|
+
*/
|
|
61
|
+
private stopHeartbeat;
|
|
62
|
+
/**
|
|
63
|
+
* Creates a handler wrapper for WebSocket lifecycle events
|
|
64
|
+
* @param type - Event type (onOpenInternal, onMessage, etc.)
|
|
65
|
+
* @returns Handler function
|
|
66
|
+
*/
|
|
67
|
+
private createHandler;
|
|
68
|
+
}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { AsenaWebsocketAdapter } from '@asenajs/asena/adapter';
|
|
2
|
+
import { AsenaSocket, AsenaWebSocketServer, } from '@asenajs/asena/web-socket';
|
|
3
|
+
/**
|
|
4
|
+
* CoreWebsocketAdapter - WebSocket adapter for Bun
|
|
5
|
+
*
|
|
6
|
+
* Uses Bun's native WebSocket API with namespace-based routing
|
|
7
|
+
*/
|
|
8
|
+
export class ErgenecoreWebsocketAdapter extends AsenaWebsocketAdapter {
|
|
9
|
+
name = 'ErgenecoreWebsocketAdapter';
|
|
10
|
+
activeConnections = new Map(); // namespace -> Set of connection IDs
|
|
11
|
+
connectionLimits = new Map(); // namespace -> max connections
|
|
12
|
+
heartbeatIntervals = new Map(); // connection ID -> interval
|
|
13
|
+
constructor(logger) {
|
|
14
|
+
super(logger);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Registers a WebSocket service with namespace (base class implementation)
|
|
18
|
+
* @param webSocketService - WebSocket service to register
|
|
19
|
+
*/
|
|
20
|
+
registerWebSocket(webSocketService) {
|
|
21
|
+
if (!webSocketService) {
|
|
22
|
+
throw new Error('WebSocket service is required');
|
|
23
|
+
}
|
|
24
|
+
if (!webSocketService.namespace) {
|
|
25
|
+
throw new Error('WebSocket namespace is required');
|
|
26
|
+
}
|
|
27
|
+
// Validate namespace format: alphanumeric, hyphens, underscores, and slashes allowed
|
|
28
|
+
const namespaceRegex = /^[a-zA-Z0-9/_-]+$/;
|
|
29
|
+
if (!namespaceRegex.test(webSocketService.namespace)) {
|
|
30
|
+
throw new Error(`Invalid WebSocket namespace format: "${webSocketService.namespace}". Only alphanumeric characters, hyphens, underscores, and slashes are allowed.`);
|
|
31
|
+
}
|
|
32
|
+
// Initialize websockets map if needed
|
|
33
|
+
if (this._websockets === undefined) {
|
|
34
|
+
this._websockets = new Map();
|
|
35
|
+
}
|
|
36
|
+
// Check for duplicate registration
|
|
37
|
+
if (this._websockets.has(webSocketService.namespace)) {
|
|
38
|
+
this.logger.warn(`WebSocket namespace "${webSocketService.namespace}" is already registered. Overwriting previous registration...`);
|
|
39
|
+
}
|
|
40
|
+
this._websockets.set(webSocketService.namespace, webSocketService);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Sets maximum connections allowed per namespace
|
|
44
|
+
* @param namespace - WebSocket namespace
|
|
45
|
+
* @param limit - Maximum number of concurrent connections
|
|
46
|
+
*/
|
|
47
|
+
setConnectionLimit(namespace, limit) {
|
|
48
|
+
if (limit < 1) {
|
|
49
|
+
throw new Error('Connection limit must be at least 1');
|
|
50
|
+
}
|
|
51
|
+
this.connectionLimits.set(namespace, limit);
|
|
52
|
+
this.logger.info(`Connection limit set for namespace "${namespace}": ${limit}`);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Gets active connection count for a namespace
|
|
56
|
+
* @param namespace - WebSocket namespace
|
|
57
|
+
* @returns Number of active connections
|
|
58
|
+
*/
|
|
59
|
+
getConnectionCount(namespace) {
|
|
60
|
+
return this.activeConnections.get(namespace)?.size || 0;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Graceful shutdown - closes all connections
|
|
64
|
+
* @param _timeoutMs - Timeout for graceful shutdown (default: 5000)
|
|
65
|
+
*/
|
|
66
|
+
async shutdown(_timeoutMs = 5000) {
|
|
67
|
+
this.logger.info('Starting WebSocket graceful shutdown...');
|
|
68
|
+
// Stop all heartbeats
|
|
69
|
+
for (const interval of this.heartbeatIntervals.values()) {
|
|
70
|
+
clearInterval(interval);
|
|
71
|
+
}
|
|
72
|
+
this.heartbeatIntervals.clear();
|
|
73
|
+
// Clear connection tracking
|
|
74
|
+
this.activeConnections.clear();
|
|
75
|
+
this.logger.info('WebSocket shutdown complete');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Prepares WebSocket configuration with lifecycle handlers
|
|
79
|
+
* @param options - WebSocket options
|
|
80
|
+
*/
|
|
81
|
+
prepareWebSocket(options) {
|
|
82
|
+
if (!this.websockets || this.websockets.size < 1) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const heartbeatInterval = options?.heartbeatInterval;
|
|
86
|
+
this.websocket = {
|
|
87
|
+
open: (ws) => {
|
|
88
|
+
// Normalize to namespace format (remove leading /)
|
|
89
|
+
const namespace = ws.data.path.replace(/^\//, '');
|
|
90
|
+
// Check connection limit
|
|
91
|
+
const limit = this.connectionLimits.get(namespace);
|
|
92
|
+
const currentCount = this.getConnectionCount(namespace);
|
|
93
|
+
if (limit && currentCount >= limit) {
|
|
94
|
+
this.logger.warn(`Connection limit reached for namespace "${namespace}": ${currentCount}/${limit}. Rejecting new connection.`);
|
|
95
|
+
ws.close(1008, 'Connection limit reached');
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// Track connection
|
|
99
|
+
if (!this.activeConnections.has(namespace)) {
|
|
100
|
+
this.activeConnections.set(namespace, new Set());
|
|
101
|
+
}
|
|
102
|
+
this.activeConnections.get(namespace).add(ws.data.id);
|
|
103
|
+
// Start heartbeat if enabled
|
|
104
|
+
if (heartbeatInterval) {
|
|
105
|
+
this.startHeartbeat(ws, heartbeatInterval);
|
|
106
|
+
}
|
|
107
|
+
this.logger.info(`WebSocket opened: ${ws.data.id} on namespace "${namespace}" (${currentCount + 1} active connections)`);
|
|
108
|
+
// Call user handler
|
|
109
|
+
this.createHandler('onOpenInternal')(ws);
|
|
110
|
+
},
|
|
111
|
+
close: (ws, code, reason) => {
|
|
112
|
+
// Normalize to namespace format (remove leading /)
|
|
113
|
+
const namespace = ws.data.path.replace(/^\//, '');
|
|
114
|
+
// Stop heartbeat
|
|
115
|
+
this.stopHeartbeat(ws.data.id);
|
|
116
|
+
// Remove from tracking
|
|
117
|
+
this.activeConnections.get(namespace)?.delete(ws.data.id);
|
|
118
|
+
const remainingCount = this.getConnectionCount(namespace);
|
|
119
|
+
this.logger.info(`WebSocket closed: ${ws.data.id} on namespace "${namespace}" (${remainingCount} remaining connections)`);
|
|
120
|
+
// Call user handler
|
|
121
|
+
this.createHandler('onCloseInternal')(ws, code, reason);
|
|
122
|
+
},
|
|
123
|
+
message: this.createHandler('onMessage'),
|
|
124
|
+
drain: this.createHandler('onDrain'),
|
|
125
|
+
ping: this.createHandler('onPing'),
|
|
126
|
+
pong: this.createHandler('onPong'),
|
|
127
|
+
...options,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Starts WebSocket server and initializes AsenaWebSocketServer for each namespace
|
|
132
|
+
* @param server - Bun Server instance
|
|
133
|
+
*/
|
|
134
|
+
startWebsocket(server) {
|
|
135
|
+
if (!this.websockets || this.websockets.size < 1) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
for (const [namespace, websocket] of this.websockets) {
|
|
139
|
+
websocket.server = new AsenaWebSocketServer(server, namespace);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Starts heartbeat for a connection
|
|
144
|
+
* @param ws - WebSocket connection
|
|
145
|
+
* @param intervalMs - Heartbeat interval in milliseconds (default: 30000)
|
|
146
|
+
*/
|
|
147
|
+
startHeartbeat(ws, intervalMs = 30000) {
|
|
148
|
+
const interval = setInterval(() => {
|
|
149
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
150
|
+
try {
|
|
151
|
+
ws.ping();
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
this.logger.error(`Heartbeat ping failed for connection ${ws.data.id}:`, error);
|
|
155
|
+
this.stopHeartbeat(ws.data.id);
|
|
156
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
157
|
+
ws.close(1011, 'Heartbeat failed');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
this.stopHeartbeat(ws.data.id);
|
|
163
|
+
}
|
|
164
|
+
}, intervalMs);
|
|
165
|
+
this.heartbeatIntervals.set(ws.data.id, interval);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Stops heartbeat for a connection
|
|
169
|
+
* @param connectionId - Connection ID
|
|
170
|
+
*/
|
|
171
|
+
stopHeartbeat(connectionId) {
|
|
172
|
+
const interval = this.heartbeatIntervals.get(connectionId);
|
|
173
|
+
if (interval) {
|
|
174
|
+
clearInterval(interval);
|
|
175
|
+
this.heartbeatIntervals.delete(connectionId);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Creates a handler wrapper for WebSocket lifecycle events
|
|
180
|
+
* @param type - Event type (onOpenInternal, onMessage, etc.)
|
|
181
|
+
* @returns Handler function
|
|
182
|
+
*/
|
|
183
|
+
createHandler(type) {
|
|
184
|
+
return async (ws, ...args) => {
|
|
185
|
+
const websocket = this.websockets.get(ws.data.path);
|
|
186
|
+
if (!websocket) {
|
|
187
|
+
this.logger.error(`WebSocket handler not found for path: ${ws.data.path}`);
|
|
188
|
+
// Close connection with error code if handler not found
|
|
189
|
+
if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) {
|
|
190
|
+
ws.close(1011, 'Internal server error: handler not found');
|
|
191
|
+
}
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
let handler = websocket[type];
|
|
195
|
+
if (!handler) {
|
|
196
|
+
// Not all handlers are required, so this is not an error
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
handler = handler.bind(websocket);
|
|
200
|
+
try {
|
|
201
|
+
await handler(new AsenaSocket(ws, websocket), ...args);
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
this.logger.error(`WebSocket ${type} handler error for path ${ws.data.path}:`, {
|
|
205
|
+
error: error instanceof Error ? error.message : String(error),
|
|
206
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
207
|
+
socketId: ws.data.id,
|
|
208
|
+
path: ws.data.path,
|
|
209
|
+
});
|
|
210
|
+
// Try to send error to client if connection is still open
|
|
211
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
212
|
+
try {
|
|
213
|
+
ws.send(JSON.stringify({
|
|
214
|
+
type: 'error',
|
|
215
|
+
message: 'Server error occurred',
|
|
216
|
+
timestamp: new Date().toISOString(),
|
|
217
|
+
}));
|
|
218
|
+
}
|
|
219
|
+
catch (sendError) {
|
|
220
|
+
this.logger.error('Failed to send error message to client:', sendError);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// For critical errors, close connection gracefully
|
|
224
|
+
if (type === 'onOpenInternal' || type === 'onMessage') {
|
|
225
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
226
|
+
ws.close(1011, 'Handler error');
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=ErgenecoreWebsocketAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErgenecoreWebsocketAdapter.js","sourceRoot":"","sources":["../../lib/ErgenecoreWebsocketAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ergenecore ConfigService
|
|
3
|
+
*
|
|
4
|
+
* Base class for configuration services in Ergenecore adapter.
|
|
5
|
+
* Extends Asena's config service interface with Ergenecore-specific Context type.
|
|
6
|
+
*
|
|
7
|
+
* @module defaults/ConfigService
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { Config } from '@asenajs/asena/server';
|
|
12
|
+
* import { ConfigService, type Context } from '@asenajs/ergenecore';
|
|
13
|
+
*
|
|
14
|
+
* @Config()
|
|
15
|
+
* export class ServerConfig extends ConfigService {
|
|
16
|
+
* onError(error: Error, context: Context): Response {
|
|
17
|
+
* return context.send({ error: error.message }, 500);
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import type { AsenaConfig } from '@asenajs/asena/server/config';
|
|
23
|
+
import type { Context } from '../ErgenecoreContextWrapper';
|
|
24
|
+
/**
|
|
25
|
+
* Base class for Ergenecore configuration services
|
|
26
|
+
*
|
|
27
|
+
* Implements Asena's config service interface with Ergenecore's Context type.
|
|
28
|
+
* Use this to define global error handlers and other server configuration.
|
|
29
|
+
*/
|
|
30
|
+
export declare abstract class ConfigService implements AsenaConfig<Context> {
|
|
31
|
+
/**
|
|
32
|
+
* Global error handler
|
|
33
|
+
*
|
|
34
|
+
* @param error - The error that occurred
|
|
35
|
+
* @param context - Ergenecore context wrapper
|
|
36
|
+
* @returns Response or Promise<Response>
|
|
37
|
+
*/
|
|
38
|
+
abstract onError(error: Error, context: Context): Response | Promise<Response>;
|
|
39
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ergenecore ConfigService
|
|
3
|
+
*
|
|
4
|
+
* Base class for configuration services in Ergenecore adapter.
|
|
5
|
+
* Extends Asena's config service interface with Ergenecore-specific Context type.
|
|
6
|
+
*
|
|
7
|
+
* @module defaults/ConfigService
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { Config } from '@asenajs/asena/server';
|
|
12
|
+
* import { ConfigService, type Context } from '@asenajs/ergenecore';
|
|
13
|
+
*
|
|
14
|
+
* @Config()
|
|
15
|
+
* export class ServerConfig extends ConfigService {
|
|
16
|
+
* onError(error: Error, context: Context): Response {
|
|
17
|
+
* return context.send({ error: error.message }, 500);
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Base class for Ergenecore configuration services
|
|
24
|
+
*
|
|
25
|
+
* Implements Asena's config service interface with Ergenecore's Context type.
|
|
26
|
+
* Use this to define global error handlers and other server configuration.
|
|
27
|
+
*/
|
|
28
|
+
export class ConfigService {
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=ConfigService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigService.js","sourceRoot":"","sources":["../../../lib/defaults/ConfigService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH;;;;;GAKG;AACH,MAAM,OAAgB,aAAa;CAWlC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ergenecore MiddlewareService
|
|
3
|
+
*
|
|
4
|
+
* Base class for middleware services in Ergenecore adapter.
|
|
5
|
+
* Extends Asena's middleware service interface with Ergenecore-specific Context type.
|
|
6
|
+
*
|
|
7
|
+
* @module defaults/MiddlewareService
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { Middleware } from '@asenajs/asena/server';
|
|
12
|
+
* import { MiddlewareService, type Context } from '@asenajs/ergenecore';
|
|
13
|
+
*
|
|
14
|
+
* @Middleware()
|
|
15
|
+
* export class AuthMiddleware extends MiddlewareService {
|
|
16
|
+
* async handle(context: Context, next: () => Promise<void>) {
|
|
17
|
+
* // Your middleware logic
|
|
18
|
+
* await next();
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
import type { AsenaMiddlewareService } from '@asenajs/asena/middleware';
|
|
24
|
+
import type { Context } from '../ErgenecoreContextWrapper';
|
|
25
|
+
/**
|
|
26
|
+
* Base class for Ergenecore middleware services
|
|
27
|
+
*
|
|
28
|
+
* Implements Asena's middleware service interface with Ergenecore's Context type.
|
|
29
|
+
*/
|
|
30
|
+
export declare abstract class MiddlewareService implements AsenaMiddlewareService<Context> {
|
|
31
|
+
/**
|
|
32
|
+
* Middleware handler
|
|
33
|
+
*
|
|
34
|
+
* @param context - Ergenecore context wrapper
|
|
35
|
+
* @param next - Function to call next middleware or handler
|
|
36
|
+
* @returns Promise that resolves when middleware completes
|
|
37
|
+
*/
|
|
38
|
+
abstract handle(context: Context, next: () => Promise<void>): Promise<any>;
|
|
39
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ergenecore MiddlewareService
|
|
3
|
+
*
|
|
4
|
+
* Base class for middleware services in Ergenecore adapter.
|
|
5
|
+
* Extends Asena's middleware service interface with Ergenecore-specific Context type.
|
|
6
|
+
*
|
|
7
|
+
* @module defaults/MiddlewareService
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { Middleware } from '@asenajs/asena/server';
|
|
12
|
+
* import { MiddlewareService, type Context } from '@asenajs/ergenecore';
|
|
13
|
+
*
|
|
14
|
+
* @Middleware()
|
|
15
|
+
* export class AuthMiddleware extends MiddlewareService {
|
|
16
|
+
* async handle(context: Context, next: () => Promise<void>) {
|
|
17
|
+
* // Your middleware logic
|
|
18
|
+
* await next();
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Base class for Ergenecore middleware services
|
|
25
|
+
*
|
|
26
|
+
* Implements Asena's middleware service interface with Ergenecore's Context type.
|
|
27
|
+
*/
|
|
28
|
+
export class MiddlewareService {
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=MiddlewareService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiddlewareService.js","sourceRoot":"","sources":["../../../lib/defaults/MiddlewareService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH;;;;GAIG;AACH,MAAM,OAAgB,iBAAiB;CAWtC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { AsenaStaticServeService } from '@asenajs/asena/middleware';
|
|
2
|
+
import type { StaticServeExtras } from '../types';
|
|
3
|
+
import type { Context } from '../ErgenecoreContextWrapper';
|
|
4
|
+
/**
|
|
5
|
+
* Base class for static file serving services in Ergenecore adapter
|
|
6
|
+
*
|
|
7
|
+
* Extends AsenaStaticServeService with Ergenecore-specific Context and StaticServeExtras types
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { StaticServe } from '@asenajs/asena/server';
|
|
12
|
+
* import { StaticServeService } from '@asenajs/ergenecore';
|
|
13
|
+
* import path from 'path';
|
|
14
|
+
*
|
|
15
|
+
* @StaticServe({ root: path.join(process.cwd(), 'public') })
|
|
16
|
+
* export class MyStaticServe extends StaticServeService {
|
|
17
|
+
* public rewriteRequestPath(reqPath: string): string {
|
|
18
|
+
* return reqPath.replace(/^\/static/, '');
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare abstract class StaticServeService extends AsenaStaticServeService<Context, StaticServeExtras> {
|
|
24
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AsenaStaticServeService } from '@asenajs/asena/middleware';
|
|
2
|
+
/**
|
|
3
|
+
* Base class for static file serving services in Ergenecore adapter
|
|
4
|
+
*
|
|
5
|
+
* Extends AsenaStaticServeService with Ergenecore-specific Context and StaticServeExtras types
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { StaticServe } from '@asenajs/asena/server';
|
|
10
|
+
* import { StaticServeService } from '@asenajs/ergenecore';
|
|
11
|
+
* import path from 'path';
|
|
12
|
+
*
|
|
13
|
+
* @StaticServe({ root: path.join(process.cwd(), 'public') })
|
|
14
|
+
* export class MyStaticServe extends StaticServeService {
|
|
15
|
+
* public rewriteRequestPath(reqPath: string): string {
|
|
16
|
+
* return reqPath.replace(/^\/static/, '');
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export class StaticServeService extends AsenaStaticServeService {
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=StaticServeService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StaticServeService.js","sourceRoot":"","sources":["../../../lib/defaults/StaticServeService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAIpE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAgB,kBAAmB,SAAQ,uBAAmD;CAAG"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ergenecore ValidationService
|
|
3
|
+
*
|
|
4
|
+
* Base class for validation services in Ergenecore adapter.
|
|
5
|
+
* Extends Asena's validation service interface with Ergenecore-specific types.
|
|
6
|
+
*
|
|
7
|
+
* @module defaults/ValidationService
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { Middleware } from '@asenajs/asena/server';
|
|
12
|
+
* import { ValidationService } from '@asenajs/ergenecore';
|
|
13
|
+
* import { z } from 'zod';
|
|
14
|
+
*
|
|
15
|
+
* @Middleware({ validator: true })
|
|
16
|
+
* export class CreateUserValidator extends ValidationService {
|
|
17
|
+
* json() {
|
|
18
|
+
* return z.object({
|
|
19
|
+
* name: z.string().min(3),
|
|
20
|
+
* email: z.string().email()
|
|
21
|
+
* });
|
|
22
|
+
* }
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import type { AsenaValidationService } from '@asenajs/asena/middleware';
|
|
27
|
+
import type { ValidationSchema, ValidationSchemaWithHook } from '../types';
|
|
28
|
+
/**
|
|
29
|
+
* Base class for Ergenecore validation services
|
|
30
|
+
*
|
|
31
|
+
* Implements Asena's validation service interface with support for
|
|
32
|
+
* Zod schemas and custom validation hooks.
|
|
33
|
+
*/
|
|
34
|
+
export declare abstract class ValidationService implements AsenaValidationService<ValidationSchema | ValidationSchemaWithHook> {
|
|
35
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ergenecore ValidationService
|
|
3
|
+
*
|
|
4
|
+
* Base class for validation services in Ergenecore adapter.
|
|
5
|
+
* Extends Asena's validation service interface with Ergenecore-specific types.
|
|
6
|
+
*
|
|
7
|
+
* @module defaults/ValidationService
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { Middleware } from '@asenajs/asena/server';
|
|
12
|
+
* import { ValidationService } from '@asenajs/ergenecore';
|
|
13
|
+
* import { z } from 'zod';
|
|
14
|
+
*
|
|
15
|
+
* @Middleware({ validator: true })
|
|
16
|
+
* export class CreateUserValidator extends ValidationService {
|
|
17
|
+
* json() {
|
|
18
|
+
* return z.object({
|
|
19
|
+
* name: z.string().min(3),
|
|
20
|
+
* email: z.string().email()
|
|
21
|
+
* });
|
|
22
|
+
* }
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Base class for Ergenecore validation services
|
|
28
|
+
*
|
|
29
|
+
* Implements Asena's validation service interface with support for
|
|
30
|
+
* Zod schemas and custom validation hooks.
|
|
31
|
+
*/
|
|
32
|
+
export class ValidationService {
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=ValidationService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationService.js","sourceRoot":"","sources":["../../../lib/defaults/ValidationService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH;;;;;GAKG;AACH,MAAM,OAAgB,iBAAiB;CAC4C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ergenecore Defaults
|
|
3
|
+
*
|
|
4
|
+
* Export adapter-specific base classes for common services.
|
|
5
|
+
* These classes provide type-safe implementations of Asena's service interfaces
|
|
6
|
+
* with Ergenecore's Context type.
|
|
7
|
+
*
|
|
8
|
+
* @module defaults
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import {
|
|
13
|
+
* ValidationService,
|
|
14
|
+
* ConfigService,
|
|
15
|
+
* MiddlewareService,
|
|
16
|
+
* type Context
|
|
17
|
+
* } from '@asenajs/ergenecore';
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export { ValidationService } from './ValidationService';
|
|
21
|
+
export { ConfigService } from './ConfigService';
|
|
22
|
+
export { MiddlewareService } from './MiddlewareService';
|
|
23
|
+
export { StaticServeService } from './StaticServeService';
|
|
24
|
+
export { CorsMiddleware, type CorsOptions } from '../middlewares/CorsMiddleware';
|
|
25
|
+
export { RateLimiterMiddleware, type RateLimiterOptions } from '../middlewares/RateLimiterMiddleware';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ergenecore Defaults
|
|
3
|
+
*
|
|
4
|
+
* Export adapter-specific base classes for common services.
|
|
5
|
+
* These classes provide type-safe implementations of Asena's service interfaces
|
|
6
|
+
* with Ergenecore's Context type.
|
|
7
|
+
*
|
|
8
|
+
* @module defaults
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import {
|
|
13
|
+
* ValidationService,
|
|
14
|
+
* ConfigService,
|
|
15
|
+
* MiddlewareService,
|
|
16
|
+
* type Context
|
|
17
|
+
* } from '@asenajs/ergenecore';
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export { ValidationService } from './ValidationService';
|
|
21
|
+
export { ConfigService } from './ConfigService';
|
|
22
|
+
export { MiddlewareService } from './MiddlewareService';
|
|
23
|
+
export { StaticServeService } from './StaticServeService';
|
|
24
|
+
export { CorsMiddleware } from '../middlewares/CorsMiddleware';
|
|
25
|
+
export { RateLimiterMiddleware } from '../middlewares/RateLimiterMiddleware';
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/defaults/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAoB,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAA2B,MAAM,sCAAsC,CAAC"}
|