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,129 @@
1
+ import { Tool } from './tool.js';
2
+ import { createResource } from './resource.js';
3
+ import { createPrompt } from './prompt.js';
4
+ import { createComponentFromNextRoute } from '../ui-next/index.js';
5
+ import { extractTools, extractResources, extractPrompts, getWidgetMetadata } from './decorators.js';
6
+ import { getGuardsMetadata } from './guards/use-guards.decorator.js';
7
+ import { getMiddlewareMetadata } from './middleware/middleware.decorator.js';
8
+ import { getInterceptorMetadata } from './interceptors/interceptor.decorator.js';
9
+ import { getPipeMetadata } from './pipes/pipe.decorator.js';
10
+ import { getExceptionFilterMetadata } from './filters/exception-filter.decorator.js';
11
+ import { DIContainer } from './di/container.js';
12
+ import { isInjectable } from './di/injectable.decorator.js';
13
+ /**
14
+ * Build a Tool instance from a decorated method
15
+ */
16
+ export function buildTool(controllerInstance, methodName, options, widgetRoute) {
17
+ const prototype = Object.getPrototypeOf(controllerInstance);
18
+ // Get the original method
19
+ const originalMethod = controllerInstance[methodName].bind(controllerInstance);
20
+ // Extract all decorator metadata
21
+ const guards = getGuardsMetadata(prototype, methodName);
22
+ const middlewares = getMiddlewareMetadata(prototype, methodName);
23
+ const interceptors = getInterceptorMetadata(prototype, methodName);
24
+ const pipes = getPipeMetadata(prototype, methodName);
25
+ const filters = getExceptionFilterMetadata(prototype, methodName);
26
+ // Create tool with all metadata
27
+ const tool = new Tool({
28
+ name: options.name,
29
+ description: options.description,
30
+ inputSchema: options.inputSchema,
31
+ handler: originalMethod,
32
+ guards,
33
+ middlewares,
34
+ interceptors,
35
+ pipes,
36
+ filters,
37
+ examples: options.examples,
38
+ widget: widgetRoute ? { route: widgetRoute } : undefined,
39
+ outputTemplate: widgetRoute,
40
+ });
41
+ // Create and attach component if widget route is specified
42
+ if (widgetRoute) {
43
+ const component = createComponentFromNextRoute(widgetRoute);
44
+ tool.setComponent(component);
45
+ }
46
+ return tool;
47
+ }
48
+ /**
49
+ * Build all tools from a controller
50
+ */
51
+ export function buildTools(controllerInstance) {
52
+ const toolMetadata = extractTools(Object.getPrototypeOf(controllerInstance).constructor);
53
+ return toolMetadata.map(({ methodName, options }) => {
54
+ // Check if this method has a widget
55
+ const widgetRoute = getWidgetMetadata(Object.getPrototypeOf(controllerInstance), methodName);
56
+ return buildTool(controllerInstance, methodName, options, widgetRoute);
57
+ });
58
+ }
59
+ /**
60
+ * Build a Resource instance from a decorated method
61
+ */
62
+ export function buildResource(controllerInstance, methodName, options) {
63
+ const originalMethod = controllerInstance[methodName].bind(controllerInstance);
64
+ const resourceDefinition = {
65
+ uri: options.uri,
66
+ name: options.name,
67
+ description: options.description,
68
+ mimeType: options.mimeType,
69
+ handler: async (context) => {
70
+ return await originalMethod(context);
71
+ },
72
+ metadata: options.metadata,
73
+ };
74
+ return createResource(resourceDefinition);
75
+ }
76
+ /**
77
+ * Build all resources from a controller
78
+ */
79
+ export function buildResources(controllerInstance) {
80
+ const resourceMetadata = extractResources(Object.getPrototypeOf(controllerInstance).constructor);
81
+ return resourceMetadata.map(({ methodName, options }) => {
82
+ return buildResource(controllerInstance, methodName, options);
83
+ });
84
+ }
85
+ /**
86
+ * Build a Prompt instance from a decorated method
87
+ */
88
+ export function buildPrompt(controllerInstance, methodName, options) {
89
+ const originalMethod = controllerInstance[methodName].bind(controllerInstance);
90
+ const promptDefinition = {
91
+ name: options.name,
92
+ description: options.description,
93
+ arguments: options.arguments,
94
+ handler: async (args, context) => {
95
+ return await originalMethod(args, context);
96
+ },
97
+ };
98
+ return createPrompt(promptDefinition);
99
+ }
100
+ /**
101
+ * Build all prompts from a controller
102
+ */
103
+ export function buildPrompts(controllerInstance) {
104
+ const promptMetadata = extractPrompts(Object.getPrototypeOf(controllerInstance).constructor);
105
+ return promptMetadata.map(({ methodName, options }) => {
106
+ return buildPrompt(controllerInstance, methodName, options);
107
+ });
108
+ }
109
+ /**
110
+ * Build all tools, resources, and prompts from a controller
111
+ * Supports dependency injection
112
+ */
113
+ export function buildController(controller) {
114
+ const container = DIContainer.getInstance();
115
+ // Create controller instance (with DI if available)
116
+ let instance;
117
+ if (isInjectable(controller) && container.has(controller)) {
118
+ instance = container.resolve(controller);
119
+ }
120
+ else {
121
+ instance = new controller();
122
+ }
123
+ return {
124
+ tools: buildTools(instance),
125
+ resources: buildResources(instance),
126
+ prompts: buildPrompts(instance),
127
+ };
128
+ }
129
+ //# sourceMappingURL=builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builders.js","sourceRoot":"","sources":["../../src/core/builders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ import { ExecutionContext } from './types.js';
2
+ /**
3
+ * Component metadata for UI rendering
4
+ */
5
+ export interface ComponentMetadata {
6
+ /** Unique identifier for the component */
7
+ id: string;
8
+ /** Human-readable name */
9
+ name: string;
10
+ /** Description of what the component displays */
11
+ description?: string;
12
+ /** HTML content or path to HTML file */
13
+ html: string;
14
+ /** CSS content or path to CSS file */
15
+ css?: string;
16
+ /** JavaScript content or path to JS file */
17
+ js?: string;
18
+ /** Whether component can initiate tool calls */
19
+ canInvokeTools?: boolean;
20
+ /** Content Security Policy domains */
21
+ csp?: {
22
+ connectDomains?: string[];
23
+ resourceDomains?: string[];
24
+ };
25
+ /** Custom subdomain for component rendering */
26
+ subdomain?: string;
27
+ /** Whether to show border around component */
28
+ prefersBorder?: boolean;
29
+ /** Provider-specific metadata */
30
+ providerMetadata?: Record<string, any>;
31
+ /** Internal metadata (not exposed to MCP) */
32
+ _meta?: Record<string, any>;
33
+ }
34
+ /**
35
+ * Component definition
36
+ */
37
+ export interface ComponentDefinition extends ComponentMetadata {
38
+ /** Data transformation function */
39
+ transformer?: (data: any, context: ExecutionContext) => any;
40
+ /** Component initialization logic */
41
+ onInit?: (context: ExecutionContext) => void | Promise<void>;
42
+ }
43
+ /**
44
+ * Component class for defining UI components
45
+ */
46
+ export declare class Component {
47
+ private definition;
48
+ private compiled;
49
+ private bundle;
50
+ constructor(definition: ComponentDefinition);
51
+ private validateDefinition;
52
+ /**
53
+ * Get component ID
54
+ */
55
+ get id(): string;
56
+ /**
57
+ * Get component name
58
+ */
59
+ get name(): string;
60
+ /**
61
+ * Get component description
62
+ */
63
+ get description(): string | undefined;
64
+ /**
65
+ * Compile component bundle
66
+ */
67
+ compile(): Promise<void>;
68
+ /**
69
+ * Get compiled bundle as HTML document
70
+ */
71
+ getBundle(): string;
72
+ /**
73
+ * Get component URI for resource registration
74
+ */
75
+ getResourceUri(): string;
76
+ /**
77
+ * Check if component is in dev mode
78
+ */
79
+ isDevMode(): boolean;
80
+ /**
81
+ * Get dev URL if in dev mode
82
+ */
83
+ getDevUrl(): string | null;
84
+ /**
85
+ * Transform data for component
86
+ */
87
+ transformData(data: any, context: ExecutionContext): Promise<any>;
88
+ /**
89
+ * Get provider-specific metadata
90
+ */
91
+ getProviderMetadata(provider: 'openai' | 'anthropic' | 'generic'): Record<string, any>;
92
+ /**
93
+ * Get resource metadata for MCP
94
+ */
95
+ getResourceMetadata(): any;
96
+ /**
97
+ * Initialize component
98
+ */
99
+ initialize(context: ExecutionContext): Promise<void>;
100
+ }
101
+ /**
102
+ * Helper function to create a component
103
+ */
104
+ export declare function createComponent(definition: ComponentDefinition): Component;
105
+ //# sourceMappingURL=component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/core/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IAEX,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,4CAA4C;IAC5C,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,gDAAgD;IAChD,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,sCAAsC;IACtC,GAAG,CAAC,EAAE;QACJ,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IAEF,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEvC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,mCAAmC;IACnC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,KAAK,GAAG,CAAC;IAE5D,qCAAqC;IACrC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAIG;gBAEL,UAAU,EAAE,mBAAmB;IAK3C,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,IAAI,EAAE,IAAI,MAAM,CAEf;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9B;;OAEG;IACH,SAAS,IAAI,MAAM;IAoBnB;;OAEG;IACH,cAAc,IAAI,MAAM;IAQxB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC;IAOvE;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAiDtF;;OAEG;IACH,mBAAmB,IAAI,GAAG;IAoB1B;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAK3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,mBAAmB,GAAG,SAAS,CAE1E"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Component class for defining UI components
3
+ */
4
+ export class Component {
5
+ definition;
6
+ compiled = false;
7
+ bundle = { html: '' };
8
+ constructor(definition) {
9
+ this.definition = definition;
10
+ this.validateDefinition();
11
+ }
12
+ validateDefinition() {
13
+ if (!this.definition.id) {
14
+ throw new Error('Component ID is required');
15
+ }
16
+ if (!this.definition.name) {
17
+ throw new Error('Component name is required');
18
+ }
19
+ if (!this.definition.html) {
20
+ throw new Error('Component HTML is required');
21
+ }
22
+ }
23
+ /**
24
+ * Get component ID
25
+ */
26
+ get id() {
27
+ return this.definition.id;
28
+ }
29
+ /**
30
+ * Get component name
31
+ */
32
+ get name() {
33
+ return this.definition.name;
34
+ }
35
+ /**
36
+ * Get component description
37
+ */
38
+ get description() {
39
+ return this.definition.description;
40
+ }
41
+ /**
42
+ * Compile component bundle
43
+ */
44
+ async compile() {
45
+ if (this.compiled)
46
+ return;
47
+ // Simple compilation - in production, use a proper bundler
48
+ this.bundle = {
49
+ html: this.definition.html,
50
+ css: this.definition.css,
51
+ js: this.definition.js,
52
+ };
53
+ this.compiled = true;
54
+ }
55
+ /**
56
+ * Get compiled bundle as HTML document
57
+ */
58
+ getBundle() {
59
+ if (!this.compiled) {
60
+ throw new Error('Component not compiled. Call compile() first.');
61
+ }
62
+ const cssTag = this.bundle.css
63
+ ? `<style>${this.bundle.css}</style>`
64
+ : '';
65
+ const jsTag = this.bundle.js
66
+ ? `<script type="module">${this.bundle.js}</script>`
67
+ : '';
68
+ return `
69
+ ${this.bundle.html}
70
+ ${cssTag}
71
+ ${jsTag}
72
+ `.trim();
73
+ }
74
+ /**
75
+ * Get component URI for resource registration
76
+ */
77
+ getResourceUri() {
78
+ // In dev mode, return the dev URL if available
79
+ if (this.definition._meta?.devMode && this.definition._meta?.devUrl) {
80
+ return this.definition._meta.devUrl;
81
+ }
82
+ return `ui://widget/${this.definition.id}.html`;
83
+ }
84
+ /**
85
+ * Check if component is in dev mode
86
+ */
87
+ isDevMode() {
88
+ return this.definition._meta?.devMode === true;
89
+ }
90
+ /**
91
+ * Get dev URL if in dev mode
92
+ */
93
+ getDevUrl() {
94
+ return this.definition._meta?.devUrl || null;
95
+ }
96
+ /**
97
+ * Transform data for component
98
+ */
99
+ async transformData(data, context) {
100
+ if (this.definition.transformer) {
101
+ return await this.definition.transformer(data, context);
102
+ }
103
+ return data;
104
+ }
105
+ /**
106
+ * Get provider-specific metadata
107
+ */
108
+ getProviderMetadata(provider) {
109
+ const metadata = {};
110
+ switch (provider) {
111
+ case 'openai':
112
+ metadata['openai/outputTemplate'] = this.getResourceUri();
113
+ metadata['openai/widgetAccessible'] = this.definition.canInvokeTools || false;
114
+ if (this.definition.description) {
115
+ metadata['openai/widgetDescription'] = this.definition.description;
116
+ }
117
+ if (this.definition.prefersBorder) {
118
+ metadata['openai/widgetPrefersBorder'] = true;
119
+ }
120
+ if (this.definition.subdomain) {
121
+ metadata['openai/widgetDomain'] = this.definition.subdomain;
122
+ }
123
+ if (this.definition.csp) {
124
+ metadata['openai/widgetCSP'] = {
125
+ connect_domains: this.definition.csp.connectDomains || [],
126
+ resource_domains: this.definition.csp.resourceDomains || [],
127
+ };
128
+ }
129
+ break;
130
+ case 'anthropic':
131
+ // Future: Anthropic-specific metadata
132
+ metadata['anthropic/ui'] = this.getResourceUri();
133
+ break;
134
+ case 'generic':
135
+ default:
136
+ // Generic provider metadata
137
+ metadata['ui/template'] = this.getResourceUri();
138
+ metadata['ui/interactive'] = this.definition.canInvokeTools || false;
139
+ break;
140
+ }
141
+ // Merge with custom provider metadata
142
+ if (this.definition.providerMetadata) {
143
+ Object.assign(metadata, this.definition.providerMetadata);
144
+ }
145
+ return metadata;
146
+ }
147
+ /**
148
+ * Get resource metadata for MCP
149
+ */
150
+ getResourceMetadata() {
151
+ const metadata = {
152
+ mimeType: 'text/html',
153
+ };
154
+ // Add OpenAI-specific metadata
155
+ const openaiMeta = this.getProviderMetadata('openai');
156
+ if (openaiMeta['openai/widgetCSP']) {
157
+ metadata['openai/widgetCSP'] = openaiMeta['openai/widgetCSP'];
158
+ }
159
+ if (openaiMeta['openai/widgetDescription']) {
160
+ metadata['openai/widgetDescription'] = openaiMeta['openai/widgetDescription'];
161
+ }
162
+ if (openaiMeta['openai/widgetPrefersBorder']) {
163
+ metadata['openai/widgetPrefersBorder'] = openaiMeta['openai/widgetPrefersBorder'];
164
+ }
165
+ return metadata;
166
+ }
167
+ /**
168
+ * Initialize component
169
+ */
170
+ async initialize(context) {
171
+ if (this.definition.onInit) {
172
+ await this.definition.onInit(context);
173
+ }
174
+ }
175
+ }
176
+ /**
177
+ * Helper function to create a component
178
+ */
179
+ export function createComponent(definition) {
180
+ return new Component(definition);
181
+ }
182
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/core/component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import 'reflect-metadata';
2
+ /**
3
+ * Configuration Module Options
4
+ */
5
+ export interface ConfigModuleOptions {
6
+ /**
7
+ * Path to .env file (relative to project root)
8
+ */
9
+ envFilePath?: string;
10
+ /**
11
+ * Whether to ignore .env file if it doesn't exist
12
+ */
13
+ ignoreEnvFile?: boolean;
14
+ /**
15
+ * Whether to validate environment variables
16
+ */
17
+ validate?: (config: Record<string, any>) => boolean;
18
+ /**
19
+ * Default values for environment variables
20
+ */
21
+ defaults?: Record<string, string>;
22
+ }
23
+ /**
24
+ * Configuration Service
25
+ * Provides type-safe access to environment variables
26
+ */
27
+ export declare class ConfigService {
28
+ private config;
29
+ constructor(options?: ConfigModuleOptions);
30
+ /**
31
+ * Get a configuration value
32
+ */
33
+ get<T = string>(key: string): T | undefined;
34
+ get<T = string>(key: string, defaultValue: T): T;
35
+ /**
36
+ * Get a required configuration value
37
+ * Throws if not found
38
+ */
39
+ getOrThrow<T = string>(key: string): T;
40
+ /**
41
+ * Get all configuration
42
+ */
43
+ getAll(): Record<string, string>;
44
+ }
45
+ /**
46
+ * Configuration Module
47
+ * NestJS-style configuration management
48
+ */
49
+ export declare class ConfigModule {
50
+ static forRoot(options?: ConfigModuleOptions): {
51
+ providers: any[];
52
+ exports: any[];
53
+ };
54
+ }
55
+ //# sourceMappingURL=config-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-module.d.ts","sourceRoot":"","sources":["../../src/core/config-module.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAI1B;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC;IAEpD;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAyCD;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAyB;gBAE3B,OAAO,GAAE,mBAAwB;IAqB7C;;OAEG;IACH,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAC3C,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC;IAShD;;;OAGG;IACH,UAAU,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC;IAQtC;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGjC;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,mBAAwB,GAAG;QACjD,SAAS,EAAE,GAAG,EAAE,CAAC;QACjB,OAAO,EAAE,GAAG,EAAE,CAAC;KAChB;CAQF"}
@@ -0,0 +1,94 @@
1
+ import 'reflect-metadata';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ /**
5
+ * Parse .env file manually to avoid stdout pollution
6
+ * (dotenv.config() can write to stdout which breaks MCP stdio protocol)
7
+ */
8
+ function parseEnvFile(filePath) {
9
+ const envVars = {};
10
+ if (!fs.existsSync(filePath)) {
11
+ return envVars;
12
+ }
13
+ const content = fs.readFileSync(filePath, 'utf-8');
14
+ content.split('\n').forEach(line => {
15
+ line = line.trim();
16
+ // Skip empty lines and comments
17
+ if (!line || line.startsWith('#')) {
18
+ return;
19
+ }
20
+ // Parse KEY=VALUE
21
+ const [key, ...valueParts] = line.split('=');
22
+ if (key && valueParts.length > 0) {
23
+ let value = valueParts.join('=').trim();
24
+ // Remove quotes if present
25
+ if ((value.startsWith('"') && value.endsWith('"')) ||
26
+ (value.startsWith("'") && value.endsWith("'"))) {
27
+ value = value.slice(1, -1);
28
+ }
29
+ envVars[key.trim()] = value;
30
+ }
31
+ });
32
+ return envVars;
33
+ }
34
+ /**
35
+ * Configuration Service
36
+ * Provides type-safe access to environment variables
37
+ */
38
+ export class ConfigService {
39
+ config;
40
+ constructor(options = {}) {
41
+ this.config = { ...options.defaults };
42
+ // Load environment variables from .env file
43
+ if (!options.ignoreEnvFile) {
44
+ const envPath = options.envFilePath || '.env';
45
+ const fullPath = path.resolve(process.cwd(), envPath);
46
+ const parsed = parseEnvFile(fullPath);
47
+ this.config = { ...this.config, ...parsed };
48
+ }
49
+ // Merge with process.env (already loaded by Studio)
50
+ this.config = { ...this.config, ...process.env };
51
+ // Validate if validator provided
52
+ if (options.validate && !options.validate(this.config)) {
53
+ throw new Error('Environment variable validation failed');
54
+ }
55
+ }
56
+ get(key, defaultValue) {
57
+ const value = this.config[key];
58
+ if (value === undefined) {
59
+ return defaultValue;
60
+ }
61
+ return value;
62
+ }
63
+ /**
64
+ * Get a required configuration value
65
+ * Throws if not found
66
+ */
67
+ getOrThrow(key) {
68
+ const value = this.get(key);
69
+ if (value === undefined) {
70
+ throw new Error(`Configuration key "${key}" is required but not found`);
71
+ }
72
+ return value;
73
+ }
74
+ /**
75
+ * Get all configuration
76
+ */
77
+ getAll() {
78
+ return { ...this.config };
79
+ }
80
+ }
81
+ /**
82
+ * Configuration Module
83
+ * NestJS-style configuration management
84
+ */
85
+ export class ConfigModule {
86
+ static forRoot(options = {}) {
87
+ const configService = new ConfigService(options);
88
+ return {
89
+ providers: [configService],
90
+ exports: [ConfigService],
91
+ };
92
+ }
93
+ }
94
+ //# sourceMappingURL=config-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-module.js","sourceRoot":"","sources":["../../src/core/config-module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import 'reflect-metadata';
2
+ /**
3
+ * Cache options
4
+ */
5
+ export interface CacheOptions {
6
+ /** Time to live in seconds */
7
+ ttl: number;
8
+ /** Custom cache key generator */
9
+ key?: (input: any, context: any) => string;
10
+ /** Cache storage (default: in-memory) */
11
+ storage?: CacheStorage;
12
+ }
13
+ /**
14
+ * Cache storage interface
15
+ */
16
+ export interface CacheStorage {
17
+ get(key: string): Promise<any> | any;
18
+ set(key: string, value: any, ttl: number): Promise<void> | void;
19
+ delete(key: string): Promise<void> | void;
20
+ clear(): Promise<void> | void;
21
+ }
22
+ /**
23
+ * Default in-memory cache storage
24
+ */
25
+ export declare class InMemoryCacheStorage implements CacheStorage {
26
+ private cache;
27
+ get(key: string): any;
28
+ set(key: string, value: any, ttl: number): void;
29
+ delete(key: string): void;
30
+ clear(): void;
31
+ private cleanup;
32
+ }
33
+ /**
34
+ * Cache decorator - caches tool results for a specified duration
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * @Tool({ name: 'get_products', ... })
39
+ * @Cache({ ttl: 300 }) // Cache for 5 minutes
40
+ * async getProducts(input: any) {
41
+ * return await this.database.query('SELECT * FROM products');
42
+ * }
43
+ *
44
+ * // With custom cache key
45
+ * @Cache({
46
+ * ttl: 300,
47
+ * key: (input) => `products:${input.category}`
48
+ * })
49
+ * async getProducts(input: any) { }
50
+ * ```
51
+ */
52
+ export declare function Cache(options: CacheOptions): MethodDecorator;
53
+ /**
54
+ * Get cache options from metadata
55
+ */
56
+ export declare function getCacheMetadata(target: any, propertyKey: string | symbol): CacheOptions | undefined;
57
+ /**
58
+ * Clear cache for a specific key or all keys
59
+ */
60
+ export declare function clearCache(key?: string): Promise<void>;
61
+ //# sourceMappingURL=cache.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.decorator.d.ts","sourceRoot":"","sources":["../../../src/core/decorators/cache.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAI1B;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IAEZ,iCAAiC;IACjC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,MAAM,CAAC;IAE3C,yCAAyC;IACzC,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACrC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,KAAK,CAAsD;IAEnE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAYrB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAO/C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,OAAO;CAQhB;AAKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,eAAe,CA4C5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,CAEpG;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5D"}