gemi 0.124.0 → 0.126.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 (331) hide show
  1. package/dist/ai/AgentController.d.ts +185 -3
  2. package/dist/ai/AgentController.d.ts.map +1 -1
  3. package/dist/ai/client/index.d.ts +1 -1
  4. package/dist/ai/client/index.d.ts.map +1 -1
  5. package/dist/ai/client/index.js +38 -9
  6. package/dist/ai/client/index.js.map +1 -1
  7. package/dist/ai/client/reducer.d.ts.map +1 -1
  8. package/dist/ai/index.d.ts +2 -2
  9. package/dist/ai/index.d.ts.map +1 -1
  10. package/dist/ai/index.js +31 -48
  11. package/dist/ai/index.js.map +6 -15
  12. package/dist/ai/types.d.ts +26 -0
  13. package/dist/ai/types.d.ts.map +1 -1
  14. package/dist/ai/useChat.d.ts +35 -2
  15. package/dist/ai/useChat.d.ts.map +1 -1
  16. package/dist/app/index.js +1 -1
  17. package/dist/auth/AuthController.d.ts.map +1 -1
  18. package/dist/auth/AuthManager.d.ts +11 -0
  19. package/dist/auth/AuthManager.d.ts.map +1 -1
  20. package/dist/auth/AuthServiceProvider.d.ts +2 -0
  21. package/dist/auth/AuthServiceProvider.d.ts.map +1 -1
  22. package/dist/auth/config.d.ts +71 -2
  23. package/dist/auth/config.d.ts.map +1 -1
  24. package/dist/auth/connections/ConnectionsController.d.ts.map +1 -1
  25. package/dist/auth/oauth/GoogleOAuthProvider.d.ts +1 -1
  26. package/dist/auth/oauth/GoogleOAuthProvider.d.ts.map +1 -1
  27. package/dist/auth/oauth/InstagramOAuthProvider.d.ts +1 -1
  28. package/dist/auth/oauth/InstagramOAuthProvider.d.ts.map +1 -1
  29. package/dist/auth/oauth/XOAuthProvider.d.ts.map +1 -1
  30. package/dist/auth/oauth/providers.d.ts +10 -0
  31. package/dist/auth/oauth/providers.d.ts.map +1 -0
  32. package/dist/bun/plugin.js +1 -1
  33. package/dist/bun/preload.js +1 -1
  34. package/dist/{chunk-cfdwsvtx.js → chunk-094m8mj3.js} +2 -2
  35. package/dist/{chunk-cfdwsvtx.js.map → chunk-094m8mj3.js.map} +1 -1
  36. package/dist/chunk-0arss2xy.js +5 -0
  37. package/dist/{chunk-mqtfaqx5.js.map → chunk-0arss2xy.js.map} +5 -4
  38. package/dist/{chunk-rtawbqec.js → chunk-0f0xxqhy.js} +3 -3
  39. package/dist/{chunk-rtawbqec.js.map → chunk-0f0xxqhy.js.map} +1 -1
  40. package/dist/chunk-15bmfr7f.js +5 -0
  41. package/dist/chunk-15bmfr7f.js.map +14 -0
  42. package/dist/{chunk-6bgb1nhq.js → chunk-1dzs05dc.js} +2 -2
  43. package/dist/{chunk-6bgb1nhq.js.map → chunk-1dzs05dc.js.map} +1 -1
  44. package/dist/{chunk-30xxc6r7.js → chunk-1eb4p352.js} +2 -2
  45. package/dist/{chunk-30xxc6r7.js.map → chunk-1eb4p352.js.map} +1 -1
  46. package/dist/{chunk-s5jxc63j.js → chunk-1gd1ykgj.js} +3 -3
  47. package/dist/{chunk-s5jxc63j.js.map → chunk-1gd1ykgj.js.map} +1 -1
  48. package/dist/{chunk-4drnyymm.js → chunk-1v368y9a.js} +2 -2
  49. package/dist/{chunk-4drnyymm.js.map → chunk-1v368y9a.js.map} +1 -1
  50. package/dist/{chunk-sd0c2001.js → chunk-28bby5pp.js} +2 -2
  51. package/dist/{chunk-sd0c2001.js.map → chunk-28bby5pp.js.map} +1 -1
  52. package/dist/{chunk-wbg2tza5.js → chunk-3fyhd641.js} +1 -1
  53. package/dist/{chunk-3y294mb8.js → chunk-43faxwf5.js} +2 -2
  54. package/dist/{chunk-3y294mb8.js.map → chunk-43faxwf5.js.map} +1 -1
  55. package/dist/{chunk-v2ggafz1.js → chunk-56ryda9y.js} +2 -2
  56. package/dist/{chunk-v2ggafz1.js.map → chunk-56ryda9y.js.map} +1 -1
  57. package/dist/{chunk-dxfhhw5h.js → chunk-5vvfcdpk.js} +2 -2
  58. package/dist/{chunk-dxfhhw5h.js.map → chunk-5vvfcdpk.js.map} +1 -1
  59. package/dist/{chunk-2affxmkn.js → chunk-62zn06wb.js} +2 -2
  60. package/dist/{chunk-2affxmkn.js.map → chunk-62zn06wb.js.map} +1 -1
  61. package/dist/{chunk-bt9qv2jj.js → chunk-7dzprr9b.js} +3 -3
  62. package/dist/{chunk-bt9qv2jj.js.map → chunk-7dzprr9b.js.map} +1 -1
  63. package/dist/{chunk-n1a2zj5z.js → chunk-7eerqsg2.js} +2 -2
  64. package/dist/{chunk-n1a2zj5z.js.map → chunk-7eerqsg2.js.map} +3 -3
  65. package/dist/{chunk-nnarmbjv.js → chunk-7nfprr9v.js} +2 -2
  66. package/dist/chunk-7nfprr9v.js.map +10 -0
  67. package/dist/{chunk-yzhv93b0.js → chunk-7x2n788t.js} +3 -3
  68. package/dist/{chunk-yzhv93b0.js.map → chunk-7x2n788t.js.map} +1 -1
  69. package/dist/{chunk-zsvav1dk.js → chunk-84rbdyhe.js} +2 -2
  70. package/dist/{chunk-zsvav1dk.js.map → chunk-84rbdyhe.js.map} +1 -1
  71. package/dist/chunk-87bmhng2.js +5 -0
  72. package/dist/{chunk-70nnh0y7.js.map → chunk-87bmhng2.js.map} +1 -1
  73. package/dist/{chunk-nn2jeat2.js → chunk-87jj7n9q.js} +2 -2
  74. package/dist/{chunk-17dndh5z.js.map → chunk-87jj7n9q.js.map} +1 -1
  75. package/dist/{chunk-17dndh5z.js → chunk-89swy5aq.js} +2 -2
  76. package/dist/{chunk-nn2jeat2.js.map → chunk-89swy5aq.js.map} +1 -1
  77. package/dist/{chunk-2n4490pk.js → chunk-8df7fn7f.js} +3 -3
  78. package/dist/{chunk-2n4490pk.js.map → chunk-8df7fn7f.js.map} +1 -1
  79. package/dist/{chunk-qdj8ek8z.js → chunk-99z9d0sa.js} +2 -2
  80. package/dist/{chunk-qdj8ek8z.js.map → chunk-99z9d0sa.js.map} +1 -1
  81. package/dist/{chunk-1rnh9qrp.js → chunk-9hhxy88x.js} +2 -2
  82. package/dist/{chunk-1rnh9qrp.js.map → chunk-9hhxy88x.js.map} +1 -1
  83. package/dist/{chunk-nkzmk7v3.js → chunk-9x0pgkns.js} +2 -2
  84. package/dist/{chunk-nkzmk7v3.js.map → chunk-9x0pgkns.js.map} +1 -1
  85. package/dist/{chunk-qhz0x97z.js → chunk-avfntxm1.js} +2 -2
  86. package/dist/{chunk-qhz0x97z.js.map → chunk-avfntxm1.js.map} +1 -1
  87. package/dist/{chunk-92sk56n0.js → chunk-b2pdqxj3.js} +12 -12
  88. package/dist/{chunk-92sk56n0.js.map → chunk-b2pdqxj3.js.map} +7 -8
  89. package/dist/{chunk-5e22tm7m.js → chunk-bghxdjqv.js} +1 -1
  90. package/dist/{chunk-fn2qfwgx.js → chunk-bhbxhk9e.js} +2 -2
  91. package/dist/{chunk-fn2qfwgx.js.map → chunk-bhbxhk9e.js.map} +1 -1
  92. package/dist/{chunk-65s834td.js → chunk-c48gag78.js} +1 -1
  93. package/dist/{chunk-bnt8kx6x.js → chunk-c65rh4k8.js} +2 -2
  94. package/dist/{chunk-bnt8kx6x.js.map → chunk-c65rh4k8.js.map} +1 -1
  95. package/dist/chunk-cwpezdpw.js +57 -0
  96. package/dist/{chunk-5j50q4g8.js.map → chunk-cwpezdpw.js.map} +29 -21
  97. package/dist/chunk-dm7mada7.js +15 -0
  98. package/dist/{chunk-n0r5xyk2.js.map → chunk-dm7mada7.js.map} +6 -5
  99. package/dist/{chunk-mrswc6qw.js → chunk-ebdkmzm9.js} +2 -2
  100. package/dist/{chunk-mrswc6qw.js.map → chunk-ebdkmzm9.js.map} +1 -1
  101. package/dist/{chunk-z5jydj5r.js → chunk-ecb8qggy.js} +2 -2
  102. package/dist/{chunk-z5jydj5r.js.map → chunk-ecb8qggy.js.map} +1 -1
  103. package/dist/{chunk-y434jc1c.js → chunk-etf6h5m1.js} +2 -2
  104. package/dist/{chunk-y434jc1c.js.map → chunk-etf6h5m1.js.map} +1 -1
  105. package/dist/{chunk-fvrmptd0.js → chunk-ewv1m1sv.js} +3 -3
  106. package/dist/{chunk-fvrmptd0.js.map → chunk-ewv1m1sv.js.map} +1 -1
  107. package/dist/{chunk-fw7ds23a.js → chunk-gv59djt3.js} +2 -2
  108. package/dist/{chunk-fw7ds23a.js.map → chunk-gv59djt3.js.map} +1 -1
  109. package/dist/{chunk-3hqwz48c.js → chunk-gxp48t81.js} +4 -4
  110. package/dist/{chunk-3hqwz48c.js.map → chunk-gxp48t81.js.map} +1 -1
  111. package/dist/{chunk-pmyh33v5.js → chunk-h4755p9h.js} +2 -2
  112. package/dist/{chunk-pmyh33v5.js.map → chunk-h4755p9h.js.map} +1 -1
  113. package/dist/{chunk-jys8y39p.js → chunk-hye22tpt.js} +2 -2
  114. package/dist/{chunk-jys8y39p.js.map → chunk-hye22tpt.js.map} +1 -1
  115. package/dist/{chunk-7gfdts60.js → chunk-jg3kg55f.js} +2 -2
  116. package/dist/{chunk-7gfdts60.js.map → chunk-jg3kg55f.js.map} +1 -1
  117. package/dist/{chunk-j7v7dft7.js → chunk-k6gvbvyw.js} +1 -1
  118. package/dist/{chunk-qycwjzsv.js → chunk-kzk5r6v4.js} +3 -3
  119. package/dist/{chunk-qycwjzsv.js.map → chunk-kzk5r6v4.js.map} +1 -1
  120. package/dist/{chunk-rttrpjqk.js → chunk-m63v6aze.js} +2 -2
  121. package/dist/{chunk-rttrpjqk.js.map → chunk-m63v6aze.js.map} +1 -1
  122. package/dist/{chunk-1qwhty9p.js → chunk-mj4n5mar.js} +2 -2
  123. package/dist/{chunk-1qwhty9p.js.map → chunk-mj4n5mar.js.map} +1 -1
  124. package/dist/{chunk-h3p8qzft.js → chunk-mj7h1dgh.js} +2 -2
  125. package/dist/{chunk-h3p8qzft.js.map → chunk-mj7h1dgh.js.map} +1 -1
  126. package/dist/{chunk-f4cmz31h.js → chunk-mpt5jg4e.js} +2 -2
  127. package/dist/{chunk-f4cmz31h.js.map → chunk-mpt5jg4e.js.map} +1 -1
  128. package/dist/{chunk-w61sphn5.js → chunk-n8mxsfc2.js} +3 -3
  129. package/dist/{chunk-w61sphn5.js.map → chunk-n8mxsfc2.js.map} +1 -1
  130. package/dist/{chunk-34fkx6kb.js → chunk-nrf23yan.js} +2 -2
  131. package/dist/{chunk-34fkx6kb.js.map → chunk-nrf23yan.js.map} +1 -1
  132. package/dist/{chunk-pe46a5a5.js → chunk-nv2t87c3.js} +2 -2
  133. package/dist/{chunk-pe46a5a5.js.map → chunk-nv2t87c3.js.map} +1 -1
  134. package/dist/{chunk-c4jnxmf2.js → chunk-p0ccxfkq.js} +1 -1
  135. package/dist/{chunk-019wz697.js → chunk-p7abyc0b.js} +2 -2
  136. package/dist/{chunk-019wz697.js.map → chunk-p7abyc0b.js.map} +1 -1
  137. package/dist/{chunk-8m2htvjn.js → chunk-psdyfaf1.js} +2 -2
  138. package/dist/{chunk-8m2htvjn.js.map → chunk-psdyfaf1.js.map} +1 -1
  139. package/dist/{chunk-b5afy6k9.js → chunk-q9mxjh10.js} +2 -2
  140. package/dist/{chunk-b5afy6k9.js.map → chunk-q9mxjh10.js.map} +1 -1
  141. package/dist/{chunk-kzsjyvvc.js → chunk-qmcjh6de.js} +2 -2
  142. package/dist/{chunk-kzsjyvvc.js.map → chunk-qmcjh6de.js.map} +1 -1
  143. package/dist/{chunk-w3812s34.js → chunk-qy3s6pwz.js} +2 -2
  144. package/dist/{chunk-w3812s34.js.map → chunk-qy3s6pwz.js.map} +1 -1
  145. package/dist/{chunk-ykz38t0t.js → chunk-ravssmdy.js} +2 -2
  146. package/dist/{chunk-ykz38t0t.js.map → chunk-ravssmdy.js.map} +1 -1
  147. package/dist/{chunk-v8v5qfnh.js → chunk-rtb64x14.js} +3 -3
  148. package/dist/{chunk-v8v5qfnh.js.map → chunk-rtb64x14.js.map} +1 -1
  149. package/dist/{chunk-3j6s5bmx.js → chunk-rvdsaqdv.js} +1 -1
  150. package/dist/chunk-s0kns9q1.js +22 -0
  151. package/dist/chunk-s0kns9q1.js.map +21 -0
  152. package/dist/{chunk-skf89vrv.js → chunk-s2krqtwj.js} +2 -2
  153. package/dist/{chunk-skf89vrv.js.map → chunk-s2krqtwj.js.map} +1 -1
  154. package/dist/{chunk-75ewjc4a.js → chunk-s2y2b8tz.js} +2 -2
  155. package/dist/{chunk-75ewjc4a.js.map → chunk-s2y2b8tz.js.map} +1 -1
  156. package/dist/{chunk-675kzd7z.js → chunk-t8kzaxaa.js} +2 -2
  157. package/dist/{chunk-675kzd7z.js.map → chunk-t8kzaxaa.js.map} +1 -1
  158. package/dist/{chunk-a3g7y70h.js → chunk-v1eeh7a7.js} +3 -3
  159. package/dist/{chunk-a3g7y70h.js.map → chunk-v1eeh7a7.js.map} +1 -1
  160. package/dist/{chunk-mvkz22p4.js → chunk-v7nw1g2n.js} +2 -2
  161. package/dist/{chunk-mvkz22p4.js.map → chunk-v7nw1g2n.js.map} +1 -1
  162. package/dist/{chunk-f29pktad.js → chunk-v80890xx.js} +3 -3
  163. package/dist/{chunk-f29pktad.js.map → chunk-v80890xx.js.map} +1 -1
  164. package/dist/{chunk-jctb7v53.js → chunk-w4111j5d.js} +2 -2
  165. package/dist/{chunk-jctb7v53.js.map → chunk-w4111j5d.js.map} +1 -1
  166. package/dist/{chunk-121p4g9j.js → chunk-wat33wxh.js} +2 -2
  167. package/dist/{chunk-121p4g9j.js.map → chunk-wat33wxh.js.map} +1 -1
  168. package/dist/{chunk-9tr92nwy.js → chunk-x5vpjzpp.js} +2 -2
  169. package/dist/{chunk-9tr92nwy.js.map → chunk-x5vpjzpp.js.map} +1 -1
  170. package/dist/{chunk-zsfwcdqn.js → chunk-xe2cfmyb.js} +2 -2
  171. package/dist/{chunk-zsfwcdqn.js.map → chunk-xe2cfmyb.js.map} +1 -1
  172. package/dist/{chunk-w4z6x54b.js → chunk-ych1dv5q.js} +3 -3
  173. package/dist/{chunk-w4z6x54b.js.map → chunk-ych1dv5q.js.map} +1 -1
  174. package/dist/{chunk-96a1459v.js → chunk-yffm8nxa.js} +2 -2
  175. package/dist/{chunk-96a1459v.js.map → chunk-yffm8nxa.js.map} +1 -1
  176. package/dist/{chunk-rpyczdta.js → chunk-yg8se4vs.js} +3 -3
  177. package/dist/{chunk-rpyczdta.js.map → chunk-yg8se4vs.js.map} +1 -1
  178. package/dist/chunk-zbvdkh6q.js +10 -0
  179. package/dist/chunk-zbvdkh6q.js.map +44 -0
  180. package/dist/{chunk-szn2n976.js → chunk-zy5gxk1g.js} +2 -2
  181. package/dist/{chunk-szn2n976.js.map → chunk-zy5gxk1g.js.map} +1 -1
  182. package/dist/chunks/{ThemeProvider-CbOx8IRl.js → ThemeProvider-CS2a1snV.js} +27 -1
  183. package/dist/chunks/ThemeProvider-CS2a1snV.js.map +1 -0
  184. package/dist/client/Mutation.d.ts +7 -6
  185. package/dist/client/Mutation.d.ts.map +1 -1
  186. package/dist/client/MutationError.d.ts +53 -1
  187. package/dist/client/MutationError.d.ts.map +1 -1
  188. package/dist/client/QueryResource.d.ts +9 -0
  189. package/dist/client/QueryResource.d.ts.map +1 -1
  190. package/dist/client/auth/useEmailCode.d.ts +3 -3
  191. package/dist/client/auth/useForgotPassword.d.ts +1 -1
  192. package/dist/client/auth/useResetPassword.d.ts +1 -1
  193. package/dist/client/auth/useSignIn.d.ts +1 -1
  194. package/dist/client/auth/useSignOut.d.ts +1 -1
  195. package/dist/client/auth/useSignUp.d.ts +1 -1
  196. package/dist/client/index.d.ts +4 -2
  197. package/dist/client/index.d.ts.map +1 -1
  198. package/dist/client/index.js +182 -30
  199. package/dist/client/index.js.map +1 -1
  200. package/dist/client/useMutation.d.ts +18 -8
  201. package/dist/client/useMutation.d.ts.map +1 -1
  202. package/dist/client/useQuery.d.ts +9 -0
  203. package/dist/client/useQuery.d.ts.map +1 -1
  204. package/dist/client/useSetQueryData.d.ts +69 -0
  205. package/dist/client/useSetQueryData.d.ts.map +1 -0
  206. package/dist/config/index.js +1 -1
  207. package/dist/console/run.js +2 -2
  208. package/dist/console/run.js.map +1 -1
  209. package/dist/container/index.js +2 -2
  210. package/dist/container/index.js.map +1 -1
  211. package/dist/database/index.js +2 -2
  212. package/dist/database/index.js.map +1 -1
  213. package/dist/email/index.js +2 -2
  214. package/dist/email/index.js.map +1 -1
  215. package/dist/facades/Auth.d.ts +29 -2
  216. package/dist/facades/Auth.d.ts.map +1 -1
  217. package/dist/facades/Cache.d.ts +36 -0
  218. package/dist/facades/Cache.d.ts.map +1 -0
  219. package/dist/facades/RateLimiter.d.ts +16 -1
  220. package/dist/facades/RateLimiter.d.ts.map +1 -1
  221. package/dist/facades/Url.d.ts +12 -1
  222. package/dist/facades/Url.d.ts.map +1 -1
  223. package/dist/facades/index.d.ts +1 -0
  224. package/dist/facades/index.d.ts.map +1 -1
  225. package/dist/facades/index.js +2 -2
  226. package/dist/facades/index.js.map +1 -1
  227. package/dist/foundation/index.js +2 -2
  228. package/dist/foundation/index.js.map +1 -1
  229. package/dist/http/HttpRequest.d.ts +14 -0
  230. package/dist/http/HttpRequest.d.ts.map +1 -1
  231. package/dist/http/McpRouter.d.ts +121 -2
  232. package/dist/http/McpRouter.d.ts.map +1 -1
  233. package/dist/http/Metadata.d.ts.map +1 -1
  234. package/dist/http/RateLimitExceededError.d.ts +24 -0
  235. package/dist/http/RateLimitExceededError.d.ts.map +1 -0
  236. package/dist/http/RateLimitMiddleware.d.ts +2 -5
  237. package/dist/http/RateLimitMiddleware.d.ts.map +1 -1
  238. package/dist/http/index.d.ts +2 -1
  239. package/dist/http/index.d.ts.map +1 -1
  240. package/dist/http/index.js +2 -2
  241. package/dist/http/index.js.map +1 -1
  242. package/dist/http/refusal.d.ts +6 -1
  243. package/dist/http/refusal.d.ts.map +1 -1
  244. package/dist/http/requestContext.d.ts +3 -1
  245. package/dist/http/requestContext.d.ts.map +1 -1
  246. package/dist/http/requestState.d.ts +57 -0
  247. package/dist/http/requestState.d.ts.map +1 -0
  248. package/dist/i18n/dictionaryRuntime.js +2 -2
  249. package/dist/i18n/dictionaryRuntime.js.map +1 -1
  250. package/dist/i18n/index.js +2 -2
  251. package/dist/i18n/index.js.map +1 -1
  252. package/dist/kernel/index.js +3 -3
  253. package/dist/kernel/index.js.map +3 -3
  254. package/dist/kernel/providers.d.ts +2 -2
  255. package/dist/kernel/providers.d.ts.map +1 -1
  256. package/dist/orm/index.js +2 -2
  257. package/dist/orm/index.js.map +1 -1
  258. package/dist/server/Server.d.ts.map +1 -1
  259. package/dist/server/health.d.ts +67 -0
  260. package/dist/server/health.d.ts.map +1 -0
  261. package/dist/server/index.d.ts +1 -0
  262. package/dist/server/index.d.ts.map +1 -1
  263. package/dist/server/index.js +2 -2
  264. package/dist/server/index.js.map +5 -4
  265. package/dist/server/shutdown.d.ts +3 -4
  266. package/dist/server/shutdown.d.ts.map +1 -1
  267. package/dist/services/cache/CacheManager.d.ts +115 -0
  268. package/dist/services/cache/CacheManager.d.ts.map +1 -0
  269. package/dist/services/cache/CacheServiceProvider.d.ts +5 -0
  270. package/dist/services/cache/CacheServiceProvider.d.ts.map +1 -0
  271. package/dist/services/cache/CacheStore.d.ts +26 -0
  272. package/dist/services/cache/CacheStore.d.ts.map +1 -0
  273. package/dist/services/cache/MemoryCacheStore.d.ts +36 -0
  274. package/dist/services/cache/MemoryCacheStore.d.ts.map +1 -0
  275. package/dist/services/cache/RedisCacheStore.d.ts +54 -0
  276. package/dist/services/cache/RedisCacheStore.d.ts.map +1 -0
  277. package/dist/services/cache/config.d.ts +35 -0
  278. package/dist/services/cache/config.d.ts.map +1 -0
  279. package/dist/services/features/gate.d.ts +11 -0
  280. package/dist/services/features/gate.d.ts.map +1 -0
  281. package/dist/services/index.d.ts +10 -4
  282. package/dist/services/index.d.ts.map +1 -1
  283. package/dist/services/index.js +9 -9
  284. package/dist/services/index.js.map +5 -5
  285. package/dist/services/logging/LogManager.d.ts +1 -0
  286. package/dist/services/logging/LogManager.d.ts.map +1 -1
  287. package/dist/services/logging/config.d.ts +23 -1
  288. package/dist/services/logging/config.d.ts.map +1 -1
  289. package/dist/services/logging/consoleSink.d.ts +25 -0
  290. package/dist/services/logging/consoleSink.d.ts.map +1 -0
  291. package/dist/services/mcp/McpRegistry.d.ts +106 -14
  292. package/dist/services/mcp/McpRegistry.d.ts.map +1 -1
  293. package/dist/services/mcp/http/McpHttpServer.d.ts +41 -2
  294. package/dist/services/mcp/http/McpHttpServer.d.ts.map +1 -1
  295. package/dist/services/mcp/toAgentTools.d.ts +21 -3
  296. package/dist/services/mcp/toAgentTools.d.ts.map +1 -1
  297. package/dist/services/queue/work.js +2 -2
  298. package/dist/services/queue/work.js.map +1 -1
  299. package/dist/services/rate-limiter/RateLimiter.d.ts +12 -0
  300. package/dist/services/rate-limiter/RateLimiter.d.ts.map +1 -1
  301. package/dist/services/router/globalMiddleware.d.ts +4 -3
  302. package/dist/services/router/globalMiddleware.d.ts.map +1 -1
  303. package/dist/stats/route-table.js +1 -1
  304. package/dist/support/index.js +2 -2
  305. package/dist/support/index.js.map +1 -1
  306. package/dist/testing/index.js +1 -1
  307. package/dist/utils/appOrigin.d.ts +19 -0
  308. package/dist/utils/appOrigin.d.ts.map +1 -0
  309. package/dist/vitest/index.js +1 -1
  310. package/package.json +1 -1
  311. package/skills/gemi-react-best-practices/SKILL.md +1 -1
  312. package/skills/gemi-react-best-practices/rules/query-mutate-over-refetch.md +14 -0
  313. package/skills/gemi-react-best-practices/rules/routing-middleware-dsl.md +2 -1
  314. package/dist/chunk-5j50q4g8.js +0 -57
  315. package/dist/chunk-70nnh0y7.js +0 -5
  316. package/dist/chunk-kc924zjz.js +0 -5
  317. package/dist/chunk-kc924zjz.js.map +0 -12
  318. package/dist/chunk-mqtfaqx5.js +0 -5
  319. package/dist/chunk-n0r5xyk2.js +0 -14
  320. package/dist/chunk-nnarmbjv.js.map +0 -10
  321. package/dist/chunk-pya4rqm2.js +0 -5
  322. package/dist/chunk-pya4rqm2.js.map +0 -12
  323. package/dist/chunk-zmf3vhex.js +0 -10
  324. package/dist/chunk-zmf3vhex.js.map +0 -43
  325. package/dist/chunks/ThemeProvider-CbOx8IRl.js.map +0 -1
  326. /package/dist/{chunk-wbg2tza5.js.map → chunk-3fyhd641.js.map} +0 -0
  327. /package/dist/{chunk-5e22tm7m.js.map → chunk-bghxdjqv.js.map} +0 -0
  328. /package/dist/{chunk-65s834td.js.map → chunk-c48gag78.js.map} +0 -0
  329. /package/dist/{chunk-j7v7dft7.js.map → chunk-k6gvbvyw.js.map} +0 -0
  330. /package/dist/{chunk-c4jnxmf2.js.map → chunk-p0ccxfkq.js.map} +0 -0
  331. /package/dist/{chunk-3j6s5bmx.js.map → chunk-rvdsaqdv.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  // @bun
2
2
  class j{deliver=null;hooks;get started(){return this.deliver!==null}publish(b,g){this.deliver?.(b,g)}start(b,g){this.deliver=b,this.hooks=g}revoke(b){this.hooks?.onRevoke?.(b)}close(){this.deliver=null,this.hooks=void 0}}
3
- export{j as gi};
3
+ export{j as jj};
4
4
 
5
- //# debugId=08E8323A9167FBEB64756E2164756E21
5
+ //# debugId=635E2D7C66251E8B64756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "import type {\n BroadcastDeliver,\n BroadcastDriver,\n BroadcastDriverHooks,\n BroadcastRevocation,\n} from \"./BroadcastDriver\";\n\n/**\n * The default driver: an emit reaches the sockets of **this process only**.\n *\n * Right for one instance whose web processes also run the jobs and cron that\n * emit. Wrong as soon as there are two replicas, or a `gemi queue:work`\n * worker that emits: those frames reach nobody, with nothing to say so. Use\n * the Redis driver there.\n *\n * Before the HTTP server starts the transport, there is nobody to deliver to,\n * and `publish` drops the frame.\n */\nexport class MemoryBroadcastDriver implements BroadcastDriver {\n private deliver: BroadcastDeliver | null = null;\n private hooks: BroadcastDriverHooks | undefined;\n\n /** Whether the transport has started this driver. */\n get started(): boolean {\n return this.deliver !== null;\n }\n\n publish(topic: string, frame: string): void {\n this.deliver?.(topic, frame);\n }\n\n start(deliver: BroadcastDeliver, hooks?: BroadcastDriverHooks): void {\n this.deliver = deliver;\n this.hooks = hooks;\n }\n\n revoke(revocation: BroadcastRevocation): void {\n this.hooks?.onRevoke?.(revocation);\n }\n\n close(): void {\n this.deliver = null;\n this.hooks = undefined;\n }\n}\n"
6
6
  ],
