@geekmidas/constructs 10.0.0-alpha.12 → 10.0.0-alpha.121

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 (454) hide show
  1. package/README.md +222 -158
  2. package/dist/Construct-B7AXn0xH.d.mts +230 -0
  3. package/dist/Construct-B7AXn0xH.d.mts.map +1 -0
  4. package/dist/Construct-CFW0zjdD.d.cts +230 -0
  5. package/dist/Construct-CFW0zjdD.d.cts.map +1 -0
  6. package/dist/{Construct-BD5neF7w.mjs → Construct-CKUA-CTA.mjs} +35 -35
  7. package/dist/Construct-CKUA-CTA.mjs.map +1 -0
  8. package/dist/{Construct-CyS3RpTL.cjs → Construct-DEOVauyA.cjs} +55 -49
  9. package/dist/Construct-DEOVauyA.cjs.map +1 -0
  10. package/dist/{Cron-DmQ8vQ4b.d.cts → Cron-bdGRSROY.d.cts} +15 -9
  11. package/dist/Cron-bdGRSROY.d.cts.map +1 -0
  12. package/dist/{Cron-dh4rUgib.d.mts → Cron-i4Uetezh.d.mts} +15 -9
  13. package/dist/Cron-i4Uetezh.d.mts.map +1 -0
  14. package/dist/CronBuilder-9H4BnD6W.d.mts +47 -0
  15. package/dist/CronBuilder-9H4BnD6W.d.mts.map +1 -0
  16. package/dist/{CronBuilder-Da0C0edR.cjs → CronBuilder-BXTG10u5.cjs} +47 -31
  17. package/dist/CronBuilder-BXTG10u5.cjs.map +1 -0
  18. package/dist/CronBuilder-B_24LZpn.d.cts +47 -0
  19. package/dist/CronBuilder-B_24LZpn.d.cts.map +1 -0
  20. package/dist/{CronBuilder-CYKT5RiO.mjs → CronBuilder-D3sF9tS_.mjs} +37 -21
  21. package/dist/CronBuilder-D3sF9tS_.mjs.map +1 -0
  22. package/dist/{Endpoint-BjWKinFA.d.mts → Endpoint-CeFkSwh5.d.mts} +129 -99
  23. package/dist/Endpoint-CeFkSwh5.d.mts.map +1 -0
  24. package/dist/{Endpoint-dav89W6-.d.cts → Endpoint-DgrpG15P.d.cts} +127 -97
  25. package/dist/Endpoint-DgrpG15P.d.cts.map +1 -0
  26. package/dist/{Endpoint-DCQPMdUX.mjs → Endpoint-gPXhHKhJ.mjs} +208 -100
  27. package/dist/Endpoint-gPXhHKhJ.mjs.map +1 -0
  28. package/dist/{Endpoint-DcWXE-SZ.cjs → Endpoint-yhR2T2Wt.cjs} +248 -122
  29. package/dist/Endpoint-yhR2T2Wt.cjs.map +1 -0
  30. package/dist/{EndpointFactory-CdWB7wPw.cjs → EndpointFactory-CSrAyazj.cjs} +361 -112
  31. package/dist/EndpointFactory-CSrAyazj.cjs.map +1 -0
  32. package/dist/{index-lAO9egTb.d.mts → EndpointFactory-Cc863XJS.d.cts} +190 -136
  33. package/dist/EndpointFactory-Cc863XJS.d.cts.map +1 -0
  34. package/dist/{index-Bd5FqCoe.d.cts → EndpointFactory-Dbw9ugkX.d.mts} +189 -135
  35. package/dist/EndpointFactory-Dbw9ugkX.d.mts.map +1 -0
  36. package/dist/{EndpointFactory-CjV8F_lJ.mjs → EndpointFactory-c2ZugGig.mjs} +283 -76
  37. package/dist/EndpointFactory-c2ZugGig.mjs.map +1 -0
  38. package/dist/Function-B0uZhZnU.d.cts +76 -0
  39. package/dist/Function-B0uZhZnU.d.cts.map +1 -0
  40. package/dist/Function-B_9R7Zy1.d.mts +76 -0
  41. package/dist/Function-B_9R7Zy1.d.mts.map +1 -0
  42. package/dist/{HonoEndpointAdaptor-DtL9j19R.cjs → HonoEndpointAdaptor-CN1jjUBJ.cjs} +115 -71
  43. package/dist/HonoEndpointAdaptor-CN1jjUBJ.cjs.map +1 -0
  44. package/dist/{HonoEndpointAdaptor-P1ahhZHu.mjs → HonoEndpointAdaptor-euH1oSdY.mjs} +105 -64
  45. package/dist/HonoEndpointAdaptor-euH1oSdY.mjs.map +1 -0
  46. package/dist/{Queue-D7ZuwBhy.d.cts → Queue-B-dDXyjF.d.mts} +48 -48
  47. package/dist/Queue-B-dDXyjF.d.mts.map +1 -0
  48. package/dist/Queue-BhuofM3k.cjs +109 -0
  49. package/dist/Queue-BhuofM3k.cjs.map +1 -0
  50. package/dist/{Queue-gVGfi2Yk.d.mts → Queue-JbIjVtTf.d.cts} +49 -49
  51. package/dist/Queue-JbIjVtTf.d.cts.map +1 -0
  52. package/dist/Queue-cmhqEBOB.mjs +104 -0
  53. package/dist/Queue-cmhqEBOB.mjs.map +1 -0
  54. package/dist/QueueBuilder-48W-q8In.d.mts +75 -0
  55. package/dist/QueueBuilder-48W-q8In.d.mts.map +1 -0
  56. package/dist/QueueBuilder-DXu1qxT1.mjs +118 -0
  57. package/dist/QueueBuilder-DXu1qxT1.mjs.map +1 -0
  58. package/dist/QueueBuilder-DdU2klPu.cjs +135 -0
  59. package/dist/QueueBuilder-DdU2klPu.cjs.map +1 -0
  60. package/dist/QueueBuilder-MfpkJ3R9.d.cts +75 -0
  61. package/dist/QueueBuilder-MfpkJ3R9.d.cts.map +1 -0
  62. package/dist/{Subscriber-2mEi0ImH.d.cts → Subscriber-CEt7kHkc.d.cts} +29 -20
  63. package/dist/Subscriber-CEt7kHkc.d.cts.map +1 -0
  64. package/dist/{Subscriber-xTJ9ayPN.d.mts → Subscriber-dsxc5LKa.d.mts} +29 -20
  65. package/dist/Subscriber-dsxc5LKa.d.mts.map +1 -0
  66. package/dist/SubscriberBuilder-BRa_nrmH.d.cts +67 -0
  67. package/dist/SubscriberBuilder-BRa_nrmH.d.cts.map +1 -0
  68. package/dist/SubscriberBuilder-D9bkrYzH.d.mts +67 -0
  69. package/dist/SubscriberBuilder-D9bkrYzH.d.mts.map +1 -0
  70. package/dist/{SubscriberBuilder-BjkbeT9l.mjs → SubscriberBuilder-DRXfxWn_.mjs} +50 -24
  71. package/dist/SubscriberBuilder-DRXfxWn_.mjs.map +1 -0
  72. package/dist/{SubscriberBuilder-4OPehf2R.cjs → SubscriberBuilder-M2EAgQhC.cjs} +61 -36
  73. package/dist/SubscriberBuilder-M2EAgQhC.cjs.map +1 -0
  74. package/dist/Topic-D2R0r24C.mjs +99 -0
  75. package/dist/Topic-D2R0r24C.mjs.map +1 -0
  76. package/dist/Topic-DwS3QO0m.cjs +104 -0
  77. package/dist/Topic-DwS3QO0m.cjs.map +1 -0
  78. package/dist/adaptors/aws.cjs +200 -246
  79. package/dist/adaptors/aws.cjs.map +1 -1
  80. package/dist/adaptors/aws.d.cts +58 -62
  81. package/dist/adaptors/aws.d.cts.map +1 -1
  82. package/dist/adaptors/aws.d.mts +59 -63
  83. package/dist/adaptors/aws.d.mts.map +1 -1
  84. package/dist/adaptors/aws.mjs +171 -219
  85. package/dist/adaptors/aws.mjs.map +1 -1
  86. package/dist/adaptors/hono.cjs +3 -10
  87. package/dist/adaptors/hono.d.cts +7 -16
  88. package/dist/adaptors/hono.d.cts.map +1 -1
  89. package/dist/adaptors/hono.d.mts +9 -18
  90. package/dist/adaptors/hono.d.mts.map +1 -1
  91. package/dist/adaptors/hono.mjs +2 -10
  92. package/dist/adaptors/testing.cjs +765 -99
  93. package/dist/adaptors/testing.cjs.map +1 -1
  94. package/dist/adaptors/testing.d.cts +351 -54
  95. package/dist/adaptors/testing.d.cts.map +1 -1
  96. package/dist/adaptors/testing.d.mts +351 -54
  97. package/dist/adaptors/testing.d.mts.map +1 -1
  98. package/dist/adaptors/testing.mjs +726 -78
  99. package/dist/adaptors/testing.mjs.map +1 -1
  100. package/dist/auth-BMCJN30Y.d.cts +268 -0
  101. package/dist/auth-BMCJN30Y.d.cts.map +1 -0
  102. package/dist/auth-D_0788uW.d.mts +268 -0
  103. package/dist/auth-D_0788uW.d.mts.map +1 -0
  104. package/dist/auth.cjs +301 -33
  105. package/dist/auth.cjs.map +1 -1
  106. package/dist/auth.d.cts +2 -108
  107. package/dist/auth.d.mts +2 -108
  108. package/dist/auth.mjs +289 -27
  109. package/dist/auth.mjs.map +1 -1
  110. package/dist/{cache-BrRz3fEB.d.mts → cache-5QZzh5Er.d.mts} +3 -6
  111. package/dist/cache-5QZzh5Er.d.mts.map +1 -0
  112. package/dist/{cache-BtZY_tHe.d.cts → cache-DnGDGly3.d.cts} +3 -6
  113. package/dist/cache-DnGDGly3.d.cts.map +1 -0
  114. package/dist/cache.cjs +68 -2
  115. package/dist/cache.cjs.map +1 -0
  116. package/dist/cache.d.cts +1 -2
  117. package/dist/cache.d.mts +1 -2
  118. package/dist/cache.mjs +67 -2
  119. package/dist/cache.mjs.map +1 -0
  120. package/dist/cipher-C1lEFX63.mjs +225 -0
  121. package/dist/cipher-C1lEFX63.mjs.map +1 -0
  122. package/dist/cipher-CVxfwLjk.cjs +332 -0
  123. package/dist/cipher-CVxfwLjk.cjs.map +1 -0
  124. package/dist/cipher-DSDxPRIp.d.cts +106 -0
  125. package/dist/cipher-DSDxPRIp.d.cts.map +1 -0
  126. package/dist/cipher-DSDxPRIp.d.mts +106 -0
  127. package/dist/cipher-DSDxPRIp.d.mts.map +1 -0
  128. package/dist/{clone-DblgEZZa.mjs → clone-EKNovYHu.mjs} +3 -3
  129. package/dist/clone-EKNovYHu.mjs.map +1 -0
  130. package/dist/{clone-Dy0cR2SZ.cjs → clone-UGJpvQnL.cjs} +7 -8
  131. package/dist/clone-UGJpvQnL.cjs.map +1 -0
  132. package/dist/{construct-interface-D9d4Gm4p.d.cts → construct-interface-B1AfqRl4.d.cts} +42 -11
  133. package/dist/construct-interface-B1AfqRl4.d.cts.map +1 -0
  134. package/dist/{construct-interface-g5GM5pwR.d.mts → construct-interface-ZvYQbivO.d.mts} +42 -11
  135. package/dist/construct-interface-ZvYQbivO.d.mts.map +1 -0
  136. package/dist/construct-interface.cjs +113 -7
  137. package/dist/construct-interface.cjs.map +1 -0
  138. package/dist/construct-interface.d.cts +2 -2
  139. package/dist/construct-interface.d.mts +2 -2
  140. package/dist/construct-interface.mjs +106 -2
  141. package/dist/construct-interface.mjs.map +1 -0
  142. package/dist/credential-DYymbp_7.cjs +257 -0
  143. package/dist/credential-DYymbp_7.cjs.map +1 -0
  144. package/dist/credential-DfSAOOdY.mjs +222 -0
  145. package/dist/credential-DfSAOOdY.mjs.map +1 -0
  146. package/dist/credential.cjs +8 -96
  147. package/dist/credential.d.cts +2 -61
  148. package/dist/credential.d.mts +2 -61
  149. package/dist/credential.mjs +2 -94
  150. package/dist/crons/index.cjs +129 -7
  151. package/dist/crons/index.cjs.map +1 -1
  152. package/dist/crons/index.d.cts +45 -11
  153. package/dist/crons/index.d.cts.map +1 -1
  154. package/dist/crons/index.d.mts +45 -11
  155. package/dist/crons/index.d.mts.map +1 -1
  156. package/dist/crons/index.mjs +127 -8
  157. package/dist/crons/index.mjs.map +1 -1
  158. package/dist/database/kysely.cjs +4 -181
  159. package/dist/database/kysely.d.cts +2 -152
  160. package/dist/database/kysely.d.mts +2 -152
  161. package/dist/database/kysely.mjs +2 -180
  162. package/dist/email.cjs +25 -12
  163. package/dist/email.cjs.map +1 -1
  164. package/dist/email.d.cts +3 -7
  165. package/dist/email.d.cts.map +1 -1
  166. package/dist/email.d.mts +4 -8
  167. package/dist/email.d.mts.map +1 -1
  168. package/dist/email.mjs +16 -3
  169. package/dist/email.mjs.map +1 -1
  170. package/dist/encryption/kms.cjs +95 -0
  171. package/dist/encryption/kms.cjs.map +1 -0
  172. package/dist/encryption/kms.d.cts +7 -0
  173. package/dist/encryption/kms.d.cts.map +1 -0
  174. package/dist/encryption/kms.d.mts +7 -0
  175. package/dist/encryption/kms.d.mts.map +1 -0
  176. package/dist/encryption/kms.mjs +93 -0
  177. package/dist/encryption/kms.mjs.map +1 -0
  178. package/dist/encryption.cjs +116 -0
  179. package/dist/encryption.cjs.map +1 -0
  180. package/dist/encryption.d.cts +37 -0
  181. package/dist/encryption.d.cts.map +1 -0
  182. package/dist/encryption.d.mts +37 -0
  183. package/dist/encryption.d.mts.map +1 -0
  184. package/dist/encryption.mjs +101 -0
  185. package/dist/encryption.mjs.map +1 -0
  186. package/dist/endpoints/index.cjs +27 -16
  187. package/dist/endpoints/index.d.cts +105 -7
  188. package/dist/endpoints/index.d.cts.map +1 -0
  189. package/dist/endpoints/index.d.mts +105 -7
  190. package/dist/endpoints/index.d.mts.map +1 -0
  191. package/dist/endpoints/index.mjs +6 -10
  192. package/dist/expire-C586zznE.d.cts +38 -0
  193. package/dist/expire-C586zznE.d.cts.map +1 -0
  194. package/dist/expire-C586zznE.d.mts +38 -0
  195. package/dist/expire-C586zznE.d.mts.map +1 -0
  196. package/dist/expire-CieftS01.cjs +67 -0
  197. package/dist/expire-CieftS01.cjs.map +1 -0
  198. package/dist/expire-CpzUAfr9.mjs +50 -0
  199. package/dist/expire-CpzUAfr9.mjs.map +1 -0
  200. package/dist/external-api.cjs +106 -0
  201. package/dist/external-api.cjs.map +1 -0
  202. package/dist/external-api.d.cts +2 -0
  203. package/dist/external-api.d.mts +2 -0
  204. package/dist/external-api.mjs +103 -0
  205. package/dist/external-api.mjs.map +1 -0
  206. package/dist/fake-B7rvi4Qp.d.cts +201 -0
  207. package/dist/fake-B7rvi4Qp.d.cts.map +1 -0
  208. package/dist/fake-JXbkdao8.d.mts +201 -0
  209. package/dist/fake-JXbkdao8.d.mts.map +1 -0
  210. package/dist/file-server.cjs +66 -11
  211. package/dist/file-server.cjs.map +1 -1
  212. package/dist/file-server.d.cts +25 -10
  213. package/dist/file-server.d.cts.map +1 -1
  214. package/dist/file-server.d.mts +25 -10
  215. package/dist/file-server.d.mts.map +1 -1
  216. package/dist/file-server.mjs +58 -4
  217. package/dist/file-server.mjs.map +1 -1
  218. package/dist/functions/index.cjs +3 -6
  219. package/dist/functions/index.d.cts +3 -4
  220. package/dist/functions/index.d.mts +3 -4
  221. package/dist/functions/index.mjs +2 -6
  222. package/dist/{functions-14lpEFL4.mjs → functions-CTI-hDem.mjs} +376 -238
  223. package/dist/{functions-14lpEFL4.mjs.map → functions-CTI-hDem.mjs.map} +1 -1
  224. package/dist/{functions-i_la-N5r.cjs → functions-D7O5SGVc.cjs} +414 -264
  225. package/dist/functions-D7O5SGVc.cjs.map +1 -0
  226. package/dist/index-Cd2w-DRL.d.cts +115 -0
  227. package/dist/index-Cd2w-DRL.d.cts.map +1 -0
  228. package/dist/index-DdRjYhiJ.d.cts +119 -0
  229. package/dist/index-DdRjYhiJ.d.cts.map +1 -0
  230. package/dist/index-DdRjYhiJ.d.mts +119 -0
  231. package/dist/index-DdRjYhiJ.d.mts.map +1 -0
  232. package/dist/index-aBIcAiH5.d.mts +115 -0
  233. package/dist/index-aBIcAiH5.d.mts.map +1 -0
  234. package/dist/index.cjs +6 -3
  235. package/dist/index.d.cts +27 -4
  236. package/dist/index.d.cts.map +1 -0
  237. package/dist/index.d.mts +27 -4
  238. package/dist/index.d.mts.map +1 -0
  239. package/dist/index.mjs +3 -3
  240. package/dist/kysely-BHYV-WC-.d.cts +216 -0
  241. package/dist/kysely-BHYV-WC-.d.cts.map +1 -0
  242. package/dist/kysely-CAW3QSqp.d.mts +216 -0
  243. package/dist/kysely-CAW3QSqp.d.mts.map +1 -0
  244. package/dist/kysely-Cs4uPO8k.mjs +371 -0
  245. package/dist/kysely-Cs4uPO8k.mjs.map +1 -0
  246. package/dist/kysely-CukArHJ0.cjs +384 -0
  247. package/dist/kysely-CukArHJ0.cjs.map +1 -0
  248. package/dist/{telemetry-C3L0iS28.d.cts → lambdaTelemetry-8vnmVZQ5.d.cts} +3 -6
  249. package/dist/lambdaTelemetry-8vnmVZQ5.d.cts.map +1 -0
  250. package/dist/{telemetry-D7bVFLGi.d.mts → lambdaTelemetry-8vnmVZQ5.d.mts} +3 -6
  251. package/dist/lambdaTelemetry-8vnmVZQ5.d.mts.map +1 -0
  252. package/dist/mobile-app.cjs +74 -0
  253. package/dist/mobile-app.cjs.map +1 -0
  254. package/dist/mobile-app.d.cts +73 -0
  255. package/dist/mobile-app.d.cts.map +1 -0
  256. package/dist/mobile-app.d.mts +73 -0
  257. package/dist/mobile-app.d.mts.map +1 -0
  258. package/dist/mobile-app.mjs +73 -0
  259. package/dist/mobile-app.mjs.map +1 -0
  260. package/dist/object-storage.cjs +26 -11
  261. package/dist/object-storage.cjs.map +1 -1
  262. package/dist/object-storage.d.cts +12 -7
  263. package/dist/object-storage.d.cts.map +1 -1
  264. package/dist/object-storage.d.mts +12 -7
  265. package/dist/object-storage.d.mts.map +1 -1
  266. package/dist/object-storage.mjs +18 -5
  267. package/dist/object-storage.mjs.map +1 -1
  268. package/dist/queue/index.cjs +6 -189
  269. package/dist/queue/index.d.cts +3 -60
  270. package/dist/queue/index.d.mts +3 -60
  271. package/dist/queue/index.mjs +3 -186
  272. package/dist/random-password.cjs +86 -0
  273. package/dist/random-password.cjs.map +1 -0
  274. package/dist/random-password.d.cts +30 -0
  275. package/dist/random-password.d.cts.map +1 -0
  276. package/dist/random-password.d.mts +30 -0
  277. package/dist/random-password.d.mts.map +1 -0
  278. package/dist/random-password.mjs +84 -0
  279. package/dist/random-password.mjs.map +1 -0
  280. package/dist/{lazyAccessors-BoJN3SMd.mjs → readRequestBody-BTIl3k-D.mjs} +117 -60
  281. package/dist/readRequestBody-BTIl3k-D.mjs.map +1 -0
  282. package/dist/readRequestBody-Dej_L3c4.cjs +342 -0
  283. package/dist/readRequestBody-Dej_L3c4.cjs.map +1 -0
  284. package/dist/requestLogger-BZcXwdBs.cjs +207 -0
  285. package/dist/requestLogger-BZcXwdBs.cjs.map +1 -0
  286. package/dist/requestLogger-pA4gi3E1.mjs +178 -0
  287. package/dist/requestLogger-pA4gi3E1.mjs.map +1 -0
  288. package/dist/rest-api.cjs +90 -59
  289. package/dist/rest-api.cjs.map +1 -1
  290. package/dist/rest-api.d.cts +70 -42
  291. package/dist/rest-api.d.cts.map +1 -1
  292. package/dist/rest-api.d.mts +70 -42
  293. package/dist/rest-api.d.mts.map +1 -1
  294. package/dist/rest-api.mjs +82 -51
  295. package/dist/rest-api.mjs.map +1 -1
  296. package/dist/{chunk-DWy1uDak.cjs → rolldown-runtime-y5ARvAq5.cjs} +14 -18
  297. package/dist/runSubscriber-BHvJ8POr.mjs +109 -0
  298. package/dist/runSubscriber-BHvJ8POr.mjs.map +1 -0
  299. package/dist/runSubscriber-D8nLXIv1.cjs +126 -0
  300. package/dist/runSubscriber-D8nLXIv1.cjs.map +1 -0
  301. package/dist/shutdown-BMJmAhSt.cjs +38 -0
  302. package/dist/shutdown-BMJmAhSt.cjs.map +1 -0
  303. package/dist/shutdown-C7xa8x9S.mjs +27 -0
  304. package/dist/shutdown-C7xa8x9S.mjs.map +1 -0
  305. package/dist/site.cjs +33 -7
  306. package/dist/site.cjs.map +1 -1
  307. package/dist/site.d.cts +17 -7
  308. package/dist/site.d.cts.map +1 -1
  309. package/dist/site.d.mts +17 -7
  310. package/dist/site.d.mts.map +1 -1
  311. package/dist/site.mjs +29 -3
  312. package/dist/site.mjs.map +1 -1
  313. package/dist/stages-BSCF19o2.d.cts +56 -0
  314. package/dist/stages-BSCF19o2.d.cts.map +1 -0
  315. package/dist/stages-BSCF19o2.d.mts +56 -0
  316. package/dist/stages-BSCF19o2.d.mts.map +1 -0
  317. package/dist/subscribers/index.cjs +118 -6
  318. package/dist/subscribers/index.cjs.map +1 -0
  319. package/dist/subscribers/index.d.cts +51 -6
  320. package/dist/subscribers/index.d.cts.map +1 -0
  321. package/dist/subscribers/index.d.mts +51 -6
  322. package/dist/subscribers/index.d.mts.map +1 -0
  323. package/dist/subscribers/index.mjs +115 -5
  324. package/dist/subscribers/index.mjs.map +1 -0
  325. package/dist/surfaceEnv-CNimK76p.cjs +56 -0
  326. package/dist/surfaceEnv-CNimK76p.cjs.map +1 -0
  327. package/dist/surfaceEnv-wMT5QzgZ.mjs +45 -0
  328. package/dist/surfaceEnv-wMT5QzgZ.mjs.map +1 -0
  329. package/dist/telemetry-B48RLjyk.d.cts +40 -0
  330. package/dist/telemetry-B48RLjyk.d.cts.map +1 -0
  331. package/dist/telemetry-BEoBn6GO.d.mts +40 -0
  332. package/dist/telemetry-BEoBn6GO.d.mts.map +1 -0
  333. package/dist/telemetry.cjs +56 -0
  334. package/dist/telemetry.cjs.map +1 -0
  335. package/dist/telemetry.d.cts +2 -0
  336. package/dist/telemetry.d.mts +2 -0
  337. package/dist/telemetry.mjs +55 -0
  338. package/dist/telemetry.mjs.map +1 -0
  339. package/dist/topic/index.cjs +3 -137
  340. package/dist/topic/index.d.cts +2 -4
  341. package/dist/topic/index.d.mts +2 -4
  342. package/dist/topic/index.mjs +2 -134
  343. package/dist/tracing-Bbj1uoFJ.mjs +127 -0
  344. package/dist/tracing-Bbj1uoFJ.mjs.map +1 -0
  345. package/dist/tracing-C0ooU0V2.cjs +150 -0
  346. package/dist/tracing-C0ooU0V2.cjs.map +1 -0
  347. package/dist/{types-BlAkSuGI.d.cts → types-DMuSQeLL.d.cts} +3 -5
  348. package/dist/types-DMuSQeLL.d.cts.map +1 -0
  349. package/dist/{types-aKksMEWL.d.mts → types-DMuSQeLL.d.mts} +3 -5
  350. package/dist/types-DMuSQeLL.d.mts.map +1 -0
  351. package/dist/types.d.cts +1 -1
  352. package/dist/types.d.mts +1 -1
  353. package/dist/types.mjs +1 -0
  354. package/dist/worker.cjs +59 -34
  355. package/dist/worker.cjs.map +1 -1
  356. package/dist/worker.d.cts +70 -45
  357. package/dist/worker.d.cts.map +1 -1
  358. package/dist/worker.d.mts +71 -45
  359. package/dist/worker.d.mts.map +1 -1
  360. package/dist/worker.mjs +54 -29
  361. package/dist/worker.mjs.map +1 -1
  362. package/package.json +115 -41
  363. package/dist/Construct-BD5neF7w.mjs.map +0 -1
  364. package/dist/Construct-C0ijr2qp.d.cts +0 -117
  365. package/dist/Construct-C0ijr2qp.d.cts.map +0 -1
  366. package/dist/Construct-Ct8nalEi.d.mts +0 -117
  367. package/dist/Construct-Ct8nalEi.d.mts.map +0 -1
  368. package/dist/Construct-CyS3RpTL.cjs.map +0 -1
  369. package/dist/Cron-DmQ8vQ4b.d.cts.map +0 -1
  370. package/dist/Cron-dh4rUgib.d.mts.map +0 -1
  371. package/dist/CronBuilder-BquXDbDI.d.cts +0 -44
  372. package/dist/CronBuilder-BquXDbDI.d.cts.map +0 -1
  373. package/dist/CronBuilder-CGgY2080.d.mts +0 -44
  374. package/dist/CronBuilder-CGgY2080.d.mts.map +0 -1
  375. package/dist/CronBuilder-CYKT5RiO.mjs.map +0 -1
  376. package/dist/CronBuilder-Da0C0edR.cjs.map +0 -1
  377. package/dist/Endpoint-BjWKinFA.d.mts.map +0 -1
  378. package/dist/Endpoint-DCQPMdUX.mjs.map +0 -1
  379. package/dist/Endpoint-DcWXE-SZ.cjs.map +0 -1
  380. package/dist/Endpoint-dav89W6-.d.cts.map +0 -1
  381. package/dist/EndpointFactory-CdWB7wPw.cjs.map +0 -1
  382. package/dist/EndpointFactory-CjV8F_lJ.mjs.map +0 -1
  383. package/dist/HonoEndpointAdaptor-DtL9j19R.cjs.map +0 -1
  384. package/dist/HonoEndpointAdaptor-P1ahhZHu.mjs.map +0 -1
  385. package/dist/Queue-D7ZuwBhy.d.cts.map +0 -1
  386. package/dist/Queue-gVGfi2Yk.d.mts.map +0 -1
  387. package/dist/Subscriber-2mEi0ImH.d.cts.map +0 -1
  388. package/dist/Subscriber-xTJ9ayPN.d.mts.map +0 -1
  389. package/dist/SubscriberBuilder-4OPehf2R.cjs.map +0 -1
  390. package/dist/SubscriberBuilder-BjkbeT9l.mjs.map +0 -1
  391. package/dist/SubscriberBuilder-Dptmo-1A.d.mts +0 -62
  392. package/dist/SubscriberBuilder-Dptmo-1A.d.mts.map +0 -1
  393. package/dist/SubscriberBuilder-waNhzjSM.d.cts +0 -62
  394. package/dist/SubscriberBuilder-waNhzjSM.d.cts.map +0 -1
  395. package/dist/Topic-19QeHBIR.d.cts +0 -91
  396. package/dist/Topic-19QeHBIR.d.cts.map +0 -1
  397. package/dist/Topic-DuFeqkBh.d.mts +0 -91
  398. package/dist/Topic-DuFeqkBh.d.mts.map +0 -1
  399. package/dist/auth.d.cts.map +0 -1
  400. package/dist/auth.d.mts.map +0 -1
  401. package/dist/cache-0ANvRQnD.mjs +0 -51
  402. package/dist/cache-0ANvRQnD.mjs.map +0 -1
  403. package/dist/cache-3WSvAulx.cjs +0 -57
  404. package/dist/cache-3WSvAulx.cjs.map +0 -1
  405. package/dist/cache-BrRz3fEB.d.mts.map +0 -1
  406. package/dist/cache-BtZY_tHe.d.cts.map +0 -1
  407. package/dist/clone-DblgEZZa.mjs.map +0 -1
  408. package/dist/clone-Dy0cR2SZ.cjs.map +0 -1
  409. package/dist/construct-interface-BfjcOD_E.cjs +0 -117
  410. package/dist/construct-interface-BfjcOD_E.cjs.map +0 -1
  411. package/dist/construct-interface-D9d4Gm4p.d.cts.map +0 -1
  412. package/dist/construct-interface-Z4CpS8tK.mjs +0 -81
  413. package/dist/construct-interface-Z4CpS8tK.mjs.map +0 -1
  414. package/dist/construct-interface-g5GM5pwR.d.mts.map +0 -1
  415. package/dist/credential.cjs.map +0 -1
  416. package/dist/credential.d.cts.map +0 -1
  417. package/dist/credential.d.mts.map +0 -1
  418. package/dist/credential.mjs.map +0 -1
  419. package/dist/database/kysely.cjs.map +0 -1
  420. package/dist/database/kysely.d.cts.map +0 -1
  421. package/dist/database/kysely.d.mts.map +0 -1
  422. package/dist/database/kysely.mjs.map +0 -1
  423. package/dist/functions-i_la-N5r.cjs.map +0 -1
  424. package/dist/index-Bd5FqCoe.d.cts.map +0 -1
  425. package/dist/index-BknhM6Ux.d.mts +0 -31
  426. package/dist/index-BknhM6Ux.d.mts.map +0 -1
  427. package/dist/index-CBSfrowv.d.cts +0 -31
  428. package/dist/index-CBSfrowv.d.cts.map +0 -1
  429. package/dist/index-D24Xm79M.d.cts +0 -171
  430. package/dist/index-D24Xm79M.d.cts.map +0 -1
  431. package/dist/index-_ajboYxK.d.mts +0 -171
  432. package/dist/index-_ajboYxK.d.mts.map +0 -1
  433. package/dist/index-lAO9egTb.d.mts.map +0 -1
  434. package/dist/lazyAccessors-BoJN3SMd.mjs.map +0 -1
  435. package/dist/lazyAccessors-e3j2oE2m.cjs +0 -274
  436. package/dist/lazyAccessors-e3j2oE2m.cjs.map +0 -1
  437. package/dist/processAudits-CGqttuXm.cjs +0 -92
  438. package/dist/processAudits-CGqttuXm.cjs.map +0 -1
  439. package/dist/processAudits-Dmts9H_b.mjs +0 -80
  440. package/dist/processAudits-Dmts9H_b.mjs.map +0 -1
  441. package/dist/queue/index.cjs.map +0 -1
  442. package/dist/queue/index.d.cts.map +0 -1
  443. package/dist/queue/index.d.mts.map +0 -1
  444. package/dist/queue/index.mjs.map +0 -1
  445. package/dist/surfaceEnv-BFXEms2f.cjs +0 -39
  446. package/dist/surfaceEnv-BFXEms2f.cjs.map +0 -1
  447. package/dist/surfaceEnv-C3Ktahea.mjs +0 -27
  448. package/dist/surfaceEnv-C3Ktahea.mjs.map +0 -1
  449. package/dist/telemetry-C3L0iS28.d.cts.map +0 -1
  450. package/dist/telemetry-D7bVFLGi.d.mts.map +0 -1
  451. package/dist/topic/index.cjs.map +0 -1
  452. package/dist/topic/index.mjs.map +0 -1
  453. package/dist/types-BlAkSuGI.d.cts.map +0 -1
  454. package/dist/types-aKksMEWL.d.mts.map +0 -1
