@lastshotlabs/bunshot 0.0.25 → 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 (725) 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/packages/bunshot-auth/src/lib/breachedPassword.d.ts +19 -0
  68. package/dist/packages/bunshot-auth/src/lib/breachedPassword.js +61 -0
  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/packages/bunshot-auth/src/lib/logger.d.ts +3 -0
  93. package/dist/packages/bunshot-auth/src/lib/logger.js +13 -0
  94. package/dist/packages/bunshot-auth/src/lib/m2m.d.ts +30 -0
  95. package/dist/packages/bunshot-auth/src/lib/m2m.js +44 -0
  96. package/dist/packages/bunshot-auth/src/lib/magicLink.d.ts +13 -0
  97. package/dist/packages/bunshot-auth/src/lib/magicLink.js +145 -0
  98. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.d.ts +60 -0
  99. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.js +419 -0
  100. package/dist/packages/bunshot-auth/src/lib/oauth.d.ts +82 -0
  101. package/dist/packages/bunshot-auth/src/lib/oauth.js +177 -0
  102. package/dist/packages/bunshot-auth/src/lib/oauthCode.d.ts +19 -0
  103. package/dist/packages/bunshot-auth/src/lib/oauthCode.js +182 -0
  104. package/dist/packages/bunshot-auth/src/lib/oauthReauth.d.ts +19 -0
  105. package/dist/packages/bunshot-auth/src/lib/oauthReauth.js +255 -0
  106. package/dist/packages/bunshot-auth/src/lib/organization.d.ts +66 -0
  107. package/dist/packages/bunshot-auth/src/lib/organization.js +225 -0
  108. package/dist/packages/bunshot-auth/src/lib/passwordHistory.d.ts +12 -0
  109. package/dist/packages/bunshot-auth/src/lib/passwordHistory.js +31 -0
  110. package/dist/packages/bunshot-auth/src/lib/resetPassword.d.ts +20 -0
  111. package/dist/packages/bunshot-auth/src/lib/resetPassword.js +148 -0
  112. package/dist/packages/bunshot-auth/src/lib/roles.d.ts +9 -0
  113. package/dist/packages/bunshot-auth/src/lib/roles.js +93 -0
  114. package/dist/packages/bunshot-auth/src/lib/saml.d.ts +29 -0
  115. package/dist/packages/bunshot-auth/src/lib/saml.js +73 -0
  116. package/dist/packages/bunshot-auth/src/lib/samlRequestId.d.ts +13 -0
  117. package/dist/packages/bunshot-auth/src/lib/samlRequestId.js +129 -0
  118. package/dist/packages/bunshot-auth/src/lib/scim.d.ts +44 -0
  119. package/dist/packages/bunshot-auth/src/lib/scim.js +56 -0
  120. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.d.ts +22 -0
  121. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.js +65 -0
  122. package/dist/packages/bunshot-auth/src/lib/session.d.ts +45 -0
  123. package/dist/packages/bunshot-auth/src/lib/session.js +1211 -0
  124. package/dist/packages/bunshot-auth/src/lib/storeInfra.d.ts +26 -0
  125. package/dist/packages/bunshot-auth/src/lib/storeInfra.js +18 -0
  126. package/dist/packages/bunshot-auth/src/lib/suspension.d.ts +14 -0
  127. package/dist/packages/bunshot-auth/src/lib/suspension.js +20 -0
  128. package/dist/packages/bunshot-auth/src/lib/validateAdapter.d.ts +16 -0
  129. package/dist/packages/bunshot-auth/src/lib/validateAdapter.js +161 -0
  130. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.d.ts +13 -0
  131. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.js +58 -0
  132. package/dist/{middleware → packages/bunshot-auth/src/middleware}/csrf.d.ts +5 -4
  133. package/dist/packages/bunshot-auth/src/middleware/csrf.js +138 -0
  134. package/dist/packages/bunshot-auth/src/middleware/identify.d.ts +4 -0
  135. package/dist/packages/bunshot-auth/src/middleware/identify.js +124 -0
  136. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.d.ts +2 -2
  137. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.js +10 -7
  138. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.d.ts +2 -2
  139. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.js +20 -16
  140. package/dist/packages/bunshot-auth/src/middleware/requireScope.d.ts +10 -0
  141. package/dist/packages/bunshot-auth/src/middleware/requireScope.js +25 -0
  142. package/dist/packages/bunshot-auth/src/middleware/requireStepUp.d.ts +18 -0
  143. package/dist/packages/bunshot-auth/src/middleware/requireStepUp.js +30 -0
  144. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.d.ts +2 -2
  145. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.js +7 -6
  146. package/dist/packages/bunshot-auth/src/middleware/scimAuth.d.ts +8 -0
  147. package/dist/packages/bunshot-auth/src/middleware/scimAuth.js +29 -0
  148. package/dist/packages/bunshot-auth/src/middleware/userAuth.d.ts +3 -0
  149. package/dist/packages/bunshot-auth/src/middleware/userAuth.js +6 -0
  150. package/dist/{models → packages/bunshot-auth/src/models}/AuthUser.d.ts +19 -8
  151. package/dist/packages/bunshot-auth/src/models/AuthUser.js +53 -0
  152. package/dist/packages/bunshot-auth/src/models/Group.d.ts +19 -0
  153. package/dist/packages/bunshot-auth/src/models/Group.js +22 -0
  154. package/dist/{models → packages/bunshot-auth/src/models}/GroupMembership.d.ts +6 -8
  155. package/dist/packages/bunshot-auth/src/models/GroupMembership.js +19 -0
  156. package/dist/packages/bunshot-auth/src/models/M2MClient.d.ts +18 -0
  157. package/dist/packages/bunshot-auth/src/models/M2MClient.js +18 -0
  158. package/dist/packages/bunshot-auth/src/models/TenantRole.d.ts +13 -0
  159. package/dist/packages/bunshot-auth/src/models/TenantRole.js +17 -0
  160. package/dist/packages/bunshot-auth/src/plugin.d.ts +4 -0
  161. package/dist/packages/bunshot-auth/src/plugin.js +274 -0
  162. package/dist/packages/bunshot-auth/src/routes/auth.d.ts +15 -0
  163. package/dist/packages/bunshot-auth/src/routes/auth.js +1624 -0
  164. package/dist/packages/bunshot-auth/src/routes/groups.d.ts +4 -0
  165. package/dist/packages/bunshot-auth/src/routes/groups.js +481 -0
  166. package/dist/packages/bunshot-auth/src/routes/m2m.d.ts +2 -0
  167. package/dist/packages/bunshot-auth/src/routes/m2m.js +145 -0
  168. package/dist/packages/bunshot-auth/src/routes/mfa.d.ts +6 -0
  169. package/dist/packages/bunshot-auth/src/routes/mfa.js +991 -0
  170. package/dist/packages/bunshot-auth/src/routes/oauth.d.ts +3 -0
  171. package/dist/packages/bunshot-auth/src/routes/oauth.js +1727 -0
  172. package/dist/packages/bunshot-auth/src/routes/oidc.d.ts +2 -0
  173. package/dist/packages/bunshot-auth/src/routes/oidc.js +84 -0
  174. package/dist/packages/bunshot-auth/src/routes/organizations.d.ts +3 -0
  175. package/dist/packages/bunshot-auth/src/routes/organizations.js +741 -0
  176. package/dist/packages/bunshot-auth/src/routes/passkey.d.ts +2 -0
  177. package/dist/packages/bunshot-auth/src/routes/passkey.js +199 -0
  178. package/dist/packages/bunshot-auth/src/routes/saml.d.ts +2 -0
  179. package/dist/packages/bunshot-auth/src/routes/saml.js +226 -0
  180. package/dist/packages/bunshot-auth/src/routes/scim.d.ts +3 -0
  181. package/dist/packages/bunshot-auth/src/routes/scim.js +588 -0
  182. package/dist/packages/bunshot-auth/src/runtime.d.ts +52 -0
  183. package/dist/packages/bunshot-auth/src/runtime.js +11 -0
  184. package/dist/{schemas → packages/bunshot-auth/src/schemas}/auth.d.ts +4 -5
  185. package/dist/packages/bunshot-auth/src/schemas/auth.js +24 -0
  186. package/dist/packages/bunshot-auth/src/schemas/error.d.ts +10 -0
  187. package/dist/packages/bunshot-auth/src/schemas/error.js +10 -0
  188. package/dist/packages/bunshot-auth/src/schemas/success.d.ts +10 -0
  189. package/dist/packages/bunshot-auth/src/schemas/success.js +10 -0
  190. package/dist/packages/bunshot-auth/src/services/auth.d.ts +39 -0
  191. package/dist/packages/bunshot-auth/src/services/auth.js +378 -0
  192. package/dist/{services → packages/bunshot-auth/src/services}/mfa.d.ts +41 -17
  193. package/dist/{services → packages/bunshot-auth/src/services}/mfa.js +259 -183
  194. package/dist/packages/bunshot-auth/src/testing.d.ts +31 -0
  195. package/dist/packages/bunshot-auth/src/testing.js +23 -0
  196. package/dist/packages/bunshot-auth/src/types/adapter.d.ts +1 -0
  197. package/dist/packages/bunshot-auth/src/types/adapter.js +1 -0
  198. package/dist/packages/bunshot-auth/src/types/config.d.ts +152 -0
  199. package/dist/packages/bunshot-auth/src/types/config.js +179 -0
  200. package/dist/{routes → packages/bunshot-auth/src/types}/groups.d.ts +2 -3
  201. package/dist/packages/bunshot-auth/src/types/groups.js +1 -0
  202. package/dist/packages/bunshot-auth/src/types/oauthCode.d.ts +6 -0
  203. package/dist/packages/bunshot-auth/src/types/oauthCode.js +1 -0
  204. package/dist/packages/bunshot-auth/src/types/oauthReauth.d.ts +13 -0
  205. package/dist/packages/bunshot-auth/src/types/oauthReauth.js +1 -0
  206. package/dist/packages/bunshot-auth/src/types/redis.d.ts +1 -0
  207. package/dist/packages/bunshot-auth/src/types/redis.js +1 -0
  208. package/dist/packages/bunshot-auth/src/types/saml.d.ts +10 -0
  209. package/dist/packages/bunshot-auth/src/types/saml.js +1 -0
  210. package/dist/packages/bunshot-auth/src/types/session.d.ts +18 -0
  211. package/dist/packages/bunshot-auth/src/types/session.js +1 -0
  212. package/dist/packages/bunshot-auth/src/types/store.d.ts +1 -0
  213. package/dist/packages/bunshot-auth/src/types/store.js +1 -0
  214. package/dist/packages/bunshot-core/src/adminProvider.d.ts +95 -0
  215. package/dist/packages/bunshot-core/src/adminProvider.js +1 -0
  216. package/dist/packages/bunshot-core/src/auditLog.d.ts +34 -0
  217. package/dist/packages/bunshot-core/src/auditLog.js +1 -0
  218. package/dist/packages/bunshot-core/src/auth-adapter.d.ts +227 -0
  219. package/dist/packages/bunshot-core/src/auth-adapter.js +4 -0
  220. package/dist/packages/bunshot-core/src/authVariables.d.ts +14 -0
  221. package/dist/packages/bunshot-core/src/authVariables.js +4 -0
  222. package/dist/packages/bunshot-core/src/cache.d.ts +12 -0
  223. package/dist/packages/bunshot-core/src/cache.js +21 -0
  224. package/dist/packages/bunshot-core/src/captcha.d.ts +16 -0
  225. package/dist/packages/bunshot-core/src/captcha.js +1 -0
  226. package/dist/packages/bunshot-core/src/clearRegistry.d.ts +6 -0
  227. package/dist/packages/bunshot-core/src/clearRegistry.js +17 -0
  228. package/dist/packages/bunshot-core/src/clientIp.d.ts +3 -0
  229. package/dist/packages/bunshot-core/src/clientIp.js +45 -0
  230. package/dist/packages/bunshot-core/src/configLock.d.ts +4 -0
  231. package/dist/packages/bunshot-core/src/configLock.js +7 -0
  232. package/dist/packages/bunshot-core/src/configValidation.d.ts +22 -0
  233. package/dist/packages/bunshot-core/src/configValidation.js +39 -0
  234. package/dist/packages/bunshot-core/src/constants.js +10 -0
  235. package/dist/packages/bunshot-core/src/context/bunshotContext.d.ts +232 -0
  236. package/dist/packages/bunshot-core/src/context/bunshotContext.js +1 -0
  237. package/dist/packages/bunshot-core/src/context/contextAccess.d.ts +3 -0
  238. package/dist/packages/bunshot-core/src/context/contextAccess.js +16 -0
  239. package/dist/packages/bunshot-core/src/context/contextStore.d.ts +16 -0
  240. package/dist/packages/bunshot-core/src/context/contextStore.js +31 -0
  241. package/dist/packages/bunshot-core/src/context/frameworkConfig.d.ts +38 -0
  242. package/dist/packages/bunshot-core/src/context/frameworkConfig.js +1 -0
  243. package/dist/packages/bunshot-core/src/context/index.d.ts +4 -0
  244. package/dist/packages/bunshot-core/src/context/index.js +2 -0
  245. package/dist/packages/bunshot-core/src/context.d.ts +40 -0
  246. package/dist/packages/bunshot-core/src/context.js +35 -0
  247. package/dist/packages/bunshot-core/src/coreContracts.d.ts +47 -0
  248. package/dist/packages/bunshot-core/src/coreContracts.js +1 -0
  249. package/dist/packages/bunshot-core/src/coreRegistrar.d.ts +6 -0
  250. package/dist/packages/bunshot-core/src/coreRegistrar.js +42 -0
  251. package/dist/{lib → packages/bunshot-core/src}/createRoute.d.ts +4 -30
  252. package/dist/{lib → packages/bunshot-core/src}/createRoute.js +39 -88
  253. package/dist/packages/bunshot-core/src/cronRegistry.d.ts +11 -0
  254. package/dist/packages/bunshot-core/src/cronRegistry.js +1 -0
  255. package/dist/packages/bunshot-core/src/crypto.d.ts +43 -0
  256. package/dist/packages/bunshot-core/src/crypto.js +74 -0
  257. package/dist/packages/bunshot-core/src/csrf.d.ts +8 -0
  258. package/dist/packages/bunshot-core/src/csrf.js +1 -0
  259. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.d.ts +7 -0
  260. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.js +19 -0
  261. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.d.ts +6 -0
  262. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.js +40 -0
  263. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.d.ts +6 -0
  264. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.js +24 -0
  265. package/dist/packages/bunshot-core/src/emailTemplates.d.ts +5 -0
  266. package/dist/packages/bunshot-core/src/emailTemplates.js +10 -0
  267. package/dist/packages/bunshot-core/src/errors.d.ts +13 -0
  268. package/dist/packages/bunshot-core/src/errors.js +22 -0
  269. package/dist/packages/bunshot-core/src/eventBus.d.ts +270 -0
  270. package/dist/packages/bunshot-core/src/eventBus.js +143 -0
  271. package/dist/packages/bunshot-core/src/idempotency.d.ts +18 -0
  272. package/dist/packages/bunshot-core/src/idempotency.js +1 -0
  273. package/dist/packages/bunshot-core/src/index.d.ts +60 -0
  274. package/dist/packages/bunshot-core/src/index.js +34 -0
  275. package/dist/packages/bunshot-core/src/mail.d.ts +14 -0
  276. package/dist/packages/bunshot-core/src/mail.js +8 -0
  277. package/dist/packages/bunshot-core/src/memoryEviction.d.ts +24 -0
  278. package/dist/packages/bunshot-core/src/memoryEviction.js +52 -0
  279. package/dist/packages/bunshot-core/src/pagination.d.ts +45 -0
  280. package/dist/packages/bunshot-core/src/pagination.js +61 -0
  281. package/dist/packages/bunshot-core/src/permissions.d.ts +64 -0
  282. package/dist/packages/bunshot-core/src/permissions.js +27 -0
  283. package/dist/packages/bunshot-core/src/plugin.d.ts +44 -0
  284. package/dist/packages/bunshot-core/src/plugin.js +1 -0
  285. package/dist/packages/bunshot-core/src/rateLimit.d.ts +5 -0
  286. package/dist/packages/bunshot-core/src/rateLimit.js +18 -0
  287. package/dist/packages/bunshot-core/src/redis.d.ts +21 -0
  288. package/dist/packages/bunshot-core/src/redis.js +1 -0
  289. package/dist/packages/bunshot-core/src/routeAuth.d.ts +5 -0
  290. package/dist/packages/bunshot-core/src/routeAuth.js +11 -0
  291. package/dist/packages/bunshot-core/src/routeOverrides.d.ts +24 -0
  292. package/dist/packages/bunshot-core/src/routeOverrides.js +25 -0
  293. package/dist/packages/bunshot-core/src/routerAdapter.d.ts +6 -0
  294. package/dist/packages/bunshot-core/src/routerAdapter.js +56 -0
  295. package/dist/packages/bunshot-core/src/secrets.d.ts +48 -0
  296. package/dist/packages/bunshot-core/src/secrets.js +8 -0
  297. package/dist/packages/bunshot-core/src/signing.d.ts +41 -0
  298. package/dist/packages/bunshot-core/src/signing.js +1 -0
  299. package/dist/packages/bunshot-core/src/sse.d.ts +36 -0
  300. package/dist/packages/bunshot-core/src/sse.js +1 -0
  301. package/dist/packages/bunshot-core/src/storageAdapter.js +1 -0
  302. package/dist/packages/bunshot-core/src/storeInfra.d.ts +44 -0
  303. package/dist/packages/bunshot-core/src/storeInfra.js +18 -0
  304. package/dist/packages/bunshot-core/src/storeType.d.ts +7 -0
  305. package/dist/packages/bunshot-core/src/storeType.js +1 -0
  306. package/dist/packages/bunshot-core/src/testing.d.ts +1 -0
  307. package/dist/packages/bunshot-core/src/testing.js +1 -0
  308. package/dist/packages/bunshot-core/src/uploadRegistry.d.ts +23 -0
  309. package/dist/packages/bunshot-core/src/uploadRegistry.js +4 -0
  310. package/dist/packages/bunshot-core/src/userResolver.d.ts +5 -0
  311. package/dist/packages/bunshot-core/src/userResolver.js +14 -0
  312. package/dist/packages/bunshot-core/src/wsMessages.d.ts +42 -0
  313. package/dist/packages/bunshot-core/src/wsMessages.js +4 -0
  314. package/dist/packages/bunshot-permissions/src/adapters/memory.d.ts +7 -0
  315. package/dist/packages/bunshot-permissions/src/adapters/memory.js +73 -0
  316. package/dist/packages/bunshot-permissions/src/index.d.ts +10 -0
  317. package/dist/packages/bunshot-permissions/src/index.js +5 -0
  318. package/dist/packages/bunshot-permissions/src/lib/bootstrap.d.ts +7 -0
  319. package/dist/packages/bunshot-permissions/src/lib/bootstrap.js +12 -0
  320. package/dist/packages/bunshot-permissions/src/lib/evaluator.d.ts +10 -0
  321. package/dist/packages/bunshot-permissions/src/lib/evaluator.js +165 -0
  322. package/dist/packages/bunshot-permissions/src/lib/registry.d.ts +2 -0
  323. package/dist/packages/bunshot-permissions/src/lib/registry.js +31 -0
  324. package/dist/packages/bunshot-permissions/src/lib/validation.d.ts +1 -0
  325. package/dist/packages/bunshot-permissions/src/lib/validation.js +1 -0
  326. package/dist/packages/bunshot-permissions/src/types/adapter.d.ts +1 -0
  327. package/dist/packages/bunshot-permissions/src/types/adapter.js +1 -0
  328. package/dist/packages/bunshot-permissions/src/types/evaluator.d.ts +1 -0
  329. package/dist/packages/bunshot-permissions/src/types/evaluator.js +1 -0
  330. package/dist/packages/bunshot-permissions/src/types/models.d.ts +1 -0
  331. package/dist/packages/bunshot-permissions/src/types/models.js +1 -0
  332. package/dist/packages/bunshot-permissions/src/types/registry.d.ts +1 -0
  333. package/dist/packages/bunshot-permissions/src/types/registry.js +1 -0
  334. package/dist/packages/bunshot-postgres/src/adapter.d.ts +6 -0
  335. package/dist/packages/bunshot-postgres/src/adapter.js +794 -0
  336. package/dist/packages/bunshot-postgres/src/connection.d.ts +15 -0
  337. package/dist/packages/bunshot-postgres/src/connection.js +16 -0
  338. package/dist/packages/bunshot-postgres/src/index.d.ts +4 -0
  339. package/dist/packages/bunshot-postgres/src/index.js +2 -0
  340. package/dist/packages/bunshot-postgres/src/schema.d.ts +997 -0
  341. package/dist/packages/bunshot-postgres/src/schema.js +105 -0
  342. package/dist/src/app.d.ts +230 -0
  343. package/dist/src/app.js +182 -0
  344. package/dist/src/cli/commands/init.d.ts +10 -0
  345. package/dist/src/cli/commands/init.js +709 -0
  346. package/dist/src/cli/index.d.ts +1 -0
  347. package/dist/src/cli/index.js +3 -0
  348. package/dist/src/entrypoints/mongo.d.ts +6 -0
  349. package/dist/src/entrypoints/mongo.js +4 -0
  350. package/dist/src/entrypoints/queue.d.ts +2 -0
  351. package/dist/src/entrypoints/queue.js +1 -0
  352. package/dist/src/entrypoints/redis.d.ts +1 -0
  353. package/dist/src/entrypoints/redis.js +1 -0
  354. package/dist/{adapters → src/framework/adapters}/localStorage.d.ts +1 -1
  355. package/dist/{adapters → src/framework/adapters}/localStorage.js +23 -8
  356. package/dist/src/framework/adapters/memoryStorage.d.ts +2 -0
  357. package/dist/src/framework/adapters/memoryStorage.js +45 -0
  358. package/dist/{adapters → src/framework/adapters}/s3Storage.d.ts +1 -1
  359. package/dist/{adapters → src/framework/adapters}/s3Storage.js +12 -12
  360. package/dist/src/framework/admin/bunshotAccess.d.ts +2 -0
  361. package/dist/src/framework/admin/bunshotAccess.js +23 -0
  362. package/dist/src/framework/admin/bunshotUsers.d.ts +2 -0
  363. package/dist/src/framework/admin/bunshotUsers.js +103 -0
  364. package/dist/src/framework/admin/index.d.ts +7 -0
  365. package/dist/src/framework/admin/index.js +21 -0
  366. package/dist/src/framework/boundaryAdapters/cacheFactories.d.ts +13 -0
  367. package/dist/src/framework/boundaryAdapters/cacheFactories.js +86 -0
  368. package/dist/src/framework/boundaryAdapters/index.d.ts +2 -0
  369. package/dist/src/framework/boundaryAdapters/index.js +1 -0
  370. package/dist/src/framework/boundaryAdapters.d.ts +17 -0
  371. package/dist/src/framework/boundaryAdapters.js +62 -0
  372. package/dist/src/framework/buildContext.d.ts +33 -0
  373. package/dist/src/framework/buildContext.js +119 -0
  374. package/dist/src/framework/config/schema.d.ts +447 -0
  375. package/dist/src/framework/config/schema.js +528 -0
  376. package/dist/src/framework/createInfrastructure.d.ts +76 -0
  377. package/dist/src/framework/createInfrastructure.js +221 -0
  378. package/dist/src/framework/lib/auditLog.d.ts +23 -0
  379. package/dist/src/framework/lib/auditLog.js +416 -0
  380. package/dist/src/framework/lib/captcha.d.ts +11 -0
  381. package/dist/src/framework/lib/captcha.js +40 -0
  382. package/dist/{lib → src/framework/lib}/createDtoMapper.js +4 -4
  383. package/dist/src/framework/lib/createRoute.d.ts +1 -0
  384. package/dist/src/framework/lib/createRoute.js +2 -0
  385. package/dist/{lib → src/framework/lib}/idempotency.d.ts +2 -6
  386. package/dist/src/framework/lib/idempotency.js +74 -0
  387. package/dist/src/framework/lib/logger.d.ts +3 -0
  388. package/dist/src/framework/lib/logger.js +14 -0
  389. package/dist/src/framework/lib/metrics.d.ts +34 -0
  390. package/dist/{lib → src/framework/lib}/metrics.js +49 -57
  391. package/dist/src/framework/lib/pagination.d.ts +42 -0
  392. package/dist/src/framework/lib/pagination.js +51 -0
  393. package/dist/src/framework/lib/redisTransport.d.ts +38 -0
  394. package/dist/src/framework/lib/redisTransport.js +107 -0
  395. package/dist/src/framework/lib/resolveUserId.d.ts +2 -0
  396. package/dist/src/framework/lib/resolveUserId.js +5 -0
  397. package/dist/src/framework/lib/sseCollision.d.ts +6 -0
  398. package/dist/src/framework/lib/sseCollision.js +26 -0
  399. package/dist/src/framework/lib/storageAdapter.d.ts +1 -0
  400. package/dist/src/framework/lib/storageAdapter.js +1 -0
  401. package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.js +4 -4
  402. package/dist/src/framework/lib/tenant.d.ts +21 -0
  403. package/dist/src/framework/lib/tenant.js +70 -0
  404. package/dist/{lib → src/framework/lib}/upload.d.ts +14 -9
  405. package/dist/src/framework/lib/upload.js +132 -0
  406. package/dist/src/framework/lib/uploadRegistry.d.ts +23 -0
  407. package/dist/src/framework/lib/uploadRegistry.js +34 -0
  408. package/dist/{lib → src/framework/lib}/validate.d.ts +1 -1
  409. package/dist/{lib → src/framework/lib}/validate.js +2 -2
  410. package/dist/src/framework/lib/ws.d.ts +19 -0
  411. package/dist/src/framework/lib/ws.js +130 -0
  412. package/dist/src/framework/lib/wsHeartbeat.d.ts +12 -0
  413. package/dist/src/framework/lib/wsHeartbeat.js +53 -0
  414. package/dist/src/framework/lib/wsMessages.d.ts +25 -0
  415. package/dist/src/framework/lib/wsMessages.js +45 -0
  416. package/dist/src/framework/lib/wsNamespace.d.ts +17 -0
  417. package/dist/src/framework/lib/wsNamespace.js +19 -0
  418. package/dist/src/framework/lib/wsPresence.d.ts +17 -0
  419. package/dist/src/framework/lib/wsPresence.js +84 -0
  420. package/dist/src/framework/lib/wsTransport.d.ts +38 -0
  421. package/dist/src/framework/lib/wsTransport.js +9 -0
  422. package/dist/{lib → src/framework/lib}/zodToMongoose.d.ts +1 -1
  423. package/dist/{lib → src/framework/lib}/zodToMongoose.js +11 -11
  424. package/dist/{middleware → src/framework/middleware}/auditLog.d.ts +4 -3
  425. package/dist/src/framework/middleware/auditLog.js +42 -0
  426. package/dist/{middleware → src/framework/middleware}/botProtection.d.ts +2 -2
  427. package/dist/{middleware → src/framework/middleware}/botProtection.js +8 -9
  428. package/dist/src/framework/middleware/cacheResponse.d.ts +35 -0
  429. package/dist/src/framework/middleware/cacheResponse.js +126 -0
  430. package/dist/src/framework/middleware/captcha.d.ts +9 -0
  431. package/dist/src/framework/middleware/captcha.js +37 -0
  432. package/dist/{middleware → src/framework/middleware}/errorHandler.d.ts +1 -1
  433. package/dist/src/framework/middleware/errorHandler.js +16 -0
  434. package/dist/src/framework/middleware/index.js +1 -0
  435. package/dist/{middleware → src/framework/middleware}/logger.d.ts +1 -1
  436. package/dist/src/framework/middleware/metrics.d.ts +12 -0
  437. package/dist/src/framework/middleware/metrics.js +26 -0
  438. package/dist/{middleware → src/framework/middleware}/rateLimit.d.ts +2 -2
  439. package/dist/src/framework/middleware/rateLimit.js +22 -0
  440. package/dist/src/framework/middleware/requestId.d.ts +3 -0
  441. package/dist/{middleware → src/framework/middleware}/requestId.js +2 -2
  442. package/dist/{middleware → src/framework/middleware}/requestLogger.d.ts +3 -3
  443. package/dist/{middleware → src/framework/middleware}/requestLogger.js +17 -12
  444. package/dist/{middleware → src/framework/middleware}/requestSigning.d.ts +2 -2
  445. package/dist/{middleware → src/framework/middleware}/requestSigning.js +18 -19
  446. package/dist/src/framework/middleware/tenant.d.ts +14 -0
  447. package/dist/{middleware → src/framework/middleware}/tenant.js +31 -27
  448. package/dist/src/framework/middleware/upload.d.ts +5 -0
  449. package/dist/{middleware → src/framework/middleware}/upload.js +4 -4
  450. package/dist/{middleware → src/framework/middleware}/webhookAuth.d.ts +3 -3
  451. package/dist/{middleware → src/framework/middleware}/webhookAuth.js +11 -11
  452. package/dist/src/framework/models/AuditLog.d.ts +21 -0
  453. package/dist/src/framework/models/AuditLog.js +31 -0
  454. package/dist/src/framework/mountMiddleware.d.ts +91 -0
  455. package/dist/src/framework/mountMiddleware.js +128 -0
  456. package/dist/src/framework/mountOptionalEndpoints.d.ts +103 -0
  457. package/dist/src/framework/mountOptionalEndpoints.js +47 -0
  458. package/dist/src/framework/mountRoutes.d.ts +21 -0
  459. package/dist/src/framework/mountRoutes.js +144 -0
  460. package/dist/src/framework/persistence/cronRegistry.d.ts +28 -0
  461. package/dist/src/framework/persistence/cronRegistry.js +139 -0
  462. package/dist/src/framework/persistence/idempotency.d.ts +26 -0
  463. package/dist/src/framework/persistence/idempotency.js +178 -0
  464. package/dist/src/framework/persistence/index.d.ts +6 -0
  465. package/dist/src/framework/persistence/index.js +8 -0
  466. package/dist/src/framework/persistence/storeInfra.d.ts +9 -0
  467. package/dist/src/framework/persistence/storeInfra.js +1 -0
  468. package/dist/src/framework/persistence/uploadRegistry.d.ts +35 -0
  469. package/dist/src/framework/persistence/uploadRegistry.js +235 -0
  470. package/dist/src/framework/persistence/wsMessages.d.ts +22 -0
  471. package/dist/src/framework/persistence/wsMessages.js +296 -0
  472. package/dist/src/framework/preloadSchemas.d.ts +24 -0
  473. package/dist/src/framework/preloadSchemas.js +42 -0
  474. package/dist/src/framework/registerBoundaryAdapters.d.ts +23 -0
  475. package/dist/src/framework/registerBoundaryAdapters.js +46 -0
  476. package/dist/src/framework/routes/admin.d.ts +9 -0
  477. package/dist/src/framework/routes/admin.js +361 -0
  478. package/dist/src/framework/routes/health.d.ts +1 -0
  479. package/dist/src/framework/routes/health.js +21 -0
  480. package/dist/src/framework/routes/home.d.ts +1 -0
  481. package/dist/src/framework/routes/home.js +18 -0
  482. package/dist/src/framework/routes/jobs.d.ts +3 -0
  483. package/dist/src/framework/routes/jobs.js +315 -0
  484. package/dist/src/framework/routes/metrics.d.ts +10 -0
  485. package/dist/src/framework/routes/metrics.js +57 -0
  486. package/dist/src/framework/routes/uploads.d.ts +14 -0
  487. package/dist/src/framework/routes/uploads.js +262 -0
  488. package/dist/src/framework/runPluginLifecycle.d.ts +27 -0
  489. package/dist/src/framework/runPluginLifecycle.js +121 -0
  490. package/dist/src/framework/secrets/frameworkSecretSchema.d.ts +58 -0
  491. package/dist/src/framework/secrets/frameworkSecretSchema.js +20 -0
  492. package/dist/src/framework/secrets/index.d.ts +9 -0
  493. package/dist/src/framework/secrets/index.js +7 -0
  494. package/dist/src/framework/secrets/providers/envProvider.d.ts +15 -0
  495. package/dist/src/framework/secrets/providers/envProvider.js +18 -0
  496. package/dist/src/framework/secrets/providers/fileProvider.d.ts +8 -0
  497. package/dist/src/framework/secrets/providers/fileProvider.js +82 -0
  498. package/dist/src/framework/secrets/providers/ssmProvider.d.ts +20 -0
  499. package/dist/src/framework/secrets/providers/ssmProvider.js +127 -0
  500. package/dist/src/framework/secrets/resolveSecretBundle.d.ts +53 -0
  501. package/dist/src/framework/secrets/resolveSecretBundle.js +84 -0
  502. package/dist/src/framework/secrets/resolveSecrets.d.ts +18 -0
  503. package/dist/src/framework/secrets/resolveSecrets.js +34 -0
  504. package/dist/src/framework/sse/index.d.ts +21 -0
  505. package/dist/src/framework/sse/index.js +109 -0
  506. package/dist/src/framework/ws/index.d.ts +11 -0
  507. package/dist/src/framework/ws/index.js +8 -0
  508. package/dist/src/index.d.ts +87 -0
  509. package/dist/src/index.js +58 -0
  510. package/dist/src/lib/appConfig.d.ts +7 -0
  511. package/dist/src/lib/appConfig.js +27 -0
  512. package/dist/src/lib/appMeta.d.ts +7 -0
  513. package/dist/src/lib/appMeta.js +3 -0
  514. package/dist/src/lib/authConfig.d.ts +532 -0
  515. package/dist/src/lib/authConfig.js +179 -0
  516. package/dist/{lib → src/lib}/context.d.ts +6 -7
  517. package/dist/{lib → src/lib}/context.js +5 -5
  518. package/dist/src/lib/logger.d.ts +1 -0
  519. package/dist/src/lib/logger.js +1 -0
  520. package/dist/src/lib/mongo.d.ts +58 -0
  521. package/dist/src/lib/mongo.js +96 -0
  522. package/dist/src/lib/queue.d.ts +72 -0
  523. package/dist/src/lib/queue.js +152 -0
  524. package/dist/src/lib/redis.d.ts +28 -0
  525. package/dist/src/lib/redis.js +72 -0
  526. package/dist/{lib → src/lib}/signing.d.ts +2 -2
  527. package/dist/src/lib/signing.js +210 -0
  528. package/dist/src/lib/signingConfig.d.ts +40 -0
  529. package/dist/src/lib/signingConfig.js +28 -0
  530. package/dist/src/server.d.ts +146 -0
  531. package/dist/src/server.js +469 -0
  532. package/dist/src/shared/lib/HttpError.d.ts +1 -0
  533. package/dist/src/shared/lib/HttpError.js +2 -0
  534. package/dist/src/shared/lib/constants.d.ts +10 -0
  535. package/dist/src/shared/lib/crypto.d.ts +43 -0
  536. package/dist/src/shared/lib/crypto.js +74 -0
  537. package/dist/src/shared/lib/signing.d.ts +52 -0
  538. package/dist/{lib → src/shared/lib}/signing.js +40 -10
  539. package/dist/src/testing.d.ts +34 -0
  540. package/dist/src/testing.js +93 -0
  541. package/package.json +62 -25
  542. package/dist/adapters/memoryAuth.d.ts +0 -46
  543. package/dist/adapters/memoryAuth.js +0 -634
  544. package/dist/adapters/memoryStorage.d.ts +0 -3
  545. package/dist/adapters/memoryStorage.js +0 -44
  546. package/dist/adapters/mongoAuth.d.ts +0 -2
  547. package/dist/adapters/mongoAuth.js +0 -307
  548. package/dist/adapters/sqliteAuth.d.ts +0 -49
  549. package/dist/adapters/sqliteAuth.js +0 -707
  550. package/dist/app.d.ts +0 -456
  551. package/dist/app.js +0 -548
  552. package/dist/entrypoints/mongo.d.ts +0 -5
  553. package/dist/entrypoints/mongo.js +0 -4
  554. package/dist/entrypoints/queue.d.ts +0 -2
  555. package/dist/entrypoints/queue.js +0 -1
  556. package/dist/entrypoints/redis.d.ts +0 -1
  557. package/dist/entrypoints/redis.js +0 -1
  558. package/dist/index.d.ts +0 -98
  559. package/dist/index.js +0 -77
  560. package/dist/lib/HttpError.d.ts +0 -9
  561. package/dist/lib/HttpError.js +0 -14
  562. package/dist/lib/appConfig.d.ts +0 -162
  563. package/dist/lib/appConfig.js +0 -83
  564. package/dist/lib/auditLog.d.ts +0 -52
  565. package/dist/lib/auditLog.js +0 -201
  566. package/dist/lib/authAdapter.d.ts +0 -176
  567. package/dist/lib/authAdapter.js +0 -7
  568. package/dist/lib/authRateLimit.d.ts +0 -13
  569. package/dist/lib/authRateLimit.js +0 -81
  570. package/dist/lib/clientIp.d.ts +0 -14
  571. package/dist/lib/crypto.d.ts +0 -11
  572. package/dist/lib/crypto.js +0 -22
  573. package/dist/lib/deletionCancelToken.d.ts +0 -12
  574. package/dist/lib/deletionCancelToken.js +0 -88
  575. package/dist/lib/emailVerification.d.ts +0 -13
  576. package/dist/lib/emailVerification.js +0 -86
  577. package/dist/lib/fingerprint.js +0 -36
  578. package/dist/lib/idempotency.js +0 -182
  579. package/dist/lib/jwt.d.ts +0 -2
  580. package/dist/lib/jwt.js +0 -24
  581. package/dist/lib/logger.d.ts +0 -1
  582. package/dist/lib/logger.js +0 -7
  583. package/dist/lib/metrics.d.ts +0 -14
  584. package/dist/lib/mfaChallenge.d.ts +0 -42
  585. package/dist/lib/mfaChallenge.js +0 -293
  586. package/dist/lib/mongo.d.ts +0 -39
  587. package/dist/lib/mongo.js +0 -124
  588. package/dist/lib/oauth.d.ts +0 -40
  589. package/dist/lib/oauth.js +0 -101
  590. package/dist/lib/oauthCode.d.ts +0 -15
  591. package/dist/lib/oauthCode.js +0 -90
  592. package/dist/lib/pagination.d.ts +0 -119
  593. package/dist/lib/pagination.js +0 -166
  594. package/dist/lib/queue.d.ts +0 -37
  595. package/dist/lib/queue.js +0 -117
  596. package/dist/lib/redis.d.ts +0 -9
  597. package/dist/lib/redis.js +0 -61
  598. package/dist/lib/resetPassword.d.ts +0 -12
  599. package/dist/lib/resetPassword.js +0 -91
  600. package/dist/lib/roles.d.ts +0 -7
  601. package/dist/lib/roles.js +0 -49
  602. package/dist/lib/session.d.ts +0 -39
  603. package/dist/lib/session.js +0 -535
  604. package/dist/lib/tenant.d.ts +0 -15
  605. package/dist/lib/tenant.js +0 -65
  606. package/dist/lib/upload.js +0 -87
  607. package/dist/lib/ws.d.ts +0 -22
  608. package/dist/lib/ws.js +0 -89
  609. package/dist/lib/wsHeartbeat.d.ts +0 -12
  610. package/dist/lib/wsHeartbeat.js +0 -57
  611. package/dist/lib/wsMessages.d.ts +0 -40
  612. package/dist/lib/wsMessages.js +0 -330
  613. package/dist/lib/wsPresence.d.ts +0 -25
  614. package/dist/lib/wsPresence.js +0 -99
  615. package/dist/middleware/auditLog.js +0 -39
  616. package/dist/middleware/bearerAuth.d.ts +0 -2
  617. package/dist/middleware/bearerAuth.js +0 -11
  618. package/dist/middleware/cacheResponse.d.ts +0 -15
  619. package/dist/middleware/cacheResponse.js +0 -178
  620. package/dist/middleware/csrf.js +0 -125
  621. package/dist/middleware/errorHandler.js +0 -13
  622. package/dist/middleware/identify.d.ts +0 -3
  623. package/dist/middleware/identify.js +0 -95
  624. package/dist/middleware/index.js +0 -1
  625. package/dist/middleware/metrics.d.ts +0 -9
  626. package/dist/middleware/metrics.js +0 -26
  627. package/dist/middleware/rateLimit.js +0 -22
  628. package/dist/middleware/requestId.d.ts +0 -3
  629. package/dist/middleware/tenant.d.ts +0 -5
  630. package/dist/middleware/upload.d.ts +0 -5
  631. package/dist/middleware/userAuth.d.ts +0 -3
  632. package/dist/middleware/userAuth.js +0 -6
  633. package/dist/models/AuditLog.d.ts +0 -30
  634. package/dist/models/AuditLog.js +0 -39
  635. package/dist/models/AuthUser.js +0 -48
  636. package/dist/models/Group.d.ts +0 -21
  637. package/dist/models/Group.js +0 -28
  638. package/dist/models/GroupMembership.js +0 -25
  639. package/dist/models/TenantRole.d.ts +0 -15
  640. package/dist/models/TenantRole.js +0 -23
  641. package/dist/routes/auth.d.ts +0 -11
  642. package/dist/routes/auth.js +0 -605
  643. package/dist/routes/groups.js +0 -346
  644. package/dist/routes/health.d.ts +0 -1
  645. package/dist/routes/health.js +0 -22
  646. package/dist/routes/home.d.ts +0 -1
  647. package/dist/routes/home.js +0 -16
  648. package/dist/routes/jobs.d.ts +0 -2
  649. package/dist/routes/jobs.js +0 -272
  650. package/dist/routes/metrics.d.ts +0 -7
  651. package/dist/routes/metrics.js +0 -52
  652. package/dist/routes/mfa.d.ts +0 -5
  653. package/dist/routes/mfa.js +0 -620
  654. package/dist/routes/oauth.d.ts +0 -2
  655. package/dist/routes/oauth.js +0 -514
  656. package/dist/routes/uploads.d.ts +0 -2
  657. package/dist/routes/uploads.js +0 -135
  658. package/dist/schemas/auth.js +0 -30
  659. package/dist/server.d.ts +0 -57
  660. package/dist/server.js +0 -112
  661. package/dist/services/auth.d.ts +0 -27
  662. package/dist/services/auth.js +0 -159
  663. package/dist/ws/index.d.ts +0 -10
  664. package/dist/ws/index.js +0 -38
  665. package/docs/sections/adding-middleware/full.md +0 -35
  666. package/docs/sections/adding-models/full.md +0 -125
  667. package/docs/sections/adding-models/overview.md +0 -13
  668. package/docs/sections/adding-routes/full.md +0 -182
  669. package/docs/sections/adding-routes/overview.md +0 -23
  670. package/docs/sections/auth-flow/full.md +0 -779
  671. package/docs/sections/auth-flow/overview.md +0 -10
  672. package/docs/sections/auth-security-examples/full.md +0 -365
  673. package/docs/sections/authentication/full.md +0 -130
  674. package/docs/sections/authentication/overview.md +0 -5
  675. package/docs/sections/cli/full.md +0 -42
  676. package/docs/sections/configuration/full.md +0 -172
  677. package/docs/sections/configuration/overview.md +0 -18
  678. package/docs/sections/configuration-example/full.md +0 -117
  679. package/docs/sections/configuration-example/overview.md +0 -30
  680. package/docs/sections/documentation/full.md +0 -171
  681. package/docs/sections/environment-variables/full.md +0 -55
  682. package/docs/sections/exports/full.md +0 -123
  683. package/docs/sections/extending-context/full.md +0 -59
  684. package/docs/sections/header.md +0 -3
  685. package/docs/sections/installation/full.md +0 -6
  686. package/docs/sections/jobs/full.md +0 -140
  687. package/docs/sections/jobs/overview.md +0 -15
  688. package/docs/sections/logging/full.md +0 -83
  689. package/docs/sections/metrics/full.md +0 -127
  690. package/docs/sections/mongodb-connections/full.md +0 -45
  691. package/docs/sections/mongodb-connections/overview.md +0 -7
  692. package/docs/sections/multi-tenancy/full.md +0 -66
  693. package/docs/sections/multi-tenancy/overview.md +0 -15
  694. package/docs/sections/oauth/full.md +0 -189
  695. package/docs/sections/oauth/overview.md +0 -16
  696. package/docs/sections/package-development/full.md +0 -7
  697. package/docs/sections/pagination/full.md +0 -93
  698. package/docs/sections/peer-dependencies/full.md +0 -47
  699. package/docs/sections/quick-start/full.md +0 -43
  700. package/docs/sections/response-caching/full.md +0 -117
  701. package/docs/sections/response-caching/overview.md +0 -13
  702. package/docs/sections/roles/full.md +0 -225
  703. package/docs/sections/roles/overview.md +0 -14
  704. package/docs/sections/running-without-redis/full.md +0 -16
  705. package/docs/sections/running-without-redis-or-mongodb/full.md +0 -60
  706. package/docs/sections/signing/full.md +0 -203
  707. package/docs/sections/stack/full.md +0 -10
  708. package/docs/sections/uploads/full.md +0 -199
  709. package/docs/sections/versioning/full.md +0 -85
  710. package/docs/sections/webhook-auth/full.md +0 -100
  711. package/docs/sections/websocket/full.md +0 -184
  712. package/docs/sections/websocket/overview.md +0 -5
  713. package/docs/sections/websocket-rooms/full.md +0 -102
  714. package/docs/sections/websocket-rooms/overview.md +0 -5
  715. /package/dist/{lib/storageAdapter.js → packages/bunshot-admin/src/types/env.js} +0 -0
  716. /package/dist/{lib → packages/bunshot-auth/src/lib}/fingerprint.d.ts +0 -0
  717. /package/dist/{lib → packages/bunshot-core/src}/constants.d.ts +0 -0
  718. /package/dist/{lib → packages/bunshot-core/src}/storageAdapter.d.ts +0 -0
  719. /package/dist/{lib → src/framework/lib}/createDtoMapper.d.ts +0 -0
  720. /package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.d.ts +0 -0
  721. /package/dist/{middleware → src/framework/middleware}/cors.d.ts +0 -0
  722. /package/dist/{middleware → src/framework/middleware}/cors.js +0 -0
  723. /package/dist/{middleware → src/framework/middleware}/index.d.ts +0 -0
  724. /package/dist/{middleware → src/framework/middleware}/logger.js +0 -0
  725. /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
+ }>;