7
7
  "mappings": ";AAkBO,MAAM,CAAiD,CACpD,QAAmC,KACnC,SAGJ,QAAO,EAAY,CACrB,OAAO,KAAK,UAAY,KAG1B,OAAO,CAAC,EAAe,EAAqB,CAC1C,KAAK,UAAU,EAAO,CAAK,EAG7B,KAAK,CAAC,EAA2B,EAAoC,CACnE,KAAK,QAAU,EACf,KAAK,MAAQ,EAGf,MAAM,CAAC,EAAuC,CAC5C,KAAK,OAAO,WAAW,CAAU,EAGnC,KAAK,EAAS,CACZ,KAAK,QAAU,KACf,KAAK,MAAQ,OAEjB",
8
- "debugId": "08E8323A9167FBEB64756E2164756E21",
8
+ "debugId": "635E2D7C66251E8B64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -29,6 +29,6 @@ export { h } from ${JSON.stringify("virtual:gemi-island-runtime")};
29
29
  import { hydrateRoot } from "react-dom/client";
30
30
  export ${z}
31
31
  `,Q='const d=document,c=JSON.parse(d.getElementById("gemi-islands").textContent),w=f=>(window.requestIdleCallback||setTimeout)(f),m=(e,o)=>{if(!e.g){e.g=1;import(o.s).then(x=>x.h(e,x.m[o.e])).catch(r=>console.error(r))}};for(const e of d.querySelectorAll("gemi-island")){const o=c.i[e.dataset.island];if(!o)continue;if(o.l=="eager")m(e,o);else if(o.l=="idle"||!window.IntersectionObserver||!e.children.length)w(()=>m(e,o));else{const v=new IntersectionObserver(n=>{if(n.some(x=>x.isIntersecting)){v.disconnect();m(e,o)}});for(const k of e.children)v.observe(k)}}';
32
- export{B as rj,F as sj,G as tj,J as uj,M as vj,Q as wj};
32
+ export{B as vk,F as wk,G as xk,J as yk,M as zk,Q as Ak};
33
33
 
34
- //# debugId=AE4637C298F0D39E64756E2164756E21
34
+ //# debugId=4480E01B0EE66D6864756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "/**\n * The browser side of islands, shared by the Vite plugin (which builds it), the\n * servers (which point the loader at it) and the tests.\n *\n * No imports: the Vite plugin is built on its own and the servers load it at\n * boot, so this file stays plain strings.\n */\n\n/**\n * The module that hydrates islands: React, `react-dom/client` and the small\n * `h(marker, Component)` below. A virtual module of gemi's Vite plugin that\n * every island entry imports, so the islands on a page share one copy of\n * React, in one chunk.\n */\nexport const ISLAND_RUNTIME_ID = \"virtual:gemi-island-runtime\";\n\n/** What `resolveId` turns `ISLAND_RUNTIME_ID` into (Vite's virtual-module convention). */\nexport const RESOLVED_ISLAND_RUNTIME_ID = `\\0${ISLAND_RUNTIME_ID}`;\n\n/**\n * The query that turns a module into its island entry: `Counter.tsx?gemi-island`\n * is a module of the plugin's that re-exports `Counter.tsx` as `m` next to the\n * runtime's `h`. It is what a static page imports for an island, and so it\n * is what the client manifest lists, keyed `app/…/Counter.tsx?gemi-island`,\n * with React and `react-dom/client` among its imports.\n */\nexport const ISLAND_ENTRY_QUERY = \"?gemi-island\";\n\n/** The island entry module for `file` (an absolute path or a root-relative URL). */\nexport function islandEntrySource(file: string) {\n return `import * as m from ${JSON.stringify(file)};\nexport { m };\nexport { h } from ${JSON.stringify(ISLAND_RUNTIME_ID)};\n`;\n}\n\n/**\n * `h(marker, Component)`: hydrates one `<gemi-island>` marker with the island's\n * component and the props the server serialised into `data-props`.\n *\n * The island's static children were rendered on the server into a\n * `<gemi-slot>` (the first one that belongs to this marker, not to an island\n * nested in it). They are handed back to the component as that same element\n * with the server's HTML, so hydration matches and React leaves them alone.\n *\n * `data-uid` is the `identifierPrefix` the server rendered the island with, so\n * `useId` agrees on both sides and two islands never share an id.\n *\n * Written as a function body with `createElement` and `hydrateRoot` free, so a\n * test can run it against real React without a bundler.\n */\nexport const ISLAND_HYDRATE_SOURCE = `function h(marker, Component) {\n if (typeof Component !== \"function\" && (typeof Component !== \"object\" || Component === null)) {\n throw new Error(\"gemi: island module has no component export for \" + marker.outerHTML.slice(0, 80));\n }\n const json = marker.getAttribute(\"data-props\");\n const props = json ? JSON.parse(json) : {};\n let slot = null;\n for (const candidate of marker.querySelectorAll(\"gemi-slot\")) {\n if (candidate.closest(\"gemi-island\") === marker) {\n slot = candidate;\n break;\n }\n }\n const children = slot\n ? [createElement(\"gemi-slot\", {\n style: { display: \"contents\" },\n suppressHydrationWarning: true,\n dangerouslySetInnerHTML: { __html: slot.innerHTML },\n })]\n : [];\n return hydrateRoot(marker, createElement(Component, props, ...children), {\n identifierPrefix: marker.getAttribute(\"data-uid\") || undefined,\n });\n}`;\n\n/** The runtime module's source, as the plugin serves and builds it. */\nexport const ISLAND_RUNTIME_SOURCE = `import { createElement } from \"react\";\nimport { hydrateRoot } from \"react-dom/client\";\nexport ${ISLAND_HYDRATE_SOURCE}\n`;\n\n/**\n * The island loader, inlined into a static document that uses islands.\n *\n * Kept byte-for-byte constant (the per-page island table travels in a\n * separate `<script type=\"application/json\">`, which a Content Security Policy\n * does not treat as script), so a strict policy can allow it by hash:\n * `script-src 'sha256-…'` with `ISLAND_LOADER_CSP_HASH`. Everything it loads\n * is a plain `import()` of a same-origin (or asset-base) file.\n *\n * The table is `{ i: [{ s: entry URL, e: export, l: load }] }` and each\n * marker's `data-island` indexes `i`. Per marker, on its schedule: import the\n * island's entry (the module as `m`, the runtime's `h`), then\n * `h(marker, m[export])`, which calls `hydrateRoot`. A failure is logged and\n * leaves the server-rendered markup in place.\n */\nexport const ISLAND_LOADER_SOURCE =\n 'const d=document,c=JSON.parse(d.getElementById(\"gemi-islands\").textContent),' +\n \"w=f=>(window.requestIdleCallback||setTimeout)(f),\" +\n \"m=(e,o)=>{if(!e.g){e.g=1;import(o.s).then(x=>x.h(e,x.m[o.e])).catch(r=>console.error(r))}};\" +\n 'for(const e of d.querySelectorAll(\"gemi-island\")){const o=c.i[e.dataset.island];if(!o)continue;' +\n 'if(o.l==\"eager\")m(e,o);else if(o.l==\"idle\"||!window.IntersectionObserver||!e.children.length)w(()=>m(e,o));' +\n \"else{const v=new IntersectionObserver(n=>{if(n.some(x=>x.isIntersecting)){v.disconnect();m(e,o)}});for(const k of e.children)v.observe(k)}}\";\n"
6
6
  ],
7
7
  "mappings": ";AAcO,IAAM,EAAoB,8BAGpB,EAA6B,kCAS7B,EAAqB,eAG3B,SAAS,CAAiB,CAAC,EAAc,CAC9C,MAAO,sBAAsB,KAAK,UAAU,CAAI;AAAA;AAAA,oBAE9B,KAAK,UAlBQ,6BAkBmB;AAAA,EAmB7C,IAAM,EAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0BxB,EAAwB;AAAA;AAAA,SAE5B;AAAA,EAkBI,EACX",
8
- "debugId": "AE4637C298F0D39E64756E2164756E21",
8
+ "debugId": "4480E01B0EE66D6864756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,5 +1,5 @@
1
1
  // @bun
2
2
  class m{name;cron;withoutOverlapping=!1;onOneServer=!1;shouldRun(){return!0}callback(f){}onTick(){}onComplete(){}static exp(f){return f}}
3
- export{m as Ac};
3
+ export{m as od};
4
4
 
5
- //# debugId=EE99C8F74FF5165364756E2164756E21
5
+ //# debugId=8721D599ADB028AA64756E2164756E21
@@ -5,6 +5,6 @@
5
5
  "// A cron expression accepted by `Bun.cron`: a 5-field expression\n// (`minute hour day-of-month month day-of-week`, interpreted in UTC) or one of\n// the nicknames below. The `string & {}` member keeps arbitrary expressions\n// assignable while still surfacing the nicknames in editor autocomplete.\nexport type CronExpression =\n | \"@yearly\"\n | \"@annually\"\n | \"@monthly\"\n | \"@weekly\"\n | \"@daily\"\n | \"@midnight\"\n | \"@hourly\"\n | (string & {});\n\nimport type { HeldLock } from \"../lock/LockManager\";\n\nexport type WithoutOverlapping =\n | boolean\n | {\n /**\n * The lock's lease, in milliseconds: how long it outlives an instance\n * that died holding it. Renewed every third of this while the tick\n * runs, so it does not limit how long a tick may take. Default five\n * minutes.\n */\n expiresAfter?: number;\n };\n\nexport class CronJob {\n name: string;\n cron: CronExpression;\n\n /**\n * Skips a tick while an earlier tick of this job is still running, on this\n * instance or any other sharing the queue's storage. With the database\n * queue driver that is a lock row in `gemi_locks`; with the memory driver\n * it only covers this process.\n *\n * The lock is held across `onTick`, `callback` and `onComplete`, and handed\n * to `callback` as its argument. If its lease is lost while the tick runs\n * (the instance stalled past `expiresAfter`), `lock.lost` aborts and the\n * scheduler logs it. Writes that must not land after that go through\n * `lock.fence(...)`.\n *\n * It does not stop a second instance from running the same tick after the\n * first one finished; `onOneServer` does.\n */\n withoutOverlapping: WithoutOverlapping = false;\n\n /**\n * Runs each tick on one instance only, across every instance sharing the\n * queue's storage: the first to claim the tick's minute runs it, the others\n * skip it. Assumes the instances' clocks agree to well within a minute.\n */\n onOneServer = false;\n\n /**\n * Decides whether this tick happens at all. Evaluated once per tick, before\n * anything else; returning `false` skips `onTick`, `callback` and\n * `onComplete` alike.\n *\n * ### Why this is a member and not a line the job writes for itself\n *\n * A job that reports outward — mails a digest, opens a Sentry issue, pings a\n * channel — must not fire from a laptop, and the guard for that has to cover\n * the whole tick. There was nowhere to write it. gemi calls `onTick` and\n * `onComplete` *outside* `callback`, so a guard placed in a lifecycle hook\n * only stops the hook it lives in: an early `return` at the top of `callback`\n * leaves the job still announcing that it started and still announcing that\n * it finished, which for an outward-reporting job is most of the damage.\n *\n * The only construct that covered every hook was an abstract base class that\n * shadowed `callback` with the guard and renamed the real body to `run()` —\n * and that costs the app the framework's own vocabulary. A job then reads\n * `async run()` while every page of the documentation reads `async\n * callback()`, so the next person to follow the docs writes a `callback` the\n * base class never calls: no error, no output, a job that silently does\n * nothing. Forgetting *this* member fails the other way round — the job runs,\n * which is what it did before anyone asked for a gate.\n *\n * ### What it gates\n *\n * Work, not registration. A job whose gate returns `false` is still\n * scheduled, still holds its `Bun.cron` handle, and still appears in\n * `app(Scheduler).jobs` — \"is it scheduled\" and \"will it do anything\" are\n * different questions and the second one is answered per tick. That is also\n * why this is a method: a field would be read once, when the scheduler\n * constructs the job at boot, and would freeze whatever it saw then.\n *\n * A gate that throws is logged and treated as `false`. Cron work recurs, so\n * a skipped tick is recovered by the next one, while an email sent from the\n * wrong machine is not recovered at all.\n *\n * ### Composing with a base class\n *\n * Nothing here calls `super` for you. A subclass that overrides `shouldRun`\n * for its own reason silently replaces whatever its base was gating on, so\n * narrow rather than redefine:\n *\n * ```typescript\n * async shouldRun() {\n * return (await super.shouldRun()) && this.hasSubscribers();\n * }\n * ```\n *\n * A shared base should annotate its return type as written here rather than\n * let it be inferred: a base returning a plain `boolean` narrows the\n * signature its subclasses inherit, and the `await super` above then does not\n * typecheck against it.\n */\n shouldRun(): Promise<boolean> | boolean {\n return true;\n }\n\n /**\n * The tick's work. `lock` is the `withoutOverlapping` lock when the job\n * declares one.\n */\n callback(_lock?: HeldLock): Promise<void> | void {}\n onTick(): Promise<void> | void {}\n onComplete(): Promise<void> | void {}\n\n static exp(expression: CronExpression) {\n return expression;\n }\n}\n"
6
6
  ],
