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,69 @@
1
+ import 'reflect-metadata';
2
+ /**
3
+ * API Key Module Configuration
4
+ */
5
+ export interface ApiKeyModuleConfig {
6
+ /** Array of valid API keys (or env var names to read from) */
7
+ keys?: string[];
8
+ /** Environment variable prefix to read keys from (e.g., 'API_KEY' reads API_KEY_1, API_KEY_2, etc.) */
9
+ keysEnvPrefix?: string;
10
+ /** If true, keys are stored as SHA-256 hashes */
11
+ hashed?: boolean;
12
+ /** Header name to extract API key from (default: 'x-api-key') */
13
+ headerName?: string;
14
+ /** Metadata field name in MCP requests (default: 'apiKey') */
15
+ metadataField?: string;
16
+ /** Custom validation function */
17
+ customValidation?: (key: string) => Promise<boolean> | boolean;
18
+ }
19
+ /**
20
+ * API Key Module - Enable API key authentication in your MCP server
21
+ *
22
+ * Import this module to indicate your server uses API key authentication.
23
+ * Then use @UseGuards(ApiKeyGuard) on your tools to protect them.
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * import { McpApplicationFactory, ApiKeyModule } from 'nitrostack';
28
+ * import { AppModule } from './app.module.js';
29
+ *
30
+ * async function bootstrap() {
31
+ * const app = await McpApplicationFactory.create(AppModule, {
32
+ * // Enable API key authentication
33
+ * apiKey: ApiKeyModule.forRoot({
34
+ * keysEnvPrefix: 'API_KEY', // Reads API_KEY_1, API_KEY_2, etc.
35
+ * headerName: 'x-api-key',
36
+ * }),
37
+ * });
38
+ * await app.start();
39
+ * }
40
+ * ```
41
+ */
42
+ export declare class ApiKeyModule {
43
+ private static config;
44
+ /**
45
+ * Configure API Key module for the application
46
+ */
47
+ static forRoot(config: ApiKeyModuleConfig): ApiKeyModuleConfig;
48
+ /**
49
+ * Get current API Key configuration
50
+ */
51
+ static getConfig(): ApiKeyModuleConfig;
52
+ /**
53
+ * Get valid API keys from config or environment
54
+ */
55
+ static getKeys(): string[];
56
+ /**
57
+ * Validate an API key
58
+ */
59
+ static validate(key: string): Promise<boolean>;
60
+ /**
61
+ * Hash an API key (SHA-256)
62
+ */
63
+ static hashKey(key: string): string;
64
+ /**
65
+ * Generate a secure API key
66
+ */
67
+ static generateKey(prefix?: string): string;
68
+ }
69
+ //# sourceMappingURL=apikey-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apikey-module.d.ts","sourceRoot":"","sources":["../../src/core/apikey-module.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,uGAAuG;IACvG,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAChE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,MAAM,CAKnB;IAEF;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB;IAK9D;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,kBAAkB;IAItC;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE;IA6B1B;;OAEG;WACU,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2BpD;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAInC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,GAAE,MAAa,GAAG,MAAM;CAKlD"}
@@ -0,0 +1,114 @@
1
+ import 'reflect-metadata';
2
+ import crypto from 'crypto';
3
+ /**
4
+ * API Key Module - Enable API key authentication in your MCP server
5
+ *
6
+ * Import this module to indicate your server uses API key authentication.
7
+ * Then use @UseGuards(ApiKeyGuard) on your tools to protect them.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { McpApplicationFactory, ApiKeyModule } from 'nitrostack';
12
+ * import { AppModule } from './app.module.js';
13
+ *
14
+ * async function bootstrap() {
15
+ * const app = await McpApplicationFactory.create(AppModule, {
16
+ * // Enable API key authentication
17
+ * apiKey: ApiKeyModule.forRoot({
18
+ * keysEnvPrefix: 'API_KEY', // Reads API_KEY_1, API_KEY_2, etc.
19
+ * headerName: 'x-api-key',
20
+ * }),
21
+ * });
22
+ * await app.start();
23
+ * }
24
+ * ```
25
+ */
26
+ export class ApiKeyModule {
27
+ static config = {
28
+ keysEnvPrefix: 'API_KEY',
29
+ headerName: 'x-api-key',
30
+ metadataField: 'apiKey',
31
+ hashed: false,
32
+ };
33
+ /**
34
+ * Configure API Key module for the application
35
+ */
36
+ static forRoot(config) {
37
+ this.config = { ...this.config, ...config };
38
+ return this.config;
39
+ }
40
+ /**
41
+ * Get current API Key configuration
42
+ */
43
+ static getConfig() {
44
+ return this.config;
45
+ }
46
+ /**
47
+ * Get valid API keys from config or environment
48
+ */
49
+ static getKeys() {
50
+ const keys = [];
51
+ // Add keys from config
52
+ if (this.config.keys && this.config.keys.length > 0) {
53
+ keys.push(...this.config.keys);
54
+ }
55
+ // Read from environment variables
56
+ if (this.config.keysEnvPrefix) {
57
+ let i = 1;
58
+ while (true) {
59
+ const envKey = `${this.config.keysEnvPrefix}_${i}`;
60
+ const value = process.env[envKey];
61
+ if (!value)
62
+ break;
63
+ keys.push(value);
64
+ i++;
65
+ }
66
+ // Also check for non-numbered version
67
+ const singleKey = process.env[this.config.keysEnvPrefix];
68
+ if (singleKey && !keys.includes(singleKey)) {
69
+ keys.push(singleKey);
70
+ }
71
+ }
72
+ return keys;
73
+ }
74
+ /**
75
+ * Validate an API key
76
+ */
77
+ static async validate(key) {
78
+ const keys = this.getKeys();
79
+ if (keys.length === 0) {
80
+ return false; // No keys configured
81
+ }
82
+ let isValid = false;
83
+ if (this.config.hashed) {
84
+ // Compare hashed values
85
+ const hashedKey = this.hashKey(key);
86
+ isValid = keys.includes(hashedKey);
87
+ }
88
+ else {
89
+ // Direct comparison
90
+ isValid = keys.includes(key);
91
+ }
92
+ // Custom validation
93
+ if (this.config.customValidation) {
94
+ const customValid = await this.config.customValidation(key);
95
+ isValid = isValid && customValid;
96
+ }
97
+ return isValid;
98
+ }
99
+ /**
100
+ * Hash an API key (SHA-256)
101
+ */
102
+ static hashKey(key) {
103
+ return crypto.createHash('sha256').update(key).digest('hex');
104
+ }
105
+ /**
106
+ * Generate a secure API key
107
+ */
108
+ static generateKey(prefix = 'sk') {
109
+ const randomBytes = crypto.randomBytes(32);
110
+ const key = randomBytes.toString('base64url');
111
+ return `${prefix}_${key}`;
112
+ }
113
+ }
114
+ //# sourceMappingURL=apikey-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apikey-module.js","sourceRoot":"","sources":["../../src/core/apikey-module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import 'reflect-metadata';
2
+ import { NitroStackServer } from './server.js';
3
+ /**
4
+ * MCP Application Options
5
+ */
6
+ export interface McpAppOptions {
7
+ /**
8
+ * Root module of the application
9
+ */
10
+ module: any;
11
+ /**
12
+ * Server configuration
13
+ */
14
+ server?: {
15
+ name?: string;
16
+ version?: string;
17
+ };
18
+ /**
19
+ * Logging configuration
20
+ */
21
+ logging?: {
22
+ level?: 'debug' | 'info' | 'warn' | 'error';
23
+ };
24
+ /**
25
+ * Transport configuration
26
+ * - 'stdio': STDIO only (default)
27
+ * - 'http': HTTP only
28
+ * - 'dual': STDIO for MCP + HTTP for OAuth metadata (auto-enabled with OAuth)
29
+ */
30
+ transport?: {
31
+ type: 'stdio' | 'http' | 'dual';
32
+ http?: {
33
+ port?: number;
34
+ host?: string;
35
+ basePath?: string;
36
+ };
37
+ };
38
+ }
39
+ /**
40
+ * @McpApp Decorator
41
+ * Marks a class as the root application module
42
+ */
43
+ export declare function McpApp(options: McpAppOptions): ClassDecorator;
44
+ /**
45
+ * Get MCP App metadata
46
+ */
47
+ export declare function getMcpAppMetadata(target: any): McpAppOptions | undefined;
48
+ /**
49
+ * MCP Application Factory
50
+ * Creates and bootstraps an MCP application
51
+ */
52
+ export declare class McpApplicationFactory {
53
+ /**
54
+ * Create an MCP application from an app module
55
+ */
56
+ static create(AppModule: any): Promise<NitroStackServer>;
57
+ }
58
+ //# sourceMappingURL=app-decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-decorator.d.ts","sourceRoot":"","sources":["../../src/core/app-decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAgB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAS7D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,MAAM,EAAE,GAAG,CAAC;IAEZ;;OAEG;IACH,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF;;OAEG;IACH,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;KAC7C,CAAC;IAEF;;;;;OAKG;IACH,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;QAChC,IAAI,CAAC,EAAE;YACL,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;CACH;AAOD;;;GAGG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,cAAc,CAK7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,GAAG,SAAS,CAExE;AAED;;;GAGG;AACH,qBAAa,qBAAqB;IAChC;;OAEG;WACU,MAAM,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA8P/D"}
@@ -0,0 +1,261 @@
1
+ import 'reflect-metadata';
2
+ import { createServer } from './server.js';
3
+ import { createLogger } from './logger.js';
4
+ import { DIContainer } from './di/container.js';
5
+ import { registerHealthCheck } from './decorators/health-check.decorator.js';
6
+ import { createResource } from './resource.js';
7
+ import { getModuleMetadata } from './module.js';
8
+ import { buildTools, buildResources, buildPrompts } from './builders.js';
9
+ /**
10
+ * MCP Application Metadata Key
11
+ */
12
+ const MCP_APP_METADATA = Symbol('mcp:app');
13
+ /**
14
+ * @McpApp Decorator
15
+ * Marks a class as the root application module
16
+ */
17
+ export function McpApp(options) {
18
+ return (target) => {
19
+ Reflect.defineMetadata(MCP_APP_METADATA, options, target);
20
+ return target;
21
+ };
22
+ }
23
+ /**
24
+ * Get MCP App metadata
25
+ */
26
+ export function getMcpAppMetadata(target) {
27
+ return Reflect.getMetadata(MCP_APP_METADATA, target);
28
+ }
29
+ /**
30
+ * MCP Application Factory
31
+ * Creates and bootstraps an MCP application
32
+ */
33
+ export class McpApplicationFactory {
34
+ /**
35
+ * Create an MCP application from an app module
36
+ */
37
+ static async create(AppModule) {
38
+ const options = getMcpAppMetadata(AppModule);
39
+ if (!options) {
40
+ throw new Error(`${AppModule.name} is not decorated with @McpApp. ` +
41
+ `Please add @McpApp decorator to your root module.`);
42
+ }
43
+ // Create logger
44
+ const logger = createLogger({ level: options.logging?.level || 'info' });
45
+ // Set log level if provided
46
+ if (options.logging?.level) {
47
+ process.env.LOG_LEVEL = options.logging.level;
48
+ }
49
+ // Create DI container
50
+ const container = DIContainer.getInstance();
51
+ // Get module metadata
52
+ const moduleMetadata = getModuleMetadata(options.module);
53
+ if (!moduleMetadata) {
54
+ throw new Error(`${options.module.name} is not decorated with @Module`);
55
+ }
56
+ // Register all providers
57
+ if (moduleMetadata.providers) {
58
+ for (const provider of moduleMetadata.providers) {
59
+ container.register(provider);
60
+ // Check if provider is a health check
61
+ const healthCheckMetadata = Reflect.getMetadata('nitrostack:health_check', provider);
62
+ if (healthCheckMetadata) {
63
+ // Resolve and register health check
64
+ const healthCheckInstance = container.resolve(provider);
65
+ registerHealthCheck(healthCheckInstance, healthCheckMetadata);
66
+ logger.info(` ✓ Health Check: ${healthCheckMetadata.name}`);
67
+ }
68
+ }
69
+ }
70
+ // Register all controllers (tools/resources/prompts)
71
+ if (moduleMetadata.controllers) {
72
+ for (const controller of moduleMetadata.controllers) {
73
+ container.register(controller);
74
+ }
75
+ }
76
+ // Process imports (other modules)
77
+ if (moduleMetadata.imports) {
78
+ for (const importedModule of moduleMetadata.imports) {
79
+ if (typeof importedModule === 'function') {
80
+ const importedMetadata = getModuleMetadata(importedModule);
81
+ if (importedMetadata) {
82
+ // Register providers from imported module
83
+ if (importedMetadata.providers) {
84
+ for (const provider of importedMetadata.providers) {
85
+ container.register(provider);
86
+ // Check if provider is a health check
87
+ const healthCheckMetadata = Reflect.getMetadata('nitrostack:health_check', provider);
88
+ if (healthCheckMetadata) {
89
+ // Resolve and register health check
90
+ const healthCheckInstance = container.resolve(provider);
91
+ registerHealthCheck(healthCheckInstance, healthCheckMetadata);
92
+ logger.info(` ✓ Health Check: ${healthCheckMetadata.name}`);
93
+ }
94
+ }
95
+ }
96
+ // Register controllers from imported module
97
+ if (importedMetadata.controllers) {
98
+ for (const controller of importedMetadata.controllers) {
99
+ container.register(controller);
100
+ }
101
+ }
102
+ }
103
+ }
104
+ else if (importedModule && typeof importedModule === 'object' && 'providers' in importedModule) {
105
+ // Handle ConfigModule.forRoot() style dynamic modules
106
+ if (importedModule.providers) {
107
+ for (const provider of importedModule.providers) {
108
+ container.register(provider);
109
+ }
110
+ }
111
+ }
112
+ }
113
+ }
114
+ // Create server
115
+ const server = createServer({
116
+ name: options.server?.name || 'mcp-server',
117
+ version: options.server?.version || '1.0.0',
118
+ });
119
+ // Build and register tools, resources, and prompts from all controllers
120
+ let totalTools = 0;
121
+ let totalResources = 0;
122
+ let totalPrompts = 0;
123
+ // Process all registered controllers
124
+ const allControllers = [];
125
+ // Get controllers from root module
126
+ if (moduleMetadata.controllers) {
127
+ allControllers.push(...moduleMetadata.controllers);
128
+ }
129
+ // Get controllers from imported modules
130
+ if (moduleMetadata.imports) {
131
+ for (const importedModule of moduleMetadata.imports) {
132
+ if (typeof importedModule === 'function') {
133
+ const importedMetadata = getModuleMetadata(importedModule);
134
+ if (importedMetadata?.controllers) {
135
+ allControllers.push(...importedMetadata.controllers);
136
+ }
137
+ }
138
+ }
139
+ }
140
+ // Build and register from each controller
141
+ for (const controllerClass of allControllers) {
142
+ // Resolve controller instance from DI container
143
+ const controller = container.resolve(controllerClass);
144
+ // Build tools
145
+ const tools = buildTools(controller);
146
+ for (const tool of tools) {
147
+ server.tool(tool);
148
+ totalTools++;
149
+ }
150
+ // Build resources
151
+ const resources = buildResources(controller);
152
+ for (const resource of resources) {
153
+ server.resource(resource);
154
+ totalResources++;
155
+ }
156
+ // Build prompts
157
+ const prompts = buildPrompts(controller);
158
+ for (const prompt of prompts) {
159
+ server.prompt(prompt);
160
+ totalPrompts++;
161
+ }
162
+ }
163
+ // Register health checks resource if any health checks exist
164
+ const { buildHealthChecksResource } = await import('./health/health-checks.resource.js');
165
+ const healthChecksResourceDef = await buildHealthChecksResource();
166
+ const healthChecksResource = createResource({
167
+ uri: healthChecksResourceDef.uri,
168
+ name: healthChecksResourceDef.name,
169
+ description: healthChecksResourceDef.description,
170
+ mimeType: healthChecksResourceDef.mimeType,
171
+ handler: async (context) => {
172
+ const content = await healthChecksResourceDef.read();
173
+ return { type: 'text', data: content };
174
+ },
175
+ });
176
+ server.resource(healthChecksResource);
177
+ logger.info(`✅ Health checks resource registered`);
178
+ // Load widget manifest and register widget examples resource
179
+ try {
180
+ const { getWidgetRegistry } = await import('./widgets/widget-registry.js');
181
+ const { buildWidgetExamplesResource } = await import('./widgets/widget-examples.resource.js');
182
+ const { join } = await import('path');
183
+ const registry = getWidgetRegistry();
184
+ const widgetManifestPath = join(process.cwd(), 'src', 'widgets', 'widget-manifest.json');
185
+ registry.loadManifest(widgetManifestPath);
186
+ const widgetExamplesResourceDef = await buildWidgetExamplesResource();
187
+ const widgetExamplesResource = createResource({
188
+ uri: widgetExamplesResourceDef.uri,
189
+ name: widgetExamplesResourceDef.name,
190
+ description: widgetExamplesResourceDef.description,
191
+ mimeType: widgetExamplesResourceDef.mimeType,
192
+ handler: async (context) => {
193
+ const content = await widgetExamplesResourceDef.read();
194
+ return { type: 'text', data: content };
195
+ },
196
+ });
197
+ server.resource(widgetExamplesResource);
198
+ logger.info(`Widget examples resource registered`);
199
+ }
200
+ catch (error) {
201
+ logger.warn(`Widget examples not available: ${error.message}`);
202
+ }
203
+ logger.info(`✅ Application initialized with ${totalTools} tools, ${totalResources} resources, ${totalPrompts} prompts`);
204
+ // Auto-detect transport type based on configuration
205
+ let transportType = 'stdio';
206
+ let transportOptions = undefined;
207
+ // Check explicit transport configuration
208
+ if (options.transport?.type) {
209
+ transportType = options.transport.type;
210
+ }
211
+ // Check if OAuth is configured
212
+ const { OAuthModule } = await import('./oauth-module.js');
213
+ const oauthConfig = OAuthModule.getConfig();
214
+ if (oauthConfig) {
215
+ // OAuth requires DUAL transport: STDIO for MCP + HTTP for metadata
216
+ // This allows Studio to connect via STDIO while exposing OAuth metadata via HTTP
217
+ transportType = 'dual';
218
+ // Extract port from resourceUri (e.g., http://localhost:3002)
219
+ let port = 3000;
220
+ try {
221
+ const resourceUrl = new URL(oauthConfig.resourceUri);
222
+ port = resourceUrl.port ? parseInt(resourceUrl.port) : (resourceUrl.protocol === 'https:' ? 443 : 80);
223
+ }
224
+ catch (error) {
225
+ logger.warn(`Failed to parse resourceUri for port, using default 3000`);
226
+ }
227
+ // Override with explicit config if provided
228
+ if (oauthConfig.http?.port) {
229
+ port = oauthConfig.http.port;
230
+ }
231
+ else if (options.transport?.http?.port) {
232
+ port = options.transport.http.port;
233
+ }
234
+ transportOptions = {
235
+ port,
236
+ host: oauthConfig.http?.host || options.transport?.http?.host || '0.0.0.0',
237
+ basePath: oauthConfig.http?.basePath || options.transport?.http?.basePath || '/mcp',
238
+ oauth: {
239
+ resourceUri: oauthConfig.resourceUri,
240
+ authorizationServers: oauthConfig.authorizationServers,
241
+ scopesSupported: oauthConfig.scopesSupported,
242
+ },
243
+ };
244
+ logger.info(`🔐 OAuth 2.1 detected - using HTTP transport on port ${port}`);
245
+ }
246
+ else if (options.transport?.type === 'http') {
247
+ // Explicitly configured HTTP transport
248
+ transportType = 'http';
249
+ transportOptions = {
250
+ port: options.transport.http?.port || 3000,
251
+ host: options.transport.http?.host || '0.0.0.0',
252
+ basePath: options.transport.http?.basePath || '/mcp',
253
+ };
254
+ }
255
+ // Store transport configuration on server for later use
256
+ server._transportType = transportType;
257
+ server._transportOptions = transportOptions;
258
+ return server;
259
+ }
260
+ }
261
+ //# sourceMappingURL=app-decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-decorator.js","sourceRoot":"","sources":["../../src/core/app-decorator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { Tool } from './tool.js';
2
+ import { Resource } from './resource.js';
3
+ import { Prompt } from './prompt.js';
4
+ import { ToolOptions, ResourceOptions, PromptOptions } from './decorators.js';
5
+ /**
6
+ * Build a Tool instance from a decorated method
7
+ */
8
+ export declare function buildTool(controllerInstance: any, methodName: string, options: ToolOptions, widgetRoute?: string): Tool;
9
+ /**
10
+ * Build all tools from a controller
11
+ */
12
+ export declare function buildTools(controllerInstance: any): Tool[];
13
+ /**
14
+ * Build a Resource instance from a decorated method
15
+ */
16
+ export declare function buildResource(controllerInstance: any, methodName: string, options: ResourceOptions): Resource;
17
+ /**
18
+ * Build all resources from a controller
19
+ */
20
+ export declare function buildResources(controllerInstance: any): Resource[];
21
+ /**
22
+ * Build a Prompt instance from a decorated method
23
+ */
24
+ export declare function buildPrompt(controllerInstance: any, methodName: string, options: PromptOptions): Prompt;
25
+ /**
26
+ * Build all prompts from a controller
27
+ */
28
+ export declare function buildPrompts(controllerInstance: any): Prompt[];
29
+ /**
30
+ * Build all tools, resources, and prompts from a controller
31
+ * Supports dependency injection
32
+ */
33
+ export declare function buildController(controller: any): {
34
+ tools: Tool[];
35
+ resources: Resource[];
36
+ prompts: Prompt[];
37
+ };
38
+ //# sourceMappingURL=builders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../src/core/builders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAkB,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,MAAM,EAAgB,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAqE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASjJ;;GAEG;AACH,wBAAgB,SAAS,CACvB,kBAAkB,EAAE,GAAG,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CAoCN;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,kBAAkB,EAAE,GAAG,GAAG,IAAI,EAAE,CAS1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,kBAAkB,EAAE,GAAG,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,GACvB,QAAQ,CAeV;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,kBAAkB,EAAE,GAAG,GAAG,QAAQ,EAAE,CAMlE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,kBAAkB,EAAE,GAAG,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,aAAa,GACrB,MAAM,CAaR;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,kBAAkB,EAAE,GAAG,GAAG,MAAM,EAAE,CAM9D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,GAAG,GAAG;IAChD,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAgBA"}