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.
Files changed (290) hide show
  1. package/CHANGELOG.md +227 -0
  2. package/CONTRIBUTING.md +182 -0
  3. package/LICENSE +201 -0
  4. package/LICENSE_URLS_UPDATE_COMPLETE.md +388 -0
  5. package/NOTICE +153 -0
  6. package/README.md +571 -0
  7. package/dist/auth/api-key.d.ts +118 -0
  8. package/dist/auth/api-key.d.ts.map +1 -0
  9. package/dist/auth/api-key.js +168 -0
  10. package/dist/auth/api-key.js.map +1 -0
  11. package/dist/auth/client.d.ts +151 -0
  12. package/dist/auth/client.d.ts.map +1 -0
  13. package/dist/auth/client.js +330 -0
  14. package/dist/auth/client.js.map +1 -0
  15. package/dist/auth/index.d.ts +30 -0
  16. package/dist/auth/index.d.ts.map +1 -0
  17. package/dist/auth/index.js +43 -0
  18. package/dist/auth/index.js.map +1 -0
  19. package/dist/auth/middleware.d.ts +95 -0
  20. package/dist/auth/middleware.d.ts.map +1 -0
  21. package/dist/auth/middleware.js +260 -0
  22. package/dist/auth/middleware.js.map +1 -0
  23. package/dist/auth/pkce.d.ts +53 -0
  24. package/dist/auth/pkce.d.ts.map +1 -0
  25. package/dist/auth/pkce.js +105 -0
  26. package/dist/auth/pkce.js.map +1 -0
  27. package/dist/auth/quick-setup.d.ts +94 -0
  28. package/dist/auth/quick-setup.d.ts.map +1 -0
  29. package/dist/auth/quick-setup.js +210 -0
  30. package/dist/auth/quick-setup.js.map +1 -0
  31. package/dist/auth/server-integration.d.ts +97 -0
  32. package/dist/auth/server-integration.d.ts.map +1 -0
  33. package/dist/auth/server-integration.js +182 -0
  34. package/dist/auth/server-integration.js.map +1 -0
  35. package/dist/auth/server-metadata.d.ts +51 -0
  36. package/dist/auth/server-metadata.d.ts.map +1 -0
  37. package/dist/auth/server-metadata.js +106 -0
  38. package/dist/auth/server-metadata.js.map +1 -0
  39. package/dist/auth/simple-jwt.d.ts +88 -0
  40. package/dist/auth/simple-jwt.d.ts.map +1 -0
  41. package/dist/auth/simple-jwt.js +152 -0
  42. package/dist/auth/simple-jwt.js.map +1 -0
  43. package/dist/auth/token-store.d.ts +104 -0
  44. package/dist/auth/token-store.d.ts.map +1 -0
  45. package/dist/auth/token-store.js +205 -0
  46. package/dist/auth/token-store.js.map +1 -0
  47. package/dist/auth/token-validation.d.ts +47 -0
  48. package/dist/auth/token-validation.d.ts.map +1 -0
  49. package/dist/auth/token-validation.js +237 -0
  50. package/dist/auth/token-validation.js.map +1 -0
  51. package/dist/auth/types.d.ts +215 -0
  52. package/dist/auth/types.d.ts.map +1 -0
  53. package/dist/auth/types.js +6 -0
  54. package/dist/auth/types.js.map +1 -0
  55. package/dist/cli/commands/build.d.ts +6 -0
  56. package/dist/cli/commands/build.d.ts.map +1 -0
  57. package/dist/cli/commands/build.js +104 -0
  58. package/dist/cli/commands/build.js.map +1 -0
  59. package/dist/cli/commands/dev.d.ts +7 -0
  60. package/dist/cli/commands/dev.d.ts.map +1 -0
  61. package/dist/cli/commands/dev.js +312 -0
  62. package/dist/cli/commands/dev.js.map +1 -0
  63. package/dist/cli/commands/generate-types.d.ts +8 -0
  64. package/dist/cli/commands/generate-types.d.ts.map +1 -0
  65. package/dist/cli/commands/generate-types.js +220 -0
  66. package/dist/cli/commands/generate-types.js.map +1 -0
  67. package/dist/cli/commands/generate.d.ts +5 -0
  68. package/dist/cli/commands/generate.d.ts.map +1 -0
  69. package/dist/cli/commands/generate.js +365 -0
  70. package/dist/cli/commands/generate.js.map +1 -0
  71. package/dist/cli/commands/init.d.ts +7 -0
  72. package/dist/cli/commands/init.d.ts.map +1 -0
  73. package/dist/cli/commands/init.js +365 -0
  74. package/dist/cli/commands/init.js.map +1 -0
  75. package/dist/cli/commands/start.d.ts +6 -0
  76. package/dist/cli/commands/start.d.ts.map +1 -0
  77. package/dist/cli/commands/start.js +61 -0
  78. package/dist/cli/commands/start.js.map +1 -0
  79. package/dist/cli/index.d.ts +3 -0
  80. package/dist/cli/index.d.ts.map +1 -0
  81. package/dist/cli/index.js +47 -0
  82. package/dist/cli/index.js.map +1 -0
  83. package/dist/cli/mcp-dev-wrapper.d.ts +3 -0
  84. package/dist/cli/mcp-dev-wrapper.d.ts.map +1 -0
  85. package/dist/cli/mcp-dev-wrapper.js +116 -0
  86. package/dist/cli/mcp-dev-wrapper.js.map +1 -0
  87. package/dist/core/apikey-module.d.ts +69 -0
  88. package/dist/core/apikey-module.d.ts.map +1 -0
  89. package/dist/core/apikey-module.js +114 -0
  90. package/dist/core/apikey-module.js.map +1 -0
  91. package/dist/core/app-decorator.d.ts +58 -0
  92. package/dist/core/app-decorator.d.ts.map +1 -0
  93. package/dist/core/app-decorator.js +261 -0
  94. package/dist/core/app-decorator.js.map +1 -0
  95. package/dist/core/builders.d.ts +38 -0
  96. package/dist/core/builders.d.ts.map +1 -0
  97. package/dist/core/builders.js +129 -0
  98. package/dist/core/builders.js.map +1 -0
  99. package/dist/core/component.d.ts +105 -0
  100. package/dist/core/component.d.ts.map +1 -0
  101. package/dist/core/component.js +182 -0
  102. package/dist/core/component.js.map +1 -0
  103. package/dist/core/config-module.d.ts +55 -0
  104. package/dist/core/config-module.d.ts.map +1 -0
  105. package/dist/core/config-module.js +94 -0
  106. package/dist/core/config-module.js.map +1 -0
  107. package/dist/core/decorators/cache.decorator.d.ts +61 -0
  108. package/dist/core/decorators/cache.decorator.d.ts.map +1 -0
  109. package/dist/core/decorators/cache.decorator.js +115 -0
  110. package/dist/core/decorators/cache.decorator.js.map +1 -0
  111. package/dist/core/decorators/health-check.decorator.d.ts +80 -0
  112. package/dist/core/decorators/health-check.decorator.d.ts.map +1 -0
  113. package/dist/core/decorators/health-check.decorator.js +153 -0
  114. package/dist/core/decorators/health-check.decorator.js.map +1 -0
  115. package/dist/core/decorators/rate-limit.decorator.d.ts +62 -0
  116. package/dist/core/decorators/rate-limit.decorator.d.ts.map +1 -0
  117. package/dist/core/decorators/rate-limit.decorator.js +129 -0
  118. package/dist/core/decorators/rate-limit.decorator.js.map +1 -0
  119. package/dist/core/decorators.d.ts +151 -0
  120. package/dist/core/decorators.d.ts.map +1 -0
  121. package/dist/core/decorators.js +142 -0
  122. package/dist/core/decorators.js.map +1 -0
  123. package/dist/core/di/container.d.ts +42 -0
  124. package/dist/core/di/container.d.ts.map +1 -0
  125. package/dist/core/di/container.js +76 -0
  126. package/dist/core/di/container.js.map +1 -0
  127. package/dist/core/di/injectable.decorator.d.ts +35 -0
  128. package/dist/core/di/injectable.decorator.d.ts.map +1 -0
  129. package/dist/core/di/injectable.decorator.js +57 -0
  130. package/dist/core/di/injectable.decorator.js.map +1 -0
  131. package/dist/core/errors.d.ts +54 -0
  132. package/dist/core/errors.d.ts.map +1 -0
  133. package/dist/core/errors.js +87 -0
  134. package/dist/core/errors.js.map +1 -0
  135. package/dist/core/events/event-emitter.d.ts +50 -0
  136. package/dist/core/events/event-emitter.d.ts.map +1 -0
  137. package/dist/core/events/event-emitter.js +94 -0
  138. package/dist/core/events/event-emitter.js.map +1 -0
  139. package/dist/core/events/event.decorator.d.ts +48 -0
  140. package/dist/core/events/event.decorator.d.ts.map +1 -0
  141. package/dist/core/events/event.decorator.js +68 -0
  142. package/dist/core/events/event.decorator.js.map +1 -0
  143. package/dist/core/filters/exception-filter.decorator.d.ts +40 -0
  144. package/dist/core/filters/exception-filter.decorator.d.ts.map +1 -0
  145. package/dist/core/filters/exception-filter.decorator.js +54 -0
  146. package/dist/core/filters/exception-filter.decorator.js.map +1 -0
  147. package/dist/core/filters/exception-filter.interface.d.ts +30 -0
  148. package/dist/core/filters/exception-filter.interface.d.ts.map +1 -0
  149. package/dist/core/filters/exception-filter.interface.js +2 -0
  150. package/dist/core/filters/exception-filter.interface.js.map +1 -0
  151. package/dist/core/guards/apikey.guard.d.ts +22 -0
  152. package/dist/core/guards/apikey.guard.d.ts.map +1 -0
  153. package/dist/core/guards/apikey.guard.js +11 -0
  154. package/dist/core/guards/apikey.guard.js.map +1 -0
  155. package/dist/core/guards/guard.interface.d.ts +18 -0
  156. package/dist/core/guards/guard.interface.d.ts.map +1 -0
  157. package/dist/core/guards/guard.interface.js +2 -0
  158. package/dist/core/guards/guard.interface.js.map +1 -0
  159. package/dist/core/guards/jwt.guard.d.ts +18 -0
  160. package/dist/core/guards/jwt.guard.d.ts.map +1 -0
  161. package/dist/core/guards/jwt.guard.js +2 -0
  162. package/dist/core/guards/jwt.guard.js.map +1 -0
  163. package/dist/core/guards/oauth.guard.d.ts +35 -0
  164. package/dist/core/guards/oauth.guard.d.ts.map +1 -0
  165. package/dist/core/guards/oauth.guard.js +2 -0
  166. package/dist/core/guards/oauth.guard.js.map +1 -0
  167. package/dist/core/guards/use-guards.decorator.d.ts +25 -0
  168. package/dist/core/guards/use-guards.decorator.d.ts.map +1 -0
  169. package/dist/core/guards/use-guards.decorator.js +32 -0
  170. package/dist/core/guards/use-guards.decorator.js.map +1 -0
  171. package/dist/core/health/health-checks.resource.d.ts +14 -0
  172. package/dist/core/health/health-checks.resource.d.ts.map +1 -0
  173. package/dist/core/health/health-checks.resource.js +29 -0
  174. package/dist/core/health/health-checks.resource.js.map +1 -0
  175. package/dist/core/index.d.ts +55 -0
  176. package/dist/core/index.d.ts.map +1 -0
  177. package/dist/core/index.js +57 -0
  178. package/dist/core/index.js.map +1 -0
  179. package/dist/core/interceptors/interceptor.decorator.d.ts +37 -0
  180. package/dist/core/interceptors/interceptor.decorator.d.ts.map +1 -0
  181. package/dist/core/interceptors/interceptor.decorator.js +51 -0
  182. package/dist/core/interceptors/interceptor.decorator.js.map +1 -0
  183. package/dist/core/interceptors/interceptor.interface.d.ts +31 -0
  184. package/dist/core/interceptors/interceptor.interface.d.ts.map +1 -0
  185. package/dist/core/interceptors/interceptor.interface.js +2 -0
  186. package/dist/core/interceptors/interceptor.interface.js.map +1 -0
  187. package/dist/core/jwt-module.d.ts +51 -0
  188. package/dist/core/jwt-module.d.ts.map +1 -0
  189. package/dist/core/jwt-module.js +52 -0
  190. package/dist/core/jwt-module.js.map +1 -0
  191. package/dist/core/logger.d.ts +18 -0
  192. package/dist/core/logger.d.ts.map +1 -0
  193. package/dist/core/logger.js +51 -0
  194. package/dist/core/logger.js.map +1 -0
  195. package/dist/core/middleware/middleware.decorator.d.ts +39 -0
  196. package/dist/core/middleware/middleware.decorator.d.ts.map +1 -0
  197. package/dist/core/middleware/middleware.decorator.js +53 -0
  198. package/dist/core/middleware/middleware.decorator.js.map +1 -0
  199. package/dist/core/middleware/middleware.interface.d.ts +29 -0
  200. package/dist/core/middleware/middleware.interface.d.ts.map +1 -0
  201. package/dist/core/middleware/middleware.interface.js +2 -0
  202. package/dist/core/middleware/middleware.interface.js.map +1 -0
  203. package/dist/core/module.d.ts +74 -0
  204. package/dist/core/module.d.ts.map +1 -0
  205. package/dist/core/module.js +82 -0
  206. package/dist/core/module.js.map +1 -0
  207. package/dist/core/oauth-module.d.ts +144 -0
  208. package/dist/core/oauth-module.d.ts.map +1 -0
  209. package/dist/core/oauth-module.js +190 -0
  210. package/dist/core/oauth-module.js.map +1 -0
  211. package/dist/core/pipes/pipe.decorator.d.ts +55 -0
  212. package/dist/core/pipes/pipe.decorator.d.ts.map +1 -0
  213. package/dist/core/pipes/pipe.decorator.js +85 -0
  214. package/dist/core/pipes/pipe.decorator.js.map +1 -0
  215. package/dist/core/pipes/pipe.interface.d.ts +36 -0
  216. package/dist/core/pipes/pipe.interface.d.ts.map +1 -0
  217. package/dist/core/pipes/pipe.interface.js +2 -0
  218. package/dist/core/pipes/pipe.interface.js.map +1 -0
  219. package/dist/core/prompt.d.ts +37 -0
  220. package/dist/core/prompt.d.ts.map +1 -0
  221. package/dist/core/prompt.js +76 -0
  222. package/dist/core/prompt.js.map +1 -0
  223. package/dist/core/resource.d.ts +42 -0
  224. package/dist/core/resource.d.ts.map +1 -0
  225. package/dist/core/resource.js +90 -0
  226. package/dist/core/resource.js.map +1 -0
  227. package/dist/core/server.d.ts +72 -0
  228. package/dist/core/server.d.ts.map +1 -0
  229. package/dist/core/server.js +406 -0
  230. package/dist/core/server.js.map +1 -0
  231. package/dist/core/tool.d.ts +78 -0
  232. package/dist/core/tool.d.ts.map +1 -0
  233. package/dist/core/tool.js +190 -0
  234. package/dist/core/tool.js.map +1 -0
  235. package/dist/core/transports/http-server.d.ts +102 -0
  236. package/dist/core/transports/http-server.d.ts.map +1 -0
  237. package/dist/core/transports/http-server.js +265 -0
  238. package/dist/core/transports/http-server.js.map +1 -0
  239. package/dist/core/types.d.ts +123 -0
  240. package/dist/core/types.d.ts.map +1 -0
  241. package/dist/core/types.js +2 -0
  242. package/dist/core/types.js.map +1 -0
  243. package/dist/core/widgets/widget-examples.resource.d.ts +17 -0
  244. package/dist/core/widgets/widget-examples.resource.d.ts.map +1 -0
  245. package/dist/core/widgets/widget-examples.resource.js +28 -0
  246. package/dist/core/widgets/widget-examples.resource.js.map +1 -0
  247. package/dist/core/widgets/widget-registry.d.ts +56 -0
  248. package/dist/core/widgets/widget-registry.d.ts.map +1 -0
  249. package/dist/core/widgets/widget-registry.js +75 -0
  250. package/dist/core/widgets/widget-registry.js.map +1 -0
  251. package/dist/testing/index.d.ts +82 -0
  252. package/dist/testing/index.d.ts.map +1 -0
  253. package/dist/testing/index.js +164 -0
  254. package/dist/testing/index.js.map +1 -0
  255. package/dist/ui-next/index.d.ts +31 -0
  256. package/dist/ui-next/index.d.ts.map +1 -0
  257. package/dist/ui-next/index.js +687 -0
  258. package/dist/ui-next/index.js.map +1 -0
  259. package/dist/widgets/index.d.ts +9 -0
  260. package/dist/widgets/index.d.ts.map +1 -0
  261. package/dist/widgets/index.js +9 -0
  262. package/dist/widgets/index.js.map +1 -0
  263. package/dist/widgets/metadata.d.ts +53 -0
  264. package/dist/widgets/metadata.d.ts.map +1 -0
  265. package/dist/widgets/metadata.js +29 -0
  266. package/dist/widgets/metadata.js.map +1 -0
  267. package/dist/widgets/withToolData.d.ts +19 -0
  268. package/dist/widgets/withToolData.d.ts.map +1 -0
  269. package/dist/widgets/withToolData.js +240 -0
  270. package/dist/widgets/withToolData.js.map +1 -0
  271. package/jest.config.js +21 -0
  272. package/package.json +108 -0
  273. package/templates/typescript-auth/AI_AGENT_CLI_REFERENCE.md +702 -0
  274. package/templates/typescript-auth/AI_AGENT_SDK_REFERENCE.md +1260 -0
  275. package/templates/typescript-auth/README.md +400 -0
  276. package/templates/typescript-auth/package.json +44 -0
  277. package/templates/typescript-auth-api-key/AI_AGENT_CLI_REFERENCE.md +701 -0
  278. package/templates/typescript-auth-api-key/AI_AGENT_SDK_REFERENCE.md +1260 -0
  279. package/templates/typescript-auth-api-key/README.md +483 -0
  280. package/templates/typescript-auth-api-key/package-lock.json +124 -0
  281. package/templates/typescript-auth-api-key/package.json +29 -0
  282. package/templates/typescript-oauth/AI_AGENT_CLI_REFERENCE.md +701 -0
  283. package/templates/typescript-oauth/AI_AGENT_SDK_REFERENCE.md +1260 -0
  284. package/templates/typescript-oauth/OAUTH_SETUP.md +406 -0
  285. package/templates/typescript-oauth/README.md +350 -0
  286. package/templates/typescript-oauth/package.json +30 -0
  287. package/templates/typescript-starter/AI_AGENT_CLI_REFERENCE.md +701 -0
  288. package/templates/typescript-starter/AI_AGENT_SDK_REFERENCE.md +1260 -0
  289. package/templates/typescript-starter/README.md +312 -0
  290. package/templates/typescript-starter/package.json +32 -0
