@lastshotlabs/bunshot 0.0.27 → 0.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (742) hide show
  1. package/.oclif.manifest.json +39 -0
  2. package/README.md +8282 -2147
  3. package/dist/cli/commands/init.js +690 -0
  4. package/dist/cli/index.js +6 -0
  5. package/dist/cli.js +4 -4
  6. package/dist/packages/bunshot-admin/src/index.d.ts +15 -0
  7. package/dist/packages/bunshot-admin/src/index.js +11 -0
  8. package/dist/packages/bunshot-admin/src/lib/resourceTypes.d.ts +8 -0
  9. package/dist/packages/bunshot-admin/src/lib/resourceTypes.js +33 -0
  10. package/dist/packages/bunshot-admin/src/lib/typedRoute.d.ts +14 -0
  11. package/dist/packages/bunshot-admin/src/lib/typedRoute.js +17 -0
  12. package/dist/packages/bunshot-admin/src/plugin.d.ts +4 -0
  13. package/dist/packages/bunshot-admin/src/plugin.js +46 -0
  14. package/dist/packages/bunshot-admin/src/providers/auth0Access.d.ts +6 -0
  15. package/dist/packages/bunshot-admin/src/providers/auth0Access.js +32 -0
  16. package/dist/packages/bunshot-admin/src/routes/admin.d.ts +10 -0
  17. package/dist/packages/bunshot-admin/src/routes/admin.js +923 -0
  18. package/dist/packages/bunshot-admin/src/routes/mail.d.ts +6 -0
  19. package/dist/packages/bunshot-admin/src/routes/mail.js +114 -0
  20. package/dist/packages/bunshot-admin/src/routes/permissions.d.ts +8 -0
  21. package/dist/packages/bunshot-admin/src/routes/permissions.js +315 -0
  22. package/dist/packages/bunshot-admin/src/types/config.d.ts +16 -0
  23. package/dist/packages/bunshot-admin/src/types/config.js +37 -0
  24. package/dist/packages/bunshot-admin/src/types/env.d.ts +14 -0
  25. package/dist/packages/bunshot-admin/src/types/provider.d.ts +1 -0
  26. package/dist/packages/bunshot-admin/src/types/provider.js +4 -0
  27. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.d.ts +66 -0
  28. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.js +1063 -0
  29. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.d.ts +2 -0
  30. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.js +536 -0
  31. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.d.ts +88 -0
  32. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.js +1366 -0
  33. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.d.ts +2 -0
  34. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.js +23 -0
  35. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.d.ts +5 -0
  36. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.js +131 -0
  37. package/dist/packages/bunshot-auth/src/bootstrap.d.ts +38 -0
  38. package/dist/packages/bunshot-auth/src/bootstrap.js +384 -0
  39. package/dist/packages/bunshot-auth/src/config/appConfig.d.ts +3 -0
  40. package/dist/packages/bunshot-auth/src/config/appConfig.js +4 -0
  41. package/dist/packages/bunshot-auth/src/config/authConfig.d.ts +478 -0
  42. package/dist/packages/bunshot-auth/src/config/authConfig.js +46 -0
  43. package/dist/packages/bunshot-auth/src/config/configLock.d.ts +2 -0
  44. package/dist/packages/bunshot-auth/src/config/configLock.js +10 -0
  45. package/dist/packages/bunshot-auth/src/index.d.ts +25 -0
  46. package/dist/packages/bunshot-auth/src/index.js +23 -0
  47. package/dist/packages/bunshot-auth/src/infra/mongo.d.ts +15 -0
  48. package/dist/packages/bunshot-auth/src/infra/mongo.js +44 -0
  49. package/dist/packages/bunshot-auth/src/infra/queue.d.ts +14 -0
  50. package/dist/packages/bunshot-auth/src/infra/queue.js +27 -0
  51. package/dist/packages/bunshot-auth/src/infra/redis.d.ts +5 -0
  52. package/dist/packages/bunshot-auth/src/infra/redis.js +15 -0
  53. package/dist/packages/bunshot-auth/src/infra/signing.d.ts +7 -0
  54. package/dist/packages/bunshot-auth/src/infra/signing.js +8 -0
  55. package/dist/packages/bunshot-auth/src/lib/accountLockout.d.ts +34 -0
  56. package/dist/packages/bunshot-auth/src/lib/accountLockout.js +244 -0
  57. package/dist/packages/bunshot-auth/src/lib/adapterTiers.d.ts +1 -0
  58. package/dist/packages/bunshot-auth/src/lib/adapterTiers.js +1 -0
  59. package/dist/packages/bunshot-auth/src/lib/authAdapter.d.ts +1 -0
  60. package/dist/packages/bunshot-auth/src/lib/authAdapter.js +1 -0
  61. package/dist/packages/bunshot-auth/src/lib/authContext.d.ts +15 -0
  62. package/dist/packages/bunshot-auth/src/lib/authContext.js +1 -0
  63. package/dist/packages/bunshot-auth/src/lib/authEventBus.d.ts +4 -0
  64. package/dist/packages/bunshot-auth/src/lib/authEventBus.js +15 -0
  65. package/dist/packages/bunshot-auth/src/lib/authRateLimit.d.ts +28 -0
  66. package/dist/packages/bunshot-auth/src/lib/authRateLimit.js +205 -0
  67. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.d.ts +8 -2
  68. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.js +22 -9
  69. package/dist/packages/bunshot-auth/src/lib/cache.d.ts +12 -0
  70. package/dist/packages/bunshot-auth/src/lib/cache.js +120 -0
  71. package/dist/packages/bunshot-auth/src/lib/clientIp.d.ts +4 -0
  72. package/dist/{lib → packages/bunshot-auth/src/lib}/clientIp.js +14 -7
  73. package/dist/packages/bunshot-auth/src/lib/cookieOptions.d.ts +27 -0
  74. package/dist/packages/bunshot-auth/src/lib/cookieOptions.js +33 -0
  75. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.d.ts +40 -0
  76. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.js +221 -0
  77. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.d.ts +19 -0
  78. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.js +148 -0
  79. package/dist/packages/bunshot-auth/src/lib/emailTemplates.d.ts +23 -0
  80. package/dist/packages/bunshot-auth/src/lib/emailTemplates.js +265 -0
  81. package/dist/packages/bunshot-auth/src/lib/emailVerification.d.ts +30 -0
  82. package/dist/packages/bunshot-auth/src/lib/emailVerification.js +200 -0
  83. package/dist/packages/bunshot-auth/src/lib/env.d.ts +1 -0
  84. package/dist/packages/bunshot-auth/src/lib/env.js +3 -0
  85. package/dist/packages/bunshot-auth/src/lib/fingerprint.js +36 -0
  86. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.d.ts +15 -16
  87. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.js +22 -34
  88. package/dist/packages/bunshot-auth/src/lib/jwks.d.ts +28 -0
  89. package/dist/packages/bunshot-auth/src/lib/jwks.js +79 -0
  90. package/dist/packages/bunshot-auth/src/lib/jwt.d.ts +12 -0
  91. package/dist/packages/bunshot-auth/src/lib/jwt.js +86 -0
  92. package/dist/{lib → packages/bunshot-auth/src/lib}/logger.js +3 -3
  93. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.d.ts +5 -4
  94. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.js +6 -10
  95. package/dist/packages/bunshot-auth/src/lib/magicLink.d.ts +13 -0
  96. package/dist/packages/bunshot-auth/src/lib/magicLink.js +145 -0
  97. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.d.ts +60 -0
  98. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.js +419 -0
  99. package/dist/packages/bunshot-auth/src/lib/oauth.d.ts +82 -0
  100. package/dist/packages/bunshot-auth/src/lib/oauth.js +177 -0
  101. package/dist/packages/bunshot-auth/src/lib/oauthCode.d.ts +19 -0
  102. package/dist/packages/bunshot-auth/src/lib/oauthCode.js +182 -0
  103. package/dist/packages/bunshot-auth/src/lib/oauthReauth.d.ts +19 -0
  104. package/dist/packages/bunshot-auth/src/lib/oauthReauth.js +255 -0
  105. package/dist/packages/bunshot-auth/src/lib/organization.d.ts +66 -0
  106. package/dist/packages/bunshot-auth/src/lib/organization.js +225 -0
  107. package/dist/packages/bunshot-auth/src/lib/passwordHistory.d.ts +12 -0
  108. package/dist/packages/bunshot-auth/src/lib/passwordHistory.js +31 -0
  109. package/dist/packages/bunshot-auth/src/lib/resetPassword.d.ts +20 -0
  110. package/dist/packages/bunshot-auth/src/lib/resetPassword.js +148 -0
  111. package/dist/packages/bunshot-auth/src/lib/roles.d.ts +9 -0
  112. package/dist/packages/bunshot-auth/src/lib/roles.js +93 -0
  113. package/dist/packages/bunshot-auth/src/lib/saml.d.ts +29 -0
  114. package/dist/packages/bunshot-auth/src/lib/saml.js +73 -0
  115. package/dist/packages/bunshot-auth/src/lib/samlRequestId.d.ts +13 -0
  116. package/dist/packages/bunshot-auth/src/lib/samlRequestId.js +129 -0
  117. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.d.ts +7 -7
  118. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.js +15 -13
  119. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.d.ts +22 -0
  120. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.js +65 -0
  121. package/dist/packages/bunshot-auth/src/lib/session.d.ts +45 -0
  122. package/dist/packages/bunshot-auth/src/lib/session.js +1211 -0
  123. package/dist/packages/bunshot-auth/src/lib/storeInfra.d.ts +26 -0
  124. package/dist/packages/bunshot-auth/src/lib/storeInfra.js +18 -0
  125. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.d.ts +3 -2
  126. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.js +2 -5
  127. package/dist/packages/bunshot-auth/src/lib/validateAdapter.d.ts +16 -0
  128. package/dist/packages/bunshot-auth/src/lib/validateAdapter.js +161 -0
  129. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.d.ts +13 -0
  130. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.js +58 -0
  131. package/dist/{middleware → packages/bunshot-auth/src/middleware}/csrf.d.ts +5 -4
  132. package/dist/packages/bunshot-auth/src/middleware/csrf.js +138 -0
  133. package/dist/packages/bunshot-auth/src/middleware/identify.d.ts +4 -0
  134. package/dist/packages/bunshot-auth/src/middleware/identify.js +124 -0
  135. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.d.ts +2 -2
  136. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.js +10 -8
  137. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.d.ts +2 -2
  138. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.js +20 -16
  139. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.d.ts +2 -2
  140. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.js +6 -6
  141. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.d.ts +2 -2
  142. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.js +8 -7
  143. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.d.ts +2 -2
  144. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.js +7 -6
  145. package/dist/packages/bunshot-auth/src/middleware/scimAuth.d.ts +8 -0
  146. package/dist/packages/bunshot-auth/src/middleware/scimAuth.js +29 -0
  147. package/dist/packages/bunshot-auth/src/middleware/userAuth.d.ts +3 -0
  148. package/dist/packages/bunshot-auth/src/middleware/userAuth.js +6 -0
  149. package/dist/{models → packages/bunshot-auth/src/models}/AuthUser.d.ts +12 -8
  150. package/dist/packages/bunshot-auth/src/models/AuthUser.js +53 -0
  151. package/dist/packages/bunshot-auth/src/models/Group.d.ts +19 -0
  152. package/dist/packages/bunshot-auth/src/models/Group.js +22 -0
  153. package/dist/{models → packages/bunshot-auth/src/models}/GroupMembership.d.ts +6 -8
  154. package/dist/packages/bunshot-auth/src/models/GroupMembership.js +19 -0
  155. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.d.ts +1 -1
  156. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.js +5 -5
  157. package/dist/packages/bunshot-auth/src/models/TenantRole.d.ts +13 -0
  158. package/dist/packages/bunshot-auth/src/models/TenantRole.js +17 -0
  159. package/dist/packages/bunshot-auth/src/plugin.d.ts +4 -0
  160. package/dist/packages/bunshot-auth/src/plugin.js +274 -0
  161. package/dist/packages/bunshot-auth/src/routes/auth.d.ts +15 -0
  162. package/dist/packages/bunshot-auth/src/routes/auth.js +1624 -0
  163. package/dist/packages/bunshot-auth/src/routes/groups.d.ts +4 -0
  164. package/dist/packages/bunshot-auth/src/routes/groups.js +481 -0
  165. package/dist/packages/bunshot-auth/src/routes/m2m.d.ts +2 -0
  166. package/dist/packages/bunshot-auth/src/routes/m2m.js +145 -0
  167. package/dist/packages/bunshot-auth/src/routes/mfa.d.ts +6 -0
  168. package/dist/packages/bunshot-auth/src/routes/mfa.js +991 -0
  169. package/dist/packages/bunshot-auth/src/routes/oauth.d.ts +3 -0
  170. package/dist/packages/bunshot-auth/src/routes/oauth.js +1727 -0
  171. package/dist/packages/bunshot-auth/src/routes/oidc.d.ts +2 -0
  172. package/dist/packages/bunshot-auth/src/routes/oidc.js +84 -0
  173. package/dist/packages/bunshot-auth/src/routes/organizations.d.ts +3 -0
  174. package/dist/packages/bunshot-auth/src/routes/organizations.js +741 -0
  175. package/dist/packages/bunshot-auth/src/routes/passkey.d.ts +2 -0
  176. package/dist/packages/bunshot-auth/src/routes/passkey.js +199 -0
  177. package/dist/packages/bunshot-auth/src/routes/saml.d.ts +2 -0
  178. package/dist/packages/bunshot-auth/src/routes/saml.js +226 -0
  179. package/dist/packages/bunshot-auth/src/routes/scim.d.ts +3 -0
  180. package/dist/packages/bunshot-auth/src/routes/scim.js +588 -0
  181. package/dist/packages/bunshot-auth/src/runtime.d.ts +52 -0
  182. package/dist/packages/bunshot-auth/src/runtime.js +11 -0
  183. package/dist/{schemas → packages/bunshot-auth/src/schemas}/auth.d.ts +4 -5
  184. package/dist/packages/bunshot-auth/src/schemas/auth.js +24 -0
  185. package/dist/packages/bunshot-auth/src/schemas/error.d.ts +10 -0
  186. package/dist/packages/bunshot-auth/src/schemas/error.js +10 -0
  187. package/dist/packages/bunshot-auth/src/schemas/success.d.ts +10 -0
  188. package/dist/packages/bunshot-auth/src/schemas/success.js +10 -0
  189. package/dist/packages/bunshot-auth/src/services/auth.d.ts +39 -0
  190. package/dist/packages/bunshot-auth/src/services/auth.js +378 -0
  191. package/dist/{services → packages/bunshot-auth/src/services}/mfa.d.ts +41 -17
  192. package/dist/{services → packages/bunshot-auth/src/services}/mfa.js +259 -183
  193. package/dist/packages/bunshot-auth/src/testing.d.ts +31 -0
  194. package/dist/packages/bunshot-auth/src/testing.js +23 -0
  195. package/dist/packages/bunshot-auth/src/types/adapter.d.ts +1 -0
  196. package/dist/packages/bunshot-auth/src/types/adapter.js +1 -0
  197. package/dist/packages/bunshot-auth/src/types/config.d.ts +152 -0
  198. package/dist/packages/bunshot-auth/src/types/config.js +179 -0
  199. package/dist/{routes → packages/bunshot-auth/src/types}/groups.d.ts +2 -3
  200. package/dist/packages/bunshot-auth/src/types/groups.js +1 -0
  201. package/dist/packages/bunshot-auth/src/types/oauthCode.d.ts +6 -0
  202. package/dist/packages/bunshot-auth/src/types/oauthCode.js +1 -0
  203. package/dist/packages/bunshot-auth/src/types/oauthReauth.d.ts +13 -0
  204. package/dist/packages/bunshot-auth/src/types/oauthReauth.js +1 -0
  205. package/dist/packages/bunshot-auth/src/types/redis.d.ts +1 -0
  206. package/dist/packages/bunshot-auth/src/types/redis.js +1 -0
  207. package/dist/packages/bunshot-auth/src/types/saml.d.ts +10 -0
  208. package/dist/packages/bunshot-auth/src/types/saml.js +1 -0
  209. package/dist/packages/bunshot-auth/src/types/session.d.ts +18 -0
  210. package/dist/packages/bunshot-auth/src/types/session.js +1 -0
  211. package/dist/packages/bunshot-auth/src/types/store.d.ts +1 -0
  212. package/dist/packages/bunshot-auth/src/types/store.js +1 -0
  213. package/dist/packages/bunshot-core/src/adminProvider.d.ts +95 -0
  214. package/dist/packages/bunshot-core/src/adminProvider.js +1 -0
  215. package/dist/packages/bunshot-core/src/auditLog.d.ts +34 -0
  216. package/dist/packages/bunshot-core/src/auditLog.js +1 -0
  217. package/dist/packages/bunshot-core/src/auth-adapter.d.ts +227 -0
  218. package/dist/packages/bunshot-core/src/auth-adapter.js +4 -0
  219. package/dist/packages/bunshot-core/src/authVariables.d.ts +14 -0
  220. package/dist/packages/bunshot-core/src/authVariables.js +4 -0
  221. package/dist/packages/bunshot-core/src/cache.d.ts +12 -0
  222. package/dist/packages/bunshot-core/src/cache.js +21 -0
  223. package/dist/{lib → packages/bunshot-core/src}/captcha.d.ts +1 -10
  224. package/dist/packages/bunshot-core/src/captcha.js +1 -0
  225. package/dist/packages/bunshot-core/src/clearRegistry.d.ts +6 -0
  226. package/dist/packages/bunshot-core/src/clearRegistry.js +17 -0
  227. package/dist/packages/bunshot-core/src/clientIp.d.ts +3 -0
  228. package/dist/packages/bunshot-core/src/clientIp.js +45 -0
  229. package/dist/packages/bunshot-core/src/configLock.d.ts +4 -0
  230. package/dist/packages/bunshot-core/src/configLock.js +7 -0
  231. package/dist/packages/bunshot-core/src/configValidation.d.ts +22 -0
  232. package/dist/packages/bunshot-core/src/configValidation.js +39 -0
  233. package/dist/packages/bunshot-core/src/constants.js +10 -0
  234. package/dist/packages/bunshot-core/src/context/bunshotContext.d.ts +232 -0
  235. package/dist/packages/bunshot-core/src/context/bunshotContext.js +1 -0
  236. package/dist/packages/bunshot-core/src/context/contextAccess.d.ts +3 -0
  237. package/dist/packages/bunshot-core/src/context/contextAccess.js +16 -0
  238. package/dist/packages/bunshot-core/src/context/contextStore.d.ts +16 -0
  239. package/dist/packages/bunshot-core/src/context/contextStore.js +31 -0
  240. package/dist/packages/bunshot-core/src/context/frameworkConfig.d.ts +38 -0
  241. package/dist/packages/bunshot-core/src/context/frameworkConfig.js +1 -0
  242. package/dist/packages/bunshot-core/src/context/index.d.ts +4 -0
  243. package/dist/packages/bunshot-core/src/context/index.js +2 -0
  244. package/dist/packages/bunshot-core/src/context.d.ts +40 -0
  245. package/dist/packages/bunshot-core/src/context.js +35 -0
  246. package/dist/packages/bunshot-core/src/coreContracts.d.ts +47 -0
  247. package/dist/packages/bunshot-core/src/coreContracts.js +1 -0
  248. package/dist/packages/bunshot-core/src/coreRegistrar.d.ts +6 -0
  249. package/dist/packages/bunshot-core/src/coreRegistrar.js +42 -0
  250. package/dist/{lib → packages/bunshot-core/src}/createRoute.d.ts +4 -30
  251. package/dist/{lib → packages/bunshot-core/src}/createRoute.js +39 -88
  252. package/dist/packages/bunshot-core/src/cronRegistry.d.ts +11 -0
  253. package/dist/packages/bunshot-core/src/cronRegistry.js +1 -0
  254. package/dist/packages/bunshot-core/src/crypto.d.ts +43 -0
  255. package/dist/packages/bunshot-core/src/crypto.js +74 -0
  256. package/dist/packages/bunshot-core/src/csrf.d.ts +8 -0
  257. package/dist/packages/bunshot-core/src/csrf.js +1 -0
  258. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.d.ts +7 -0
  259. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.js +19 -0
  260. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.d.ts +6 -0
  261. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.js +40 -0
  262. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.d.ts +6 -0
  263. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.js +24 -0
  264. package/dist/packages/bunshot-core/src/emailTemplates.d.ts +5 -0
  265. package/dist/packages/bunshot-core/src/emailTemplates.js +10 -0
  266. package/dist/{lib/HttpError.d.ts → packages/bunshot-core/src/errors.d.ts} +4 -1
  267. package/dist/{lib/HttpError.js → packages/bunshot-core/src/errors.js} +7 -1
  268. package/dist/packages/bunshot-core/src/eventBus.d.ts +270 -0
  269. package/dist/packages/bunshot-core/src/eventBus.js +143 -0
  270. package/dist/packages/bunshot-core/src/idempotency.d.ts +18 -0
  271. package/dist/packages/bunshot-core/src/idempotency.js +1 -0
  272. package/dist/packages/bunshot-core/src/index.d.ts +60 -0
  273. package/dist/packages/bunshot-core/src/index.js +34 -0
  274. package/dist/packages/bunshot-core/src/mail.d.ts +14 -0
  275. package/dist/packages/bunshot-core/src/mail.js +8 -0
  276. package/dist/packages/bunshot-core/src/memoryEviction.d.ts +24 -0
  277. package/dist/packages/bunshot-core/src/memoryEviction.js +52 -0
  278. package/dist/packages/bunshot-core/src/pagination.d.ts +45 -0
  279. package/dist/packages/bunshot-core/src/pagination.js +61 -0
  280. package/dist/packages/bunshot-core/src/permissions.d.ts +64 -0
  281. package/dist/packages/bunshot-core/src/permissions.js +27 -0
  282. package/dist/packages/bunshot-core/src/plugin.d.ts +44 -0
  283. package/dist/packages/bunshot-core/src/plugin.js +1 -0
  284. package/dist/packages/bunshot-core/src/rateLimit.d.ts +5 -0
  285. package/dist/packages/bunshot-core/src/rateLimit.js +18 -0
  286. package/dist/packages/bunshot-core/src/redis.d.ts +21 -0
  287. package/dist/packages/bunshot-core/src/redis.js +1 -0
  288. package/dist/packages/bunshot-core/src/routeAuth.d.ts +5 -0
  289. package/dist/packages/bunshot-core/src/routeAuth.js +11 -0
  290. package/dist/packages/bunshot-core/src/routeOverrides.d.ts +24 -0
  291. package/dist/packages/bunshot-core/src/routeOverrides.js +25 -0
  292. package/dist/packages/bunshot-core/src/routerAdapter.d.ts +6 -0
  293. package/dist/packages/bunshot-core/src/routerAdapter.js +56 -0
  294. package/dist/packages/bunshot-core/src/secrets.d.ts +48 -0
  295. package/dist/packages/bunshot-core/src/secrets.js +8 -0
  296. package/dist/packages/bunshot-core/src/signing.d.ts +41 -0
  297. package/dist/packages/bunshot-core/src/signing.js +1 -0
  298. package/dist/packages/bunshot-core/src/sse.d.ts +36 -0
  299. package/dist/packages/bunshot-core/src/sse.js +1 -0
  300. package/dist/packages/bunshot-core/src/storageAdapter.js +1 -0
  301. package/dist/packages/bunshot-core/src/storeInfra.d.ts +44 -0
  302. package/dist/packages/bunshot-core/src/storeInfra.js +18 -0
  303. package/dist/packages/bunshot-core/src/storeType.d.ts +7 -0
  304. package/dist/packages/bunshot-core/src/storeType.js +1 -0
  305. package/dist/packages/bunshot-core/src/testing.d.ts +1 -0
  306. package/dist/packages/bunshot-core/src/testing.js +1 -0
  307. package/dist/packages/bunshot-core/src/uploadRegistry.d.ts +23 -0
  308. package/dist/packages/bunshot-core/src/uploadRegistry.js +4 -0
  309. package/dist/packages/bunshot-core/src/userResolver.d.ts +5 -0
  310. package/dist/packages/bunshot-core/src/userResolver.js +14 -0
  311. package/dist/packages/bunshot-core/src/wsMessages.d.ts +42 -0
  312. package/dist/packages/bunshot-core/src/wsMessages.js +4 -0
  313. package/dist/packages/bunshot-permissions/src/adapters/memory.d.ts +7 -0
  314. package/dist/packages/bunshot-permissions/src/adapters/memory.js +73 -0
  315. package/dist/packages/bunshot-permissions/src/index.d.ts +10 -0
  316. package/dist/packages/bunshot-permissions/src/index.js +5 -0
  317. package/dist/packages/bunshot-permissions/src/lib/bootstrap.d.ts +7 -0
  318. package/dist/packages/bunshot-permissions/src/lib/bootstrap.js +12 -0
  319. package/dist/packages/bunshot-permissions/src/lib/evaluator.d.ts +10 -0
  320. package/dist/packages/bunshot-permissions/src/lib/evaluator.js +165 -0
  321. package/dist/packages/bunshot-permissions/src/lib/registry.d.ts +2 -0
  322. package/dist/packages/bunshot-permissions/src/lib/registry.js +31 -0
  323. package/dist/packages/bunshot-permissions/src/lib/validation.d.ts +1 -0
  324. package/dist/packages/bunshot-permissions/src/lib/validation.js +1 -0
  325. package/dist/packages/bunshot-permissions/src/types/adapter.d.ts +1 -0
  326. package/dist/packages/bunshot-permissions/src/types/adapter.js +1 -0
  327. package/dist/packages/bunshot-permissions/src/types/evaluator.d.ts +1 -0
  328. package/dist/packages/bunshot-permissions/src/types/evaluator.js +1 -0
  329. package/dist/packages/bunshot-permissions/src/types/models.d.ts +1 -0
  330. package/dist/packages/bunshot-permissions/src/types/models.js +1 -0
  331. package/dist/packages/bunshot-permissions/src/types/registry.d.ts +1 -0
  332. package/dist/packages/bunshot-permissions/src/types/registry.js +1 -0
  333. package/dist/packages/bunshot-postgres/src/adapter.d.ts +6 -0
  334. package/dist/packages/bunshot-postgres/src/adapter.js +794 -0
  335. package/dist/packages/bunshot-postgres/src/connection.d.ts +15 -0
  336. package/dist/packages/bunshot-postgres/src/connection.js +16 -0
  337. package/dist/packages/bunshot-postgres/src/index.d.ts +4 -0
  338. package/dist/packages/bunshot-postgres/src/index.js +2 -0
  339. package/dist/packages/bunshot-postgres/src/schema.d.ts +997 -0
  340. package/dist/packages/bunshot-postgres/src/schema.js +105 -0
  341. package/dist/src/app.d.ts +230 -0
  342. package/dist/src/app.js +182 -0
  343. package/dist/src/cli/commands/init.d.ts +10 -0
  344. package/dist/src/cli/commands/init.js +709 -0
  345. package/dist/src/cli/index.d.ts +1 -0
  346. package/dist/src/cli/index.js +3 -0
  347. package/dist/src/entrypoints/mongo.d.ts +6 -0
  348. package/dist/src/entrypoints/mongo.js +4 -0
  349. package/dist/src/entrypoints/queue.d.ts +2 -0
  350. package/dist/src/entrypoints/queue.js +1 -0
  351. package/dist/src/entrypoints/redis.d.ts +1 -0
  352. package/dist/src/entrypoints/redis.js +1 -0
  353. package/dist/{adapters → src/framework/adapters}/localStorage.d.ts +1 -1
  354. package/dist/{adapters → src/framework/adapters}/localStorage.js +10 -10
  355. package/dist/src/framework/adapters/memoryStorage.d.ts +2 -0
  356. package/dist/src/framework/adapters/memoryStorage.js +45 -0
  357. package/dist/{adapters → src/framework/adapters}/s3Storage.d.ts +1 -1
  358. package/dist/{adapters → src/framework/adapters}/s3Storage.js +12 -12
  359. package/dist/src/framework/admin/bunshotAccess.d.ts +2 -0
  360. package/dist/src/framework/admin/bunshotAccess.js +23 -0
  361. package/dist/src/framework/admin/bunshotUsers.d.ts +2 -0
  362. package/dist/src/framework/admin/bunshotUsers.js +103 -0
  363. package/dist/src/framework/admin/index.d.ts +7 -0
  364. package/dist/src/framework/admin/index.js +21 -0
  365. package/dist/src/framework/boundaryAdapters/cacheFactories.d.ts +13 -0
  366. package/dist/src/framework/boundaryAdapters/cacheFactories.js +86 -0
  367. package/dist/src/framework/boundaryAdapters/index.d.ts +2 -0
  368. package/dist/src/framework/boundaryAdapters/index.js +1 -0
  369. package/dist/src/framework/boundaryAdapters.d.ts +17 -0
  370. package/dist/src/framework/boundaryAdapters.js +62 -0
  371. package/dist/src/framework/buildContext.d.ts +33 -0
  372. package/dist/src/framework/buildContext.js +119 -0
  373. package/dist/src/framework/config/schema.d.ts +447 -0
  374. package/dist/src/framework/config/schema.js +528 -0
  375. package/dist/src/framework/createInfrastructure.d.ts +76 -0
  376. package/dist/src/framework/createInfrastructure.js +221 -0
  377. package/dist/src/framework/lib/auditLog.d.ts +23 -0
  378. package/dist/src/framework/lib/auditLog.js +416 -0
  379. package/dist/src/framework/lib/captcha.d.ts +11 -0
  380. package/dist/{lib → src/framework/lib}/captcha.js +13 -10
  381. package/dist/{lib → src/framework/lib}/createDtoMapper.js +4 -4
  382. package/dist/src/framework/lib/createRoute.d.ts +1 -0
  383. package/dist/src/framework/lib/createRoute.js +2 -0
  384. package/dist/{lib → src/framework/lib}/idempotency.d.ts +2 -6
  385. package/dist/src/framework/lib/idempotency.js +74 -0
  386. package/dist/src/framework/lib/logger.d.ts +3 -0
  387. package/dist/src/framework/lib/logger.js +14 -0
  388. package/dist/src/framework/lib/metrics.d.ts +34 -0
  389. package/dist/{lib → src/framework/lib}/metrics.js +49 -57
  390. package/dist/src/framework/lib/pagination.d.ts +42 -0
  391. package/dist/src/framework/lib/pagination.js +51 -0
  392. package/dist/src/framework/lib/redisTransport.d.ts +38 -0
  393. package/dist/src/framework/lib/redisTransport.js +107 -0
  394. package/dist/src/framework/lib/resolveUserId.d.ts +2 -0
  395. package/dist/src/framework/lib/resolveUserId.js +5 -0
  396. package/dist/src/framework/lib/sseCollision.d.ts +6 -0
  397. package/dist/src/framework/lib/sseCollision.js +26 -0
  398. package/dist/src/framework/lib/storageAdapter.d.ts +1 -0
  399. package/dist/src/framework/lib/storageAdapter.js +1 -0
  400. package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.js +4 -4
  401. package/dist/src/framework/lib/tenant.d.ts +21 -0
  402. package/dist/src/framework/lib/tenant.js +70 -0
  403. package/dist/{lib → src/framework/lib}/upload.d.ts +11 -10
  404. package/dist/src/framework/lib/upload.js +132 -0
  405. package/dist/src/framework/lib/uploadRegistry.d.ts +23 -0
  406. package/dist/src/framework/lib/uploadRegistry.js +34 -0
  407. package/dist/{lib → src/framework/lib}/validate.d.ts +1 -1
  408. package/dist/{lib → src/framework/lib}/validate.js +2 -2
  409. package/dist/src/framework/lib/ws.d.ts +19 -0
  410. package/dist/src/framework/lib/ws.js +130 -0
  411. package/dist/src/framework/lib/wsHeartbeat.d.ts +12 -0
  412. package/dist/src/framework/lib/wsHeartbeat.js +53 -0
  413. package/dist/src/framework/lib/wsMessages.d.ts +25 -0
  414. package/dist/src/framework/lib/wsMessages.js +45 -0
  415. package/dist/src/framework/lib/wsNamespace.d.ts +17 -0
  416. package/dist/src/framework/lib/wsNamespace.js +19 -0
  417. package/dist/src/framework/lib/wsPresence.d.ts +17 -0
  418. package/dist/src/framework/lib/wsPresence.js +84 -0
  419. package/dist/src/framework/lib/wsTransport.d.ts +38 -0
  420. package/dist/src/framework/lib/wsTransport.js +9 -0
  421. package/dist/{lib → src/framework/lib}/zodToMongoose.d.ts +1 -1
  422. package/dist/{lib → src/framework/lib}/zodToMongoose.js +11 -11
  423. package/dist/{middleware → src/framework/middleware}/auditLog.d.ts +4 -3
  424. package/dist/src/framework/middleware/auditLog.js +42 -0
  425. package/dist/{middleware → src/framework/middleware}/botProtection.d.ts +2 -2
  426. package/dist/{middleware → src/framework/middleware}/botProtection.js +8 -9
  427. package/dist/src/framework/middleware/cacheResponse.d.ts +35 -0
  428. package/dist/src/framework/middleware/cacheResponse.js +126 -0
  429. package/dist/{middleware → src/framework/middleware}/captcha.d.ts +2 -3
  430. package/dist/src/framework/middleware/captcha.js +37 -0
  431. package/dist/{middleware → src/framework/middleware}/errorHandler.d.ts +1 -1
  432. package/dist/{middleware → src/framework/middleware}/errorHandler.js +2 -2
  433. package/dist/src/framework/middleware/index.js +1 -0
  434. package/dist/{middleware → src/framework/middleware}/logger.d.ts +1 -1
  435. package/dist/src/framework/middleware/metrics.d.ts +12 -0
  436. package/dist/src/framework/middleware/metrics.js +26 -0
  437. package/dist/{middleware → src/framework/middleware}/rateLimit.d.ts +2 -2
  438. package/dist/src/framework/middleware/rateLimit.js +22 -0
  439. package/dist/src/framework/middleware/requestId.d.ts +3 -0
  440. package/dist/{middleware → src/framework/middleware}/requestId.js +2 -2
  441. package/dist/{middleware → src/framework/middleware}/requestLogger.d.ts +3 -3
  442. package/dist/{middleware → src/framework/middleware}/requestLogger.js +17 -12
  443. package/dist/{middleware → src/framework/middleware}/requestSigning.d.ts +2 -2
  444. package/dist/{middleware → src/framework/middleware}/requestSigning.js +18 -20
  445. package/dist/src/framework/middleware/tenant.d.ts +14 -0
  446. package/dist/{middleware → src/framework/middleware}/tenant.js +31 -27
  447. package/dist/src/framework/middleware/upload.d.ts +5 -0
  448. package/dist/{middleware → src/framework/middleware}/upload.js +4 -4
  449. package/dist/{middleware → src/framework/middleware}/webhookAuth.d.ts +3 -3
  450. package/dist/{middleware → src/framework/middleware}/webhookAuth.js +11 -12
  451. package/dist/src/framework/models/AuditLog.d.ts +21 -0
  452. package/dist/src/framework/models/AuditLog.js +31 -0
  453. package/dist/src/framework/mountMiddleware.d.ts +91 -0
  454. package/dist/src/framework/mountMiddleware.js +128 -0
  455. package/dist/src/framework/mountOptionalEndpoints.d.ts +103 -0
  456. package/dist/src/framework/mountOptionalEndpoints.js +47 -0
  457. package/dist/src/framework/mountRoutes.d.ts +21 -0
  458. package/dist/src/framework/mountRoutes.js +144 -0
  459. package/dist/src/framework/persistence/cronRegistry.d.ts +28 -0
  460. package/dist/src/framework/persistence/cronRegistry.js +139 -0
  461. package/dist/src/framework/persistence/idempotency.d.ts +26 -0
  462. package/dist/src/framework/persistence/idempotency.js +178 -0
  463. package/dist/src/framework/persistence/index.d.ts +6 -0
  464. package/dist/src/framework/persistence/index.js +8 -0
  465. package/dist/src/framework/persistence/storeInfra.d.ts +9 -0
  466. package/dist/src/framework/persistence/storeInfra.js +1 -0
  467. package/dist/src/framework/persistence/uploadRegistry.d.ts +35 -0
  468. package/dist/src/framework/persistence/uploadRegistry.js +235 -0
  469. package/dist/src/framework/persistence/wsMessages.d.ts +22 -0
  470. package/dist/src/framework/persistence/wsMessages.js +296 -0
  471. package/dist/src/framework/preloadSchemas.d.ts +24 -0
  472. package/dist/src/framework/preloadSchemas.js +42 -0
  473. package/dist/src/framework/registerBoundaryAdapters.d.ts +23 -0
  474. package/dist/src/framework/registerBoundaryAdapters.js +46 -0
  475. package/dist/src/framework/routes/admin.d.ts +9 -0
  476. package/dist/src/framework/routes/admin.js +361 -0
  477. package/dist/src/framework/routes/health.d.ts +1 -0
  478. package/dist/src/framework/routes/health.js +21 -0
  479. package/dist/src/framework/routes/home.d.ts +1 -0
  480. package/dist/src/framework/routes/home.js +18 -0
  481. package/dist/src/framework/routes/jobs.d.ts +3 -0
  482. package/dist/{routes → src/framework/routes}/jobs.js +128 -103
  483. package/dist/src/framework/routes/metrics.d.ts +10 -0
  484. package/dist/src/framework/routes/metrics.js +57 -0
  485. package/dist/{routes → src/framework/routes}/uploads.d.ts +3 -3
  486. package/dist/src/framework/routes/uploads.js +262 -0
  487. package/dist/src/framework/runPluginLifecycle.d.ts +27 -0
  488. package/dist/src/framework/runPluginLifecycle.js +121 -0
  489. package/dist/src/framework/secrets/frameworkSecretSchema.d.ts +58 -0
  490. package/dist/src/framework/secrets/frameworkSecretSchema.js +20 -0
  491. package/dist/src/framework/secrets/index.d.ts +9 -0
  492. package/dist/src/framework/secrets/index.js +7 -0
  493. package/dist/src/framework/secrets/providers/envProvider.d.ts +15 -0
  494. package/dist/src/framework/secrets/providers/envProvider.js +18 -0
  495. package/dist/src/framework/secrets/providers/fileProvider.d.ts +8 -0
  496. package/dist/src/framework/secrets/providers/fileProvider.js +82 -0
  497. package/dist/src/framework/secrets/providers/ssmProvider.d.ts +20 -0
  498. package/dist/src/framework/secrets/providers/ssmProvider.js +127 -0
  499. package/dist/src/framework/secrets/resolveSecretBundle.d.ts +53 -0
  500. package/dist/src/framework/secrets/resolveSecretBundle.js +84 -0
  501. package/dist/src/framework/secrets/resolveSecrets.d.ts +18 -0
  502. package/dist/src/framework/secrets/resolveSecrets.js +34 -0
  503. package/dist/src/framework/sse/index.d.ts +21 -0
  504. package/dist/src/framework/sse/index.js +109 -0
  505. package/dist/src/framework/ws/index.d.ts +11 -0
  506. package/dist/src/framework/ws/index.js +8 -0
  507. package/dist/src/index.d.ts +87 -0
  508. package/dist/src/index.js +58 -0
  509. package/dist/src/lib/appConfig.d.ts +7 -0
  510. package/dist/src/lib/appConfig.js +27 -0
  511. package/dist/src/lib/appMeta.d.ts +7 -0
  512. package/dist/src/lib/appMeta.js +3 -0
  513. package/dist/src/lib/authConfig.d.ts +532 -0
  514. package/dist/{lib/appConfig.js → src/lib/authConfig.js} +75 -17
  515. package/dist/{lib → src/lib}/context.d.ts +6 -12
  516. package/dist/{lib → src/lib}/context.js +5 -5
  517. package/dist/src/lib/logger.d.ts +1 -0
  518. package/dist/src/lib/logger.js +1 -0
  519. package/dist/src/lib/mongo.d.ts +58 -0
  520. package/dist/src/lib/mongo.js +96 -0
  521. package/dist/src/lib/queue.d.ts +72 -0
  522. package/dist/src/lib/queue.js +152 -0
  523. package/dist/src/lib/redis.d.ts +28 -0
  524. package/dist/src/lib/redis.js +72 -0
  525. package/dist/{lib → src/lib}/signing.d.ts +2 -2
  526. package/dist/src/lib/signing.js +210 -0
  527. package/dist/src/lib/signingConfig.d.ts +40 -0
  528. package/dist/src/lib/signingConfig.js +28 -0
  529. package/dist/src/server.d.ts +146 -0
  530. package/dist/src/server.js +469 -0
  531. package/dist/src/shared/lib/HttpError.d.ts +1 -0
  532. package/dist/src/shared/lib/HttpError.js +2 -0
  533. package/dist/src/shared/lib/constants.d.ts +10 -0
  534. package/dist/src/shared/lib/crypto.d.ts +43 -0
  535. package/dist/src/shared/lib/crypto.js +74 -0
  536. package/dist/src/shared/lib/signing.d.ts +52 -0
  537. package/dist/{lib → src/shared/lib}/signing.js +35 -8
  538. package/dist/src/testing.d.ts +34 -0
  539. package/dist/src/testing.js +93 -0
  540. package/package.json +60 -24
  541. package/dist/adapters/memoryAuth.d.ts +0 -52
  542. package/dist/adapters/memoryAuth.js +0 -749
  543. package/dist/adapters/memoryStorage.d.ts +0 -3
  544. package/dist/adapters/memoryStorage.js +0 -44
  545. package/dist/adapters/mongoAuth.d.ts +0 -2
  546. package/dist/adapters/mongoAuth.js +0 -403
  547. package/dist/adapters/sqliteAuth.d.ts +0 -72
  548. package/dist/adapters/sqliteAuth.js +0 -858
  549. package/dist/app.d.ts +0 -559
  550. package/dist/app.js +0 -651
  551. package/dist/entrypoints/mongo.d.ts +0 -5
  552. package/dist/entrypoints/mongo.js +0 -4
  553. package/dist/entrypoints/queue.d.ts +0 -2
  554. package/dist/entrypoints/queue.js +0 -1
  555. package/dist/entrypoints/redis.d.ts +0 -1
  556. package/dist/entrypoints/redis.js +0 -1
  557. package/dist/index.d.ts +0 -117
  558. package/dist/index.js +0 -88
  559. package/dist/lib/appConfig.d.ts +0 -275
  560. package/dist/lib/auditLog.d.ts +0 -58
  561. package/dist/lib/auditLog.js +0 -218
  562. package/dist/lib/authAdapter.d.ts +0 -246
  563. package/dist/lib/authAdapter.js +0 -7
  564. package/dist/lib/authRateLimit.d.ts +0 -13
  565. package/dist/lib/authRateLimit.js +0 -117
  566. package/dist/lib/clientIp.d.ts +0 -14
  567. package/dist/lib/credentialStuffing.d.ts +0 -31
  568. package/dist/lib/credentialStuffing.js +0 -77
  569. package/dist/lib/crypto.d.ts +0 -11
  570. package/dist/lib/crypto.js +0 -22
  571. package/dist/lib/deletionCancelToken.d.ts +0 -12
  572. package/dist/lib/deletionCancelToken.js +0 -88
  573. package/dist/lib/emailVerification.d.ts +0 -19
  574. package/dist/lib/emailVerification.js +0 -129
  575. package/dist/lib/fingerprint.js +0 -36
  576. package/dist/lib/idempotency.js +0 -182
  577. package/dist/lib/jwks.d.ts +0 -25
  578. package/dist/lib/jwks.js +0 -51
  579. package/dist/lib/jwt.d.ts +0 -15
  580. package/dist/lib/jwt.js +0 -111
  581. package/dist/lib/metrics.d.ts +0 -14
  582. package/dist/lib/mfaChallenge.d.ts +0 -55
  583. package/dist/lib/mfaChallenge.js +0 -398
  584. package/dist/lib/mongo.d.ts +0 -39
  585. package/dist/lib/mongo.js +0 -124
  586. package/dist/lib/oauth.d.ts +0 -40
  587. package/dist/lib/oauth.js +0 -101
  588. package/dist/lib/oauthCode.d.ts +0 -15
  589. package/dist/lib/oauthCode.js +0 -95
  590. package/dist/lib/pagination.d.ts +0 -119
  591. package/dist/lib/pagination.js +0 -166
  592. package/dist/lib/queue.d.ts +0 -37
  593. package/dist/lib/queue.js +0 -117
  594. package/dist/lib/redis.d.ts +0 -9
  595. package/dist/lib/redis.js +0 -61
  596. package/dist/lib/resetPassword.d.ts +0 -12
  597. package/dist/lib/resetPassword.js +0 -93
  598. package/dist/lib/roles.d.ts +0 -7
  599. package/dist/lib/roles.js +0 -49
  600. package/dist/lib/saml.d.ts +0 -25
  601. package/dist/lib/saml.js +0 -64
  602. package/dist/lib/securityEvents.d.ts +0 -28
  603. package/dist/lib/securityEvents.js +0 -26
  604. package/dist/lib/session.d.ts +0 -49
  605. package/dist/lib/session.js +0 -597
  606. package/dist/lib/tenant.d.ts +0 -15
  607. package/dist/lib/tenant.js +0 -65
  608. package/dist/lib/upload.js +0 -112
  609. package/dist/lib/uploadRegistry.d.ts +0 -18
  610. package/dist/lib/uploadRegistry.js +0 -83
  611. package/dist/lib/ws.d.ts +0 -22
  612. package/dist/lib/ws.js +0 -96
  613. package/dist/lib/wsHeartbeat.d.ts +0 -12
  614. package/dist/lib/wsHeartbeat.js +0 -57
  615. package/dist/lib/wsMessages.d.ts +0 -40
  616. package/dist/lib/wsMessages.js +0 -330
  617. package/dist/lib/wsPresence.d.ts +0 -25
  618. package/dist/lib/wsPresence.js +0 -99
  619. package/dist/middleware/auditLog.js +0 -39
  620. package/dist/middleware/bearerAuth.d.ts +0 -2
  621. package/dist/middleware/bearerAuth.js +0 -11
  622. package/dist/middleware/cacheResponse.d.ts +0 -15
  623. package/dist/middleware/cacheResponse.js +0 -178
  624. package/dist/middleware/captcha.js +0 -36
  625. package/dist/middleware/csrf.js +0 -129
  626. package/dist/middleware/identify.d.ts +0 -3
  627. package/dist/middleware/identify.js +0 -122
  628. package/dist/middleware/index.js +0 -1
  629. package/dist/middleware/metrics.d.ts +0 -9
  630. package/dist/middleware/metrics.js +0 -26
  631. package/dist/middleware/rateLimit.js +0 -22
  632. package/dist/middleware/requestId.d.ts +0 -3
  633. package/dist/middleware/scimAuth.d.ts +0 -8
  634. package/dist/middleware/scimAuth.js +0 -29
  635. package/dist/middleware/tenant.d.ts +0 -5
  636. package/dist/middleware/upload.d.ts +0 -5
  637. package/dist/middleware/userAuth.d.ts +0 -3
  638. package/dist/middleware/userAuth.js +0 -6
  639. package/dist/models/AuditLog.d.ts +0 -30
  640. package/dist/models/AuditLog.js +0 -39
  641. package/dist/models/AuthUser.js +0 -55
  642. package/dist/models/Group.d.ts +0 -21
  643. package/dist/models/Group.js +0 -28
  644. package/dist/models/GroupMembership.js +0 -25
  645. package/dist/models/TenantRole.d.ts +0 -15
  646. package/dist/models/TenantRole.js +0 -23
  647. package/dist/routes/auth.d.ts +0 -12
  648. package/dist/routes/auth.js +0 -744
  649. package/dist/routes/groups.js +0 -346
  650. package/dist/routes/health.d.ts +0 -1
  651. package/dist/routes/health.js +0 -22
  652. package/dist/routes/home.d.ts +0 -1
  653. package/dist/routes/home.js +0 -16
  654. package/dist/routes/jobs.d.ts +0 -2
  655. package/dist/routes/m2m.d.ts +0 -2
  656. package/dist/routes/m2m.js +0 -72
  657. package/dist/routes/metrics.d.ts +0 -8
  658. package/dist/routes/metrics.js +0 -55
  659. package/dist/routes/mfa.d.ts +0 -5
  660. package/dist/routes/mfa.js +0 -628
  661. package/dist/routes/oauth.d.ts +0 -2
  662. package/dist/routes/oauth.js +0 -520
  663. package/dist/routes/oidc.d.ts +0 -2
  664. package/dist/routes/oidc.js +0 -29
  665. package/dist/routes/passkey.d.ts +0 -1
  666. package/dist/routes/passkey.js +0 -157
  667. package/dist/routes/saml.d.ts +0 -2
  668. package/dist/routes/saml.js +0 -86
  669. package/dist/routes/scim.d.ts +0 -2
  670. package/dist/routes/scim.js +0 -255
  671. package/dist/routes/uploads.js +0 -227
  672. package/dist/schemas/auth.js +0 -30
  673. package/dist/server.d.ts +0 -57
  674. package/dist/server.js +0 -112
  675. package/dist/services/auth.d.ts +0 -29
  676. package/dist/services/auth.js +0 -238
  677. package/dist/ws/index.d.ts +0 -10
  678. package/dist/ws/index.js +0 -39
  679. package/docs/sections/adding-middleware/full.md +0 -35
  680. package/docs/sections/adding-models/full.md +0 -125
  681. package/docs/sections/adding-models/overview.md +0 -13
  682. package/docs/sections/adding-routes/full.md +0 -182
  683. package/docs/sections/adding-routes/overview.md +0 -23
  684. package/docs/sections/auth-flow/full.md +0 -790
  685. package/docs/sections/auth-flow/overview.md +0 -10
  686. package/docs/sections/auth-security-examples/full.md +0 -388
  687. package/docs/sections/authentication/full.md +0 -130
  688. package/docs/sections/authentication/overview.md +0 -5
  689. package/docs/sections/cli/full.md +0 -42
  690. package/docs/sections/configuration/full.md +0 -172
  691. package/docs/sections/configuration/overview.md +0 -18
  692. package/docs/sections/configuration-example/full.md +0 -117
  693. package/docs/sections/configuration-example/overview.md +0 -30
  694. package/docs/sections/documentation/full.md +0 -171
  695. package/docs/sections/environment-variables/full.md +0 -55
  696. package/docs/sections/exports/full.md +0 -123
  697. package/docs/sections/extending-context/full.md +0 -59
  698. package/docs/sections/header.md +0 -3
  699. package/docs/sections/installation/full.md +0 -6
  700. package/docs/sections/jobs/full.md +0 -140
  701. package/docs/sections/jobs/overview.md +0 -15
  702. package/docs/sections/logging/full.md +0 -83
  703. package/docs/sections/metrics/full.md +0 -131
  704. package/docs/sections/mongodb-connections/full.md +0 -45
  705. package/docs/sections/mongodb-connections/overview.md +0 -7
  706. package/docs/sections/multi-tenancy/full.md +0 -66
  707. package/docs/sections/multi-tenancy/overview.md +0 -15
  708. package/docs/sections/oauth/full.md +0 -189
  709. package/docs/sections/oauth/overview.md +0 -16
  710. package/docs/sections/package-development/full.md +0 -7
  711. package/docs/sections/pagination/full.md +0 -93
  712. package/docs/sections/passkey-login/full.md +0 -90
  713. package/docs/sections/passkey-login/overview.md +0 -1
  714. package/docs/sections/peer-dependencies/full.md +0 -47
  715. package/docs/sections/quick-start/full.md +0 -43
  716. package/docs/sections/response-caching/full.md +0 -117
  717. package/docs/sections/response-caching/overview.md +0 -13
  718. package/docs/sections/roles/full.md +0 -225
  719. package/docs/sections/roles/overview.md +0 -14
  720. package/docs/sections/running-without-redis/full.md +0 -16
  721. package/docs/sections/running-without-redis-or-mongodb/full.md +0 -60
  722. package/docs/sections/signing/full.md +0 -203
  723. package/docs/sections/stack/full.md +0 -10
  724. package/docs/sections/uploads/full.md +0 -208
  725. package/docs/sections/versioning/full.md +0 -85
  726. package/docs/sections/webhook-auth/full.md +0 -100
  727. package/docs/sections/websocket/full.md +0 -196
  728. package/docs/sections/websocket/overview.md +0 -5
  729. package/docs/sections/websocket-rooms/full.md +0 -102
  730. package/docs/sections/websocket-rooms/overview.md +0 -5
  731. /package/dist/{lib/storageAdapter.js → packages/bunshot-admin/src/types/env.js} +0 -0
  732. /package/dist/{lib → packages/bunshot-auth/src/lib}/fingerprint.d.ts +0 -0
  733. /package/dist/{lib → packages/bunshot-auth/src/lib}/logger.d.ts +0 -0
  734. /package/dist/{lib → packages/bunshot-core/src}/constants.d.ts +0 -0
  735. /package/dist/{lib → packages/bunshot-core/src}/storageAdapter.d.ts +0 -0
  736. /package/dist/{lib → src/framework/lib}/createDtoMapper.d.ts +0 -0
  737. /package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.d.ts +0 -0
  738. /package/dist/{middleware → src/framework/middleware}/cors.d.ts +0 -0
  739. /package/dist/{middleware → src/framework/middleware}/cors.js +0 -0
  740. /package/dist/{middleware → src/framework/middleware}/index.d.ts +0 -0
  741. /package/dist/{middleware → src/framework/middleware}/logger.js +0 -0
  742. /package/dist/{lib → src/shared/lib}/constants.js +0 -0
