theokit 0.43.12 → 0.45.0

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 (305) hide show
  1. package/dist/{actions-virtual-module-RSFRPJQZ.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-HG66SZ7T.js → actions-virtual-module-LLDDAQWY.js} +4 -3
  4. package/dist/{actions-virtual-module-HG66SZ7T.js.map → actions-virtual-module-LLDDAQWY.js.map} +1 -1
  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/{agent-OXRRKB55.js → agent-WFULT3OB.js} +2 -2
  10. package/dist/{agents-typed-client-ZP7BKJB3.js → agents-typed-client-TNHCUU7Q.js} +2 -2
  11. package/dist/agents-typed-client-TNHCUU7Q.js.map +1 -0
  12. package/dist/{app-typed-client-USLAMN7X.js → app-typed-client-N5WUE2CP.js} +62 -24
  13. package/dist/app-typed-client-N5WUE2CP.js.map +1 -0
  14. package/dist/{app-typed-client-GDF2OMJ2.js → app-typed-client-S3VR4ZA3.js} +47 -8
  15. package/dist/app-typed-client-S3VR4ZA3.js.map +1 -0
  16. package/dist/{body-parser-web-NNEJGX6Y.js → body-parser-web-4Z2QTPDU.js} +2 -2
  17. package/dist/body-parser-web-4Z2QTPDU.js.map +1 -0
  18. package/dist/boot/index.js +4 -4
  19. package/dist/boot/index.js.map +1 -1
  20. package/dist/{broadcast-4SX7R5XE.js → broadcast-H64DJRBE.js} +3 -3
  21. package/dist/broadcast-H64DJRBE.js.map +1 -0
  22. package/dist/{build-MQHIJROR.js → build-YQ6MXOV6.js} +13 -4
  23. package/dist/build-YQ6MXOV6.js.map +1 -0
  24. package/dist/{build-request-body-preview-FVBQ7LCE.js → build-request-body-preview-CKWWBF2M.js} +2 -2
  25. package/dist/build-request-body-preview-CKWWBF2M.js.map +1 -0
  26. package/dist/{chunk-26ECIX74.js → chunk-2ADKT37V.js} +5 -5
  27. package/dist/chunk-2ADKT37V.js.map +1 -0
  28. package/dist/{chunk-JIL74SFK.js → chunk-37ZO643S.js} +9 -9
  29. package/dist/chunk-37ZO643S.js.map +1 -0
  30. package/dist/{chunk-ESC54TAK.js → chunk-3DGIANAN.js} +1 -1
  31. package/dist/chunk-3DGIANAN.js.map +1 -0
  32. package/dist/{chunk-6FK7FKY6.js → chunk-47FFT43U.js} +1 -1
  33. package/dist/chunk-47FFT43U.js.map +1 -0
  34. package/dist/{chunk-ZJQ4O76G.js → chunk-4FWBKX6G.js} +1 -1
  35. package/dist/chunk-4FWBKX6G.js.map +1 -0
  36. package/dist/{chunk-NM4WF3XD.js → chunk-4PBJ266F.js} +1 -1
  37. package/dist/chunk-4PBJ266F.js.map +1 -0
  38. package/dist/{chunk-7MQOHNHE.js → chunk-52PDWL5S.js} +1 -1
  39. package/dist/chunk-52PDWL5S.js.map +1 -0
  40. package/dist/{chunk-575PAX5L.js → chunk-5AMXBU2R.js} +62 -38
  41. package/dist/chunk-5AMXBU2R.js.map +1 -0
  42. package/dist/{chunk-JQJN6LFK.js → chunk-62EU2BVZ.js} +2 -2
  43. package/dist/chunk-62EU2BVZ.js.map +1 -0
  44. package/dist/{chunk-SJIRP73B.js → chunk-646CA6RV.js} +2 -2
  45. package/dist/chunk-646CA6RV.js.map +1 -0
  46. package/dist/{chunk-ASDXVRJD.js → chunk-6KDXP472.js} +4 -4
  47. package/dist/chunk-6KDXP472.js.map +1 -0
  48. package/dist/chunk-6LNIGF5P.js +46 -0
  49. package/dist/chunk-6LNIGF5P.js.map +1 -0
  50. package/dist/{chunk-IE6C4KZX.js → chunk-6VDYQ4I6.js} +11 -496
  51. package/dist/chunk-6VDYQ4I6.js.map +1 -0
  52. package/dist/chunk-7IHWXDJJ.js +1 -0
  53. package/dist/chunk-7IHWXDJJ.js.map +1 -0
  54. package/dist/{chunk-JQSKBMXP.js → chunk-7LVM22VG.js} +1 -1
  55. package/dist/chunk-7LVM22VG.js.map +1 -0
  56. package/dist/{chunk-UVXB2ER7.js → chunk-7SABX4DJ.js} +1 -1
  57. package/dist/chunk-7SABX4DJ.js.map +1 -0
  58. package/dist/{chunk-X32XEJXR.js → chunk-ACKBVBUI.js} +1 -1
  59. package/dist/chunk-ACKBVBUI.js.map +1 -0
  60. package/dist/{chunk-UUFYP2UM.js → chunk-AM3QABW5.js} +3 -3
  61. package/dist/chunk-AM3QABW5.js.map +1 -0
  62. package/dist/{chunk-FH3DYBAN.js → chunk-ANS4ELRH.js} +1 -1
  63. package/dist/chunk-ANS4ELRH.js.map +1 -0
  64. package/dist/{chunk-UD3LFGDL.js → chunk-AVQU5CQF.js} +1 -1
  65. package/dist/chunk-AVQU5CQF.js.map +1 -0
  66. package/dist/{chunk-CJNMJUHE.js → chunk-B7ONQ4QJ.js} +2 -2
  67. package/dist/{chunk-WSJKACWB.js → chunk-C34PMLSN.js} +1 -1
  68. package/dist/chunk-C34PMLSN.js.map +1 -0
  69. package/dist/{chunk-DJFMAWH5.js → chunk-EIRQM55C.js} +6 -5
  70. package/dist/chunk-EIRQM55C.js.map +1 -0
  71. package/dist/{chunk-ZEGYW52B.js → chunk-FB2HBNIC.js} +1 -1
  72. package/dist/chunk-FB2HBNIC.js.map +1 -0
  73. package/dist/chunk-FXZZS7YW.js +605 -0
  74. package/dist/chunk-FXZZS7YW.js.map +1 -0
  75. package/dist/{chunk-HGUZWG2C.js → chunk-FZG3JYB3.js} +8 -47
  76. package/dist/chunk-FZG3JYB3.js.map +1 -0
  77. package/dist/{chunk-V3LJN2GS.js → chunk-GAPBPRPP.js} +1 -1
  78. package/dist/chunk-GAPBPRPP.js.map +1 -0
  79. package/dist/chunk-GUBN5UTT.js +1 -0
  80. package/dist/chunk-GUBN5UTT.js.map +1 -0
  81. package/dist/{chunk-6OXCZMW3.js → chunk-HEK4SET7.js} +5 -5
  82. package/dist/chunk-HEK4SET7.js.map +1 -0
  83. package/dist/{chunk-N2D5AVRR.js → chunk-HRCNHWLP.js} +7 -109
  84. package/dist/chunk-HRCNHWLP.js.map +1 -0
  85. package/dist/{chunk-C3ZZ56YZ.js → chunk-JA2ZAT5Q.js} +1 -1
  86. package/dist/chunk-JA2ZAT5Q.js.map +1 -0
  87. package/dist/{chunk-L2S2R3TI.js → chunk-KBGGQK4I.js} +25 -8
  88. package/dist/chunk-KBGGQK4I.js.map +1 -0
  89. package/dist/{chunk-VPISAMXU.js → chunk-KD5G3YXI.js} +4 -4
  90. package/dist/chunk-KD5G3YXI.js.map +1 -0
  91. package/dist/{chunk-VMEWD57H.js → chunk-KPKLIUUL.js} +1 -1
  92. package/dist/chunk-KPKLIUUL.js.map +1 -0
  93. package/dist/{chunk-4HAU7AJM.js → chunk-L4Y6RJ4E.js} +3 -3
  94. package/dist/chunk-L4Y6RJ4E.js.map +1 -0
  95. package/dist/{chunk-OVHW23YC.js → chunk-L5Z6IY5U.js} +5 -5
  96. package/dist/chunk-L5Z6IY5U.js.map +1 -0
  97. package/dist/{chunk-JBCHWRKF.js → chunk-MTEWLGVY.js} +2 -2
  98. package/dist/chunk-MTEWLGVY.js.map +1 -0
  99. package/dist/{chunk-XZ6B2Y2R.js → chunk-MWP4YXWJ.js} +1 -1
  100. package/dist/chunk-MWP4YXWJ.js.map +1 -0
  101. package/dist/{chunk-5QW7IQQU.js → chunk-NTDN54XO.js} +1 -1
  102. package/dist/chunk-NTDN54XO.js.map +1 -0
  103. package/dist/{chunk-7BIM27LV.js → chunk-OIGJOYX6.js} +1 -1
  104. package/dist/chunk-OIGJOYX6.js.map +1 -0
  105. package/dist/{chunk-TSLSIRBR.js → chunk-OLGPYOLO.js} +2 -2
  106. package/dist/chunk-OLGPYOLO.js.map +1 -0
  107. package/dist/{chunk-6NEXVBPY.js → chunk-RWNSW4FM.js} +1 -1
  108. package/dist/chunk-RWNSW4FM.js.map +1 -0
  109. package/dist/{chunk-E25FBYJP.js → chunk-SAFGDIPQ.js} +1 -1
  110. package/dist/chunk-SAFGDIPQ.js.map +1 -0
  111. package/dist/{chunk-OP7QCTR5.js → chunk-SEELKQUM.js} +2 -2
  112. package/dist/chunk-SEELKQUM.js.map +1 -0
  113. package/dist/{chunk-4B2ZMX45.js → chunk-SSYDEKWF.js} +1 -1
  114. package/dist/chunk-SSYDEKWF.js.map +1 -0
  115. package/dist/{chunk-DQVBL2G4.js → chunk-SZU6BOMV.js} +75 -53
  116. package/dist/chunk-SZU6BOMV.js.map +1 -0
  117. package/dist/{chunk-65EFIUDD.js → chunk-U267AOWS.js} +1 -1
  118. package/dist/chunk-U267AOWS.js.map +1 -0
  119. package/dist/{chunk-FX72VHAE.js → chunk-U3H53IIN.js} +6 -6
  120. package/dist/chunk-U3H53IIN.js.map +1 -0
  121. package/dist/{chunk-OPLICDUB.js → chunk-UW2TEAGR.js} +1 -1
  122. package/dist/chunk-UW2TEAGR.js.map +1 -0
  123. package/dist/{chunk-2WH6SD3C.js → chunk-UYMCKHML.js} +4 -4
  124. package/dist/chunk-UYMCKHML.js.map +1 -0
  125. package/dist/{chunk-OI6DK6ZJ.js → chunk-VFU7DTUL.js} +6 -4
  126. package/dist/chunk-VFU7DTUL.js.map +1 -0
  127. package/dist/{chunk-IAJ2JVEH.js → chunk-VSLTKX5L.js} +1 -1
  128. package/dist/chunk-VSLTKX5L.js.map +1 -0
  129. package/dist/{chunk-YB5DJJ4U.js → chunk-VZTYCAO6.js} +1 -1
  130. package/dist/chunk-VZTYCAO6.js.map +1 -0
  131. package/dist/chunk-WDGYCBNI.js +65 -0
  132. package/dist/chunk-WDGYCBNI.js.map +1 -0
  133. package/dist/chunk-WPJOTQA5.js +1 -0
  134. package/dist/chunk-WPJOTQA5.js.map +1 -0
  135. package/dist/{chunk-DGUM43GV.js → chunk-XTHN6JBX.js} +1 -1
  136. package/dist/chunk-XTHN6JBX.js.map +1 -0
  137. package/dist/{chunk-HZ6USUHC.js → chunk-YOIVCCZT.js} +1 -1
  138. package/dist/chunk-YOIVCCZT.js.map +1 -0
  139. package/dist/cli/index.js +8 -8
  140. package/dist/client/core.d.ts +5 -259
  141. package/dist/client/core.js +13 -9
  142. package/dist/client/core.js.map +1 -1
  143. package/dist/client/index.d.ts +7 -96
  144. package/dist/client/index.js +19 -67
  145. package/dist/client/index.js.map +1 -1
  146. package/dist/{controller-swc-transform-JJRMTSDY.js → controller-swc-transform-T7ZTD55V.js} +2 -2
  147. package/dist/controller-swc-transform-T7ZTD55V.js.map +1 -0
  148. package/dist/{cookies-MJKMGJ7N.js → cookies-SOXUQJXG.js} +3 -3
  149. package/dist/cookies-SOXUQJXG.js.map +1 -0
  150. package/dist/{dev-WQ4LWCAW.js → dev-YNO26JS3.js} +8 -7
  151. package/dist/{dev-WQ4LWCAW.js.map → dev-YNO26JS3.js.map} +1 -1
  152. package/dist/{dev-emit-HLGJK3PP.js → dev-emit-F54Y5TIU.js} +5 -5
  153. package/dist/dev-emit-F54Y5TIU.js.map +1 -0
  154. package/dist/devtools/entry.js +61 -53
  155. package/dist/devtools/entry.js.map +1 -1
  156. package/dist/dispatcher-MXKF3CRH.js +8 -0
  157. package/dist/dispatcher-MXKF3CRH.js.map +1 -0
  158. package/dist/index.js +25 -25
  159. package/dist/index.js.map +1 -1
  160. package/dist/{info-75U6GCMD.js → info-ICDTPJDC.js} +3 -3
  161. package/dist/{internal-api-JFORKYLR.js → internal-api-NO24QAXC.js} +10 -8
  162. package/dist/{internal-api-DV3H5NNV.js → internal-api-S7WK2WCY.js} +20 -20
  163. package/dist/internal-api-S7WK2WCY.js.map +1 -0
  164. package/dist/{load-config-XP7NSSA7.js → load-config-ICCNMO74.js} +3 -3
  165. package/dist/{mcp-FF3NTCHB.js → mcp-3S6A4A4Q.js} +3 -3
  166. package/dist/{openapi-ZPXYRAM2.js → openapi-NIYA2VBG.js} +3 -3
  167. package/dist/react-query/index.js +2 -2
  168. package/dist/react-query/index.js.map +1 -1
  169. package/dist/{routes-ZVDKABXZ.js → routes-2RD4S5PZ.js} +3 -3
  170. package/dist/{schema-FBOTN46F.js → schema-S553QCAU.js} +2 -2
  171. package/dist/server/agent/index.d.ts +3 -72
  172. package/dist/server/agent/index.js +4 -4
  173. package/dist/server/agent/index.js.map +1 -1
  174. package/dist/server/auth/index.js +4 -4
  175. package/dist/server/auth/index.js.map +1 -1
  176. package/dist/server/cost/index.js +2 -2
  177. package/dist/server/cost/index.js.map +1 -1
  178. package/dist/server/cron/index.js +6 -6
  179. package/dist/server/cron/index.js.map +1 -1
  180. package/dist/server/define/index.d.ts +2 -2
  181. package/dist/server/define/index.js +4 -4
  182. package/dist/server/define/index.js.map +1 -1
  183. package/dist/server/http/index.js +11 -11
  184. package/dist/server/http/index.js.map +1 -1
  185. package/dist/server/index.d.ts +3 -3
  186. package/dist/server/index.js +41 -41
  187. package/dist/server/index.js.map +1 -1
  188. package/dist/server/jobs/index.js +7 -7
  189. package/dist/server/jobs/index.js.map +1 -1
  190. package/dist/server/observability/index.d.ts +8 -1
  191. package/dist/server/observability/index.js +5 -5
  192. package/dist/server/observability/index.js.map +1 -1
  193. package/dist/server/plugins/index.js +3 -3
  194. package/dist/server/plugins/index.js.map +1 -1
  195. package/dist/server/rate-limit/index.js +4 -4
  196. package/dist/server/rate-limit/index.js.map +1 -1
  197. package/dist/server/realtime/index.js +2 -2
  198. package/dist/server/realtime/index.js.map +1 -1
  199. package/dist/server/scan/index.js +7 -7
  200. package/dist/server/scan/index.js.map +1 -1
  201. package/dist/server/security/index.js +5 -5
  202. package/dist/server/security/index.js.map +1 -1
  203. package/dist/server/storage/index.js +2 -2
  204. package/dist/server/storage/index.js.map +1 -1
  205. package/dist/server/webhook/index.js +3 -3
  206. package/dist/server/webhook/index.js.map +1 -1
  207. package/dist/server-error-to-envelope-UM7DEVM4.js +8 -0
  208. package/dist/server-error-to-envelope-UM7DEVM4.js.map +1 -0
  209. package/dist/{server-routes-hmr-RI7SYNT2.js → server-routes-hmr-6CRNSEWF.js} +2 -2
  210. package/dist/server-routes-hmr-6CRNSEWF.js.map +1 -0
  211. package/dist/{services-typed-client-AU6DKXAO.js → services-typed-client-IXNOPVZA.js} +3 -3
  212. package/dist/services-typed-client-IXNOPVZA.js.map +1 -0
  213. package/dist/{start-2U3FUCJX.js → start-TVT7BZ4V.js} +35 -11
  214. package/dist/start-TVT7BZ4V.js.map +1 -0
  215. package/dist/vite-plugin/index.js +25 -25
  216. package/dist/vite-plugin/index.js.map +1 -1
  217. package/dist/{vite-plugin-D2NTPZNC.js → vite-plugin-K64KQZSU.js} +8 -7
  218. package/package.json +11 -10
  219. package/dist/actions-virtual-module-RSFRPJQZ.js.map +0 -1
  220. package/dist/agents-typed-client-ZP7BKJB3.js.map +0 -1
  221. package/dist/app-typed-client-GDF2OMJ2.js.map +0 -1
  222. package/dist/app-typed-client-USLAMN7X.js.map +0 -1
  223. package/dist/body-parser-web-NNEJGX6Y.js.map +0 -1
  224. package/dist/build-MQHIJROR.js.map +0 -1
  225. package/dist/build-request-body-preview-FVBQ7LCE.js.map +0 -1
  226. package/dist/chunk-26ECIX74.js.map +0 -1
  227. package/dist/chunk-2WH6SD3C.js.map +0 -1
  228. package/dist/chunk-4B2ZMX45.js.map +0 -1
  229. package/dist/chunk-4HAU7AJM.js.map +0 -1
  230. package/dist/chunk-575PAX5L.js.map +0 -1
  231. package/dist/chunk-5QW7IQQU.js.map +0 -1
  232. package/dist/chunk-65EFIUDD.js.map +0 -1
  233. package/dist/chunk-6FK7FKY6.js.map +0 -1
  234. package/dist/chunk-6NEXVBPY.js.map +0 -1
  235. package/dist/chunk-6OXCZMW3.js.map +0 -1
  236. package/dist/chunk-7BIM27LV.js.map +0 -1
  237. package/dist/chunk-7MQOHNHE.js.map +0 -1
  238. package/dist/chunk-ASDXVRJD.js.map +0 -1
  239. package/dist/chunk-C3ZZ56YZ.js.map +0 -1
  240. package/dist/chunk-DJFMAWH5.js.map +0 -1
  241. package/dist/chunk-DQVBL2G4.js.map +0 -1
  242. package/dist/chunk-E25FBYJP.js.map +0 -1
  243. package/dist/chunk-E3JH6YUM.js +0 -1
  244. package/dist/chunk-ESC54TAK.js.map +0 -1
  245. package/dist/chunk-FH3DYBAN.js.map +0 -1
  246. package/dist/chunk-FX72VHAE.js.map +0 -1
  247. package/dist/chunk-HGUZWG2C.js.map +0 -1
  248. package/dist/chunk-HZ6USUHC.js.map +0 -1
  249. package/dist/chunk-IAJ2JVEH.js.map +0 -1
  250. package/dist/chunk-IE6C4KZX.js.map +0 -1
  251. package/dist/chunk-JBCHWRKF.js.map +0 -1
  252. package/dist/chunk-JHEAWR3L.js +0 -1
  253. package/dist/chunk-JIL74SFK.js.map +0 -1
  254. package/dist/chunk-JQJN6LFK.js.map +0 -1
  255. package/dist/chunk-JQSKBMXP.js.map +0 -1
  256. package/dist/chunk-KPRJS3II.js +0 -505
  257. package/dist/chunk-KPRJS3II.js.map +0 -1
  258. package/dist/chunk-L2S2R3TI.js.map +0 -1
  259. package/dist/chunk-N2D5AVRR.js.map +0 -1
  260. package/dist/chunk-NM4WF3XD.js.map +0 -1
  261. package/dist/chunk-NPMCKOX4.js +0 -1
  262. package/dist/chunk-NPMCKOX4.js.map +0 -1
  263. package/dist/chunk-OI6DK6ZJ.js.map +0 -1
  264. package/dist/chunk-OP7QCTR5.js.map +0 -1
  265. package/dist/chunk-OPLICDUB.js.map +0 -1
  266. package/dist/chunk-OVHW23YC.js.map +0 -1
  267. package/dist/chunk-SJIRP73B.js.map +0 -1
  268. package/dist/chunk-TSLSIRBR.js.map +0 -1
  269. package/dist/chunk-UD3LFGDL.js.map +0 -1
  270. package/dist/chunk-UUFYP2UM.js.map +0 -1
  271. package/dist/chunk-UVXB2ER7.js.map +0 -1
  272. package/dist/chunk-V3LJN2GS.js.map +0 -1
  273. package/dist/chunk-VMEWD57H.js.map +0 -1
  274. package/dist/chunk-VPISAMXU.js.map +0 -1
  275. package/dist/chunk-WSJKACWB.js.map +0 -1
  276. package/dist/chunk-X32XEJXR.js.map +0 -1
  277. package/dist/chunk-XZ6B2Y2R.js.map +0 -1
  278. package/dist/chunk-YB5DJJ4U.js.map +0 -1
  279. package/dist/chunk-ZEGYW52B.js.map +0 -1
  280. package/dist/chunk-ZJQ4O76G.js.map +0 -1
  281. package/dist/controller-swc-transform-JJRMTSDY.js.map +0 -1
  282. package/dist/cookies-MJKMGJ7N.js.map +0 -1
  283. package/dist/dev-emit-HLGJK3PP.js.map +0 -1
  284. package/dist/dispatcher-DLKIXYNO.js +0 -8
  285. package/dist/dispatcher-DLKIXYNO.js.map +0 -1
  286. package/dist/internal-api-DV3H5NNV.js.map +0 -1
  287. package/dist/internal-api-JFORKYLR.js.map +0 -1
  288. package/dist/load-config-XP7NSSA7.js.map +0 -1
  289. package/dist/schema-FBOTN46F.js.map +0 -1
  290. package/dist/server-error-to-envelope-EOFUIUNB.js +0 -8
  291. package/dist/server-error-to-envelope-EOFUIUNB.js.map +0 -1
  292. package/dist/server-routes-hmr-RI7SYNT2.js.map +0 -1
  293. package/dist/services-typed-client-AU6DKXAO.js.map +0 -1
  294. package/dist/start-2U3FUCJX.js.map +0 -1
  295. package/dist/vite-plugin-D2NTPZNC.js.map +0 -1
  296. /package/dist/{agent-OXRRKB55.js.map → agent-WFULT3OB.js.map} +0 -0
  297. /package/dist/{chunk-CJNMJUHE.js.map → chunk-B7ONQ4QJ.js.map} +0 -0
  298. /package/dist/{info-75U6GCMD.js.map → info-ICDTPJDC.js.map} +0 -0
  299. /package/dist/{broadcast-4SX7R5XE.js.map → internal-api-NO24QAXC.js.map} +0 -0
  300. /package/dist/{chunk-DGUM43GV.js.map → load-config-ICCNMO74.js.map} +0 -0
  301. /package/dist/{mcp-FF3NTCHB.js.map → mcp-3S6A4A4Q.js.map} +0 -0
  302. /package/dist/{openapi-ZPXYRAM2.js.map → openapi-NIYA2VBG.js.map} +0 -0
  303. /package/dist/{routes-ZVDKABXZ.js.map → routes-2RD4S5PZ.js.map} +0 -0
  304. /package/dist/{chunk-E3JH6YUM.js.map → schema-S553QCAU.js.map} +0 -0
  305. /package/dist/{chunk-JHEAWR3L.js.map → vite-plugin-K64KQZSU.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/rate-limit/rate-limit-per-route.ts"],"mappings":"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","names":[]}
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+ import "tsx/esm";
3
+ import {
4
+ findControllerFiles
5
+ } from "./chunk-FXZZS7YW.js";
6
+
7
+ // src/cli/commands/build/emit-controllers.ts
8
+ import { mkdirSync, readFileSync, writeFileSync } from "fs";
9
+ import { basename, dirname, join, relative, resolve } from "path";
10
+ import { transformControllerSource } from "@theokit/http";
11
+ var CONTROLLER_MANIFEST_FILE = "controllers.json";
12
+ var CONTROLLER_OUT_DIR = "controllers";
13
+ async function emitControllerArtifacts(opts) {
14
+ const controllersDir = resolve(opts.serverDir, CONTROLLER_OUT_DIR);
15
+ const files = findControllerFiles(controllersDir);
16
+ if (files.length === 0) return null;
17
+ const outDir = resolve(opts.distDir, CONTROLLER_OUT_DIR);
18
+ mkdirSync(outDir, { recursive: true });
19
+ const modules = [];
20
+ for (const file of files) {
21
+ const code = await transformControllerSource(readFileSync(file, "utf-8"), file);
22
+ const rel = relative(controllersDir, file).replace(/\.controller\.ts$/, ".controller.mjs");
23
+ const outPath = join(outDir, rel);
24
+ mkdirSync(dirname(outPath), { recursive: true });
25
+ writeFileSync(outPath, code);
26
+ modules.push(`${CONTROLLER_OUT_DIR}/${rel.split("\\").join("/")}`);
27
+ }
28
+ const manifest = { version: 1, modules };
29
+ writeFileSync(
30
+ resolve(opts.distDir, CONTROLLER_MANIFEST_FILE),
31
+ JSON.stringify(manifest, null, 2) + "\n"
32
+ );
33
+ return manifest;
34
+ }
35
+ function describeControllerArtifacts(manifest) {
36
+ if (manifest === null) return "controllers: none";
37
+ const names = manifest.modules.map((m) => basename(m, ".mjs")).join(", ");
38
+ return `controllers: ${manifest.modules.length} compiled (${names})`;
39
+ }
40
+
41
+ export {
42
+ CONTROLLER_MANIFEST_FILE,
43
+ emitControllerArtifacts,
44
+ describeControllerArtifacts
45
+ };
46
+ //# sourceMappingURL=chunk-6LNIGF5P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/build/emit-controllers.ts"],"sourcesContent":["import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { basename, dirname, join, relative, resolve } from 'node:path'\n\nimport { transformControllerSource } from '@theokit/http'\n\nimport { findControllerFiles } from '../../../server/http/controller-dispatch.js'\n\n/**\n * theokit#123 — compile `server/controllers/**` into `dist` so production can serve them.\n *\n * ## Why production needed anything at all\n *\n * #122 made decorator controllers first-class in `theokit dev`, where a Vite `enforce:'pre'` swc\n * transform compiles them on the fly — parameter decorators (`@Body`/`@Param`/`@Query`) emit\n * metadata esbuild cannot produce. `theokit start` has no Vite and no transform, so an uncompiled\n * `.controller.ts` simply cannot load, and controller routes 404'd in production while working in\n * dev. That split is the whole issue.\n *\n * ## Why compile at BUILD time rather than load with swc at runtime\n *\n * `loadControllerWithSwc` would work in production and was the smaller diff. It is refused on\n * purpose: `@swc/core` is a peer dependency and a native binary, so that path makes every deployed\n * app carry a compiler it only needs once, and turns a missing optional peer into a runtime 404\n * instead of a build failure. Compilation belongs where the rest of the build already is — and it\n * is what the issue's root-cause note asks for.\n *\n * ## Why NOT in `generateManifest`\n *\n * ADR-5 keeps controllers out of the manifest, and that is preserved here: the manifest is the\n * deploy-adapter contract, and adding a parallel route source to it would ripple through every\n * adapter. This emits a SEPARATE artifact (`dist/controllers.json` + `dist/controllers/*.mjs`) that\n * only the Node start path reads. An adapter that knows nothing about controllers keeps working\n * exactly as before.\n */\n\n/** The build artifact `theokit start` reads to find compiled controllers. */\nexport interface ControllerBuildManifest {\n version: 1\n /** Emitted module paths, relative to `distDir`, in scan order. */\n modules: string[]\n}\n\nexport const CONTROLLER_MANIFEST_FILE = 'controllers.json'\nconst CONTROLLER_OUT_DIR = 'controllers'\n\n/**\n * Compile every controller under `<serverDir>/controllers` into `<distDir>/controllers`.\n *\n * No controllers ⇒ **no artifact at all** (not an empty one). `theokit start` treats a missing\n * manifest as \"this app has no controllers\" and skips the whole branch, so a routes-only app pays\n * nothing and its `dist` is byte-identical to before — the ADR-5 posture, kept.\n */\nexport async function emitControllerArtifacts(opts: {\n serverDir: string\n distDir: string\n}): Promise<ControllerBuildManifest | null> {\n const controllersDir = resolve(opts.serverDir, CONTROLLER_OUT_DIR)\n const files = findControllerFiles(controllersDir)\n if (files.length === 0) return null\n\n const outDir = resolve(opts.distDir, CONTROLLER_OUT_DIR)\n mkdirSync(outDir, { recursive: true })\n\n const modules: string[] = []\n for (const file of files) {\n // Errors are NOT caught. A controller that fails to compile must fail the BUILD — swallowing it\n // here would ship an app whose routes 404 at runtime with nothing pointing back at the cause,\n // which is the exact failure mode this issue reports (error-handling.md § 2).\n const code = await transformControllerSource(readFileSync(file, 'utf-8'), file)\n\n // Mirror the source tree under `dist/controllers` so two files with the same basename in\n // different folders cannot overwrite each other.\n const rel = relative(controllersDir, file).replace(/\\.controller\\.ts$/, '.controller.mjs')\n const outPath = join(outDir, rel)\n mkdirSync(dirname(outPath), { recursive: true })\n writeFileSync(outPath, code)\n modules.push(`${CONTROLLER_OUT_DIR}/${rel.split('\\\\').join('/')}`)\n }\n\n const manifest: ControllerBuildManifest = { version: 1, modules }\n writeFileSync(\n resolve(opts.distDir, CONTROLLER_MANIFEST_FILE),\n JSON.stringify(manifest, null, 2) + '\\n',\n )\n return manifest\n}\n\n/** Human-facing summary for the build log (mirrors the cron/job emitters). */\nexport function describeControllerArtifacts(manifest: ControllerBuildManifest | null): string {\n if (manifest === null) return 'controllers: none'\n const names = manifest.modules.map((m) => basename(m, '.mjs')).join(', ')\n return `controllers: ${manifest.modules.length} compiled (${names})`\n}\n"],"mappings":";;;;;;;AAAA,SAAS,WAAW,cAAc,qBAAqB;AACvD,SAAS,UAAU,SAAS,MAAM,UAAU,eAAe;AAE3D,SAAS,iCAAiC;AAuCnC,IAAM,2BAA2B;AACxC,IAAM,qBAAqB;AAS3B,eAAsB,wBAAwB,MAGF;AAC1C,QAAM,iBAAiB,QAAQ,KAAK,WAAW,kBAAkB;AACjE,QAAM,QAAQ,oBAAoB,cAAc;AAChD,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,QAAM,SAAS,QAAQ,KAAK,SAAS,kBAAkB;AACvD,YAAU,QAAQ,EAAE,WAAW,KAAK,CAAC;AAErC,QAAM,UAAoB,CAAC;AAC3B,aAAW,QAAQ,OAAO;AAIxB,UAAM,OAAO,MAAM,0BAA0B,aAAa,MAAM,OAAO,GAAG,IAAI;AAI9E,UAAM,MAAM,SAAS,gBAAgB,IAAI,EAAE,QAAQ,qBAAqB,iBAAiB;AACzF,UAAM,UAAU,KAAK,QAAQ,GAAG;AAChC,cAAU,QAAQ,OAAO,GAAG,EAAE,WAAW,KAAK,CAAC;AAC/C,kBAAc,SAAS,IAAI;AAC3B,YAAQ,KAAK,GAAG,kBAAkB,IAAI,IAAI,MAAM,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE;AAAA,EACnE;AAEA,QAAM,WAAoC,EAAE,SAAS,GAAG,QAAQ;AAChE;AAAA,IACE,QAAQ,KAAK,SAAS,wBAAwB;AAAA,IAC9C,KAAK,UAAU,UAAU,MAAM,CAAC,IAAI;AAAA,EACtC;AACA,SAAO;AACT;AAGO,SAAS,4BAA4B,UAAkD;AAC5F,MAAI,aAAa,KAAM,QAAO;AAC9B,QAAM,QAAQ,SAAS,QAAQ,IAAI,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,KAAK,IAAI;AACxE,SAAO,gBAAgB,SAAS,QAAQ,MAAM,cAAc,KAAK;AACnE;","names":[]}
@@ -3,384 +3,21 @@ import "tsx/esm";
3
3
  import {
4
4
  getApprovalRegistry
5
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-XPZ2GYMG.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"}`);
@@ -2377,15 +1901,6 @@ function generateNonce() {
2377
1901
  }
2378
1902
 
2379
1903
  export {
2380
- logRequest,
2381
- warnOnce,
2382
- dispatchCsrfWarn,
2383
- safeAudit,
2384
- validateCsrfRequest,
2385
- enforceCsrf,
2386
- sendError,
2387
- incomingMessageToWebRequest,
2388
- incomingMessageToHandlerRequest,
2389
1904
  executeRoute,
2390
1905
  executeAction,
2391
1906
  findSuggestion,
@@ -2407,4 +1922,4 @@ export {
2407
1922
  applySecurityHeaders,
2408
1923
  generateNonce
2409
1924
  };
2410
- //# sourceMappingURL=chunk-IE6C4KZX.js.map
1925
+ //# sourceMappingURL=chunk-6VDYQ4I6.js.map