7
7
  "mappings": ";AA4BO,MAAM,CAAQ,CACnB,KACA,KAiBA,mBAAyC,GAOzC,YAAc,GAwDd,SAAS,EAA+B,CACtC,MAAO,GAOT,QAAQ,CAAC,EAAwC,EACjD,MAAM,EAAyB,EAC/B,UAAU,EAAyB,QAE5B,IAAG,CAAC,EAA4B,CACrC,OAAO,EAEX",
8
- "debugId": "EE99C8F74FF5165364756E2164756E21",
8
+ "debugId": "8721D599ADB028AA64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{Nj as P}from"./chunk-17dndh5z.js";class F{provider="custom";supportsIdempotencyKey=!1;async deliver(j){let x=await this.send(j);return{ok:Boolean(x),id:null}}}class G extends F{apiKey;provider="resend";supportsIdempotencyKey=!0;constructor(j=process.env.RESEND_API_KEY){super();this.apiKey=j}async send(j){return(await this.deliver(j)).ok}async deliver(j){let{Resend:x}=await import("./chunk-qhz0x97z.js"),A=new x(this.apiKey),{idempotencyKey:z,...N}=j,{data:H,error:B}=await A.emails.send(N,z?{idempotencyKey:z}:void 0);if(B)return console.error(B),{ok:!1,id:null,error:B};if(H)return{ok:!0,id:H.id??null};return{ok:!1,id:null}}}function Z(j){return j}function J(){return{driver:new G,headers:{},filterRecipients:(j)=>j}}function Q(j){for(let x=j;x;x=Object.getPrototypeOf(x)){let A=Object.prototype.hasOwnProperty.call(x,"deliver"),z=Object.prototype.hasOwnProperty.call(x,"send");if(A)return!1;if(z)return!0}return!0}async function M(j,x){if(typeof j.deliver==="function"&&!Q(j))return j.deliver(x);return{ok:Boolean(await j.send(x)),id:null}}class U{static token="mail";driver;headers;recipientFilter;constructor(j={}){let x=J();this.driver=j.driver??x.driver,this.headers=j.headers??x.headers,this.recipientFilter=j.filterRecipients??x.filterRecipients}filterRecipients(j){return this.recipientFilter(j)}send(j){return this.driver.send(j)}async deliver(j){return M(this.driver,j)}}
3
- export{F as $i,G as aj,Z as bj,J as cj,M as dj,U as ej};
2
+ import{Sk as P}from"./chunk-89swy5aq.js";class F{provider="custom";supportsIdempotencyKey=!1;async deliver(j){let x=await this.send(j);return{ok:Boolean(x),id:null}}}class G extends F{apiKey;provider="resend";supportsIdempotencyKey=!0;constructor(j=process.env.RESEND_API_KEY){super();this.apiKey=j}async send(j){return(await this.deliver(j)).ok}async deliver(j){let{Resend:x}=await import("./chunk-avfntxm1.js"),A=new x(this.apiKey),{idempotencyKey:z,...N}=j,{data:H,error:B}=await A.emails.send(N,z?{idempotencyKey:z}:void 0);if(B)return console.error(B),{ok:!1,id:null,error:B};if(H)return{ok:!0,id:H.id??null};return{ok:!1,id:null}}}function Z(j){return j}function J(){return{driver:new G,headers:{},filterRecipients:(j)=>j}}function Q(j){for(let x=j;x;x=Object.getPrototypeOf(x)){let A=Object.prototype.hasOwnProperty.call(x,"deliver"),z=Object.prototype.hasOwnProperty.call(x,"send");if(A)return!1;if(z)return!0}return!0}async function M(j,x){if(typeof j.deliver==="function"&&!Q(j))return j.deliver(x);return{ok:Boolean(await j.send(x)),id:null}}class U{static token="mail";driver;headers;recipientFilter;constructor(j={}){let x=J();this.driver=j.driver??x.driver,this.headers=j.headers??x.headers,this.recipientFilter=j.filterRecipients??x.filterRecipients}filterRecipients(j){return this.recipientFilter(j)}send(j){return this.driver.send(j)}async deliver(j){return M(this.driver,j)}}
3
+ export{F as dk,G as ek,Z as fk,J as gk,M as hk,U as ik};
4
4
 
