@farm.js/core 0.1.30 → 0.1.34
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/README.md +1 -1
- package/dist/agent-runtime.cjs +69 -14
- package/dist/agent-runtime.d.mts +1 -1
- package/dist/agent-runtime.d.ts +1 -1
- package/dist/agent-runtime.mjs +58 -3
- package/dist/api/route-manager.cjs +16 -13
- package/dist/api/route-manager.d.mts +1 -1
- package/dist/api/route-manager.d.ts +1 -1
- package/dist/api/route-manager.mjs +15 -12
- package/dist/api/runtime.cjs +9 -7
- package/dist/api/runtime.d.mts +1 -1
- package/dist/api/runtime.d.ts +1 -1
- package/dist/api/runtime.mjs +8 -6
- package/dist/api.cjs +19 -16
- package/dist/api.d.mts +2 -2
- package/dist/api.d.ts +2 -2
- package/dist/api.mjs +18 -15
- package/dist/{app-sUJ3jnTZ.d.ts → app-DgotYGbq.d.ts} +3 -3
- package/dist/app-markdown.cjs +8 -6
- package/dist/app-markdown.d.mts +3 -3
- package/dist/app-markdown.d.ts +3 -3
- package/dist/app-markdown.mjs +7 -5
- package/dist/{app-DAuUTIZf.d.mts → app-q4rmZlXK.d.mts} +3 -3
- package/dist/cache.cjs +2 -2
- package/dist/cache.d.mts +10 -1
- package/dist/cache.d.ts +10 -1
- package/dist/cache.mjs +1 -1
- package/dist/{chunk-YZTASLPQ.cjs → chunk-27ZWSI3W.cjs} +2 -2
- package/dist/{chunk-WBIH66JK.mjs → chunk-2ELDTQRN.mjs} +5 -2
- package/dist/{chunk-K7CELQLK.cjs → chunk-2F2ER724.cjs} +54 -29
- package/dist/{chunk-NRVGEI5I.mjs → chunk-2NNMOPDN.mjs} +4 -210
- package/dist/chunk-2NQQ5H5G.cjs +86 -0
- package/dist/{chunk-HPQC2LHF.cjs → chunk-36MK5YCW.cjs} +342 -163
- package/dist/chunk-3BU22U3M.cjs +237 -0
- package/dist/{chunk-MM5D6VLP.mjs → chunk-3KZS4SUS.mjs} +33 -14
- package/dist/chunk-3SDFA7UF.cjs +701 -0
- package/dist/{chunk-4IEPYMHF.mjs → chunk-3UEVPCGW.mjs} +1 -1
- package/dist/{chunk-6G3ZZ2IE.mjs → chunk-3VSKDFAT.mjs} +1 -1
- package/dist/{chunk-5HGR3W6O.mjs → chunk-5SJWVY6R.mjs} +8 -0
- package/dist/{chunk-X7WVQMIB.mjs → chunk-657WJNRY.mjs} +10 -4
- package/dist/{chunk-MKMBQSNQ.mjs → chunk-6VVL3MHY.mjs} +3 -3
- package/dist/{chunk-QZRVZSPN.cjs → chunk-77GNHH2Z.cjs} +3 -3
- package/dist/{chunk-KZLND3D2.cjs → chunk-7BT4H4P7.cjs} +7 -5
- package/dist/{chunk-A777V5WU.cjs → chunk-7M52YUMY.cjs} +2 -2
- package/dist/{chunk-VUMAE7NC.mjs → chunk-7Y6ZNFPX.mjs} +81 -30
- package/dist/{chunk-ZDILFMWN.cjs → chunk-A5FGU2WU.cjs} +74 -23
- package/dist/{chunk-BZ3CHOFX.mjs → chunk-AGC75XAE.mjs} +37 -1
- package/dist/{chunk-4ZQQL4IU.mjs → chunk-AHGECQEW.mjs} +1 -1
- package/dist/{chunk-RG3ZOTG5.cjs → chunk-AI7QMY7O.cjs} +10 -3
- package/dist/{chunk-O3DTUAX2.mjs → chunk-AQZFOP7S.mjs} +6 -77
- package/dist/{chunk-WNLBF77X.cjs → chunk-ATK2R4CH.cjs} +14 -12
- package/dist/{chunk-SORB3MAR.cjs → chunk-AWC4VUZL.cjs} +17 -17
- package/dist/{chunk-YMCXWPWK.mjs → chunk-BCMSYSN2.mjs} +4 -1
- package/dist/{chunk-BZAGKCKB.cjs → chunk-BTAG7LI7.cjs} +2 -2
- package/dist/{chunk-I6XDAKWQ.mjs → chunk-BTHHUD7Q.mjs} +14 -0
- package/dist/chunk-C4SPBWFM.cjs +26 -0
- package/dist/{chunk-JATSG2ZO.mjs → chunk-CLJYVZAD.mjs} +4 -2
- package/dist/{chunk-J3LOGE4T.cjs → chunk-DQQOKWYA.cjs} +5 -5
- package/dist/{chunk-JLRDISQL.cjs → chunk-DZ4DTRJ5.cjs} +7 -7
- package/dist/chunk-E5GNDG5F.mjs +701 -0
- package/dist/{chunk-E76XC6ZG.mjs → chunk-EZDQRNQ7.mjs} +2 -2
- package/dist/{chunk-TOVMYGYW.mjs → chunk-F2SE2VDO.mjs} +1 -1
- package/dist/{chunk-BSPQVJ4A.mjs → chunk-FDR64H6B.mjs} +13 -0
- package/dist/{chunk-5OVTOKGH.cjs → chunk-FFFW3OQ7.cjs} +2 -2
- package/dist/{chunk-D4JE5NNV.cjs → chunk-FNO7A7CM.cjs} +5 -5
- package/dist/chunk-FZ6YYU2W.mjs +65 -0
- package/dist/{chunk-PZNCMPJF.cjs → chunk-G26MUMKL.cjs} +14 -8
- package/dist/{chunk-IXUY2F5U.mjs → chunk-GCXWJJKH.mjs} +4 -7
- package/dist/{chunk-JLCQGPXE.mjs → chunk-GNSDTTWZ.mjs} +50 -61
- package/dist/{chunk-D234YWNA.mjs → chunk-GOABMOX3.mjs} +151 -3
- package/dist/{chunk-HBTUGXHS.cjs → chunk-HLJ6MBUZ.cjs} +7 -4
- package/dist/{chunk-GZYH4OER.mjs → chunk-HR5KPHC2.mjs} +1 -1
- package/dist/{chunk-ZCU4NZ3M.cjs → chunk-IE7XCHH3.cjs} +4 -4
- package/dist/{chunk-I26CZYPV.cjs → chunk-IHNIDL6H.cjs} +50 -7
- package/dist/{chunk-2FQHH5SC.mjs → chunk-IHNMMXHV.mjs} +49 -24
- package/dist/{chunk-VHJGDMCG.cjs → chunk-IWZKTWHZ.cjs} +2 -2
- package/dist/{chunk-DGXN3L4D.mjs → chunk-JDPAKVS4.mjs} +4 -4
- package/dist/chunk-JG6DJF5A.mjs +238 -0
- package/dist/{chunk-5TISYEQF.mjs → chunk-JM5XPKWH.mjs} +10 -3
- package/dist/{chunk-BJJATPEC.mjs → chunk-KN7K4VQN.mjs} +1 -1
- package/dist/{chunk-WPYFSQKK.cjs → chunk-KNBBQHO2.cjs} +15 -1
- package/dist/{chunk-XWAWFQFS.cjs → chunk-KXWRO25S.cjs} +7 -4
- package/dist/{chunk-QG5HNS7P.mjs → chunk-LHODW25H.mjs} +2 -2
- package/dist/{chunk-BXFWA23T.mjs → chunk-LMJ7VRHZ.mjs} +3 -3
- package/dist/{chunk-IVLUJUT4.mjs → chunk-LR5QSC2P.mjs} +388 -209
- package/dist/chunk-LSKZMJMP.cjs +65 -0
- package/dist/{chunk-2N5PX3LS.mjs → chunk-LYV44OIR.mjs} +7 -1
- package/dist/{chunk-5MKEDGLD.cjs → chunk-M64YUMA4.cjs} +11 -6
- package/dist/{chunk-EXLKRR4U.cjs → chunk-MIDIZJZC.cjs} +12 -12
- package/dist/{chunk-ES4B2IXW.cjs → chunk-MOKLYNHV.cjs} +2 -2
- package/dist/{chunk-IV6CQY7O.mjs → chunk-MSSFIQGM.mjs} +63 -13
- package/dist/{chunk-KH7BN726.cjs → chunk-N4UOK6ZI.cjs} +8 -2
- package/dist/{chunk-YMUE7L3D.mjs → chunk-NGVORZVZ.mjs} +1 -1
- package/dist/{chunk-JNGIWIY6.mjs → chunk-NPC7VWJE.mjs} +2 -2
- package/dist/{chunk-ILWLPEVO.mjs → chunk-NRSN7G7E.mjs} +2 -2
- package/dist/{chunk-PQD2AI3B.mjs → chunk-O27L4YAA.mjs} +1 -1
- package/dist/{chunk-X5TXZFMN.cjs → chunk-ODBZYBAB.cjs} +1 -1
- package/dist/{chunk-NPPL5YDT.cjs → chunk-P64MIF5B.cjs} +154 -6
- package/dist/{chunk-JFHKNFEO.cjs → chunk-PQDFUSXD.cjs} +14 -14
- package/dist/{chunk-F6XEGFHO.mjs → chunk-PXKIEXZD.mjs} +10 -0
- package/dist/{chunk-S5GDHOE4.mjs → chunk-PZNL3WEG.mjs} +48 -5
- package/dist/{chunk-FV45CKBC.mjs → chunk-QCFBDFRS.mjs} +1 -1
- package/dist/{chunk-75BRBIFP.cjs → chunk-QCVE2OCI.cjs} +5 -8
- package/dist/{chunk-6ZCMSZ5U.mjs → chunk-QE6VAKLT.mjs} +1 -1
- package/dist/{chunk-75DYEVXI.cjs → chunk-QGYRXFU2.cjs} +9 -9
- package/dist/{chunk-CTV2TTNP.cjs → chunk-QJ3J6MZT.cjs} +16 -87
- package/dist/{chunk-O6XNAMBV.mjs → chunk-QLQ32WC4.mjs} +8 -3
- package/dist/{chunk-GIWC4CFJ.cjs → chunk-SJVKK4JE.cjs} +839 -420
- package/dist/{chunk-3FCFQP5V.cjs → chunk-TA5G2HWD.cjs} +21 -21
- package/dist/{chunk-Z5HIWVDP.cjs → chunk-TDFPACVX.cjs} +62 -73
- package/dist/{chunk-ND224OE2.cjs → chunk-TKSCR644.cjs} +34 -15
- package/dist/{chunk-2UABTL3Y.mjs → chunk-U4PTAHW3.mjs} +64 -13
- package/dist/{chunk-ZHVYQL3H.cjs → chunk-U74I55WB.cjs} +86 -35
- package/dist/chunk-UBO4SGH4.mjs +86 -0
- package/dist/{chunk-IQXFRNY2.cjs → chunk-UFDAAQFX.cjs} +2 -2
- package/dist/{chunk-NXG66MR7.cjs → chunk-UX5S4JEO.cjs} +40 -4
- package/dist/{chunk-5ZSWG4UX.cjs → chunk-UXFQ3UDA.cjs} +14 -1
- package/dist/{chunk-L4DVIHOC.mjs → chunk-VCCUOMQN.mjs} +1 -1
- package/dist/{chunk-4V7GIE2U.mjs → chunk-VHANUNEG.mjs} +2 -2
- package/dist/{chunk-FXUUWYAX.cjs → chunk-VKNHTSAP.cjs} +10 -0
- package/dist/{chunk-2AKFKCHA.mjs → chunk-W7LF2J2S.mjs} +1 -1
- package/dist/{chunk-MNUGPHLN.mjs → chunk-WNNYOOIB.mjs} +5 -3
- package/dist/{chunk-K6V52QMI.mjs → chunk-X242HVD5.mjs} +1 -1
- package/dist/{chunk-UJ2C4ICS.cjs → chunk-XJXBIP67.cjs} +4 -4
- package/dist/{chunk-S4K74WI4.mjs → chunk-XV5DJTBX.mjs} +539 -121
- package/dist/{chunk-6CNX6Q3K.cjs → chunk-XXJU7FCC.cjs} +9 -5
- package/dist/{chunk-DYEJQTDN.cjs → chunk-YSCV4SJF.cjs} +4 -4
- package/dist/{chunk-2SDO73HK.cjs → chunk-YWN746US.cjs} +64 -14
- package/dist/chunk-Z2HLU4IX.cjs +238 -0
- package/dist/{chunk-Q5JFU33Q.cjs → chunk-Z2YLTERK.cjs} +4 -4
- package/dist/{chunk-XLTV4VOG.cjs → chunk-ZHPHJPQP.cjs} +4 -4
- package/dist/{chunk-7CXKSRKL.mjs → chunk-ZKP7C2B6.mjs} +4 -4
- package/dist/{chunk-ATXI6LGT.mjs → chunk-ZUSJDQ2Q.mjs} +8 -4
- package/dist/{client-plugins-BX2ptm4H.d.mts → client-plugins-CLObcuCq.d.mts} +26 -2
- package/dist/{client-plugins-BmxM5KW_.d.ts → client-plugins-DZjHC4Mi.d.ts} +26 -2
- package/dist/client-plugins.d.mts +1 -1
- package/dist/client-plugins.d.ts +1 -1
- package/dist/client.cjs +8 -8
- package/dist/client.d.mts +5 -5
- package/dist/client.d.ts +5 -5
- package/dist/client.mjs +7 -7
- package/dist/config.d.mts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/{devtools-GGVPZHJX.cjs → devtools-HU6Y2MNV.cjs} +11 -9
- package/dist/{devtools-THVNPI2M.mjs → devtools-RNXCTS4R.mjs} +10 -8
- package/dist/docs.cjs +13 -11
- package/dist/docs.d.mts +5 -0
- package/dist/docs.d.ts +5 -0
- package/dist/docs.mjs +12 -10
- package/dist/environment/vite.cjs +2 -2
- package/dist/environment/vite.mjs +1 -1
- package/dist/headers.cjs +4 -4
- package/dist/headers.mjs +3 -3
- package/dist/i18n/client.cjs +14 -13
- package/dist/i18n/client.mjs +5 -4
- package/dist/i18n/index.cjs +3 -2
- package/dist/i18n/index.mjs +2 -1
- package/dist/i18n/server.cjs +6 -5
- package/dist/i18n/server.mjs +5 -4
- package/dist/image/server.cjs +2 -2
- package/dist/image/server.mjs +1 -1
- package/dist/image/sharp.cjs +9 -9
- package/dist/image/sharp.mjs +1 -1
- package/dist/index.cjs +67 -55
- package/dist/index.d.mts +14 -14
- package/dist/index.d.ts +14 -14
- package/dist/index.mjs +70 -58
- package/dist/integrations.cjs +6 -3
- package/dist/integrations.d.mts +1 -1
- package/dist/integrations.d.ts +1 -1
- package/dist/integrations.mjs +7 -4
- package/dist/internal/app-markdown-runtime.cjs +7 -5
- package/dist/internal/app-markdown-runtime.d.mts +14 -3
- package/dist/internal/app-markdown-runtime.d.ts +14 -3
- package/dist/internal/app-markdown-runtime.mjs +6 -4
- package/dist/internal/build-runtime.cjs +38 -35
- package/dist/internal/build-runtime.d.mts +3 -3
- package/dist/internal/build-runtime.d.ts +3 -3
- package/dist/internal/build-runtime.mjs +37 -34
- package/dist/internal/cli-runtime.cjs +20 -17
- package/dist/internal/cli-runtime.mjs +19 -16
- package/dist/internal/client-error-overlay.cjs +4 -4
- package/dist/internal/client-error-overlay.mjs +1 -1
- package/dist/internal/client-runtime.cjs +4 -2
- package/dist/internal/client-runtime.d.mts +9 -1
- package/dist/internal/client-runtime.d.ts +9 -1
- package/dist/internal/client-runtime.mjs +3 -1
- package/dist/internal/compression-runtime.d.mts +1 -1
- package/dist/internal/compression-runtime.d.ts +1 -1
- package/dist/internal/config-runtime.cjs +11 -9
- package/dist/internal/config-runtime.d.mts +2 -2
- package/dist/internal/config-runtime.d.ts +2 -2
- package/dist/internal/config-runtime.mjs +10 -8
- package/dist/internal/infra-analytics-runtime.cjs +4 -4
- package/dist/internal/infra-analytics-runtime.mjs +2 -2
- package/dist/internal/product-telemetry-runtime.cjs +2 -2
- package/dist/internal/product-telemetry-runtime.mjs +1 -1
- package/dist/internal/production-runtime.cjs +20 -14
- package/dist/internal/production-runtime.d.mts +115 -8
- package/dist/internal/production-runtime.d.ts +115 -8
- package/dist/internal/production-runtime.mjs +19 -13
- package/dist/internal/request-cookies.cjs +4 -2
- package/dist/internal/request-cookies.d.mts +9 -1
- package/dist/internal/request-cookies.d.ts +9 -1
- package/dist/internal/request-cookies.mjs +3 -1
- package/dist/markdown.cjs +4 -4
- package/dist/markdown.d.mts +1 -1
- package/dist/markdown.d.ts +1 -1
- package/dist/markdown.mjs +3 -3
- package/dist/{metadata-DsEaK7mQ.d.mts → metadata-2HSU2i_w.d.mts} +1 -1
- package/dist/{metadata-fwZ3gfG6.d.ts → metadata-Cjs8JMRM.d.ts} +1 -1
- package/dist/middleware.cjs +18 -8
- package/dist/middleware.d.mts +24 -5
- package/dist/middleware.d.ts +24 -5
- package/dist/middleware.mjs +18 -8
- package/dist/navigation.cjs +6 -6
- package/dist/navigation.d.mts +4 -4
- package/dist/navigation.d.ts +4 -4
- package/dist/navigation.mjs +5 -5
- package/dist/{nitro-NAKCRVHX.mjs → nitro-4XGPNIK4.mjs} +3 -3
- package/dist/{nitro-VYDZGYFY.cjs → nitro-HSAQFXSS.cjs} +4 -4
- package/dist/plugin.cjs +33 -30
- package/dist/plugin.d.mts +1 -1
- package/dist/plugin.d.ts +1 -1
- package/dist/plugin.mjs +32 -29
- package/dist/{production-runtime-DNkpFnmg.d.ts → production-runtime-BU5ETAK9.d.ts} +8 -1
- package/dist/{production-runtime-Baqgwtvc.d.mts → production-runtime-CysZl3EV.d.mts} +8 -1
- package/dist/query/client.cjs +7 -7
- package/dist/query/client.mjs +3 -3
- package/dist/{render-plan-DhwQnmmX.d.mts → render-plan-CKr4ltOd.d.mts} +1 -1
- package/dist/{render-plan-rkIK9wd9.d.ts → render-plan-D72O1qm4.d.ts} +1 -1
- package/dist/renderer-client.cjs +39 -19
- package/dist/renderer-client.d.mts +3 -3
- package/dist/renderer-client.d.ts +3 -3
- package/dist/renderer-client.mjs +28 -8
- package/dist/{request-CFy1BltJ.d.mts → request-Be83WafN.d.mts} +7 -2
- package/dist/{request-BcY4RYPC.d.ts → request-DbyOYI2j.d.ts} +7 -2
- package/dist/request.cjs +2 -2
- package/dist/request.d.mts +2 -2
- package/dist/request.d.ts +2 -2
- package/dist/request.mjs +1 -1
- package/dist/{route-rendering-BkS0TBlB.d.mts → route-rendering-BG56SzvJ.d.mts} +1 -1
- package/dist/{route-rendering-D4XpMjam.d.ts → route-rendering-CtVMpV-k.d.ts} +1 -1
- package/dist/{router-C4zPlC3V.d.mts → router-ALUvm8gC.d.mts} +1 -1
- package/dist/{router-Cq7BcZxg.d.ts → router-D94-SDlW.d.ts} +1 -1
- package/dist/routes.cjs +3 -3
- package/dist/routes.d.mts +1 -1
- package/dist/routes.d.ts +1 -1
- package/dist/routes.mjs +2 -2
- package/dist/server-fn.cjs +3 -3
- package/dist/server-fn.mjs +2 -2
- package/dist/server-plugins.cjs +4 -4
- package/dist/server-plugins.d.mts +2 -2
- package/dist/server-plugins.d.ts +2 -2
- package/dist/server-plugins.mjs +3 -3
- package/dist/server-query-client.cjs +3 -3
- package/dist/server-query-client.mjs +2 -2
- package/dist/server-query.cjs +4 -4
- package/dist/server-query.mjs +3 -3
- package/dist/server.cjs +60 -57
- package/dist/server.d.mts +7 -7
- package/dist/server.d.ts +7 -7
- package/dist/server.mjs +37 -34
- package/dist/{spa-router-B1HI3X9k.d.ts → spa-router-CxK3USIz.d.ts} +2 -2
- package/dist/{spa-router-DzPZH-AO.d.mts → spa-router-DbxNRKOB.d.mts} +2 -2
- package/dist/testing.cjs +19 -17
- package/dist/testing.d.mts +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.mjs +16 -14
- package/dist/theme/server.cjs +4 -3
- package/dist/theme/server.mjs +3 -2
- package/dist/{utils-DMD1Hzta.d.ts → utils-311Y8eoK.d.ts} +1 -1
- package/dist/{utils-CEBktlBG.d.mts → utils-4wVRcpOw.d.mts} +1 -1
- package/dist/version.cjs +2 -2
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +33 -30
- package/dist/vite.d.mts +1 -1
- package/dist/vite.d.ts +1 -1
- package/dist/vite.mjs +32 -29
- package/package.json +2 -2
- package/dist/chunk-22GUSVNJ.cjs +0 -351
- package/dist/chunk-SWN467MP.cjs +0 -18
- package/dist/chunk-XGC343EY.cjs +0 -443
- package/dist/chunk-ZSH2Y4LN.mjs +0 -351
- /package/dist/{chunk-SUIBNSNO.cjs → chunk-SJNMVDDF.cjs} +0 -0
- /package/dist/{chunk-LNZ7JZUS.mjs → chunk-UDNPLXW7.mjs} +0 -0
|
@@ -17,10 +17,10 @@ import {
|
|
|
17
17
|
import {
|
|
18
18
|
isFarmLocaleChangeHref,
|
|
19
19
|
localizeActiveFarmHref
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-F2SE2VDO.mjs";
|
|
21
21
|
import {
|
|
22
22
|
resolveFarmNavigationURL
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-5SJWVY6R.mjs";
|
|
24
24
|
import {
|
|
25
25
|
getFarmClientDataCache
|
|
26
26
|
} from "./chunk-XNPDONUH.mjs";
|
|
@@ -21,6 +21,13 @@ function getRequestStore() {
|
|
|
21
21
|
}
|
|
22
22
|
__name(getRequestStore, "getRequestStore");
|
|
23
23
|
var requestStore = getRequestStore();
|
|
24
|
+
var REQUEST_READS_KEY = /* @__PURE__ */ Symbol.for("@farm.js/core/request-reads");
|
|
25
|
+
function getRequestReads() {
|
|
26
|
+
const runtime = globalThis;
|
|
27
|
+
return runtime[REQUEST_READS_KEY] ?? (runtime[REQUEST_READS_KEY] = /* @__PURE__ */ new WeakMap());
|
|
28
|
+
}
|
|
29
|
+
__name(getRequestReads, "getRequestReads");
|
|
30
|
+
var requestReads = getRequestReads();
|
|
24
31
|
_setCurrentRequestResolver(() => requestStore.getStore());
|
|
25
32
|
function resolveFarmRequestURL(req, options = {}) {
|
|
26
33
|
if (options.origin) {
|
|
@@ -109,9 +116,14 @@ function getCurrentRequest() {
|
|
|
109
116
|
"No current request is available. getCurrentRequest() can only be used during server rendering."
|
|
110
117
|
);
|
|
111
118
|
}
|
|
119
|
+
requestReads.set(request, (requestReads.get(request) ?? 0) + 1);
|
|
112
120
|
return request;
|
|
113
121
|
}
|
|
114
122
|
__name(getCurrentRequest, "getCurrentRequest");
|
|
123
|
+
function _getRequestReadCount(request = requestStore.getStore()) {
|
|
124
|
+
return request ? requestReads.get(request) ?? 0 : 0;
|
|
125
|
+
}
|
|
126
|
+
__name(_getRequestReadCount, "_getRequestReadCount");
|
|
115
127
|
function getCurrentRequestOrNull() {
|
|
116
128
|
return requestStore.getStore() ?? null;
|
|
117
129
|
}
|
|
@@ -123,5 +135,6 @@ export {
|
|
|
123
135
|
createWebRequestFromFarmRequest,
|
|
124
136
|
_runWithCurrentRequest,
|
|
125
137
|
getCurrentRequest,
|
|
138
|
+
_getRequestReadCount,
|
|
126
139
|
getCurrentRequestOrNull
|
|
127
140
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkC4SPBWFMcjs = require('./chunk-C4SPBWFM.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
var _chunkLIUGYUX3cjs = require('./chunk-LIUGYUX3.cjs');
|
|
@@ -48,7 +48,7 @@ function isFarmLocaleChangeHref(href) {
|
|
|
48
48
|
const snapshot = getFarmI18nClientState();
|
|
49
49
|
if (!snapshot || typeof window === "undefined") return false;
|
|
50
50
|
if (snapshot.routing === "none") return false;
|
|
51
|
-
const target =
|
|
51
|
+
const target = _chunkC4SPBWFMcjs.resolveFarmNavigationURL.call(void 0, href, window.location.href);
|
|
52
52
|
const match = _chunkBIDYX3SLcjs.resolveFarmLocalePath.call(void 0, target.pathname, snapshot);
|
|
53
53
|
const targetLocale = match.locale || snapshot.defaultLocale;
|
|
54
54
|
return targetLocale !== snapshot.locale;
|
|
@@ -17,10 +17,10 @@ var _chunkSU7MH53Pcjs = require('./chunk-SU7MH53P.cjs');
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _chunkFFFW3OQ7cjs = require('./chunk-FFFW3OQ7.cjs');
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
var
|
|
23
|
+
var _chunkC4SPBWFMcjs = require('./chunk-C4SPBWFM.cjs');
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
var _chunk63H6BKXGcjs = require('./chunk-63H6BKXG.cjs');
|
|
@@ -1213,7 +1213,7 @@ function LinkInner({
|
|
|
1213
1213
|
hash,
|
|
1214
1214
|
trailingSlash: _nullishCoalesce(trailingSlash, () => ( _chunkOYEUREB6cjs.getFarmTrailingSlashPreference.call(void 0, )))
|
|
1215
1215
|
});
|
|
1216
|
-
const localizedHref =
|
|
1216
|
+
const localizedHref = _chunkFFFW3OQ7cjs.localizeActiveFarmHref.call(void 0, baseHref, locale);
|
|
1217
1217
|
const resolvedHref = isExternalUrl(localizedHref) ? localizedHref : _chunkI57LW5VZcjs.applyFarmBasePath.call(void 0, localizedHref, _nullishCoalesce(_optionalChain([farm, 'optionalAccess', _34 => _34.basePath]), () => ( _chunkI57LW5VZcjs.getFarmBasePath.call(void 0, ))));
|
|
1218
1218
|
const isExternal = isExternalUrl(resolvedHref);
|
|
1219
1219
|
const doPrefetch = _react.useCallback.call(void 0, () => {
|
|
@@ -1333,7 +1333,7 @@ function LinkInner({
|
|
|
1333
1333
|
if (event.button !== 0) return;
|
|
1334
1334
|
if (typeof window !== "undefined") {
|
|
1335
1335
|
event.preventDefault();
|
|
1336
|
-
if (
|
|
1336
|
+
if (_chunkFFFW3OQ7cjs.isFarmLocaleChangeHref.call(void 0, localizedHref)) {
|
|
1337
1337
|
window.location.assign(resolvedHref);
|
|
1338
1338
|
return;
|
|
1339
1339
|
}
|
|
@@ -1433,7 +1433,7 @@ function applyPreservedSearchParams(href) {
|
|
|
1433
1433
|
const manifest = window.__FARM_MANIFEST__;
|
|
1434
1434
|
const routes = _optionalChain([manifest, 'optionalAccess', _41 => _41.routes]) && typeof manifest.routes === "object" ? Object.values(manifest.routes) : [];
|
|
1435
1435
|
if (routes.length === 0) return href;
|
|
1436
|
-
const url =
|
|
1436
|
+
const url = _chunkC4SPBWFMcjs.resolveFarmNavigationURL.call(void 0, href, window.location.href);
|
|
1437
1437
|
const route = routes.find((candidate) => matchManifestRoute(url.pathname, candidate));
|
|
1438
1438
|
const preserve = Array.isArray(_optionalChain([route, 'optionalAccess', _42 => _42.search, 'optionalAccess', _43 => _43.preserve])) ? route.search.preserve : [];
|
|
1439
1439
|
if (preserve.length === 0) return href;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getRequestSourceOrigin,
|
|
3
|
+
matchesAllowedOrigin,
|
|
4
|
+
matchesHostHeader,
|
|
5
|
+
normalizeAllowedOriginPattern
|
|
6
|
+
} from "./chunk-FP2INE7H.mjs";
|
|
7
|
+
import {
|
|
8
|
+
__name
|
|
9
|
+
} from "./chunk-LPEX4YW6.mjs";
|
|
10
|
+
|
|
11
|
+
// src/integration-request-security.ts
|
|
12
|
+
function resolveIntegrationAllowedOrigins(values, label) {
|
|
13
|
+
return Object.freeze((values ?? []).map((value) => normalizeAllowedOriginPattern(value, label)));
|
|
14
|
+
}
|
|
15
|
+
__name(resolveIntegrationAllowedOrigins, "resolveIntegrationAllowedOrigins");
|
|
16
|
+
function validateIntegrationRequestOrigin(request, policy = {}) {
|
|
17
|
+
const allowedOrigins = policy.allowedOrigins ?? [];
|
|
18
|
+
const requireOriginMetadata = policy.requireOriginMetadata ?? true;
|
|
19
|
+
const fetchSite = request.headers.get("sec-fetch-site")?.trim().toLowerCase();
|
|
20
|
+
const source = getRequestSourceOrigin(request);
|
|
21
|
+
if (!source.ok) {
|
|
22
|
+
return { ok: false, reason: source.reason };
|
|
23
|
+
}
|
|
24
|
+
if (source.origin === null) {
|
|
25
|
+
if (fetchSite === "same-origin") {
|
|
26
|
+
return { ok: true };
|
|
27
|
+
}
|
|
28
|
+
if (requireOriginMetadata) {
|
|
29
|
+
return { ok: false, reason: fetchSite === "cross-site" ? "cross-site" : "missing-origin" };
|
|
30
|
+
}
|
|
31
|
+
return fetchSite === "cross-site" ? { ok: false, reason: "cross-site" } : { ok: true };
|
|
32
|
+
}
|
|
33
|
+
const requestUrl = new URL(request.url);
|
|
34
|
+
const matchesConfiguredOrigin = allowedOrigins.some(
|
|
35
|
+
(pattern) => matchesAllowedOrigin(source.origin, pattern)
|
|
36
|
+
);
|
|
37
|
+
const matchesRequest = source.origin === requestUrl.origin || matchesHostHeader(source.origin, request);
|
|
38
|
+
if (!matchesRequest && !matchesConfiguredOrigin) {
|
|
39
|
+
return { ok: false, reason: "cross-site" };
|
|
40
|
+
}
|
|
41
|
+
if (fetchSite === "cross-site" && !matchesConfiguredOrigin) {
|
|
42
|
+
return { ok: false, reason: "cross-site" };
|
|
43
|
+
}
|
|
44
|
+
return { ok: true };
|
|
45
|
+
}
|
|
46
|
+
__name(validateIntegrationRequestOrigin, "validateIntegrationRequestOrigin");
|
|
47
|
+
function describeIntegrationOriginRejection(reason) {
|
|
48
|
+
switch (reason) {
|
|
49
|
+
case "missing-origin":
|
|
50
|
+
return "Request is missing same-origin metadata.";
|
|
51
|
+
case "opaque-origin":
|
|
52
|
+
return "Opaque origins are not allowed.";
|
|
53
|
+
case "invalid-origin":
|
|
54
|
+
return "Invalid request origin.";
|
|
55
|
+
case "cross-site":
|
|
56
|
+
return "Cross-site request was rejected.";
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
__name(describeIntegrationOriginRejection, "describeIntegrationOriginRejection");
|
|
60
|
+
|
|
61
|
+
export {
|
|
62
|
+
resolveIntegrationAllowedOrigins,
|
|
63
|
+
validateIntegrationRequestOrigin,
|
|
64
|
+
describeIntegrationOriginRejection
|
|
65
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkIWZKTWHZcjs = require('./chunk-IWZKTWHZ.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
var _chunkWMAPPDMMcjs = require('./chunk-WMAPPDMM.cjs');
|
|
@@ -10,7 +10,7 @@ var _chunkWMAPPDMMcjs = require('./chunk-WMAPPDMM.cjs');
|
|
|
10
10
|
var _chunkTKJZFIMLcjs = require('./chunk-TKJZFIML.cjs');
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var _chunkLSKZMJMPcjs = require('./chunk-LSKZMJMP.cjs');
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
|
|
@@ -18,6 +18,9 @@ var _chunkWPYFSQKKcjs = require('./chunk-WPYFSQKK.cjs');
|
|
|
18
18
|
var _chunkEM6SBQKMcjs = require('./chunk-EM6SBQKM.cjs');
|
|
19
19
|
|
|
20
20
|
|
|
21
|
+
var _chunkKNBBQHO2cjs = require('./chunk-KNBBQHO2.cjs');
|
|
22
|
+
|
|
23
|
+
|
|
21
24
|
|
|
22
25
|
var _chunkG7HXGLECcjs = require('./chunk-G7HXGLEC.cjs');
|
|
23
26
|
|
|
@@ -31,7 +34,7 @@ var _chunkS3A45T7Fcjs = require('./chunk-S3A45T7F.cjs');
|
|
|
31
34
|
var _chunkZEG3OPIBcjs = require('./chunk-ZEG3OPIB.cjs');
|
|
32
35
|
|
|
33
36
|
|
|
34
|
-
var
|
|
37
|
+
var _chunkUXFQ3UDAcjs = require('./chunk-UXFQ3UDA.cjs');
|
|
35
38
|
|
|
36
39
|
|
|
37
40
|
var _chunkS3JO3N4Hcjs = require('./chunk-S3JO3N4H.cjs');
|
|
@@ -64,7 +67,7 @@ function mergePluginAPIRoutes(existing, plugins, expected, options = {}) {
|
|
|
64
67
|
});
|
|
65
68
|
}
|
|
66
69
|
const api = createPluginLocalAPI(existing, options.bodySizeLimit);
|
|
67
|
-
for (const definition of
|
|
70
|
+
for (const definition of _chunkIWZKTWHZcjs.resolvePluginRoutes.call(void 0, plugins, { api })) {
|
|
68
71
|
_chunkWMAPPDMMcjs.registerAPIRouteShape.call(void 0, shapes, definition.path, `plugin:${definition.path}`, "app");
|
|
69
72
|
let route = routes.get(definition.path);
|
|
70
73
|
if (_optionalChain([route, 'optionalAccess', _ => _.methods, 'access', _2 => _2.includes, 'call', _3 => _3(definition.method)])) {
|
|
@@ -164,7 +167,7 @@ _chunkS3JO3N4Hcjs.__name.call(void 0, getAllowedAPIRouteMethods, "getAllowedAPIR
|
|
|
164
167
|
function matchAPIRouteAtBasePath(routes, pathname, serverBasePath = _chunkS3A45T7Fcjs.DEFAULT_FARM_API_BASE_PATH) {
|
|
165
168
|
const directMatch = _chunkG7HXGLECcjs.matchAPIRoute.call(void 0, routes, pathname);
|
|
166
169
|
if (directMatch) return directMatch;
|
|
167
|
-
const canonicalPathname =
|
|
170
|
+
const canonicalPathname = _chunkKNBBQHO2cjs.resolveFarmAPICanonicalPathname.call(void 0, pathname, serverBasePath);
|
|
168
171
|
return canonicalPathname === pathname ? null : _chunkG7HXGLECcjs.matchAPIRoute.call(void 0, routes, canonicalPathname);
|
|
169
172
|
}
|
|
170
173
|
_chunkS3JO3N4Hcjs.__name.call(void 0, matchAPIRouteAtBasePath, "matchAPIRouteAtBasePath");
|
|
@@ -173,7 +176,7 @@ function createStaticAPIRouteMatcherAtBasePath(routes, serverBasePath = _chunkS3
|
|
|
173
176
|
return (pathname) => {
|
|
174
177
|
const directMatch = match(pathname);
|
|
175
178
|
if (directMatch) return directMatch;
|
|
176
|
-
const canonicalPathname =
|
|
179
|
+
const canonicalPathname = _chunkKNBBQHO2cjs.resolveFarmAPICanonicalPathname.call(void 0, pathname, serverBasePath);
|
|
177
180
|
return canonicalPathname === pathname ? null : match(canonicalPathname);
|
|
178
181
|
};
|
|
179
182
|
}
|
|
@@ -191,7 +194,7 @@ async function invokeAPIRouteEndpoint(endpoint, request, params = {}, bodySizeLi
|
|
|
191
194
|
if (response2) return response2;
|
|
192
195
|
throw error;
|
|
193
196
|
}
|
|
194
|
-
const response = await
|
|
197
|
+
const response = await _chunkUXFQ3UDAcjs._runWithCurrentRequest.call(void 0,
|
|
195
198
|
request,
|
|
196
199
|
() => invokeAPIRouteEndpointInContext(endpoint, request, params)
|
|
197
200
|
);
|
|
@@ -256,7 +259,7 @@ async function invokeAPIRouteEndpointInContext(endpoint, request, params) {
|
|
|
256
259
|
invalidations: []
|
|
257
260
|
};
|
|
258
261
|
} catch (error) {
|
|
259
|
-
if (
|
|
262
|
+
if (_chunkIWZKTWHZcjs.isEndpointFailure.call(void 0, error)) {
|
|
260
263
|
return createEndpointFailureResponse(error);
|
|
261
264
|
}
|
|
262
265
|
throw error;
|
|
@@ -388,6 +391,9 @@ async function readRequestBody(request) {
|
|
|
388
391
|
}
|
|
389
392
|
if (!text) return { body: void 0 };
|
|
390
393
|
if (contentType === void 0) {
|
|
394
|
+
if (!_chunkLSKZMJMPcjs.validateIntegrationRequestOrigin.call(void 0, request, { requireOriginMetadata: false }).ok) {
|
|
395
|
+
return { body: void 0 };
|
|
396
|
+
}
|
|
391
397
|
try {
|
|
392
398
|
return { body: JSON.parse(text) };
|
|
393
399
|
} catch (e5) {
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
decodeCookieName
|
|
3
|
+
} from "./chunk-JM5XPKWH.mjs";
|
|
1
4
|
import {
|
|
2
5
|
localizeFarmPathname,
|
|
3
6
|
resolveFarmLocalePath
|
|
@@ -139,13 +142,7 @@ function readCookie(header, name) {
|
|
|
139
142
|
for (const part of header.split(";")) {
|
|
140
143
|
const separator = part.indexOf("=");
|
|
141
144
|
if (separator < 0) continue;
|
|
142
|
-
|
|
143
|
-
try {
|
|
144
|
-
key = decodeURIComponent(part.slice(0, separator).trim());
|
|
145
|
-
} catch {
|
|
146
|
-
continue;
|
|
147
|
-
}
|
|
148
|
-
if (key !== name) continue;
|
|
145
|
+
if (decodeCookieName(part.slice(0, separator).trim()) !== name) continue;
|
|
149
146
|
try {
|
|
150
147
|
return decodeURIComponent(part.slice(separator + 1).trim());
|
|
151
148
|
} catch {
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getRequestSourceOrigin,
|
|
3
|
-
matchesAllowedOrigin,
|
|
4
|
-
matchesHostHeader,
|
|
5
|
-
normalizeAllowedOriginPattern
|
|
6
|
-
} from "./chunk-FP2INE7H.mjs";
|
|
7
1
|
import {
|
|
8
2
|
defineSchema
|
|
9
3
|
} from "./chunk-44SYJEG3.mjs";
|
|
4
|
+
import {
|
|
5
|
+
compileMiddlewareConfig,
|
|
6
|
+
matchesCompiledMiddlewareConfig
|
|
7
|
+
} from "./chunk-JG6DJF5A.mjs";
|
|
10
8
|
import {
|
|
11
9
|
bufferFarmRequestBody,
|
|
12
10
|
clearRequestContext,
|
|
@@ -34,6 +32,12 @@ import {
|
|
|
34
32
|
canonicalizeRequestPathSegments,
|
|
35
33
|
canonicalizeRequestPathname
|
|
36
34
|
} from "./chunk-CQ6OSQ3K.mjs";
|
|
35
|
+
import {
|
|
36
|
+
resolveFarmLocalePath
|
|
37
|
+
} from "./chunk-L3KT7IXV.mjs";
|
|
38
|
+
import {
|
|
39
|
+
stripFarmBasePath
|
|
40
|
+
} from "./chunk-4RB44K6Z.mjs";
|
|
37
41
|
import {
|
|
38
42
|
assertTerminalCatchAll,
|
|
39
43
|
assertUniqueRouteParameters,
|
|
@@ -44,56 +48,6 @@ import {
|
|
|
44
48
|
__name
|
|
45
49
|
} from "./chunk-LPEX4YW6.mjs";
|
|
46
50
|
|
|
47
|
-
// src/integration-request-security.ts
|
|
48
|
-
function resolveIntegrationAllowedOrigins(values, label) {
|
|
49
|
-
return Object.freeze((values ?? []).map((value) => normalizeAllowedOriginPattern(value, label)));
|
|
50
|
-
}
|
|
51
|
-
__name(resolveIntegrationAllowedOrigins, "resolveIntegrationAllowedOrigins");
|
|
52
|
-
function validateIntegrationRequestOrigin(request, policy = {}) {
|
|
53
|
-
const allowedOrigins = policy.allowedOrigins ?? [];
|
|
54
|
-
const requireOriginMetadata = policy.requireOriginMetadata ?? true;
|
|
55
|
-
const fetchSite = request.headers.get("sec-fetch-site")?.trim().toLowerCase();
|
|
56
|
-
const source = getRequestSourceOrigin(request);
|
|
57
|
-
if (!source.ok) {
|
|
58
|
-
return { ok: false, reason: source.reason };
|
|
59
|
-
}
|
|
60
|
-
if (source.origin === null) {
|
|
61
|
-
if (fetchSite === "same-origin") {
|
|
62
|
-
return { ok: true };
|
|
63
|
-
}
|
|
64
|
-
if (requireOriginMetadata) {
|
|
65
|
-
return { ok: false, reason: fetchSite === "cross-site" ? "cross-site" : "missing-origin" };
|
|
66
|
-
}
|
|
67
|
-
return fetchSite === "cross-site" ? { ok: false, reason: "cross-site" } : { ok: true };
|
|
68
|
-
}
|
|
69
|
-
const requestUrl = new URL(request.url);
|
|
70
|
-
const matchesConfiguredOrigin = allowedOrigins.some(
|
|
71
|
-
(pattern) => matchesAllowedOrigin(source.origin, pattern)
|
|
72
|
-
);
|
|
73
|
-
const matchesRequest = source.origin === requestUrl.origin || matchesHostHeader(source.origin, request);
|
|
74
|
-
if (!matchesRequest && !matchesConfiguredOrigin) {
|
|
75
|
-
return { ok: false, reason: "cross-site" };
|
|
76
|
-
}
|
|
77
|
-
if (fetchSite === "cross-site" && !matchesConfiguredOrigin) {
|
|
78
|
-
return { ok: false, reason: "cross-site" };
|
|
79
|
-
}
|
|
80
|
-
return { ok: true };
|
|
81
|
-
}
|
|
82
|
-
__name(validateIntegrationRequestOrigin, "validateIntegrationRequestOrigin");
|
|
83
|
-
function describeIntegrationOriginRejection(reason) {
|
|
84
|
-
switch (reason) {
|
|
85
|
-
case "missing-origin":
|
|
86
|
-
return "Request is missing same-origin metadata.";
|
|
87
|
-
case "opaque-origin":
|
|
88
|
-
return "Opaque origins are not allowed.";
|
|
89
|
-
case "invalid-origin":
|
|
90
|
-
return "Invalid request origin.";
|
|
91
|
-
case "cross-site":
|
|
92
|
-
return "Cross-site request was rejected.";
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
__name(describeIntegrationOriginRejection, "describeIntegrationOriginRejection");
|
|
96
|
-
|
|
97
51
|
// src/plugin-integration-context.ts
|
|
98
52
|
var FARM_PLUGIN_INTEGRATION_CONTEXT = /* @__PURE__ */ Symbol.for("@farm.js/core/plugin-integration-context");
|
|
99
53
|
function setFarmPluginIntegrationContext(plugin, integration) {
|
|
@@ -904,7 +858,7 @@ function createIntegrationPlugin(integrationKey, integration) {
|
|
|
904
858
|
}
|
|
905
859
|
}, "createHandlerRequest");
|
|
906
860
|
for (const entry of middleware) {
|
|
907
|
-
const params =
|
|
861
|
+
const params = resolveIntegrationMiddlewareParams(entry, pathname, context.config);
|
|
908
862
|
if (!params) {
|
|
909
863
|
continue;
|
|
910
864
|
}
|
|
@@ -1623,7 +1577,7 @@ async function dispatchIntegrationRequest(runtime, request, options = {}) {
|
|
|
1623
1577
|
const middleware = [...integration.middleware || []];
|
|
1624
1578
|
const forwardedSetCookies = [];
|
|
1625
1579
|
for (const entry of middleware) {
|
|
1626
|
-
const params =
|
|
1580
|
+
const params = resolveIntegrationMiddlewareParams(entry, pathname, runtime.config);
|
|
1627
1581
|
if (!params) {
|
|
1628
1582
|
continue;
|
|
1629
1583
|
}
|
|
@@ -2046,6 +2000,44 @@ function matchesMethod(methods, normalizedMethod) {
|
|
|
2046
2000
|
return methods.some((candidate) => candidate === "ALL" || candidate === normalizedMethod);
|
|
2047
2001
|
}
|
|
2048
2002
|
__name(matchesMethod, "matchesMethod");
|
|
2003
|
+
var compiledIntegrationGuards = /* @__PURE__ */ new WeakMap();
|
|
2004
|
+
var noMiddlewareContext = {};
|
|
2005
|
+
function resolveIntegrationMiddlewareParams(entry, pathname, config) {
|
|
2006
|
+
const params = resolveMatcherParams(entry.matcher, pathname);
|
|
2007
|
+
if (params || !entry.matcher) return params;
|
|
2008
|
+
const routePathname = resolveIntegrationRoutePathname(pathname, config);
|
|
2009
|
+
if (routePathname !== pathname) {
|
|
2010
|
+
const routeParams = resolveMatcherParams(entry.matcher, routePathname);
|
|
2011
|
+
if (routeParams) return routeParams;
|
|
2012
|
+
}
|
|
2013
|
+
let compiled = compiledIntegrationGuards.get(entry);
|
|
2014
|
+
if (!compiled) {
|
|
2015
|
+
compiled = compileMiddlewareConfig({
|
|
2016
|
+
matcher: typeof entry.matcher === "string" ? entry.matcher : [...entry.matcher]
|
|
2017
|
+
});
|
|
2018
|
+
compiledIntegrationGuards.set(entry, compiled);
|
|
2019
|
+
}
|
|
2020
|
+
for (const candidate of routePathname === pathname ? [pathname] : [pathname, routePathname]) {
|
|
2021
|
+
const result = matchesCompiledMiddlewareConfig(candidate, compiled, noMiddlewareContext);
|
|
2022
|
+
if (result.matched) return result.params ?? {};
|
|
2023
|
+
}
|
|
2024
|
+
return null;
|
|
2025
|
+
}
|
|
2026
|
+
__name(resolveIntegrationMiddlewareParams, "resolveIntegrationMiddlewareParams");
|
|
2027
|
+
function resolveIntegrationRoutePathname(pathname, config) {
|
|
2028
|
+
const basePath = typeof config?.basePath === "string" ? config.basePath : void 0;
|
|
2029
|
+
let routePathname = basePath ? stripFarmBasePath(pathname, basePath) : pathname;
|
|
2030
|
+
const i18n = config?.i18n;
|
|
2031
|
+
if (i18n && Array.isArray(i18n.locales) && i18n.locales.length > 0) {
|
|
2032
|
+
routePathname = resolveFarmLocalePath(routePathname, {
|
|
2033
|
+
locales: i18n.locales,
|
|
2034
|
+
defaultLocale: i18n.defaultLocale,
|
|
2035
|
+
routing: i18n.routing || "prefix-except-default"
|
|
2036
|
+
}).pathname;
|
|
2037
|
+
}
|
|
2038
|
+
return routePathname;
|
|
2039
|
+
}
|
|
2040
|
+
__name(resolveIntegrationRoutePathname, "resolveIntegrationRoutePathname");
|
|
2049
2041
|
function resolveMatcherParams(matcher, pathname) {
|
|
2050
2042
|
if (!matcher) {
|
|
2051
2043
|
return {};
|
|
@@ -2143,9 +2135,6 @@ function normalizeMatcher(matcher) {
|
|
|
2143
2135
|
__name(normalizeMatcher, "normalizeMatcher");
|
|
2144
2136
|
|
|
2145
2137
|
export {
|
|
2146
|
-
resolveIntegrationAllowedOrigins,
|
|
2147
|
-
validateIntegrationRequestOrigin,
|
|
2148
|
-
describeIntegrationOriginRejection,
|
|
2149
2138
|
getFarmPluginIntegrationContext,
|
|
2150
2139
|
FARM_INTEGRATION_INTERNAL_DISPATCH_CONTEXT_KEY,
|
|
2151
2140
|
FARM_INTEGRATION_SET_COOKIES_KEY,
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-XAXTTBUT.mjs";
|
|
4
4
|
import {
|
|
5
5
|
serializeFarmLlmsTxt
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-NGVORZVZ.mjs";
|
|
7
7
|
import {
|
|
8
8
|
emitFarmAgentRead
|
|
9
9
|
} from "./chunk-MVL2RAJW.mjs";
|
|
@@ -13,10 +13,16 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
omitFarmResponseBody
|
|
15
15
|
} from "./chunk-5WI2S4CO.mjs";
|
|
16
|
+
import {
|
|
17
|
+
_listFarmMCPCatalogs
|
|
18
|
+
} from "./chunk-QLQ32WC4.mjs";
|
|
16
19
|
import {
|
|
17
20
|
resolveFarmAPIServerBasePath,
|
|
18
21
|
resolveFarmAPIServerRoutePath
|
|
19
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-BTHHUD7Q.mjs";
|
|
23
|
+
import {
|
|
24
|
+
FARM_VERSION
|
|
25
|
+
} from "./chunk-X242HVD5.mjs";
|
|
20
26
|
import {
|
|
21
27
|
localizeFarmPathname
|
|
22
28
|
} from "./chunk-L3KT7IXV.mjs";
|
|
@@ -514,6 +520,145 @@ function createFarmApiCatalogResponse(method, input, request) {
|
|
|
514
520
|
}
|
|
515
521
|
__name(createFarmApiCatalogResponse, "createFarmApiCatalogResponse");
|
|
516
522
|
|
|
523
|
+
// src/app-manifest.ts
|
|
524
|
+
var FARM_APP_MANIFEST_PATH = "/.well-known/farmjs";
|
|
525
|
+
var FARM_INFRA_SIGNATURE_HEADER = "farmjs-infra-signature";
|
|
526
|
+
var SIGNED_PURPOSE = "farmjs-manifest-v1";
|
|
527
|
+
var SIGNATURE_WINDOW_SECONDS = 300;
|
|
528
|
+
function resolveFarmAppManifestInput(config, extra) {
|
|
529
|
+
const llms = config.agent?.llmsTxt;
|
|
530
|
+
const plugins = (config.plugins ?? []).map(({ name }) => name);
|
|
531
|
+
const webmcp = plugins.includes("farm:webmcp");
|
|
532
|
+
return {
|
|
533
|
+
renderer: config.renderer?.name ?? "react",
|
|
534
|
+
basePath: config.basePath || "/",
|
|
535
|
+
build: extra.build,
|
|
536
|
+
packages: extra.packages,
|
|
537
|
+
webmcp: { enabled: webmcp, tools: webmcp ? extra.webmcpTools ?? [] : [] },
|
|
538
|
+
integrations: Object.entries(config.integrations ?? {}).flatMap(([key, integration]) => {
|
|
539
|
+
const category = integration?.category ?? integration?.slot;
|
|
540
|
+
return integration && category && integration.type ? [{ key, category, type: integration.type }] : [];
|
|
541
|
+
}),
|
|
542
|
+
agent: {
|
|
543
|
+
apiCatalog: config.agent?.apiCatalog ? "/.well-known/api-catalog" : null,
|
|
544
|
+
llmsTxt: llms === true || typeof llms === "object" && llms !== null && llms.enabled !== false,
|
|
545
|
+
openapi: config.openapi?.enabled && config.openapi.specRoute ? config.openapi.specRoute : null
|
|
546
|
+
},
|
|
547
|
+
plugins,
|
|
548
|
+
analytics: config.analytics !== false
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
__name(resolveFarmAppManifestInput, "resolveFarmAppManifestInput");
|
|
552
|
+
var SOURCES = {
|
|
553
|
+
endpoint: "endpoint",
|
|
554
|
+
standalone: "defineTool",
|
|
555
|
+
serverFunction: "serverFunction"
|
|
556
|
+
};
|
|
557
|
+
function createFarmAppManifest(input) {
|
|
558
|
+
return {
|
|
559
|
+
schemaVersion: 1,
|
|
560
|
+
app: {
|
|
561
|
+
farm: FARM_VERSION,
|
|
562
|
+
renderer: input.renderer,
|
|
563
|
+
basePath: input.basePath,
|
|
564
|
+
build: input.build
|
|
565
|
+
},
|
|
566
|
+
packages: input.packages,
|
|
567
|
+
mcp: {
|
|
568
|
+
servers: _listFarmMCPCatalogs().map(({ server, tools, details }) => ({
|
|
569
|
+
name: server.name,
|
|
570
|
+
version: server.version,
|
|
571
|
+
path: server.path,
|
|
572
|
+
resources: [...details?.resources ?? []],
|
|
573
|
+
prompts: [...details?.prompts ?? []],
|
|
574
|
+
tools: tools.map((tool) => {
|
|
575
|
+
const schemas = details?.schemas?.[tool.name];
|
|
576
|
+
const hints = Object.fromEntries(
|
|
577
|
+
["readOnlyHint", "destructiveHint", "idempotentHint", "openWorldHint"].filter((hint) => typeof tool[hint] === "boolean").map((hint) => [hint, tool[hint]])
|
|
578
|
+
);
|
|
579
|
+
return {
|
|
580
|
+
name: tool.name,
|
|
581
|
+
...tool.title ? { title: tool.title } : {},
|
|
582
|
+
...tool.description ? { description: tool.description } : {},
|
|
583
|
+
source: SOURCES[tool.kind],
|
|
584
|
+
...tool.kind === "endpoint" ? { method: tool.method, path: tool.path } : {},
|
|
585
|
+
...hints,
|
|
586
|
+
...schemas ? { inputSchema: schemas.input } : {},
|
|
587
|
+
...schemas?.output ? { outputSchema: schemas.output } : {}
|
|
588
|
+
};
|
|
589
|
+
})
|
|
590
|
+
}))
|
|
591
|
+
},
|
|
592
|
+
webmcp: input.webmcp,
|
|
593
|
+
integrations: input.integrations,
|
|
594
|
+
agent: input.agent,
|
|
595
|
+
plugins: input.plugins
|
|
596
|
+
};
|
|
597
|
+
}
|
|
598
|
+
__name(createFarmAppManifest, "createFarmAppManifest");
|
|
599
|
+
var encoder = new TextEncoder();
|
|
600
|
+
var hex = /* @__PURE__ */ __name((bytes) => [...new Uint8Array(bytes)].map((byte) => byte.toString(16).padStart(2, "0")).join(""), "hex");
|
|
601
|
+
async function sha256Hex(value) {
|
|
602
|
+
return hex(await crypto.subtle.digest("SHA-256", encoder.encode(value)));
|
|
603
|
+
}
|
|
604
|
+
__name(sha256Hex, "sha256Hex");
|
|
605
|
+
async function hmacHex(secret, message) {
|
|
606
|
+
const key = await crypto.subtle.importKey(
|
|
607
|
+
"raw",
|
|
608
|
+
encoder.encode(secret),
|
|
609
|
+
{ name: "HMAC", hash: "SHA-256" },
|
|
610
|
+
false,
|
|
611
|
+
["sign"]
|
|
612
|
+
);
|
|
613
|
+
return hex(await crypto.subtle.sign("HMAC", key, encoder.encode(message)));
|
|
614
|
+
}
|
|
615
|
+
__name(hmacHex, "hmacHex");
|
|
616
|
+
function sameHex(a, b) {
|
|
617
|
+
if (a.length !== b.length) return false;
|
|
618
|
+
let difference = 0;
|
|
619
|
+
for (let index = 0; index < a.length; index++)
|
|
620
|
+
difference |= a.charCodeAt(index) ^ b.charCodeAt(index);
|
|
621
|
+
return difference === 0;
|
|
622
|
+
}
|
|
623
|
+
__name(sameHex, "sameHex");
|
|
624
|
+
async function verifyFarmInfraManifestSignature(header, key, now = Date.now()) {
|
|
625
|
+
if (!header || header.length > 2048) return false;
|
|
626
|
+
const parts = header.split(",").map((part) => part.trim());
|
|
627
|
+
const timestamp = Number(
|
|
628
|
+
/^t=(\d{1,12})$/.exec(parts.find((part) => part.startsWith("t=")) ?? "")?.[1]
|
|
629
|
+
);
|
|
630
|
+
if (!Number.isSafeInteger(timestamp)) return false;
|
|
631
|
+
if (Math.abs(now / 1e3 - timestamp) > SIGNATURE_WINDOW_SECONDS) return false;
|
|
632
|
+
const signatures = parts.filter((part) => part.startsWith("v1=")).map((part) => part.slice(3)).filter((value) => /^[0-9a-f]{64}$/.test(value));
|
|
633
|
+
if (!signatures.length || signatures.length > 8) return false;
|
|
634
|
+
const expected = await hmacHex(await sha256Hex(key), `${SIGNED_PURPOSE}
|
|
635
|
+
${timestamp}`);
|
|
636
|
+
return signatures.some((signature) => sameHex(signature, expected));
|
|
637
|
+
}
|
|
638
|
+
__name(verifyFarmInfraManifestSignature, "verifyFarmInfraManifestSignature");
|
|
639
|
+
function processEnv() {
|
|
640
|
+
return globalThis.process?.env ?? {};
|
|
641
|
+
}
|
|
642
|
+
__name(processEnv, "processEnv");
|
|
643
|
+
async function createFarmAppManifestResponse(request, input, options) {
|
|
644
|
+
if (request.method !== "GET" && request.method !== "HEAD") return null;
|
|
645
|
+
if (!options.development) {
|
|
646
|
+
const key = (options.env ?? processEnv()).FARMJS_API_KEY?.trim();
|
|
647
|
+
if (!input.analytics || !key) return null;
|
|
648
|
+
const signed = await verifyFarmInfraManifestSignature(
|
|
649
|
+
request.headers.get(FARM_INFRA_SIGNATURE_HEADER),
|
|
650
|
+
key
|
|
651
|
+
);
|
|
652
|
+
if (!signed)
|
|
653
|
+
return new Response(null, { status: 404, headers: { "cache-control": "no-store" } });
|
|
654
|
+
}
|
|
655
|
+
const body = JSON.stringify(createFarmAppManifest(input));
|
|
656
|
+
return new Response(request.method === "HEAD" ? null : body, {
|
|
657
|
+
headers: { "content-type": "application/json", "cache-control": "private, no-store" }
|
|
658
|
+
});
|
|
659
|
+
}
|
|
660
|
+
__name(createFarmAppManifestResponse, "createFarmAppManifestResponse");
|
|
661
|
+
|
|
517
662
|
export {
|
|
518
663
|
renderFarmLocaleAlternateLinks,
|
|
519
664
|
createLateRedirectRecovery,
|
|
@@ -526,5 +671,8 @@ export {
|
|
|
526
671
|
applyFarmThemeDocument,
|
|
527
672
|
FARM_API_CATALOG_PATH,
|
|
528
673
|
resolveFarmApiCatalogInput,
|
|
529
|
-
createFarmApiCatalogResponse
|
|
674
|
+
createFarmApiCatalogResponse,
|
|
675
|
+
FARM_APP_MANIFEST_PATH,
|
|
676
|
+
resolveFarmAppManifestInput,
|
|
677
|
+
createFarmAppManifestResponse
|
|
530
678
|
};
|
|
@@ -52,6 +52,9 @@ function resolveFarmI18nConfig(input, options = {}) {
|
|
|
52
52
|
if (sameSite !== "lax" && sameSite !== "strict" && sameSite !== "none") {
|
|
53
53
|
throw new Error('i18n.cookie.sameSite must be "lax", "strict", or "none".');
|
|
54
54
|
}
|
|
55
|
+
if (sameSite === "none" && _optionalChain([input, 'access', _3 => _3.cookie, 'optionalAccess', _4 => _4.secure]) === false) {
|
|
56
|
+
throw new Error('i18n.cookie.secure cannot be false when i18n.cookie.sameSite is "none".');
|
|
57
|
+
}
|
|
55
58
|
const direction = {};
|
|
56
59
|
for (const [rawLocale, value] of Object.entries(input.direction || {})) {
|
|
57
60
|
const locale = canonicalizeLocale(rawLocale);
|
|
@@ -74,15 +77,15 @@ function resolveFarmI18nConfig(input, options = {}) {
|
|
|
74
77
|
fallbackLocale,
|
|
75
78
|
strict: _nullishCoalesce(input.strict, () => ( strictByDefault)),
|
|
76
79
|
cookie: {
|
|
77
|
-
name: _optionalChain([input, 'access',
|
|
80
|
+
name: _optionalChain([input, 'access', _5 => _5.cookie, 'optionalAccess', _6 => _6.name, 'optionalAccess', _7 => _7.trim, 'call', _8 => _8()]) || DEFAULT_FARM_I18N_COOKIE,
|
|
78
81
|
maxAge: normalizePositiveInteger(
|
|
79
|
-
_optionalChain([input, 'access',
|
|
82
|
+
_optionalChain([input, 'access', _9 => _9.cookie, 'optionalAccess', _10 => _10.maxAge]),
|
|
80
83
|
DEFAULT_FARM_I18N_COOKIE_MAX_AGE,
|
|
81
84
|
"i18n.cookie.maxAge"
|
|
82
85
|
),
|
|
83
|
-
path: normalizeCookiePath(_optionalChain([input, 'access',
|
|
86
|
+
path: normalizeCookiePath(_optionalChain([input, 'access', _11 => _11.cookie, 'optionalAccess', _12 => _12.path])),
|
|
84
87
|
sameSite,
|
|
85
|
-
secure: _nullishCoalesce(_optionalChain([input, 'access',
|
|
88
|
+
secure: _nullishCoalesce(_optionalChain([input, 'access', _13 => _13.cookie, 'optionalAccess', _14 => _14.secure]), () => ( (sameSite === "none" || options.mode === "production")))
|
|
86
89
|
},
|
|
87
90
|
direction
|
|
88
91
|
};
|