@nitrostack/core 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 (239) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +80 -0
  3. package/dist/auth/api-key.d.ts +118 -0
  4. package/dist/auth/api-key.d.ts.map +1 -0
  5. package/dist/auth/api-key.js +168 -0
  6. package/dist/auth/api-key.js.map +1 -0
  7. package/dist/auth/client.d.ts +151 -0
  8. package/dist/auth/client.d.ts.map +1 -0
  9. package/dist/auth/client.js +330 -0
  10. package/dist/auth/client.js.map +1 -0
  11. package/dist/auth/index.d.ts +31 -0
  12. package/dist/auth/index.d.ts.map +1 -0
  13. package/dist/auth/index.js +46 -0
  14. package/dist/auth/index.js.map +1 -0
  15. package/dist/auth/middleware.d.ts +95 -0
  16. package/dist/auth/middleware.d.ts.map +1 -0
  17. package/dist/auth/middleware.js +260 -0
  18. package/dist/auth/middleware.js.map +1 -0
  19. package/dist/auth/pkce.d.ts +53 -0
  20. package/dist/auth/pkce.d.ts.map +1 -0
  21. package/dist/auth/pkce.js +105 -0
  22. package/dist/auth/pkce.js.map +1 -0
  23. package/dist/auth/quick-setup.d.ts +94 -0
  24. package/dist/auth/quick-setup.d.ts.map +1 -0
  25. package/dist/auth/quick-setup.js +210 -0
  26. package/dist/auth/quick-setup.js.map +1 -0
  27. package/dist/auth/secure-secret.d.ts +136 -0
  28. package/dist/auth/secure-secret.d.ts.map +1 -0
  29. package/dist/auth/secure-secret.js +182 -0
  30. package/dist/auth/secure-secret.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 +174 -0
  40. package/dist/auth/simple-jwt.d.ts.map +1 -0
  41. package/dist/auth/simple-jwt.js +162 -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 +59 -0
  48. package/dist/auth/token-validation.d.ts.map +1 -0
  49. package/dist/auth/token-validation.js +241 -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/core/apikey-module.d.ts +69 -0
  56. package/dist/core/apikey-module.d.ts.map +1 -0
  57. package/dist/core/apikey-module.js +114 -0
  58. package/dist/core/apikey-module.js.map +1 -0
  59. package/dist/core/app-decorator.d.ts +59 -0
  60. package/dist/core/app-decorator.d.ts.map +1 -0
  61. package/dist/core/app-decorator.js +322 -0
  62. package/dist/core/app-decorator.js.map +1 -0
  63. package/dist/core/builders.d.ts +50 -0
  64. package/dist/core/builders.d.ts.map +1 -0
  65. package/dist/core/builders.js +139 -0
  66. package/dist/core/builders.js.map +1 -0
  67. package/dist/core/component.d.ts +111 -0
  68. package/dist/core/component.d.ts.map +1 -0
  69. package/dist/core/component.js +228 -0
  70. package/dist/core/component.js.map +1 -0
  71. package/dist/core/config-module.d.ts +62 -0
  72. package/dist/core/config-module.d.ts.map +1 -0
  73. package/dist/core/config-module.js +94 -0
  74. package/dist/core/config-module.js.map +1 -0
  75. package/dist/core/decorators/cache.decorator.d.ts +61 -0
  76. package/dist/core/decorators/cache.decorator.d.ts.map +1 -0
  77. package/dist/core/decorators/cache.decorator.js +115 -0
  78. package/dist/core/decorators/cache.decorator.js.map +1 -0
  79. package/dist/core/decorators/health-check.decorator.d.ts +80 -0
  80. package/dist/core/decorators/health-check.decorator.d.ts.map +1 -0
  81. package/dist/core/decorators/health-check.decorator.js +153 -0
  82. package/dist/core/decorators/health-check.decorator.js.map +1 -0
  83. package/dist/core/decorators/rate-limit.decorator.d.ts +63 -0
  84. package/dist/core/decorators/rate-limit.decorator.d.ts.map +1 -0
  85. package/dist/core/decorators/rate-limit.decorator.js +129 -0
  86. package/dist/core/decorators/rate-limit.decorator.js.map +1 -0
  87. package/dist/core/decorators.d.ts +190 -0
  88. package/dist/core/decorators.d.ts.map +1 -0
  89. package/dist/core/decorators.js +170 -0
  90. package/dist/core/decorators.js.map +1 -0
  91. package/dist/core/di/container.d.ts +64 -0
  92. package/dist/core/di/container.d.ts.map +1 -0
  93. package/dist/core/di/container.js +105 -0
  94. package/dist/core/di/container.js.map +1 -0
  95. package/dist/core/di/injectable.decorator.d.ts +62 -0
  96. package/dist/core/di/injectable.decorator.d.ts.map +1 -0
  97. package/dist/core/di/injectable.decorator.js +66 -0
  98. package/dist/core/di/injectable.decorator.js.map +1 -0
  99. package/dist/core/errors.d.ts +54 -0
  100. package/dist/core/errors.d.ts.map +1 -0
  101. package/dist/core/errors.js +87 -0
  102. package/dist/core/errors.js.map +1 -0
  103. package/dist/core/events/event-emitter.d.ts +50 -0
  104. package/dist/core/events/event-emitter.d.ts.map +1 -0
  105. package/dist/core/events/event-emitter.js +94 -0
  106. package/dist/core/events/event-emitter.js.map +1 -0
  107. package/dist/core/events/event.decorator.d.ts +48 -0
  108. package/dist/core/events/event.decorator.d.ts.map +1 -0
  109. package/dist/core/events/event.decorator.js +72 -0
  110. package/dist/core/events/event.decorator.js.map +1 -0
  111. package/dist/core/events/log-emitter.d.ts +14 -0
  112. package/dist/core/events/log-emitter.d.ts.map +1 -0
  113. package/dist/core/events/log-emitter.js +20 -0
  114. package/dist/core/events/log-emitter.js.map +1 -0
  115. package/dist/core/filters/exception-filter.decorator.d.ts +40 -0
  116. package/dist/core/filters/exception-filter.decorator.d.ts.map +1 -0
  117. package/dist/core/filters/exception-filter.decorator.js +54 -0
  118. package/dist/core/filters/exception-filter.decorator.js.map +1 -0
  119. package/dist/core/filters/exception-filter.interface.d.ts +39 -0
  120. package/dist/core/filters/exception-filter.interface.d.ts.map +1 -0
  121. package/dist/core/filters/exception-filter.interface.js +2 -0
  122. package/dist/core/filters/exception-filter.interface.js.map +1 -0
  123. package/dist/core/guards/apikey.guard.d.ts +22 -0
  124. package/dist/core/guards/apikey.guard.d.ts.map +1 -0
  125. package/dist/core/guards/apikey.guard.js +11 -0
  126. package/dist/core/guards/apikey.guard.js.map +1 -0
  127. package/dist/core/guards/guard.interface.d.ts +18 -0
  128. package/dist/core/guards/guard.interface.d.ts.map +1 -0
  129. package/dist/core/guards/guard.interface.js +2 -0
  130. package/dist/core/guards/guard.interface.js.map +1 -0
  131. package/dist/core/guards/jwt.guard.d.ts +18 -0
  132. package/dist/core/guards/jwt.guard.d.ts.map +1 -0
  133. package/dist/core/guards/jwt.guard.js +2 -0
  134. package/dist/core/guards/jwt.guard.js.map +1 -0
  135. package/dist/core/guards/oauth.guard.d.ts +35 -0
  136. package/dist/core/guards/oauth.guard.d.ts.map +1 -0
  137. package/dist/core/guards/oauth.guard.js +2 -0
  138. package/dist/core/guards/oauth.guard.js.map +1 -0
  139. package/dist/core/guards/use-guards.decorator.d.ts +25 -0
  140. package/dist/core/guards/use-guards.decorator.d.ts.map +1 -0
  141. package/dist/core/guards/use-guards.decorator.js +32 -0
  142. package/dist/core/guards/use-guards.decorator.js.map +1 -0
  143. package/dist/core/health/health-checks.resource.d.ts +14 -0
  144. package/dist/core/health/health-checks.resource.d.ts.map +1 -0
  145. package/dist/core/health/health-checks.resource.js +29 -0
  146. package/dist/core/health/health-checks.resource.js.map +1 -0
  147. package/dist/core/index.d.ts +57 -0
  148. package/dist/core/index.d.ts.map +1 -0
  149. package/dist/core/index.js +59 -0
  150. package/dist/core/index.js.map +1 -0
  151. package/dist/core/interceptors/interceptor.decorator.d.ts +37 -0
  152. package/dist/core/interceptors/interceptor.decorator.d.ts.map +1 -0
  153. package/dist/core/interceptors/interceptor.decorator.js +51 -0
  154. package/dist/core/interceptors/interceptor.decorator.js.map +1 -0
  155. package/dist/core/interceptors/interceptor.interface.d.ts +31 -0
  156. package/dist/core/interceptors/interceptor.interface.d.ts.map +1 -0
  157. package/dist/core/interceptors/interceptor.interface.js +2 -0
  158. package/dist/core/interceptors/interceptor.interface.js.map +1 -0
  159. package/dist/core/jwt-module.d.ts +51 -0
  160. package/dist/core/jwt-module.d.ts.map +1 -0
  161. package/dist/core/jwt-module.js +52 -0
  162. package/dist/core/jwt-module.js.map +1 -0
  163. package/dist/core/logger.d.ts +18 -0
  164. package/dist/core/logger.d.ts.map +1 -0
  165. package/dist/core/logger.js +53 -0
  166. package/dist/core/logger.js.map +1 -0
  167. package/dist/core/middleware/middleware.decorator.d.ts +39 -0
  168. package/dist/core/middleware/middleware.decorator.d.ts.map +1 -0
  169. package/dist/core/middleware/middleware.decorator.js +53 -0
  170. package/dist/core/middleware/middleware.decorator.js.map +1 -0
  171. package/dist/core/middleware/middleware.interface.d.ts +29 -0
  172. package/dist/core/middleware/middleware.interface.d.ts.map +1 -0
  173. package/dist/core/middleware/middleware.interface.js +2 -0
  174. package/dist/core/middleware/middleware.interface.js.map +1 -0
  175. package/dist/core/module.d.ts +93 -0
  176. package/dist/core/module.d.ts.map +1 -0
  177. package/dist/core/module.js +87 -0
  178. package/dist/core/module.js.map +1 -0
  179. package/dist/core/oauth-module.d.ts +123 -0
  180. package/dist/core/oauth-module.d.ts.map +1 -0
  181. package/dist/core/oauth-module.js +324 -0
  182. package/dist/core/oauth-module.js.map +1 -0
  183. package/dist/core/pipes/pipe.decorator.d.ts +64 -0
  184. package/dist/core/pipes/pipe.decorator.d.ts.map +1 -0
  185. package/dist/core/pipes/pipe.decorator.js +85 -0
  186. package/dist/core/pipes/pipe.decorator.js.map +1 -0
  187. package/dist/core/pipes/pipe.interface.d.ts +41 -0
  188. package/dist/core/pipes/pipe.interface.d.ts.map +1 -0
  189. package/dist/core/pipes/pipe.interface.js +2 -0
  190. package/dist/core/pipes/pipe.interface.js.map +1 -0
  191. package/dist/core/prompt.d.ts +46 -0
  192. package/dist/core/prompt.d.ts.map +1 -0
  193. package/dist/core/prompt.js +76 -0
  194. package/dist/core/prompt.js.map +1 -0
  195. package/dist/core/resource.d.ts +47 -0
  196. package/dist/core/resource.d.ts.map +1 -0
  197. package/dist/core/resource.js +90 -0
  198. package/dist/core/resource.js.map +1 -0
  199. package/dist/core/server.d.ts +129 -0
  200. package/dist/core/server.d.ts.map +1 -0
  201. package/dist/core/server.js +617 -0
  202. package/dist/core/server.js.map +1 -0
  203. package/dist/core/tool.d.ts +108 -0
  204. package/dist/core/tool.d.ts.map +1 -0
  205. package/dist/core/tool.js +241 -0
  206. package/dist/core/tool.js.map +1 -0
  207. package/dist/core/transports/discovery-http-server.d.ts +19 -0
  208. package/dist/core/transports/discovery-http-server.d.ts.map +1 -0
  209. package/dist/core/transports/discovery-http-server.js +54 -0
  210. package/dist/core/transports/discovery-http-server.js.map +1 -0
  211. package/dist/core/transports/http-server.d.ts +108 -0
  212. package/dist/core/transports/http-server.d.ts.map +1 -0
  213. package/dist/core/transports/http-server.js +293 -0
  214. package/dist/core/transports/http-server.js.map +1 -0
  215. package/dist/core/transports/streamable-http.d.ts +177 -0
  216. package/dist/core/transports/streamable-http.d.ts.map +1 -0
  217. package/dist/core/transports/streamable-http.js +1287 -0
  218. package/dist/core/transports/streamable-http.js.map +1 -0
  219. package/dist/core/types.d.ts +195 -0
  220. package/dist/core/types.d.ts.map +1 -0
  221. package/dist/core/types.js +2 -0
  222. package/dist/core/types.js.map +1 -0
  223. package/dist/core/widgets/widget-examples.resource.d.ts +17 -0
  224. package/dist/core/widgets/widget-examples.resource.d.ts.map +1 -0
  225. package/dist/core/widgets/widget-examples.resource.js +28 -0
  226. package/dist/core/widgets/widget-examples.resource.js.map +1 -0
  227. package/dist/core/widgets/widget-registry.d.ts +56 -0
  228. package/dist/core/widgets/widget-registry.d.ts.map +1 -0
  229. package/dist/core/widgets/widget-registry.js +75 -0
  230. package/dist/core/widgets/widget-registry.js.map +1 -0
  231. package/dist/testing/index.d.ts +103 -0
  232. package/dist/testing/index.d.ts.map +1 -0
  233. package/dist/testing/index.js +161 -0
  234. package/dist/testing/index.js.map +1 -0
  235. package/dist/ui-next/index.d.ts +31 -0
  236. package/dist/ui-next/index.d.ts.map +1 -0
  237. package/dist/ui-next/index.js +687 -0
  238. package/dist/ui-next/index.js.map +1 -0
  239. package/package.json +89 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectable.decorator.js","sourceRoot":"","sources":["../../../src/core/di/injectable.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAkB,MAAM,gBAAgB,CAAC;AAG7D,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAC/C,MAAM,UAAU,GAAG,mBAAmB,CAAC;AACvC,MAAM,QAAQ,GAAG,iBAAiB,CAAC;AAwBnC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,UAAU,CAAC,OAA2B;IACpD,OAAO,CAAC,MAAc,EAAE,EAAE;QACxB,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAErD,0DAA0D;QAC1D,IAAI,OAAO,EAAE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzD,CAAC;QAED,gCAAgC;QAChC,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAA0B,CAAC,EAAE,CAAC;YAC/C,SAAS,CAAC,QAAQ,CAAC,MAA0B,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,KAAqB;IAC1C,OAAO,CAAC,MAAc,EAAE,WAAwC,EAAE,cAAsB,EAAE,EAAE;QAC1F,MAAM,cAAc,GAAqB,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QACvF,cAAc,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;QACvC,OAAO,CAAC,cAAc,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAwB;IACnD,OAAO,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAwB;IACtD,OAAO,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AACvD,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Base error class for MCP server errors
