@lastshotlabs/bunshot 0.0.27 → 0.1.0

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 +211 -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 +277 -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 +64 -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 +100 -26
  541. package/dist/adapters/memoryAuth.d.ts +0 -52
  542. package/dist/adapters/memoryAuth.js +0 -749
  543. package/dist/adapters/memoryStorage.d.ts +0 -3
  544. package/dist/adapters/memoryStorage.js +0 -44
  545. package/dist/adapters/mongoAuth.d.ts +0 -2
  546. package/dist/adapters/mongoAuth.js +0 -403
  547. package/dist/adapters/sqliteAuth.d.ts +0 -72
  548. package/dist/adapters/sqliteAuth.js +0 -858
  549. package/dist/app.d.ts +0 -559
  550. package/dist/app.js +0 -651
  551. package/dist/entrypoints/mongo.d.ts +0 -5
  552. package/dist/entrypoints/mongo.js +0 -4
  553. package/dist/entrypoints/queue.d.ts +0 -2
  554. package/dist/entrypoints/queue.js +0 -1
  555. package/dist/entrypoints/redis.d.ts +0 -1
  556. package/dist/entrypoints/redis.js +0 -1
  557. package/dist/index.d.ts +0 -117
  558. package/dist/index.js +0 -88
  559. package/dist/lib/appConfig.d.ts +0 -275
  560. package/dist/lib/auditLog.d.ts +0 -58
  561. package/dist/lib/auditLog.js +0 -218
  562. package/dist/lib/authAdapter.d.ts +0 -246
  563. package/dist/lib/authAdapter.js +0 -7
  564. package/dist/lib/authRateLimit.d.ts +0 -13
  565. package/dist/lib/authRateLimit.js +0 -117
  566. package/dist/lib/clientIp.d.ts +0 -14
  567. package/dist/lib/credentialStuffing.d.ts +0 -31
  568. package/dist/lib/credentialStuffing.js +0 -77
  569. package/dist/lib/crypto.d.ts +0 -11
  570. package/dist/lib/crypto.js +0 -22
  571. package/dist/lib/deletionCancelToken.d.ts +0 -12
  572. package/dist/lib/deletionCancelToken.js +0 -88
  573. package/dist/lib/emailVerification.d.ts +0 -19
  574. package/dist/lib/emailVerification.js +0 -129
  575. package/dist/lib/fingerprint.js +0 -36
  576. package/dist/lib/idempotency.js +0 -182
  577. package/dist/lib/jwks.d.ts +0 -25
  578. package/dist/lib/jwks.js +0 -51
  579. package/dist/lib/jwt.d.ts +0 -15
  580. package/dist/lib/jwt.js +0 -111
  581. package/dist/lib/metrics.d.ts +0 -14
  582. package/dist/lib/mfaChallenge.d.ts +0 -55
  583. package/dist/lib/mfaChallenge.js +0 -398
  584. package/dist/lib/mongo.d.ts +0 -39
  585. package/dist/lib/mongo.js +0 -124
  586. package/dist/lib/oauth.d.ts +0 -40
  587. package/dist/lib/oauth.js +0 -101
  588. package/dist/lib/oauthCode.d.ts +0 -15
  589. package/dist/lib/oauthCode.js +0 -95
  590. package/dist/lib/pagination.d.ts +0 -119
  591. package/dist/lib/pagination.js +0 -166
  592. package/dist/lib/queue.d.ts +0 -37
  593. package/dist/lib/queue.js +0 -117
  594. package/dist/lib/redis.d.ts +0 -9
  595. package/dist/lib/redis.js +0 -61
  596. package/dist/lib/resetPassword.d.ts +0 -12
  597. package/dist/lib/resetPassword.js +0 -93
  598. package/dist/lib/roles.d.ts +0 -7
  599. package/dist/lib/roles.js +0 -49
  600. package/dist/lib/saml.d.ts +0 -25
  601. package/dist/lib/saml.js +0 -64
  602. package/dist/lib/securityEvents.d.ts +0 -28
  603. package/dist/lib/securityEvents.js +0 -26
  604. package/dist/lib/session.d.ts +0 -49
  605. package/dist/lib/session.js +0 -597
  606. package/dist/lib/tenant.d.ts +0 -15
  607. package/dist/lib/tenant.js +0 -65
  608. package/dist/lib/upload.js +0 -112
  609. package/dist/lib/uploadRegistry.d.ts +0 -18
  610. package/dist/lib/uploadRegistry.js +0 -83
  611. package/dist/lib/ws.d.ts +0 -22
  612. package/dist/lib/ws.js +0 -96
  613. package/dist/lib/wsHeartbeat.d.ts +0 -12
  614. package/dist/lib/wsHeartbeat.js +0 -57
  615. package/dist/lib/wsMessages.d.ts +0 -40
  616. package/dist/lib/wsMessages.js +0 -330
  617. package/dist/lib/wsPresence.d.ts +0 -25
  618. package/dist/lib/wsPresence.js +0 -99
  619. package/dist/middleware/auditLog.js +0 -39
  620. package/dist/middleware/bearerAuth.d.ts +0 -2
  621. package/dist/middleware/bearerAuth.js +0 -11
  622. package/dist/middleware/cacheResponse.d.ts +0 -15
  623. package/dist/middleware/cacheResponse.js +0 -178
  624. package/dist/middleware/captcha.js +0 -36
  625. package/dist/middleware/csrf.js +0 -129
  626. package/dist/middleware/identify.d.ts +0 -3
  627. package/dist/middleware/identify.js +0 -122
  628. package/dist/middleware/index.js +0 -1
  629. package/dist/middleware/metrics.d.ts +0 -9
  630. package/dist/middleware/metrics.js +0 -26
  631. package/dist/middleware/rateLimit.js +0 -22
  632. package/dist/middleware/requestId.d.ts +0 -3
  633. package/dist/middleware/scimAuth.d.ts +0 -8
  634. package/dist/middleware/scimAuth.js +0 -29
  635. package/dist/middleware/tenant.d.ts +0 -5
  636. package/dist/middleware/upload.d.ts +0 -5
  637. package/dist/middleware/userAuth.d.ts +0 -3
  638. package/dist/middleware/userAuth.js +0 -6
  639. package/dist/models/AuditLog.d.ts +0 -30
  640. package/dist/models/AuditLog.js +0 -39
  641. package/dist/models/AuthUser.js +0 -55
  642. package/dist/models/Group.d.ts +0 -21
  643. package/dist/models/Group.js +0 -28
  644. package/dist/models/GroupMembership.js +0 -25
  645. package/dist/models/TenantRole.d.ts +0 -15
  646. package/dist/models/TenantRole.js +0 -23
  647. package/dist/routes/auth.d.ts +0 -12
  648. package/dist/routes/auth.js +0 -744
  649. package/dist/routes/groups.js +0 -346
  650. package/dist/routes/health.d.ts +0 -1
  651. package/dist/routes/health.js +0 -22
  652. package/dist/routes/home.d.ts +0 -1
  653. package/dist/routes/home.js +0 -16
  654. package/dist/routes/jobs.d.ts +0 -2
  655. package/dist/routes/m2m.d.ts +0 -2
  656. package/dist/routes/m2m.js +0 -72
  657. package/dist/routes/metrics.d.ts +0 -8
  658. package/dist/routes/metrics.js +0 -55
  659. package/dist/routes/mfa.d.ts +0 -5
  660. package/dist/routes/mfa.js +0 -628
  661. package/dist/routes/oauth.d.ts +0 -2
  662. package/dist/routes/oauth.js +0 -520
  663. package/dist/routes/oidc.d.ts +0 -2
  664. package/dist/routes/oidc.js +0 -29
  665. package/dist/routes/passkey.d.ts +0 -1
  666. package/dist/routes/passkey.js +0 -157
  667. package/dist/routes/saml.d.ts +0 -2
  668. package/dist/routes/saml.js +0 -86
  669. package/dist/routes/scim.d.ts +0 -2
  670. package/dist/routes/scim.js +0 -255
  671. package/dist/routes/uploads.js +0 -227
  672. package/dist/schemas/auth.js +0 -30
  673. package/dist/server.d.ts +0 -57
  674. package/dist/server.js +0 -112
  675. package/dist/services/auth.d.ts +0 -29
  676. package/dist/services/auth.js +0 -238
  677. package/dist/ws/index.d.ts +0 -10
  678. package/dist/ws/index.js +0 -39
  679. package/docs/sections/adding-middleware/full.md +0 -35
  680. package/docs/sections/adding-models/full.md +0 -125
  681. package/docs/sections/adding-models/overview.md +0 -13
  682. package/docs/sections/adding-routes/full.md +0 -182
  683. package/docs/sections/adding-routes/overview.md +0 -23
  684. package/docs/sections/auth-flow/full.md +0 -790
  685. package/docs/sections/auth-flow/overview.md +0 -10
  686. package/docs/sections/auth-security-examples/full.md +0 -388
  687. package/docs/sections/authentication/full.md +0 -130
  688. package/docs/sections/authentication/overview.md +0 -5
  689. package/docs/sections/cli/full.md +0 -42
  690. package/docs/sections/configuration/full.md +0 -172
  691. package/docs/sections/configuration/overview.md +0 -18
  692. package/docs/sections/configuration-example/full.md +0 -117
  693. package/docs/sections/configuration-example/overview.md +0 -30
  694. package/docs/sections/documentation/full.md +0 -171
  695. package/docs/sections/environment-variables/full.md +0 -55
  696. package/docs/sections/exports/full.md +0 -123
  697. package/docs/sections/extending-context/full.md +0 -59
  698. package/docs/sections/header.md +0 -3
  699. package/docs/sections/installation/full.md +0 -6
  700. package/docs/sections/jobs/full.md +0 -140
  701. package/docs/sections/jobs/overview.md +0 -15
  702. package/docs/sections/logging/full.md +0 -83
  703. package/docs/sections/metrics/full.md +0 -131
  704. package/docs/sections/mongodb-connections/full.md +0 -45
  705. package/docs/sections/mongodb-connections/overview.md +0 -7
  706. package/docs/sections/multi-tenancy/full.md +0 -66
  707. package/docs/sections/multi-tenancy/overview.md +0 -15
  708. package/docs/sections/oauth/full.md +0 -189
  709. package/docs/sections/oauth/overview.md +0 -16
  710. package/docs/sections/package-development/full.md +0 -7
  711. package/docs/sections/pagination/full.md +0 -93
  712. package/docs/sections/passkey-login/full.md +0 -90
  713. package/docs/sections/passkey-login/overview.md +0 -1
  714. package/docs/sections/peer-dependencies/full.md +0 -47
  715. package/docs/sections/quick-start/full.md +0 -43
  716. package/docs/sections/response-caching/full.md +0 -117
  717. package/docs/sections/response-caching/overview.md +0 -13
  718. package/docs/sections/roles/full.md +0 -225
  719. package/docs/sections/roles/overview.md +0 -14
  720. package/docs/sections/running-without-redis/full.md +0 -16
  721. package/docs/sections/running-without-redis-or-mongodb/full.md +0 -60
  722. package/docs/sections/signing/full.md +0 -203
  723. package/docs/sections/stack/full.md +0 -10
  724. package/docs/sections/uploads/full.md +0 -208
  725. package/docs/sections/versioning/full.md +0 -85
  726. package/docs/sections/webhook-auth/full.md +0 -100
  727. package/docs/sections/websocket/full.md +0 -196
  728. package/docs/sections/websocket/overview.md +0 -5
  729. package/docs/sections/websocket-rooms/full.md +0 -102
  730. package/docs/sections/websocket-rooms/overview.md +0 -5
  731. /package/dist/{lib/storageAdapter.js → packages/bunshot-admin/src/types/env.js} +0 -0
  732. /package/dist/{lib → packages/bunshot-auth/src/lib}/fingerprint.d.ts +0 -0
  733. /package/dist/{lib → packages/bunshot-auth/src/lib}/logger.d.ts +0 -0
  734. /package/dist/{lib → packages/bunshot-core/src}/constants.d.ts +0 -0
  735. /package/dist/{lib → packages/bunshot-core/src}/storageAdapter.d.ts +0 -0
  736. /package/dist/{lib → src/framework/lib}/createDtoMapper.d.ts +0 -0
  737. /package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.d.ts +0 -0
  738. /package/dist/{middleware → src/framework/middleware}/cors.d.ts +0 -0
  739. /package/dist/{middleware → src/framework/middleware}/cors.js +0 -0
  740. /package/dist/{middleware → src/framework/middleware}/index.d.ts +0 -0
  741. /package/dist/{middleware → src/framework/middleware}/logger.js +0 -0
  742. /package/dist/{lib → src/shared/lib}/constants.js +0 -0
