@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
@@ -1,5 +1,6 @@
1
- import { getAuthAdapter } from "../lib/authAdapter";
2
- const EXEMPT_PREFIXES = ["/auth/", "/health", "/docs", "/openapi.json"];
1
+ import { HttpError } from '../../../bunshot-core/src/index.js';
2
+ import { getAuthRuntimeFromRequest } from '../runtime';
3
+ const EXEMPT_PREFIXES = ['/auth/', '/health', '/docs', '/openapi.json'];
3
4
  /**
4
5
  * Middleware that blocks authenticated users who have not completed MFA setup.
5
6
  *
@@ -14,23 +15,25 @@ const EXEMPT_PREFIXES = ["/auth/", "/health", "/docs", "/openapi.json"];
14
15
  * Unauthenticated requests pass through — use `userAuth` to block those.
15
16
  */
16
17
  export const requireMfaSetup = async (c, next) => {
17
- const path = c.req.path;
18
+ const rawPath = c.req.path;
19
+ // Strip version prefix if present (e.g., /v1/auth/... → /auth/...)
20
+ const path = rawPath.replace(/^\/v\d+/, '');
18
21
  // Exempt paths — auth routes (including MFA setup), health, docs, root
19
- if (path === "/" || EXEMPT_PREFIXES.some((p) => path.startsWith(p))) {
22
+ if (path === '/' || EXEMPT_PREFIXES.some(p => path.startsWith(p))) {
20
23
  return next();
21
24
  }
22
25
  // Only applies to authenticated users — unauthenticated requests pass through
23
- const userId = c.get("authUserId");
26
+ const userId = c.get('authUserId');
24
27
  if (!userId) {
25
28
  return next();
26
29
  }
27
- const adapter = getAuthAdapter();
30
+ const adapter = getAuthRuntimeFromRequest(c).adapter;
28
31
  if (!adapter.isMfaEnabled) {
29
32
  return next();
30
33
  }
31
34
  const enabled = await adapter.isMfaEnabled(userId);
32
35
  if (!enabled) {
33
- return c.json({ error: "MFA setup required", code: "MFA_SETUP_REQUIRED" }, 403);
36
+ throw new HttpError(403, 'MFA setup required', 'MFA_SETUP_REQUIRED');
34
37
  }
35
38
  return next();
36
39
  };
@@ -1,5 +1,5 @@
1
- import type { MiddlewareHandler } from "hono";
2
- import type { AppEnv } from "../lib/context";
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { AppEnv } from '../../../bunshot-core/src/index.js';
3
3
  /**
4
4
  * Middleware factory that enforces role-based access.
5
5
  * Requires `identify` to have run first (authUserId must be set).
@@ -1,4 +1,6 @@
1
- import { getEffectiveRoles } from "../lib/groups";
1
+ import { getEffectiveRoles } from '../lib/groups';
2
+ import { isProd } from '../lib/env';
3
+ import { getAuthRuntimeFromRequest } from '../runtime';
2
4
  /**
3
5
  * Middleware factory that enforces role-based access.
4
6
  * Requires `identify` to have run first (authUserId must be set).
@@ -17,15 +19,16 @@ import { getEffectiveRoles } from "../lib/groups";
17
19
  * app.get("/mod", userAuth, requireRole("admin", "moderator"), handler)
18
20
  */
19
21
  export const requireRole = Object.assign((...roles) => async (c, next) => {
20
- const userId = c.get("authUserId");
22
+ const userId = c.get('authUserId');
21
23
  if (!userId) {
22
- return c.json({ error: "Unauthorized" }, 401);
24
+ return c.json({ error: 'Unauthorized' }, 401);
23
25
  }
24
- const tenantId = c.get("tenantId") ?? null;
25
- const effective = await getEffectiveRoles(userId, tenantId);
26
- c.set("roles", effective);
27
- if (!roles.some((r) => effective.includes(r))) {
28
- return c.json({ error: "Forbidden" }, 403);
26
+ const runtime = getAuthRuntimeFromRequest(c);
27
+ const tenantId = c.get('tenantId') ?? null;
28
+ const effective = await getEffectiveRoles(runtime.adapter, userId, tenantId);
29
+ c.set('roles', effective);
30
+ if (!roles.some(r => effective.includes(r))) {
31
+ return c.json({ error: 'Forbidden' }, 403);
29
32
  }
30
33
  await next();
31
34
  }, {
@@ -42,21 +45,22 @@ export const requireRole = Object.assign((...roles) => async (c, next) => {
42
45
  * app.get("/super-admin", userAuth, requireRole.global("superadmin"), handler)
43
46
  */
44
47
  global: (...roles) => async (c, next) => {
45
- const userId = c.get("authUserId");
48
+ const userId = c.get('authUserId');
46
49
  if (!userId) {
47
- return c.json({ error: "Unauthorized" }, 401);
50
+ return c.json({ error: 'Unauthorized' }, 401);
48
51
  }
52
+ const runtime = getAuthRuntimeFromRequest(c);
49
53
  // In development, log when tenant context is present but intentionally ignored.
50
54
  // console.info is used deliberately: console.debug is suppressed by default in most
51
55
  // runtimes, so info gives reliably visible output during development without being
52
56
  // noisy in production (this branch never executes there).
53
- if (process.env.NODE_ENV !== "production" && c.get("tenantId")) {
54
- console.info("[requireRole.global] tenant context present but intentionally ignored — checking app-wide roles only");
57
+ if (!isProd() && c.get('tenantId')) {
58
+ console.info('[requireRole.global] tenant context present but intentionally ignored — checking app-wide roles only');
55
59
  }
56
- const effective = await getEffectiveRoles(userId, null);
57
- c.set("roles", effective);
58
- if (!roles.some((r) => effective.includes(r))) {
59
- return c.json({ error: "Forbidden" }, 403);
60
+ const effective = await getEffectiveRoles(runtime.adapter, userId, null);
61
+ c.set('roles', effective);
62
+ if (!roles.some(r => effective.includes(r))) {
63
+ return c.json({ error: 'Forbidden' }, 403);
60
64
  }
61
65
  await next();
62
66
  },
@@ -0,0 +1,10 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { AppEnv } from '../../../bunshot-core/src/index.js';
3
+ /**
4
+ * Middleware that requires the JWT to contain all specified scopes.
5
+ * Reads scope from `tokenPayload.scope` (set by identify middleware).
6
+ *
7
+ * @example
8
+ * router.get("/data", requireScope("read:data"), handler);
9
+ */
10
+ export declare const requireScope: (...requiredScopes: string[]) => MiddlewareHandler<AppEnv>;
@@ -0,0 +1,25 @@
1
+ import { HttpError } from '../../../bunshot-core/src/index.js';
2
+ /**
3
+ * Middleware that requires the JWT to contain all specified scopes.
4
+ * Reads scope from `tokenPayload.scope` (set by identify middleware).
5
+ *
6
+ * @example
7
+ * router.get("/data", requireScope("read:data"), handler);
8
+ */
9
+ export const requireScope = (...requiredScopes) => async (c, next) => {
10
+ const payload = c.get('tokenPayload');
11
+ if (!payload) {
12
+ throw new HttpError(401, 'Authentication required');
13
+ }
14
+ const scope = payload.scope;
15
+ if (!scope) {
16
+ throw new HttpError(403, 'Insufficient scope', 'INSUFFICIENT_SCOPE');
17
+ }
18
+ const grantedScopes = scope.split(' ');
19
+ for (const required of requiredScopes) {
20
+ if (!grantedScopes.includes(required)) {
21
+ throw new HttpError(403, 'Insufficient scope', 'INSUFFICIENT_SCOPE');
22
+ }
23
+ }
24
+ await next();
25
+ };
@@ -0,0 +1,18 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { AppEnv } from '../../../bunshot-core/src/index.js';
3
+ export interface StepUpOptions {
4
+ /** Max age in seconds since last MFA verification. Default: 300 (5 min). */
5
+ maxAge?: number;
6
+ }
7
+ /**
8
+ * Middleware that requires the user to have recently completed step-up MFA.
9
+ *
10
+ * Attach to sensitive routes that require fresh MFA verification:
11
+ * ```
12
+ * router.post("/transfer", userAuth, requireStepUp(), transferHandler);
13
+ * ```
14
+ *
15
+ * The user completes step-up via POST /auth/step-up.
16
+ * After successful step-up, mfaVerifiedAt is stored in their session.
17
+ */
18
+ export declare const requireStepUp: (opts?: StepUpOptions) => MiddlewareHandler<AppEnv>;
@@ -0,0 +1,30 @@
1
+ import { HttpError } from '../../../bunshot-core/src/index.js';
2
+ import { getAuthRuntimeFromRequest } from '../runtime';
3
+ /**
4
+ * Middleware that requires the user to have recently completed step-up MFA.
5
+ *
6
+ * Attach to sensitive routes that require fresh MFA verification:
7
+ * ```
8
+ * router.post("/transfer", userAuth, requireStepUp(), transferHandler);
9
+ * ```
10
+ *
11
+ * The user completes step-up via POST /auth/step-up.
12
+ * After successful step-up, mfaVerifiedAt is stored in their session.
13
+ */
14
+ export const requireStepUp = (opts) => async (c, next) => {
15
+ const sessionId = c.get('sessionId');
16
+ if (!sessionId) {
17
+ throw new HttpError(401, 'Authentication required');
18
+ }
19
+ const maxAge = opts?.maxAge ?? 300;
20
+ const runtime = getAuthRuntimeFromRequest(c);
21
+ const verifiedAt = await runtime.repos.session.getMfaVerifiedAt(sessionId);
22
+ if (verifiedAt === null) {
23
+ throw new HttpError(403, 'Step-up authentication required', 'STEP_UP_REQUIRED');
24
+ }
25
+ const now = Math.floor(Date.now() / 1000);
26
+ if (now - verifiedAt > maxAge) {
27
+ throw new HttpError(403, 'Step-up authentication expired', 'STEP_UP_REQUIRED');
28
+ }
29
+ await next();
30
+ };
@@ -1,5 +1,5 @@
1
- import type { MiddlewareHandler } from "hono";
2
- import type { AppEnv } from "../lib/context";
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { AppEnv } from '../../../bunshot-core/src/index.js';
3
3
  /**
4
4
  * Middleware that blocks access for users whose email address has not been verified.
5
5
  * Must run after `userAuth` (requires `authUserId` to be set on context).
@@ -1,4 +1,5 @@
1
- import { getAuthAdapter } from "../lib/authAdapter";
1
+ import { HttpError } from '../../../bunshot-core/src/index.js';
2
+ import { getAuthRuntimeFromRequest } from '../runtime';
2
3
  /**
3
4
  * Middleware that blocks access for users whose email address has not been verified.
4
5
  * Must run after `userAuth` (requires `authUserId` to be set on context).
@@ -9,17 +10,17 @@ import { getAuthAdapter } from "../lib/authAdapter";
9
10
  * router.use("/dashboard", userAuth, requireVerifiedEmail);
10
11
  */
11
12
  export const requireVerifiedEmail = async (c, next) => {
12
- const userId = c.get("authUserId");
13
+ const userId = c.get('authUserId');
13
14
  if (!userId) {
14
- return c.json({ error: "Unauthorized" }, 401);
15
+ return c.json({ error: 'Unauthorized' }, 401);
15
16
  }
16
- const adapter = getAuthAdapter();
17
+ const adapter = getAuthRuntimeFromRequest(c).adapter;
17
18
  if (!adapter.getEmailVerified) {
18
- throw new Error("requireVerifiedEmail used but auth adapter does not implement getEmailVerified");
19
+ throw new HttpError(500, 'Internal server error');
19
20
  }
20
21
  const verified = await adapter.getEmailVerified(userId);
21
22
  if (!verified) {
22
- return c.json({ error: "Email not verified" }, 403);
23
+ return c.json({ error: 'Email not verified' }, 403);
23
24
  }
24
25
  await next();
25
26
  };
@@ -0,0 +1,8 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { AppEnv } from '../../../bunshot-core/src/index.js';
3
+ import type { AuthRuntimeContext } from '../runtime';
4
+ /**
5
+ * Middleware that validates SCIM bearer tokens.
6
+ * Tokens are checked with timingSafeEqual to prevent timing attacks.
7
+ */
8
+ export declare const createScimAuth: (runtime: AuthRuntimeContext) => MiddlewareHandler<AppEnv>;
@@ -0,0 +1,29 @@
1
+ import { HttpError, timingSafeEqual } from '../../../bunshot-core/src/index.js';
2
+ /**
3
+ * Middleware that validates SCIM bearer tokens.
4
+ * Tokens are checked with timingSafeEqual to prevent timing attacks.
5
+ */
6
+ export const createScimAuth = (runtime) => async (c, next) => {
7
+ const tokens = runtime.config.scim?.bearerTokens;
8
+ const configuredTokens = (Array.isArray(tokens) ? tokens : tokens ? [tokens] : []).filter(token => token.length > 0);
9
+ if (configuredTokens.length === 0) {
10
+ throw new Error('[bunshot-auth] SCIM auth middleware mounted without configured bearer tokens');
11
+ }
12
+ const authHeader = c.req.header('authorization') ?? '';
13
+ if (!authHeader.startsWith('Bearer ')) {
14
+ throw new HttpError(401, 'SCIM bearer token required');
15
+ }
16
+ const provided = authHeader.slice(7);
17
+ const valid = configuredTokens.some(token => {
18
+ try {
19
+ return timingSafeEqual(provided, token);
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ });
25
+ if (!valid) {
26
+ throw new HttpError(401, 'Invalid SCIM token');
27
+ }
28
+ await next();
29
+ };
@@ -0,0 +1,3 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { AppEnv } from '../../../bunshot-core/src/index.js';
3
+ export declare const userAuth: MiddlewareHandler<AppEnv>;
@@ -0,0 +1,6 @@
1
+ export const userAuth = async (c, next) => {
2
+ if (!c.get('authUserId')) {
3
+ return c.json({ error: 'Unauthorized' }, 401);
4
+ }
5
+ await next();
6
+ };
@@ -1,6 +1,8 @@
1
- import type { Document, Model } from "mongoose";
1
+ import type { Connection, Document, Model, Mongoose } from 'mongoose';
2
2
  interface IAuthUser {
3
3
  email?: string | null;
4
+ /** Primary login identifier — equals email when primaryField="email", username or phone otherwise. */
5
+ identifier?: string | null;
4
6
  password?: string | null;
5
7
  /** Compound provider keys: ["google:123456", "apple:000111"] */
6
8
  providerIds: string[];
@@ -25,13 +27,22 @@ interface IAuthUser {
25
27
  name?: string;
26
28
  createdAt: Date;
27
29
  }>;
30
+ displayName?: string;
31
+ firstName?: string;
32
+ lastName?: string;
33
+ externalId?: string;
34
+ suspended: boolean;
35
+ suspendedAt?: Date;
36
+ suspendedReason?: string;
37
+ /** Previous bcrypt password hashes for reuse prevention. Oldest-first; max length = preventReuse config. */
38
+ passwordHistory?: string[];
39
+ userMetadata?: Record<string, unknown>;
40
+ appMetadata?: Record<string, unknown>;
28
41
  }
29
42
  type AuthUserDocument = IAuthUser & Document;
30
- export declare const AuthUser: Model<AuthUserDocument, {}, {}, {}, Document<unknown, {}, AuthUserDocument, {}, import("mongoose").DefaultSchemaOptions> & IAuthUser & Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> & Required<{
31
- _id: import("mongoose").Types.ObjectId;
32
- }> & {
33
- __v: number;
34
- } & {
35
- id: string;
36
- }, any, AuthUserDocument>;
43
+ /**
44
+ * Create (or retrieve cached) AuthUser model on the given connection.
45
+ * Model caching is handled by Mongoose's connection.models registry.
46
+ */
47
+ export declare function createAuthUserModel(conn: Connection, mongooseInstance: Mongoose): Model<AuthUserDocument>;
37
48
  export {};
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Create (or retrieve cached) AuthUser model on the given connection.
3
+ * Model caching is handled by Mongoose's connection.models registry.
4
+ */
5
+ export function createAuthUserModel(conn, mongooseInstance) {
6
+ if (conn.models['AuthUser'])
7
+ return conn.models['AuthUser'];
8
+ const { Schema } = mongooseInstance;
9
+ const schema = new Schema({
10
+ email: { type: String, unique: true, sparse: true, lowercase: true },
11
+ /** Primary login identifier — equals email when primaryField="email", username or phone otherwise. */
12
+ identifier: { type: String, unique: true, sparse: true, lowercase: true },
13
+ password: { type: String },
14
+ /** Compound provider keys: ["google:123456", "apple:000111"] */
15
+ providerIds: [{ type: String }],
16
+ /** App-defined roles assigned to this user: ["admin", "editor", ...] */
17
+ roles: [{ type: String }],
18
+ /** Whether the user's email address has been verified. */
19
+ emailVerified: { type: Boolean, default: false },
20
+ /** TOTP secret for MFA. */
21
+ mfaSecret: { type: String, default: null },
22
+ /** Whether MFA is enabled. */
23
+ mfaEnabled: { type: Boolean, default: false },
24
+ /** SHA-256 hashed recovery codes for MFA. */
25
+ recoveryCodes: [{ type: String }],
26
+ /** MFA methods enabled for this user. */
27
+ mfaMethods: [{ type: String }],
28
+ /** WebAuthn credentials (security keys / platform authenticators). */
29
+ webauthnCredentials: [
30
+ {
31
+ credentialId: { type: String, required: true },
32
+ publicKey: { type: String, required: true },
33
+ signCount: { type: Number, required: true, default: 0 },
34
+ transports: [{ type: String }],
35
+ name: { type: String },
36
+ createdAt: { type: Date, default: Date.now },
37
+ },
38
+ ],
39
+ displayName: { type: String, default: null },
40
+ firstName: { type: String, default: null },
41
+ lastName: { type: String, default: null },
42
+ externalId: { type: String, default: null, index: true, sparse: true },
43
+ suspended: { type: Boolean, default: false },
44
+ suspendedAt: { type: Date, default: null },
45
+ suspendedReason: { type: String, default: null },
46
+ /** Previous bcrypt password hashes for reuse prevention. */
47
+ passwordHistory: [{ type: String }],
48
+ userMetadata: { type: Schema.Types.Mixed, default: {} },
49
+ appMetadata: { type: Schema.Types.Mixed, default: {} },
50
+ }, { timestamps: true });
51
+ schema.index({ providerIds: 1 });
52
+ return conn.model('AuthUser', schema);
53
+ }
@@ -0,0 +1,19 @@
1
+ import type { Connection, Document, Model, Mongoose } from 'mongoose';
2
+ interface IGroup {
3
+ name: string;
4
+ displayName?: string;
5
+ description?: string;
6
+ roles: string[];
7
+ /**
8
+ * null = app-wide group, string = tenant-scoped group.
9
+ * Immutable after creation — adapters must reject updates that include tenantId.
10
+ */
11
+ tenantId: string | null;
12
+ }
13
+ type GroupDocument = IGroup & Document;
14
+ /**
15
+ * Create (or retrieve cached) Group model on the given connection.
16
+ * Model caching is handled by Mongoose's connection.models registry.
17
+ */
18
+ export declare function createGroupModel(conn: Connection, mongooseInstance: Mongoose): Model<GroupDocument>;
19
+ export {};
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Create (or retrieve cached) Group model on the given connection.
3
+ * Model caching is handled by Mongoose's connection.models registry.
4
+ */
5
+ export function createGroupModel(conn, mongooseInstance) {
6
+ if (conn.models['Group'])
7
+ return conn.models['Group'];
8
+ const { Schema } = mongooseInstance;
9
+ const schema = new Schema({
10
+ name: { type: String, required: true },
11
+ displayName: { type: String },
12
+ description: { type: String },
13
+ roles: [{ type: String }],
14
+ tenantId: { type: String, default: null },
15
+ }, { timestamps: true });
16
+ // Name is unique within scope (app-wide or per-tenant).
17
+ // MongoDB treats null as a value, so this compound index correctly enforces uniqueness
18
+ // for app-wide groups (both have tenantId: null) and per-tenant groups separately.
19
+ schema.index({ name: 1, tenantId: 1 }, { unique: true });
20
+ schema.index({ tenantId: 1 });
21
+ return conn.model('Group', schema);
22
+ }
@@ -1,4 +1,4 @@
1
- import type { Document, Model } from "mongoose";
1
+ import type { Connection, Document, Model, Mongoose } from 'mongoose';
2
2
  interface IGroupMembership {
3
3
  userId: string;
4
4
  groupId: string;
@@ -11,11 +11,9 @@ interface IGroupMembership {
11
11
  tenantId: string | null;
12
12
  }
13
13
  type GroupMembershipDocument = IGroupMembership & Document;
14
- export declare const GroupMembership: Model<GroupMembershipDocument, {}, {}, {}, Document<unknown, {}, GroupMembershipDocument, {}, import("mongoose").DefaultSchemaOptions> & IGroupMembership & Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> & Required<{
15
- _id: import("mongoose").Types.ObjectId;
16
- }> & {
17
- __v: number;
18
- } & {
19
- id: string;
20
- }, any, GroupMembershipDocument>;
14
+ /**
15
+ * Create (or retrieve cached) GroupMembership model on the given connection.
16
+ * Model caching is handled by Mongoose's connection.models registry.
17
+ */
18
+ export declare function createGroupMembershipModel(conn: Connection, mongooseInstance: Mongoose): Model<GroupMembershipDocument>;
21
19
  export {};
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Create (or retrieve cached) GroupMembership model on the given connection.
3
+ * Model caching is handled by Mongoose's connection.models registry.
4
+ */
5
+ export function createGroupMembershipModel(conn, mongooseInstance) {
6
+ if (conn.models['GroupMembership'])
7
+ return conn.models['GroupMembership'];
8
+ const { Schema } = mongooseInstance;
9
+ const schema = new Schema({
10
+ userId: { type: String, required: true },
11
+ groupId: { type: String, required: true },
12
+ roles: [{ type: String }],
13
+ tenantId: { type: String, default: null },
14
+ }, { timestamps: { createdAt: true, updatedAt: false } });
15
+ schema.index({ userId: 1, groupId: 1 }, { unique: true });
16
+ schema.index({ groupId: 1 });
17
+ schema.index({ userId: 1, tenantId: 1 });
18
+ return conn.model('GroupMembership', schema);
19
+ }
@@ -0,0 +1,18 @@
1
+ import mongoose from 'mongoose';
2
+ export interface IM2MClient {
3
+ _id: string;
4
+ clientId: string;
5
+ clientSecretHash: string;
6
+ name: string;
7
+ scopes: string[];
8
+ active: boolean;
9
+ createdAt: Date;
10
+ updatedAt: Date;
11
+ }
12
+ export declare const M2MClient: mongoose.Model<IM2MClient, {}, {}, {}, mongoose.Document<unknown, {}, IM2MClient, {}, mongoose.DefaultSchemaOptions> & IM2MClient & Required<{
13
+ _id: string;
14
+ }> & {
15
+ __v: number;
16
+ } & {
17
+ id: string;
18
+ }, any, IM2MClient>;
@@ -0,0 +1,18 @@
1
+ import mongoose from 'mongoose';
2
+ const m2mClientSchema = new mongoose.Schema({
3
+ clientId: { type: String, required: true, unique: true },
4
+ clientSecretHash: { type: String, required: true },
5
+ name: { type: String, required: true },
6
+ scopes: { type: [String], default: [] },
7
+ active: { type: Boolean, default: true },
8
+ }, { timestamps: true });
9
+ // Lazy proxy pattern (same as AuthUser.ts)
10
+ export const M2MClient = new Proxy({}, {
11
+ get(_, prop) {
12
+ const { authConnection } = require('../infra/mongo');
13
+ if (!authConnection)
14
+ throw new Error('authConnection not initialized — call connectAuthMongo() or connectMongo() first');
15
+ const model = authConnection.models['M2MClient'] ?? authConnection.model('M2MClient', m2mClientSchema);
16
+ return Reflect.get(model, prop);
17
+ },
18
+ });
@@ -0,0 +1,13 @@
1
+ import type { Connection, Document, Model, Mongoose } from 'mongoose';
2
+ interface ITenantRole {
3
+ userId: string;
4
+ tenantId: string;
5
+ roles: string[];
6
+ }
7
+ type TenantRoleDocument = ITenantRole & Document;
8
+ /**
9
+ * Create (or retrieve cached) TenantRole model on the given connection.
10
+ * Model caching is handled by Mongoose's connection.models registry.
11
+ */
12
+ export declare function createTenantRoleModel(conn: Connection, mongooseInstance: Mongoose): Model<TenantRoleDocument>;
13
+ export {};
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Create (or retrieve cached) TenantRole model on the given connection.
3
+ * Model caching is handled by Mongoose's connection.models registry.
4
+ */
5
+ export function createTenantRoleModel(conn, mongooseInstance) {
6
+ if (conn.models['TenantRole'])
7
+ return conn.models['TenantRole'];
8
+ const { Schema } = mongooseInstance;
9
+ const schema = new Schema({
10
+ userId: { type: String, required: true },
11
+ tenantId: { type: String, required: true },
12
+ roles: [{ type: String }],
13
+ }, { timestamps: true });
14
+ schema.index({ userId: 1, tenantId: 1 }, { unique: true });
15
+ schema.index({ tenantId: 1 });
16
+ return conn.model('TenantRole', schema);
17
+ }
@@ -0,0 +1,4 @@
1
+ import type { StandalonePlugin } from '../../bunshot-core/src/index.js';
2
+ import type { AuthPluginConfig } from './types/config';
3
+ export type { AuthPluginConfig };
4
+ export declare function createAuthPlugin(rawConfig: AuthPluginConfig): StandalonePlugin;