theokit 0.43.7 → 0.44.3

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 (396) hide show
  1. package/dist/{actions-virtual-module-LD3YKWIX.js → actions-virtual-module-67K4POQ2.js} +20 -20
  2. package/dist/actions-virtual-module-67K4POQ2.js.map +1 -0
  3. package/dist/{actions-virtual-module-N7GKUS3D.js → actions-virtual-module-IK2SDIZ3.js} +9 -8
  4. package/dist/actions-virtual-module-IK2SDIZ3.js.map +1 -0
  5. package/dist/adapters/web-shim.js +1 -1
  6. package/dist/adapters/web-shim.js.map +1 -1
  7. package/dist/adapters/ws-shim.js +1 -1
  8. package/dist/adapters/ws-shim.js.map +1 -1
  9. package/dist/{add-W6FNTAFS.js → add-3VLFUPF4.js} +1 -1
  10. package/dist/add-3VLFUPF4.js.map +1 -0
  11. package/dist/{agent-U35G3WNE.js → agent-OCCL5RUY.js} +5 -5
  12. package/dist/{agents-typed-client-CHMVW7MK.js → agents-typed-client-TNHCUU7Q.js} +2 -2
  13. package/dist/agents-typed-client-TNHCUU7Q.js.map +1 -0
  14. package/dist/{agents-typed-client-NJ73Z6XY.js → agents-typed-client-X56CQ6FX.js} +1 -1
  15. package/dist/agents-typed-client-X56CQ6FX.js.map +1 -0
  16. package/dist/{app-typed-client-6YZRDAPY.js → app-typed-client-4OH3JREB.js} +51 -12
  17. package/dist/app-typed-client-4OH3JREB.js.map +1 -0
  18. package/dist/{app-typed-client-V77SVU2O.js → app-typed-client-N5WUE2CP.js} +62 -24
  19. package/dist/app-typed-client-N5WUE2CP.js.map +1 -0
  20. package/dist/{aws-lambda-7GSCNLPY.js → aws-lambda-473QCOL6.js} +3 -3
  21. package/dist/{body-parser-web-MUWBKZ3F.js → body-parser-web-4Z2QTPDU.js} +2 -2
  22. package/dist/body-parser-web-4Z2QTPDU.js.map +1 -0
  23. package/dist/{body-parser-web-FV5HWCY3.js → body-parser-web-TIOTXPDW.js} +1 -1
  24. package/dist/body-parser-web-TIOTXPDW.js.map +1 -0
  25. package/dist/boot/index.js +4 -4
  26. package/dist/boot/index.js.map +1 -1
  27. package/dist/{broadcast-4SX7R5XE.js → broadcast-H64DJRBE.js} +3 -3
  28. package/dist/broadcast-H64DJRBE.js.map +1 -0
  29. package/dist/{build-BYLQZJT2.js → build-25RSFP22.js} +20 -11
  30. package/dist/build-25RSFP22.js.map +1 -0
  31. package/dist/{build-request-body-preview-EOP2Y4F3.js → build-request-body-preview-CKWWBF2M.js} +2 -2
  32. package/dist/build-request-body-preview-CKWWBF2M.js.map +1 -0
  33. package/dist/{build-request-body-preview-QMWD2IXK.js → build-request-body-preview-XPZ2GYMG.js} +1 -1
  34. package/dist/build-request-body-preview-XPZ2GYMG.js.map +1 -0
  35. package/dist/{bun-KP2KES6S.js → bun-OQUCL3XW.js} +3 -3
  36. package/dist/{check-PD2FTKMM.js → check-45NKUVSQ.js} +1 -1
  37. package/dist/check-45NKUVSQ.js.map +1 -0
  38. package/dist/{chunk-FRUEDJFX.js → chunk-226KMIGZ.js} +3 -3
  39. package/dist/{chunk-FRUEDJFX.js.map → chunk-226KMIGZ.js.map} +1 -1
  40. package/dist/{chunk-U3NTEK46.js → chunk-2ADKT37V.js} +5 -5
  41. package/dist/chunk-2ADKT37V.js.map +1 -0
  42. package/dist/{chunk-QWBXUZAX.js → chunk-37ZO643S.js} +9 -9
  43. package/dist/chunk-37ZO643S.js.map +1 -0
  44. package/dist/{chunk-ESC54TAK.js → chunk-3DGIANAN.js} +1 -1
  45. package/dist/chunk-3DGIANAN.js.map +1 -0
  46. package/dist/{chunk-GY5Q27BJ.js → chunk-47FFT43U.js} +1 -1
  47. package/dist/chunk-47FFT43U.js.map +1 -0
  48. package/dist/{chunk-JAIKGP3Q.js → chunk-47VNWTL4.js} +1 -1
  49. package/dist/chunk-47VNWTL4.js.map +1 -0
  50. package/dist/{chunk-ZJQ4O76G.js → chunk-4FWBKX6G.js} +1 -1
  51. package/dist/chunk-4FWBKX6G.js.map +1 -0
  52. package/dist/{chunk-NM4WF3XD.js → chunk-4PBJ266F.js} +1 -1
  53. package/dist/chunk-4PBJ266F.js.map +1 -0
  54. package/dist/{chunk-7MQOHNHE.js → chunk-52PDWL5S.js} +1 -1
  55. package/dist/chunk-52PDWL5S.js.map +1 -0
  56. package/dist/{chunk-JQJN6LFK.js → chunk-62EU2BVZ.js} +2 -2
  57. package/dist/chunk-62EU2BVZ.js.map +1 -0
  58. package/dist/{chunk-SJIRP73B.js → chunk-646CA6RV.js} +2 -2
  59. package/dist/chunk-646CA6RV.js.map +1 -0
  60. package/dist/{chunk-ASDXVRJD.js → chunk-6KDXP472.js} +4 -4
  61. package/dist/chunk-6KDXP472.js.map +1 -0
  62. package/dist/chunk-6LNIGF5P.js +46 -0
  63. package/dist/chunk-6LNIGF5P.js.map +1 -0
  64. package/dist/chunk-7IHWXDJJ.js +1 -0
  65. package/dist/chunk-7IHWXDJJ.js.map +1 -0
  66. package/dist/{chunk-JQSKBMXP.js → chunk-7LVM22VG.js} +1 -1
  67. package/dist/chunk-7LVM22VG.js.map +1 -0
  68. package/dist/{chunk-UVXB2ER7.js → chunk-7SABX4DJ.js} +1 -1
  69. package/dist/chunk-7SABX4DJ.js.map +1 -0
  70. package/dist/{chunk-P37RZRFV.js → chunk-A7JBF5FO.js} +1 -1
  71. package/dist/chunk-A7JBF5FO.js.map +1 -0
  72. package/dist/{chunk-X32XEJXR.js → chunk-ACKBVBUI.js} +1 -1
  73. package/dist/chunk-ACKBVBUI.js.map +1 -0
  74. package/dist/{chunk-UUFYP2UM.js → chunk-AM3QABW5.js} +3 -3
  75. package/dist/chunk-AM3QABW5.js.map +1 -0
  76. package/dist/{chunk-FH3DYBAN.js → chunk-ANS4ELRH.js} +1 -1
  77. package/dist/chunk-ANS4ELRH.js.map +1 -0
  78. package/dist/{chunk-UD3LFGDL.js → chunk-AVQU5CQF.js} +1 -1
  79. package/dist/chunk-AVQU5CQF.js.map +1 -0
  80. package/dist/{chunk-AFVTEAES.js → chunk-B7ONQ4QJ.js} +2 -2
  81. package/dist/{chunk-WSJKACWB.js → chunk-C34PMLSN.js} +1 -1
  82. package/dist/chunk-C34PMLSN.js.map +1 -0
  83. package/dist/{chunk-FEDSPOY6.js → chunk-DSOBIXXR.js} +6 -6
  84. package/dist/chunk-DSOBIXXR.js.map +1 -0
  85. package/dist/{chunk-AXVFVMLM.js → chunk-EIRQM55C.js} +12 -7
  86. package/dist/chunk-EIRQM55C.js.map +1 -0
  87. package/dist/{chunk-ZEGYW52B.js → chunk-FB2HBNIC.js} +1 -1
  88. package/dist/chunk-FB2HBNIC.js.map +1 -0
  89. package/dist/chunk-FXZZS7YW.js +605 -0
  90. package/dist/chunk-FXZZS7YW.js.map +1 -0
  91. package/dist/{chunk-5AVPWHUE.js → chunk-FZG3JYB3.js} +14 -50
  92. package/dist/chunk-FZG3JYB3.js.map +1 -0
  93. package/dist/{chunk-V3LJN2GS.js → chunk-GAPBPRPP.js} +1 -1
  94. package/dist/chunk-GAPBPRPP.js.map +1 -0
  95. package/dist/chunk-GUBN5UTT.js +1 -0
  96. package/dist/chunk-GUBN5UTT.js.map +1 -0
  97. package/dist/{chunk-GSO77FSM.js → chunk-HEK4SET7.js} +45 -47
  98. package/dist/chunk-HEK4SET7.js.map +1 -0
  99. package/dist/{chunk-SPJNVWOK.js → chunk-HRCNHWLP.js} +7 -110
  100. package/dist/chunk-HRCNHWLP.js.map +1 -0
  101. package/dist/{chunk-C3ZZ56YZ.js → chunk-JA2ZAT5Q.js} +1 -1
  102. package/dist/chunk-JA2ZAT5Q.js.map +1 -0
  103. package/dist/{chunk-KI7OWQUX.js → chunk-KBGGQK4I.js} +87 -27
  104. package/dist/chunk-KBGGQK4I.js.map +1 -0
  105. package/dist/{chunk-WFNLNIJX.js → chunk-KD5G3YXI.js} +4 -4
  106. package/dist/chunk-KD5G3YXI.js.map +1 -0
  107. package/dist/{chunk-VMEWD57H.js → chunk-KPKLIUUL.js} +1 -1
  108. package/dist/chunk-KPKLIUUL.js.map +1 -0
  109. package/dist/{chunk-IHJZPQEF.js → chunk-L4Y6RJ4E.js} +4 -4
  110. package/dist/chunk-L4Y6RJ4E.js.map +1 -0
  111. package/dist/{chunk-GUUWDMR2.js → chunk-L5Z6IY5U.js} +5 -5
  112. package/dist/chunk-L5Z6IY5U.js.map +1 -0
  113. package/dist/{chunk-L4GCEMNW.js → chunk-LNVMHQ2Z.js} +2 -2
  114. package/dist/{chunk-JBCHWRKF.js → chunk-MTEWLGVY.js} +2 -2
  115. package/dist/chunk-MTEWLGVY.js.map +1 -0
  116. package/dist/{chunk-5PU65T5W.js → chunk-MWP4YXWJ.js} +1 -1
  117. package/dist/chunk-MWP4YXWJ.js.map +1 -0
  118. package/dist/{chunk-IPC5UREF.js → chunk-NGEBYCOZ.js} +70 -46
  119. package/dist/chunk-NGEBYCOZ.js.map +1 -0
  120. package/dist/{chunk-5QW7IQQU.js → chunk-NTDN54XO.js} +1 -1
  121. package/dist/chunk-NTDN54XO.js.map +1 -0
  122. package/dist/{chunk-7BIM27LV.js → chunk-OIGJOYX6.js} +1 -1
  123. package/dist/chunk-OIGJOYX6.js.map +1 -0
  124. package/dist/{chunk-TSLSIRBR.js → chunk-OLGPYOLO.js} +2 -2
  125. package/dist/chunk-OLGPYOLO.js.map +1 -0
  126. package/dist/{chunk-NQRNDPZJ.js → chunk-OXCALO3W.js} +3 -3
  127. package/dist/{chunk-UNLG36Z5.js → chunk-Q5OT7LZG.js} +19 -499
  128. package/dist/chunk-Q5OT7LZG.js.map +1 -0
  129. package/dist/{chunk-45C3WUQ7.js → chunk-QPVXGC7O.js} +1 -1
  130. package/dist/chunk-QPVXGC7O.js.map +1 -0
  131. package/dist/{chunk-6NEXVBPY.js → chunk-RWNSW4FM.js} +1 -1
  132. package/dist/chunk-RWNSW4FM.js.map +1 -0
  133. package/dist/{chunk-E25FBYJP.js → chunk-SAFGDIPQ.js} +1 -1
  134. package/dist/chunk-SAFGDIPQ.js.map +1 -0
  135. package/dist/{chunk-RMU7EBRO.js → chunk-SEELKQUM.js} +2 -2
  136. package/dist/chunk-SEELKQUM.js.map +1 -0
  137. package/dist/{chunk-FOZIR3TG.js → chunk-SMP2T335.js} +2 -2
  138. package/dist/{chunk-D7ZH7DTG.js → chunk-SSYDEKWF.js} +1 -1
  139. package/dist/chunk-SSYDEKWF.js.map +1 -0
  140. package/dist/{chunk-2ZX4J4SX.js → chunk-SZU6BOMV.js} +114 -90
  141. package/dist/chunk-SZU6BOMV.js.map +1 -0
  142. package/dist/{chunk-M6NMS5LR.js → chunk-TDNNBLGW.js} +1 -1
  143. package/dist/chunk-TDNNBLGW.js.map +1 -0
  144. package/dist/{chunk-X2VVCJ4V.js → chunk-U267AOWS.js} +1 -1
  145. package/dist/chunk-U267AOWS.js.map +1 -0
  146. package/dist/{chunk-GW5H4KB4.js → chunk-U3H53IIN.js} +6 -6
  147. package/dist/chunk-U3H53IIN.js.map +1 -0
  148. package/dist/{chunk-OPLICDUB.js → chunk-UW2TEAGR.js} +1 -1
  149. package/dist/chunk-UW2TEAGR.js.map +1 -0
  150. package/dist/{chunk-IAJ2JVEH.js → chunk-VSLTKX5L.js} +1 -1
  151. package/dist/chunk-VSLTKX5L.js.map +1 -0
  152. package/dist/{chunk-YB5DJJ4U.js → chunk-VZTYCAO6.js} +1 -1
  153. package/dist/chunk-VZTYCAO6.js.map +1 -0
  154. package/dist/chunk-WDGYCBNI.js +65 -0
  155. package/dist/chunk-WDGYCBNI.js.map +1 -0
  156. package/dist/chunk-WPJOTQA5.js +1 -0
  157. package/dist/chunk-WPJOTQA5.js.map +1 -0
  158. package/dist/{chunk-DGUM43GV.js → chunk-XTHN6JBX.js} +1 -1
  159. package/dist/chunk-XTHN6JBX.js.map +1 -0
  160. package/dist/{chunk-HZ6USUHC.js → chunk-YOIVCCZT.js} +1 -1
  161. package/dist/chunk-YOIVCCZT.js.map +1 -0
  162. package/dist/{chunk-UO7WS32S.js → chunk-ZC2UESE4.js} +7 -5
  163. package/dist/chunk-ZC2UESE4.js.map +1 -0
  164. package/dist/cli/index.js +15 -15
  165. package/dist/client/core.d.ts +4 -258
  166. package/dist/client/core.js +13 -9
  167. package/dist/client/core.js.map +1 -1
  168. package/dist/client/index.d.ts +8 -97
  169. package/dist/client/index.js +39 -92
  170. package/dist/client/index.js.map +1 -1
  171. package/dist/{cloudflare-C6E5SPAE.js → cloudflare-4YT5CK3P.js} +3 -3
  172. package/dist/{controller-swc-transform-XV3ETSE3.js → controller-swc-transform-LUJ4VAZJ.js} +1 -1
  173. package/dist/controller-swc-transform-LUJ4VAZJ.js.map +1 -0
  174. package/dist/{controller-swc-transform-URELVCBM.js → controller-swc-transform-T7ZTD55V.js} +2 -2
  175. package/dist/controller-swc-transform-T7ZTD55V.js.map +1 -0
  176. package/dist/{cookies-MJKMGJ7N.js → cookies-SOXUQJXG.js} +3 -3
  177. package/dist/cookies-SOXUQJXG.js.map +1 -0
  178. package/dist/{db-3UNAMSFK.js → db-IVVCQE5Z.js} +1 -2
  179. package/dist/db-IVVCQE5Z.js.map +1 -0
  180. package/dist/{deno-deploy-RFZN56X4.js → deno-deploy-YYN6BNLF.js} +3 -3
  181. package/dist/{dev-PS2NGT6I.js → dev-V6UBM2OL.js} +14 -13
  182. package/dist/{dev-PS2NGT6I.js.map → dev-V6UBM2OL.js.map} +1 -1
  183. package/dist/{dev-emit-2DL3MCLM.js → dev-emit-F54Y5TIU.js} +5 -5
  184. package/dist/dev-emit-F54Y5TIU.js.map +1 -0
  185. package/dist/{dev-emit-XVTJXZGA.js → dev-emit-J7V6GWSK.js} +6 -6
  186. package/dist/devtools/entry.js +61 -25
  187. package/dist/devtools/entry.js.map +1 -1
  188. package/dist/{dispatcher-EJHL6JMJ.js → dispatcher-KMZBGMM5.js} +1 -1
  189. package/dist/dispatcher-KMZBGMM5.js.map +1 -0
  190. package/dist/dispatcher-MXKF3CRH.js +8 -0
  191. package/dist/dispatcher-MXKF3CRH.js.map +1 -0
  192. package/dist/{generate-5X4LG77M.js → generate-GXWPUVS7.js} +4 -5
  193. package/dist/generate-GXWPUVS7.js.map +1 -0
  194. package/dist/index.js +25 -25
  195. package/dist/index.js.map +1 -1
  196. package/dist/{info-2OOXFTJX.js → info-ICDTPJDC.js} +4 -4
  197. package/dist/info-ICDTPJDC.js.map +1 -0
  198. package/dist/{internal-api-FBFV265J.js → internal-api-ALXVBL56.js} +14 -14
  199. package/dist/{internal-api-LFW7R65K.js → internal-api-S7WK2WCY.js} +20 -22
  200. package/dist/internal-api-S7WK2WCY.js.map +1 -0
  201. package/dist/{load-config-3EAQTXPH.js → load-config-ICCNMO74.js} +4 -4
  202. package/dist/{mcp-ML4QK5ON.js → mcp-4JFODA5U.js} +6 -6
  203. package/dist/mcp-4JFODA5U.js.map +1 -0
  204. package/dist/{netlify-PMLHVPN4.js → netlify-2WZUQYI3.js} +3 -3
  205. package/dist/node-CMAYKDCM.js +10 -0
  206. package/dist/{openapi-2HVGJMSN.js → openapi-NIYA2VBG.js} +9 -9
  207. package/dist/openapi-NIYA2VBG.js.map +1 -0
  208. package/dist/react-query/index.js +2 -2
  209. package/dist/react-query/index.js.map +1 -1
  210. package/dist/registry-72YH7ZJM.js +23 -0
  211. package/dist/registry-72YH7ZJM.js.map +1 -0
  212. package/dist/{router-TLEAOFID.js → router-6MAACS25.js} +1 -2
  213. package/dist/router-6MAACS25.js.map +1 -0
  214. package/dist/{routes-XNS3UM3B.js → routes-2RD4S5PZ.js} +6 -6
  215. package/dist/schema-S553QCAU.js +22 -0
  216. package/dist/server/agent/index.d.ts +3 -72
  217. package/dist/server/agent/index.js +4 -4
  218. package/dist/server/agent/index.js.map +1 -1
  219. package/dist/server/auth/index.js +4 -4
  220. package/dist/server/auth/index.js.map +1 -1
  221. package/dist/server/cost/index.js +2 -2
  222. package/dist/server/cost/index.js.map +1 -1
  223. package/dist/server/cron/index.js +6 -6
  224. package/dist/server/cron/index.js.map +1 -1
  225. package/dist/server/define/index.js +4 -4
  226. package/dist/server/define/index.js.map +1 -1
  227. package/dist/server/http/index.js +11 -11
  228. package/dist/server/http/index.js.map +1 -1
  229. package/dist/server/index.d.ts +2 -2
  230. package/dist/server/index.js +41 -41
  231. package/dist/server/index.js.map +1 -1
  232. package/dist/server/jobs/index.js +7 -7
  233. package/dist/server/jobs/index.js.map +1 -1
  234. package/dist/server/observability/index.d.ts +9 -39
  235. package/dist/server/observability/index.js +5 -5
  236. package/dist/server/observability/index.js.map +1 -1
  237. package/dist/server/plugins/index.js +3 -3
  238. package/dist/server/plugins/index.js.map +1 -1
  239. package/dist/server/rate-limit/index.js +4 -4
  240. package/dist/server/rate-limit/index.js.map +1 -1
  241. package/dist/server/realtime/index.js +2 -2
  242. package/dist/server/realtime/index.js.map +1 -1
  243. package/dist/server/scan/index.js +7 -7
  244. package/dist/server/scan/index.js.map +1 -1
  245. package/dist/server/security/index.js +5 -5
  246. package/dist/server/security/index.js.map +1 -1
  247. package/dist/server/storage/index.js +2 -2
  248. package/dist/server/storage/index.js.map +1 -1
  249. package/dist/server/webhook/index.js +3 -3
  250. package/dist/server/webhook/index.js.map +1 -1
  251. package/dist/server-error-to-envelope-UM7DEVM4.js +8 -0
  252. package/dist/server-error-to-envelope-UM7DEVM4.js.map +1 -0
  253. package/dist/{server-routes-hmr-VZXOP5YT.js → server-routes-hmr-4W5L2MKN.js} +1 -1
  254. package/dist/server-routes-hmr-4W5L2MKN.js.map +1 -0
  255. package/dist/{server-routes-hmr-PBHSKCQJ.js → server-routes-hmr-6CRNSEWF.js} +2 -2
  256. package/dist/server-routes-hmr-6CRNSEWF.js.map +1 -0
  257. package/dist/{services-json-Y3XODNB5.js → services-json-7ZXJ4CIS.js} +1 -1
  258. package/dist/services-json-7ZXJ4CIS.js.map +1 -0
  259. package/dist/{services-typed-client-32KMTTXR.js → services-typed-client-EO4RFNTZ.js} +2 -2
  260. package/dist/services-typed-client-EO4RFNTZ.js.map +1 -0
  261. package/dist/{services-typed-client-IETY2SAK.js → services-typed-client-IXNOPVZA.js} +3 -3
  262. package/dist/services-typed-client-IXNOPVZA.js.map +1 -0
  263. package/dist/{start-YLR2SFHU.js → start-2LNPPG74.js} +40 -16
  264. package/dist/start-2LNPPG74.js.map +1 -0
  265. package/dist/{static-MB2CD5Y3.js → static-25H5K42R.js} +3 -3
  266. package/dist/{static-MB2CD5Y3.js.map → static-25H5K42R.js.map} +1 -1
  267. package/dist/{theo-cloud-DQRP6S6M.js → theo-cloud-JL2KXHIS.js} +2 -2
  268. package/dist/{upgrade-readiness-ACGW44JC.js → upgrade-readiness-77P6VNB4.js} +1 -1
  269. package/dist/upgrade-readiness-77P6VNB4.js.map +1 -0
  270. package/dist/{vercel-J6G7ZHYQ.js → vercel-FP3C6LN6.js} +3 -3
  271. package/dist/vite-plugin/index.js +25 -25
  272. package/dist/vite-plugin/index.js.map +1 -1
  273. package/dist/{vite-plugin-6VVU6PPC.js → vite-plugin-X6YO3OUH.js} +14 -13
  274. package/package.json +9 -8
  275. package/dist/actions-virtual-module-LD3YKWIX.js.map +0 -1
  276. package/dist/actions-virtual-module-N7GKUS3D.js.map +0 -1
  277. package/dist/add-W6FNTAFS.js.map +0 -1
  278. package/dist/agents-typed-client-CHMVW7MK.js.map +0 -1
  279. package/dist/agents-typed-client-NJ73Z6XY.js.map +0 -1
  280. package/dist/app-typed-client-6YZRDAPY.js.map +0 -1
  281. package/dist/app-typed-client-V77SVU2O.js.map +0 -1
  282. package/dist/body-parser-web-FV5HWCY3.js.map +0 -1
  283. package/dist/body-parser-web-MUWBKZ3F.js.map +0 -1
  284. package/dist/build-BYLQZJT2.js.map +0 -1
  285. package/dist/build-request-body-preview-EOP2Y4F3.js.map +0 -1
  286. package/dist/build-request-body-preview-QMWD2IXK.js.map +0 -1
  287. package/dist/check-PD2FTKMM.js.map +0 -1
  288. package/dist/chunk-2ZX4J4SX.js.map +0 -1
  289. package/dist/chunk-45C3WUQ7.js.map +0 -1
  290. package/dist/chunk-5AVPWHUE.js.map +0 -1
  291. package/dist/chunk-5PU65T5W.js.map +0 -1
  292. package/dist/chunk-5QW7IQQU.js.map +0 -1
  293. package/dist/chunk-6NEXVBPY.js.map +0 -1
  294. package/dist/chunk-7BIM27LV.js.map +0 -1
  295. package/dist/chunk-7MQOHNHE.js.map +0 -1
  296. package/dist/chunk-ASDXVRJD.js.map +0 -1
  297. package/dist/chunk-AXVFVMLM.js.map +0 -1
  298. package/dist/chunk-C3ZZ56YZ.js.map +0 -1
  299. package/dist/chunk-D7ZH7DTG.js.map +0 -1
  300. package/dist/chunk-E25FBYJP.js.map +0 -1
  301. package/dist/chunk-E3JH6YUM.js +0 -1
  302. package/dist/chunk-ESC54TAK.js.map +0 -1
  303. package/dist/chunk-FEDSPOY6.js.map +0 -1
  304. package/dist/chunk-FH3DYBAN.js.map +0 -1
  305. package/dist/chunk-GSO77FSM.js.map +0 -1
  306. package/dist/chunk-GUUWDMR2.js.map +0 -1
  307. package/dist/chunk-GW5H4KB4.js.map +0 -1
  308. package/dist/chunk-GY5Q27BJ.js.map +0 -1
  309. package/dist/chunk-HZ6USUHC.js.map +0 -1
  310. package/dist/chunk-IAJ2JVEH.js.map +0 -1
  311. package/dist/chunk-IHJZPQEF.js.map +0 -1
  312. package/dist/chunk-IPC5UREF.js.map +0 -1
  313. package/dist/chunk-JAIKGP3Q.js.map +0 -1
  314. package/dist/chunk-JBCHWRKF.js.map +0 -1
  315. package/dist/chunk-JHEAWR3L.js +0 -1
  316. package/dist/chunk-JQJN6LFK.js.map +0 -1
  317. package/dist/chunk-JQSKBMXP.js.map +0 -1
  318. package/dist/chunk-KI7OWQUX.js.map +0 -1
  319. package/dist/chunk-KPRJS3II.js +0 -505
  320. package/dist/chunk-KPRJS3II.js.map +0 -1
  321. package/dist/chunk-M6NMS5LR.js.map +0 -1
  322. package/dist/chunk-NM4WF3XD.js.map +0 -1
  323. package/dist/chunk-NPMCKOX4.js +0 -1
  324. package/dist/chunk-OPLICDUB.js.map +0 -1
  325. package/dist/chunk-P37RZRFV.js.map +0 -1
  326. package/dist/chunk-QWBXUZAX.js.map +0 -1
  327. package/dist/chunk-RMU7EBRO.js.map +0 -1
  328. package/dist/chunk-SJIRP73B.js.map +0 -1
  329. package/dist/chunk-SPJNVWOK.js.map +0 -1
  330. package/dist/chunk-TSLSIRBR.js.map +0 -1
  331. package/dist/chunk-U3NTEK46.js.map +0 -1
  332. package/dist/chunk-UD3LFGDL.js.map +0 -1
  333. package/dist/chunk-UNLG36Z5.js.map +0 -1
  334. package/dist/chunk-UO7WS32S.js.map +0 -1
  335. package/dist/chunk-UUFYP2UM.js.map +0 -1
  336. package/dist/chunk-UVXB2ER7.js.map +0 -1
  337. package/dist/chunk-V3LJN2GS.js.map +0 -1
  338. package/dist/chunk-VMEWD57H.js.map +0 -1
  339. package/dist/chunk-WFNLNIJX.js.map +0 -1
  340. package/dist/chunk-WSJKACWB.js.map +0 -1
  341. package/dist/chunk-X2VVCJ4V.js.map +0 -1
  342. package/dist/chunk-X32XEJXR.js.map +0 -1
  343. package/dist/chunk-YB5DJJ4U.js.map +0 -1
  344. package/dist/chunk-ZEGYW52B.js.map +0 -1
  345. package/dist/chunk-ZJQ4O76G.js.map +0 -1
  346. package/dist/controller-swc-transform-URELVCBM.js.map +0 -1
  347. package/dist/controller-swc-transform-XV3ETSE3.js.map +0 -1
  348. package/dist/cookies-MJKMGJ7N.js.map +0 -1
  349. package/dist/db-3UNAMSFK.js.map +0 -1
  350. package/dist/dev-emit-2DL3MCLM.js.map +0 -1
  351. package/dist/dispatcher-63LBXYLE.js +0 -8
  352. package/dist/dispatcher-63LBXYLE.js.map +0 -1
  353. package/dist/dispatcher-EJHL6JMJ.js.map +0 -1
  354. package/dist/generate-5X4LG77M.js.map +0 -1
  355. package/dist/info-2OOXFTJX.js.map +0 -1
  356. package/dist/internal-api-FBFV265J.js.map +0 -1
  357. package/dist/internal-api-LFW7R65K.js.map +0 -1
  358. package/dist/load-config-3EAQTXPH.js.map +0 -1
  359. package/dist/mcp-ML4QK5ON.js.map +0 -1
  360. package/dist/node-BPJ3Z4DT.js +0 -10
  361. package/dist/node-BPJ3Z4DT.js.map +0 -1
  362. package/dist/openapi-2HVGJMSN.js.map +0 -1
  363. package/dist/registry-FKPH7XEL.js +0 -24
  364. package/dist/registry-FKPH7XEL.js.map +0 -1
  365. package/dist/router-TLEAOFID.js.map +0 -1
  366. package/dist/schema-LYOLNHZ7.js +0 -30
  367. package/dist/schema-LYOLNHZ7.js.map +0 -1
  368. package/dist/server-error-to-envelope-EOFUIUNB.js +0 -8
  369. package/dist/server-error-to-envelope-EOFUIUNB.js.map +0 -1
  370. package/dist/server-routes-hmr-PBHSKCQJ.js.map +0 -1
  371. package/dist/server-routes-hmr-VZXOP5YT.js.map +0 -1
  372. package/dist/services-json-Y3XODNB5.js.map +0 -1
  373. package/dist/services-typed-client-32KMTTXR.js.map +0 -1
  374. package/dist/services-typed-client-IETY2SAK.js.map +0 -1
  375. package/dist/start-YLR2SFHU.js.map +0 -1
  376. package/dist/upgrade-readiness-ACGW44JC.js.map +0 -1
  377. package/dist/vite-plugin-6VVU6PPC.js.map +0 -1
  378. /package/dist/{agent-U35G3WNE.js.map → agent-OCCL5RUY.js.map} +0 -0
  379. /package/dist/{aws-lambda-7GSCNLPY.js.map → aws-lambda-473QCOL6.js.map} +0 -0
  380. /package/dist/{bun-KP2KES6S.js.map → bun-OQUCL3XW.js.map} +0 -0
  381. /package/dist/{chunk-AFVTEAES.js.map → chunk-B7ONQ4QJ.js.map} +0 -0
  382. /package/dist/{chunk-L4GCEMNW.js.map → chunk-LNVMHQ2Z.js.map} +0 -0
  383. /package/dist/{chunk-NQRNDPZJ.js.map → chunk-OXCALO3W.js.map} +0 -0
  384. /package/dist/{chunk-FOZIR3TG.js.map → chunk-SMP2T335.js.map} +0 -0
  385. /package/dist/{cloudflare-C6E5SPAE.js.map → cloudflare-4YT5CK3P.js.map} +0 -0
  386. /package/dist/{deno-deploy-RFZN56X4.js.map → deno-deploy-YYN6BNLF.js.map} +0 -0
  387. /package/dist/{dev-emit-XVTJXZGA.js.map → dev-emit-J7V6GWSK.js.map} +0 -0
  388. /package/dist/{broadcast-4SX7R5XE.js.map → internal-api-ALXVBL56.js.map} +0 -0
  389. /package/dist/{chunk-DGUM43GV.js.map → load-config-ICCNMO74.js.map} +0 -0
  390. /package/dist/{netlify-PMLHVPN4.js.map → netlify-2WZUQYI3.js.map} +0 -0
  391. /package/dist/{chunk-E3JH6YUM.js.map → node-CMAYKDCM.js.map} +0 -0
  392. /package/dist/{routes-XNS3UM3B.js.map → routes-2RD4S5PZ.js.map} +0 -0
  393. /package/dist/{chunk-JHEAWR3L.js.map → schema-S553QCAU.js.map} +0 -0
  394. /package/dist/{theo-cloud-DQRP6S6M.js.map → theo-cloud-JL2KXHIS.js.map} +0 -0
  395. /package/dist/{vercel-J6G7ZHYQ.js.map → vercel-FP3C6LN6.js.map} +0 -0
  396. /package/dist/{chunk-NPMCKOX4.js.map → vite-plugin-X6YO3OUH.js.map} +0 -0
