@lastshotlabs/bunshot 0.0.27 → 0.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (742) hide show
  1. package/.oclif.manifest.json +39 -0
  2. package/README.md +8282 -2147
  3. package/dist/cli/commands/init.js +690 -0
  4. package/dist/cli/index.js +6 -0
  5. package/dist/cli.js +4 -4
  6. package/dist/packages/bunshot-admin/src/index.d.ts +15 -0
  7. package/dist/packages/bunshot-admin/src/index.js +11 -0
  8. package/dist/packages/bunshot-admin/src/lib/resourceTypes.d.ts +8 -0
  9. package/dist/packages/bunshot-admin/src/lib/resourceTypes.js +33 -0
  10. package/dist/packages/bunshot-admin/src/lib/typedRoute.d.ts +14 -0
  11. package/dist/packages/bunshot-admin/src/lib/typedRoute.js +17 -0
  12. package/dist/packages/bunshot-admin/src/plugin.d.ts +4 -0
  13. package/dist/packages/bunshot-admin/src/plugin.js +46 -0
  14. package/dist/packages/bunshot-admin/src/providers/auth0Access.d.ts +6 -0
  15. package/dist/packages/bunshot-admin/src/providers/auth0Access.js +32 -0
  16. package/dist/packages/bunshot-admin/src/routes/admin.d.ts +10 -0
  17. package/dist/packages/bunshot-admin/src/routes/admin.js +923 -0
  18. package/dist/packages/bunshot-admin/src/routes/mail.d.ts +6 -0
  19. package/dist/packages/bunshot-admin/src/routes/mail.js +114 -0
  20. package/dist/packages/bunshot-admin/src/routes/permissions.d.ts +8 -0
  21. package/dist/packages/bunshot-admin/src/routes/permissions.js +315 -0
  22. package/dist/packages/bunshot-admin/src/types/config.d.ts +16 -0
  23. package/dist/packages/bunshot-admin/src/types/config.js +37 -0
  24. package/dist/packages/bunshot-admin/src/types/env.d.ts +14 -0
  25. package/dist/packages/bunshot-admin/src/types/provider.d.ts +1 -0
  26. package/dist/packages/bunshot-admin/src/types/provider.js +4 -0
  27. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.d.ts +66 -0
  28. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.js +1063 -0
  29. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.d.ts +2 -0
  30. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.js +536 -0
  31. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.d.ts +88 -0
  32. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.js +1366 -0
  33. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.d.ts +2 -0
  34. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.js +23 -0
  35. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.d.ts +5 -0
  36. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.js +131 -0
  37. package/dist/packages/bunshot-auth/src/bootstrap.d.ts +38 -0
  38. package/dist/packages/bunshot-auth/src/bootstrap.js +384 -0
  39. package/dist/packages/bunshot-auth/src/config/appConfig.d.ts +3 -0
  40. package/dist/packages/bunshot-auth/src/config/appConfig.js +4 -0
  41. package/dist/packages/bunshot-auth/src/config/authConfig.d.ts +478 -0
  42. package/dist/packages/bunshot-auth/src/config/authConfig.js +46 -0
  43. package/dist/packages/bunshot-auth/src/config/configLock.d.ts +2 -0
  44. package/dist/packages/bunshot-auth/src/config/configLock.js +10 -0
  45. package/dist/packages/bunshot-auth/src/index.d.ts +25 -0
  46. package/dist/packages/bunshot-auth/src/index.js +23 -0
  47. package/dist/packages/bunshot-auth/src/infra/mongo.d.ts +15 -0
  48. package/dist/packages/bunshot-auth/src/infra/mongo.js +44 -0
  49. package/dist/packages/bunshot-auth/src/infra/queue.d.ts +14 -0
  50. package/dist/packages/bunshot-auth/src/infra/queue.js +27 -0
  51. package/dist/packages/bunshot-auth/src/infra/redis.d.ts +5 -0
  52. package/dist/packages/bunshot-auth/src/infra/redis.js +15 -0
  53. package/dist/packages/bunshot-auth/src/infra/signing.d.ts +7 -0
  54. package/dist/packages/bunshot-auth/src/infra/signing.js +8 -0
  55. package/dist/packages/bunshot-auth/src/lib/accountLockout.d.ts +34 -0
  56. package/dist/packages/bunshot-auth/src/lib/accountLockout.js +244 -0
  57. package/dist/packages/bunshot-auth/src/lib/adapterTiers.d.ts +1 -0
  58. package/dist/packages/bunshot-auth/src/lib/adapterTiers.js +1 -0
  59. package/dist/packages/bunshot-auth/src/lib/authAdapter.d.ts +1 -0
  60. package/dist/packages/bunshot-auth/src/lib/authAdapter.js +1 -0
  61. package/dist/packages/bunshot-auth/src/lib/authContext.d.ts +15 -0
  62. package/dist/packages/bunshot-auth/src/lib/authContext.js +1 -0
  63. package/dist/packages/bunshot-auth/src/lib/authEventBus.d.ts +4 -0
  64. package/dist/packages/bunshot-auth/src/lib/authEventBus.js +15 -0
  65. package/dist/packages/bunshot-auth/src/lib/authRateLimit.d.ts +28 -0
  66. package/dist/packages/bunshot-auth/src/lib/authRateLimit.js +205 -0
  67. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.d.ts +8 -2
  68. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.js +22 -9
  69. package/dist/packages/bunshot-auth/src/lib/cache.d.ts +12 -0
  70. package/dist/packages/bunshot-auth/src/lib/cache.js +120 -0
  71. package/dist/packages/bunshot-auth/src/lib/clientIp.d.ts +4 -0
  72. package/dist/{lib → packages/bunshot-auth/src/lib}/clientIp.js +14 -7
  73. package/dist/packages/bunshot-auth/src/lib/cookieOptions.d.ts +27 -0
  74. package/dist/packages/bunshot-auth/src/lib/cookieOptions.js +33 -0
  75. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.d.ts +40 -0
  76. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.js +221 -0
  77. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.d.ts +19 -0
  78. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.js +148 -0
  79. package/dist/packages/bunshot-auth/src/lib/emailTemplates.d.ts +23 -0
  80. package/dist/packages/bunshot-auth/src/lib/emailTemplates.js +265 -0
  81. package/dist/packages/bunshot-auth/src/lib/emailVerification.d.ts +30 -0
  82. package/dist/packages/bunshot-auth/src/lib/emailVerification.js +200 -0
  83. package/dist/packages/bunshot-auth/src/lib/env.d.ts +1 -0
  84. package/dist/packages/bunshot-auth/src/lib/env.js +3 -0
  85. package/dist/packages/bunshot-auth/src/lib/fingerprint.js +36 -0
  86. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.d.ts +15 -16
  87. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.js +22 -34
  88. package/dist/packages/bunshot-auth/src/lib/jwks.d.ts +28 -0
  89. package/dist/packages/bunshot-auth/src/lib/jwks.js +79 -0
  90. package/dist/packages/bunshot-auth/src/lib/jwt.d.ts +12 -0
  91. package/dist/packages/bunshot-auth/src/lib/jwt.js +86 -0
  92. package/dist/{lib → packages/bunshot-auth/src/lib}/logger.js +3 -3
  93. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.d.ts +5 -4
  94. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.js +6 -10
  95. package/dist/packages/bunshot-auth/src/lib/magicLink.d.ts +13 -0
  96. package/dist/packages/bunshot-auth/src/lib/magicLink.js +145 -0
  97. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.d.ts +60 -0
  98. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.js +419 -0
  99. package/dist/packages/bunshot-auth/src/lib/oauth.d.ts +82 -0
  100. package/dist/packages/bunshot-auth/src/lib/oauth.js +177 -0
  101. package/dist/packages/bunshot-auth/src/lib/oauthCode.d.ts +19 -0
  102. package/dist/packages/bunshot-auth/src/lib/oauthCode.js +182 -0
  103. package/dist/packages/bunshot-auth/src/lib/oauthReauth.d.ts +19 -0
  104. package/dist/packages/bunshot-auth/src/lib/oauthReauth.js +255 -0
  105. package/dist/packages/bunshot-auth/src/lib/organization.d.ts +66 -0
  106. package/dist/packages/bunshot-auth/src/lib/organization.js +225 -0
  107. package/dist/packages/bunshot-auth/src/lib/passwordHistory.d.ts +12 -0
  108. package/dist/packages/bunshot-auth/src/lib/passwordHistory.js +31 -0
  109. package/dist/packages/bunshot-auth/src/lib/resetPassword.d.ts +20 -0
  110. package/dist/packages/bunshot-auth/src/lib/resetPassword.js +148 -0
  111. package/dist/packages/bunshot-auth/src/lib/roles.d.ts +9 -0
  112. package/dist/packages/bunshot-auth/src/lib/roles.js +93 -0
  113. package/dist/packages/bunshot-auth/src/lib/saml.d.ts +29 -0
  114. package/dist/packages/bunshot-auth/src/lib/saml.js +73 -0
  115. package/dist/packages/bunshot-auth/src/lib/samlRequestId.d.ts +13 -0
  116. package/dist/packages/bunshot-auth/src/lib/samlRequestId.js +129 -0
  117. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.d.ts +7 -7
  118. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.js +15 -13
  119. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.d.ts +22 -0
  120. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.js +65 -0
  121. package/dist/packages/bunshot-auth/src/lib/session.d.ts +45 -0
  122. package/dist/packages/bunshot-auth/src/lib/session.js +1211 -0
  123. package/dist/packages/bunshot-auth/src/lib/storeInfra.d.ts +26 -0
  124. package/dist/packages/bunshot-auth/src/lib/storeInfra.js +18 -0
  125. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.d.ts +3 -2
  126. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.js +2 -5
  127. package/dist/packages/bunshot-auth/src/lib/validateAdapter.d.ts +16 -0
  128. package/dist/packages/bunshot-auth/src/lib/validateAdapter.js +161 -0
  129. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.d.ts +13 -0
  130. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.js +58 -0
  131. package/dist/{middleware → packages/bunshot-auth/src/middleware}/csrf.d.ts +5 -4
  132. package/dist/packages/bunshot-auth/src/middleware/csrf.js +138 -0
  133. package/dist/packages/bunshot-auth/src/middleware/identify.d.ts +4 -0
  134. package/dist/packages/bunshot-auth/src/middleware/identify.js +124 -0
  135. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.d.ts +2 -2
  136. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.js +10 -8
  137. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.d.ts +2 -2
  138. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.js +20 -16
  139. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.d.ts +2 -2
  140. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.js +6 -6
  141. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.d.ts +2 -2
  142. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.js +8 -7
  143. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.d.ts +2 -2
  144. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.js +7 -6
  145. package/dist/packages/bunshot-auth/src/middleware/scimAuth.d.ts +8 -0
  146. package/dist/packages/bunshot-auth/src/middleware/scimAuth.js +29 -0
  147. package/dist/packages/bunshot-auth/src/middleware/userAuth.d.ts +3 -0
  148. package/dist/packages/bunshot-auth/src/middleware/userAuth.js +6 -0
  149. package/dist/{models → packages/bunshot-auth/src/models}/AuthUser.d.ts +12 -8
  150. package/dist/packages/bunshot-auth/src/models/AuthUser.js +53 -0
  151. package/dist/packages/bunshot-auth/src/models/Group.d.ts +19 -0
  152. package/dist/packages/bunshot-auth/src/models/Group.js +22 -0
  153. package/dist/{models → packages/bunshot-auth/src/models}/GroupMembership.d.ts +6 -8
  154. package/dist/packages/bunshot-auth/src/models/GroupMembership.js +19 -0
  155. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.d.ts +1 -1
  156. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.js +5 -5
  157. package/dist/packages/bunshot-auth/src/models/TenantRole.d.ts +13 -0
  158. package/dist/packages/bunshot-auth/src/models/TenantRole.js +17 -0
  159. package/dist/packages/bunshot-auth/src/plugin.d.ts +4 -0
  160. package/dist/packages/bunshot-auth/src/plugin.js +274 -0
  161. package/dist/packages/bunshot-auth/src/routes/auth.d.ts +15 -0
  162. package/dist/packages/bunshot-auth/src/routes/auth.js +1624 -0
  163. package/dist/packages/bunshot-auth/src/routes/groups.d.ts +4 -0
  164. package/dist/packages/bunshot-auth/src/routes/groups.js +481 -0
  165. package/dist/packages/bunshot-auth/src/routes/m2m.d.ts +2 -0
  166. package/dist/packages/bunshot-auth/src/routes/m2m.js +145 -0
  167. package/dist/packages/bunshot-auth/src/routes/mfa.d.ts +6 -0
  168. package/dist/packages/bunshot-auth/src/routes/mfa.js +991 -0
  169. package/dist/packages/bunshot-auth/src/routes/oauth.d.ts +3 -0
  170. package/dist/packages/bunshot-auth/src/routes/oauth.js +1727 -0
  171. package/dist/packages/bunshot-auth/src/routes/oidc.d.ts +2 -0
  172. package/dist/packages/bunshot-auth/src/routes/oidc.js +84 -0
  173. package/dist/packages/bunshot-auth/src/routes/organizations.d.ts +3 -0
  174. package/dist/packages/bunshot-auth/src/routes/organizations.js +741 -0
  175. package/dist/packages/bunshot-auth/src/routes/passkey.d.ts +2 -0
  176. package/dist/packages/bunshot-auth/src/routes/passkey.js +199 -0
  177. package/dist/packages/bunshot-auth/src/routes/saml.d.ts +2 -0
  178. package/dist/packages/bunshot-auth/src/routes/saml.js +226 -0
  179. package/dist/packages/bunshot-auth/src/routes/scim.d.ts +3 -0
  180. package/dist/packages/bunshot-auth/src/routes/scim.js +588 -0
  181. package/dist/packages/bunshot-auth/src/runtime.d.ts +52 -0
  182. package/dist/packages/bunshot-auth/src/runtime.js +11 -0
  183. package/dist/{schemas → packages/bunshot-auth/src/schemas}/auth.d.ts +4 -5
  184. package/dist/packages/bunshot-auth/src/schemas/auth.js +24 -0
  185. package/dist/packages/bunshot-auth/src/schemas/error.d.ts +10 -0
  186. package/dist/packages/bunshot-auth/src/schemas/error.js +10 -0
  187. package/dist/packages/bunshot-auth/src/schemas/success.d.ts +10 -0
  188. package/dist/packages/bunshot-auth/src/schemas/success.js +10 -0
  189. package/dist/packages/bunshot-auth/src/services/auth.d.ts +39 -0
  190. package/dist/packages/bunshot-auth/src/services/auth.js +378 -0
  191. package/dist/{services → packages/bunshot-auth/src/services}/mfa.d.ts +41 -17
  192. package/dist/{services → packages/bunshot-auth/src/services}/mfa.js +259 -183
  193. package/dist/packages/bunshot-auth/src/testing.d.ts +31 -0
  194. package/dist/packages/bunshot-auth/src/testing.js +23 -0
  195. package/dist/packages/bunshot-auth/src/types/adapter.d.ts +1 -0
  196. package/dist/packages/bunshot-auth/src/types/adapter.js +1 -0
  197. package/dist/packages/bunshot-auth/src/types/config.d.ts +152 -0
  198. package/dist/packages/bunshot-auth/src/types/config.js +179 -0
  199. package/dist/{routes → packages/bunshot-auth/src/types}/groups.d.ts +2 -3
  200. package/dist/packages/bunshot-auth/src/types/groups.js +1 -0
  201. package/dist/packages/bunshot-auth/src/types/oauthCode.d.ts +6 -0
  202. package/dist/packages/bunshot-auth/src/types/oauthCode.js +1 -0
  203. package/dist/packages/bunshot-auth/src/types/oauthReauth.d.ts +13 -0
  204. package/dist/packages/bunshot-auth/src/types/oauthReauth.js +1 -0
  205. package/dist/packages/bunshot-auth/src/types/redis.d.ts +1 -0
  206. package/dist/packages/bunshot-auth/src/types/redis.js +1 -0
  207. package/dist/packages/bunshot-auth/src/types/saml.d.ts +10 -0
  208. package/dist/packages/bunshot-auth/src/types/saml.js +1 -0
  209. package/dist/packages/bunshot-auth/src/types/session.d.ts +18 -0
  210. package/dist/packages/bunshot-auth/src/types/session.js +1 -0
  211. package/dist/packages/bunshot-auth/src/types/store.d.ts +1 -0
  212. package/dist/packages/bunshot-auth/src/types/store.js +1 -0
  213. package/dist/packages/bunshot-core/src/adminProvider.d.ts +95 -0
  214. package/dist/packages/bunshot-core/src/adminProvider.js +1 -0
  215. package/dist/packages/bunshot-core/src/auditLog.d.ts +34 -0
  216. package/dist/packages/bunshot-core/src/auditLog.js +1 -0
  217. package/dist/packages/bunshot-core/src/auth-adapter.d.ts +227 -0
  218. package/dist/packages/bunshot-core/src/auth-adapter.js +4 -0
  219. package/dist/packages/bunshot-core/src/authVariables.d.ts +14 -0
  220. package/dist/packages/bunshot-core/src/authVariables.js +4 -0
  221. package/dist/packages/bunshot-core/src/cache.d.ts +12 -0
  222. package/dist/packages/bunshot-core/src/cache.js +21 -0
  223. package/dist/{lib → packages/bunshot-core/src}/captcha.d.ts +1 -10
  224. package/dist/packages/bunshot-core/src/captcha.js +1 -0
  225. package/dist/packages/bunshot-core/src/clearRegistry.d.ts +6 -0
  226. package/dist/packages/bunshot-core/src/clearRegistry.js +17 -0
  227. package/dist/packages/bunshot-core/src/clientIp.d.ts +3 -0
  228. package/dist/packages/bunshot-core/src/clientIp.js +45 -0
  229. package/dist/packages/bunshot-core/src/configLock.d.ts +4 -0
  230. package/dist/packages/bunshot-core/src/configLock.js +7 -0
  231. package/dist/packages/bunshot-core/src/configValidation.d.ts +22 -0
  232. package/dist/packages/bunshot-core/src/configValidation.js +39 -0
  233. package/dist/packages/bunshot-core/src/constants.js +10 -0
  234. package/dist/packages/bunshot-core/src/context/bunshotContext.d.ts +232 -0
  235. package/dist/packages/bunshot-core/src/context/bunshotContext.js +1 -0
  236. package/dist/packages/bunshot-core/src/context/contextAccess.d.ts +3 -0
  237. package/dist/packages/bunshot-core/src/context/contextAccess.js +16 -0
  238. package/dist/packages/bunshot-core/src/context/contextStore.d.ts +16 -0
  239. package/dist/packages/bunshot-core/src/context/contextStore.js +31 -0
  240. package/dist/packages/bunshot-core/src/context/frameworkConfig.d.ts +38 -0
  241. package/dist/packages/bunshot-core/src/context/frameworkConfig.js +1 -0
  242. package/dist/packages/bunshot-core/src/context/index.d.ts +4 -0
  243. package/dist/packages/bunshot-core/src/context/index.js +2 -0
  244. package/dist/packages/bunshot-core/src/context.d.ts +40 -0
  245. package/dist/packages/bunshot-core/src/context.js +35 -0
  246. package/dist/packages/bunshot-core/src/coreContracts.d.ts +47 -0
  247. package/dist/packages/bunshot-core/src/coreContracts.js +1 -0
  248. package/dist/packages/bunshot-core/src/coreRegistrar.d.ts +6 -0
  249. package/dist/packages/bunshot-core/src/coreRegistrar.js +42 -0
  250. package/dist/{lib → packages/bunshot-core/src}/createRoute.d.ts +4 -30
  251. package/dist/{lib → packages/bunshot-core/src}/createRoute.js +39 -88
  252. package/dist/packages/bunshot-core/src/cronRegistry.d.ts +11 -0
  253. package/dist/packages/bunshot-core/src/cronRegistry.js +1 -0
  254. package/dist/packages/bunshot-core/src/crypto.d.ts +43 -0
  255. package/dist/packages/bunshot-core/src/crypto.js +74 -0
  256. package/dist/packages/bunshot-core/src/csrf.d.ts +8 -0
  257. package/dist/packages/bunshot-core/src/csrf.js +1 -0
  258. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.d.ts +7 -0
  259. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.js +19 -0
  260. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.d.ts +6 -0
  261. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.js +40 -0
  262. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.d.ts +6 -0
  263. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.js +24 -0
  264. package/dist/packages/bunshot-core/src/emailTemplates.d.ts +5 -0
  265. package/dist/packages/bunshot-core/src/emailTemplates.js +10 -0
  266. package/dist/{lib/HttpError.d.ts → packages/bunshot-core/src/errors.d.ts} +4 -1
  267. package/dist/{lib/HttpError.js → packages/bunshot-core/src/errors.js} +7 -1
  268. package/dist/packages/bunshot-core/src/eventBus.d.ts +270 -0
  269. package/dist/packages/bunshot-core/src/eventBus.js +143 -0
  270. package/dist/packages/bunshot-core/src/idempotency.d.ts +18 -0
  271. package/dist/packages/bunshot-core/src/idempotency.js +1 -0
  272. package/dist/packages/bunshot-core/src/index.d.ts +60 -0
  273. package/dist/packages/bunshot-core/src/index.js +34 -0
  274. package/dist/packages/bunshot-core/src/mail.d.ts +14 -0
  275. package/dist/packages/bunshot-core/src/mail.js +8 -0
  276. package/dist/packages/bunshot-core/src/memoryEviction.d.ts +24 -0
  277. package/dist/packages/bunshot-core/src/memoryEviction.js +52 -0
  278. package/dist/packages/bunshot-core/src/pagination.d.ts +45 -0
  279. package/dist/packages/bunshot-core/src/pagination.js +61 -0
  280. package/dist/packages/bunshot-core/src/permissions.d.ts +64 -0
  281. package/dist/packages/bunshot-core/src/permissions.js +27 -0
  282. package/dist/packages/bunshot-core/src/plugin.d.ts +44 -0
  283. package/dist/packages/bunshot-core/src/plugin.js +1 -0
  284. package/dist/packages/bunshot-core/src/rateLimit.d.ts +5 -0
  285. package/dist/packages/bunshot-core/src/rateLimit.js +18 -0
  286. package/dist/packages/bunshot-core/src/redis.d.ts +21 -0
  287. package/dist/packages/bunshot-core/src/redis.js +1 -0
  288. package/dist/packages/bunshot-core/src/routeAuth.d.ts +5 -0
  289. package/dist/packages/bunshot-core/src/routeAuth.js +11 -0
  290. package/dist/packages/bunshot-core/src/routeOverrides.d.ts +24 -0
  291. package/dist/packages/bunshot-core/src/routeOverrides.js +25 -0
  292. package/dist/packages/bunshot-core/src/routerAdapter.d.ts +6 -0
  293. package/dist/packages/bunshot-core/src/routerAdapter.js +56 -0
  294. package/dist/packages/bunshot-core/src/secrets.d.ts +48 -0
  295. package/dist/packages/bunshot-core/src/secrets.js +8 -0
  296. package/dist/packages/bunshot-core/src/signing.d.ts +41 -0
  297. package/dist/packages/bunshot-core/src/signing.js +1 -0
  298. package/dist/packages/bunshot-core/src/sse.d.ts +36 -0
  299. package/dist/packages/bunshot-core/src/sse.js +1 -0
  300. package/dist/packages/bunshot-core/src/storageAdapter.js +1 -0
  301. package/dist/packages/bunshot-core/src/storeInfra.d.ts +44 -0
  302. package/dist/packages/bunshot-core/src/storeInfra.js +18 -0
  303. package/dist/packages/bunshot-core/src/storeType.d.ts +7 -0
  304. package/dist/packages/bunshot-core/src/storeType.js +1 -0
  305. package/dist/packages/bunshot-core/src/testing.d.ts +1 -0
  306. package/dist/packages/bunshot-core/src/testing.js +1 -0
  307. package/dist/packages/bunshot-core/src/uploadRegistry.d.ts +23 -0
  308. package/dist/packages/bunshot-core/src/uploadRegistry.js +4 -0
  309. package/dist/packages/bunshot-core/src/userResolver.d.ts +5 -0
  310. package/dist/packages/bunshot-core/src/userResolver.js +14 -0
  311. package/dist/packages/bunshot-core/src/wsMessages.d.ts +42 -0
  312. package/dist/packages/bunshot-core/src/wsMessages.js +4 -0
  313. package/dist/packages/bunshot-permissions/src/adapters/memory.d.ts +7 -0
  314. package/dist/packages/bunshot-permissions/src/adapters/memory.js +73 -0
  315. package/dist/packages/bunshot-permissions/src/index.d.ts +10 -0
  316. package/dist/packages/bunshot-permissions/src/index.js +5 -0
  317. package/dist/packages/bunshot-permissions/src/lib/bootstrap.d.ts +7 -0
  318. package/dist/packages/bunshot-permissions/src/lib/bootstrap.js +12 -0
  319. package/dist/packages/bunshot-permissions/src/lib/evaluator.d.ts +10 -0
  320. package/dist/packages/bunshot-permissions/src/lib/evaluator.js +165 -0
  321. package/dist/packages/bunshot-permissions/src/lib/registry.d.ts +2 -0
  322. package/dist/packages/bunshot-permissions/src/lib/registry.js +31 -0
  323. package/dist/packages/bunshot-permissions/src/lib/validation.d.ts +1 -0
  324. package/dist/packages/bunshot-permissions/src/lib/validation.js +1 -0
  325. package/dist/packages/bunshot-permissions/src/types/adapter.d.ts +1 -0
  326. package/dist/packages/bunshot-permissions/src/types/adapter.js +1 -0
  327. package/dist/packages/bunshot-permissions/src/types/evaluator.d.ts +1 -0
  328. package/dist/packages/bunshot-permissions/src/types/evaluator.js +1 -0
  329. package/dist/packages/bunshot-permissions/src/types/models.d.ts +1 -0
  330. package/dist/packages/bunshot-permissions/src/types/models.js +1 -0
  331. package/dist/packages/bunshot-permissions/src/types/registry.d.ts +1 -0
  332. package/dist/packages/bunshot-permissions/src/types/registry.js +1 -0
  333. package/dist/packages/bunshot-postgres/src/adapter.d.ts +6 -0
  334. package/dist/packages/bunshot-postgres/src/adapter.js +794 -0
  335. package/dist/packages/bunshot-postgres/src/connection.d.ts +15 -0
  336. package/dist/packages/bunshot-postgres/src/connection.js +16 -0
  337. package/dist/packages/bunshot-postgres/src/index.d.ts +4 -0
  338. package/dist/packages/bunshot-postgres/src/index.js +2 -0
  339. package/dist/packages/bunshot-postgres/src/schema.d.ts +997 -0
  340. package/dist/packages/bunshot-postgres/src/schema.js +105 -0
  341. package/dist/src/app.d.ts +230 -0
  342. package/dist/src/app.js +182 -0
  343. package/dist/src/cli/commands/init.d.ts +10 -0
  344. package/dist/src/cli/commands/init.js +709 -0
  345. package/dist/src/cli/index.d.ts +1 -0
  346. package/dist/src/cli/index.js +3 -0
  347. package/dist/src/entrypoints/mongo.d.ts +6 -0
  348. package/dist/src/entrypoints/mongo.js +4 -0
  349. package/dist/src/entrypoints/queue.d.ts +2 -0
  350. package/dist/src/entrypoints/queue.js +1 -0
  351. package/dist/src/entrypoints/redis.d.ts +1 -0
  352. package/dist/src/entrypoints/redis.js +1 -0
  353. package/dist/{adapters → src/framework/adapters}/localStorage.d.ts +1 -1
  354. package/dist/{adapters → src/framework/adapters}/localStorage.js +10 -10
  355. package/dist/src/framework/adapters/memoryStorage.d.ts +2 -0
  356. package/dist/src/framework/adapters/memoryStorage.js +45 -0
  357. package/dist/{adapters → src/framework/adapters}/s3Storage.d.ts +1 -1
  358. package/dist/{adapters → src/framework/adapters}/s3Storage.js +12 -12
  359. package/dist/src/framework/admin/bunshotAccess.d.ts +2 -0
  360. package/dist/src/framework/admin/bunshotAccess.js +23 -0
  361. package/dist/src/framework/admin/bunshotUsers.d.ts +2 -0
  362. package/dist/src/framework/admin/bunshotUsers.js +103 -0
  363. package/dist/src/framework/admin/index.d.ts +7 -0
  364. package/dist/src/framework/admin/index.js +21 -0
  365. package/dist/src/framework/boundaryAdapters/cacheFactories.d.ts +13 -0
  366. package/dist/src/framework/boundaryAdapters/cacheFactories.js +86 -0
  367. package/dist/src/framework/boundaryAdapters/index.d.ts +2 -0
  368. package/dist/src/framework/boundaryAdapters/index.js +1 -0
  369. package/dist/src/framework/boundaryAdapters.d.ts +17 -0
  370. package/dist/src/framework/boundaryAdapters.js +62 -0
  371. package/dist/src/framework/buildContext.d.ts +33 -0
  372. package/dist/src/framework/buildContext.js +119 -0
  373. package/dist/src/framework/config/schema.d.ts +447 -0
  374. package/dist/src/framework/config/schema.js +528 -0
  375. package/dist/src/framework/createInfrastructure.d.ts +76 -0
  376. package/dist/src/framework/createInfrastructure.js +221 -0
  377. package/dist/src/framework/lib/auditLog.d.ts +23 -0
  378. package/dist/src/framework/lib/auditLog.js +416 -0
  379. package/dist/src/framework/lib/captcha.d.ts +11 -0
  380. package/dist/{lib → src/framework/lib}/captcha.js +13 -10
  381. package/dist/{lib → src/framework/lib}/createDtoMapper.js +4 -4
  382. package/dist/src/framework/lib/createRoute.d.ts +1 -0
  383. package/dist/src/framework/lib/createRoute.js +2 -0
  384. package/dist/{lib → src/framework/lib}/idempotency.d.ts +2 -6
  385. package/dist/src/framework/lib/idempotency.js +74 -0
  386. package/dist/src/framework/lib/logger.d.ts +3 -0
  387. package/dist/src/framework/lib/logger.js +14 -0
  388. package/dist/src/framework/lib/metrics.d.ts +34 -0
  389. package/dist/{lib → src/framework/lib}/metrics.js +49 -57
  390. package/dist/src/framework/lib/pagination.d.ts +42 -0
  391. package/dist/src/framework/lib/pagination.js +51 -0
  392. package/dist/src/framework/lib/redisTransport.d.ts +38 -0
  393. package/dist/src/framework/lib/redisTransport.js +107 -0
  394. package/dist/src/framework/lib/resolveUserId.d.ts +2 -0
  395. package/dist/src/framework/lib/resolveUserId.js +5 -0
  396. package/dist/src/framework/lib/sseCollision.d.ts +6 -0
  397. package/dist/src/framework/lib/sseCollision.js +26 -0
  398. package/dist/src/framework/lib/storageAdapter.d.ts +1 -0
  399. package/dist/src/framework/lib/storageAdapter.js +1 -0
  400. package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.js +4 -4
  401. package/dist/src/framework/lib/tenant.d.ts +21 -0
  402. package/dist/src/framework/lib/tenant.js +70 -0
  403. package/dist/{lib → src/framework/lib}/upload.d.ts +11 -10
  404. package/dist/src/framework/lib/upload.js +132 -0
  405. package/dist/src/framework/lib/uploadRegistry.d.ts +23 -0
  406. package/dist/src/framework/lib/uploadRegistry.js +34 -0
  407. package/dist/{lib → src/framework/lib}/validate.d.ts +1 -1
  408. package/dist/{lib → src/framework/lib}/validate.js +2 -2
  409. package/dist/src/framework/lib/ws.d.ts +19 -0
  410. package/dist/src/framework/lib/ws.js +130 -0
  411. package/dist/src/framework/lib/wsHeartbeat.d.ts +12 -0
  412. package/dist/src/framework/lib/wsHeartbeat.js +53 -0
  413. package/dist/src/framework/lib/wsMessages.d.ts +25 -0
  414. package/dist/src/framework/lib/wsMessages.js +45 -0
  415. package/dist/src/framework/lib/wsNamespace.d.ts +17 -0
  416. package/dist/src/framework/lib/wsNamespace.js +19 -0
  417. package/dist/src/framework/lib/wsPresence.d.ts +17 -0
  418. package/dist/src/framework/lib/wsPresence.js +84 -0
  419. package/dist/src/framework/lib/wsTransport.d.ts +38 -0
  420. package/dist/src/framework/lib/wsTransport.js +9 -0
  421. package/dist/{lib → src/framework/lib}/zodToMongoose.d.ts +1 -1
  422. package/dist/{lib → src/framework/lib}/zodToMongoose.js +11 -11
  423. package/dist/{middleware → src/framework/middleware}/auditLog.d.ts +4 -3
  424. package/dist/src/framework/middleware/auditLog.js +42 -0
  425. package/dist/{middleware → src/framework/middleware}/botProtection.d.ts +2 -2
  426. package/dist/{middleware → src/framework/middleware}/botProtection.js +8 -9
  427. package/dist/src/framework/middleware/cacheResponse.d.ts +35 -0
  428. package/dist/src/framework/middleware/cacheResponse.js +126 -0
  429. package/dist/{middleware → src/framework/middleware}/captcha.d.ts +2 -3
  430. package/dist/src/framework/middleware/captcha.js +37 -0
  431. package/dist/{middleware → src/framework/middleware}/errorHandler.d.ts +1 -1
  432. package/dist/{middleware → src/framework/middleware}/errorHandler.js +2 -2
  433. package/dist/src/framework/middleware/index.js +1 -0
  434. package/dist/{middleware → src/framework/middleware}/logger.d.ts +1 -1
  435. package/dist/src/framework/middleware/metrics.d.ts +12 -0
  436. package/dist/src/framework/middleware/metrics.js +26 -0
  437. package/dist/{middleware → src/framework/middleware}/rateLimit.d.ts +2 -2
  438. package/dist/src/framework/middleware/rateLimit.js +22 -0
  439. package/dist/src/framework/middleware/requestId.d.ts +3 -0
  440. package/dist/{middleware → src/framework/middleware}/requestId.js +2 -2
  441. package/dist/{middleware → src/framework/middleware}/requestLogger.d.ts +3 -3
  442. package/dist/{middleware → src/framework/middleware}/requestLogger.js +17 -12
  443. package/dist/{middleware → src/framework/middleware}/requestSigning.d.ts +2 -2
  444. package/dist/{middleware → src/framework/middleware}/requestSigning.js +18 -20
  445. package/dist/src/framework/middleware/tenant.d.ts +14 -0
  446. package/dist/{middleware → src/framework/middleware}/tenant.js +31 -27
  447. package/dist/src/framework/middleware/upload.d.ts +5 -0
  448. package/dist/{middleware → src/framework/middleware}/upload.js +4 -4
  449. package/dist/{middleware → src/framework/middleware}/webhookAuth.d.ts +3 -3
  450. package/dist/{middleware → src/framework/middleware}/webhookAuth.js +11 -12
  451. package/dist/src/framework/models/AuditLog.d.ts +21 -0
  452. package/dist/src/framework/models/AuditLog.js +31 -0
  453. package/dist/src/framework/mountMiddleware.d.ts +91 -0
  454. package/dist/src/framework/mountMiddleware.js +128 -0
  455. package/dist/src/framework/mountOptionalEndpoints.d.ts +103 -0
  456. package/dist/src/framework/mountOptionalEndpoints.js +47 -0
  457. package/dist/src/framework/mountRoutes.d.ts +21 -0
  458. package/dist/src/framework/mountRoutes.js +144 -0
  459. package/dist/src/framework/persistence/cronRegistry.d.ts +28 -0
  460. package/dist/src/framework/persistence/cronRegistry.js +139 -0
  461. package/dist/src/framework/persistence/idempotency.d.ts +26 -0
  462. package/dist/src/framework/persistence/idempotency.js +178 -0
  463. package/dist/src/framework/persistence/index.d.ts +6 -0
  464. package/dist/src/framework/persistence/index.js +8 -0
  465. package/dist/src/framework/persistence/storeInfra.d.ts +9 -0
  466. package/dist/src/framework/persistence/storeInfra.js +1 -0
  467. package/dist/src/framework/persistence/uploadRegistry.d.ts +35 -0
  468. package/dist/src/framework/persistence/uploadRegistry.js +235 -0
  469. package/dist/src/framework/persistence/wsMessages.d.ts +22 -0
  470. package/dist/src/framework/persistence/wsMessages.js +296 -0
  471. package/dist/src/framework/preloadSchemas.d.ts +24 -0
  472. package/dist/src/framework/preloadSchemas.js +42 -0
  473. package/dist/src/framework/registerBoundaryAdapters.d.ts +23 -0
  474. package/dist/src/framework/registerBoundaryAdapters.js +46 -0
  475. package/dist/src/framework/routes/admin.d.ts +9 -0
  476. package/dist/src/framework/routes/admin.js +361 -0
  477. package/dist/src/framework/routes/health.d.ts +1 -0
  478. package/dist/src/framework/routes/health.js +21 -0
  479. package/dist/src/framework/routes/home.d.ts +1 -0
  480. package/dist/src/framework/routes/home.js +18 -0
  481. package/dist/src/framework/routes/jobs.d.ts +3 -0
  482. package/dist/{routes → src/framework/routes}/jobs.js +128 -103
  483. package/dist/src/framework/routes/metrics.d.ts +10 -0
  484. package/dist/src/framework/routes/metrics.js +57 -0
  485. package/dist/{routes → src/framework/routes}/uploads.d.ts +3 -3
  486. package/dist/src/framework/routes/uploads.js +262 -0
  487. package/dist/src/framework/runPluginLifecycle.d.ts +27 -0
  488. package/dist/src/framework/runPluginLifecycle.js +121 -0
  489. package/dist/src/framework/secrets/frameworkSecretSchema.d.ts +58 -0
  490. package/dist/src/framework/secrets/frameworkSecretSchema.js +20 -0
  491. package/dist/src/framework/secrets/index.d.ts +9 -0
  492. package/dist/src/framework/secrets/index.js +7 -0
  493. package/dist/src/framework/secrets/providers/envProvider.d.ts +15 -0
  494. package/dist/src/framework/secrets/providers/envProvider.js +18 -0
  495. package/dist/src/framework/secrets/providers/fileProvider.d.ts +8 -0
  496. package/dist/src/framework/secrets/providers/fileProvider.js +82 -0
  497. package/dist/src/framework/secrets/providers/ssmProvider.d.ts +20 -0
  498. package/dist/src/framework/secrets/providers/ssmProvider.js +127 -0
  499. package/dist/src/framework/secrets/resolveSecretBundle.d.ts +53 -0
  500. package/dist/src/framework/secrets/resolveSecretBundle.js +84 -0
  501. package/dist/src/framework/secrets/resolveSecrets.d.ts +18 -0
  502. package/dist/src/framework/secrets/resolveSecrets.js +34 -0
  503. package/dist/src/framework/sse/index.d.ts +21 -0
  504. package/dist/src/framework/sse/index.js +109 -0
  505. package/dist/src/framework/ws/index.d.ts +11 -0
  506. package/dist/src/framework/ws/index.js +8 -0
  507. package/dist/src/index.d.ts +87 -0
  508. package/dist/src/index.js +58 -0
  509. package/dist/src/lib/appConfig.d.ts +7 -0
  510. package/dist/src/lib/appConfig.js +27 -0
  511. package/dist/src/lib/appMeta.d.ts +7 -0
  512. package/dist/src/lib/appMeta.js +3 -0
  513. package/dist/src/lib/authConfig.d.ts +532 -0
  514. package/dist/{lib/appConfig.js → src/lib/authConfig.js} +75 -17
  515. package/dist/{lib → src/lib}/context.d.ts +6 -12
  516. package/dist/{lib → src/lib}/context.js +5 -5
  517. package/dist/src/lib/logger.d.ts +1 -0
  518. package/dist/src/lib/logger.js +1 -0
  519. package/dist/src/lib/mongo.d.ts +58 -0
  520. package/dist/src/lib/mongo.js +96 -0
  521. package/dist/src/lib/queue.d.ts +72 -0
  522. package/dist/src/lib/queue.js +152 -0
  523. package/dist/src/lib/redis.d.ts +28 -0
  524. package/dist/src/lib/redis.js +72 -0
  525. package/dist/{lib → src/lib}/signing.d.ts +2 -2
  526. package/dist/src/lib/signing.js +210 -0
  527. package/dist/src/lib/signingConfig.d.ts +40 -0
  528. package/dist/src/lib/signingConfig.js +28 -0
  529. package/dist/src/server.d.ts +146 -0
  530. package/dist/src/server.js +469 -0
  531. package/dist/src/shared/lib/HttpError.d.ts +1 -0
  532. package/dist/src/shared/lib/HttpError.js +2 -0
  533. package/dist/src/shared/lib/constants.d.ts +10 -0
  534. package/dist/src/shared/lib/crypto.d.ts +43 -0
  535. package/dist/src/shared/lib/crypto.js +74 -0
  536. package/dist/src/shared/lib/signing.d.ts +52 -0
  537. package/dist/{lib → src/shared/lib}/signing.js +35 -8
  538. package/dist/src/testing.d.ts +34 -0
  539. package/dist/src/testing.js +93 -0
  540. package/package.json +60 -24
  541. package/dist/adapters/memoryAuth.d.ts +0 -52
  542. package/dist/adapters/memoryAuth.js +0 -749
  543. package/dist/adapters/memoryStorage.d.ts +0 -3
  544. package/dist/adapters/memoryStorage.js +0 -44
  545. package/dist/adapters/mongoAuth.d.ts +0 -2
  546. package/dist/adapters/mongoAuth.js +0 -403
  547. package/dist/adapters/sqliteAuth.d.ts +0 -72
  548. package/dist/adapters/sqliteAuth.js +0 -858
  549. package/dist/app.d.ts +0 -559
  550. package/dist/app.js +0 -651
  551. package/dist/entrypoints/mongo.d.ts +0 -5
  552. package/dist/entrypoints/mongo.js +0 -4
  553. package/dist/entrypoints/queue.d.ts +0 -2
  554. package/dist/entrypoints/queue.js +0 -1
  555. package/dist/entrypoints/redis.d.ts +0 -1
  556. package/dist/entrypoints/redis.js +0 -1
  557. package/dist/index.d.ts +0 -117
  558. package/dist/index.js +0 -88
  559. package/dist/lib/appConfig.d.ts +0 -275
  560. package/dist/lib/auditLog.d.ts +0 -58
  561. package/dist/lib/auditLog.js +0 -218
  562. package/dist/lib/authAdapter.d.ts +0 -246
  563. package/dist/lib/authAdapter.js +0 -7
  564. package/dist/lib/authRateLimit.d.ts +0 -13
  565. package/dist/lib/authRateLimit.js +0 -117
  566. package/dist/lib/clientIp.d.ts +0 -14
  567. package/dist/lib/credentialStuffing.d.ts +0 -31
  568. package/dist/lib/credentialStuffing.js +0 -77
  569. package/dist/lib/crypto.d.ts +0 -11
  570. package/dist/lib/crypto.js +0 -22
  571. package/dist/lib/deletionCancelToken.d.ts +0 -12
  572. package/dist/lib/deletionCancelToken.js +0 -88
  573. package/dist/lib/emailVerification.d.ts +0 -19
  574. package/dist/lib/emailVerification.js +0 -129
  575. package/dist/lib/fingerprint.js +0 -36
  576. package/dist/lib/idempotency.js +0 -182
  577. package/dist/lib/jwks.d.ts +0 -25
  578. package/dist/lib/jwks.js +0 -51
  579. package/dist/lib/jwt.d.ts +0 -15
  580. package/dist/lib/jwt.js +0 -111
  581. package/dist/lib/metrics.d.ts +0 -14
  582. package/dist/lib/mfaChallenge.d.ts +0 -55
  583. package/dist/lib/mfaChallenge.js +0 -398
  584. package/dist/lib/mongo.d.ts +0 -39
  585. package/dist/lib/mongo.js +0 -124
  586. package/dist/lib/oauth.d.ts +0 -40
  587. package/dist/lib/oauth.js +0 -101
  588. package/dist/lib/oauthCode.d.ts +0 -15
  589. package/dist/lib/oauthCode.js +0 -95
  590. package/dist/lib/pagination.d.ts +0 -119
  591. package/dist/lib/pagination.js +0 -166
  592. package/dist/lib/queue.d.ts +0 -37
  593. package/dist/lib/queue.js +0 -117
  594. package/dist/lib/redis.d.ts +0 -9
  595. package/dist/lib/redis.js +0 -61
  596. package/dist/lib/resetPassword.d.ts +0 -12
  597. package/dist/lib/resetPassword.js +0 -93
  598. package/dist/lib/roles.d.ts +0 -7
  599. package/dist/lib/roles.js +0 -49
  600. package/dist/lib/saml.d.ts +0 -25
  601. package/dist/lib/saml.js +0 -64
  602. package/dist/lib/securityEvents.d.ts +0 -28
  603. package/dist/lib/securityEvents.js +0 -26
  604. package/dist/lib/session.d.ts +0 -49
  605. package/dist/lib/session.js +0 -597
  606. package/dist/lib/tenant.d.ts +0 -15
  607. package/dist/lib/tenant.js +0 -65
  608. package/dist/lib/upload.js +0 -112
  609. package/dist/lib/uploadRegistry.d.ts +0 -18
  610. package/dist/lib/uploadRegistry.js +0 -83
  611. package/dist/lib/ws.d.ts +0 -22
  612. package/dist/lib/ws.js +0 -96
  613. package/dist/lib/wsHeartbeat.d.ts +0 -12
  614. package/dist/lib/wsHeartbeat.js +0 -57
  615. package/dist/lib/wsMessages.d.ts +0 -40
  616. package/dist/lib/wsMessages.js +0 -330
  617. package/dist/lib/wsPresence.d.ts +0 -25
  618. package/dist/lib/wsPresence.js +0 -99
  619. package/dist/middleware/auditLog.js +0 -39
  620. package/dist/middleware/bearerAuth.d.ts +0 -2
  621. package/dist/middleware/bearerAuth.js +0 -11
  622. package/dist/middleware/cacheResponse.d.ts +0 -15
  623. package/dist/middleware/cacheResponse.js +0 -178
  624. package/dist/middleware/captcha.js +0 -36
  625. package/dist/middleware/csrf.js +0 -129
  626. package/dist/middleware/identify.d.ts +0 -3
  627. package/dist/middleware/identify.js +0 -122
  628. package/dist/middleware/index.js +0 -1
  629. package/dist/middleware/metrics.d.ts +0 -9
  630. package/dist/middleware/metrics.js +0 -26
  631. package/dist/middleware/rateLimit.js +0 -22
  632. package/dist/middleware/requestId.d.ts +0 -3
  633. package/dist/middleware/scimAuth.d.ts +0 -8
  634. package/dist/middleware/scimAuth.js +0 -29
  635. package/dist/middleware/tenant.d.ts +0 -5
  636. package/dist/middleware/upload.d.ts +0 -5
  637. package/dist/middleware/userAuth.d.ts +0 -3
  638. package/dist/middleware/userAuth.js +0 -6
  639. package/dist/models/AuditLog.d.ts +0 -30
  640. package/dist/models/AuditLog.js +0 -39
  641. package/dist/models/AuthUser.js +0 -55
  642. package/dist/models/Group.d.ts +0 -21
  643. package/dist/models/Group.js +0 -28
  644. package/dist/models/GroupMembership.js +0 -25
  645. package/dist/models/TenantRole.d.ts +0 -15
  646. package/dist/models/TenantRole.js +0 -23
  647. package/dist/routes/auth.d.ts +0 -12
  648. package/dist/routes/auth.js +0 -744
  649. package/dist/routes/groups.js +0 -346
  650. package/dist/routes/health.d.ts +0 -1
  651. package/dist/routes/health.js +0 -22
  652. package/dist/routes/home.d.ts +0 -1
  653. package/dist/routes/home.js +0 -16
  654. package/dist/routes/jobs.d.ts +0 -2
  655. package/dist/routes/m2m.d.ts +0 -2
  656. package/dist/routes/m2m.js +0 -72
  657. package/dist/routes/metrics.d.ts +0 -8
  658. package/dist/routes/metrics.js +0 -55
  659. package/dist/routes/mfa.d.ts +0 -5
  660. package/dist/routes/mfa.js +0 -628
  661. package/dist/routes/oauth.d.ts +0 -2
  662. package/dist/routes/oauth.js +0 -520
  663. package/dist/routes/oidc.d.ts +0 -2
  664. package/dist/routes/oidc.js +0 -29
  665. package/dist/routes/passkey.d.ts +0 -1
  666. package/dist/routes/passkey.js +0 -157
  667. package/dist/routes/saml.d.ts +0 -2
  668. package/dist/routes/saml.js +0 -86
  669. package/dist/routes/scim.d.ts +0 -2
  670. package/dist/routes/scim.js +0 -255
  671. package/dist/routes/uploads.js +0 -227
  672. package/dist/schemas/auth.js +0 -30
  673. package/dist/server.d.ts +0 -57
  674. package/dist/server.js +0 -112
  675. package/dist/services/auth.d.ts +0 -29
  676. package/dist/services/auth.js +0 -238
  677. package/dist/ws/index.d.ts +0 -10
  678. package/dist/ws/index.js +0 -39
  679. package/docs/sections/adding-middleware/full.md +0 -35
  680. package/docs/sections/adding-models/full.md +0 -125
  681. package/docs/sections/adding-models/overview.md +0 -13
  682. package/docs/sections/adding-routes/full.md +0 -182
  683. package/docs/sections/adding-routes/overview.md +0 -23
  684. package/docs/sections/auth-flow/full.md +0 -790
  685. package/docs/sections/auth-flow/overview.md +0 -10
  686. package/docs/sections/auth-security-examples/full.md +0 -388
  687. package/docs/sections/authentication/full.md +0 -130
  688. package/docs/sections/authentication/overview.md +0 -5
  689. package/docs/sections/cli/full.md +0 -42
  690. package/docs/sections/configuration/full.md +0 -172
  691. package/docs/sections/configuration/overview.md +0 -18
  692. package/docs/sections/configuration-example/full.md +0 -117
  693. package/docs/sections/configuration-example/overview.md +0 -30
  694. package/docs/sections/documentation/full.md +0 -171
  695. package/docs/sections/environment-variables/full.md +0 -55
  696. package/docs/sections/exports/full.md +0 -123
  697. package/docs/sections/extending-context/full.md +0 -59
  698. package/docs/sections/header.md +0 -3
  699. package/docs/sections/installation/full.md +0 -6
  700. package/docs/sections/jobs/full.md +0 -140
  701. package/docs/sections/jobs/overview.md +0 -15
  702. package/docs/sections/logging/full.md +0 -83
  703. package/docs/sections/metrics/full.md +0 -131
  704. package/docs/sections/mongodb-connections/full.md +0 -45
  705. package/docs/sections/mongodb-connections/overview.md +0 -7
  706. package/docs/sections/multi-tenancy/full.md +0 -66
  707. package/docs/sections/multi-tenancy/overview.md +0 -15
  708. package/docs/sections/oauth/full.md +0 -189
  709. package/docs/sections/oauth/overview.md +0 -16
  710. package/docs/sections/package-development/full.md +0 -7
  711. package/docs/sections/pagination/full.md +0 -93
  712. package/docs/sections/passkey-login/full.md +0 -90
  713. package/docs/sections/passkey-login/overview.md +0 -1
  714. package/docs/sections/peer-dependencies/full.md +0 -47
  715. package/docs/sections/quick-start/full.md +0 -43
  716. package/docs/sections/response-caching/full.md +0 -117
  717. package/docs/sections/response-caching/overview.md +0 -13
  718. package/docs/sections/roles/full.md +0 -225
  719. package/docs/sections/roles/overview.md +0 -14
  720. package/docs/sections/running-without-redis/full.md +0 -16
  721. package/docs/sections/running-without-redis-or-mongodb/full.md +0 -60
  722. package/docs/sections/signing/full.md +0 -203
  723. package/docs/sections/stack/full.md +0 -10
  724. package/docs/sections/uploads/full.md +0 -208
  725. package/docs/sections/versioning/full.md +0 -85
  726. package/docs/sections/webhook-auth/full.md +0 -100
  727. package/docs/sections/websocket/full.md +0 -196
  728. package/docs/sections/websocket/overview.md +0 -5
  729. package/docs/sections/websocket-rooms/full.md +0 -102
  730. package/docs/sections/websocket-rooms/overview.md +0 -5
  731. /package/dist/{lib/storageAdapter.js → packages/bunshot-admin/src/types/env.js} +0 -0
  732. /package/dist/{lib → packages/bunshot-auth/src/lib}/fingerprint.d.ts +0 -0
  733. /package/dist/{lib → packages/bunshot-auth/src/lib}/logger.d.ts +0 -0
  734. /package/dist/{lib → packages/bunshot-core/src}/constants.d.ts +0 -0
  735. /package/dist/{lib → packages/bunshot-core/src}/storageAdapter.d.ts +0 -0
  736. /package/dist/{lib → src/framework/lib}/createDtoMapper.d.ts +0 -0
  737. /package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.d.ts +0 -0
  738. /package/dist/{middleware → src/framework/middleware}/cors.d.ts +0 -0
  739. /package/dist/{middleware → src/framework/middleware}/cors.js +0 -0
  740. /package/dist/{middleware → src/framework/middleware}/index.d.ts +0 -0
  741. /package/dist/{middleware → src/framework/middleware}/logger.js +0 -0
  742. /package/dist/{lib → src/shared/lib}/constants.js +0 -0
