@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":"jwt-module.js","sourceRoot":"","sources":["../../src/core/jwt-module.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAsB1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,SAAS;IACZ,MAAM,CAAC,MAAM,GAAoB;QACvC,YAAY,EAAE,YAAY;QAC1B,SAAS,EAAE,KAAK;KACjB,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAuB;QACpC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS;QACd,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5B,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { Logger } from './types.js';
2
+ /**
3
+ * Create a logger instance with custom configuration
4
+ *
5
+ * IMPORTANT: For MCP servers, console logging is DISABLED by default
6
+ * as it breaks the JSON-RPC protocol over stdio. All logs go to files.
7
+ */
8
+ export declare function createLogger(options: {
9
+ level?: string;
10
+ file?: string;
11
+ serviceName?: string;
12
+ enableConsole?: boolean;
13
+ }): Logger;
14
+ /**
15
+ * Default logger instance
16
+ */
17
+ export declare const defaultLogger: Logger;
18
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAW,MAAM,YAAY,CAAC;AAG7C;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,MAAM,CA6DT;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,QAAkC,CAAC"}
@@ -0,0 +1,53 @@
1
+ import winston from 'winston';
2
+ import { EventEmitterTransport } from './events/log-emitter.js';
3
+ /**
4
+ * Create a logger instance with custom configuration
5
+ *
6
+ * IMPORTANT: For MCP servers, console logging is DISABLED by default
7
+ * as it breaks the JSON-RPC protocol over stdio. All logs go to files.
8
+ */
9
+ export function createLogger(options) {
10
+ const { level = 'info', file, serviceName = 'nitrostack', enableConsole = false } = options;
11
+ const transports = [new EventEmitterTransport()];
12
+ // CRITICAL: Console logging disabled by default for MCP compatibility
13
+ // MCP uses stdio for JSON-RPC communication, console output breaks it
14
+ if (enableConsole) {
15
+ transports.push(new winston.transports.Console({
16
+ format: winston.format.combine(winston.format.colorize(), winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), winston.format.printf(({ timestamp, level, message, ...meta }) => {
17
+ const metaStr = Object.keys(meta).length > 0 ? `\n${JSON.stringify(meta, null, 2)}` : '';
18
+ return `${timestamp} [${serviceName}] ${level}: ${message}${metaStr}`;
19
+ })),
20
+ }));
21
+ }
22
+ // File logging - always recommended for MCP servers
23
+ if (file) {
24
+ transports.push(new winston.transports.File({
25
+ filename: file,
26
+ format: winston.format.combine(winston.format.timestamp(), winston.format.json()),
27
+ }));
28
+ }
29
+ // If no transports configured, use a null transport to avoid crashes
30
+ if (transports.length === 0) {
31
+ // Silent logger - logs nowhere (better than crashing)
32
+ transports.push(new winston.transports.File({
33
+ filename: '/dev/null', // Discard logs
34
+ silent: true,
35
+ }));
36
+ }
37
+ const winstonLogger = winston.createLogger({
38
+ level,
39
+ format: winston.format.combine(winston.format.timestamp(), winston.format.json()),
40
+ transports,
41
+ });
42
+ return {
43
+ debug: (message, meta) => winstonLogger.debug(message, meta),
44
+ info: (message, meta) => winstonLogger.info(message, meta),
45
+ warn: (message, meta) => winstonLogger.warn(message, meta),
46
+ error: (message, meta) => winstonLogger.error(message, meta),
47
+ };
48
+ }
49
+ /**
50
+ * Default logger instance
51
+ */
52
+ export const defaultLogger = createLogger({ level: 'info' });
53
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import 'reflect-metadata';
2
+ import { MiddlewareConstructor } from './middleware.interface.js';
3
+ /**
4
+ * Marks a class as a middleware
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * @Middleware()
9
+ * export class LoggingMiddleware implements MiddlewareInterface {
10
+ * async use(context: ExecutionContext, next: () => Promise<unknown>) {
11
+ * console.log('Before');
12
+ * const result = await next();
13
+ * console.log('After');
14
+ * return result;
15
+ * }
16
+ * }
17
+ * ```
18
+ */
19
+ export declare function Middleware(): ClassDecorator;
20
+ /**
21
+ * Apply middleware to a tool method
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * @Tool({ name: 'my_tool', ... })
26
+ * @UseMiddleware(LoggingMiddleware, AuthMiddleware)
27
+ * async myTool(input: Record<string, unknown>, context: ExecutionContext) { }
28
+ * ```
29
+ */
30
+ export declare function UseMiddleware(...middlewares: MiddlewareConstructor[]): MethodDecorator;
31
+ /**
32
+ * Get middlewares for a method
33
+ */
34
+ export declare function getMiddlewareMetadata(target: object, propertyKey: string | symbol): MiddlewareConstructor[];
35
+ /**
36
+ * Check if a class is marked as middleware
37
+ */
38
+ export declare function isMiddleware(target: object): boolean;
39
+ //# sourceMappingURL=middleware.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.decorator.d.ts","sourceRoot":"","sources":["../../../src/core/middleware/middleware.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAKlE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,IAAI,cAAc,CAI3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,GAAG,WAAW,EAAE,qBAAqB,EAAE,GAAG,eAAe,CAUtF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,qBAAqB,EAAE,CAE3G;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpD"}
@@ -0,0 +1,53 @@
1
+ import 'reflect-metadata';
2
+ const MIDDLEWARE_KEY = 'nitrostack:middleware';
3
+ const IS_MIDDLEWARE_KEY = 'nitrostack:is_middleware';
4
+ /**
5
+ * Marks a class as a middleware
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * @Middleware()
10
+ * export class LoggingMiddleware implements MiddlewareInterface {
11
+ * async use(context: ExecutionContext, next: () => Promise<unknown>) {
12
+ * console.log('Before');
13
+ * const result = await next();
14
+ * console.log('After');
15
+ * return result;
16
+ * }
17
+ * }
18
+ * ```
19
+ */
20
+ export function Middleware() {
21
+ return (target) => {
22
+ Reflect.defineMetadata(IS_MIDDLEWARE_KEY, true, target);
23
+ };
24
+ }
25
+ /**
26
+ * Apply middleware to a tool method
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * @Tool({ name: 'my_tool', ... })
31
+ * @UseMiddleware(LoggingMiddleware, AuthMiddleware)
32
+ * async myTool(input: Record<string, unknown>, context: ExecutionContext) { }
33
+ * ```
34
+ */
35
+ export function UseMiddleware(...middlewares) {
36
+ return (target, propertyKey, descriptor) => {
37
+ const existingMiddlewares = Reflect.getMetadata(MIDDLEWARE_KEY, target, propertyKey) || [];
38
+ Reflect.defineMetadata(MIDDLEWARE_KEY, [...existingMiddlewares, ...middlewares], target, propertyKey);
39
+ };
40
+ }
41
+ /**
42
+ * Get middlewares for a method
43
+ */
44
+ export function getMiddlewareMetadata(target, propertyKey) {
45
+ return Reflect.getMetadata(MIDDLEWARE_KEY, target, propertyKey) || [];
46
+ }
47
+ /**
48
+ * Check if a class is marked as middleware
49
+ */
50
+ export function isMiddleware(target) {
51
+ return Reflect.getMetadata(IS_MIDDLEWARE_KEY, target) === true;
52
+ }
53
+ //# sourceMappingURL=middleware.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.decorator.js","sourceRoot":"","sources":["../../../src/core/middleware/middleware.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAC/C,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAErD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,MAAc,EAAE,EAAE;QACxB,OAAO,CAAC,cAAc,CAAC,iBAAiB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,GAAG,WAAoC;IACnE,OAAO,CAAC,MAAc,EAAE,WAA4B,EAAE,UAA8B,EAAE,EAAE;QACtF,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;QAC3F,OAAO,CAAC,cAAc,CACpB,cAAc,EACd,CAAC,GAAG,mBAAmB,EAAE,GAAG,WAAW,CAAC,EACxC,MAAM,EACN,WAAW,CACZ,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc,EAAE,WAA4B;IAChF,OAAO,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;AACjE,CAAC"}
@@ -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<unknown>) {
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<unknown>): Promise<unknown>;
24
+ }
25
+ /**
26
+ * Middleware constructor type
27
+ */
28
+ export type MiddlewareConstructor = new (...args: unknown[]) => 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,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChF;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,IAAI,EAAE,OAAO,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,93 @@
1
+ import 'reflect-metadata';
2
+ import type { ClassConstructor } from './types.js';
3
+ /**
4
+ * Module metadata key
5
+ */
6
+ export declare const MODULE_METADATA: unique symbol;
7
+ /**
8
+ * Provider definition for dependency injection
9
+ */
10
+ export interface Provider {
11
+ provide: string | symbol | ClassConstructor;
12
+ useValue?: unknown;
13
+ useClass?: ClassConstructor;
14
+ useFactory?: (...args: unknown[]) => unknown;
15
+ }
16
+ /**
17
+ * Dynamic module definition (for configurable modules)
18
+ */
19
+ export interface DynamicModule {
20
+ module?: ClassConstructor;
21
+ providers?: (ClassConstructor | Provider)[];
22
+ exports?: (ClassConstructor | string | symbol)[];
23
+ controllers?: ClassConstructor[];
24
+ imports?: ModuleImport[];
25
+ }
26
+ /**
27
+ * Type for module imports - can be a class or a dynamic module configuration
28
+ */
29
+ export type ModuleImport = ClassConstructor | DynamicModule;
30
+ /**
31
+ * Module metadata interface
32
+ */
33
+ export interface ModuleMetadata {
34
+ /** Module name */
35
+ name: string;
36
+ /** Module description */
37
+ description?: string;
38
+ /** Controllers (classes with @Tool, @Resource, @Prompt decorators) */
39
+ controllers?: ClassConstructor[];
40
+ /** Services (dependency injection) */
41
+ providers?: (ClassConstructor | Provider)[];
42
+ /** Other modules to import */
43
+ imports?: ModuleImport[];
44
+ /** Items to export to other modules */
45
+ exports?: (ClassConstructor | string | symbol)[];
46
+ }
47
+ /**
48
+ * Module class (internal)
49
+ */
50
+ declare class ModuleClass {
51
+ metadata: ModuleMetadata;
52
+ constructor(metadata: ModuleMetadata);
53
+ /**
54
+ * Get all controllers from this module
55
+ */
56
+ getControllers(): ClassConstructor[];
57
+ /**
58
+ * Get module name
59
+ */
60
+ getName(): string;
61
+ /**
62
+ * Get module description
63
+ */
64
+ getDescription(): string | undefined;
65
+ }
66
+ /**
67
+ * Module decorator - Defines a module with controllers, providers, imports
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * @Module({
72
+ * name: 'auth',
73
+ * description: 'Authentication module',
74
+ * controllers: [AuthController],
75
+ * })
76
+ * export class AuthModule {}
77
+ * ```
78
+ */
79
+ export declare function ModuleDecorator(metadata: ModuleMetadata): <T extends new (...args: any[]) => object>(constructor: T) => T;
80
+ export { ModuleDecorator as Module };
81
+ /**
82
+ * Create a module instance from a class
83
+ */
84
+ export declare function createModule(moduleClass: ClassConstructor): ModuleClass;
85
+ /**
86
+ * Check if a class is a module
87
+ */
88
+ export declare function isModule(target: ClassConstructor): boolean;
89
+ /**
90
+ * Get module metadata from a class
91
+ */
92
+ export declare function getModuleMetadata(target: ClassConstructor): ModuleMetadata | undefined;
93
+ //# 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;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;GAEG;AACH,eAAO,MAAM,eAAe,eAA4B,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,CAAC,gBAAgB,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,gBAAgB,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACjD,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,aAAa,CAAC;AAE5D;;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,gBAAgB,EAAE,CAAC;IAEjC,sCAAsC;IACtC,SAAS,CAAC,EAAE,CAAC,gBAAgB,GAAG,QAAQ,CAAC,EAAE,CAAC;IAE5C,8BAA8B;IAC9B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IAEzB,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,gBAAgB,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CAClD;AAED;;GAEG;AACH,cAAM,WAAW;IACI,QAAQ,EAAE,cAAc;gBAAxB,QAAQ,EAAE,cAAc;IAE3C;;OAEG;IACH,cAAc,IAAI,gBAAgB,EAAE;IAIpC;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,SAAS;CAGrC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,IAErC,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,EAAE,aAAa,CAAC,KAAG,CAAC,CAmB9E;AAGD,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,CAAC;AAErC;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,gBAAgB,GAAG,WAAW,CAMvE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAE1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,GAAG,SAAS,CAEtF"}
@@ -0,0 +1,87 @@
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
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
+ return function (constructor) {
49
+ // Store metadata on the class
50
+ Reflect.defineMetadata(MODULE_METADATA, metadata, constructor);
51
+ // Return the constructor with static method
52
+ const enhanced = constructor;
53
+ // Add static method
54
+ Object.defineProperty(enhanced, 'getMetadata', {
55
+ value: () => Reflect.getMetadata(MODULE_METADATA, constructor) || metadata,
56
+ writable: false,
57
+ enumerable: false,
58
+ configurable: false,
59
+ });
60
+ return enhanced;
61
+ };
62
+ }
63
+ // Export as "Module" for decorator usage
64
+ export { ModuleDecorator as Module };
65
+ /**
66
+ * Create a module instance from a class
67
+ */
68
+ export function createModule(moduleClass) {
69
+ const metadata = Reflect.getMetadata(MODULE_METADATA, moduleClass);
70
+ if (!metadata) {
71
+ throw new Error(`Class ${moduleClass.name} is not decorated with @Module`);
72
+ }
73
+ return new ModuleClass(metadata);
74
+ }
75
+ /**
76
+ * Check if a class is a module
77
+ */
78
+ export function isModule(target) {
79
+ return Reflect.hasMetadata(MODULE_METADATA, target);
80
+ }
81
+ /**
82
+ * Get module metadata from a class
83
+ */
84
+ export function getModuleMetadata(target) {
85
+ return Reflect.getMetadata(MODULE_METADATA, target);
86
+ }
87
+ //# 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;AAG1B;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAmDzD;;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,8DAA8D;IAC9D,OAAO,UAAoD,WAAc;QACvE,8BAA8B;QAC9B,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE/D,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,WAEhB,CAAC;QAEF,oBAAoB;QACpB,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE;YAC7C,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,IAAI,QAAQ;YAC1E,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC;AAED,yCAAyC;AACzC,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,CAAC;AAErC;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAA6B;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,WAAW,CAA+B,CAAC;IACjG,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,MAAwB;IAC/C,OAAO,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAwB;IACxD,OAAO,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAA+B,CAAC;AACpF,CAAC"}
@@ -0,0 +1,123 @@
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: unknown) => Promise<boolean> | boolean;
68
+ }
69
+ import { NitroStackServer } from './server.js';
70
+ import { Logger } from './types.js';
71
+ export declare class OAuthModule {
72
+ private config;
73
+ private server;
74
+ private logger;
75
+ private static config;
76
+ private discoveryServer;
77
+ private wellKnownHandler;
78
+ private resourceMetadataHandler;
79
+ constructor(config: OAuthModuleConfig, server: NitroStackServer, logger: Logger);
80
+ onModuleInit(): void;
81
+ start(): Promise<void>;
82
+ stop(): Promise<void>;
83
+ private registerDiscoveryHandlers;
84
+ /**
85
+ * Configure OAuth module for the application
86
+ */
87
+ static forRoot(config: OAuthModuleConfig): {
88
+ module: typeof OAuthModule;
89
+ providers: {
90
+ provide: string;
91
+ useValue: OAuthModuleConfig;
92
+ }[];
93
+ };
94
+ /**
95
+ * Get current OAuth configuration
96
+ */
97
+ static getConfig(): OAuthModuleConfig | null;
98
+ /**
99
+ * Validate an access token
100
+ *
101
+ * Performs:
102
+ * 1. Token introspection (if endpoint configured)
103
+ * 2. Audience validation (RFC 8807)
104
+ * 3. Issuer validation (if configured)
105
+ * 4. Custom validation (if configured)
106
+ */
107
+ static validateToken(token: string): Promise<{
108
+ valid: boolean;
109
+ payload?: Record<string, unknown>;
110
+ error?: string;
111
+ }>;
112
+ /**
113
+ * Introspect token using RFC 7662
114
+ * @private
115
+ */
116
+ private static introspectToken;
117
+ /**
118
+ * Decode JWT token (without validation)
119
+ * @private
120
+ */
121
+ private static decodeToken;
122
+ }
123
+ //# 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,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACnE;AA2CD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGpC,qBACa,WAAW;IA8BI,OAAO,CAAC,MAAM;IACtC,OAAO,CAAC,MAAM;IACI,OAAO,CAAC,MAAM;IA/BlC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAkC;IACvD,OAAO,CAAC,eAAe,CAAoC;IAE3D,OAAO,CAAC,gBAAgB,CAOtB;IAEF,OAAO,CAAC,uBAAuB,CAc7B;gBAGgC,MAAM,EAAE,iBAAiB,EACjD,MAAM,EAAE,gBAAgB,EACN,MAAM,EAAE,MAAM;IAKnC,YAAY;IAKN,KAAK;IAmCL,IAAI;IAOjB,OAAO,CAAC,yBAAyB;IAKjC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG;QAAE,MAAM,EAAE,OAAO,WAAW,CAAC;QAAC,SAAS,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,iBAAiB,CAAA;SAAE,EAAE,CAAA;KAAE;IAyBxI;;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,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IA2EF;;;OAGG;mBACkB,eAAe;IAyDpC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;CAyB3B"}