5
- //# debugId=3C361AE8506E209B64756E2164756E21
5
+ //# debugId=50884B2622F8A14764756E2164756E21
@@ -9,6 +9,6 @@
9
9
  "import { mailConfigDefaults, type MailConfig } from \"./config\";\nimport { deliverThrough } from \"./deliver\";\nimport type { EmailDriver } from \"./drivers/EmailDriver\";\nimport type { EmailDeliveryResult, SendEmailParams } from \"./drivers/types\";\n\nexport class MailManager {\n static token = \"mail\";\n\n readonly driver: EmailDriver;\n readonly headers: Record<string, string>;\n\n private readonly recipientFilter: NonNullable<MailConfig[\"filterRecipients\"]>;\n\n constructor(config: MailConfig = {}) {\n const defaults = mailConfigDefaults();\n\n this.driver = config.driver ?? defaults.driver;\n this.headers = config.headers ?? defaults.headers;\n this.recipientFilter = config.filterRecipients ?? defaults.filterRecipients;\n }\n\n filterRecipients(emails: string[]): Promise<Array<string>> | Array<string> {\n return this.recipientFilter(emails);\n }\n\n send(params: SendEmailParams) {\n return this.driver.send(params);\n }\n\n /** Like `send`, but reports the outcome and the provider's message id. */\n async deliver(params: SendEmailParams): Promise<EmailDeliveryResult> {\n // A driver that doesn't extend `EmailDriver`, or a subclass that only\n // overrides `send`, is called through `send`.\n return deliverThrough(this.driver, params);\n }\n}\n"