@@ -0,0 +1,148 @@
1
+ import { DEFAULT_MAX_ENTRIES, evictExpired, evictOldest, sha256 as hashToken, } from '../../../bunshot-core/src/index.js';
2
+ export function createMemoryResetTokenRepository() {
3
+ const tokens = new Map();
4
+ return {
5
+ async create(hash, userId, email, ttl) {
6
+ evictExpired(tokens);
7
+ evictOldest(tokens, DEFAULT_MAX_ENTRIES);
8
+ tokens.set(hash, { userId, email, expiresAt: Date.now() + ttl * 1000 });
9
+ },
10
+ async consume(hash) {
11
+ const entry = tokens.get(hash);
12
+ if (!entry || entry.expiresAt <= Date.now()) {
13
+ tokens.delete(hash);
14
+ return null;
15
+ }
16
+ tokens.delete(hash);
17
+ return { userId: entry.userId, email: entry.email };
18
+ },
19
+ };
20
+ }
21
+ // ---------------------------------------------------------------------------
22
+ // SQLite repository factory
23
+ // ---------------------------------------------------------------------------
24
+ export function createSqliteResetTokenRepository(db) {
25
+ let initialized = false;
26
+ function init() {
27
+ if (initialized)
28
+ return;
29
+ db.run(`CREATE TABLE IF NOT EXISTS auth_reset_tokens (
30
+ tokenHash TEXT PRIMARY KEY,
31
+ userId TEXT NOT NULL,
32
+ email TEXT NOT NULL,
33
+ expiresAt INTEGER NOT NULL
34
+ )`);
35
+ db.run('CREATE INDEX IF NOT EXISTS idx_auth_reset_tokens_expiresAt ON auth_reset_tokens(expiresAt)');
36
+ initialized = true;
37
+ }
38
+ return {
39
+ async create(hash, userId, email, ttl) {
40
+ init();
41
+ const expiresAt = Date.now() + ttl * 1000;
42
+ db.run(`INSERT INTO auth_reset_tokens (tokenHash, userId, email, expiresAt)
43
+ VALUES (?, ?, ?, ?)
44
+ ON CONFLICT(tokenHash) DO UPDATE SET userId = excluded.userId, email = excluded.email, expiresAt = excluded.expiresAt`, [hash, userId, email, expiresAt]);
45
+ },
46
+ async consume(hash) {
47
+ init();
48
+ const now = Date.now();
49
+ const row = db
50
+ .query('SELECT userId, email FROM auth_reset_tokens WHERE tokenHash = ? AND expiresAt > ?')
51
+ .get(hash, now);
52
+ db.run('DELETE FROM auth_reset_tokens WHERE tokenHash = ?', [hash]);
53
+ if (!row)
54
+ return null;
55
+ return { userId: row.userId, email: row.email };
56
+ },
57
+ };
58
+ }
59
+ // ---------------------------------------------------------------------------
60
+ // Redis repository factory
61
+ // ---------------------------------------------------------------------------
62
+ async function redisGetDel(redis, key) {
63
+ if (typeof redis.getdel === 'function') {
64
+ try {
65
+ return await redis.getdel(key);
66
+ }
67
+ catch (err) {
68
+ const msg = err?.message ?? '';
69
+ if (!/unknown command|ERR unknown command/i.test(msg))
70
+ throw err;
71
+ }
72
+ }
73
+ 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);
74
+ return result ?? null;
75
+ }
76
+ export function createRedisResetTokenRepository(getRedis, appName) {
77
+ return {
78
+ async create(hash, userId, email, ttl) {
79
+ await getRedis().set(`reset:${appName}:${hash}`, JSON.stringify({ userId, email }), 'EX', ttl);
80
+ },
81
+ async consume(hash) {
82
+ const raw = await redisGetDel(getRedis(), `reset:${appName}:${hash}`);
83
+ if (!raw)
84
+ return null;
85
+ return JSON.parse(raw);
86
+ },
87
+ };
88
+ }
89
+ export function createMongoResetTokenRepository(conn, mg) {
90
+ function getModel() {
91
+ if (conn.models['PasswordReset'])
92
+ return conn.models['PasswordReset'];
93
+ const { Schema } = mg;
94
+ const schema = new Schema({
95
+ token: { type: String, required: true, unique: true },
96
+ userId: { type: String, required: true },
97
+ email: { type: String, required: true },
98
+ expiresAt: { type: Date, required: true, index: { expireAfterSeconds: 0 } },
99
+ }, { collection: 'password_resets' });
100
+ return conn.model('PasswordReset', schema);
101
+ }
102
+ return {
103
+ async create(hash, userId, email, ttl) {
104
+ await getModel().create({
105
+ token: hash,
106
+ userId,
107
+ email,
108
+ expiresAt: new Date(Date.now() + ttl * 1000),
109
+ });
110
+ },
111
+ async consume(hash) {
112
+ const doc = await getModel()
113
+ .findOneAndDelete({ token: hash, expiresAt: { $gt: new Date() } })
114
+ .lean();
115
+ if (!doc)
116
+ return null;
117
+ return { userId: doc.userId, email: doc.email };
118
+ },
119
+ };
120
+ }
121
+ export const resetTokenFactories = {
122
+ memory: () => createMemoryResetTokenRepository(),
123
+ sqlite: infra => createSqliteResetTokenRepository(infra.getSqliteDb()),
124
+ redis: infra => createRedisResetTokenRepository(infra.getRedis, infra.appName),
125
+ mongo: infra => {
126
+ const { conn, mg } = infra.getMongo();
127
+ return createMongoResetTokenRepository(conn, mg);
128
+ },
129
+ postgres: () => {
130
+ throw new Error('[bunshot-auth] postgres store is not yet supported for resetToken repository');
131
+ },
132
+ };
133
+ // ---------------------------------------------------------------------------
134
+ // Public API
135
+ // ---------------------------------------------------------------------------
136
+ export const createResetToken = async (repo, userId, email, config) => {
137
+ const bytes = new Uint8Array(32);
138
+ crypto.getRandomValues(bytes);
139
+ const token = Buffer.from(bytes).toString('base64url');
140
+ const hash = hashToken(token);
141
+ const ttl = config.passwordReset?.tokenExpiry ?? 3600;
142
+ await repo.create(hash, userId, email, ttl);
143
+ return token;
144
+ };
145
+ export const consumeResetToken = async (repo, token) => {
146
+ const hash = hashToken(token);
147
+ return repo.consume(hash);
148
+ };
@@ -0,0 +1,9 @@
1
+ import type { BunshotEventBus } from '../../../bunshot-core/src/index.js';
2
+ import type { AuthAdapter } from './authAdapter';
3
+ export declare const setUserRoles: (userId: string, roles: string[], changedBy?: string, adapter?: AuthAdapter, eventBus?: BunshotEventBus) => Promise<void>;
4
+ export declare const addUserRole: (userId: string, role: string, changedBy?: string, adapter?: AuthAdapter, eventBus?: BunshotEventBus) => Promise<void>;
5
+ export declare const removeUserRole: (userId: string, role: string, changedBy?: string, adapter?: AuthAdapter, eventBus?: BunshotEventBus) => Promise<void>;
6
+ export declare const getTenantRoles: (userId: string, tenantId: string, adapter?: AuthAdapter) => Promise<string[]>;
7
+ export declare const setTenantRoles: (userId: string, tenantId: string, roles: string[], changedBy?: string, adapter?: AuthAdapter, eventBus?: BunshotEventBus) => Promise<void>;
8
+ export declare const addTenantRole: (userId: string, tenantId: string, role: string, changedBy?: string, adapter?: AuthAdapter, eventBus?: BunshotEventBus) => Promise<void>;
9
+ export declare const removeTenantRole: (userId: string, tenantId: string, role: string, changedBy?: string, adapter?: AuthAdapter, eventBus?: BunshotEventBus) => Promise<void>;
@@ -0,0 +1,93 @@
1
+ const requireMethod = (method) => {
2
+ throw new Error(`Auth adapter does not implement ${method} — add it to your adapter to manage roles`);
3
+ };
4
+ export const setUserRoles = async (userId, roles, changedBy, adapter, eventBus) => {
5
+ if (!adapter)
6
+ throw new Error('Auth adapter is required');
7
+ if (!adapter.setRoles)
8
+ requireMethod('setRoles');
9
+ await adapter.setRoles(userId, roles);
10
+ eventBus?.emit('security.admin.role.changed', {
11
+ userId,
12
+ meta: { targetUserId: userId, changedBy, scope: 'app', roles, action: 'set' },
13
+ });
14
+ };
15
+ export const addUserRole = async (userId, role, changedBy, adapter, eventBus) => {
16
+ if (!adapter)
17
+ throw new Error('Auth adapter is required');
18
+ if (!adapter.addRole)
19
+ requireMethod('addRole');
20
+ await adapter.addRole(userId, role);
21
+ eventBus?.emit('security.admin.role.changed', {
22
+ userId,
23
+ meta: { targetUserId: userId, changedBy, scope: 'app', roles: [role], action: 'add' },
24
+ });
25
+ };
26
+ export const removeUserRole = async (userId, role, changedBy, adapter, eventBus) => {
27
+ if (!adapter)
28
+ throw new Error('Auth adapter is required');
29
+ if (!adapter.removeRole)
30
+ requireMethod('removeRole');
31
+ await adapter.removeRole(userId, role);
32
+ eventBus?.emit('security.admin.role.changed', {
33
+ userId,
34
+ meta: { targetUserId: userId, changedBy, scope: 'app', roles: [role], action: 'remove' },
35
+ });
36
+ };
37
+ // ---------------------------------------------------------------------------
38
+ // Tenant-scoped role helpers
39
+ // ---------------------------------------------------------------------------
40
+ export const getTenantRoles = async (userId, tenantId, adapter) => {
41
+ if (!adapter)
42
+ throw new Error('Auth adapter is required');
43
+ if (!adapter.getTenantRoles)
44
+ requireMethod('getTenantRoles');
45
+ return adapter.getTenantRoles(userId, tenantId);
46
+ };
47
+ export const setTenantRoles = async (userId, tenantId, roles, changedBy, adapter, eventBus) => {
48
+ if (!adapter)
49
+ throw new Error('Auth adapter is required');
50
+ if (!adapter.setTenantRoles)
51
+ requireMethod('setTenantRoles');
52
+ await adapter.setTenantRoles(userId, tenantId, roles);
53
+ eventBus?.emit('security.admin.role.changed', {
54
+ userId,
55
+ meta: { targetUserId: userId, changedBy, scope: 'tenant', tenantId, roles, action: 'set' },
56
+ });
57
+ };
58
+ export const addTenantRole = async (userId, tenantId, role, changedBy, adapter, eventBus) => {
59
+ if (!adapter)
60
+ throw new Error('Auth adapter is required');
61
+ if (!adapter.addTenantRole)
62
+ requireMethod('addTenantRole');
63
+ await adapter.addTenantRole(userId, tenantId, role);
64
+ eventBus?.emit('security.admin.role.changed', {
65
+ userId,
66
+ meta: {
67
+ targetUserId: userId,
68
+ changedBy,
69
+ scope: 'tenant',
70
+ tenantId,
71
+ roles: [role],
72
+ action: 'add',
73
+ },
74
+ });
75
+ };
76
+ export const removeTenantRole = async (userId, tenantId, role, changedBy, adapter, eventBus) => {
77
+ if (!adapter)
78
+ throw new Error('Auth adapter is required');
79
+ if (!adapter.removeTenantRole)
80
+ requireMethod('removeTenantRole');
81
+ await adapter.removeTenantRole(userId, tenantId, role);
82
+ eventBus?.emit('security.admin.role.changed', {
83
+ userId,
84
+ meta: {
85
+ targetUserId: userId,
86
+ changedBy,
87
+ scope: 'tenant',
88
+ tenantId,
89
+ roles: [role],
90
+ action: 'remove',
91
+ },
92
+ });
93
+ };
@@ -0,0 +1,29 @@
1
+ import type { IdentityProfile } from '../lib/authAdapter';
2
+ export interface SamlProfile {
3
+ nameId: string;
4
+ nameIdFormat?: string;
5
+ email?: string;
6
+ firstName?: string;
7
+ lastName?: string;
8
+ displayName?: string;
9
+ groups?: string[];
10
+ attributes: Record<string, string | string[]>;
11
+ }
12
+ export interface SamlAttributeMapping {
13
+ email?: string;
14
+ firstName?: string;
15
+ lastName?: string;
16
+ groups?: string;
17
+ }
18
+ export interface SamlInstances {
19
+ sp: any;
20
+ idp: any;
21
+ }
22
+ export declare function initSaml(config: import('../config/authConfig').SamlConfig): Promise<SamlInstances>;
23
+ export declare function createAuthnRequest(sp: any, idp: any): {
24
+ redirectUrl: string;
25
+ id: string;
26
+ };
27
+ export declare function validateSamlResponse(sp: any, idp: any, body: string, config: import('../config/authConfig').SamlConfig, requestId?: string): Promise<SamlProfile>;
28
+ export declare function samlProfileToIdentityProfile(profile: SamlProfile): IdentityProfile;
29
+ export declare function getSamlSpMetadata(sp: any): string;
@@ -0,0 +1,73 @@
1
+ import { isProd } from '../lib/env';
2
+ export async function initSaml(config) {
3
+ // Guard before loading the optional peer dependency so the error/warning is
4
+ // unambiguous even if samlify's own SP constructor throws.
5
+ if (config.idpMetadata.startsWith('http://')) {
6
+ if (isProd()) {
7
+ throw new Error('SAML IdP metadata URL must use HTTPS in production');
8
+ }
9
+ console.warn('[saml] WARNING: IdP metadata over HTTP — do not use in production');
10
+ }
11
+ const samlify = await import('samlify');
12
+ const sp = samlify.ServiceProvider({
13
+ entityID: config.entityId,
14
+ assertionConsumerService: [
15
+ {
16
+ Binding: samlify.Constants.BindingNamespace.Post,
17
+ Location: config.acsUrl,
18
+ },
19
+ ],
20
+ signingCert: config.signingCert,
21
+ privateKey: config.signingKey,
22
+ allowCreate: true,
23
+ });
24
+ let idp;
25
+ // Load IdP metadata
26
+ if (config.idpMetadata.startsWith('http://') || config.idpMetadata.startsWith('https://')) {
27
+ // URL — fetch it
28
+ const res = await fetch(config.idpMetadata);
29
+ const xml = await res.text();
30
+ idp = samlify.IdentityProvider({ metadata: xml });
31
+ }
32
+ else {
33
+ // XML string
34
+ idp = samlify.IdentityProvider({ metadata: config.idpMetadata });
35
+ }
36
+ return { sp, idp };
37
+ }
38
+ export function createAuthnRequest(sp, idp) {
39
+ const { id, context, entityEndpoint } = sp.createLoginRequest(idp, 'redirect');
40
+ return { redirectUrl: entityEndpoint + '?' + context, id };
41
+ }
42
+ export async function validateSamlResponse(sp, idp, body, config, requestId) {
43
+ const parseArgs = [idp, 'post', { body: { SAMLResponse: body } }];
44
+ // When requestId is provided, samlify validates InResponseTo in the SAML response
45
+ const { extract } = requestId
46
+ ? await sp.parseLoginResponse(...parseArgs, requestId)
47
+ : await sp.parseLoginResponse(...parseArgs);
48
+ const mapping = config.attributeMapping ?? {};
49
+ const attrs = extract.attributes ?? {};
50
+ const emailKey = mapping.email ?? 'email';
51
+ const firstNameKey = mapping.firstName ?? 'firstName';
52
+ const lastNameKey = mapping.lastName ?? 'lastName';
53
+ const groupsKey = mapping.groups ?? 'groups';
54
+ const nameId = extract.nameID;
55
+ const email = attrs[emailKey] ?? nameId;
56
+ const firstName = attrs[firstNameKey];
57
+ const lastName = attrs[lastNameKey];
58
+ const displayName = firstName && lastName ? `${firstName} ${lastName}` : undefined;
59
+ const rawGroups = attrs[groupsKey];
60
+ const groups = rawGroups ? (Array.isArray(rawGroups) ? rawGroups : [rawGroups]) : undefined;
61
+ return { nameId, email, firstName, lastName, displayName, groups, attributes: attrs };
62
+ }
63
+ export function samlProfileToIdentityProfile(profile) {
64
+ return {
65
+ email: profile.email,
66
+ displayName: profile.displayName,
67
+ firstName: profile.firstName,
68
+ lastName: profile.lastName,
69
+ };
70
+ }
71
+ export function getSamlSpMetadata(sp) {
72
+ return sp.getMetadata();
73
+ }
@@ -0,0 +1,13 @@
1
+ import type { RepoFactories } from '../../../bunshot-core/src/index.js';
2
+ import type { RedisLike } from '../types/redis';
3
+ export interface ISamlRequestIdRepository {
4
+ store(hash: string, ttl: number): Promise<void>;
5
+ exists(hash: string): Promise<boolean>;
6
+ }
7
+ export declare function createMemorySamlRequestIdRepository(): ISamlRequestIdRepository;
8
+ export declare function createSqliteSamlRequestIdRepository(db: import('bun:sqlite').Database): ISamlRequestIdRepository;
9
+ export declare function createRedisSamlRequestIdRepository(getRedis: () => RedisLike, appName: string): ISamlRequestIdRepository;
10
+ export declare function createMongoSamlRequestIdRepository(conn: import('mongoose').Connection, mg: typeof import('mongoose')): ISamlRequestIdRepository;
11
+ export declare const samlRequestIdFactories: RepoFactories<ISamlRequestIdRepository>;
12
+ export declare const storeSamlRequestId: (repo: ISamlRequestIdRepository, requestId: string) => Promise<void>;
13
+ export declare const consumeSamlRequestId: (repo: ISamlRequestIdRepository, requestId: string) => Promise<boolean>;
@@ -0,0 +1,129 @@
1
+ import { DEFAULT_MAX_ENTRIES, evictOldest, sha256 } from '../../../bunshot-core/src/index.js';
2
+ // ---------------------------------------------------------------------------
3
+ // Memory repository factory
4
+ // ---------------------------------------------------------------------------
5
+ export function createMemorySamlRequestIdRepository() {
6
+ const memoryStore = new Map(); // hash -> expiresAt (epoch ms)
7
+ return {
8
+ async store(hash, ttl) {
9
+ evictOldest(memoryStore, DEFAULT_MAX_ENTRIES);
10
+ memoryStore.set(hash, Date.now() + ttl * 1000);
11
+ },
12
+ async exists(hash) {
13
+ const expiresAt = memoryStore.get(hash);
14
+ if (expiresAt === undefined)
15
+ return false;
16
+ memoryStore.delete(hash);
17
+ if (Date.now() > expiresAt)
18
+ return false;
19
+ return true;
20
+ },
21
+ };
22
+ }
23
+ // ---------------------------------------------------------------------------
24
+ // SQLite repository factory
25
+ // ---------------------------------------------------------------------------
26
+ export function createSqliteSamlRequestIdRepository(db) {
27
+ let tableCreated = false;
28
+ function ensureTable() {
29
+ if (tableCreated || !db)
30
+ return;
31
+ db.run(`
32
+ CREATE TABLE IF NOT EXISTS saml_request_ids (
33
+ hash TEXT PRIMARY KEY,
34
+ expires_at INTEGER NOT NULL
35
+ )
36
+ `);
37
+ tableCreated = true;
38
+ }
39
+ return {
40
+ async store(hash, ttl) {
41
+ if (!db)
42
+ return;
43
+ ensureTable();
44
+ const expiresAt = Math.floor(Date.now() / 1000) + ttl;
45
+ db.run('INSERT OR REPLACE INTO saml_request_ids (hash, expires_at) VALUES (?, ?)', [
46
+ hash,
47
+ expiresAt,
48
+ ]);
49
+ },
50
+ async exists(hash) {
51
+ if (!db)
52
+ return false;
53
+ ensureTable();
54
+ const now = Math.floor(Date.now() / 1000);
55
+ const row = db
56
+ .query('SELECT hash FROM saml_request_ids WHERE hash = ? AND expires_at > ?')
57
+ .get(hash, now);
58
+ if (!row)
59
+ return false;
60
+ db.run('DELETE FROM saml_request_ids WHERE hash = ?', [hash]);
61
+ return true;
62
+ },
63
+ };
64
+ }
65
+ // ---------------------------------------------------------------------------
66
+ // Redis repository factory
67
+ // ---------------------------------------------------------------------------
68
+ export function createRedisSamlRequestIdRepository(getRedis, appName) {
69
+ return {
70
+ async store(hash, ttl) {
71
+ await getRedis().set(`samlreqid:${appName}:${hash}`, '1', 'EX', ttl);
72
+ },
73
+ async exists(hash) {
74
+ const key = `samlreqid:${appName}:${hash}`;
75
+ const deleted = await getRedis().del(key);
76
+ return deleted === 1;
77
+ },
78
+ };
79
+ }
80
+ export function createMongoSamlRequestIdRepository(conn, mg) {
81
+ function getModel() {
82
+ if (conn.models['SamlRequestId'])
83
+ return conn.models['SamlRequestId'];
84
+ const { Schema } = mg;
85
+ const schema = new Schema({
86
+ hash: { type: String, required: true, unique: true },
87
+ expiresAt: { type: Date, required: true, index: { expireAfterSeconds: 0 } },
88
+ }, { collection: 'saml_request_ids' });
89
+ return conn.model('SamlRequestId', schema);
90
+ }
91
+ return {
92
+ async store(hash, ttl) {
93
+ await getModel().create({
94
+ hash,
95
+ expiresAt: new Date(Date.now() + ttl * 1000),
96
+ });
97
+ },
98
+ async exists(hash) {
99
+ const doc = await getModel()
100
+ .findOneAndDelete({ hash, expiresAt: { $gt: new Date() } })
101
+ .lean();
102
+ return doc !== null;
103
+ },
104
+ };
105
+ }
106
+ export const samlRequestIdFactories = {
107
+ memory: () => createMemorySamlRequestIdRepository(),
108
+ sqlite: infra => createSqliteSamlRequestIdRepository(infra.getSqliteDb()),
109
+ redis: infra => createRedisSamlRequestIdRepository(infra.getRedis, infra.appName),
110
+ mongo: infra => {
111
+ const { conn, mg } = infra.getMongo();
112
+ return createMongoSamlRequestIdRepository(conn, mg);
113
+ },
114
+ postgres: () => {
115
+ throw new Error('[bunshot-auth] postgres store is not yet supported for samlRequestId repository');
116
+ },
117
+ };
118
+ // ---------------------------------------------------------------------------
119
+ // Public API
120
+ // ---------------------------------------------------------------------------
121
+ const REQUEST_ID_TTL = 300; // 5 minutes
122
+ export const storeSamlRequestId = async (repo, requestId) => {
123
+ const hash = sha256(requestId);
124
+ await repo.store(hash, REQUEST_ID_TTL);
125
+ };
126
+ export const consumeSamlRequestId = async (repo, requestId) => {
127
+ const hash = sha256(requestId);
128
+ return repo.exists(hash);
129
+ };
@@ -1,6 +1,6 @@
1
- import type { UserRecord } from "./authAdapter";
1
+ import type { UserRecord } from '../lib/authAdapter';
2
2
  export interface ScimUser {
3
- schemas: ["urn:ietf:params:scim:schemas:core:2.0:User"];
3
+ schemas: ['urn:ietf:params:scim:schemas:core:2.0:User'];
4
4
  id: string;
5
5
  externalId?: string;
6
6
  userName: string;
@@ -16,29 +16,29 @@ export interface ScimUser {
16
16
  }>;
17
17
  active: boolean;
18
18
  meta: {
19
- resourceType: "User";
19
+ resourceType: 'User';
20
20
  created?: string;
21
21
  lastModified?: string;
22
22
  };
23
23
  }