@@ -1,11 +1,11 @@
1
- const require_chunk = require('./chunk-DWy1uDak.cjs');
2
- const require_construct_interface = require('./construct-interface-BfjcOD_E.cjs');
3
- const require_Construct = require('./Construct-CyS3RpTL.cjs');
4
- const require_functions = require('./functions-i_la-N5r.cjs');
5
- const require_clone = require('./clone-Dy0cR2SZ.cjs');
6
- const require_Endpoint = require('./Endpoint-DcWXE-SZ.cjs');
7
- const __geekmidas_logger_console = require_chunk.__toESM(require("@geekmidas/logger/console"));
8
-
1
+ const require_rolldown_runtime = require("./rolldown-runtime-y5ARvAq5.cjs");
2
+ require("./Construct-DEOVauyA.cjs");
3
+ const require_construct_interface = require("./construct-interface.cjs");
4
+ const require_functions = require("./functions-D7O5SGVc.cjs");
5
+ const require_clone = require("./clone-UGJpvQnL.cjs");
6
+ const require_Endpoint = require("./Endpoint-yhR2T2Wt.cjs");
7
+ let _geekmidas_logger_console = require("@geekmidas/logger/console");
8
+ let _geekmidas_errors = require("@geekmidas/errors");
9
9
  //#region src/endpoints/Authorizer.ts