@@ -2,385 +2,22 @@
2
2
  import "tsx/esm";
3
3
  import {
4
4
  getApprovalRegistry
5
- } from "./chunk-M6NMS5LR.js";
5
+ } from "./chunk-TDNNBLGW.js";
6
+ import {
7
+ dispatchCsrfWarn,
8
+ enforceCsrf,
9
+ incomingMessageToHandlerRequest,
10
+ parseRequestBody,
11
+ sendError,
12
+ sendJson,
13
+ validateCsrfRequest,
14
+ warnOnce
15
+ } from "./chunk-FXZZS7YW.js";
6
16
  import {
7
17
  TheoError,
8
18
  serverErrorToEnvelope
9
19
  } from "./chunk-HGZL5EOI.js";
10
20
 
11
- // src/server/body-parser.ts
12
- import { basename } from "path";
13
- import Busboy from "busboy";
14
- var METHODS_WITH_BODY = /* @__PURE__ */ new Set(["POST", "PUT", "PATCH"]);
15
- var DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024;
16
- var DEFAULT_MAX_FILES = 10;
17
- var DEFAULT_MAX_FIELD_SIZE = 1 * 1024 * 1024;
18
- var FileTooLargeError = class extends Error {
19
- constructor(message, truncatedFilenames, maxFileSize) {
20
- super(message);
21
- this.truncatedFilenames = truncatedFilenames;
22
- this.maxFileSize = maxFileSize;
23
- this.name = "FileTooLargeError";
24
- }
25
- truncatedFilenames;
26
- maxFileSize;
27
- code = "FILE_TOO_LARGE";
28
- status = 413;
29
- };
30
- function stashBodyPreview(req, body) {
31
- try {
32
- ;
33
- req[DEVTOOLS_BODY_PREVIEW] = body;
34
- } catch {
35
- }
36
- }
37
- function parseJsonBody(req) {
38
- return new Promise((resolve, reject) => {
39
- const chunks = [];
40
- req.on("data", (chunk) => chunks.push(chunk));
41
- req.on("end", () => {
42
- const raw = Buffer.concat(chunks).toString();
43
- if (!raw) {
44
- resolve(void 0);
45
- return;
46
- }
47
- try {
48
- resolve(JSON.parse(raw));
49
- } catch {
50
- reject(new Error("Invalid JSON body"));
51
- }
52
- });
53
- req.on("error", reject);
54
- });
55
- }
56
- function parseMultipartBody(req, contentType, options) {
57
- if (!contentType.includes("boundary=")) {
58
- return Promise.reject(new Error("Missing multipart boundary"));
59
- }
60
- return new Promise((resolve, reject) => {
61
- const fields = {};
62
- const files = [];
63
- const truncatedFilenames = [];
64
- let fileCount = 0;
65
- const bb = Busboy({
66
- headers: req.headers,
67
- limits: {
68
- fileSize: options.maxFileSize,
69
- files: options.maxFiles,
70
- fieldSize: options.maxFieldSize
71
- }
72
- });
73
- bb.on("field", (name, value) => {
74
- fields[name] = value;
75
- });
76
- bb.on(
77
- "file",
78
- (fieldname, stream, info) => {
79
- fileCount++;
80
- if (fileCount > options.maxFiles) {
81
- stream.resume();
82
- return;
83
- }
84
- const safeName = basename(info.filename || "unnamed");
85
- const chunks = [];
86
- let size = 0;
87
- let truncated = false;
88
- stream.on("data", (chunk) => {
89
- size += chunk.length;
90
- if (size > options.maxFileSize) {
91
- truncated = true;
92
- stream.resume();
93
- return;
94
- }
95
- chunks.push(chunk);
96
- });
97
- stream.on("end", () => {
98
- if (truncated) {
99
- truncatedFilenames.push(safeName);
100
- return;
101
- }
102
- const buffer = Buffer.concat(chunks);
103
- files.push({
104
- fieldname,
105
- filename: safeName,
106
- encoding: info.encoding,
107
- mimeType: info.mimeType,
108
- buffer,
109
- size: buffer.length
110
- });
111
- });
112
- }
113
- );
114
- bb.on("filesLimit", () => {
115
- reject(new Error(`Too many files. Maximum: ${options.maxFiles}`));
116
- });
117
- bb.on("error", (err) => {
118
- reject(err);
119
- });
120
- bb.on("close", () => {
121
- if (truncatedFilenames.length > 0) {
122
- reject(
123
- new FileTooLargeError(
124
- `File too large (max ${options.maxFileSize} bytes): ${truncatedFilenames.join(", ")}`,
125
- truncatedFilenames,
126
- options.maxFileSize
127
- )
128
- );
129
- return;
130
- }
131
- resolve({ fields, files });
132
- });
133
- req.pipe(bb);
134
- });
135
- }
136
- var DEVTOOLS_BODY_PREVIEW = /* @__PURE__ */ Symbol("theo:devtools:bodyPreview");
137
- async function parseRequestBody(req, options) {
138
- const method = req.method?.toUpperCase() ?? "GET";
139
- if (!METHODS_WITH_BODY.has(method)) {
140
- return { fields: {}, files: [], json: void 0 };
141
- }
142
- const contentType = req.headers["content-type"] ?? "";
143
- if (contentType.includes("application/json")) {
144
- const json = await parseJsonBody(req);
145
- stashBodyPreview(req, json);
146
- return { fields: {}, files: [], json };
147
- }
148
- if (contentType.includes("multipart/form-data")) {
149
- const limits = {
150
- maxFileSize: options?.maxFileSize ?? DEFAULT_MAX_FILE_SIZE,
151
- maxFiles: options?.maxFiles ?? DEFAULT_MAX_FILES,
152
- maxFieldSize: options?.maxFieldSize ?? DEFAULT_MAX_FIELD_SIZE
153
- };
154
- const { fields, files } = await parseMultipartBody(req, contentType, limits);
155
- stashBodyPreview(req, {
156
- fields,
157
- files: files.map((f) => ({
158
- fieldname: f.fieldname,
159
- filename: f.filename,
160
- mimeType: f.mimeType,
161
- size: f.size
162
- }))
163
- });
164
- return { fields, files };
165
- }
166
- if (!contentType) {
167
- return { fields: {}, files: [] };
168
- }
169
- throw new Error(`Unsupported Content-Type: ${contentType}`);
170
- }
171
-
172
- // src/server/observability/request-log.ts
173
- var defaultLoggerFn = (log) => {
174
- console.log(JSON.stringify(log));
175
- };
176
- function logRequest(info, customLogger, req) {
177
- const log = {
178
- level: "info",
179
- ...info,
180
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
181
- };
182
- const logger = customLogger ?? defaultLoggerFn;
183
- logger(log);
184
- broadcastRequestToDevtools(info, req);
185
- }
186
- function randomRequestId() {
187
- return `req-${String(Date.now())}-${Math.random().toString(36).slice(2, 8)}`;
188
- }
189
- function broadcastToDevtoolsCore(info, headers, stashedBody) {
190
- void Promise.all([
191
- import("./broadcast-LUMOJIJT.js"),
192
- import("./build-request-body-preview-QMWD2IXK.js")
193
- ]).then(([{ broadcastRequest }, { buildRequestBodyPreview }]) => {
194
- const bodyInfo = buildRequestBodyPreview(stashedBody);
195
- broadcastRequest({
196
- id: randomRequestId(),
197
- traceId: info.requestId,
198
- method: info.method,
199
- path: info.url,
200
- status: info.status,
201
- durationMs: info.duration,
202
- startedAt: Date.now() - info.duration,
203
- ...headers ? { headers } : {},
204
- ...bodyInfo ? {
205
- bodyPreview: bodyInfo.preview,
206
- bodyLength: bodyInfo.length,
207
- bodyTruncated: bodyInfo.truncated
208
- } : {}
209
- });
210
- }).catch(() => {
211
- });
212
- }
213
- function broadcastRequestToDevtools(info, req) {
214
- const headers = req?.headers ? Object.fromEntries(
215
- Object.entries(req.headers).map(([k, v]) => [
216
- k,
217
- Array.isArray(v) ? v.join(", ") : v ?? ""
218
- ])
219
- ) : void 0;
220
- const stashedBody = req ? req[DEVTOOLS_BODY_PREVIEW] : void 0;
221
- broadcastToDevtoolsCore(info, headers, stashedBody);
222
- }
223
-
224
- // src/server/observability/logger.ts
225
- var _warnOnceSeen = /* @__PURE__ */ new Set();
226
- var MAX_SEEN = 1024;
227
- function warnOnce(key, payload) {
228
- if (_warnOnceSeen.has(key)) return;
229
- if (_warnOnceSeen.size >= MAX_SEEN) {
230
- const oldest = _warnOnceSeen.values().next().value;
231
- if (oldest !== void 0) _warnOnceSeen.delete(oldest);
232
- }
233
- _warnOnceSeen.add(key);
234
- let line;
235
- try {
236
- line = JSON.stringify({ ...payload, warnOnce: true });
237
- } catch {
238
- line = `[warnOnce] ${key} \u2014 (payload could not be serialized)`;
239
- }
240
- console.warn(line);
241
- broadcastWarnOnceToDevtools(key, payload);
242
- }
243
- function payloadField(payload, key, fallback = "") {
244
- const value = payload[key];
245
- if (typeof value === "string") return value;
246
- if (typeof value === "number" || typeof value === "boolean") return String(value);
247
- return fallback;
248
- }
249
- function randomDevtoolsId() {
250
- return `warn-${String(Date.now())}-${Math.random().toString(36).slice(2, 8)}`;
251
- }
252
- function broadcastWarnOnceToDevtools(key, payload) {
253
- void import("./broadcast-LUMOJIJT.js").then(({ broadcastCsrfWarn, broadcastError }) => {
254
- if (payload.event === "csrf.warn" && typeof payload.code === "string" && typeof payload.docsUrl === "string") {
255
- broadcastCsrfWarn({
256
- event: "csrf.warn",
257
- code: payload.code,
258
- docsUrl: payload.docsUrl,
259
- method: payloadField(payload, "method"),
260
- path: payloadField(payload, "path"),
261
- reason: payloadField(payload, "reason")
262
- });
263
- } else {
264
- broadcastError({
265
- id: randomDevtoolsId(),
266
- type: "console",
267
- message: payloadField(payload, "event", key),
268
- timestamp: Date.now()
269
- });
270
- }
271
- }).catch(() => {
272
- });
273
- }
274
-
275
- // src/server/http/send-response.ts
276
- function sendJson(res, data, status = 200, transformer) {
277
- const body = transformer ? transformer.serialize(data) : JSON.stringify(data);
278
- res.writeHead(status, {
279
- "Content-Type": "application/json",
280
- "Content-Length": Buffer.byteLength(body)
281
- });
282
- res.end(body);
283
- }
284
- function sendError(res, codeOrInput, message, status, issues, requestId, options) {
285
- let code;
286
- if (typeof codeOrInput === "string") {
287
- code = codeOrInput;
288
- message = message ?? "";
289
- status = status ?? 500;
290
- } else {
291
- code = codeOrInput.code;
292
- message = codeOrInput.message;
293
- status = codeOrInput.status;
294
- issues = codeOrInput.issues;
295
- requestId = codeOrInput.requestId;
296
- options = codeOrInput.options;
297
- }
298
- const errorMessage = code === "INTERNAL_ERROR" && process.env.NODE_ENV === "production" ? "Internal server error" : message;
299
- if (code === "INTERNAL_ERROR") {
300
- console.error(`[${requestId ?? "no-id"}] ${message}`);
301
- }
302
- if (status === 404 && options?.custom404Html) {
303
- const body = options.custom404Html;
304
- res.writeHead(404, {
305
- "Content-Type": "text/html; charset=utf-8",
306
- "Content-Length": Buffer.byteLength(body)
307
- });
308
- res.end(body);
309
- return;
310
- }
311
- if (status === 500 && options?.custom500Html) {
312
- const body = options.custom500Html;
313
- res.writeHead(500, {
314
- "Content-Type": "text/html; charset=utf-8",
315
- "Content-Length": Buffer.byteLength(body)
316
- });
317
- res.end(body);
318
- return;
319
- }
320
- sendJson(
321
- res,
322
- {
323
- error: {
324
- code,
325
- message: errorMessage,
326
- ...requestId ? { requestId } : {},
327
- ...issues ? { issues } : {}
328
- }
329
- },
330
- status
331
- );
332
- }
333
-
334
- // src/server/http/node-request.ts
335
- import { Readable } from "stream";
336
- function pickHeaderString(value) {
337
- if (typeof value === "string") return value;
338
- if (Array.isArray(value)) {
339
- for (const v of value) if (typeof v === "string" && v.length > 0) return v;
340
- }
341
- return void 0;
342
- }
343
- function synthesizeAbsoluteUrl(req) {
344
- const host = pickHeaderString(req.headers.host) ?? "localhost";
345
- return `http://${host}${req.url ?? "/"}`;
346
- }
347
- function nodeHeadersToWeb(req) {
348
- const headers = new Headers();
349
- for (const [key, value] of Object.entries(req.headers)) {
350
- if (value === void 0) continue;
351
- if (Array.isArray(value)) {
352
- headers.set(key, value.join(", "));
353
- } else {
354
- headers.set(key, value);
355
- }
356
- }
357
- return headers;
358
- }
359
- function incomingMessageToWebRequest(req) {
360
- const url = synthesizeAbsoluteUrl(req);
361
- const headers = nodeHeadersToWeb(req);
362
- const method = (req.method ?? "GET").toUpperCase();
363
- const hasBody = method !== "GET" && method !== "HEAD";
364
- if (!hasBody) {
365
- return new Request(url, { method, headers });
366
- }
367
- const webStream = Readable.toWeb(req);
368
- return new Request(url, {
369
- method,
370
- headers,
371
- body: webStream,
372
- // EC-2: Node 18+ requires `duplex: 'half'` when body is a stream.
373
- // The `RequestInit` type omits it (Web spec gap); cast accordingly.
374
- ...{ duplex: "half" }
375
- });
376
- }
377
- function incomingMessageToHandlerRequest(req) {
378
- return new Request(synthesizeAbsoluteUrl(req), {
379
- method: (req.method ?? "GET").toUpperCase(),
380
- headers: nodeHeadersToWeb(req)
381
- });
382
- }
383
-
384
21
  // src/core/contracts/auth-error-guard.ts
