@lastshotlabs/bunshot 0.0.27 → 0.0.28

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 (742) hide show
  1. package/.oclif.manifest.json +39 -0
  2. package/README.md +8282 -2147
  3. package/dist/cli/commands/init.js +690 -0
  4. package/dist/cli/index.js +6 -0
  5. package/dist/cli.js +4 -4
  6. package/dist/packages/bunshot-admin/src/index.d.ts +15 -0
  7. package/dist/packages/bunshot-admin/src/index.js +11 -0
  8. package/dist/packages/bunshot-admin/src/lib/resourceTypes.d.ts +8 -0
  9. package/dist/packages/bunshot-admin/src/lib/resourceTypes.js +33 -0
  10. package/dist/packages/bunshot-admin/src/lib/typedRoute.d.ts +14 -0
  11. package/dist/packages/bunshot-admin/src/lib/typedRoute.js +17 -0
  12. package/dist/packages/bunshot-admin/src/plugin.d.ts +4 -0
  13. package/dist/packages/bunshot-admin/src/plugin.js +46 -0
  14. package/dist/packages/bunshot-admin/src/providers/auth0Access.d.ts +6 -0
  15. package/dist/packages/bunshot-admin/src/providers/auth0Access.js +32 -0
  16. package/dist/packages/bunshot-admin/src/routes/admin.d.ts +10 -0
  17. package/dist/packages/bunshot-admin/src/routes/admin.js +923 -0
  18. package/dist/packages/bunshot-admin/src/routes/mail.d.ts +6 -0
  19. package/dist/packages/bunshot-admin/src/routes/mail.js +114 -0
  20. package/dist/packages/bunshot-admin/src/routes/permissions.d.ts +8 -0
  21. package/dist/packages/bunshot-admin/src/routes/permissions.js +315 -0
  22. package/dist/packages/bunshot-admin/src/types/config.d.ts +16 -0
  23. package/dist/packages/bunshot-admin/src/types/config.js +37 -0
  24. package/dist/packages/bunshot-admin/src/types/env.d.ts +14 -0
  25. package/dist/packages/bunshot-admin/src/types/provider.d.ts +1 -0
  26. package/dist/packages/bunshot-admin/src/types/provider.js +4 -0
  27. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.d.ts +66 -0
  28. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.js +1063 -0
  29. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.d.ts +2 -0
  30. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.js +536 -0
  31. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.d.ts +88 -0
  32. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.js +1366 -0
  33. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.d.ts +2 -0
  34. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.js +23 -0
  35. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.d.ts +5 -0
  36. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.js +131 -0
  37. package/dist/packages/bunshot-auth/src/bootstrap.d.ts +38 -0
  38. package/dist/packages/bunshot-auth/src/bootstrap.js +384 -0
  39. package/dist/packages/bunshot-auth/src/config/appConfig.d.ts +3 -0
  40. package/dist/packages/bunshot-auth/src/config/appConfig.js +4 -0
  41. package/dist/packages/bunshot-auth/src/config/authConfig.d.ts +478 -0
  42. package/dist/packages/bunshot-auth/src/config/authConfig.js +46 -0
  43. package/dist/packages/bunshot-auth/src/config/configLock.d.ts +2 -0
  44. package/dist/packages/bunshot-auth/src/config/configLock.js +10 -0
  45. package/dist/packages/bunshot-auth/src/index.d.ts +25 -0
  46. package/dist/packages/bunshot-auth/src/index.js +23 -0
  47. package/dist/packages/bunshot-auth/src/infra/mongo.d.ts +15 -0
  48. package/dist/packages/bunshot-auth/src/infra/mongo.js +44 -0
  49. package/dist/packages/bunshot-auth/src/infra/queue.d.ts +14 -0
  50. package/dist/packages/bunshot-auth/src/infra/queue.js +27 -0
  51. package/dist/packages/bunshot-auth/src/infra/redis.d.ts +5 -0
  52. package/dist/packages/bunshot-auth/src/infra/redis.js +15 -0
  53. package/dist/packages/bunshot-auth/src/infra/signing.d.ts +7 -0
  54. package/dist/packages/bunshot-auth/src/infra/signing.js +8 -0
  55. package/dist/packages/bunshot-auth/src/lib/accountLockout.d.ts +34 -0
  56. package/dist/packages/bunshot-auth/src/lib/accountLockout.js +244 -0
  57. package/dist/packages/bunshot-auth/src/lib/adapterTiers.d.ts +1 -0
  58. package/dist/packages/bunshot-auth/src/lib/adapterTiers.js +1 -0
  59. package/dist/packages/bunshot-auth/src/lib/authAdapter.d.ts +1 -0
  60. package/dist/packages/bunshot-auth/src/lib/authAdapter.js +1 -0
  61. package/dist/packages/bunshot-auth/src/lib/authContext.d.ts +15 -0
  62. package/dist/packages/bunshot-auth/src/lib/authContext.js +1 -0
  63. package/dist/packages/bunshot-auth/src/lib/authEventBus.d.ts +4 -0
  64. package/dist/packages/bunshot-auth/src/lib/authEventBus.js +15 -0
  65. package/dist/packages/bunshot-auth/src/lib/authRateLimit.d.ts +28 -0
  66. package/dist/packages/bunshot-auth/src/lib/authRateLimit.js +205 -0
  67. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.d.ts +8 -2
  68. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.js +22 -9
  69. package/dist/packages/bunshot-auth/src/lib/cache.d.ts +12 -0
  70. package/dist/packages/bunshot-auth/src/lib/cache.js +120 -0
  71. package/dist/packages/bunshot-auth/src/lib/clientIp.d.ts +4 -0
  72. package/dist/{lib → packages/bunshot-auth/src/lib}/clientIp.js +14 -7
  73. package/dist/packages/bunshot-auth/src/lib/cookieOptions.d.ts +27 -0
  74. package/dist/packages/bunshot-auth/src/lib/cookieOptions.js +33 -0
  75. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.d.ts +40 -0
  76. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.js +221 -0
  77. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.d.ts +19 -0
  78. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.js +148 -0
  79. package/dist/packages/bunshot-auth/src/lib/emailTemplates.d.ts +23 -0
  80. package/dist/packages/bunshot-auth/src/lib/emailTemplates.js +265 -0
  81. package/dist/packages/bunshot-auth/src/lib/emailVerification.d.ts +30 -0
  82. package/dist/packages/bunshot-auth/src/lib/emailVerification.js +200 -0
  83. package/dist/packages/bunshot-auth/src/lib/env.d.ts +1 -0
  84. package/dist/packages/bunshot-auth/src/lib/env.js +3 -0
  85. package/dist/packages/bunshot-auth/src/lib/fingerprint.js +36 -0
  86. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.d.ts +15 -16
  87. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.js +22 -34
  88. package/dist/packages/bunshot-auth/src/lib/jwks.d.ts +28 -0
  89. package/dist/packages/bunshot-auth/src/lib/jwks.js +79 -0
  90. package/dist/packages/bunshot-auth/src/lib/jwt.d.ts +12 -0
  91. package/dist/packages/bunshot-auth/src/lib/jwt.js +86 -0
  92. package/dist/{lib → packages/bunshot-auth/src/lib}/logger.js +3 -3
  93. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.d.ts +5 -4
  94. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.js +6 -10
  95. package/dist/packages/bunshot-auth/src/lib/magicLink.d.ts +13 -0
  96. package/dist/packages/bunshot-auth/src/lib/magicLink.js +145 -0
  97. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.d.ts +60 -0
  98. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.js +419 -0
  99. package/dist/packages/bunshot-auth/src/lib/oauth.d.ts +82 -0
  100. package/dist/packages/bunshot-auth/src/lib/oauth.js +177 -0
  101. package/dist/packages/bunshot-auth/src/lib/oauthCode.d.ts +19 -0
  102. package/dist/packages/bunshot-auth/src/lib/oauthCode.js +182 -0
  103. package/dist/packages/bunshot-auth/src/lib/oauthReauth.d.ts +19 -0
  104. package/dist/packages/bunshot-auth/src/lib/oauthReauth.js +255 -0
  105. package/dist/packages/bunshot-auth/src/lib/organization.d.ts +66 -0
  106. package/dist/packages/bunshot-auth/src/lib/organization.js +225 -0
  107. package/dist/packages/bunshot-auth/src/lib/passwordHistory.d.ts +12 -0
  108. package/dist/packages/bunshot-auth/src/lib/passwordHistory.js +31 -0
  109. package/dist/packages/bunshot-auth/src/lib/resetPassword.d.ts +20 -0
  110. package/dist/packages/bunshot-auth/src/lib/resetPassword.js +148 -0
  111. package/dist/packages/bunshot-auth/src/lib/roles.d.ts +9 -0
  112. package/dist/packages/bunshot-auth/src/lib/roles.js +93 -0
  113. package/dist/packages/bunshot-auth/src/lib/saml.d.ts +29 -0
  114. package/dist/packages/bunshot-auth/src/lib/saml.js +73 -0
  115. package/dist/packages/bunshot-auth/src/lib/samlRequestId.d.ts +13 -0
  116. package/dist/packages/bunshot-auth/src/lib/samlRequestId.js +129 -0
  117. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.d.ts +7 -7
  118. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.js +15 -13
  119. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.d.ts +22 -0
  120. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.js +65 -0
  121. package/dist/packages/bunshot-auth/src/lib/session.d.ts +45 -0
  122. package/dist/packages/bunshot-auth/src/lib/session.js +1211 -0
  123. package/dist/packages/bunshot-auth/src/lib/storeInfra.d.ts +26 -0
  124. package/dist/packages/bunshot-auth/src/lib/storeInfra.js +18 -0
  125. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.d.ts +3 -2
  126. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.js +2 -5
  127. package/dist/packages/bunshot-auth/src/lib/validateAdapter.d.ts +16 -0
  128. package/dist/packages/bunshot-auth/src/lib/validateAdapter.js +161 -0
  129. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.d.ts +13 -0
  130. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.js +58 -0
  131. package/dist/{middleware → packages/bunshot-auth/src/middleware}/csrf.d.ts +5 -4
  132. package/dist/packages/bunshot-auth/src/middleware/csrf.js +138 -0
  133. package/dist/packages/bunshot-auth/src/middleware/identify.d.ts +4 -0
  134. package/dist/packages/bunshot-auth/src/middleware/identify.js +124 -0
  135. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.d.ts +2 -2
  136. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.js +10 -8
  137. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.d.ts +2 -2
  138. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.js +20 -16
  139. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.d.ts +2 -2
  140. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.js +6 -6
  141. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.d.ts +2 -2
  142. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.js +8 -7
  143. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.d.ts +2 -2
  144. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.js +7 -6
  145. package/dist/packages/bunshot-auth/src/middleware/scimAuth.d.ts +8 -0
  146. package/dist/packages/bunshot-auth/src/middleware/scimAuth.js +29 -0
  147. package/dist/packages/bunshot-auth/src/middleware/userAuth.d.ts +3 -0
  148. package/dist/packages/bunshot-auth/src/middleware/userAuth.js +6 -0
  149. package/dist/{models → packages/bunshot-auth/src/models}/AuthUser.d.ts +12 -8
  150. package/dist/packages/bunshot-auth/src/models/AuthUser.js +53 -0
  151. package/dist/packages/bunshot-auth/src/models/Group.d.ts +19 -0
  152. package/dist/packages/bunshot-auth/src/models/Group.js +22 -0
  153. package/dist/{models → packages/bunshot-auth/src/models}/GroupMembership.d.ts +6 -8
  154. package/dist/packages/bunshot-auth/src/models/GroupMembership.js +19 -0
  155. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.d.ts +1 -1
  156. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.js +5 -5
  157. package/dist/packages/bunshot-auth/src/models/TenantRole.d.ts +13 -0
  158. package/dist/packages/bunshot-auth/src/models/TenantRole.js +17 -0
  159. package/dist/packages/bunshot-auth/src/plugin.d.ts +4 -0
  160. package/dist/packages/bunshot-auth/src/plugin.js +274 -0
  161. package/dist/packages/bunshot-auth/src/routes/auth.d.ts +15 -0
  162. package/dist/packages/bunshot-auth/src/routes/auth.js +1624 -0
  163. package/dist/packages/bunshot-auth/src/routes/groups.d.ts +4 -0
  164. package/dist/packages/bunshot-auth/src/routes/groups.js +481 -0
  165. package/dist/packages/bunshot-auth/src/routes/m2m.d.ts +2 -0
  166. package/dist/packages/bunshot-auth/src/routes/m2m.js +145 -0
  167. package/dist/packages/bunshot-auth/src/routes/mfa.d.ts +6 -0
  168. package/dist/packages/bunshot-auth/src/routes/mfa.js +991 -0
  169. package/dist/packages/bunshot-auth/src/routes/oauth.d.ts +3 -0
  170. package/dist/packages/bunshot-auth/src/routes/oauth.js +1727 -0
  171. package/dist/packages/bunshot-auth/src/routes/oidc.d.ts +2 -0
  172. package/dist/packages/bunshot-auth/src/routes/oidc.js +84 -0
  173. package/dist/packages/bunshot-auth/src/routes/organizations.d.ts +3 -0
  174. package/dist/packages/bunshot-auth/src/routes/organizations.js +741 -0
  175. package/dist/packages/bunshot-auth/src/routes/passkey.d.ts +2 -0
  176. package/dist/packages/bunshot-auth/src/routes/passkey.js +199 -0
  177. package/dist/packages/bunshot-auth/src/routes/saml.d.ts +2 -0
  178. package/dist/packages/bunshot-auth/src/routes/saml.js +226 -0
  179. package/dist/packages/bunshot-auth/src/routes/scim.d.ts +3 -0
  180. package/dist/packages/bunshot-auth/src/routes/scim.js +588 -0
  181. package/dist/packages/bunshot-auth/src/runtime.d.ts +52 -0
  182. package/dist/packages/bunshot-auth/src/runtime.js +11 -0
  183. package/dist/{schemas → packages/bunshot-auth/src/schemas}/auth.d.ts +4 -5
  184. package/dist/packages/bunshot-auth/src/schemas/auth.js +24 -0
  185. package/dist/packages/bunshot-auth/src/schemas/error.d.ts +10 -0
  186. package/dist/packages/bunshot-auth/src/schemas/error.js +10 -0
  187. package/dist/packages/bunshot-auth/src/schemas/success.d.ts +10 -0
  188. package/dist/packages/bunshot-auth/src/schemas/success.js +10 -0
  189. package/dist/packages/bunshot-auth/src/services/auth.d.ts +39 -0
  190. package/dist/packages/bunshot-auth/src/services/auth.js +378 -0
  191. package/dist/{services → packages/bunshot-auth/src/services}/mfa.d.ts +41 -17
  192. package/dist/{services → packages/bunshot-auth/src/services}/mfa.js +259 -183
  193. package/dist/packages/bunshot-auth/src/testing.d.ts +31 -0
  194. package/dist/packages/bunshot-auth/src/testing.js +23 -0
  195. package/dist/packages/bunshot-auth/src/types/adapter.d.ts +1 -0
  196. package/dist/packages/bunshot-auth/src/types/adapter.js +1 -0
  197. package/dist/packages/bunshot-auth/src/types/config.d.ts +152 -0
  198. package/dist/packages/bunshot-auth/src/types/config.js +179 -0
  199. package/dist/{routes → packages/bunshot-auth/src/types}/groups.d.ts +2 -3
  200. package/dist/packages/bunshot-auth/src/types/groups.js +1 -0
  201. package/dist/packages/bunshot-auth/src/types/oauthCode.d.ts +6 -0
  202. package/dist/packages/bunshot-auth/src/types/oauthCode.js +1 -0
  203. package/dist/packages/bunshot-auth/src/types/oauthReauth.d.ts +13 -0
  204. package/dist/packages/bunshot-auth/src/types/oauthReauth.js +1 -0
  205. package/dist/packages/bunshot-auth/src/types/redis.d.ts +1 -0
  206. package/dist/packages/bunshot-auth/src/types/redis.js +1 -0
  207. package/dist/packages/bunshot-auth/src/types/saml.d.ts +10 -0
  208. package/dist/packages/bunshot-auth/src/types/saml.js +1 -0
  209. package/dist/packages/bunshot-auth/src/types/session.d.ts +18 -0
  210. package/dist/packages/bunshot-auth/src/types/session.js +1 -0
  211. package/dist/packages/bunshot-auth/src/types/store.d.ts +1 -0
  212. package/dist/packages/bunshot-auth/src/types/store.js +1 -0
  213. package/dist/packages/bunshot-core/src/adminProvider.d.ts +95 -0
  214. package/dist/packages/bunshot-core/src/adminProvider.js +1 -0
  215. package/dist/packages/bunshot-core/src/auditLog.d.ts +34 -0
  216. package/dist/packages/bunshot-core/src/auditLog.js +1 -0
  217. package/dist/packages/bunshot-core/src/auth-adapter.d.ts +227 -0
  218. package/dist/packages/bunshot-core/src/auth-adapter.js +4 -0
  219. package/dist/packages/bunshot-core/src/authVariables.d.ts +14 -0
  220. package/dist/packages/bunshot-core/src/authVariables.js +4 -0
  221. package/dist/packages/bunshot-core/src/cache.d.ts +12 -0
  222. package/dist/packages/bunshot-core/src/cache.js +21 -0
  223. package/dist/{lib → packages/bunshot-core/src}/captcha.d.ts +1 -10
  224. package/dist/packages/bunshot-core/src/captcha.js +1 -0
  225. package/dist/packages/bunshot-core/src/clearRegistry.d.ts +6 -0
  226. package/dist/packages/bunshot-core/src/clearRegistry.js +17 -0
  227. package/dist/packages/bunshot-core/src/clientIp.d.ts +3 -0
  228. package/dist/packages/bunshot-core/src/clientIp.js +45 -0
  229. package/dist/packages/bunshot-core/src/configLock.d.ts +4 -0
  230. package/dist/packages/bunshot-core/src/configLock.js +7 -0
  231. package/dist/packages/bunshot-core/src/configValidation.d.ts +22 -0
  232. package/dist/packages/bunshot-core/src/configValidation.js +39 -0
  233. package/dist/packages/bunshot-core/src/constants.js +10 -0
  234. package/dist/packages/bunshot-core/src/context/bunshotContext.d.ts +232 -0
  235. package/dist/packages/bunshot-core/src/context/bunshotContext.js +1 -0
  236. package/dist/packages/bunshot-core/src/context/contextAccess.d.ts +3 -0
  237. package/dist/packages/bunshot-core/src/context/contextAccess.js +16 -0
  238. package/dist/packages/bunshot-core/src/context/contextStore.d.ts +16 -0
  239. package/dist/packages/bunshot-core/src/context/contextStore.js +31 -0
  240. package/dist/packages/bunshot-core/src/context/frameworkConfig.d.ts +38 -0
  241. package/dist/packages/bunshot-core/src/context/frameworkConfig.js +1 -0
  242. package/dist/packages/bunshot-core/src/context/index.d.ts +4 -0
  243. package/dist/packages/bunshot-core/src/context/index.js +2 -0
  244. package/dist/packages/bunshot-core/src/context.d.ts +40 -0
  245. package/dist/packages/bunshot-core/src/context.js +35 -0
  246. package/dist/packages/bunshot-core/src/coreContracts.d.ts +47 -0
  247. package/dist/packages/bunshot-core/src/coreContracts.js +1 -0
  248. package/dist/packages/bunshot-core/src/coreRegistrar.d.ts +6 -0
  249. package/dist/packages/bunshot-core/src/coreRegistrar.js +42 -0
  250. package/dist/{lib → packages/bunshot-core/src}/createRoute.d.ts +4 -30
  251. package/dist/{lib → packages/bunshot-core/src}/createRoute.js +39 -88
  252. package/dist/packages/bunshot-core/src/cronRegistry.d.ts +11 -0
  253. package/dist/packages/bunshot-core/src/cronRegistry.js +1 -0
  254. package/dist/packages/bunshot-core/src/crypto.d.ts +43 -0
  255. package/dist/packages/bunshot-core/src/crypto.js +74 -0
  256. package/dist/packages/bunshot-core/src/csrf.d.ts +8 -0
  257. package/dist/packages/bunshot-core/src/csrf.js +1 -0
  258. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.d.ts +7 -0
  259. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.js +19 -0
  260. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.d.ts +6 -0
  261. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.js +40 -0
  262. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.d.ts +6 -0
  263. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.js +24 -0
  264. package/dist/packages/bunshot-core/src/emailTemplates.d.ts +5 -0
  265. package/dist/packages/bunshot-core/src/emailTemplates.js +10 -0
  266. package/dist/{lib/HttpError.d.ts → packages/bunshot-core/src/errors.d.ts} +4 -1
  267. package/dist/{lib/HttpError.js → packages/bunshot-core/src/errors.js} +7 -1
  268. package/dist/packages/bunshot-core/src/eventBus.d.ts +270 -0
  269. package/dist/packages/bunshot-core/src/eventBus.js +143 -0
  270. package/dist/packages/bunshot-core/src/idempotency.d.ts +18 -0
  271. package/dist/packages/bunshot-core/src/idempotency.js +1 -0
  272. package/dist/packages/bunshot-core/src/index.d.ts +60 -0
  273. package/dist/packages/bunshot-core/src/index.js +34 -0
  274. package/dist/packages/bunshot-core/src/mail.d.ts +14 -0
  275. package/dist/packages/bunshot-core/src/mail.js +8 -0
  276. package/dist/packages/bunshot-core/src/memoryEviction.d.ts +24 -0
  277. package/dist/packages/bunshot-core/src/memoryEviction.js +52 -0
  278. package/dist/packages/bunshot-core/src/pagination.d.ts +45 -0
  279. package/dist/packages/bunshot-core/src/pagination.js +61 -0
  280. package/dist/packages/bunshot-core/src/permissions.d.ts +64 -0
  281. package/dist/packages/bunshot-core/src/permissions.js +27 -0
  282. package/dist/packages/bunshot-core/src/plugin.d.ts +44 -0
  283. package/dist/packages/bunshot-core/src/plugin.js +1 -0
  284. package/dist/packages/bunshot-core/src/rateLimit.d.ts +5 -0
  285. package/dist/packages/bunshot-core/src/rateLimit.js +18 -0
  286. package/dist/packages/bunshot-core/src/redis.d.ts +21 -0
  287. package/dist/packages/bunshot-core/src/redis.js +1 -0
  288. package/dist/packages/bunshot-core/src/routeAuth.d.ts +5 -0
  289. package/dist/packages/bunshot-core/src/routeAuth.js +11 -0
  290. package/dist/packages/bunshot-core/src/routeOverrides.d.ts +24 -0
  291. package/dist/packages/bunshot-core/src/routeOverrides.js +25 -0
  292. package/dist/packages/bunshot-core/src/routerAdapter.d.ts +6 -0
  293. package/dist/packages/bunshot-core/src/routerAdapter.js +56 -0
  294. package/dist/packages/bunshot-core/src/secrets.d.ts +48 -0
  295. package/dist/packages/bunshot-core/src/secrets.js +8 -0
  296. package/dist/packages/bunshot-core/src/signing.d.ts +41 -0
  297. package/dist/packages/bunshot-core/src/signing.js +1 -0
  298. package/dist/packages/bunshot-core/src/sse.d.ts +36 -0
  299. package/dist/packages/bunshot-core/src/sse.js +1 -0
  300. package/dist/packages/bunshot-core/src/storageAdapter.js +1 -0
  301. package/dist/packages/bunshot-core/src/storeInfra.d.ts +44 -0
  302. package/dist/packages/bunshot-core/src/storeInfra.js +18 -0
  303. package/dist/packages/bunshot-core/src/storeType.d.ts +7 -0
  304. package/dist/packages/bunshot-core/src/storeType.js +1 -0
  305. package/dist/packages/bunshot-core/src/testing.d.ts +1 -0
  306. package/dist/packages/bunshot-core/src/testing.js +1 -0
  307. package/dist/packages/bunshot-core/src/uploadRegistry.d.ts +23 -0
  308. package/dist/packages/bunshot-core/src/uploadRegistry.js +4 -0
  309. package/dist/packages/bunshot-core/src/userResolver.d.ts +5 -0
  310. package/dist/packages/bunshot-core/src/userResolver.js +14 -0
  311. package/dist/packages/bunshot-core/src/wsMessages.d.ts +42 -0
  312. package/dist/packages/bunshot-core/src/wsMessages.js +4 -0
  313. package/dist/packages/bunshot-permissions/src/adapters/memory.d.ts +7 -0
  314. package/dist/packages/bunshot-permissions/src/adapters/memory.js +73 -0
  315. package/dist/packages/bunshot-permissions/src/index.d.ts +10 -0
  316. package/dist/packages/bunshot-permissions/src/index.js +5 -0
  317. package/dist/packages/bunshot-permissions/src/lib/bootstrap.d.ts +7 -0
  318. package/dist/packages/bunshot-permissions/src/lib/bootstrap.js +12 -0
  319. package/dist/packages/bunshot-permissions/src/lib/evaluator.d.ts +10 -0
  320. package/dist/packages/bunshot-permissions/src/lib/evaluator.js +165 -0
  321. package/dist/packages/bunshot-permissions/src/lib/registry.d.ts +2 -0
  322. package/dist/packages/bunshot-permissions/src/lib/registry.js +31 -0
  323. package/dist/packages/bunshot-permissions/src/lib/validation.d.ts +1 -0
  324. package/dist/packages/bunshot-permissions/src/lib/validation.js +1 -0
  325. package/dist/packages/bunshot-permissions/src/types/adapter.d.ts +1 -0
  326. package/dist/packages/bunshot-permissions/src/types/adapter.js +1 -0
  327. package/dist/packages/bunshot-permissions/src/types/evaluator.d.ts +1 -0
  328. package/dist/packages/bunshot-permissions/src/types/evaluator.js +1 -0
  329. package/dist/packages/bunshot-permissions/src/types/models.d.ts +1 -0
  330. package/dist/packages/bunshot-permissions/src/types/models.js +1 -0
  331. package/dist/packages/bunshot-permissions/src/types/registry.d.ts +1 -0
  332. package/dist/packages/bunshot-permissions/src/types/registry.js +1 -0
  333. package/dist/packages/bunshot-postgres/src/adapter.d.ts +6 -0
  334. package/dist/packages/bunshot-postgres/src/adapter.js +794 -0
  335. package/dist/packages/bunshot-postgres/src/connection.d.ts +15 -0
  336. package/dist/packages/bunshot-postgres/src/connection.js +16 -0
  337. package/dist/packages/bunshot-postgres/src/index.d.ts +4 -0
  338. package/dist/packages/bunshot-postgres/src/index.js +2 -0
  339. package/dist/packages/bunshot-postgres/src/schema.d.ts +997 -0
  340. package/dist/packages/bunshot-postgres/src/schema.js +105 -0
  341. package/dist/src/app.d.ts +230 -0
  342. package/dist/src/app.js +182 -0
  343. package/dist/src/cli/commands/init.d.ts +10 -0
  344. package/dist/src/cli/commands/init.js +709 -0
  345. package/dist/src/cli/index.d.ts +1 -0
  346. package/dist/src/cli/index.js +3 -0
  347. package/dist/src/entrypoints/mongo.d.ts +6 -0
  348. package/dist/src/entrypoints/mongo.js +4 -0
  349. package/dist/src/entrypoints/queue.d.ts +2 -0
  350. package/dist/src/entrypoints/queue.js +1 -0
  351. package/dist/src/entrypoints/redis.d.ts +1 -0
  352. package/dist/src/entrypoints/redis.js +1 -0
  353. package/dist/{adapters → src/framework/adapters}/localStorage.d.ts +1 -1
  354. package/dist/{adapters → src/framework/adapters}/localStorage.js +10 -10
  355. package/dist/src/framework/adapters/memoryStorage.d.ts +2 -0
  356. package/dist/src/framework/adapters/memoryStorage.js +45 -0
  357. package/dist/{adapters → src/framework/adapters}/s3Storage.d.ts +1 -1
  358. package/dist/{adapters → src/framework/adapters}/s3Storage.js +12 -12
  359. package/dist/src/framework/admin/bunshotAccess.d.ts +2 -0
  360. package/dist/src/framework/admin/bunshotAccess.js +23 -0
  361. package/dist/src/framework/admin/bunshotUsers.d.ts +2 -0
  362. package/dist/src/framework/admin/bunshotUsers.js +103 -0
  363. package/dist/src/framework/admin/index.d.ts +7 -0
  364. package/dist/src/framework/admin/index.js +21 -0
  365. package/dist/src/framework/boundaryAdapters/cacheFactories.d.ts +13 -0
  366. package/dist/src/framework/boundaryAdapters/cacheFactories.js +86 -0
  367. package/dist/src/framework/boundaryAdapters/index.d.ts +2 -0
  368. package/dist/src/framework/boundaryAdapters/index.js +1 -0
  369. package/dist/src/framework/boundaryAdapters.d.ts +17 -0
  370. package/dist/src/framework/boundaryAdapters.js +62 -0
  371. package/dist/src/framework/buildContext.d.ts +33 -0
  372. package/dist/src/framework/buildContext.js +119 -0
  373. package/dist/src/framework/config/schema.d.ts +447 -0
  374. package/dist/src/framework/config/schema.js +528 -0
  375. package/dist/src/framework/createInfrastructure.d.ts +76 -0
  376. package/dist/src/framework/createInfrastructure.js +221 -0
  377. package/dist/src/framework/lib/auditLog.d.ts +23 -0
  378. package/dist/src/framework/lib/auditLog.js +416 -0
  379. package/dist/src/framework/lib/captcha.d.ts +11 -0
  380. package/dist/{lib → src/framework/lib}/captcha.js +13 -10
  381. package/dist/{lib → src/framework/lib}/createDtoMapper.js +4 -4
  382. package/dist/src/framework/lib/createRoute.d.ts +1 -0
  383. package/dist/src/framework/lib/createRoute.js +2 -0
  384. package/dist/{lib → src/framework/lib}/idempotency.d.ts +2 -6
  385. package/dist/src/framework/lib/idempotency.js +74 -0
  386. package/dist/src/framework/lib/logger.d.ts +3 -0
  387. package/dist/src/framework/lib/logger.js +14 -0
  388. package/dist/src/framework/lib/metrics.d.ts +34 -0
  389. package/dist/{lib → src/framework/lib}/metrics.js +49 -57
  390. package/dist/src/framework/lib/pagination.d.ts +42 -0
  391. package/dist/src/framework/lib/pagination.js +51 -0
  392. package/dist/src/framework/lib/redisTransport.d.ts +38 -0
  393. package/dist/src/framework/lib/redisTransport.js +107 -0
  394. package/dist/src/framework/lib/resolveUserId.d.ts +2 -0
  395. package/dist/src/framework/lib/resolveUserId.js +5 -0
  396. package/dist/src/framework/lib/sseCollision.d.ts +6 -0
  397. package/dist/src/framework/lib/sseCollision.js +26 -0
  398. package/dist/src/framework/lib/storageAdapter.d.ts +1 -0
  399. package/dist/src/framework/lib/storageAdapter.js +1 -0
  400. package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.js +4 -4
  401. package/dist/src/framework/lib/tenant.d.ts +21 -0
  402. package/dist/src/framework/lib/tenant.js +70 -0
  403. package/dist/{lib → src/framework/lib}/upload.d.ts +11 -10
  404. package/dist/src/framework/lib/upload.js +132 -0
  405. package/dist/src/framework/lib/uploadRegistry.d.ts +23 -0
  406. package/dist/src/framework/lib/uploadRegistry.js +34 -0
  407. package/dist/{lib → src/framework/lib}/validate.d.ts +1 -1
  408. package/dist/{lib → src/framework/lib}/validate.js +2 -2
  409. package/dist/src/framework/lib/ws.d.ts +19 -0
  410. package/dist/src/framework/lib/ws.js +130 -0
  411. package/dist/src/framework/lib/wsHeartbeat.d.ts +12 -0
  412. package/dist/src/framework/lib/wsHeartbeat.js +53 -0
  413. package/dist/src/framework/lib/wsMessages.d.ts +25 -0
  414. package/dist/src/framework/lib/wsMessages.js +45 -0
  415. package/dist/src/framework/lib/wsNamespace.d.ts +17 -0
  416. package/dist/src/framework/lib/wsNamespace.js +19 -0
  417. package/dist/src/framework/lib/wsPresence.d.ts +17 -0
  418. package/dist/src/framework/lib/wsPresence.js +84 -0
  419. package/dist/src/framework/lib/wsTransport.d.ts +38 -0
  420. package/dist/src/framework/lib/wsTransport.js +9 -0
  421. package/dist/{lib → src/framework/lib}/zodToMongoose.d.ts +1 -1
  422. package/dist/{lib → src/framework/lib}/zodToMongoose.js +11 -11
  423. package/dist/{middleware → src/framework/middleware}/auditLog.d.ts +4 -3
  424. package/dist/src/framework/middleware/auditLog.js +42 -0
  425. package/dist/{middleware → src/framework/middleware}/botProtection.d.ts +2 -2
  426. package/dist/{middleware → src/framework/middleware}/botProtection.js +8 -9
  427. package/dist/src/framework/middleware/cacheResponse.d.ts +35 -0
  428. package/dist/src/framework/middleware/cacheResponse.js +126 -0
  429. package/dist/{middleware → src/framework/middleware}/captcha.d.ts +2 -3
  430. package/dist/src/framework/middleware/captcha.js +37 -0
  431. package/dist/{middleware → src/framework/middleware}/errorHandler.d.ts +1 -1
  432. package/dist/{middleware → src/framework/middleware}/errorHandler.js +2 -2
  433. package/dist/src/framework/middleware/index.js +1 -0
  434. package/dist/{middleware → src/framework/middleware}/logger.d.ts +1 -1
  435. package/dist/src/framework/middleware/metrics.d.ts +12 -0
  436. package/dist/src/framework/middleware/metrics.js +26 -0
  437. package/dist/{middleware → src/framework/middleware}/rateLimit.d.ts +2 -2
  438. package/dist/src/framework/middleware/rateLimit.js +22 -0
  439. package/dist/src/framework/middleware/requestId.d.ts +3 -0
  440. package/dist/{middleware → src/framework/middleware}/requestId.js +2 -2
  441. package/dist/{middleware → src/framework/middleware}/requestLogger.d.ts +3 -3
  442. package/dist/{middleware → src/framework/middleware}/requestLogger.js +17 -12
  443. package/dist/{middleware → src/framework/middleware}/requestSigning.d.ts +2 -2
  444. package/dist/{middleware → src/framework/middleware}/requestSigning.js +18 -20
  445. package/dist/src/framework/middleware/tenant.d.ts +14 -0
  446. package/dist/{middleware → src/framework/middleware}/tenant.js +31 -27
  447. package/dist/src/framework/middleware/upload.d.ts +5 -0
  448. package/dist/{middleware → src/framework/middleware}/upload.js +4 -4
  449. package/dist/{middleware → src/framework/middleware}/webhookAuth.d.ts +3 -3
  450. package/dist/{middleware → src/framework/middleware}/webhookAuth.js +11 -12
  451. package/dist/src/framework/models/AuditLog.d.ts +21 -0
  452. package/dist/src/framework/models/AuditLog.js +31 -0
  453. package/dist/src/framework/mountMiddleware.d.ts +91 -0
  454. package/dist/src/framework/mountMiddleware.js +128 -0
  455. package/dist/src/framework/mountOptionalEndpoints.d.ts +103 -0
  456. package/dist/src/framework/mountOptionalEndpoints.js +47 -0
  457. package/dist/src/framework/mountRoutes.d.ts +21 -0
  458. package/dist/src/framework/mountRoutes.js +144 -0
  459. package/dist/src/framework/persistence/cronRegistry.d.ts +28 -0
  460. package/dist/src/framework/persistence/cronRegistry.js +139 -0
  461. package/dist/src/framework/persistence/idempotency.d.ts +26 -0
  462. package/dist/src/framework/persistence/idempotency.js +178 -0
  463. package/dist/src/framework/persistence/index.d.ts +6 -0
  464. package/dist/src/framework/persistence/index.js +8 -0
  465. package/dist/src/framework/persistence/storeInfra.d.ts +9 -0
  466. package/dist/src/framework/persistence/storeInfra.js +1 -0
  467. package/dist/src/framework/persistence/uploadRegistry.d.ts +35 -0
  468. package/dist/src/framework/persistence/uploadRegistry.js +235 -0
  469. package/dist/src/framework/persistence/wsMessages.d.ts +22 -0
  470. package/dist/src/framework/persistence/wsMessages.js +296 -0
  471. package/dist/src/framework/preloadSchemas.d.ts +24 -0
  472. package/dist/src/framework/preloadSchemas.js +42 -0
  473. package/dist/src/framework/registerBoundaryAdapters.d.ts +23 -0
  474. package/dist/src/framework/registerBoundaryAdapters.js +46 -0
  475. package/dist/src/framework/routes/admin.d.ts +9 -0
  476. package/dist/src/framework/routes/admin.js +361 -0
  477. package/dist/src/framework/routes/health.d.ts +1 -0
  478. package/dist/src/framework/routes/health.js +21 -0
  479. package/dist/src/framework/routes/home.d.ts +1 -0
  480. package/dist/src/framework/routes/home.js +18 -0
  481. package/dist/src/framework/routes/jobs.d.ts +3 -0
  482. package/dist/{routes → src/framework/routes}/jobs.js +128 -103
  483. package/dist/src/framework/routes/metrics.d.ts +10 -0
  484. package/dist/src/framework/routes/metrics.js +57 -0
  485. package/dist/{routes → src/framework/routes}/uploads.d.ts +3 -3
  486. package/dist/src/framework/routes/uploads.js +262 -0
  487. package/dist/src/framework/runPluginLifecycle.d.ts +27 -0
  488. package/dist/src/framework/runPluginLifecycle.js +121 -0
  489. package/dist/src/framework/secrets/frameworkSecretSchema.d.ts +58 -0
  490. package/dist/src/framework/secrets/frameworkSecretSchema.js +20 -0
  491. package/dist/src/framework/secrets/index.d.ts +9 -0
  492. package/dist/src/framework/secrets/index.js +7 -0
  493. package/dist/src/framework/secrets/providers/envProvider.d.ts +15 -0
  494. package/dist/src/framework/secrets/providers/envProvider.js +18 -0
  495. package/dist/src/framework/secrets/providers/fileProvider.d.ts +8 -0
  496. package/dist/src/framework/secrets/providers/fileProvider.js +82 -0
  497. package/dist/src/framework/secrets/providers/ssmProvider.d.ts +20 -0
  498. package/dist/src/framework/secrets/providers/ssmProvider.js +127 -0
  499. package/dist/src/framework/secrets/resolveSecretBundle.d.ts +53 -0
  500. package/dist/src/framework/secrets/resolveSecretBundle.js +84 -0
  501. package/dist/src/framework/secrets/resolveSecrets.d.ts +18 -0
  502. package/dist/src/framework/secrets/resolveSecrets.js +34 -0
  503. package/dist/src/framework/sse/index.d.ts +21 -0
  504. package/dist/src/framework/sse/index.js +109 -0
  505. package/dist/src/framework/ws/index.d.ts +11 -0
  506. package/dist/src/framework/ws/index.js +8 -0
  507. package/dist/src/index.d.ts +87 -0
  508. package/dist/src/index.js +58 -0
  509. package/dist/src/lib/appConfig.d.ts +7 -0
  510. package/dist/src/lib/appConfig.js +27 -0
  511. package/dist/src/lib/appMeta.d.ts +7 -0
  512. package/dist/src/lib/appMeta.js +3 -0
  513. package/dist/src/lib/authConfig.d.ts +532 -0
  514. package/dist/{lib/appConfig.js → src/lib/authConfig.js} +75 -17
  515. package/dist/{lib → src/lib}/context.d.ts +6 -12
  516. package/dist/{lib → src/lib}/context.js +5 -5
  517. package/dist/src/lib/logger.d.ts +1 -0
  518. package/dist/src/lib/logger.js +1 -0
  519. package/dist/src/lib/mongo.d.ts +58 -0
  520. package/dist/src/lib/mongo.js +96 -0
  521. package/dist/src/lib/queue.d.ts +72 -0
  522. package/dist/src/lib/queue.js +152 -0
  523. package/dist/src/lib/redis.d.ts +28 -0
  524. package/dist/src/lib/redis.js +72 -0
  525. package/dist/{lib → src/lib}/signing.d.ts +2 -2
  526. package/dist/src/lib/signing.js +210 -0
  527. package/dist/src/lib/signingConfig.d.ts +40 -0
  528. package/dist/src/lib/signingConfig.js +28 -0
  529. package/dist/src/server.d.ts +146 -0
  530. package/dist/src/server.js +469 -0
  531. package/dist/src/shared/lib/HttpError.d.ts +1 -0
  532. package/dist/src/shared/lib/HttpError.js +2 -0
  533. package/dist/src/shared/lib/constants.d.ts +10 -0
  534. package/dist/src/shared/lib/crypto.d.ts +43 -0
  535. package/dist/src/shared/lib/crypto.js +74 -0
  536. package/dist/src/shared/lib/signing.d.ts +52 -0
  537. package/dist/{lib → src/shared/lib}/signing.js +35 -8
  538. package/dist/src/testing.d.ts +34 -0
  539. package/dist/src/testing.js +93 -0
  540. package/package.json +60 -24
  541. package/dist/adapters/memoryAuth.d.ts +0 -52
  542. package/dist/adapters/memoryAuth.js +0 -749
  543. package/dist/adapters/memoryStorage.d.ts +0 -3
  544. package/dist/adapters/memoryStorage.js +0 -44
  545. package/dist/adapters/mongoAuth.d.ts +0 -2
  546. package/dist/adapters/mongoAuth.js +0 -403
  547. package/dist/adapters/sqliteAuth.d.ts +0 -72
  548. package/dist/adapters/sqliteAuth.js +0 -858
  549. package/dist/app.d.ts +0 -559
  550. package/dist/app.js +0 -651
  551. package/dist/entrypoints/mongo.d.ts +0 -5
  552. package/dist/entrypoints/mongo.js +0 -4
  553. package/dist/entrypoints/queue.d.ts +0 -2
  554. package/dist/entrypoints/queue.js +0 -1
  555. package/dist/entrypoints/redis.d.ts +0 -1
  556. package/dist/entrypoints/redis.js +0 -1
  557. package/dist/index.d.ts +0 -117
  558. package/dist/index.js +0 -88
  559. package/dist/lib/appConfig.d.ts +0 -275
  560. package/dist/lib/auditLog.d.ts +0 -58
  561. package/dist/lib/auditLog.js +0 -218
  562. package/dist/lib/authAdapter.d.ts +0 -246
  563. package/dist/lib/authAdapter.js +0 -7
  564. package/dist/lib/authRateLimit.d.ts +0 -13
  565. package/dist/lib/authRateLimit.js +0 -117
  566. package/dist/lib/clientIp.d.ts +0 -14
  567. package/dist/lib/credentialStuffing.d.ts +0 -31
  568. package/dist/lib/credentialStuffing.js +0 -77
  569. package/dist/lib/crypto.d.ts +0 -11
  570. package/dist/lib/crypto.js +0 -22
  571. package/dist/lib/deletionCancelToken.d.ts +0 -12
  572. package/dist/lib/deletionCancelToken.js +0 -88
  573. package/dist/lib/emailVerification.d.ts +0 -19
  574. package/dist/lib/emailVerification.js +0 -129
  575. package/dist/lib/fingerprint.js +0 -36
  576. package/dist/lib/idempotency.js +0 -182
  577. package/dist/lib/jwks.d.ts +0 -25
  578. package/dist/lib/jwks.js +0 -51
  579. package/dist/lib/jwt.d.ts +0 -15
  580. package/dist/lib/jwt.js +0 -111
  581. package/dist/lib/metrics.d.ts +0 -14
  582. package/dist/lib/mfaChallenge.d.ts +0 -55
  583. package/dist/lib/mfaChallenge.js +0 -398
  584. package/dist/lib/mongo.d.ts +0 -39
  585. package/dist/lib/mongo.js +0 -124
  586. package/dist/lib/oauth.d.ts +0 -40
  587. package/dist/lib/oauth.js +0 -101
  588. package/dist/lib/oauthCode.d.ts +0 -15
  589. package/dist/lib/oauthCode.js +0 -95
  590. package/dist/lib/pagination.d.ts +0 -119
  591. package/dist/lib/pagination.js +0 -166
  592. package/dist/lib/queue.d.ts +0 -37
  593. package/dist/lib/queue.js +0 -117
  594. package/dist/lib/redis.d.ts +0 -9
  595. package/dist/lib/redis.js +0 -61
  596. package/dist/lib/resetPassword.d.ts +0 -12
  597. package/dist/lib/resetPassword.js +0 -93
  598. package/dist/lib/roles.d.ts +0 -7
  599. package/dist/lib/roles.js +0 -49
  600. package/dist/lib/saml.d.ts +0 -25
  601. package/dist/lib/saml.js +0 -64
  602. package/dist/lib/securityEvents.d.ts +0 -28
  603. package/dist/lib/securityEvents.js +0 -26
  604. package/dist/lib/session.d.ts +0 -49
  605. package/dist/lib/session.js +0 -597
  606. package/dist/lib/tenant.d.ts +0 -15
  607. package/dist/lib/tenant.js +0 -65
  608. package/dist/lib/upload.js +0 -112
  609. package/dist/lib/uploadRegistry.d.ts +0 -18
  610. package/dist/lib/uploadRegistry.js +0 -83
  611. package/dist/lib/ws.d.ts +0 -22
  612. package/dist/lib/ws.js +0 -96
  613. package/dist/lib/wsHeartbeat.d.ts +0 -12
  614. package/dist/lib/wsHeartbeat.js +0 -57
  615. package/dist/lib/wsMessages.d.ts +0 -40
  616. package/dist/lib/wsMessages.js +0 -330
  617. package/dist/lib/wsPresence.d.ts +0 -25
  618. package/dist/lib/wsPresence.js +0 -99
  619. package/dist/middleware/auditLog.js +0 -39
  620. package/dist/middleware/bearerAuth.d.ts +0 -2
  621. package/dist/middleware/bearerAuth.js +0 -11
  622. package/dist/middleware/cacheResponse.d.ts +0 -15
  623. package/dist/middleware/cacheResponse.js +0 -178
  624. package/dist/middleware/captcha.js +0 -36
  625. package/dist/middleware/csrf.js +0 -129
  626. package/dist/middleware/identify.d.ts +0 -3
  627. package/dist/middleware/identify.js +0 -122
  628. package/dist/middleware/index.js +0 -1
  629. package/dist/middleware/metrics.d.ts +0 -9
  630. package/dist/middleware/metrics.js +0 -26
  631. package/dist/middleware/rateLimit.js +0 -22
  632. package/dist/middleware/requestId.d.ts +0 -3
  633. package/dist/middleware/scimAuth.d.ts +0 -8
  634. package/dist/middleware/scimAuth.js +0 -29
  635. package/dist/middleware/tenant.d.ts +0 -5
  636. package/dist/middleware/upload.d.ts +0 -5
  637. package/dist/middleware/userAuth.d.ts +0 -3
  638. package/dist/middleware/userAuth.js +0 -6
  639. package/dist/models/AuditLog.d.ts +0 -30
  640. package/dist/models/AuditLog.js +0 -39
  641. package/dist/models/AuthUser.js +0 -55
  642. package/dist/models/Group.d.ts +0 -21
  643. package/dist/models/Group.js +0 -28
  644. package/dist/models/GroupMembership.js +0 -25
  645. package/dist/models/TenantRole.d.ts +0 -15
  646. package/dist/models/TenantRole.js +0 -23
  647. package/dist/routes/auth.d.ts +0 -12
  648. package/dist/routes/auth.js +0 -744
  649. package/dist/routes/groups.js +0 -346
  650. package/dist/routes/health.d.ts +0 -1
  651. package/dist/routes/health.js +0 -22
  652. package/dist/routes/home.d.ts +0 -1
  653. package/dist/routes/home.js +0 -16
  654. package/dist/routes/jobs.d.ts +0 -2
  655. package/dist/routes/m2m.d.ts +0 -2
  656. package/dist/routes/m2m.js +0 -72
  657. package/dist/routes/metrics.d.ts +0 -8
  658. package/dist/routes/metrics.js +0 -55
  659. package/dist/routes/mfa.d.ts +0 -5
  660. package/dist/routes/mfa.js +0 -628
  661. package/dist/routes/oauth.d.ts +0 -2
  662. package/dist/routes/oauth.js +0 -520
  663. package/dist/routes/oidc.d.ts +0 -2
  664. package/dist/routes/oidc.js +0 -29
  665. package/dist/routes/passkey.d.ts +0 -1
  666. package/dist/routes/passkey.js +0 -157
  667. package/dist/routes/saml.d.ts +0 -2
  668. package/dist/routes/saml.js +0 -86
  669. package/dist/routes/scim.d.ts +0 -2
  670. package/dist/routes/scim.js +0 -255
  671. package/dist/routes/uploads.js +0 -227
  672. package/dist/schemas/auth.js +0 -30
  673. package/dist/server.d.ts +0 -57
  674. package/dist/server.js +0 -112
  675. package/dist/services/auth.d.ts +0 -29
  676. package/dist/services/auth.js +0 -238
  677. package/dist/ws/index.d.ts +0 -10
  678. package/dist/ws/index.js +0 -39
  679. package/docs/sections/adding-middleware/full.md +0 -35
  680. package/docs/sections/adding-models/full.md +0 -125
  681. package/docs/sections/adding-models/overview.md +0 -13
  682. package/docs/sections/adding-routes/full.md +0 -182
  683. package/docs/sections/adding-routes/overview.md +0 -23
  684. package/docs/sections/auth-flow/full.md +0 -790
  685. package/docs/sections/auth-flow/overview.md +0 -10
  686. package/docs/sections/auth-security-examples/full.md +0 -388
  687. package/docs/sections/authentication/full.md +0 -130
  688. package/docs/sections/authentication/overview.md +0 -5
  689. package/docs/sections/cli/full.md +0 -42
  690. package/docs/sections/configuration/full.md +0 -172
  691. package/docs/sections/configuration/overview.md +0 -18
  692. package/docs/sections/configuration-example/full.md +0 -117
  693. package/docs/sections/configuration-example/overview.md +0 -30
  694. package/docs/sections/documentation/full.md +0 -171
  695. package/docs/sections/environment-variables/full.md +0 -55
  696. package/docs/sections/exports/full.md +0 -123
  697. package/docs/sections/extending-context/full.md +0 -59
  698. package/docs/sections/header.md +0 -3
  699. package/docs/sections/installation/full.md +0 -6
  700. package/docs/sections/jobs/full.md +0 -140
  701. package/docs/sections/jobs/overview.md +0 -15
  702. package/docs/sections/logging/full.md +0 -83
  703. package/docs/sections/metrics/full.md +0 -131
  704. package/docs/sections/mongodb-connections/full.md +0 -45
  705. package/docs/sections/mongodb-connections/overview.md +0 -7
  706. package/docs/sections/multi-tenancy/full.md +0 -66
  707. package/docs/sections/multi-tenancy/overview.md +0 -15
  708. package/docs/sections/oauth/full.md +0 -189
  709. package/docs/sections/oauth/overview.md +0 -16
  710. package/docs/sections/package-development/full.md +0 -7
  711. package/docs/sections/pagination/full.md +0 -93
  712. package/docs/sections/passkey-login/full.md +0 -90
  713. package/docs/sections/passkey-login/overview.md +0 -1
  714. package/docs/sections/peer-dependencies/full.md +0 -47
  715. package/docs/sections/quick-start/full.md +0 -43
  716. package/docs/sections/response-caching/full.md +0 -117
  717. package/docs/sections/response-caching/overview.md +0 -13
  718. package/docs/sections/roles/full.md +0 -225
  719. package/docs/sections/roles/overview.md +0 -14
  720. package/docs/sections/running-without-redis/full.md +0 -16
  721. package/docs/sections/running-without-redis-or-mongodb/full.md +0 -60
  722. package/docs/sections/signing/full.md +0 -203
  723. package/docs/sections/stack/full.md +0 -10
  724. package/docs/sections/uploads/full.md +0 -208
  725. package/docs/sections/versioning/full.md +0 -85
  726. package/docs/sections/webhook-auth/full.md +0 -100
  727. package/docs/sections/websocket/full.md +0 -196
  728. package/docs/sections/websocket/overview.md +0 -5
  729. package/docs/sections/websocket-rooms/full.md +0 -102
  730. package/docs/sections/websocket-rooms/overview.md +0 -5
  731. /package/dist/{lib/storageAdapter.js → packages/bunshot-admin/src/types/env.js} +0 -0
  732. /package/dist/{lib → packages/bunshot-auth/src/lib}/fingerprint.d.ts +0 -0
  733. /package/dist/{lib → packages/bunshot-auth/src/lib}/logger.d.ts +0 -0
  734. /package/dist/{lib → packages/bunshot-core/src}/constants.d.ts +0 -0
  735. /package/dist/{lib → packages/bunshot-core/src}/storageAdapter.d.ts +0 -0
  736. /package/dist/{lib → src/framework/lib}/createDtoMapper.d.ts +0 -0
  737. /package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.d.ts +0 -0
  738. /package/dist/{middleware → src/framework/middleware}/cors.d.ts +0 -0
  739. /package/dist/{middleware → src/framework/middleware}/cors.js +0 -0
  740. /package/dist/{middleware → src/framework/middleware}/index.d.ts +0 -0
  741. /package/dist/{middleware → src/framework/middleware}/logger.js +0 -0
  742. /package/dist/{lib → src/shared/lib}/constants.js +0 -0
