@farm.js/core 0.1.0-beta.97 → 0.1.0-beta.99
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-CGjrKNoN.d.ts} +4 -4
- package/dist/{app-DBd6437H.d.mts → app-DOcLs_iq.d.mts} +4 -4
- package/dist/app-markdown.cjs +21 -0
- package/dist/app-markdown.cjs.map +1 -0
- package/dist/app-markdown.d.mts +19 -4
- package/dist/app-markdown.d.ts +19 -4
- package/dist/app-markdown.mjs +7 -1
- package/dist/cache.cjs.map +1 -0
- package/dist/{chunk-VMCHLH3Y.mjs → chunk-26BCDVJS.mjs} +19 -1
- package/dist/chunk-26BCDVJS.mjs.map +1 -0
- package/dist/{chunk-FP5Q67FO.mjs → chunk-2HYYZCCI.mjs} +308 -19
- package/dist/chunk-2HYYZCCI.mjs.map +1 -0
- package/dist/{chunk-WKDAA6V2.mjs → chunk-3BTAMIQE.mjs} +100 -41
- package/dist/chunk-3BTAMIQE.mjs.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-YIBV77KZ.mjs → chunk-4WLAVHCY.mjs} +2 -2
- package/dist/{chunk-KDP5ZSWP.mjs → chunk-7PS5NKOM.mjs} +26 -11
- package/dist/chunk-7PS5NKOM.mjs.map +1 -0
- package/dist/{chunk-X4SFHKFH.mjs → chunk-BU65A3LZ.mjs} +10 -6
- package/dist/chunk-BU65A3LZ.mjs.map +1 -0
- 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-FSIXEIOB.mjs → chunk-L7FSTPGS.mjs} +2 -2
- package/dist/{chunk-J3MPQ4MQ.mjs → chunk-LG4XB6RN.mjs} +2 -2
- package/dist/{chunk-J3MPQ4MQ.mjs.map → chunk-LG4XB6RN.mjs.map} +1 -1
- 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-D7F7YZ7L.mjs → chunk-NCVFPT67.mjs} +100 -40
- package/dist/{chunk-D7F7YZ7L.mjs.map → chunk-NCVFPT67.mjs.map} +1 -1
- package/dist/{chunk-UMUWR5XA.mjs → chunk-PURU7FXR.mjs} +2 -2
- package/dist/{chunk-2SKCXYLB.mjs → chunk-QQCCBMTH.mjs} +60 -6
- package/dist/chunk-QQCCBMTH.mjs.map +1 -0
- package/dist/chunk-RKUPOYQV.mjs +28 -0
- package/dist/chunk-RKUPOYQV.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-IZBX2TEU.mjs → chunk-VQG3QWWK.mjs} +2 -2
- package/dist/{chunk-35NPLKQJ.mjs → chunk-XWM2C267.mjs} +21 -105
- package/dist/chunk-XWM2C267.mjs.map +1 -0
- package/dist/{chunk-7ZVN3YZI.mjs → chunk-Z5ARESQG.mjs} +43 -1
- package/dist/chunk-Z5ARESQG.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-BqtHoJ9C.d.mts} +91 -3
- package/dist/{client-plugins-By6MVUX-.d.ts → client-plugins-DYprkCKN.d.ts} +91 -3
- 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-24N3U5IG.mjs} +9 -7
- package/dist/{devtools-XWZX6CCL.mjs.map → devtools-24N3U5IG.mjs.map} +1 -1
- package/dist/docs.cjs +7 -3
- package/dist/docs.cjs.map +1 -0
- package/dist/docs.mjs +9 -7
- 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 +99 -40
- 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.d.mts +1 -1
- package/dist/image/sharp.d.ts +1 -1
- package/dist/image/sharp.mjs +1 -1
- package/dist/image/sharp.mjs.map +1 -1
- package/dist/image.cjs.map +1 -0
- package/dist/index.cjs +943 -231
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +11 -11
- package/dist/index.d.ts +11 -11
- package/dist/index.mjs +38 -24
- 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 +745 -139
- 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 +16 -14
- package/dist/internal/client-runtime.cjs +7 -2
- package/dist/internal/client-runtime.cjs.map +1 -0
- package/dist/internal/client-runtime.mjs +8 -3
- package/dist/internal/client-runtime.mjs.map +1 -1
- package/dist/internal/config-runtime.cjs +59 -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 +8 -6
- 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 +52 -5
- package/dist/internal/product-telemetry-runtime.cjs.map +1 -0
- package/dist/internal/product-telemetry-runtime.d.mts +12 -1
- package/dist/internal/product-telemetry-runtime.d.ts +12 -1
- package/dist/internal/product-telemetry-runtime.mjs +50 -5
- 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 +56 -10
- 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/internal/production-runtime.mjs +2 -2
- package/dist/markdown.cjs.map +1 -0
- package/dist/{metadata-route-8_V3UonT.d.ts → metadata-route-D2be_0kC.d.ts} +17 -2
- package/dist/{metadata-route-CWP_HjGU.d.mts → metadata-route-Dw5CrDIZ.d.mts} +17 -2
- 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-YJEP3FWM.mjs} +4 -3
- package/dist/{nitro-EGRNOB5P.mjs.map → nitro-YJEP3FWM.mjs.map} +1 -1
- package/dist/observability.cjs.map +1 -0
- package/dist/plugin.cjs +599 -104
- 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 +13 -11
- package/dist/{production-runtime-CdmzsDax.d.ts → production-runtime-CTqpD1C8.d.ts} +2 -2
- package/dist/{production-runtime-BGRH1dKG.d.mts → production-runtime-HNqNZd4D.d.mts} +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-COscpW-i.d.mts} +1 -1
- package/dist/{render-plan-0GeHiGVZ.d.ts → render-plan-Z4kSxaT_.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-BEDb2jE9.d.ts} +1 -1
- package/dist/{request-BCNXSXLh.d.mts → request-CbIAqJY9.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 +686 -170
- 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 +16 -14
- package/dist/server.mjs.map +1 -1
- package/dist/{spa-router-COgu4txb.d.ts → spa-router-CjeQites.d.ts} +1 -1
- package/dist/{spa-router-BeyAVSc6.d.mts → spa-router-FJbNou1a.d.mts} +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-DL2VwDQl.d.mts → utils-BiMJv9Ys.d.mts} +1 -1
- package/dist/{utils-DkU2c_1B.d.ts → utils-BpnKRFv9.d.ts} +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 +599 -104
- 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 +13 -11
- 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 +73 -5
- 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-7ZVN3YZI.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-FP5Q67FO.mjs.map +0 -1
- package/dist/chunk-ISSFLGJ5.mjs.map +0 -1
- package/dist/chunk-KDP5ZSWP.mjs.map +0 -1
- package/dist/chunk-VMCHLH3Y.mjs.map +0 -1
- package/dist/chunk-WKDAA6V2.mjs.map +0 -1
- package/dist/chunk-X4SFHKFH.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-YIBV77KZ.mjs.map → chunk-4WLAVHCY.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-UMUWR5XA.mjs.map → chunk-PURU7FXR.mjs.map} +0 -0
- /package/dist/{chunk-52BR7LTX.mjs.map → chunk-STSPSJUI.mjs.map} +0 -0
- /package/dist/{chunk-IZBX2TEU.mjs.map → chunk-VQG3QWWK.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
|