gemi 0.116.0 → 0.118.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 (355) hide show
  1. package/dist/ai/index.js +2 -2
  2. package/dist/ai/index.js.map +1 -1
  3. package/dist/app/index.js +2 -2
  4. package/dist/app/index.js.map +1 -1
  5. package/dist/auth/AuthServiceProvider.d.ts.map +1 -1
  6. package/dist/auth/config.d.ts +27 -0
  7. package/dist/auth/config.d.ts.map +1 -1
  8. package/dist/auth/connections/ConnectionManager.d.ts +133 -0
  9. package/dist/auth/connections/ConnectionManager.d.ts.map +1 -0
  10. package/dist/auth/connections/ConnectionStore.d.ts +146 -0
  11. package/dist/auth/connections/ConnectionStore.d.ts.map +1 -0
  12. package/dist/auth/connections/ConnectionsController.d.ts +23 -0
  13. package/dist/auth/connections/ConnectionsController.d.ts.map +1 -0
  14. package/dist/auth/connections/OAuthConnectionProvider.d.ts +105 -0
  15. package/dist/auth/connections/OAuthConnectionProvider.d.ts.map +1 -0
  16. package/dist/auth/connections/errors.d.ts +32 -0
  17. package/dist/auth/connections/errors.d.ts.map +1 -0
  18. package/dist/auth/oauth/oauthState.d.ts +15 -2
  19. package/dist/auth/oauth/oauthState.d.ts.map +1 -1
  20. package/dist/auth/routes.d.ts +13 -0
  21. package/dist/auth/routes.d.ts.map +1 -1
  22. package/dist/bin/orm/emit.d.ts.map +1 -1
  23. package/dist/bin/orm-generator.js +51 -4
  24. package/dist/bin/orm-generator.js.map +4 -4
  25. package/dist/bun/plugin.js +2 -2
  26. package/dist/bun/plugin.js.map +1 -1
  27. package/dist/bun/preload.js +2 -2
  28. package/dist/bun/preload.js.map +1 -1
  29. package/dist/{chunk-2tzm58j3.js → chunk-01ehxca0.js} +2 -2
  30. package/dist/{chunk-2tzm58j3.js.map → chunk-01ehxca0.js.map} +1 -1
  31. package/dist/chunk-0gtyects.js +10 -0
  32. package/dist/{chunk-yf1njzd5.js.map → chunk-0gtyects.js.map} +6 -5
  33. package/dist/{chunk-15c2vgaf.js → chunk-1m3hvy3q.js} +2 -2
  34. package/dist/{chunk-15c2vgaf.js.map → chunk-1m3hvy3q.js.map} +1 -1
  35. package/dist/{chunk-6cx8ncd4.js → chunk-1z1rj2zq.js} +3 -3
  36. package/dist/{chunk-6cx8ncd4.js.map → chunk-1z1rj2zq.js.map} +1 -1
  37. package/dist/{chunk-5stgtwqw.js → chunk-2bja99cq.js} +2 -2
  38. package/dist/{chunk-5stgtwqw.js.map → chunk-2bja99cq.js.map} +1 -1
  39. package/dist/{chunk-n672d4g8.js → chunk-30xxc6r7.js} +2 -2
  40. package/dist/{chunk-n672d4g8.js.map → chunk-30xxc6r7.js.map} +1 -1
  41. package/dist/{chunk-qjhw8nje.js → chunk-33s2xqv1.js} +1 -1
  42. package/dist/{chunk-4088szy9.js → chunk-39kyz4k6.js} +3 -3
  43. package/dist/{chunk-4088szy9.js.map → chunk-39kyz4k6.js.map} +1 -1
  44. package/dist/chunk-3nf95j9e.js +5 -0
  45. package/dist/{chunk-1q9kd20m.js.map → chunk-3nf95j9e.js.map} +1 -1
  46. package/dist/chunk-3zxfd7pn.js +14 -0
  47. package/dist/{chunk-pn8v6fj2.js.map → chunk-3zxfd7pn.js.map} +11 -6
  48. package/dist/{chunk-pyk3gzvc.js → chunk-453rmkpm.js} +2 -2
  49. package/dist/{chunk-pyk3gzvc.js.map → chunk-453rmkpm.js.map} +1 -1
  50. package/dist/chunk-47h12eme.js +57 -0
  51. package/dist/{chunk-ms9k0rx6.js.map → chunk-47h12eme.js.map} +15 -11
  52. package/dist/chunk-490sbcma.js +5 -0
  53. package/dist/chunk-490sbcma.js.map +12 -0
  54. package/dist/{chunk-kqxdsv22.js → chunk-4c1kdd8p.js} +2 -2
  55. package/dist/{chunk-kqxdsv22.js.map → chunk-4c1kdd8p.js.map} +1 -1
  56. package/dist/{chunk-jdhdrr2k.js → chunk-5cgq9c43.js} +2 -2
  57. package/dist/{chunk-jdhdrr2k.js.map → chunk-5cgq9c43.js.map} +1 -1
  58. package/dist/{chunk-9n1hx3mq.js → chunk-5dbpgyrx.js} +3 -3
  59. package/dist/{chunk-9n1hx3mq.js.map → chunk-5dbpgyrx.js.map} +1 -1
  60. package/dist/{chunk-eqse2m6n.js → chunk-5ses4tcz.js} +2 -2
  61. package/dist/{chunk-eqse2m6n.js.map → chunk-5ses4tcz.js.map} +1 -1
  62. package/dist/{chunk-2z1981d0.js → chunk-675kzd7z.js} +2 -2
  63. package/dist/{chunk-2z1981d0.js.map → chunk-675kzd7z.js.map} +1 -1
  64. package/dist/{chunk-p1aqq0ga.js → chunk-6ggmk2eg.js} +3 -3
  65. package/dist/{chunk-p1aqq0ga.js.map → chunk-6ggmk2eg.js.map} +1 -1
  66. package/dist/{chunk-mazznq15.js → chunk-76p0rf4d.js} +3 -3
  67. package/dist/{chunk-mazznq15.js.map → chunk-76p0rf4d.js.map} +1 -1
  68. package/dist/{chunk-41da9628.js → chunk-8t6dwwz6.js} +1 -1
  69. package/dist/{chunk-zyt2w03d.js → chunk-8wcpxm41.js} +2 -2
  70. package/dist/{chunk-zyt2w03d.js.map → chunk-8wcpxm41.js.map} +1 -1
  71. package/dist/chunk-9pkj7sk6.js +50 -0
  72. package/dist/chunk-9pkj7sk6.js.map +10 -0
  73. package/dist/{chunk-jmpw6bqz.js → chunk-a1qt8aky.js} +2 -2
  74. package/dist/{chunk-jmpw6bqz.js.map → chunk-a1qt8aky.js.map} +1 -1
  75. package/dist/{chunk-frerzsxq.js → chunk-a22h5cby.js} +2 -2
  76. package/dist/{chunk-frerzsxq.js.map → chunk-a22h5cby.js.map} +1 -1
  77. package/dist/{chunk-e573yxpq.js → chunk-aedkrck1.js} +3 -3
  78. package/dist/{chunk-e573yxpq.js.map → chunk-aedkrck1.js.map} +1 -1
  79. package/dist/{chunk-vxm6yevm.js → chunk-aqpaw4jq.js} +2 -2
  80. package/dist/{chunk-vxm6yevm.js.map → chunk-aqpaw4jq.js.map} +1 -1
  81. package/dist/{chunk-aeh67ynz.js → chunk-bgwtdbfw.js} +3 -3
  82. package/dist/{chunk-aeh67ynz.js.map → chunk-bgwtdbfw.js.map} +1 -1
  83. package/dist/{chunk-tw5kwbx4.js → chunk-bz8xssrc.js} +2 -2
  84. package/dist/{chunk-tw5kwbx4.js.map → chunk-bz8xssrc.js.map} +1 -1
  85. package/dist/{chunk-tzm3c7n6.js → chunk-cte6ysqd.js} +4 -4
  86. package/dist/{chunk-tzm3c7n6.js.map → chunk-cte6ysqd.js.map} +1 -1
  87. package/dist/{chunk-qsrcdzan.js → chunk-cvfg88cx.js} +3 -3
  88. package/dist/{chunk-qsrcdzan.js.map → chunk-cvfg88cx.js.map} +1 -1
  89. package/dist/{chunk-1vzks22y.js → chunk-d806cy7p.js} +2 -2
  90. package/dist/{chunk-1vzks22y.js.map → chunk-d806cy7p.js.map} +1 -1
  91. package/dist/{chunk-6chz1ktz.js → chunk-de4t48j9.js} +3 -3
  92. package/dist/{chunk-6chz1ktz.js.map → chunk-de4t48j9.js.map} +1 -1
  93. package/dist/{chunk-mqfzdfnz.js → chunk-dwpn6fze.js} +2 -2
  94. package/dist/{chunk-mqfzdfnz.js.map → chunk-dwpn6fze.js.map} +1 -1
  95. package/dist/{chunk-vbdty91k.js → chunk-ebret82e.js} +3 -3
  96. package/dist/{chunk-vbdty91k.js.map → chunk-ebret82e.js.map} +1 -1
  97. package/dist/chunk-eke2frrm.js +9 -0
  98. package/dist/{chunk-hytt9qyj.js.map → chunk-eke2frrm.js.map} +3 -4
  99. package/dist/{chunk-yer1r3t3.js → chunk-epvpmakp.js} +2 -2
  100. package/dist/{chunk-yer1r3t3.js.map → chunk-epvpmakp.js.map} +1 -1
  101. package/dist/{chunk-fxgxf16k.js → chunk-fsj5k511.js} +2 -2
  102. package/dist/{chunk-fxgxf16k.js.map → chunk-fsj5k511.js.map} +1 -1
  103. package/dist/{chunk-t4yh4nf9.js → chunk-g5ppst76.js} +3 -3
  104. package/dist/{chunk-t4yh4nf9.js.map → chunk-g5ppst76.js.map} +1 -1
  105. package/dist/{chunk-aazmrxj9.js → chunk-g9hhdcax.js} +2 -2
  106. package/dist/{chunk-aazmrxj9.js.map → chunk-g9hhdcax.js.map} +1 -1
  107. package/dist/{chunk-cbqazg9k.js → chunk-gqfqnv3f.js} +2 -2
  108. package/dist/{chunk-cbqazg9k.js.map → chunk-gqfqnv3f.js.map} +1 -1
  109. package/dist/chunk-hkf2k2eq.js +5 -0
  110. package/dist/{chunk-whtzggn6.js.map → chunk-hkf2k2eq.js.map} +3 -4
  111. package/dist/{chunk-vw8849ys.js → chunk-hm9cjxy2.js} +2 -2
  112. package/dist/{chunk-m54s6jpr.js.map → chunk-hm9cjxy2.js.map} +1 -1
  113. package/dist/{chunk-kejwjerj.js → chunk-hr1r3g0d.js} +2 -2
  114. package/dist/{chunk-kejwjerj.js.map → chunk-hr1r3g0d.js.map} +1 -1
  115. package/dist/{chunk-3hrj5rwm.js → chunk-hzepfrzy.js} +2 -2
  116. package/dist/{chunk-3hrj5rwm.js.map → chunk-hzepfrzy.js.map} +1 -1
  117. package/dist/{chunk-785b41h1.js → chunk-j5858bz7.js} +3 -3
  118. package/dist/{chunk-785b41h1.js.map → chunk-j5858bz7.js.map} +1 -1
  119. package/dist/{chunk-d9mar37g.js → chunk-jf6qqzat.js} +2 -2
  120. package/dist/{chunk-d9mar37g.js.map → chunk-jf6qqzat.js.map} +1 -1
  121. package/dist/{chunk-1hr4xht1.js → chunk-jg79n382.js} +2 -2
  122. package/dist/{chunk-1hr4xht1.js.map → chunk-jg79n382.js.map} +1 -1
  123. package/dist/chunk-k31qfe7a.js +71 -0
  124. package/dist/chunk-k31qfe7a.js.map +13 -0
  125. package/dist/{chunk-4mfrgd5m.js → chunk-kk77x2v4.js} +2 -2
  126. package/dist/{chunk-4mfrgd5m.js.map → chunk-kk77x2v4.js.map} +1 -1
  127. package/dist/{chunk-1myhm0g3.js → chunk-kkte8nze.js} +3 -3
  128. package/dist/{chunk-1myhm0g3.js.map → chunk-kkte8nze.js.map} +1 -1
  129. package/dist/{chunk-hdps9n52.js → chunk-m4kmetpb.js} +3 -3
  130. package/dist/{chunk-hdps9n52.js.map → chunk-m4kmetpb.js.map} +1 -1
  131. package/dist/{chunk-gts5p6mw.js → chunk-n4sdm0jn.js} +4 -4
  132. package/dist/{chunk-gts5p6mw.js.map → chunk-n4sdm0jn.js.map} +1 -1
  133. package/dist/chunk-nang3847.js +416 -0
  134. package/dist/chunk-nang3847.js.map +24 -0
  135. package/dist/{chunk-agyfv3f8.js → chunk-nrezmscd.js} +1 -1
  136. package/dist/{chunk-xt9tv99x.js → chunk-p83erprx.js} +2 -2
  137. package/dist/{chunk-xt9tv99x.js.map → chunk-p83erprx.js.map} +1 -1
  138. package/dist/{chunk-sr942vb1.js → chunk-pkr5dsbk.js} +2 -2
  139. package/dist/{chunk-sr942vb1.js.map → chunk-pkr5dsbk.js.map} +1 -1
  140. package/dist/{chunk-yhrye9cm.js → chunk-pqc16rrx.js} +2 -2
  141. package/dist/{chunk-yhrye9cm.js.map → chunk-pqc16rrx.js.map} +1 -1
  142. package/dist/{chunk-m54s6jpr.js → chunk-pvz90a49.js} +2 -2
  143. package/dist/{chunk-vw8849ys.js.map → chunk-pvz90a49.js.map} +1 -1
  144. package/dist/{chunk-fre6f4nk.js → chunk-q290tgza.js} +2 -2
  145. package/dist/{chunk-fre6f4nk.js.map → chunk-q290tgza.js.map} +1 -1
  146. package/dist/{chunk-8rv62v14.js → chunk-qf4bmee9.js} +2 -2
  147. package/dist/{chunk-8rv62v14.js.map → chunk-qf4bmee9.js.map} +1 -1
  148. package/dist/chunk-qkxnvpaj.js +5 -0
  149. package/dist/chunk-qkxnvpaj.js.map +10 -0
  150. package/dist/chunk-r1favzz4.js +19 -0
  151. package/dist/{chunk-ktr3k768.js.map → chunk-r1favzz4.js.map} +5 -4
  152. package/dist/{chunk-303mprnv.js → chunk-r3v2cnrj.js} +2 -2
  153. package/dist/{chunk-303mprnv.js.map → chunk-r3v2cnrj.js.map} +1 -1
  154. package/dist/{chunk-x7cpth2f.js → chunk-razjfecn.js} +1 -1
  155. package/dist/{chunk-t04f3akb.js → chunk-scc0j5k9.js} +2 -2
  156. package/dist/{chunk-t04f3akb.js.map → chunk-scc0j5k9.js.map} +1 -1
  157. package/dist/{chunk-56jky6vf.js → chunk-sce5jes2.js} +2 -2
  158. package/dist/{chunk-56jky6vf.js.map → chunk-sce5jes2.js.map} +1 -1
  159. package/dist/chunk-sd02ktf2.js +24 -0
  160. package/dist/{chunk-79xg42e7.js.map → chunk-sd02ktf2.js.map} +2 -2
  161. package/dist/{chunk-mschc94q.js → chunk-sn04cyw0.js} +2 -2
  162. package/dist/{chunk-mschc94q.js.map → chunk-sn04cyw0.js.map} +1 -1
  163. package/dist/{chunk-bra1a1fq.js → chunk-tfdmvxza.js} +2 -2
  164. package/dist/{chunk-bra1a1fq.js.map → chunk-tfdmvxza.js.map} +1 -1
  165. package/dist/{chunk-z10cas5r.js → chunk-thz75w6e.js} +2 -2
  166. package/dist/{chunk-z10cas5r.js.map → chunk-thz75w6e.js.map} +1 -1
  167. package/dist/{chunk-v1tfdgy1.js → chunk-tzdenj0n.js} +3 -3
  168. package/dist/{chunk-v1tfdgy1.js.map → chunk-tzdenj0n.js.map} +1 -1
  169. package/dist/{chunk-98m15b9x.js → chunk-x6v2zex2.js} +2 -2
  170. package/dist/{chunk-98m15b9x.js.map → chunk-x6v2zex2.js.map} +1 -1
  171. package/dist/{chunk-d2gfcf85.js → chunk-xfw8zyvn.js} +2 -2
  172. package/dist/{chunk-d2gfcf85.js.map → chunk-xfw8zyvn.js.map} +1 -1
  173. package/dist/{chunk-wyw6p3fg.js → chunk-xtzn0qfh.js} +3 -3
  174. package/dist/{chunk-wyw6p3fg.js.map → chunk-xtzn0qfh.js.map} +1 -1
  175. package/dist/{chunk-tn2bryy2.js → chunk-xx3zvc3g.js} +2 -2
  176. package/dist/{chunk-tn2bryy2.js.map → chunk-xx3zvc3g.js.map} +1 -1
  177. package/dist/{chunk-er3wf6ng.js → chunk-xzn2nmny.js} +2 -2
  178. package/dist/{chunk-er3wf6ng.js.map → chunk-xzn2nmny.js.map} +1 -1
  179. package/dist/{chunk-p91b8zcn.js → chunk-xzyy896s.js} +2 -2
  180. package/dist/{chunk-p91b8zcn.js.map → chunk-xzyy896s.js.map} +1 -1
  181. package/dist/chunk-y09r0wsw.js +5 -0
  182. package/dist/chunk-y09r0wsw.js.map +12 -0
  183. package/dist/{chunk-6d8rvr1v.js → chunk-ygf0z7kk.js} +2 -2
  184. package/dist/{chunk-6d8rvr1v.js.map → chunk-ygf0z7kk.js.map} +1 -1
  185. package/dist/chunk-z759yah5.js +5 -0
  186. package/dist/chunk-z759yah5.js.map +12 -0
  187. package/dist/client/Head.d.ts.map +1 -1
  188. package/dist/client/fonts.d.ts +69 -0
  189. package/dist/client/fonts.d.ts.map +1 -0
  190. package/dist/client/index.d.ts +1 -0
  191. package/dist/client/index.d.ts.map +1 -1
  192. package/dist/client/index.js +75 -1
  193. package/dist/client/index.js.map +1 -1
  194. package/dist/config/index.js +1 -1
  195. package/dist/console/builtins.d.ts +13 -0
  196. package/dist/console/builtins.d.ts.map +1 -0
  197. package/dist/console/run.js +13 -11
  198. package/dist/console/run.js.map +6 -5
  199. package/dist/console/runner.d.ts.map +1 -1
  200. package/dist/console/usage.d.ts +2 -0
  201. package/dist/console/usage.d.ts.map +1 -1
  202. package/dist/container/index.js +2 -2
  203. package/dist/container/index.js.map +1 -1
  204. package/dist/database/index.js +2 -2
  205. package/dist/database/index.js.map +1 -1
  206. package/dist/email/index.js +2 -2
  207. package/dist/email/index.js.map +1 -1
  208. package/dist/facades/Connections.d.ts +36 -0
  209. package/dist/facades/Connections.d.ts.map +1 -0
  210. package/dist/facades/Crypt.d.ts +26 -0
  211. package/dist/facades/Crypt.d.ts.map +1 -0
  212. package/dist/facades/Meta.d.ts +7 -1
  213. package/dist/facades/Meta.d.ts.map +1 -1
  214. package/dist/facades/Storage.d.ts +29 -0
  215. package/dist/facades/Storage.d.ts.map +1 -1
  216. package/dist/facades/index.d.ts +2 -0
  217. package/dist/facades/index.d.ts.map +1 -1
  218. package/dist/facades/index.js +2 -2
  219. package/dist/facades/index.js.map +1 -1
  220. package/dist/foundation/index.js +2 -2
  221. package/dist/foundation/index.js.map +1 -1
  222. package/dist/http/HttpRequest.d.ts +1 -0
  223. package/dist/http/HttpRequest.d.ts.map +1 -1
  224. package/dist/http/Metadata.d.ts +5 -0
  225. package/dist/http/Metadata.d.ts.map +1 -1
  226. package/dist/http/index.d.ts +3 -1
  227. package/dist/http/index.d.ts.map +1 -1
  228. package/dist/http/index.js +2 -2
  229. package/dist/http/index.js.map +1 -1
  230. package/dist/http/requestContext.d.ts +1 -0
  231. package/dist/http/requestContext.d.ts.map +1 -1
  232. package/dist/http/safeFetch/errors.d.ts +10 -0
  233. package/dist/http/safeFetch/errors.d.ts.map +1 -1
  234. package/dist/http/safeFetch/index.d.ts +1 -1
  235. package/dist/http/safeFetch/index.d.ts.map +1 -1
  236. package/dist/http/sitemap/Robots.d.ts +95 -0
  237. package/dist/http/sitemap/Robots.d.ts.map +1 -0
  238. package/dist/http/sitemap/Sitemap.d.ts +145 -0
  239. package/dist/http/sitemap/Sitemap.d.ts.map +1 -0
  240. package/dist/http/sitemap/fetchText.d.ts +16 -0
  241. package/dist/http/sitemap/fetchText.d.ts.map +1 -0
  242. package/dist/http/sitemap/index.d.ts +3 -0
  243. package/dist/http/sitemap/index.d.ts.map +1 -0
  244. package/dist/http/sitemap/xml.d.ts +21 -0
  245. package/dist/http/sitemap/xml.d.ts.map +1 -0
  246. package/dist/i18n/Translator.d.ts.map +1 -1
  247. package/dist/i18n/dictionaryRuntime.js +2 -2
  248. package/dist/i18n/dictionaryRuntime.js.map +1 -1
  249. package/dist/i18n/index.d.ts +1 -1
  250. package/dist/i18n/index.d.ts.map +1 -1
  251. package/dist/i18n/index.js +2 -2
  252. package/dist/i18n/index.js.map +2 -2
  253. package/dist/i18n/resolveLocale.d.ts +18 -0
  254. package/dist/i18n/resolveLocale.d.ts.map +1 -1
  255. package/dist/kernel/index.js +3 -3
  256. package/dist/kernel/index.js.map +3 -3
  257. package/dist/kernel/providers.d.ts +2 -2
  258. package/dist/kernel/providers.d.ts.map +1 -1
  259. package/dist/orm/Model.d.ts.map +1 -1
  260. package/dist/orm/encryption-rotate.d.ts +44 -0
  261. package/dist/orm/encryption-rotate.d.ts.map +1 -0
  262. package/dist/orm/encryption.d.ts +54 -0
  263. package/dist/orm/encryption.d.ts.map +1 -0
  264. package/dist/orm/index.d.ts +2 -0
  265. package/dist/orm/index.d.ts.map +1 -1
  266. package/dist/orm/index.js +3 -3
  267. package/dist/orm/index.js.map +4 -4
  268. package/dist/orm/schema.d.ts +25 -1
  269. package/dist/orm/schema.d.ts.map +1 -1
  270. package/dist/server/index.js +2 -2
  271. package/dist/server/index.js.map +1 -1
  272. package/dist/services/discovery.d.ts +8 -0
  273. package/dist/services/discovery.d.ts.map +1 -1
  274. package/dist/services/encryption/Encrypter.d.ts +86 -0
  275. package/dist/services/encryption/Encrypter.d.ts.map +1 -0
  276. package/dist/services/encryption/EncryptionServiceProvider.d.ts +13 -0
  277. package/dist/services/encryption/EncryptionServiceProvider.d.ts.map +1 -0
  278. package/dist/services/encryption/config.d.ts +36 -0
  279. package/dist/services/encryption/config.d.ts.map +1 -0
  280. package/dist/services/file-storage/drivers/FileStorageDriver.d.ts +12 -1
  281. package/dist/services/file-storage/drivers/FileStorageDriver.d.ts.map +1 -1
  282. package/dist/services/file-storage/drivers/FileSystemDriver.d.ts +8 -1
  283. package/dist/services/file-storage/drivers/FileSystemDriver.d.ts.map +1 -1
  284. package/dist/services/file-storage/drivers/types.d.ts +17 -0
  285. package/dist/services/file-storage/drivers/types.d.ts.map +1 -1
  286. package/dist/services/file-storage/putFromUrl.d.ts +56 -0
  287. package/dist/services/file-storage/putFromUrl.d.ts.map +1 -0
  288. package/dist/services/file-storage/sniffContentType.d.ts +33 -0
  289. package/dist/services/file-storage/sniffContentType.d.ts.map +1 -0
  290. package/dist/services/index.d.ts +26 -5
  291. package/dist/services/index.d.ts.map +1 -1
  292. package/dist/services/index.js +10 -10
  293. package/dist/services/index.js.map +4 -3
  294. package/dist/services/queue/DatabaseQueueDriver.d.ts +117 -7
  295. package/dist/services/queue/DatabaseQueueDriver.d.ts.map +1 -1
  296. package/dist/services/queue/Job.d.ts +75 -0
  297. package/dist/services/queue/Job.d.ts.map +1 -1
  298. package/dist/services/queue/MemoryQueueDriver.d.ts +32 -2
  299. package/dist/services/queue/MemoryQueueDriver.d.ts.map +1 -1
  300. package/dist/services/queue/QueueDriver.d.ts +83 -1
  301. package/dist/services/queue/QueueDriver.d.ts.map +1 -1
  302. package/dist/services/queue/QueueManager.d.ts +80 -7
  303. package/dist/services/queue/QueueManager.d.ts.map +1 -1
  304. package/dist/services/queue/QueueServiceProvider.d.ts.map +1 -1
  305. package/dist/services/queue/backoff.d.ts +6 -0
  306. package/dist/services/queue/backoff.d.ts.map +1 -0
  307. package/dist/services/queue/batch.d.ts +112 -0
  308. package/dist/services/queue/batch.d.ts.map +1 -0
  309. package/dist/services/queue/config.d.ts +9 -0
  310. package/dist/services/queue/config.d.ts.map +1 -1
  311. package/dist/services/queue/queueDriverContract.d.ts +5 -0
  312. package/dist/services/queue/queueDriverContract.d.ts.map +1 -1
  313. package/dist/services/queue/work.js +2 -2
  314. package/dist/services/queue/work.js.map +1 -1
  315. package/dist/services/queue/workflow/DatabaseWorkflowStore.d.ts +89 -0
  316. package/dist/services/queue/workflow/DatabaseWorkflowStore.d.ts.map +1 -0
  317. package/dist/services/queue/workflow/MemoryWorkflowStore.d.ts +43 -0
  318. package/dist/services/queue/workflow/MemoryWorkflowStore.d.ts.map +1 -0
  319. package/dist/services/queue/workflow/Step.d.ts +202 -0
  320. package/dist/services/queue/workflow/Step.d.ts.map +1 -0
  321. package/dist/services/queue/workflow/Workflow.d.ts +124 -0
  322. package/dist/services/queue/workflow/Workflow.d.ts.map +1 -0
  323. package/dist/services/queue/workflow/WorkflowRuntime.d.ts +60 -0
  324. package/dist/services/queue/workflow/WorkflowRuntime.d.ts.map +1 -0
  325. package/dist/services/queue/workflow/WorkflowStore.d.ts +184 -0
  326. package/dist/services/queue/workflow/WorkflowStore.d.ts.map +1 -0
  327. package/dist/services/queue/workflow/duration.d.ts +8 -0
  328. package/dist/services/queue/workflow/duration.d.ts.map +1 -0
  329. package/dist/services/queue/workflow/workflowContract.d.ts +30 -0
  330. package/dist/services/queue/workflow/workflowContract.d.ts.map +1 -0
  331. package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
  332. package/dist/stats/route-table.js +1 -1
  333. package/dist/support/index.js +2 -2
  334. package/dist/support/index.js.map +1 -1
  335. package/dist/vitest/index.js +2 -2
  336. package/dist/vitest/index.js.map +1 -1
  337. package/package.json +1 -1
  338. package/dist/chunk-1q9kd20m.js +0 -5
  339. package/dist/chunk-49nyyjfe.js +0 -5
  340. package/dist/chunk-49nyyjfe.js.map +0 -11
  341. package/dist/chunk-79xg42e7.js +0 -24
  342. package/dist/chunk-7vb4eey2.js +0 -217
  343. package/dist/chunk-7vb4eey2.js.map +0 -16
  344. package/dist/chunk-hytt9qyj.js +0 -54
  345. package/dist/chunk-jmg2zsaf.js +0 -5
  346. package/dist/chunk-jmg2zsaf.js.map +0 -12
  347. package/dist/chunk-ktr3k768.js +0 -19
  348. package/dist/chunk-ms9k0rx6.js +0 -46
  349. package/dist/chunk-pn8v6fj2.js +0 -14
  350. package/dist/chunk-whtzggn6.js +0 -5
  351. package/dist/chunk-yf1njzd5.js +0 -10
  352. /package/dist/{chunk-qjhw8nje.js.map → chunk-33s2xqv1.js.map} +0 -0
  353. /package/dist/{chunk-41da9628.js.map → chunk-8t6dwwz6.js.map} +0 -0
  354. /package/dist/{chunk-agyfv3f8.js.map → chunk-nrezmscd.js.map} +0 -0
  355. /package/dist/{chunk-x7cpth2f.js.map → chunk-razjfecn.js.map} +0 -0