3
+ */
4
+ export declare class McpError extends Error {
5
+ code: string;
6
+ statusCode: number;
7
+ details?: unknown | undefined;
8
+ constructor(message: string, code: string, statusCode?: number, details?: unknown | undefined);
9
+ }
10
+ /**
11
+ * Validation error
12
+ */
13
+ export declare class ValidationError extends McpError {
14
+ constructor(message: string, details?: unknown);
15
+ }
16
+ /**
17
+ * Tool not found error
18
+ */
19
+ export declare class ToolNotFoundError extends McpError {
20
+ constructor(toolName: string);
21
+ }
22
+ /**
23
+ * Resource not found error
24
+ */
25
+ export declare class ResourceNotFoundError extends McpError {
26
+ constructor(uri: string);
27
+ }
28
+ /**
29
+ * Prompt not found error
30
+ */
31
+ export declare class PromptNotFoundError extends McpError {
32
+ constructor(promptName: string);
33
+ }
34
+ /**
35
+ * Rate limit error
36
+ */
37
+ export declare class RateLimitError extends McpError {
38
+ constructor(message?: string);
39
+ }
40
+ /**
41
+ * Tool execution error
42
+ */
43
+ export declare class ToolExecutionError extends McpError {
44
+ constructor(toolName: string, originalError: Error);
45
+ }
46
+ /**
47
+ * Format error for response
48
+ */
49
+ export declare function formatError(error: Error): {
50
+ code: string;
51
+ message: string;
52
+ details?: unknown;
53
+ };
54
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IAGxB,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,MAAM;IAClB,OAAO,CAAC,EAAE,OAAO;gBAHxB,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,MAAY,EACxB,OAAO,CAAC,EAAE,OAAO,YAAA;CAM3B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAI/C;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,QAAQ,EAAE,MAAM;CAI7B;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;gBACrC,GAAG,EAAE,MAAM;CAIxB;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,UAAU,EAAE,MAAM;CAI/B;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,OAAO,GAAE,MAA8B;CAIpD;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK;CASnD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAaA"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Base error class for MCP server errors
3
+ */
4
+ export class McpError extends Error {
5
+ code;
6
+ statusCode;
7
+ details;
8
+ constructor(message, code, statusCode = 500, details) {
9
+ super(message);
10
+ this.code = code;
11
+ this.statusCode = statusCode;
12
+ this.details = details;
13
+ this.name = 'McpError';
14
+ Error.captureStackTrace(this, this.constructor);
15
+ }
16
+ }
17
+ /**
18
+ * Validation error
19
+ */
20
+ export class ValidationError extends McpError {
21
+ constructor(message, details) {
22
+ super(message, 'VALIDATION_ERROR', 400, details);
23
+ this.name = 'ValidationError';
24
+ }
25
+ }
26
+ /**
27
+ * Tool not found error
28
+ */
29
+ export class ToolNotFoundError extends McpError {
30
+ constructor(toolName) {
31
+ super(`Tool '${toolName}' not found`, 'TOOL_NOT_FOUND', 404);
32
+ this.name = 'ToolNotFoundError';
33
+ }
34
+ }
35
+ /**
36
+ * Resource not found error
37
+ */
38
+ export class ResourceNotFoundError extends McpError {
39
+ constructor(uri) {
40
+ super(`Resource '${uri}' not found`, 'RESOURCE_NOT_FOUND', 404);
41
+ this.name = 'ResourceNotFoundError';
42
+ }
43
+ }
44
+ /**
45
+ * Prompt not found error
46
+ */
47
+ export class PromptNotFoundError extends McpError {
48
+ constructor(promptName) {
49
+ super(`Prompt '${promptName}' not found`, 'PROMPT_NOT_FOUND', 404);
50
+ this.name = 'PromptNotFoundError';
51
+ }
52
+ }
53
+ /**
54
+ * Rate limit error
55
+ */
56
+ export class RateLimitError extends McpError {
57
+ constructor(message = 'Rate limit exceeded') {
58
+ super(message, 'RATE_LIMIT_EXCEEDED', 429);
59
+ this.name = 'RateLimitError';
60
+ }
61
+ }
62
+ /**
63
+ * Tool execution error
64
+ */
65
+ export class ToolExecutionError extends McpError {
66
+ constructor(toolName, originalError) {
67
+ super(`Error executing tool '${toolName}': ${originalError.message}`, 'TOOL_EXECUTION_ERROR', 500, { originalError: originalError.message, stack: originalError.stack });
68
+ this.name = 'ToolExecutionError';
69
+ }
70
+ }
71
+ /**
72
+ * Format error for response
73
+ */
74
+ export function formatError(error) {
75
+ if (error instanceof McpError) {
76
+ return {
77
+ code: error.code,
78
+ message: error.message,
79
+ details: error.details,
80
+ };
81
+ }
82
+ return {
83
+ code: 'INTERNAL_ERROR',
84
+ message: error.message,
85
+ };
86
+ }
87
+ //# sourceMappingURL=errors.js.map
@@ -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,OAAiB;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAQ;QACZ,eAAU,GAAV,UAAU,CAAc;QACxB,YAAO,GAAP,OAAO,CAAU;QAGxB,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,OAAiB;QAC5C,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: unknown[]) => 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: unknown[]): Promise<void>;
32
+ /**
33
+ * Emit an event synchronously
34
+ */
35
+ emitSync(event: string, ...args: unknown[]): 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,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjE;;;;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,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5D;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAOjD;;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: Record<string, unknown>, 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: unknown) {
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: object): EventHandlerMetadata[];
39
+ /**
40
+ * Register all event handlers from a class instance
41
+ */
42
+ export declare function registerEventHandlers(instance: object & Record<string, unknown>): void;
43
+ /**
44
+ * Emit an event from execution context
45
+ */
46
+ export declare function emitEvent(event: string, ...args: unknown[]): 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,CAUtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAEvE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAWtF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CASjE"}
@@ -0,0 +1,72 @@
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: Record<string, unknown>, 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: unknown) {
24
+ * await this.sendConfirmationEmail(order);
25
+ * }
26
+ * }
27
+ * ```
28
+ */
29
+ export function OnEvent(event) {
30
+ return (target, propertyKey, descriptor) => {
31
+ const targetWithConstructor = target;
32
+ const existingHandlers = Reflect.getMetadata(EVENT_HANDLER_KEY, targetWithConstructor.constructor) || [];
33
+ existingHandlers.push({
34
+ event,
35
+ methodName: propertyKey,
36
+ });
37
+ Reflect.defineMetadata(EVENT_HANDLER_KEY, existingHandlers, targetWithConstructor.constructor);
38
+ };
39
+ }
40
+ /**
41
+ * Get event handlers from a class
42
+ */
43
+ export function getEventHandlers(target) {
44
+ return Reflect.getMetadata(EVENT_HANDLER_KEY, target) || [];
45
+ }
46
+ /**
47
+ * Register all event handlers from a class instance
48
+ */
49
+ export function registerEventHandlers(instance) {
50
+ const emitter = EventEmitter.getInstance();
51
+ const handlers = getEventHandlers(instance.constructor);
52
+ for (const { event, methodName } of handlers) {
53
+ const method = instance[String(methodName)];
54
+ if (typeof method === 'function') {
55
+ const handler = method.bind(instance);
56
+ emitter.on(event, handler);
57
+ }
58
+ }
59
+ }
60
+ /**
61
+ * Emit an event from execution context
62
+ */
63
+ export function emitEvent(event, ...args) {
64
+ const emitter = EventEmitter.getInstance();
65
+ // Use sync emit to avoid blocking
66
+ emitter.emitSync(event, ...args);
67
+ // Also emit async in background
68
+ emitter.emit(event, ...args).catch(error => {
69
+ console.error(`Error in event handler for ${event}:`, error);
70
+ });
71
+ }
72
+ //# 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,MAAc,EAAE,WAA4B,EAAE,UAA8B,EAAE,EAAE;QACtF,MAAM,qBAAqB,GAAG,MAAiC,CAAC;QAChE,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACzG,gBAAgB,CAAC,IAAI,CAAC;YACpB,KAAK;YACL,UAAU,EAAE,WAAW;SACxB,CAAC,CAAC;QACH,OAAO,CAAC,cAAc,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACjG,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAA0C;IAC9E,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,gBAAgB,CAAE,QAAoC,CAAC,WAAW,CAAC,CAAC;IAErF,KAAK,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5C,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,GAAG,IAAe;IACzD,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,14 @@
1
+ import { EventEmitter } from 'events';
2
+ import Transport from 'winston-transport';
3
+ export declare const logEmitter: EventEmitter<[never]>;
4
+ interface LogInfo {
5
+ level: string;
6
+ message: string;
7
+ [key: string]: unknown;
8
+ }
9
+ export declare class EventEmitterTransport extends Transport {
10
+ constructor(opts?: Transport.TransportStreamOptions);
11
+ log(info: LogInfo, callback: () => void): void;
12
+ }
13
+ export {};
14
+ //# sourceMappingURL=log-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-emitter.d.ts","sourceRoot":"","sources":["../../../src/core/events/log-emitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAG1C,eAAO,MAAM,UAAU,uBAAqB,CAAC;AAE7C,UAAU,OAAO;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAGD,qBAAa,qBAAsB,SAAQ,SAAS;gBACtC,IAAI,CAAC,EAAE,SAAS,CAAC,sBAAsB;IAInD,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI;CAUxC"}
@@ -0,0 +1,20 @@
1
+ import { EventEmitter } from 'events';
2
+ import Transport from 'winston-transport';
3
+ // Create a new event emitter
4
+ export const logEmitter = new EventEmitter();
5
+ // Define a custom winston transport
6
+ export class EventEmitterTransport extends Transport {
7
+ constructor(opts) {
8
+ super(opts);
9
+ }
10
+ log(info, callback) {
11
+ setImmediate(() => {
12
+ logEmitter.emit('log', info);
13
+ // Also write to stderr for the dev wrapper to capture
14
+ process.stderr.write(`NITRO_LOG::${JSON.stringify(info)}\n`);
15
+ });
16
+ // Perform the callback
17
+ callback();
18
+ }
19
+ }
20
+ //# sourceMappingURL=log-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-emitter.js","sourceRoot":"","sources":["../../../src/core/events/log-emitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,6BAA6B;AAC7B,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,YAAY,EAAE,CAAC;AAQ7C,oCAAoC;AACpC,MAAM,OAAO,qBAAsB,SAAQ,SAAS;IAClD,YAAY,IAAuC;QACjD,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAED,GAAG,CAAC,IAAa,EAAE,QAAoB;QACrC,YAAY,CAAC,GAAG,EAAE;YAChB,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7B,sDAAsD;YACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,QAAQ,EAAE,CAAC;IACb,CAAC;CACF"}
@@ -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: unknown, context: ExecutionContext) {
11
+ * context.logger.error('Exception caught:', exception);
12
+ * return {
13
+ * error: exception instanceof Error ? exception.message : String(exception),
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: Record<string, unknown>) { }
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: object, propertyKey: string | symbol): ExceptionFilterConstructor[];
36
+ /**
37
+ * Check if a class is marked as an exception filter
38
+ */
39
+ export declare function isExceptionFilter(target: object): 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,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,0BAA0B,EAAE,CAErH;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD"}
@@ -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: unknown, context: ExecutionContext) {
12
+ * context.logger.error('Exception caught:', exception);
13
+ * return {
14
+ * error: exception instanceof Error ? exception.message : String(exception),
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: Record<string, unknown>) { }
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,MAAc,EAAE,EAAE;QACxB,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,MAAc,EAAE,WAA4B,EAAE,UAA8B,EAAE,EAAE;QACtF,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,MAAc,EAAE,WAA4B;IACrF,OAAO,OAAO,CAAC,WAAW,CAAC,oBAAoB,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,OAAO,CAAC,WAAW,CAAC,uBAAuB,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;AACvE,CAAC"}
@@ -0,0 +1,39 @@
1
+ import 'reflect-metadata';
2
+ import { ExecutionContext } from '../types.js';
3
+ /**
4
+ * Exception with optional status code
5
+ */
6
+ export interface ExceptionWithStatus extends Error {
7
+ status?: number;
8
+ statusCode?: number;
9
+ code?: string;
10
+ }
11
+ /**
12
+ * Exception Filter Interface
13
+ *
14
+ * Exception filters handle errors thrown during tool execution.
15
+ * They can transform errors into user-friendly responses.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * @ExceptionFilter()
20
+ * export class HttpExceptionFilter implements ExceptionFilterInterface {
21
+ * catch(exception: unknown, context: ExecutionContext) {
22
+ * const err = exception as ExceptionWithStatus;
23
+ * return {
24
+ * statusCode: err.status || 500,
25
+ * message: err.message,
26
+ * timestamp: new Date().toISOString(),
27
+ * };
28
+ * }
29
+ * }
30
+ * ```
31
+ */
32
+ export interface ExceptionFilterInterface {
33
+ catch(exception: unknown, context: ExecutionContext): unknown | Promise<unknown>;
34
+ }
35
+ /**
36
+ * Exception filter constructor type
37
+ */
38
+ export type ExceptionFilterConstructor = new (...args: unknown[]) => ExceptionFilterInterface;
39
+ //# 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;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,KAAK;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAClF;AAED;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import 'reflect-metadata';
2
+ //# sourceMappingURL=exception-filter.interface.js.map
@@ -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]: unknown;
21
+ }
22
+ //# sourceMappingURL=apikey.guard.d.ts.map