@nitrostack/core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +80 -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 +31 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +46 -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/secure-secret.d.ts +136 -0
- package/dist/auth/secure-secret.d.ts.map +1 -0
- package/dist/auth/secure-secret.js +182 -0
- package/dist/auth/secure-secret.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 +174 -0
- package/dist/auth/simple-jwt.d.ts.map +1 -0
- package/dist/auth/simple-jwt.js +162 -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 +59 -0
- package/dist/auth/token-validation.d.ts.map +1 -0
- package/dist/auth/token-validation.js +241 -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/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 +59 -0
- package/dist/core/app-decorator.d.ts.map +1 -0
- package/dist/core/app-decorator.js +322 -0
- package/dist/core/app-decorator.js.map +1 -0
- package/dist/core/builders.d.ts +50 -0
- package/dist/core/builders.d.ts.map +1 -0
- package/dist/core/builders.js +139 -0
- package/dist/core/builders.js.map +1 -0
- package/dist/core/component.d.ts +111 -0
- package/dist/core/component.d.ts.map +1 -0
- package/dist/core/component.js +228 -0
- package/dist/core/component.js.map +1 -0
- package/dist/core/config-module.d.ts +62 -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 +63 -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 +190 -0
- package/dist/core/decorators.d.ts.map +1 -0
- package/dist/core/decorators.js +170 -0
- package/dist/core/decorators.js.map +1 -0
- package/dist/core/di/container.d.ts +64 -0
- package/dist/core/di/container.d.ts.map +1 -0
- package/dist/core/di/container.js +105 -0
- package/dist/core/di/container.js.map +1 -0
- package/dist/core/di/injectable.decorator.d.ts +62 -0
- package/dist/core/di/injectable.decorator.d.ts.map +1 -0
- package/dist/core/di/injectable.decorator.js +66 -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 +72 -0
- package/dist/core/events/event.decorator.js.map +1 -0
- package/dist/core/events/log-emitter.d.ts +14 -0
- package/dist/core/events/log-emitter.d.ts.map +1 -0
- package/dist/core/events/log-emitter.js +20 -0
- package/dist/core/events/log-emitter.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 +39 -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 +57 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +59 -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 +53 -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 +93 -0
- package/dist/core/module.d.ts.map +1 -0
- package/dist/core/module.js +87 -0
- package/dist/core/module.js.map +1 -0
- package/dist/core/oauth-module.d.ts +123 -0
- package/dist/core/oauth-module.d.ts.map +1 -0
- package/dist/core/oauth-module.js +324 -0
- package/dist/core/oauth-module.js.map +1 -0
- package/dist/core/pipes/pipe.decorator.d.ts +64 -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 +41 -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 +46 -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 +47 -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 +129 -0
- package/dist/core/server.d.ts.map +1 -0
- package/dist/core/server.js +617 -0
- package/dist/core/server.js.map +1 -0
- package/dist/core/tool.d.ts +108 -0
- package/dist/core/tool.d.ts.map +1 -0
- package/dist/core/tool.js +241 -0
- package/dist/core/tool.js.map +1 -0
- package/dist/core/transports/discovery-http-server.d.ts +19 -0
- package/dist/core/transports/discovery-http-server.d.ts.map +1 -0
- package/dist/core/transports/discovery-http-server.js +54 -0
- package/dist/core/transports/discovery-http-server.js.map +1 -0
- package/dist/core/transports/http-server.d.ts +108 -0
- package/dist/core/transports/http-server.d.ts.map +1 -0
- package/dist/core/transports/http-server.js +293 -0
- package/dist/core/transports/http-server.js.map +1 -0
- package/dist/core/transports/streamable-http.d.ts +177 -0
- package/dist/core/transports/streamable-http.d.ts.map +1 -0
- package/dist/core/transports/streamable-http.js +1287 -0
- package/dist/core/transports/streamable-http.js.map +1 -0
- package/dist/core/types.d.ts +195 -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 +103 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +161 -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/package.json +89 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-module.js","sourceRoot":"","sources":["../../src/core/jwt-module.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAsB1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,SAAS;IACZ,MAAM,CAAC,MAAM,GAAoB;QACvC,YAAY,EAAE,YAAY;QAC1B,SAAS,EAAE,KAAK;KACjB,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAuB;QACpC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS;QACd,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5B,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Logger } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create a logger instance with custom configuration
|
|
4
|
+
*
|
|
5
|
+
* IMPORTANT: For MCP servers, console logging is DISABLED by default
|
|
6
|
+
* as it breaks the JSON-RPC protocol over stdio. All logs go to files.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createLogger(options: {
|
|
9
|
+
level?: string;
|
|
10
|
+
file?: string;
|
|
11
|
+
serviceName?: string;
|
|
12
|
+
enableConsole?: boolean;
|
|
13
|
+
}): Logger;
|
|
14
|
+
/**
|
|
15
|
+
* Default logger instance
|
|
16
|
+
*/
|
|
17
|
+
export declare const defaultLogger: Logger;
|
|
18
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAW,MAAM,YAAY,CAAC;AAG7C;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,MAAM,CA6DT;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,QAAkC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import winston from 'winston';
|
|
2
|
+
import { EventEmitterTransport } from './events/log-emitter.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create a logger instance with custom configuration
|
|
5
|
+
*
|
|
6
|
+
* IMPORTANT: For MCP servers, console logging is DISABLED by default
|
|
7
|
+
* as it breaks the JSON-RPC protocol over stdio. All logs go to files.
|
|
8
|
+
*/
|
|
9
|
+
export function createLogger(options) {
|
|
10
|
+
const { level = 'info', file, serviceName = 'nitrostack', enableConsole = false } = options;
|
|
11
|
+
const transports = [new EventEmitterTransport()];
|
|
12
|
+
// CRITICAL: Console logging disabled by default for MCP compatibility
|
|
13
|
+
// MCP uses stdio for JSON-RPC communication, console output breaks it
|
|
14
|
+
if (enableConsole) {
|
|
15
|
+
transports.push(new winston.transports.Console({
|
|
16
|
+
format: winston.format.combine(winston.format.colorize(), winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), winston.format.printf(({ timestamp, level, message, ...meta }) => {
|
|
17
|
+
const metaStr = Object.keys(meta).length > 0 ? `\n${JSON.stringify(meta, null, 2)}` : '';
|
|
18
|
+
return `${timestamp} [${serviceName}] ${level}: ${message}${metaStr}`;
|
|
19
|
+
})),
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
// File logging - always recommended for MCP servers
|
|
23
|
+
if (file) {
|
|
24
|
+
transports.push(new winston.transports.File({
|
|
25
|
+
filename: file,
|
|
26
|
+
format: winston.format.combine(winston.format.timestamp(), winston.format.json()),
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
// If no transports configured, use a null transport to avoid crashes
|
|
30
|
+
if (transports.length === 0) {
|
|
31
|
+
// Silent logger - logs nowhere (better than crashing)
|
|
32
|
+
transports.push(new winston.transports.File({
|
|
33
|
+
filename: '/dev/null', // Discard logs
|
|
34
|
+
silent: true,
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
const winstonLogger = winston.createLogger({
|
|
38
|
+
level,
|
|
39
|
+
format: winston.format.combine(winston.format.timestamp(), winston.format.json()),
|
|
40
|
+
transports,
|
|
41
|
+
});
|
|
42
|
+
return {
|
|
43
|
+
debug: (message, meta) => winstonLogger.debug(message, meta),
|
|
44
|
+
info: (message, meta) => winstonLogger.info(message, meta),
|
|
45
|
+
warn: (message, meta) => winstonLogger.warn(message, meta),
|
|
46
|
+
error: (message, meta) => winstonLogger.error(message, meta),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Default logger instance
|
|
51
|
+
*/
|
|
52
|
+
export const defaultLogger = createLogger({ level: 'info' });
|
|
53
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { MiddlewareConstructor } from './middleware.interface.js';
|
|
3
|
+
/**
|
|
4
|
+
* Marks a class as a middleware
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* @Middleware()
|
|
9
|
+
* export class LoggingMiddleware implements MiddlewareInterface {
|
|
10
|
+
* async use(context: ExecutionContext, next: () => Promise<unknown>) {
|
|
11
|
+
* console.log('Before');
|
|
12
|
+
* const result = await next();
|
|
13
|
+
* console.log('After');
|
|
14
|
+
* return result;
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function Middleware(): ClassDecorator;
|
|
20
|
+
/**
|
|
21
|
+
* Apply middleware to a tool method
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* @Tool({ name: 'my_tool', ... })
|
|
26
|
+
* @UseMiddleware(LoggingMiddleware, AuthMiddleware)
|
|
27
|
+
* async myTool(input: Record<string, unknown>, context: ExecutionContext) { }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function UseMiddleware(...middlewares: MiddlewareConstructor[]): MethodDecorator;
|
|
31
|
+
/**
|
|
32
|
+
* Get middlewares for a method
|
|
33
|
+
*/
|
|
34
|
+
export declare function getMiddlewareMetadata(target: object, propertyKey: string | symbol): MiddlewareConstructor[];
|
|
35
|
+
/**
|
|
36
|
+
* Check if a class is marked as middleware
|
|
37
|
+
*/
|
|
38
|
+
export declare function isMiddleware(target: object): boolean;
|
|
39
|
+
//# sourceMappingURL=middleware.decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.decorator.d.ts","sourceRoot":"","sources":["../../../src/core/middleware/middleware.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAKlE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,IAAI,cAAc,CAI3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,GAAG,WAAW,EAAE,qBAAqB,EAAE,GAAG,eAAe,CAUtF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,qBAAqB,EAAE,CAE3G;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
const MIDDLEWARE_KEY = 'nitrostack:middleware';
|
|
3
|
+
const IS_MIDDLEWARE_KEY = 'nitrostack:is_middleware';
|
|
4
|
+
/**
|
|
5
|
+
* Marks a class as a middleware
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* @Middleware()
|
|
10
|
+
* export class LoggingMiddleware implements MiddlewareInterface {
|
|
11
|
+
* async use(context: ExecutionContext, next: () => Promise<unknown>) {
|
|
12
|
+
* console.log('Before');
|
|
13
|
+
* const result = await next();
|
|
14
|
+
* console.log('After');
|
|
15
|
+
* return result;
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export function Middleware() {
|
|
21
|
+
return (target) => {
|
|
22
|
+
Reflect.defineMetadata(IS_MIDDLEWARE_KEY, true, target);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Apply middleware to a tool method
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* @Tool({ name: 'my_tool', ... })
|
|
31
|
+
* @UseMiddleware(LoggingMiddleware, AuthMiddleware)
|
|
32
|
+
* async myTool(input: Record<string, unknown>, context: ExecutionContext) { }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export function UseMiddleware(...middlewares) {
|
|
36
|
+
return (target, propertyKey, descriptor) => {
|
|
37
|
+
const existingMiddlewares = Reflect.getMetadata(MIDDLEWARE_KEY, target, propertyKey) || [];
|
|
38
|
+
Reflect.defineMetadata(MIDDLEWARE_KEY, [...existingMiddlewares, ...middlewares], target, propertyKey);
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get middlewares for a method
|
|
43
|
+
*/
|
|
44
|
+
export function getMiddlewareMetadata(target, propertyKey) {
|
|
45
|
+
return Reflect.getMetadata(MIDDLEWARE_KEY, target, propertyKey) || [];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if a class is marked as middleware
|
|
49
|
+
*/
|
|
50
|
+
export function isMiddleware(target) {
|
|
51
|
+
return Reflect.getMetadata(IS_MIDDLEWARE_KEY, target) === true;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=middleware.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.decorator.js","sourceRoot":"","sources":["../../../src/core/middleware/middleware.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAC/C,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAErD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,MAAc,EAAE,EAAE;QACxB,OAAO,CAAC,cAAc,CAAC,iBAAiB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,GAAG,WAAoC;IACnE,OAAO,CAAC,MAAc,EAAE,WAA4B,EAAE,UAA8B,EAAE,EAAE;QACtF,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;QAC3F,OAAO,CAAC,cAAc,CACpB,cAAc,EACd,CAAC,GAAG,mBAAmB,EAAE,GAAG,WAAW,CAAC,EACxC,MAAM,EACN,WAAW,CACZ,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc,EAAE,WAA4B;IAChF,OAAO,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { ExecutionContext } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Middleware Interface
|
|
5
|
+
*
|
|
6
|
+
* Middleware can intercept tool execution for cross-cutting concerns
|
|
7
|
+
* like logging, authentication, validation, etc.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* @Middleware()
|
|
12
|
+
* export class LoggingMiddleware implements MiddlewareInterface {
|
|
13
|
+
* async use(context: ExecutionContext, next: () => Promise<unknown>) {
|
|
14
|
+
* console.log('Before:', context.toolName);
|
|
15
|
+
* const result = await next();
|
|
16
|
+
* console.log('After:', context.toolName);
|
|
17
|
+
* return result;
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export interface MiddlewareInterface {
|
|
23
|
+
use(context: ExecutionContext, next: () => Promise<unknown>): Promise<unknown>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Middleware constructor type
|
|
27
|
+
*/
|
|
28
|
+
export type MiddlewareConstructor = new (...args: unknown[]) => MiddlewareInterface;
|
|
29
|
+
//# sourceMappingURL=middleware.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.interface.d.ts","sourceRoot":"","sources":["../../../src/core/middleware/middleware.interface.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChF;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.interface.js","sourceRoot":"","sources":["../../../src/core/middleware/middleware.interface.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import type { ClassConstructor } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Module metadata key
|
|
5
|
+
*/
|
|
6
|
+
export declare const MODULE_METADATA: unique symbol;
|
|
7
|
+
/**
|
|
8
|
+
* Provider definition for dependency injection
|
|
9
|
+
*/
|
|
10
|
+
export interface Provider {
|
|
11
|
+
provide: string | symbol | ClassConstructor;
|
|
12
|
+
useValue?: unknown;
|
|
13
|
+
useClass?: ClassConstructor;
|
|
14
|
+
useFactory?: (...args: unknown[]) => unknown;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Dynamic module definition (for configurable modules)
|
|
18
|
+
*/
|
|
19
|
+
export interface DynamicModule {
|
|
20
|
+
module?: ClassConstructor;
|
|
21
|
+
providers?: (ClassConstructor | Provider)[];
|
|
22
|
+
exports?: (ClassConstructor | string | symbol)[];
|
|
23
|
+
controllers?: ClassConstructor[];
|
|
24
|
+
imports?: ModuleImport[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Type for module imports - can be a class or a dynamic module configuration
|
|
28
|
+
*/
|
|
29
|
+
export type ModuleImport = ClassConstructor | DynamicModule;
|
|
30
|
+
/**
|
|
31
|
+
* Module metadata interface
|
|
32
|
+
*/
|
|
33
|
+
export interface ModuleMetadata {
|
|
34
|
+
/** Module name */
|
|
35
|
+
name: string;
|
|
36
|
+
/** Module description */
|
|
37
|
+
description?: string;
|
|
38
|
+
/** Controllers (classes with @Tool, @Resource, @Prompt decorators) */
|
|
39
|
+
controllers?: ClassConstructor[];
|
|
40
|
+
/** Services (dependency injection) */
|
|
41
|
+
providers?: (ClassConstructor | Provider)[];
|
|
42
|
+
/** Other modules to import */
|
|
43
|
+
imports?: ModuleImport[];
|
|
44
|
+
/** Items to export to other modules */
|
|
45
|
+
exports?: (ClassConstructor | string | symbol)[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Module class (internal)
|
|
49
|
+
*/
|
|
50
|
+
declare class ModuleClass {
|
|
51
|
+
metadata: ModuleMetadata;
|
|
52
|
+
constructor(metadata: ModuleMetadata);
|
|
53
|
+
/**
|
|
54
|
+
* Get all controllers from this module
|
|
55
|
+
*/
|
|
56
|
+
getControllers(): ClassConstructor[];
|
|
57
|
+
/**
|
|
58
|
+
* Get module name
|
|
59
|
+
*/
|
|
60
|
+
getName(): string;
|
|
61
|
+
/**
|
|
62
|
+
* Get module description
|
|
63
|
+
*/
|
|
64
|
+
getDescription(): string | undefined;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Module decorator - Defines a module with controllers, providers, imports
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* @Module({
|
|
72
|
+
* name: 'auth',
|
|
73
|
+
* description: 'Authentication module',
|
|
74
|
+
* controllers: [AuthController],
|
|
75
|
+
* })
|
|
76
|
+
* export class AuthModule {}
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare function ModuleDecorator(metadata: ModuleMetadata): <T extends new (...args: any[]) => object>(constructor: T) => T;
|
|
80
|
+
export { ModuleDecorator as Module };
|
|
81
|
+
/**
|
|
82
|
+
* Create a module instance from a class
|
|
83
|
+
*/
|
|
84
|
+
export declare function createModule(moduleClass: ClassConstructor): ModuleClass;
|
|
85
|
+
/**
|
|
86
|
+
* Check if a class is a module
|
|
87
|
+
*/
|
|
88
|
+
export declare function isModule(target: ClassConstructor): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Get module metadata from a class
|
|
91
|
+
*/
|
|
92
|
+
export declare function getModuleMetadata(target: ClassConstructor): ModuleMetadata | undefined;
|
|
93
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/core/module.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;GAEG;AACH,eAAO,MAAM,eAAe,eAA4B,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,CAAC,gBAAgB,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,gBAAgB,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACjD,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,aAAa,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IAEb,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sEAAsE;IACtE,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEjC,sCAAsC;IACtC,SAAS,CAAC,EAAE,CAAC,gBAAgB,GAAG,QAAQ,CAAC,EAAE,CAAC;IAE5C,8BAA8B;IAC9B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IAEzB,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,gBAAgB,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CAClD;AAED;;GAEG;AACH,cAAM,WAAW;IACI,QAAQ,EAAE,cAAc;gBAAxB,QAAQ,EAAE,cAAc;IAE3C;;OAEG;IACH,cAAc,IAAI,gBAAgB,EAAE;IAIpC;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,SAAS;CAGrC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,IAErC,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,EAAE,aAAa,CAAC,KAAG,CAAC,CAmB9E;AAGD,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,CAAC;AAErC;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,gBAAgB,GAAG,WAAW,CAMvE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAE1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,GAAG,SAAS,CAEtF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
/**
|
|
3
|
+
* Module metadata key
|
|
4
|
+
*/
|
|
5
|
+
export const MODULE_METADATA = Symbol('module:metadata');
|
|
6
|
+
/**
|
|
7
|
+
* Module class (internal)
|
|
8
|
+
*/
|
|
9
|
+
class ModuleClass {
|
|
10
|
+
metadata;
|
|
11
|
+
constructor(metadata) {
|
|
12
|
+
this.metadata = metadata;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get all controllers from this module
|
|
16
|
+
*/
|
|
17
|
+
getControllers() {
|
|
18
|
+
return this.metadata.controllers || [];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get module name
|
|
22
|
+
*/
|
|
23
|
+
getName() {
|
|
24
|
+
return this.metadata.name;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get module description
|
|
28
|
+
*/
|
|
29
|
+
getDescription() {
|
|
30
|
+
return this.metadata.description;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Module decorator - Defines a module with controllers, providers, imports
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* @Module({
|
|
39
|
+
* name: 'auth',
|
|
40
|
+
* description: 'Authentication module',
|
|
41
|
+
* controllers: [AuthController],
|
|
42
|
+
* })
|
|
43
|
+
* export class AuthModule {}
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export function ModuleDecorator(metadata) {
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
48
|
+
return function (constructor) {
|
|
49
|
+
// Store metadata on the class
|
|
50
|
+
Reflect.defineMetadata(MODULE_METADATA, metadata, constructor);
|
|
51
|
+
// Return the constructor with static method
|
|
52
|
+
const enhanced = constructor;
|
|
53
|
+
// Add static method
|
|
54
|
+
Object.defineProperty(enhanced, 'getMetadata', {
|
|
55
|
+
value: () => Reflect.getMetadata(MODULE_METADATA, constructor) || metadata,
|
|
56
|
+
writable: false,
|
|
57
|
+
enumerable: false,
|
|
58
|
+
configurable: false,
|
|
59
|
+
});
|
|
60
|
+
return enhanced;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Export as "Module" for decorator usage
|
|
64
|
+
export { ModuleDecorator as Module };
|
|
65
|
+
/**
|
|
66
|
+
* Create a module instance from a class
|
|
67
|
+
*/
|
|
68
|
+
export function createModule(moduleClass) {
|
|
69
|
+
const metadata = Reflect.getMetadata(MODULE_METADATA, moduleClass);
|
|
70
|
+
if (!metadata) {
|
|
71
|
+
throw new Error(`Class ${moduleClass.name} is not decorated with @Module`);
|
|
72
|
+
}
|
|
73
|
+
return new ModuleClass(metadata);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if a class is a module
|
|
77
|
+
*/
|
|
78
|
+
export function isModule(target) {
|
|
79
|
+
return Reflect.hasMetadata(MODULE_METADATA, target);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get module metadata from a class
|
|
83
|
+
*/
|
|
84
|
+
export function getModuleMetadata(target) {
|
|
85
|
+
return Reflect.getMetadata(MODULE_METADATA, target);
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/core/module.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAmDzD;;GAEG;AACH,MAAM,WAAW;IACI;IAAnB,YAAmB,QAAwB;QAAxB,aAAQ,GAAR,QAAQ,CAAgB;IAAG,CAAC;IAE/C;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IACnC,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,QAAwB;IACtD,8DAA8D;IAC9D,OAAO,UAAoD,WAAc;QACvE,8BAA8B;QAC9B,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE/D,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,WAEhB,CAAC;QAEF,oBAAoB;QACpB,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE;YAC7C,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,IAAI,QAAQ;YAC1E,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC;AAED,yCAAyC;AACzC,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,CAAC;AAErC;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAA6B;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,WAAW,CAA+B,CAAC;IACjG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,SAAS,WAAW,CAAC,IAAI,gCAAgC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAwB;IAC/C,OAAO,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAwB;IACxD,OAAO,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAA+B,CAAC;AACpF,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
/**
|
|
3
|
+
* OAuth 2.1 Module Configuration
|
|
4
|
+
*
|
|
5
|
+
* Compliant with:
|
|
6
|
+
* - OAuth 2.1 (draft-ietf-oauth-v2-1-13)
|
|
7
|
+
* - RFC 9728 - Protected Resource Metadata
|
|
8
|
+
* - RFC 8414 - Authorization Server Metadata
|
|
9
|
+
* - RFC 7591 - Dynamic Client Registration
|
|
10
|
+
* - RFC 8707 - Resource Indicators (Token Audience Binding)
|
|
11
|
+
* - RFC 7636 - PKCE
|
|
12
|
+
* - RFC 7662 - Token Introspection
|
|
13
|
+
*/
|
|
14
|
+
export interface OAuthModuleConfig {
|
|
15
|
+
/**
|
|
16
|
+
* Resource URI - The MCP server's public URL
|
|
17
|
+
* Used for token audience validation (RFC 8707)
|
|
18
|
+
*/
|
|
19
|
+
resourceUri: string;
|
|
20
|
+
/**
|
|
21
|
+
* Authorization Server(s)
|
|
22
|
+
* The OAuth 2.1 authorization server URLs
|
|
23
|
+
*/
|
|
24
|
+
authorizationServers: string[];
|
|
25
|
+
/**
|
|
26
|
+
* Supported scopes for this MCP server
|
|
27
|
+
* Example: ['mcp:read', 'mcp:write', 'tools:execute']
|
|
28
|
+
*/
|
|
29
|
+
scopesSupported?: string[];
|
|
30
|
+
/**
|
|
31
|
+
* HTTP server configuration
|
|
32
|
+
* OAuth requires HTTP transport - port will be extracted from resourceUri or use this
|
|
33
|
+
*/
|
|
34
|
+
http?: {
|
|
35
|
+
port?: number;
|
|
36
|
+
host?: string;
|
|
37
|
+
basePath?: string;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Token Introspection Endpoint (RFC 7662)
|
|
41
|
+
* Required for validating opaque tokens
|
|
42
|
+
*/
|
|
43
|
+
tokenIntrospectionEndpoint?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Client ID for token introspection
|
|
46
|
+
*/
|
|
47
|
+
tokenIntrospectionClientId?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Client Secret for token introspection
|
|
50
|
+
* Should be stored in environment variable
|
|
51
|
+
*/
|
|
52
|
+
tokenIntrospectionClientSecret?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Expected audience for tokens (RFC 8707)
|
|
55
|
+
* If not provided, defaults to resourceUri
|
|
56
|
+
*/
|
|
57
|
+
audience?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Issuer validation
|
|
60
|
+
* If provided, tokens must be from this issuer
|
|
61
|
+
*/
|
|
62
|
+
issuer?: string;
|
|
63
|
+
/**
|
|
64
|
+
* Custom token validation
|
|
65
|
+
* Additional validation logic beyond spec requirements
|
|
66
|
+
*/
|
|
67
|
+
customValidation?: (token: unknown) => Promise<boolean> | boolean;
|
|
68
|
+
}
|
|
69
|
+
import { NitroStackServer } from './server.js';
|
|
70
|
+
import { Logger } from './types.js';
|
|
71
|
+
export declare class OAuthModule {
|
|
72
|
+
private config;
|
|
73
|
+
private server;
|
|
74
|
+
private logger;
|
|
75
|
+
private static config;
|
|
76
|
+
private discoveryServer;
|
|
77
|
+
private wellKnownHandler;
|
|
78
|
+
private resourceMetadataHandler;
|
|
79
|
+
constructor(config: OAuthModuleConfig, server: NitroStackServer, logger: Logger);
|
|
80
|
+
onModuleInit(): void;
|
|
81
|
+
start(): Promise<void>;
|
|
82
|
+
stop(): Promise<void>;
|
|
83
|
+
private registerDiscoveryHandlers;
|
|
84
|
+
/**
|
|
85
|
+
* Configure OAuth module for the application
|
|
86
|
+
*/
|
|
87
|
+
static forRoot(config: OAuthModuleConfig): {
|
|
88
|
+
module: typeof OAuthModule;
|
|
89
|
+
providers: {
|
|
90
|
+
provide: string;
|
|
91
|
+
useValue: OAuthModuleConfig;
|
|
92
|
+
}[];
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Get current OAuth configuration
|
|
96
|
+
*/
|
|
97
|
+
static getConfig(): OAuthModuleConfig | null;
|
|
98
|
+
/**
|
|
99
|
+
* Validate an access token
|
|
100
|
+
*
|
|
101
|
+
* Performs:
|
|
102
|
+
* 1. Token introspection (if endpoint configured)
|
|
103
|
+
* 2. Audience validation (RFC 8807)
|
|
104
|
+
* 3. Issuer validation (if configured)
|
|
105
|
+
* 4. Custom validation (if configured)
|
|
106
|
+
*/
|
|
107
|
+
static validateToken(token: string): Promise<{
|
|
108
|
+
valid: boolean;
|
|
109
|
+
payload?: Record<string, unknown>;
|
|
110
|
+
error?: string;
|
|
111
|
+
}>;
|
|
112
|
+
/**
|
|
113
|
+
* Introspect token using RFC 7662
|
|
114
|
+
* @private
|
|
115
|
+
*/
|
|
116
|
+
private static introspectToken;
|
|
117
|
+
/**
|
|
118
|
+
* Decode JWT token (without validation)
|
|
119
|
+
* @private
|
|
120
|
+
*/
|
|
121
|
+
private static decodeToken;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=oauth-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-module.d.ts","sourceRoot":"","sources":["../../src/core/oauth-module.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAE/B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;OAGG;IACH,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF;;;OAGG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IAEpC;;OAEG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IAEpC;;;OAGG;IACH,8BAA8B,CAAC,EAAE,MAAM,CAAC;IAExC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACnE;AA2CD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGpC,qBACa,WAAW;IA8BI,OAAO,CAAC,MAAM;IACtC,OAAO,CAAC,MAAM;IACI,OAAO,CAAC,MAAM;IA/BlC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAkC;IACvD,OAAO,CAAC,eAAe,CAAoC;IAE3D,OAAO,CAAC,gBAAgB,CAOtB;IAEF,OAAO,CAAC,uBAAuB,CAc7B;gBAGgC,MAAM,EAAE,iBAAiB,EACjD,MAAM,EAAE,gBAAgB,EACN,MAAM,EAAE,MAAM;IAKnC,YAAY;IAKN,KAAK;IAmCL,IAAI;IAOjB,OAAO,CAAC,yBAAyB;IAKjC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG;QAAE,MAAM,EAAE,OAAO,WAAW,CAAC;QAAC,SAAS,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,iBAAiB,CAAA;SAAE,EAAE,CAAA;KAAE;IAyBxI;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,iBAAiB,GAAG,IAAI;IAI5C;;;;;;;;OAQG;WACU,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QACjD,KAAK,EAAE,OAAO,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IA2EF;;;OAGG;mBACkB,eAAe;IAyDpC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;CAyB3B"}
|