@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.
- package/dist/after.cjs.map +1 -0
- package/dist/agent-runtime.cjs +7 -3
- package/dist/agent-runtime.cjs.map +1 -0
- package/dist/agent-runtime.d.mts +2 -2
- package/dist/agent-runtime.d.ts +2 -2
- package/dist/agent-runtime.mjs +2 -1
- package/dist/agent-runtime.mjs.map +1 -1
- package/dist/api/route-manager.cjs.map +1 -0
- package/dist/api/route-manager.d.mts +2 -2
- package/dist/api/route-manager.d.ts +2 -2
- package/dist/api/runtime.cjs.map +1 -0
- package/dist/api.cjs +26 -1
- package/dist/api.cjs.map +1 -0
- package/dist/api.d.mts +3 -3
- package/dist/api.d.ts +3 -3
- package/dist/api.mjs +2 -2
- package/dist/{app-CIOx3LvY.d.ts → app-CJKz2mbi.d.ts} +4 -4
- package/dist/{app-DBd6437H.d.mts → app-DMEGFLR2.d.mts} +4 -4
- package/dist/app-markdown.cjs.map +1 -0
- package/dist/app-markdown.d.mts +3 -3
- package/dist/app-markdown.d.ts +3 -3
- package/dist/cache.cjs.map +1 -0
- package/dist/{chunk-WD2EBM3I.mjs → chunk-3CQJV3NC.mjs} +2 -2
- package/dist/{chunk-I3OOUWO5.mjs → chunk-3GDRV7SG.mjs} +2 -2
- package/dist/{chunk-X4SFHKFH.mjs → chunk-6KJY25DQ.mjs} +5 -5
- package/dist/{chunk-FP5Q67FO.mjs → chunk-AAEZP2EY.mjs} +9 -9
- package/dist/{chunk-WMJGA32P.mjs → chunk-BXVOHG6B.mjs} +27 -2
- package/dist/{chunk-WMJGA32P.mjs.map → chunk-BXVOHG6B.mjs.map} +1 -1
- package/dist/{chunk-BZAIS65C.mjs → chunk-DIHNOVZZ.mjs} +40 -13
- package/dist/chunk-DIHNOVZZ.mjs.map +1 -0
- package/dist/{chunk-ISSFLGJ5.mjs → chunk-FDWECN3W.mjs} +8 -4
- package/dist/chunk-FDWECN3W.mjs.map +1 -0
- package/dist/chunk-FDWXXTWR.mjs +114 -0
- package/dist/chunk-FDWXXTWR.mjs.map +1 -0
- package/dist/{chunk-J3MPQ4MQ.mjs → chunk-IHADQ6J7.mjs} +2 -2
- package/dist/{chunk-J3MPQ4MQ.mjs.map → chunk-IHADQ6J7.mjs.map} +1 -1
- package/dist/{chunk-FSIXEIOB.mjs → chunk-L7FSTPGS.mjs} +2 -2
- package/dist/{chunk-AAC66ILR.mjs → chunk-LXXG3K2Y.mjs} +61 -2
- package/dist/chunk-LXXG3K2Y.mjs.map +1 -0
- package/dist/{chunk-GJ7W6LNK.mjs → chunk-N5RK4LK6.mjs} +3 -3
- package/dist/{chunk-WKDAA6V2.mjs → chunk-NBF56FXB.mjs} +20 -5
- package/dist/chunk-NBF56FXB.mjs.map +1 -0
- package/dist/chunk-RKUPOYQV.mjs +28 -0
- package/dist/chunk-RKUPOYQV.mjs.map +1 -0
- package/dist/{chunk-2SKCXYLB.mjs → chunk-RL3THP3L.mjs} +54 -5
- package/dist/chunk-RL3THP3L.mjs.map +1 -0
- package/dist/{chunk-52BR7LTX.mjs → chunk-STSPSJUI.mjs} +3 -3
- package/dist/{chunk-EPDIF432.mjs → chunk-UOGX6UNO.mjs} +37 -17
- package/dist/chunk-UOGX6UNO.mjs.map +1 -0
- package/dist/{chunk-YIBV77KZ.mjs → chunk-URQELPSH.mjs} +2 -2
- package/dist/{chunk-UMUWR5XA.mjs → chunk-UWQ4EEW7.mjs} +2 -2
- package/dist/{chunk-IZBX2TEU.mjs → chunk-VQG3QWWK.mjs} +2 -2
- package/dist/{chunk-D7F7YZ7L.mjs → chunk-WA77FWAO.mjs} +8 -8
- package/dist/{chunk-35NPLKQJ.mjs → chunk-XWM2C267.mjs} +21 -105
- package/dist/chunk-XWM2C267.mjs.map +1 -0
- package/dist/client/lifecycle.cjs.map +1 -0
- package/dist/client/lifecycle.mjs +2 -2
- package/dist/{client-plugins-B6-07YmP.d.mts → client-plugins-CyTLPqjP.d.mts} +38 -2
- package/dist/{client-plugins-By6MVUX-.d.ts → client-plugins-D-UgzngJ.d.ts} +38 -2
- package/dist/client-plugins.cjs +1 -1
- package/dist/client-plugins.cjs.map +1 -0
- package/dist/client-plugins.d.mts +2 -2
- package/dist/client-plugins.d.ts +2 -2
- package/dist/client-plugins.mjs +2 -2
- package/dist/client.cjs +61 -16
- package/dist/client.cjs.map +1 -0
- package/dist/client.d.mts +5 -5
- package/dist/client.d.ts +5 -5
- package/dist/client.mjs +7 -7
- package/dist/config.cjs.map +1 -0
- package/dist/config.d.mts +2 -2
- package/dist/config.d.ts +2 -2
- package/dist/cron.cjs +48 -12
- package/dist/cron.cjs.map +1 -0
- package/dist/cron.mjs +2 -1
- package/dist/deferred.cjs.map +1 -0
- package/dist/deployment.cjs.map +1 -0
- package/dist/{devtools-XWZX6CCL.mjs → devtools-KQ2PXSIC.mjs} +8 -6
- package/dist/{devtools-XWZX6CCL.mjs.map → devtools-KQ2PXSIC.mjs.map} +1 -1
- package/dist/docs.cjs +7 -3
- package/dist/docs.cjs.map +1 -0
- package/dist/docs.mjs +8 -6
- package/dist/env-types.cjs.map +1 -0
- package/dist/env.cjs.map +1 -0
- package/dist/environment/vite.cjs.map +1 -0
- package/dist/environment.cjs.map +1 -0
- package/dist/font.cjs.map +1 -0
- package/dist/headers.cjs.map +1 -0
- package/dist/i18n/client.cjs.map +1 -0
- package/dist/i18n/index.cjs.map +1 -0
- package/dist/i18n/server.cjs.map +1 -0
- package/dist/image/server.cjs +19 -4
- package/dist/image/server.cjs.map +1 -0
- package/dist/image/server.d.mts +6 -0
- package/dist/image/server.d.ts +6 -0
- package/dist/image/server.mjs +1 -1
- package/dist/image/sharp.cjs +1 -0
- package/dist/image/sharp.cjs.map +1 -0
- package/dist/image/sharp.mjs +1 -1
- package/dist/image.cjs.map +1 -0
- package/dist/index.cjs +370 -143
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +10 -10
- package/dist/index.d.ts +10 -10
- package/dist/index.mjs +29 -21
- package/dist/index.mjs.map +1 -1
- package/dist/instrumentation.cjs.map +1 -0
- package/dist/{integration-orm-LLW6WZNK.mjs → integration-orm-G5BPBT5X.mjs} +3 -3
- package/dist/integrations.cjs +168 -5
- package/dist/integrations.cjs.map +1 -0
- package/dist/integrations.d.mts +2 -2
- package/dist/integrations.d.ts +2 -2
- package/dist/integrations.mjs +10 -3
- package/dist/internal/build-runtime.cjs +178 -51
- package/dist/internal/build-runtime.cjs.map +1 -0
- package/dist/internal/build-runtime.d.mts +4 -4
- package/dist/internal/build-runtime.d.ts +4 -4
- package/dist/internal/build-runtime.mjs +13 -11
- package/dist/internal/client-runtime.cjs +1 -1
- package/dist/internal/client-runtime.cjs.map +1 -0
- package/dist/internal/client-runtime.mjs +2 -2
- package/dist/internal/config-runtime.cjs +48 -42
- package/dist/internal/config-runtime.cjs.map +1 -0
- package/dist/internal/config-runtime.d.mts +3 -3
- package/dist/internal/config-runtime.d.ts +3 -3
- package/dist/internal/config-runtime.mjs +7 -5
- package/dist/internal/isolated-boundary.cjs.map +1 -0
- package/dist/internal/metadata-image-runtime.cjs.map +1 -0
- package/dist/internal/product-telemetry-runtime.cjs +6 -2
- package/dist/internal/product-telemetry-runtime.cjs.map +1 -0
- package/dist/internal/product-telemetry-runtime.mjs +6 -2
- package/dist/internal/product-telemetry-runtime.mjs.map +1 -1
- package/dist/internal/production-node-env.cjs.map +1 -0
- package/dist/internal/production-runtime.cjs.map +1 -0
- package/dist/internal/production-runtime.d.mts +8 -8
- package/dist/internal/production-runtime.d.ts +8 -8
- package/dist/markdown.cjs.map +1 -0
- package/dist/{metadata-route-8_V3UonT.d.ts → metadata-route-BpU8K9RI.d.ts} +1 -1
- package/dist/{metadata-route-CWP_HjGU.d.mts → metadata-route-D1AYgWni.d.mts} +1 -1
- package/dist/middleware.cjs.map +1 -0
- package/dist/middleware.d.mts +4 -4
- package/dist/middleware.d.ts +4 -4
- package/dist/navigation.cjs.map +1 -0
- package/dist/{nitro-EGRNOB5P.mjs → nitro-IITKBMUI.mjs} +4 -3
- package/dist/{nitro-EGRNOB5P.mjs.map → nitro-IITKBMUI.mjs.map} +1 -1
- package/dist/observability.cjs.map +1 -0
- package/dist/plugin.cjs +143 -50
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.d.mts +2 -2
- package/dist/plugin.d.ts +2 -2
- package/dist/plugin.mjs +10 -8
- package/dist/{production-runtime-BGRH1dKG.d.mts → production-runtime-BIKA-BVT.d.mts} +2 -2
- package/dist/{production-runtime-CdmzsDax.d.ts → production-runtime-DtCUEELY.d.ts} +2 -2
- package/dist/query/client.cjs.map +1 -0
- package/dist/query/index.cjs.map +1 -0
- package/dist/query/parsers.cjs.map +1 -0
- package/dist/query/server.cjs.map +1 -0
- package/dist/{render-plan-DLxJYAA5.d.mts → render-plan-Dimb23ux.d.mts} +1 -1
- package/dist/{render-plan-0GeHiGVZ.d.ts → render-plan-rg3uiSo3.d.ts} +1 -1
- package/dist/renderer/react/client.cjs.map +1 -0
- package/dist/renderer/react/server.cjs.map +1 -0
- package/dist/renderer/react/vite.cjs.map +1 -0
- package/dist/renderer-client.cjs +26 -1
- package/dist/renderer-client.cjs.map +1 -0
- package/dist/renderer-client.d.mts +4 -4
- package/dist/renderer-client.d.ts +4 -4
- package/dist/renderer-client.mjs +2 -2
- package/dist/renderer.cjs.map +1 -0
- package/dist/{request-BstWbZ6O.d.ts → request-ColD-ChW.d.ts} +1 -1
- package/dist/{request-BCNXSXLh.d.mts → request-D5zvbU2Z.d.mts} +1 -1
- package/dist/request.cjs.map +1 -0
- package/dist/request.d.mts +3 -3
- package/dist/request.d.ts +3 -3
- package/dist/router.cjs.map +1 -0
- package/dist/routes.cjs.map +1 -0
- package/dist/routes.d.mts +2 -2
- package/dist/routes.d.ts +2 -2
- package/dist/server-action-security.cjs +117 -104
- package/dist/server-action-security.cjs.map +1 -0
- package/dist/server-action-security.mjs +2 -1
- package/dist/server-fn-client.cjs.map +1 -0
- package/dist/server-fn.cjs.map +1 -0
- package/dist/server-fn.mjs +3 -2
- package/dist/server-plugins.cjs.map +1 -0
- package/dist/server-plugins.d.mts +3 -3
- package/dist/server-plugins.d.ts +3 -3
- package/dist/server-query-client.cjs +26 -1
- package/dist/server-query-client.cjs.map +1 -0
- package/dist/server-query-client.mjs +3 -3
- package/dist/server-query.cjs.map +1 -0
- package/dist/server-query.mjs +4 -3
- package/dist/server.cjs +221 -116
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.mts +8 -8
- package/dist/server.d.ts +8 -8
- package/dist/server.mjs +13 -11
- package/dist/server.mjs.map +1 -1
- package/dist/{spa-router-BeyAVSc6.d.mts → spa-router-BlilYGAN.d.mts} +1 -1
- package/dist/{spa-router-COgu4txb.d.ts → spa-router-kXORcsT_.d.ts} +1 -1
- package/dist/storage.cjs +7 -3
- package/dist/storage.cjs.map +1 -0
- package/dist/storage.mjs +1 -1
- package/dist/testing.cjs.map +1 -0
- package/dist/testing.d.mts +2 -2
- package/dist/testing.d.ts +2 -2
- package/dist/testing.mjs +2 -1
- package/dist/testing.mjs.map +1 -1
- package/dist/theme/client.cjs.map +1 -0
- package/dist/theme/index.cjs.map +1 -0
- package/dist/theme/runtime.cjs.map +1 -0
- package/dist/theme/server.cjs.map +1 -0
- package/dist/{utils-DkU2c_1B.d.ts → utils-BhvF7Hhl.d.ts} +1 -1
- package/dist/{utils-DL2VwDQl.d.mts → utils-uF32evNX.d.mts} +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -0
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +143 -50
- package/dist/vite.cjs.map +1 -0
- package/dist/vite.d.mts +2 -2
- package/dist/vite.d.ts +2 -2
- package/dist/vite.mjs +10 -8
- package/dist/{workflows-ChyK_oTu.d.mts → workflows-BantWytQ.d.mts} +7 -0
- package/dist/{workflows-ChyK_oTu.d.ts → workflows-BantWytQ.d.ts} +7 -0
- package/dist/workflows.cjs +67 -4
- package/dist/workflows.cjs.map +1 -0
- package/dist/workflows.d.mts +1 -1
- package/dist/workflows.d.ts +1 -1
- package/dist/workflows.mjs +2 -1
- package/package.json +17 -17
- package/dist/chunk-2SKCXYLB.mjs.map +0 -1
- package/dist/chunk-35NPLKQJ.mjs.map +0 -1
- package/dist/chunk-AAC66ILR.mjs.map +0 -1
- package/dist/chunk-BZAIS65C.mjs.map +0 -1
- package/dist/chunk-EPDIF432.mjs.map +0 -1
- package/dist/chunk-ISSFLGJ5.mjs.map +0 -1
- package/dist/chunk-WKDAA6V2.mjs.map +0 -1
- /package/dist/{chunk-WD2EBM3I.mjs.map → chunk-3CQJV3NC.mjs.map} +0 -0
- /package/dist/{chunk-I3OOUWO5.mjs.map → chunk-3GDRV7SG.mjs.map} +0 -0
- /package/dist/{chunk-X4SFHKFH.mjs.map → chunk-6KJY25DQ.mjs.map} +0 -0
- /package/dist/{chunk-FP5Q67FO.mjs.map → chunk-AAEZP2EY.mjs.map} +0 -0
- /package/dist/{chunk-FSIXEIOB.mjs.map → chunk-L7FSTPGS.mjs.map} +0 -0
- /package/dist/{chunk-GJ7W6LNK.mjs.map → chunk-N5RK4LK6.mjs.map} +0 -0
- /package/dist/{chunk-52BR7LTX.mjs.map → chunk-STSPSJUI.mjs.map} +0 -0
- /package/dist/{chunk-YIBV77KZ.mjs.map → chunk-URQELPSH.mjs.map} +0 -0
- /package/dist/{chunk-UMUWR5XA.mjs.map → chunk-UWQ4EEW7.mjs.map} +0 -0
- /package/dist/{chunk-IZBX2TEU.mjs.map → chunk-VQG3QWWK.mjs.map} +0 -0
- /package/dist/{chunk-D7F7YZ7L.mjs.map → chunk-WA77FWAO.mjs.map} +0 -0
- /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(
|
|
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 ||
|
|
1856
|
-
if (!secret)
|
|
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
|
-
|
|
2451
|
-
|
|
2452
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
${
|
|
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.
|
|
21995
|
+
var version = "0.1.0-beta.98";
|
|
21903
21996
|
|
|
21904
21997
|
// src/version.ts
|
|
21905
21998
|
var FARM_VERSION = version;
|