@farm.js/core 0.1.0-beta.97 → 0.1.0-beta.98

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 (248) hide show
  1. package/dist/after.cjs.map +1 -0
  2. package/dist/agent-runtime.cjs +7 -3
  3. package/dist/agent-runtime.cjs.map +1 -0
  4. package/dist/agent-runtime.d.mts +2 -2
  5. package/dist/agent-runtime.d.ts +2 -2
  6. package/dist/agent-runtime.mjs +2 -1
  7. package/dist/agent-runtime.mjs.map +1 -1
  8. package/dist/api/route-manager.cjs.map +1 -0
  9. package/dist/api/route-manager.d.mts +2 -2
  10. package/dist/api/route-manager.d.ts +2 -2
  11. package/dist/api/runtime.cjs.map +1 -0
  12. package/dist/api.cjs +26 -1
  13. package/dist/api.cjs.map +1 -0
  14. package/dist/api.d.mts +3 -3
  15. package/dist/api.d.ts +3 -3
  16. package/dist/api.mjs +2 -2
  17. package/dist/{app-CIOx3LvY.d.ts → app-CJKz2mbi.d.ts} +4 -4
  18. package/dist/{app-DBd6437H.d.mts → app-DMEGFLR2.d.mts} +4 -4
  19. package/dist/app-markdown.cjs.map +1 -0
  20. package/dist/app-markdown.d.mts +3 -3
  21. package/dist/app-markdown.d.ts +3 -3
  22. package/dist/cache.cjs.map +1 -0
  23. package/dist/{chunk-WD2EBM3I.mjs → chunk-3CQJV3NC.mjs} +2 -2
  24. package/dist/{chunk-I3OOUWO5.mjs → chunk-3GDRV7SG.mjs} +2 -2
  25. package/dist/{chunk-X4SFHKFH.mjs → chunk-6KJY25DQ.mjs} +5 -5
  26. package/dist/{chunk-FP5Q67FO.mjs → chunk-AAEZP2EY.mjs} +9 -9
  27. package/dist/{chunk-WMJGA32P.mjs → chunk-BXVOHG6B.mjs} +27 -2
  28. package/dist/{chunk-WMJGA32P.mjs.map → chunk-BXVOHG6B.mjs.map} +1 -1
  29. package/dist/{chunk-BZAIS65C.mjs → chunk-DIHNOVZZ.mjs} +40 -13
  30. package/dist/chunk-DIHNOVZZ.mjs.map +1 -0
  31. package/dist/{chunk-ISSFLGJ5.mjs → chunk-FDWECN3W.mjs} +8 -4
  32. package/dist/chunk-FDWECN3W.mjs.map +1 -0
  33. package/dist/chunk-FDWXXTWR.mjs +114 -0
  34. package/dist/chunk-FDWXXTWR.mjs.map +1 -0
  35. package/dist/{chunk-J3MPQ4MQ.mjs → chunk-IHADQ6J7.mjs} +2 -2
  36. package/dist/{chunk-J3MPQ4MQ.mjs.map → chunk-IHADQ6J7.mjs.map} +1 -1
  37. package/dist/{chunk-FSIXEIOB.mjs → chunk-L7FSTPGS.mjs} +2 -2
  38. package/dist/{chunk-AAC66ILR.mjs → chunk-LXXG3K2Y.mjs} +61 -2
  39. package/dist/chunk-LXXG3K2Y.mjs.map +1 -0
  40. package/dist/{chunk-GJ7W6LNK.mjs → chunk-N5RK4LK6.mjs} +3 -3
  41. package/dist/{chunk-WKDAA6V2.mjs → chunk-NBF56FXB.mjs} +20 -5
  42. package/dist/chunk-NBF56FXB.mjs.map +1 -0
  43. package/dist/chunk-RKUPOYQV.mjs +28 -0
  44. package/dist/chunk-RKUPOYQV.mjs.map +1 -0
  45. package/dist/{chunk-2SKCXYLB.mjs → chunk-RL3THP3L.mjs} +54 -5
  46. package/dist/chunk-RL3THP3L.mjs.map +1 -0
  47. package/dist/{chunk-52BR7LTX.mjs → chunk-STSPSJUI.mjs} +3 -3
  48. package/dist/{chunk-EPDIF432.mjs → chunk-UOGX6UNO.mjs} +37 -17
  49. package/dist/chunk-UOGX6UNO.mjs.map +1 -0
  50. package/dist/{chunk-YIBV77KZ.mjs → chunk-URQELPSH.mjs} +2 -2
  51. package/dist/{chunk-UMUWR5XA.mjs → chunk-UWQ4EEW7.mjs} +2 -2
  52. package/dist/{chunk-IZBX2TEU.mjs → chunk-VQG3QWWK.mjs} +2 -2
  53. package/dist/{chunk-D7F7YZ7L.mjs → chunk-WA77FWAO.mjs} +8 -8
  54. package/dist/{chunk-35NPLKQJ.mjs → chunk-XWM2C267.mjs} +21 -105
  55. package/dist/chunk-XWM2C267.mjs.map +1 -0
  56. package/dist/client/lifecycle.cjs.map +1 -0
  57. package/dist/client/lifecycle.mjs +2 -2
  58. package/dist/{client-plugins-B6-07YmP.d.mts → client-plugins-CyTLPqjP.d.mts} +38 -2
  59. package/dist/{client-plugins-By6MVUX-.d.ts → client-plugins-D-UgzngJ.d.ts} +38 -2
  60. package/dist/client-plugins.cjs +1 -1
  61. package/dist/client-plugins.cjs.map +1 -0
  62. package/dist/client-plugins.d.mts +2 -2
  63. package/dist/client-plugins.d.ts +2 -2
  64. package/dist/client-plugins.mjs +2 -2
  65. package/dist/client.cjs +61 -16
  66. package/dist/client.cjs.map +1 -0
  67. package/dist/client.d.mts +5 -5
  68. package/dist/client.d.ts +5 -5
  69. package/dist/client.mjs +7 -7
  70. package/dist/config.cjs.map +1 -0
  71. package/dist/config.d.mts +2 -2
  72. package/dist/config.d.ts +2 -2
  73. package/dist/cron.cjs +48 -12
  74. package/dist/cron.cjs.map +1 -0
  75. package/dist/cron.mjs +2 -1
  76. package/dist/deferred.cjs.map +1 -0
  77. package/dist/deployment.cjs.map +1 -0
  78. package/dist/{devtools-XWZX6CCL.mjs → devtools-KQ2PXSIC.mjs} +8 -6
  79. package/dist/{devtools-XWZX6CCL.mjs.map → devtools-KQ2PXSIC.mjs.map} +1 -1
  80. package/dist/docs.cjs +7 -3
  81. package/dist/docs.cjs.map +1 -0
  82. package/dist/docs.mjs +8 -6
  83. package/dist/env-types.cjs.map +1 -0
  84. package/dist/env.cjs.map +1 -0
  85. package/dist/environment/vite.cjs.map +1 -0
  86. package/dist/environment.cjs.map +1 -0
  87. package/dist/font.cjs.map +1 -0
  88. package/dist/headers.cjs.map +1 -0
  89. package/dist/i18n/client.cjs.map +1 -0
  90. package/dist/i18n/index.cjs.map +1 -0
  91. package/dist/i18n/server.cjs.map +1 -0
  92. package/dist/image/server.cjs +19 -4
  93. package/dist/image/server.cjs.map +1 -0
  94. package/dist/image/server.d.mts +6 -0
  95. package/dist/image/server.d.ts +6 -0
  96. package/dist/image/server.mjs +1 -1
  97. package/dist/image/sharp.cjs +1 -0
  98. package/dist/image/sharp.cjs.map +1 -0
  99. package/dist/image/sharp.mjs +1 -1
  100. package/dist/image.cjs.map +1 -0
  101. package/dist/index.cjs +370 -143
  102. package/dist/index.cjs.map +1 -0
  103. package/dist/index.d.mts +10 -10
  104. package/dist/index.d.ts +10 -10
  105. package/dist/index.mjs +29 -21
  106. package/dist/index.mjs.map +1 -1
  107. package/dist/instrumentation.cjs.map +1 -0
  108. package/dist/{integration-orm-LLW6WZNK.mjs → integration-orm-G5BPBT5X.mjs} +3 -3
  109. package/dist/integrations.cjs +168 -5
  110. package/dist/integrations.cjs.map +1 -0
  111. package/dist/integrations.d.mts +2 -2
  112. package/dist/integrations.d.ts +2 -2
  113. package/dist/integrations.mjs +10 -3
  114. package/dist/internal/build-runtime.cjs +178 -51
  115. package/dist/internal/build-runtime.cjs.map +1 -0
  116. package/dist/internal/build-runtime.d.mts +4 -4
  117. package/dist/internal/build-runtime.d.ts +4 -4
  118. package/dist/internal/build-runtime.mjs +13 -11
  119. package/dist/internal/client-runtime.cjs +1 -1
  120. package/dist/internal/client-runtime.cjs.map +1 -0
  121. package/dist/internal/client-runtime.mjs +2 -2
  122. package/dist/internal/config-runtime.cjs +48 -42
  123. package/dist/internal/config-runtime.cjs.map +1 -0
  124. package/dist/internal/config-runtime.d.mts +3 -3
  125. package/dist/internal/config-runtime.d.ts +3 -3
  126. package/dist/internal/config-runtime.mjs +7 -5
  127. package/dist/internal/isolated-boundary.cjs.map +1 -0
  128. package/dist/internal/metadata-image-runtime.cjs.map +1 -0
  129. package/dist/internal/product-telemetry-runtime.cjs +6 -2
  130. package/dist/internal/product-telemetry-runtime.cjs.map +1 -0
  131. package/dist/internal/product-telemetry-runtime.mjs +6 -2
  132. package/dist/internal/product-telemetry-runtime.mjs.map +1 -1
  133. package/dist/internal/production-node-env.cjs.map +1 -0
  134. package/dist/internal/production-runtime.cjs.map +1 -0
  135. package/dist/internal/production-runtime.d.mts +8 -8
  136. package/dist/internal/production-runtime.d.ts +8 -8
  137. package/dist/markdown.cjs.map +1 -0
  138. package/dist/{metadata-route-8_V3UonT.d.ts → metadata-route-BpU8K9RI.d.ts} +1 -1
  139. package/dist/{metadata-route-CWP_HjGU.d.mts → metadata-route-D1AYgWni.d.mts} +1 -1
  140. package/dist/middleware.cjs.map +1 -0
  141. package/dist/middleware.d.mts +4 -4
  142. package/dist/middleware.d.ts +4 -4
  143. package/dist/navigation.cjs.map +1 -0
  144. package/dist/{nitro-EGRNOB5P.mjs → nitro-IITKBMUI.mjs} +4 -3
  145. package/dist/{nitro-EGRNOB5P.mjs.map → nitro-IITKBMUI.mjs.map} +1 -1
  146. package/dist/observability.cjs.map +1 -0
  147. package/dist/plugin.cjs +143 -50
  148. package/dist/plugin.cjs.map +1 -0
  149. package/dist/plugin.d.mts +2 -2
  150. package/dist/plugin.d.ts +2 -2
  151. package/dist/plugin.mjs +10 -8
  152. package/dist/{production-runtime-BGRH1dKG.d.mts → production-runtime-BIKA-BVT.d.mts} +2 -2
  153. package/dist/{production-runtime-CdmzsDax.d.ts → production-runtime-DtCUEELY.d.ts} +2 -2
  154. package/dist/query/client.cjs.map +1 -0
  155. package/dist/query/index.cjs.map +1 -0
  156. package/dist/query/parsers.cjs.map +1 -0
  157. package/dist/query/server.cjs.map +1 -0
  158. package/dist/{render-plan-DLxJYAA5.d.mts → render-plan-Dimb23ux.d.mts} +1 -1
  159. package/dist/{render-plan-0GeHiGVZ.d.ts → render-plan-rg3uiSo3.d.ts} +1 -1
  160. package/dist/renderer/react/client.cjs.map +1 -0
  161. package/dist/renderer/react/server.cjs.map +1 -0
  162. package/dist/renderer/react/vite.cjs.map +1 -0
  163. package/dist/renderer-client.cjs +26 -1
  164. package/dist/renderer-client.cjs.map +1 -0
  165. package/dist/renderer-client.d.mts +4 -4
  166. package/dist/renderer-client.d.ts +4 -4
  167. package/dist/renderer-client.mjs +2 -2
  168. package/dist/renderer.cjs.map +1 -0
  169. package/dist/{request-BstWbZ6O.d.ts → request-ColD-ChW.d.ts} +1 -1
  170. package/dist/{request-BCNXSXLh.d.mts → request-D5zvbU2Z.d.mts} +1 -1
  171. package/dist/request.cjs.map +1 -0
  172. package/dist/request.d.mts +3 -3
  173. package/dist/request.d.ts +3 -3
  174. package/dist/router.cjs.map +1 -0
  175. package/dist/routes.cjs.map +1 -0
  176. package/dist/routes.d.mts +2 -2
  177. package/dist/routes.d.ts +2 -2
  178. package/dist/server-action-security.cjs +117 -104
  179. package/dist/server-action-security.cjs.map +1 -0
  180. package/dist/server-action-security.mjs +2 -1
  181. package/dist/server-fn-client.cjs.map +1 -0
  182. package/dist/server-fn.cjs.map +1 -0
  183. package/dist/server-fn.mjs +3 -2
  184. package/dist/server-plugins.cjs.map +1 -0
  185. package/dist/server-plugins.d.mts +3 -3
  186. package/dist/server-plugins.d.ts +3 -3
  187. package/dist/server-query-client.cjs +26 -1
  188. package/dist/server-query-client.cjs.map +1 -0
  189. package/dist/server-query-client.mjs +3 -3
  190. package/dist/server-query.cjs.map +1 -0
  191. package/dist/server-query.mjs +4 -3
  192. package/dist/server.cjs +221 -116
  193. package/dist/server.cjs.map +1 -0
  194. package/dist/server.d.mts +8 -8
  195. package/dist/server.d.ts +8 -8
  196. package/dist/server.mjs +13 -11
  197. package/dist/server.mjs.map +1 -1
  198. package/dist/{spa-router-BeyAVSc6.d.mts → spa-router-BlilYGAN.d.mts} +1 -1
  199. package/dist/{spa-router-COgu4txb.d.ts → spa-router-kXORcsT_.d.ts} +1 -1
  200. package/dist/storage.cjs +7 -3
  201. package/dist/storage.cjs.map +1 -0
  202. package/dist/storage.mjs +1 -1
  203. package/dist/testing.cjs.map +1 -0
  204. package/dist/testing.d.mts +2 -2
  205. package/dist/testing.d.ts +2 -2
  206. package/dist/testing.mjs +2 -1
  207. package/dist/testing.mjs.map +1 -1
  208. package/dist/theme/client.cjs.map +1 -0
  209. package/dist/theme/index.cjs.map +1 -0
  210. package/dist/theme/runtime.cjs.map +1 -0
  211. package/dist/theme/server.cjs.map +1 -0
  212. package/dist/{utils-DkU2c_1B.d.ts → utils-BhvF7Hhl.d.ts} +1 -1
  213. package/dist/{utils-DL2VwDQl.d.mts → utils-uF32evNX.d.mts} +1 -1
  214. package/dist/version.cjs +1 -1
  215. package/dist/version.cjs.map +1 -0
  216. package/dist/version.mjs +1 -1
  217. package/dist/vite.cjs +143 -50
  218. package/dist/vite.cjs.map +1 -0
  219. package/dist/vite.d.mts +2 -2
  220. package/dist/vite.d.ts +2 -2
  221. package/dist/vite.mjs +10 -8
  222. package/dist/{workflows-ChyK_oTu.d.mts → workflows-BantWytQ.d.mts} +7 -0
  223. package/dist/{workflows-ChyK_oTu.d.ts → workflows-BantWytQ.d.ts} +7 -0
  224. package/dist/workflows.cjs +67 -4
  225. package/dist/workflows.cjs.map +1 -0
  226. package/dist/workflows.d.mts +1 -1
  227. package/dist/workflows.d.ts +1 -1
  228. package/dist/workflows.mjs +2 -1
  229. package/package.json +17 -17
  230. package/dist/chunk-2SKCXYLB.mjs.map +0 -1
  231. package/dist/chunk-35NPLKQJ.mjs.map +0 -1
  232. package/dist/chunk-AAC66ILR.mjs.map +0 -1
  233. package/dist/chunk-BZAIS65C.mjs.map +0 -1
  234. package/dist/chunk-EPDIF432.mjs.map +0 -1
  235. package/dist/chunk-ISSFLGJ5.mjs.map +0 -1
  236. package/dist/chunk-WKDAA6V2.mjs.map +0 -1
  237. /package/dist/{chunk-WD2EBM3I.mjs.map → chunk-3CQJV3NC.mjs.map} +0 -0
  238. /package/dist/{chunk-I3OOUWO5.mjs.map → chunk-3GDRV7SG.mjs.map} +0 -0
  239. /package/dist/{chunk-X4SFHKFH.mjs.map → chunk-6KJY25DQ.mjs.map} +0 -0
  240. /package/dist/{chunk-FP5Q67FO.mjs.map → chunk-AAEZP2EY.mjs.map} +0 -0
  241. /package/dist/{chunk-FSIXEIOB.mjs.map → chunk-L7FSTPGS.mjs.map} +0 -0
  242. /package/dist/{chunk-GJ7W6LNK.mjs.map → chunk-N5RK4LK6.mjs.map} +0 -0
  243. /package/dist/{chunk-52BR7LTX.mjs.map → chunk-STSPSJUI.mjs.map} +0 -0
  244. /package/dist/{chunk-YIBV77KZ.mjs.map → chunk-URQELPSH.mjs.map} +0 -0
  245. /package/dist/{chunk-UMUWR5XA.mjs.map → chunk-UWQ4EEW7.mjs.map} +0 -0
  246. /package/dist/{chunk-IZBX2TEU.mjs.map → chunk-VQG3QWWK.mjs.map} +0 -0
  247. /package/dist/{chunk-D7F7YZ7L.mjs.map → chunk-WA77FWAO.mjs.map} +0 -0
  248. /package/dist/{integration-orm-LLW6WZNK.mjs.map → integration-orm-G5BPBT5X.mjs.map} +0 -0