24
24
  export interface ScimListResponse {
25
- schemas: ["urn:ietf:params:scim:api:messages:2.0:ListResponse"];
25
+ schemas: ['urn:ietf:params:scim:api:messages:2.0:ListResponse'];
26
26
  totalResults: number;
27
27
  startIndex: number;
28
28
  itemsPerPage: number;
29
29
  Resources: ScimUser[];
30
30
  }
31
31
  export interface ScimError {
32
- schemas: ["urn:ietf:params:scim:api:messages:2.0:Error"];
32
+ schemas: ['urn:ietf:params:scim:api:messages:2.0:Error'];
33
33
  status: string;
34
34
  detail: string;
35
35
  }
36
36
  export declare function userRecordToScim(user: UserRecord, config?: {
37
- userName?: "email" | "username";
37
+ userName?: 'email' | 'username';
38
38
  }): ScimUser;
39
39
  /**
40
40
  * Parse a simple SCIM filter string into a UserQuery object.
41
41
  * Supports: userName eq "val", email eq "val", externalId eq "val", active eq true/false
42
42
  */
43
- export declare function parseScimFilter(filter?: string): import("./authAdapter").UserQuery;
43
+ export declare function parseScimFilter(filter?: string): import('../lib/authAdapter').UserQuery;
44
44
  export declare function scimError(status: number, detail: string): Response;
