@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.
Files changed (286) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-runtime.cjs +69 -14
  3. package/dist/agent-runtime.d.mts +1 -1
  4. package/dist/agent-runtime.d.ts +1 -1
  5. package/dist/agent-runtime.mjs +58 -3
  6. package/dist/api/route-manager.cjs +16 -13
  7. package/dist/api/route-manager.d.mts +1 -1
  8. package/dist/api/route-manager.d.ts +1 -1
  9. package/dist/api/route-manager.mjs +15 -12
  10. package/dist/api/runtime.cjs +9 -7
  11. package/dist/api/runtime.d.mts +1 -1
  12. package/dist/api/runtime.d.ts +1 -1
  13. package/dist/api/runtime.mjs +8 -6
  14. package/dist/api.cjs +19 -16
  15. package/dist/api.d.mts +2 -2
  16. package/dist/api.d.ts +2 -2
  17. package/dist/api.mjs +18 -15
  18. package/dist/{app-sUJ3jnTZ.d.ts → app-DgotYGbq.d.ts} +3 -3
  19. package/dist/app-markdown.cjs +8 -6
  20. package/dist/app-markdown.d.mts +3 -3
  21. package/dist/app-markdown.d.ts +3 -3
  22. package/dist/app-markdown.mjs +7 -5
  23. package/dist/{app-DAuUTIZf.d.mts → app-q4rmZlXK.d.mts} +3 -3
  24. package/dist/cache.cjs +2 -2
  25. package/dist/cache.d.mts +10 -1
  26. package/dist/cache.d.ts +10 -1
  27. package/dist/cache.mjs +1 -1
  28. package/dist/{chunk-YZTASLPQ.cjs → chunk-27ZWSI3W.cjs} +2 -2
  29. package/dist/{chunk-WBIH66JK.mjs → chunk-2ELDTQRN.mjs} +5 -2
  30. package/dist/{chunk-K7CELQLK.cjs → chunk-2F2ER724.cjs} +54 -29
  31. package/dist/{chunk-NRVGEI5I.mjs → chunk-2NNMOPDN.mjs} +4 -210
  32. package/dist/chunk-2NQQ5H5G.cjs +86 -0
  33. package/dist/{chunk-HPQC2LHF.cjs → chunk-36MK5YCW.cjs} +342 -163
  34. package/dist/chunk-3BU22U3M.cjs +237 -0
  35. package/dist/{chunk-MM5D6VLP.mjs → chunk-3KZS4SUS.mjs} +33 -14
  36. package/dist/chunk-3SDFA7UF.cjs +701 -0
  37. package/dist/{chunk-4IEPYMHF.mjs → chunk-3UEVPCGW.mjs} +1 -1
  38. package/dist/{chunk-6G3ZZ2IE.mjs → chunk-3VSKDFAT.mjs} +1 -1
  39. package/dist/{chunk-5HGR3W6O.mjs → chunk-5SJWVY6R.mjs} +8 -0
  40. package/dist/{chunk-X7WVQMIB.mjs → chunk-657WJNRY.mjs} +10 -4
  41. package/dist/{chunk-MKMBQSNQ.mjs → chunk-6VVL3MHY.mjs} +3 -3
  42. package/dist/{chunk-QZRVZSPN.cjs → chunk-77GNHH2Z.cjs} +3 -3
  43. package/dist/{chunk-KZLND3D2.cjs → chunk-7BT4H4P7.cjs} +7 -5
  44. package/dist/{chunk-A777V5WU.cjs → chunk-7M52YUMY.cjs} +2 -2
  45. package/dist/{chunk-VUMAE7NC.mjs → chunk-7Y6ZNFPX.mjs} +81 -30
  46. package/dist/{chunk-ZDILFMWN.cjs → chunk-A5FGU2WU.cjs} +74 -23
  47. package/dist/{chunk-BZ3CHOFX.mjs → chunk-AGC75XAE.mjs} +37 -1
  48. package/dist/{chunk-4ZQQL4IU.mjs → chunk-AHGECQEW.mjs} +1 -1
  49. package/dist/{chunk-RG3ZOTG5.cjs → chunk-AI7QMY7O.cjs} +10 -3
  50. package/dist/{chunk-O3DTUAX2.mjs → chunk-AQZFOP7S.mjs} +6 -77
  51. package/dist/{chunk-WNLBF77X.cjs → chunk-ATK2R4CH.cjs} +14 -12
  52. package/dist/{chunk-SORB3MAR.cjs → chunk-AWC4VUZL.cjs} +17 -17
  53. package/dist/{chunk-YMCXWPWK.mjs → chunk-BCMSYSN2.mjs} +4 -1
  54. package/dist/{chunk-BZAGKCKB.cjs → chunk-BTAG7LI7.cjs} +2 -2
  55. package/dist/{chunk-I6XDAKWQ.mjs → chunk-BTHHUD7Q.mjs} +14 -0
  56. package/dist/chunk-C4SPBWFM.cjs +26 -0
  57. package/dist/{chunk-JATSG2ZO.mjs → chunk-CLJYVZAD.mjs} +4 -2
  58. package/dist/{chunk-J3LOGE4T.cjs → chunk-DQQOKWYA.cjs} +5 -5
  59. package/dist/{chunk-JLRDISQL.cjs → chunk-DZ4DTRJ5.cjs} +7 -7
  60. package/dist/chunk-E5GNDG5F.mjs +701 -0
  61. package/dist/{chunk-E76XC6ZG.mjs → chunk-EZDQRNQ7.mjs} +2 -2
  62. package/dist/{chunk-TOVMYGYW.mjs → chunk-F2SE2VDO.mjs} +1 -1
  63. package/dist/{chunk-BSPQVJ4A.mjs → chunk-FDR64H6B.mjs} +13 -0
  64. package/dist/{chunk-5OVTOKGH.cjs → chunk-FFFW3OQ7.cjs} +2 -2
  65. package/dist/{chunk-D4JE5NNV.cjs → chunk-FNO7A7CM.cjs} +5 -5
  66. package/dist/chunk-FZ6YYU2W.mjs +65 -0
  67. package/dist/{chunk-PZNCMPJF.cjs → chunk-G26MUMKL.cjs} +14 -8
  68. package/dist/{chunk-IXUY2F5U.mjs → chunk-GCXWJJKH.mjs} +4 -7
  69. package/dist/{chunk-JLCQGPXE.mjs → chunk-GNSDTTWZ.mjs} +50 -61
  70. package/dist/{chunk-D234YWNA.mjs → chunk-GOABMOX3.mjs} +151 -3
  71. package/dist/{chunk-HBTUGXHS.cjs → chunk-HLJ6MBUZ.cjs} +7 -4
  72. package/dist/{chunk-GZYH4OER.mjs → chunk-HR5KPHC2.mjs} +1 -1
  73. package/dist/{chunk-ZCU4NZ3M.cjs → chunk-IE7XCHH3.cjs} +4 -4
  74. package/dist/{chunk-I26CZYPV.cjs → chunk-IHNIDL6H.cjs} +50 -7
  75. package/dist/{chunk-2FQHH5SC.mjs → chunk-IHNMMXHV.mjs} +49 -24
  76. package/dist/{chunk-VHJGDMCG.cjs → chunk-IWZKTWHZ.cjs} +2 -2
  77. package/dist/{chunk-DGXN3L4D.mjs → chunk-JDPAKVS4.mjs} +4 -4
  78. package/dist/chunk-JG6DJF5A.mjs +238 -0
  79. package/dist/{chunk-5TISYEQF.mjs → chunk-JM5XPKWH.mjs} +10 -3
  80. package/dist/{chunk-BJJATPEC.mjs → chunk-KN7K4VQN.mjs} +1 -1
  81. package/dist/{chunk-WPYFSQKK.cjs → chunk-KNBBQHO2.cjs} +15 -1
  82. package/dist/{chunk-XWAWFQFS.cjs → chunk-KXWRO25S.cjs} +7 -4
  83. package/dist/{chunk-QG5HNS7P.mjs → chunk-LHODW25H.mjs} +2 -2
  84. package/dist/{chunk-BXFWA23T.mjs → chunk-LMJ7VRHZ.mjs} +3 -3
  85. package/dist/{chunk-IVLUJUT4.mjs → chunk-LR5QSC2P.mjs} +388 -209
  86. package/dist/chunk-LSKZMJMP.cjs +65 -0
  87. package/dist/{chunk-2N5PX3LS.mjs → chunk-LYV44OIR.mjs} +7 -1
  88. package/dist/{chunk-5MKEDGLD.cjs → chunk-M64YUMA4.cjs} +11 -6
  89. package/dist/{chunk-EXLKRR4U.cjs → chunk-MIDIZJZC.cjs} +12 -12
  90. package/dist/{chunk-ES4B2IXW.cjs → chunk-MOKLYNHV.cjs} +2 -2
  91. package/dist/{chunk-IV6CQY7O.mjs → chunk-MSSFIQGM.mjs} +63 -13
  92. package/dist/{chunk-KH7BN726.cjs → chunk-N4UOK6ZI.cjs} +8 -2
  93. package/dist/{chunk-YMUE7L3D.mjs → chunk-NGVORZVZ.mjs} +1 -1
  94. package/dist/{chunk-JNGIWIY6.mjs → chunk-NPC7VWJE.mjs} +2 -2
  95. package/dist/{chunk-ILWLPEVO.mjs → chunk-NRSN7G7E.mjs} +2 -2
  96. package/dist/{chunk-PQD2AI3B.mjs → chunk-O27L4YAA.mjs} +1 -1
  97. package/dist/{chunk-X5TXZFMN.cjs → chunk-ODBZYBAB.cjs} +1 -1
  98. package/dist/{chunk-NPPL5YDT.cjs → chunk-P64MIF5B.cjs} +154 -6
  99. package/dist/{chunk-JFHKNFEO.cjs → chunk-PQDFUSXD.cjs} +14 -14
  100. package/dist/{chunk-F6XEGFHO.mjs → chunk-PXKIEXZD.mjs} +10 -0
  101. package/dist/{chunk-S5GDHOE4.mjs → chunk-PZNL3WEG.mjs} +48 -5
  102. package/dist/{chunk-FV45CKBC.mjs → chunk-QCFBDFRS.mjs} +1 -1
  103. package/dist/{chunk-75BRBIFP.cjs → chunk-QCVE2OCI.cjs} +5 -8
  104. package/dist/{chunk-6ZCMSZ5U.mjs → chunk-QE6VAKLT.mjs} +1 -1
  105. package/dist/{chunk-75DYEVXI.cjs → chunk-QGYRXFU2.cjs} +9 -9
  106. package/dist/{chunk-CTV2TTNP.cjs → chunk-QJ3J6MZT.cjs} +16 -87
  107. package/dist/{chunk-O6XNAMBV.mjs → chunk-QLQ32WC4.mjs} +8 -3
  108. package/dist/{chunk-GIWC4CFJ.cjs → chunk-SJVKK4JE.cjs} +839 -420
  109. package/dist/{chunk-3FCFQP5V.cjs → chunk-TA5G2HWD.cjs} +21 -21
  110. package/dist/{chunk-Z5HIWVDP.cjs → chunk-TDFPACVX.cjs} +62 -73
  111. package/dist/{chunk-ND224OE2.cjs → chunk-TKSCR644.cjs} +34 -15
  112. package/dist/{chunk-2UABTL3Y.mjs → chunk-U4PTAHW3.mjs} +64 -13
  113. package/dist/{chunk-ZHVYQL3H.cjs → chunk-U74I55WB.cjs} +86 -35
  114. package/dist/chunk-UBO4SGH4.mjs +86 -0
  115. package/dist/{chunk-IQXFRNY2.cjs → chunk-UFDAAQFX.cjs} +2 -2
  116. package/dist/{chunk-NXG66MR7.cjs → chunk-UX5S4JEO.cjs} +40 -4
  117. package/dist/{chunk-5ZSWG4UX.cjs → chunk-UXFQ3UDA.cjs} +14 -1
  118. package/dist/{chunk-L4DVIHOC.mjs → chunk-VCCUOMQN.mjs} +1 -1
  119. package/dist/{chunk-4V7GIE2U.mjs → chunk-VHANUNEG.mjs} +2 -2
  120. package/dist/{chunk-FXUUWYAX.cjs → chunk-VKNHTSAP.cjs} +10 -0
  121. package/dist/{chunk-2AKFKCHA.mjs → chunk-W7LF2J2S.mjs} +1 -1
  122. package/dist/{chunk-MNUGPHLN.mjs → chunk-WNNYOOIB.mjs} +5 -3
  123. package/dist/{chunk-K6V52QMI.mjs → chunk-X242HVD5.mjs} +1 -1
  124. package/dist/{chunk-UJ2C4ICS.cjs → chunk-XJXBIP67.cjs} +4 -4
  125. package/dist/{chunk-S4K74WI4.mjs → chunk-XV5DJTBX.mjs} +539 -121
  126. package/dist/{chunk-6CNX6Q3K.cjs → chunk-XXJU7FCC.cjs} +9 -5
  127. package/dist/{chunk-DYEJQTDN.cjs → chunk-YSCV4SJF.cjs} +4 -4
  128. package/dist/{chunk-2SDO73HK.cjs → chunk-YWN746US.cjs} +64 -14
  129. package/dist/chunk-Z2HLU4IX.cjs +238 -0
  130. package/dist/{chunk-Q5JFU33Q.cjs → chunk-Z2YLTERK.cjs} +4 -4
  131. package/dist/{chunk-XLTV4VOG.cjs → chunk-ZHPHJPQP.cjs} +4 -4
  132. package/dist/{chunk-7CXKSRKL.mjs → chunk-ZKP7C2B6.mjs} +4 -4
  133. package/dist/{chunk-ATXI6LGT.mjs → chunk-ZUSJDQ2Q.mjs} +8 -4
  134. package/dist/{client-plugins-BX2ptm4H.d.mts → client-plugins-CLObcuCq.d.mts} +26 -2
  135. package/dist/{client-plugins-BmxM5KW_.d.ts → client-plugins-DZjHC4Mi.d.ts} +26 -2
  136. package/dist/client-plugins.d.mts +1 -1
  137. package/dist/client-plugins.d.ts +1 -1
  138. package/dist/client.cjs +8 -8
  139. package/dist/client.d.mts +5 -5
  140. package/dist/client.d.ts +5 -5
  141. package/dist/client.mjs +7 -7
  142. package/dist/config.d.mts +1 -1
  143. package/dist/config.d.ts +1 -1
  144. package/dist/{devtools-GGVPZHJX.cjs → devtools-HU6Y2MNV.cjs} +11 -9
  145. package/dist/{devtools-THVNPI2M.mjs → devtools-RNXCTS4R.mjs} +10 -8
  146. package/dist/docs.cjs +13 -11
  147. package/dist/docs.d.mts +5 -0
  148. package/dist/docs.d.ts +5 -0
  149. package/dist/docs.mjs +12 -10
  150. package/dist/environment/vite.cjs +2 -2
  151. package/dist/environment/vite.mjs +1 -1
  152. package/dist/headers.cjs +4 -4
  153. package/dist/headers.mjs +3 -3
  154. package/dist/i18n/client.cjs +14 -13
  155. package/dist/i18n/client.mjs +5 -4
  156. package/dist/i18n/index.cjs +3 -2
  157. package/dist/i18n/index.mjs +2 -1
  158. package/dist/i18n/server.cjs +6 -5
  159. package/dist/i18n/server.mjs +5 -4
  160. package/dist/image/server.cjs +2 -2
  161. package/dist/image/server.mjs +1 -1
  162. package/dist/image/sharp.cjs +9 -9
  163. package/dist/image/sharp.mjs +1 -1
  164. package/dist/index.cjs +67 -55
  165. package/dist/index.d.mts +14 -14
  166. package/dist/index.d.ts +14 -14
  167. package/dist/index.mjs +70 -58
  168. package/dist/integrations.cjs +6 -3
  169. package/dist/integrations.d.mts +1 -1
  170. package/dist/integrations.d.ts +1 -1
  171. package/dist/integrations.mjs +7 -4
  172. package/dist/internal/app-markdown-runtime.cjs +7 -5
  173. package/dist/internal/app-markdown-runtime.d.mts +14 -3
  174. package/dist/internal/app-markdown-runtime.d.ts +14 -3
  175. package/dist/internal/app-markdown-runtime.mjs +6 -4
  176. package/dist/internal/build-runtime.cjs +38 -35
  177. package/dist/internal/build-runtime.d.mts +3 -3
  178. package/dist/internal/build-runtime.d.ts +3 -3
  179. package/dist/internal/build-runtime.mjs +37 -34
  180. package/dist/internal/cli-runtime.cjs +20 -17
  181. package/dist/internal/cli-runtime.mjs +19 -16
  182. package/dist/internal/client-error-overlay.cjs +4 -4
  183. package/dist/internal/client-error-overlay.mjs +1 -1
  184. package/dist/internal/client-runtime.cjs +4 -2
  185. package/dist/internal/client-runtime.d.mts +9 -1
  186. package/dist/internal/client-runtime.d.ts +9 -1
  187. package/dist/internal/client-runtime.mjs +3 -1
  188. package/dist/internal/compression-runtime.d.mts +1 -1
  189. package/dist/internal/compression-runtime.d.ts +1 -1
  190. package/dist/internal/config-runtime.cjs +11 -9
  191. package/dist/internal/config-runtime.d.mts +2 -2
  192. package/dist/internal/config-runtime.d.ts +2 -2
  193. package/dist/internal/config-runtime.mjs +10 -8
  194. package/dist/internal/infra-analytics-runtime.cjs +4 -4
  195. package/dist/internal/infra-analytics-runtime.mjs +2 -2
  196. package/dist/internal/product-telemetry-runtime.cjs +2 -2
  197. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  198. package/dist/internal/production-runtime.cjs +20 -14
  199. package/dist/internal/production-runtime.d.mts +115 -8
  200. package/dist/internal/production-runtime.d.ts +115 -8
  201. package/dist/internal/production-runtime.mjs +19 -13
  202. package/dist/internal/request-cookies.cjs +4 -2
  203. package/dist/internal/request-cookies.d.mts +9 -1
  204. package/dist/internal/request-cookies.d.ts +9 -1
  205. package/dist/internal/request-cookies.mjs +3 -1
  206. package/dist/markdown.cjs +4 -4
  207. package/dist/markdown.d.mts +1 -1
  208. package/dist/markdown.d.ts +1 -1
  209. package/dist/markdown.mjs +3 -3
  210. package/dist/{metadata-DsEaK7mQ.d.mts → metadata-2HSU2i_w.d.mts} +1 -1
  211. package/dist/{metadata-fwZ3gfG6.d.ts → metadata-Cjs8JMRM.d.ts} +1 -1
  212. package/dist/middleware.cjs +18 -8
  213. package/dist/middleware.d.mts +24 -5
  214. package/dist/middleware.d.ts +24 -5
  215. package/dist/middleware.mjs +18 -8
  216. package/dist/navigation.cjs +6 -6
  217. package/dist/navigation.d.mts +4 -4
  218. package/dist/navigation.d.ts +4 -4
  219. package/dist/navigation.mjs +5 -5
  220. package/dist/{nitro-NAKCRVHX.mjs → nitro-4XGPNIK4.mjs} +3 -3
  221. package/dist/{nitro-VYDZGYFY.cjs → nitro-HSAQFXSS.cjs} +4 -4
  222. package/dist/plugin.cjs +33 -30
  223. package/dist/plugin.d.mts +1 -1
  224. package/dist/plugin.d.ts +1 -1
  225. package/dist/plugin.mjs +32 -29
  226. package/dist/{production-runtime-DNkpFnmg.d.ts → production-runtime-BU5ETAK9.d.ts} +8 -1
  227. package/dist/{production-runtime-Baqgwtvc.d.mts → production-runtime-CysZl3EV.d.mts} +8 -1
  228. package/dist/query/client.cjs +7 -7
  229. package/dist/query/client.mjs +3 -3
  230. package/dist/{render-plan-DhwQnmmX.d.mts → render-plan-CKr4ltOd.d.mts} +1 -1
  231. package/dist/{render-plan-rkIK9wd9.d.ts → render-plan-D72O1qm4.d.ts} +1 -1
  232. package/dist/renderer-client.cjs +39 -19
  233. package/dist/renderer-client.d.mts +3 -3
  234. package/dist/renderer-client.d.ts +3 -3
  235. package/dist/renderer-client.mjs +28 -8
  236. package/dist/{request-CFy1BltJ.d.mts → request-Be83WafN.d.mts} +7 -2
  237. package/dist/{request-BcY4RYPC.d.ts → request-DbyOYI2j.d.ts} +7 -2
  238. package/dist/request.cjs +2 -2
  239. package/dist/request.d.mts +2 -2
  240. package/dist/request.d.ts +2 -2
  241. package/dist/request.mjs +1 -1
  242. package/dist/{route-rendering-BkS0TBlB.d.mts → route-rendering-BG56SzvJ.d.mts} +1 -1
  243. package/dist/{route-rendering-D4XpMjam.d.ts → route-rendering-CtVMpV-k.d.ts} +1 -1
  244. package/dist/{router-C4zPlC3V.d.mts → router-ALUvm8gC.d.mts} +1 -1
  245. package/dist/{router-Cq7BcZxg.d.ts → router-D94-SDlW.d.ts} +1 -1
  246. package/dist/routes.cjs +3 -3
  247. package/dist/routes.d.mts +1 -1
  248. package/dist/routes.d.ts +1 -1
  249. package/dist/routes.mjs +2 -2
  250. package/dist/server-fn.cjs +3 -3
  251. package/dist/server-fn.mjs +2 -2
  252. package/dist/server-plugins.cjs +4 -4
  253. package/dist/server-plugins.d.mts +2 -2
  254. package/dist/server-plugins.d.ts +2 -2
  255. package/dist/server-plugins.mjs +3 -3
  256. package/dist/server-query-client.cjs +3 -3
  257. package/dist/server-query-client.mjs +2 -2
  258. package/dist/server-query.cjs +4 -4
  259. package/dist/server-query.mjs +3 -3
  260. package/dist/server.cjs +60 -57
  261. package/dist/server.d.mts +7 -7
  262. package/dist/server.d.ts +7 -7
  263. package/dist/server.mjs +37 -34
  264. package/dist/{spa-router-B1HI3X9k.d.ts → spa-router-CxK3USIz.d.ts} +2 -2
  265. package/dist/{spa-router-DzPZH-AO.d.mts → spa-router-DbxNRKOB.d.mts} +2 -2
  266. package/dist/testing.cjs +19 -17
  267. package/dist/testing.d.mts +1 -1
  268. package/dist/testing.d.ts +1 -1
  269. package/dist/testing.mjs +16 -14
  270. package/dist/theme/server.cjs +4 -3
  271. package/dist/theme/server.mjs +3 -2
  272. package/dist/{utils-DMD1Hzta.d.ts → utils-311Y8eoK.d.ts} +1 -1
  273. package/dist/{utils-CEBktlBG.d.mts → utils-4wVRcpOw.d.mts} +1 -1
  274. package/dist/version.cjs +2 -2
  275. package/dist/version.mjs +1 -1
  276. package/dist/vite.cjs +33 -30
  277. package/dist/vite.d.mts +1 -1
  278. package/dist/vite.d.ts +1 -1
  279. package/dist/vite.mjs +32 -29
  280. package/package.json +2 -2
  281. package/dist/chunk-22GUSVNJ.cjs +0 -351
  282. package/dist/chunk-SWN467MP.cjs +0 -18
  283. package/dist/chunk-XGC343EY.cjs +0 -443
  284. package/dist/chunk-ZSH2Y4LN.mjs +0 -351
  285. /package/dist/{chunk-SUIBNSNO.cjs → chunk-SJNMVDDF.cjs} +0 -0
  286. /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-TOVMYGYW.mjs";