package/dist/app/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{Ha as a}from"../chunk-tw5kwbx4.js";import"../chunk-d9mar37g.js";import"../chunk-vw8849ys.js";export{a as App};
2
+ import{Ia as a}from"../chunk-bz8xssrc.js";import"../chunk-jf6qqzat.js";import"../chunk-hm9cjxy2.js";export{a as App};
3
3
 
4
- //# debugId=288F3EAB17F12DE464756E2164756E21
4
+ //# debugId=361A054EB09C885C64756E2164756E21
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "288F3EAB17F12DE464756E2164756E21",
7
+ "debugId": "361A054EB09C885C64756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AuthServiceProvider.d.ts","sourceRoot":"","sources":["../../auth/AuthServiceProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAI7D,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,QAAQ;CAMT"}
1
+ {"version":3,"file":"AuthServiceProvider.d.ts","sourceRoot":"","sources":["../../auth/AuthServiceProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAK7D,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,QAAQ;CAaT"}
@@ -1,6 +1,9 @@
1
1
  import type { HttpRequest } from "../http/HttpRequest";
2
2
  import type { SessionWithUser, User } from "./types";
3
3
  import type { OAuthProvider } from "./oauth/OAuthProvider";
4
+ import type { ConnectionStore } from "./connections/ConnectionStore";
5
+ import type { ProviderConnection } from "./connections/ConnectionManager";
6
+ import type { OAuthConnectionProvider } from "./connections/OAuthConnectionProvider";
4
7
  import type { CodeRateLimits } from "./oneTimeCode";
5
8
  /** What `emailCode.send` is handed. */
6
9
  export interface EmailCodeSendArgs {
@@ -76,6 +79,14 @@ export interface EmailCodeConfig {
76
79
  */
77
80
  send?: (args: EmailCodeSendArgs) => Promise<void> | void;
78
81
  }
82
+ /** What `onConnected` is handed. */
83
+ export interface ConnectedArgs {
84
+ user: User;
85
+ /** The key under `auth.connections`. */
86
+ provider: string;
87
+ connection: ProviderConnection;
88
+ req: HttpRequest<any, any>;
89
+ }
79
90
  /** What `onAuthenticated` is handed. */
80
91
  export interface AuthenticatedArgs {
81
92
  user: User;
@@ -161,6 +172,22 @@ export interface AuthConfig {
161
172
  * instead.
162
173
  */
163
174
  oauthFailurePath?: string | null;
175
+ /**
176
+ * Providers a user can connect their account to, to call the provider's API
177
+ * on their behalf (as opposed to `oauthProviders`, which sign in). The key
178
+ * is the provider's name in `/auth/connections/<name>` and in
179
+ * `Connections.for(user, name)`. See "OAuth connections" in
180
+ * docs/authentication.md.
181
+ */
182
+ connections?: Record<string, OAuthConnectionProvider>;
183
+ /**
184
+ * Where connections are kept. Default: the `gemi_oauth_connections` table on
185
+ * the default database connection, tokens encrypted with the app's
186
+ * encryption keys.
187
+ */
188
+ connectionStore?: ConnectionStore | (() => ConnectionStore) | null;
189
+ /** After a connection is stored by the connect callback. */
190
+ onConnected?: (args: ConnectedArgs) => Promise<void> | void;
164
191
  verifyPassword?: (password: string, hash: string) => Promise<boolean>;
165
192
  hashPassword?: (password: string) => Promise<string>;
166
193
  generateForgotPasswordToken?: (user: User) => Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../auth/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../auth/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ import { type ConnectionRecord, type ConnectionStore } from "./ConnectionStore";
2
+ import { type OAuthConnectionProvider, type OAuthTokenSet } from "./OAuthConnectionProvider";
3
+ /** A user, as far as a connection is concerned: anything with an `id`. */
4
+ export type ConnectionOwner = {
5
+ id: string | number;
6
+ } | string | number;
7
+ /** What `Connections.fake` answers an API request with. */
8
+ export type FakeConnectionHandler = (request: Request) => Response | Promise<Response>;
9
+ export interface ConnectionManagerOptions {
10
+ providers: Record<string, OAuthConnectionProvider>;
11
+ /** Default: a `DatabaseConnectionStore` on the default database connection. */
12
+ store?: ConnectionStore | (() => ConnectionStore);
13
+ }
14
+ /**
15
+ * The OAuth connections a user has made, and the one place their tokens are
16
+ * read, refreshed and spent. Reached through the `Connections` facade.
17
+ */
18
+ export declare class ConnectionManager {
19
+ private readonly options;
20
+ static token: string;
21
+ private resolvedStore;
22
+ private readonly refreshing;
23
+ private fakes;
24
+ private fakeStore;
25
+ readonly fakeRequests: Request[];
26
+ constructor(options: ConnectionManagerOptions);
27
+ get providers(): Record<string, OAuthConnectionProvider>;
28
+ /** The store connections are kept in. */
29
+ get store(): ConnectionStore;
30
+ provider(name: string): OAuthConnectionProvider;
31
+ /** The user's connection to `provider`, or `null` when they have not connected it. */
32
+ for(user: ConnectionOwner, provider: string): Promise<ProviderConnection | null>;
33
+ /** Every connection the user has. */
34
+ list(user: ConnectionOwner): Promise<ProviderConnection[]>;
35
+ /**
36
+ * Stores tokens for the user, replacing any earlier connection to the same
37
+ * provider. The connect callback calls this; call it yourself for tokens
38
+ * obtained some other way.
39
+ */
40
+ save(user: ConnectionOwner, provider: string, tokens: Partial<OAuthTokenSet> & {
41
+ accessToken: string;
42
+ }): Promise<ProviderConnection>;
43
+ /**
44
+ * Fakes every provider's API: connections live in memory, `fetch` answers
45
+ * through `handlers[provider]` (recorded in `fakeRequests`), and nothing
46
+ * reaches a token or revocation endpoint. Returns `this` so a test can
47
+ * `save` a connection to start from.
48
+ */
49
+ fake(handlers?: Record<string, FakeConnectionHandler>): this;
50
+ /** Undoes `fake`. */
51
+ restore(): void;
52
+ get faked(): boolean;
53
+ /** @internal */
54
+ send(provider: string, request: Request): Promise<Response>;
55
+ /**
56
+ * A record whose access token is not the one at `staleRevision`: refreshed
57
+ * by this call, or by whoever refreshed it first. Serialised per connection
58
+ * in this process (concurrent callers share one refresh) and, through the
59
+ * app's lock store, across processes — a rotating refresh token must be
60
+ * spent exactly once.
61
+ *
62
+ * @internal
63
+ */
64
+ refresh(record: ConnectionRecord): Promise<ConnectionRecord>;
65
+ private refreshOnce;
66
+ private withLock;
67
+ }
68
+ /**
69
+ * One user's connection to one provider. Never exposes a token as a property,
70
+ * and serialises (`toJSON`, `console.log`) without them.
71
+ */
72
+ export declare class ProviderConnection {
73
+ private readonly manager;
74
+ private record;
75
+ constructor(manager: ConnectionManager, record: ConnectionRecord);
76
+ get provider(): string;
77
+ get userId(): string;
78
+ get providerAccountId(): string | null;
79
+ /** The scopes the provider granted. */
80
+ get scopes(): readonly string[];
81
+ get expiresAt(): Date | null;
82
+ /** A refresh was refused: the user has to connect again. */
83
+ get needsReconnect(): boolean;
84
+ get connectedAt(): Date;
85
+ /** Whether every one of `scopes` was granted. */
86
+ hasScopes(...scopes: string[]): boolean;
87
+ /**
88
+ * `fetch`, as the user: adds `Authorization: Bearer <token>`, refreshes the
89
+ * token first when it is about to expire, and after a 401 refreshes and
90
+ * retries once. A refresh the provider refuses marks the connection and
91
+ * throws `OAuthReconnectRequiredError`.
92
+ *
93
+ * A path is resolved against the provider's `apiBaseUrl`, and a URL on any
94
+ * other origin is refused (`OAuthConnectionError`,
95
+ * `forbidden_url`), so the token only ever goes to the provider. Redirects
96
+ * are followed by hand: the token is dropped on one that leaves the origin.
97
+ * A streamed request body cannot be sent twice, so a 401 for one is
98
+ * returned rather than retried.
99
+ */
100
+ fetch(input: string | URL, init?: RequestInit): Promise<Response>;
101
+ /**
102
+ * A valid access token, refreshed first if it is about to expire — for an
103
+ * SDK that wants the token itself. Prefer `fetch`, which also retries a 401.
104
+ */
105
+ accessToken(): Promise<string>;
106
+ /** Refreshes now, whatever the expiry says. */
107
+ refresh(): Promise<void>;
108
+ /**
109
+ * Revokes the grant at the provider (the refresh token when there is one,
110
+ * which ends the whole grant, else the access token) and deletes the
111
+ * connection. If the provider refuses, nothing is deleted and
112
+ * `OAuthConnectionError` (`revoke_failed`) is thrown — call `disconnect()`
113
+ * to forget the tokens anyway. A provider without a `revokeUrl` throws
114
+ * `revoke_unsupported`; use `disconnect()`.
115
+ */
116
+ revoke(): Promise<void>;
117
+ /** Forgets the tokens locally without telling the provider. */
118
+ disconnect(): Promise<void>;
119
+ toJSON(): {
120
+ provider: string;
121
+ providerAccountId: string;
122
+ scopes: string[];
123
+ expiresAt: Date;
124
+ needsReconnect: boolean;
125
+ connectedAt: Date;
126
+ };
127
+ private current;
128
+ private refreshFrom;
129
+ private resolveUrl;
130
+ private send;
131
+ private request;
132
+ }
133
+ //# sourceMappingURL=ConnectionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionManager.d.ts","sourceRoot":"","sources":["../../../auth/connections/ConnectionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ import type { DatabaseConnection } from "../../database/Connection";
2
+ import type { Dialect } from "../../database/dialect";
3
+ import type { Encrypter } from "../../services/encryption/Encrypter";
4
+ import type { OAuthTokenSet } from "./OAuthConnectionProvider";
5
+ /** One stored connection, tokens decrypted. Lives only inside the framework. */
6
+ export interface ConnectionRecord {
7
+ id: string;
8
+ userId: string;
9
+ provider: string;
10
+ providerAccountId: string | null;
11
+ scopes: string[];
12
+ accessToken: string;
13
+ refreshToken: string | null;
14
+ tokenType: string | null;
15
+ expiresAt: Date | null;
16
+ needsReconnect: boolean;
17
+ /** Bumped on every token change: the compare-and-swap that serialises refreshes. */
18
+ revision: number;
19
+ createdAt: Date;
20
+ updatedAt: Date;
21
+ }
22
+ /** Where connections are kept. `DatabaseConnectionStore` in an app, `MemoryConnectionStore` in tests. */
23
+ export interface ConnectionStore {
24
+ find(userId: string, provider: string): Promise<ConnectionRecord | null>;
25
+ list(userId: string): Promise<ConnectionRecord[]>;
26
+ /** Stores a fresh grant, replacing any connection the user had to this provider. */
27
+ save(userId: string, provider: string, tokens: OAuthTokenSet): Promise<ConnectionRecord>;
28
+ /**
29
+ * Replaces the tokens of the connection at `revision`, or resolves `null`
30
+ * when it has moved on (another request refreshed it first) or is gone.
31
+ */
32
+ updateTokens(id: string, revision: number, tokens: OAuthTokenSet): Promise<ConnectionRecord | null>;
33
+ markNeedsReconnect(id: string): Promise<void>;
34
+ delete(id: string): Promise<void>;
35
+ }
36
+ export declare class MemoryConnectionStore implements ConnectionStore {
37
+ private readonly rows;
38
+ find(userId: string, provider: string): Promise<{
39
+ id: string;
40
+ userId: string;
41
+ provider: string;
42
+ providerAccountId: string | null;
43
+ scopes: string[];
44
+ accessToken: string;
45
+ refreshToken: string | null;
46
+ tokenType: string | null;
47
+ expiresAt: Date | null;
48
+ needsReconnect: boolean;
49
+ /** Bumped on every token change: the compare-and-swap that serialises refreshes. */
50
+ revision: number;
51
+ createdAt: Date;
52
+ updatedAt: Date;
53
+ }>;
54
+ list(userId: string): Promise<{
55
+ id: string;
56
+ userId: string;
57
+ provider: string;
58
+ providerAccountId: string | null;
59
+ scopes: string[];
60
+ accessToken: string;
61
+ refreshToken: string | null;
62
+ tokenType: string | null;
63
+ expiresAt: Date | null;
64
+ needsReconnect: boolean;
65
+ /** Bumped on every token change: the compare-and-swap that serialises refreshes. */
66
+ revision: number;
67
+ createdAt: Date;
68
+ updatedAt: Date;
69
+ }[]>;
70
+ save(userId: string, provider: string, tokens: OAuthTokenSet): Promise<{
71
+ id: string;
72
+ userId: string;
73
+ provider: string;
74
+ providerAccountId: string | null;
75
+ scopes: string[];
76
+ accessToken: string;
77
+ refreshToken: string | null;
78
+ tokenType: string | null;
79
+ expiresAt: Date | null;
80
+ needsReconnect: boolean;
81
+ /** Bumped on every token change: the compare-and-swap that serialises refreshes. */
82
+ revision: number;
83
+ createdAt: Date;
84
+ updatedAt: Date;
85
+ }>;
86
+ updateTokens(id: string, revision: number, tokens: OAuthTokenSet): Promise<{
87
+ needsReconnect: boolean;
88
+ revision: number;
89
+ updatedAt: Date;
90
+ providerAccountId: string;
91
+ scopes: string[];
92
+ accessToken: string;
93
+ refreshToken: string;
94
+ tokenType: string;
95
+ expiresAt: Date;
96
+ id: string;
97
+ userId: string;
98
+ provider: string;
99
+ createdAt: Date;
100
+ }>;
101
+ markNeedsReconnect(id: string): Promise<void>;
102
+ delete(id: string): Promise<void>;
103
+ }
104
+ export interface DatabaseConnectionStoreOptions {
105
+ /** Default `gemi_oauth_connections`. A plain identifier: it is spliced into every statement. */
106
+ table?: string;
107
+ }
108
+ /**
109
+ * Connections in a table of the app's database, tokens encrypted with the
110
+ * app's `Encrypter` (the keys in `app/config/encryption.ts`). Raw SQL, like
111
+ * the queue's and the locks' tables, for SQLite, Postgres and MySQL 8 /
112
+ * MariaDB: the table is not an ORM model, so no ORM read can return a token.
113
+ */
114
+ export declare class DatabaseConnectionStore implements ConnectionStore {
115
+ private readonly encrypter;
116
+ readonly table: string;
117
+ private readonly sql;
118
+ private readonly dialect;
119
+ constructor(connection: Pick<DatabaseConnection, "sql" | "dialect">, encrypter: () => Encrypter, options?: DatabaseConnectionStoreOptions);
120
+ /** Creates the table if it does not exist: the DDL Prisma makes for the model in the docs. */
121
+ createTable(): Promise<void>;
122
+ find(userId: string, provider: string): Promise<ConnectionRecord>;
123
+ list(userId: string): Promise<ConnectionRecord[]>;
124
+ save(userId: string, provider: string, tokens: OAuthTokenSet): Promise<ConnectionRecord>;
125
+ updateTokens(id: string, revision: number, tokens: OAuthTokenSet): Promise<ConnectionRecord>;
126
+ markNeedsReconnect(id: string): Promise<void>;
127
+ delete(id: string): Promise<void>;
128
+ /**
129
+ * Re-encrypts every token still under an older key. Run by
130
+ * `gemi run encryption:rotate`; a token refreshed in the meantime is
131
+ * already current and is skipped by the revision check.
132
+ */
133
+ rotateEncryption(options?: {
134
+ dryRun?: boolean;
135
+ }): Promise<{
136
+ scanned: number;
137
+ rotated: number;
138
+ }>;
139
+ private encode;
140
+ private decode;
141
+ private get mysql();
142
+ private name;
143
+ }
144
+ /** The connections table, as Prisma generates it for the model in the docs, with `IF NOT EXISTS`. */
145
+ export declare function createConnectionTableStatements(dialect: Dialect, table: string): string[];
146
+ //# sourceMappingURL=ConnectionStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionStore.d.ts","sourceRoot":"","sources":["../../../auth/connections/ConnectionStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { Controller } from "../../http/Controller";
2
+ import { HttpRequest } from "../../http/HttpRequest";
3
+ /**
4
+ * `GET /auth/connections/:provider` and its callback: connects the signed-in
5
+ * user's account at a provider, to call its API on their behalf. The same
6
+ * `state` + PKCE round trip as an OAuth sign-in, in a cookie of its own, and
7
+ * it neither signs anyone in nor out. Both routes require a signed-in user.
8
+ */
9
+ export declare class ConnectionsController extends Controller {
10
+ connect(req?: HttpRequest<Record<string, never>, Record<string, never>>): Promise<{
11
+ destination: string;
12
+ }>;
13
+ callback(req?: HttpRequest<Record<string, never>, Record<string, never>>): Promise<{
14
+ destination: string;
15
+ }>;
16
+ /**
17
+ * Back to where the connect started (`?redirect=` on the connect link), or
18
+ * `auth.redirectPath`, with `?connection=<provider>` and, on failure,
19
+ * `&connection_error=<code>`.
20
+ */
21
+ protected finish(returnTo: string, provider: string, error?: string): never;
22
+ }
23
+ //# sourceMappingURL=ConnectionsController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionsController.d.ts","sourceRoot":"","sources":["../../../auth/connections/ConnectionsController.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAcrD;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,UAAU;IAC7C,OAAO,CAAC,GAAG,4DAAoB,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IA2BlE,QAAQ,CAAC,GAAG,4DAAoB,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAyDzE;;;;OAIG;IACH,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK;CAS5E"}
@@ -0,0 +1,105 @@
1
+ export interface OAuthConnectionProviderConfig {
2
+ /** The provider's authorization endpoint: `https://www.figma.com/oauth`. */
3
+ authorizeUrl: string;
4
+ /** The token endpoint, for the code exchange and refreshes. */
5
+ tokenUrl: string;
6
+ /**
7
+ * The RFC 7009 revocation endpoint. Without one, `revoke()` is refused and
8
+ * `disconnect()` (which forgets the tokens locally) is the way to remove a
9
+ * connection.
10
+ */
11
+ revokeUrl?: string;
12
+ clientId: string;
13
+ clientSecret: string;
14
+ /** The scopes to request. */
15
+ scopes: string[];
16
+ /** How `scopes` are joined on the authorization URL. Default `" "` (RFC 6749). */
17
+ scopeSeparator?: string;
18
+ /**
19
+ * How the client authenticates to the token and revocation endpoints:
20
+ * `"body"` sends `client_id` and `client_secret` as form fields (what most
21
+ * providers document), `"basic"` sends them as HTTP Basic credentials.
22
+ * Default `"body"`.
23
+ */
24
+ clientAuth?: "body" | "basic";
25
+ /** Send a PKCE challenge (S256). Default `true`; turn off only for a provider that rejects it. */
26
+ pkce?: boolean;
27
+ /**
28
+ * Extra query parameters for the authorization URL, such as
29
+ * `{ access_type: "offline", prompt: "consent" }` for Google. They cannot
30
+ * replace `state`, the PKCE challenge, `redirect_uri`, `client_id` or `scope`.
31
+ */
32
+ authorizationParams?: Record<string, string>;
33
+ /**
34
+ * The callback URL registered with the provider. Default
35
+ * `${HOST_NAME}/auth/connections/<name>/callback` (the request's origin when
36
+ * `HOST_NAME` is unset).
37
+ */
38
+ redirectUri?: string;
39
+ /**
40
+ * Where the provider's API lives: `https://api.figma.com`. Required:
41
+ * `connection.fetch` takes paths relative to it and **refuses any other
42
+ * origin**, so the user's token only ever goes to the provider's API host,
43
+ * even for a URL that came from user input.
44
+ */
45
+ apiBaseUrl: string;
46
+ /** Refresh this many seconds before the access token expires. Default 60. */
47
+ refreshLeewaySeconds?: number;
48
+ }
49
+ /** What a token endpoint answered, normalised. */
50
+ export interface OAuthTokenSet {
51
+ accessToken: string;
52
+ refreshToken: string | null;
53
+ tokenType: string | null;
54
+ /** Absent when the provider did not say (`expires_in` missing). */
55
+ expiresAt: Date | null;
56
+ /** The scopes granted, when the provider says; otherwise the ones requested. */
57
+ scopes: string[];
58
+ /** The provider's id for the account, when the token response carries one (Figma's `user_id`). */
59
+ providerAccountId: string | null;
60
+ }
61
+ /**
62
+ * A provider an app can connect a user's account to, to call its API on the
63
+ * user's behalf — as opposed to `OAuthProvider`, which signs the user in.
64
+ * Configured under `auth.connections`:
65
+ *
66
+ * ```ts
67
+ * connections: {
68
+ * figma: new OAuthConnectionProvider({
69
+ * authorizeUrl: "https://www.figma.com/oauth",
70
+ * tokenUrl: "https://api.figma.com/v1/oauth/token",
71
+ * clientId: process.env.FIGMA_CLIENT_ID!,
72
+ * clientSecret: process.env.FIGMA_CLIENT_SECRET!,
73
+ * scopes: ["file_content:read"],
74
+ * apiBaseUrl: "https://api.figma.com",
75
+ * }),
76
+ * }
77
+ * ```
78
+ */
79
+ export declare class OAuthConnectionProvider {
80
+ readonly config: Required<Omit<OAuthConnectionProviderConfig, "revokeUrl" | "redirectUri">> & Pick<OAuthConnectionProviderConfig, "revokeUrl" | "redirectUri">;
81
+ constructor(config: OAuthConnectionProviderConfig);
82
+ /** The URL to send the browser to. */
83
+ authorizationUrl(args: {
84
+ state: string;
85
+ codeChallenge: string;
86
+ redirectUri: string;
87
+ }): string;
88
+ /** Exchanges an authorization code for tokens. */
89
+ exchangeCode(args: {
90
+ code: string;
91
+ codeVerifier: string;
92
+ redirectUri: string;
93
+ }): Promise<OAuthTokenSet>;
94
+ /**
95
+ * Spends `refreshToken` for a new access token. A provider that does not
96
+ * rotate refresh tokens answers without one, and the old one is kept.
97
+ */
98
+ refresh(refreshToken: string, scopes: string[]): Promise<OAuthTokenSet>;
99
+ /** Revokes `token` at the provider (RFC 7009). */
100
+ revoke(token: string, hint: "refresh_token" | "access_token"): Promise<void>;
101
+ private post;
102
+ private tokenRequest;
103
+ }
104
+ export declare function isLoopback(hostname: string): boolean;
105
+ //# sourceMappingURL=OAuthConnectionProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuthConnectionProvider.d.ts","sourceRoot":"","sources":["../../../auth/connections/OAuthConnectionProvider.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,6BAA6B;IAC5C,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,kGAAkG;IAClG,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mEAAmE;IACnE,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,gFAAgF;IAChF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kGAAkG;IAClG,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,uBAAuB;IAClC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CACvB,IAAI,CAAC,6BAA6B,EAAE,WAAW,GAAG,aAAa,CAAC,CACjE,GACC,IAAI,CAAC,6BAA6B,EAAE,WAAW,GAAG,aAAa,CAAC,CAAC;gBAEvD,MAAM,EAAE,6BAA6B;IA0BjD,sCAAsC;IACtC,gBAAgB,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAkB7F,kDAAkD;IAClD,YAAY,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAUvG;;;OAGG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAKvE,kDAAkD;IAC5C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBlF,OAAO,CAAC,IAAI;YAgBE,YAAY;CAwC3B;AAgBD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Why an OAuth connection operation failed. Never carries a token or a token
3
+ * endpoint's body; `providerError` is the provider's RFC 6749 error code at
4
+ * most (`invalid_grant`).
5
+ */
6
+ export type OAuthConnectionErrorCode = "unknown_provider" | "exchange_failed" | "refresh_failed" | "reconnect_required" | "revoke_failed" | "revoke_unsupported" | "forbidden_url";
7
+ export declare class OAuthConnectionError extends Error {
8
+ readonly code: OAuthConnectionErrorCode;
9
+ readonly status?: number;
10
+ readonly providerError?: string;
11
+ constructor(code: OAuthConnectionErrorCode, message: string, options?: {
12
+ cause?: unknown;
13
+ status?: number;
14
+ providerError?: string;
15
+ });
16
+ }
17
+ /**
18
+ * The connection's tokens no longer work and refreshing them failed, so the
19
+ * user has to connect the account again (send them to
20
+ * `/auth/connections/<provider>`). The connection is marked, so every later
21
+ * call fails the same way without asking the provider again, until it is
22
+ * reconnected.
23
+ */
24
+ export declare class OAuthReconnectRequiredError extends OAuthConnectionError {
25
+ readonly provider: string;
26
+ constructor(provider: string, options?: {
27
+ cause?: unknown;
28
+ status?: number;
29
+ providerError?: string;
30
+ });
31
+ }
32
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../auth/connections/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAChC,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,oBAAoB,GACpB,eAAe,GACf,oBAAoB,GACpB,eAAe,CAAC;AAEpB,qBAAa,oBAAqB,SAAQ,KAAK;IAK3C,QAAQ,CAAC,IAAI,EAAE,wBAAwB;IAJzC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;gBAGrB,IAAI,EAAE,wBAAwB,EACvC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO;CAO7E;AAED;;;;;;GAMG;AACH,qBAAa,2BAA4B,SAAQ,oBAAoB;IAEjE,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM,EACzB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO;CAS7E"}
@@ -27,7 +27,12 @@
27
27
  * have expired.
28
28
  */
29
29
  export declare const OAUTH_STATE_TTL_SECONDS: number;
30
- export declare function oauthStateCookieName(secure: boolean): string;
30
+ /**
31
+ * `base` separates round trips that must not overwrite each other's cookie:
32
+ * a sign-in and an OAuth connection (`gemi_oauth_connection`) can be in
33
+ * flight in one browser at once.
34
+ */
35
+ export declare function oauthStateCookieName(secure: boolean, base?: string): string;
31
36
  export interface OAuthStatePayload {
32
37
  /** The provider key the round trip was started for. */
33
38
  provider: string;
@@ -35,9 +40,17 @@ export interface OAuthStatePayload {
35
40
  codeVerifier: string;
36
41
  /** Epoch milliseconds after which the round trip is refused. */
37
42
  expiresAt: number;
43
+ /**
44
+ * Who started the round trip, for a flow that must finish as the same user
45
+ * (an OAuth connection is stored for the signed-in user, so a callback that
46
+ * arrives for someone else is refused). Absent for a sign-in.
47
+ */
48
+ subject?: string;
49
+ /** A same-origin path to return to after the callback. */
50
+ returnTo?: string;
38
51
  }
39
52
  /** A fresh `state` and PKCE pair. */
40
- export declare function createOAuthState(provider: string, now?: number): {
53
+ export declare function createOAuthState(provider: string, now?: number, extra?: Pick<OAuthStatePayload, "subject" | "returnTo">): {
41
54
  state: string;
42
55
  codeVerifier: string;
43
56
  codeChallenge: string;
@@ -1 +1 @@
1
- {"version":3,"file":"oauthState.d.ts","sourceRoot":"","sources":["../../../auth/oauth/oauthState.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,eAAO,MAAM,uBAAuB,QAAU,CAAC;AAK/C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAE5D;AAED,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;CACnB;AAiBD,qCAAqC;AACrC,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAa;;;;;EAYlE;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAGjE;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,GAAG,IAAI,CAwBzF;AAyBD,iBAAiB;AACjB,wBAAgB,wBAAwB,SAEvC;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GACxC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,GAAG,eAAe,GAAG,eAAe,CAAA;CAAE,CAAC;AAE/E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,eAAe,CAgBlB"}
1
+ {"version":3,"file":"oauthState.d.ts","sourceRoot":"","sources":["../../../auth/oauth/oauthState.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,eAAO,MAAM,uBAAuB,QAAU,CAAC;AAK/C;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,GAAE,MAAoB,GAAG,MAAM,CAGxF;AAED,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAiBD,qCAAqC;AACrC,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,GAAG,SAAa,EAChB,KAAK,GAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,UAAU,CAAM;;;;;EAe5D;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAGjE;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,GAAG,IAAI,CA0BzF;AAyBD,iBAAiB;AACjB,wBAAgB,wBAAwB,SAEvC;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GACxC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,GAAG,eAAe,GAAG,eAAe,CAAA;CAAE,CAAC;AAE/E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,eAAe,CAgBlB"}
@@ -17,6 +17,18 @@ declare class OAuthViewRouter extends ViewRouter {
17
17
  }>, Record<string, never>>;
18
18
  };
19
19
  }
20
+ /** OAuth connections (#845): connect the signed-in user's account at a provider. */
21
+ declare class ConnectionsViewRouter extends ViewRouter {
22
+ middlewares: string[];
23
+ routes: {
24
+ "/:provider": import("../http/ViewRouter").ViewRoute<Record<string, never>, Promise<{
25
+ destination: string;
26
+ }>, Record<string, never>>;
27
+ "/:provider/callback": import("../http/ViewRouter").ViewRoute<Record<string, never>, Promise<{
28
+ destination: string;
29
+ }>, Record<string, never>>;
30
+ };
31
+ }
20
32
  export declare class AuthViewRouter extends ViewRouter {
21
33
  middlewares: string[];
22
34
  routes: {
@@ -28,6 +40,7 @@ export declare class AuthViewRouter extends ViewRouter {
28
40
  error?: undefined;
29
41
  }>, Record<string, never>>;
30
42
  "/oauth": typeof OAuthViewRouter;
43
+ "/connections": typeof ConnectionsViewRouter;
31
44
  };
32
45
  }
33
46
  export declare class AuthApiRouter extends ApiRouter {
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../auth/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,cAAM,eAAgB,SAAQ,UAAU;IACtC,WAAW,WAAqB;IAChC,MAAM;;;;;;;;;;;;MAMJ;CACH;AAED,qBAAa,cAAe,SAAQ,UAAU;IAC5C,WAAW,WAAqB;IAChC,MAAM;;;;;;;;;MAMJ;CACH;AAED,qBAAa,aAAc,SAAQ,SAAS;IAC1C,WAAW,WAAqB;IAChC,MAAM;;;;;;;;;;;;;;;MAiBJ;CACH"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../auth/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,cAAM,eAAgB,SAAQ,UAAU;IACtC,WAAW,WAAqB;IAChC,MAAM;;;;;;;;;;;;MAMJ;CACH;AAED,oFAAoF;AACpF,cAAM,qBAAsB,SAAQ,UAAU;IAC5C,WAAW,WAA6B;IACxC,MAAM;;;;;;;MAGJ;CACH;AAED,qBAAa,cAAe,SAAQ,UAAU;IAC5C,WAAW,WAAqB;IAChC,MAAM;;;;;;;;;;MAOJ;CACH;AAED,qBAAa,aAAc,SAAQ,SAAS;IAC1C,WAAW,WAAqB;IAChC,MAAM;;;;;;;;;;;;;;;MAiBJ;CACH"}