385
22
  function isAuthRequiredError(err) {
386
23
  if (err == null || typeof err !== "object") return false;
@@ -488,119 +125,6 @@ function createOutboxDispatcher(backend) {
488
125
  };
489
126
  }
490
127
 
491
- // src/server/security/csrf-warn-dispatch.ts
492
- function dispatchCsrfWarn(payload) {
493
- const key = `${payload.event}:${payload.method}:${payload.path ?? ""}`;
494
- warnOnce(key, payload);
495
- }
496
-
497
- // src/server/observability/audit-log.ts
498
- function safeAudit(logger, event) {
499
- if (!logger) return;
500
- try {
501
- const r = logger.log(event);
502
- if (r && typeof r.then === "function") {
503
- r.catch(() => {
504
- });
505
- }
506
- } catch {
507
- }
508
- }
509
-
510
- // src/server/security/csrf.ts
511
- function matchDisallowed(path, patterns) {
512
- for (const p of patterns) {
513
- if (typeof p === "string") {
514
- if (path === p) return true;
515
- } else if (p instanceof RegExp) {
516
- p.lastIndex = 0;
517
- if (p.test(path)) return true;
518
- }
519
- }
520
- return false;
521
- }
522
- var CSRF_WARN_CODE = "CSRF_STRICT_CUTOVER";
523
- var CSRF_WARN_DOCS_URL = "https://theokit.dev/upgrade/csrf-strict-cutover";
524
- function pickHeader(value) {
525
- if (typeof value === "string") return value;
526
- if (Array.isArray(value) && value.length > 0) return value[0];
527
- return "";
528
- }
529
- function isCsrfValidFromHeaders(opts) {
530
- if (opts.csrfActionHeader !== "1") {
531
- return { valid: false, reason: "Missing X-Theo-Action header" };
532
- }
533
- if (opts.origin === null || opts.origin === "") {
534
- return { valid: true };
535
- }
536
- if (opts.host === null || opts.host === "") {
537
- return { valid: true };
538
- }
539
- try {
540
- const originHost = new URL(opts.origin).host;
541
- if (originHost !== opts.host) {
542
- return { valid: false, reason: `Origin ${opts.origin} does not match host ${opts.host}` };
543
- }
544
- } catch {
545
- return { valid: false, reason: `Invalid origin: ${opts.origin}` };
546
- }
547
- return { valid: true };
548
- }
549
- function validateCsrf(req) {
550
- const action = req.headers["x-theo-action"];
551
- const origin = req.headers.origin;
552
- const host = req.headers.host;
553
- return isCsrfValidFromHeaders({
554
- csrfActionHeader: typeof action === "string" ? action : null,
555
- origin: origin !== void 0 ? pickHeader(origin) || null : null,
556
- host: host !== void 0 ? pickHeader(host) || null : null
557
- });
558
- }
559
- function validateCsrfRequest(request) {
560
- return isCsrfValidFromHeaders({
561
- csrfActionHeader: request.headers.get("x-theo-action"),
562
- origin: request.headers.get("origin"),
563
- host: request.headers.get("host")
564
- });
565
- }
566
- function dispatchCsrfWarn2(req, reason, logger, auditLogger, pathFallback = "") {
567
- const payload = {
568
- event: "csrf.warn",
569
- method: req.method ?? "UNKNOWN",
570
- path: logger?.path ?? pathFallback,
571
- reason,
572
- code: CSRF_WARN_CODE,
573
- docsUrl: CSRF_WARN_DOCS_URL
574
- };
575
- logger?.warn(payload);
576
- safeAudit(auditLogger, {
577
- action: "csrf.warn",
578
- actor: { type: "anonymous" },
579
- metadata: { ...payload }
580
- });
581
- }
582
- function enforceCsrf(req, mode, logger, disallowed, auditLogger) {
583
- if (mode === "off") {
584
- return { allow: true };
585
- }
586
- const check = validateCsrf(req);
587
- if (check.valid) {
588
- return { allow: true };
589
- }
590
- if (disallowed?.behavior === "raise") {
591
- const path = logger?.path ?? req.url ?? "";
592
- if (matchDisallowed(path, disallowed.routes)) {
593
- return { allow: false, reason: check.reason };
594
- }
595
- }
596
- if (mode === "warn") {
597
- dispatchCsrfWarn2(req, check.reason, logger, auditLogger);
598
- return { allow: true, reason: check.reason };
599
- }
600
- dispatchCsrfWarn2(req, check.reason, logger, auditLogger);
601
- return { allow: false, reason: check.reason };
602
- }
603
-
604
128
  // src/server/http/execute-stages.ts
