@lastshotlabs/bunshot 0.0.27 → 0.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (742) hide show
  1. package/.oclif.manifest.json +39 -0
  2. package/README.md +8282 -2147
  3. package/dist/cli/commands/init.js +690 -0
  4. package/dist/cli/index.js +6 -0
  5. package/dist/cli.js +4 -4
  6. package/dist/packages/bunshot-admin/src/index.d.ts +15 -0
  7. package/dist/packages/bunshot-admin/src/index.js +11 -0
  8. package/dist/packages/bunshot-admin/src/lib/resourceTypes.d.ts +8 -0
  9. package/dist/packages/bunshot-admin/src/lib/resourceTypes.js +33 -0
  10. package/dist/packages/bunshot-admin/src/lib/typedRoute.d.ts +14 -0
  11. package/dist/packages/bunshot-admin/src/lib/typedRoute.js +17 -0
  12. package/dist/packages/bunshot-admin/src/plugin.d.ts +4 -0
  13. package/dist/packages/bunshot-admin/src/plugin.js +46 -0
  14. package/dist/packages/bunshot-admin/src/providers/auth0Access.d.ts +6 -0
  15. package/dist/packages/bunshot-admin/src/providers/auth0Access.js +32 -0
  16. package/dist/packages/bunshot-admin/src/routes/admin.d.ts +10 -0
  17. package/dist/packages/bunshot-admin/src/routes/admin.js +923 -0
  18. package/dist/packages/bunshot-admin/src/routes/mail.d.ts +6 -0
  19. package/dist/packages/bunshot-admin/src/routes/mail.js +114 -0
  20. package/dist/packages/bunshot-admin/src/routes/permissions.d.ts +8 -0
  21. package/dist/packages/bunshot-admin/src/routes/permissions.js +315 -0
  22. package/dist/packages/bunshot-admin/src/types/config.d.ts +16 -0
  23. package/dist/packages/bunshot-admin/src/types/config.js +37 -0
  24. package/dist/packages/bunshot-admin/src/types/env.d.ts +14 -0
  25. package/dist/packages/bunshot-admin/src/types/provider.d.ts +1 -0
  26. package/dist/packages/bunshot-admin/src/types/provider.js +4 -0
  27. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.d.ts +66 -0
  28. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.js +1063 -0
  29. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.d.ts +2 -0
  30. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.js +536 -0
  31. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.d.ts +88 -0
  32. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.js +1366 -0
  33. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.d.ts +2 -0
  34. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.js +23 -0
  35. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.d.ts +5 -0
  36. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.js +131 -0
  37. package/dist/packages/bunshot-auth/src/bootstrap.d.ts +38 -0
  38. package/dist/packages/bunshot-auth/src/bootstrap.js +384 -0
  39. package/dist/packages/bunshot-auth/src/config/appConfig.d.ts +3 -0
  40. package/dist/packages/bunshot-auth/src/config/appConfig.js +4 -0
  41. package/dist/packages/bunshot-auth/src/config/authConfig.d.ts +478 -0
  42. package/dist/packages/bunshot-auth/src/config/authConfig.js +46 -0
  43. package/dist/packages/bunshot-auth/src/config/configLock.d.ts +2 -0
  44. package/dist/packages/bunshot-auth/src/config/configLock.js +10 -0
  45. package/dist/packages/bunshot-auth/src/index.d.ts +25 -0
  46. package/dist/packages/bunshot-auth/src/index.js +23 -0
  47. package/dist/packages/bunshot-auth/src/infra/mongo.d.ts +15 -0
  48. package/dist/packages/bunshot-auth/src/infra/mongo.js +44 -0
  49. package/dist/packages/bunshot-auth/src/infra/queue.d.ts +14 -0
  50. package/dist/packages/bunshot-auth/src/infra/queue.js +27 -0
  51. package/dist/packages/bunshot-auth/src/infra/redis.d.ts +5 -0
  52. package/dist/packages/bunshot-auth/src/infra/redis.js +15 -0
  53. package/dist/packages/bunshot-auth/src/infra/signing.d.ts +7 -0
  54. package/dist/packages/bunshot-auth/src/infra/signing.js +8 -0
  55. package/dist/packages/bunshot-auth/src/lib/accountLockout.d.ts +34 -0
  56. package/dist/packages/bunshot-auth/src/lib/accountLockout.js +244 -0
  57. package/dist/packages/bunshot-auth/src/lib/adapterTiers.d.ts +1 -0
  58. package/dist/packages/bunshot-auth/src/lib/adapterTiers.js +1 -0
  59. package/dist/packages/bunshot-auth/src/lib/authAdapter.d.ts +1 -0
  60. package/dist/packages/bunshot-auth/src/lib/authAdapter.js +1 -0
  61. package/dist/packages/bunshot-auth/src/lib/authContext.d.ts +15 -0
  62. package/dist/packages/bunshot-auth/src/lib/authContext.js +1 -0
  63. package/dist/packages/bunshot-auth/src/lib/authEventBus.d.ts +4 -0
  64. package/dist/packages/bunshot-auth/src/lib/authEventBus.js +15 -0
  65. package/dist/packages/bunshot-auth/src/lib/authRateLimit.d.ts +28 -0
  66. package/dist/packages/bunshot-auth/src/lib/authRateLimit.js +205 -0
  67. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.d.ts +8 -2
  68. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.js +22 -9
  69. package/dist/packages/bunshot-auth/src/lib/cache.d.ts +12 -0
  70. package/dist/packages/bunshot-auth/src/lib/cache.js +120 -0
  71. package/dist/packages/bunshot-auth/src/lib/clientIp.d.ts +4 -0
  72. package/dist/{lib → packages/bunshot-auth/src/lib}/clientIp.js +14 -7
  73. package/dist/packages/bunshot-auth/src/lib/cookieOptions.d.ts +27 -0
  74. package/dist/packages/bunshot-auth/src/lib/cookieOptions.js +33 -0
  75. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.d.ts +40 -0
  76. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.js +221 -0
  77. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.d.ts +19 -0
  78. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.js +148 -0
  79. package/dist/packages/bunshot-auth/src/lib/emailTemplates.d.ts +23 -0
  80. package/dist/packages/bunshot-auth/src/lib/emailTemplates.js +265 -0
  81. package/dist/packages/bunshot-auth/src/lib/emailVerification.d.ts +30 -0
  82. package/dist/packages/bunshot-auth/src/lib/emailVerification.js +200 -0
  83. package/dist/packages/bunshot-auth/src/lib/env.d.ts +1 -0
  84. package/dist/packages/bunshot-auth/src/lib/env.js +3 -0
  85. package/dist/packages/bunshot-auth/src/lib/fingerprint.js +36 -0
  86. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.d.ts +15 -16
  87. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.js +22 -34
  88. package/dist/packages/bunshot-auth/src/lib/jwks.d.ts +28 -0
  89. package/dist/packages/bunshot-auth/src/lib/jwks.js +79 -0
  90. package/dist/packages/bunshot-auth/src/lib/jwt.d.ts +12 -0
  91. package/dist/packages/bunshot-auth/src/lib/jwt.js +86 -0
  92. package/dist/{lib → packages/bunshot-auth/src/lib}/logger.js +3 -3
  93. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.d.ts +5 -4
  94. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.js +6 -10
  95. package/dist/packages/bunshot-auth/src/lib/magicLink.d.ts +13 -0
  96. package/dist/packages/bunshot-auth/src/lib/magicLink.js +145 -0
  97. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.d.ts +60 -0
  98. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.js +419 -0
  99. package/dist/packages/bunshot-auth/src/lib/oauth.d.ts +82 -0
  100. package/dist/packages/bunshot-auth/src/lib/oauth.js +177 -0
  101. package/dist/packages/bunshot-auth/src/lib/oauthCode.d.ts +19 -0
  102. package/dist/packages/bunshot-auth/src/lib/oauthCode.js +182 -0
  103. package/dist/packages/bunshot-auth/src/lib/oauthReauth.d.ts +19 -0
  104. package/dist/packages/bunshot-auth/src/lib/oauthReauth.js +255 -0
  105. package/dist/packages/bunshot-auth/src/lib/organization.d.ts +66 -0
  106. package/dist/packages/bunshot-auth/src/lib/organization.js +225 -0
  107. package/dist/packages/bunshot-auth/src/lib/passwordHistory.d.ts +12 -0
  108. package/dist/packages/bunshot-auth/src/lib/passwordHistory.js +31 -0
  109. package/dist/packages/bunshot-auth/src/lib/resetPassword.d.ts +20 -0
  110. package/dist/packages/bunshot-auth/src/lib/resetPassword.js +148 -0
  111. package/dist/packages/bunshot-auth/src/lib/roles.d.ts +9 -0
  112. package/dist/packages/bunshot-auth/src/lib/roles.js +93 -0
  113. package/dist/packages/bunshot-auth/src/lib/saml.d.ts +29 -0
  114. package/dist/packages/bunshot-auth/src/lib/saml.js +73 -0
  115. package/dist/packages/bunshot-auth/src/lib/samlRequestId.d.ts +13 -0
  116. package/dist/packages/bunshot-auth/src/lib/samlRequestId.js +129 -0
  117. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.d.ts +7 -7
  118. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.js +15 -13
  119. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.d.ts +22 -0
  120. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.js +65 -0
  121. package/dist/packages/bunshot-auth/src/lib/session.d.ts +45 -0
  122. package/dist/packages/bunshot-auth/src/lib/session.js +1211 -0
  123. package/dist/packages/bunshot-auth/src/lib/storeInfra.d.ts +26 -0
  124. package/dist/packages/bunshot-auth/src/lib/storeInfra.js +18 -0
  125. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.d.ts +3 -2
  126. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.js +2 -5
  127. package/dist/packages/bunshot-auth/src/lib/validateAdapter.d.ts +16 -0
  128. package/dist/packages/bunshot-auth/src/lib/validateAdapter.js +161 -0
  129. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.d.ts +13 -0
  130. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.js +58 -0
  131. package/dist/{middleware → packages/bunshot-auth/src/middleware}/csrf.d.ts +5 -4
  132. package/dist/packages/bunshot-auth/src/middleware/csrf.js +138 -0
  133. package/dist/packages/bunshot-auth/src/middleware/identify.d.ts +4 -0
  134. package/dist/packages/bunshot-auth/src/middleware/identify.js +124 -0
  135. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.d.ts +2 -2
  136. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.js +10 -8
  137. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.d.ts +2 -2
  138. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.js +20 -16
  139. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.d.ts +2 -2
  140. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.js +6 -6
  141. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.d.ts +2 -2
  142. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.js +8 -7
  143. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.d.ts +2 -2
  144. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.js +7 -6
  145. package/dist/packages/bunshot-auth/src/middleware/scimAuth.d.ts +8 -0
  146. package/dist/packages/bunshot-auth/src/middleware/scimAuth.js +29 -0
  147. package/dist/packages/bunshot-auth/src/middleware/userAuth.d.ts +3 -0
  148. package/dist/packages/bunshot-auth/src/middleware/userAuth.js +6 -0
  149. package/dist/{models → packages/bunshot-auth/src/models}/AuthUser.d.ts +12 -8
  150. package/dist/packages/bunshot-auth/src/models/AuthUser.js +53 -0
  151. package/dist/packages/bunshot-auth/src/models/Group.d.ts +19 -0
  152. package/dist/packages/bunshot-auth/src/models/Group.js +22 -0
  153. package/dist/{models → packages/bunshot-auth/src/models}/GroupMembership.d.ts +6 -8
  154. package/dist/packages/bunshot-auth/src/models/GroupMembership.js +19 -0
  155. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.d.ts +1 -1
  156. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.js +5 -5
  157. package/dist/packages/bunshot-auth/src/models/TenantRole.d.ts +13 -0
  158. package/dist/packages/bunshot-auth/src/models/TenantRole.js +17 -0
  159. package/dist/packages/bunshot-auth/src/plugin.d.ts +4 -0
  160. package/dist/packages/bunshot-auth/src/plugin.js +274 -0
  161. package/dist/packages/bunshot-auth/src/routes/auth.d.ts +15 -0
  162. package/dist/packages/bunshot-auth/src/routes/auth.js +1624 -0
  163. package/dist/packages/bunshot-auth/src/routes/groups.d.ts +4 -0
  164. package/dist/packages/bunshot-auth/src/routes/groups.js +481 -0
  165. package/dist/packages/bunshot-auth/src/routes/m2m.d.ts +2 -0
  166. package/dist/packages/bunshot-auth/src/routes/m2m.js +145 -0
  167. package/dist/packages/bunshot-auth/src/routes/mfa.d.ts +6 -0
  168. package/dist/packages/bunshot-auth/src/routes/mfa.js +991 -0
  169. package/dist/packages/bunshot-auth/src/routes/oauth.d.ts +3 -0
  170. package/dist/packages/bunshot-auth/src/routes/oauth.js +1727 -0
  171. package/dist/packages/bunshot-auth/src/routes/oidc.d.ts +2 -0
  172. package/dist/packages/bunshot-auth/src/routes/oidc.js +84 -0
  173. package/dist/packages/bunshot-auth/src/routes/organizations.d.ts +3 -0
  174. package/dist/packages/bunshot-auth/src/routes/organizations.js +741 -0
  175. package/dist/packages/bunshot-auth/src/routes/passkey.d.ts +2 -0
  176. package/dist/packages/bunshot-auth/src/routes/passkey.js +199 -0
  177. package/dist/packages/bunshot-auth/src/routes/saml.d.ts +2 -0
  178. package/dist/packages/bunshot-auth/src/routes/saml.js +226 -0
  179. package/dist/packages/bunshot-auth/src/routes/scim.d.ts +3 -0
  180. package/dist/packages/bunshot-auth/src/routes/scim.js +588 -0
  181. package/dist/packages/bunshot-auth/src/runtime.d.ts +52 -0
  182. package/dist/packages/bunshot-auth/src/runtime.js +11 -0
  183. package/dist/{schemas → packages/bunshot-auth/src/schemas}/auth.d.ts +4 -5
  184. package/dist/packages/bunshot-auth/src/schemas/auth.js +24 -0
  185. package/dist/packages/bunshot-auth/src/schemas/error.d.ts +10 -0
  186. package/dist/packages/bunshot-auth/src/schemas/error.js +10 -0
  187. package/dist/packages/bunshot-auth/src/schemas/success.d.ts +10 -0
  188. package/dist/packages/bunshot-auth/src/schemas/success.js +10 -0
  189. package/dist/packages/bunshot-auth/src/services/auth.d.ts +39 -0
  190. package/dist/packages/bunshot-auth/src/services/auth.js +378 -0
  191. package/dist/{services → packages/bunshot-auth/src/services}/mfa.d.ts +41 -17
  192. package/dist/{services → packages/bunshot-auth/src/services}/mfa.js +259 -183
  193. package/dist/packages/bunshot-auth/src/testing.d.ts +31 -0
  194. package/dist/packages/bunshot-auth/src/testing.js +23 -0
  195. package/dist/packages/bunshot-auth/src/types/adapter.d.ts +1 -0
  196. package/dist/packages/bunshot-auth/src/types/adapter.js +1 -0
  197. package/dist/packages/bunshot-auth/src/types/config.d.ts +152 -0
  198. package/dist/packages/bunshot-auth/src/types/config.js +179 -0
  199. package/dist/{routes → packages/bunshot-auth/src/types}/groups.d.ts +2 -3
  200. package/dist/packages/bunshot-auth/src/types/groups.js +1 -0
  201. package/dist/packages/bunshot-auth/src/types/oauthCode.d.ts +6 -0
  202. package/dist/packages/bunshot-auth/src/types/oauthCode.js +1 -0
  203. package/dist/packages/bunshot-auth/src/types/oauthReauth.d.ts +13 -0
  204. package/dist/packages/bunshot-auth/src/types/oauthReauth.js +1 -0
  205. package/dist/packages/bunshot-auth/src/types/redis.d.ts +1 -0
  206. package/dist/packages/bunshot-auth/src/types/redis.js +1 -0
  207. package/dist/packages/bunshot-auth/src/types/saml.d.ts +10 -0
  208. package/dist/packages/bunshot-auth/src/types/saml.js +1 -0
  209. package/dist/packages/bunshot-auth/src/types/session.d.ts +18 -0
  210. package/dist/packages/bunshot-auth/src/types/session.js +1 -0
  211. package/dist/packages/bunshot-auth/src/types/store.d.ts +1 -0
  212. package/dist/packages/bunshot-auth/src/types/store.js +1 -0
  213. package/dist/packages/bunshot-core/src/adminProvider.d.ts +95 -0
  214. package/dist/packages/bunshot-core/src/adminProvider.js +1 -0
  215. package/dist/packages/bunshot-core/src/auditLog.d.ts +34 -0
  216. package/dist/packages/bunshot-core/src/auditLog.js +1 -0
  217. package/dist/packages/bunshot-core/src/auth-adapter.d.ts +227 -0
  218. package/dist/packages/bunshot-core/src/auth-adapter.js +4 -0
  219. package/dist/packages/bunshot-core/src/authVariables.d.ts +14 -0
  220. package/dist/packages/bunshot-core/src/authVariables.js +4 -0
  221. package/dist/packages/bunshot-core/src/cache.d.ts +12 -0
  222. package/dist/packages/bunshot-core/src/cache.js +21 -0
  223. package/dist/{lib → packages/bunshot-core/src}/captcha.d.ts +1 -10
  224. package/dist/packages/bunshot-core/src/captcha.js +1 -0
  225. package/dist/packages/bunshot-core/src/clearRegistry.d.ts +6 -0
  226. package/dist/packages/bunshot-core/src/clearRegistry.js +17 -0
  227. package/dist/packages/bunshot-core/src/clientIp.d.ts +3 -0
  228. package/dist/packages/bunshot-core/src/clientIp.js +45 -0
  229. package/dist/packages/bunshot-core/src/configLock.d.ts +4 -0
  230. package/dist/packages/bunshot-core/src/configLock.js +7 -0
  231. package/dist/packages/bunshot-core/src/configValidation.d.ts +22 -0
  232. package/dist/packages/bunshot-core/src/configValidation.js +39 -0
  233. package/dist/packages/bunshot-core/src/constants.js +10 -0
  234. package/dist/packages/bunshot-core/src/context/bunshotContext.d.ts +232 -0
  235. package/dist/packages/bunshot-core/src/context/bunshotContext.js +1 -0
  236. package/dist/packages/bunshot-core/src/context/contextAccess.d.ts +3 -0
  237. package/dist/packages/bunshot-core/src/context/contextAccess.js +16 -0
  238. package/dist/packages/bunshot-core/src/context/contextStore.d.ts +16 -0
  239. package/dist/packages/bunshot-core/src/context/contextStore.js +31 -0
  240. package/dist/packages/bunshot-core/src/context/frameworkConfig.d.ts +38 -0
  241. package/dist/packages/bunshot-core/src/context/frameworkConfig.js +1 -0
  242. package/dist/packages/bunshot-core/src/context/index.d.ts +4 -0
  243. package/dist/packages/bunshot-core/src/context/index.js +2 -0
  244. package/dist/packages/bunshot-core/src/context.d.ts +40 -0
  245. package/dist/packages/bunshot-core/src/context.js +35 -0
  246. package/dist/packages/bunshot-core/src/coreContracts.d.ts +47 -0
  247. package/dist/packages/bunshot-core/src/coreContracts.js +1 -0
  248. package/dist/packages/bunshot-core/src/coreRegistrar.d.ts +6 -0
  249. package/dist/packages/bunshot-core/src/coreRegistrar.js +42 -0
  250. package/dist/{lib → packages/bunshot-core/src}/createRoute.d.ts +4 -30
  251. package/dist/{lib → packages/bunshot-core/src}/createRoute.js +39 -88
  252. package/dist/packages/bunshot-core/src/cronRegistry.d.ts +11 -0
  253. package/dist/packages/bunshot-core/src/cronRegistry.js +1 -0
  254. package/dist/packages/bunshot-core/src/crypto.d.ts +43 -0
  255. package/dist/packages/bunshot-core/src/crypto.js +74 -0
  256. package/dist/packages/bunshot-core/src/csrf.d.ts +8 -0
  257. package/dist/packages/bunshot-core/src/csrf.js +1 -0
  258. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.d.ts +7 -0
  259. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.js +19 -0
  260. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.d.ts +6 -0
  261. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.js +40 -0
  262. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.d.ts +6 -0
  263. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.js +24 -0
  264. package/dist/packages/bunshot-core/src/emailTemplates.d.ts +5 -0
  265. package/dist/packages/bunshot-core/src/emailTemplates.js +10 -0
  266. package/dist/{lib/HttpError.d.ts → packages/bunshot-core/src/errors.d.ts} +4 -1
  267. package/dist/{lib/HttpError.js → packages/bunshot-core/src/errors.js} +7 -1
  268. package/dist/packages/bunshot-core/src/eventBus.d.ts +270 -0
  269. package/dist/packages/bunshot-core/src/eventBus.js +143 -0
  270. package/dist/packages/bunshot-core/src/idempotency.d.ts +18 -0
  271. package/dist/packages/bunshot-core/src/idempotency.js +1 -0
  272. package/dist/packages/bunshot-core/src/index.d.ts +60 -0
  273. package/dist/packages/bunshot-core/src/index.js +34 -0
  274. package/dist/packages/bunshot-core/src/mail.d.ts +14 -0
  275. package/dist/packages/bunshot-core/src/mail.js +8 -0
  276. package/dist/packages/bunshot-core/src/memoryEviction.d.ts +24 -0
  277. package/dist/packages/bunshot-core/src/memoryEviction.js +52 -0
  278. package/dist/packages/bunshot-core/src/pagination.d.ts +45 -0
  279. package/dist/packages/bunshot-core/src/pagination.js +61 -0
  280. package/dist/packages/bunshot-core/src/permissions.d.ts +64 -0
  281. package/dist/packages/bunshot-core/src/permissions.js +27 -0
  282. package/dist/packages/bunshot-core/src/plugin.d.ts +44 -0
  283. package/dist/packages/bunshot-core/src/plugin.js +1 -0
  284. package/dist/packages/bunshot-core/src/rateLimit.d.ts +5 -0
  285. package/dist/packages/bunshot-core/src/rateLimit.js +18 -0
  286. package/dist/packages/bunshot-core/src/redis.d.ts +21 -0
  287. package/dist/packages/bunshot-core/src/redis.js +1 -0
  288. package/dist/packages/bunshot-core/src/routeAuth.d.ts +5 -0
  289. package/dist/packages/bunshot-core/src/routeAuth.js +11 -0
  290. package/dist/packages/bunshot-core/src/routeOverrides.d.ts +24 -0
  291. package/dist/packages/bunshot-core/src/routeOverrides.js +25 -0
  292. package/dist/packages/bunshot-core/src/routerAdapter.d.ts +6 -0
  293. package/dist/packages/bunshot-core/src/routerAdapter.js +56 -0
  294. package/dist/packages/bunshot-core/src/secrets.d.ts +48 -0
  295. package/dist/packages/bunshot-core/src/secrets.js +8 -0
  296. package/dist/packages/bunshot-core/src/signing.d.ts +41 -0
  297. package/dist/packages/bunshot-core/src/signing.js +1 -0
  298. package/dist/packages/bunshot-core/src/sse.d.ts +36 -0
  299. package/dist/packages/bunshot-core/src/sse.js +1 -0
  300. package/dist/packages/bunshot-core/src/storageAdapter.js +1 -0
  301. package/dist/packages/bunshot-core/src/storeInfra.d.ts +44 -0
  302. package/dist/packages/bunshot-core/src/storeInfra.js +18 -0
  303. package/dist/packages/bunshot-core/src/storeType.d.ts +7 -0
  304. package/dist/packages/bunshot-core/src/storeType.js +1 -0
  305. package/dist/packages/bunshot-core/src/testing.d.ts +1 -0
  306. package/dist/packages/bunshot-core/src/testing.js +1 -0
  307. package/dist/packages/bunshot-core/src/uploadRegistry.d.ts +23 -0
  308. package/dist/packages/bunshot-core/src/uploadRegistry.js +4 -0
  309. package/dist/packages/bunshot-core/src/userResolver.d.ts +5 -0
  310. package/dist/packages/bunshot-core/src/userResolver.js +14 -0
  311. package/dist/packages/bunshot-core/src/wsMessages.d.ts +42 -0
  312. package/dist/packages/bunshot-core/src/wsMessages.js +4 -0
  313. package/dist/packages/bunshot-permissions/src/adapters/memory.d.ts +7 -0
  314. package/dist/packages/bunshot-permissions/src/adapters/memory.js +73 -0
  315. package/dist/packages/bunshot-permissions/src/index.d.ts +10 -0
  316. package/dist/packages/bunshot-permissions/src/index.js +5 -0
  317. package/dist/packages/bunshot-permissions/src/lib/bootstrap.d.ts +7 -0
  318. package/dist/packages/bunshot-permissions/src/lib/bootstrap.js +12 -0
  319. package/dist/packages/bunshot-permissions/src/lib/evaluator.d.ts +10 -0
  320. package/dist/packages/bunshot-permissions/src/lib/evaluator.js +165 -0
  321. package/dist/packages/bunshot-permissions/src/lib/registry.d.ts +2 -0
  322. package/dist/packages/bunshot-permissions/src/lib/registry.js +31 -0
  323. package/dist/packages/bunshot-permissions/src/lib/validation.d.ts +1 -0
  324. package/dist/packages/bunshot-permissions/src/lib/validation.js +1 -0
  325. package/dist/packages/bunshot-permissions/src/types/adapter.d.ts +1 -0
  326. package/dist/packages/bunshot-permissions/src/types/adapter.js +1 -0
  327. package/dist/packages/bunshot-permissions/src/types/evaluator.d.ts +1 -0
  328. package/dist/packages/bunshot-permissions/src/types/evaluator.js +1 -0
  329. package/dist/packages/bunshot-permissions/src/types/models.d.ts +1 -0
  330. package/dist/packages/bunshot-permissions/src/types/models.js +1 -0
  331. package/dist/packages/bunshot-permissions/src/types/registry.d.ts +1 -0
  332. package/dist/packages/bunshot-permissions/src/types/registry.js +1 -0
  333. package/dist/packages/bunshot-postgres/src/adapter.d.ts +6 -0
  334. package/dist/packages/bunshot-postgres/src/adapter.js +794 -0
  335. package/dist/packages/bunshot-postgres/src/connection.d.ts +15 -0
  336. package/dist/packages/bunshot-postgres/src/connection.js +16 -0
  337. package/dist/packages/bunshot-postgres/src/index.d.ts +4 -0
  338. package/dist/packages/bunshot-postgres/src/index.js +2 -0
  339. package/dist/packages/bunshot-postgres/src/schema.d.ts +997 -0
  340. package/dist/packages/bunshot-postgres/src/schema.js +105 -0
  341. package/dist/src/app.d.ts +230 -0
  342. package/dist/src/app.js +182 -0
  343. package/dist/src/cli/commands/init.d.ts +10 -0
  344. package/dist/src/cli/commands/init.js +709 -0
  345. package/dist/src/cli/index.d.ts +1 -0
  346. package/dist/src/cli/index.js +3 -0
  347. package/dist/src/entrypoints/mongo.d.ts +6 -0
  348. package/dist/src/entrypoints/mongo.js +4 -0
  349. package/dist/src/entrypoints/queue.d.ts +2 -0
  350. package/dist/src/entrypoints/queue.js +1 -0
  351. package/dist/src/entrypoints/redis.d.ts +1 -0
  352. package/dist/src/entrypoints/redis.js +1 -0
  353. package/dist/{adapters → src/framework/adapters}/localStorage.d.ts +1 -1
  354. package/dist/{adapters → src/framework/adapters}/localStorage.js +10 -10
  355. package/dist/src/framework/adapters/memoryStorage.d.ts +2 -0
  356. package/dist/src/framework/adapters/memoryStorage.js +45 -0
  357. package/dist/{adapters → src/framework/adapters}/s3Storage.d.ts +1 -1
  358. package/dist/{adapters → src/framework/adapters}/s3Storage.js +12 -12
  359. package/dist/src/framework/admin/bunshotAccess.d.ts +2 -0
  360. package/dist/src/framework/admin/bunshotAccess.js +23 -0
  361. package/dist/src/framework/admin/bunshotUsers.d.ts +2 -0
  362. package/dist/src/framework/admin/bunshotUsers.js +103 -0
  363. package/dist/src/framework/admin/index.d.ts +7 -0
  364. package/dist/src/framework/admin/index.js +21 -0
  365. package/dist/src/framework/boundaryAdapters/cacheFactories.d.ts +13 -0
  366. package/dist/src/framework/boundaryAdapters/cacheFactories.js +86 -0
  367. package/dist/src/framework/boundaryAdapters/index.d.ts +2 -0
  368. package/dist/src/framework/boundaryAdapters/index.js +1 -0
  369. package/dist/src/framework/boundaryAdapters.d.ts +17 -0
  370. package/dist/src/framework/boundaryAdapters.js +62 -0
  371. package/dist/src/framework/buildContext.d.ts +33 -0
  372. package/dist/src/framework/buildContext.js +119 -0
  373. package/dist/src/framework/config/schema.d.ts +447 -0
  374. package/dist/src/framework/config/schema.js +528 -0
  375. package/dist/src/framework/createInfrastructure.d.ts +76 -0
  376. package/dist/src/framework/createInfrastructure.js +221 -0
  377. package/dist/src/framework/lib/auditLog.d.ts +23 -0
  378. package/dist/src/framework/lib/auditLog.js +416 -0
  379. package/dist/src/framework/lib/captcha.d.ts +11 -0
  380. package/dist/{lib → src/framework/lib}/captcha.js +13 -10
  381. package/dist/{lib → src/framework/lib}/createDtoMapper.js +4 -4
  382. package/dist/src/framework/lib/createRoute.d.ts +1 -0
  383. package/dist/src/framework/lib/createRoute.js +2 -0
  384. package/dist/{lib → src/framework/lib}/idempotency.d.ts +2 -6
  385. package/dist/src/framework/lib/idempotency.js +74 -0
  386. package/dist/src/framework/lib/logger.d.ts +3 -0
  387. package/dist/src/framework/lib/logger.js +14 -0
  388. package/dist/src/framework/lib/metrics.d.ts +34 -0
  389. package/dist/{lib → src/framework/lib}/metrics.js +49 -57
  390. package/dist/src/framework/lib/pagination.d.ts +42 -0
  391. package/dist/src/framework/lib/pagination.js +51 -0
  392. package/dist/src/framework/lib/redisTransport.d.ts +38 -0
  393. package/dist/src/framework/lib/redisTransport.js +107 -0
  394. package/dist/src/framework/lib/resolveUserId.d.ts +2 -0
  395. package/dist/src/framework/lib/resolveUserId.js +5 -0
  396. package/dist/src/framework/lib/sseCollision.d.ts +6 -0
  397. package/dist/src/framework/lib/sseCollision.js +26 -0
  398. package/dist/src/framework/lib/storageAdapter.d.ts +1 -0
  399. package/dist/src/framework/lib/storageAdapter.js +1 -0
  400. package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.js +4 -4
  401. package/dist/src/framework/lib/tenant.d.ts +21 -0
  402. package/dist/src/framework/lib/tenant.js +70 -0
  403. package/dist/{lib → src/framework/lib}/upload.d.ts +11 -10
  404. package/dist/src/framework/lib/upload.js +132 -0
  405. package/dist/src/framework/lib/uploadRegistry.d.ts +23 -0
  406. package/dist/src/framework/lib/uploadRegistry.js +34 -0
  407. package/dist/{lib → src/framework/lib}/validate.d.ts +1 -1
  408. package/dist/{lib → src/framework/lib}/validate.js +2 -2
  409. package/dist/src/framework/lib/ws.d.ts +19 -0
  410. package/dist/src/framework/lib/ws.js +130 -0
  411. package/dist/src/framework/lib/wsHeartbeat.d.ts +12 -0
  412. package/dist/src/framework/lib/wsHeartbeat.js +53 -0
  413. package/dist/src/framework/lib/wsMessages.d.ts +25 -0
  414. package/dist/src/framework/lib/wsMessages.js +45 -0
  415. package/dist/src/framework/lib/wsNamespace.d.ts +17 -0
  416. package/dist/src/framework/lib/wsNamespace.js +19 -0
  417. package/dist/src/framework/lib/wsPresence.d.ts +17 -0
  418. package/dist/src/framework/lib/wsPresence.js +84 -0
  419. package/dist/src/framework/lib/wsTransport.d.ts +38 -0
  420. package/dist/src/framework/lib/wsTransport.js +9 -0
  421. package/dist/{lib → src/framework/lib}/zodToMongoose.d.ts +1 -1
  422. package/dist/{lib → src/framework/lib}/zodToMongoose.js +11 -11
  423. package/dist/{middleware → src/framework/middleware}/auditLog.d.ts +4 -3
  424. package/dist/src/framework/middleware/auditLog.js +42 -0
  425. package/dist/{middleware → src/framework/middleware}/botProtection.d.ts +2 -2
  426. package/dist/{middleware → src/framework/middleware}/botProtection.js +8 -9
  427. package/dist/src/framework/middleware/cacheResponse.d.ts +35 -0
  428. package/dist/src/framework/middleware/cacheResponse.js +126 -0
  429. package/dist/{middleware → src/framework/middleware}/captcha.d.ts +2 -3
  430. package/dist/src/framework/middleware/captcha.js +37 -0
  431. package/dist/{middleware → src/framework/middleware}/errorHandler.d.ts +1 -1
  432. package/dist/{middleware → src/framework/middleware}/errorHandler.js +2 -2
  433. package/dist/src/framework/middleware/index.js +1 -0
  434. package/dist/{middleware → src/framework/middleware}/logger.d.ts +1 -1
  435. package/dist/src/framework/middleware/metrics.d.ts +12 -0
  436. package/dist/src/framework/middleware/metrics.js +26 -0
  437. package/dist/{middleware → src/framework/middleware}/rateLimit.d.ts +2 -2
  438. package/dist/src/framework/middleware/rateLimit.js +22 -0
  439. package/dist/src/framework/middleware/requestId.d.ts +3 -0
  440. package/dist/{middleware → src/framework/middleware}/requestId.js +2 -2
  441. package/dist/{middleware → src/framework/middleware}/requestLogger.d.ts +3 -3
  442. package/dist/{middleware → src/framework/middleware}/requestLogger.js +17 -12
  443. package/dist/{middleware → src/framework/middleware}/requestSigning.d.ts +2 -2
  444. package/dist/{middleware → src/framework/middleware}/requestSigning.js +18 -20
  445. package/dist/src/framework/middleware/tenant.d.ts +14 -0
  446. package/dist/{middleware → src/framework/middleware}/tenant.js +31 -27
  447. package/dist/src/framework/middleware/upload.d.ts +5 -0
  448. package/dist/{middleware → src/framework/middleware}/upload.js +4 -4
  449. package/dist/{middleware → src/framework/middleware}/webhookAuth.d.ts +3 -3
  450. package/dist/{middleware → src/framework/middleware}/webhookAuth.js +11 -12
  451. package/dist/src/framework/models/AuditLog.d.ts +21 -0
  452. package/dist/src/framework/models/AuditLog.js +31 -0
  453. package/dist/src/framework/mountMiddleware.d.ts +91 -0
  454. package/dist/src/framework/mountMiddleware.js +128 -0
  455. package/dist/src/framework/mountOptionalEndpoints.d.ts +103 -0
  456. package/dist/src/framework/mountOptionalEndpoints.js +47 -0
  457. package/dist/src/framework/mountRoutes.d.ts +21 -0
  458. package/dist/src/framework/mountRoutes.js +144 -0
  459. package/dist/src/framework/persistence/cronRegistry.d.ts +28 -0
  460. package/dist/src/framework/persistence/cronRegistry.js +139 -0
  461. package/dist/src/framework/persistence/idempotency.d.ts +26 -0
  462. package/dist/src/framework/persistence/idempotency.js +178 -0
  463. package/dist/src/framework/persistence/index.d.ts +6 -0
  464. package/dist/src/framework/persistence/index.js +8 -0
  465. package/dist/src/framework/persistence/storeInfra.d.ts +9 -0
  466. package/dist/src/framework/persistence/storeInfra.js +1 -0
  467. package/dist/src/framework/persistence/uploadRegistry.d.ts +35 -0
  468. package/dist/src/framework/persistence/uploadRegistry.js +235 -0
  469. package/dist/src/framework/persistence/wsMessages.d.ts +22 -0
  470. package/dist/src/framework/persistence/wsMessages.js +296 -0
  471. package/dist/src/framework/preloadSchemas.d.ts +24 -0
  472. package/dist/src/framework/preloadSchemas.js +42 -0
  473. package/dist/src/framework/registerBoundaryAdapters.d.ts +23 -0
  474. package/dist/src/framework/registerBoundaryAdapters.js +46 -0
  475. package/dist/src/framework/routes/admin.d.ts +9 -0
  476. package/dist/src/framework/routes/admin.js +361 -0
  477. package/dist/src/framework/routes/health.d.ts +1 -0
  478. package/dist/src/framework/routes/health.js +21 -0
  479. package/dist/src/framework/routes/home.d.ts +1 -0
  480. package/dist/src/framework/routes/home.js +18 -0
  481. package/dist/src/framework/routes/jobs.d.ts +3 -0
  482. package/dist/{routes → src/framework/routes}/jobs.js +128 -103
  483. package/dist/src/framework/routes/metrics.d.ts +10 -0
  484. package/dist/src/framework/routes/metrics.js +57 -0
  485. package/dist/{routes → src/framework/routes}/uploads.d.ts +3 -3
  486. package/dist/src/framework/routes/uploads.js +262 -0
  487. package/dist/src/framework/runPluginLifecycle.d.ts +27 -0
  488. package/dist/src/framework/runPluginLifecycle.js +121 -0
  489. package/dist/src/framework/secrets/frameworkSecretSchema.d.ts +58 -0
  490. package/dist/src/framework/secrets/frameworkSecretSchema.js +20 -0
  491. package/dist/src/framework/secrets/index.d.ts +9 -0
  492. package/dist/src/framework/secrets/index.js +7 -0
  493. package/dist/src/framework/secrets/providers/envProvider.d.ts +15 -0
  494. package/dist/src/framework/secrets/providers/envProvider.js +18 -0
  495. package/dist/src/framework/secrets/providers/fileProvider.d.ts +8 -0
  496. package/dist/src/framework/secrets/providers/fileProvider.js +82 -0
  497. package/dist/src/framework/secrets/providers/ssmProvider.d.ts +20 -0
  498. package/dist/src/framework/secrets/providers/ssmProvider.js +127 -0
  499. package/dist/src/framework/secrets/resolveSecretBundle.d.ts +53 -0
  500. package/dist/src/framework/secrets/resolveSecretBundle.js +84 -0
  501. package/dist/src/framework/secrets/resolveSecrets.d.ts +18 -0
  502. package/dist/src/framework/secrets/resolveSecrets.js +34 -0
  503. package/dist/src/framework/sse/index.d.ts +21 -0
  504. package/dist/src/framework/sse/index.js +109 -0
  505. package/dist/src/framework/ws/index.d.ts +11 -0
  506. package/dist/src/framework/ws/index.js +8 -0
  507. package/dist/src/index.d.ts +87 -0
  508. package/dist/src/index.js +58 -0
  509. package/dist/src/lib/appConfig.d.ts +7 -0
  510. package/dist/src/lib/appConfig.js +27 -0
  511. package/dist/src/lib/appMeta.d.ts +7 -0
  512. package/dist/src/lib/appMeta.js +3 -0
  513. package/dist/src/lib/authConfig.d.ts +532 -0
  514. package/dist/{lib/appConfig.js → src/lib/authConfig.js} +75 -17
  515. package/dist/{lib → src/lib}/context.d.ts +6 -12
  516. package/dist/{lib → src/lib}/context.js +5 -5
  517. package/dist/src/lib/logger.d.ts +1 -0
  518. package/dist/src/lib/logger.js +1 -0
  519. package/dist/src/lib/mongo.d.ts +58 -0
  520. package/dist/src/lib/mongo.js +96 -0
  521. package/dist/src/lib/queue.d.ts +72 -0
  522. package/dist/src/lib/queue.js +152 -0
  523. package/dist/src/lib/redis.d.ts +28 -0
  524. package/dist/src/lib/redis.js +72 -0
  525. package/dist/{lib → src/lib}/signing.d.ts +2 -2
  526. package/dist/src/lib/signing.js +210 -0
  527. package/dist/src/lib/signingConfig.d.ts +40 -0
  528. package/dist/src/lib/signingConfig.js +28 -0
  529. package/dist/src/server.d.ts +146 -0
  530. package/dist/src/server.js +469 -0
  531. package/dist/src/shared/lib/HttpError.d.ts +1 -0
  532. package/dist/src/shared/lib/HttpError.js +2 -0
  533. package/dist/src/shared/lib/constants.d.ts +10 -0
  534. package/dist/src/shared/lib/crypto.d.ts +43 -0
  535. package/dist/src/shared/lib/crypto.js +74 -0
  536. package/dist/src/shared/lib/signing.d.ts +52 -0
  537. package/dist/{lib → src/shared/lib}/signing.js +35 -8
  538. package/dist/src/testing.d.ts +34 -0
  539. package/dist/src/testing.js +93 -0
  540. package/package.json +60 -24
  541. package/dist/adapters/memoryAuth.d.ts +0 -52
  542. package/dist/adapters/memoryAuth.js +0 -749
  543. package/dist/adapters/memoryStorage.d.ts +0 -3
  544. package/dist/adapters/memoryStorage.js +0 -44
  545. package/dist/adapters/mongoAuth.d.ts +0 -2
  546. package/dist/adapters/mongoAuth.js +0 -403
  547. package/dist/adapters/sqliteAuth.d.ts +0 -72
  548. package/dist/adapters/sqliteAuth.js +0 -858
  549. package/dist/app.d.ts +0 -559
  550. package/dist/app.js +0 -651
  551. package/dist/entrypoints/mongo.d.ts +0 -5
  552. package/dist/entrypoints/mongo.js +0 -4
  553. package/dist/entrypoints/queue.d.ts +0 -2
  554. package/dist/entrypoints/queue.js +0 -1
  555. package/dist/entrypoints/redis.d.ts +0 -1
  556. package/dist/entrypoints/redis.js +0 -1
  557. package/dist/index.d.ts +0 -117
  558. package/dist/index.js +0 -88
  559. package/dist/lib/appConfig.d.ts +0 -275
  560. package/dist/lib/auditLog.d.ts +0 -58
  561. package/dist/lib/auditLog.js +0 -218
  562. package/dist/lib/authAdapter.d.ts +0 -246
  563. package/dist/lib/authAdapter.js +0 -7
  564. package/dist/lib/authRateLimit.d.ts +0 -13
  565. package/dist/lib/authRateLimit.js +0 -117
  566. package/dist/lib/clientIp.d.ts +0 -14
  567. package/dist/lib/credentialStuffing.d.ts +0 -31
  568. package/dist/lib/credentialStuffing.js +0 -77
  569. package/dist/lib/crypto.d.ts +0 -11
  570. package/dist/lib/crypto.js +0 -22
  571. package/dist/lib/deletionCancelToken.d.ts +0 -12
  572. package/dist/lib/deletionCancelToken.js +0 -88
  573. package/dist/lib/emailVerification.d.ts +0 -19
  574. package/dist/lib/emailVerification.js +0 -129
  575. package/dist/lib/fingerprint.js +0 -36
  576. package/dist/lib/idempotency.js +0 -182
  577. package/dist/lib/jwks.d.ts +0 -25
  578. package/dist/lib/jwks.js +0 -51
  579. package/dist/lib/jwt.d.ts +0 -15
  580. package/dist/lib/jwt.js +0 -111
  581. package/dist/lib/metrics.d.ts +0 -14
  582. package/dist/lib/mfaChallenge.d.ts +0 -55
  583. package/dist/lib/mfaChallenge.js +0 -398
  584. package/dist/lib/mongo.d.ts +0 -39
  585. package/dist/lib/mongo.js +0 -124
  586. package/dist/lib/oauth.d.ts +0 -40
  587. package/dist/lib/oauth.js +0 -101
  588. package/dist/lib/oauthCode.d.ts +0 -15
  589. package/dist/lib/oauthCode.js +0 -95
  590. package/dist/lib/pagination.d.ts +0 -119
  591. package/dist/lib/pagination.js +0 -166
  592. package/dist/lib/queue.d.ts +0 -37
  593. package/dist/lib/queue.js +0 -117
  594. package/dist/lib/redis.d.ts +0 -9
  595. package/dist/lib/redis.js +0 -61
  596. package/dist/lib/resetPassword.d.ts +0 -12
  597. package/dist/lib/resetPassword.js +0 -93
  598. package/dist/lib/roles.d.ts +0 -7
  599. package/dist/lib/roles.js +0 -49
  600. package/dist/lib/saml.d.ts +0 -25
  601. package/dist/lib/saml.js +0 -64
  602. package/dist/lib/securityEvents.d.ts +0 -28
  603. package/dist/lib/securityEvents.js +0 -26
  604. package/dist/lib/session.d.ts +0 -49
  605. package/dist/lib/session.js +0 -597
  606. package/dist/lib/tenant.d.ts +0 -15
  607. package/dist/lib/tenant.js +0 -65
  608. package/dist/lib/upload.js +0 -112
  609. package/dist/lib/uploadRegistry.d.ts +0 -18
  610. package/dist/lib/uploadRegistry.js +0 -83
  611. package/dist/lib/ws.d.ts +0 -22
  612. package/dist/lib/ws.js +0 -96
  613. package/dist/lib/wsHeartbeat.d.ts +0 -12
  614. package/dist/lib/wsHeartbeat.js +0 -57
  615. package/dist/lib/wsMessages.d.ts +0 -40
  616. package/dist/lib/wsMessages.js +0 -330
  617. package/dist/lib/wsPresence.d.ts +0 -25
  618. package/dist/lib/wsPresence.js +0 -99
  619. package/dist/middleware/auditLog.js +0 -39
  620. package/dist/middleware/bearerAuth.d.ts +0 -2
  621. package/dist/middleware/bearerAuth.js +0 -11
  622. package/dist/middleware/cacheResponse.d.ts +0 -15
  623. package/dist/middleware/cacheResponse.js +0 -178
  624. package/dist/middleware/captcha.js +0 -36
  625. package/dist/middleware/csrf.js +0 -129
  626. package/dist/middleware/identify.d.ts +0 -3
  627. package/dist/middleware/identify.js +0 -122
  628. package/dist/middleware/index.js +0 -1
  629. package/dist/middleware/metrics.d.ts +0 -9
  630. package/dist/middleware/metrics.js +0 -26
  631. package/dist/middleware/rateLimit.js +0 -22
  632. package/dist/middleware/requestId.d.ts +0 -3
  633. package/dist/middleware/scimAuth.d.ts +0 -8
  634. package/dist/middleware/scimAuth.js +0 -29
  635. package/dist/middleware/tenant.d.ts +0 -5
  636. package/dist/middleware/upload.d.ts +0 -5
  637. package/dist/middleware/userAuth.d.ts +0 -3
  638. package/dist/middleware/userAuth.js +0 -6
  639. package/dist/models/AuditLog.d.ts +0 -30
  640. package/dist/models/AuditLog.js +0 -39
  641. package/dist/models/AuthUser.js +0 -55
  642. package/dist/models/Group.d.ts +0 -21
  643. package/dist/models/Group.js +0 -28
  644. package/dist/models/GroupMembership.js +0 -25
  645. package/dist/models/TenantRole.d.ts +0 -15
  646. package/dist/models/TenantRole.js +0 -23
  647. package/dist/routes/auth.d.ts +0 -12
  648. package/dist/routes/auth.js +0 -744
  649. package/dist/routes/groups.js +0 -346
  650. package/dist/routes/health.d.ts +0 -1
  651. package/dist/routes/health.js +0 -22
  652. package/dist/routes/home.d.ts +0 -1
  653. package/dist/routes/home.js +0 -16
  654. package/dist/routes/jobs.d.ts +0 -2
  655. package/dist/routes/m2m.d.ts +0 -2
  656. package/dist/routes/m2m.js +0 -72
  657. package/dist/routes/metrics.d.ts +0 -8
  658. package/dist/routes/metrics.js +0 -55
  659. package/dist/routes/mfa.d.ts +0 -5
  660. package/dist/routes/mfa.js +0 -628
  661. package/dist/routes/oauth.d.ts +0 -2
  662. package/dist/routes/oauth.js +0 -520
  663. package/dist/routes/oidc.d.ts +0 -2
  664. package/dist/routes/oidc.js +0 -29
  665. package/dist/routes/passkey.d.ts +0 -1
  666. package/dist/routes/passkey.js +0 -157
  667. package/dist/routes/saml.d.ts +0 -2
  668. package/dist/routes/saml.js +0 -86
  669. package/dist/routes/scim.d.ts +0 -2
  670. package/dist/routes/scim.js +0 -255
  671. package/dist/routes/uploads.js +0 -227
  672. package/dist/schemas/auth.js +0 -30
  673. package/dist/server.d.ts +0 -57
  674. package/dist/server.js +0 -112
  675. package/dist/services/auth.d.ts +0 -29
  676. package/dist/services/auth.js +0 -238
  677. package/dist/ws/index.d.ts +0 -10
  678. package/dist/ws/index.js +0 -39
  679. package/docs/sections/adding-middleware/full.md +0 -35
  680. package/docs/sections/adding-models/full.md +0 -125
  681. package/docs/sections/adding-models/overview.md +0 -13
  682. package/docs/sections/adding-routes/full.md +0 -182
  683. package/docs/sections/adding-routes/overview.md +0 -23
  684. package/docs/sections/auth-flow/full.md +0 -790
  685. package/docs/sections/auth-flow/overview.md +0 -10
  686. package/docs/sections/auth-security-examples/full.md +0 -388
  687. package/docs/sections/authentication/full.md +0 -130
  688. package/docs/sections/authentication/overview.md +0 -5
  689. package/docs/sections/cli/full.md +0 -42
  690. package/docs/sections/configuration/full.md +0 -172
  691. package/docs/sections/configuration/overview.md +0 -18
  692. package/docs/sections/configuration-example/full.md +0 -117
  693. package/docs/sections/configuration-example/overview.md +0 -30
  694. package/docs/sections/documentation/full.md +0 -171
  695. package/docs/sections/environment-variables/full.md +0 -55
  696. package/docs/sections/exports/full.md +0 -123
  697. package/docs/sections/extending-context/full.md +0 -59
  698. package/docs/sections/header.md +0 -3
  699. package/docs/sections/installation/full.md +0 -6
  700. package/docs/sections/jobs/full.md +0 -140
  701. package/docs/sections/jobs/overview.md +0 -15
  702. package/docs/sections/logging/full.md +0 -83
  703. package/docs/sections/metrics/full.md +0 -131
  704. package/docs/sections/mongodb-connections/full.md +0 -45
  705. package/docs/sections/mongodb-connections/overview.md +0 -7
  706. package/docs/sections/multi-tenancy/full.md +0 -66
  707. package/docs/sections/multi-tenancy/overview.md +0 -15
  708. package/docs/sections/oauth/full.md +0 -189
  709. package/docs/sections/oauth/overview.md +0 -16
  710. package/docs/sections/package-development/full.md +0 -7
  711. package/docs/sections/pagination/full.md +0 -93
  712. package/docs/sections/passkey-login/full.md +0 -90
  713. package/docs/sections/passkey-login/overview.md +0 -1
  714. package/docs/sections/peer-dependencies/full.md +0 -47
  715. package/docs/sections/quick-start/full.md +0 -43
  716. package/docs/sections/response-caching/full.md +0 -117
  717. package/docs/sections/response-caching/overview.md +0 -13
  718. package/docs/sections/roles/full.md +0 -225
  719. package/docs/sections/roles/overview.md +0 -14
  720. package/docs/sections/running-without-redis/full.md +0 -16
  721. package/docs/sections/running-without-redis-or-mongodb/full.md +0 -60
  722. package/docs/sections/signing/full.md +0 -203
  723. package/docs/sections/stack/full.md +0 -10
  724. package/docs/sections/uploads/full.md +0 -208
  725. package/docs/sections/versioning/full.md +0 -85
  726. package/docs/sections/webhook-auth/full.md +0 -100
  727. package/docs/sections/websocket/full.md +0 -196
  728. package/docs/sections/websocket/overview.md +0 -5
  729. package/docs/sections/websocket-rooms/full.md +0 -102
  730. package/docs/sections/websocket-rooms/overview.md +0 -5
  731. /package/dist/{lib/storageAdapter.js → packages/bunshot-admin/src/types/env.js} +0 -0
  732. /package/dist/{lib → packages/bunshot-auth/src/lib}/fingerprint.d.ts +0 -0
  733. /package/dist/{lib → packages/bunshot-auth/src/lib}/logger.d.ts +0 -0
  734. /package/dist/{lib → packages/bunshot-core/src}/constants.d.ts +0 -0
  735. /package/dist/{lib → packages/bunshot-core/src}/storageAdapter.d.ts +0 -0
  736. /package/dist/{lib → src/framework/lib}/createDtoMapper.d.ts +0 -0
  737. /package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.d.ts +0 -0
  738. /package/dist/{middleware → src/framework/middleware}/cors.d.ts +0 -0
  739. /package/dist/{middleware → src/framework/middleware}/cors.js +0 -0
  740. /package/dist/{middleware → src/framework/middleware}/index.d.ts +0 -0
  741. /package/dist/{middleware → src/framework/middleware}/logger.js +0 -0
  742. /package/dist/{lib → src/shared/lib}/constants.js +0 -0
