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

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,10 +1,10 @@
1
- import { ConstructType, __toESM } from "./Construct-BD5neF7w.mjs";
2
- import { idsOf, serviceOf, servicesOf } from "./construct-interface-Z4CpS8tK.mjs";
3
- import { BaseFunctionBuilder, require_lodash } from "./functions-14lpEFL4.mjs";
4
- import { cloneWith } from "./clone-DblgEZZa.mjs";
5
- import { Endpoint } from "./Endpoint-DCQPMdUX.mjs";
1
+ import { o as __toESM } from "./Construct-CKUA-CTA.mjs";
2
+ import { idsOf, isConsumable, serviceOf, servicesOf } from "./construct-interface.mjs";
3
+ import { o as require_lodash_uniqby, r as BaseFunctionBuilder } from "./functions-CTI-hDem.mjs";
4
+ import { t as cloneWith } from "./clone-EKNovYHu.mjs";
5
+ import { t as Endpoint } from "./Endpoint-gPXhHKhJ.mjs";
6
6
  import { DEFAULT_LOGGER } from "@geekmidas/logger/console";
7
-
7
+ import { HttpError } from "@geekmidas/errors";
8
8
  //#region src/endpoints/Authorizer.ts
9
9
  /**
10
10
  * Built-in security schemes available by default.
@@ -67,27 +67,186 @@ function isBuiltInSecurityScheme(name) {
67
67
  function getSecurityScheme(name, customSchemes) {
68
68
  if (customSchemes && name in customSchemes) return customSchemes[name];
69
69
  if (isBuiltInSecurityScheme(name)) return BUILT_IN_SECURITY_SCHEMES[name];
70
- return void 0;
71
70
  }
72
-
73
71
  //#endregion
74
72
  //#region src/endpoints/rls.ts
73
+ var import_lodash_uniqby = /* @__PURE__ */ __toESM(require_lodash_uniqby(), 1);
75
74
  /**
76
75
  * Symbol used to bypass RLS for an endpoint.
77
76
  */
78
77
  const RLS_BYPASS = Symbol.for("geekmidas.rls.bypass");
