@asenajs/asena 0.6.3 → 0.7.1
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 +2 -2
- package/dist/lib/adapter/AsenaAdapter.d.ts +19 -0
- package/dist/lib/adapter/AsenaAdapter.js +6 -0
- package/dist/lib/adapter/AsenaAdapter.js.map +1 -1
- package/dist/lib/adapter/AsenaContext.d.ts +87 -8
- package/dist/lib/adapter/AsenaWebsocketAdapter.d.ts +41 -2
- package/dist/lib/adapter/AsenaWebsocketAdapter.js +74 -0
- package/dist/lib/adapter/AsenaWebsocketAdapter.js.map +1 -1
- package/dist/lib/adapter/types/ApiParams.d.ts +6 -0
- package/dist/lib/adapter/types/Streaming.d.ts +42 -0
- package/dist/lib/adapter/types/Streaming.js +2 -0
- package/dist/lib/adapter/types/Streaming.js.map +1 -0
- package/dist/lib/adapter/types/index.d.ts +1 -0
- package/dist/lib/adapter/types/index.js +1 -0
- package/dist/lib/adapter/types/index.js.map +1 -1
- package/dist/lib/ioc/Container.d.ts +8 -1
- package/dist/lib/ioc/Container.js +16 -2
- package/dist/lib/ioc/Container.js.map +1 -1
- package/dist/lib/ioc/CoreContainer.js +10 -3
- package/dist/lib/ioc/CoreContainer.js.map +1 -1
- package/dist/lib/ioc/IocEngine.d.ts +7 -0
- package/dist/lib/ioc/IocEngine.js +82 -3
- package/dist/lib/ioc/IocEngine.js.map +1 -1
- package/dist/lib/ioc/component/componentUtils.js +3 -1
- package/dist/lib/ioc/component/componentUtils.js.map +1 -1
- package/dist/lib/ioc/constants/ComponentConstants.d.ts +2 -0
- package/dist/lib/ioc/constants/ComponentConstants.js +3 -0
- package/dist/lib/ioc/constants/ComponentConstants.js.map +1 -1
- package/dist/lib/ioc/helper/cronParser.d.ts +3 -0
- package/dist/lib/ioc/helper/cronParser.js +3 -1
- package/dist/lib/ioc/helper/cronParser.js.map +1 -1
- package/dist/lib/ioc/types/ComponentPostProcessor.d.ts +30 -0
- package/dist/lib/ioc/types/ComponentPostProcessor.js +2 -0
- package/dist/lib/ioc/types/ComponentPostProcessor.js.map +1 -0
- package/dist/lib/ioc/types/ICoreServiceNamesType.d.ts +3 -0
- package/dist/lib/ioc/types/ICoreServiceNamesType.js +4 -0
- package/dist/lib/ioc/types/ICoreServiceNamesType.js.map +1 -1
- package/dist/lib/ioc/types/decorators/ComponentType.d.ts +3 -1
- package/dist/lib/ioc/types/decorators/ComponentType.js +2 -0
- package/dist/lib/ioc/types/decorators/ComponentType.js.map +1 -1
- package/dist/lib/ioc/types/decorators/ControllerParams.d.ts +1 -0
- package/dist/lib/ioc/types/index.d.ts +1 -0
- package/dist/lib/ioc/types/index.js +1 -0
- package/dist/lib/ioc/types/index.js.map +1 -1
- package/dist/lib/server/AsenaServer.d.ts +18 -0
- package/dist/lib/server/AsenaServer.js +85 -1
- package/dist/lib/server/AsenaServer.js.map +1 -1
- package/dist/lib/server/config/AsenaConfig.d.ts +16 -1
- package/dist/lib/server/decorators/components/Controller.js +3 -0
- package/dist/lib/server/decorators/components/Controller.js.map +1 -1
- package/dist/lib/server/decorators/components/FrontendController.d.ts +15 -0
- package/dist/lib/server/decorators/components/FrontendController.js +20 -0
- package/dist/lib/server/decorators/components/FrontendController.js.map +1 -0
- package/dist/lib/server/decorators/components/PostProcessor.d.ts +25 -0
- package/dist/lib/server/decorators/components/PostProcessor.js +29 -0
- package/dist/lib/server/decorators/components/PostProcessor.js.map +1 -0
- package/dist/lib/server/decorators/components/Schedule.d.ts +15 -3
- package/dist/lib/server/decorators/components/Schedule.js +24 -6
- package/dist/lib/server/decorators/components/Schedule.js.map +1 -1
- package/dist/lib/server/decorators/components/index.d.ts +2 -0
- package/dist/lib/server/decorators/components/index.js +2 -0
- package/dist/lib/server/decorators/components/index.js.map +1 -1
- package/dist/lib/server/decorators/index.d.ts +0 -3
- package/dist/lib/server/decorators/index.js +0 -3
- package/dist/lib/server/decorators/index.js.map +1 -1
- package/dist/lib/server/messaging/Ulak.js +8 -5
- package/dist/lib/server/messaging/Ulak.js.map +1 -1
- package/dist/lib/server/schedule/AsenaSchedule.d.ts +21 -0
- package/dist/lib/server/schedule/AsenaSchedule.js +2 -0
- package/dist/lib/server/schedule/AsenaSchedule.js.map +1 -0
- package/dist/lib/server/schedule/CronRunner.d.ts +54 -0
- package/dist/lib/server/schedule/CronRunner.js +130 -0
- package/dist/lib/server/schedule/CronRunner.js.map +1 -0
- package/dist/lib/server/schedule/index.d.ts +2 -0
- package/dist/lib/server/schedule/index.js +2 -0
- package/dist/lib/server/schedule/index.js.map +1 -0
- package/dist/lib/server/src/services/PrepareFrontendControllerService.d.ts +18 -0
- package/dist/lib/server/src/services/PrepareFrontendControllerService.js +63 -0
- package/dist/lib/server/src/services/PrepareFrontendControllerService.js.map +1 -0
- package/dist/lib/server/src/services/PrepareScheduleService.d.ts +21 -0
- package/dist/lib/server/src/services/PrepareScheduleService.js +69 -0
- package/dist/lib/server/src/services/PrepareScheduleService.js.map +1 -0
- package/dist/lib/server/web/decorators/Page.d.ts +13 -0
- package/dist/lib/server/web/decorators/Page.js +17 -0
- package/dist/lib/server/web/decorators/Page.js.map +1 -0
- package/dist/lib/server/web/decorators/http.base.d.ts +1 -1
- package/dist/lib/server/web/decorators/http.base.js +3 -2
- package/dist/lib/server/web/decorators/http.base.js.map +1 -1
- package/dist/lib/server/web/decorators/index.d.ts +1 -0
- package/dist/lib/server/web/decorators/index.js +1 -0
- package/dist/lib/server/web/decorators/index.js.map +1 -1
- package/dist/lib/server/web/decorators/methods/All.d.ts +7 -0
- package/dist/lib/server/web/decorators/methods/All.js +12 -0
- package/dist/lib/server/web/decorators/methods/All.js.map +1 -0
- package/dist/lib/server/web/decorators/methods/Connect.js +10 -2
- package/dist/lib/server/web/decorators/methods/Connect.js.map +1 -1
- package/dist/lib/server/web/decorators/methods/Delete.js +2 -2
- package/dist/lib/server/web/decorators/methods/Delete.js.map +1 -1
- package/dist/lib/server/web/decorators/methods/Get.js +2 -2
- package/dist/lib/server/web/decorators/methods/Get.js.map +1 -1
- package/dist/lib/server/web/decorators/methods/Head.js +2 -2
- package/dist/lib/server/web/decorators/methods/Head.js.map +1 -1
- package/dist/lib/server/web/decorators/methods/Options.js +10 -2
- package/dist/lib/server/web/decorators/methods/Options.js.map +1 -1
- package/dist/lib/server/web/decorators/methods/Patch.js +2 -2
- package/dist/lib/server/web/decorators/methods/Patch.js.map +1 -1
- package/dist/lib/server/web/decorators/methods/Post.js +2 -2
- package/dist/lib/server/web/decorators/methods/Post.js.map +1 -1
- package/dist/lib/server/web/decorators/methods/Put.js +2 -2
- package/dist/lib/server/web/decorators/methods/Put.js.map +1 -1
- package/dist/lib/server/web/decorators/methods/Route.d.ts +21 -0
- package/dist/lib/server/web/decorators/methods/Route.js +33 -0
- package/dist/lib/server/web/decorators/methods/Route.js.map +1 -0
- package/dist/lib/server/web/decorators/methods/Trace.js +2 -2
- package/dist/lib/server/web/decorators/methods/Trace.js.map +1 -1
- package/dist/lib/server/web/decorators/methods/index.d.ts +2 -0
- package/dist/lib/server/web/decorators/methods/index.js +2 -0
- package/dist/lib/server/web/decorators/methods/index.js.map +1 -1
- package/dist/lib/server/web/middleware/AsenaValidationService.d.ts +32 -0
- package/dist/lib/server/web/types/HttpMethod.d.ts +2 -1
- package/dist/lib/server/web/types/HttpMethod.js +1 -0
- package/dist/lib/server/web/types/HttpMethod.js.map +1 -1
- package/dist/lib/server/web/websocket/AsenaSocket.d.ts +16 -8
- package/dist/lib/server/web/websocket/AsenaSocket.js +30 -7
- package/dist/lib/server/web/websocket/AsenaSocket.js.map +1 -1
- package/dist/lib/server/web/websocket/AsenaWebSocketServer.d.ts +6 -7
- package/dist/lib/server/web/websocket/AsenaWebSocketServer.js +10 -11
- package/dist/lib/server/web/websocket/AsenaWebSocketServer.js.map +1 -1
- package/dist/lib/server/web/websocket/BunLocalTransport.d.ts +16 -0
- package/dist/lib/server/web/websocket/BunLocalTransport.js +18 -0
- package/dist/lib/server/web/websocket/BunLocalTransport.js.map +1 -0
- package/dist/lib/server/web/websocket/WebSocketTransport.d.ts +76 -0
- package/dist/lib/server/web/websocket/WebSocketTransport.js +2 -0
- package/dist/lib/server/web/websocket/WebSocketTransport.js.map +1 -0
- package/dist/lib/server/web/websocket/index.d.ts +2 -0
- package/dist/lib/server/web/websocket/index.js +2 -0
- package/dist/lib/server/web/websocket/index.js.map +1 -1
- package/dist/lib/server/web/websocket/types.d.ts +24 -0
- package/dist/lib/utils/index.d.ts +2 -0
- package/dist/lib/utils/index.js +1 -0
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/lib/utils/metadataExtractor.d.ts +88 -0
- package/dist/lib/utils/metadataExtractor.js +105 -0
- package/dist/lib/utils/metadataExtractor.js.map +1 -0
- package/dist/lib/utils/patternMatcher.js +5 -2
- package/dist/lib/utils/patternMatcher.js.map +1 -1
- package/package.json +23 -15
package/README.md
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
# Asena
|
|
6
6
|
|
|
7
|
-
[](https://asena.sh)
|
|
8
8
|
[](https://opensource.org/licenses/MIT)
|
|
9
|
-
[](https://bun.sh)
|
|
10
10
|
|
|
11
11
|
A high-performance IoC web framework for Bun runtime, bringing Spring Boot's automatic component discovery and field-based dependency injection to TypeScript.
|
|
12
12
|
|
|
@@ -65,6 +65,16 @@ export declare abstract class AsenaAdapter<C extends AsenaContext<any, any>, VS>
|
|
|
65
65
|
* @param params - Route configuration parameters
|
|
66
66
|
*/
|
|
67
67
|
abstract registerRoute(params: RouteParams<C, VS>): Promise<void> | void;
|
|
68
|
+
/**
|
|
69
|
+
* Registers an HTML route for serving via Bun's native HTML import.
|
|
70
|
+
* HTML routes bypass the middleware chain entirely and are served directly by Bun.serve().
|
|
71
|
+
*
|
|
72
|
+
* @param path - Full URL path (e.g., '/ui/home')
|
|
73
|
+
* @param htmlBundle - The HTML bundle returned by importing an .html file
|
|
74
|
+
* @param controllerName - Name of the FrontendController that owns this route
|
|
75
|
+
* @param controllerBasePath - Base path of the FrontendController (e.g., '/ui')
|
|
76
|
+
*/
|
|
77
|
+
abstract registerHTMLRoute(path: string, htmlBundle: unknown, controllerName: string, controllerBasePath: string): void;
|
|
68
78
|
/**
|
|
69
79
|
* Registers a WebSocket route with the application. This method establishes the connection
|
|
70
80
|
* between HTTP routes and WebSocket handlers, allowing the adapter to properly route
|
|
@@ -96,4 +106,13 @@ export declare abstract class AsenaAdapter<C extends AsenaContext<any, any>, VS>
|
|
|
96
106
|
* @returns A promise that resolves when the options are set, or void.
|
|
97
107
|
*/
|
|
98
108
|
abstract serveOptions(options: () => Promise<AsenaServeOptions> | AsenaServeOptions): Promise<void> | void;
|
|
109
|
+
/**
|
|
110
|
+
* Stops the server and releases resources.
|
|
111
|
+
* @param closeActiveConnections - Whether to close active connections immediately
|
|
112
|
+
*/
|
|
113
|
+
abstract stop(closeActiveConnections?: boolean): Promise<void>;
|
|
114
|
+
/**
|
|
115
|
+
* Gets the WebSocket adapter for transport configuration
|
|
116
|
+
*/
|
|
117
|
+
getWebsocketAdapter(): AsenaWebsocketAdapter | undefined;
|
|
99
118
|
}
|
|
@@ -33,5 +33,11 @@ export class AsenaAdapter {
|
|
|
33
33
|
this.websocketAdapter = websocketAdapter;
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Gets the WebSocket adapter for transport configuration
|
|
38
|
+
*/
|
|
39
|
+
getWebsocketAdapter() {
|
|
40
|
+
return this.websocketAdapter;
|
|
41
|
+
}
|
|
36
42
|
}
|
|
37
43
|
//# sourceMappingURL=AsenaAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsenaAdapter.js","sourceRoot":"","sources":["../../../lib/adapter/AsenaAdapter.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,MAAM,OAAgB,YAAY;IAChC;;OAEG;IACa,IAAI,CAAS;IAE7B;;OAEG;IACO,IAAI,CAAS;IAEvB;;OAEG;IACO,MAAM,GAAiB,OAAO,CAAC;IAEzC;;OAEG;IACO,gBAAgB,CAAwB;IAElD;;;;OAIG;IACH,YAAsB,MAAoB,EAAE,gBAAwC;QAClF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAC3C,CAAC;IACH,CAAC;
|
|
1
|
+
{"version":3,"file":"AsenaAdapter.js","sourceRoot":"","sources":["../../../lib/adapter/AsenaAdapter.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,MAAM,OAAgB,YAAY;IAChC;;OAEG;IACa,IAAI,CAAS;IAE7B;;OAEG;IACO,IAAI,CAAS;IAEvB;;OAEG;IACO,MAAM,GAAiB,OAAO,CAAC;IAEzC;;OAEG;IACO,gBAAgB,CAAwB;IAElD;;;;OAIG;IACH,YAAsB,MAAoB,EAAE,gBAAwC;QAClF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAC3C,CAAC;IACH,CAAC;IA6FD;;OAEG;IACI,mBAAmB;QACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -1,4 +1,24 @@
|
|
|
1
|
-
import type { CookieExtra, SendOptions } from './types';
|
|
1
|
+
import type { AsenaSSEStreamWriter, AsenaStreamWriter, CookieExtra, SendOptions } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Augmentable interface for declaring typed context variables.
|
|
4
|
+
* Users can extend this interface via module augmentation to get type-safe getValue/setValue.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* declare module '@asenajs/asena/adapter' {
|
|
9
|
+
* interface AsenaVariables {
|
|
10
|
+
* user: { id: string; name: string };
|
|
11
|
+
* session: SessionData;
|
|
12
|
+
* }
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* // Now type-safe with autocomplete:
|
|
16
|
+
* context.getValue('user') // { id: string; name: string }
|
|
17
|
+
* context.setValue('user', u) // type-checked
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export interface AsenaVariables {
|
|
21
|
+
}
|
|
2
22
|
/**
|
|
3
23
|
* AsenaContext represents the core context interface for handling HTTP requests and responses in Asena framework.
|
|
4
24
|
* It provides essential methods and properties for request/response handling, data manipulation, and state management.
|
|
@@ -11,6 +31,12 @@ export interface AsenaContext<R, S extends Response> {
|
|
|
11
31
|
req: R;
|
|
12
32
|
/** The original response object */
|
|
13
33
|
res: S;
|
|
34
|
+
/**
|
|
35
|
+
* The matched route pattern (e.g., `/users/:id`).
|
|
36
|
+
* Set by the adapter's router after matching. Used by OTel and other
|
|
37
|
+
* middleware to produce low-cardinality identifiers instead of raw URLs.
|
|
38
|
+
*/
|
|
39
|
+
routePattern?: string;
|
|
14
40
|
/**
|
|
15
41
|
* Request headers stored as key-value pairs
|
|
16
42
|
*/
|
|
@@ -74,6 +100,14 @@ export interface AsenaContext<R, S extends Response> {
|
|
|
74
100
|
* @returns {Promise<string[]>} Array of all values for the query parameter
|
|
75
101
|
*/
|
|
76
102
|
getQueryAll: (query: string) => Promise<string[]>;
|
|
103
|
+
/**
|
|
104
|
+
* Retrieves all query parameters as a key-value object.
|
|
105
|
+
* Single-value parameters are returned as strings, multi-value as arrays.
|
|
106
|
+
* For URL "?name=john&color=red&color=blue", returns { name: "john", color: ["red", "blue"] }
|
|
107
|
+
*
|
|
108
|
+
* @returns {Record<string, string | string[]>} All query parameters
|
|
109
|
+
*/
|
|
110
|
+
getAllQueries: () => Record<string, string | string[]>;
|
|
77
111
|
/**
|
|
78
112
|
* Retrieves a cookie value by name, with optional signature verification.
|
|
79
113
|
*
|
|
@@ -101,19 +135,22 @@ export interface AsenaContext<R, S extends Response> {
|
|
|
101
135
|
deleteCookie: (name: string, options?: CookieExtra<any>) => Promise<void>;
|
|
102
136
|
/**
|
|
103
137
|
* Retrieves a value from the context's state storage.
|
|
138
|
+
* When AsenaVariables is augmented, provides type-safe access for known keys.
|
|
104
139
|
*
|
|
105
|
-
* @
|
|
106
|
-
* @
|
|
107
|
-
* @returns {T} The stored value
|
|
140
|
+
* @param key - The key to retrieve
|
|
141
|
+
* @returns The stored value
|
|
108
142
|
*/
|
|
109
|
-
getValue
|
|
143
|
+
getValue<K extends keyof AsenaVariables>(key: K): AsenaVariables[K];
|
|
144
|
+
getValue<T = any>(key: string): T;
|
|
110
145
|
/**
|
|
111
146
|
* Stores a value in the context's state storage.
|
|
147
|
+
* When AsenaVariables is augmented, enforces correct value types for known keys.
|
|
112
148
|
*
|
|
113
|
-
* @param
|
|
114
|
-
* @param
|
|
149
|
+
* @param key - The key to store under
|
|
150
|
+
* @param value - The value to store
|
|
115
151
|
*/
|
|
116
|
-
setValue
|
|
152
|
+
setValue<K extends keyof AsenaVariables>(key: K, value: AsenaVariables[K]): void;
|
|
153
|
+
setValue(key: string, value: any): void;
|
|
117
154
|
/**
|
|
118
155
|
* Stores a value specifically for WebSocket communication.
|
|
119
156
|
*
|
|
@@ -127,6 +164,48 @@ export interface AsenaContext<R, S extends Response> {
|
|
|
127
164
|
* @returns {T} The stored WebSocket value
|
|
128
165
|
*/
|
|
129
166
|
getWebSocketValue: <T>() => T;
|
|
167
|
+
/**
|
|
168
|
+
* Get the client IP address (lazy evaluated).
|
|
169
|
+
* Uses Bun's server.requestIP() under the hood.
|
|
170
|
+
* Result is cached after first call - zero cost if never called.
|
|
171
|
+
*
|
|
172
|
+
* @returns {string | null} The client IP address, or null if unavailable
|
|
173
|
+
*/
|
|
174
|
+
getRequestIp?(): string | null;
|
|
175
|
+
/**
|
|
176
|
+
* Set a response header.
|
|
177
|
+
*
|
|
178
|
+
* @param {string} key - Header name
|
|
179
|
+
* @param {string} value - Header value
|
|
180
|
+
*/
|
|
181
|
+
setResponseHeader?(key: string, value: string): void;
|
|
182
|
+
/**
|
|
183
|
+
* Start a generic binary/text stream.
|
|
184
|
+
* The callback receives a writer; the method returns a Response backed by the stream.
|
|
185
|
+
*
|
|
186
|
+
* @param cb - Async callback that writes to the stream
|
|
187
|
+
* @param onError - Optional error handler
|
|
188
|
+
* @returns Response backed by the readable side of the stream
|
|
189
|
+
*/
|
|
190
|
+
stream(cb: (stream: AsenaStreamWriter) => Promise<void>, onError?: (error: Error, stream: AsenaStreamWriter) => Promise<void>): Response | Promise<Response>;
|
|
191
|
+
/**
|
|
192
|
+
* Start a Server-Sent Events stream.
|
|
193
|
+
* Sets appropriate SSE headers automatically (text/event-stream, no-cache, keep-alive).
|
|
194
|
+
*
|
|
195
|
+
* @param cb - Async callback that writes SSE messages
|
|
196
|
+
* @param onError - Optional error handler
|
|
197
|
+
* @returns Response backed by the SSE stream
|
|
198
|
+
*/
|
|
199
|
+
streamSSE(cb: (stream: AsenaSSEStreamWriter) => Promise<void>, onError?: (error: Error, stream: AsenaSSEStreamWriter) => Promise<void>): Response | Promise<Response>;
|
|
200
|
+
/**
|
|
201
|
+
* Start a text stream with appropriate content-type headers.
|
|
202
|
+
* Sets Content-Type: text/plain and streaming-related headers.
|
|
203
|
+
*
|
|
204
|
+
* @param cb - Async callback that writes text
|
|
205
|
+
* @param onError - Optional error handler
|
|
206
|
+
* @returns Response backed by the text stream
|
|
207
|
+
*/
|
|
208
|
+
streamText(cb: (stream: AsenaStreamWriter) => Promise<void>, onError?: (error: Error, stream: AsenaStreamWriter) => Promise<void>): Response | Promise<Response>;
|
|
130
209
|
/**
|
|
131
210
|
* Sends an HTML response with appropriate content-type headers.
|
|
132
211
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { AsenaWebSocketService, WSOptions } from '../server/web/websocket';
|
|
2
|
-
import type { WebSocketHandler } from 'bun';
|
|
1
|
+
import type { AsenaWebSocketService, WebSocketTransport, WSOptions, WebSocketData } from '../server/web/websocket';
|
|
2
|
+
import type { ServerWebSocket, WebSocketHandler } from 'bun';
|
|
3
3
|
import type { WebSocketRegistry } from './types';
|
|
4
4
|
import type { ServerLogger } from '../logger';
|
|
5
5
|
/**
|
|
@@ -30,6 +30,12 @@ export declare abstract class AsenaWebsocketAdapter {
|
|
|
30
30
|
* @private
|
|
31
31
|
*/
|
|
32
32
|
private _logger;
|
|
33
|
+
/**
|
|
34
|
+
* Optional WebSocket transport for cross-pod messaging.
|
|
35
|
+
* When set, publish operations are routed through this transport.
|
|
36
|
+
* @protected
|
|
37
|
+
*/
|
|
38
|
+
protected _transport?: WebSocketTransport;
|
|
33
39
|
/**
|
|
34
40
|
* Initializes a new WebSocket adapter instance
|
|
35
41
|
* @param logger - Logger instance for WebSocket-related logging
|
|
@@ -74,4 +80,37 @@ export declare abstract class AsenaWebsocketAdapter {
|
|
|
74
80
|
* Sets the logger instance
|
|
75
81
|
*/
|
|
76
82
|
set logger(value: ServerLogger);
|
|
83
|
+
/**
|
|
84
|
+
* Gets the WebSocket transport
|
|
85
|
+
*/
|
|
86
|
+
get transport(): WebSocketTransport | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* Sets the WebSocket transport for cross-pod messaging
|
|
89
|
+
*/
|
|
90
|
+
set transport(value: WebSocketTransport | undefined);
|
|
91
|
+
/**
|
|
92
|
+
* Map of connection ID to heartbeat interval timer.
|
|
93
|
+
* Used when sendPingStrategy is 'adapter'.
|
|
94
|
+
*/
|
|
95
|
+
protected heartbeatIntervals: Map<string, Timer>;
|
|
96
|
+
/**
|
|
97
|
+
* Starts a periodic heartbeat (ping) for a WebSocket connection.
|
|
98
|
+
* Call from the adapter's open handler when using 'adapter' strategy.
|
|
99
|
+
*
|
|
100
|
+
* @param ws - The WebSocket connection
|
|
101
|
+
* @param intervalMs - Heartbeat interval in milliseconds (default: 30000)
|
|
102
|
+
*/
|
|
103
|
+
protected startHeartbeat(ws: ServerWebSocket<WebSocketData>, intervalMs?: number): void;
|
|
104
|
+
/**
|
|
105
|
+
* Stops the heartbeat for a single connection.
|
|
106
|
+
* Call from the adapter's close handler.
|
|
107
|
+
*
|
|
108
|
+
* @param connectionId - The connection ID
|
|
109
|
+
*/
|
|
110
|
+
protected stopHeartbeat(connectionId: string): void;
|
|
111
|
+
/**
|
|
112
|
+
* Clears all active heartbeat intervals.
|
|
113
|
+
* Call during adapter shutdown.
|
|
114
|
+
*/
|
|
115
|
+
protected clearAllHeartbeats(): void;
|
|
77
116
|
}
|
|
@@ -26,6 +26,12 @@ export class AsenaWebsocketAdapter {
|
|
|
26
26
|
* @private
|
|
27
27
|
*/
|
|
28
28
|
_logger = console;
|
|
29
|
+
/**
|
|
30
|
+
* Optional WebSocket transport for cross-pod messaging.
|
|
31
|
+
* When set, publish operations are routed through this transport.
|
|
32
|
+
* @protected
|
|
33
|
+
*/
|
|
34
|
+
_transport;
|
|
29
35
|
/**
|
|
30
36
|
* Initializes a new WebSocket adapter instance
|
|
31
37
|
* @param logger - Logger instance for WebSocket-related logging
|
|
@@ -69,5 +75,73 @@ export class AsenaWebsocketAdapter {
|
|
|
69
75
|
set logger(value) {
|
|
70
76
|
this._logger = value;
|
|
71
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Gets the WebSocket transport
|
|
80
|
+
*/
|
|
81
|
+
get transport() {
|
|
82
|
+
return this._transport;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Sets the WebSocket transport for cross-pod messaging
|
|
86
|
+
*/
|
|
87
|
+
set transport(value) {
|
|
88
|
+
this._transport = value;
|
|
89
|
+
}
|
|
90
|
+
// ── Heartbeat Infrastructure ──────────────────────────────────────────
|
|
91
|
+
/**
|
|
92
|
+
* Map of connection ID to heartbeat interval timer.
|
|
93
|
+
* Used when sendPingStrategy is 'adapter'.
|
|
94
|
+
*/
|
|
95
|
+
heartbeatIntervals = new Map();
|
|
96
|
+
/**
|
|
97
|
+
* Starts a periodic heartbeat (ping) for a WebSocket connection.
|
|
98
|
+
* Call from the adapter's open handler when using 'adapter' strategy.
|
|
99
|
+
*
|
|
100
|
+
* @param ws - The WebSocket connection
|
|
101
|
+
* @param intervalMs - Heartbeat interval in milliseconds (default: 30000)
|
|
102
|
+
*/
|
|
103
|
+
startHeartbeat(ws, intervalMs = 30000) {
|
|
104
|
+
const interval = setInterval(() => {
|
|
105
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
106
|
+
try {
|
|
107
|
+
ws.ping();
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
this.logger.error(`Heartbeat ping failed for connection ${ws.data.id}:`, error);
|
|
111
|
+
this.stopHeartbeat(ws.data.id);
|
|
112
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
113
|
+
ws.close(1011, 'Heartbeat failed');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
this.stopHeartbeat(ws.data.id);
|
|
119
|
+
}
|
|
120
|
+
}, intervalMs);
|
|
121
|
+
this.heartbeatIntervals.set(ws.data.id, interval);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Stops the heartbeat for a single connection.
|
|
125
|
+
* Call from the adapter's close handler.
|
|
126
|
+
*
|
|
127
|
+
* @param connectionId - The connection ID
|
|
128
|
+
*/
|
|
129
|
+
stopHeartbeat(connectionId) {
|
|
130
|
+
const interval = this.heartbeatIntervals.get(connectionId);
|
|
131
|
+
if (interval) {
|
|
132
|
+
clearInterval(interval);
|
|
133
|
+
this.heartbeatIntervals.delete(connectionId);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Clears all active heartbeat intervals.
|
|
138
|
+
* Call during adapter shutdown.
|
|
139
|
+
*/
|
|
140
|
+
clearAllHeartbeats() {
|
|
141
|
+
for (const interval of this.heartbeatIntervals.values()) {
|
|
142
|
+
clearInterval(interval);
|
|
143
|
+
}
|
|
144
|
+
this.heartbeatIntervals.clear();
|
|
145
|
+
}
|
|
72
146
|
}
|
|
73
147
|
//# sourceMappingURL=AsenaWebsocketAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsenaWebsocketAdapter.js","sourceRoot":"","sources":["../../../lib/adapter/AsenaWebsocketAdapter.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,OAAgB,qBAAqB;IACzB,IAAI,CAAS;IAE7B;;;;;;;;OAQG;IACO,WAAW,CAAoB;IAEzC;;;OAGG;IACK,UAAU,CAAwB;IAE1C;;;OAGG;IACK,OAAO,GAAiB,OAAO,CAAC;IAExC;;;OAGG;IACH,YAAsB,MAAoB;QACxC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAoBD;;OAEG;IACH,IAAc,UAAU;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAc,UAAU,CAAC,KAAwB;QAC/C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAW,SAAS,CAAC,KAA4B;QAC/C,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,IAAW,MAAM,CAAC,KAAmB;QACnC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"AsenaWebsocketAdapter.js","sourceRoot":"","sources":["../../../lib/adapter/AsenaWebsocketAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,8 @@ export interface ApiParams<C extends AsenaContext<any, any> = any, SH = unknown>
|
|
|
25
25
|
path: string;
|
|
26
26
|
/** The HTTP method for the route. */
|
|
27
27
|
method: HttpMethod;
|
|
28
|
+
/** A short summary of the route (displayed in OpenAPI UI). */
|
|
29
|
+
summary: string;
|
|
28
30
|
/** A brief description of the route. */
|
|
29
31
|
description: string;
|
|
30
32
|
/** An array of middleware classes to be applied to the route. */
|
|
@@ -58,6 +60,10 @@ export interface ControllerDecoratorParams<C extends AsenaContext<any, any> = an
|
|
|
58
60
|
* Optional array of middleware classes to be applied.
|
|
59
61
|
*/
|
|
60
62
|
middlewares?: MiddlewareClass<C>[];
|
|
63
|
+
/**
|
|
64
|
+
* Optional short summary of the route (displayed in OpenAPI UI).
|
|
65
|
+
*/
|
|
66
|
+
summary?: string;
|
|
61
67
|
/**
|
|
62
68
|
* Optional description of the route.
|
|
63
69
|
*/
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSE message format following the Server-Sent Events specification.
|
|
3
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events
|
|
4
|
+
*/
|
|
5
|
+
export interface SSEMessage {
|
|
6
|
+
/** The data field. Multi-line strings are automatically split into separate data: lines. */
|
|
7
|
+
data: string;
|
|
8
|
+
/** Optional event type name */
|
|
9
|
+
event?: string;
|
|
10
|
+
/** Optional event ID for reconnection */
|
|
11
|
+
id?: string;
|
|
12
|
+
/** Optional reconnection time in milliseconds */
|
|
13
|
+
retry?: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Writer interface for generic streaming responses.
|
|
17
|
+
* Adapter implementations provide concrete instances backed by TransformStream.
|
|
18
|
+
*/
|
|
19
|
+
export interface AsenaStreamWriter {
|
|
20
|
+
/** Write raw bytes or a string to the stream */
|
|
21
|
+
write(input: Uint8Array | string): Promise<void>;
|
|
22
|
+
/** Write a string followed by a newline */
|
|
23
|
+
writeln(input: string): Promise<void>;
|
|
24
|
+
/** Close the stream normally */
|
|
25
|
+
close(): Promise<void>;
|
|
26
|
+
/** Pipe a ReadableStream through this writer */
|
|
27
|
+
pipe(body: ReadableStream): Promise<void>;
|
|
28
|
+
/** Register a callback for when the client disconnects */
|
|
29
|
+
onAbort(listener: () => void | Promise<void>): void;
|
|
30
|
+
/** Whether the stream has been aborted by the client */
|
|
31
|
+
readonly aborted: boolean;
|
|
32
|
+
/** Whether the stream has been closed normally */
|
|
33
|
+
readonly closed: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Writer interface for SSE streaming responses.
|
|
37
|
+
* Extends the base writer with SSE-specific writeSSE method.
|
|
38
|
+
*/
|
|
39
|
+
export interface AsenaSSEStreamWriter extends AsenaStreamWriter {
|
|
40
|
+
/** Write a formatted SSE message */
|
|
41
|
+
writeSSE(message: SSEMessage): Promise<void>;
|
|
42
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Streaming.js","sourceRoot":"","sources":["../../../../lib/adapter/types/Streaming.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/adapter/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/adapter/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { Class } from '../server/types';
|
|
2
|
-
import type { ComponentType, ContainerService } from './types';
|
|
2
|
+
import type { ComponentPostProcessor, ComponentType, ContainerService } from './types';
|
|
3
3
|
export declare class Container {
|
|
4
4
|
private _services;
|
|
5
5
|
private circularDetector;
|
|
6
|
+
private postProcessors;
|
|
6
7
|
constructor(services?: {
|
|
7
8
|
[key: string]: ContainerService | ContainerService[];
|
|
8
9
|
});
|
|
@@ -25,6 +26,12 @@ export declare class Container {
|
|
|
25
26
|
private filterServices;
|
|
26
27
|
private resolveContainerService;
|
|
27
28
|
private resolveMultipleContainerService;
|
|
29
|
+
/**
|
|
30
|
+
* @description Register a ComponentPostProcessor for post-processing newly created instances.
|
|
31
|
+
* PostProcessors are called in FIFO order after DI + PostConstruct.
|
|
32
|
+
* @param {ComponentPostProcessor} processor - The post-processor to register
|
|
33
|
+
*/
|
|
34
|
+
registerPostProcessor(processor: ComponentPostProcessor): void;
|
|
28
35
|
private prepareInstance;
|
|
29
36
|
/**
|
|
30
37
|
* @description Executes PostConstruct methods on the instance.
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ComponentConstants } from './constants';
|
|
2
|
-
import { getOwnTypedMetadata, getTypedMetadata } from '../utils
|
|
2
|
+
import { getOwnTypedMetadata, getTypedMetadata } from '../utils';
|
|
3
3
|
import { CircularDependencyDetector } from './CircularDependencyDetector';
|
|
4
4
|
import { CORE_SERVICE } from './decorators';
|
|
5
5
|
export class Container {
|
|
6
6
|
_services = {};
|
|
7
7
|
circularDetector = new CircularDependencyDetector();
|
|
8
|
+
postProcessors = [];
|
|
8
9
|
constructor(services) {
|
|
9
10
|
this._services = services || {};
|
|
10
11
|
}
|
|
@@ -105,12 +106,25 @@ export class Container {
|
|
|
105
106
|
async resolveMultipleContainerService(containerService) {
|
|
106
107
|
return Promise.all(containerService.map(async (_service) => this.resolveContainerService(_service)));
|
|
107
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* @description Register a ComponentPostProcessor for post-processing newly created instances.
|
|
111
|
+
* PostProcessors are called in FIFO order after DI + PostConstruct.
|
|
112
|
+
* @param {ComponentPostProcessor} processor - The post-processor to register
|
|
113
|
+
*/
|
|
114
|
+
registerPostProcessor(processor) {
|
|
115
|
+
this.postProcessors.push(processor);
|
|
116
|
+
}
|
|
108
117
|
async prepareInstance(Class) {
|
|
109
118
|
const newInstance = new Class();
|
|
110
119
|
await this.injectDependencies(newInstance, Class); // dependency injection
|
|
111
120
|
await this.injectStrategies(newInstance, Class); // strategy injection
|
|
112
121
|
await this.executePostConstructs(newInstance, Class); // post construct
|
|
113
|
-
|
|
122
|
+
// Post-processing (skipped when postProcessors is empty - zero overhead)
|
|
123
|
+
let processed = newInstance;
|
|
124
|
+
for (const processor of this.postProcessors) {
|
|
125
|
+
processed = (await processor.postProcess(processed, Class)) ?? processed;
|
|
126
|
+
}
|
|
127
|
+
return processed;
|
|
114
128
|
}
|
|
115
129
|
/**
|
|
116
130
|
* @description Executes PostConstruct methods on the instance.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Container.js","sourceRoot":"","sources":["../../../lib/ioc/Container.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Container.js","sourceRoot":"","sources":["../../../lib/ioc/Container.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,9 +7,12 @@ import { PrepareWebsocketService } from '../server/src/services/PrepareWebsocket
|
|
|
7
7
|
import { PrepareValidatorService } from '../server/src/services/PrepareValidatorService';
|
|
8
8
|
import { PrepareStaticServeConfigService } from '../server/src/services/PrepareStaticServeConfigService';
|
|
9
9
|
import { PrepareEventService } from '../server/src/services/PrepareEventService';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
10
|
+
import { PrepareScheduleService } from '../server/src/services/PrepareScheduleService';
|
|
11
|
+
import { PrepareFrontendControllerService } from '../server/src/services/PrepareFrontendControllerService';
|
|
12
|
+
import { Ulak } from '../server/messaging';
|
|
13
|
+
import { EventDispatchService } from '../server/event';
|
|
14
|
+
import { EventEmitter } from '../server/event';
|
|
15
|
+
import { CronRunner } from '../server/schedule';
|
|
13
16
|
/**
|
|
14
17
|
* @description CoreContainer manages framework-level services
|
|
15
18
|
* Handles the bootstrap sequence for core services and user components
|
|
@@ -115,6 +118,10 @@ export class CoreContainer {
|
|
|
115
118
|
{ name: ICoreServiceNames.PREPARE_VALIDATOR_SERVICE, Class: PrepareValidatorService },
|
|
116
119
|
{ name: ICoreServiceNames.PREPARE_STATIC_SERVE_CONFIG_SERVICE, Class: PrepareStaticServeConfigService },
|
|
117
120
|
{ name: ICoreServiceNames.PREPARE_EVENT_SERVICE, Class: PrepareEventService },
|
|
121
|
+
{ name: ICoreServiceNames.PREPARE_FRONTEND_CONTROLLER_SERVICE, Class: PrepareFrontendControllerService },
|
|
122
|
+
// Schedule system (CronRunner must be registered before PrepareScheduleService)
|
|
123
|
+
{ name: ICoreServiceNames.CRON_RUNNER, Class: CronRunner },
|
|
124
|
+
{ name: ICoreServiceNames.PREPARE_SCHEDULE_SERVICE, Class: PrepareScheduleService },
|
|
118
125
|
];
|
|
119
126
|
for (const service of services) {
|
|
120
127
|
await this._container.register(service.name, service.Class, true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoreContainer.js","sourceRoot":"","sources":["../../../lib/ioc/CoreContainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,+BAA+B,EAAE,MAAM,wDAAwD,CAAC;AACzG,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"CoreContainer.js","sourceRoot":"","sources":["../../../lib/ioc/CoreContainer.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import type { Container } from './Container';
|
|
|
7
7
|
export declare class IocEngine implements ICoreService {
|
|
8
8
|
serviceName: string;
|
|
9
9
|
private _container;
|
|
10
|
+
private logger;
|
|
10
11
|
private injectables;
|
|
11
12
|
private config?;
|
|
12
13
|
/**
|
|
@@ -27,6 +28,12 @@ export declare class IocEngine implements ICoreService {
|
|
|
27
28
|
private topologicalSort;
|
|
28
29
|
private initializeGraph;
|
|
29
30
|
private findCycle;
|
|
31
|
+
/**
|
|
32
|
+
* @description Separates PostProcessor classes and their transitive dependencies from other components.
|
|
33
|
+
* PostProcessors and their deps are registered in Phase A (before post-processing is active).
|
|
34
|
+
* Non-PostProcessor dependencies pulled into Phase A will NOT be post-processed (by design).
|
|
35
|
+
*/
|
|
36
|
+
private separatePostProcessors;
|
|
30
37
|
private getDependencies;
|
|
31
38
|
private getStrategyDependencies;
|
|
32
39
|
get container(): Container;
|