@mastra/nestjs 0.0.0-studio-cli-20260504022012
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 +79 -0
- package/LICENSE.md +30 -0
- package/README.md +324 -0
- package/dist/__tests__/test-helpers.d.ts +17 -0
- package/dist/__tests__/test-helpers.d.ts.map +1 -0
- package/dist/constants.d.ts +34 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/controllers/index.d.ts +3 -0
- package/dist/controllers/index.d.ts.map +1 -0
- package/dist/controllers/mastra.controller.d.ts +54 -0
- package/dist/controllers/mastra.controller.d.ts.map +1 -0
- package/dist/controllers/system.controller.d.ts +45 -0
- package/dist/controllers/system.controller.d.ts.map +1 -0
- package/dist/decorators/index.d.ts +3 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/public.decorator.d.ts +17 -0
- package/dist/decorators/public.decorator.d.ts.map +1 -0
- package/dist/decorators/throttle.decorator.d.ts +34 -0
- package/dist/decorators/throttle.decorator.d.ts.map +1 -0
- package/dist/filters/index.d.ts +2 -0
- package/dist/filters/index.d.ts.map +1 -0
- package/dist/filters/mastra-exception.filter.d.ts +28 -0
- package/dist/filters/mastra-exception.filter.d.ts.map +1 -0
- package/dist/guards/index.d.ts +3 -0
- package/dist/guards/index.d.ts.map +1 -0
- package/dist/guards/mastra-auth.guard.d.ts +42 -0
- package/dist/guards/mastra-auth.guard.d.ts.map +1 -0
- package/dist/guards/mastra-route.guard.d.ts +23 -0
- package/dist/guards/mastra-route.guard.d.ts.map +1 -0
- package/dist/guards/mastra-throttle.guard.d.ts +53 -0
- package/dist/guards/mastra-throttle.guard.d.ts.map +1 -0
- package/dist/index.cjs +14298 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14284 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptors/index.d.ts +3 -0
- package/dist/interceptors/index.d.ts.map +1 -0
- package/dist/interceptors/request-tracking.interceptor.d.ts +13 -0
- package/dist/interceptors/request-tracking.interceptor.d.ts.map +1 -0
- package/dist/interceptors/streaming.interceptor.d.ts +40 -0
- package/dist/interceptors/streaming.interceptor.d.ts.map +1 -0
- package/dist/interceptors/tracing.interceptor.d.ts +12 -0
- package/dist/interceptors/tracing.interceptor.d.ts.map +1 -0
- package/dist/mastra-server.adapter.d.ts +10 -0
- package/dist/mastra-server.adapter.d.ts.map +1 -0
- package/dist/mastra.module.d.ts +173 -0
- package/dist/mastra.module.d.ts.map +1 -0
- package/dist/mastra.service.d.ts +51 -0
- package/dist/mastra.service.d.ts.map +1 -0
- package/dist/middleware/body-limit.middleware.d.ts +24 -0
- package/dist/middleware/body-limit.middleware.d.ts.map +1 -0
- package/dist/middleware/index.d.ts +3 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/json-body.middleware.d.ts +17 -0
- package/dist/middleware/json-body.middleware.d.ts.map +1 -0
- package/dist/services/auth.service.d.ts +34 -0
- package/dist/services/auth.service.d.ts.map +1 -0
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/request-context.service.d.ts +52 -0
- package/dist/services/request-context.service.d.ts.map +1 -0
- package/dist/services/route-handler.service.d.ts +78 -0
- package/dist/services/route-handler.service.d.ts.map +1 -0
- package/dist/services/shutdown.service.d.ts +54 -0
- package/dist/services/shutdown.service.d.ts.map +1 -0
- package/dist/utils/constants.d.ts +3 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/format.d.ts +5 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/parse-multipart.d.ts +18 -0
- package/dist/utils/parse-multipart.d.ts.map +1 -0
- package/dist/utils/route-path.d.ts +6 -0
- package/dist/utils/route-path.d.ts.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface ThrottleOptions {
|
|
2
|
+
/** Maximum number of requests in the window */
|
|
3
|
+
limit: number;
|
|
4
|
+
/** Time window in milliseconds */
|
|
5
|
+
windowMs: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Decorator to set custom rate limits for a route.
|
|
9
|
+
* Overrides the default rate limits from MastraModuleOptions.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* @Post('generate')
|
|
14
|
+
* @MastraThrottle({ limit: 5, windowMs: 60000 }) // 5 requests per minute
|
|
15
|
+
* async generate(@Body() body: GenerateDto) {
|
|
16
|
+
* // ...
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare const MastraThrottle: (options: ThrottleOptions) => import("@nestjs/common").CustomDecorator<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Decorator to skip rate limiting for a route.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* @Get('health')
|
|
27
|
+
* @SkipThrottle()
|
|
28
|
+
* check() {
|
|
29
|
+
* return { status: 'ok' };
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare const SkipThrottle: () => import("@nestjs/common").CustomDecorator<string>;
|
|
34
|
+
//# sourceMappingURL=throttle.decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"throttle.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/throttle.decorator.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS,eAAe,qDAAuC,CAAC;AAE/F;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,wDAAkD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/filters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ArgumentsHost, ExceptionFilter } from '@nestjs/common';
|
|
2
|
+
/**
|
|
3
|
+
* Global exception filter that normalizes all errors to a consistent format.
|
|
4
|
+
*
|
|
5
|
+
* Response format:
|
|
6
|
+
* ```json
|
|
7
|
+
* {
|
|
8
|
+
* "error": "Error message",
|
|
9
|
+
* "code": "ERROR_CODE",
|
|
10
|
+
* "issues": [{ "field": "fieldName", "message": "..." }],
|
|
11
|
+
* "requestId": "...",
|
|
12
|
+
* "timestamp": "..."
|
|
13
|
+
* }
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare class MastraExceptionFilter implements ExceptionFilter {
|
|
17
|
+
private readonly logger;
|
|
18
|
+
catch(exception: unknown, host: ArgumentsHost): void;
|
|
19
|
+
/**
|
|
20
|
+
* Normalize any error type to a consistent format.
|
|
21
|
+
*/
|
|
22
|
+
private normalizeError;
|
|
23
|
+
/**
|
|
24
|
+
* Get error code from HTTP status.
|
|
25
|
+
*/
|
|
26
|
+
private getErrorCode;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=mastra-exception.filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mastra-exception.filter.d.ts","sourceRoot":"","sources":["../../src/filters/mastra-exception.filter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAyBrE;;;;;;;;;;;;;GAaG;AACH,qBACa,qBAAsB,YAAW,eAAe;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IAEjE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;IAkCpD;;OAEG;IACH,OAAO,CAAC,cAAc;IAgHtB;;OAEG;IACH,OAAO,CAAC,YAAY;CAkCrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { CanActivate, ExecutionContext } from '@nestjs/common';
|
|
2
|
+
import { Reflector } from '@nestjs/core';
|
|
3
|
+
import { AuthService } from '../services/auth.service.js';
|
|
4
|
+
/**
|
|
5
|
+
* Guard that bridges to Mastra's authentication system.
|
|
6
|
+
* Checks for @Public() decorator to skip auth.
|
|
7
|
+
*
|
|
8
|
+
* **IMPORTANT: This guard is for custom user routes, NOT for Mastra API routes.**
|
|
9
|
+
*
|
|
10
|
+
* Mastra routes (agents, workflows, etc.) use AuthService internally which has
|
|
11
|
+
* access to route-specific auth configuration (customRouteAuthConfig, isProtectedPath,
|
|
12
|
+
* canAccessPublicly). This guard is a simplified version for when you want to
|
|
13
|
+
* protect your own NestJS routes with Mastra's auth config.
|
|
14
|
+
*
|
|
15
|
+
* Differences from AuthService (used internally for Mastra routes):
|
|
16
|
+
* - Does NOT check `customRouteAuthConfig`
|
|
17
|
+
* - Does NOT check `isProtectedPath` / `canAccessPublicly` from @mastra/server/auth
|
|
18
|
+
* - Has simpler dev playground detection (just checks header + config)
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* // Protect a custom route with Mastra auth
|
|
23
|
+
* @Controller('my-custom')
|
|
24
|
+
* @UseGuards(MastraAuthGuard)
|
|
25
|
+
* export class MyController {
|
|
26
|
+
* @Get('protected')
|
|
27
|
+
* protectedRoute() { ... }
|
|
28
|
+
*
|
|
29
|
+
* @Get('open')
|
|
30
|
+
* @Public() // Skip auth for this route
|
|
31
|
+
* openRoute() { ... }
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare class MastraAuthGuard implements CanActivate {
|
|
36
|
+
private readonly reflector;
|
|
37
|
+
private readonly authService;
|
|
38
|
+
private readonly logger;
|
|
39
|
+
constructor(reflector: Reflector, authService: AuthService);
|
|
40
|
+
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=mastra-auth.guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mastra-auth.guard.d.ts","sourceRoot":"","sources":["../../src/guards/mastra-auth.guard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBACa,eAAgB,YAAW,WAAW;IAI5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAGrB,SAAS,EAAE,SAAS,EAClB,WAAW,EAAE,WAAW;IAG1D,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CAoB/D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Mastra } from '@mastra/core/mastra';
|
|
2
|
+
import type { CanActivate, ExecutionContext } from '@nestjs/common';
|
|
3
|
+
import type { MastraModuleOptions } from '../mastra.module.js';
|
|
4
|
+
import { AuthService } from '../services/auth.service.js';
|
|
5
|
+
import { RequestContextService } from '../services/request-context.service.js';
|
|
6
|
+
import { RouteHandlerService } from '../services/route-handler.service.js';
|
|
7
|
+
import { MastraThrottleGuard } from './mastra-throttle.guard.js';
|
|
8
|
+
/**
|
|
9
|
+
* Guard for Mastra routes handled by MastraController.
|
|
10
|
+
* Runs route matching to avoid authenticating non-Mastra paths,
|
|
11
|
+
* then enforces auth + rate limiting for matched Mastra routes.
|
|
12
|
+
*/
|
|
13
|
+
export declare class MastraRouteGuard implements CanActivate {
|
|
14
|
+
private readonly mastra;
|
|
15
|
+
private readonly options;
|
|
16
|
+
private readonly routeHandler;
|
|
17
|
+
private readonly requestContext;
|
|
18
|
+
private readonly authService;
|
|
19
|
+
private readonly throttleGuard;
|
|
20
|
+
constructor(mastra: Mastra, options: MastraModuleOptions, routeHandler: RouteHandlerService, requestContext: RequestContextService, authService: AuthService, throttleGuard: MastraThrottleGuard);
|
|
21
|
+
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=mastra-route.guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mastra-route.guard.d.ts","sourceRoot":"","sources":["../../src/guards/mastra-route.guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAIpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D;;;;GAIG;AACH,qBACa,gBAAiB,YAAW,WAAW;IAEhC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;IACnB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW;IACpB,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAL1B,MAAM,EAAE,MAAM,EACN,OAAO,EAAE,mBAAmB,EACvB,YAAY,EAAE,mBAAmB,EAC/B,cAAc,EAAE,qBAAqB,EAC/C,WAAW,EAAE,WAAW,EAChB,aAAa,EAAE,mBAAmB;IAG5E,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CA4B/D"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { CanActivate, ExecutionContext, OnModuleDestroy } from '@nestjs/common';
|
|
2
|
+
import { Reflector } from '@nestjs/core';
|
|
3
|
+
import type { Request } from 'express';
|
|
4
|
+
import type { ThrottleOptions } from '../decorators/throttle.decorator.js';
|
|
5
|
+
import type { MastraModuleOptions } from '../mastra.module.js';
|
|
6
|
+
/**
|
|
7
|
+
* Guard that implements rate limiting.
|
|
8
|
+
* Rate limiting is ON by default - set rateLimitOptions.enabled: false to disable.
|
|
9
|
+
*/
|
|
10
|
+
export declare class MastraThrottleGuard implements CanActivate, OnModuleDestroy {
|
|
11
|
+
private readonly options;
|
|
12
|
+
private readonly reflector;
|
|
13
|
+
private readonly logger;
|
|
14
|
+
private readonly store;
|
|
15
|
+
private cleanupInterval;
|
|
16
|
+
constructor(options: MastraModuleOptions, reflector: Reflector);
|
|
17
|
+
/**
|
|
18
|
+
* Clean up the interval when the module is destroyed.
|
|
19
|
+
*/
|
|
20
|
+
onModuleDestroy(): void;
|
|
21
|
+
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
22
|
+
/**
|
|
23
|
+
* Check rate limit for a request.
|
|
24
|
+
* Can be called directly from controllers for manual rate limiting.
|
|
25
|
+
*/
|
|
26
|
+
checkLimit(request: Request, limit: number, windowMs: number, rateLimitPath?: string): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Get rate limit settings for this request.
|
|
29
|
+
*/
|
|
30
|
+
getRateLimitSettings(request: Request, decoratorOptions?: ThrottleOptions, rateLimitPath?: string): {
|
|
31
|
+
limit: number;
|
|
32
|
+
windowMs: number;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Get client identifier for rate limiting.
|
|
36
|
+
* Uses user ID if authenticated, IP address otherwise.
|
|
37
|
+
*
|
|
38
|
+
* Security note: X-Forwarded-For is only trusted when the app is configured
|
|
39
|
+
* with 'trust proxy' in Express. Without that setting, we use the direct
|
|
40
|
+
* connection IP to prevent header spoofing attacks.
|
|
41
|
+
*/
|
|
42
|
+
private getClientId;
|
|
43
|
+
/**
|
|
44
|
+
* Evict oldest entries when store exceeds max size.
|
|
45
|
+
* Uses a simple LRU-like approach based on resetAt time.
|
|
46
|
+
*/
|
|
47
|
+
private evictOldestEntries;
|
|
48
|
+
/**
|
|
49
|
+
* Clean up expired entries from the store.
|
|
50
|
+
*/
|
|
51
|
+
private cleanupExpiredEntries;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=mastra-throttle.guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mastra-throttle.guard.d.ts","sourceRoot":"","sources":["../../src/guards/mastra-throttle.guard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAa5D;;;GAGG;AACH,qBACa,mBAAoB,YAAW,WAAW,EAAE,eAAe;IAM5C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAN/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;IAC1D,OAAO,CAAC,eAAe,CAA+C;gBAG3B,OAAO,EAAE,mBAAmB,EACjC,SAAS,EAAE,SAAS;IAM1D;;OAEG;IACH,eAAe,IAAI,IAAI;IAQjB,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAsB9D;;;OAGG;IACG,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0C1G;;OAEG;IACH,oBAAoB,CAClB,OAAO,EAAE,OAAO,EAChB,gBAAgB,CAAC,EAAE,eAAe,EAClC,aAAa,CAAC,EAAE,MAAM,GACrB;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAuBtC;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;IAcnB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAe9B"}
|