@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
@@ -0,0 +1,16 @@
1
+ import { HttpError } from '../../../packages/bunshot-core/src/index.js';
2
+ export const errorHandler = async (req, next) => {
3
+ try {
4
+ return await next(req);
5
+ }
6
+ catch (err) {
7
+ console.error(err);
8
+ if (err instanceof HttpError) {
9
+ const body = { error: err.message };
10
+ if (err.code !== undefined)
11
+ body.code = err.code;
12
+ return Response.json(body, { status: err.status });
13
+ }
14
+ return Response.json({ error: 'Internal Server Error' }, { status: 500 });
15
+ }
16
+ };
@@ -0,0 +1 @@
1
+ export const applyMiddleware = (handler, ...middleware) => middleware.reduceRight((next, mw) => req => mw(req, next), handler);
@@ -1,2 +1,2 @@
1
- import type { Middleware } from ".";
1
+ import type { Middleware } from '.';
2
2
  export declare const logger: Middleware;
@@ -0,0 +1,12 @@
1
+ import type { MetricsState } from '../lib/metrics';
2
+ import type { MiddlewareHandler } from 'hono';
3
+ import type { AppEnv } from '../../../packages/bunshot-core/src/index.js';
4
+ export interface MetricsMiddlewareOptions {
5
+ /** Instance-owned metrics registry. */
6
+ state: MetricsState;
7
+ /** Paths to exclude from metrics collection. Strings use prefix matching. */
8
+ excludePaths?: (string | RegExp)[];
9
+ /** Custom path normalizer to prevent cardinality explosion. */
10
+ normalizePath?: (path: string) => string;
11
+ }
12
+ export declare const metricsCollector: (options: MetricsMiddlewareOptions) => MiddlewareHandler<AppEnv>;
@@ -0,0 +1,26 @@
1
+ import { defaultNormalizePath, incrementCounter, observeHistogram } from '../lib/metrics';
2
+ const DEFAULT_EXCLUDE = ['/metrics', '/health', '/docs', '/openapi.json'];
3
+ export const metricsCollector = (options) => {
4
+ const { state, excludePaths = DEFAULT_EXCLUDE, normalizePath = defaultNormalizePath } = options;
5
+ return async (c, next) => {
6
+ const rawPath = c.req.path;
7
+ const excluded = excludePaths.some(p => typeof p === 'string' ? rawPath.startsWith(p) : p.test(rawPath));
8
+ if (excluded)
9
+ return next();
10
+ const start = performance.now();
11
+ await next();
12
+ const duration = (performance.now() - start) / 1000; // seconds
13
+ const method = c.req.method;
14
+ const path = normalizePath(rawPath);
15
+ const status = String(c.res.status);
16
+ const tenantId = c.get('tenantId') ?? undefined;
17
+ const labels = { method, path, status };
18
+ const durationLabels = { method, path };
19
+ if (tenantId) {
20
+ labels.tenant = tenantId;
21
+ durationLabels.tenant = tenantId;
22
+ }
23
+ incrementCounter(state, 'http_requests_total', labels);
24
+ observeHistogram(state, 'http_request_duration_seconds', durationLabels, duration);
25
+ };
26
+ };
@@ -1,5 +1,5 @@
1
- import type { MiddlewareHandler } from "hono";
2
- import type { AppEnv } from "../lib/context";
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { AppEnv } from '../../../packages/bunshot-core/src/index.js';
3
3
  export interface RateLimitOptions {
4
4
  windowMs: number;
5
5
  max: number;
@@ -0,0 +1,22 @@
1
+ import { getBunshotCtx, getClientIp, getFingerprintBuilder, getRateLimitAdapter, } from '../../../packages/bunshot-core/src/index.js';
2
+ export const rateLimit = ({ windowMs, max, fingerprintLimit = false, }) => {
3
+ const opts = { windowMs, max };
4
+ return async (c, next) => {
5
+ const ctx = getBunshotCtx(c);
6
+ const adapter = getRateLimitAdapter(ctx);
7
+ const ip = getClientIp(c);
8
+ // Per-tenant namespacing: each tenant gets independent rate limit buckets
9
+ const tenantId = c.get('tenantId');
10
+ const prefix = tenantId ? `t:${tenantId}:` : '';
11
+ if (await adapter.trackAttempt(`${prefix}ip:${ip}`, opts)) {
12
+ return c.json({ error: 'Too Many Requests' }, 429);
13
+ }
14
+ if (fingerprintLimit) {
15
+ const fp = await getFingerprintBuilder(ctx).buildFingerprint(c.req.raw);
16
+ if (await adapter.trackAttempt(`${prefix}fp:${fp}`, opts)) {
17
+ return c.json({ error: 'Too Many Requests' }, 429);
18
+ }
19
+ }
20
+ await next();
21
+ };
22
+ };
@@ -0,0 +1,3 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { AppEnv } from '../../../packages/bunshot-core/src/index.js';
3
+ export declare const requestId: MiddlewareHandler<AppEnv>;
@@ -1,7 +1,7 @@
1
- import { HEADER_REQUEST_ID } from "../lib/constants";
1
+ import { HEADER_REQUEST_ID } from '../../../packages/bunshot-core/src/index.js';
2
2
  export const requestId = async (c, next) => {
3
3
  const id = c.req.header(HEADER_REQUEST_ID) ?? crypto.randomUUID();
4
- c.set("requestId", id);
4
+ c.set('requestId', id);
5
5
  await next();
6
6
  c.res.headers.set(HEADER_REQUEST_ID, id);
7
7
  };
@@ -1,6 +1,6 @@
1
- import type { MiddlewareHandler } from "hono";
2
- import type { AppEnv } from "../lib/context";
3
- export type LogLevel = "info" | "warn" | "error";
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { AppEnv } from '../../../packages/bunshot-core/src/index.js';
3
+ export type LogLevel = 'info' | 'warn' | 'error';
4
4
  export interface RequestLogEntry {
5
5
  level: LogLevel;
6
6
  time: number;
@@ -1,13 +1,18 @@
1
- import { getClientIp } from "../lib/clientIp";
1
+ import { getClientIp } from '../../../packages/bunshot-core/src/index.js';
2
2
  const LEVEL_ORDER = { info: 0, warn: 1, error: 2 };
3
3
  function statusToLevel(status) {
4
4
  if (status >= 500)
5
- return "error";
5
+ return 'error';
6
6
  if (status >= 400)
7
- return "warn";
8
- return "info";
7
+ return 'warn';
8
+ return 'info';
9
9
  }
10
- const DEFAULT_EXCLUDE_PATHS = ["/health", "/docs", "/openapi.json", "/metrics"];
10
+ const DEFAULT_EXCLUDE_PATHS = [
11
+ '/health',
12
+ '/docs',
13
+ '/openapi.json',
14
+ '/metrics',
15
+ ];
11
16
  export const requestLogger = (options = {}) => {
12
17
  const { onLog = (entry) => console.log(JSON.stringify(entry)), level: minLevel, excludePaths = DEFAULT_EXCLUDE_PATHS, excludeMethods, } = options;
13
18
  return async (c, next) => {
@@ -16,7 +21,7 @@ export const requestLogger = (options = {}) => {
16
21
  return next();
17
22
  }
18
23
  const path = c.req.path;
19
- const excluded = excludePaths.some(p => typeof p === "string" ? path.startsWith(p) : p.test(path));
24
+ const excluded = excludePaths.some(p => typeof p === 'string' ? path.startsWith(p) : p.test(path));
20
25
  if (excluded) {
21
26
  return next();
22
27
  }
@@ -38,17 +43,17 @@ export const requestLogger = (options = {}) => {
38
43
  const entry = {
39
44
  level,
40
45
  time: Date.now(),
41
- msg: `${method} ${path} ${error ? "ERROR" : statusCode}`,
42
- requestId: c.get("requestId") ?? "unknown",
46
+ msg: `${method} ${path} ${error ? 'ERROR' : statusCode}`,
47
+ requestId: c.get('requestId') ?? 'unknown',
43
48
  method,
44
49
  path,
45
50
  statusCode,
46
51
  responseTime: Math.round((performance.now() - start) * 100) / 100,
47
52
  ip: getClientIp(c),
48
- userAgent: c.req.header("user-agent") ?? null,
49
- userId: c.get("authUserId") ?? null,
50
- sessionId: c.get("sessionId") ?? null,
51
- tenantId: c.get("tenantId") ?? null,
53
+ userAgent: c.req.header('user-agent') ?? null,
54
+ userId: c.get('authUserId') ?? null,
55
+ sessionId: c.get('sessionId') ?? null,
56
+ tenantId: c.get('tenantId') ?? null,
52
57
  };
53
58
  if (error) {
54
59
  entry.err = {
@@ -1,5 +1,5 @@
1
- import type { MiddlewareHandler } from "hono";
2
- import type { AppEnv } from "../lib/context";
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { AppEnv } from '../../../packages/bunshot-core/src/index.js';
3
3
  export interface RequestSigningOptions {
4
4
  /** Allowed age of the timestamp in milliseconds. Default: 300_000 (5 min). */
5
5
  tolerance?: number;
@@ -1,6 +1,5 @@
1
- import { getSigningConfig, getSigningSecret } from "../lib/appConfig";
2
- import { hmacVerify } from "../lib/signing";
3
- import { HEADER_SIGNATURE, HEADER_TIMESTAMP } from "../lib/constants";
1
+ import { hmacVerify } from '../../lib/signing';
2
+ import { HEADER_SIGNATURE, HEADER_TIMESTAMP, HttpError } from '../../../packages/bunshot-core/src/index.js';
4
3
  /**
5
4
  * Canonicalize the query string for signing.
6
5
  *
@@ -13,19 +12,19 @@ import { HEADER_SIGNATURE, HEADER_TIMESTAMP } from "../lib/constants";
13
12
  */
14
13
  function canonicalizeQuery(search) {
15
14
  // Remove leading "?"
16
- const qs = search.startsWith("?") ? search.slice(1) : search;
15
+ const qs = search.startsWith('?') ? search.slice(1) : search;
17
16
  if (!qs)
18
- return "";
17
+ return '';
19
18
  const pairs = [];
20
- for (const part of qs.split("&")) {
19
+ for (const part of qs.split('&')) {
21
20
  if (!part)
22
21
  continue;
23
- const eqIdx = part.indexOf("=");
22
+ const eqIdx = part.indexOf('=');
24
23
  const rawKey = eqIdx === -1 ? part : part.slice(0, eqIdx);
25
- const rawVal = eqIdx === -1 ? "" : part.slice(eqIdx + 1);
24
+ const rawVal = eqIdx === -1 ? '' : part.slice(eqIdx + 1);
26
25
  // Normalize encoding: decode then re-encode
27
- const key = encodeURIComponent(decodeURIComponent(rawKey.replace(/\+/g, " ")));
28
- const val = encodeURIComponent(decodeURIComponent(rawVal.replace(/\+/g, " ")));
26
+ const key = encodeURIComponent(decodeURIComponent(rawKey.replace(/\+/g, ' ')));
27
+ const val = encodeURIComponent(decodeURIComponent(rawVal.replace(/\+/g, ' ')));
29
28
  pairs.push([key, val]);
30
29
  }
31
30
  // Sort by key, then by value for repeated keys
@@ -34,7 +33,7 @@ function canonicalizeQuery(search) {
34
33
  return a[0] < b[0] ? -1 : 1;
35
34
  return a[1] < b[1] ? -1 : 1;
36
35
  });
37
- return pairs.map(([k, v]) => `${k}=${v}`).join("&");
36
+ return pairs.map(([k, v]) => `${k}=${v}`).join('&');
38
37
  }
39
38
  /**
40
39
  * Middleware that verifies the client has HMAC-signed the canonical request.
@@ -46,13 +45,13 @@ function canonicalizeQuery(search) {
46
45
  * is a no-op pass-through.
47
46
  */
48
47
  export const requireSignedRequest = (opts) => async (c, next) => {
49
- const cfg = getSigningConfig();
48
+ const cfg = c.get('bunshotCtx')?.signing;
50
49
  // No-op when request signing is not enabled
51
50
  if (!cfg?.requestSigning) {
52
51
  await next();
53
52
  return;
54
53
  }
55
- const signingOpts = typeof cfg.requestSigning === "object" ? cfg.requestSigning : {};
54
+ const signingOpts = typeof cfg.requestSigning === 'object' ? cfg.requestSigning : {};
56
55
  const tolerance = opts?.tolerance ?? signingOpts.tolerance ?? 300_000;
57
56
  const sigHeader = opts?.header ?? signingOpts.header ?? HEADER_SIGNATURE;
58
57
  const tsHeader = opts?.timestampHeader ?? signingOpts.timestampHeader ?? HEADER_TIMESTAMP;
@@ -60,22 +59,22 @@ export const requireSignedRequest = (opts) => async (c, next) => {
60
59
  const rawTs = c.req.header(tsHeader);
61
60
  const tsNum = rawTs !== undefined ? parseInt(rawTs, 10) : NaN;
62
61
  if (isNaN(tsNum)) {
63
- return c.json({ error: "Unauthorized", code: "EXPIRED_TIMESTAMP" }, 401);
62
+ throw new HttpError(401, 'Unauthorized', 'EXPIRED_TIMESTAMP');
64
63
  }
65
64
  // Auto-detect Unix seconds (< 1e10) vs milliseconds
66
65
  const tsMs = tsNum < 1e10 ? tsNum * 1000 : tsNum;
67
66
  if (Math.abs(Date.now() - tsMs) > tolerance) {
68
- return c.json({ error: "Unauthorized", code: "EXPIRED_TIMESTAMP" }, 401);
67
+ throw new HttpError(401, 'Unauthorized', 'EXPIRED_TIMESTAMP');
69
68
  }
70
69
  // --- Signature header ---
71
70
  const sig = c.req.header(sigHeader);
72
71
  if (!sig) {
73
- return c.json({ error: "Unauthorized", code: "INVALID_SIGNATURE" }, 401);
72
+ throw new HttpError(401, 'Unauthorized', 'INVALID_SIGNATURE');
74
73
  }
75
74
  // --- Secret resolution ---
76
- const secret = getSigningSecret();
75
+ const secret = cfg.secret ?? null;
77
76
  if (!secret) {
78
- return c.json({ error: "Internal Server Error", code: "SIGNING_SECRET_MISSING" }, 500);
77
+ throw new HttpError(500, 'Internal Server Error', 'SIGNING_SECRET_MISSING');
79
78
  }
80
79
  // --- Build canonical string ---
81
80
  const method = c.req.method.toUpperCase();
@@ -93,7 +92,7 @@ export const requireSignedRequest = (opts) => async (c, next) => {
93
92
  valid = false;
94
93
  }
95
94
  if (!valid) {
96
- return c.json({ error: "Unauthorized", code: "INVALID_SIGNATURE" }, 401);
95
+ throw new HttpError(401, 'Unauthorized', 'INVALID_SIGNATURE');
97
96
  }
98
97
  await next();
99
98
  };
@@ -0,0 +1,14 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { AppEnv } from '../../../packages/bunshot-core/src/index.js';
3
+ import type { TenancyConfig, TenantConfig } from '../../app';
4
+ export interface TenantResolutionCache {
5
+ get(key: string): TenantConfig | null | undefined;
6
+ set(key: string, value: TenantConfig | null): void;
7
+ delete(key: string): void;
8
+ }
9
+ export interface TenantCacheCarrier {
10
+ cache: TenantResolutionCache | null;
11
+ }
12
+ export declare const invalidateTenantCache: (cache: TenantResolutionCache | null | undefined, tenantId: string) => void;
13
+ export declare function getTenantCacheFromApp(app: object): TenantResolutionCache | null;
14
+ export declare const createTenantMiddleware: (config: TenancyConfig, carrier?: TenantCacheCarrier) => MiddlewareHandler<AppEnv>;
@@ -1,3 +1,4 @@
1
+ import { getContext } from '../../../packages/bunshot-core/src/index.js';
1
2
  class LruCache {
2
3
  _map = new Map();
3
4
  _maxSize;
@@ -37,79 +38,82 @@ class LruCache {
37
38
  // ---------------------------------------------------------------------------
38
39
  // Exported cache invalidation (used by tenant provisioning helpers)
39
40
  // ---------------------------------------------------------------------------
40
- let _cache = null;
41
- export const invalidateTenantCache = (tenantId) => {
42
- _cache?.delete(tenantId);
41
+ export const invalidateTenantCache = (cache, tenantId) => {
42
+ cache?.delete(tenantId);
43
43
  };
44
+ export function getTenantCacheFromApp(app) {
45
+ const ctx = getContext(app);
46
+ return (ctx.pluginState.get('tenantResolutionCache') ??
47
+ null);
48
+ }
44
49
  // ---------------------------------------------------------------------------
45
50
  // Tenant resolution middleware
46
51
  // ---------------------------------------------------------------------------
47
- const DEFAULT_EXEMPT = ["/health", "/docs", "/openapi.json", "/auth/"];
52
+ const DEFAULT_EXEMPT = ['/health', '/docs', '/openapi.json', '/auth/'];
48
53
  function extractTenantId(c, config) {
49
- if (config.resolution === "header") {
50
- const headerName = config.headerName ?? "x-tenant-id";
54
+ if (config.resolution === 'header') {
55
+ const headerName = config.headerName ?? 'x-tenant-id';
51
56
  return c.req.header(headerName) ?? null;
52
57
  }
53
- if (config.resolution === "subdomain") {
54
- const host = c.req.header("host") ?? "";
58
+ if (config.resolution === 'subdomain') {
59
+ const host = c.req.header('host') ?? '';
55
60
  // Extract first subdomain: "acme.myapp.com" → "acme"
56
- const parts = host.split(".");
61
+ const parts = host.split('.');
57
62
  if (parts.length < 3)
58
63
  return null; // no subdomain
59
64
  return parts[0] || null;
60
65
  }
61
- if (config.resolution === "path") {
66
+ if (config.resolution === 'path') {
62
67
  const segmentIndex = config.pathSegment ?? 0;
63
68
  // Path: "/acme/api/users" → segments after split: ["", "acme", "api", "users"]
64
- const segments = c.req.path.split("/").filter(Boolean);
69
+ const segments = c.req.path.split('/').filter(Boolean);
65
70
  return segments[segmentIndex] ?? null;
66
71
  }
67
72
  return null;
68
73
  }
69
- export const createTenantMiddleware = (config) => {
74
+ export const createTenantMiddleware = (config, carrier) => {
70
75
  const exemptPaths = [...DEFAULT_EXEMPT, ...(config.exemptPaths ?? [])];
71
76
  const rejectionStatus = config.rejectionStatus ?? 403;
72
77
  const cacheTtlMs = config.cacheTtlMs ?? 60_000;
73
78
  const cacheMaxSize = config.cacheMaxSize ?? 500;
74
- // Initialize LRU cache if caching is enabled and onResolve is provided
75
- if (config.onResolve && cacheTtlMs > 0) {
76
- _cache = new LruCache(cacheMaxSize, cacheTtlMs);
77
- }
79
+ const cache = config.onResolve && cacheTtlMs > 0 ? new LruCache(cacheMaxSize, cacheTtlMs) : null;
80
+ if (carrier)
81
+ carrier.cache = cache;
78
82
  return async (c, next) => {
79
83
  const path = c.req.path;
80
84
  // Check exempt paths using startsWith
81
85
  for (const exempt of exemptPaths) {
82
86
  if (path === exempt || path.startsWith(exempt)) {
83
- c.set("tenantId", null);
84
- c.set("tenantConfig", null);
87
+ c.set('tenantId', null);
88
+ c.set('tenantConfig', null);
85
89
  return next();
86
90
  }
87
91
  }
88
92
  const tenantId = extractTenantId(c, config);
89
93
  if (!tenantId) {
90
- return c.json({ error: "Tenant ID required" }, 400);
94
+ return c.json({ error: 'Tenant ID required' }, 400);
91
95
  }
92
96
  // Validate via onResolve (with caching)
93
97
  if (config.onResolve) {
94
98
  let tenantConfig;
95
- if (_cache) {
96
- tenantConfig = _cache.get(tenantId);
99
+ if (cache) {
100
+ tenantConfig = cache.get(tenantId);
97
101
  }
98
102
  // undefined = cache miss, null = onResolve returned null (rejected)
99
103
  if (tenantConfig === undefined) {
100
104
  tenantConfig = await config.onResolve(tenantId);
101
- _cache?.set(tenantId, tenantConfig);
105
+ cache?.set(tenantId, tenantConfig);
102
106
  }
103
107
  if (tenantConfig === null) {
104
- return c.json({ error: "Access denied" }, rejectionStatus);
108
+ return c.json({ error: 'Access denied' }, rejectionStatus);
105
109
  }
106
- c.set("tenantId", tenantId);
107
- c.set("tenantConfig", tenantConfig);
110
+ c.set('tenantId', tenantId);
111
+ c.set('tenantConfig', tenantConfig);
108
112
  }
109
113
  else {
110
114
  // No onResolve — trust the tenant ID
111
- c.set("tenantId", tenantId);
112
- c.set("tenantConfig", null);
115
+ c.set('tenantId', tenantId);
116
+ c.set('tenantConfig', null);
113
117
  }
114
118
  return next();
115
119
  };
@@ -0,0 +1,5 @@
1
+ import type { UploadOpts } from '../lib/upload';
2
+ import type { MiddlewareHandler } from 'hono';
3
+ import type { AppEnv } from '../../../packages/bunshot-core/src/index.js';
4
+ export type UploadMiddlewareOptions = UploadOpts;
5
+ export declare const handleUpload: (opts?: UploadMiddlewareOptions) => MiddlewareHandler<AppEnv>;
@@ -1,12 +1,12 @@
1
- import { parseUpload, getUploadConfig } from "../lib/upload";
1
+ import { getUploadConfig, parseUpload } from '../lib/upload';
2
2
  export const handleUpload = (opts) => {
3
3
  return async (c, next) => {
4
- const config = getUploadConfig();
4
+ const config = getUploadConfig(c.get('bunshotCtx'));
5
5
  const merged = { ...config, ...opts };
6
6
  const maxFileSize = merged.maxFileSize ?? 10 * 1024 * 1024;
7
7
  const maxFiles = merged.maxFiles ?? 10;
8
8
  // Content-Length pre-check to avoid Bun killing the connection
9
- const contentLength = Number(c.req.header("content-length") ?? 0);
9
+ const contentLength = Number(c.req.header('content-length') ?? 0);
10
10
  if (contentLength > 0 && contentLength > maxFileSize * maxFiles) {
11
11
  return c.json({ error: `Request body too large. Maximum is ${maxFileSize * maxFiles} bytes` }, 413);
12
12
  }
@@ -21,7 +21,7 @@ export const handleUpload = (opts) => {
21
21
  return c.json({ error: err.message }, 413);
22
22
  throw err;
23
23
  }
24
- c.set("uploadResults", results);
24
+ c.set('uploadResults', results);
25
25
  await next();
26
26
  };
27
27
  };
@@ -1,5 +1,5 @@
1
- import type { MiddlewareHandler, Context } from "hono";
2
- import type { AppEnv } from "../lib/context";
1
+ import type { Context, MiddlewareHandler } from 'hono';
2
+ import type { AppEnv } from '../../../packages/bunshot-core/src/index.js';
3
3
  export interface WebhookTimestampOptions {
4
4
  /** Header name containing the Unix timestamp (seconds or ms). */
5
5
  header: string;
@@ -18,7 +18,7 @@ export interface WebhookAuthOptions {
18
18
  /** Header that carries the signature. Default: `"x-webhook-signature"`. */
19
19
  header?: string;
20
20
  /** HMAC algorithm. Default: `"sha256"`. */
21
- algorithm?: "sha256" | "sha512" | "sha1";
21
+ algorithm?: 'sha256' | 'sha512';
22
22
  /**
23
23
  * Strip this prefix from the signature header value before comparing.
24
24
  * e.g. `"sha256="` for GitHub-style `X-Hub-Signature-256: sha256=<hex>`.
@@ -1,38 +1,38 @@
1
- import { createHmac } from "crypto";
2
- import { timingSafeEqual } from "../lib/crypto";
1
+ import { createHmac } from 'crypto';
2
+ import { HttpError, timingSafeEqual } from '../../../packages/bunshot-core/src/index.js';
3
3
  export const webhookAuth = (options) => async (c, next) => {
4
- const algorithm = options.algorithm ?? "sha256";
5
- const sigHeader = options.header ?? "x-webhook-signature";
4
+ const algorithm = options.algorithm ?? 'sha256';
5
+ const sigHeader = options.header ?? 'x-webhook-signature';
6
6
  // --- Optional timestamp replay protection ---
7
7
  if (options.timestamp) {
8
8
  const { header: tsHeader, tolerance } = options.timestamp;
9
9
  const rawTs = c.req.header(tsHeader);
10
10
  const tsNum = rawTs !== undefined ? parseInt(rawTs, 10) : NaN;
11
11
  if (isNaN(tsNum)) {
12
- return c.json({ error: "Unauthorized", code: "EXPIRED_TIMESTAMP" }, 401);
12
+ throw new HttpError(401, 'Unauthorized', 'EXPIRED_TIMESTAMP');
13
13
  }
14
14
  // Auto-detect Unix seconds (< 1e10) vs milliseconds
15
15
  const tsMs = tsNum < 1e10 ? tsNum * 1000 : tsNum;
16
16
  if (Math.abs(Date.now() - tsMs) > tolerance) {
17
- return c.json({ error: "Unauthorized", code: "EXPIRED_TIMESTAMP" }, 401);
17
+ throw new HttpError(401, 'Unauthorized', 'EXPIRED_TIMESTAMP');
18
18
  }
19
19
  }
20
20
  // --- Signature header ---
21
21
  const rawSig = c.req.header(sigHeader);
22
22
  if (!rawSig) {
23
- return c.json({ error: "Unauthorized", code: "INVALID_SIGNATURE" }, 401);
23
+ throw new HttpError(401, 'Unauthorized', 'INVALID_SIGNATURE');
24
24
  }
25
25
  const provided = options.prefix && rawSig.startsWith(options.prefix)
26
26
  ? rawSig.slice(options.prefix.length)
27
27
  : rawSig;
28
28
  // --- Secret resolution ---
29
29
  let secret;
30
- if (typeof options.secret === "function") {
30
+ if (typeof options.secret === 'function') {
31
31
  try {
32
32
  secret = await options.secret(c);
33
33
  }
34
34
  catch {
35
- return c.json({ error: "Internal Server Error", code: "WEBHOOK_SECRET_ERROR" }, 500);
35
+ throw new HttpError(500, 'Internal Server Error', 'WEBHOOK_SECRET_ERROR');
36
36
  }
37
37
  }
38
38
  else {
@@ -41,7 +41,7 @@ export const webhookAuth = (options) => async (c, next) => {
41
41
  // --- Body reading (Hono caches this — downstream c.req.json() still works) ---
42
42
  const body = await c.req.text();
43
43
  // --- HMAC computation & comparison ---
44
- const computed = createHmac(algorithm, secret).update(body).digest("hex");
44
+ const computed = createHmac(algorithm, secret).update(body).digest('hex');
45
45
  let valid;
46
46
  try {
47
47
  valid = timingSafeEqual(computed, provided);
@@ -51,7 +51,7 @@ export const webhookAuth = (options) => async (c, next) => {
51
51
  valid = false;
52
52
  }
53
53
  if (!valid) {
54
- return c.json({ error: "Unauthorized", code: "INVALID_SIGNATURE" }, 401);
54
+ throw new HttpError(401, 'Unauthorized', 'INVALID_SIGNATURE');
55
55
  }
56
56
  await next();
57
57
  };
@@ -0,0 +1,21 @@
1
+ import type { Connection, Document, Model } from 'mongoose';
2
+ interface IAuditLog {
3
+ id: string;
4
+ userId: string | null;
5
+ sessionId: string | null;
6
+ tenantId: string | null;
7
+ method: string;
8
+ path: string;
9
+ status: number;
10
+ ip: string | null;
11
+ userAgent: string | null;
12
+ action?: string;
13
+ resource?: string;
14
+ resourceId?: string;
15
+ meta?: Record<string, unknown>;
16
+ createdAt: Date;
17
+ expiresAt?: Date;
18
+ }
19
+ type AuditLogDocument = IAuditLog & Document;
20
+ export declare function getAuditLogModel(conn: Connection): Model<AuditLogDocument>;
21
+ export {};
@@ -0,0 +1,31 @@
1
+ import { getMongooseModule } from '../../lib/mongo';
2
+ export function getAuditLogModel(conn) {
3
+ if (conn.models['AuditLog']) {
4
+ return conn.models['AuditLog'];
5
+ }
6
+ const mg = getMongooseModule();
7
+ const { Schema } = mg;
8
+ const schema = new Schema({
9
+ id: { type: String, required: true, unique: true },
10
+ userId: { type: String, default: null },
11
+ sessionId: { type: String, default: null },
12
+ tenantId: { type: String, default: null },
13
+ method: { type: String, required: true },
14
+ path: { type: String, required: true },
15
+ status: { type: Number, required: true },
16
+ ip: { type: String, default: null },
17
+ userAgent: { type: String, default: null },
18
+ action: { type: String },
19
+ resource: { type: String },
20
+ resourceId: { type: String },
21
+ meta: { type: Schema.Types.Mixed },
22
+ expiresAt: { type: Date, index: { expireAfterSeconds: 0 } },
23
+ }, {
24
+ collection: 'audit_logs',
25
+ timestamps: { createdAt: 'createdAt', updatedAt: false },
26
+ });
27
+ schema.index({ userId: 1, createdAt: 1 });
28
+ schema.index({ tenantId: 1, createdAt: 1 });
29
+ schema.index({ path: 1 });
30
+ return conn.model('AuditLog', schema);
31
+ }