@@ -1,28 +1,35 @@
1
- let appName = "Core API";
2
- let appRoles = [];
3
- let defaultRole = null;
1
+ // Auth-specific runtime configuration singletons.
2
+ // Framework-only config (appName, appRoles, corsConfig, etc.) stays in appConfig.ts.
4
3
  let _primaryField = "email";
5
- let _emailVerificationConfig = null;
6
- let _passwordResetConfig = null;
7
- let _passwordPolicy = {};
8
- export const setAppName = (name) => { appName = name; };
9
- export const getAppName = () => appName;
10
- export const setAppRoles = (roles) => { appRoles = roles; };
11
- export const getAppRoles = () => appRoles;
12
- export const setDefaultRole = (role) => { defaultRole = role; };
13
- export const getDefaultRole = () => defaultRole;
14
4
  export const setPrimaryField = (field) => { _primaryField = field; };
15
5
  export const getPrimaryField = () => _primaryField;
6
+ let _concealRegistrationConfig = null;
7
+ export const setConcealRegistrationConfig = (config) => { _concealRegistrationConfig = config; };
8
+ export const getConcealRegistrationConfig = () => _concealRegistrationConfig;
9
+ let _emailVerificationConfig = null;
16
10
  export const setEmailVerificationConfig = (config) => { _emailVerificationConfig = config; };