@@ -1,218 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // Memory store
3
- // ---------------------------------------------------------------------------
4
- let _auditLogs = [];
5
- export function clearAuditLogMemoryStore() {
6
- _auditLogs = [];
7
- }
8
- // ---------------------------------------------------------------------------
9
- // SQLite helpers
10
- // ---------------------------------------------------------------------------
11
- function ensureSqliteTable(db) {
12
- // No module-level flag — CREATE IF NOT EXISTS is idempotent and cheap.
13
- // A flag would break when multiple Database instances are used (e.g. in tests).
14
- db.run(`
15
- CREATE TABLE IF NOT EXISTS audit_logs (
16
- id TEXT PRIMARY KEY,
17
- userId TEXT,
18
- sessionId TEXT,
19
- tenantId TEXT,
20
- method TEXT NOT NULL,
21
- path TEXT NOT NULL,
22
- status INTEGER NOT NULL,
23
- ip TEXT,
24
- userAgent TEXT,
25
- action TEXT,
26
- resource TEXT,
27
- resourceId TEXT,
28
- meta TEXT,
29
- createdAt TEXT NOT NULL
30
- )
31
- `);
32
- db.run("CREATE INDEX IF NOT EXISTS idx_al_user ON audit_logs(userId, createdAt)");
33
- db.run("CREATE INDEX IF NOT EXISTS idx_al_tenant ON audit_logs(tenantId, createdAt)");
34
- db.run("CREATE INDEX IF NOT EXISTS idx_al_path ON audit_logs(path)");
35
- }
36
- // ---------------------------------------------------------------------------
37
- // logAuditEntry
38
- // ---------------------------------------------------------------------------
39
- /**
40
- * Persist an audit log entry to the configured store.
41
- * Errors are caught internally — this function never throws, to ensure
42
- * storage failures never fail the HTTP request.
43
- */
44
- export async function logAuditEntry(entry, options) {
45
- try {
46
- if (options.store === "memory") {
47
- _auditLogs.push(entry);
48
- return;
49
- }
50
- if (options.store === "sqlite") {
51
- const db = options.db;
52
- if (!db)
53
- throw new Error("AuditLog: store is 'sqlite' but no db instance was provided");
54
- ensureSqliteTable(db);
55
- db.run(`INSERT INTO audit_logs
56
- (id, userId, sessionId, tenantId, method, path, status,
57
- ip, userAgent, action, resource, resourceId, meta, createdAt)
58
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
59
- entry.id,
60
- entry.userId ?? null,
61
- entry.sessionId ?? null,
62
- entry.tenantId ?? null,
63
- entry.method,
64
- entry.path,
65
- entry.status,
66
- entry.ip ?? null,
67
- entry.userAgent ?? null,
68
- entry.action ?? null,
69
- entry.resource ?? null,
70
- entry.resourceId ?? null,
71
- entry.meta !== undefined ? JSON.stringify(entry.meta) : null,
72
- entry.createdAt,
73
- ]);
74
- return;
75
- }
76
- if (options.store === "mongo") {
77
- // Lazy import to avoid bundling mongoose when not used
78
- const { AuditLog } = await import("../models/AuditLog");
79
- await AuditLog.create({
80
- ...entry,
81
- createdAt: new Date(entry.createdAt),
82
- });
83
- return;
84
- }
85
- }
86
- catch (err) {
87
- console.error("[auditLog] failed to write entry:", err);
88
- }
89
- }
90
- // ---------------------------------------------------------------------------
91
- // logAuditEntryBlocking
92
- // ---------------------------------------------------------------------------
93
- /**
94
- * Blocking variant of logAuditEntry for critical events (e.g. account deletion,
95
- * password changes). Awaits the write and logs errors, but never rethrows —
96
- * a logging failure must not break the HTTP response.
97
- */
98
- export async function logAuditEntryBlocking(entry, options) {
99
- try {
100
- await logAuditEntry(entry, options);
101
- }
102
- catch (err) {
103
- console.error("[auditLog] CRITICAL: blocking audit write failed:", err);
104
- // Don't rethrow — we never want a logging failure to break the response
105
- }
106
- }
107
- // ---------------------------------------------------------------------------
108
- // getAuditLogs
109
- // ---------------------------------------------------------------------------
110
- /**
111
- * Query audit log entries from the configured store.
112
- * Returns `{ items, total }` where `total` is the filtered count before pagination.
113
- */
114
- export async function getAuditLogs(query, options) {
115
- const limit = Math.min(query.limit ?? 50, 200);
116
- const offset = query.offset ?? 0;
117
- const after = query.after ? new Date(query.after).toISOString() : undefined;
118
- const before = query.before ? new Date(query.before).toISOString() : undefined;
119
- // --- Memory ---
120
- if (options.store === "memory") {
121
- let filtered = _auditLogs.slice();
122
- if (query.userId !== undefined)
123
- filtered = filtered.filter(e => e.userId === query.userId);
124
- if (query.tenantId !== undefined)
125
- filtered = filtered.filter(e => e.tenantId === query.tenantId);
126
- if (after)
127
- filtered = filtered.filter(e => e.createdAt >= after);
128
- if (before)
129
- filtered = filtered.filter(e => e.createdAt < before);
130
- return { items: filtered.slice(offset, offset + limit), total: filtered.length };
131
- }
132
- // --- SQLite ---
133
- if (options.store === "sqlite") {
134
- const db = options.db;
135
- if (!db)
136
- throw new Error("AuditLog: store is 'sqlite' but no db instance was provided");
137
- ensureSqliteTable(db);
138
- const conditions = [];
139
- const params = [];
140
- if (query.userId !== undefined) {
141
- conditions.push("userId = ?");
142
- params.push(query.userId);
143
- }
144
- if (query.tenantId !== undefined) {
145
- conditions.push("tenantId = ?");
146
- params.push(query.tenantId);
147
- }
148
- if (after) {
149
- conditions.push("createdAt >= ?");
150
- params.push(after);
151
- }
152
- if (before) {
153
- conditions.push("createdAt < ?");
154
- params.push(before);
155
- }
156
- const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
157
- const { count } = db.query(`SELECT COUNT(*) as count FROM audit_logs ${where}`).get(...params) ?? { count: 0 };
158
- const rows = db.query(`SELECT * FROM audit_logs ${where} ORDER BY createdAt DESC LIMIT ? OFFSET ?`).all(...params, limit, offset);
159
- const items = rows.map(row => ({
160
- id: row.id,
161
- userId: row.userId ?? null,
162
- sessionId: row.sessionId ?? null,
163
- tenantId: row.tenantId ?? null,
164
- method: row.method,
165
- path: row.path,
166
- status: row.status,
167
- ip: row.ip ?? null,
168
- userAgent: row.userAgent ?? null,
169
- action: row.action ?? undefined,
170
- resource: row.resource ?? undefined,
171
- resourceId: row.resourceId ?? undefined,
172
- meta: row.meta ? JSON.parse(row.meta) : undefined,
173
- createdAt: row.createdAt,
174
- }));
175
- return { items, total: count };
176
- }
177
- // --- MongoDB ---
178
- if (options.store === "mongo") {
179
- const { AuditLog } = await import("../models/AuditLog");
180
- const filter = {};
181
- if (query.userId !== undefined)
182
- filter.userId = query.userId;
183
- if (query.tenantId !== undefined)
184
- filter.tenantId = query.tenantId;
185
- if (after || before) {
186
- filter.createdAt = {
187
- ...(after ? { $gte: new Date(after) } : {}),
188
- ...(before ? { $lt: new Date(before) } : {}),
189
- };
190
- }
191
- const [total, docs] = await Promise.all([
192
- AuditLog.countDocuments(filter),
193
- AuditLog.find(filter)
194
- .sort({ createdAt: -1 })
195
- .skip(offset)
196
- .limit(limit)
197
- .lean(),
198
- ]);
199
- const items = docs.map(doc => ({
200
- id: doc.id,
201
- userId: doc.userId ?? null,
202
- sessionId: doc.sessionId ?? null,
203
- tenantId: doc.tenantId ?? null,
204
- method: doc.method,
205
- path: doc.path,
206
- status: doc.status,
207
- ip: doc.ip ?? null,
208
- userAgent: doc.userAgent ?? null,
209
- action: doc.action,
210
- resource: doc.resource,
211
- resourceId: doc.resourceId,
212
- meta: doc.meta,
213
- createdAt: doc.createdAt.toISOString(),
214
- }));
215
- return { items, total };
216
- }
217
- return { items: [], total: 0 };
218
- }
@@ -1,246 +0,0 @@
1
- import type { GroupRecord, GroupMembershipRecord, PaginationOpts, PaginatedResult } from "./groups";
2
- export type { GroupRecord, GroupMembershipRecord, PaginationOpts, PaginatedResult };
3
- export interface M2MClientRecord {
4
- id: string;
5
- clientId: string;
6
- name: string;
7
- scopes: string[];
8
- active: boolean;
9
- }
10
- export interface IdentityProfile {
11
- email?: string;
12
- name?: string;
13
- firstName?: string;
14
- lastName?: string;
15
- displayName?: string;
16
- avatarUrl?: string;
17
- externalId?: string;
18
- }
19
- /** @deprecated Use IdentityProfile */
20
- export type OAuthProfile = IdentityProfile;
21
- export interface WebAuthnCredential {
22
- /** Base64url-encoded credential ID. */
23
- credentialId: string;
24
- /** Base64url-encoded public key. */
25
- publicKey: string;
26
- /** Counter for signature verification (replay protection). */
27
- signCount: number;
28
- /** Transport hints from the authenticator (usb, ble, nfc, internal). */
29
- transports?: string[];
30
- /** User-assigned name for the key (e.g. "YubiKey 5"). */
31
- name?: string;
32
- /** When the credential was registered (epoch ms). */
33
- createdAt: number;
34
- }
35
- export interface AuthAdapter {
36
- findByEmail(email: string): Promise<{
37
- id: string;
38
- passwordHash: string;
39
- } | null>;
40
- create(email: string, passwordHash: string): Promise<{
41
- id: string;
42
- }>;
43
- /** Required when using OAuth providers. Find or create a user by provider + provider user ID. */
44
- findOrCreateByProvider?(provider: string, providerId: string, profile: OAuthProfile): Promise<{
45
- id: string;
46
- created: boolean;
47
- }>;
48
- /** Optional. Set or update the password hash for a user (used by /auth/set-password). */
49
- setPassword?(userId: string, passwordHash: string): Promise<void>;
50
- /** Optional. Link a provider identity to an existing user (used by /auth/:provider/link). */
51
- linkProvider?(userId: string, provider: string, providerId: string): Promise<void>;
52
- /** Optional. Return the roles assigned to a user (used by requireRole middleware). */
53
- getRoles?(userId: string): Promise<string[]>;
54
- /** Optional. Set the roles for a user, replacing any existing roles. */
55
- setRoles?(userId: string, roles: string[]): Promise<void>;
56
- /** Optional. Add a single role to a user without affecting their other roles. */
57
- addRole?(userId: string, role: string): Promise<void>;
58
- /** Optional. Remove a single role from a user without affecting their other roles. */
59
- removeRole?(userId: string, role: string): Promise<void>;
60
- /** Optional. Return basic profile info for a user by ID (used by GET /auth/me). */
61
- getUser?(userId: string): Promise<{
62
- email?: string;
63
- providerIds?: string[];
64
- emailVerified?: boolean;
65
- displayName?: string;
66
- firstName?: string;
67
- lastName?: string;
68
- externalId?: string;
69
- suspended?: boolean;
70
- suspendedReason?: string;
71
- } | null>;
72
- /** Optional. Unlink a provider identity from a user (used by DELETE /auth/:provider/link). */
73
- unlinkProvider?(userId: string, provider: string): Promise<void>;
74
- /**
75
- * Optional. Look up a user by their primary identifier (email, username, or phone depending on config).
76
- * When provided, used instead of findByEmail for credential login/register flows.
77
- */
78
- findByIdentifier?(value: string): Promise<{
79
- id: string;
80
- passwordHash: string;
81
- } | null>;
82
- /** Optional. Mark a user's email address as verified (used by POST /auth/verify-email). */
83
- setEmailVerified?(userId: string, verified: boolean): Promise<void>;
84
- /** Optional. Return whether a user's email address has been verified. */
85
- getEmailVerified?(userId: string): Promise<boolean>;
86
- /** Optional. Permanently delete a user account. Used by DELETE /auth/me. */
87
- deleteUser?(userId: string): Promise<void>;
88
- /** Optional. Check whether a user has a password set (credential account vs OAuth-only). */
89
- hasPassword?(userId: string): Promise<boolean>;
90
- /** Optional. Store the TOTP secret for MFA setup (encrypted or plaintext, adapter decides). */
91
- setMfaSecret?(userId: string, secret: string | null): Promise<void>;
92
- /** Optional. Retrieve the TOTP secret for MFA verification. */
93
- getMfaSecret?(userId: string): Promise<string | null>;
94
- /** Optional. Check whether MFA is enabled for a user. */
95
- isMfaEnabled?(userId: string): Promise<boolean>;
96
- /** Optional. Enable or disable MFA for a user. */
97
- setMfaEnabled?(userId: string, enabled: boolean): Promise<void>;
98
- /** Optional. Store hashed recovery codes for MFA. */
99
- setRecoveryCodes?(userId: string, codes: string[]): Promise<void>;
100
- /** Optional. Retrieve hashed recovery codes for MFA. */
101
- getRecoveryCodes?(userId: string): Promise<string[]>;
102
- /** Optional. Remove a single recovery code after use. */
103
- removeRecoveryCode?(userId: string, code: string): Promise<void>;
104
- /** Optional. Get the MFA methods enabled for a user (e.g., ["totp"], ["emailOtp"], ["totp", "emailOtp"]). */
105
- getMfaMethods?(userId: string): Promise<string[]>;
106
- /** Optional. Set the MFA methods enabled for a user. */
107
- setMfaMethods?(userId: string, methods: string[]): Promise<void>;
108
- /** Optional. Get roles for a user within a specific tenant. */
109
- getTenantRoles?(userId: string, tenantId: string): Promise<string[]>;
110
- /** Optional. Set roles for a user within a specific tenant (replaces existing). */
111
- setTenantRoles?(userId: string, tenantId: string, roles: string[]): Promise<void>;
112
- /** Optional. Add a single role to a user within a specific tenant. */
113
- addTenantRole?(userId: string, tenantId: string, role: string): Promise<void>;
114
- /** Optional. Remove a single role from a user within a specific tenant. */
115
- removeTenantRole?(userId: string, tenantId: string, role: string): Promise<void>;
116
- /** Optional. Get all WebAuthn credentials for a user. */
117
- getWebAuthnCredentials?(userId: string): Promise<WebAuthnCredential[]>;
118
- /** Optional. Add a WebAuthn credential for a user. */
119
- addWebAuthnCredential?(userId: string, credential: WebAuthnCredential): Promise<void>;
120
- /** Optional. Remove a WebAuthn credential by its credential ID. */
121
- removeWebAuthnCredential?(userId: string, credentialId: string): Promise<void>;
122
- /** Optional. Update the sign count for a WebAuthn credential after successful authentication. */
123
- updateWebAuthnCredentialSignCount?(userId: string, credentialId: string, signCount: number): Promise<void>;
124
- /** Optional. Find the user who owns a WebAuthn credential. Returns userId or null. Used for cross-user uniqueness checks. */
125
- findUserByWebAuthnCredentialId?(credentialId: string): Promise<string | null>;
126
- /** Suspend or unsuspend a user. */
127
- setSuspended?(userId: string, suspended: boolean, reason?: string): Promise<void>;
128
- /** Get suspension status. Returns false if adapter doesn't track it. */
129
- getSuspended?(userId: string): Promise<{
130
- suspended: boolean;
131
- suspendedReason?: string;
132
- } | null>;
133
- /** Update profile fields. */
134
- updateProfile?(userId: string, fields: Partial<Pick<IdentityProfile, "displayName" | "firstName" | "lastName" | "externalId">>): Promise<void>;
135
- /** List users matching a normalized query. */
136
- listUsers?(query: UserQuery): Promise<{
137
- users: UserRecord[];
138
- totalResults: number;
139
- }>;
140
- /**
141
- * Create a new group. Returns the new group's id.
142
- * The name must be a slug (/^[a-z0-9_-]+$/) and unique within its scope.
143
- * tenantId: null = app-wide group, string = tenant-scoped group.
144
- */
145
- createGroup?(group: Omit<GroupRecord, "id" | "createdAt" | "updatedAt">): Promise<{
146
- id: string;
147
- }>;
148
- /**
149
- * Delete a group and cascade-delete all its memberships.
150
- * Cascade behavior is adapter-specific (MongoDB: manual deleteMany, SQLite: ON DELETE CASCADE).
151
- */
152
- deleteGroup?(groupId: string): Promise<void>;
153
- /** Get a group by ID. Returns null if not found. */
154
- getGroup?(groupId: string): Promise<GroupRecord | null>;
155
- /**
156
- * List groups scoped to a tenant (tenantId string) or app-wide (tenantId null).
157
- * Results are paginated (default limit 50, max 200).
158
- */
159
- listGroups?(tenantId: string | null, opts?: PaginationOpts): Promise<PaginatedResult<GroupRecord>>;
160
- /**
161
- * Update mutable group fields: name, displayName, description, roles.
162
- * tenantId is intentionally excluded — it is immutable after creation.
163
- */
164
- updateGroup?(groupId: string, updates: Partial<Pick<GroupRecord, "roles" | "name" | "displayName" | "description">>): Promise<void>;
165
- /**
166
- * Add a user to a group with optional per-membership roles.
167
- *
168
- * CONTRACT: throws if the user is already a member (unique constraint violation).
169
- * All adapters must surface this as a thrown error, not a silent no-op.
170
- * Use updateGroupMembership to change roles on an existing membership.
171
- */
172
- addGroupMember?(groupId: string, userId: string, roles?: string[]): Promise<void>;
173
- /**
174
- * Update the per-membership roles for an existing group member.
175
- * Replaces the member's roles[] in place (not additive).
176
- * No updatedAt is tracked — intentional, see GroupMembershipRecord.
177
- */
178
- updateGroupMembership?(groupId: string, userId: string, roles: string[]): Promise<void>;
179
- /** Remove a user from a group. No-op if the user is not a member. */
180
- removeGroupMember?(groupId: string, userId: string): Promise<void>;
181
- /** List members of a group with their per-membership roles. Paginated. */
182
- getGroupMembers?(groupId: string, opts?: PaginationOpts): Promise<PaginatedResult<{
183
- userId: string;
184
- roles: string[];
185
- }>>;
186
- /**
187
- * List all groups a user belongs to in the given scope, with their per-membership roles.
188
- * tenantId = null → app-wide groups; tenantId = string → tenant-scoped groups.
189
- */
190
- getUserGroups?(userId: string, tenantId: string | null): Promise<Array<{
191
- group: GroupRecord;
192
- membershipRoles: string[];
193
- }>>;
194
- /**
195
- * Return all roles a user effectively has in the given scope, combining:
196
- * 1. Direct roles (app-wide or tenant-scoped)
197
- * 2. Group baseline roles (from all groups the user belongs to in that scope)
198
- * 3. Per-membership roles (user-specific extras within each group)
199
- *
200
- * SCOPE CONTRACT (matches requireRole behavior):
201
- * - tenantId = null → app-wide direct roles + app-wide group roles only
202
- * - tenantId = string → tenant-scoped direct roles + tenant-scoped group roles only
203
- *
204
- * Tenant-scoped group roles NEVER satisfy app-wide role checks and vice versa.
205
- */
206
- getEffectiveRoles?(userId: string, tenantId: string | null): Promise<string[]>;
207
- /** Optional. Look up an active M2M client by clientId (includes clientSecretHash for verification). */
208
- getM2MClient?(clientId: string): Promise<(M2MClientRecord & {
209
- clientSecretHash: string;
210
- }) | null>;
211
- /** Optional. Create a new M2M client. Returns the new client's id. */
212
- createM2MClient?(client: {
213
- clientId: string;
214
- clientSecretHash: string;
215
- name: string;
216
- scopes: string[];
217
- }): Promise<{
218
- id: string;
219
- }>;
220
- /** Optional. Delete an M2M client by clientId. */
221
- deleteM2MClient?(clientId: string): Promise<void>;
222
- /** Optional. List all M2M clients (without secrets). */
223
- listM2MClients?(): Promise<M2MClientRecord[]>;
224
- }
225
- export interface UserQuery {
226
- email?: string;
227
- externalId?: string;
228
- suspended?: boolean;
229
- startIndex?: number;
230
- count?: number;
231
- }
232
- export interface UserRecord {
233
- id: string;
234
- email?: string;
235
- displayName?: string;
236
- firstName?: string;
237
- lastName?: string;
238
- externalId?: string;
239
- suspended: boolean;
240
- suspendedAt?: Date;
241
- suspendedReason?: string;
242
- emailVerified?: boolean;
243
- providerIds?: string[];
244
- }
245
- export declare const setAuthAdapter: (adapter: AuthAdapter) => void;
246
- export declare const getAuthAdapter: () => AuthAdapter;
@@ -1,7 +0,0 @@
1
- let _adapter = null;
2
- export const setAuthAdapter = (adapter) => { _adapter = adapter; };
3
- export const getAuthAdapter = () => {
4
- if (!_adapter)
5
- throw new Error("No auth adapter set — pass authAdapter to createApp/createServer, or call setAuthAdapter()");
6
- return _adapter;
7
- };
@@ -1,13 +0,0 @@
1
- export declare const setAuthRateLimitStore: (store: "memory" | "redis") => void;
2
- export interface LimitOpts {
3
- windowMs: number;
4
- max: number;
5
- }
6
- /** Returns true if the key is currently over the limit (read-only, no increment). */
7
- export declare const isLimited: (key: string, opts: LimitOpts) => Promise<boolean>;
8
- /** Increments the counter and returns true if now over the limit. */
9
- export declare const trackAttempt: (key: string, opts: LimitOpts) => Promise<boolean>;
10
- /** Resets a rate limit key. Use on login success or for admin unlock. */
11
- export declare const bustAuthLimit: (key: string) => Promise<void>;
12
- /** Clears all in-memory rate limit entries. Called by clearMemoryStore(). */
13
- export declare const clearMemoryRateLimitStore: () => void;
@@ -1,117 +0,0 @@
1
- import { getAppName } from "./appConfig";
2
- // ---------------------------------------------------------------------------
3
- // Memory implementation
4
- // ---------------------------------------------------------------------------
5
- const _memoryStore = new Map();
6
- const memoryStore = {
7
- async get(key) {
8
- const entry = _memoryStore.get(key);
9
- if (!entry)
10
- return null;
11
- if (entry.resetAt <= Date.now()) {
12
- _memoryStore.delete(key);
13
- return null;
14
- }
15
- return entry;
16
- },
17
- async set(key, entry) {
18
- _memoryStore.set(key, entry);
19
- },
20
- async delete(key) {
21
- _memoryStore.delete(key);
22
- },
23
- // No increment — memory store uses the read-modify-write fallback (single-process, acceptable)
24
- };
25
- // ---------------------------------------------------------------------------
26
- // Redis implementation
27
- // ---------------------------------------------------------------------------
28
- // Lua script: atomically read + increment + write JSON entry, preserving { count, resetAt } format.
29
- // Returns the new count as a number.
30
- const TRACK_SCRIPT = `
31
- local key = KEYS[1]
32
- local windowMs = tonumber(ARGV[1])
33
- local now = tonumber(ARGV[2])
34
- local raw = redis.call("GET", key)
35
- local count, resetAt
36
-
37
- if raw then
38
- local entry = cjson.decode(raw)
39
- count = entry.count + 1
40
- resetAt = entry.resetAt
41
- else
42
- count = 1
43
- resetAt = now + windowMs
44
- end
45
-
46
- local ttl = math.max(1, resetAt - now)
47
- local payload = cjson.encode({count = count, resetAt = resetAt})
48
- redis.call("SET", key, payload, "PX", ttl)
49
- return count
50
- `;
51
- const redisStore = {
52
- async get(key) {
53
- const { getRedis } = await import("./redis");
54
- const raw = await getRedis().get(`rl:${getAppName()}:${key}`);
55
- if (!raw)
56
- return null;
57
- const entry = JSON.parse(raw);
58
- if (entry.resetAt <= Date.now())
59
- return null;
60
- return entry;
61
- },
62
- async set(key, entry, ttlMs) {
63
- const { getRedis } = await import("./redis");
64
- await getRedis().set(`rl:${getAppName()}:${key}`, JSON.stringify(entry), "PX", ttlMs);
65
- },
66
- async delete(key) {
67
- const { getRedis } = await import("./redis");
68
- await getRedis().del(`rl:${getAppName()}:${key}`);
69
- },
70
- async increment(key, windowMs) {
71
- const { getRedis } = await import("./redis");
72
- const fullKey = `rl:${getAppName()}:${key}`;
73
- const now = Date.now();
74
- const count = await getRedis().eval(TRACK_SCRIPT, 1, fullKey, windowMs, now);
75
- return count;
76
- },
77
- };
78
- // ---------------------------------------------------------------------------
79
- // Active store + setter
80
- // ---------------------------------------------------------------------------
81
- let _store = memoryStore;
82
- export const setAuthRateLimitStore = (store) => {
83
- _store = store === "redis" ? redisStore : memoryStore;
84
- };
85
- /** Returns true if the key is currently over the limit (read-only, no increment). */
86
- export const isLimited = async (key, opts) => {
87
- const entry = await _store.get(key);
88
- if (!entry)
89
- return false;
90
- return entry.count >= opts.max;
91
- };
92
- /** Increments the counter and returns true if now over the limit. */
93
- export const trackAttempt = async (key, opts) => {
94
- if (_store.increment) {
95
- const count = await _store.increment(key, opts.windowMs);
96
- return count >= opts.max;
97
- }
98
- // Read-modify-write fallback for memory store (single-process — no lost increments)
99
- const now = Date.now();
100
- const existing = await _store.get(key);
101
- if (!existing) {
102
- await _store.set(key, { count: 1, resetAt: now + opts.windowMs }, opts.windowMs);
103
- return 1 >= opts.max;
104
- }
105
- const updated = { count: existing.count + 1, resetAt: existing.resetAt };
106
- const remaining = Math.max(1, existing.resetAt - now);
107
- await _store.set(key, updated, remaining);
108
- return updated.count >= opts.max;
109
- };
110
- /** Resets a rate limit key. Use on login success or for admin unlock. */
111
- export const bustAuthLimit = async (key) => {
112
- await _store.delete(key);
113
- };
114
- /** Clears all in-memory rate limit entries. Called by clearMemoryStore(). */
115
- export const clearMemoryRateLimitStore = () => {
116
- _memoryStore.clear();
117
- };
@@ -1,14 +0,0 @@
1
- import type { Context } from "hono";
2
- export declare const setTrustProxy: (value: false | number) => void;
3
- /**
4
- * Returns the client IP address, respecting the `trustProxy` setting.
5
- *
6
- * - When `trustProxy` is `false`: returns the socket-level IP (via Bun's
7
- * `server.requestIP()`), ignoring `X-Forwarded-For` entirely.
8
- * - When `trustProxy` is a number N: takes the Nth-from-right entry in the
9
- * `X-Forwarded-For` chain (skipping N trusted proxy hops), falling back to
10
- * the socket-level IP.
11
- *
12
- * Returns `"unknown"` if no IP can be determined.
13
- */
14
- export declare const getClientIp: (c: Context<any>) => string;
@@ -1,31 +0,0 @@
1
- export interface CredentialStuffingConfig {
2
- /** Block when an IP attempts login against this many distinct accounts. Default: 5 per 15 min. */
3
- maxAccountsPerIp?: {
4
- count: number;
5
- windowMs: number;
6
- };
7
- /** Block when an account is attempted from this many distinct IPs. Default: 10 per 15 min. */
8
- maxIpsPerAccount?: {
9
- count: number;
10
- windowMs: number;
11
- };
12
- /** Called when stuffing is detected. Non-blocking, errors swallowed. */
13
- onDetected?: (signal: {
14
- type: "ip" | "account";
15
- key: string;
16
- count: number;
17
- }) => void;
18
- }
19
- export declare function setCredentialStuffingConfig(config: CredentialStuffingConfig | null): void;
20
- export declare function getCredentialStuffingConfig(): CredentialStuffingConfig | null;
21
- /**
22
- * Track a failed login attempt. Call this AFTER confirming the login failed.
23
- */
24
- export declare function trackFailedLogin(ip: string, identifier: string): void;
25
- /**
26
- * Check whether this login attempt should be blocked.
27
- * Call this BEFORE verifying credentials.
28
- */
29
- export declare function isStuffingBlocked(ip: string, identifier: string): boolean;
30
- /** Clear the in-memory store (for testing). */
31
- export declare function clearCredentialStuffingStore(): void;