10
10
  ],
11
11
  "mappings": ";yCAEO,MAAe,CAAY,CAKvB,SAAmB,SAMnB,uBAAkC,QASrC,QAAO,CAAC,EAAuD,CACnE,IAAM,EAAK,MAAM,KAAK,KAAK,CAAM,EACjC,MAAO,CAAE,GAAI,QAAQ,CAAE,EAAG,GAAI,IAAK,EAEvC,CCvBO,MAAM,UAAqB,CAAY,CAIxB,OAHF,SAAW,SACX,uBAAyB,GAE3C,WAAW,CAAS,EAAS,QAAQ,IAAI,eAAgB,CACvD,MAAM,EADY,mBAId,KAAI,CAAC,EAAyB,CAClC,OAAQ,MAAM,KAAK,QAAQ,CAAM,GAAG,QAGvB,QAAO,CAAC,EAAuD,CAO5E,IAAQ,UAAW,KAAa,+BAC1B,EAAS,IAAI,EAAO,KAAK,MAAM,GAG7B,oBAAmB,GAAY,GAC/B,OAAM,SAAU,MAAM,EAAO,OAAO,KAC1C,EACA,EAAiB,CAAE,gBAAe,EAAI,MACxC,EAEA,GAAI,EAEF,OADA,QAAQ,MAAM,CAAK,EACZ,CAAE,GAAI,GAAO,GAAI,KAAM,OAAM,EAGtC,GAAI,EACF,MAAO,CAAE,GAAI,GAAM,GAAI,EAAK,IAAM,IAAK,EAGzC,MAAO,CAAE,GAAI,GAAO,GAAI,IAAK,EAEjC,CC7BO,SAAS,CAAgB,CAAC,EAAgC,CAC/D,OAAO,EAGF,SAAS,CAAkB,EAAyB,CACzD,MAAO,CACL,OAAQ,IAAI,EACZ,QAAS,CAAC,EACV,iBAAkB,CAAC,IAAW,CAChC,ECVF,SAAS,CAAgB,CAAC,EAAgB,CACxC,QAAS,EAAQ,EAAQ,EAAO,EAAQ,OAAO,eAAe,CAAK,EAAG,CACpE,IAAM,EAAa,OAAO,UAAU,eAAe,KAAK,EAAO,SAAS,EAClE,EAAU,OAAO,UAAU,eAAe,KAAK,EAAO,MAAM,EAClE,GAAI,EAAY,MAAO,GACvB,GAAI,EAAS,MAAO,GAEtB,MAAO,GAOT,eAAsB,CAAc,CAClC,EACA,EAC8B,CAC9B,GAAI,OAAO,EAAO,UAAY,YAAc,CAAC,EAAiB,CAAM,EAClE,OAAO,EAAO,QAAQ,CAAM,EAE9B,MAAO,CAAE,GAAI,QAAQ,MAAM,EAAO,KAAK,CAAM,CAAC,EAAG,GAAI,IAAK,EC7BrD,MAAM,CAAY,OAChB,OAAQ,OAEN,OACA,QAEQ,gBAEjB,WAAW,CAAC,EAAqB,CAAC,EAAG,CACnC,IAAM,EAAW,EAAmB,EAEpC,KAAK,OAAS,EAAO,QAAU,EAAS,OACxC,KAAK,QAAU,EAAO,SAAW,EAAS,QAC1C,KAAK,gBAAkB,EAAO,kBAAoB,EAAS,iBAG7D,gBAAgB,CAAC,EAA0D,CACzE,OAAO,KAAK,gBAAgB,CAAM,EAGpC,IAAI,CAAC,EAAyB,CAC5B,OAAO,KAAK,OAAO,KAAK,CAAM,OAI1B,QAAO,CAAC,EAAuD,CAGnE,OAAO,EAAe,KAAK,OAAQ,CAAM,EAE7C",