17
11
  export const getEmailVerificationConfig = () => _emailVerificationConfig;
18
12
  const DEFAULT_TOKEN_EXPIRY = 60 * 60 * 24; // 24 hours
19
13
  export const getTokenExpiry = () => _emailVerificationConfig?.tokenExpiry ?? DEFAULT_TOKEN_EXPIRY;
14
+ let _passwordResetConfig = null;
20
15
  export const setPasswordResetConfig = (config) => { _passwordResetConfig = config; };
21
16
  export const getPasswordResetConfig = () => _passwordResetConfig;
22
- export const setPasswordPolicy = (config) => { _passwordPolicy = config; };
23
- export const getPasswordPolicy = () => _passwordPolicy;
24
17
  const DEFAULT_RESET_TOKEN_EXPIRY = 60 * 60; // 1 hour
25
18
  export const getResetTokenExpiry = () => _passwordResetConfig?.tokenExpiry ?? DEFAULT_RESET_TOKEN_EXPIRY;
19
+ let _magicLinkConfig = null;
20
+ export const setMagicLinkConfig = (config) => { _magicLinkConfig = config; };
21
+ export const getMagicLinkConfig = () => _magicLinkConfig;
22
+ export const getMagicLinkTtl = () => _magicLinkConfig?.ttlSeconds ?? 900;
23
+ let _passwordPolicy = {};
24
+ export const setPasswordPolicy = (config) => { _passwordPolicy = config; };
25
+ export const getPasswordPolicy = () => _passwordPolicy;
26
+ export const getPasswordPolicyPreventReuse = () => _passwordPolicy.preventReuse ?? 0;
27
+ let _authCookieConfig = {};
28
+ let _csrfCookieConfig = {};
29
+ export function setAuthCookieConfig(c) { _authCookieConfig = c; }
30
+ export function getAuthCookieConfig() { return _authCookieConfig; }
31
+ export function setCsrfCookieConfig(c) { _csrfCookieConfig = c; }
32
+ export function getCsrfCookieConfig() { return _csrfCookieConfig; }
26
33
  // ---------------------------------------------------------------------------
