@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,2 @@
1
+ import type { AuthAdapter } from '../lib/authAdapter';
2
+ export declare function createMongoAuthAdapter(conn: import('mongoose').Connection, mg: typeof import('mongoose')): AuthAdapter;
@@ -0,0 +1,536 @@
1
+ import { createAuthUserModel } from '../models/AuthUser';
2
+ import { createGroupModel } from '../models/Group';
3
+ import { createGroupMembershipModel } from '../models/GroupMembership';
4
+ import { createTenantRoleModel } from '../models/TenantRole';
5
+ import { HttpError } from '../../../bunshot-core/src/index.js';
6
+ function encodeMongoCursor(createdAt, id) {
7
+ return btoa(JSON.stringify({ createdAt, id }));
8
+ }
9
+ function decodeMongoCursor(cursor) {
10
+ try {
11
+ return JSON.parse(atob(cursor));
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ }
17
+ function mongoGroupToRecord(doc) {
18
+ return {
19
+ id: String(doc._id),
20
+ name: doc.name,
21
+ displayName: doc.displayName,
22
+ description: doc.description,
23
+ roles: doc.roles ?? [],
24
+ tenantId: doc.tenantId ?? null,
25
+ createdAt: doc.createdAt instanceof Date ? doc.createdAt.getTime() : doc.createdAt,
26
+ updatedAt: doc.updatedAt instanceof Date ? doc.updatedAt.getTime() : doc.updatedAt,
27
+ };
28
+ }
29
+ export function createMongoAuthAdapter(conn, mg) {
30
+ const AuthUser = createAuthUserModel(conn, mg);
31
+ const TenantRole = createTenantRoleModel(conn, mg);
32
+ const Group = createGroupModel(conn, mg);
33
+ const GroupMembership = createGroupMembershipModel(conn, mg);
34
+ // M2M uses a lazy proxy pattern — import it directly
35
+ const { M2MClient } = require('../models/M2MClient');
36
+ return {
37
+ async findByEmail(email) {
38
+ const user = await AuthUser.findOne({ email });
39
+ if (!user)
40
+ return null;
41
+ return { id: String(user._id), passwordHash: user.password };
42
+ },
43
+ async create(email, passwordHash) {
44
+ try {
45
+ const normalized = email.toLowerCase();
46
+ const user = await AuthUser.create({
47
+ email: normalized,
48
+ identifier: normalized,
49
+ password: passwordHash,
50
+ });
51
+ return { id: String(user._id) };
52
+ }
53
+ catch (err) {
54
+ if (err?.code === 11000)
55
+ throw new HttpError(409, 'Email already registered');
56
+ throw err;
57
+ }
58
+ },
59
+ async verifyPassword(userId, password) {
60
+ const user = (await AuthUser.findById(userId)
61
+ .select('password')
62
+ .lean());
63
+ if (!user?.password)
64
+ return false;
65
+ return Bun.password.verify(password, user.password);
66
+ },
67
+ async getIdentifier(userId) {
68
+ const user = (await AuthUser.findById(userId)
69
+ .select('identifier email')
70
+ .lean());
71
+ return user?.identifier ?? user?.email ?? '';
72
+ },
73
+ async setPassword(userId, passwordHash) {
74
+ await AuthUser.findByIdAndUpdate(userId, { password: passwordHash });
75
+ },
76
+ async findOrCreateByProvider(provider, providerId, profile) {
77
+ const key = `${provider}:${providerId}`;
78
+ let user = await AuthUser.findOne({ providerIds: key });
79
+ if (user)
80
+ return { id: String(user._id), created: false };
81
+ if (profile.email) {
82
+ const existing = await AuthUser.findOne({ email: profile.email });
83
+ if (existing)
84
+ throw new HttpError(409, 'An account with this email already exists. Sign in with your credentials, then link Google from your account settings.');
85
+ }
86
+ const normalizedEmail = profile.email ? profile.email.toLowerCase() : undefined;
87
+ user = await AuthUser.create({
88
+ email: normalizedEmail,
89
+ identifier: normalizedEmail,
90
+ providerIds: [key],
91
+ });
92
+ return { id: String(user._id), created: true };
93
+ },
94
+ async linkProvider(userId, provider, providerId) {
95
+ const key = `${provider}:${providerId}`;
96
+ const user = await AuthUser.findById(userId);
97
+ if (!user)
98
+ throw new HttpError(404, 'User not found');
99
+ if (!user.providerIds.includes(key)) {
100
+ user.providerIds = [...user.providerIds, key];
101
+ await user.save();
102
+ }
103
+ },
104
+ async getRoles(userId) {
105
+ const user = await AuthUser.findById(userId, 'roles').lean();
106
+ return user?.roles ?? [];
107
+ },
108
+ async setRoles(userId, roles) {
109
+ await AuthUser.findByIdAndUpdate(userId, { roles });
110
+ },
111
+ async addRole(userId, role) {
112
+ await AuthUser.findByIdAndUpdate(userId, { $addToSet: { roles: role } });
113
+ },
114
+ async removeRole(userId, role) {
115
+ await AuthUser.findByIdAndUpdate(userId, { $pull: { roles: role } });
116
+ },
117
+ async getUser(userId) {
118
+ const user = (await AuthUser.findById(userId, 'email providerIds emailVerified displayName firstName lastName externalId suspended suspendedReason userMetadata appMetadata').lean());
119
+ if (!user)
120
+ return null;
121
+ return {
122
+ email: user.email,
123
+ providerIds: user.providerIds,
124
+ emailVerified: user.emailVerified ?? false,
125
+ displayName: user.displayName,
126
+ firstName: user.firstName,
127
+ lastName: user.lastName,
128
+ externalId: user.externalId,
129
+ suspended: user.suspended ?? false,
130
+ suspendedReason: user.suspendedReason,
131
+ userMetadata: user.userMetadata,
132
+ appMetadata: user.appMetadata,
133
+ };
134
+ },
135
+ async unlinkProvider(userId, provider) {
136
+ const user = await AuthUser.findById(userId);
137
+ if (!user)
138
+ throw new HttpError(404, 'User not found');
139
+ user.providerIds = user.providerIds.filter(id => !id.startsWith(`${provider}:`));
140
+ await user.save();
141
+ },
142
+ async findByIdentifier(identifier) {
143
+ const normalized = identifier.toLowerCase();
144
+ const user = await AuthUser.findOne({
145
+ $or: [{ identifier: normalized }, { email: normalized }],
146
+ })
147
+ .select('_id password')
148
+ .lean();
149
+ if (!user)
150
+ return null;
151
+ return { id: String(user._id), passwordHash: user.password ?? '' };
152
+ },
153
+ async setEmailVerified(userId, verified) {
154
+ await AuthUser.findByIdAndUpdate(userId, { emailVerified: verified });
155
+ },
156
+ async getEmailVerified(userId) {
157
+ const user = await AuthUser.findById(userId, 'emailVerified').lean();
158
+ return user?.emailVerified ?? false;
159
+ },
160
+ async deleteUser(userId) {
161
+ await AuthUser.findByIdAndDelete(userId);
162
+ await TenantRole.deleteMany({ userId });
163
+ await GroupMembership.deleteMany({ userId });
164
+ },
165
+ async hasPassword(userId) {
166
+ const user = await AuthUser.findById(userId, 'password').lean();
167
+ return !!user?.password;
168
+ },
169
+ async setMfaSecret(userId, secret) {
170
+ await AuthUser.findByIdAndUpdate(userId, { mfaSecret: secret });
171
+ },
172
+ async getMfaSecret(userId) {
173
+ const user = await AuthUser.findById(userId, 'mfaSecret').lean();
174
+ return user?.mfaSecret ?? null;
175
+ },
176
+ async isMfaEnabled(userId) {
177
+ const user = await AuthUser.findById(userId, 'mfaEnabled').lean();
178
+ return user?.mfaEnabled ?? false;
179
+ },
180
+ async setMfaEnabled(userId, enabled) {
181
+ await AuthUser.findByIdAndUpdate(userId, { mfaEnabled: enabled });
182
+ },
183
+ async setRecoveryCodes(userId, codes) {
184
+ await AuthUser.findByIdAndUpdate(userId, { recoveryCodes: codes });
185
+ },
186
+ async getRecoveryCodes(userId) {
187
+ const user = await AuthUser.findById(userId, 'recoveryCodes').lean();
188
+ return user?.recoveryCodes ?? [];
189
+ },
190
+ async removeRecoveryCode(userId, code) {
191
+ await AuthUser.findByIdAndUpdate(userId, { $pull: { recoveryCodes: code } });
192
+ },
193
+ async consumeRecoveryCode(userId, hashedCode) {
194
+ const result = await AuthUser.findOneAndUpdate({ _id: userId, recoveryCodes: hashedCode }, { $pull: { recoveryCodes: hashedCode } }, { new: false }).lean();
195
+ return result !== null;
196
+ },
197
+ async getMfaMethods(userId) {
198
+ const user = (await AuthUser.findById(userId, 'mfaMethods mfaEnabled').lean());
199
+ if (!user)
200
+ return [];
201
+ if (user.mfaMethods && user.mfaMethods.length > 0)
202
+ return user.mfaMethods;
203
+ if (user.mfaEnabled)
204
+ return ['totp'];
205
+ return [];
206
+ },
207
+ async setMfaMethods(userId, methods) {
208
+ await AuthUser.findByIdAndUpdate(userId, { mfaMethods: methods });
209
+ },
210
+ async getWebAuthnCredentials(userId) {
211
+ const user = (await AuthUser.findById(userId, 'webauthnCredentials').lean());
212
+ const creds = user?.webauthnCredentials ?? [];
213
+ return creds.map(c => ({
214
+ credentialId: c.credentialId,
215
+ publicKey: c.publicKey,
216
+ signCount: c.signCount,
217
+ transports: c.transports,
218
+ name: c.name,
219
+ createdAt: c.createdAt instanceof Date ? c.createdAt.getTime() : c.createdAt,
220
+ }));
221
+ },
222
+ async addWebAuthnCredential(userId, credential) {
223
+ await AuthUser.findByIdAndUpdate(userId, {
224
+ $push: {
225
+ webauthnCredentials: {
226
+ credentialId: credential.credentialId,
227
+ publicKey: credential.publicKey,
228
+ signCount: credential.signCount,
229
+ transports: credential.transports,
230
+ name: credential.name,
231
+ createdAt: new Date(credential.createdAt),
232
+ },
233
+ },
234
+ });
235
+ },
236
+ async removeWebAuthnCredential(userId, credentialId) {
237
+ await AuthUser.findByIdAndUpdate(userId, {
238
+ $pull: { webauthnCredentials: { credentialId } },
239
+ });
240
+ },
241
+ async updateWebAuthnCredentialSignCount(userId, credentialId, signCount) {
242
+ await AuthUser.findOneAndUpdate({ _id: userId, 'webauthnCredentials.credentialId': credentialId }, { $set: { 'webauthnCredentials.$.signCount': signCount } });
243
+ },
244
+ async findUserByWebAuthnCredentialId(credentialId) {
245
+ const user = await AuthUser.findOne({ 'webauthnCredentials.credentialId': credentialId }, '_id').lean();
246
+ return user ? String(user._id) : null;
247
+ },
248
+ async getTenantRoles(userId, tenantId) {
249
+ const doc = await TenantRole.findOne({ userId, tenantId }, 'roles').lean();
250
+ return doc?.roles ?? [];
251
+ },
252
+ async setTenantRoles(userId, tenantId, roles) {
253
+ await TenantRole.findOneAndUpdate({ userId, tenantId }, { $set: { roles } }, { upsert: true });
254
+ },
255
+ async addTenantRole(userId, tenantId, role) {
256
+ await TenantRole.findOneAndUpdate({ userId, tenantId }, { $addToSet: { roles: role } }, { upsert: true });
257
+ },
258
+ async removeTenantRole(userId, tenantId, role) {
259
+ await TenantRole.findOneAndUpdate({ userId, tenantId }, { $pull: { roles: role } });
260
+ },
261
+ async setSuspended(userId, suspended, reason) {
262
+ const update = { suspended };
263
+ if (suspended) {
264
+ update.suspendedAt = new Date();
265
+ update.suspendedReason = reason ?? null;
266
+ }
267
+ else {
268
+ update.suspendedAt = null;
269
+ update.suspendedReason = null;
270
+ }
271
+ await AuthUser.updateOne({ _id: userId }, { $set: update });
272
+ },
273
+ async getSuspended(userId) {
274
+ const user = (await AuthUser.findById(userId, {
275
+ suspended: 1,
276
+ suspendedReason: 1,
277
+ }).lean());
278
+ if (!user)
279
+ return null;
280
+ return {
281
+ suspended: user.suspended ?? false,
282
+ suspendedReason: user.suspendedReason ?? undefined,
283
+ };
284
+ },
285
+ async updateProfile(userId, fields) {
286
+ await AuthUser.updateOne({ _id: userId }, { $set: fields });
287
+ },
288
+ async getUserMetadata(userId) {
289
+ const user = (await AuthUser.findById(userId, 'userMetadata appMetadata').lean());
290
+ if (!user)
291
+ return {};
292
+ return {
293
+ userMetadata: user.userMetadata,
294
+ appMetadata: user.appMetadata,
295
+ };
296
+ },
297
+ async setUserMetadata(userId, data) {
298
+ await AuthUser.updateOne({ _id: userId }, { $set: { userMetadata: data } });
299
+ },
300
+ async setAppMetadata(userId, data) {
301
+ await AuthUser.updateOne({ _id: userId }, { $set: { appMetadata: data } });
302
+ },
303
+ async listUsers(query) {
304
+ const filter = {};
305
+ if (query.email !== undefined)
306
+ filter.email = query.email;
307
+ if (query.externalId !== undefined)
308
+ filter.externalId = query.externalId;
309
+ if (query.suspended !== undefined)
310
+ filter.suspended = query.suspended;
311
+ const startIndex = query.startIndex ?? 0;
312
+ const count = query.count ?? 100;
313
+ const [users, totalResults] = await Promise.all([
314
+ AuthUser.find(filter, {
315
+ _id: 1,
316
+ email: 1,
317
+ displayName: 1,
318
+ firstName: 1,
319
+ lastName: 1,
320
+ externalId: 1,
321
+ suspended: 1,
322
+ suspendedAt: 1,
323
+ suspendedReason: 1,
324
+ emailVerified: 1,
325
+ providerIds: 1,
326
+ })
327
+ .skip(startIndex)
328
+ .limit(count)
329
+ .lean(),
330
+ AuthUser.countDocuments(filter),
331
+ ]);
332
+ return {
333
+ users: users.map(u => ({
334
+ id: String(u._id),
335
+ email: u.email ?? undefined,
336
+ displayName: u.displayName ?? undefined,
337
+ firstName: u.firstName ?? undefined,
338
+ lastName: u.lastName ?? undefined,
339
+ externalId: u.externalId ?? undefined,
340
+ suspended: u.suspended ?? false,
341
+ suspendedAt: u.suspendedAt ?? undefined,
342
+ suspendedReason: u.suspendedReason ?? undefined,
343
+ emailVerified: u.emailVerified ?? undefined,
344
+ providerIds: u.providerIds ?? undefined,
345
+ })),
346
+ totalResults,
347
+ };
348
+ },
349
+ // ---------------------------------------------------------------------------
350
+ // Groups
351
+ // ---------------------------------------------------------------------------
352
+ async createGroup(group) {
353
+ try {
354
+ const doc = await Group.create(group);
355
+ return { id: String(doc._id) };
356
+ }
357
+ catch (err) {
358
+ if (err?.code === 11000)
359
+ throw new HttpError(409, 'A group with this name already exists in this scope');
360
+ throw err;
361
+ }
362
+ },
363
+ async deleteGroup(groupId) {
364
+ await Group.findByIdAndDelete(groupId);
365
+ await GroupMembership.deleteMany({ groupId });
366
+ },
367
+ async getGroup(groupId) {
368
+ const doc = (await Group.findById(groupId).lean());
369
+ if (!doc)
370
+ return null;
371
+ return mongoGroupToRecord(doc);
372
+ },
373
+ async listGroups(tenantId, opts) {
374
+ const limit = Math.min(opts?.limit ?? 50, 200);
375
+ const filter = { tenantId: tenantId ?? null };
376
+ if (opts?.cursor) {
377
+ const c = decodeMongoCursor(opts.cursor);
378
+ if (c) {
379
+ filter.$or = [
380
+ { createdAt: { $gt: new Date(c.createdAt) } },
381
+ { createdAt: new Date(c.createdAt), _id: { $gt: c.id } },
382
+ ];
383
+ }
384
+ }
385
+ const docs = (await Group.find(filter)
386
+ .sort({ createdAt: 1, _id: 1 })
387
+ .limit(limit + 1)
388
+ .lean());
389
+ const hasMore = docs.length > limit;
390
+ const page = hasMore ? docs.slice(0, limit) : docs;
391
+ const lastGroup = page[page.length - 1];
392
+ const lastTs = lastGroup?.createdAt;
393
+ const nextCursor = hasMore && lastGroup
394
+ ? encodeMongoCursor(lastTs instanceof Date ? lastTs.getTime() : lastTs, String(lastGroup._id))
395
+ : undefined;
396
+ return { items: page.map(mongoGroupToRecord), nextCursor };
397
+ },
398
+ async updateGroup(groupId, updates) {
399
+ await Group.findByIdAndUpdate(groupId, { $set: updates });
400
+ },
401
+ async addGroupMember(groupId, userId, roles = []) {
402
+ const group = (await Group.findById(groupId, 'tenantId').lean());
403
+ if (!group)
404
+ throw new HttpError(404, 'Group not found');
405
+ try {
406
+ await GroupMembership.create({ groupId, userId, roles, tenantId: group.tenantId ?? null });
407
+ }
408
+ catch (err) {
409
+ if (err?.code === 11000)
410
+ throw new HttpError(409, 'User is already a member of this group');
411
+ throw err;
412
+ }
413
+ },
414
+ async updateGroupMembership(groupId, userId, roles) {
415
+ await GroupMembership.findOneAndUpdate({ groupId, userId }, { $set: { roles } });
416
+ },
417
+ async removeGroupMember(groupId, userId) {
418
+ await GroupMembership.deleteOne({ groupId, userId });
419
+ },
420
+ async getGroupMembers(groupId, opts) {
421
+ const limit = Math.min(opts?.limit ?? 50, 200);
422
+ const filter = { groupId };
423
+ if (opts?.cursor) {
424
+ const c = decodeMongoCursor(opts.cursor);
425
+ if (c) {
426
+ filter.$or = [
427
+ { createdAt: { $gt: new Date(c.createdAt) } },
428
+ { createdAt: new Date(c.createdAt), _id: { $gt: c.id } },
429
+ ];
430
+ }
431
+ }
432
+ const docs = (await GroupMembership.find(filter, 'userId roles createdAt')
433
+ .sort({ createdAt: 1, _id: 1 })
434
+ .limit(limit + 1)
435
+ .lean());
436
+ const hasMore = docs.length > limit;
437
+ const page = hasMore ? docs.slice(0, limit) : docs;
438
+ const last = page[page.length - 1];
439
+ const nextCursor = hasMore && last?.createdAt
440
+ ? encodeMongoCursor(last.createdAt.getTime(), String(last._id))
441
+ : undefined;
442
+ return {
443
+ items: page.map(d => ({ userId: d.userId, roles: d.roles ?? [] })),
444
+ nextCursor,
445
+ };
446
+ },
447
+ async getUserGroups(userId, tenantId) {
448
+ const memberships = (await GroupMembership.find({ userId, tenantId: tenantId ?? null }, 'groupId roles').lean());
449
+ if (memberships.length === 0)
450
+ return [];
451
+ const groupIds = memberships.map(m => m.groupId);
452
+ const groups = (await Group.find({
453
+ _id: { $in: groupIds },
454
+ }).lean());
455
+ const groupMap = new Map(groups.map(g => [String(g._id), g]));
456
+ return memberships
457
+ .map((m) => ({
458
+ group: mongoGroupToRecord(groupMap.get(m.groupId)),
459
+ membershipRoles: m.roles ?? [],
460
+ }))
461
+ .filter(r => r.group);
462
+ },
463
+ async getEffectiveRoles(userId, tenantId) {
464
+ let direct = [];
465
+ if (tenantId) {
466
+ const doc = await TenantRole.findOne({ userId, tenantId }, 'roles').lean();
467
+ direct = doc?.roles ?? [];
468
+ }
469
+ else {
470
+ const user = await AuthUser.findById(userId, 'roles').lean();
471
+ direct = user?.roles ?? [];
472
+ }
473
+ const memberships = (await GroupMembership.find({ userId, tenantId: tenantId ?? null }, 'groupId roles').lean());
474
+ if (memberships.length === 0)
475
+ return [...new Set(direct)];
476
+ const groupIds = memberships.map(m => m.groupId);
477
+ const groups = (await Group.find({ _id: { $in: groupIds } }, 'roles').lean());
478
+ const groupMap = new Map(groups.map(g => [String(g._id), g.roles ?? []]));
479
+ const groupRoles = memberships.flatMap(m => [
480
+ ...(groupMap.get(m.groupId) ?? []),
481
+ ...(m.roles ?? []),
482
+ ]);
483
+ return [...new Set([...direct, ...groupRoles])];
484
+ },
485
+ // ---------------------------------------------------------------------------
486
+ // Password history
487
+ // ---------------------------------------------------------------------------
488
+ async getPasswordHistory(userId) {
489
+ const user = (await AuthUser.findById(userId, 'passwordHistory').lean());
490
+ return user?.passwordHistory ?? [];
491
+ },
492
+ async addPasswordToHistory(userId, hash, maxCount) {
493
+ await AuthUser.findByIdAndUpdate(userId, {
494
+ $push: {
495
+ passwordHistory: {
496
+ $each: [hash],
497
+ $slice: -maxCount,
498
+ },
499
+ },
500
+ });
501
+ },
502
+ // ---------------------------------------------------------------------------
503
+ // M2M client credentials
504
+ // ---------------------------------------------------------------------------
505
+ async getM2MClient(clientId) {
506
+ const client = await M2MClient.findOne({ clientId, active: true }).lean();
507
+ if (!client)
508
+ return null;
509
+ return {
510
+ id: String(client._id),
511
+ clientId: client.clientId,
512
+ name: client.name,
513
+ scopes: client.scopes,
514
+ active: client.active,
515
+ clientSecretHash: client.clientSecretHash,
516
+ };
517
+ },
518
+ async createM2MClient(data) {
519
+ const client = await M2MClient.create(data);
520
+ return { id: String(client._id) };
521
+ },
522
+ async deleteM2MClient(clientId) {
523
+ await M2MClient.deleteOne({ clientId });
524
+ },
525
+ async listM2MClients() {
526
+ const clients = (await M2MClient.find({}).lean());
527
+ return clients.map(c => ({
528
+ id: String(c._id),
529
+ clientId: c.clientId,
530
+ name: c.name,
531
+ scopes: c.scopes,
532
+ active: c.active,
533
+ }));
534
+ },
535
+ };
536
+ }
@@ -0,0 +1,88 @@
1
+ import type { AuthAdapter } from '../lib/authAdapter';
2
+ import { Database } from 'bun:sqlite';
3
+ import type { AuthResolvedConfig } from '../config/authConfig';
4
+ import type { OAuthCodePayload } from '../types/oauthCode';
5
+ import type { OAuthReauthConfirmation, OAuthReauthState } from '../types/oauthReauth';
6
+ import type { SessionInfo, SessionMetadata } from '../types/session';
7
+ import type { RefreshResult } from '../types/session';
8
+ export interface SqliteAuthResult {
9
+ db: Database;
10
+ adapter: AuthAdapter;
11
+ cleanupInterval: ReturnType<typeof setInterval> | null;
12
+ atomicCreateSession: (userId: string, token: string, sessionId: string, maxSessions: number, getConfig: () => AuthResolvedConfig, metadata?: SessionMetadata) => void;
13
+ createSession: (userId: string, token: string, sessionId: string, getConfig: () => AuthResolvedConfig, metadata?: SessionMetadata) => void;
14
+ getSession: (sessionId: string) => string | null;
15
+ getSessionRecord: (sessionId: string) => {
16
+ token: string;
17
+ lastActiveAt: number;
18
+ } | null;
19
+ deleteSession: (sessionId: string, getConfig: () => AuthResolvedConfig) => void;
20
+ getUserSessions: (userId: string, getConfig: () => AuthResolvedConfig) => SessionInfo[];
21
+ getActiveSessionCount: (userId: string) => number;
22
+ evictOldestSession: (userId: string, getConfig: () => AuthResolvedConfig) => void;
23
+ updateSessionLastActive: (sessionId: string) => void;
24
+ setRefreshToken: (sessionId: string, refreshToken: string) => void;
25
+ getSessionByRefreshToken: (refreshToken: string, getConfig: () => AuthResolvedConfig) => RefreshResult | null;
26
+ rotateRefreshToken: (sessionId: string, newRefreshToken: string, newAccessToken: string, getConfig: () => AuthResolvedConfig) => void;
27
+ getSessionFingerprint: (sessionId: string) => string | null;
28
+ setSessionFingerprint: (sessionId: string, fingerprint: string) => void;
29
+ getMfaVerifiedAt: (sessionId: string) => number | null;
30
+ setMfaVerifiedAt: (sessionId: string, ts: number) => void;
31
+ storeOAuthState: (state: string, codeVerifier?: string, linkUserId?: string) => void;
32
+ consumeOAuthState: (state: string) => {
33
+ codeVerifier?: string;
34
+ linkUserId?: string;
35
+ } | null;
36
+ getCache: (key: string) => string | null;
37
+ setCache: (key: string, value: string, ttlSeconds?: number) => void;
38
+ delCache: (key: string) => void;
39
+ delCachePattern: (pattern: string) => void;
40
+ createVerificationToken: (token: string, userId: string, email: string, ttlSeconds: number) => void;
41
+ getVerificationToken: (token: string) => {
42
+ userId: string;
43
+ email: string;
44
+ } | null;
45
+ deleteVerificationToken: (token: string) => void;
46
+ consumeVerificationToken: (token: string) => {
47
+ userId: string;
48
+ email: string;
49
+ } | null;
50
+ createResetToken: (token: string, userId: string, email: string, ttlSeconds: number) => void;
51
+ consumeResetToken: (hash: string) => {
52
+ userId: string;
53
+ email: string;
54
+ } | null;
55
+ createDeletionCancelToken: (token: string, userId: string, jobId: string, ttlSeconds: number) => void;
56
+ consumeDeletionCancelToken: (hash: string) => {
57
+ userId: string;
58
+ jobId: string;
59
+ } | null;
60
+ storeOAuthCode: (hash: string, payload: OAuthCodePayload, ttlSeconds: number) => void;
61
+ consumeOAuthCode: (hash: string) => OAuthCodePayload | null;
62
+ storeOAuthReauth: (hash: string, data: OAuthReauthState, ttlSeconds: number) => void;
63
+ consumeOAuthReauth: (hash: string) => OAuthReauthState | null;
64
+ storeOAuthReauthConfirmation: (hash: string, data: OAuthReauthConfirmation, ttlSeconds: number) => void;
65
+ consumeOAuthReauthConfirmation: (hash: string) => OAuthReauthConfirmation | null;
66
+ registerUpload: (record: {
67
+ key: string;
68
+ ownerUserId?: string;
69
+ tenantId?: string;
70
+ mimeType?: string;
71
+ bucket?: string;
72
+ createdAt: number;
73
+ }) => void;
74
+ getUploadRecord: (key: string) => {
75
+ key: string;
76
+ ownerUserId?: string;
77
+ tenantId?: string;
78
+ mimeType?: string;
79
+ bucket?: string;
80
+ createdAt: number;
81
+ } | null;
82
+ deleteUploadRecord: (key: string) => boolean;
83
+ createMagicLinkToken: (token: string, userId: string, ttlSeconds: number) => void;
84
+ consumeMagicLinkToken: (hash: string) => string | null;
85
+ startCleanup: (getConfig: () => AuthResolvedConfig, intervalMs?: number) => ReturnType<typeof setInterval>;
86
+ stopCleanup: () => void;
87
+ }
88
+ export declare function createSqliteAuthAdapter(path: string): SqliteAuthResult;