@@ -1,19 +1,21 @@
1
1
  export function userRecordToScim(user, config) {
2
2
  const userName = user.email ?? user.id;
3
3
  return {
4
- schemas: ["urn:ietf:params:scim:schemas:core:2.0:User"],
4
+ schemas: ['urn:ietf:params:scim:schemas:core:2.0:User'],
5
5
  id: user.id,
6
6
  externalId: user.externalId,
7
7
  userName,
8
8
  displayName: user.displayName,
9
- name: (user.firstName || user.lastName) ? {
10
- givenName: user.firstName,
11
- familyName: user.lastName,
12
- formatted: [user.firstName, user.lastName].filter(Boolean).join(" ") || undefined,
13
- } : undefined,
9
+ name: user.firstName || user.lastName
10
+ ? {
11
+ givenName: user.firstName,
12
+ familyName: user.lastName,
13
+ formatted: [user.firstName, user.lastName].filter(Boolean).join(' ') || undefined,
14
+ }
15
+ : undefined,
14
16
  emails: user.email ? [{ value: user.email, primary: true }] : undefined,
15
17
  active: !user.suspended,
16
- meta: { resourceType: "User" },
18
+ meta: { resourceType: 'User' },
17
19
  };
18
20
  }
19
21
  /**
@@ -30,25 +32,25 @@ export function parseScimFilter(filter) {
30
32
  return {};
31
33
  const [, attr, value] = match;
32
34
  const attrLower = attr.toLowerCase();
33
- if (attrLower === "username" || attrLower === "email") {
35
+ if (attrLower === 'username' || attrLower === 'email') {
34
36
  query.email = value;
35
37
  }
36
- else if (attrLower === "externalid") {
38
+ else if (attrLower === 'externalid') {
37
39
  query.externalId = value;
38
40
  }
39
- else if (attrLower === "active") {
40
- query.suspended = value.toLowerCase() !== "true"; // active=true means suspended=false
41
+ else if (attrLower === 'active') {
42
+ query.suspended = value.toLowerCase() !== 'true'; // active=true means suspended=false
41
43
  }
42
44
  return query;
43
45
  }
44
46
  export function scimError(status, detail) {
45
47
  const body = {
46
- schemas: ["urn:ietf:params:scim:api:messages:2.0:Error"],
48
+ schemas: ['urn:ietf:params:scim:api:messages:2.0:Error'],
47
49
  status: String(status),
48
50
  detail,
49
51
  };
50
52
  return new Response(JSON.stringify(body), {
51
53
  status,
52
- headers: { "Content-Type": "application/scim+json" },
54
+ headers: { 'Content-Type': 'application/scim+json' },
53
55
  });
54
56
  }
@@ -0,0 +1,22 @@
1
+ import type { BunshotEventBus } from '../../../bunshot-core/src/index.js';
2
+ import { type SecurityEventKey } from '../../../bunshot-core/src/index.js';
3
+ export interface SecurityEventsConfig {
4
+ onEvent: (event: SecurityEvent) => void;
5
+ onEventError?: (err: unknown) => void;
6
+ include?: SecurityEventKey[];
7
+ exclude?: SecurityEventKey[];
8
+ }
9
+ export interface SecurityEvent {
10
+ eventType: SecurityEventKey;
11
+ severity: 'info' | 'warn' | 'critical';
12
+ timestamp: string;
13
+ requestId?: string;
14
+ userId?: string;
15
+ sessionId?: string;
16
+ tenantId?: string;
17
+ ip?: string;
18
+ userAgent?: string;
19
+ meta?: Record<string, unknown>;
20
+ [key: string]: unknown;
21
+ }
22
+ export declare function wireSecurityEventConfig(bus: BunshotEventBus, cfg?: SecurityEventsConfig): void;