@mastra/deployer 1.2.0 → 1.3.0-alpha.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.
Files changed (63) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/dist/build/analyze/analyzeEntry.d.ts.map +1 -1
  3. package/dist/build/analyze/bundleExternals.d.ts.map +1 -1
  4. package/dist/build/analyze.cjs +2 -2
  5. package/dist/build/analyze.d.ts.map +1 -1
  6. package/dist/build/analyze.js +1 -1
  7. package/dist/build/bundler.cjs +3 -3
  8. package/dist/build/bundler.js +1 -1
  9. package/dist/build/index.cjs +11 -11
  10. package/dist/build/index.js +4 -4
  11. package/dist/build/plugins/tsconfig-paths.d.ts.map +1 -1
  12. package/dist/build/watcher.d.ts +3 -1
  13. package/dist/build/watcher.d.ts.map +1 -1
  14. package/dist/bundler/index.cjs +3 -3
  15. package/dist/bundler/index.js +1 -1
  16. package/dist/{chunk-5QWVKP4X.js → chunk-3WL6HPU3.js} +3 -3
  17. package/dist/{chunk-5QWVKP4X.js.map → chunk-3WL6HPU3.js.map} +1 -1
  18. package/dist/{chunk-CWEG55RE.js → chunk-AMZJCH64.js} +48 -44
  19. package/dist/chunk-AMZJCH64.js.map +1 -0
  20. package/dist/{chunk-DIQKRYF4.js → chunk-BZLFGOSU.js} +17 -9
  21. package/dist/chunk-BZLFGOSU.js.map +1 -0
  22. package/dist/{chunk-Q6OWS3YN.cjs → chunk-E4SQOERA.cjs} +48 -44
  23. package/dist/chunk-E4SQOERA.cjs.map +1 -0
  24. package/dist/{chunk-MOCLE4XM.cjs → chunk-IZHNO3GK.cjs} +24 -16
  25. package/dist/chunk-IZHNO3GK.cjs.map +1 -0
  26. package/dist/{chunk-4CCXXH5X.cjs → chunk-K7J2W7DJ.cjs} +7 -7
  27. package/dist/{chunk-4CCXXH5X.cjs.map → chunk-K7J2W7DJ.cjs.map} +1 -1
  28. package/dist/{chunk-O45P6AJF.js → chunk-KNINPAM6.js} +6 -6
  29. package/dist/{chunk-O45P6AJF.js.map → chunk-KNINPAM6.js.map} +1 -1
  30. package/dist/{chunk-GRQR3MP7.js → chunk-KRRQVSI7.js} +3 -3
  31. package/dist/{chunk-GRQR3MP7.js.map → chunk-KRRQVSI7.js.map} +1 -1
  32. package/dist/{chunk-5KBGEH2B.cjs → chunk-P3YQIQSD.cjs} +43 -23
  33. package/dist/chunk-P3YQIQSD.cjs.map +1 -0
  34. package/dist/{chunk-T3HNSYJE.cjs → chunk-R2SIOO54.cjs} +11 -11
  35. package/dist/{chunk-T3HNSYJE.cjs.map → chunk-R2SIOO54.cjs.map} +1 -1
  36. package/dist/{chunk-UA7HQFWN.js → chunk-T3QYAGU3.js} +32 -12
  37. package/dist/chunk-T3QYAGU3.js.map +1 -0
  38. package/dist/{chunk-MYKZPGDB.cjs → chunk-YA6TH3CS.cjs} +14 -14
  39. package/dist/{chunk-MYKZPGDB.cjs.map → chunk-YA6TH3CS.cjs.map} +1 -1
  40. package/dist/docs/SKILL.md +19 -24
  41. package/dist/docs/{SOURCE_MAP.json → assets/SOURCE_MAP.json} +1 -1
  42. package/dist/docs/{deployment/04-cloud-providers.md → references/docs-deployment-cloud-providers.md} +2 -4
  43. package/dist/docs/{deployment/02-mastra-server.md → references/docs-deployment-mastra-server.md} +16 -23
  44. package/dist/docs/{deployment/03-monorepo.md → references/docs-deployment-monorepo.md} +12 -12
  45. package/dist/docs/{deployment/01-overview.md → references/docs-deployment-overview.md} +5 -7
  46. package/dist/docs/{deployment/05-web-framework.md → references/docs-deployment-web-framework.md} +4 -7
  47. package/dist/docs/{deployment/06-workflow-runners.md → references/docs-deployment-workflow-runners.md} +1 -3
  48. package/dist/docs/{deployer/01-reference.md → references/reference-deployer.md} +19 -12
  49. package/dist/index.cjs +4 -4
  50. package/dist/index.js +2 -2
  51. package/dist/server/index.cjs +73 -41
  52. package/dist/server/index.cjs.map +1 -1
  53. package/dist/server/index.d.ts.map +1 -1
  54. package/dist/server/index.js +74 -42
  55. package/dist/server/index.js.map +1 -1
  56. package/package.json +9 -10
  57. package/dist/chunk-5KBGEH2B.cjs.map +0 -1
  58. package/dist/chunk-CWEG55RE.js.map +0 -1
  59. package/dist/chunk-DIQKRYF4.js.map +0 -1
  60. package/dist/chunk-MOCLE4XM.cjs.map +0 -1
  61. package/dist/chunk-Q6OWS3YN.cjs.map +0 -1
  62. package/dist/chunk-UA7HQFWN.js.map +0 -1
  63. package/dist/docs/README.md +0 -32
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAW5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAoBnD,KAAK,QAAQ,GAAG,YAAY,CAAC;AAE7B,KAAK,SAAS,GAAG,aAAa,GAAG;IAC/B,OAAO,EAAE,GAAG,CAAC;QAAE,UAAU,EAAE,+BAA+B,CAAA;KAAE,CAAC,CAAC;CAC/D,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,wCAmB/D;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAER;cAegC,QAAQ;eAAa,SAAS;2CA2UhE;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAmC,mDAqDlG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAW5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAoBnD,KAAK,QAAQ,GAAG,YAAY,CAAC;AAE7B,KAAK,SAAS,GAAG,aAAa,GAAG;IAC/B,OAAO,EAAE,GAAG,CAAC;QAAE,UAAU,EAAE,+BAA+B,CAAA;KAAE,CAAC,CAAC;CAC/D,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,wCAmB/D;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAER;cAegC,QAAQ;eAAa,SAAS;2CA8VhE;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAmC,mDAqDlG"}
@@ -8,7 +8,8 @@ import { Http2ServerRequest } from 'http2';
8
8
  import { Writable, Readable } from 'stream';
