@kanjijs/platform-hono 0.2.0-beta.9 → 1.0.0-alpha.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/LICENSE +21 -0
- package/dist/context-helper.d.ts +16 -0
- package/dist/context-helper.d.ts.map +1 -0
- package/dist/context-helper.js +29 -0
- package/dist/context-helper.js.map +1 -0
- package/dist/decorators/controller.d.ts +2 -0
- package/dist/decorators/controller.d.ts.map +1 -0
- package/dist/decorators/controller.js +7 -0
- package/dist/decorators/controller.js.map +1 -0
- package/dist/decorators/index.d.ts +5 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +5 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/decorators/rate-limit.d.ts +11 -0
- package/dist/decorators/rate-limit.d.ts.map +1 -0
- package/dist/decorators/rate-limit.js +10 -0
- package/dist/decorators/rate-limit.js.map +1 -0
- package/dist/decorators/route.d.ts +9 -0
- package/dist/decorators/route.d.ts.map +1 -0
- package/dist/decorators/route.js +27 -0
- package/dist/decorators/route.js.map +1 -0
- package/dist/decorators/use.d.ts +3 -0
- package/dist/decorators/use.d.ts.map +1 -0
- package/dist/decorators/use.js +12 -0
- package/dist/decorators/use.js.map +1 -0
- package/dist/exception-filter.service.d.ts +8 -0
- package/dist/exception-filter.service.d.ts.map +1 -0
- package/dist/exception-filter.service.js +15 -0
- package/dist/exception-filter.service.js.map +1 -0
- package/dist/gateway/decorators.d.ts +7 -0
- package/dist/gateway/decorators.d.ts.map +1 -0
- package/dist/gateway/decorators.js +28 -0
- package/dist/gateway/decorators.js.map +1 -0
- package/dist/gateway/handler.d.ts +10 -0
- package/dist/gateway/handler.d.ts.map +1 -0
- package/dist/gateway/handler.js +142 -0
- package/dist/gateway/handler.js.map +1 -0
- package/dist/gateway/index.d.ts +5 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +5 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/ws-context.d.ts +31 -0
- package/dist/gateway/ws-context.d.ts.map +1 -0
- package/dist/gateway/ws-context.js +32 -0
- package/dist/gateway/ws-context.js.map +1 -0
- package/dist/gateway/ws-metadata-storage.d.ts +25 -0
- package/dist/gateway/ws-metadata-storage.d.ts.map +1 -0
- package/dist/gateway/ws-metadata-storage.js +39 -0
- package/dist/gateway/ws-metadata-storage.js.map +1 -0
- package/dist/hono-adapter.d.ts +19 -0
- package/dist/hono-adapter.d.ts.map +1 -0
- package/dist/hono-adapter.js +243 -0
- package/dist/hono-adapter.js.map +1 -0
- package/dist/http-metadata-storage.d.ts +22 -0
- package/dist/http-metadata-storage.d.ts.map +1 -0
- package/dist/http-metadata-storage.js +40 -0
- package/dist/http-metadata-storage.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -3339
- package/dist/index.js.map +1 -0
- package/dist/middleware/rate-limit.d.ts +13 -0
- package/dist/middleware/rate-limit.d.ts.map +1 -0
- package/dist/middleware/rate-limit.js +86 -0
- package/dist/middleware/rate-limit.js.map +1 -0
- package/dist/middleware/request-id.d.ts +3 -0
- package/dist/middleware/request-id.d.ts.map +1 -0
- package/dist/middleware/request-id.js +7 -0
- package/dist/middleware/request-id.js.map +1 -0
- package/dist/middleware/request-logger.d.ts +4 -0
- package/dist/middleware/request-logger.d.ts.map +1 -0
- package/dist/middleware/request-logger.js +31 -0
- package/dist/middleware/request-logger.js.map +1 -0
- package/dist/types.d.ts +41 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +18 -0
- package/dist/types.js.map +1 -0
- package/package.json +17 -15
- package/README.md +0 -29
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 David Sebastian Aguiar
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Context } from 'hono';
|
|
2
|
+
export declare function getValidatedBody<T = Record<string, unknown>>(c: Context): T;
|
|
3
|
+
export declare function getValidatedQuery<T = Record<string, unknown>>(c: Context): T;
|
|
4
|
+
export declare function getValidatedParams<T = Record<string, unknown>>(c: Context): T;
|
|
5
|
+
export declare function getValidatedHeaders<T = Record<string, unknown>>(c: Context): T;
|
|
6
|
+
export declare function getRequestId(c: Context): string;
|
|
7
|
+
export declare function getAuthUser<T = {
|
|
8
|
+
id: string;
|
|
9
|
+
email: string;
|
|
10
|
+
name: string;
|
|
11
|
+
roles: string[];
|
|
12
|
+
}>(c: Context): T | undefined;
|
|
13
|
+
export declare function getAuthSession<T = Record<string, unknown>>(c: Context): T | undefined;
|
|
14
|
+
export declare function getAuthRoles(c: Context): string[];
|
|
15
|
+
export declare function getAuthScopes(c: Context): string[];
|
|
16
|
+
//# sourceMappingURL=context-helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-helper.d.ts","sourceRoot":"","sources":["../src/context-helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGpC,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,CAE3E;AAED,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,CAE5E;AAED,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,CAE7E;AAED,wBAAgB,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,CAE9E;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CAAC,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,EAC1F,CAAC,EAAE,OAAO,GACT,CAAC,GAAG,SAAS,CAEf;AAED,wBAAgB,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,SAAS,CAErF;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAEjD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAElD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { KANJI_CTX } from './types.js';
|
|
2
|
+
export function getValidatedBody(c) {
|
|
3
|
+
return c.get(KANJI_CTX.VALIDATED_BODY);
|
|
4
|
+
}
|
|
5
|
+
export function getValidatedQuery(c) {
|
|
6
|
+
return c.get(KANJI_CTX.VALIDATED_QUERY);
|
|
7
|
+
}
|
|
8
|
+
export function getValidatedParams(c) {
|
|
9
|
+
return c.get(KANJI_CTX.VALIDATED_PARAMS);
|
|
10
|
+
}
|
|
11
|
+
export function getValidatedHeaders(c) {
|
|
12
|
+
return c.get(KANJI_CTX.VALIDATED_HEADERS);
|
|
13
|
+
}
|
|
14
|
+
export function getRequestId(c) {
|
|
15
|
+
return c.get(KANJI_CTX.REQUEST_ID);
|
|
16
|
+
}
|
|
17
|
+
export function getAuthUser(c) {
|
|
18
|
+
return c.get(KANJI_CTX.AUTH_USER);
|
|
19
|
+
}
|
|
20
|
+
export function getAuthSession(c) {
|
|
21
|
+
return c.get(KANJI_CTX.AUTH_SESSION);
|
|
22
|
+
}
|
|
23
|
+
export function getAuthRoles(c) {
|
|
24
|
+
return c.get(KANJI_CTX.AUTH_ROLES) ?? [];
|
|
25
|
+
}
|
|
26
|
+
export function getAuthScopes(c) {
|
|
27
|
+
return c.get(KANJI_CTX.AUTH_SCOPES) ?? [];
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=context-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-helper.js","sourceRoot":"","sources":["../src/context-helper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,UAAU,gBAAgB,CAA8B,CAAU;IACtE,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAwB,CAAM,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAA8B,CAAU;IACvE,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAyB,CAAM,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAA8B,CAAU;IACxE,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,gBAA0B,CAAM,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAA8B,CAAU;IACzE,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iBAA2B,CAAM,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAoB,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,CAAU;IAEV,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAmB,CAAkB,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,cAAc,CAA8B,CAAU;IACpE,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,YAAsB,CAAkB,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAoB,CAAC,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAU;IACtC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAqB,CAAC,IAAI,EAAE,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/decorators/controller.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,IAAI,GAAE,MAAW,GAAG,cAAc,CAI5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/decorators/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE;IAC1C,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC1B,mBAAmB,CAAC,WAAW,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
export interface RateLimitOptions {
|
|
3
|
+
limit: number;
|
|
4
|
+
window: string | number;
|
|
5
|
+
by: 'ip' | 'user' | 'global';
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Decorador para aplicar rate limit a un endpoint de controlador HTTP.
|
|
9
|
+
*/
|
|
10
|
+
export declare function RateLimit(options: RateLimitOptions): MethodDecorator;
|
|
11
|
+
//# sourceMappingURL=rate-limit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/decorators/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,EAAE,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAIpE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
/**
|
|
3
|
+
* Decorador para aplicar rate limit a un endpoint de controlador HTTP.
|
|
4
|
+
*/
|
|
5
|
+
export function RateLimit(options) {
|
|
6
|
+
return (target, propertyKey) => {
|
|
7
|
+
Reflect.defineMetadata('kanji:rate-limit', options, target, propertyKey);
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=rate-limit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/decorators/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAQ1B;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,OAAyB;IACjD,OAAO,CAAC,MAAc,EAAE,WAA4B,EAAE,EAAE;QACtD,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
export declare const Get: (path?: string) => MethodDecorator;
|
|
3
|
+
export declare const Post: (path?: string) => MethodDecorator;
|
|
4
|
+
export declare const Put: (path?: string) => MethodDecorator;
|
|
5
|
+
export declare const Delete: (path?: string) => MethodDecorator;
|
|
6
|
+
export declare const Patch: (path?: string) => MethodDecorator;
|
|
7
|
+
export declare const Options: (path?: string) => MethodDecorator;
|
|
8
|
+
export declare const Head: (path?: string) => MethodDecorator;
|
|
9
|
+
//# sourceMappingURL=route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/decorators/route.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AA4B1B,eAAO,MAAM,GAAG,UAvBA,MAAM,KAAQ,eAuBgB,CAAC;AAC/C,eAAO,MAAM,IAAI,UAxBD,MAAM,KAAQ,eAwBkB,CAAC;AACjD,eAAO,MAAM,GAAG,UAzBA,MAAM,KAAQ,eAyBgB,CAAC;AAC/C,eAAO,MAAM,MAAM,UA1BH,MAAM,KAAQ,eA0BsB,CAAC;AACrD,eAAO,MAAM,KAAK,UA3BF,MAAM,KAAQ,eA2BoB,CAAC;AACnD,eAAO,MAAM,OAAO,UA5BJ,MAAM,KAAQ,eA4BwB,CAAC;AACvD,eAAO,MAAM,IAAI,UA7BD,MAAM,KAAQ,eA6BkB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { HttpMetadataStorage } from '../http-metadata-storage';
|
|
3
|
+
import { captureLocation } from '@kanjijs/contracts';
|
|
4
|
+
function createRouteDecorator(method) {
|
|
5
|
+
return (path = '') => {
|
|
6
|
+
return (target, propertyKey) => {
|
|
7
|
+
Reflect.defineMetadata('kanji:http:method', { method: method.toUpperCase(), path }, target, propertyKey);
|
|
8
|
+
const location = captureLocation();
|
|
9
|
+
if (location) {
|
|
10
|
+
Reflect.defineMetadata('kanji:location', location, target, propertyKey);
|
|
11
|
+
}
|
|
12
|
+
HttpMetadataStorage.getInstance().registerRoute(target.constructor, {
|
|
13
|
+
propertyKey,
|
|
14
|
+
method,
|
|
15
|
+
path,
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export const Get = createRouteDecorator('get');
|
|
21
|
+
export const Post = createRouteDecorator('post');
|
|
22
|
+
export const Put = createRouteDecorator('put');
|
|
23
|
+
export const Delete = createRouteDecorator('delete');
|
|
24
|
+
export const Patch = createRouteDecorator('patch');
|
|
25
|
+
export const Options = createRouteDecorator('options');
|
|
26
|
+
export const Head = createRouteDecorator('head');
|
|
27
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/decorators/route.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAmB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,SAAS,oBAAoB,CAAC,MAAkB;IAC9C,OAAO,CAAC,OAAe,EAAE,EAAmB,EAAE;QAC5C,OAAO,CAAC,MAAc,EAAE,WAA4B,EAAE,EAAE;YACtD,OAAO,CAAC,cAAc,CACpB,mBAAmB,EACnB,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,EACtC,MAAM,EACN,WAAW,CACZ,CAAC;YAEF,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;YACnC,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,cAAc,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YAC1E,CAAC;YAED,mBAAmB,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE;gBAClE,WAAW;gBACX,MAAM;gBACN,IAAI;aACL,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,GAAG,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../src/decorators/use.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAG9C,wBAAgB,GAAG,CAAC,GAAG,WAAW,EAAE,iBAAiB,EAAE,GAAG,eAAe,CAexE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { HttpMetadataStorage } from '../http-metadata-storage';
|
|
2
|
+
export function Use(...middlewares) {
|
|
3
|
+
return (target, propertyKey) => {
|
|
4
|
+
if (propertyKey) {
|
|
5
|
+
HttpMetadataStorage.getInstance().registerRouteMiddleware(target.constructor, propertyKey, middlewares);
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
HttpMetadataStorage.getInstance().registerControllerMiddleware(target, middlewares);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=use.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use.js","sourceRoot":"","sources":["../../src/decorators/use.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,UAAU,GAAG,CAAC,GAAG,WAAgC;IACrD,OAAO,CAAC,MAAc,EAAE,WAA6B,EAAE,EAAE;QACvD,IAAI,WAAW,EAAE,CAAC;YAChB,mBAAmB,CAAC,WAAW,EAAE,CAAC,uBAAuB,CACvD,MAAM,CAAC,WAAW,EAClB,WAAW,EACX,WAAW,CACZ,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,mBAAmB,CAAC,WAAW,EAAE,CAAC,4BAA4B,CAC5D,MAAkB,EAClB,WAAW,CACZ,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Context } from 'hono';
|
|
2
|
+
import type { ExceptionFilter } from '@kanjijs/common';
|
|
3
|
+
export declare class ExceptionFilterService {
|
|
4
|
+
private filters;
|
|
5
|
+
register(instance: ExceptionFilter, targets: Array<new (...args: any[]) => Error>): void;
|
|
6
|
+
handle(exception: Error, c: Context): Promise<Response | undefined>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=exception-filter.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exception-filter.service.d.ts","sourceRoot":"","sources":["../src/exception-filter.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAGP;IAER,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC,GAAG,IAAI;IAIlF,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;CAQ1E"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export class ExceptionFilterService {
|
|
2
|
+
filters = [];
|
|
3
|
+
register(instance, targets) {
|
|
4
|
+
this.filters.push({ targets, instance });
|
|
5
|
+
}
|
|
6
|
+
async handle(exception, c) {
|
|
7
|
+
for (const filter of this.filters) {
|
|
8
|
+
if (filter.targets.some((t) => exception instanceof t)) {
|
|
9
|
+
return filter.instance.catch(exception, c);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=exception-filter.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exception-filter.service.js","sourceRoot":"","sources":["../src/exception-filter.service.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,sBAAsB;IACzB,OAAO,GAGV,EAAE,CAAC;IAER,QAAQ,CAAC,QAAyB,EAAE,OAA6C;QAC/E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAgB,EAAE,CAAU;QACvC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,EAAE,CAAC;gBACvD,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from 'hono';
|
|
2
|
+
import { type WsEventType } from './ws-metadata-storage.js';
|
|
3
|
+
export declare function WebSocketGateway(path?: string): ClassDecorator;
|
|
4
|
+
export declare function WebSocketMessage(event: string): MethodDecorator;
|
|
5
|
+
export declare function WebSocketEvent(event: WsEventType): MethodDecorator;
|
|
6
|
+
export declare function UseWsGuards(...guards: MiddlewareHandler[]): ClassDecorator;
|
|
7
|
+
//# sourceMappingURL=decorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/gateway/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE/E,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAAc,GAAG,cAAc,CAIrE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAO/D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,eAAe,CAOlE;AAED,wBAAgB,WAAW,CAAC,GAAG,MAAM,EAAE,iBAAiB,EAAE,GAAG,cAAc,CAI1E"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { WsMetadataStorage } from './ws-metadata-storage.js';
|
|
2
|
+
export function WebSocketGateway(path = '/ws') {
|
|
3
|
+
return (target) => {
|
|
4
|
+
WsMetadataStorage.getInstance().registerGateway(target, path);
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
export function WebSocketMessage(event) {
|
|
8
|
+
return (target, propertyKey) => {
|
|
9
|
+
WsMetadataStorage.getInstance().registerMessageHandler(target.constructor, {
|
|
10
|
+
event,
|
|
11
|
+
propertyKey,
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function WebSocketEvent(event) {
|
|
16
|
+
return (target, propertyKey) => {
|
|
17
|
+
WsMetadataStorage.getInstance().registerEventHandler(target.constructor, {
|
|
18
|
+
event,
|
|
19
|
+
propertyKey,
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function UseWsGuards(...guards) {
|
|
24
|
+
return (target) => {
|
|
25
|
+
WsMetadataStorage.getInstance().registerControllerMiddleware(target, guards);
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=decorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/gateway/decorators.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAoB,MAAM,0BAA0B,CAAC;AAE/E,MAAM,UAAU,gBAAgB,CAAC,OAAe,KAAK;IACnD,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC1B,iBAAiB,CAAC,WAAW,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,CAAC,MAAc,EAAE,WAA4B,EAAE,EAAE;QACtD,iBAAiB,CAAC,WAAW,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,WAAW,EAAE;YACzE,KAAK;YACL,WAAW;SACZ,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAkB;IAC/C,OAAO,CAAC,MAAc,EAAE,WAA4B,EAAE,EAAE;QACtD,iBAAiB,CAAC,WAAW,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,WAAW,EAAE;YACvE,KAAK;YACL,WAAW;SACZ,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAG,MAA2B;IACxD,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC1B,iBAAiB,CAAC,WAAW,EAAE,CAAC,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/E,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from 'hono';
|
|
2
|
+
import type { KanjiLogger } from '@kanjijs/common';
|
|
3
|
+
export declare class WsGatewayHandler {
|
|
4
|
+
private readonly logger?;
|
|
5
|
+
constructor(logger?: KanjiLogger | undefined);
|
|
6
|
+
createUpgradeHandler(instance: Record<string | symbol, (...args: any[]) => unknown>, gatewayClass: Function): MiddlewareHandler;
|
|
7
|
+
private invokeHandler;
|
|
8
|
+
private handleWsError;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/gateway/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAP,MAAM,CAAC,EAAE,WAAW,YAAA;IAEjD,oBAAoB,CAElB,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,EAC9D,YAAY,EAAE,QAAQ,GACrB,iBAAiB;IAsIpB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,aAAa;CAWtB"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { WsMetadataStorage } from './ws-metadata-storage.js';
|
|
2
|
+
import { WebSocketContext } from './ws-context.js';
|
|
3
|
+
export class WsGatewayHandler {
|
|
4
|
+
logger;
|
|
5
|
+
constructor(logger) {
|
|
6
|
+
this.logger = logger;
|
|
7
|
+
}
|
|
8
|
+
createUpgradeHandler(
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
|
+
instance, gatewayClass) {
|
|
11
|
+
const ws = WsMetadataStorage.getInstance();
|
|
12
|
+
const messageHandlers = ws.messageHandlers.get(gatewayClass) || [];
|
|
13
|
+
const eventHandlers = ws.eventHandlers.get(gatewayClass) || [];
|
|
14
|
+
const connectHandler = eventHandlers.find((e) => e.event === 'connect');
|
|
15
|
+
const disconnectHandler = eventHandlers.find((e) => e.event === 'disconnect');
|
|
16
|
+
const errorHandler = eventHandlers.find((e) => e.event === 'error');
|
|
17
|
+
const messageMap = new Map();
|
|
18
|
+
for (const mh of messageHandlers) {
|
|
19
|
+
messageMap.set(mh.event, mh.propertyKey);
|
|
20
|
+
}
|
|
21
|
+
const self = this;
|
|
22
|
+
// Lazy import hono/bun for the upgradeWebSocket helper
|
|
23
|
+
let upgradeHandler = null;
|
|
24
|
+
return async (c, next) => {
|
|
25
|
+
if (!upgradeHandler) {
|
|
26
|
+
const { upgradeWebSocket } = await import('hono/bun');
|
|
27
|
+
upgradeHandler = upgradeWebSocket((c) => ({
|
|
28
|
+
onOpen(_evt, wsRaw) {
|
|
29
|
+
if (!connectHandler)
|
|
30
|
+
return;
|
|
31
|
+
const ctx = new WebSocketContext(c, wsRaw);
|
|
32
|
+
const method = instance[connectHandler.propertyKey];
|
|
33
|
+
if (typeof method === 'function') {
|
|
34
|
+
method(ctx);
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
onMessage(evt, wsRaw) {
|
|
38
|
+
let parsed = null;
|
|
39
|
+
try {
|
|
40
|
+
const rawData = JSON.parse(evt.data);
|
|
41
|
+
if (rawData && typeof rawData === 'object' && !Array.isArray(rawData)) {
|
|
42
|
+
parsed = rawData;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
wsRaw.send(JSON.stringify({
|
|
47
|
+
event: 'error',
|
|
48
|
+
data: { code: 'PARSE_ERROR', message: 'Invalid JSON' },
|
|
49
|
+
}));
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (!parsed) {
|
|
53
|
+
wsRaw.send(JSON.stringify({
|
|
54
|
+
event: 'error',
|
|
55
|
+
data: { code: 'INVALID_FORMAT', message: 'Payload must be a JSON object' },
|
|
56
|
+
}));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const eventName = parsed.event || parsed.type;
|
|
60
|
+
if (typeof eventName !== 'string')
|
|
61
|
+
return;
|
|
62
|
+
const propertyKey = messageMap.get(eventName);
|
|
63
|
+
if (!propertyKey)
|
|
64
|
+
return;
|
|
65
|
+
const rawPayload = parsed.data ?? parsed.payload ?? parsed;
|
|
66
|
+
// Contract validation (if @Contract is present on the method)
|
|
67
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
68
|
+
const contract = Reflect.getMetadata('kanji:contract', Object.getPrototypeOf(instance), propertyKey);
|
|
69
|
+
const method = instance[propertyKey];
|
|
70
|
+
if (typeof method !== 'function')
|
|
71
|
+
return;
|
|
72
|
+
let ctx;
|
|
73
|
+
if (contract?.body) {
|
|
74
|
+
const result = contract.body.safeParse(rawPayload);
|
|
75
|
+
if (!result.success) {
|
|
76
|
+
wsRaw.send(JSON.stringify({
|
|
77
|
+
event: 'error',
|
|
78
|
+
data: {
|
|
79
|
+
code: 'VALIDATION_ERROR',
|
|
80
|
+
issues: result.error.issues.map((i) => ({
|
|
81
|
+
path: i.path.join('.'),
|
|
82
|
+
message: i.message,
|
|
83
|
+
code: i.code,
|
|
84
|
+
})),
|
|
85
|
+
},
|
|
86
|
+
}));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
ctx = new WebSocketContext(c, wsRaw, result.data);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
ctx = new WebSocketContext(c, wsRaw);
|
|
93
|
+
}
|
|
94
|
+
self.invokeHandler(method, ctx, wsRaw);
|
|
95
|
+
},
|
|
96
|
+
onClose(_evt, wsRaw) {
|
|
97
|
+
if (!disconnectHandler)
|
|
98
|
+
return;
|
|
99
|
+
const ctx = new WebSocketContext(c, wsRaw);
|
|
100
|
+
const method = instance[disconnectHandler.propertyKey];
|
|
101
|
+
if (typeof method === 'function') {
|
|
102
|
+
method(ctx);
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
onError(_evt, wsRaw) {
|
|
106
|
+
if (!errorHandler)
|
|
107
|
+
return;
|
|
108
|
+
const ctx = new WebSocketContext(c, wsRaw);
|
|
109
|
+
const method = instance[errorHandler.propertyKey];
|
|
110
|
+
if (typeof method === 'function') {
|
|
111
|
+
method(ctx);
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
return upgradeHandler(c, next);
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
invokeHandler(method, ctx, ws) {
|
|
120
|
+
try {
|
|
121
|
+
const result = method(ctx);
|
|
122
|
+
if (result instanceof Promise) {
|
|
123
|
+
result.catch((err) => {
|
|
124
|
+
this.handleWsError(err, ws);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
this.handleWsError(err, ws);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
handleWsError(err, ws) {
|
|
133
|
+
if (this.logger) {
|
|
134
|
+
this.logger.error(err.message, err.stack, 'WsGatewayHandler');
|
|
135
|
+
}
|
|
136
|
+
ws.send(JSON.stringify({
|
|
137
|
+
event: 'error',
|
|
138
|
+
data: { code: 'INTERNAL_ERROR', message: err.message },
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/gateway/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Context } from 'hono';
|
|
2
|
+
export interface WsConnection {
|
|
3
|
+
send(data: string): void;
|
|
4
|
+
close(code?: number, reason?: string): void;
|
|
5
|
+
}
|
|
6
|
+
export interface WebSocketContextVariables {
|
|
7
|
+
'kanji.auth.user': {
|
|
8
|
+
id: string;
|
|
9
|
+
email: string;
|
|
10
|
+
name: string;
|
|
11
|
+
roles: string[];
|
|
12
|
+
};
|
|
13
|
+
'kanji.auth.session': Record<string, string>;
|
|
14
|
+
'kanji.auth.roles': string[];
|
|
15
|
+
'kanji.auth.scopes': string[];
|
|
16
|
+
'kanji.requestId': string;
|
|
17
|
+
}
|
|
18
|
+
export declare class WebSocketContext<TBody = Record<string, never>> {
|
|
19
|
+
private readonly ctx;
|
|
20
|
+
private readonly ws;
|
|
21
|
+
private readonly validatedData?;
|
|
22
|
+
constructor(ctx: Context, ws: WsConnection, validatedData?: TBody | undefined);
|
|
23
|
+
get<K extends keyof WebSocketContextVariables>(key: K): WebSocketContextVariables[K] | undefined;
|
|
24
|
+
getCustomVar<T>(key: string): T | undefined;
|
|
25
|
+
get validatedBody(): TBody | undefined;
|
|
26
|
+
send(event: string, data: object | string | number | boolean): void;
|
|
27
|
+
close(code?: number, reason?: string): void;
|
|
28
|
+
get rawWs(): WsConnection;
|
|
29
|
+
get rawCtx(): Context;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=ws-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-context.d.ts","sourceRoot":"","sources":["../../src/gateway/ws-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAChF,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,gBAAgB,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAEvD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAFd,GAAG,EAAE,OAAO,EACZ,EAAE,EAAE,YAAY,EAChB,aAAa,CAAC,EAAE,KAAK,YAAA;IAGxC,GAAG,CAAC,CAAC,SAAS,MAAM,yBAAyB,EAAE,GAAG,EAAE,CAAC,GAAG,yBAAyB,CAAC,CAAC,CAAC,GAAG,SAAS;IAIhG,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI3C,IAAI,aAAa,IAAI,KAAK,GAAG,SAAS,CAErC;IAED,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAInE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAI3C,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export class WebSocketContext {
|
|
2
|
+
ctx;
|
|
3
|
+
ws;
|
|
4
|
+
validatedData;
|
|
5
|
+
constructor(ctx, ws, validatedData) {
|
|
6
|
+
this.ctx = ctx;
|
|
7
|
+
this.ws = ws;
|
|
8
|
+
this.validatedData = validatedData;
|
|
9
|
+
}
|
|
10
|
+
get(key) {
|
|
11
|
+
return this.ctx.get(key);
|
|
12
|
+
}
|
|
13
|
+
getCustomVar(key) {
|
|
14
|
+
return this.ctx.get(key);
|
|
15
|
+
}
|
|
16
|
+
get validatedBody() {
|
|
17
|
+
return this.validatedData;
|
|
18
|
+
}
|
|
19
|
+
send(event, data) {
|
|
20
|
+
this.ws.send(JSON.stringify({ event, data }));
|
|
21
|
+
}
|
|
22
|
+
close(code, reason) {
|
|
23
|
+
this.ws.close(code, reason);
|
|
24
|
+
}
|
|
25
|
+
get rawWs() {
|
|
26
|
+
return this.ws;
|
|
27
|
+
}
|
|
28
|
+
get rawCtx() {
|
|
29
|
+
return this.ctx;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=ws-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-context.js","sourceRoot":"","sources":["../../src/gateway/ws-context.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,gBAAgB;IAER;IACA;IACA;IAHnB,YACmB,GAAY,EACZ,EAAgB,EAChB,aAAqB;QAFrB,QAAG,GAAH,GAAG,CAAS;QACZ,OAAE,GAAF,EAAE,CAAc;QAChB,kBAAa,GAAb,aAAa,CAAQ;IACrC,CAAC;IAEJ,GAAG,CAA4C,GAAM;QACnD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAa,CAA6C,CAAC;IACjF,CAAC;IAED,YAAY,CAAI,GAAW;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,IAAwC;QAC1D,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,IAAa,EAAE,MAAe;QAClC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from 'hono';
|
|
2
|
+
export interface WsMessageMetadata {
|
|
3
|
+
event: string;
|
|
4
|
+
propertyKey: string | symbol;
|
|
5
|
+
}
|
|
6
|
+
export type WsEventType = 'connect' | 'disconnect' | 'error';
|
|
7
|
+
export interface WsEventMetadata {
|
|
8
|
+
event: WsEventType;
|
|
9
|
+
propertyKey: string | symbol;
|
|
10
|
+
}
|
|
11
|
+
export declare class WsMetadataStorage {
|
|
12
|
+
private static instance;
|
|
13
|
+
readonly gateways: Map<Function, string>;
|
|
14
|
+
readonly messageHandlers: Map<Function, WsMessageMetadata[]>;
|
|
15
|
+
readonly eventHandlers: Map<Function, WsEventMetadata[]>;
|
|
16
|
+
readonly controllerMiddlewares: Map<Function, MiddlewareHandler[]>;
|
|
17
|
+
private constructor();
|
|
18
|
+
static getInstance(): WsMetadataStorage;
|
|
19
|
+
registerGateway(target: Function, path: string): void;
|
|
20
|
+
registerMessageHandler(target: Function, metadata: WsMessageMetadata): void;
|
|
21
|
+
registerEventHandler(target: Function, metadata: WsEventMetadata): void;
|
|
22
|
+
registerControllerMiddleware(target: Function, middlewares: MiddlewareHandler[]): void;
|
|
23
|
+
reset(): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ws-metadata-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-metadata-storage.d.ts","sourceRoot":"","sources":["../../src/gateway/ws-metadata-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,WAAW,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoB;IAE3C,SAAgB,QAAQ,wBAA+B;IACvD,SAAgB,eAAe,qCAA4C;IAC3E,SAAgB,aAAa,mCAA0C;IACvE,SAAgB,qBAAqB,qCAA4C;IAEjF,OAAO;WAEO,WAAW,IAAI,iBAAiB;IAOvC,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrD,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAM3E,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAMvE,4BAA4B,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAMtF,KAAK,IAAI,IAAI;CAMrB"}
|