605
129
  async function parseQueryAndBody(req, res, requestId) {
606
130
  const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
@@ -1515,7 +1039,7 @@ function writeSerialized(res, serialized) {
1515
1039
  async function emitActionCallTelemetry(name, startedAt, input, outcome) {
1516
1040
  if (!__IS_DEV) return;
1517
1041
  try {
1518
- const mod = await import("./dispatcher-EJHL6JMJ.js");
1042
+ const mod = await import("./dispatcher-KMZBGMM5.js");
1519
1043
  mod.dispatcher.onActionCall({
1520
1044
  // eslint-disable-next-line sonarjs/pseudo-random -- non-secret correlation id
1521
1045
  id: `act-${String(Date.now())}-${Math.random().toString(36).slice(2, 8)}`,
@@ -2272,9 +1796,14 @@ function resolveDiscoveryCwd(compiled, projectRoot) {
2272
1796
  const optedIn = (compiled.settingSources?.length ?? 0) > 0;
2273
1797
  return projectRoot !== void 0 && optedIn ? projectRoot : void 0;
2274
1798
  }
1799
+ function trimTrailingSlashes(value) {
1800
+ let end = value.length;
1801
+ while (end > 0 && value[end - 1] === "/") end -= 1;
1802
+ return value.slice(0, end);
1803
+ }
2275
1804
  function resolveSessionBaseDir(projectRoot) {
2276
1805
  if (projectRoot === void 0) return void 0;
2277
- return `${projectRoot.replace(/\/+$/, "")}/.data/agent-sessions`;
1806
+ return `${trimTrailingSlashes(projectRoot)}/.data/agent-sessions`;
2278
1807
  }
2279
1808
 
2280
1809
  // src/server/scan/module-loader.ts
@@ -2372,15 +1901,6 @@ function generateNonce() {
2372
1901
  }
2373
1902
 
2374
1903
  export {
2375
- logRequest,
2376
- warnOnce,
2377
- dispatchCsrfWarn,
2378
- safeAudit,
2379
- validateCsrfRequest,
2380
- enforceCsrf,
2381
- sendError,
2382
- incomingMessageToWebRequest,
2383
- incomingMessageToHandlerRequest,
2384
1904
  executeRoute,
2385
1905
  executeAction,
2386
1906
  findSuggestion,
@@ -2402,4 +1922,4 @@ export {
2402
1922
  applySecurityHeaders,
2403
1923
  generateNonce
2404
1924
  };
2405
- //# sourceMappingURL=chunk-UNLG36Z5.js.map
1925
+ //# sourceMappingURL=chunk-Q5OT7LZG.js.map