9
9
  import crypto from 'crypto';
10
10
  import { getMimeType } from 'hono/utils/mime';
11
- import { existsSync, createReadStream, lstatSync } from 'fs';
11
+ import { existsSync, createReadStream, statSync } from 'fs';
12
+ import { versions } from 'process';
12
13
  import { html } from 'hono/html';
13
14
  import { Tool } from '@mastra/core/tools';
14
15
  import { formatZodError } from '@mastra/server/handlers/error';
@@ -335,19 +336,9 @@ var buildOutgoingHttpHeaders = (headers) => {
335
336
  return res;
336
337
  };
337
338
  var X_ALREADY_SENT = "x-hono-already-sent";
338
- var webFetch = global.fetch;
339
339
  if (typeof global.crypto === "undefined") {
340
340
  global.crypto = crypto;
341
341
  }
342
- global.fetch = (info, init) => {
343
- init = {
344
- // Disable compression handling so people can return the result of a fetch
345
- // directly in the loader without messing with the Content-Encoding header.
346
- compress: false,
347
- ...init
348
- };
349
- return webFetch(info, init);
350
- };
351
342
  var outgoingEnded = /* @__PURE__ */ Symbol("outgoingEnded");
352
343
  var handleRequestError = () => new Response(null, {
353
344
  status: 400
@@ -578,7 +569,15 @@ var ENCODINGS = {
578
569
  gzip: ".gz"
579
570
  };
580
571
  var ENCODINGS_ORDERED_KEYS = Object.keys(ENCODINGS);
572
+ var pr54206Applied = () => {
573
+ const [major, minor] = versions.node.split(".").map((component) => parseInt(component));
574
+ return major >= 23 || major === 22 && minor >= 7 || major === 20 && minor >= 18;
575
+ };
576
+ var useReadableToWeb = pr54206Applied();
581
577
  var createStreamBody = (stream2) => {
578
+ if (useReadableToWeb) {
579
+ return Readable.toWeb(stream2);
580
+ }
582
581
  const body = new ReadableStream({
583
582
  start(controller) {
584
583
  stream2.on("data", (chunk) => {
@@ -600,7 +599,7 @@ var createStreamBody = (stream2) => {
600
599
  var getStats = (path) => {
601
600
  let stats;
602
601
  try {
603
- stats = lstatSync(path);
602
+ stats = statSync(path);
604
603
  } catch {
605
604
  }
606
605
  return stats;
@@ -738,18 +737,14 @@ var RENDER_TYPE_MAP = {
738
737
  parameterMacro: RENDER_TYPE.RAW
739
738
  };
740
739
  var renderSwaggerUIOptions = (options) => {
741
- const optionsStrings = Object.entries(options).map(([k, v]) => {
740
+ return Object.entries(options).map(([k, v]) => {
742
741
  const key = k;
743
- if (!RENDER_TYPE_MAP[key] || v === void 0) {
744
- return "";
745
- }
742
+ if (!RENDER_TYPE_MAP[key] || v === void 0) return "";
746
743
  switch (RENDER_TYPE_MAP[key]) {
747
744
  case RENDER_TYPE.STRING:
748
745
  return `${key}: '${v}'`;
749
746
  case RENDER_TYPE.STRING_ARRAY:
750
- if (!Array.isArray(v)) {
751
- return "";
752
- }
747
+ if (!Array.isArray(v)) return "";
753
748
  return `${key}: [${v.map((ve) => `${ve}`).join(",")}]`;
754
749
  case RENDER_TYPE.JSON_STRING:
755
750
  return `${key}: ${JSON.stringify(v)}`;
@@ -759,7 +754,6 @@ var renderSwaggerUIOptions = (options) => {
759
754
  return "";
760
755
  }
761
756
  }).filter((item) => item !== "").join(",");
762
- return optionsStrings;
763
757
  };
764
758
  var remoteAssets = ({ version }) => {
765
759
  const url = `https://cdn.jsdelivr.net/npm/swagger-ui-dist${version !== void 0 ? `@${version}` : ""}`;
@@ -771,15 +765,13 @@ var remoteAssets = ({ version }) => {
771
765
  var SwaggerUI = (options) => {
772
766
  const asset = remoteAssets({ version: options?.version });
773
767
  delete options.version;
774
- if (options.manuallySwaggerUIHtml) {
775
- return options.manuallySwaggerUIHtml(asset);
776
- }
768
+ if (options.manuallySwaggerUIHtml) return options.manuallySwaggerUIHtml(asset);
777
769
  const optionsStrings = renderSwaggerUIOptions(options);
778
770
  return `
779
771
  <div>
780
772
  <div id="swagger-ui"></div>
781
773
  ${asset.css.map((url) => html`<link rel="stylesheet" href="${url}" />`)}
782
- ${asset.js.map((url) => html`<script src="${url}" crossorigin="anonymous"></script>`)}
774
+ ${asset.js.map((url) => html`<script src="${url}" crossorigin="anonymous"><\/script>`)}
783
775
  <script>
784
776
  window.onload = () => {
785
777
  window.ui = SwaggerUIBundle({
@@ -792,9 +784,8 @@ var SwaggerUI = (options) => {
792
784
  };
793
785
  var middleware = (options) => async (c) => {
794
786
  const title = options?.title ?? "SwaggerUI";
795
- return c.html(
796
- /* html */
797
- `
787
+ return c.html(`
788
+ <!doctype html>
798
789
  <html lang="en">
799
790
  <head>
800
791
  <meta charset="utf-8" />
@@ -806,8 +797,7 @@ var middleware = (options) => async (c) => {
806
797
  ${SwaggerUI(options)}
807
798
  </body>
808
799
  </html>
809
- `
810
- );
800
+ `);
811
801
  };
812
802
  var classRegExp = /^([A-Z][a-z0-9]*)+$/;
813
803
  var kTypes = [
@@ -3106,7 +3096,9 @@ var authenticationMiddleware = async (c, next) => {
3106
3096
  c.get("requestContext").set("user", user);
3107
3097
  return next();
3108
3098
  } catch (err) {
3109
- console.error(err);
3099
+ mastra.getLogger()?.error("Authentication error", {
3100
+ error: err instanceof Error ? { message: err.message, stack: err.stack } : err
3101
+ });
3110
3102
  return c.json({ error: "Invalid or expired token" }, 401);
3111
3103
  }
3112
3104
  };
@@ -3138,7 +3130,9 @@ var authorizationMiddleware = async (c, next) => {
3138
3130
  }
3139
3131
  return c.json({ error: "Access denied" }, 403);
3140
3132
  } catch (err) {
3141
- console.error(err);
3133
+ mastra.getLogger()?.error("Authorization error in authorizeUser", {
3134
+ error: err instanceof Error ? { message: err.message, stack: err.stack } : err
3135
+ });
3142
3136
  return c.json({ error: "Authorization error" }, 500);
3143
3137
  }
3144
3138
  }
@@ -3150,7 +3144,11 @@ var authorizationMiddleware = async (c, next) => {
3150
3144
  }
3151
3145
  return c.json({ error: "Access denied" }, 403);
3152
3146
  } catch (err) {
3153
- console.error(err);
3147
+ mastra.getLogger()?.error("Authorization error in authorize", {
3148
+ error: err instanceof Error ? { message: err.message, stack: err.stack } : err,
3149
+ path,
3150
+ method
3151
+ });
3154
3152
  return c.json({ error: "Authorization error" }, 500);
3155
3153
  }
3156
3154
  }
@@ -3172,14 +3170,24 @@ var authorizationMiddleware = async (c, next) => {
3172
3170
  var MastraServer = class extends MastraServer$1 {
3173
3171
  createContextMiddleware() {
3174
3172
  return async (c, next) => {
3173
+ const originalJson = c.req.json.bind(c.req);
3174
+ let jsonPromise;
3175
+ c.req.json = () => {
3176
+ if (!jsonPromise) {
3177
+ jsonPromise = originalJson().then((body) => {
3178
+ c.set("cachedBody", body);
3179
+ return body;
3180
+ });
3181
+ }
3182
+ return jsonPromise;
3183
+ };
3175
3184
  let bodyRequestContext;
3176
3185
  let paramsRequestContext;
3177
3186
  if (c.req.method === "POST" || c.req.method === "PUT") {
3178
3187
  const contentType = c.req.header("content-type");
3179
3188
  if (contentType?.includes("application/json")) {
3180
3189
  try {
3181
- const clonedReq = c.req.raw.clone();
3182
- const body = await clonedReq.json();
3190
+ const body = await c.req.raw.clone().json();
3183
3191
  if (body.requestContext) {
3184
3192
  bodyRequestContext = body.requestContext;
3185
3193
  }
@@ -3244,13 +3252,17 @@ var MastraServer = class extends MastraServer$1 {
3244
3252
  }
3245
3253
  await stream2.write("data: [DONE]\n\n");
3246
3254
  } catch (error) {
3247
- console.error(error);
3255
+ this.mastra.getLogger()?.error("Error in stream processing", {
3256
+ error: error instanceof Error ? { message: error.message, stack: error.stack } : error
3257
+ });
3248
3258
  } finally {
3249
3259
  await stream2.close();
3250
3260
  }
3251
3261
  },
3252
3262
  async (err) => {
3253
- console.error(err);
3263
+ this.mastra.getLogger()?.error("Stream error callback", {
3264
+ error: err instanceof Error ? { message: err.message, stack: err.stack } : err
3265
+ });
3254
3266
  }
3255
3267
  );
3256
3268
  }
@@ -3266,7 +3278,9 @@ var MastraServer = class extends MastraServer$1 {
3266
3278
  const formData = await request.formData();
3267
3279
  body = await this.parseFormData(formData);
3268
3280
  } catch (error) {
3269
- console.error("Failed to parse multipart form data:", error);
3281
+ this.mastra.getLogger()?.error("Failed to parse multipart form data", {
3282
+ error: error instanceof Error ? { message: error.message, stack: error.stack } : error
3283
+ });
3270
3284
  if (error instanceof Error && error.message.toLowerCase().includes("size")) {
3271
3285
  throw error;
3272
3286
  }
@@ -3281,7 +3295,9 @@ var MastraServer = class extends MastraServer$1 {
3281
3295
  try {
3282
3296
  body = JSON.parse(bodyText);
3283
3297
  } catch (error) {
3284
- console.error("Failed to parse JSON body:", error);
3298
+ this.mastra.getLogger()?.error("Failed to parse JSON body", {
3299
+ error: error instanceof Error ? { message: error.message, stack: error.stack } : error
3300
+ });
3285
3301
  bodyParseError = {
3286
3302
  message: error instanceof Error ? error.message : "Invalid JSON in request body"
3287
3303
  };
@@ -3405,7 +3421,9 @@ var MastraServer = class extends MastraServer$1 {
3405
3421
  try {
3406
3422
  params.queryParams = await this.parseQueryParams(route, params.queryParams);
3407
3423
  } catch (error) {
3408
- console.error("Error parsing query params", error);
3424
+ this.mastra.getLogger()?.error("Error parsing query params", {
3425
+ error: error instanceof Error ? { message: error.message, stack: error.stack } : error
3426
+ });
3409
3427
  if (error instanceof ZodError) {
3410
3428
  return c.json(formatZodError(error, "query parameters"), 400);
3411
3429
  }
@@ -3422,7 +3440,9 @@ var MastraServer = class extends MastraServer$1 {
3422
3440
  try {
3423
3441
  params.body = await this.parseBody(route, params.body);
3424
3442
  } catch (error) {
3425
- console.error("Error parsing body:", error instanceof Error ? error.message : String(error));
3443
+ this.mastra.getLogger()?.error("Error parsing body", {
3444
+ error: error instanceof Error ? { message: error.message, stack: error.stack } : error
3445
+ });
3426
3446
  if (error instanceof ZodError) {
3427
3447
  return c.json(formatZodError(error, "request body"), 400);
3428
3448
  }
@@ -3450,7 +3470,11 @@ var MastraServer = class extends MastraServer$1 {
3450
3470
  const result = await route.handler(handlerParams);
3451
3471
  return this.sendResponse(route, c, result, prefix);
3452
3472
  } catch (error) {
3453
- console.error("Error calling handler", error);
3473
+ this.mastra.getLogger()?.error("Error calling handler", {
3474
+ error: error instanceof Error ? { message: error.message, stack: error.stack } : error,
3475
+ path: route.path,
3476
+ method: route.method
3477
+ });
3454
3478
  if (error && typeof error === "object") {
3455
3479
  if ("status" in error) {
3456
3480
  const status = error.status;
@@ -3479,7 +3503,7 @@ var MastraServer = class extends MastraServer$1 {
3479
3503
  }
3480
3504
  };
3481
3505
 
3482
- // ../../node_modules/.pnpm/hono-openapi@1.1.1_@hono+standard-validator@0.2.1_@standard-schema+spec@1.1.0_hono@4.11_6463afc4e23badc2d243cc239548577d/node_modules/hono-openapi/dist/index.js
3506
+ // ../../node_modules/.pnpm/hono-openapi@1.1.1_@hono+standard-validator@0.2.2_@standard-schema+spec@1.1.0_hono@4.11_3e74ff9abd3c579ae061185f8bb0e452/node_modules/hono-openapi/dist/index.js
3483
3507
  var uniqueSymbol = /* @__PURE__ */ Symbol("openapi");
3484
3508
  function describeRoute(spec) {
3485
3509
  const middleware2 = async (_c, next) => {
@@ -4044,6 +4068,10 @@ async function createHonoServer(mastra, options = {
4044
4068
  const protocol = key && cert ? "https" : "http";
4045
4069
  const cloudApiEndpoint = process.env.MASTRA_CLOUD_API_ENDPOINT || "";
4046
4070
  const experimentalFeatures = process.env.EXPERIMENTAL_FEATURES === "true" ? "true" : "false";
4071
+ const requestContextPresets = process.env.MASTRA_REQUEST_CONTEXT_PRESETS || "";
4072
+ const escapeForHtml = (json) => {
4073
+ return json.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/</g, "\\u003c").replace(/>/g, "\\u003e").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
4074
+ };
4047
4075
  indexHtml = indexHtml.replace(`'%%MASTRA_SERVER_HOST%%'`, `'${host}'`);
4048
4076
  indexHtml = indexHtml.replace(`'%%MASTRA_SERVER_PORT%%'`, `'${port}'`);
4049
4077
  indexHtml = indexHtml.replace(`'%%MASTRA_API_PREFIX%%'`, `'${serverOptions?.apiPrefix ?? "/api"}'`);
@@ -4051,6 +4079,10 @@ async function createHonoServer(mastra, options = {
4051
4079
  indexHtml = indexHtml.replace(`'%%MASTRA_SERVER_PROTOCOL%%'`, `'${protocol}'`);
4052
4080
  indexHtml = indexHtml.replace(`'%%MASTRA_CLOUD_API_ENDPOINT%%'`, `'${cloudApiEndpoint}'`);
4053
4081
  indexHtml = indexHtml.replace(`'%%MASTRA_EXPERIMENTAL_FEATURES%%'`, `'${experimentalFeatures}'`);
4082
+ indexHtml = indexHtml.replace(
4083
+ `'%%MASTRA_REQUEST_CONTEXT_PRESETS%%'`,
4084
+ `'${escapeForHtml(requestContextPresets)}'`
4085
+ );
4054
4086
  indexHtml = indexHtml.replaceAll("%%MASTRA_STUDIO_BASE_PATH%%", studioBasePath);
4055
4087
  return c.newResponse(indexHtml, 200, { "Content-Type": "text/html" });
4056
4088
  }