79
-
78
+ //#endregion
79
+ //#region src/endpoints/upload.ts
80
+ /**
81
+ * Direct uploads: an endpoint that hands the browser a signed form, so the
82
+ * file goes straight to the bucket and never through the server.
83
+ *
84
+ * The endpoint decides *where* — the key, from the session and the body — and
85
+ * the form's policy decides *what*: the storage itself refuses a file larger
86
+ * than `maxSize`, or of a type `accept` does not allow. Nothing the client
87
+ * sends after this request is trusted to the server that issued it. That the
88
+ * upload finished arrives as the bucket's `object.created` event.
89
+ */
90
+ /** The longest a signature may be valid for: S3's limit, seven days. */
91
+ const MAX_EXPIRES_IN = 604800;
92
+ /** A media type, or a whole top-level type: `image/png`, `image/*`. */
93
+ const MEDIA_TYPE = /^[a-z0-9][a-z0-9!#$&^_.+-]*\/(\*|[a-z0-9][a-z0-9!#$&^_.+-]*)$/i;
94
+ /** An upload's `maxSize` that is not a positive whole number of bytes. */
95
+ var UploadMaxSizeInvalid = class extends Error {
96
+ maxSize;
97
+ constructor(maxSize) {
98
+ super(`An upload's maxSize is ${maxSize}, and it has to be a positive whole number of bytes — 5 * 1024 * 1024 for 5 MiB.`);
99
+ this.maxSize = maxSize;
100
+ this.name = "UploadMaxSizeInvalid";
101
+ }
102
+ };
103
+ /** An upload's `expiresIn` outside what a signature can be valid for. */
104
+ var UploadExpiryInvalid = class extends Error {
105
+ expiresIn;
106
+ constructor(expiresIn) {
107
+ 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.`);
108
+ this.expiresIn = expiresIn;
109
+ this.name = "UploadExpiryInvalid";
110
+ }
111
+ };
112
+ /** An entry in `accept` that is not a media type. */
113
+ var UploadAcceptInvalid = class extends Error {
114
+ entry;
115
+ constructor(entry) {
116
+ super(`'${entry}' in an upload's accept is not a media type. Name one ('image/png') or a whole type ('image/*').`);
117
+ this.entry = entry;
118
+ this.name = "UploadAcceptInvalid";
119
+ }
120
+ };
121
+ /** Several accepted types, and nothing saying which one an upload is. */
122
+ var UploadContentTypeUnresolved = class extends Error {
123
+ accept;
124
+ constructor(accept) {
125
+ 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.`);
126
+ this.accept = accept;
127
+ this.name = "UploadContentTypeUnresolved";
128
+ }
129
+ };
130
+ /** A request for an upload of a type the endpoint does not accept. */
131
+ var UploadContentTypeRefused = class extends HttpError {
132
+ contentType;
133
+ accept;
134
+ constructor(contentType, accept) {
135
+ super(415, `'${contentType}' is not accepted here. Upload one of: ${accept.join(", ")}.`, { details: {
136
+ contentType,
137
+ accept
138
+ } });
139
+ this.contentType = contentType;
140
+ this.accept = accept;
141
+ this.name = "UploadContentTypeRefused";
142
+ }
143
+ };
144
+ /**
145
+ * Check an upload's options when the endpoint is built, so a mistake fails at
146
+ * startup rather than on the first request.
147
+ */
148
+ function checkUploadOptions(options) {
149
+ if (!Number.isInteger(options.maxSize) || options.maxSize <= 0) throw new UploadMaxSizeInvalid(options.maxSize);
150
+ const { expiresIn } = options;
151
+ if (expiresIn !== void 0 && (!Number.isInteger(expiresIn) || expiresIn < 1 || expiresIn > MAX_EXPIRES_IN)) throw new UploadExpiryInvalid(expiresIn);
152
+ for (const entry of options.accept ?? []) if (!MEDIA_TYPE.test(entry)) throw new UploadAcceptInvalid(entry);
153
+ if ((options.accept?.length ?? 0) > 1 && !options.contentType) throw new UploadContentTypeUnresolved(options.accept);
154
+ }
155
+ /** Whether `type` is one `accept` allows — exactly, or under a `type/*`. */
156
+ function accepts(accept, type) {
157
+ const wanted = type.toLowerCase();
158
+ return accept.some((entry) => {
159
+ const allowed = entry.toLowerCase();
160
+ return allowed.endsWith("/*") ? wanted.startsWith(allowed.slice(0, -1)) : allowed === wanted;
161
+ });
162
+ }
163
+ /**
164
+ * The signed form for one request: the key and type resolved from the
165
+ * handler's context, and the policy the storage enforces.
166
+ *
167
+ * @throws {UploadContentTypeRefused} when the resolved type is not accepted
168
+ */
169
+ async function issueUpload(storage, ctx, options) {
170
+ const key = await options.key(ctx);
171
+ const accept = options.accept ?? [];
172
+ const resolved = options.contentType ? await options.contentType(ctx) : void 0;
173
+ let contentType;
174
+ if (resolved !== void 0) {
175
+ if (accept.length > 0 && !accepts(accept, resolved)) throw new UploadContentTypeRefused(resolved, accept);
176
+ contentType = resolved;
177
+ } else if (accept.length === 1) {
178
+ const only = accept[0];
179
+ contentType = only.endsWith("/*") ? { startsWith: only.slice(0, -1) } : only;
180
+ }
181
+ return storage.getUploadPost({
182
+ key,
183
+ maxSize: options.maxSize,
184
+ ...contentType ? { contentType } : {},
185
+ ...options.expiresIn !== void 0 ? { expiresIn: options.expiresIn } : {}
186
+ });
187
+ }
188
+ /** The JSON Schema of an {@link UploadPost}, for the endpoint's OpenAPI. */
189
+ const UPLOAD_POST_JSON_SCHEMA = {
190
+ type: "object",
191
+ properties: {
192
+ url: {
193
+ type: "string",
194
+ format: "uri"
195
+ },
196
+ fields: {
197
+ type: "object",
198
+ additionalProperties: { type: "string" }
199
+ },
200
+ key: { type: "string" },
201
+ expiresAt: {
202
+ type: "string",
203
+ format: "date-time"
204
+ }
205
+ },
206
+ required: [
207
+ "url",
208
+ "fields",
209
+ "key",
210
+ "expiresAt"
211
+ ],
212
+ additionalProperties: false
213
+ };
214
+ /** Whether `value` is an {@link UploadPost}. */
215
+ function isUploadPost(value) {
216
+ if (!value || typeof value !== "object") return false;
217
+ const { url, fields, key, expiresAt } = value;
218
+ return typeof url === "string" && typeof key === "string" && typeof expiresAt === "string" && !!fields && typeof fields === "object" && Object.values(fields).every((field) => typeof field === "string");
219
+ }
220
+ /**
221
+ * An upload endpoint's output, when it declares none of its own: the signed
222
+ * form, as the handler is given it.
223
+ *
224
+ * Written by hand rather than with a schema library, so the endpoint runtime
225
+ * imports none — the Standard Schema and Standard JSON Schema interfaces are
226
+ * the whole of what validation and OpenAPI need.
227
+ */
228
+ const UPLOAD_POST_SCHEMA = { "~standard": {
229
+ version: 1,
230
+ vendor: "geekmidas",
231
+ validate: (value) => isUploadPost(value) ? { value } : { issues: [{ message: "Expected an upload form" }] },
232
+ jsonSchema: {
233
+ input: () => structuredClone(UPLOAD_POST_JSON_SCHEMA),
234
+ output: () => structuredClone(UPLOAD_POST_JSON_SCHEMA)
235
+ }
236
+ } };
80
237
  //#endregion
81
238
  //#region src/endpoints/EndpointBuilder.ts
82
- var import_lodash$1 = __toESM(require_lodash(), 1);
83
239
  var EndpointBuilder = class extends BaseFunctionBuilder {
240
+ route;
241
+ method;
84
242
  schemas = {};
85
243
  _description;
86
244
  _status;
87
245
  _tags;
88
246
  _memorySize;
89
247
  _responseType = "application/json";
90
- _getSession = () => ({});
248
+ /** Set by a factory's `.session()`; absent, the endpoint reads none. */
249
+ _getSession;
91
250
  _authorize = () => true;
92
251
  _rateLimit;
93
252
  _availableAuthorizers = [];
@@ -104,14 +263,12 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
104
263
  _customSecuritySchemes = {};
105
264
  _rlsConfig;
106
265
  _rlsBypass;
266
+ _telemetry;
107
267
  constructor(route, method) {
108
- super(ConstructType.Endpoint);
268
+ super("dev.geekmidas.function.endpoint");
109
269
  this.route = route;
110
270
  this.method = method;
111
271
  }
112
- _setPublisher(publisher) {
113
- this._publisher = publisher;
114
- }
115
272
  _setAuditorStorage(storage) {
116
273
  this._auditorStorage = storage;
117
274
  }
@@ -121,11 +278,31 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
121
278
  description(description) {
122
279
  return cloneWith(this, { _description: description });
123
280
  }
281
+ /**
282
+ * The status a successful request is answered with — a 2xx, or a 3xx for
283
+ * an endpoint that always redirects (with a `Location` header). One that
284
+ * sometimes redirects returns `response.redirect(url)` instead.
285
+ */
124
286
  status(status) {
125
287
  return cloneWith(this, { _status: status });
126
288
  }
127
- event(event) {
128
- return cloneWith(this, { _events: [...this._events, event] });
289
+ /**
290
+ * Publish `event` to `topic` once the handler has succeeded — repeatable,
291
+ * one call per event, to as many topics as the endpoint names. The topic
292
+ * becomes a dependency as with `.dependsOn([topic])`, so `services.<topic>`
293
+ * is there for events the handler decides on itself.
294
+ *
295
+ * @example
296
+ * ```ts
297
+ * router.post('/users')
298
+ * .event(users, {
299
+ * type: 'user.created',
300
+ * payload: (user) => ({ userId: user.id, email: user.email }),
301
+ * })
302
+ * ```
303
+ */
304
+ event(topic, event) {
305
+ return this.withEvent(topic, event);
129
306
  }
130
307
  tags(tags) {
131
308
  return cloneWith(this, { _tags: tags });
@@ -134,6 +311,19 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
134
311
  return cloneWith(this, { _memorySize: memorySize });
135
312
  }
136
313
  /**
314
+ * This route's telemetry, beside what its surface's `Telemetry` says for
315
+ * every route: `{ ignore: true }` records no span for it — a health check,
316
+ * a probe — and `attributes` are set on its request span.
317
+ *
318
+ * @example
319
+ * ```ts
320
+ * router.get('/health').telemetry({ ignore: true }).handle(() => 'ok');
321
+ * ```
322
+ */
323
+ telemetry(options) {
324
+ return cloneWith(this, { _telemetry: { ...options } });
325
+ }
326
+ /**
137
327
  * Set the response content type for this endpoint.
138
328
  *
139
329
  * Defaults to `'application/json'`. When set to any other value
@@ -154,9 +344,6 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
154
344
  responseType(type) {
155
345
  return cloneWith(this, { _responseType: type });
156
346
  }
157
- publisher(publisher) {
158
- return cloneWith(this, { _publisher: publisher });
159
- }
160
347
  body(schema) {
161
348
  this.schemas.body = schema;
162
349
  return this;
@@ -180,8 +367,7 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
180
367
  }
181
368
  authorizer(name) {
182
369
  if (name === "none") return cloneWith(this, { _authorizerName: void 0 });
183
- const authorizerExists = this._availableAuthorizers.some((a) => a.name === name);
184
- if (!authorizerExists && this._availableAuthorizers.length > 0) {
370
+ if (!this._availableAuthorizers.some((a) => a.name === name) && this._availableAuthorizers.length > 0) {
185
371
  const available = this._availableAuthorizers.map((a) => a.name).join(", ");
186
372
  throw new Error(`Authorizer "${name}" not found in available authorizers: ${available}`);
187
373
  }
@@ -201,12 +387,52 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
201
387
  dependsOn(constructs) {
202
388
  const services = servicesOf(constructs);
203
389
  return cloneWith(this, {
204
- _services: (0, import_lodash$1.default)([...this._services, ...services], (service) => service.serviceName),
390
+ _services: (0, import_lodash_uniqby.default)([...this._services, ...services], (service) => service.serviceName),
205
391
  _constructs: idsOf(constructs, this._constructs)
206
392
  });
207
393
  }
394
+ /**
395
+ * Hand the browser a signed form that uploads one file straight to
396
+ * `bucket` — the file never passes through this server.
397
+ *
398
+ * The endpoint decides where (`key`, from what the handler is given) and
399
+ * the form's policy decides what: the storage refuses a file over
400
+ * `maxSize`, or of a type `accept` does not allow. The handler receives
401
+ * the form as `upload`, and returns it unless it has more to say — it is
402
+ * the endpoint's output when no `.output()` came first. The bucket
403
+ * becomes a dependency, as with `.dependsOn([bucket])`.
404
+ *
405
+ * The last step before `.handle()`: the key is resolved from the body,
406
+ * params and session, so they are declared first.
407
+ *
408
+ * @example
409
+ * ```ts
410
+ * router
411
+ * .post('/me/avatar')
412
+ * .upload(uploads, {
413
+ * key: ({ session }) => `avatars/${session.userId}.png`,
414
+ * maxSize: 5 * 1024 * 1024,
415
+ * accept: ['image/png'],
416
+ * })
417
+ * .handle(async ({ upload }) => upload);
418
+ * ```
419
+ */
420
+ upload(bucket, options) {
421
+ checkUploadOptions(options);
422
+ const [service] = servicesOf([bucket]);
423
+ const next = Object.create(UploadEndpointBuilder.prototype);
424
+ return Object.assign(next, this, {
425
+ _services: (0, import_lodash_uniqby.default)([...this._services, service], (s) => s.serviceName),
426
+ _constructs: idsOf([bucket], this._constructs),
427
+ outputSchema: this.outputSchema ?? UPLOAD_POST_SCHEMA,
428
+ _upload: {
429
+ serviceName: service.serviceName,
430
+ options
431
+ }
432
+ });
433
+ }
208
434
  services(services) {
209
- return cloneWith(this, { _services: (0, import_lodash$1.default)([...this._services, ...services], (s) => s.serviceName) });
435
+ return cloneWith(this, { _services: (0, import_lodash_uniqby.default)([...this._services, ...services], (s) => s.serviceName) });
210
436
  }
211
437
  logger(logger) {
212
438
  return cloneWith(this, { _logger: logger });
@@ -349,7 +575,6 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
349
575
  status: this._status,
350
576
  getSession: this._getSession,
351
577
  rateLimit: this._rateLimit,
352
- publisherService: this._publisher,
353
578
  events: this._events,
354
579
  authorizer,
355
580
  surface: this._surface,
@@ -359,16 +584,36 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
359
584
  databaseService: this._databaseService,
360
585
  rlsConfig: this._rlsConfig,
361
586
  rlsBypass: this._rlsBypass,
362
- responseType: this._responseType
587
+ responseType: this._responseType,
588
+ ...this._telemetry ? { telemetry: this._telemetry } : {}
363
589
  });
364
590
  endpoint.owner = this._surface?.id;
365
591
  return endpoint;
366
592
  }
367
593
  };
368
-
594
+ /**
595
+ * What `.upload(bucket, …)` returns: the same builder, whose handler is also
596
+ * given the signed form.
597
+ */
598
+ var UploadEndpointBuilder = class extends EndpointBuilder {
599
+ /** The bucket's service, and what an upload to it allows. */
600
+ _upload;
601
+ handle(fn) {
602
+ const { serviceName, options } = this._upload;
603
+ const handler = (async (ctx, response) => {
604
+ const storage = ctx.services[serviceName];
605
+ const upload = await issueUpload(storage, ctx, options);
606
+ Object.defineProperty(ctx, "upload", {
607
+ value: upload,
608
+ enumerable: true
609
+ });
610
+ return fn(ctx, response);
611
+ });
612
+ return super.handle(handler);
613
+ }
614
+ };
369
615
  //#endregion
370
616
  //#region src/endpoints/EndpointFactory.ts
371
- var import_lodash = __toESM(require_lodash(), 1);
372
617
  var EndpointFactory = class EndpointFactory {
373
618
  defaultServices = [];
374
619
  /**
@@ -384,7 +629,6 @@ var EndpointFactory = class EndpointFactory {
384
629
  defaultConstructs = [];
385
630
  basePath = "";
386
631
  defaultAuthorizeFn;
387
- defaultEventPublisher;
388
632
  defaultSessionExtractor;
389
633
  defaultLogger;
390
634
  /**
@@ -402,14 +646,13 @@ var EndpointFactory = class EndpointFactory {
402
646
  defaultActorExtractor;
403
647
  customSecuritySchemes;
404
648
  defaultRlsConfig;
405
- constructor({ basePath, defaultAuthorizeFn, defaultLogger = DEFAULT_LOGGER, defaultSessionExtractor, defaultServices = [], defaultConstructs = [], defaultEventPublisher, availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor, customSecuritySchemes = {}, defaultRlsConfig, surface }) {
649
+ constructor({ basePath, defaultAuthorizeFn, defaultLogger = DEFAULT_LOGGER, defaultSessionExtractor, defaultServices = [], defaultConstructs = [], availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor, customSecuritySchemes = {}, defaultRlsConfig, surface }) {
406
650
  this.defaultConstructs = [...new Set(defaultConstructs)];
407
- this.defaultServices = (0, import_lodash.default)(defaultServices, (s) => s.serviceName);
651
+ this.defaultServices = (0, import_lodash_uniqby.default)(defaultServices, (s) => s.serviceName);
408
652
  this.basePath = basePath || "";
409
653
  this.defaultAuthorizeFn = defaultAuthorizeFn;
410
654
  this.defaultLogger = defaultLogger;
411
655
  this.defaultSessionExtractor = defaultSessionExtractor;
412
- this.defaultEventPublisher = defaultEventPublisher;
413
656
  this.availableAuthorizers = availableAuthorizers;
414
657
  this.defaultAuthorizerName = defaultAuthorizerName;
415
658
  this.defaultAuditorStorage = defaultAuditorStorage;
@@ -423,9 +666,7 @@ var EndpointFactory = class EndpointFactory {
423
666
  if (!basePath && !path) return "/";
424
667
  if (!basePath) return path.startsWith("/") ? path : `/${path}`;
425
668
  if (!path) return basePath.startsWith("/") ? basePath : `/${basePath}`;
426
- const base = basePath.endsWith("/") ? basePath.slice(0, -1) : basePath;
427
- const segment = path.startsWith("/") ? path : `/${path}`;
428
- let result = base + segment;
669
+ let result = (basePath.endsWith("/") ? basePath.slice(0, -1) : basePath) + (path.startsWith("/") ? path : `/${path}`);
429
670
  if (!result.startsWith("/")) result = `/${result}`;
430
671
  result = result.replace(/^\/+/g, "/");
431
672
  if (result.length > 1 && result.endsWith("/")) result = result.slice(0, -1);
@@ -443,7 +684,6 @@ var EndpointFactory = class EndpointFactory {
443
684
  defaultAuthorizeFn: this.defaultAuthorizeFn,
444
685
  defaultLogger: this.defaultLogger,
445
686
  defaultSessionExtractor: this.defaultSessionExtractor,
446
- defaultEventPublisher: this.defaultEventPublisher,
447
687
  availableAuthorizers: authorizerConfigs,
448
688
  defaultAuthorizerName: this.defaultAuthorizerName,
449
689
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -478,7 +718,6 @@ var EndpointFactory = class EndpointFactory {
478
718
  defaultAuthorizeFn: this.defaultAuthorizeFn,
479
719
  defaultLogger: this.defaultLogger,
480
720
  defaultSessionExtractor: this.defaultSessionExtractor,
481
- defaultEventPublisher: this.defaultEventPublisher,
482
721
  availableAuthorizers: this.availableAuthorizers,
483
722
  defaultAuthorizerName: this.defaultAuthorizerName,
484
723
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -504,8 +743,7 @@ var EndpointFactory = class EndpointFactory {
504
743
  */
505
744
  authorizer(name) {
506
745
  if (name !== "none" && this.availableAuthorizers.length > 0) {
507
- const authorizerExists = this.availableAuthorizers.some((a) => a.name === name);
508
- if (!authorizerExists) {
746
+ if (!this.availableAuthorizers.some((a) => a.name === name)) {
509
747
  const available = this.availableAuthorizers.map((a) => a.name).join(", ");
510
748
  throw new Error(`Authorizer "${name}" not found in available authorizers: ${available}`);
511
749
  }
@@ -517,7 +755,6 @@ var EndpointFactory = class EndpointFactory {
517
755
  defaultAuthorizeFn: this.defaultAuthorizeFn,
518
756
  defaultLogger: this.defaultLogger,
519
757
  defaultSessionExtractor: this.defaultSessionExtractor,
520
- defaultEventPublisher: this.defaultEventPublisher,
521
758
  availableAuthorizers: this.availableAuthorizers,
522
759
  defaultAuthorizerName: name === "none" ? void 0 : name,
523
760
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -537,7 +774,6 @@ var EndpointFactory = class EndpointFactory {
537
774
  defaultAuthorizeFn: this.defaultAuthorizeFn,
538
775
  defaultLogger: this.defaultLogger,
539
776
  defaultSessionExtractor: this.defaultSessionExtractor,
540
- defaultEventPublisher: this.defaultEventPublisher,
541
777
  availableAuthorizers: this.availableAuthorizers,
542
778
  defaultAuthorizerName: this.defaultAuthorizerName,
543
779
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -556,7 +792,6 @@ var EndpointFactory = class EndpointFactory {
556
792
  defaultAuthorizeFn: fn,
557
793
  defaultLogger: this.defaultLogger,
558
794
  defaultSessionExtractor: this.defaultSessionExtractor,
559
- defaultEventPublisher: this.defaultEventPublisher,
560
795
  availableAuthorizers: this.availableAuthorizers,
561
796
  defaultAuthorizerName: this.defaultAuthorizerName,
562
797
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -580,7 +815,7 @@ var EndpointFactory = class EndpointFactory {
580
815
  */
581
816
  dependsOn(constructs) {
582
817
  const next = this.services(servicesOf(constructs));
583
- next.defaultConstructs = [...new Set([...this.defaultConstructs, ...constructs.map((construct) => construct.id)])];
818
+ next.defaultConstructs = [.../* @__PURE__ */ new Set([...this.defaultConstructs, ...constructs.map((construct) => construct.id)])];
584
819
  return next;
585
820
  }
586
821
  services(services) {
@@ -591,7 +826,6 @@ var EndpointFactory = class EndpointFactory {
591
826
  defaultAuthorizeFn: this.defaultAuthorizeFn,
592
827
  defaultLogger: this.defaultLogger,
593
828
  defaultSessionExtractor: this.defaultSessionExtractor,
594
- defaultEventPublisher: this.defaultEventPublisher,
595
829
  availableAuthorizers: this.availableAuthorizers,
596
830
  defaultAuthorizerName: this.defaultAuthorizerName,
597
831
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -610,26 +844,6 @@ var EndpointFactory = class EndpointFactory {
610
844
  defaultAuthorizeFn: this.defaultAuthorizeFn,
611
845
  defaultLogger: logger,
612
846
  defaultSessionExtractor: this.defaultSessionExtractor,
613
- defaultEventPublisher: this.defaultEventPublisher,
614
- availableAuthorizers: this.availableAuthorizers,
615
- defaultAuthorizerName: this.defaultAuthorizerName,
616
- defaultAuditorStorage: this.defaultAuditorStorage,
617
- defaultDatabaseService: this.defaultDatabaseService,
618
- defaultActorExtractor: this.defaultActorExtractor,
619
- customSecuritySchemes: this.customSecuritySchemes,
620
- surface: this.surface,
621
- defaultRlsConfig: this.defaultRlsConfig
622
- });
623
- }
624
- publisher(publisher) {
625
- return new EndpointFactory({
626
- defaultServices: this.defaultServices,
627
- defaultConstructs: this.defaultConstructs,
628
- basePath: this.basePath,
629
- defaultAuthorizeFn: this.defaultAuthorizeFn,
630
- defaultLogger: this.defaultLogger,
631
- defaultSessionExtractor: this.defaultSessionExtractor,
632
- defaultEventPublisher: publisher,
633
847
  availableAuthorizers: this.availableAuthorizers,
634
848
  defaultAuthorizerName: this.defaultAuthorizerName,
635
849
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -648,7 +862,6 @@ var EndpointFactory = class EndpointFactory {
648
862
  defaultAuthorizeFn: this.defaultAuthorizeFn,
649
863
  defaultLogger: this.defaultLogger,
650
864
  defaultSessionExtractor: session,
651
- defaultEventPublisher: this.defaultEventPublisher,
652
865
  availableAuthorizers: this.availableAuthorizers,
653
866
  defaultAuthorizerName: this.defaultAuthorizerName,
654
867
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -667,12 +880,11 @@ var EndpointFactory = class EndpointFactory {
667
880
  const service = serviceOf(source);
668
881
  return new EndpointFactory({
669
882
  defaultServices: this.defaultServices,
670
- defaultConstructs: this.defaultConstructs,
883
+ defaultConstructs: isConsumable(source) ? idsOf([source], this.defaultConstructs) : this.defaultConstructs,
671
884
  basePath: this.basePath,
672
885
  defaultAuthorizeFn: this.defaultAuthorizeFn,
673
886
  defaultLogger: this.defaultLogger,
674
887
  defaultSessionExtractor: this.defaultSessionExtractor,
675
- defaultEventPublisher: this.defaultEventPublisher,
676
888
  availableAuthorizers: this.availableAuthorizers,
677
889
  defaultAuthorizerName: this.defaultAuthorizerName,
678
890
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -695,7 +907,6 @@ var EndpointFactory = class EndpointFactory {
695
907
  defaultAuthorizeFn: this.defaultAuthorizeFn,
696
908
  defaultLogger: this.defaultLogger,
697
909
  defaultSessionExtractor: this.defaultSessionExtractor,
698
- defaultEventPublisher: this.defaultEventPublisher,
699
910
  availableAuthorizers: this.availableAuthorizers,
700
911
  defaultAuthorizerName: this.defaultAuthorizerName,
701
912
  defaultAuditorStorage: storage,
@@ -718,7 +929,6 @@ var EndpointFactory = class EndpointFactory {
718
929
  defaultAuthorizeFn: this.defaultAuthorizeFn,
719
930
  defaultLogger: this.defaultLogger,
720
931
  defaultSessionExtractor: this.defaultSessionExtractor,
721
- defaultEventPublisher: this.defaultEventPublisher,
722
932
  availableAuthorizers: this.availableAuthorizers,
723
933
  defaultAuthorizerName: this.defaultAuthorizerName,
724
934
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -755,7 +965,6 @@ var EndpointFactory = class EndpointFactory {
755
965
  defaultAuthorizeFn: this.defaultAuthorizeFn,
756
966
  defaultLogger: this.defaultLogger,
757
967
  defaultSessionExtractor: this.defaultSessionExtractor,
758
- defaultEventPublisher: this.defaultEventPublisher,
759
968
  availableAuthorizers: this.availableAuthorizers,
760
969
  defaultAuthorizerName: this.defaultAuthorizerName,
761
970
  defaultAuditorStorage: this.defaultAuditorStorage,
@@ -767,15 +976,13 @@ var EndpointFactory = class EndpointFactory {
767
976
  });
768
977
  }
769
978
  createBuilder(method, path) {
770
- const fullPath = EndpointFactory.joinPaths(path, this.basePath);
771
- const builder = new EndpointBuilder(fullPath, method);
979
+ const builder = new EndpointBuilder(EndpointFactory.joinPaths(path, this.basePath), method);
772
980
  if (this.defaultAuthorizeFn) builder._authorize = this.defaultAuthorizeFn;
773
981
  if (this.defaultServices.length) builder._services = [...this.defaultServices];
774
982
  if (this.defaultConstructs.length) builder._constructs = [...this.defaultConstructs];
775
983
  if (this.defaultLogger) builder._logger = this.defaultLogger;
776
984
  builder._surface = this.surface;
777
985
  if (this.defaultSessionExtractor) builder._getSession = this.defaultSessionExtractor;
778
- if (this.defaultEventPublisher) builder._setPublisher(this.defaultEventPublisher);
779
986
  builder._availableAuthorizers = this.availableAuthorizers;
780
987
  if (this.defaultAuthorizerName) builder._authorizerName = this.defaultAuthorizerName;
781
988
  if (this.defaultAuditorStorage) builder._setAuditorStorage(this.defaultAuditorStorage);
@@ -804,7 +1011,7 @@ var EndpointFactory = class EndpointFactory {
804
1011
  return this.createBuilder("OPTIONS", path);
805
1012
  }
806
1013
  };
807
-
808
1014
  //#endregion
809
- export { BUILT_IN_SECURITY_SCHEMES, EndpointBuilder, EndpointFactory, RLS_BYPASS, createAuthorizer, getSecurityScheme, isBuiltInSecurityScheme };
810
- //# sourceMappingURL=EndpointFactory-CjV8F_lJ.mjs.map
1015
+ export { UploadAcceptInvalid as a, UploadExpiryInvalid as c, BUILT_IN_SECURITY_SCHEMES as d, createAuthorizer as f, UPLOAD_POST_SCHEMA as i, UploadMaxSizeInvalid as l, isBuiltInSecurityScheme as m, EndpointBuilder as n, UploadContentTypeRefused as o, getSecurityScheme as p, UploadEndpointBuilder as r, UploadContentTypeUnresolved as s, EndpointFactory as t, RLS_BYPASS as u };
1016
+
1017
+ //# sourceMappingURL=EndpointFactory-c2ZugGig.mjs.map