@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.
Files changed (76) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/LICENSE.md +30 -0
  3. package/README.md +324 -0
  4. package/dist/__tests__/test-helpers.d.ts +17 -0
  5. package/dist/__tests__/test-helpers.d.ts.map +1 -0
  6. package/dist/constants.d.ts +34 -0
  7. package/dist/constants.d.ts.map +1 -0
  8. package/dist/controllers/index.d.ts +3 -0
  9. package/dist/controllers/index.d.ts.map +1 -0
  10. package/dist/controllers/mastra.controller.d.ts +54 -0
  11. package/dist/controllers/mastra.controller.d.ts.map +1 -0
  12. package/dist/controllers/system.controller.d.ts +45 -0
  13. package/dist/controllers/system.controller.d.ts.map +1 -0
  14. package/dist/decorators/index.d.ts +3 -0
  15. package/dist/decorators/index.d.ts.map +1 -0
  16. package/dist/decorators/public.decorator.d.ts +17 -0
  17. package/dist/decorators/public.decorator.d.ts.map +1 -0
  18. package/dist/decorators/throttle.decorator.d.ts +34 -0
  19. package/dist/decorators/throttle.decorator.d.ts.map +1 -0
  20. package/dist/filters/index.d.ts +2 -0
  21. package/dist/filters/index.d.ts.map +1 -0
  22. package/dist/filters/mastra-exception.filter.d.ts +28 -0
  23. package/dist/filters/mastra-exception.filter.d.ts.map +1 -0
  24. package/dist/guards/index.d.ts +3 -0
  25. package/dist/guards/index.d.ts.map +1 -0
  26. package/dist/guards/mastra-auth.guard.d.ts +42 -0
  27. package/dist/guards/mastra-auth.guard.d.ts.map +1 -0
  28. package/dist/guards/mastra-route.guard.d.ts +23 -0
  29. package/dist/guards/mastra-route.guard.d.ts.map +1 -0
  30. package/dist/guards/mastra-throttle.guard.d.ts +53 -0
  31. package/dist/guards/mastra-throttle.guard.d.ts.map +1 -0
  32. package/dist/index.cjs +14298 -0
  33. package/dist/index.cjs.map +1 -0
  34. package/dist/index.d.ts +23 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +14284 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/interceptors/index.d.ts +3 -0
  39. package/dist/interceptors/index.d.ts.map +1 -0
  40. package/dist/interceptors/request-tracking.interceptor.d.ts +13 -0
  41. package/dist/interceptors/request-tracking.interceptor.d.ts.map +1 -0
  42. package/dist/interceptors/streaming.interceptor.d.ts +40 -0
  43. package/dist/interceptors/streaming.interceptor.d.ts.map +1 -0
  44. package/dist/interceptors/tracing.interceptor.d.ts +12 -0
  45. package/dist/interceptors/tracing.interceptor.d.ts.map +1 -0
  46. package/dist/mastra-server.adapter.d.ts +10 -0
  47. package/dist/mastra-server.adapter.d.ts.map +1 -0
  48. package/dist/mastra.module.d.ts +173 -0
  49. package/dist/mastra.module.d.ts.map +1 -0
  50. package/dist/mastra.service.d.ts +51 -0
  51. package/dist/mastra.service.d.ts.map +1 -0
  52. package/dist/middleware/body-limit.middleware.d.ts +24 -0
  53. package/dist/middleware/body-limit.middleware.d.ts.map +1 -0
  54. package/dist/middleware/index.d.ts +3 -0
  55. package/dist/middleware/index.d.ts.map +1 -0
  56. package/dist/middleware/json-body.middleware.d.ts +17 -0
  57. package/dist/middleware/json-body.middleware.d.ts.map +1 -0
  58. package/dist/services/auth.service.d.ts +34 -0
  59. package/dist/services/auth.service.d.ts.map +1 -0
  60. package/dist/services/index.d.ts +5 -0
  61. package/dist/services/index.d.ts.map +1 -0
  62. package/dist/services/request-context.service.d.ts +52 -0
  63. package/dist/services/request-context.service.d.ts.map +1 -0
  64. package/dist/services/route-handler.service.d.ts +78 -0
  65. package/dist/services/route-handler.service.d.ts.map +1 -0
  66. package/dist/services/shutdown.service.d.ts +54 -0
  67. package/dist/services/shutdown.service.d.ts.map +1 -0
  68. package/dist/utils/constants.d.ts +3 -0
  69. package/dist/utils/constants.d.ts.map +1 -0
  70. package/dist/utils/format.d.ts +5 -0
  71. package/dist/utils/format.d.ts.map +1 -0
  72. package/dist/utils/parse-multipart.d.ts +18 -0
  73. package/dist/utils/parse-multipart.d.ts.map +1 -0
  74. package/dist/utils/route-path.d.ts +6 -0
  75. package/dist/utils/route-path.d.ts.map +1 -0
  76. 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,2 @@
1
+ export { MastraExceptionFilter } from './mastra-exception.filter.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export { MastraAuthGuard } from './mastra-auth.guard.js';
2
+ export { MastraThrottleGuard } from './mastra-throttle.guard.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}