12
- "debugId": "3C361AE8506E209B64756E2164756E21",
12
+ "debugId": "50884B2622F8A14764756E2164756E21",
13
13
  "names": []
14
14
  }
@@ -1,5 +1,5 @@
1
1
  // @bun
2
2
  function E(z){return z}function f(){return{url:process.env.DATABASE_URL,dialect:void 0,options:void 0,slowTransactionThreshold:b,connections:void 0}}var b=2000;class Q extends Error{constructor(z){super(`Could not infer a database dialect from "${z}". Expected a URL starting with postgres://, postgresql://, mysql://, mariadb://, `+"sqlite://, or file: \u2014 or a SQLite path such as ./dev.db or :memory:.");this.name="UnknownDatabaseUrlError"}}class j extends Error{constructor(z){super(z===void 0||z==="default"?"No database URL configured. Set the DATABASE_URL environment variable, or set `url` in app/config/database.ts.":`The "${z}" database connection has no \`url\`. Set one under \`connections.${z}\` in app/config/database.ts.`);this.name="MissingDatabaseUrlError"}}var L={"postgres:":"postgres","postgresql:":"postgres","mysql:":"mysql","mariadb:":"mariadb","sqlite:":"sqlite","file:":"sqlite"},D=[".db",".sqlite",".sqlite3"];function F(z){let B=z.trim();if(B==="")throw new Q(z);if(B===":memory:")return"sqlite";let G=B.indexOf(":");if(G!==-1){let J=B.slice(0,G+1).toLowerCase(),K=L[J];if(K)return K}if(S(B))return"sqlite";throw new Q(z)}function S(z){if(z.startsWith("./")||z.startsWith("../")||z.startsWith("/"))return!0;let B=z.toLowerCase();return D.some((G)=>B.endsWith(G))}function p(z){return z==="sqlite"}function m(z){return z==="mysql"||z==="mariadb"}import{existsSync as g,readFileSync as y,realpathSync as I,statSync as U}from"fs";import{isAbsolute as w,join as H,resolve as q}from"path";var O=H("prisma","schema.prisma");class R extends Error{constructor(z,B,G){super(`"${z}" now resolves to ${B}, which is where Prisma migrates it. gemi used to open ${G} instead, and that file holds data \u2014 so `+`opening the resolved one would quietly leave it behind. gemi will not choose. Move ${G} onto ${B} if it is the database you want, or point DATABASE_URL at an absolute path to say so explicitly.`);this.name="AmbiguousSqlitePathError"}}function C(z){let B=z.trim(),G="",J=B;for(let K of["file://","file:","sqlite://","sqlite:"])if(B.slice(0,K.length).toLowerCase()===K){G=B.slice(0,K.length),J=B.slice(K.length);break}if(J===":memory:"||J.startsWith(":memory:?"))return null;return{prefix:G,file:J}}function _(z,B,G=process.cwd()){if(B!=="sqlite")return{url:z};let J=C(z);if(!J||J.file==="")return{url:z};if(w(J.file))return{url:z};let K=J.file.indexOf("?"),Z=K===-1?J.file:J.file.slice(0,K),$=K===-1?"":J.file.slice(K),X=H(G,"prisma");if(!T(G,z))return{url:z};let W=q(G,Z),Y=q(X,Z);if(W===Y)return{url:z};return{url:`${J.prefix}${Y}${$}`,moved:{from:W,to:Y}}}function T(z,B){let G=H(z,O);if(!g(G))return!1;let J;try{J=y(G,"utf8")}catch{return!1}let Z=J.replace(/^\s*\/\/.*$/gm,"").match(/datasource\s+\w+\s*\{([\s\S]*?)\}/);if(!Z)return!1;let $=Z[1];if(!/provider\s*=\s*["']sqlite["']/.test($))return!1;let X=$.match(/url\s*=\s*env\(\s*["']([^"']+)["']\s*\)/);if(X){let Y=process.env[X[1]];return typeof Y==="string"&&Y.trim()===B.trim()}let W=$.match(/url\s*=\s*["']([^"']+)["']/);return W?W[1].trim()===B.trim():!1}function k(z){try{if(I(z.from)===I(z.to))return null}catch{}try{let B=U(z.from);return B.isFile()&&B.size>0?z.from:null}catch{return null}}var{SQL:A}=globalThis.Bun;var V="default";class P extends Error{constructor(z,B){super(`No database connection named "${z}". Configured: ${B.map((G)=>`"${G}"`).join(", ")}. Declare it under \`connections\` in app/config/database.ts.`);this.name="UnknownConnectionError"}}class x extends Error{constructor(z){super(`"${z}" is the name of the connection declared by the top-level \`url\` and \`options\`, so it cannot also appear under \`connections\`. Rename it, or move its settings up to the top level.`);this.name="ReservedConnectionNameError"}}class N extends Error{open;requested;constructor(z,B){super(`A transaction is open on the "${z}" connection, and this statement names "${B}". A transaction cannot span two connections: the statement would run outside it and stay committed when the transaction rolls back. Move this query outside the transaction, or run the whole unit on one connection.`);this.open=z;this.requested=B;this.name="CrossConnectionTransactionError"}}class M{name;config;sql;dialect;url;ready;constructor(z,B={}){this.name=z;this.config=B;let G=B.url;if(!G)throw new j(z);this.dialect=B.dialect??F(G);let J=_(G,this.dialect);if(J.moved){let K=k(J.moved);if(K)throw new R(G,J.moved.to,K)}this.url=J.url,this.sql=B.options?new A(this.url,B.options):new A(this.url),this.ready=this.configure()}async configure(){if(this.dialect!=="sqlite")return;await this.sql.unsafe("pragma foreign_keys = ON")}get query(){return this.sql}async close(){this.ready.catch(()=>{}),await this.sql.close()}}class h{config;static token="database";name=V;pools=new Map;ready;constructor(z={}){this.config=z;let{connections:B={},...G}=z;this.pools.set(V,new M(V,G));try{this.build(B,G.slowTransactionThreshold)}catch(J){for(let K of this.pools.values())K.ready.catch(()=>{}),K.close().catch(()=>{});throw J}this.ready=Promise.all([...this.pools.values()].map((J)=>J.ready)).then(()=>{return})}build(z,B){for(let[G,J]of Object.entries(z)){if(G===V)throw new x(G);this.pools.set(G,new M(G,{slowTransactionThreshold:B,...J}))}}connection(z=V){if(z===V)return this;let B=this.pools.get(z);if(!B)throw new P(z,this.connectionNames);return B}get connectionNames(){return[...this.pools.keys()]}get sql(){return this.default.sql}get dialect(){return this.default.dialect}get url(){return this.default.url}get query(){return this.sql}async close(){this.ready.catch(()=>{}),await Promise.all([...this.pools.values()].map((z)=>z.close()))}get default(){return this.pools.get(V)}}
3
- export{E as Ci,f as Di,b as Ei,Q as Fi,j as Gi,F as Hi,p as Ii,m as Ji,R as Ki,V as Li,P as Mi,x as Ni,N as Oi,M as Pi,h as Qi};
3
+ export{E as Gj,f as Hj,b as Ij,Q as Jj,j as Kj,F as Lj,p as Mj,m as Nj,R as Oj,V as Pj,P as Qj,x as Rj,N as Sj,M as Tj,h as Uj};
4
4
 
5
- //# debugId=51CC9D8E8147A5B264756E2164756E21
5
+ //# debugId=77D601EE2A4089BB64756E2164756E21
@@ -9,6 +9,6 @@
9
9
  "import type { SQL } from \"bun\";\nimport type { ConnectionConfig, DatabaseConfig } from \"./config\";\nimport {\n Connection,\n DEFAULT_CONNECTION,\n ReservedConnectionNameError,\n UnknownConnectionError,\n type DatabaseConnection,\n} from \"./Connection\";\nimport type { Dialect } from \"./dialect\";\n\n// Wraps Bun's `SQL` client. Bun ships one client that speaks SQLite, Postgres,\n// MySQL and MariaDB, so gemi does not need a driver per database — it needs to\n// know *which* one is in use, which is what `dialect` carries.\n//\n// Safe to build eagerly: Bun's client connects on the first query, not at\n// construction. (`RedisManager` used to be cited here as the parallel case. As\n// of #403 it builds its client in a memoizing getter instead — not because\n// eager construction was unsafe, but because naming Bun's `RedisClient` at\n// module scope is what made `gemi/services` unloadable off Bun. `Connection`\n// still imports `SQL` as a value for the same reason, which is the remaining\n// half of #396.) It is still bound as a lazy singleton,\n// so an app that never touches the database never resolves it and never has to\n// have DATABASE_URL set.\n//\n// Since #327 it holds *connections*, plural: the top-level `url` and `options`\n// build the one called `\"default\"`, and each key under `connections` builds\n// another. What it does not do is decide which one a query uses — that is the\n// ORM's ambient scope and the `DB` facade, because the choice is per query\n// rather than per application. See `connection` below.\nexport class DatabaseManager implements DatabaseConnection {\n static token = \"database\";\n\n /**\n * This object *is* the default connection, so it answers to the name.\n *\n * Not a formality: `connection(\"default\")` returns `this` rather than the\n * `Connection` in the map, which is what keeps every existing reader —\n * `DB.sql`, `db.dialect`, and the test harnesses that wrap the manager in a\n * Proxy to count statements — looking at the same object the ORM executes\n * through. A second object for the default pool would have quietly bypassed\n * all of them while every test still passed.\n */\n public readonly name = DEFAULT_CONNECTION;\n\n /**\n * Every pool this manager owns, keyed by name and including the default one.\n *\n * Private because the map is the manager's bookkeeping — `connection()` is\n * the way in, and it is the only path that knows the default is `this`.\n */\n private readonly pools = new Map<string, Connection>();\n\n /**\n * Resolves once **every** connection has been configured, or rejects if one\n * could not be. Only SQLite has anything to do; elsewhere it is already\n * resolved.\n *\n * All of them rather than the default alone, because the thing a caller waits\n * on this for — SQLite's `pragma foreign_keys` — is per client, so a second\n * SQLite connection has its own and a caller awaiting one manager-level\n * promise means all of them.\n */\n public readonly ready: Promise<void>;\n\n constructor(public config: DatabaseConfig = {}) {\n const { connections = {}, ...primary } = config;\n\n // The default first, so a `MissingDatabaseUrlError` from a missing\n // `DATABASE_URL` still comes out of construction the way it always has,\n // rather than after a named connection has already opened a client.\n this.pools.set(\n DEFAULT_CONNECTION,\n new Connection(DEFAULT_CONNECTION, primary),\n );\n\n // A connection that is built before the one whose config is wrong is still\n // a live client with an open handle, and on the throwing path nothing else\n // will ever hold it: the manager never becomes a value, so nobody can call\n // `close`. Left alone, the pragma this constructor issues for a SQLite\n // connection settles against a client being torn down and surfaces as an\n // unhandled rejection with no configuration error anywhere near it.\n try {\n this.build(connections, primary.slowTransactionThreshold);\n } catch (error) {\n for (const pool of this.pools.values()) {\n // The in-flight configuration first: it is what rejects when the client\n // under it goes away, and this is the only place that can say the\n // rejection was expected.\n pool.ready.catch(() => {});\n pool.close().catch(() => {});\n }\n throw error;\n }\n\n // Built once here rather than derived per read, so that a connection whose\n // configuration rejects produces one unhandled rejection at most instead of\n // a fresh one per access.\n this.ready = Promise.all(\n [...this.pools.values()].map((pool) => pool.ready),\n ).then(() => undefined);\n }\n\n private build(\n connections: Record<string, ConnectionConfig>,\n slowTransactionThreshold: number | false | undefined,\n ): void {\n for (const [name, connection] of Object.entries(connections)) {\n if (name === DEFAULT_CONNECTION)\n throw new ReservedConnectionNameError(name);\n\n this.pools.set(\n name,\n new Connection(name, {\n // The threshold is the one setting a named connection is likely to\n // want *unchanged*: it is a development diagnostic about holding a\n // pooled connection, and that concern does not stop applying because\n // the pool has a name. `url`, `options` and `dialect` are deliberately\n // not inherited — a connection that borrowed the default's URL by\n // omission would be a second pool onto the same database created by a\n // typo in a key.\n slowTransactionThreshold,\n ...connection,\n }),\n );\n }\n }\n\n /**\n * The connection called `name`, or the default one when called with nothing.\n *\n * Throws rather than falling back to the default for an unknown name, and\n * that is the important half. A fallback would make `Model.on(\"analitycs\")`\n * run on the hot path — the exact pool the caller was trying to stay off —\n * and the only symptom would be the incident it was meant to prevent,\n * arriving weeks later with nothing pointing back at the typo.\n */\n connection(name: string = DEFAULT_CONNECTION): DatabaseConnection {\n // `this`, not `pools.get(DEFAULT_CONNECTION)` — see `name` above.\n if (name === DEFAULT_CONNECTION) return this;\n\n const found = this.pools.get(name);\n if (!found) throw new UnknownConnectionError(name, this.connectionNames);\n return found;\n }\n\n /** Every configured name, default first. For error messages and diagnostics. */\n get connectionNames(): string[] {\n return [...this.pools.keys()];\n }\n\n /**\n * The default connection's client. Unchanged in meaning: an application that\n * never names a connection sees exactly what it saw before #327.\n */\n get sql(): SQL {\n return this.default.sql;\n }\n\n get dialect(): Dialect {\n return this.default.dialect;\n }\n\n get url(): string {\n return this.default.url;\n }\n\n // Escape hatch matching Bun's own API, so `db.query` reads like `sql` does in\n // Bun's docs: db.query`select * from users where id = ${id}`\n get query(): SQL {\n return this.sql;\n }\n\n /** Closes every connection, not only the default one. */\n async close(): Promise<void> {\n // The aggregate promise needs the same treatment each connection's own\n // `ready` gets in `Connection.close` — it is derived from them, so a\n // rejection there arrives here as a second, separately unhandled one.\n this.ready.catch(() => {});\n await Promise.all([...this.pools.values()].map((pool) => pool.close()));\n }\n\n private get default(): Connection {\n return this.pools.get(DEFAULT_CONNECTION)!;\n }\n}\n"
10
10
  ],
11
11
  "mappings": "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",
12
- "debugId": "51CC9D8E8147A5B264756E2164756E21",
12
+ "debugId": "77D601EE2A4089BB64756E2164756E21",
13
13
  "names": []
14
14
  }