@lastshotlabs/bunshot 0.0.25 → 0.0.28

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