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.
- package/CHANGELOG.md +227 -0
- package/CONTRIBUTING.md +182 -0
- package/LICENSE +201 -0
- package/LICENSE_URLS_UPDATE_COMPLETE.md +388 -0
- package/NOTICE +153 -0
- package/README.md +571 -0
- package/dist/auth/api-key.d.ts +118 -0
- package/dist/auth/api-key.d.ts.map +1 -0
- package/dist/auth/api-key.js +168 -0
- package/dist/auth/api-key.js.map +1 -0
- package/dist/auth/client.d.ts +151 -0
- package/dist/auth/client.d.ts.map +1 -0
- package/dist/auth/client.js +330 -0
- package/dist/auth/client.js.map +1 -0
- package/dist/auth/index.d.ts +30 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +43 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +95 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +260 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/pkce.d.ts +53 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +105 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/quick-setup.d.ts +94 -0
- package/dist/auth/quick-setup.d.ts.map +1 -0
- package/dist/auth/quick-setup.js +210 -0
- package/dist/auth/quick-setup.js.map +1 -0
- package/dist/auth/server-integration.d.ts +97 -0
- package/dist/auth/server-integration.d.ts.map +1 -0
- package/dist/auth/server-integration.js +182 -0
- package/dist/auth/server-integration.js.map +1 -0
- package/dist/auth/server-metadata.d.ts +51 -0
- package/dist/auth/server-metadata.d.ts.map +1 -0
- package/dist/auth/server-metadata.js +106 -0
- package/dist/auth/server-metadata.js.map +1 -0
- package/dist/auth/simple-jwt.d.ts +88 -0
- package/dist/auth/simple-jwt.d.ts.map +1 -0
- package/dist/auth/simple-jwt.js +152 -0
- package/dist/auth/simple-jwt.js.map +1 -0
- package/dist/auth/token-store.d.ts +104 -0
- package/dist/auth/token-store.d.ts.map +1 -0
- package/dist/auth/token-store.js +205 -0
- package/dist/auth/token-store.js.map +1 -0
- package/dist/auth/token-validation.d.ts +47 -0
- package/dist/auth/token-validation.d.ts.map +1 -0
- package/dist/auth/token-validation.js +237 -0
- package/dist/auth/token-validation.js.map +1 -0
- package/dist/auth/types.d.ts +215 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +6 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli/commands/build.d.ts +6 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +104 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +7 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +312 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/generate-types.d.ts +8 -0
- package/dist/cli/commands/generate-types.d.ts.map +1 -0
- package/dist/cli/commands/generate-types.js +220 -0
- package/dist/cli/commands/generate-types.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +5 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +365 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/init.d.ts +7 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +365 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/start.d.ts +6 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +61 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +47 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/mcp-dev-wrapper.d.ts +3 -0
- package/dist/cli/mcp-dev-wrapper.d.ts.map +1 -0
- package/dist/cli/mcp-dev-wrapper.js +116 -0
- package/dist/cli/mcp-dev-wrapper.js.map +1 -0
- package/dist/core/apikey-module.d.ts +69 -0
- package/dist/core/apikey-module.d.ts.map +1 -0
- package/dist/core/apikey-module.js +114 -0
- package/dist/core/apikey-module.js.map +1 -0
- package/dist/core/app-decorator.d.ts +58 -0
- package/dist/core/app-decorator.d.ts.map +1 -0
- package/dist/core/app-decorator.js +261 -0
- package/dist/core/app-decorator.js.map +1 -0
- package/dist/core/builders.d.ts +38 -0
- package/dist/core/builders.d.ts.map +1 -0
- package/dist/core/builders.js +129 -0
- package/dist/core/builders.js.map +1 -0
- package/dist/core/component.d.ts +105 -0
- package/dist/core/component.d.ts.map +1 -0
- package/dist/core/component.js +182 -0
- package/dist/core/component.js.map +1 -0
- package/dist/core/config-module.d.ts +55 -0
- package/dist/core/config-module.d.ts.map +1 -0
- package/dist/core/config-module.js +94 -0
- package/dist/core/config-module.js.map +1 -0
- package/dist/core/decorators/cache.decorator.d.ts +61 -0
- package/dist/core/decorators/cache.decorator.d.ts.map +1 -0
- package/dist/core/decorators/cache.decorator.js +115 -0
- package/dist/core/decorators/cache.decorator.js.map +1 -0
- package/dist/core/decorators/health-check.decorator.d.ts +80 -0
- package/dist/core/decorators/health-check.decorator.d.ts.map +1 -0
- package/dist/core/decorators/health-check.decorator.js +153 -0
- package/dist/core/decorators/health-check.decorator.js.map +1 -0
- package/dist/core/decorators/rate-limit.decorator.d.ts +62 -0
- package/dist/core/decorators/rate-limit.decorator.d.ts.map +1 -0
- package/dist/core/decorators/rate-limit.decorator.js +129 -0
- package/dist/core/decorators/rate-limit.decorator.js.map +1 -0
- package/dist/core/decorators.d.ts +151 -0
- package/dist/core/decorators.d.ts.map +1 -0
- package/dist/core/decorators.js +142 -0
- package/dist/core/decorators.js.map +1 -0
- package/dist/core/di/container.d.ts +42 -0
- package/dist/core/di/container.d.ts.map +1 -0
- package/dist/core/di/container.js +76 -0
- package/dist/core/di/container.js.map +1 -0
- package/dist/core/di/injectable.decorator.d.ts +35 -0
- package/dist/core/di/injectable.decorator.d.ts.map +1 -0
- package/dist/core/di/injectable.decorator.js +57 -0
- package/dist/core/di/injectable.decorator.js.map +1 -0
- package/dist/core/errors.d.ts +54 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +87 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/events/event-emitter.d.ts +50 -0
- package/dist/core/events/event-emitter.d.ts.map +1 -0
- package/dist/core/events/event-emitter.js +94 -0
- package/dist/core/events/event-emitter.js.map +1 -0
- package/dist/core/events/event.decorator.d.ts +48 -0
- package/dist/core/events/event.decorator.d.ts.map +1 -0
- package/dist/core/events/event.decorator.js +68 -0
- package/dist/core/events/event.decorator.js.map +1 -0
- package/dist/core/filters/exception-filter.decorator.d.ts +40 -0
- package/dist/core/filters/exception-filter.decorator.d.ts.map +1 -0
- package/dist/core/filters/exception-filter.decorator.js +54 -0
- package/dist/core/filters/exception-filter.decorator.js.map +1 -0
- package/dist/core/filters/exception-filter.interface.d.ts +30 -0
- package/dist/core/filters/exception-filter.interface.d.ts.map +1 -0
- package/dist/core/filters/exception-filter.interface.js +2 -0
- package/dist/core/filters/exception-filter.interface.js.map +1 -0
- package/dist/core/guards/apikey.guard.d.ts +22 -0
- package/dist/core/guards/apikey.guard.d.ts.map +1 -0
- package/dist/core/guards/apikey.guard.js +11 -0
- package/dist/core/guards/apikey.guard.js.map +1 -0
- package/dist/core/guards/guard.interface.d.ts +18 -0
- package/dist/core/guards/guard.interface.d.ts.map +1 -0
- package/dist/core/guards/guard.interface.js +2 -0
- package/dist/core/guards/guard.interface.js.map +1 -0
- package/dist/core/guards/jwt.guard.d.ts +18 -0
- package/dist/core/guards/jwt.guard.d.ts.map +1 -0
- package/dist/core/guards/jwt.guard.js +2 -0
- package/dist/core/guards/jwt.guard.js.map +1 -0
- package/dist/core/guards/oauth.guard.d.ts +35 -0
- package/dist/core/guards/oauth.guard.d.ts.map +1 -0
- package/dist/core/guards/oauth.guard.js +2 -0
- package/dist/core/guards/oauth.guard.js.map +1 -0
- package/dist/core/guards/use-guards.decorator.d.ts +25 -0
- package/dist/core/guards/use-guards.decorator.d.ts.map +1 -0
- package/dist/core/guards/use-guards.decorator.js +32 -0
- package/dist/core/guards/use-guards.decorator.js.map +1 -0
- package/dist/core/health/health-checks.resource.d.ts +14 -0
- package/dist/core/health/health-checks.resource.d.ts.map +1 -0
- package/dist/core/health/health-checks.resource.js +29 -0
- package/dist/core/health/health-checks.resource.js.map +1 -0
- package/dist/core/index.d.ts +55 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +57 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/interceptors/interceptor.decorator.d.ts +37 -0
- package/dist/core/interceptors/interceptor.decorator.d.ts.map +1 -0
- package/dist/core/interceptors/interceptor.decorator.js +51 -0
- package/dist/core/interceptors/interceptor.decorator.js.map +1 -0
- package/dist/core/interceptors/interceptor.interface.d.ts +31 -0
- package/dist/core/interceptors/interceptor.interface.d.ts.map +1 -0
- package/dist/core/interceptors/interceptor.interface.js +2 -0
- package/dist/core/interceptors/interceptor.interface.js.map +1 -0
- package/dist/core/jwt-module.d.ts +51 -0
- package/dist/core/jwt-module.d.ts.map +1 -0
- package/dist/core/jwt-module.js +52 -0
- package/dist/core/jwt-module.js.map +1 -0
- package/dist/core/logger.d.ts +18 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +51 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/middleware/middleware.decorator.d.ts +39 -0
- package/dist/core/middleware/middleware.decorator.d.ts.map +1 -0
- package/dist/core/middleware/middleware.decorator.js +53 -0
- package/dist/core/middleware/middleware.decorator.js.map +1 -0
- package/dist/core/middleware/middleware.interface.d.ts +29 -0
- package/dist/core/middleware/middleware.interface.d.ts.map +1 -0
- package/dist/core/middleware/middleware.interface.js +2 -0
- package/dist/core/middleware/middleware.interface.js.map +1 -0
- package/dist/core/module.d.ts +74 -0
- package/dist/core/module.d.ts.map +1 -0
- package/dist/core/module.js +82 -0
- package/dist/core/module.js.map +1 -0
- package/dist/core/oauth-module.d.ts +144 -0
- package/dist/core/oauth-module.d.ts.map +1 -0
- package/dist/core/oauth-module.js +190 -0
- package/dist/core/oauth-module.js.map +1 -0
- package/dist/core/pipes/pipe.decorator.d.ts +55 -0
- package/dist/core/pipes/pipe.decorator.d.ts.map +1 -0
- package/dist/core/pipes/pipe.decorator.js +85 -0
- package/dist/core/pipes/pipe.decorator.js.map +1 -0
- package/dist/core/pipes/pipe.interface.d.ts +36 -0
- package/dist/core/pipes/pipe.interface.d.ts.map +1 -0
- package/dist/core/pipes/pipe.interface.js +2 -0
- package/dist/core/pipes/pipe.interface.js.map +1 -0
- package/dist/core/prompt.d.ts +37 -0
- package/dist/core/prompt.d.ts.map +1 -0
- package/dist/core/prompt.js +76 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/resource.d.ts +42 -0
- package/dist/core/resource.d.ts.map +1 -0
- package/dist/core/resource.js +90 -0
- package/dist/core/resource.js.map +1 -0
- package/dist/core/server.d.ts +72 -0
- package/dist/core/server.d.ts.map +1 -0
- package/dist/core/server.js +406 -0
- package/dist/core/server.js.map +1 -0
- package/dist/core/tool.d.ts +78 -0
- package/dist/core/tool.d.ts.map +1 -0
- package/dist/core/tool.js +190 -0
- package/dist/core/tool.js.map +1 -0
- package/dist/core/transports/http-server.d.ts +102 -0
- package/dist/core/transports/http-server.d.ts.map +1 -0
- package/dist/core/transports/http-server.js +265 -0
- package/dist/core/transports/http-server.js.map +1 -0
- package/dist/core/types.d.ts +123 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/widgets/widget-examples.resource.d.ts +17 -0
- package/dist/core/widgets/widget-examples.resource.d.ts.map +1 -0
- package/dist/core/widgets/widget-examples.resource.js +28 -0
- package/dist/core/widgets/widget-examples.resource.js.map +1 -0
- package/dist/core/widgets/widget-registry.d.ts +56 -0
- package/dist/core/widgets/widget-registry.d.ts.map +1 -0
- package/dist/core/widgets/widget-registry.js +75 -0
- package/dist/core/widgets/widget-registry.js.map +1 -0
- package/dist/testing/index.d.ts +82 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +164 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/ui-next/index.d.ts +31 -0
- package/dist/ui-next/index.d.ts.map +1 -0
- package/dist/ui-next/index.js +687 -0
- package/dist/ui-next/index.js.map +1 -0
- package/dist/widgets/index.d.ts +9 -0
- package/dist/widgets/index.d.ts.map +1 -0
- package/dist/widgets/index.js +9 -0
- package/dist/widgets/index.js.map +1 -0
- package/dist/widgets/metadata.d.ts +53 -0
- package/dist/widgets/metadata.d.ts.map +1 -0
- package/dist/widgets/metadata.js +29 -0
- package/dist/widgets/metadata.js.map +1 -0
- package/dist/widgets/withToolData.d.ts +19 -0
- package/dist/widgets/withToolData.d.ts.map +1 -0
- package/dist/widgets/withToolData.js +240 -0
- package/dist/widgets/withToolData.js.map +1 -0
- package/jest.config.js +21 -0
- package/package.json +108 -0
- package/templates/typescript-auth/AI_AGENT_CLI_REFERENCE.md +702 -0
- package/templates/typescript-auth/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-auth/README.md +400 -0
- package/templates/typescript-auth/package.json +44 -0
- package/templates/typescript-auth-api-key/AI_AGENT_CLI_REFERENCE.md +701 -0
- package/templates/typescript-auth-api-key/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-auth-api-key/README.md +483 -0
- package/templates/typescript-auth-api-key/package-lock.json +124 -0
- package/templates/typescript-auth-api-key/package.json +29 -0
- package/templates/typescript-oauth/AI_AGENT_CLI_REFERENCE.md +701 -0
- package/templates/typescript-oauth/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-oauth/OAUTH_SETUP.md +406 -0
- package/templates/typescript-oauth/README.md +350 -0
- package/templates/typescript-oauth/package.json +30 -0
- package/templates/typescript-starter/AI_AGENT_CLI_REFERENCE.md +701 -0
- package/templates/typescript-starter/AI_AGENT_SDK_REFERENCE.md +1260 -0
- package/templates/typescript-starter/README.md +312 -0
- 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"}
|