@@ -0,0 +1,29 @@
1
+ import 'reflect-metadata';
2
+ import { ExecutionContext } from '../types.js';
3
+ /**
4
+ * Middleware Interface
5
+ *
6
+ * Middleware can intercept tool execution for cross-cutting concerns
7
+ * like logging, authentication, validation, etc.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * @Middleware()
12
+ * export class LoggingMiddleware implements MiddlewareInterface {
13
+ * async use(context: ExecutionContext, next: () => Promise<any>) {
14
+ * console.log('Before:', context.toolName);
15
+ * const result = await next();
16
+ * console.log('After:', context.toolName);
17
+ * return result;
18
+ * }
19
+ * }
20
+ * ```
21
+ */
22
+ export interface MiddlewareInterface {
23
+ use(context: ExecutionContext, next: () => Promise<any>): Promise<any>;
24
+ }
25
+ /**
26
+ * Middleware constructor type
27
+ */
28
+ export type MiddlewareConstructor = new (...args: any[]) => MiddlewareInterface;
29
+ //# sourceMappingURL=middleware.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.interface.d.ts","sourceRoot":"","sources":["../../../src/core/middleware/middleware.interface.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACxE;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import 'reflect-metadata';
2
+ //# sourceMappingURL=middleware.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.interface.js","sourceRoot":"","sources":["../../../src/core/middleware/middleware.interface.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC"}
@@ -0,0 +1,74 @@
1
+ import 'reflect-metadata';
2
+ /**
3
+ * Module metadata key
4
+ */
5
+ export declare const MODULE_METADATA: unique symbol;
6
+ /**
7
+ * Module metadata interface
8
+ */
9
+ export interface ModuleMetadata {
10
+ /** Module name */
11
+ name: string;
12
+ /** Module description */
13
+ description?: string;
14
+ /** Controllers (classes with @Tool, @Resource, @Prompt decorators) */
15
+ controllers?: any[];
16
+ /** Services (dependency injection) */
17
+ providers?: any[];
18
+ /** Other modules to import */
19
+ imports?: any[];
20
+ /** Items to export to other modules */
21
+ exports?: any[];
22
+ }
23
+ /**
24
+ * Module class (internal)
25
+ */
26
+ declare class ModuleClass {
27
+ metadata: ModuleMetadata;
28
+ constructor(metadata: ModuleMetadata);
29
+ /**
30
+ * Get all controllers from this module
31
+ */
32
+ getControllers(): any[];
33
+ /**
34
+ * Get module name
35
+ */
36
+ getName(): string;
37
+ /**
38
+ * Get module description
39
+ */
40
+ getDescription(): string | undefined;
41
+ }
42
+ /**
43
+ * Module decorator - Defines a module with controllers, providers, imports
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * @Module({
48
+ * name: 'auth',
49
+ * description: 'Authentication module',
50
+ * controllers: [AuthController],
51
+ * })
52
+ * export class AuthModule {}
53
+ * ```
54
+ */
55
+ export declare function ModuleDecorator(metadata: ModuleMetadata): <T extends {
56
+ new (...args: any[]): {};
57
+ }>(constructor: T) => {
58
+ new (...args: any[]): {};
59
+ getMetadata(): ModuleMetadata;
60
+ } & T;
61
+ export { ModuleDecorator as Module };
62
+ /**
63
+ * Create a module instance from a class
64
+ */
65
+ export declare function createModule(moduleClass: any): ModuleClass;
66
+ /**
67
+ * Check if a class is a module
68
+ */
69
+ export declare function isModule(target: any): boolean;
70
+ /**
71
+ * Get module metadata from a class
72
+ */
73
+ export declare function getModuleMetadata(target: any): ModuleMetadata | undefined;
74
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/core/module.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B;;GAEG;AACH,eAAO,MAAM,eAAe,eAA4B,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IAEb,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sEAAsE;IACtE,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;IAEpB,sCAAsC;IACtC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;IAElB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAEhB,uCAAuC;IACvC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,cAAM,WAAW;IACI,QAAQ,EAAE,cAAc;gBAAxB,QAAQ,EAAE,cAAc;IAE3C;;OAEG;IACH,cAAc,IAAI,GAAG,EAAE;IAIvB;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,SAAS;CAGrC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,IACrC,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;CAAE,EAAE,aAAa,CAAC;kBAA5B,GAAG,EAAE;mBAMtB,cAAc;MAKzC;AAGD,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,CAAC;AAErC;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,GAAG,GAAG,WAAW,CAM1D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,cAAc,GAAG,SAAS,CAEzE"}
@@ -0,0 +1,82 @@
1
+ import 'reflect-metadata';
2
+ /**
3
+ * Module metadata key
4
+ */
5
+ export const MODULE_METADATA = Symbol('module:metadata');
6
+ /**
7
+ * Module class (internal)
8
+ */
9
+ class ModuleClass {
10
+ metadata;
11
+ constructor(metadata) {
12
+ this.metadata = metadata;
13
+ }
14
+ /**
15
+ * Get all controllers from this module
16
+ */
17
+ getControllers() {
18
+ return this.metadata.controllers || [];
19
+ }
20
+ /**
21
+ * Get module name
22
+ */
23
+ getName() {
24
+ return this.metadata.name;
25
+ }
26
+ /**
27
+ * Get module description
28
+ */
29
+ getDescription() {
30
+ return this.metadata.description;
31
+ }
32
+ }
33
+ /**
34
+ * Module decorator - Defines a module with controllers, providers, imports
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * @Module({
39
+ * name: 'auth',
40
+ * description: 'Authentication module',
41
+ * controllers: [AuthController],
42
+ * })
43
+ * export class AuthModule {}
44
+ * ```
45
+ */
46
+ export function ModuleDecorator(metadata) {
47
+ return function (constructor) {
48
+ // Store metadata on the class
49
+ Reflect.defineMetadata(MODULE_METADATA, metadata, constructor);
50
+ // Return a new class that extends the original
51
+ return class extends constructor {
52
+ static getMetadata() {
53
+ return Reflect.getMetadata(MODULE_METADATA, constructor) || metadata;
54
+ }
55
+ };
56
+ };
57
+ }
58
+ // Export as "Module" for decorator usage
59
+ export { ModuleDecorator as Module };
60
+ /**
61
+ * Create a module instance from a class
62
+ */
63
+ export function createModule(moduleClass) {
64
+ const metadata = Reflect.getMetadata(MODULE_METADATA, moduleClass);
65
+ if (!metadata) {
66
+ throw new Error(`Class ${moduleClass.name} is not decorated with @Module`);
67
+ }
68
+ return new ModuleClass(metadata);
69
+ }
70
+ /**
71
+ * Check if a class is a module
72
+ */
73
+ export function isModule(target) {
74
+ return Reflect.hasMetadata(MODULE_METADATA, target);
75
+ }
76
+ /**
77
+ * Get module metadata from a class
78
+ */
79
+ export function getModuleMetadata(target) {
80
+ return Reflect.getMetadata(MODULE_METADATA, target);
81
+ }
82
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/core/module.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAyBzD;;GAEG;AACH,MAAM,WAAW;IACI;IAAnB,YAAmB,QAAwB;QAAxB,aAAQ,GAAR,QAAQ,CAAgB;IAAG,CAAC;IAE/C;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IACnC,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,QAAwB;IACtD,OAAO,UAAkD,WAAc;QACrE,8BAA8B;QAC9B,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE/D,+CAA+C;QAC/C,OAAO,KAAM,SAAQ,WAAW;YAC9B,MAAM,CAAC,WAAW;gBAChB,OAAO,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,IAAI,QAAQ,CAAC;YACvE,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,yCAAyC;AACzC,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,CAAC;AAErC;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAAgB;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,SAAS,WAAW,CAAC,IAAI,gCAAgC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAW;IAClC,OAAO,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAW;IAC3C,OAAO,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,144 @@
1
+ import 'reflect-metadata';
2
+ /**
3
+ * OAuth 2.1 Module Configuration
4
+ *
5
+ * Compliant with:
6
+ * - OAuth 2.1 (draft-ietf-oauth-v2-1-13)
7
+ * - RFC 9728 - Protected Resource Metadata
8
+ * - RFC 8414 - Authorization Server Metadata
9
+ * - RFC 7591 - Dynamic Client Registration
10
+ * - RFC 8707 - Resource Indicators (Token Audience Binding)
11
+ * - RFC 7636 - PKCE
12
+ * - RFC 7662 - Token Introspection
13
+ */
14
+ export interface OAuthModuleConfig {
15
+ /**
16
+ * Resource URI - The MCP server's public URL
17
+ * Used for token audience validation (RFC 8707)
18
+ */
19
+ resourceUri: string;
20
+ /**
21
+ * Authorization Server(s)
22
+ * The OAuth 2.1 authorization server URLs
23
+ */
24
+ authorizationServers: string[];
25
+ /**
26
+ * Supported scopes for this MCP server
27
+ * Example: ['mcp:read', 'mcp:write', 'tools:execute']
28
+ */
29
+ scopesSupported?: string[];
30
+ /**
31
+ * HTTP server configuration
32
+ * OAuth requires HTTP transport - port will be extracted from resourceUri or use this
33
+ */
34
+ http?: {
35
+ port?: number;
36
+ host?: string;
37
+ basePath?: string;
38
+ };
39
+ /**
40
+ * Token Introspection Endpoint (RFC 7662)
41
+ * Required for validating opaque tokens
42
+ */
43
+ tokenIntrospectionEndpoint?: string;
44
+ /**
45
+ * Client ID for token introspection
46
+ */
47
+ tokenIntrospectionClientId?: string;
48
+ /**
49
+ * Client Secret for token introspection
50
+ * Should be stored in environment variable
51
+ */
52
+ tokenIntrospectionClientSecret?: string;
53
+ /**
54
+ * Expected audience for tokens (RFC 8707)
55
+ * If not provided, defaults to resourceUri
56
+ */
57
+ audience?: string;
58
+ /**
59
+ * Issuer validation
60
+ * If provided, tokens must be from this issuer
61
+ */
62
+ issuer?: string;
63
+ /**
64
+ * Custom token validation
65
+ * Additional validation logic beyond spec requirements
66
+ */
67
+ customValidation?: (token: any) => Promise<boolean> | boolean;
68
+ }
69
+ /**
70
+ * OAuth Module - Enable OAuth 2.1 authentication in your MCP server
71
+ *
72
+ * This module provides:
73
+ * - Protected Resource Metadata (RFC 9728)
74
+ * - Token validation with audience binding (RFC 8707)
75
+ * - Token introspection (RFC 7662)
76
+ * - PKCE support (RFC 7636)
77
+ *
78
+ * Compatible with OpenAI Apps SDK and MCP specification.
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * import { McpApplicationFactory, OAuthModule } from 'nitrostack';
83
+ * import { AppModule } from './app.module.js';
84
+ *
85
+ * @McpApp({
86
+ * module: AppModule,
87
+ * server: {
88
+ * name: 'OAuth MCP Server',
89
+ * version: '1.0.0',
90
+ * },
91
+ * })
92
+ * @Module({
93
+ * name: 'app',
94
+ * imports: [
95
+ * // Enable OAuth 2.1 authentication
96
+ * OAuthModule.forRoot({
97
+ * resourceUri: process.env.RESOURCE_URI!,
98
+ * authorizationServers: [process.env.AUTH_SERVER_URL!],
99
+ * scopesSupported: ['mcp:read', 'mcp:write', 'tools:execute'],
100
+ * tokenIntrospectionEndpoint: process.env.INTROSPECTION_ENDPOINT,
101
+ * tokenIntrospectionClientId: process.env.INTROSPECTION_CLIENT_ID,
102
+ * tokenIntrospectionClientSecret: process.env.INTROSPECTION_CLIENT_SECRET,
103
+ * }),
104
+ * ],
105
+ * })
106
+ * export class AppModule {}
107
+ * ```
108
+ */
109
+ export declare class OAuthModule {
110
+ private static config;
111
+ /**
112
+ * Configure OAuth module for the application
113
+ */
114
+ static forRoot(config: OAuthModuleConfig): OAuthModuleConfig;
115
+ /**
116
+ * Get current OAuth configuration
117
+ */
118
+ static getConfig(): OAuthModuleConfig | null;
119
+ /**
120
+ * Validate an access token
121
+ *
122
+ * Performs:
123
+ * 1. Token introspection (if endpoint configured)
124
+ * 2. Audience validation (RFC 8707)
125
+ * 3. Issuer validation (if configured)
126
+ * 4. Custom validation (if configured)
127
+ */
128
+ static validateToken(token: string): Promise<{
129
+ valid: boolean;
130
+ payload?: any;
131
+ error?: string;
132
+ }>;
133
+ /**
134
+ * Introspect token using RFC 7662
135
+ * @private
136
+ */
137
+ private static introspectToken;
138
+ /**
139
+ * Decode JWT token (without validation)
140
+ * @private
141
+ */
142
+ private static decodeToken;
143
+ }
144
+ //# sourceMappingURL=oauth-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-module.d.ts","sourceRoot":"","sources":["../../src/core/oauth-module.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAE/B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;OAGG;IACH,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF;;;OAGG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IAEpC;;OAEG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IAEpC;;;OAGG;IACH,8BAA8B,CAAC,EAAE,MAAM,CAAC;IAExC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAC/D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAkC;IAEvD;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB;IAmB5D;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,iBAAiB,GAAG,IAAI;IAI5C;;;;;;;;OAQG;WACU,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QACjD,KAAK,EAAE,OAAO,CAAC;QACf,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IA0DF;;;OAGG;mBACkB,eAAe;IAyDpC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;CAc3B"}
@@ -0,0 +1,190 @@
1
+ import 'reflect-metadata';
2
+ /**
3
+ * OAuth Module - Enable OAuth 2.1 authentication in your MCP server
4
+ *
5
+ * This module provides:
6
+ * - Protected Resource Metadata (RFC 9728)
7
+ * - Token validation with audience binding (RFC 8707)
8
+ * - Token introspection (RFC 7662)
9
+ * - PKCE support (RFC 7636)
10
+ *
11
+ * Compatible with OpenAI Apps SDK and MCP specification.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { McpApplicationFactory, OAuthModule } from 'nitrostack';
16
+ * import { AppModule } from './app.module.js';
17
+ *
18
+ * @McpApp({
19
+ * module: AppModule,
20
+ * server: {
21
+ * name: 'OAuth MCP Server',
22
+ * version: '1.0.0',
23
+ * },
24
+ * })
25
+ * @Module({
26
+ * name: 'app',
27
+ * imports: [
28
+ * // Enable OAuth 2.1 authentication
29
+ * OAuthModule.forRoot({
30
+ * resourceUri: process.env.RESOURCE_URI!,
31
+ * authorizationServers: [process.env.AUTH_SERVER_URL!],
32
+ * scopesSupported: ['mcp:read', 'mcp:write', 'tools:execute'],
33
+ * tokenIntrospectionEndpoint: process.env.INTROSPECTION_ENDPOINT,
34
+ * tokenIntrospectionClientId: process.env.INTROSPECTION_CLIENT_ID,
35
+ * tokenIntrospectionClientSecret: process.env.INTROSPECTION_CLIENT_SECRET,
36
+ * }),
37
+ * ],
38
+ * })
39
+ * export class AppModule {}
40
+ * ```
41
+ */
42
+ export class OAuthModule {
43
+ static config = null;
44
+ /**
45
+ * Configure OAuth module for the application
46
+ */
47
+ static forRoot(config) {
48
+ // Validate required fields
49
+ if (!config.resourceUri) {
50
+ throw new Error('OAuthModule: resourceUri is required');
51
+ }
52
+ if (!config.authorizationServers || config.authorizationServers.length === 0) {
53
+ throw new Error('OAuthModule: at least one authorizationServer is required');
54
+ }
55
+ // Set default audience to resourceUri if not provided
56
+ if (!config.audience) {
57
+ config.audience = config.resourceUri;
58
+ }
59
+ this.config = config;
60
+ return this.config;
61
+ }
62
+ /**
63
+ * Get current OAuth configuration
64
+ */
65
+ static getConfig() {
66
+ return this.config;
67
+ }
68
+ /**
69
+ * Validate an access token
70
+ *
71
+ * Performs:
72
+ * 1. Token introspection (if endpoint configured)
73
+ * 2. Audience validation (RFC 8707)
74
+ * 3. Issuer validation (if configured)
75
+ * 4. Custom validation (if configured)
76
+ */
77
+ static async validateToken(token) {
78
+ if (!this.config) {
79
+ return { valid: false, error: 'OAuth module not configured' };
80
+ }
81
+ try {
82
+ // If introspection endpoint is configured, use it
83
+ if (this.config.tokenIntrospectionEndpoint) {
84
+ return await this.introspectToken(token);
85
+ }
86
+ // For JWT tokens without introspection, decode and validate
87
+ // Note: In production, you should validate JWT signature
88
+ const payload = this.decodeToken(token);
89
+ if (!payload) {
90
+ return { valid: false, error: 'Invalid token format' };
91
+ }
92
+ // Validate audience (RFC 8707 - critical for security)
93
+ if (payload.aud) {
94
+ const audiences = Array.isArray(payload.aud) ? payload.aud : [payload.aud];
95
+ if (!audiences.includes(this.config.audience)) {
96
+ return {
97
+ valid: false,
98
+ error: `Token audience mismatch. Expected: ${this.config.audience}, Got: ${audiences.join(', ')}`,
99
+ };
100
+ }
101
+ }
102
+ // Validate issuer
103
+ if (this.config.issuer && payload.iss !== this.config.issuer) {
104
+ return {
105
+ valid: false,
106
+ error: `Token issuer mismatch. Expected: ${this.config.issuer}, Got: ${payload.iss}`,
107
+ };
108
+ }
109
+ // Check expiration
110
+ if (payload.exp && payload.exp < Date.now() / 1000) {
111
+ return { valid: false, error: 'Token expired' };
112
+ }
113
+ // Custom validation
114
+ if (this.config.customValidation) {
115
+ const customValid = await this.config.customValidation(payload);
116
+ if (!customValid) {
117
+ return { valid: false, error: 'Custom validation failed' };
118
+ }
119
+ }
120
+ return { valid: true, payload };
121
+ }
122
+ catch (error) {
123
+ return { valid: false, error: error.message };
124
+ }
125
+ }
126
+ /**
127
+ * Introspect token using RFC 7662
128
+ * @private
129
+ */
130
+ static async introspectToken(token) {
131
+ if (!this.config?.tokenIntrospectionEndpoint) {
132
+ return { valid: false, error: 'Introspection endpoint not configured' };
133
+ }
134
+ try {
135
+ const auth = Buffer.from(`${this.config.tokenIntrospectionClientId}:${this.config.tokenIntrospectionClientSecret}`).toString('base64');
136
+ const response = await fetch(this.config.tokenIntrospectionEndpoint, {
137
+ method: 'POST',
138
+ headers: {
139
+ 'Content-Type': 'application/x-www-form-urlencoded',
140
+ 'Authorization': `Basic ${auth}`,
141
+ },
142
+ body: new URLSearchParams({
143
+ token: token,
144
+ token_type_hint: 'access_token',
145
+ }),
146
+ });
147
+ if (!response.ok) {
148
+ return {
149
+ valid: false,
150
+ error: `Introspection failed: ${response.status} ${response.statusText}`,
151
+ };
152
+ }
153
+ const result = await response.json();
154
+ if (!result.active) {
155
+ return { valid: false, error: 'Token is not active' };
156
+ }
157
+ // Validate audience from introspection response
158
+ if (result.aud) {
159
+ const audiences = Array.isArray(result.aud) ? result.aud : [result.aud];
160
+ if (!audiences.includes(this.config.audience)) {
161
+ return {
162
+ valid: false,
163
+ error: `Token audience mismatch. Expected: ${this.config.audience}`,
164
+ };
165
+ }
166
+ }
167
+ return { valid: true, payload: result };
168
+ }
169
+ catch (error) {
170
+ return { valid: false, error: `Introspection error: ${error.message}` };
171
+ }
172
+ }
173
+ /**
174
+ * Decode JWT token (without validation)
175
+ * @private
176
+ */
177
+ static decodeToken(token) {
178
+ try {
179
+ const parts = token.split('.');
180
+ if (parts.length !== 3)
181
+ return null;
182
+ const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf8'));
183
+ return payload;
184
+ }
185
+ catch {
186
+ return null;
187
+ }
188
+ }
189
+ }
190
+ //# sourceMappingURL=oauth-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-module.js","sourceRoot":"","sources":["../../src/core/oauth-module.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AA+E1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,CAAC,MAAM,GAA6B,IAAI,CAAC;IAEvD;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAyB;QACtC,2BAA2B;QAC3B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7E,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAa;QAKtC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;QAChE,CAAC;QAED,IAAI,CAAC;YACH,kDAAkD;YAClD,IAAI,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC;gBAC3C,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC3C,CAAC;YAED,4DAA4D;YAC5D,yDAAyD;YACzD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAExC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;YACzD,CAAC;YAED,uDAAuD;YACvD,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC3E,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,EAAE,CAAC;oBAC/C,OAAO;wBACL,KAAK,EAAE,KAAK;wBACZ,KAAK,EAAE,sCAAsC,IAAI,CAAC,MAAM,CAAC,QAAQ,UAAU,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAClG,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,kBAAkB;YAClB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC7D,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,oCAAoC,IAAI,CAAC,MAAM,CAAC,MAAM,UAAU,OAAO,CAAC,GAAG,EAAE;iBACrF,CAAC;YACJ,CAAC;YAED,mBAAmB;YACnB,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;gBACnD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;YAClD,CAAC;YAED,oBAAoB;YACpB,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBACjC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAChE,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;gBAC7D,CAAC;YACH,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAElC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,KAAa;QAKhD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,0BAA0B,EAAE,CAAC;YAC7C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CACtB,GAAG,IAAI,CAAC,MAAM,CAAC,0BAA0B,IAAI,IAAI,CAAC,MAAM,CAAC,8BAA8B,EAAE,CAC1F,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAErB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE;gBACnE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,mCAAmC;oBACnD,eAAe,EAAE,SAAS,IAAI,EAAE;iBACjC;gBACD,IAAI,EAAE,IAAI,eAAe,CAAC;oBACxB,KAAK,EAAE,KAAK;oBACZ,eAAe,EAAE,cAAc;iBAChC,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,yBAAyB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE;iBACzE,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAErC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;YACxD,CAAC;YAED,gDAAgD;YAChD,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACxE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,EAAE,CAAC;oBAC/C,OAAO;wBACL,KAAK,EAAE,KAAK;wBACZ,KAAK,EAAE,sCAAsC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;qBACpE,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAE1C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1E,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,WAAW,CAAC,KAAa;QACtC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CACpD,CAAC;YAEF,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC"}
@@ -0,0 +1,55 @@
1
+ import 'reflect-metadata';
2
+ import { PipeConstructor } from './pipe.interface.js';
3
+ /**
4
+ * Marks a class as a pipe
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * @Pipe()
9
+ * export class ValidationPipe implements PipeInterface {
10
+ * transform(value: any, metadata: ArgumentMetadata) {
11
+ * // Validate and transform
12
+ * return value;
13
+ * }
14
+ * }
15
+ * ```
16
+ */
17
+ export declare function Pipe(): ClassDecorator;
18
+ /**
19
+ * Apply pipes to tool input (entire input object)
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * @Tool({ name: 'create_user', ... })
24
+ * @UsePipes(ValidationPipe, TransformPipe)
25
+ * async createUser(input: any) { }
26
+ * ```
27
+ */
28
+ export declare function UsePipes(...pipes: PipeConstructor[]): MethodDecorator;
29
+ /**
30
+ * Parameter decorator to apply pipes to specific parameters
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * @Tool({ name: 'create_user', ... })
35
+ * async createUser(@Body(ValidationPipe) input: CreateUserDto) { }
36
+ * ```
37
+ */
38
+ export declare function Body(...pipes: PipeConstructor[]): ParameterDecorator;
39
+ /**
40
+ * Shorthand for validation pipe
41
+ */
42
+ export declare function Validated(): ParameterDecorator;
43
+ /**
44
+ * Get pipes for a method
45
+ */
46
+ export declare function getPipeMetadata(target: any, propertyKey: string | symbol): PipeConstructor[];
47
+ /**
48
+ * Get parameter pipes for a method
49
+ */
50
+ export declare function getParamPipesMetadata(target: any, propertyKey: string | symbol): Record<number, any>;
51
+ /**
52
+ * Check if a class is marked as a pipe
53
+ */
54
+ export declare function isPipe(target: any): boolean;
55
+ //# sourceMappingURL=pipe.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe.decorator.d.ts","sourceRoot":"","sources":["../../../src/core/pipes/pipe.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAMtD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,IAAI,IAAI,cAAc,CAIrC;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,GAAG,KAAK,EAAE,eAAe,EAAE,GAAG,eAAe,CAUrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,GAAG,KAAK,EAAE,eAAe,EAAE,GAAG,kBAAkB,CAWpE;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,kBAAkB,CAE9C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,eAAe,EAAE,CAE5F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAEpG;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAE3C"}