10
10
  /**
11
11
  * Built-in security schemes available by default.
@@ -68,27 +68,186 @@ function isBuiltInSecurityScheme(name) {
68
68
  function getSecurityScheme(name, customSchemes) {
69
69
  if (customSchemes && name in customSchemes) return customSchemes[name];
70
70
  if (isBuiltInSecurityScheme(name)) return BUILT_IN_SECURITY_SCHEMES[name];
71
- return void 0;
72
71
  }
73
-
74
72
  //#endregion
75
73
  //#region src/endpoints/rls.ts
74
+ var import_lodash_uniqby = /* @__PURE__ */ require_rolldown_runtime.__toESM(require_functions.require_lodash_uniqby(), 1);
76
75
  /**
77
76
  * Symbol used to bypass RLS for an endpoint.
78
77
  */
79
78
  const RLS_BYPASS = Symbol.for("geekmidas.rls.bypass");
80
-
79
+ //#endregion
80
+ //#region src/endpoints/upload.ts
81
+ /**
82
+ * Direct uploads: an endpoint that hands the browser a signed form, so the
83
+ * file goes straight to the bucket and never through the server.
84
+ *
85
+ * The endpoint decides *where* — the key, from the session and the body — and
86
+ * the form's policy decides *what*: the storage itself refuses a file larger
87
+ * than `maxSize`, or of a type `accept` does not allow. Nothing the client
88
+ * sends after this request is trusted to the server that issued it. That the
89
+ * upload finished arrives as the bucket's `object.created` event.
90
+ */
91
+ /** The longest a signature may be valid for: S3's limit, seven days. */
92
+ const MAX_EXPIRES_IN = 604800;
93
+ /** A media type, or a whole top-level type: `image/png`, `image/*`. */
94
+ const MEDIA_TYPE = /^[a-z0-9][a-z0-9!#$&^_.+-]*\/(\*|[a-z0-9][a-z0-9!#$&^_.+-]*)$/i;
95
+ /** An upload's `maxSize` that is not a positive whole number of bytes. */
96
+ var UploadMaxSizeInvalid = class extends Error {
97
+ maxSize;
98
+ constructor(maxSize) {
99
+ super(`An upload's maxSize is ${maxSize}, and it has to be a positive whole number of bytes — 5 * 1024 * 1024 for 5 MiB.`);
100
+ this.maxSize = maxSize;
101
+ this.name = "UploadMaxSizeInvalid";
102
+ }
103
+ };
104
+ /** An upload's `expiresIn` outside what a signature can be valid for. */
105
+ var UploadExpiryInvalid = class extends Error {
106
+ expiresIn;
107
+ constructor(expiresIn) {
108
+ super(`An upload's expiresIn is ${expiresIn}, and it has to be a whole number of seconds from 1 to ${MAX_EXPIRES_IN} (seven days, the longest S3 signs for). The default, 300, is usually right.`);
109
+ this.expiresIn = expiresIn;
110
+ this.name = "UploadExpiryInvalid";
111
+ }
112
+ };
113
+ /** An entry in `accept` that is not a media type. */
114
+ var UploadAcceptInvalid = class extends Error {
115
+ entry;
116
+ constructor(entry) {
117
+ super(`'${entry}' in an upload's accept is not a media type. Name one ('image/png') or a whole type ('image/*').`);
118
+ this.entry = entry;
119
+ this.name = "UploadAcceptInvalid";
120
+ }
121
+ };
122
+ /** Several accepted types, and nothing saying which one an upload is. */
123
+ var UploadContentTypeUnresolved = class extends Error {
124
+ accept;
125
+ constructor(accept) {
126
+ super(`An upload accepts ${accept.join(", ")}, and a signed form can fix only one type. Add contentType: ({ body }) => body.contentType, with the body naming which of them this file is.`);
127
+ this.accept = accept;
128
+ this.name = "UploadContentTypeUnresolved";
129
+ }
130
+ };
131
+ /** A request for an upload of a type the endpoint does not accept. */
132
+ var UploadContentTypeRefused = class extends _geekmidas_errors.HttpError {
133
+ contentType;
134
+ accept;
135
+ constructor(contentType, accept) {
136
+ super(415, `'${contentType}' is not accepted here. Upload one of: ${accept.join(", ")}.`, { details: {
137
+ contentType,
138
+ accept
139
+ } });
140
+ this.contentType = contentType;
141
+ this.accept = accept;
142
+ this.name = "UploadContentTypeRefused";
143
+ }
144
+ };
145
+ /**
146
+ * Check an upload's options when the endpoint is built, so a mistake fails at
147
+ * startup rather than on the first request.
148
+ */
149
+ function checkUploadOptions(options) {
150
+ if (!Number.isInteger(options.maxSize) || options.maxSize <= 0) throw new UploadMaxSizeInvalid(options.maxSize);
151
+ const { expiresIn } = options;
152
+ if (expiresIn !== void 0 && (!Number.isInteger(expiresIn) || expiresIn < 1 || expiresIn > MAX_EXPIRES_IN)) throw new UploadExpiryInvalid(expiresIn);
153
+ for (const entry of options.accept ?? []) if (!MEDIA_TYPE.test(entry)) throw new UploadAcceptInvalid(entry);
154
+ if ((options.accept?.length ?? 0) > 1 && !options.contentType) throw new UploadContentTypeUnresolved(options.accept);
155
+ }
156
+ /** Whether `type` is one `accept` allows — exactly, or under a `type/*`. */
157
+ function accepts(accept, type) {
158
+ const wanted = type.toLowerCase();
159
+ return accept.some((entry) => {
160
+ const allowed = entry.toLowerCase();
161
+ return allowed.endsWith("/*") ? wanted.startsWith(allowed.slice(0, -1)) : allowed === wanted;
162
+ });
163
+ }
164
+ /**
165
+ * The signed form for one request: the key and type resolved from the
166
+ * handler's context, and the policy the storage enforces.
167
+ *
168
+ * @throws {UploadContentTypeRefused} when the resolved type is not accepted
169
+ */
170
+ async function issueUpload(storage, ctx, options) {
171
+ const key = await options.key(ctx);
172
+ const accept = options.accept ?? [];
173
+ const resolved = options.contentType ? await options.contentType(ctx) : void 0;
174
+ let contentType;
175
+ if (resolved !== void 0) {
176
+ if (accept.length > 0 && !accepts(accept, resolved)) throw new UploadContentTypeRefused(resolved, accept);
177
+ contentType = resolved;
178
+ } else if (accept.length === 1) {
179
+ const only = accept[0];
180
+ contentType = only.endsWith("/*") ? { startsWith: only.slice(0, -1) } : only;
181
+ }
182
+ return storage.getUploadPost({
183
+ key,
184
+ maxSize: options.maxSize,
185
+ ...contentType ? { contentType } : {},
186
+ ...options.expiresIn !== void 0 ? { expiresIn: options.expiresIn } : {}
187
+ });
188
+ }
189
+ /** The JSON Schema of an {@link UploadPost}, for the endpoint's OpenAPI. */
190
+ const UPLOAD_POST_JSON_SCHEMA = {
191
+ type: "object",
192
+ properties: {
193
+ url: {
194
+ type: "string",
195
+ format: "uri"
196
+ },
197
+ fields: {
198
+ type: "object",
199
+ additionalProperties: { type: "string" }
200
+ },
201
+ key: { type: "string" },
202
+ expiresAt: {
203
+ type: "string",
204
+ format: "date-time"
205
+ }
206
+ },
207
+ required: [
208
+ "url",
209
+ "fields",
210
+ "key",
211
+ "expiresAt"
212
+ ],
213
+ additionalProperties: false
214
+ };
215
+ /** Whether `value` is an {@link UploadPost}. */
216
+ function isUploadPost(value) {
217
+ if (!value || typeof value !== "object") return false;
218
+ const { url, fields, key, expiresAt } = value;
219
+ return typeof url === "string" && typeof key === "string" && typeof expiresAt === "string" && !!fields && typeof fields === "object" && Object.values(fields).every((field) => typeof field === "string");
220
+ }
221
+ /**
222
+ * An upload endpoint's output, when it declares none of its own: the signed
223
+ * form, as the handler is given it.
224
+ *
225
+ * Written by hand rather than with a schema library, so the endpoint runtime
226
+ * imports none — the Standard Schema and Standard JSON Schema interfaces are
227
+ * the whole of what validation and OpenAPI need.
228
+ */
229
+ const UPLOAD_POST_SCHEMA = { "~standard": {
230
+ version: 1,
231
+ vendor: "geekmidas",
232
+ validate: (value) => isUploadPost(value) ? { value } : { issues: [{ message: "Expected an upload form" }] },
233
+ jsonSchema: {
234
+ input: () => structuredClone(UPLOAD_POST_JSON_SCHEMA),
235
+ output: () => structuredClone(UPLOAD_POST_JSON_SCHEMA)
236
+ }
237
+ } };
81
238
  //#endregion
82
239
  //#region src/endpoints/EndpointBuilder.ts
83
- var import_lodash$1 = require_chunk.__toESM(require_functions.require_lodash(), 1);
84
240
  var EndpointBuilder = class extends require_functions.BaseFunctionBuilder {
241
+ route;
242
+ method;
85
243
  schemas = {};
86
244
  _description;
87
245
  _status;
88
246
  _tags;
89
247
  _memorySize;
90
248
  _responseType = "application/json";
91
- _getSession = () => ({});
249
+ /** Set by a factory's `.session()`; absent, the endpoint reads none. */
250
+ _getSession;
92
251
  _authorize = () => true;
93
252
  _rateLimit;
94
253
  _availableAuthorizers = [];
@@ -105,14 +264,12 @@ var EndpointBuilder = class extends require_functions.BaseFunctionBuilder {
105
264
  _customSecuritySchemes = {};
106
265
  _rlsConfig;
107
266
  _rlsBypass;
267
+ _telemetry;
108
268
  constructor(route, method) {
109
- super(require_Construct.ConstructType.Endpoint);
269
+ super("dev.geekmidas.function.endpoint");
110
270
  this.route = route;
111
271
  this.method = method;
112
272
  }
113
- _setPublisher(publisher) {
114
- this._publisher = publisher;
115
- }
116
273
  _setAuditorStorage(storage) {
117
274
  this._auditorStorage = storage;
118
275
  }
@@ -122,11 +279,31 @@ var EndpointBuilder = class extends require_functions.BaseFunctionBuilder {
122
279
  description(description) {
123
280
  return require_clone.cloneWith(this, { _description: description });
124
281
  }
282
+ /**
283
+ * The status a successful request is answered with — a 2xx, or a 3xx for
284
+ * an endpoint that always redirects (with a `Location` header). One that
285
+ * sometimes redirects returns `response.redirect(url)` instead.
286
+ */
125
287
  status(status) {
126
288
  return require_clone.cloneWith(this, { _status: status });
127
289
  }
128
- event(event) {
129
- return require_clone.cloneWith(this, { _events: [...this._events, event] });
290
+ /**
291
+ * Publish `event` to `topic` once the handler has succeeded — repeatable,
292
+ * one call per event, to as many topics as the endpoint names. The topic
293
+ * becomes a dependency as with `.dependsOn([topic])`, so `services.<topic>`
294
+ * is there for events the handler decides on itself.
295
+ *
296
+ * @example
297
+ * ```ts
298
+ * router.post('/users')
299
+ * .event(users, {
300
+ * type: 'user.created',
301
+ * payload: (user) => ({ userId: user.id, email: user.email }),
302
+ * })
303
+ * ```
304
+ */
305
+ event(topic, event) {
306
+ return this.withEvent(topic, event);
130
307
  }
131
308
  tags(tags) {
132
309
  return require_clone.cloneWith(this, { _tags: tags });
@@ -135,6 +312,19 @@ var EndpointBuilder = class extends require_functions.BaseFunctionBuilder {
135
312
  return require_clone.cloneWith(this, { _memorySize: memorySize });
136
313
  }
137
314
  /**
315
+ * This route's telemetry, beside what its surface's `Telemetry` says for
316
+ * every route: `{ ignore: true }` records no span for it — a health check,
317
+ * a probe — and `attributes` are set on its request span.
318
+ *
319
+ * @example
320
+ * ```ts
321
+ * router.get('/health').telemetry({ ignore: true }).handle(() => 'ok');
322
+ * ```
323
+ */
324
+ telemetry(options) {
325
+ return require_clone.cloneWith(this, { _telemetry: { ...options } });
326
+ }
327
+ /**
138
328
  * Set the response content type for this endpoint.
139
329
  *
140
330
  * Defaults to `'application/json'`. When set to any other value
@@ -155,9 +345,6 @@ var EndpointBuilder = class extends require_functions.BaseFunctionBuilder {
155
345
  responseType(type) {
156
346
  return require_clone.cloneWith(this, { _responseType: type });
157
347
  }
158
- publisher(publisher) {
159
- return require_clone.cloneWith(this, { _publisher: publisher });
160
- }
161
348
  body(schema) {
162
349
  this.schemas.body = schema;
163
350
  return this;
@@ -181,8 +368,7 @@ var EndpointBuilder = class extends require_functions.BaseFunctionBuilder {
181
368
  }
182
369
  authorizer(name) {
183
370
  if (name === "none") return require_clone.cloneWith(this, { _authorizerName: void 0 });
184
- const authorizerExists = this._availableAuthorizers.some((a) => a.name === name);
185
- if (!authorizerExists && this._availableAuthorizers.length > 0) {
371
+ if (!this._availableAuthorizers.some((a) => a.name === name) && this._availableAuthorizers.length > 0) {
186
372
  const available = this._availableAuthorizers.map((a) => a.name).join(", ");
187
373
  throw new Error(`Authorizer "${name}" not found in available authorizers: ${available}`);
188
374
  }
@@ -202,12 +388,52 @@ var EndpointBuilder = class extends require_functions.BaseFunctionBuilder {
202
388
  dependsOn(constructs) {
203
389
  const services = require_construct_interface.servicesOf(constructs);
204
390
  return require_clone.cloneWith(this, {
205
- _services: (0, import_lodash$1.default)([...this._services, ...services], (service) => service.serviceName),
391
+ _services: (0, import_lodash_uniqby.default)([...this._services, ...services], (service) => service.serviceName),
206
392
  _constructs: require_construct_interface.idsOf(constructs, this._constructs)
207
393
  });
208
394
  }
395
+ /**
396
+ * Hand the browser a signed form that uploads one file straight to
397
+ * `bucket` — the file never passes through this server.
398
+ *
399
+ * The endpoint decides where (`key`, from what the handler is given) and
400
+ * the form's policy decides what: the storage refuses a file over
401
+ * `maxSize`, or of a type `accept` does not allow. The handler receives
402
+ * the form as `upload`, and returns it unless it has more to say — it is
403
+ * the endpoint's output when no `.output()` came first. The bucket
404
+ * becomes a dependency, as with `.dependsOn([bucket])`.
405
+ *
406
+ * The last step before `.handle()`: the key is resolved from the body,
407
+ * params and session, so they are declared first.
408
+ *
409
+ * @example
410
+ * ```ts
411
+ * router
412
+ * .post('/me/avatar')
413
+ * .upload(uploads, {
414
+ * key: ({ session }) => `avatars/${session.userId}.png`,
415
+ * maxSize: 5 * 1024 * 1024,
416
+ * accept: ['image/png'],
417
+ * })
418
+ * .handle(async ({ upload }) => upload);
419
+ * ```
420
+ */
421
+ upload(bucket, options) {
422
+ checkUploadOptions(options);
423
+ const [service] = require_construct_interface.servicesOf([bucket]);
424
+ const next = Object.create(UploadEndpointBuilder.prototype);
425
+ return Object.assign(next, this, {
426
+ _services: (0, import_lodash_uniqby.default)([...this._services, service], (s) => s.serviceName),
427
+ _constructs: require_construct_interface.idsOf([bucket], this._constructs),
428
+ outputSchema: this.outputSchema ?? UPLOAD_POST_SCHEMA,
429
+ _upload: {
430
+ serviceName: service.serviceName,
431
+ options
432
+ }
433
+ });
434
+ }
209
435
  services(services) {
210
- return require_clone.cloneWith(this, { _services: (0, import_lodash$1.default)([...this._services, ...services], (s) => s.serviceName) });
436
+ return require_clone.cloneWith(this, { _services: (0, import_lodash_uniqby.default)([...this._services, ...services], (s) => s.serviceName) });
211
437
  }
212
438
  logger(logger) {
213
439
  return require_clone.cloneWith(this, { _logger: logger });
@@ -350,7 +576,6 @@ var EndpointBuilder = class extends require_functions.BaseFunctionBuilder {
350
576
  status: this._status,
351
577
  getSession: this._getSession,
352
578
  rateLimit: this._rateLimit,
353
- publisherService: this._publisher,
354
579
  events: this._events,
355
580
  authorizer,
356
581
  surface: this._surface,
@@ -360,16 +585,36 @@ var EndpointBuilder = class extends require_functions.BaseFunctionBuilder {
360
585
  databaseService: this._databaseService,
361
586
  rlsConfig: this._rlsConfig,
362
587
  rlsBypass: this._rlsBypass,
363
- responseType: this._responseType
588
+ responseType: this._responseType,
589
+ ...this._telemetry ? { telemetry: this._telemetry } : {}
364
590
  });
365
591
  endpoint.owner = this._surface?.id;
366
592
  return endpoint;
367
593
  }
368
594
  };
369
-
595
+ /**
596
+ * What `.upload(bucket, …)` returns: the same builder, whose handler is also
597
+ * given the signed form.
598
+ */
599
+ var UploadEndpointBuilder = class extends EndpointBuilder {
600
+ /** The bucket's service, and what an upload to it allows. */
601
+ _upload;
602
+ handle(fn) {
603
+ const { serviceName, options } = this._upload;
604
+ const handler = (async (ctx, response) => {
605
+ const storage = ctx.services[serviceName];
606
+ const upload = await issueUpload(storage, ctx, options);
607
+ Object.defineProperty(ctx, "upload", {
608
+ value: upload,
609
+ enumerable: true
610
+ });
611
+ return fn(ctx, response);
612
+ });
613
+ return super.handle(handler);
614
+ }
615
+ };
370
616
  //#endregion
371
617
  //#region src/endpoints/EndpointFactory.ts
372
- var import_lodash = require_chunk.__toESM(require_functions.require_lodash(), 1);
373
618
  var EndpointFactory = class EndpointFactory {
374
619
  defaultServices = [];
375
620
  /**
@@ -385,7 +630,6 @@ var EndpointFactory = class EndpointFactory {
385
630
  defaultConstructs = [];
386
631
  basePath = "";
387
632
  defaultAuthorizeFn;
388
- defaultEventPublisher;
389
633
  defaultSessionExtractor;
390
634
  defaultLogger;
391
635
  /**
@@ -403,14 +647,13 @@ var EndpointFactory = class EndpointFactory {
403
647
  defaultActorExtractor;
404
648
  customSecuritySchemes;
405
649
  defaultRlsConfig;
406
- constructor({ basePath, defaultAuthorizeFn, defaultLogger = __geekmidas_logger_console.DEFAULT_LOGGER, defaultSessionExtractor, defaultServices = [], defaultConstructs = [], defaultEventPublisher, availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor, customSecuritySchemes = {}, defaultRlsConfig, surface }) {
650
+ constructor({ basePath, defaultAuthorizeFn, defaultLogger = _geekmidas_logger_console.DEFAULT_LOGGER, defaultSessionExtractor, defaultServices = [], defaultConstructs = [], availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor, customSecuritySchemes = {}, defaultRlsConfig, surface }) {
407
651
  this.defaultConstructs = [...new Set(defaultConstructs)];
408
- this.defaultServices = (0, import_lodash.default)(defaultServices, (s) => s.serviceName);
652
+ this.defaultServices = (0, import_lodash_uniqby.default)(defaultServices, (s) => s.serviceName);
409
653
  this.basePath = basePath || "";
410
654
  this.defaultAuthorizeFn = defaultAuthorizeFn;
411
655
  this.defaultLogger = defaultLogger;
412
656
  this.defaultSessionExtractor = defaultSessionExtractor;
413
- this.defaultEventPublisher = defaultEventPublisher;
414
657
  this.availableAuthorizers = availableAuthorizers;
415
658
  this.defaultAuthorizerName = defaultAuthorizerName;
416
659
  this.defaultAuditorStorage = defaultAuditorStorage;
@@ -424,9 +667,7 @@ var EndpointFactory = class EndpointFactory {
424
667
  if (!basePath && !path) return "/";
425
668
  if (!basePath) return path.startsWith("/") ? path : `/${path}`;
426
669
  if (!path) return basePath.startsWith("/") ? basePath : `/${basePath}`;
427
- const base = basePath.endsWith("/") ? basePath.slice(0, -1) : basePath;
428
- const segment = path.startsWith("/") ? path : `/${path}`;
429
- let result = base + segment;
670
+ let result = (basePath.endsWith("/") ? basePath.slice(0, -1) : basePath) + (path.startsWith("/") ? path : `/${path}`);
430
671
  if (!result.startsWith("/")) result = `/${result}`;
431
672
  result = result.replace(/^\/+/g, "/");
432
673
  if (result.length > 1 && result.endsWith("/")) result = result.slice(0, -1);
@@ -444,7 +685,6 @@ var EndpointFactory = class EndpointFactory {
444
685
  defaultAuthorizeFn: this.defaultAuthorizeFn,
445
686
  defaultLogger: this.defaultLogger,
446
687
  defaultSessionExtractor: this.defaultSessionExtractor,
447
- defaultEventPublisher: this.defaultEventPublisher,
448
688
  availableAuthorizers: authorizerConfigs,
449
689
  defaultAuthorizerName: this.defaultAuthorizerName,
450
690
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -479,7 +719,6 @@ var EndpointFactory = class EndpointFactory {
479
719
  defaultAuthorizeFn: this.defaultAuthorizeFn,
480
720
  defaultLogger: this.defaultLogger,
481
721
  defaultSessionExtractor: this.defaultSessionExtractor,
482
- defaultEventPublisher: this.defaultEventPublisher,
483
722
  availableAuthorizers: this.availableAuthorizers,
484
723
  defaultAuthorizerName: this.defaultAuthorizerName,
485
724
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -505,8 +744,7 @@ var EndpointFactory = class EndpointFactory {
505
744
  */
506
745
  authorizer(name) {
507
746
  if (name !== "none" && this.availableAuthorizers.length > 0) {
508
- const authorizerExists = this.availableAuthorizers.some((a) => a.name === name);
509
- if (!authorizerExists) {
747
+ if (!this.availableAuthorizers.some((a) => a.name === name)) {
510
748
  const available = this.availableAuthorizers.map((a) => a.name).join(", ");
511
749
  throw new Error(`Authorizer "${name}" not found in available authorizers: ${available}`);
512
750
  }
@@ -518,7 +756,6 @@ var EndpointFactory = class EndpointFactory {
518
756
  defaultAuthorizeFn: this.defaultAuthorizeFn,
519
757
  defaultLogger: this.defaultLogger,
520
758
  defaultSessionExtractor: this.defaultSessionExtractor,
521
- defaultEventPublisher: this.defaultEventPublisher,
522
759
  availableAuthorizers: this.availableAuthorizers,
523
760
  defaultAuthorizerName: name === "none" ? void 0 : name,
524
761
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -538,7 +775,6 @@ var EndpointFactory = class EndpointFactory {
538
775
  defaultAuthorizeFn: this.defaultAuthorizeFn,
539
776
  defaultLogger: this.defaultLogger,
540
777
  defaultSessionExtractor: this.defaultSessionExtractor,
541
- defaultEventPublisher: this.defaultEventPublisher,
542
778
  availableAuthorizers: this.availableAuthorizers,
543
779
  defaultAuthorizerName: this.defaultAuthorizerName,
544
780
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -557,7 +793,6 @@ var EndpointFactory = class EndpointFactory {
557
793
  defaultAuthorizeFn: fn,
558
794
  defaultLogger: this.defaultLogger,
559
795
  defaultSessionExtractor: this.defaultSessionExtractor,
560
- defaultEventPublisher: this.defaultEventPublisher,
561
796
  availableAuthorizers: this.availableAuthorizers,
562
797
  defaultAuthorizerName: this.defaultAuthorizerName,
563
798
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -581,7 +816,7 @@ var EndpointFactory = class EndpointFactory {
581
816
  */
582
817
  dependsOn(constructs) {
583
818
  const next = this.services(require_construct_interface.servicesOf(constructs));
584
- next.defaultConstructs = [...new Set([...this.defaultConstructs, ...constructs.map((construct) => construct.id)])];
819
+ next.defaultConstructs = [.../* @__PURE__ */ new Set([...this.defaultConstructs, ...constructs.map((construct) => construct.id)])];
585
820
  return next;
586
821
  }
587
822
  services(services) {
@@ -592,7 +827,6 @@ var EndpointFactory = class EndpointFactory {
592
827
  defaultAuthorizeFn: this.defaultAuthorizeFn,
593
828
  defaultLogger: this.defaultLogger,
594
829
  defaultSessionExtractor: this.defaultSessionExtractor,
595
- defaultEventPublisher: this.defaultEventPublisher,
596
830
  availableAuthorizers: this.availableAuthorizers,
597
831
  defaultAuthorizerName: this.defaultAuthorizerName,
598
832
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -611,26 +845,6 @@ var EndpointFactory = class EndpointFactory {
611
845
  defaultAuthorizeFn: this.defaultAuthorizeFn,
612
846
  defaultLogger: logger,
613
847
  defaultSessionExtractor: this.defaultSessionExtractor,
614
- defaultEventPublisher: this.defaultEventPublisher,
615
- availableAuthorizers: this.availableAuthorizers,
616
- defaultAuthorizerName: this.defaultAuthorizerName,
617
- defaultAuditorStorage: this.defaultAuditorStorage,
618
- defaultDatabaseService: this.defaultDatabaseService,
619
- defaultActorExtractor: this.defaultActorExtractor,
620
- customSecuritySchemes: this.customSecuritySchemes,
621
- surface: this.surface,
622
- defaultRlsConfig: this.defaultRlsConfig
623
- });
624
- }
625
- publisher(publisher) {
626
- return new EndpointFactory({
627
- defaultServices: this.defaultServices,
628
- defaultConstructs: this.defaultConstructs,
629
- basePath: this.basePath,
630
- defaultAuthorizeFn: this.defaultAuthorizeFn,
631
- defaultLogger: this.defaultLogger,
632
- defaultSessionExtractor: this.defaultSessionExtractor,
633
- defaultEventPublisher: publisher,
634
848
  availableAuthorizers: this.availableAuthorizers,
635
849
  defaultAuthorizerName: this.defaultAuthorizerName,
636
850
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -649,7 +863,6 @@ var EndpointFactory = class EndpointFactory {
649
863
  defaultAuthorizeFn: this.defaultAuthorizeFn,
650
864
  defaultLogger: this.defaultLogger,
651
865
  defaultSessionExtractor: session,
652
- defaultEventPublisher: this.defaultEventPublisher,
653
866
  availableAuthorizers: this.availableAuthorizers,
654
867
  defaultAuthorizerName: this.defaultAuthorizerName,
655
868
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -668,12 +881,11 @@ var EndpointFactory = class EndpointFactory {
668
881
  const service = require_construct_interface.serviceOf(source);
669
882
  return new EndpointFactory({
670
883
  defaultServices: this.defaultServices,
671
- defaultConstructs: this.defaultConstructs,
884
+ defaultConstructs: require_construct_interface.isConsumable(source) ? require_construct_interface.idsOf([source], this.defaultConstructs) : this.defaultConstructs,
672
885
  basePath: this.basePath,
673
886
  defaultAuthorizeFn: this.defaultAuthorizeFn,
674
887
  defaultLogger: this.defaultLogger,
675
888
  defaultSessionExtractor: this.defaultSessionExtractor,
676
- defaultEventPublisher: this.defaultEventPublisher,
677
889
  availableAuthorizers: this.availableAuthorizers,
678
890
  defaultAuthorizerName: this.defaultAuthorizerName,
679
891
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -696,7 +908,6 @@ var EndpointFactory = class EndpointFactory {
696
908
  defaultAuthorizeFn: this.defaultAuthorizeFn,
697
909
  defaultLogger: this.defaultLogger,
698
910
  defaultSessionExtractor: this.defaultSessionExtractor,
699
- defaultEventPublisher: this.defaultEventPublisher,
700
911
  availableAuthorizers: this.availableAuthorizers,
701
912
  defaultAuthorizerName: this.defaultAuthorizerName,
702
913
  defaultAuditorStorage: storage,
@@ -719,7 +930,6 @@ var EndpointFactory = class EndpointFactory {
719
930
  defaultAuthorizeFn: this.defaultAuthorizeFn,
720
931
  defaultLogger: this.defaultLogger,
721
932
  defaultSessionExtractor: this.defaultSessionExtractor,
722
- defaultEventPublisher: this.defaultEventPublisher,
723
933
  availableAuthorizers: this.availableAuthorizers,
724
934
  defaultAuthorizerName: this.defaultAuthorizerName,
725
935
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -756,7 +966,6 @@ var EndpointFactory = class EndpointFactory {
756
966
  defaultAuthorizeFn: this.defaultAuthorizeFn,
757
967
  defaultLogger: this.defaultLogger,
758
968
  defaultSessionExtractor: this.defaultSessionExtractor,
759
- defaultEventPublisher: this.defaultEventPublisher,
760
969
  availableAuthorizers: this.availableAuthorizers,
761
970
  defaultAuthorizerName: this.defaultAuthorizerName,
762
971
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -768,15 +977,13 @@ var EndpointFactory = class EndpointFactory {
768
977
  });
769
978
  }
770
979
  createBuilder(method, path) {
771
- const fullPath = EndpointFactory.joinPaths(path, this.basePath);
772
- const builder = new EndpointBuilder(fullPath, method);
980
+ const builder = new EndpointBuilder(EndpointFactory.joinPaths(path, this.basePath), method);
773
981
  if (this.defaultAuthorizeFn) builder._authorize = this.defaultAuthorizeFn;
774
982
  if (this.defaultServices.length) builder._services = [...this.defaultServices];
775
983
  if (this.defaultConstructs.length) builder._constructs = [...this.defaultConstructs];
776
984
  if (this.defaultLogger) builder._logger = this.defaultLogger;
777
985
  builder._surface = this.surface;
778
986
  if (this.defaultSessionExtractor) builder._getSession = this.defaultSessionExtractor;
779
- if (this.defaultEventPublisher) builder._setPublisher(this.defaultEventPublisher);
780
987
  builder._availableAuthorizers = this.availableAuthorizers;
781
988
  if (this.defaultAuthorizerName) builder._authorizerName = this.defaultAuthorizerName;
782
989
  if (this.defaultAuditorStorage) builder._setAuditorStorage(this.defaultAuditorStorage);
@@ -805,48 +1012,90 @@ var EndpointFactory = class EndpointFactory {
805
1012
  return this.createBuilder("OPTIONS", path);
806
1013
  }
807
1014
  };
808
-
809
1015
  //#endregion
810
- Object.defineProperty(exports, 'BUILT_IN_SECURITY_SCHEMES', {
811
- enumerable: true,
812
- get: function () {
813
- return BUILT_IN_SECURITY_SCHEMES;
814
- }
1016
+ Object.defineProperty(exports, "BUILT_IN_SECURITY_SCHEMES", {
1017
+ enumerable: true,
1018
+ get: function() {
1019
+ return BUILT_IN_SECURITY_SCHEMES;
1020
+ }
1021
+ });
1022
+ Object.defineProperty(exports, "EndpointBuilder", {
1023
+ enumerable: true,
1024
+ get: function() {
1025
+ return EndpointBuilder;
1026
+ }
1027
+ });
1028
+ Object.defineProperty(exports, "EndpointFactory", {
1029
+ enumerable: true,
1030
+ get: function() {
1031
+ return EndpointFactory;
1032
+ }
1033
+ });
1034
+ Object.defineProperty(exports, "RLS_BYPASS", {
1035
+ enumerable: true,
1036
+ get: function() {
1037
+ return RLS_BYPASS;
1038
+ }
1039
+ });
1040
+ Object.defineProperty(exports, "UPLOAD_POST_SCHEMA", {
1041
+ enumerable: true,
1042
+ get: function() {
1043
+ return UPLOAD_POST_SCHEMA;
1044
+ }
815
1045
  });
816
- Object.defineProperty(exports, 'EndpointBuilder', {
817
- enumerable: true,
818
- get: function () {
819
- return EndpointBuilder;
820
- }
1046
+ Object.defineProperty(exports, "UploadAcceptInvalid", {
1047
+ enumerable: true,
1048
+ get: function() {
1049
+ return UploadAcceptInvalid;
1050
+ }
821
1051
  });
822
- Object.defineProperty(exports, 'EndpointFactory', {
823
- enumerable: true,
824
- get: function () {
825
- return EndpointFactory;
826
- }
1052
+ Object.defineProperty(exports, "UploadContentTypeRefused", {
1053
+ enumerable: true,
1054
+ get: function() {
1055
+ return UploadContentTypeRefused;
1056
+ }
827
1057
  });
828
- Object.defineProperty(exports, 'RLS_BYPASS', {
829
- enumerable: true,
830
- get: function () {
831
- return RLS_BYPASS;
832
- }
1058
+ Object.defineProperty(exports, "UploadContentTypeUnresolved", {
1059
+ enumerable: true,
1060
+ get: function() {
1061
+ return UploadContentTypeUnresolved;
1062
+ }
833
1063
  });
834
- Object.defineProperty(exports, 'createAuthorizer', {
835
- enumerable: true,
836
- get: function () {
837
- return createAuthorizer;
838
- }
1064
+ Object.defineProperty(exports, "UploadEndpointBuilder", {
1065
+ enumerable: true,
1066
+ get: function() {
1067
+ return UploadEndpointBuilder;
1068
+ }
839
1069
  });
840
- Object.defineProperty(exports, 'getSecurityScheme', {
841
- enumerable: true,
842
- get: function () {
843
- return getSecurityScheme;
844
- }
1070
+ Object.defineProperty(exports, "UploadExpiryInvalid", {
1071
+ enumerable: true,
1072
+ get: function() {
1073
+ return UploadExpiryInvalid;
1074
+ }
845
1075
  });
846
- Object.defineProperty(exports, 'isBuiltInSecurityScheme', {
847
- enumerable: true,
848
- get: function () {
849
- return isBuiltInSecurityScheme;
850
- }
1076
+ Object.defineProperty(exports, "UploadMaxSizeInvalid", {
1077
+ enumerable: true,
1078
+ get: function() {
1079
+ return UploadMaxSizeInvalid;
1080
+ }
851
1081
  });
852
- //# sourceMappingURL=EndpointFactory-CdWB7wPw.cjs.map
1082
+ Object.defineProperty(exports, "createAuthorizer", {
1083
+ enumerable: true,
1084
+ get: function() {
1085
+ return createAuthorizer;
1086
+ }
1087
+ });
1088
+ Object.defineProperty(exports, "getSecurityScheme", {
1089
+ enumerable: true,
1090
+ get: function() {
1091
+ return getSecurityScheme;
1092
+ }
1093
+ });
1094
+ Object.defineProperty(exports, "isBuiltInSecurityScheme", {
1095
+ enumerable: true,
1096
+ get: function() {
1097
+ return isBuiltInSecurityScheme;
1098
+ }
1099
+ });
1100
+
1101
+ //# sourceMappingURL=EndpointFactory-CSrAyazj.cjs.map