20
+ } from "./chunk-F2SE2VDO.mjs";
21
21
  import {
22
22
  resolveFarmNavigationURL
23
- } from "./chunk-5HGR3W6O.mjs";
23
+ } from "./chunk-5SJWVY6R.mjs";
24
24
  import {
25
25
  getFarmClientDataCache
26
26
  } from "./chunk-XNPDONUH.mjs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveFarmNavigationURL
3
- } from "./chunk-5HGR3W6O.mjs";
3
+ } from "./chunk-5SJWVY6R.mjs";
4
4
  import {
5
5
  getActiveFarmI18nSnapshot
6
6
  } from "./chunk-C4NCTZLM.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 _chunkSWN467MPcjs = require('./chunk-SWN467MP.cjs');
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 = _chunkSWN467MPcjs.resolveFarmNavigationURL.call(void 0, href, window.location.href);
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 _chunk5OVTOKGHcjs = require('./chunk-5OVTOKGH.cjs');
20
+ var _chunkFFFW3OQ7cjs = require('./chunk-FFFW3OQ7.cjs');
21
21
 
22
22
 
23
- var _chunkSWN467MPcjs = require('./chunk-SWN467MP.cjs');
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 = _chunk5OVTOKGHcjs.localizeActiveFarmHref.call(void 0, baseHref, locale);
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 (_chunk5OVTOKGHcjs.isFarmLocaleChangeHref.call(void 0, localizedHref)) {
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 = _chunkSWN467MPcjs.resolveFarmNavigationURL.call(void 0, href, window.location.href);
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 _chunkVHJGDMCGcjs = require('./chunk-VHJGDMCG.cjs');
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 _chunkWPYFSQKKcjs = require('./chunk-WPYFSQKK.cjs');
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 _chunk5ZSWG4UXcjs = require('./chunk-5ZSWG4UX.cjs');
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 _chunkVHJGDMCGcjs.resolvePluginRoutes.call(void 0, plugins, { api })) {
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 = _chunkWPYFSQKKcjs.resolveFarmAPICanonicalPathname.call(void 0, pathname, serverBasePath);
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 = _chunkWPYFSQKKcjs.resolveFarmAPICanonicalPathname.call(void 0, pathname, serverBasePath);
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 _chunk5ZSWG4UXcjs._runWithCurrentRequest.call(void 0,
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 (_chunkVHJGDMCGcjs.isEndpointFailure.call(void 0, error)) {
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
- let key;
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 = resolveMatcherParams(entry.matcher, pathname);
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 = resolveMatcherParams(entry.matcher, pathname);
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-YMUE7L3D.mjs";
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-I6XDAKWQ.mjs";
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', _3 => _3.cookie, 'optionalAccess', _4 => _4.name, 'optionalAccess', _5 => _5.trim, 'call', _6 => _6()]) || DEFAULT_FARM_I18N_COOKIE,
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', _7 => _7.cookie, 'optionalAccess', _8 => _8.maxAge]),
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', _9 => _9.cookie, 'optionalAccess', _10 => _10.path])),
86
+ path: normalizeCookiePath(_optionalChain([input, 'access', _11 => _11.cookie, 'optionalAccess', _12 => _12.path])),
84
87
  sameSite,
85
- secure: _nullishCoalesce(_optionalChain([input, 'access', _11 => _11.cookie, 'optionalAccess', _12 => _12.secure]), () => ( options.mode === "production"))
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
  };