@@ -1,597 +0,0 @@
1
- import { getRedis } from "./redis";
2
- import { appConnection, mongoose } from "./mongo";
3
- import { getAppName, getPersistSessionMetadata, getIncludeInactiveSessions, getRotationGraceSeconds, getRefreshTokenExpiry } from "./appConfig";
4
- import { timingSafeEqual } from "./crypto";
5
- import { sqliteCreateSession, sqliteGetSession, sqliteDeleteSession, sqliteGetUserSessions, sqliteGetActiveSessionCount, sqliteEvictOldestSession, sqliteUpdateSessionLastActive, sqliteSetRefreshToken, sqliteGetSessionByRefreshToken, sqliteRotateRefreshToken, sqliteGetSessionFingerprint, sqliteSetSessionFingerprint, sqliteGetMfaVerifiedAt, sqliteSetMfaVerifiedAt, } from "../adapters/sqliteAuth";
6
- import { memoryCreateSession, memoryGetSession, memoryDeleteSession, memoryGetUserSessions, memoryGetActiveSessionCount, memoryEvictOldestSession, memoryUpdateSessionLastActive, memorySetRefreshToken, memoryGetSessionByRefreshToken, memoryRotateRefreshToken, memoryGetSessionFingerprint, memorySetSessionFingerprint, memoryGetMfaVerifiedAt, memorySetMfaVerifiedAt, } from "../adapters/memoryAuth";
7
- function getSessionModel() {
8
- if (appConnection.models["Session"])
9
- return appConnection.models["Session"];
10
- const { Schema } = mongoose;
11
- const sessionSchema = new Schema({
12
- sessionId: { type: String, required: true, unique: true },
13
- userId: { type: String, required: true, index: true },
14
- token: { type: String, default: null },
15
- createdAt: { type: Date, required: true },
16
- lastActiveAt: { type: Date, required: true },
17
- expiresAt: { type: Date, required: true },
18
- ipAddress: { type: String },
19
- userAgent: { type: String },
20
- refreshToken: { type: String, default: null },
21
- prevRefreshToken: { type: String, default: null },
22
- prevTokenExpiresAt: { type: Date, default: null },
23
- fingerprint: { type: String, default: null },
24
- mfaVerifiedAt: { type: Number, default: null },
25
- }, { collection: "sessions", timestamps: false });
26
- sessionSchema.index({ refreshToken: 1 }, { unique: true, partialFilterExpression: { refreshToken: { $type: "string" } } });
27
- // Add TTL index only when metadata is not persisted — docs auto-delete at expiresAt.
28
- // When persisting, token is nulled (soft-delete) but the row is kept indefinitely.
29
- if (!getPersistSessionMetadata()) {
30
- sessionSchema.index({ expiresAt: 1 }, { expireAfterSeconds: 0 });
31
- }
32
- return appConnection.model("Session", sessionSchema);
33
- }
34
- let _store = "redis";
35
- export const setSessionStore = (store) => { _store = store; };
36
- // ---------------------------------------------------------------------------
37
- // TTL
38
- // ---------------------------------------------------------------------------
39
- const TTL_SECONDS = 60 * 60 * 24 * 7; // 7 days
40
- const TTL_MS = TTL_SECONDS * 1000;
41
- // ---------------------------------------------------------------------------
42
- // Redis helpers
43
- // ---------------------------------------------------------------------------
44
- function redisSessionKey(sessionId) {
45
- return `session:${getAppName()}:${sessionId}`;
46
- }
47
- function redisUserSessionsKey(userId) {
48
- return `usersessions:${getAppName()}:${userId}`;
49
- }
50
- function redisRefreshTokenKey(refreshToken) {
51
- return `refreshtoken:${getAppName()}:${refreshToken}`;
52
- }
53
- async function redisCreateSession(userId, token, sessionId, metadata) {
54
- const now = Date.now();
55
- const expiresAt = now + TTL_MS;
56
- const record = JSON.stringify({
57
- sessionId, userId, token,
58
- createdAt: now, lastActiveAt: now, expiresAt,
59
- ipAddress: metadata?.ipAddress,
60
- userAgent: metadata?.userAgent,
61
- });
62
- const redis = getRedis();
63
- const persist = getPersistSessionMetadata();
64
- if (persist) {
65
- await redis.set(redisSessionKey(sessionId), record);
66
- }
67
- else {
68
- await redis.set(redisSessionKey(sessionId), record, "EX", TTL_SECONDS);
69
- }
70
- // Sorted set: score = createdAt (oldest first)
71
- await redis.zadd(redisUserSessionsKey(userId), now, sessionId);
72
- }
73
- async function redisGetSession(sessionId) {
74
- const raw = await getRedis().get(redisSessionKey(sessionId));
75
- if (!raw)
76
- return null;
77
- const rec = JSON.parse(raw);
78
- if (!rec.token)
79
- return null;
80
- if (rec.expiresAt <= Date.now())
81
- return null;
82
- return rec.token;
83
- }
84
- async function redisDeleteSession(sessionId) {
85
- const redis = getRedis();
86
- const raw = await redis.get(redisSessionKey(sessionId));
87
- if (!raw)
88
- return;
89
- const rec = JSON.parse(raw);
90
- const persist = getPersistSessionMetadata();
91
- // Clean up refresh token reverse-lookup keys
92
- if (rec.refreshToken)
93
- await redis.del(redisRefreshTokenKey(rec.refreshToken));
94
- if (rec.prevRefreshToken)
95
- await redis.del(redisRefreshTokenKey(rec.prevRefreshToken));
96
- if (persist) {
97
- const updated = { ...rec, token: null, refreshToken: null, prevRefreshToken: null, prevTokenExpiresAt: null };
98
- await redis.set(redisSessionKey(sessionId), JSON.stringify(updated));
99
- }
100
- else {
101
- await redis.del(redisSessionKey(sessionId));
102
- }
103
- if (!persist) {
104
- await redis.zrem(redisUserSessionsKey(rec.userId), sessionId);
105
- }
106
- }
107
- async function redisGetUserSessions(userId) {
108
- const redis = getRedis();
109
- const sessionIds = await redis.zrange(redisUserSessionsKey(userId), 0, -1);
110
- if (!sessionIds.length)
111
- return [];
112
- const now = Date.now();
113
- const raws = await redis.mget(...sessionIds.map(redisSessionKey));
114
- const results = [];
115
- const toRemove = [];
116
- for (let i = 0; i < sessionIds.length; i++) {
117
- const raw = raws[i];
118
- if (!raw) {
119
- toRemove.push(sessionIds[i]);
120
- continue;
121
- }
122
- const rec = JSON.parse(raw);
123
- const isActive = !!rec.token && rec.expiresAt > now;
124
- if (!isActive && !getPersistSessionMetadata()) {
125
- toRemove.push(sessionIds[i]);
126
- continue;
127
- }
128
- if (!isActive && !getIncludeInactiveSessions())
129
- continue;
130
- results.push({
131
- sessionId: rec.sessionId,
132
- createdAt: Number(rec.createdAt),
133
- lastActiveAt: Number(rec.lastActiveAt),
134
- expiresAt: Number(rec.expiresAt),
135
- ipAddress: rec.ipAddress,
136
- userAgent: rec.userAgent,
137
- isActive,
138
- });
139
- }
140
- if (toRemove.length) {
141
- await redis.zrem(redisUserSessionsKey(userId), ...toRemove);
142
- }
143
- return results;
144
- }
145
- async function redisGetActiveSessionCount(userId) {
146
- const sessions = await redisGetUserSessions(userId);
147
- return sessions.filter((s) => s.isActive).length;
148
- }
149
- async function redisEvictOldestSession(userId) {
150
- const redis = getRedis();
151
- // Sorted set is ordered oldest-first (score = createdAt)
152
- const sessionIds = await redis.zrange(redisUserSessionsKey(userId), 0, -1);
153
- const now = Date.now();
154
- for (const sessionId of sessionIds) {
155
- const raw = await redis.get(redisSessionKey(sessionId));
156
- if (!raw) {
157
- await redis.zrem(redisUserSessionsKey(userId), sessionId);
158
- continue;
159
- }
160
- const rec = JSON.parse(raw);
161
- if (rec.token && rec.expiresAt > now) {
162
- await redisDeleteSession(sessionId);
163
- return;
164
- }
165
- }
166
- }
167
- async function redisUpdateSessionLastActive(sessionId) {
168
- const redis = getRedis();
169
- const raw = await redis.get(redisSessionKey(sessionId));
170
- if (!raw)
171
- return;
172
- const rec = JSON.parse(raw);
173
- rec.lastActiveAt = Date.now();
174
- if (getPersistSessionMetadata()) {
175
- await redis.set(redisSessionKey(sessionId), JSON.stringify(rec));
176
- }
177
- else {
178
- const now = Date.now();
179
- if (rec.expiresAt <= now) {
180
- await redisDeleteSession(sessionId);
181
- return;
182
- }
183
- const ttlRemaining = Math.max(1, Math.ceil((rec.expiresAt - now) / 1000));
184
- await redis.set(redisSessionKey(sessionId), JSON.stringify(rec), "EX", ttlRemaining);
185
- }
186
- }
187
- async function redisSetRefreshToken(sessionId, refreshToken) {
188
- const redis = getRedis();
189
- const raw = await redis.get(redisSessionKey(sessionId));
190
- if (!raw)
191
- return;
192
- const rec = JSON.parse(raw);
193
- rec.refreshToken = refreshToken;
194
- const refreshExpiry = getRefreshTokenExpiry();
195
- await redis.set(redisSessionKey(sessionId), JSON.stringify(rec));
196
- await redis.set(redisRefreshTokenKey(refreshToken), sessionId, "EX", refreshExpiry);
197
- }
198
- async function redisGetSessionByRefreshToken(refreshToken) {
199
- const redis = getRedis();
200
- const sessionId = await redis.get(redisRefreshTokenKey(refreshToken));
201
- if (!sessionId)
202
- return null;
203
- const raw = await redis.get(redisSessionKey(sessionId));
204
- if (!raw)
205
- return null;
206
- const rec = JSON.parse(raw);
207
- // Current refresh token matches
208
- if (timingSafeEqual(rec.refreshToken ?? "", refreshToken)) {
209
- return { sessionId: rec.sessionId, userId: rec.userId, newRefreshToken: refreshToken };
210
- }
211
- // Check grace window: old token used within grace period
212
- if (timingSafeEqual(rec.prevRefreshToken ?? "", refreshToken) && rec.prevTokenExpiresAt && rec.prevTokenExpiresAt > Date.now()) {
213
- // Return current refresh token — client missed the rotation response
214
- return { sessionId: rec.sessionId, userId: rec.userId, newRefreshToken: rec.refreshToken };
215
- }
216
- // Old token used after grace window — token family theft detected, invalidate session
217
- if (timingSafeEqual(rec.prevRefreshToken ?? "", refreshToken)) {
218
- await redisDeleteSession(sessionId);
219
- return null;
220
- }
221
- return null;
222
- }
223
- async function redisRotateRefreshToken(sessionId, newRefreshToken, newAccessToken) {
224
- const redis = getRedis();
225
- const raw = await redis.get(redisSessionKey(sessionId));
226
- if (!raw)
227
- return;
228
- const rec = JSON.parse(raw);
229
- const graceSeconds = getRotationGraceSeconds();
230
- const refreshExpiry = getRefreshTokenExpiry();
231
- // Move current to prev with grace window
232
- const oldRefreshToken = rec.refreshToken;
233
- rec.prevRefreshToken = oldRefreshToken;
234
- rec.prevTokenExpiresAt = Date.now() + graceSeconds * 1000;
235
- rec.refreshToken = newRefreshToken;
236
- rec.token = newAccessToken;
237
- await redis.set(redisSessionKey(sessionId), JSON.stringify(rec));
238
- // Set new reverse-lookup with full refresh expiry
239
- await redis.set(redisRefreshTokenKey(newRefreshToken), sessionId, "EX", refreshExpiry);
240
- // Update old reverse-lookup to expire after grace window.
241
- // Use a minimum TTL of 60s so that theft detection still works when grace is 0.
242
- if (oldRefreshToken) {
243
- const oldKeyTtl = Math.max(graceSeconds, 60);
244
- await redis.expire(redisRefreshTokenKey(oldRefreshToken), oldKeyTtl);
245
- }
246
- }
247
- // ---------------------------------------------------------------------------
248
- // Mongo helpers
249
- // ---------------------------------------------------------------------------
250
- async function mongoGetUserSessions(userId) {
251
- const now = new Date();
252
- const includeInactive = getIncludeInactiveSessions();
253
- const persist = getPersistSessionMetadata();
254
- const query = { userId };
255
- if (!includeInactive) {
256
- query.token = { $ne: null };
257
- query.expiresAt = { $gt: now };
258
- }
259
- const docs = await getSessionModel().find(query).lean();
260
- const results = [];
261
- for (const doc of docs) {
262
- const isActive = !!doc.token && doc.expiresAt > now;
263
- if (!isActive && !persist)
264
- continue;
265
- if (!isActive && !includeInactive)
266
- continue;
267
- results.push({
268
- sessionId: doc.sessionId,
269
- createdAt: doc.createdAt.getTime(),
270
- lastActiveAt: doc.lastActiveAt.getTime(),
271
- expiresAt: doc.expiresAt.getTime(),
272
- ipAddress: doc.ipAddress,
273
- userAgent: doc.userAgent,
274
- isActive,
275
- });
276
- }
277
- return results;
278
- }
279
- async function mongoSetRefreshToken(sessionId, refreshToken) {
280
- await getSessionModel().updateOne({ sessionId }, { $set: { refreshToken } });
281
- }
282
- async function mongoGetSessionByRefreshToken(refreshToken) {
283
- const Session = getSessionModel();
284
- // Check current refresh token
285
- let doc = await Session.findOne({ refreshToken }).lean();
286
- if (doc) {
287
- return { sessionId: doc.sessionId, userId: doc.userId, newRefreshToken: refreshToken };
288
- }
289
- // Check previous refresh token (grace window)
290
- doc = await Session.findOne({ prevRefreshToken: refreshToken }).lean();
291
- if (!doc)
292
- return null;
293
- if (doc.prevTokenExpiresAt && doc.prevTokenExpiresAt > new Date()) {
294
- // Within grace window — return current refresh token
295
- return { sessionId: doc.sessionId, userId: doc.userId, newRefreshToken: doc.refreshToken };
296
- }
297
- // Grace window expired — token family theft detected, invalidate session
298
- if (getPersistSessionMetadata()) {
299
- await Session.updateOne({ sessionId: doc.sessionId }, { $set: { token: null, refreshToken: null, prevRefreshToken: null, prevTokenExpiresAt: null } });
300
- }
301
- else {
302
- await Session.deleteOne({ sessionId: doc.sessionId });
303
- }
304
- return null;
305
- }
306
- async function mongoRotateRefreshToken(sessionId, newRefreshToken, newAccessToken) {
307
- const graceSeconds = getRotationGraceSeconds();
308
- const Session = getSessionModel();
309
- const doc = await Session.findOne({ sessionId });
310
- if (!doc)
311
- return;
312
- doc.prevRefreshToken = doc.refreshToken;
313
- doc.prevTokenExpiresAt = new Date(Date.now() + graceSeconds * 1000);
314
- doc.refreshToken = newRefreshToken;
315
- doc.token = newAccessToken;
316
- await doc.save();
317
- }
318
- // ---------------------------------------------------------------------------
319
- // Public API
320
- // ---------------------------------------------------------------------------
321
- export const createSession = async (userId, token, sessionId, metadata) => {
322
- if (_store === "memory") {
323
- memoryCreateSession(userId, token, sessionId, metadata);
324
- return;
325
- }
326
- if (_store === "sqlite") {
327
- sqliteCreateSession(userId, token, sessionId, metadata);
328
- return;
329
- }
330
- if (_store === "redis") {
331
- await redisCreateSession(userId, token, sessionId, metadata);
332
- return;
333
- }
334
- // mongo
335
- const now = new Date();
336
- const expiresAt = new Date(Date.now() + TTL_MS);
337
- await getSessionModel().create({
338
- sessionId, userId, token,
339
- createdAt: now, lastActiveAt: now, expiresAt,
340
- ipAddress: metadata?.ipAddress,
341
- userAgent: metadata?.userAgent,
342
- });
343
- };
344
- export const getSession = async (sessionId) => {
345
- if (_store === "memory")
346
- return memoryGetSession(sessionId);
347
- if (_store === "sqlite")
348
- return sqliteGetSession(sessionId);
349
- if (_store === "redis")
350
- return redisGetSession(sessionId);
351
- // mongo
352
- const doc = await getSessionModel()
353
- .findOne({ sessionId, expiresAt: { $gt: new Date() } }, "token")
354
- .lean();
355
- return doc?.token ?? null;
356
- };
357
- export const deleteSession = async (sessionId) => {
358
- if (_store === "memory") {
359
- memoryDeleteSession(sessionId);
360
- return;
361
- }
362
- if (_store === "sqlite") {
363
- sqliteDeleteSession(sessionId);
364
- return;
365
- }
366
- if (_store === "redis") {
367
- await redisDeleteSession(sessionId);
368
- return;
369
- }
370
- // mongo
371
- if (getPersistSessionMetadata()) {
372
- await getSessionModel().updateOne({ sessionId }, { $set: { token: null, refreshToken: null, prevRefreshToken: null, prevTokenExpiresAt: null } });
373
- }
374
- else {
375
- await getSessionModel().deleteOne({ sessionId });
376
- }
377
- };
378
- export const getUserSessions = async (userId) => {
379
- if (_store === "memory")
380
- return memoryGetUserSessions(userId);
381
- if (_store === "sqlite")
382
- return sqliteGetUserSessions(userId);
383
- if (_store === "redis")
384
- return redisGetUserSessions(userId);
385
- return mongoGetUserSessions(userId);
386
- };
387
- export const getActiveSessionCount = async (userId) => {
388
- if (_store === "memory")
389
- return memoryGetActiveSessionCount(userId);
390
- if (_store === "sqlite")
391
- return sqliteGetActiveSessionCount(userId);
392
- if (_store === "redis")
393
- return redisGetActiveSessionCount(userId);
394
- // mongo
395
- const now = new Date();
396
- return getSessionModel().countDocuments({ userId, token: { $ne: null }, expiresAt: { $gt: now } });
397
- };
398
- export const evictOldestSession = async (userId) => {
399
- if (_store === "memory") {
400
- memoryEvictOldestSession(userId);
401
- return;
402
- }
403
- if (_store === "sqlite") {
404
- sqliteEvictOldestSession(userId);
405
- return;
406
- }
407
- if (_store === "redis") {
408
- await redisEvictOldestSession(userId);
409
- return;
410
- }
411
- // mongo — oldest active session by createdAt
412
- const now = new Date();
413
- const oldest = await getSessionModel()
414
- .findOne({ userId, token: { $ne: null }, expiresAt: { $gt: now } }, "sessionId")
415
- .sort({ createdAt: 1 })
416
- .lean();
417
- if (oldest)
418
- await deleteSession(oldest.sessionId);
419
- };
420
- export const deleteUserSessions = async (userId) => {
421
- const sessions = await getUserSessions(userId);
422
- await Promise.all(sessions.map((s) => deleteSession(s.sessionId)));
423
- };
424
- export const updateSessionLastActive = async (sessionId) => {
425
- if (_store === "memory") {
426
- memoryUpdateSessionLastActive(sessionId);
427
- return;
428
- }
429
- if (_store === "sqlite") {
430
- sqliteUpdateSessionLastActive(sessionId);
431
- return;
432
- }
433
- if (_store === "redis") {
434
- await redisUpdateSessionLastActive(sessionId);
435
- return;
436
- }
437
- // mongo
438
- await getSessionModel().updateOne({ sessionId }, { $set: { lastActiveAt: new Date() } });
439
- };
440
- // ---------------------------------------------------------------------------
441
- // Refresh token API
442
- // ---------------------------------------------------------------------------
443
- /** Store a refresh token on an existing session (called after session creation). */
444
- export const setRefreshToken = async (sessionId, refreshToken) => {
445
- if (_store === "memory") {
446
- memorySetRefreshToken(sessionId, refreshToken);
447
- return;
448
- }
449
- if (_store === "sqlite") {
450
- sqliteSetRefreshToken(sessionId, refreshToken);
451
- return;
452
- }
453
- if (_store === "redis") {
454
- await redisSetRefreshToken(sessionId, refreshToken);
455
- return;
456
- }
457
- await mongoSetRefreshToken(sessionId, refreshToken);
458
- };
459
- /** Look up a session by refresh token. Handles grace window and theft detection. */
460
- export const getSessionByRefreshToken = async (refreshToken) => {
461
- if (_store === "memory")
462
- return memoryGetSessionByRefreshToken(refreshToken);
463
- if (_store === "sqlite")
464
- return sqliteGetSessionByRefreshToken(refreshToken);
465
- if (_store === "redis")
466
- return redisGetSessionByRefreshToken(refreshToken);
467
- return mongoGetSessionByRefreshToken(refreshToken);
468
- };
469
- /** Rotate the refresh token: move current to prev with grace window, set new token + access token. */
470
- export const rotateRefreshToken = async (sessionId, newRefreshToken, newAccessToken) => {
471
- if (_store === "memory") {
472
- memoryRotateRefreshToken(sessionId, newRefreshToken, newAccessToken);
473
- return;
474
- }
475
- if (_store === "sqlite") {
476
- sqliteRotateRefreshToken(sessionId, newRefreshToken, newAccessToken);
477
- return;
478
- }
479
- if (_store === "redis") {
480
- await redisRotateRefreshToken(sessionId, newRefreshToken, newAccessToken);
481
- return;
482
- }
483
- await mongoRotateRefreshToken(sessionId, newRefreshToken, newAccessToken);
484
- };
485
- // ---------------------------------------------------------------------------
486
- // Session fingerprint API (session binding feature)
487
- // ---------------------------------------------------------------------------
488
- /** Read the stored fingerprint for a session. Returns null if not yet set. */
489
- export const getSessionFingerprint = async (sessionId) => {
490
- if (_store === "memory")
491
- return memoryGetSessionFingerprint(sessionId);
492
- if (_store === "sqlite")
493
- return sqliteGetSessionFingerprint(sessionId);
494
- if (_store === "redis") {
495
- const redis = getRedis();
496
- const raw = await redis.get(redisSessionKey(sessionId));
497
- if (!raw)
498
- return null;
499
- const rec = JSON.parse(raw);
500
- return rec.fingerprint ?? null;
501
- }
502
- // mongo
503
- const doc = await getSessionModel().findOne({ sessionId }, "fingerprint").lean();
504
- return doc?.fingerprint ?? null;
505
- };
506
- /** Store a fingerprint on an existing session. No-op if the session does not exist. */
507
- export const setSessionFingerprint = async (sessionId, fingerprint) => {
508
- if (_store === "memory") {
509
- memorySetSessionFingerprint(sessionId, fingerprint);
510
- return;
511
- }
512
- if (_store === "sqlite") {
513
- sqliteSetSessionFingerprint(sessionId, fingerprint);
514
- return;
515
- }
516
- if (_store === "redis") {
517
- const redis = getRedis();
518
- const raw = await redis.get(redisSessionKey(sessionId));
519
- if (!raw)
520
- return;
521
- const rec = JSON.parse(raw);
522
- rec.fingerprint = fingerprint;
523
- if (getPersistSessionMetadata()) {
524
- await redis.set(redisSessionKey(sessionId), JSON.stringify(rec));
525
- }
526
- else {
527
- const now = Date.now();
528
- if (rec.expiresAt <= now)
529
- return;
530
- const ttlRemaining = Math.max(1, Math.ceil((rec.expiresAt - now) / 1000));
531
- await redis.set(redisSessionKey(sessionId), JSON.stringify(rec), "EX", ttlRemaining);
532
- }
533
- return;
534
- }
535
- // mongo
536
- await getSessionModel().updateOne({ sessionId }, { $set: { fingerprint } });
537
- };
538
- // ---------------------------------------------------------------------------
539
- // Step-up MFA API (mfaVerifiedAt)
540
- // ---------------------------------------------------------------------------
541
- /**
542
- * Store the timestamp when MFA was last verified in the session metadata.
543
- * Used by requireStepUp middleware.
544
- */
545
- export const setMfaVerifiedAt = async (sessionId) => {
546
- const now = Math.floor(Date.now() / 1000);
547
- if (_store === "memory") {
548
- memorySetMfaVerifiedAt(sessionId, now);
549
- return;
550
- }
551
- if (_store === "sqlite") {
552
- sqliteSetMfaVerifiedAt(sessionId, now);
553
- return;
554
- }
555
- if (_store === "redis") {
556
- const redis = getRedis();
557
- const raw = await redis.get(redisSessionKey(sessionId));
558
- if (!raw)
559
- return;
560
- const rec = JSON.parse(raw);
561
- rec.mfaVerifiedAt = now;
562
- if (getPersistSessionMetadata()) {
563
- await redis.set(redisSessionKey(sessionId), JSON.stringify(rec));
564
- }
565
- else {
566
- const nowMs = Date.now();
567
- if (rec.expiresAt <= nowMs)
568
- return;
569
- const ttlRemaining = Math.max(1, Math.ceil((rec.expiresAt - nowMs) / 1000));
570
- await redis.set(redisSessionKey(sessionId), JSON.stringify(rec), "EX", ttlRemaining);
571
- }
572
- return;
573
- }
574
- // mongo
575
- await getSessionModel().updateOne({ sessionId }, { $set: { mfaVerifiedAt: now } });
576
- };
577
- /**
578
- * Get the Unix timestamp (seconds) when MFA was last verified for this session.
579
- * Returns null if MFA has never been verified or session not found.
580
- */
581
- export const getMfaVerifiedAt = async (sessionId) => {
582
- if (_store === "memory")
583
- return memoryGetMfaVerifiedAt(sessionId);
584
- if (_store === "sqlite")
585
- return sqliteGetMfaVerifiedAt(sessionId);
586
- if (_store === "redis") {
587
- const redis = getRedis();
588
- const raw = await redis.get(redisSessionKey(sessionId));
589
- if (!raw)
590
- return null;
591
- const rec = JSON.parse(raw);
592
- return rec.mfaVerifiedAt ?? null;
593
- }
594
- // mongo
595
- const doc = await getSessionModel().findOne({ sessionId }, "mfaVerifiedAt").lean();
596
- return doc?.mfaVerifiedAt ?? null;
597
- };
@@ -1,15 +0,0 @@
1
- export interface TenantInfo {
2
- tenantId: string;
3
- displayName?: string;
4
- config?: Record<string, unknown>;
5
- createdAt: Date;
6
- deletedAt?: Date | null;
7
- }
8
- export interface CreateTenantOptions {
9
- displayName?: string;
10
- config?: Record<string, unknown>;
11
- }
12
- export declare const createTenant: (tenantId: string, options?: CreateTenantOptions) => Promise<void>;
13
- export declare const deleteTenant: (tenantId: string) => Promise<void>;
14
- export declare const getTenant: (tenantId: string) => Promise<TenantInfo | null>;
15
- export declare const listTenants: () => Promise<TenantInfo[]>;
@@ -1,65 +0,0 @@
1
- import { authConnection, mongoose } from "./mongo";
2
- let _TenantModel = null;
3
- function getTenantModel() {
4
- if (!_TenantModel) {
5
- const { Schema } = mongoose;
6
- const schema = new Schema({
7
- tenantId: { type: String, required: true, unique: true },
8
- displayName: { type: String },
9
- config: { type: Schema.Types.Mixed },
10
- deletedAt: { type: Date, default: null },
11
- }, { timestamps: true });
12
- _TenantModel = authConnection.model("Tenant", schema);
13
- }
14
- return _TenantModel;
15
- }
16
- // Proxy for lazy model resolution (same pattern as AuthUser)
17
- const Tenant = new Proxy({}, {
18
- get(_, prop) {
19
- const model = getTenantModel();
20
- const val = model[prop];
21
- return typeof val === "function" ? val.bind(model) : val;
22
- },
23
- });
24
- export const createTenant = async (tenantId, options) => {
25
- const existing = await Tenant.findOne({ tenantId }).lean();
26
- if (existing && !existing.deletedAt) {
27
- throw new Error(`Tenant "${tenantId}" already exists`);
28
- }
29
- if (existing && existing.deletedAt) {
30
- // Reactivate soft-deleted tenant
31
- await Tenant.findOneAndUpdate({ tenantId }, { $set: { deletedAt: null, displayName: options?.displayName, config: options?.config } });
32
- return;
33
- }
34
- await Tenant.create({
35
- tenantId,
36
- displayName: options?.displayName,
37
- config: options?.config,
38
- });
39
- };
40
- export const deleteTenant = async (tenantId) => {
41
- const { invalidateTenantCache } = await import("../middleware/tenant");
42
- // Soft-delete
43
- await Tenant.findOneAndUpdate({ tenantId }, { $set: { deletedAt: new Date() } });
44
- invalidateTenantCache(tenantId);
45
- };
46
- export const getTenant = async (tenantId) => {
47
- const doc = await Tenant.findOne({ tenantId, deletedAt: null }).lean();
48
- if (!doc)
49
- return null;
50
- return {
51
- tenantId: doc.tenantId,
52
- displayName: doc.displayName,
53
- config: doc.config,
54
- createdAt: doc.createdAt,
55
- };
56
- };
57
- export const listTenants = async () => {
58
- const docs = await Tenant.find({ deletedAt: null }).lean();
59
- return docs.map((doc) => ({
60
- tenantId: doc.tenantId,
61
- displayName: doc.displayName,
62
- config: doc.config,
63
- createdAt: doc.createdAt,
64
- }));
65
- };