package/dist/vite.cjs CHANGED
@@ -922,6 +922,29 @@ var init_search_params = __esm({
922
922
  }
923
923
  });
924
924
 
925
+ // src/utils/runtime-env.ts
926
+ function getFarmRuntimeBindings() {
927
+ const runtimeBindings = globalThis.__env__;
928
+ return runtimeBindings && typeof runtimeBindings === "object" ? runtimeBindings : void 0;
929
+ }
930
+ function readFarmEnvironmentValue(name2) {
931
+ const runtimeValue = getFarmRuntimeBindings()?.[name2];
932
+ if (typeof runtimeValue === "string") return runtimeValue;
933
+ return typeof process !== "undefined" ? process.env?.[name2] : void 0;
934
+ }
935
+ function isFarmDeployedRuntime() {
936
+ if (getFarmRuntimeBindings()) return true;
937
+ return readFarmEnvironmentValue("NODE_ENV") === "production";
938
+ }
939
+ var init_runtime_env = __esm({
940
+ "src/utils/runtime-env.ts"() {
941
+ "use strict";
942
+ __name(getFarmRuntimeBindings, "getFarmRuntimeBindings");
943
+ __name(readFarmEnvironmentValue, "readFarmEnvironmentValue");
944
+ __name(isFarmDeployedRuntime, "isFarmDeployedRuntime");
945
+ }
946
+ });
947
+
925
948
  // src/utils/decode.ts
