nitrostack 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/CHANGELOG.md +227 -0
- package/CONTRIBUTING.md +182 -0
- package/LICENSE +201 -0
- package/LICENSE_URLS_UPDATE_COMPLETE.md +388 -0
- package/NOTICE +153 -0
- package/README.md +571 -0
- package/dist/auth/api-key.d.ts +118 -0
- package/dist/auth/api-key.d.ts.map +1 -0
- package/dist/auth/api-key.js +168 -0
- package/dist/auth/api-key.js.map +1 -0
- package/dist/auth/client.d.ts +151 -0
- package/dist/auth/client.d.ts.map +1 -0
- package/dist/auth/client.js +330 -0
- package/dist/auth/client.js.map +1 -0
- package/dist/auth/index.d.ts +30 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +43 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +95 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +260 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/pkce.d.ts +53 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +105 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/quick-setup.d.ts +94 -0
- package/dist/auth/quick-setup.d.ts.map +1 -0
- package/dist/auth/quick-setup.js +210 -0
- package/dist/auth/quick-setup.js.map +1 -0
- package/dist/auth/server-integration.d.ts +97 -0
- package/dist/auth/server-integration.d.ts.map +1 -0
- package/dist/auth/server-integration.js +182 -0
- package/dist/auth/server-integration.js.map +1 -0
- package/dist/auth/server-metadata.d.ts +51 -0
- package/dist/auth/server-metadata.d.ts.map +1 -0
- package/dist/auth/server-metadata.js +106 -0
- package/dist/auth/server-metadata.js.map +1 -0
- package/dist/auth/simple-jwt.d.ts +88 -0
- package/dist/auth/simple-jwt.d.ts.map +1 -0
- package/dist/auth/simple-jwt.js +152 -0
- package/dist/auth/simple-jwt.js.map +1 -0
- package/dist/auth/token-store.d.ts +104 -0
- package/dist/auth/token-store.d.ts.map +1 -0
- package/dist/auth/token-store.js +205 -0
- package/dist/auth/token-store.js.map +1 -0
- package/dist/auth/token-validation.d.ts +47 -0
- package/dist/auth/token-validation.d.ts.map +1 -0
- package/dist/auth/token-validation.js +237 -0
- package/dist/auth/token-validation.js.map +1 -0
- package/dist/auth/types.d.ts +215 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +6 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli/commands/build.d.ts +6 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +104 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +7 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +312 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/generate-types.d.ts +8 -0
- package/dist/cli/commands/generate-types.d.ts.map +1 -0
- package/dist/cli/commands/generate-types.js +220 -0
- package/dist/cli/commands/generate-types.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +5 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +365 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/init.d.ts +7 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +365 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/start.d.ts +6 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +61 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +47 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/mcp-dev-wrapper.d.ts +3 -0
- package/dist/cli/mcp-dev-wrapper.d.ts.map +1 -0
- package/dist/cli/mcp-dev-wrapper.js +116 -0
- package/dist/cli/mcp-dev-wrapper.js.map +1 -0
- package/dist/core/apikey-module.d.ts +69 -0
- package/dist/core/apikey-module.d.ts.map +1 -0
- package/dist/core/apikey-module.js +114 -0
- package/dist/core/apikey-module.js.map +1 -0
- package/dist/core/app-decorator.d.ts +58 -0
- package/dist/core/app-decorator.d.ts.map +1 -0
- package/dist/core/app-decorator.js +261 -0
- package/dist/core/app-decorator.js.map +1 -0
- package/dist/core/builders.d.ts +38 -0
- package/dist/core/builders.d.ts.map +1 -0
- package/dist/core/builders.js +129 -0
- package/dist/core/builders.js.map +1 -0
- package/dist/core/component.d.ts +105 -0
- package/dist/core/component.d.ts.map +1 -0
- package/dist/core/component.js +182 -0
- package/dist/core/component.js.map +1 -0
- package/dist/core/config-module.d.ts +55 -0
- package/dist/core/config-module.d.ts.map +1 -0
- package/dist/core/config-module.js +94 -0
- package/dist/core/config-module.js.map +1 -0
- package/dist/core/decorators/cache.decorator.d.ts +61 -0
- package/dist/core/decorators/cache.decorator.d.ts.map +1 -0
- package/dist/core/decorators/cache.decorator.js +115 -0
- package/dist/core/decorators/cache.decorator.js.map +1 -0
- package/dist/core/decorators/health-check.decorator.d.ts +80 -0
- package/dist/core/decorators/health-check.decorator.d.ts.map +1 -0
- package/dist/core/decorators/health-check.decorator.js +153 -0
- package/dist/core/decorators/health-check.decorator.js.map +1 -0
- package/dist/core/decorators/rate-limit.decorator.d.ts +62 -0
- package/dist/core/decorators/rate-limit.decorator.d.ts.map +1 -0
- package/dist/core/decorators/rate-limit.decorator.js +129 -0
- package/dist/core/decorators/rate-limit.decorator.js.map +1 -0
- package/dist/core/decorators.d.ts +151 -0
- package/dist/core/decorators.d.ts.map +1 -0
- package/dist/core/decorators.js +142 -0
- package/dist/core/decorators.js.map +1 -0
- package/dist/core/di/container.d.ts +42 -0
- package/dist/core/di/container.d.ts.map +1 -0
- package/dist/core/di/container.js +76 -0
- package/dist/core/di/container.js.map +1 -0
- package/dist/core/di/injectable.decorator.d.ts +35 -0
- package/dist/core/di/injectable.decorator.d.ts.map +1 -0
- package/dist/core/di/injectable.decorator.js +57 -0
- package/dist/core/di/injectable.decorator.js.map +1 -0
- package/dist/core/errors.d.ts +54 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +87 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/events/event-emitter.d.ts +50 -0
- package/dist/core/events/event-emitter.d.ts.map +1 -0
- package/dist/core/events/event-emitter.js +94 -0
- package/dist/core/events/event-emitter.js.map +1 -0
- package/dist/core/events/event.decorator.d.ts +48 -0
- package/dist/core/events/event.decorator.d.ts.map +1 -0
- package/dist/core/events/event.decorator.js +68 -0
- package/dist/core/events/event.decorator.js.map +1 -0
- package/dist/core/filters/exception-filter.decorator.d.ts +40 -0
- package/dist/core/filters/exception-filter.decorator.d.ts.map +1 -0
- package/dist/core/filters/exception-filter.decorator.js +54 -0
- package/dist/core/filters/exception-filter.decorator.js.map +1 -0
- package/dist/core/filters/exception-filter.interface.d.ts +30 -0
- package/dist/core/filters/exception-filter.interface.d.ts.map +1 -0
- package/dist/core/filters/exception-filter.interface.js +2 -0
- package/dist/core/filters/exception-filter.interface.js.map +1 -0
- package/dist/core/guards/apikey.guard.d.ts +22 -0
- package/dist/core/guards/apikey.guard.d.ts.map +1 -0
- package/dist/core/guards/apikey.guard.js +11 -0
- package/dist/core/guards/apikey.guard.js.map +1 -0
- package/dist/core/guards/guard.interface.d.ts +18 -0
- package/dist/core/guards/guard.interface.d.ts.map +1 -0
- package/dist/core/guards/guard.interface.js +2 -0
- package/dist/core/guards/guard.interface.js.map +1 -0
- package/dist/core/guards/jwt.guard.d.ts +18 -0
- package/dist/core/guards/jwt.guard.d.ts.map +1 -0
- package/dist/core/guards/jwt.guard.js +2 -0
- package/dist/core/guards/jwt.guard.js.map +1 -0
- package/dist/core/guards/oauth.guard.d.ts +35 -0
- package/dist/core/guards/oauth.guard.d.ts.map +1 -0
- package/dist/core/guards/oauth.guard.js +2 -0
- package/dist/core/guards/oauth.guard.js.map +1 -0
- package/dist/core/guards/use-guards.decorator.d.ts +25 -0
- package/dist/core/guards/use-guards.decorator.d.ts.map +1 -0
- package/dist/core/guards/use-guards.decorator.js +32 -0
- package/dist/core/guards/use-guards.decorator.js.map +1 -0
- package/dist/core/health/health-checks.resource.d.ts +14 -0
- package/dist/core/health/health-checks.resource.d.ts.map +1 -0
- package/dist/core/health/health-checks.resource.js +29 -0
- package/dist/core/health/health-checks.resource.js.map +1 -0
- package/dist/core/index.d.ts +55 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +57 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/interceptors/interceptor.decorator.d.ts +37 -0
- package/dist/core/interceptors/interceptor.decorator.d.ts.map +1 -0
- package/dist/core/interceptors/interceptor.decorator.js +51 -0
- package/dist/core/interceptors/interceptor.decorator.js.map +1 -0
- package/dist/core/interceptors/interceptor.interface.d.ts +31 -0
- package/dist/core/interceptors/interceptor.interface.d.ts.map +1 -0
- package/dist/core/interceptors/interceptor.interface.js +2 -0
- package/dist/core/interceptors/interceptor.interface.js.map +1 -0
- package/dist/core/jwt-module.d.ts +51 -0
- package/dist/core/jwt-module.d.ts.map +1 -0
- package/dist/core/jwt-module.js +52 -0
- package/dist/core/jwt-module.js.map +1 -0
- package/dist/core/logger.d.ts +18 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +51 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/middleware/middleware.decorator.d.ts +39 -0
- package/dist/core/middleware/middleware.decorator.d.ts.map +1 -0
- package/dist/core/middleware/middleware.decorator.js +53 -0
- package/dist/core/middleware/middleware.decorator.js.map +1 -0
- package/dist/core/middleware/middleware.interface.d.ts +29 -0
- package/dist/core/middleware/middleware.interface.d.ts.map +1 -0
- package/dist/core/middleware/middleware.interface.js +2 -0
- package/dist/core/middleware/middleware.interface.js.map +1 -0
- package/dist/core/module.d.ts +74 -0
- package/dist/core/module.d.ts.map +1 -0
- package/dist/core/module.js +82 -0
- package/dist/core/module.js.map +1 -0
- package/dist/core/oauth-module.d.ts +144 -0
- package/dist/core/oauth-module.d.ts.map +1 -0
- package/dist/core/oauth-module.js +190 -0
- package/dist/core/oauth-module.js.map +1 -0
- package/dist/core/pipes/pipe.decorator.d.ts +55 -0
- package/dist/core/pipes/pipe.decorator.d.ts.map +1 -0
- package/dist/core/pipes/pipe.decorator.js +85 -0
- package/dist/core/pipes/pipe.decorator.js.map +1 -0
- package/dist/core/pipes/pipe.interface.d.ts +36 -0
- package/dist/core/pipes/pipe.interface.d.ts.map +1 -0
- package/dist/core/pipes/pipe.interface.js +2 -0
- package/dist/core/pipes/pipe.interface.js.map +1 -0
- package/dist/core/prompt.d.ts +37 -0
- package/dist/core/prompt.d.ts.map +1 -0
- package/dist/core/prompt.js +76 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/resource.d.ts +42 -0
- package/dist/core/resource.d.ts.map +1 -0
- package/dist/core/resource.js +90 -0
- package/dist/core/resource.js.map +1 -0
- package/dist/core/server.d.ts +72 -0
- package/dist/core/server.d.ts.map +1 -0
- package/dist/core/server.js +406 -0
- package/dist/core/server.js.map +1 -0
- package/dist/core/tool.d.ts +78 -0
- package/dist/core/tool.d.ts.map +1 -0
- package/dist/core/tool.js +190 -0
- package/dist/core/tool.js.map +1 -0
- package/dist/core/transports/http-server.d.ts +102 -0
- package/dist/core/transports/http-server.d.ts.map +1 -0
- package/dist/core/transports/http-server.js +265 -0
- package/dist/core/transports/http-server.js.map +1 -0
- package/dist/core/types.d.ts +123 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/widgets/widget-examples.resource.d.ts +17 -0
- package/dist/core/widgets/widget-examples.resource.d.ts.map +1 -0
- package/dist/core/widgets/widget-examples.resource.js +28 -0
- package/dist/core/widgets/widget-examples.resource.js.map +1 -0
- package/dist/core/widgets/widget-registry.d.ts +56 -0
- package/dist/core/widgets/widget-registry.d.ts.map +1 -0
- package/dist/core/widgets/widget-registry.js +75 -0
- package/dist/core/widgets/widget-registry.js.map +1 -0
- package/dist/testing/index.d.ts +82 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +164 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/ui-next/index.d.ts +31 -0
- package/dist/ui-next/index.d.ts.map +1 -0
- package/dist/ui-next/index.js +687 -0
- package/dist/ui-next/index.js.map +1 -0
- package/dist/widgets/index.d.ts +9 -0
- package/dist/widgets/index.d.ts.map +1 -0
- package/dist/widgets/index.js +9 -0
- package/dist/widgets/index.js.map +1 -0
- package/dist/widgets/metadata.d.ts +53 -0
- package/dist/widgets/metadata.d.ts.map +1 -0
- package/dist/widgets/metadata.js +29 -0
- package/dist/widgets/metadata.js.map +1 -0
- package/dist/widgets/withToolData.d.ts +19 -0
- package/dist/widgets/withToolData.d.ts.map +1 -0
- package/dist/widgets/withToolData.js +240 -0
- package/dist/widgets/withToolData.js.map +1 -0
- package/jest.config.js +21 -0
- package/package.json +108 -0
- package/templates/typescript-auth/AI_AGENT_CLI_REFERENCE.md +702 -0
- package/templates/typescript-auth/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-auth/README.md +400 -0
- package/templates/typescript-auth/package.json +44 -0
- package/templates/typescript-auth-api-key/AI_AGENT_CLI_REFERENCE.md +701 -0
- package/templates/typescript-auth-api-key/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-auth-api-key/README.md +483 -0
- package/templates/typescript-auth-api-key/package-lock.json +124 -0
- package/templates/typescript-auth-api-key/package.json +29 -0
- package/templates/typescript-oauth/AI_AGENT_CLI_REFERENCE.md +701 -0
- package/templates/typescript-oauth/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-oauth/OAUTH_SETUP.md +406 -0
- package/templates/typescript-oauth/README.md +350 -0
- package/templates/typescript-oauth/package.json +30 -0
- package/templates/typescript-starter/AI_AGENT_CLI_REFERENCE.md +701 -0
- package/templates/typescript-starter/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-starter/README.md +312 -0
- package/templates/typescript-starter/package.json +32 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGxB;IACA;IACA;IAJT,YACE,OAAe,EACR,IAAY,EACZ,aAAqB,GAAG,EACxB,OAAa;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAQ;QACZ,eAAU,GAAV,UAAU,CAAc;QACxB,YAAO,GAAP,OAAO,CAAM;QAGpB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe,EAAE,OAAa;QACxC,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IAC7C,YAAY,QAAgB;QAC1B,KAAK,CAAC,SAAS,QAAQ,aAAa,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACjD,YAAY,GAAW;QACrB,KAAK,CAAC,aAAa,GAAG,aAAa,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,UAAkB;QAC5B,KAAK,CAAC,WAAW,UAAU,aAAa,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAC1C,YAAY,UAAkB,qBAAqB;QACjD,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;IAC9C,YAAY,QAAgB,EAAE,aAAoB;QAChD,KAAK,CACH,yBAAyB,QAAQ,MAAM,aAAa,CAAC,OAAO,EAAE,EAC9D,sBAAsB,EACtB,GAAG,EACH,EAAE,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,CACrE,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAY;IAKtC,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
/**
|
|
3
|
+
* Event handler type
|
|
4
|
+
*/
|
|
5
|
+
type EventHandler = (...args: any[]) => void | Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Event Emitter
|
|
8
|
+
*
|
|
9
|
+
* Simple event bus for decoupled communication between modules
|
|
10
|
+
*/
|
|
11
|
+
export declare class EventEmitter {
|
|
12
|
+
private static instance;
|
|
13
|
+
private listeners;
|
|
14
|
+
private constructor();
|
|
15
|
+
static getInstance(): EventEmitter;
|
|
16
|
+
/**
|
|
17
|
+
* Register an event listener
|
|
18
|
+
*/
|
|
19
|
+
on(event: string, handler: EventHandler): void;
|
|
20
|
+
/**
|
|
21
|
+
* Register a one-time event listener
|
|
22
|
+
*/
|
|
23
|
+
once(event: string, handler: EventHandler): void;
|
|
24
|
+
/**
|
|
25
|
+
* Remove an event listener
|
|
26
|
+
*/
|
|
27
|
+
off(event: string, handler: EventHandler): void;
|
|
28
|
+
/**
|
|
29
|
+
* Emit an event
|
|
30
|
+
*/
|
|
31
|
+
emit(event: string, ...args: any[]): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Emit an event synchronously
|
|
34
|
+
*/
|
|
35
|
+
emitSync(event: string, ...args: any[]): void;
|
|
36
|
+
/**
|
|
37
|
+
* Remove all listeners for an event
|
|
38
|
+
*/
|
|
39
|
+
removeAllListeners(event?: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Get listener count for an event
|
|
42
|
+
*/
|
|
43
|
+
listenerCount(event: string): number;
|
|
44
|
+
/**
|
|
45
|
+
* Get all event names
|
|
46
|
+
*/
|
|
47
|
+
eventNames(): string[];
|
|
48
|
+
}
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=event-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../../../src/core/events/event-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B;;GAEG;AACH,KAAK,YAAY,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7D;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,SAAS,CAA0C;IAE3D,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,YAAY;IAOlC;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAO9C;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAQhD;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAc/C;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAO7C;;OAEG;IACH,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAQxC;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIpC;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;CAGvB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
/**
|
|
3
|
+
* Event Emitter
|
|
4
|
+
*
|
|
5
|
+
* Simple event bus for decoupled communication between modules
|
|
6
|
+
*/
|
|
7
|
+
export class EventEmitter {
|
|
8
|
+
static instance;
|
|
9
|
+
listeners = new Map();
|
|
10
|
+
constructor() { }
|
|
11
|
+
static getInstance() {
|
|
12
|
+
if (!EventEmitter.instance) {
|
|
13
|
+
EventEmitter.instance = new EventEmitter();
|
|
14
|
+
}
|
|
15
|
+
return EventEmitter.instance;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Register an event listener
|
|
19
|
+
*/
|
|
20
|
+
on(event, handler) {
|
|
21
|
+
if (!this.listeners.has(event)) {
|
|
22
|
+
this.listeners.set(event, []);
|
|
23
|
+
}
|
|
24
|
+
this.listeners.get(event).push(handler);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Register a one-time event listener
|
|
28
|
+
*/
|
|
29
|
+
once(event, handler) {
|
|
30
|
+
const wrappedHandler = async (...args) => {
|
|
31
|
+
await handler(...args);
|
|
32
|
+
this.off(event, wrappedHandler);
|
|
33
|
+
};
|
|
34
|
+
this.on(event, wrappedHandler);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Remove an event listener
|
|
38
|
+
*/
|
|
39
|
+
off(event, handler) {
|
|
40
|
+
const handlers = this.listeners.get(event);
|
|
41
|
+
if (!handlers)
|
|
42
|
+
return;
|
|
43
|
+
const index = handlers.indexOf(handler);
|
|
44
|
+
if (index > -1) {
|
|
45
|
+
handlers.splice(index, 1);
|
|
46
|
+
}
|
|
47
|
+
if (handlers.length === 0) {
|
|
48
|
+
this.listeners.delete(event);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Emit an event
|
|
53
|
+
*/
|
|
54
|
+
async emit(event, ...args) {
|
|
55
|
+
const handlers = this.listeners.get(event);
|
|
56
|
+
if (!handlers || handlers.length === 0)
|
|
57
|
+
return;
|
|
58
|
+
// Execute all handlers in parallel
|
|
59
|
+
await Promise.all(handlers.map(handler => handler(...args)));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Emit an event synchronously
|
|
63
|
+
*/
|
|
64
|
+
emitSync(event, ...args) {
|
|
65
|
+
const handlers = this.listeners.get(event);
|
|
66
|
+
if (!handlers || handlers.length === 0)
|
|
67
|
+
return;
|
|
68
|
+
handlers.forEach(handler => handler(...args));
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Remove all listeners for an event
|
|
72
|
+
*/
|
|
73
|
+
removeAllListeners(event) {
|
|
74
|
+
if (event) {
|
|
75
|
+
this.listeners.delete(event);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.listeners.clear();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get listener count for an event
|
|
83
|
+
*/
|
|
84
|
+
listenerCount(event) {
|
|
85
|
+
return this.listeners.get(event)?.length || 0;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get all event names
|
|
89
|
+
*/
|
|
90
|
+
eventNames() {
|
|
91
|
+
return Array.from(this.listeners.keys());
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=event-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emitter.js","sourceRoot":"","sources":["../../../src/core/events/event-emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
/**
|
|
3
|
+
* Event handler metadata
|
|
4
|
+
*/
|
|
5
|
+
interface EventHandlerMetadata {
|
|
6
|
+
event: string;
|
|
7
|
+
methodName: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Marks a method as an event handler
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* export class OrderTools {
|
|
15
|
+
* @Tool({ name: 'create_order', ... })
|
|
16
|
+
* async createOrder(input: any, ctx: ExecutionContext) {
|
|
17
|
+
* const order = await this.saveOrder(input);
|
|
18
|
+
*
|
|
19
|
+
* // Emit event
|
|
20
|
+
* ctx.emit('order.created', order);
|
|
21
|
+
*
|
|
22
|
+
* return order;
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* export class NotificationService {
|
|
27
|
+
* @OnEvent('order.created')
|
|
28
|
+
* async handleOrderCreated(order: any) {
|
|
29
|
+
* await this.sendConfirmationEmail(order);
|
|
30
|
+
* }
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare function OnEvent(event: string): MethodDecorator;
|
|
35
|
+
/**
|
|
36
|
+
* Get event handlers from a class
|
|
37
|
+
*/
|
|
38
|
+
export declare function getEventHandlers(target: any): EventHandlerMetadata[];
|
|
39
|
+
/**
|
|
40
|
+
* Register all event handlers from a class instance
|
|
41
|
+
*/
|
|
42
|
+
export declare function registerEventHandlers(instance: any): void;
|
|
43
|
+
/**
|
|
44
|
+
* Emit an event from execution context
|
|
45
|
+
*/
|
|
46
|
+
export declare function emitEvent(event: string, ...args: any[]): void;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=event.decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.decorator.d.ts","sourceRoot":"","sources":["../../../src/core/events/event.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAK1B;;GAEG;AACH,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAStD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,oBAAoB,EAAE,CAEpE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,CAQzD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAS7D"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { EventEmitter } from './event-emitter.js';
|
|
3
|
+
const EVENT_HANDLER_KEY = 'nitrostack:event_handler';
|
|
4
|
+
/**
|
|
5
|
+
* Marks a method as an event handler
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* export class OrderTools {
|
|
10
|
+
* @Tool({ name: 'create_order', ... })
|
|
11
|
+
* async createOrder(input: any, ctx: ExecutionContext) {
|
|
12
|
+
* const order = await this.saveOrder(input);
|
|
13
|
+
*
|
|
14
|
+
* // Emit event
|
|
15
|
+
* ctx.emit('order.created', order);
|
|
16
|
+
*
|
|
17
|
+
* return order;
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
*
|
|
21
|
+
* export class NotificationService {
|
|
22
|
+
* @OnEvent('order.created')
|
|
23
|
+
* async handleOrderCreated(order: any) {
|
|
24
|
+
* await this.sendConfirmationEmail(order);
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export function OnEvent(event) {
|
|
30
|
+
return (target, propertyKey, descriptor) => {
|
|
31
|
+
const existingHandlers = Reflect.getMetadata(EVENT_HANDLER_KEY, target.constructor) || [];
|
|
32
|
+
existingHandlers.push({
|
|
33
|
+
event,
|
|
34
|
+
methodName: propertyKey,
|
|
35
|
+
});
|
|
36
|
+
Reflect.defineMetadata(EVENT_HANDLER_KEY, existingHandlers, target.constructor);
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get event handlers from a class
|
|
41
|
+
*/
|
|
42
|
+
export function getEventHandlers(target) {
|
|
43
|
+
return Reflect.getMetadata(EVENT_HANDLER_KEY, target) || [];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Register all event handlers from a class instance
|
|
47
|
+
*/
|
|
48
|
+
export function registerEventHandlers(instance) {
|
|
49
|
+
const emitter = EventEmitter.getInstance();
|
|
50
|
+
const handlers = getEventHandlers(instance.constructor);
|
|
51
|
+
for (const { event, methodName } of handlers) {
|
|
52
|
+
const handler = instance[methodName].bind(instance);
|
|
53
|
+
emitter.on(event, handler);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Emit an event from execution context
|
|
58
|
+
*/
|
|
59
|
+
export function emitEvent(event, ...args) {
|
|
60
|
+
const emitter = EventEmitter.getInstance();
|
|
61
|
+
// Use sync emit to avoid blocking
|
|
62
|
+
emitter.emitSync(event, ...args);
|
|
63
|
+
// Also emit async in background
|
|
64
|
+
emitter.emit(event, ...args).catch(error => {
|
|
65
|
+
console.error(`Error in event handler for ${event}:`, error);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=event.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.decorator.js","sourceRoot":"","sources":["../../../src/core/events/event.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAUrD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,CAAC,MAAW,EAAE,WAA4B,EAAE,UAA8B,EAAE,EAAE;QACnF,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAC1F,gBAAgB,CAAC,IAAI,CAAC;YACpB,KAAK;YACL,UAAU,EAAE,WAAW;SACxB,CAAC,CAAC;QACH,OAAO,CAAC,cAAc,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAClF,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAW;IAC1C,OAAO,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAa;IACjD,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAExD,KAAK,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,GAAG,IAAW;IACrD,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IAC3C,kCAAkC;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IAEjC,gCAAgC;IAChC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACzC,OAAO,CAAC,KAAK,CAAC,8BAA8B,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { ExceptionFilterConstructor } from './exception-filter.interface.js';
|
|
3
|
+
/**
|
|
4
|
+
* Marks a class as an exception filter
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* @ExceptionFilter()
|
|
9
|
+
* export class GlobalExceptionFilter implements ExceptionFilterInterface {
|
|
10
|
+
* catch(exception: any, context: ExecutionContext) {
|
|
11
|
+
* context.logger.error('Exception caught:', exception);
|
|
12
|
+
* return {
|
|
13
|
+
* error: exception.message,
|
|
14
|
+
* timestamp: new Date().toISOString(),
|
|
15
|
+
* };
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function ExceptionFilter(): ClassDecorator;
|
|
21
|
+
/**
|
|
22
|
+
* Apply exception filters to a tool method
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* @Tool({ name: 'create_user', ... })
|
|
27
|
+
* @UseFilters(ValidationExceptionFilter, HttpExceptionFilter)
|
|
28
|
+
* async createUser(input: any) { }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function UseFilters(...filters: ExceptionFilterConstructor[]): MethodDecorator;
|
|
32
|
+
/**
|
|
33
|
+
* Get exception filters for a method
|
|
34
|
+
*/
|
|
35
|
+
export declare function getExceptionFilterMetadata(target: any, propertyKey: string | symbol): ExceptionFilterConstructor[];
|
|
36
|
+
/**
|
|
37
|
+
* Check if a class is marked as an exception filter
|
|
38
|
+
*/
|
|
39
|
+
export declare function isExceptionFilter(target: any): boolean;
|
|
40
|
+
//# sourceMappingURL=exception-filter.decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exception-filter.decorator.d.ts","sourceRoot":"","sources":["../../../src/core/filters/exception-filter.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAK7E;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,IAAI,cAAc,CAIhD;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,GAAG,OAAO,EAAE,0BAA0B,EAAE,GAAG,eAAe,CAUpF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,0BAA0B,EAAE,CAElH;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAEtD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
const EXCEPTION_FILTER_KEY = 'nitrostack:exception_filter';
|
|
3
|
+
const IS_EXCEPTION_FILTER_KEY = 'nitrostack:is_exception_filter';
|
|
4
|
+
/**
|
|
5
|
+
* Marks a class as an exception filter
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* @ExceptionFilter()
|
|
10
|
+
* export class GlobalExceptionFilter implements ExceptionFilterInterface {
|
|
11
|
+
* catch(exception: any, context: ExecutionContext) {
|
|
12
|
+
* context.logger.error('Exception caught:', exception);
|
|
13
|
+
* return {
|
|
14
|
+
* error: exception.message,
|
|
15
|
+
* timestamp: new Date().toISOString(),
|
|
16
|
+
* };
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function ExceptionFilter() {
|
|
22
|
+
return (target) => {
|
|
23
|
+
Reflect.defineMetadata(IS_EXCEPTION_FILTER_KEY, true, target);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Apply exception filters to a tool method
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* @Tool({ name: 'create_user', ... })
|
|
32
|
+
* @UseFilters(ValidationExceptionFilter, HttpExceptionFilter)
|
|
33
|
+
* async createUser(input: any) { }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export function UseFilters(...filters) {
|
|
37
|
+
return (target, propertyKey, descriptor) => {
|
|
38
|
+
const existingFilters = Reflect.getMetadata(EXCEPTION_FILTER_KEY, target, propertyKey) || [];
|
|
39
|
+
Reflect.defineMetadata(EXCEPTION_FILTER_KEY, [...existingFilters, ...filters], target, propertyKey);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get exception filters for a method
|
|
44
|
+
*/
|
|
45
|
+
export function getExceptionFilterMetadata(target, propertyKey) {
|
|
46
|
+
return Reflect.getMetadata(EXCEPTION_FILTER_KEY, target, propertyKey) || [];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if a class is marked as an exception filter
|
|
50
|
+
*/
|
|
51
|
+
export function isExceptionFilter(target) {
|
|
52
|
+
return Reflect.getMetadata(IS_EXCEPTION_FILTER_KEY, target) === true;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=exception-filter.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exception-filter.decorator.js","sourceRoot":"","sources":["../../../src/core/filters/exception-filter.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,MAAM,oBAAoB,GAAG,6BAA6B,CAAC;AAC3D,MAAM,uBAAuB,GAAG,gCAAgC,CAAC;AAEjE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,MAAW,EAAE,EAAE;QACrB,OAAO,CAAC,cAAc,CAAC,uBAAuB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAC,GAAG,OAAqC;IACjE,OAAO,CAAC,MAAW,EAAE,WAA4B,EAAE,UAA8B,EAAE,EAAE;QACnF,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,oBAAoB,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;QAC7F,OAAO,CAAC,cAAc,CACpB,oBAAoB,EACpB,CAAC,GAAG,eAAe,EAAE,GAAG,OAAO,CAAC,EAChC,MAAM,EACN,WAAW,CACZ,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAW,EAAE,WAA4B;IAClF,OAAO,OAAO,CAAC,WAAW,CAAC,oBAAoB,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAW;IAC3C,OAAO,OAAO,CAAC,WAAW,CAAC,uBAAuB,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { ExecutionContext } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Exception Filter Interface
|
|
5
|
+
*
|
|
6
|
+
* Exception filters handle errors thrown during tool execution.
|
|
7
|
+
* They can transform errors into user-friendly responses.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* @ExceptionFilter()
|
|
12
|
+
* export class HttpExceptionFilter implements ExceptionFilterInterface {
|
|
13
|
+
* catch(exception: any, context: ExecutionContext) {
|
|
14
|
+
* return {
|
|
15
|
+
* statusCode: exception.status || 500,
|
|
16
|
+
* message: exception.message,
|
|
17
|
+
* timestamp: new Date().toISOString(),
|
|
18
|
+
* };
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export interface ExceptionFilterInterface {
|
|
24
|
+
catch(exception: any, context: ExecutionContext): any | Promise<any>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Exception filter constructor type
|
|
28
|
+
*/
|
|
29
|
+
export type ExceptionFilterConstructor = new (...args: any[]) => ExceptionFilterInterface;
|
|
30
|
+
//# sourceMappingURL=exception-filter.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exception-filter.interface.d.ts","sourceRoot":"","sources":["../../../src/core/filters/exception-filter.interface.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACtE;AAED;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exception-filter.interface.js","sourceRoot":"","sources":["../../../src/core/filters/exception-filter.interface.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Key Guard Interface
|
|
3
|
+
*
|
|
4
|
+
* This is exported from the SDK for type definitions.
|
|
5
|
+
* The actual ApiKeyGuard implementation should be in your project's guards folder.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* See templates/typescript-auth-api-key/src/guards/apikey.guard.ts for implementation
|
|
9
|
+
*/
|
|
10
|
+
export interface ApiKeyMetadata {
|
|
11
|
+
/** The API key value (raw) */
|
|
12
|
+
key: string;
|
|
13
|
+
/** Optional: API key name/identifier */
|
|
14
|
+
name?: string;
|
|
15
|
+
/** Optional: Key prefix (e.g., 'sk' for secret key, 'pk' for public key) */
|
|
16
|
+
prefix?: string;
|
|
17
|
+
/** Optional: Scopes/permissions */
|
|
18
|
+
scopes?: string[];
|
|
19
|
+
/** Optional: Additional metadata */
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=apikey.guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apikey.guard.d.ts","sourceRoot":"","sources":["../../../src/core/guards/apikey.guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IAEZ,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB,oCAAoC;IACpC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Key Guard Interface
|
|
3
|
+
*
|
|
4
|
+
* This is exported from the SDK for type definitions.
|
|
5
|
+
* The actual ApiKeyGuard implementation should be in your project's guards folder.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* See templates/typescript-auth-api-key/src/guards/apikey.guard.ts for implementation
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=apikey.guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apikey.guard.js","sourceRoot":"","sources":["../../../src/core/guards/apikey.guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ExecutionContext } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Guard interface for protecting tool execution
|
|
4
|
+
* Guards can perform authentication, authorization, validation, etc.
|
|
5
|
+
*/
|
|
6
|
+
export interface Guard {
|
|
7
|
+
/**
|
|
8
|
+
* Determines if the current execution context is allowed to proceed
|
|
9
|
+
* @param context Execution context with request metadata
|
|
10
|
+
* @returns true if allowed, false if denied, or throws an error
|
|
11
|
+
*/
|
|
12
|
+
canActivate(context: ExecutionContext): boolean | Promise<boolean>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Type for guard constructor
|
|
16
|
+
*/
|
|
17
|
+
export type GuardConstructor = new (...args: any[]) => Guard;
|
|
18
|
+
//# sourceMappingURL=guard.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard.interface.d.ts","sourceRoot":"","sources":["../../../src/core/guards/guard.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,KAAK;IACpB;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpE;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard.interface.js","sourceRoot":"","sources":["../../../src/core/guards/guard.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JWT payload interface
|
|
3
|
+
*
|
|
4
|
+
* This is exported from the SDK for type definitions.
|
|
5
|
+
* The actual JWTGuard implementation should be in your project's guards folder.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* See templates/typescript-auth/src/guards/jwt.guard.ts for implementation
|
|
9
|
+
*/
|
|
10
|
+
export interface JWTPayload {
|
|
11
|
+
sub: string;
|
|
12
|
+
email?: string;
|
|
13
|
+
name?: string;
|
|
14
|
+
iat?: number;
|
|
15
|
+
exp?: number;
|
|
16
|
+
[key: string]: any;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=jwt.guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.guard.d.ts","sourceRoot":"","sources":["../../../src/core/guards/jwt.guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.guard.js","sourceRoot":"","sources":["../../../src/core/guards/jwt.guard.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Token Payload Interface
|
|
3
|
+
*
|
|
4
|
+
* Standard OAuth 2.1 / JWT claims (RFC 9068)
|
|
5
|
+
*
|
|
6
|
+
* This is exported from the SDK for type definitions.
|
|
7
|
+
* The actual OAuthGuard implementation should be in your project's guards folder.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* See templates/typescript-oauth/src/guards/oauth.guard.ts for implementation
|
|
11
|
+
*/
|
|
12
|
+
export interface OAuthTokenPayload {
|
|
13
|
+
/** Subject - typically the user ID */
|
|
14
|
+
sub: string;
|
|
15
|
+
/** Issuer - the authorization server that issued the token */
|
|
16
|
+
iss?: string;
|
|
17
|
+
/** Audience - who the token is intended for (RFC 8707) */
|
|
18
|
+
aud?: string | string[];
|
|
19
|
+
/** Expiration time (Unix timestamp) */
|
|
20
|
+
exp?: number;
|
|
21
|
+
/** Issued at time (Unix timestamp) */
|
|
22
|
+
iat?: number;
|
|
23
|
+
/** Not before time (Unix timestamp) */
|
|
24
|
+
nbf?: number;
|
|
25
|
+
/** JWT ID - unique identifier for the token */
|
|
26
|
+
jti?: string;
|
|
27
|
+
/** Scopes - permissions granted to the token */
|
|
28
|
+
scope?: string;
|
|
29
|
+
scopes?: string[];
|
|
30
|
+
/** Client ID that requested the token */
|
|
31
|
+
client_id?: string;
|
|
32
|
+
/** Custom claims */
|
|
33
|
+
[key: string]: any;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=oauth.guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.guard.d.ts","sourceRoot":"","sources":["../../../src/core/guards/oauth.guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IAEZ,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,oBAAoB;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.guard.js","sourceRoot":"","sources":["../../../src/core/guards/oauth.guard.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { GuardConstructor } from './guard.interface.js';
|
|
3
|
+
/**
|
|
4
|
+
* Metadata key for guards
|
|
5
|
+
*/
|
|
6
|
+
export declare const GUARDS_METADATA: unique symbol;
|
|
7
|
+
/**
|
|
8
|
+
* UseGuards decorator - Applies guards to a tool method
|
|
9
|
+
* Guards are executed before the tool handler
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* @Tool({ name: 'whoami', ... })
|
|
14
|
+
* @UseGuards(JWTGuard)
|
|
15
|
+
* async whoami(input: any, context: ExecutionContext) {
|
|
16
|
+
* // This only executes if JWTGuard.canActivate returns true
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function UseGuards(...guards: GuardConstructor[]): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
21
|
+
/**
|
|
22
|
+
* Get guards metadata for a specific method
|
|
23
|
+
*/
|
|
24
|
+
export declare function getGuardsMetadata(target: any, methodName: string): GuardConstructor[];
|
|
25
|
+
//# sourceMappingURL=use-guards.decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-guards.decorator.d.ts","sourceRoot":"","sources":["../../../src/core/guards/use-guards.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,eAAe,eAA4B,CAAC;AAEzD;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,GAAG,MAAM,EAAE,gBAAgB,EAAE,IACpC,QAAQ,GAAG,EAAE,aAAa,MAAM,EAAE,YAAY,kBAAkB,wBAKlF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAErF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
/**
|
|
3
|
+
* Metadata key for guards
|
|
4
|
+
*/
|
|
5
|
+
export const GUARDS_METADATA = Symbol('guards:metadata');
|
|
6
|
+
/**
|
|
7
|
+
* UseGuards decorator - Applies guards to a tool method
|
|
8
|
+
* Guards are executed before the tool handler
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* @Tool({ name: 'whoami', ... })
|
|
13
|
+
* @UseGuards(JWTGuard)
|
|
14
|
+
* async whoami(input: any, context: ExecutionContext) {
|
|
15
|
+
* // This only executes if JWTGuard.canActivate returns true
|
|
16
|
+
* }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function UseGuards(...guards) {
|
|
20
|
+
return function (target, propertyKey, descriptor) {
|
|
21
|
+
// Store guards metadata for this method
|
|
22
|
+
Reflect.defineMetadata(GUARDS_METADATA, guards, target, propertyKey);
|
|
23
|
+
return descriptor;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get guards metadata for a specific method
|
|
28
|
+
*/
|
|
29
|
+
export function getGuardsMetadata(target, methodName) {
|
|
30
|
+
return Reflect.getMetadata(GUARDS_METADATA, target, methodName) || [];
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=use-guards.decorator.js.map
|