@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
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Infrastructure creation — extracted from createApp().
3
+ *
4
+ * Handles database connections, store resolution, trust-proxy configuration,
5
+ * and the frameworkConfig object that is passed to all plugin lifecycle methods.
6
+ *
7
+ * Phase 1 singleton elimination: connect functions return connections directly.
8
+ * No module-level state is read or set.
9
+ */
10
+ import { createAuditLogFactories } from './lib/auditLog';
11
+ import { cronRegistryFactories } from './persistence/cronRegistry';
12
+ import { idempotencyFactories } from './persistence/idempotency';
13
+ import { createUploadRegistryFactories } from './persistence/uploadRegistry';
14
+ import { wsMessageFactories } from './persistence/wsMessages';
15
+ import { connectAppMongo, connectAuthMongo, connectMongo } from '../lib/mongo';
16
+ import { connectRedis } from '../lib/redis';
17
+ import { getDataEncryptionKeys } from '../lib/signingConfig';
18
+ import { resolveRepo } from '../../packages/bunshot-core/src/index.js';
19
+ import { connectPostgres } from '@lastshotlabs/bunshot-postgres';
20
+ /**
21
+ * Connect databases, resolve store preferences, configure trust-proxy,
22
+ * and assemble the frameworkConfig object that plugins receive.
23
+ */
24
+ export async function createInfrastructure(options) {
25
+ const { db, securitySigning, cors: corsOpt, captcha, trustProxy, registrar, secrets, uploadRegistryTtlSeconds, auditLogTtlDays, } = options;
26
+ const { sqlite, mongo = 'single', redis: enableRedis = true } = db;
27
+ const corsOrigins = corsOpt ?? '*';
28
+ // Smart fallback: pick the best available store rather than blindly defaulting to "redis"
29
+ const defaultStore = enableRedis
30
+ ? 'redis'
31
+ : db.postgres
32
+ ? 'postgres'
33
+ : sqlite
34
+ ? 'sqlite'
35
+ : mongo !== false
36
+ ? 'mongo'
37
+ : 'memory';
38
+ const sessions = db.sessions ?? defaultStore;
39
+ const oauthState = db.oauthState ?? sessions;
40
+ const cache = db.cache ?? defaultStore;
41
+ const authStore = db.auth ?? (mongo !== false ? 'mongo' : sessions);
42
+ // Build credential objects from resolved secrets — no process.env fallback
43
+ const mongoCreds = {
44
+ user: secrets.mongoUser,
45
+ password: secrets.mongoPassword,
46
+ host: secrets.mongoHost,
47
+ db: secrets.mongoDb,
48
+ };
49
+ const mongoAuthCreds = {
50
+ user: secrets.mongoAuthUser,
51
+ password: secrets.mongoAuthPassword,
52
+ host: secrets.mongoAuthHost,
53
+ db: secrets.mongoAuthDb,
54
+ };
55
+ const redisCreds = {
56
+ host: secrets.redisHost,
57
+ user: secrets.redisUser,
58
+ password: secrets.redisPassword,
59
+ };
60
+ // Connect databases — connect functions return connections directly (no module-level state)
61
+ let authConn = null;
62
+ let appConn = null;
63
+ let mongooseModule = null;
64
+ if (mongo === 'single') {
65
+ const result = await connectMongo(mongoCreds);
66
+ authConn = result.authConn;
67
+ appConn = result.appConn;
68
+ mongooseModule = result.mongoose;
69
+ }
70
+ else if (mongo === 'separate') {
71
+ const [authResult, appResult] = await Promise.all([
72
+ connectAuthMongo(mongoAuthCreds),
73
+ connectAppMongo(mongoCreds),
74
+ ]);
75
+ authConn = authResult.authConn;
76
+ appConn = appResult.appConn;
77
+ mongooseModule = authResult.mongoose;
78
+ }
79
+ let redisClient = null;
80
+ if (enableRedis) {
81
+ redisClient = await connectRedis(redisCreds);
82
+ }
83
+ let postgresDb = null;
84
+ if (db.postgres) {
85
+ postgresDb = await connectPostgres(db.postgres);
86
+ }
87
+ function getMongooseOrThrow() {
88
+ if (!mongooseModule)
89
+ throw new Error('[framework] Mongoose module not initialized');
90
+ return mongooseModule;
91
+ }
92
+ const dataEncryptionKeys = getDataEncryptionKeys(secrets.dataEncryptionKey || undefined);
93
+ const resolvedStores = {
94
+ sessions,
95
+ oauthState,
96
+ cache,
97
+ authStore,
98
+ sqlite,
99
+ };
100
+ // Build the config object passed to all plugin phase methods
101
+ const frameworkConfig = {
102
+ resolvedStores,
103
+ security: { cors: corsOrigins },
104
+ signing: securitySigning ?? null,
105
+ dataEncryptionKeys,
106
+ redis: redisClient ?? undefined,
107
+ mongo: mongo !== false ? { auth: authConn, app: appConn } : undefined,
108
+ captcha: captcha ?? null,
109
+ trustProxy: trustProxy ?? false,
110
+ registrar,
111
+ };
112
+ // Resolve persistence repositories based on the default store selection
113
+ const { persistence, sqliteDb } = resolveFrameworkPersistence({
114
+ defaultStore,
115
+ redis: redisClient,
116
+ mongo: mongo !== false ? { conn: appConn, mongoose: getMongooseOrThrow() } : null,
117
+ sqlite,
118
+ postgres: postgresDb,
119
+ appName: '', // set later — not needed for persistence key prefixing at this level
120
+ uploadRegistryTtlSeconds,
121
+ auditLogTtlDays,
122
+ });
123
+ return {
124
+ frameworkConfig,
125
+ resolvedStores,
126
+ redisEnabled: enableRedis,
127
+ mongoMode: mongo,
128
+ dataEncryptionKeys,
129
+ corsOrigins,
130
+ persistence,
131
+ sqliteDb,
132
+ redis: redisClient,
133
+ mongo: mongo !== false ? { auth: authConn, app: appConn, mongoose: getMongooseOrThrow() } : null,
134
+ postgres: postgresDb,
135
+ };
136
+ }
137
+ /**
138
+ * Create the appropriate repository implementations based on the default store
139
+ * selection. Each repository uses the same store-selection logic as sessions/cache:
140
+ * redis > postgres > sqlite > mongo > memory.
141
+ */
142
+ function resolveFrameworkPersistence(opts) {
143
+ const { defaultStore, redis, mongo, sqlite, postgres, appName, uploadRegistryTtlSeconds, auditLogTtlDays, } = opts;
144
+ // Default room config state — owned by the persistence closure, instance-scoped
145
+ const DEFAULT_MAX_COUNT = 100;
146
+ const DEFAULT_TTL_SECONDS = 86_400;
147
+ let defaults = {
148
+ maxCount: DEFAULT_MAX_COUNT,
149
+ ttlSeconds: DEFAULT_TTL_SECONDS,
150
+ };
151
+ const roomConfigs = new Map();
152
+ const sqliteDb = sqlite
153
+ ? new (require('bun:sqlite').Database)(sqlite)
154
+ : null;
155
+ const storeInfra = {
156
+ appName: appName || 'bunshot',
157
+ getRedis: () => {
158
+ if (!redis)
159
+ throw new Error('[framework/persistence] Redis store selected but Redis is unavailable');
160
+ return redis;
161
+ },
162
+ getMongo: () => {
163
+ if (!mongo)
164
+ throw new Error('[framework/persistence] Mongo store selected but Mongo is unavailable');
165
+ return { conn: mongo.conn, mg: mongo.mongoose };
166
+ },
167
+ getSqliteDb: () => {
168
+ if (!sqliteDb)
169
+ throw new Error('[framework/persistence] SQLite store selected but SQLite is unavailable');
170
+ return sqliteDb;
171
+ },
172
+ getPostgres: () => {
173
+ if (!postgres)
174
+ throw new Error('[framework/persistence] Postgres store selected but Postgres is unavailable. Set db.postgres in your config.');
175
+ return postgres;
176
+ },
177
+ };
178
+ const uploadRegistry = resolveRepo(createUploadRegistryFactories(uploadRegistryTtlSeconds), defaultStore, storeInfra);
179
+ const idempotency = resolveRepo(idempotencyFactories, defaultStore, storeInfra);
180
+ const wsMessages = resolveRepo(wsMessageFactories, defaultStore, storeInfra);
181
+ const cronRegistry = resolveRepo(cronRegistryFactories, defaultStore, storeInfra);
182
+ const auditLogStoreMap = {
183
+ memory: 'memory',
184
+ redis: 'memory',
185
+ sqlite: 'sqlite',
186
+ mongo: 'mongo',
187
+ postgres: 'postgres',
188
+ };
189
+ const auditLogStore = auditLogStoreMap[defaultStore];
190
+ const auditLog = resolveRepo(createAuditLogFactories(auditLogTtlDays), auditLogStore, storeInfra);
191
+ return {
192
+ persistence: {
193
+ uploadRegistry,
194
+ idempotency,
195
+ wsMessages,
196
+ auditLog,
197
+ cronRegistry,
198
+ configureRoom(endpoint, room, options) {
199
+ const key = `${endpoint}\0${room}`;
200
+ if (!options.persist) {
201
+ roomConfigs.delete(key);
202
+ return;
203
+ }
204
+ roomConfigs.set(key, {
205
+ maxCount: options.maxCount ?? defaults.maxCount,
206
+ ttlSeconds: options.ttlSeconds ?? defaults.ttlSeconds,
207
+ });
208
+ },
209
+ getRoomConfig(endpoint, room) {
210
+ return roomConfigs.get(`${endpoint}\0${room}`) ?? null;
211
+ },
212
+ setDefaults(newDefaults) {
213
+ defaults = {
214
+ maxCount: newDefaults.maxCount ?? DEFAULT_MAX_COUNT,
215
+ ttlSeconds: newDefaults.ttlSeconds ?? DEFAULT_TTL_SECONDS,
216
+ };
217
+ },
218
+ },
219
+ sqliteDb,
220
+ };
221
+ }
@@ -0,0 +1,23 @@
1
+ import type { Database } from 'bun:sqlite';
2
+ import type { Connection } from 'mongoose';
3
+ import type { AuditLogProvider, RepoFactories } from '../../../packages/bunshot-core/src/index.js';
4
+ export type AuditLogStore = 'mongo' | 'sqlite' | 'memory' | 'postgres';
5
+ export interface AuditLogOptions {
6
+ store: AuditLogStore;
7
+ db?: Database;
8
+ mongoConnection?: Connection | null;
9
+ /** Retention in days. SQLite: prunes on write. MongoDB: sets expiresAt for the TTL index. */
10
+ ttlDays?: number;
11
+ }
12
+ export interface AuditLogQuery {
13
+ userId?: string;
14
+ tenantId?: string;
15
+ after?: Date | string;
16
+ before?: Date | string;
17
+ limit?: number;
18
+ cursor?: string;
19
+ }
20
+ export declare function createAuditLogProvider(options: AuditLogOptions): AuditLogProvider;
21
+ export declare function createAuditLogFactories(ttlDays?: number): RepoFactories<AuditLogProvider>;
22
+ /** @deprecated Use createAuditLogFactories() instead. */
23
+ export declare const auditLogFactories: RepoFactories<AuditLogProvider>;
@@ -0,0 +1,416 @@
1
+ import { getAuditLogModel } from '../models/AuditLog';
2
+ import { DEFAULT_MAX_ENTRIES, HttpError, evictOldestArray } from '../../../packages/bunshot-core/src/index.js';
3
+ function encodeCursor(createdAt, id) {
4
+ return btoa(JSON.stringify({ t: createdAt, id }));
5
+ }
6
+ function decodeCursor(cursor) {
7
+ try {
8
+ const parsed = JSON.parse(atob(cursor));
9
+ if (typeof parsed?.t === 'string' &&
10
+ parsed.t.length > 0 &&
11
+ !isNaN(Date.parse(parsed.t)) &&
12
+ typeof parsed?.id === 'string' &&
13
+ parsed.id.length > 0) {
14
+ return parsed;
15
+ }
16
+ }
17
+ catch {
18
+ // malformed base64 or JSON
19
+ }
20
+ return null;
21
+ }
22
+ // ---------------------------------------------------------------------------
23
+ // SQLite table setup
24
+ // ---------------------------------------------------------------------------
25
+ function ensureSqliteTable(db) {
26
+ db.run(`
27
+ CREATE TABLE IF NOT EXISTS audit_logs (
28
+ id TEXT PRIMARY KEY,
29
+ userId TEXT,
30
+ sessionId TEXT,
31
+ tenantId TEXT,
32
+ method TEXT NOT NULL,
33
+ path TEXT NOT NULL,
34
+ status INTEGER NOT NULL,
35
+ ip TEXT,
36
+ userAgent TEXT,
37
+ action TEXT,
38
+ resource TEXT,
39
+ resourceId TEXT,
40
+ meta TEXT,
41
+ createdAt TEXT NOT NULL
42
+ )
43
+ `);
44
+ db.run('CREATE INDEX IF NOT EXISTS idx_al_user ON audit_logs(userId, createdAt)');
45
+ db.run('CREATE INDEX IF NOT EXISTS idx_al_tenant ON audit_logs(tenantId, createdAt)');
46
+ db.run('CREATE INDEX IF NOT EXISTS idx_al_path ON audit_logs(path)');
47
+ }
48
+ function createMemoryAuditLogProvider() {
49
+ const memoryLogs = [];
50
+ let evictedEntries = 0;
51
+ let hasWarnedAboutTruncation = false;
52
+ console.warn(`[bunshot] Memory adapter for audit log is capped at ${DEFAULT_MAX_ENTRIES} entries and has no TTL-based eviction - for development/testing only`);
53
+ return {
54
+ async logEntry(entry) {
55
+ try {
56
+ memoryLogs.push(entry);
57
+ if (memoryLogs.length > DEFAULT_MAX_ENTRIES) {
58
+ evictedEntries += memoryLogs.length - DEFAULT_MAX_ENTRIES;
59
+ console.warn(`[auditLog] Memory audit log reached ${DEFAULT_MAX_ENTRIES} entries — evicting oldest. Tests relying on audit log completeness may see missing entries.`);
60
+ }
61
+ evictOldestArray(memoryLogs, DEFAULT_MAX_ENTRIES);
62
+ }
63
+ catch (err) {
64
+ console.error('[auditLog] failed to write entry:', err);
65
+ }
66
+ },
67
+ async getLogs(query) {
68
+ const limit = Math.min(query.limit ?? 50, 200);
69
+ const after = query.after ? new Date(query.after).toISOString() : undefined;
70
+ const before = query.before ? new Date(query.before).toISOString() : undefined;
71
+ if (evictedEntries > 0 && !hasWarnedAboutTruncation) {
72
+ hasWarnedAboutTruncation = true;
73
+ console.warn(`[auditLog] Memory audit log query is reading a truncated store. ${evictedEntries} oldest entr${evictedEntries === 1 ? 'y was' : 'ies were'} evicted after hitting the ${DEFAULT_MAX_ENTRIES}-entry cap.`);
74
+ }
75
+ let filtered = memoryLogs.slice();
76
+ if (query.userId !== undefined)
77
+ filtered = filtered.filter(e => e.userId === query.userId);
78
+ if (query.tenantId !== undefined)
79
+ filtered = filtered.filter(e => e.tenantId === query.tenantId);
80
+ if (after)
81
+ filtered = filtered.filter(e => e.createdAt >= after);
82
+ if (before)
83
+ filtered = filtered.filter(e => e.createdAt < before);
84
+ filtered.sort((a, b) => a.createdAt < b.createdAt
85
+ ? 1
86
+ : a.createdAt > b.createdAt
87
+ ? -1
88
+ : a.id < b.id
89
+ ? 1
90
+ : a.id > b.id
91
+ ? -1
92
+ : 0);
93
+ if (query.cursor) {
94
+ const c = decodeCursor(query.cursor);
95
+ if (!c)
96
+ throw new HttpError(400, 'Invalid pagination cursor');
97
+ filtered = filtered.filter(e => e.createdAt < c.t || (e.createdAt === c.t && e.id < c.id));
98
+ }
99
+ const page = filtered.slice(0, limit + 1);
100
+ const hasMore = page.length > limit;
101
+ const items = hasMore ? page.slice(0, limit) : page;
102
+ const last = items[items.length - 1];
103
+ const nextCursor = hasMore ? encodeCursor(last.createdAt, last.id) : undefined;
104
+ return { items, nextCursor };
105
+ },
106
+ };
107
+ }
108
+ function createSqliteAuditLogProvider(db, ttlDays) {
109
+ return {
110
+ async logEntry(entry) {
111
+ try {
112
+ ensureSqliteTable(db);
113
+ db.run(`INSERT INTO audit_logs
114
+ (id, userId, sessionId, tenantId, method, path, status,
115
+ ip, userAgent, action, resource, resourceId, meta, createdAt)
116
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
117
+ entry.id,
118
+ entry.userId ?? null,
119
+ entry.sessionId ?? null,
120
+ entry.tenantId ?? null,
121
+ entry.method,
122
+ entry.path,
123
+ entry.status,
124
+ entry.ip ?? null,
125
+ entry.userAgent ?? null,
126
+ entry.action ?? null,
127
+ entry.resource ?? null,
128
+ entry.resourceId ?? null,
129
+ entry.meta !== undefined ? JSON.stringify(entry.meta) : null,
130
+ entry.createdAt,
131
+ ]);
132
+ if (ttlDays !== undefined) {
133
+ const cutoff = new Date(Date.now() - ttlDays * 86_400_000).toISOString();
134
+ db.run('DELETE FROM audit_logs WHERE createdAt < ?', [cutoff]);
135
+ }
136
+ }
137
+ catch (err) {
138
+ console.error('[auditLog] failed to write entry:', err);
139
+ }
140
+ },
141
+ async getLogs(query) {
142
+ ensureSqliteTable(db);
143
+ const limit = Math.min(query.limit ?? 50, 200);
144
+ const after = query.after ? new Date(query.after).toISOString() : undefined;
145
+ const before = query.before ? new Date(query.before).toISOString() : undefined;
146
+ const conditions = [];
147
+ const params = [];
148
+ if (query.userId !== undefined) {
149
+ conditions.push('userId = ?');
150
+ params.push(query.userId);
151
+ }
152
+ if (query.tenantId !== undefined) {
153
+ conditions.push('tenantId = ?');
154
+ params.push(query.tenantId);
155
+ }
156
+ if (after) {
157
+ conditions.push('createdAt >= ?');
158
+ params.push(after);
159
+ }
160
+ if (before) {
161
+ conditions.push('createdAt < ?');
162
+ params.push(before);
163
+ }
164
+ if (query.cursor) {
165
+ const c = decodeCursor(query.cursor);
166
+ if (!c)
167
+ throw new HttpError(400, 'Invalid pagination cursor');
168
+ conditions.push('(createdAt < ? OR (createdAt = ? AND id < ?))');
169
+ params.push(c.t, c.t, c.id);
170
+ }
171
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
172
+ const rows = db
173
+ .query(`SELECT * FROM audit_logs ${where} ORDER BY createdAt DESC, id DESC LIMIT ?`)
174
+ .all(...params, limit + 1);
175
+ const hasMore = rows.length > limit;
176
+ const pageRows = hasMore ? rows.slice(0, limit) : rows;
177
+ const items = pageRows.map(row => ({
178
+ id: row.id,
179
+ userId: row.userId ?? null,
180
+ sessionId: row.sessionId ?? null,
181
+ tenantId: row.tenantId ?? null,
182
+ method: row.method,
183
+ path: row.path,
184
+ status: row.status,
185
+ ip: row.ip ?? null,
186
+ userAgent: row.userAgent ?? null,
187
+ action: row.action ?? undefined,
188
+ resource: row.resource ?? undefined,
189
+ resourceId: row.resourceId ?? undefined,
190
+ meta: row.meta ? JSON.parse(row.meta) : undefined,
191
+ createdAt: row.createdAt,
192
+ }));
193
+ const last = items[items.length - 1];
194
+ const nextCursor = hasMore ? encodeCursor(last.createdAt, last.id) : undefined;
195
+ return { items, nextCursor };
196
+ },
197
+ };
198
+ }
199
+ function createMongoAuditLogProvider(conn, ttlDays) {
200
+ const AuditLog = getAuditLogModel(conn);
201
+ return {
202
+ async logEntry(entry) {
203
+ try {
204
+ const expiresAt = ttlDays !== undefined ? new Date(Date.now() + ttlDays * 86_400_000) : undefined;
205
+ await AuditLog.create({
206
+ ...entry,
207
+ createdAt: new Date(entry.createdAt),
208
+ ...(expiresAt !== undefined ? { expiresAt } : {}),
209
+ });
210
+ }
211
+ catch (err) {
212
+ console.error('[auditLog] failed to write entry:', err);
213
+ }
214
+ },
215
+ async getLogs(query) {
216
+ const limit = Math.min(query.limit ?? 50, 200);
217
+ const after = query.after ? new Date(query.after).toISOString() : undefined;
218
+ const before = query.before ? new Date(query.before).toISOString() : undefined;
219
+ const filter = {};
220
+ if (query.userId !== undefined)
221
+ filter.userId = query.userId;
222
+ if (query.tenantId !== undefined)
223
+ filter.tenantId = query.tenantId;
224
+ // Build date constraints as independent $and clauses so before and cursor
225
+ // can coexist without one silently overwriting the other.
226
+ const andConditions = [];
227
+ if (after)
228
+ andConditions.push({ createdAt: { $gte: new Date(after) } });
229
+ if (before)
230
+ andConditions.push({ createdAt: { $lt: new Date(before) } });
231
+ if (query.cursor) {
232
+ const c = decodeCursor(query.cursor);
233
+ if (!c)
234
+ throw new HttpError(400, 'Invalid pagination cursor');
235
+ const cursorDate = new Date(c.t);
236
+ andConditions.push({
237
+ $or: [{ createdAt: { $lt: cursorDate } }, { createdAt: cursorDate, id: { $lt: c.id } }],
238
+ });
239
+ }
240
+ if (andConditions.length > 0)
241
+ filter.$and = andConditions;
242
+ const docs = await AuditLog.find(filter)
243
+ .sort({ createdAt: -1, id: -1 })
244
+ .limit(limit + 1)
245
+ .lean();
246
+ const hasMore = docs.length > limit;
247
+ const pageDocs = hasMore ? docs.slice(0, limit) : docs;
248
+ const items = pageDocs.map(doc => ({
249
+ id: doc.id,
250
+ userId: doc.userId ?? null,
251
+ sessionId: doc.sessionId ?? null,
252
+ tenantId: doc.tenantId ?? null,
253
+ method: doc.method,
254
+ path: doc.path,
255
+ status: doc.status,
256
+ ip: doc.ip ?? null,
257
+ userAgent: doc.userAgent ?? null,
258
+ action: doc.action,
259
+ resource: doc.resource,
260
+ resourceId: doc.resourceId,
261
+ meta: doc.meta,
262
+ createdAt: doc.createdAt.toISOString(),
263
+ }));
264
+ const last = items[items.length - 1];
265
+ const nextCursor = hasMore ? encodeCursor(last.createdAt, last.id) : undefined;
266
+ return { items, nextCursor };
267
+ },
268
+ };
269
+ }
270
+ export function createAuditLogProvider(options) {
271
+ const providers = {
272
+ memory: () => createMemoryAuditLogProvider(),
273
+ sqlite: () => {
274
+ if (!options.db)
275
+ throw new Error("AuditLog: store is 'sqlite' but no db instance was provided");
276
+ return createSqliteAuditLogProvider(options.db, options.ttlDays);
277
+ },
278
+ mongo: () => {
279
+ if (!options.mongoConnection)
280
+ throw new Error("AuditLog: store is 'mongo' but no connection was provided");
281
+ return createMongoAuditLogProvider(options.mongoConnection, options.ttlDays);
282
+ },
283
+ postgres: () => {
284
+ throw new Error('AuditLog: use createAuditLogFactories() instead of createAuditLogProvider() for postgres');
285
+ },
286
+ };
287
+ return providers[options.store]();
288
+ }
289
+ function createPostgresAuditLogProvider(pool, ttlDays) {
290
+ let initialized = false;
291
+ async function ensureTable() {
292
+ if (initialized)
293
+ return;
294
+ await pool.query(`
295
+ CREATE TABLE IF NOT EXISTS bunshot_audit_logs (
296
+ id TEXT PRIMARY KEY,
297
+ user_id TEXT,
298
+ session_id TEXT,
299
+ tenant_id TEXT,
300
+ method TEXT NOT NULL,
301
+ path TEXT NOT NULL,
302
+ status INTEGER NOT NULL,
303
+ ip TEXT,
304
+ user_agent TEXT,
305
+ action TEXT,
306
+ resource TEXT,
307
+ resource_id TEXT,
308
+ meta JSONB,
309
+ created_at TIMESTAMPTZ NOT NULL
310
+ )
311
+ `);
312
+ await pool.query('CREATE INDEX IF NOT EXISTS idx_bal_user ON bunshot_audit_logs(user_id, created_at)');
313
+ await pool.query('CREATE INDEX IF NOT EXISTS idx_bal_tenant ON bunshot_audit_logs(tenant_id, created_at)');
314
+ await pool.query('CREATE INDEX IF NOT EXISTS idx_bal_path ON bunshot_audit_logs(path)');
315
+ initialized = true;
316
+ }
317
+ return {
318
+ async logEntry(entry) {
319
+ try {
320
+ await ensureTable();
321
+ await pool.query(`INSERT INTO bunshot_audit_logs
322
+ (id, user_id, session_id, tenant_id, method, path, status,
323
+ ip, user_agent, action, resource, resource_id, meta, created_at)
324
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)
325
+ ON CONFLICT (id) DO NOTHING`, [
326
+ entry.id,
327
+ entry.userId ?? null,
328
+ entry.sessionId ?? null,
329
+ entry.tenantId ?? null,
330
+ entry.method,
331
+ entry.path,
332
+ entry.status,
333
+ entry.ip ?? null,
334
+ entry.userAgent ?? null,
335
+ entry.action ?? null,
336
+ entry.resource ?? null,
337
+ entry.resourceId ?? null,
338
+ entry.meta !== undefined ? entry.meta : null,
339
+ entry.createdAt,
340
+ ]);
341
+ if (ttlDays !== undefined) {
342
+ const cutoff = new Date(Date.now() - ttlDays * 86_400_000).toISOString();
343
+ await pool.query('DELETE FROM bunshot_audit_logs WHERE created_at < $1', [cutoff]);
344
+ }
345
+ }
346
+ catch (err) {
347
+ console.error('[auditLog] failed to write entry:', err);
348
+ }
349
+ },
350
+ async getLogs(query) {
351
+ await ensureTable();
352
+ const limit = Math.min(query.limit ?? 50, 200);
353
+ const conditions = [];
354
+ const params = [];
355
+ let n = 1;
356
+ if (query.userId !== undefined) {
357
+ conditions.push(`user_id = $${n++}`);
358
+ params.push(query.userId);
359
+ }
360
+ if (query.tenantId !== undefined) {
361
+ conditions.push(`tenant_id = $${n++}`);
362
+ params.push(query.tenantId);
363
+ }
364
+ if (query.after) {
365
+ conditions.push(`created_at >= $${n++}`);
366
+ params.push(new Date(query.after).toISOString());
367
+ }
368
+ if (query.before) {
369
+ conditions.push(`created_at < $${n++}`);
370
+ params.push(new Date(query.before).toISOString());
371
+ }
372
+ if (query.cursor) {
373
+ const c = decodeCursor(query.cursor);
374
+ if (!c)
375
+ throw new HttpError(400, 'Invalid pagination cursor');
376
+ conditions.push(`(created_at < $${n} OR (created_at = $${n + 1} AND id < $${n + 2}))`);
377
+ params.push(c.t, c.t, c.id);
378
+ n += 3;
379
+ }
380
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
381
+ const result = await pool.query(`SELECT * FROM bunshot_audit_logs ${where} ORDER BY created_at DESC, id DESC LIMIT $${n}`, [...params, limit + 1]);
382
+ const hasMore = result.rows.length > limit;
383
+ const pageRows = hasMore ? result.rows.slice(0, limit) : result.rows;
384
+ const items = pageRows.map(row => ({
385
+ id: row.id,
386
+ userId: row.user_id ?? null,
387
+ sessionId: row.session_id ?? null,
388
+ tenantId: row.tenant_id ?? null,
389
+ method: row.method,
390
+ path: row.path,
391
+ status: row.status,
392
+ ip: row.ip ?? null,
393
+ userAgent: row.user_agent ?? null,
394
+ action: row.action ?? undefined,
395
+ resource: row.resource ?? undefined,
396
+ resourceId: row.resource_id ?? undefined,
397
+ meta: row.meta ?? undefined,
398
+ createdAt: row.created_at.toISOString(),
399
+ }));
400
+ const last = items[items.length - 1];
401
+ const nextCursor = hasMore ? encodeCursor(last.createdAt, last.id) : undefined;
402
+ return { items, nextCursor };
403
+ },
404
+ };
405
+ }
406
+ export function createAuditLogFactories(ttlDays) {
407
+ return {
408
+ memory: () => createMemoryAuditLogProvider(),
409
+ sqlite: infra => createSqliteAuditLogProvider(infra.getSqliteDb(), ttlDays),
410
+ redis: () => createMemoryAuditLogProvider(),
411
+ mongo: infra => createMongoAuditLogProvider(infra.getMongo().conn, ttlDays),
412
+ postgres: infra => createPostgresAuditLogProvider(infra.getPostgres().pool, ttlDays),
413
+ };
414
+ }
415
+ /** @deprecated Use createAuditLogFactories() instead. */
416
+ export const auditLogFactories = createAuditLogFactories();
@@ -0,0 +1,11 @@
1
+ import type { CaptchaConfig } from '../../../packages/bunshot-core/src/index.js';
2
+ export type { CaptchaProvider, CaptchaConfig } from '../../../packages/bunshot-core/src/index.js';
3
+ /**
4
+ * Verify a CAPTCHA token with the provider's API.
5
+ * Returns { success: true } on pass, { success: false, error } on fail.
6
+ */
7
+ export declare function verifyCaptcha(token: string, config: CaptchaConfig, ip?: string): Promise<{
8
+ success: boolean;
9
+ score?: number;
10
+ error?: string;
11
+ }>;