27
34
  // Session policy
28
35
  // ---------------------------------------------------------------------------
@@ -30,6 +37,7 @@ let _maxSessions = 6;
30
37
  let _persistSessionMetadata = true;
31
38
  let _includeInactiveSessions = false;
32
39
  let _trackLastActive = false;
40
+ let _sessionPolicyConfig = {};
33
41
  export const setMaxSessions = (n) => { _maxSessions = Number.isFinite(n) && n >= 1 ? Math.floor(n) : 1; };
34
42
  export const getMaxSessions = () => _maxSessions;
35
43
  export const setPersistSessionMetadata = (v) => { _persistSessionMetadata = v; };
@@ -38,6 +46,8 @@ export const setIncludeInactiveSessions = (v) => { _includeInactiveSessions = v;
38
46
  export const getIncludeInactiveSessions = () => _includeInactiveSessions;
39
47
  export const setTrackLastActive = (v) => { _trackLastActive = v; };
40
48
  export const getTrackLastActive = () => _trackLastActive;
49
+ export function setSessionPolicyConfig(p) { _sessionPolicyConfig = p; }
50
+ export function getSessionPolicyConfig() { return _sessionPolicyConfig; }
41
51
  let _refreshTokenConfig = null;
42
52
  export const setRefreshTokenConfig = (config) => { _refreshTokenConfig = config; };
43
53
  export const getRefreshTokenConfig = () => _refreshTokenConfig;
@@ -50,6 +60,11 @@ export const getRotationGraceSeconds = () => _refreshTokenConfig?.rotationGraceS
50
60
  let _mfaConfig = null;
51
61
  export const setMfaConfig = (config) => { _mfaConfig = config; };
52
62
  export const getMfaConfig = () => _mfaConfig;
63
+ // getMfaIssuer is defined after the getAppName import below
64
+ // ---------------------------------------------------------------------------
65
+ // Forward reference: getAppName lives in appConfig.ts
66
+ // ---------------------------------------------------------------------------
67
+ import { getAppName } from "./appConfig";
53
68
  export const getMfaIssuer = () => _mfaConfig?.issuer ?? getAppName();
54
69
  export const getMfaAlgorithm = () => _mfaConfig?.algorithm ?? "SHA1";
55
70
  export const getMfaDigits = () => _mfaConfig?.digits ?? 6;
@@ -69,11 +84,16 @@ let _csrfEnabled = false;
69
84
  export const setCsrfEnabled = (v) => { _csrfEnabled = v; };
70
85
  export const getCsrfEnabled = () => _csrfEnabled;
71
86
  let _signingConfig = null;
72
- export const setSigningConfig = (config) => { _signingConfig = config; };
87
+ let _signingConfigured = false;
88
+ export const setSigningConfig = (config) => {
89
+ _signingConfig = config;
90
+ _signingConfigured = true;
91
+ };
73
92
  export const getSigningConfig = () => _signingConfig;
93
+ export const isSigningConfigured = () => _signingConfigured;
74
94
  /**
75
- * Returns the active signing secret: signing.secret JWT_SECRET_PROD/DEV env var.
76
- * Returns null when neither is configured callers must handle this gracefully.
95
+ * Returns the active signing secret: signing.secret -> JWT_SECRET_PROD/DEV env var.
96
+ * Returns null when neither is configured - callers must handle this gracefully.
77
97
  */
78
98
  export const getSigningSecret = () => {
79
99
  if (_signingConfig?.secret)
@@ -91,6 +111,11 @@ export const getJwtAudience = () => _jwtConfig?.audience;
91
111
  let _breachedPasswordConfig = null;
92
112
  export const setBreachedPasswordConfig = (config) => { _breachedPasswordConfig = config; };
93
113
  export const getBreachedPasswordConfig = () => _breachedPasswordConfig;
114
+ let _oauthReauthConfig = null;
115
+ export const setOAuthReauthConfig = (config) => { _oauthReauthConfig = config; };
116
+ export const getOAuthReauthConfig = () => _oauthReauthConfig;
117
+ export const getOAuthReauthEnabled = () => _oauthReauthConfig?.enabled ?? false;
118
+ export const getOAuthReauthPromptType = () => _oauthReauthConfig?.promptType ?? "login";
94
119
  let _stepUpConfig = null;
95
120
  export const setStepUpConfig = (config) => { _stepUpConfig = config; };
96
121
  export const getStepUpConfig = () => _stepUpConfig;
@@ -119,3 +144,36 @@ export const getOidcConfig = () => _oidcConfig;
119
144
  let _scimConfig = null;
120
145
  export const setScimConfig = (config) => { _scimConfig = config; };
121
146
  export const getScimConfig = () => _scimConfig;
147
+ let _emailTemplatesConfig = null;
148
+ export const setEmailTemplatesConfig = (config) => { _emailTemplatesConfig = config; };
149
+ export const getEmailTemplatesConfig = () => _emailTemplatesConfig;
150
+ let _hooks = {};
151
+ export function setHooksConfig(h) { _hooks = h; }
152
+ export function getHooksConfig() { return _hooks; }
153
+ /**
154
+ * Parse data encryption keys from the BUNSHOT_DATA_ENCRYPTION_KEY env var.
155
+ * Env var format: comma-separated "keyId:base64key" pairs, first is active.
156
+ * Example: "v1:base64key1,v0:base64key0"
157
+ * Respects DEV/PROD split: BUNSHOT_DATA_ENCRYPTION_KEY_DEV / BUNSHOT_DATA_ENCRYPTION_KEY_PROD.
158
+ * Falls back to BUNSHOT_DATA_ENCRYPTION_KEY (no suffix).
159
+ * Returns [] when not set.
160
+ */
161
+ export function getDataEncryptionKeys() {
162
+ const isProd = process.env.NODE_ENV === "production";
163
+ const raw = (isProd ? process.env.BUNSHOT_DATA_ENCRYPTION_KEY_PROD : process.env.BUNSHOT_DATA_ENCRYPTION_KEY_DEV)
164
+ ?? process.env.BUNSHOT_DATA_ENCRYPTION_KEY
165
+ ?? "";
166
+ if (!raw.trim())
167
+ return [];
168
+ return raw.split(",").map((entry) => {
169
+ const colonIdx = entry.indexOf(":");
170
+ if (colonIdx === -1)
171
+ throw new Error(`getDataEncryptionKeys: invalid entry "${entry}" - expected "keyId:base64key"`);
172
+ const keyId = entry.slice(0, colonIdx).trim();
173
+ const keyBase64 = entry.slice(colonIdx + 1).trim();
174
+ const key = Buffer.from(keyBase64, "base64");
175
+ if (key.length !== 32)
176
+ throw new Error(`getDataEncryptionKeys: key "${keyId}" must be 32 bytes (got ${key.length})`);
177
+ return { keyId, key };
178
+ });
179
+ }
@@ -1,7 +1,7 @@
1
- import { OpenAPIHono, type Hook } from "@hono/zod-openapi";
2
- import type { ZodIssue } from "zod";
3
- import type { JWTPayload } from "jose";
4
- import type { UploadResult } from "./storageAdapter";
1
+ import { OpenAPIHono, type Hook } from '@hono/zod-openapi';
2
+ import type { ZodIssue } from 'zod';
3
+ import type { UploadResult } from '../framework/lib/storageAdapter';
4
+ import type { AuthVariables } from '../../packages/bunshot-auth/src/lib/authContext';
5
5
  export interface ValidationErrorDetail {
6
6
  path: string;
7
7
  message: string;
@@ -15,21 +15,15 @@ export type ValidationErrorFormatter = (issues: ZodIssue[], requestId: string) =
15
15
  export declare const defaultValidationErrorFormatter: ValidationErrorFormatter;
16
16
  export type AppVariables = {
17
17
  requestId: string;
18
- authUserId: string | null;
19
- roles: string[] | null;
20
- sessionId: string | null;
21
18
  tenantId: string | null;
22
19
  tenantConfig: Record<string, unknown> | null;
23
20
  validationErrorFormatter: ValidationErrorFormatter;
24
21
  uploadResults: UploadResult[] | null;
25
22
  uploadBucket: string | undefined;
26
- /** Set by identify when a scope-bearing M2M token (no sid) is verified. */
27
- authClientId: string | null;
28
- /** Raw verified JWT payload stashed by identify for downstream middleware. Null when unauthenticated. */
29
- tokenPayload: JWTPayload | null;
30
23
  };
31
24
  export type AppEnv = {
32
- Variables: AppVariables;
25
+ Variables: AppVariables & AuthVariables;
33
26
  };
34
27
  export declare const defaultHook: Hook<any, AppEnv, any, any>;
35
28
  export declare const createRouter: () => OpenAPIHono<AppEnv, {}, "/">;
29
+ export type { AuthVariables } from '../../packages/bunshot-auth/src/lib/authContext';
@@ -1,16 +1,16 @@
1
- import { OpenAPIHono } from "@hono/zod-openapi";
1
+ import { OpenAPIHono } from '@hono/zod-openapi';
2
2
  export const defaultValidationErrorFormatter = (issues, requestId) => {
3
- const error = issues.map((i) => i.message).join(", ");
3
+ const error = issues.map((i) => i.message).join(', ');
4
4
  const details = issues.map((i) => ({
5
- path: i.path.join("."),
5
+ path: i.path.join('.'),
6
6
  message: i.message,
7
7
  }));
8
8
  return { error, details, requestId };
9
9
  };
10
10
  export const defaultHook = (result, c) => {
11
11
  if (!result.success) {
12
- const requestId = c.get("requestId") ?? "unknown";
13
- const formatter = c.get("validationErrorFormatter") ?? defaultValidationErrorFormatter;
12
+ const requestId = c.get('requestId') ?? 'unknown';
13
+ const formatter = c.get('validationErrorFormatter') ?? defaultValidationErrorFormatter;
14
14
  try {
15
15
  return c.json(formatter(result.error.issues, requestId), 400);
16
16
  }
@@ -0,0 +1 @@
1
+ export { log, authTrace } from "../framework/lib/logger";
@@ -0,0 +1 @@
1
+ export { log, authTrace } from "../framework/lib/logger";
@@ -0,0 +1,58 @@
1
+ import type { Connection, Mongoose } from 'mongoose';
2
+ type MongooseModule = Mongoose;
3
+ export interface MongoCredentials {
4
+ user: string;
5
+ password: string;
6
+ host: string;
7
+ db: string;
8
+ }
9
+ export interface MongoConnections {
10
+ authConn: Connection;
11
+ appConn: Connection;
12
+ mongoose: MongooseModule;
13
+ }
14
+ /**
15
+ * Connect the auth connection to its dedicated MongoDB server.
16
+ *
17
+ * @param creds Credentials resolved by ISecretRepository. No process.env fallback.
18
+ */
19
+ export declare const connectAuthMongo: (creds: MongoCredentials) => Promise<{
20
+ authConn: Connection;
21
+ mongoose: MongooseModule;
22
+ }>;
23
+ /**
24
+ * Connect the app connection to its MongoDB server.
25
+ *
26
+ * @param creds Credentials resolved by ISecretRepository. No process.env fallback.
27
+ */
28
+ export declare const connectAppMongo: (creds: MongoCredentials) => Promise<{
29
+ appConn: Connection;
30
+ mongoose: MongooseModule;
31
+ }>;
32
+ /**
33
+ * Connect both auth and app connections to the same MongoDB server.
34
+ * Shorthand for single-DB setups.
35
+ *
36
+ * @param creds Credentials resolved by ISecretRepository. No process.env fallback.
37
+ */
38
+ export declare const connectMongo: (creds: MongoCredentials) => Promise<MongoConnections>;
39
+ /**
40
+ * Context-aware Mongo getter. Returns the instance-scoped connections from
41
+ * BunshotContext. Throws if no BunshotContext is attached to the app.
42
+ * Returns null when Mongo is not configured on the context.
43
+ */
44
+ export declare const getMongoFromApp: (app: object) => {
45
+ auth: Connection | null;
46
+ app: Connection | null;
47
+ } | null;
48
+ /**
49
+ * Close both auth and app Mongo connections.
50
+ * Accepts connections as parameters — no module-level state.
51
+ */
52
+ export declare const disconnectMongo: (authConn: Connection | null, appConn: Connection | null) => Promise<void>;
53
+ /**
54
+ * Get the mongoose module (lazy-loaded). Useful for consumers that need
55
+ * the mongoose module without a connection (e.g., Schema class access).
56
+ */
57
+ export declare const getMongooseModule: () => MongooseModule;
58
+ export {};
@@ -0,0 +1,96 @@
1
+ // MongoDB connection management — no module-level mutable state.
2
+ //
3
+ // Phase 1 singleton elimination: connect functions return their connections
4
+ // directly instead of storing them in module globals. Module-level proxy
5
+ // objects (authConnection, appConnection, mongoose) are removed.
6
+ // Use getMongoFromApp(app) for context-aware access.
7
+ import { log } from '../framework/lib/logger';
8
+ import { getContext } from '../../packages/bunshot-core/src/index.js';
9
+ /** Lazy mongoose module loader — caching a require() result, not runtime state. */
10
+ function requireMongoose() {
11
+ try {
12
+ // Bun supports require() in ESM; this defers the import to call time
13
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
14
+ const mod = require('mongoose');
15
+ return (mod.default ?? mod);
16
+ }
17
+ catch {
18
+ throw new Error('mongoose is not installed. Run: bun add mongoose');
19
+ }
20
+ }
21
+ function buildUri(user, password, host, db) {
22
+ const [hostPart, queryPart] = host.split('?');
23
+ return `mongodb+srv://${encodeURIComponent(user)}:${encodeURIComponent(password)}@${hostPart.replace(/\/$/, '')}/${db}${queryPart ? `?${queryPart}` : ''}`;
24
+ }
25
+ /**
26
+ * Connect the auth connection to its dedicated MongoDB server.
27
+ *
28
+ * @param creds Credentials resolved by ISecretRepository. No process.env fallback.
29
+ */
30
+ export const connectAuthMongo = async (creds) => {
31
+ const mg = requireMongoose();
32
+ const authConn = mg.createConnection();
33
+ const uri = buildUri(creds.user, creds.password, creds.host, creds.db);
34
+ await authConn.openUri(uri);
35
+ log(`[mongo] auth connected to ${creds.host} as ${creds.user}`);
36
+ return { authConn, mongoose: mg };
37
+ };
38
+ /**
39
+ * Connect the app connection to its MongoDB server.
40
+ *
41
+ * @param creds Credentials resolved by ISecretRepository. No process.env fallback.
42
+ */
43
+ export const connectAppMongo = async (creds) => {
44
+ const mg = requireMongoose();
45
+ const appConn = mg.createConnection();
46
+ const uri = buildUri(creds.user, creds.password, creds.host, creds.db);
47
+ await appConn.openUri(uri);
48
+ log(`[mongo] app connected to ${creds.host} as ${creds.user}`);
49
+ return { appConn, mongoose: mg };
50
+ };
51
+ /**
52
+ * Connect both auth and app connections to the same MongoDB server.
53
+ * Shorthand for single-DB setups.
54
+ *
55
+ * @param creds Credentials resolved by ISecretRepository. No process.env fallback.
56
+ */
57
+ export const connectMongo = async (creds) => {
58
+ const mg = requireMongoose();
59
+ const authConn = mg.createConnection();
60
+ const appConn = mg.createConnection();
61
+ const uri = buildUri(creds.user, creds.password, creds.host, creds.db);
62
+ await Promise.all([authConn.openUri(uri), appConn.openUri(uri)]);
63
+ log(`[mongo] connected to ${creds.host} as ${creds.user}`);
64
+ return { authConn, appConn, mongoose: mg };
65
+ };
66
+ /**
67
+ * Context-aware Mongo getter. Returns the instance-scoped connections from
68
+ * BunshotContext. Throws if no BunshotContext is attached to the app.
69
+ * Returns null when Mongo is not configured on the context.
70
+ */
71
+ export const getMongoFromApp = (app) => {
72
+ const ctx = getContext(app);
73
+ if (ctx.mongo) {
74
+ return {
75
+ auth: ctx.mongo.auth ?? null,
76
+ app: ctx.mongo.app ?? null,
77
+ };
78
+ }
79
+ return null;
80
+ };
81
+ /**
82
+ * Close both auth and app Mongo connections.
83
+ * Accepts connections as parameters — no module-level state.
84
+ */
85
+ export const disconnectMongo = async (authConn, appConn) => {
86
+ await Promise.all([
87
+ authConn && authConn.readyState !== 0 ? authConn.close() : Promise.resolve(),
88
+ appConn && appConn.readyState !== 0 ? appConn.close() : Promise.resolve(),
89
+ ]);
90
+ log('[mongo] disconnected');
91
+ };
92
+ /**
93
+ * Get the mongoose module (lazy-loaded). Useful for consumers that need
94
+ * the mongoose module without a connection (e.g., Schema class access).
95
+ */
96
+ export const getMongooseModule = () => requireMongoose();
@@ -0,0 +1,72 @@
1
+ import type { Job, Processor, QueueOptions, Queue as QueueType, WorkerOptions, Worker as WorkerType } from 'bullmq';
2
+ import { type RedisCredentials } from './redis';
3
+ export interface CronSchedule {
4
+ /** Cron expression. Mutually exclusive with `every`. */
5
+ cron?: string;
6
+ /** Interval in milliseconds. Mutually exclusive with `cron`. */
7
+ every?: number;
8
+ /** Timezone for cron expressions. */
9
+ timezone?: string;
10
+ }
11
+ export interface DLQOptions<T = unknown> {
12
+ /** Max jobs to keep in the DLQ. Default: 1000. */
13
+ maxSize?: number;
14
+ /** Called when a job is moved to the DLQ. */
15
+ onDeadLetter?: (job: Job<T>, error: Error) => Promise<void>;
16
+ /** Auto-retry delay in ms. No auto-retry by default. */
17
+ retryAfter?: number;
18
+ /** Preserve original job options on retry. Default: true. */
19
+ preserveJobOptions?: boolean;
20
+ }
21
+ export interface QueueFactory {
22
+ createQueue<T = unknown, R = unknown>(name: string, options?: Omit<QueueOptions, 'connection'>): QueueType<T, R>;
23
+ createWorker<T = unknown, R = unknown>(name: string, processor: Processor<T, R>, options?: Omit<WorkerOptions, 'connection'>): WorkerType<T, R>;
24
+ createCronWorker<T = void, R = unknown>(name: string, processor: Processor<T, R>, schedule: CronSchedule, options?: Omit<WorkerOptions, 'connection'>): {
25
+ worker: WorkerType<T, R>;
26
+ queue: QueueType<T, R>;
27
+ registeredName: string;
28
+ };
29
+ cleanupStaleSchedulers(activeNames: string[], registeredNames: ReadonlySet<string>): Promise<void>;
30
+ createDLQHandler<T = unknown>(sourceWorker: WorkerType<T>, sourceQueueName: string, options?: DLQOptions<T>): {
31
+ dlqQueue: QueueType<T>;
32
+ retryJob: (jobId: string) => Promise<void>;
33
+ };
34
+ }
35
+ export declare function createQueueFactory(credentials: RedisCredentials): QueueFactory;
36
+ export declare function createQueue<T = unknown, R = unknown>(name: string, options?: Omit<QueueOptions, 'connection'>, credentials?: RedisCredentials): QueueType<T, R>;
37
+ export declare function createWorker<T = unknown, R = unknown>(name: string, processor: Processor<T, R>, options?: Omit<WorkerOptions, 'connection'>, credentials?: RedisCredentials): WorkerType<T, R>;
38
+ export declare function createCronWorker<T = void, R = unknown>(name: string, processor: Processor<T, R>, schedule: CronSchedule, options?: Omit<WorkerOptions, 'connection'>, credentials?: RedisCredentials): {
39
+ worker: WorkerType<T, R>;
40
+ queue: QueueType<T, R>;
41
+ registeredName: string;
42
+ };
43
+ export declare function cleanupStaleSchedulers(activeNames: string[], registeredNames: ReadonlySet<string>, credentials?: RedisCredentials): Promise<void>;
44
+ export declare function createDLQHandler<T = unknown>(sourceWorker: WorkerType<T>, sourceQueueName: string, options?: DLQOptions<T>, credentials?: RedisCredentials): {
45
+ dlqQueue: QueueType<T>;
46
+ retryJob: (jobId: string) => Promise<void>;
47
+ };
48
+ /**
49
+ * Contract for worker files loaded by createServer()'s worker discovery.
50
+ *
51
+ * A worker file's default export should be a BunshotWorker. The framework
52
+ * calls it at startup with a properly-credentialed QueueFactory and collects
53
+ * the returned names for scheduler lifecycle management.
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * // workers/digest.ts
58
+ * import type { BunshotWorker } from 'bunshot/queue'
59
+ *
60
+ * const worker: BunshotWorker = async (factory) => {
61
+ * const { registeredName } = factory.createCronWorker(
62
+ * 'digest-emails',
63
+ * digestProcessor,
64
+ * { cron: '0 9 * * *' },
65
+ * )
66
+ * return [registeredName]
67
+ * }
68
+ * export default worker
69
+ * ```
70
+ */
71
+ export type BunshotWorker = (factory: QueueFactory) => string[] | Promise<string[]>;
72
+ export type { Job, RedisCredentials as QueueRedisCredentials };
@@ -0,0 +1,152 @@
1
+ import { getRedisConnectionOptions } from './redis';
2
+ function requireBullMQ() {
3
+ try {
4
+ // Bun supports require() in ESM; this defers the import to call time.
5
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
6
+ return require('bullmq');
7
+ }
8
+ catch {
9
+ throw new Error('bullmq is not installed. Run: bun add bullmq');
10
+ }
11
+ }
12
+ function requireQueueRedisCredentials(credentials) {
13
+ if (!credentials?.host) {
14
+ throw new Error('Queue helpers require explicit Redis credentials. Resolve Redis secrets at startup and pass them to createQueueFactory(...) or as the final queue helper argument.');
15
+ }
16
+ return credentials;
17
+ }
18
+ function getQueueRedisConnectionOptions(credentials) {
19
+ return getRedisConnectionOptions(credentials);
20
+ }
21
+ function buildQueueHelpers(getConnectionOptions) {
22
+ return {
23
+ createQueue(name, options) {
24
+ const { Queue } = requireBullMQ();
25
+ return new Queue(name, { connection: getConnectionOptions(), ...options });
26
+ },
27
+ createWorker(name, processor, options) {
28
+ const { Worker } = requireBullMQ();
29
+ return new Worker(name, processor, {
30
+ connection: getConnectionOptions(),
31
+ ...options,
32
+ });
33
+ },
34
+ createCronWorker(name, processor, schedule, options) {
35
+ const { Queue, Worker } = requireBullMQ();
36
+ const connection = getConnectionOptions();
37
+ const queue = new Queue(name, { connection });
38
+ const worker = new Worker(name, processor, { connection, ...options });
39
+ // Use upsertJobScheduler — idempotent across restarts.
40
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- BullMQ's ExtractNameType<T>
41
+ // constrains the scheduler ID to match job data's `name` field, but we use a plain
42
+ // string ID. The runtime API accepts any string; the generic constraint is overly
43
+ // narrow for scheduler IDs.
44
+ const q = queue;
45
+ if (schedule.cron) {
46
+ q.upsertJobScheduler(name, { pattern: schedule.cron, tz: schedule.timezone }, { name });
47
+ }
48
+ else if (schedule.every) {
49
+ q.upsertJobScheduler(name, { every: schedule.every }, { name });
50
+ }
51
+ return { worker, queue, registeredName: name };
52
+ },
53
+ async cleanupStaleSchedulers(activeNames, registeredNames) {
54
+ const { Queue } = requireBullMQ();
55
+ const connection = getConnectionOptions();
56
+ const activeSet = new Set(activeNames);
57
+ for (const name of registeredNames) {
58
+ if (activeSet.has(name))
59
+ continue;
60
+ const queue = new Queue(name, { connection });
61
+ try {
62
+ await queue.removeJobScheduler(name);
63
+ }
64
+ catch {
65
+ /* scheduler may not exist */
66
+ }
67
+ await queue.close();
68
+ }
69
+ },
70
+ createDLQHandler(sourceWorker, sourceQueueName, options) {
71
+ const { Queue } = requireBullMQ();
72
+ const connection = getConnectionOptions();
73
+ const dlqName = `${sourceQueueName}-dlq`;
74
+ const dlqQueue = new Queue(dlqName, { connection });
75
+ const maxSize = options?.maxSize ?? 1000;
76
+ const preserveJobOptions = options?.preserveJobOptions ?? true;
77
+ sourceWorker.on('failed', async (job, error) => {
78
+ if (!job)
79
+ return;
80
+ if (job.attemptsMade < (job.opts?.attempts ?? 1))
81
+ return;
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- BullMQ's ExtractNameType<T>
83
+ // constrains job names to literal types from the data shape, but DLQ jobs use
84
+ // dynamic `dlq:` prefixed names.
85
+ await dlqQueue.add(`dlq:${job.name}`, job.data, {
86
+ ...(preserveJobOptions
87
+ ? {
88
+ delay: job.opts?.delay,
89
+ priority: job.opts?.priority,
90
+ attempts: job.opts?.attempts,
91
+ backoff: job.opts?.backoff,
92
+ }
93
+ : {}),
94
+ jobId: `dlq:${job.id}`,
95
+ });
96
+ if (options?.onDeadLetter) {
97
+ try {
98
+ await options.onDeadLetter(job, error);
99
+ }
100
+ catch (e) {
101
+ console.error(`[dlq:${sourceQueueName}] onDeadLetter callback error:`, e);
102
+ }
103
+ }
104
+ const waitingCount = await dlqQueue.getWaitingCount();
105
+ if (waitingCount > maxSize) {
106
+ const excess = waitingCount - maxSize;
107
+ const jobs = await dlqQueue.getWaiting(0, excess - 1);
108
+ for (const j of jobs) {
109
+ await j.remove();
110
+ }
111
+ }
112
+ });
113
+ const sourceQueue = new Queue(sourceQueueName, { connection });
114
+ const retryJob = async (jobId) => {
115
+ const job = await dlqQueue.getJob(jobId);
116
+ if (!job)
117
+ throw new Error(`Job ${jobId} not found in DLQ`);
118
+ const retryOptions = preserveJobOptions
119
+ ? {
120
+ delay: job.opts?.delay,
121
+ priority: job.opts?.priority,
122
+ attempts: job.opts?.attempts,
123
+ backoff: job.opts?.backoff,
124
+ }
125
+ : {};
126
+ await sourceQueue.add(job.name, job.data, retryOptions);
127
+ await job.remove();
128
+ };
129
+ return { dlqQueue, retryJob };
130
+ },
131
+ };
132
+ }
133
+ export function createQueueFactory(credentials) {
134
+ const resolvedCredentials = requireQueueRedisCredentials(credentials);
135
+ const getConnectionOptions = () => getQueueRedisConnectionOptions(resolvedCredentials);
136
+ return buildQueueHelpers(getConnectionOptions);
137
+ }
138
+ export function createQueue(name, options, credentials) {
139
+ return createQueueFactory(requireQueueRedisCredentials(credentials)).createQueue(name, options);
140
+ }
141
+ export function createWorker(name, processor, options, credentials) {
142
+ return createQueueFactory(requireQueueRedisCredentials(credentials)).createWorker(name, processor, options);
143
+ }
144
+ export function createCronWorker(name, processor, schedule, options, credentials) {
145
+ return createQueueFactory(requireQueueRedisCredentials(credentials)).createCronWorker(name, processor, schedule, options);
146
+ }
147
+ export function cleanupStaleSchedulers(activeNames, registeredNames, credentials) {
148
+ return createQueueFactory(requireQueueRedisCredentials(credentials)).cleanupStaleSchedulers(activeNames, registeredNames);
149
+ }
150
+ export function createDLQHandler(sourceWorker, sourceQueueName, options, credentials) {
151
+ return createQueueFactory(requireQueueRedisCredentials(credentials)).createDLQHandler(sourceWorker, sourceQueueName, options);
152
+ }
@@ -0,0 +1,28 @@
1
+ import type { default as RedisClass, RedisOptions } from 'ioredis';
2
+ export interface RedisCredentials {
3
+ /** Redis host:port (e.g., "localhost:6379") */
4
+ host: string;
5
+ /** Redis username */
6
+ user?: string;
7
+ /** Redis password */
8
+ password?: string;
9
+ }
10
+ export declare const getRedisConnectionOptions: (creds: RedisCredentials) => RedisOptions;
11
+ /**
12
+ * Connect to Redis and return the client.
13
+ * The caller is responsible for storing the client (e.g., on BunshotContext).
14
+ *
15
+ * @param creds Credentials resolved by ISecretRepository. No process.env fallback.
16
+ */
17
+ export declare const connectRedis: (creds: RedisCredentials) => Promise<RedisClass>;
18
+ /**
19
+ * Gracefully close the Redis connection.
20
+ * Accepts the client as parameter — no module-level state.
21
+ */
22
+ export declare const disconnectRedis: (client: RedisClass | null) => Promise<void>;
23
+ /**
24
+ * Context-aware Redis getter. Returns the instance-scoped Redis from
25
+ * BunshotContext, or null when Redis is not configured on the context.
26
+ * Throws if no BunshotContext is attached to the app.
27
+ */
28
+ export declare const getRedisFromApp: (app: object) => RedisClass | null;