@pltn/adonis-mastra-server-adapter 0.1.1
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/README.md +50 -0
- package/dist/adonis_server_adapter.d.ts +51 -0
- package/dist/adonis_server_adapter.d.ts.map +1 -0
- package/dist/adonis_server_adapter.js +477 -0
- package/dist/adonis_server_adapter.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +50 -0
package/README.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# @pltn/adonis-mastra-server-adapter
|
|
2
|
+
|
|
3
|
+
AdonisJS adapter for Mastra server routes.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm i @pltn/adonis-mastra-server-adapter
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Peer dependencies (install in your app):
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm i @adonisjs/core @mastra/core @mastra/server zod
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import router from '@adonisjs/core/services/router'
|
|
21
|
+
import { mastra } from './mastra/index.js'
|
|
22
|
+
import { registerAdonisMastraServer } from '@pltn/adonis-mastra-server-adapter'
|
|
23
|
+
|
|
24
|
+
await registerAdonisMastraServer({
|
|
25
|
+
router,
|
|
26
|
+
mastra,
|
|
27
|
+
prefix: '/mastra',
|
|
28
|
+
})
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Auth behavior
|
|
32
|
+
|
|
33
|
+
- Uses Adonis session (`ctx.auth.check()`) for protected routes.
|
|
34
|
+
- If route has `requiresAuth !== false` and no session user is present, returns `401`.
|
|
35
|
+
|
|
36
|
+
## Local development
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npm install
|
|
40
|
+
npm run typecheck
|
|
41
|
+
npm run build
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Publish
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm publish --access public
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Before publishing, change package name/scope if needed.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { HttpContext } from '@adonisjs/core/http';
|
|
2
|
+
import type { HttpRouterService } from '@adonisjs/core/types';
|
|
3
|
+
import type { ToolsInput } from '@mastra/core/agent';
|
|
4
|
+
import type { Mastra } from '@mastra/core/mastra';
|
|
5
|
+
import type { ApiRoute } from '@mastra/core/server';
|
|
6
|
+
import { MastraServer, type BodyLimitOptions, type MCPOptions, type ParsedRequestParams, type ServerRoute, type StreamOptions } from '@mastra/server/server-adapter';
|
|
7
|
+
import type { InMemoryTaskStore } from '@mastra/server/a2a/store';
|
|
8
|
+
interface AdonisMastraServerOptions {
|
|
9
|
+
app: HttpRouterService;
|
|
10
|
+
mastra: Mastra;
|
|
11
|
+
prefix?: string;
|
|
12
|
+
openapiPath?: string;
|
|
13
|
+
bodyLimitOptions?: BodyLimitOptions;
|
|
14
|
+
streamOptions?: StreamOptions;
|
|
15
|
+
tools?: ToolsInput;
|
|
16
|
+
taskStore?: InMemoryTaskStore;
|
|
17
|
+
customRouteAuthConfig?: Map<string, boolean>;
|
|
18
|
+
customApiRoutes?: ApiRoute[];
|
|
19
|
+
mcpOptions?: MCPOptions;
|
|
20
|
+
}
|
|
21
|
+
interface RegisterAdonisMastraServerOptions extends Omit<AdonisMastraServerOptions, 'app'> {
|
|
22
|
+
router: HttpRouterService;
|
|
23
|
+
}
|
|
24
|
+
export declare class AdonisMastraServer extends MastraServer<HttpRouterService, HttpContext, HttpContext> {
|
|
25
|
+
registerContextMiddleware(): void;
|
|
26
|
+
registerAuthMiddleware(): void;
|
|
27
|
+
registerCustomApiRoutes(): Promise<void>;
|
|
28
|
+
registerRoute(app: HttpRouterService, route: ServerRoute, { prefix }: {
|
|
29
|
+
prefix?: string;
|
|
30
|
+
}): Promise<void>;
|
|
31
|
+
getParams(route: ServerRoute, request: HttpContext): Promise<ParsedRequestParams>;
|
|
32
|
+
sendResponse(route: ServerRoute, response: HttpContext, result: unknown): Promise<unknown>;
|
|
33
|
+
stream(route: ServerRoute, response: HttpContext, result: unknown): Promise<unknown>;
|
|
34
|
+
private registerAdonisHandler;
|
|
35
|
+
private createRuntimeContext;
|
|
36
|
+
private extractRequestContext;
|
|
37
|
+
private tryParseRequestContext;
|
|
38
|
+
private buildRoutePath;
|
|
39
|
+
private buildAbsoluteRequestUrl;
|
|
40
|
+
private getQueryValue;
|
|
41
|
+
private checkRouteAuthWithAdonisSession;
|
|
42
|
+
private resolveAdonisSessionUser;
|
|
43
|
+
private parsePath;
|
|
44
|
+
private parseQuery;
|
|
45
|
+
private parseRequestBody;
|
|
46
|
+
private handleParseError;
|
|
47
|
+
private resolveErrorStatus;
|
|
48
|
+
}
|
|
49
|
+
export declare function registerAdonisMastraServer({ router, mastra, prefix, openapiPath, bodyLimitOptions, streamOptions, tools, taskStore, customRouteAuthConfig, customApiRoutes, mcpOptions, }: RegisterAdonisMastraServerOptions): Promise<AdonisMastraServer>;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=adonis_server_adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adonis_server_adapter.d.ts","sourceRoot":"","sources":["../src/adonis_server_adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAGnD,OAAO,EACH,YAAY,EAGZ,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,aAAa,EACrB,MAAM,+BAA+B,CAAA;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAGjE,UAAU,yBAAyB;IAC/B,GAAG,EAAE,iBAAiB,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAC7B,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5C,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAA;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAA;CAC1B;AAED,UAAU,iCAAkC,SAAQ,IAAI,CAAC,yBAAyB,EAAE,KAAK,CAAC;IACtF,MAAM,EAAE,iBAAiB,CAAA;CAC5B;AAiBD,qBAAa,kBAAmB,SAAQ,YAAY,CAAC,iBAAiB,EAAE,WAAW,EAAE,WAAW,CAAC;IAC7F,yBAAyB,IAAI,IAAI;IAKjC,sBAAsB,IAAI,IAAI;IAKxB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmDxC,aAAa,CACf,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,WAAW,EAClB,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAChC,OAAO,CAAC,IAAI,CAAC;IA6FV,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAqBjF,YAAY,CACd,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,OAAO,GAChB,OAAO,CAAC,OAAO,CAAC;IAqHb,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAmD1F,OAAO,CAAC,qBAAqB;IA6B7B,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,sBAAsB;IA0B9B,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,aAAa;YAcP,+BAA+B;YA0B/B,wBAAwB;YAkBxB,SAAS;YAaT,UAAU;YAaV,gBAAgB;IAa9B,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,kBAAkB;CAmB7B;AAED,wBAAsB,0BAA0B,CAAC,EAC7C,MAAM,EACN,MAAM,EACN,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,KAAK,EACL,SAAS,EACT,qBAAqB,EACrB,eAAe,EACf,UAAU,GACb,EAAE,iCAAiC,+BAiBnC"}
|
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
import { formatZodError } from '@mastra/server/handlers/error';
|
|
2
|
+
import { MastraServer, normalizeQueryParams, redactStreamChunk, } from '@mastra/server/server-adapter';
|
|
3
|
+
import { ZodError } from 'zod';
|
|
4
|
+
const REQUEST_METHODS_WITH_BODY = new Set(['POST', 'PUT', 'PATCH', 'DELETE']);
|
|
5
|
+
export class AdonisMastraServer extends MastraServer {
|
|
6
|
+
registerContextMiddleware() {
|
|
7
|
+
// Adonis router doesn't accept per-path function middleware registration like Express.
|
|
8
|
+
// Request context is created lazily inside each registered route handler.
|
|
9
|
+
}
|
|
10
|
+
registerAuthMiddleware() {
|
|
11
|
+
// Auth is checked via `checkRouteAuth` inside each route handler.
|
|
12
|
+
// This preserves Mastra auth behavior without Adonis global middleware coupling.
|
|
13
|
+
}
|
|
14
|
+
async registerCustomApiRoutes() {
|
|
15
|
+
const hasCustomRoutes = await this.buildCustomRouteHandler();
|
|
16
|
+
if (!hasCustomRoutes) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const customRoutes = this.customApiRoutes ?? this.mastra.getServer()?.apiRoutes ?? [];
|
|
20
|
+
for (const route of customRoutes) {
|
|
21
|
+
const routePath = this.buildRoutePath(this.prefix, route.path);
|
|
22
|
+
this.registerAdonisHandler(this.app, route.method, routePath, async (ctx) => {
|
|
23
|
+
const runtime = this.createRuntimeContext(ctx);
|
|
24
|
+
const authError = await this.checkRouteAuthWithAdonisSession({
|
|
25
|
+
method: route.method,
|
|
26
|
+
path: route.path,
|
|
27
|
+
responseType: 'json',
|
|
28
|
+
handler: async () => null,
|
|
29
|
+
requiresAuth: route.requiresAuth,
|
|
30
|
+
}, ctx, runtime.requestContext);
|
|
31
|
+
if (authError) {
|
|
32
|
+
ctx.response.status(authError.status);
|
|
33
|
+
ctx.response.json({ error: authError.error });
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const body = REQUEST_METHODS_WITH_BODY.has(route.method)
|
|
37
|
+
? ctx.request.body()
|
|
38
|
+
: undefined;
|
|
39
|
+
const response = await this.handleCustomRouteRequest(this.buildAbsoluteRequestUrl(ctx), route.method, ctx.request.headers(), body, runtime.requestContext);
|
|
40
|
+
if (!response) {
|
|
41
|
+
ctx.response.status(404);
|
|
42
|
+
ctx.response.json({ error: 'Custom route not found' });
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
await this.writeCustomRouteResponse(response, ctx.response.response);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async registerRoute(app, route, { prefix }) {
|
|
50
|
+
const resolvedPrefix = prefix ?? this.prefix;
|
|
51
|
+
const fullPath = this.buildRoutePath(resolvedPrefix, route.path);
|
|
52
|
+
this.registerAdonisHandler(app, route.method, fullPath, async (ctx) => {
|
|
53
|
+
const runtime = this.createRuntimeContext(ctx);
|
|
54
|
+
const authError = await this.checkRouteAuthWithAdonisSession(route, ctx, runtime.requestContext);
|
|
55
|
+
if (authError) {
|
|
56
|
+
ctx.response.status(authError.status);
|
|
57
|
+
ctx.response.json({ error: authError.error });
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const maxSize = route.maxBodySize ?? this.bodyLimitOptions?.maxSize;
|
|
61
|
+
if (REQUEST_METHODS_WITH_BODY.has(route.method) && maxSize) {
|
|
62
|
+
const contentLength = ctx.request.header('content-length');
|
|
63
|
+
const parsedLength = contentLength ? Number.parseInt(contentLength, 10) : Number.NaN;
|
|
64
|
+
if (Number.isFinite(parsedLength) && parsedLength > maxSize) {
|
|
65
|
+
const payload = this.bodyLimitOptions?.onError
|
|
66
|
+
? this.bodyLimitOptions.onError({ error: 'Request body too large' })
|
|
67
|
+
: { error: 'Request body too large' };
|
|
68
|
+
ctx.response.status(413);
|
|
69
|
+
ctx.response.json(payload);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const params = await this.getParams(route, ctx);
|
|
74
|
+
if (params.bodyParseError) {
|
|
75
|
+
ctx.response.status(400);
|
|
76
|
+
ctx.response.json({
|
|
77
|
+
error: 'Invalid request body',
|
|
78
|
+
issues: [{ field: 'body', message: params.bodyParseError.message }],
|
|
79
|
+
});
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const pathParams = await this.parsePath(route, params.urlParams, ctx);
|
|
83
|
+
if (!pathParams) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const queryParams = await this.parseQuery(route, params.queryParams, ctx);
|
|
87
|
+
if (!queryParams) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const body = await this.parseRequestBody(route, params.body, ctx);
|
|
91
|
+
if (body === null) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const handlerParams = {
|
|
95
|
+
...pathParams,
|
|
96
|
+
...queryParams,
|
|
97
|
+
...(typeof body === 'object' && body !== null ? body : {}),
|
|
98
|
+
mastra: this.mastra,
|
|
99
|
+
requestContext: runtime.requestContext,
|
|
100
|
+
registeredTools: runtime.registeredTools,
|
|
101
|
+
taskStore: runtime.taskStore,
|
|
102
|
+
abortSignal: runtime.abortSignal,
|
|
103
|
+
routePrefix: resolvedPrefix,
|
|
104
|
+
};
|
|
105
|
+
try {
|
|
106
|
+
const result = await route.handler(handlerParams);
|
|
107
|
+
await this.sendResponse(route, ctx, result);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
this.mastra.getLogger()?.error('Error calling Mastra route handler', {
|
|
111
|
+
error: error instanceof Error
|
|
112
|
+
? { message: error.message, stack: error.stack }
|
|
113
|
+
: error,
|
|
114
|
+
path: route.path,
|
|
115
|
+
method: route.method,
|
|
116
|
+
});
|
|
117
|
+
const status = this.resolveErrorStatus(error);
|
|
118
|
+
ctx.response.status(status);
|
|
119
|
+
ctx.response.json({
|
|
120
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
async getParams(route, request) {
|
|
126
|
+
const queryParams = normalizeQueryParams(request.request.qs());
|
|
127
|
+
const urlParams = Object.entries(request.params).reduce((acc, [key, value]) => {
|
|
128
|
+
acc[key] = String(value);
|
|
129
|
+
return acc;
|
|
130
|
+
}, {});
|
|
131
|
+
const body = REQUEST_METHODS_WITH_BODY.has(route.method)
|
|
132
|
+
? request.request.body()
|
|
133
|
+
: undefined;
|
|
134
|
+
return {
|
|
135
|
+
urlParams,
|
|
136
|
+
queryParams,
|
|
137
|
+
body,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
async sendResponse(route, response, result) {
|
|
141
|
+
const resolvedPrefix = this.prefix ?? '';
|
|
142
|
+
if (route.responseType === 'json') {
|
|
143
|
+
response.response.json(result);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (route.responseType === 'stream') {
|
|
147
|
+
await this.stream(route, response, result);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (route.responseType === 'datastream-response') {
|
|
151
|
+
const fetchResponse = result;
|
|
152
|
+
fetchResponse.headers.forEach((value, key) => {
|
|
153
|
+
response.response.header(key, value);
|
|
154
|
+
});
|
|
155
|
+
response.response.status(fetchResponse.status);
|
|
156
|
+
if (fetchResponse.body) {
|
|
157
|
+
const reader = fetchResponse.body.getReader();
|
|
158
|
+
const rawResponse = response.response.response;
|
|
159
|
+
try {
|
|
160
|
+
while (true) {
|
|
161
|
+
const { done, value } = await reader.read();
|
|
162
|
+
if (done) {
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
rawResponse.write(value);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
rawResponse.end();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
response.response.response.end();
|
|
174
|
+
}
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (route.responseType === 'mcp-http') {
|
|
178
|
+
const payload = result;
|
|
179
|
+
const options = { ...this.mcpOptions, ...payload.mcpOptions };
|
|
180
|
+
try {
|
|
181
|
+
await payload.server.startHTTP({
|
|
182
|
+
url: new URL(this.buildAbsoluteRequestUrl(response)),
|
|
183
|
+
httpPath: this.buildRoutePath(resolvedPrefix, payload.httpPath),
|
|
184
|
+
req: response.request.request,
|
|
185
|
+
res: response.response.response,
|
|
186
|
+
options: Object.keys(options).length > 0 ? options : undefined,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
if (!response.response.headersSent) {
|
|
191
|
+
response.response.status(500);
|
|
192
|
+
response.response.json({
|
|
193
|
+
jsonrpc: '2.0',
|
|
194
|
+
error: { code: -32603, message: 'Internal server error' },
|
|
195
|
+
id: null,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
if (route.responseType === 'mcp-sse') {
|
|
202
|
+
const payload = result;
|
|
203
|
+
try {
|
|
204
|
+
await payload.server.startSSE({
|
|
205
|
+
url: new URL(this.buildAbsoluteRequestUrl(response)),
|
|
206
|
+
ssePath: this.buildRoutePath(resolvedPrefix, payload.ssePath),
|
|
207
|
+
messagePath: this.buildRoutePath(resolvedPrefix, payload.messagePath),
|
|
208
|
+
req: response.request.request,
|
|
209
|
+
res: response.response.response,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
if (!response.response.headersSent) {
|
|
214
|
+
response.response.status(500);
|
|
215
|
+
response.response.json({ error: 'Error handling MCP SSE request' });
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
response.response.status(500);
|
|
221
|
+
response.response.json({ error: 'Unsupported response type' });
|
|
222
|
+
}
|
|
223
|
+
async stream(route, response, result) {
|
|
224
|
+
const streamFormat = route.streamFormat ?? 'stream';
|
|
225
|
+
const isSse = streamFormat === 'sse';
|
|
226
|
+
response.response.header('Content-Type', isSse ? 'text/event-stream' : 'text/plain');
|
|
227
|
+
response.response.header('Transfer-Encoding', 'chunked');
|
|
228
|
+
response.response.header('Cache-Control', 'no-cache');
|
|
229
|
+
const rawResponse = response.response.response;
|
|
230
|
+
const readableStream = result instanceof ReadableStream
|
|
231
|
+
? result
|
|
232
|
+
: (result.fullStream ?? null);
|
|
233
|
+
if (!readableStream) {
|
|
234
|
+
rawResponse.end();
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
const reader = readableStream.getReader();
|
|
238
|
+
try {
|
|
239
|
+
while (true) {
|
|
240
|
+
const { done, value } = await reader.read();
|
|
241
|
+
if (done) {
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
if (!value) {
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
const shouldRedact = this.streamOptions?.redact ?? true;
|
|
248
|
+
const outputValue = shouldRedact ? redactStreamChunk(value) : value;
|
|
249
|
+
if (isSse) {
|
|
250
|
+
rawResponse.write(`data: ${JSON.stringify(outputValue)}\n\n`);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
rawResponse.write(JSON.stringify(outputValue) + '\x1E');
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
this.mastra.getLogger()?.error('Error in Mastra stream processing', {
|
|
259
|
+
error: error instanceof Error ? { message: error.message, stack: error.stack } : error,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
finally {
|
|
263
|
+
rawResponse.end();
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
registerAdonisHandler(app, method, path, handler) {
|
|
267
|
+
switch (method) {
|
|
268
|
+
case 'GET':
|
|
269
|
+
app.get(path, handler);
|
|
270
|
+
break;
|
|
271
|
+
case 'POST':
|
|
272
|
+
app.post(path, handler);
|
|
273
|
+
break;
|
|
274
|
+
case 'PUT':
|
|
275
|
+
app.put(path, handler);
|
|
276
|
+
break;
|
|
277
|
+
case 'PATCH':
|
|
278
|
+
app.patch(path, handler);
|
|
279
|
+
break;
|
|
280
|
+
case 'DELETE':
|
|
281
|
+
app.delete(path, handler);
|
|
282
|
+
break;
|
|
283
|
+
case 'ALL':
|
|
284
|
+
default:
|
|
285
|
+
app.any(path, handler);
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
createRuntimeContext(ctx) {
|
|
290
|
+
const requestContext = this.extractRequestContext(ctx);
|
|
291
|
+
const abortController = new AbortController();
|
|
292
|
+
const rawResponse = ctx.response.response;
|
|
293
|
+
rawResponse.on('close', () => {
|
|
294
|
+
if (!rawResponse.writableEnded) {
|
|
295
|
+
abortController.abort();
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
return {
|
|
299
|
+
requestContext,
|
|
300
|
+
abortSignal: abortController.signal,
|
|
301
|
+
registeredTools: this.tools ?? {},
|
|
302
|
+
taskStore: this.taskStore,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
extractRequestContext(ctx) {
|
|
306
|
+
const body = ctx.request.body();
|
|
307
|
+
const rawQueryRequestContext = ctx.request.qs().requestContext;
|
|
308
|
+
const paramsRequestContext = this.tryParseRequestContext(rawQueryRequestContext);
|
|
309
|
+
const bodyRequestContext = body && typeof body === 'object' && !Array.isArray(body)
|
|
310
|
+
? this.tryParseRequestContext(body.requestContext)
|
|
311
|
+
: undefined;
|
|
312
|
+
return this.mergeRequestContext({ paramsRequestContext, bodyRequestContext });
|
|
313
|
+
}
|
|
314
|
+
tryParseRequestContext(value) {
|
|
315
|
+
if (!value) {
|
|
316
|
+
return undefined;
|
|
317
|
+
}
|
|
318
|
+
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
319
|
+
return value;
|
|
320
|
+
}
|
|
321
|
+
const candidate = Array.isArray(value) ? value[0] : value;
|
|
322
|
+
if (typeof candidate !== 'string') {
|
|
323
|
+
return undefined;
|
|
324
|
+
}
|
|
325
|
+
try {
|
|
326
|
+
return JSON.parse(candidate);
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
try {
|
|
330
|
+
const decoded = Buffer.from(candidate, 'base64').toString('utf-8');
|
|
331
|
+
return JSON.parse(decoded);
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
return undefined;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
buildRoutePath(prefix, path) {
|
|
339
|
+
const normalizedPrefix = (prefix ?? '').replace(/\/+$/, '');
|
|
340
|
+
const normalizedPath = path.startsWith('/') ? path : `/${path}`;
|
|
341
|
+
if (!normalizedPrefix) {
|
|
342
|
+
return normalizedPath;
|
|
343
|
+
}
|
|
344
|
+
return `${normalizedPrefix}${normalizedPath}`;
|
|
345
|
+
}
|
|
346
|
+
buildAbsoluteRequestUrl(ctx) {
|
|
347
|
+
const protocol = ctx.request.protocol();
|
|
348
|
+
const host = ctx.request.header('host') || 'localhost';
|
|
349
|
+
const relativeUrl = ctx.request.url(true);
|
|
350
|
+
return new URL(relativeUrl, `${protocol}://${host}`).toString();
|
|
351
|
+
}
|
|
352
|
+
getQueryValue(ctx, name) {
|
|
353
|
+
const value = ctx.request.qs()[name];
|
|
354
|
+
if (typeof value === 'string') {
|
|
355
|
+
return value;
|
|
356
|
+
}
|
|
357
|
+
if (Array.isArray(value) && typeof value[0] === 'string') {
|
|
358
|
+
return value[0];
|
|
359
|
+
}
|
|
360
|
+
return undefined;
|
|
361
|
+
}
|
|
362
|
+
async checkRouteAuthWithAdonisSession(route, ctx, requestContext) {
|
|
363
|
+
const sessionUser = await this.resolveAdonisSessionUser(ctx);
|
|
364
|
+
if (sessionUser) {
|
|
365
|
+
requestContext.set('user', sessionUser);
|
|
366
|
+
return null;
|
|
367
|
+
}
|
|
368
|
+
// Mastra's default auth check is skipped entirely when `mastra.server.auth`
|
|
369
|
+
// isn't configured. We still need to enforce route-level auth for Adonis sessions.
|
|
370
|
+
if (route.requiresAuth !== false) {
|
|
371
|
+
return { status: 401, error: 'Authentication required' };
|
|
372
|
+
}
|
|
373
|
+
return this.checkRouteAuth(route, {
|
|
374
|
+
path: String(ctx.request.url() || '/'),
|
|
375
|
+
method: String(ctx.request.method() || route.method),
|
|
376
|
+
getHeader: (name) => ctx.request.header(name),
|
|
377
|
+
getQuery: (name) => this.getQueryValue(ctx, name),
|
|
378
|
+
requestContext,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
async resolveAdonisSessionUser(ctx) {
|
|
382
|
+
try {
|
|
383
|
+
const auth = ctx.auth;
|
|
384
|
+
if (!auth) {
|
|
385
|
+
return null;
|
|
386
|
+
}
|
|
387
|
+
const isAuthenticated = await auth.check();
|
|
388
|
+
if (!isAuthenticated || !auth.user) {
|
|
389
|
+
return null;
|
|
390
|
+
}
|
|
391
|
+
return auth.user;
|
|
392
|
+
}
|
|
393
|
+
catch {
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
async parsePath(route, params, ctx) {
|
|
398
|
+
try {
|
|
399
|
+
return await this.parsePathParams(route, params);
|
|
400
|
+
}
|
|
401
|
+
catch (error) {
|
|
402
|
+
this.handleParseError(error, 'path parameters', ctx);
|
|
403
|
+
return null;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
async parseQuery(route, params, ctx) {
|
|
407
|
+
try {
|
|
408
|
+
return await this.parseQueryParams(route, params);
|
|
409
|
+
}
|
|
410
|
+
catch (error) {
|
|
411
|
+
this.handleParseError(error, 'query parameters', ctx);
|
|
412
|
+
return null;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
async parseRequestBody(route, body, ctx) {
|
|
416
|
+
try {
|
|
417
|
+
return await this.parseBody(route, body);
|
|
418
|
+
}
|
|
419
|
+
catch (error) {
|
|
420
|
+
this.handleParseError(error, 'request body', ctx);
|
|
421
|
+
return null;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
handleParseError(error, target, ctx) {
|
|
425
|
+
this.mastra.getLogger()?.error(`Error parsing ${target}`, {
|
|
426
|
+
error: error instanceof Error ? { message: error.message, stack: error.stack } : error,
|
|
427
|
+
});
|
|
428
|
+
if (error instanceof ZodError) {
|
|
429
|
+
ctx.response.status(400);
|
|
430
|
+
ctx.response.json(formatZodError(error, target));
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
ctx.response.status(400);
|
|
434
|
+
ctx.response.json({
|
|
435
|
+
error: `Invalid ${target}`,
|
|
436
|
+
issues: [
|
|
437
|
+
{
|
|
438
|
+
field: 'unknown',
|
|
439
|
+
message: error instanceof Error ? error.message : 'Unknown error',
|
|
440
|
+
},
|
|
441
|
+
],
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
resolveErrorStatus(error) {
|
|
445
|
+
if (error && typeof error === 'object') {
|
|
446
|
+
if ('status' in error && typeof error.status === 'number') {
|
|
447
|
+
return error.status;
|
|
448
|
+
}
|
|
449
|
+
if ('details' in error &&
|
|
450
|
+
error.details &&
|
|
451
|
+
typeof error.details === 'object' &&
|
|
452
|
+
'status' in error.details &&
|
|
453
|
+
typeof error.details.status === 'number') {
|
|
454
|
+
return error.details.status;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
return 500;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
export async function registerAdonisMastraServer({ router, mastra, prefix, openapiPath, bodyLimitOptions, streamOptions, tools, taskStore, customRouteAuthConfig, customApiRoutes, mcpOptions, }) {
|
|
461
|
+
const server = new AdonisMastraServer({
|
|
462
|
+
app: router,
|
|
463
|
+
mastra,
|
|
464
|
+
prefix,
|
|
465
|
+
openapiPath,
|
|
466
|
+
bodyLimitOptions,
|
|
467
|
+
streamOptions,
|
|
468
|
+
tools,
|
|
469
|
+
taskStore,
|
|
470
|
+
customRouteAuthConfig,
|
|
471
|
+
customApiRoutes,
|
|
472
|
+
mcpOptions,
|
|
473
|
+
});
|
|
474
|
+
await server.init();
|
|
475
|
+
return server;
|
|
476
|
+
}
|
|
477
|
+
//# sourceMappingURL=adonis_server_adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adonis_server_adapter.js","sourceRoot":"","sources":["../src/adonis_server_adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pltn/adonis-mastra-server-adapter",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "AdonisJS server adapter for Mastra",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Ivan Plotnikov",
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md",
|
|
12
|
+
"LICENSE"
|
|
13
|
+
],
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"import": "./dist/index.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"main": "./dist/index.js",
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc -p tsconfig.json",
|
|
24
|
+
"clean": "rm -rf dist",
|
|
25
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
26
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
27
|
+
},
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"@adonisjs/core": ">=6.0.0",
|
|
30
|
+
"@mastra/core": ">=1.4.0",
|
|
31
|
+
"@mastra/server": ">=1.4.0",
|
|
32
|
+
"zod": ">=3.0.0"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/node": "^22.15.18",
|
|
36
|
+
"typescript": "^5.8.3"
|
|
37
|
+
},
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=20"
|
|
40
|
+
},
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public",
|
|
43
|
+
"provenance": true
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"adonisjs",
|
|
47
|
+
"mastra",
|
|
48
|
+
"adapter"
|
|
49
|
+
]
|
|
50
|
+
}
|