@@ -0,0 +1,255 @@
1
+ import { DEFAULT_MAX_ENTRIES, evictExpired, evictOldest, sha256 } from '../../../bunshot-core/src/index.js';
2
+ export function createMemoryOAuthReauthRepository() {
3
+ const states = new Map();
4
+ const confirmations = new Map();
5
+ return {
6
+ async storeState(hash, data, ttl) {
7
+ evictExpired(states);
8
+ evictOldest(states, DEFAULT_MAX_ENTRIES);
9
+ states.set(hash, { data, expiresAt: Date.now() + ttl * 1000 });
10
+ },
11
+ async consumeState(hash) {
12
+ const entry = states.get(hash);
13
+ if (!entry || entry.expiresAt <= Date.now()) {
14
+ states.delete(hash);
15
+ return null;
16
+ }
17
+ states.delete(hash);
18
+ return entry.data;
19
+ },
20
+ async storeConfirmation(hash, data, ttl) {
21
+ evictExpired(confirmations);
22
+ evictOldest(confirmations, DEFAULT_MAX_ENTRIES);
23
+ confirmations.set(hash, { data, expiresAt: Date.now() + ttl * 1000 });
24
+ },
25
+ async consumeConfirmation(hash) {
26
+ const entry = confirmations.get(hash);
27
+ if (!entry || entry.expiresAt <= Date.now()) {
28
+ confirmations.delete(hash);
29
+ return null;
30
+ }
31
+ confirmations.delete(hash);
32
+ return entry.data;
33
+ },
34
+ };
35
+ }
36
+ // ---------------------------------------------------------------------------
37
+ // SQLite repository factory
38
+ // ---------------------------------------------------------------------------
39
+ export function createSqliteOAuthReauthRepository(db) {
40
+ let initialized = false;
41
+ function init() {
42
+ if (initialized)
43
+ return;
44
+ db.run(`CREATE TABLE IF NOT EXISTS auth_oauth_reauth_states (
45
+ tokenHash TEXT PRIMARY KEY,
46
+ data TEXT NOT NULL,
47
+ expiresAt INTEGER NOT NULL
48
+ )`);
49
+ db.run('CREATE INDEX IF NOT EXISTS idx_auth_oauth_reauth_states_expiresAt ON auth_oauth_reauth_states(expiresAt)');
50
+ db.run(`CREATE TABLE IF NOT EXISTS auth_oauth_reauth_confirmations (
51
+ codeHash TEXT PRIMARY KEY,
52
+ data TEXT NOT NULL,
53
+ expiresAt INTEGER NOT NULL
54
+ )`);
55
+ db.run('CREATE INDEX IF NOT EXISTS idx_auth_oauth_reauth_confirmations_expiresAt ON auth_oauth_reauth_confirmations(expiresAt)');
56
+ initialized = true;
57
+ }
58
+ return {
59
+ async storeState(hash, data, ttl) {
60
+ init();
61
+ const expiresAt = Date.now() + ttl * 1000;
62
+ db.run(`INSERT INTO auth_oauth_reauth_states (tokenHash, data, expiresAt)
63
+ VALUES (?, ?, ?)
64
+ ON CONFLICT(tokenHash) DO UPDATE SET data = excluded.data, expiresAt = excluded.expiresAt`, [hash, JSON.stringify(data), expiresAt]);
65
+ },
66
+ async consumeState(hash) {
67
+ init();
68
+ const now = Date.now();
69
+ const row = db
70
+ .query('SELECT data FROM auth_oauth_reauth_states WHERE tokenHash = ? AND expiresAt > ?')
71
+ .get(hash, now);
72
+ db.run('DELETE FROM auth_oauth_reauth_states WHERE tokenHash = ?', [hash]);
73
+ if (!row)
74
+ return null;
75
+ return JSON.parse(row.data);
76
+ },
77
+ async storeConfirmation(hash, data, ttl) {
78
+ init();
79
+ const expiresAt = Date.now() + ttl * 1000;
80
+ db.run(`INSERT INTO auth_oauth_reauth_confirmations (codeHash, data, expiresAt)
81
+ VALUES (?, ?, ?)
82
+ ON CONFLICT(codeHash) DO UPDATE SET data = excluded.data, expiresAt = excluded.expiresAt`, [hash, JSON.stringify(data), expiresAt]);
83
+ },
84
+ async consumeConfirmation(hash) {
85
+ init();
86
+ const now = Date.now();
87
+ const row = db
88
+ .query('SELECT data FROM auth_oauth_reauth_confirmations WHERE codeHash = ? AND expiresAt > ?')
89
+ .get(hash, now);
90
+ db.run('DELETE FROM auth_oauth_reauth_confirmations WHERE codeHash = ?', [hash]);
91
+ if (!row)
92
+ return null;
93
+ return JSON.parse(row.data);
94
+ },
95
+ };
96
+ }
97
+ // ---------------------------------------------------------------------------
98
+ // Redis helpers
99
+ // ---------------------------------------------------------------------------
100
+ /** Atomically GET+DEL a key. Uses native GETDEL (Redis >= 6.2) with a Lua fallback. */
101
+ async function redisGetDel(redis, key) {
102
+ if (typeof redis.getdel === 'function') {
103
+ try {
104
+ return await redis.getdel(key);
105
+ }
106
+ catch (err) {
107
+ const msg = err?.message ?? '';
108
+ if (!/unknown command|ERR unknown command/i.test(msg))
109
+ throw err;
110
+ }
111
+ }
112
+ const result = await redis.eval("local v = redis.call('GET', KEYS[1])\nif v then redis.call('DEL', KEYS[1]) end\nreturn v", 1, key);
113
+ return result ?? null;
114
+ }
115
+ // ---------------------------------------------------------------------------
116
+ // Redis repository factory
117
+ // ---------------------------------------------------------------------------
118
+ export function createRedisOAuthReauthRepository(getRedis, appName) {
119
+ return {
120
+ async storeState(hash, data, ttl) {
121
+ await getRedis().set(`oauthreauth:${appName}:${hash}`, JSON.stringify(data), 'EX', ttl);
122
+ },
123
+ async consumeState(hash) {
124
+ const key = `oauthreauth:${appName}:${hash}`;
125
+ const raw = await redisGetDel(getRedis(), key);
126
+ if (!raw)
127
+ return null;
128
+ return JSON.parse(raw);
129
+ },
130
+ async storeConfirmation(hash, data, ttl) {
131
+ await getRedis().set(`oauthreauthconf:${appName}:${hash}`, JSON.stringify(data), 'EX', ttl);
132
+ },
133
+ async consumeConfirmation(hash) {
134
+ const key = `oauthreauthconf:${appName}:${hash}`;
135
+ const raw = await redisGetDel(getRedis(), key);
136
+ if (!raw)
137
+ return null;
138
+ return JSON.parse(raw);
139
+ },
140
+ };
141
+ }
142
+ export function createMongoOAuthReauthRepository(conn, mg) {
143
+ function getReauthModel() {
144
+ if (conn.models['OAuthReauth'])
145
+ return conn.models['OAuthReauth'];
146
+ const { Schema } = mg;
147
+ const schema = new Schema({
148
+ tokenHash: { type: String, required: true, unique: true },
149
+ userId: { type: String, required: true },
150
+ sessionId: { type: String, required: true },
151
+ provider: { type: String, required: true },
152
+ purpose: { type: String, required: true },
153
+ returnUrl: { type: String },
154
+ expiresAt: { type: Date, required: true, index: { expireAfterSeconds: 0 } },
155
+ }, { collection: 'oauth_reauth_states' });
156
+ return conn.model('OAuthReauth', schema);
157
+ }
158
+ function getConfirmationModel() {
159
+ if (conn.models['OAuthReauthConfirmation'])
160
+ return conn.models['OAuthReauthConfirmation'];
161
+ const { Schema } = mg;
162
+ const schema = new Schema({
163
+ codeHash: { type: String, required: true, unique: true },
164
+ userId: { type: String, required: true },
165
+ purpose: { type: String, required: true },
166
+ expiresAt: { type: Date, required: true, index: { expireAfterSeconds: 0 } },
167
+ }, { collection: 'oauth_reauth_confirmations' });
168
+ return conn.model('OAuthReauthConfirmation', schema);
169
+ }
170
+ return {
171
+ async storeState(hash, data, ttl) {
172
+ await getReauthModel().create({
173
+ tokenHash: hash,
174
+ userId: data.userId,
175
+ sessionId: data.sessionId,
176
+ provider: data.provider,
177
+ purpose: data.purpose,
178
+ returnUrl: data.returnUrl,
179
+ expiresAt: new Date(Date.now() + ttl * 1000),
180
+ });
181
+ },
182
+ async consumeState(hash) {
183
+ const doc = await getReauthModel()
184
+ .findOneAndDelete({ tokenHash: hash, expiresAt: { $gt: new Date() } })
185
+ .lean();
186
+ if (!doc)
187
+ return null;
188
+ return {
189
+ userId: doc.userId,
190
+ sessionId: doc.sessionId,
191
+ provider: doc.provider,
192
+ purpose: doc.purpose,
193
+ expiresAt: doc.expiresAt.getTime(),
194
+ returnUrl: doc.returnUrl,
195
+ };
196
+ },
197
+ async storeConfirmation(hash, data, ttl) {
198
+ await getConfirmationModel().create({
199
+ codeHash: hash,
200
+ userId: data.userId,
201
+ purpose: data.purpose,
202
+ expiresAt: new Date(Date.now() + ttl * 1000),
203
+ });
204
+ },
205
+ async consumeConfirmation(hash) {
206
+ const doc = await getConfirmationModel()
207
+ .findOneAndDelete({ codeHash: hash, expiresAt: { $gt: new Date() } })
208
+ .lean();
209
+ if (!doc)
210
+ return null;
211
+ return { userId: doc.userId, purpose: doc.purpose };
212
+ },
213
+ };
214
+ }
215
+ export const oauthReauthFactories = {
216
+ memory: () => createMemoryOAuthReauthRepository(),
217
+ sqlite: infra => createSqliteOAuthReauthRepository(infra.getSqliteDb()),
218
+ redis: infra => createRedisOAuthReauthRepository(infra.getRedis, infra.appName),
219
+ mongo: infra => {
220
+ const { conn, mg } = infra.getMongo();
221
+ return createMongoOAuthReauthRepository(conn, mg);
222
+ },
223
+ postgres: () => {
224
+ throw new Error('[bunshot-auth] postgres store is not yet supported for oauthReauth repository');
225
+ },
226
+ };
227
+ // ---------------------------------------------------------------------------
228
+ // Public API
229
+ // ---------------------------------------------------------------------------
230
+ const REAUTH_TTL = 300; // 5 minutes — matches OAuth state TTL
231
+ const CONFIRMATION_TTL = 300; // 5 minutes
232
+ export const createReauthState = async (repo, data) => {
233
+ const bytes = new Uint8Array(32);
234
+ crypto.getRandomValues(bytes);
235
+ const token = Buffer.from(bytes).toString('base64url');
236
+ const hash = sha256(token);
237
+ await repo.storeState(hash, data, REAUTH_TTL);
238
+ return token;
239
+ };
240
+ export const consumeReauthState = async (repo, token) => {
241
+ const hash = sha256(token);
242
+ return repo.consumeState(hash);
243
+ };
244
+ export const storeReauthConfirmation = async (repo, data) => {
245
+ const bytes = new Uint8Array(32);
246
+ crypto.getRandomValues(bytes);
247
+ const code = Buffer.from(bytes).toString('base64url');
248
+ const hash = sha256(code);
249
+ await repo.storeConfirmation(hash, data, CONFIRMATION_TTL);
250
+ return code;
251
+ };
252
+ export const consumeReauthConfirmation = async (repo, code) => {
253
+ const hash = sha256(code);
254
+ return repo.consumeConfirmation(hash);
255
+ };
@@ -0,0 +1,66 @@
1
+ export interface Organization {
2
+ id: string;
3
+ name: string;
4
+ slug: string;
5
+ tenantId?: string;
6
+ createdAt: Date;
7
+ metadata?: Record<string, unknown>;
8
+ }
9
+ export interface OrgMembership {
10
+ orgId: string;
11
+ userId: string;
12
+ roles: string[];
13
+ joinedAt: Date;
14
+ invitedBy?: string;
15
+ }
16
+ export interface OrgInvitation {
17
+ id: string;
18
+ orgId: string;
19
+ email: string;
20
+ roles: string[];
21
+ /** SHA-256 hashed token — never returned to client. The raw token is sent to the user. */
22
+ token: string;
23
+ expiresAt: Date;
24
+ invitedBy: string;
25
+ }
26
+ export interface OrganizationConfig {
27
+ enabled: boolean;
28
+ /** Role given to members added directly (not via invitation). Default: none. */
29
+ defaultMemberRole?: string;
30
+ /** Default invitation TTL in seconds. Default: 604800 (7 days). */
31
+ invitationTtlSeconds?: number;
32
+ }
33
+ export interface OrgService {
34
+ createOrg(data: {
35
+ name: string;
36
+ slug: string;
37
+ tenantId?: string;
38
+ metadata?: Record<string, unknown>;
39
+ }): Promise<Organization>;
40
+ getOrg(orgId: string): Promise<Organization | null>;
41
+ getOrgBySlug(slug: string): Promise<Organization | null>;
42
+ listOrgs(opts?: {
43
+ limit?: number;
44
+ cursor?: string;
45
+ }): Promise<{
46
+ orgs: Organization[];
47
+ nextCursor?: string;
48
+ }>;
49
+ updateOrg(orgId: string, data: Partial<Pick<Organization, 'name' | 'metadata'>>): Promise<Organization | null>;
50
+ deleteOrg(orgId: string): Promise<void>;
51
+ addOrgMember(orgId: string, userId: string, roles?: string[], invitedBy?: string): Promise<OrgMembership>;
52
+ removeOrgMember(orgId: string, userId: string): Promise<void>;
53
+ getOrgMembers(orgId: string): Promise<OrgMembership[]>;
54
+ getUserOrgs(userId: string): Promise<Organization[]>;
55
+ updateOrgMemberRoles(orgId: string, userId: string, roles: string[]): Promise<void>;
56
+ createOrgInvitation(orgId: string, email: string, roles: string[], invitedBy: string, ttlSeconds?: number): Promise<{
57
+ invitation: OrgInvitation;
58
+ token: string;
59
+ }>;
60
+ consumeOrgInvitation(token: string): Promise<OrgInvitation | null>;
61
+ listOrgInvitations(orgId: string): Promise<OrgInvitation[]>;
62
+ revokeOrgInvitation(invitationId: string): Promise<void>;
63
+ getDefaultInvitationTtl(): number;
64
+ getOrgConfig(): OrganizationConfig;
65
+ }
66
+ export declare function createOrgService(config: OrganizationConfig): OrgService;
@@ -0,0 +1,225 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { DEFAULT_MAX_ENTRIES, evictOldest, sha256 } from '../../../bunshot-core/src/index.js';
3
+ // ---------------------------------------------------------------------------
4
+ // Factory
5
+ // ---------------------------------------------------------------------------
6
+ const DEFAULT_INVITATION_TTL = 7 * 24 * 60 * 60; // 7 days in seconds
7
+ export function createOrgService(config) {
8
+ const _orgs = new Map(); // orgId -> Org
9
+ const _orgBySlug = new Map(); // slug -> orgId
10
+ const _memberships = new Map(); // "orgId:userId" -> membership
11
+ const _invitations = new Map(); // invitationId -> invitation
12
+ const _tokenIndex = new Map(); // hashedToken -> invitationId
13
+ function memberKey(orgId, userId) {
14
+ return `${orgId}:${userId}`;
15
+ }
16
+ // Purge expired invitations from both _invitations and _tokenIndex together
17
+ // so the two maps stay in sync. Called before each new invitation is stored.
18
+ function sweepExpiredInvitations() {
19
+ const now = new Date();
20
+ for (const [id, inv] of _invitations) {
21
+ if (inv.expiresAt < now) {
22
+ _tokenIndex.delete(inv.token);
23
+ _invitations.delete(id);
24
+ }
25
+ }
26
+ }
27
+ // Evict the oldest invitation from both _invitations and _tokenIndex together.
28
+ function evictOldestInvitation() {
29
+ const id = _invitations.keys().next().value;
30
+ if (id === undefined)
31
+ return;
32
+ const inv = _invitations.get(id);
33
+ _tokenIndex.delete(inv.token);
34
+ _invitations.delete(id);
35
+ }
36
+ return {
37
+ async createOrg(data) {
38
+ if (_orgBySlug.has(data.slug)) {
39
+ throw new Error(`Organization with slug "${data.slug}" already exists`);
40
+ }
41
+ const org = {
42
+ id: randomUUID(),
43
+ name: data.name,
44
+ slug: data.slug,
45
+ tenantId: data.tenantId,
46
+ createdAt: new Date(),
47
+ metadata: data.metadata,
48
+ };
49
+ evictOldest(_orgs, DEFAULT_MAX_ENTRIES);
50
+ _orgs.set(org.id, org);
51
+ _orgBySlug.set(org.slug, org.id);
52
+ return org;
53
+ },
54
+ async getOrg(orgId) {
55
+ return _orgs.get(orgId) ?? null;
56
+ },
57
+ async getOrgBySlug(slug) {
58
+ const orgId = _orgBySlug.get(slug);
59
+ if (!orgId)
60
+ return null;
61
+ return _orgs.get(orgId) ?? null;
62
+ },
63
+ async listOrgs(opts) {
64
+ const all = Array.from(_orgs.values()).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime() || a.id.localeCompare(b.id));
65
+ const limit = opts?.limit ?? 50;
66
+ let filtered = all;
67
+ if (opts?.cursor) {
68
+ try {
69
+ const c = JSON.parse(atob(opts.cursor));
70
+ filtered = all.filter(o => o.createdAt.getTime() > c.createdAt ||
71
+ (o.createdAt.getTime() === c.createdAt && o.id > c.id));
72
+ }
73
+ catch {
74
+ /* invalid cursor — start from beginning */
75
+ }
76
+ }
77
+ const page = filtered.slice(0, limit);
78
+ const nextCursor = filtered.length > limit
79
+ ? btoa(JSON.stringify({
80
+ createdAt: page[page.length - 1].createdAt.getTime(),
81
+ id: page[page.length - 1].id,
82
+ }))
83
+ : undefined;
84
+ return { orgs: page, nextCursor };
85
+ },
86
+ async updateOrg(orgId, data) {
87
+ const org = _orgs.get(orgId);
88
+ if (!org)
89
+ return null;
90
+ if (data.name !== undefined)
91
+ org.name = data.name;
92
+ if (data.metadata !== undefined)
93
+ org.metadata = data.metadata;
94
+ return org;
95
+ },
96
+ async deleteOrg(orgId) {
97
+ const org = _orgs.get(orgId);
98
+ if (!org)
99
+ return;
100
+ // Cascade: remove all memberships for this org
101
+ for (const [key, m] of _memberships) {
102
+ if (m.orgId === orgId)
103
+ _memberships.delete(key);
104
+ }
105
+ // Cascade: remove all pending invitations for this org (and their token indices)
106
+ for (const [id, inv] of _invitations) {
107
+ if (inv.orgId === orgId) {
108
+ _tokenIndex.delete(inv.token);
109
+ _invitations.delete(id);
110
+ }
111
+ }
112
+ _orgBySlug.delete(org.slug);
113
+ _orgs.delete(orgId);
114
+ },
115
+ async addOrgMember(orgId, userId, roles = [], invitedBy) {
116
+ const key = memberKey(orgId, userId);
117
+ if (_memberships.has(key)) {
118
+ throw new Error(`User "${userId}" is already a member of org "${orgId}"`);
119
+ }
120
+ const membership = {
121
+ orgId,
122
+ userId,
123
+ roles,
124
+ joinedAt: new Date(),
125
+ invitedBy,
126
+ };
127
+ evictOldest(_memberships, DEFAULT_MAX_ENTRIES);
128
+ _memberships.set(key, membership);
129
+ return membership;
130
+ },
131
+ async removeOrgMember(orgId, userId) {
132
+ _memberships.delete(memberKey(orgId, userId));
133
+ },
134
+ async getOrgMembers(orgId) {
135
+ const result = [];
136
+ for (const m of _memberships.values()) {
137
+ if (m.orgId === orgId)
138
+ result.push(m);
139
+ }
140
+ return result;
141
+ },
142
+ async getUserOrgs(userId) {
143
+ const orgs = [];
144
+ for (const m of _memberships.values()) {
145
+ if (m.userId === userId) {
146
+ const org = _orgs.get(m.orgId);
147
+ if (org)
148
+ orgs.push(org);
149
+ }
150
+ }
151
+ return orgs;
152
+ },
153
+ async updateOrgMemberRoles(orgId, userId, roles) {
154
+ const key = memberKey(orgId, userId);
155
+ const m = _memberships.get(key);
156
+ if (m) {
157
+ m.roles = roles;
158
+ }
159
+ },
160
+ async createOrgInvitation(orgId, email, roles, invitedBy, ttlSeconds) {
161
+ const rawToken = randomUUID();
162
+ const hashedToken = sha256(rawToken);
163
+ const ttl = ttlSeconds ?? config.invitationTtlSeconds ?? DEFAULT_INVITATION_TTL;
164
+ const invitation = {
165
+ id: randomUUID(),
166
+ orgId,
167
+ email,
168
+ roles,
169
+ token: hashedToken,
170
+ expiresAt: new Date(Date.now() + ttl * 1000),
171
+ invitedBy,
172
+ };
173
+ sweepExpiredInvitations();
174
+ while (_invitations.size >= DEFAULT_MAX_ENTRIES) {
175
+ evictOldestInvitation();
176
+ }
177
+ _invitations.set(invitation.id, invitation);
178
+ _tokenIndex.set(hashedToken, invitation.id);
179
+ return { invitation, token: rawToken };
180
+ },
181
+ async consumeOrgInvitation(token) {
182
+ const hashedToken = sha256(token);
183
+ const invitationId = _tokenIndex.get(hashedToken);
184
+ if (!invitationId)
185
+ return null;
186
+ const invitation = _invitations.get(invitationId);
187
+ if (!invitation)
188
+ return null;
189
+ // Check expiry
190
+ if (invitation.expiresAt < new Date()) {
191
+ // Clean up expired invitation
192
+ _tokenIndex.delete(hashedToken);
193
+ _invitations.delete(invitationId);
194
+ return null;
195
+ }
196
+ // Single-use: remove from store
197
+ _tokenIndex.delete(hashedToken);
198
+ _invitations.delete(invitationId);
199
+ return invitation;
200
+ },
201
+ async listOrgInvitations(orgId) {
202
+ const result = [];
203
+ const now = new Date();
204
+ for (const inv of _invitations.values()) {
205
+ if (inv.orgId === orgId && inv.expiresAt > now) {
206
+ result.push(inv);
207
+ }
208
+ }
209
+ return result;
210
+ },
211
+ async revokeOrgInvitation(invitationId) {
212
+ const inv = _invitations.get(invitationId);
213
+ if (!inv)
214
+ return;
215
+ _tokenIndex.delete(inv.token);
216
+ _invitations.delete(invitationId);
217
+ },
218
+ getDefaultInvitationTtl() {
219
+ return config.invitationTtlSeconds ?? DEFAULT_INVITATION_TTL;
220
+ },
221
+ getOrgConfig() {
222
+ return config;
223
+ },
224
+ };
225
+ }
@@ -0,0 +1,12 @@
1
+ import type { AuthAdapter } from '../lib/authAdapter';
2
+ /**
3
+ * Check whether a plaintext password matches any of the stored history hashes.
4
+ * Returns true if the password is NOT reused (safe to use), false if it was found in history.
5
+ * Skips the check if the adapter does not implement getPasswordHistory.
6
+ */
7
+ export declare function checkPasswordNotReused(adapter: AuthAdapter, userId: string, newPasswordPlaintext: string, maxCount: number): Promise<boolean>;
8
+ /**
9
+ * Record a newly-set password hash into the user's password history.
10
+ * No-op if the adapter does not implement addPasswordToHistory.
11
+ */
12
+ export declare function recordPasswordChange(adapter: AuthAdapter, userId: string, newHash: string, maxCount: number): Promise<void>;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Check whether a plaintext password matches any of the stored history hashes.
3
+ * Returns true if the password is NOT reused (safe to use), false if it was found in history.
4
+ * Skips the check if the adapter does not implement getPasswordHistory.
5
+ */
6
+ export async function checkPasswordNotReused(adapter, userId, newPasswordPlaintext, maxCount) {
7
+ if (maxCount <= 0)
8
+ return true;
9
+ if (!adapter.getPasswordHistory)
10
+ return true;
11
+ const history = await adapter.getPasswordHistory(userId);
12
+ if (history.length === 0)
13
+ return true;
14
+ for (const hash of history) {
15
+ if (await Bun.password.verify(newPasswordPlaintext, hash)) {
16
+ return false; // reused
17
+ }
18
+ }
19
+ return true; // not reused
20
+ }
21
+ /**
22
+ * Record a newly-set password hash into the user's password history.
23
+ * No-op if the adapter does not implement addPasswordToHistory.
24
+ */
25
+ export async function recordPasswordChange(adapter, userId, newHash, maxCount) {
26
+ if (maxCount <= 0)
27
+ return;
28
+ if (!adapter.addPasswordToHistory)
29
+ return;
30
+ await adapter.addPasswordToHistory(userId, newHash, maxCount);
31
+ }
@@ -0,0 +1,20 @@
1
+ import type { RepoFactories } from '../../../bunshot-core/src/index.js';
2
+ import type { AuthResolvedConfig } from '../config/authConfig';
3
+ import type { RedisLike } from '../types/redis';
4
+ export interface IResetTokenRepository {
5
+ create(hash: string, userId: string, email: string, ttl: number): Promise<void>;
6
+ consume(hash: string): Promise<{
7
+ userId: string;
8
+ email: string;
9
+ } | null>;
10
+ }
11
+ export declare function createMemoryResetTokenRepository(): IResetTokenRepository;
12
+ export declare function createSqliteResetTokenRepository(db: import('bun:sqlite').Database): IResetTokenRepository;
13
+ export declare function createRedisResetTokenRepository(getRedis: () => RedisLike, appName: string): IResetTokenRepository;
14
+ export declare function createMongoResetTokenRepository(conn: import('mongoose').Connection, mg: typeof import('mongoose')): IResetTokenRepository;
15
+ export declare const resetTokenFactories: RepoFactories<IResetTokenRepository>;
16
+ export declare const createResetToken: (repo: IResetTokenRepository, userId: string, email: string, config: AuthResolvedConfig) => Promise<string>;
17
+ export declare const consumeResetToken: (repo: IResetTokenRepository, token: string) => Promise<{
18
+ userId: string;
19
+ email: string;
20
+ } | null>;