@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/integrations.cjs
CHANGED
|
@@ -392,9 +392,13 @@ function getStorage(namespace) {
|
|
|
392
392
|
const namespaced = (0, import_unstorage.prefixStorage)(globalStorage, base);
|
|
393
393
|
return {
|
|
394
394
|
...namespaced,
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
395
|
+
// Scope the wipe to the namespace instead of the whole storage, and keep
|
|
396
|
+
// the caller's base so `clear("sessions")` cannot take unrelated keys with
|
|
397
|
+
// it. Dropping the argument silently widens a targeted clear into a
|
|
398
|
+
// namespace-wide delete.
|
|
399
|
+
async clear(base2, opts) {
|
|
400
|
+
const keys = await namespaced.getKeys(base2);
|
|
401
|
+
await Promise.all(keys.map((key) => namespaced.removeItem(key, opts)));
|
|
398
402
|
}
|
|
399
403
|
};
|
|
400
404
|
}
|
|
@@ -664,6 +668,7 @@ __export(integrations_exports, {
|
|
|
664
668
|
defineIntegrationAPI: () => defineIntegrationAPI,
|
|
665
669
|
defineIntegrationAPIOperation: () => defineIntegrationAPIOperation,
|
|
666
670
|
defineIntegrationSchema: () => defineIntegrationSchema,
|
|
671
|
+
describeIntegrationOriginRejection: () => describeIntegrationOriginRejection,
|
|
667
672
|
dispatchIntegrationRequest: () => dispatchIntegrationRequest,
|
|
668
673
|
getFarmIntegrationPluginOwner: () => getFarmIntegrationPluginOwner,
|
|
669
674
|
getFarmIntegrationPluginServerRuntime: () => getFarmIntegrationPluginServerRuntime,
|
|
@@ -679,7 +684,9 @@ __export(integrations_exports, {
|
|
|
679
684
|
isFarmIntegrationProviderComponentReference: () => isFarmIntegrationProviderComponentReference,
|
|
680
685
|
matchIntegrationRoute: () => matchIntegrationRoute,
|
|
681
686
|
matchRegisteredIntegrationRoute: () => matchRegisteredIntegrationRoute,
|
|
682
|
-
|
|
687
|
+
resolveIntegrationAllowedOrigins: () => resolveIntegrationAllowedOrigins,
|
|
688
|
+
resolveIntegrationPlugins: () => resolveIntegrationPlugins,
|
|
689
|
+
validateIntegrationRequestOrigin: () => validateIntegrationRequestOrigin
|
|
683
690
|
});
|
|
684
691
|
module.exports = __toCommonJS(integrations_exports);
|
|
685
692
|
|
|
@@ -864,6 +871,159 @@ function validateConfigRouteSource(source, field = "Config route source") {
|
|
|
864
871
|
}
|
|
865
872
|
__name(validateConfigRouteSource, "validateConfigRouteSource");
|
|
866
873
|
|
|
874
|
+
// src/request-origin.ts
|
|
875
|
+
function getRequestSourceOrigin(request) {
|
|
876
|
+
const origin = request.headers.get("origin")?.trim();
|
|
877
|
+
if (origin) {
|
|
878
|
+
return parseSourceOrigin(origin);
|
|
879
|
+
}
|
|
880
|
+
const referer = request.headers.get("referer")?.trim();
|
|
881
|
+
if (referer) {
|
|
882
|
+
return parseSourceOrigin(referer);
|
|
883
|
+
}
|
|
884
|
+
return { ok: true, origin: null };
|
|
885
|
+
}
|
|
886
|
+
__name(getRequestSourceOrigin, "getRequestSourceOrigin");
|
|
887
|
+
function parseSourceOrigin(value) {
|
|
888
|
+
if (value === "null") {
|
|
889
|
+
return { ok: false, reason: "opaque-origin" };
|
|
890
|
+
}
|
|
891
|
+
try {
|
|
892
|
+
const parsed = new URL(value);
|
|
893
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
894
|
+
return { ok: false, reason: "invalid-origin" };
|
|
895
|
+
}
|
|
896
|
+
return { ok: true, origin: parsed.origin };
|
|
897
|
+
} catch {
|
|
898
|
+
return { ok: false, reason: "invalid-origin" };
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
__name(parseSourceOrigin, "parseSourceOrigin");
|
|
902
|
+
function matchesHostHeader(sourceOrigin, request) {
|
|
903
|
+
const host = request.headers.get("host")?.trim().toLowerCase();
|
|
904
|
+
if (!host) return false;
|
|
905
|
+
try {
|
|
906
|
+
const source = new URL(sourceOrigin);
|
|
907
|
+
const target = new URL(request.url);
|
|
908
|
+
return source.protocol === target.protocol && source.host.toLowerCase() === host;
|
|
909
|
+
} catch {
|
|
910
|
+
return false;
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
__name(matchesHostHeader, "matchesHostHeader");
|
|
914
|
+
function matchesAllowedOrigin(sourceOrigin, pattern) {
|
|
915
|
+
const source = new URL(sourceOrigin);
|
|
916
|
+
if (!pattern.includes("*")) {
|
|
917
|
+
return pattern.includes("://") ? source.origin === pattern : source.host === pattern;
|
|
918
|
+
}
|
|
919
|
+
const schemeEnd = pattern.indexOf("://");
|
|
920
|
+
const scheme = schemeEnd === -1 ? null : pattern.slice(0, schemeEnd + 1);
|
|
921
|
+
const hostPattern = pattern.slice(schemeEnd === -1 ? 0 : schemeEnd + 3);
|
|
922
|
+
const [wildcardHost, port] = splitHostAndPort(hostPattern);
|
|
923
|
+
const baseHost = wildcardHost.slice(2);
|
|
924
|
+
if (scheme && source.protocol !== scheme) return false;
|
|
925
|
+
if (port && getEffectivePort(source) !== port) return false;
|
|
926
|
+
if (!port && source.port) return false;
|
|
927
|
+
return source.hostname.endsWith(`.${baseHost}`) && source.hostname !== baseHost;
|
|
928
|
+
}
|
|
929
|
+
__name(matchesAllowedOrigin, "matchesAllowedOrigin");
|
|
930
|
+
function normalizeAllowedOriginPattern(value, label) {
|
|
931
|
+
const pattern = value.trim().toLowerCase();
|
|
932
|
+
if (!pattern) {
|
|
933
|
+
throw new TypeError(`${label} cannot contain empty values`);
|
|
934
|
+
}
|
|
935
|
+
if (pattern.includes("*")) {
|
|
936
|
+
if (!/^(?:https?:\/\/)?\*\.[a-z0-9.-]+(?::\d+)?$/.test(pattern)) {
|
|
937
|
+
throw new TypeError(`Invalid ${label} pattern: ${JSON.stringify(value)}`);
|
|
938
|
+
}
|
|
939
|
+
return pattern;
|
|
940
|
+
}
|
|
941
|
+
if (pattern.includes("://")) {
|
|
942
|
+
let parsed;
|
|
943
|
+
try {
|
|
944
|
+
parsed = new URL(pattern);
|
|
945
|
+
} catch {
|
|
946
|
+
throw new TypeError(`Invalid ${label} value: ${JSON.stringify(value)}`);
|
|
947
|
+
}
|
|
948
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:" || parsed.username || parsed.password || parsed.pathname !== "/" || parsed.search || parsed.hash) {
|
|
949
|
+
throw new TypeError(`${label} must contain origins without paths: ${JSON.stringify(value)}`);
|
|
950
|
+
}
|
|
951
|
+
return parsed.origin;
|
|
952
|
+
}
|
|
953
|
+
if (/[/@?#]/.test(pattern)) {
|
|
954
|
+
throw new TypeError(`${label} must contain origins or hosts: ${JSON.stringify(value)}`);
|
|
955
|
+
}
|
|
956
|
+
try {
|
|
957
|
+
return new URL(`http://${pattern}`).host;
|
|
958
|
+
} catch {
|
|
959
|
+
throw new TypeError(`Invalid ${label} value: ${JSON.stringify(value)}`);
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
__name(normalizeAllowedOriginPattern, "normalizeAllowedOriginPattern");
|
|
963
|
+
function splitHostAndPort(value) {
|
|
964
|
+
const separator = value.lastIndexOf(":");
|
|
965
|
+
if (separator === -1) return [value, null];
|
|
966
|
+
return [value.slice(0, separator), value.slice(separator + 1)];
|
|
967
|
+
}
|
|
968
|
+
__name(splitHostAndPort, "splitHostAndPort");
|
|
969
|
+
function getEffectivePort(url) {
|
|
970
|
+
if (url.port) return url.port;
|
|
971
|
+
if (url.protocol === "https:") return "443";
|
|
972
|
+
if (url.protocol === "http:") return "80";
|
|
973
|
+
return "";
|
|
974
|
+
}
|
|
975
|
+
__name(getEffectivePort, "getEffectivePort");
|
|
976
|
+
|
|
977
|
+
// src/integration-request-security.ts
|
|
978
|
+
function resolveIntegrationAllowedOrigins(values, label) {
|
|
979
|
+
return Object.freeze((values ?? []).map((value) => normalizeAllowedOriginPattern(value, label)));
|
|
980
|
+
}
|
|
981
|
+
__name(resolveIntegrationAllowedOrigins, "resolveIntegrationAllowedOrigins");
|
|
982
|
+
function validateIntegrationRequestOrigin(request, policy = {}) {
|
|
983
|
+
const allowedOrigins = policy.allowedOrigins ?? [];
|
|
984
|
+
const requireOriginMetadata = policy.requireOriginMetadata ?? true;
|
|
985
|
+
const fetchSite = request.headers.get("sec-fetch-site")?.trim().toLowerCase();
|
|
986
|
+
const source = getRequestSourceOrigin(request);
|
|
987
|
+
if (!source.ok) {
|
|
988
|
+
return { ok: false, reason: source.reason };
|
|
989
|
+
}
|
|
990
|
+
if (source.origin === null) {
|
|
991
|
+
if (fetchSite === "same-origin") {
|
|
992
|
+
return { ok: true };
|
|
993
|
+
}
|
|
994
|
+
if (requireOriginMetadata) {
|
|
995
|
+
return { ok: false, reason: fetchSite === "cross-site" ? "cross-site" : "missing-origin" };
|
|
996
|
+
}
|
|
997
|
+
return fetchSite === "cross-site" ? { ok: false, reason: "cross-site" } : { ok: true };
|
|
998
|
+
}
|
|
999
|
+
const requestUrl = new URL(request.url);
|
|
1000
|
+
const matchesConfiguredOrigin = allowedOrigins.some(
|
|
1001
|
+
(pattern) => matchesAllowedOrigin(source.origin, pattern)
|
|
1002
|
+
);
|
|
1003
|
+
const matchesRequest = source.origin === requestUrl.origin || matchesHostHeader(source.origin, request);
|
|
1004
|
+
if (!matchesRequest && !matchesConfiguredOrigin) {
|
|
1005
|
+
return { ok: false, reason: "cross-site" };
|
|
1006
|
+
}
|
|
1007
|
+
if (fetchSite === "cross-site" && !matchesConfiguredOrigin) {
|
|
1008
|
+
return { ok: false, reason: "cross-site" };
|
|
1009
|
+
}
|
|
1010
|
+
return { ok: true };
|
|
1011
|
+
}
|
|
1012
|
+
__name(validateIntegrationRequestOrigin, "validateIntegrationRequestOrigin");
|
|
1013
|
+
function describeIntegrationOriginRejection(reason) {
|
|
1014
|
+
switch (reason) {
|
|
1015
|
+
case "missing-origin":
|
|
1016
|
+
return "Request is missing same-origin metadata.";
|
|
1017
|
+
case "opaque-origin":
|
|
1018
|
+
return "Opaque origins are not allowed.";
|
|
1019
|
+
case "invalid-origin":
|
|
1020
|
+
return "Invalid request origin.";
|
|
1021
|
+
case "cross-site":
|
|
1022
|
+
return "Cross-site request was rejected.";
|
|
1023
|
+
}
|
|
1024
|
+
}
|
|
1025
|
+
__name(describeIntegrationOriginRejection, "describeIntegrationOriginRejection");
|
|
1026
|
+
|
|
867
1027
|
// src/integration-api.ts
|
|
868
1028
|
function defineIntegrationAPIOperation(operation2) {
|
|
869
1029
|
return {
|
|
@@ -3554,6 +3714,7 @@ __name(normalizeMatcher, "normalizeMatcher");
|
|
|
3554
3714
|
defineIntegrationAPI,
|
|
3555
3715
|
defineIntegrationAPIOperation,
|
|
3556
3716
|
defineIntegrationSchema,
|
|
3717
|
+
describeIntegrationOriginRejection,
|
|
3557
3718
|
dispatchIntegrationRequest,
|
|
3558
3719
|
getFarmIntegrationPluginOwner,
|
|
3559
3720
|
getFarmIntegrationPluginServerRuntime,
|
|
@@ -3569,6 +3730,8 @@ __name(normalizeMatcher, "normalizeMatcher");
|
|
|
3569
3730
|
isFarmIntegrationProviderComponentReference,
|
|
3570
3731
|
matchIntegrationRoute,
|
|
3571
3732
|
matchRegisteredIntegrationRoute,
|
|
3572
|
-
|
|
3733
|
+
resolveIntegrationAllowedOrigins,
|
|
3734
|
+
resolveIntegrationPlugins,
|
|
3735
|
+
validateIntegrationRequestOrigin
|
|
3573
3736
|
});
|
|
3574
3737
|
//# sourceMappingURL=integrations.cjs.map
|