926
949
  function decodeRouteSegment(segment) {
927
950
  try {
@@ -1364,7 +1387,8 @@ function resolveWorkflowsConfig(workflows) {
1364
1387
  dirs,
1365
1388
  route: normalizeWorkflowRoute(options.route || DEFAULT_FARM_WORKFLOW_ROUTE),
1366
1389
  secretEnv: options.secretEnv || DEFAULT_FARM_WORKFLOW_SECRET_ENV,
1367
- secret: options.secret
1390
+ secret: options.secret,
1391
+ allowUnsecured: options.allowUnsecured === true
1368
1392
  };
1369
1393
  }
1370
1394
  async function discoverFarmWorkflows(config, options = {}) {
@@ -1490,8 +1514,11 @@ async function prepareFarmWorkflowsForNitro(config) {
1490
1514
  await fs14.mkdir(generatedDir, { recursive: true });
1491
1515
  const tasks = {};
1492
1516
  const scheduledTasks = createScheduledTasks(workflows);
1517
+ const wrapperNames = resolveWorkflowWrapperFileNames(workflows.map((workflow) => workflow.id));
1493
1518
  for (const workflow of workflows) {
1494
- const wrapperPath = toPosixPath(path35.join(generatedDir, `${safeFileName(workflow.id)}.mjs`));
1519
+ const wrapperPath = toPosixPath(
1520
+ path35.join(generatedDir, `${wrapperNames.get(workflow.id)}.mjs`)
1521
+ );
1495
1522
  await fs14.writeFile(wrapperPath, createNitroTaskWrapper(workflow), "utf8");
1496
1523
  tasks[workflow.id] = {
1497
1524
  handler: wrapperPath,
@@ -1852,8 +1879,16 @@ function readScheduledTime(payload) {
1852
1879
  return payload && typeof payload === "object" && "scheduledTime" in payload ? payload.scheduledTime : void 0;
1853
1880
  }
1854
1881
  function verifyWorkflowSecret(request, config) {
1855
- const secret = config.secret || process.env[config.secretEnv] || "";
1856
- if (!secret) return null;
1882
+ const secret = config.secret || readFarmEnvironmentValue(config.secretEnv) || "";
1883
+ if (!secret) {
1884
+ if (config.allowUnsecured === true || !isFarmDeployedRuntime()) return null;
1885
+ return Response.json(
1886
+ {
1887
+ error: "Workflow route requires a secret. Set the CRON_SECRET environment variable, configure workflows.secret, or set workflows.allowUnsecured to true."
1888
+ },
1889
+ { status: 401 }
1890
+ );
1891
+ }
1857
1892
  const authorization = request.headers.get("authorization") || "";
1858
1893
  const bearer = authorization.match(/^Bearer\s+(.+)$/i)?.[1] || "";
1859
1894
  const headerSecret = request.headers.get("x-farm-workflow-secret") || "";
@@ -1866,6 +1901,37 @@ function joinRoute(...parts) {
1866
1901
  function trimSlashes(value) {
1867
1902
  return value.replace(/^\/+|\/+$/g, "");
1868
1903
  }
1904
+ function resolveWorkflowWrapperFileNames(ids) {
1905
+ const groups = /* @__PURE__ */ new Map();
1906
+ for (const id of ids) {
1907
+ const key = safeFileName(id).toLowerCase();
1908
+ groups.set(key, (groups.get(key) ?? 0) + 1);
1909
+ }
1910
+ const resolved = /* @__PURE__ */ new Map();
1911
+ const claimed = /* @__PURE__ */ new Map();
1912
+ for (const id of ids) {
1913
+ const base = safeFileName(id);
1914
+ const key = base.toLowerCase();
1915
+ const fileName = (groups.get(key) ?? 0) > 1 ? `${key}-${workflowIdFingerprint(id)}` : base;
1916
+ const claimedBy = claimed.get(fileName.toLowerCase());
1917
+ if (claimedBy !== void 0) {
1918
+ throw new Error(
1919
+ `Farm workflows ${JSON.stringify(claimedBy)} and ${JSON.stringify(id)} generate the same wrapper file ${JSON.stringify(`${fileName}.mjs`)}. Rename one of them.`
1920
+ );
1921
+ }
1922
+ claimed.set(fileName.toLowerCase(), id);
1923
+ resolved.set(id, fileName);
1924
+ }
1925
+ return resolved;
1926
+ }
1927
+ function workflowIdFingerprint(value) {
1928
+ let hash = 2166136261;
1929
+ for (let index = 0; index < value.length; index += 1) {
1930
+ hash ^= value.charCodeAt(index);
1931
+ hash = Math.imul(hash, 16777619);
1932
+ }
1933
+ return (hash >>> 0).toString(16).padStart(8, "0");
1934
+ }
1869
1935
  function safeFileName(value) {
1870
1936
  return value.replace(/[^a-zA-Z0-9._-]+/g, "-") || "workflow";
1871
1937
  }
@@ -1878,6 +1944,7 @@ var init_workflows = __esm({
1878
1944
  "use strict";
1879
1945
  init_server_http();
1880
1946
  init_search_params();
1947
+ init_runtime_env();
1881
1948
  init_decode();
1882
1949
  init_utils();
1883
1950
  init_route_pattern();
@@ -1917,6 +1984,8 @@ var init_workflows = __esm({
1917
1984
  __name(verifyWorkflowSecret, "verifyWorkflowSecret");
1918
1985
  __name(joinRoute, "joinRoute");
1919
1986
  __name(trimSlashes, "trimSlashes");
1987
+ __name(resolveWorkflowWrapperFileNames, "resolveWorkflowWrapperFileNames");
1988
+ __name(workflowIdFingerprint, "workflowIdFingerprint");
1920
1989
  __name(safeFileName, "safeFileName");
1921
1990
  __name(relativePath, "relativePath");
1922
1991
  }
@@ -2067,6 +2136,7 @@ var init_cron = __esm({
2067
2136
  "src/cron.ts"() {
2068
2137
  "use strict";
2069
2138
  init_utils();
2139
+ init_runtime_env();
2070
2140
  DEFAULT_FARM_CRON_SECRET_ENV = "CRON_SECRET";
2071
2141
  CRON_FIELD_RANGES = [
2072
2142
  [0, 59, "minute"],
@@ -2447,9 +2517,13 @@ function getStorage(namespace) {
2447
2517
  const namespaced = (0, import_unstorage.prefixStorage)(globalStorage, base);
2448
2518
  return {
2449
2519
  ...namespaced,
2450
- async clear() {
2451
- const keys = await namespaced.getKeys();
2452
- await Promise.all(keys.map((key) => namespaced.removeItem(key)));
2520
+ // Scope the wipe to the namespace instead of the whole storage, and keep
2521
+ // the caller's base so `clear("sessions")` cannot take unrelated keys with
2522
+ // it. Dropping the argument silently widens a targeted clear into a
2523
+ // namespace-wide delete.
2524
+ async clear(base2, opts) {
2525
+ const keys = await namespaced.getKeys(base2);
2526
+ await Promise.all(keys.map((key) => namespaced.removeItem(key, opts)));
2453
2527
  }
2454
2528
  };
2455
2529
  }
@@ -3383,6 +3457,46 @@ var init_cache_invalidation = __esm({
3383
3457
  }
3384
3458
  });
3385
3459
 
3460
+ // src/request-origin.ts
3461
+ function normalizeAllowedOriginPattern(value, label) {
3462
+ const pattern = value.trim().toLowerCase();
3463
+ if (!pattern) {
3464
+ throw new TypeError(`${label} cannot contain empty values`);
3465
+ }
3466
+ if (pattern.includes("*")) {
3467
+ if (!/^(?:https?:\/\/)?\*\.[a-z0-9.-]+(?::\d+)?$/.test(pattern)) {
3468
+ throw new TypeError(`Invalid ${label} pattern: ${JSON.stringify(value)}`);
3469
+ }
3470
+ return pattern;
3471
+ }
3472
+ if (pattern.includes("://")) {
3473
+ let parsed;
3474
+ try {
3475
+ parsed = new URL(pattern);
3476
+ } catch {
3477
+ throw new TypeError(`Invalid ${label} value: ${JSON.stringify(value)}`);
3478
+ }
3479
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:" || parsed.username || parsed.password || parsed.pathname !== "/" || parsed.search || parsed.hash) {
3480
+ throw new TypeError(`${label} must contain origins without paths: ${JSON.stringify(value)}`);
3481
+ }
3482
+ return parsed.origin;
3483
+ }
3484
+ if (/[/@?#]/.test(pattern)) {
3485
+ throw new TypeError(`${label} must contain origins or hosts: ${JSON.stringify(value)}`);
3486
+ }
3487
+ try {
3488
+ return new URL(`http://${pattern}`).host;
3489
+ } catch {
3490
+ throw new TypeError(`Invalid ${label} value: ${JSON.stringify(value)}`);
3491
+ }
3492
+ }
3493
+ var init_request_origin = __esm({
3494
+ "src/request-origin.ts"() {
3495
+ "use strict";
3496
+ __name(normalizeAllowedOriginPattern, "normalizeAllowedOriginPattern");
3497
+ }
3498
+ });
3499
+
3386
3500
  // src/server-fn-error.ts
3387
3501
  var init_server_fn_error = __esm({
3388
3502
  "src/server-fn-error.ts"() {
@@ -3392,7 +3506,9 @@ var init_server_fn_error = __esm({
3392
3506
 
3393
3507
  // src/server-action-security.ts
3394
3508
  function resolveServerActionsConfig(config) {
3395
- const allowedOrigins = (config?.allowedOrigins ?? []).map(normalizeAllowedOriginPattern);
3509
+ const allowedOrigins = (config?.allowedOrigins ?? []).map(
3510
+ (value) => normalizeAllowedOriginPattern(value, SERVER_ACTION_ALLOWED_ORIGINS_LABEL)
3511
+ );
3396
3512
  const bodySizeLimit = parseBodySizeLimit(
3397
3513
  config?.bodySizeLimit ?? DEFAULT_SERVER_ACTION_BODY_SIZE_LIMIT,
3398
3514
  "serverActions.bodySizeLimit"
@@ -3412,50 +3528,16 @@ function getServerActionStorage() {
3412
3528
  }
3413
3529
  return globalState2[SERVER_ACTION_STORAGE_KEY];
3414
3530
  }
3415
- function normalizeAllowedOriginPattern(value) {
3416
- const pattern = value.trim().toLowerCase();
3417
- if (!pattern) {
3418
- throw new TypeError("serverActions.allowedOrigins cannot contain empty values");
3419
- }
3420
- if (pattern.includes("*")) {
3421
- if (!/^(?:https?:\/\/)?\*\.[a-z0-9.-]+(?::\d+)?$/.test(pattern)) {
3422
- throw new TypeError(`Invalid serverActions.allowedOrigins pattern: ${JSON.stringify(value)}`);
3423
- }
3424
- return pattern;
3425
- }
3426
- if (pattern.includes("://")) {
3427
- let parsed;
3428
- try {
3429
- parsed = new URL(pattern);
3430
- } catch {
3431
- throw new TypeError(`Invalid serverActions.allowedOrigins value: ${JSON.stringify(value)}`);
3432
- }
3433
- if (parsed.protocol !== "http:" && parsed.protocol !== "https:" || parsed.username || parsed.password || parsed.pathname !== "/" || parsed.search || parsed.hash) {
3434
- throw new TypeError(
3435
- `serverActions.allowedOrigins must contain origins without paths: ${JSON.stringify(value)}`
3436
- );
3437
- }
3438
- return parsed.origin;
3439
- }
3440
- if (/[/@?#]/.test(pattern)) {
3441
- throw new TypeError(
3442
- `serverActions.allowedOrigins must contain origins or hosts: ${JSON.stringify(value)}`
3443
- );
3444
- }
3445
- try {
3446
- return new URL(`http://${pattern}`).host;
3447
- } catch {
3448
- throw new TypeError(`Invalid serverActions.allowedOrigins value: ${JSON.stringify(value)}`);
3449
- }
3450
- }
3451
- var import_node_async_hooks, DEFAULT_SERVER_ACTION_BODY_SIZE_LIMIT, SERVER_ACTION_STORAGE_KEY;
3531
+ var import_node_async_hooks, SERVER_ACTION_ALLOWED_ORIGINS_LABEL, DEFAULT_SERVER_ACTION_BODY_SIZE_LIMIT, SERVER_ACTION_STORAGE_KEY;
3452
3532
  var init_server_action_security = __esm({
3453
3533
  "src/server-action-security.ts"() {
3454
3534
  "use strict";
3455
3535
  import_node_async_hooks = require("async_hooks");
3456
3536
  init_cache_invalidation();
3537
+ init_request_origin();
3457
3538
  init_server_fn_error();
3458
3539
  init_server_http();
3540
+ SERVER_ACTION_ALLOWED_ORIGINS_LABEL = "serverActions.allowedOrigins";
3459
3541
  DEFAULT_SERVER_ACTION_BODY_SIZE_LIMIT = 1e6;
3460
3542
  SERVER_ACTION_STORAGE_KEY = /* @__PURE__ */ Symbol.for("farm.serverActionStorage");
3461
3543
  __name(resolveServerActionsConfig, "resolveServerActionsConfig");
@@ -3467,7 +3549,6 @@ var init_server_action_security = __esm({
3467
3549
  getServerActionExecutionContext()?.cacheTasks.add(task);
3468
3550
  });
3469
3551
  __name(getServerActionStorage, "getServerActionStorage");
3470
- __name(normalizeAllowedOriginPattern, "normalizeAllowedOriginPattern");
3471
3552
  }
3472
3553
  });
3473
3554
 
@@ -5740,6 +5821,14 @@ var init_routes = __esm({
5740
5821
  }
5741
5822
  });
5742
5823
 
5824
+ // src/integration-request-security.ts
5825
+ var init_integration_request_security = __esm({
5826
+ "src/integration-request-security.ts"() {
5827
+ "use strict";
5828
+ init_request_origin();
5829
+ }
5830
+ });
5831
+
5743
5832
  // src/integration-api.ts
5744
5833
  function defineIntegrationAPIOperation(operation) {
5745
5834
  return {
@@ -7205,6 +7294,7 @@ var init_integrations = __esm({
7205
7294
  "src/integrations.ts"() {
7206
7295
  "use strict";
7207
7296
  init_route_pattern();
7297
+ init_integration_request_security();
7208
7298
  init_integration_api();
7209
7299
  init_plugin_integration_context();
7210
7300
  init_decode();
@@ -8830,10 +8920,11 @@ function createFarmImageHandler(config, options) {
8830
8920
  "quality"
8831
8921
  );
8832
8922
  const accept = request.headers.get("accept") ?? "";
8923
+ const negotiatedFormat = selectOutputFormat(accept, config.formats) ?? "";
8833
8924
  const cacheKey = `${sourceUrl.href}
8834
8925
  ${width}
8835
8926
  ${quality}
8836
- ${accept}`;
8927
+ ${negotiatedFormat}`;
8837
8928
  let optimized = cache.get(cacheKey);
8838
8929
  if (!optimized) {
8839
8930
  const fetchedSource = await fetchImageSource(
@@ -8860,7 +8951,8 @@ ${accept}`;
8860
8951
  quality,
8861
8952
  accept,
8862
8953
  formats: config.formats,
8863
- signal: request.signal
8954
+ signal: request.signal,
8955
+ maximumResponseBody: config.maximumResponseBody
8864
8956
  });
8865
8957
  throwIfAborted2(request.signal);
8866
8958
  validateTransformedResult(result, config);
@@ -9191,7 +9283,7 @@ function throwIfAborted2(signal) {
9191
9283
  function isAbortError(error) {
9192
9284
  return error instanceof Error && error.name === "AbortError";
9193
9285
  }
9194
- var _FarmImageRequestError, FarmImageRequestError, _FarmImageMemoryCache, FarmImageMemoryCache;
9286
+ var _FarmImageRequestError, FarmImageRequestError, DEFAULT_IMAGE_TRANSFORM_BODY_LIMIT, _FarmImageMemoryCache, FarmImageMemoryCache;
9195
9287
  var init_image_server = __esm({
9196
9288
  "src/image-server.ts"() {
9197
9289
  "use strict";
@@ -9207,6 +9299,7 @@ var init_image_server = __esm({
9207
9299
  __name(_FarmImageRequestError, "FarmImageRequestError");
9208
9300
  FarmImageRequestError = _FarmImageRequestError;
9209
9301
  __name(createFarmImageHandler, "createFarmImageHandler");
9302
+ DEFAULT_IMAGE_TRANSFORM_BODY_LIMIT = 10 * 1024 * 1024;
9210
9303
  __name(selectOutputFormat, "selectOutputFormat");
9211
9304
  __name(isPrivateImageAddress, "isPrivateImageAddress");
9212
9305
  __name(parseAllowedInteger, "parseAllowedInteger");
@@ -21899,7 +21992,7 @@ _setFarmThemeServerSnapshotResolver(() => {
21899
21992
  });
21900
21993
 
21901
21994
  // package.json
21902
- var version = "0.1.0-beta.97";
21995
+ var version = "0.1.0-beta.98";
21903
21996
 
21904
21997
  // src/version.ts
21905
21998
  var FARM_VERSION = version;