@lastshotlabs/bunshot 0.0.27 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (742) hide show
  1. package/.oclif.manifest.json +39 -0
  2. package/README.md +8282 -2147
  3. package/dist/cli/commands/init.js +690 -0
  4. package/dist/cli/index.js +6 -0
  5. package/dist/cli.js +4 -4
  6. package/dist/packages/bunshot-admin/src/index.d.ts +15 -0
  7. package/dist/packages/bunshot-admin/src/index.js +11 -0
  8. package/dist/packages/bunshot-admin/src/lib/resourceTypes.d.ts +8 -0
  9. package/dist/packages/bunshot-admin/src/lib/resourceTypes.js +33 -0
  10. package/dist/packages/bunshot-admin/src/lib/typedRoute.d.ts +14 -0
  11. package/dist/packages/bunshot-admin/src/lib/typedRoute.js +17 -0
  12. package/dist/packages/bunshot-admin/src/plugin.d.ts +4 -0
  13. package/dist/packages/bunshot-admin/src/plugin.js +46 -0
  14. package/dist/packages/bunshot-admin/src/providers/auth0Access.d.ts +6 -0
  15. package/dist/packages/bunshot-admin/src/providers/auth0Access.js +32 -0
  16. package/dist/packages/bunshot-admin/src/routes/admin.d.ts +10 -0
  17. package/dist/packages/bunshot-admin/src/routes/admin.js +923 -0
  18. package/dist/packages/bunshot-admin/src/routes/mail.d.ts +6 -0
  19. package/dist/packages/bunshot-admin/src/routes/mail.js +114 -0
  20. package/dist/packages/bunshot-admin/src/routes/permissions.d.ts +8 -0
  21. package/dist/packages/bunshot-admin/src/routes/permissions.js +315 -0
  22. package/dist/packages/bunshot-admin/src/types/config.d.ts +16 -0
  23. package/dist/packages/bunshot-admin/src/types/config.js +37 -0
  24. package/dist/packages/bunshot-admin/src/types/env.d.ts +14 -0
  25. package/dist/packages/bunshot-admin/src/types/provider.d.ts +1 -0
  26. package/dist/packages/bunshot-admin/src/types/provider.js +4 -0
  27. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.d.ts +66 -0
  28. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.js +1063 -0
  29. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.d.ts +2 -0
  30. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.js +536 -0
  31. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.d.ts +88 -0
  32. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.js +1366 -0
  33. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.d.ts +2 -0
  34. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.js +23 -0
  35. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.d.ts +5 -0
  36. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.js +131 -0
  37. package/dist/packages/bunshot-auth/src/bootstrap.d.ts +38 -0
  38. package/dist/packages/bunshot-auth/src/bootstrap.js +384 -0
  39. package/dist/packages/bunshot-auth/src/config/appConfig.d.ts +3 -0
  40. package/dist/packages/bunshot-auth/src/config/appConfig.js +4 -0
  41. package/dist/packages/bunshot-auth/src/config/authConfig.d.ts +478 -0
  42. package/dist/packages/bunshot-auth/src/config/authConfig.js +46 -0
  43. package/dist/packages/bunshot-auth/src/config/configLock.d.ts +2 -0
  44. package/dist/packages/bunshot-auth/src/config/configLock.js +10 -0
  45. package/dist/packages/bunshot-auth/src/index.d.ts +25 -0
  46. package/dist/packages/bunshot-auth/src/index.js +23 -0
  47. package/dist/packages/bunshot-auth/src/infra/mongo.d.ts +15 -0
  48. package/dist/packages/bunshot-auth/src/infra/mongo.js +44 -0
  49. package/dist/packages/bunshot-auth/src/infra/queue.d.ts +14 -0
  50. package/dist/packages/bunshot-auth/src/infra/queue.js +27 -0
  51. package/dist/packages/bunshot-auth/src/infra/redis.d.ts +5 -0
  52. package/dist/packages/bunshot-auth/src/infra/redis.js +15 -0
  53. package/dist/packages/bunshot-auth/src/infra/signing.d.ts +7 -0
  54. package/dist/packages/bunshot-auth/src/infra/signing.js +8 -0
  55. package/dist/packages/bunshot-auth/src/lib/accountLockout.d.ts +34 -0
  56. package/dist/packages/bunshot-auth/src/lib/accountLockout.js +244 -0
  57. package/dist/packages/bunshot-auth/src/lib/adapterTiers.d.ts +1 -0
  58. package/dist/packages/bunshot-auth/src/lib/adapterTiers.js +1 -0
  59. package/dist/packages/bunshot-auth/src/lib/authAdapter.d.ts +1 -0
  60. package/dist/packages/bunshot-auth/src/lib/authAdapter.js +1 -0
  61. package/dist/packages/bunshot-auth/src/lib/authContext.d.ts +15 -0
  62. package/dist/packages/bunshot-auth/src/lib/authContext.js +1 -0
  63. package/dist/packages/bunshot-auth/src/lib/authEventBus.d.ts +4 -0
  64. package/dist/packages/bunshot-auth/src/lib/authEventBus.js +15 -0
  65. package/dist/packages/bunshot-auth/src/lib/authRateLimit.d.ts +28 -0
  66. package/dist/packages/bunshot-auth/src/lib/authRateLimit.js +205 -0
  67. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.d.ts +8 -2
  68. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.js +22 -9
  69. package/dist/packages/bunshot-auth/src/lib/cache.d.ts +12 -0
  70. package/dist/packages/bunshot-auth/src/lib/cache.js +120 -0
  71. package/dist/packages/bunshot-auth/src/lib/clientIp.d.ts +4 -0
  72. package/dist/{lib → packages/bunshot-auth/src/lib}/clientIp.js +14 -7
  73. package/dist/packages/bunshot-auth/src/lib/cookieOptions.d.ts +27 -0
  74. package/dist/packages/bunshot-auth/src/lib/cookieOptions.js +33 -0
  75. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.d.ts +40 -0
  76. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.js +211 -0
  77. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.d.ts +19 -0
  78. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.js +148 -0
  79. package/dist/packages/bunshot-auth/src/lib/emailTemplates.d.ts +23 -0
  80. package/dist/packages/bunshot-auth/src/lib/emailTemplates.js +265 -0
  81. package/dist/packages/bunshot-auth/src/lib/emailVerification.d.ts +30 -0
  82. package/dist/packages/bunshot-auth/src/lib/emailVerification.js +200 -0
  83. package/dist/packages/bunshot-auth/src/lib/env.d.ts +1 -0
  84. package/dist/packages/bunshot-auth/src/lib/env.js +3 -0
  85. package/dist/packages/bunshot-auth/src/lib/fingerprint.js +36 -0
  86. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.d.ts +15 -16
  87. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.js +22 -34
  88. package/dist/packages/bunshot-auth/src/lib/jwks.d.ts +28 -0
  89. package/dist/packages/bunshot-auth/src/lib/jwks.js +79 -0
  90. package/dist/packages/bunshot-auth/src/lib/jwt.d.ts +12 -0
  91. package/dist/packages/bunshot-auth/src/lib/jwt.js +86 -0
  92. package/dist/{lib → packages/bunshot-auth/src/lib}/logger.js +3 -3
  93. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.d.ts +5 -4
  94. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.js +6 -10
  95. package/dist/packages/bunshot-auth/src/lib/magicLink.d.ts +13 -0
  96. package/dist/packages/bunshot-auth/src/lib/magicLink.js +145 -0
  97. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.d.ts +60 -0
  98. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.js +419 -0
  99. package/dist/packages/bunshot-auth/src/lib/oauth.d.ts +82 -0
  100. package/dist/packages/bunshot-auth/src/lib/oauth.js +177 -0
  101. package/dist/packages/bunshot-auth/src/lib/oauthCode.d.ts +19 -0
  102. package/dist/packages/bunshot-auth/src/lib/oauthCode.js +182 -0
  103. package/dist/packages/bunshot-auth/src/lib/oauthReauth.d.ts +19 -0
  104. package/dist/packages/bunshot-auth/src/lib/oauthReauth.js +255 -0
  105. package/dist/packages/bunshot-auth/src/lib/organization.d.ts +66 -0
  106. package/dist/packages/bunshot-auth/src/lib/organization.js +225 -0
  107. package/dist/packages/bunshot-auth/src/lib/passwordHistory.d.ts +12 -0
  108. package/dist/packages/bunshot-auth/src/lib/passwordHistory.js +31 -0
  109. package/dist/packages/bunshot-auth/src/lib/resetPassword.d.ts +20 -0
  110. package/dist/packages/bunshot-auth/src/lib/resetPassword.js +148 -0
  111. package/dist/packages/bunshot-auth/src/lib/roles.d.ts +9 -0
  112. package/dist/packages/bunshot-auth/src/lib/roles.js +93 -0
  113. package/dist/packages/bunshot-auth/src/lib/saml.d.ts +29 -0
  114. package/dist/packages/bunshot-auth/src/lib/saml.js +73 -0
  115. package/dist/packages/bunshot-auth/src/lib/samlRequestId.d.ts +13 -0
  116. package/dist/packages/bunshot-auth/src/lib/samlRequestId.js +129 -0
  117. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.d.ts +7 -7
  118. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.js +15 -13
  119. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.d.ts +22 -0
  120. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.js +65 -0
  121. package/dist/packages/bunshot-auth/src/lib/session.d.ts +45 -0
  122. package/dist/packages/bunshot-auth/src/lib/session.js +1211 -0
  123. package/dist/packages/bunshot-auth/src/lib/storeInfra.d.ts +26 -0
  124. package/dist/packages/bunshot-auth/src/lib/storeInfra.js +18 -0
  125. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.d.ts +3 -2
  126. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.js +2 -5
  127. package/dist/packages/bunshot-auth/src/lib/validateAdapter.d.ts +16 -0
  128. package/dist/packages/bunshot-auth/src/lib/validateAdapter.js +161 -0
  129. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.d.ts +13 -0
  130. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.js +58 -0
  131. package/dist/{middleware → packages/bunshot-auth/src/middleware}/csrf.d.ts +5 -4
  132. package/dist/packages/bunshot-auth/src/middleware/csrf.js +138 -0
  133. package/dist/packages/bunshot-auth/src/middleware/identify.d.ts +4 -0
  134. package/dist/packages/bunshot-auth/src/middleware/identify.js +124 -0
  135. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.d.ts +2 -2
  136. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.js +10 -8
  137. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.d.ts +2 -2
  138. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.js +20 -16
  139. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.d.ts +2 -2
  140. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.js +6 -6
  141. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.d.ts +2 -2
  142. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.js +8 -7
  143. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.d.ts +2 -2
  144. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.js +7 -6
  145. package/dist/packages/bunshot-auth/src/middleware/scimAuth.d.ts +8 -0
  146. package/dist/packages/bunshot-auth/src/middleware/scimAuth.js +29 -0
  147. package/dist/packages/bunshot-auth/src/middleware/userAuth.d.ts +3 -0
  148. package/dist/packages/bunshot-auth/src/middleware/userAuth.js +6 -0
  149. package/dist/{models → packages/bunshot-auth/src/models}/AuthUser.d.ts +12 -8
  150. package/dist/packages/bunshot-auth/src/models/AuthUser.js +53 -0
  151. package/dist/packages/bunshot-auth/src/models/Group.d.ts +19 -0
  152. package/dist/packages/bunshot-auth/src/models/Group.js +22 -0
  153. package/dist/{models → packages/bunshot-auth/src/models}/GroupMembership.d.ts +6 -8
  154. package/dist/packages/bunshot-auth/src/models/GroupMembership.js +19 -0
  155. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.d.ts +1 -1
  156. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.js +5 -5
  157. package/dist/packages/bunshot-auth/src/models/TenantRole.d.ts +13 -0
  158. package/dist/packages/bunshot-auth/src/models/TenantRole.js +17 -0
  159. package/dist/packages/bunshot-auth/src/plugin.d.ts +4 -0
  160. package/dist/packages/bunshot-auth/src/plugin.js +277 -0
  161. package/dist/packages/bunshot-auth/src/routes/auth.d.ts +15 -0
  162. package/dist/packages/bunshot-auth/src/routes/auth.js +1624 -0
  163. package/dist/packages/bunshot-auth/src/routes/groups.d.ts +4 -0
  164. package/dist/packages/bunshot-auth/src/routes/groups.js +481 -0
  165. package/dist/packages/bunshot-auth/src/routes/m2m.d.ts +2 -0
  166. package/dist/packages/bunshot-auth/src/routes/m2m.js +145 -0
  167. package/dist/packages/bunshot-auth/src/routes/mfa.d.ts +6 -0
  168. package/dist/packages/bunshot-auth/src/routes/mfa.js +991 -0
  169. package/dist/packages/bunshot-auth/src/routes/oauth.d.ts +3 -0
  170. package/dist/packages/bunshot-auth/src/routes/oauth.js +1727 -0
  171. package/dist/packages/bunshot-auth/src/routes/oidc.d.ts +2 -0
  172. package/dist/packages/bunshot-auth/src/routes/oidc.js +84 -0
  173. package/dist/packages/bunshot-auth/src/routes/organizations.d.ts +3 -0
  174. package/dist/packages/bunshot-auth/src/routes/organizations.js +741 -0
  175. package/dist/packages/bunshot-auth/src/routes/passkey.d.ts +2 -0
  176. package/dist/packages/bunshot-auth/src/routes/passkey.js +199 -0
  177. package/dist/packages/bunshot-auth/src/routes/saml.d.ts +2 -0
  178. package/dist/packages/bunshot-auth/src/routes/saml.js +226 -0
  179. package/dist/packages/bunshot-auth/src/routes/scim.d.ts +3 -0
  180. package/dist/packages/bunshot-auth/src/routes/scim.js +588 -0
  181. package/dist/packages/bunshot-auth/src/runtime.d.ts +52 -0
  182. package/dist/packages/bunshot-auth/src/runtime.js +11 -0
  183. package/dist/{schemas → packages/bunshot-auth/src/schemas}/auth.d.ts +4 -5
  184. package/dist/packages/bunshot-auth/src/schemas/auth.js +24 -0
  185. package/dist/packages/bunshot-auth/src/schemas/error.d.ts +10 -0
  186. package/dist/packages/bunshot-auth/src/schemas/error.js +10 -0
  187. package/dist/packages/bunshot-auth/src/schemas/success.d.ts +10 -0
  188. package/dist/packages/bunshot-auth/src/schemas/success.js +10 -0
  189. package/dist/packages/bunshot-auth/src/services/auth.d.ts +39 -0
  190. package/dist/packages/bunshot-auth/src/services/auth.js +378 -0
  191. package/dist/{services → packages/bunshot-auth/src/services}/mfa.d.ts +41 -17
  192. package/dist/{services → packages/bunshot-auth/src/services}/mfa.js +259 -183
  193. package/dist/packages/bunshot-auth/src/testing.d.ts +31 -0
  194. package/dist/packages/bunshot-auth/src/testing.js +23 -0
  195. package/dist/packages/bunshot-auth/src/types/adapter.d.ts +1 -0
  196. package/dist/packages/bunshot-auth/src/types/adapter.js +1 -0
  197. package/dist/packages/bunshot-auth/src/types/config.d.ts +152 -0
  198. package/dist/packages/bunshot-auth/src/types/config.js +179 -0
  199. package/dist/{routes → packages/bunshot-auth/src/types}/groups.d.ts +2 -3
  200. package/dist/packages/bunshot-auth/src/types/groups.js +1 -0
  201. package/dist/packages/bunshot-auth/src/types/oauthCode.d.ts +6 -0
  202. package/dist/packages/bunshot-auth/src/types/oauthCode.js +1 -0
  203. package/dist/packages/bunshot-auth/src/types/oauthReauth.d.ts +13 -0
  204. package/dist/packages/bunshot-auth/src/types/oauthReauth.js +1 -0
  205. package/dist/packages/bunshot-auth/src/types/redis.d.ts +1 -0
  206. package/dist/packages/bunshot-auth/src/types/redis.js +1 -0
  207. package/dist/packages/bunshot-auth/src/types/saml.d.ts +10 -0
  208. package/dist/packages/bunshot-auth/src/types/saml.js +1 -0
  209. package/dist/packages/bunshot-auth/src/types/session.d.ts +18 -0
  210. package/dist/packages/bunshot-auth/src/types/session.js +1 -0
  211. package/dist/packages/bunshot-auth/src/types/store.d.ts +1 -0
  212. package/dist/packages/bunshot-auth/src/types/store.js +1 -0
  213. package/dist/packages/bunshot-core/src/adminProvider.d.ts +95 -0
  214. package/dist/packages/bunshot-core/src/adminProvider.js +1 -0
  215. package/dist/packages/bunshot-core/src/auditLog.d.ts +34 -0
  216. package/dist/packages/bunshot-core/src/auditLog.js +1 -0
  217. package/dist/packages/bunshot-core/src/auth-adapter.d.ts +227 -0
  218. package/dist/packages/bunshot-core/src/auth-adapter.js +4 -0
  219. package/dist/packages/bunshot-core/src/authVariables.d.ts +14 -0
  220. package/dist/packages/bunshot-core/src/authVariables.js +4 -0
  221. package/dist/packages/bunshot-core/src/cache.d.ts +12 -0
  222. package/dist/packages/bunshot-core/src/cache.js +21 -0
  223. package/dist/{lib → packages/bunshot-core/src}/captcha.d.ts +1 -10
  224. package/dist/packages/bunshot-core/src/captcha.js +1 -0
  225. package/dist/packages/bunshot-core/src/clearRegistry.d.ts +6 -0
  226. package/dist/packages/bunshot-core/src/clearRegistry.js +17 -0
  227. package/dist/packages/bunshot-core/src/clientIp.d.ts +3 -0
  228. package/dist/packages/bunshot-core/src/clientIp.js +45 -0
  229. package/dist/packages/bunshot-core/src/configLock.d.ts +4 -0
  230. package/dist/packages/bunshot-core/src/configLock.js +7 -0
  231. package/dist/packages/bunshot-core/src/configValidation.d.ts +22 -0
  232. package/dist/packages/bunshot-core/src/configValidation.js +39 -0
  233. package/dist/packages/bunshot-core/src/constants.js +10 -0
  234. package/dist/packages/bunshot-core/src/context/bunshotContext.d.ts +232 -0
  235. package/dist/packages/bunshot-core/src/context/bunshotContext.js +1 -0
  236. package/dist/packages/bunshot-core/src/context/contextAccess.d.ts +3 -0
  237. package/dist/packages/bunshot-core/src/context/contextAccess.js +16 -0
  238. package/dist/packages/bunshot-core/src/context/contextStore.d.ts +16 -0
  239. package/dist/packages/bunshot-core/src/context/contextStore.js +31 -0
  240. package/dist/packages/bunshot-core/src/context/frameworkConfig.d.ts +38 -0
  241. package/dist/packages/bunshot-core/src/context/frameworkConfig.js +1 -0
  242. package/dist/packages/bunshot-core/src/context/index.d.ts +4 -0
  243. package/dist/packages/bunshot-core/src/context/index.js +2 -0
  244. package/dist/packages/bunshot-core/src/context.d.ts +40 -0
  245. package/dist/packages/bunshot-core/src/context.js +35 -0
  246. package/dist/packages/bunshot-core/src/coreContracts.d.ts +47 -0
  247. package/dist/packages/bunshot-core/src/coreContracts.js +1 -0
  248. package/dist/packages/bunshot-core/src/coreRegistrar.d.ts +6 -0
  249. package/dist/packages/bunshot-core/src/coreRegistrar.js +42 -0
  250. package/dist/{lib → packages/bunshot-core/src}/createRoute.d.ts +4 -30
  251. package/dist/{lib → packages/bunshot-core/src}/createRoute.js +39 -88
  252. package/dist/packages/bunshot-core/src/cronRegistry.d.ts +11 -0
  253. package/dist/packages/bunshot-core/src/cronRegistry.js +1 -0
  254. package/dist/packages/bunshot-core/src/crypto.d.ts +43 -0
  255. package/dist/packages/bunshot-core/src/crypto.js +74 -0
  256. package/dist/packages/bunshot-core/src/csrf.d.ts +8 -0
  257. package/dist/packages/bunshot-core/src/csrf.js +1 -0
  258. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.d.ts +7 -0
  259. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.js +19 -0
  260. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.d.ts +6 -0
  261. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.js +40 -0
  262. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.d.ts +6 -0
  263. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.js +24 -0
  264. package/dist/packages/bunshot-core/src/emailTemplates.d.ts +5 -0
  265. package/dist/packages/bunshot-core/src/emailTemplates.js +10 -0
  266. package/dist/{lib/HttpError.d.ts → packages/bunshot-core/src/errors.d.ts} +4 -1
  267. package/dist/{lib/HttpError.js → packages/bunshot-core/src/errors.js} +7 -1
  268. package/dist/packages/bunshot-core/src/eventBus.d.ts +270 -0
  269. package/dist/packages/bunshot-core/src/eventBus.js +143 -0
  270. package/dist/packages/bunshot-core/src/idempotency.d.ts +18 -0
  271. package/dist/packages/bunshot-core/src/idempotency.js +1 -0
  272. package/dist/packages/bunshot-core/src/index.d.ts +60 -0
  273. package/dist/packages/bunshot-core/src/index.js +34 -0
  274. package/dist/packages/bunshot-core/src/mail.d.ts +14 -0
  275. package/dist/packages/bunshot-core/src/mail.js +8 -0
  276. package/dist/packages/bunshot-core/src/memoryEviction.d.ts +24 -0
  277. package/dist/packages/bunshot-core/src/memoryEviction.js +52 -0
  278. package/dist/packages/bunshot-core/src/pagination.d.ts +45 -0
  279. package/dist/packages/bunshot-core/src/pagination.js +61 -0
  280. package/dist/packages/bunshot-core/src/permissions.d.ts +64 -0
  281. package/dist/packages/bunshot-core/src/permissions.js +27 -0
  282. package/dist/packages/bunshot-core/src/plugin.d.ts +44 -0
  283. package/dist/packages/bunshot-core/src/plugin.js +1 -0
  284. package/dist/packages/bunshot-core/src/rateLimit.d.ts +5 -0
  285. package/dist/packages/bunshot-core/src/rateLimit.js +18 -0
  286. package/dist/packages/bunshot-core/src/redis.d.ts +21 -0
  287. package/dist/packages/bunshot-core/src/redis.js +1 -0
  288. package/dist/packages/bunshot-core/src/routeAuth.d.ts +5 -0
  289. package/dist/packages/bunshot-core/src/routeAuth.js +11 -0
  290. package/dist/packages/bunshot-core/src/routeOverrides.d.ts +24 -0
  291. package/dist/packages/bunshot-core/src/routeOverrides.js +25 -0
  292. package/dist/packages/bunshot-core/src/routerAdapter.d.ts +6 -0
  293. package/dist/packages/bunshot-core/src/routerAdapter.js +56 -0
  294. package/dist/packages/bunshot-core/src/secrets.d.ts +48 -0
  295. package/dist/packages/bunshot-core/src/secrets.js +8 -0
  296. package/dist/packages/bunshot-core/src/signing.d.ts +41 -0
  297. package/dist/packages/bunshot-core/src/signing.js +1 -0
  298. package/dist/packages/bunshot-core/src/sse.d.ts +36 -0
  299. package/dist/packages/bunshot-core/src/sse.js +1 -0
  300. package/dist/packages/bunshot-core/src/storageAdapter.js +1 -0
  301. package/dist/packages/bunshot-core/src/storeInfra.d.ts +44 -0
  302. package/dist/packages/bunshot-core/src/storeInfra.js +18 -0
  303. package/dist/packages/bunshot-core/src/storeType.d.ts +7 -0
  304. package/dist/packages/bunshot-core/src/storeType.js +1 -0
  305. package/dist/packages/bunshot-core/src/testing.d.ts +1 -0
  306. package/dist/packages/bunshot-core/src/testing.js +1 -0
  307. package/dist/packages/bunshot-core/src/uploadRegistry.d.ts +23 -0
  308. package/dist/packages/bunshot-core/src/uploadRegistry.js +4 -0
  309. package/dist/packages/bunshot-core/src/userResolver.d.ts +5 -0
  310. package/dist/packages/bunshot-core/src/userResolver.js +14 -0
  311. package/dist/packages/bunshot-core/src/wsMessages.d.ts +42 -0
  312. package/dist/packages/bunshot-core/src/wsMessages.js +4 -0
  313. package/dist/packages/bunshot-permissions/src/adapters/memory.d.ts +7 -0
  314. package/dist/packages/bunshot-permissions/src/adapters/memory.js +73 -0
  315. package/dist/packages/bunshot-permissions/src/index.d.ts +10 -0
  316. package/dist/packages/bunshot-permissions/src/index.js +5 -0
  317. package/dist/packages/bunshot-permissions/src/lib/bootstrap.d.ts +7 -0
  318. package/dist/packages/bunshot-permissions/src/lib/bootstrap.js +12 -0
  319. package/dist/packages/bunshot-permissions/src/lib/evaluator.d.ts +10 -0
  320. package/dist/packages/bunshot-permissions/src/lib/evaluator.js +165 -0
  321. package/dist/packages/bunshot-permissions/src/lib/registry.d.ts +2 -0
  322. package/dist/packages/bunshot-permissions/src/lib/registry.js +31 -0
  323. package/dist/packages/bunshot-permissions/src/lib/validation.d.ts +1 -0
  324. package/dist/packages/bunshot-permissions/src/lib/validation.js +1 -0
  325. package/dist/packages/bunshot-permissions/src/types/adapter.d.ts +1 -0
  326. package/dist/packages/bunshot-permissions/src/types/adapter.js +1 -0
  327. package/dist/packages/bunshot-permissions/src/types/evaluator.d.ts +1 -0
  328. package/dist/packages/bunshot-permissions/src/types/evaluator.js +1 -0
  329. package/dist/packages/bunshot-permissions/src/types/models.d.ts +1 -0
  330. package/dist/packages/bunshot-permissions/src/types/models.js +1 -0
  331. package/dist/packages/bunshot-permissions/src/types/registry.d.ts +1 -0
  332. package/dist/packages/bunshot-permissions/src/types/registry.js +1 -0
  333. package/dist/packages/bunshot-postgres/src/adapter.d.ts +6 -0
  334. package/dist/packages/bunshot-postgres/src/adapter.js +794 -0
  335. package/dist/packages/bunshot-postgres/src/connection.d.ts +15 -0
  336. package/dist/packages/bunshot-postgres/src/connection.js +16 -0
  337. package/dist/packages/bunshot-postgres/src/index.d.ts +4 -0
  338. package/dist/packages/bunshot-postgres/src/index.js +2 -0
  339. package/dist/packages/bunshot-postgres/src/schema.d.ts +997 -0
  340. package/dist/packages/bunshot-postgres/src/schema.js +105 -0
  341. package/dist/src/app.d.ts +230 -0
  342. package/dist/src/app.js +182 -0
  343. package/dist/src/cli/commands/init.d.ts +10 -0
  344. package/dist/src/cli/commands/init.js +709 -0
  345. package/dist/src/cli/index.d.ts +1 -0
  346. package/dist/src/cli/index.js +3 -0
  347. package/dist/src/entrypoints/mongo.d.ts +6 -0
  348. package/dist/src/entrypoints/mongo.js +4 -0
  349. package/dist/src/entrypoints/queue.d.ts +2 -0
  350. package/dist/src/entrypoints/queue.js +1 -0
  351. package/dist/src/entrypoints/redis.d.ts +1 -0
  352. package/dist/src/entrypoints/redis.js +1 -0
  353. package/dist/{adapters → src/framework/adapters}/localStorage.d.ts +1 -1
  354. package/dist/{adapters → src/framework/adapters}/localStorage.js +10 -10
  355. package/dist/src/framework/adapters/memoryStorage.d.ts +2 -0
  356. package/dist/src/framework/adapters/memoryStorage.js +45 -0
  357. package/dist/{adapters → src/framework/adapters}/s3Storage.d.ts +1 -1
  358. package/dist/{adapters → src/framework/adapters}/s3Storage.js +12 -12
  359. package/dist/src/framework/admin/bunshotAccess.d.ts +2 -0
  360. package/dist/src/framework/admin/bunshotAccess.js +23 -0
  361. package/dist/src/framework/admin/bunshotUsers.d.ts +2 -0
  362. package/dist/src/framework/admin/bunshotUsers.js +103 -0
  363. package/dist/src/framework/admin/index.d.ts +7 -0
  364. package/dist/src/framework/admin/index.js +21 -0
  365. package/dist/src/framework/boundaryAdapters/cacheFactories.d.ts +13 -0
  366. package/dist/src/framework/boundaryAdapters/cacheFactories.js +86 -0
  367. package/dist/src/framework/boundaryAdapters/index.d.ts +2 -0
  368. package/dist/src/framework/boundaryAdapters/index.js +1 -0
  369. package/dist/src/framework/boundaryAdapters.d.ts +17 -0
  370. package/dist/src/framework/boundaryAdapters.js +62 -0
  371. package/dist/src/framework/buildContext.d.ts +33 -0
  372. package/dist/src/framework/buildContext.js +119 -0
  373. package/dist/src/framework/config/schema.d.ts +447 -0
  374. package/dist/src/framework/config/schema.js +528 -0
  375. package/dist/src/framework/createInfrastructure.d.ts +76 -0
  376. package/dist/src/framework/createInfrastructure.js +221 -0
  377. package/dist/src/framework/lib/auditLog.d.ts +23 -0
  378. package/dist/src/framework/lib/auditLog.js +416 -0
  379. package/dist/src/framework/lib/captcha.d.ts +11 -0
  380. package/dist/{lib → src/framework/lib}/captcha.js +13 -10
  381. package/dist/{lib → src/framework/lib}/createDtoMapper.js +4 -4
  382. package/dist/src/framework/lib/createRoute.d.ts +1 -0
  383. package/dist/src/framework/lib/createRoute.js +2 -0
  384. package/dist/{lib → src/framework/lib}/idempotency.d.ts +2 -6
  385. package/dist/src/framework/lib/idempotency.js +74 -0
  386. package/dist/src/framework/lib/logger.d.ts +3 -0
  387. package/dist/src/framework/lib/logger.js +14 -0
  388. package/dist/src/framework/lib/metrics.d.ts +34 -0
  389. package/dist/{lib → src/framework/lib}/metrics.js +49 -57
  390. package/dist/src/framework/lib/pagination.d.ts +42 -0
  391. package/dist/src/framework/lib/pagination.js +51 -0
  392. package/dist/src/framework/lib/redisTransport.d.ts +38 -0
  393. package/dist/src/framework/lib/redisTransport.js +107 -0
  394. package/dist/src/framework/lib/resolveUserId.d.ts +2 -0
  395. package/dist/src/framework/lib/resolveUserId.js +5 -0
  396. package/dist/src/framework/lib/sseCollision.d.ts +6 -0
  397. package/dist/src/framework/lib/sseCollision.js +26 -0
  398. package/dist/src/framework/lib/storageAdapter.d.ts +1 -0
  399. package/dist/src/framework/lib/storageAdapter.js +1 -0
  400. package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.js +4 -4
  401. package/dist/src/framework/lib/tenant.d.ts +21 -0
  402. package/dist/src/framework/lib/tenant.js +70 -0
  403. package/dist/{lib → src/framework/lib}/upload.d.ts +11 -10
  404. package/dist/src/framework/lib/upload.js +132 -0
  405. package/dist/src/framework/lib/uploadRegistry.d.ts +23 -0
  406. package/dist/src/framework/lib/uploadRegistry.js +34 -0
  407. package/dist/{lib → src/framework/lib}/validate.d.ts +1 -1
  408. package/dist/{lib → src/framework/lib}/validate.js +2 -2
  409. package/dist/src/framework/lib/ws.d.ts +19 -0
  410. package/dist/src/framework/lib/ws.js +130 -0
  411. package/dist/src/framework/lib/wsHeartbeat.d.ts +12 -0
  412. package/dist/src/framework/lib/wsHeartbeat.js +53 -0
  413. package/dist/src/framework/lib/wsMessages.d.ts +25 -0
  414. package/dist/src/framework/lib/wsMessages.js +45 -0
  415. package/dist/src/framework/lib/wsNamespace.d.ts +17 -0
  416. package/dist/src/framework/lib/wsNamespace.js +19 -0
  417. package/dist/src/framework/lib/wsPresence.d.ts +17 -0
  418. package/dist/src/framework/lib/wsPresence.js +84 -0
  419. package/dist/src/framework/lib/wsTransport.d.ts +38 -0
  420. package/dist/src/framework/lib/wsTransport.js +9 -0
  421. package/dist/{lib → src/framework/lib}/zodToMongoose.d.ts +1 -1
  422. package/dist/{lib → src/framework/lib}/zodToMongoose.js +11 -11
  423. package/dist/{middleware → src/framework/middleware}/auditLog.d.ts +4 -3
  424. package/dist/src/framework/middleware/auditLog.js +42 -0
  425. package/dist/{middleware → src/framework/middleware}/botProtection.d.ts +2 -2
  426. package/dist/{middleware → src/framework/middleware}/botProtection.js +8 -9
  427. package/dist/src/framework/middleware/cacheResponse.d.ts +35 -0
  428. package/dist/src/framework/middleware/cacheResponse.js +126 -0
  429. package/dist/{middleware → src/framework/middleware}/captcha.d.ts +2 -3
  430. package/dist/src/framework/middleware/captcha.js +37 -0
  431. package/dist/{middleware → src/framework/middleware}/errorHandler.d.ts +1 -1
  432. package/dist/{middleware → src/framework/middleware}/errorHandler.js +2 -2
  433. package/dist/src/framework/middleware/index.js +1 -0
  434. package/dist/{middleware → src/framework/middleware}/logger.d.ts +1 -1
  435. package/dist/src/framework/middleware/metrics.d.ts +12 -0
  436. package/dist/src/framework/middleware/metrics.js +26 -0
  437. package/dist/{middleware → src/framework/middleware}/rateLimit.d.ts +2 -2
  438. package/dist/src/framework/middleware/rateLimit.js +22 -0
  439. package/dist/src/framework/middleware/requestId.d.ts +3 -0
  440. package/dist/{middleware → src/framework/middleware}/requestId.js +2 -2
  441. package/dist/{middleware → src/framework/middleware}/requestLogger.d.ts +3 -3
  442. package/dist/{middleware → src/framework/middleware}/requestLogger.js +17 -12
  443. package/dist/{middleware → src/framework/middleware}/requestSigning.d.ts +2 -2
  444. package/dist/{middleware → src/framework/middleware}/requestSigning.js +18 -20
  445. package/dist/src/framework/middleware/tenant.d.ts +14 -0
  446. package/dist/{middleware → src/framework/middleware}/tenant.js +31 -27
  447. package/dist/src/framework/middleware/upload.d.ts +5 -0
  448. package/dist/{middleware → src/framework/middleware}/upload.js +4 -4
  449. package/dist/{middleware → src/framework/middleware}/webhookAuth.d.ts +3 -3
  450. package/dist/{middleware → src/framework/middleware}/webhookAuth.js +11 -12
  451. package/dist/src/framework/models/AuditLog.d.ts +21 -0
  452. package/dist/src/framework/models/AuditLog.js +31 -0
  453. package/dist/src/framework/mountMiddleware.d.ts +91 -0
  454. package/dist/src/framework/mountMiddleware.js +128 -0
  455. package/dist/src/framework/mountOptionalEndpoints.d.ts +103 -0
  456. package/dist/src/framework/mountOptionalEndpoints.js +64 -0
  457. package/dist/src/framework/mountRoutes.d.ts +21 -0
  458. package/dist/src/framework/mountRoutes.js +144 -0
  459. package/dist/src/framework/persistence/cronRegistry.d.ts +28 -0
  460. package/dist/src/framework/persistence/cronRegistry.js +139 -0
  461. package/dist/src/framework/persistence/idempotency.d.ts +26 -0
  462. package/dist/src/framework/persistence/idempotency.js +178 -0
  463. package/dist/src/framework/persistence/index.d.ts +6 -0
  464. package/dist/src/framework/persistence/index.js +8 -0
  465. package/dist/src/framework/persistence/storeInfra.d.ts +9 -0
  466. package/dist/src/framework/persistence/storeInfra.js +1 -0
  467. package/dist/src/framework/persistence/uploadRegistry.d.ts +35 -0
  468. package/dist/src/framework/persistence/uploadRegistry.js +235 -0
  469. package/dist/src/framework/persistence/wsMessages.d.ts +22 -0
  470. package/dist/src/framework/persistence/wsMessages.js +296 -0
  471. package/dist/src/framework/preloadSchemas.d.ts +24 -0
  472. package/dist/src/framework/preloadSchemas.js +42 -0
  473. package/dist/src/framework/registerBoundaryAdapters.d.ts +23 -0
  474. package/dist/src/framework/registerBoundaryAdapters.js +46 -0
  475. package/dist/src/framework/routes/admin.d.ts +9 -0
  476. package/dist/src/framework/routes/admin.js +361 -0
  477. package/dist/src/framework/routes/health.d.ts +1 -0
  478. package/dist/src/framework/routes/health.js +21 -0
  479. package/dist/src/framework/routes/home.d.ts +1 -0
  480. package/dist/src/framework/routes/home.js +18 -0
  481. package/dist/src/framework/routes/jobs.d.ts +3 -0
  482. package/dist/{routes → src/framework/routes}/jobs.js +128 -103
  483. package/dist/src/framework/routes/metrics.d.ts +10 -0
  484. package/dist/src/framework/routes/metrics.js +57 -0
  485. package/dist/{routes → src/framework/routes}/uploads.d.ts +3 -3
  486. package/dist/src/framework/routes/uploads.js +262 -0
  487. package/dist/src/framework/runPluginLifecycle.d.ts +27 -0
  488. package/dist/src/framework/runPluginLifecycle.js +121 -0
  489. package/dist/src/framework/secrets/frameworkSecretSchema.d.ts +58 -0
  490. package/dist/src/framework/secrets/frameworkSecretSchema.js +20 -0
  491. package/dist/src/framework/secrets/index.d.ts +9 -0
  492. package/dist/src/framework/secrets/index.js +7 -0
  493. package/dist/src/framework/secrets/providers/envProvider.d.ts +15 -0
  494. package/dist/src/framework/secrets/providers/envProvider.js +18 -0
  495. package/dist/src/framework/secrets/providers/fileProvider.d.ts +8 -0
  496. package/dist/src/framework/secrets/providers/fileProvider.js +82 -0
  497. package/dist/src/framework/secrets/providers/ssmProvider.d.ts +20 -0
  498. package/dist/src/framework/secrets/providers/ssmProvider.js +127 -0
  499. package/dist/src/framework/secrets/resolveSecretBundle.d.ts +53 -0
  500. package/dist/src/framework/secrets/resolveSecretBundle.js +84 -0
  501. package/dist/src/framework/secrets/resolveSecrets.d.ts +18 -0
  502. package/dist/src/framework/secrets/resolveSecrets.js +34 -0
  503. package/dist/src/framework/sse/index.d.ts +21 -0
  504. package/dist/src/framework/sse/index.js +109 -0
  505. package/dist/src/framework/ws/index.d.ts +11 -0
  506. package/dist/src/framework/ws/index.js +8 -0
  507. package/dist/src/index.d.ts +87 -0
  508. package/dist/src/index.js +58 -0
  509. package/dist/src/lib/appConfig.d.ts +7 -0
  510. package/dist/src/lib/appConfig.js +27 -0
  511. package/dist/src/lib/appMeta.d.ts +7 -0
  512. package/dist/src/lib/appMeta.js +3 -0
  513. package/dist/src/lib/authConfig.d.ts +532 -0
  514. package/dist/{lib/appConfig.js → src/lib/authConfig.js} +75 -17
  515. package/dist/{lib → src/lib}/context.d.ts +6 -12
  516. package/dist/{lib → src/lib}/context.js +5 -5
  517. package/dist/src/lib/logger.d.ts +1 -0
  518. package/dist/src/lib/logger.js +1 -0
  519. package/dist/src/lib/mongo.d.ts +58 -0
  520. package/dist/src/lib/mongo.js +96 -0
  521. package/dist/src/lib/queue.d.ts +72 -0
  522. package/dist/src/lib/queue.js +152 -0
  523. package/dist/src/lib/redis.d.ts +28 -0
  524. package/dist/src/lib/redis.js +72 -0
  525. package/dist/{lib → src/lib}/signing.d.ts +2 -2
  526. package/dist/src/lib/signing.js +210 -0
  527. package/dist/src/lib/signingConfig.d.ts +40 -0
  528. package/dist/src/lib/signingConfig.js +28 -0
  529. package/dist/src/server.d.ts +146 -0
  530. package/dist/src/server.js +469 -0
  531. package/dist/src/shared/lib/HttpError.d.ts +1 -0
  532. package/dist/src/shared/lib/HttpError.js +2 -0
  533. package/dist/src/shared/lib/constants.d.ts +10 -0
  534. package/dist/src/shared/lib/crypto.d.ts +43 -0
  535. package/dist/src/shared/lib/crypto.js +74 -0
  536. package/dist/src/shared/lib/signing.d.ts +52 -0
  537. package/dist/{lib → src/shared/lib}/signing.js +35 -8
  538. package/dist/src/testing.d.ts +34 -0
  539. package/dist/src/testing.js +93 -0
  540. package/package.json +100 -26
  541. package/dist/adapters/memoryAuth.d.ts +0 -52
  542. package/dist/adapters/memoryAuth.js +0 -749
  543. package/dist/adapters/memoryStorage.d.ts +0 -3
  544. package/dist/adapters/memoryStorage.js +0 -44
  545. package/dist/adapters/mongoAuth.d.ts +0 -2
  546. package/dist/adapters/mongoAuth.js +0 -403
  547. package/dist/adapters/sqliteAuth.d.ts +0 -72
  548. package/dist/adapters/sqliteAuth.js +0 -858
  549. package/dist/app.d.ts +0 -559
  550. package/dist/app.js +0 -651
  551. package/dist/entrypoints/mongo.d.ts +0 -5
  552. package/dist/entrypoints/mongo.js +0 -4
  553. package/dist/entrypoints/queue.d.ts +0 -2
  554. package/dist/entrypoints/queue.js +0 -1
  555. package/dist/entrypoints/redis.d.ts +0 -1
  556. package/dist/entrypoints/redis.js +0 -1
  557. package/dist/index.d.ts +0 -117
  558. package/dist/index.js +0 -88
  559. package/dist/lib/appConfig.d.ts +0 -275
  560. package/dist/lib/auditLog.d.ts +0 -58
  561. package/dist/lib/auditLog.js +0 -218
  562. package/dist/lib/authAdapter.d.ts +0 -246
  563. package/dist/lib/authAdapter.js +0 -7
  564. package/dist/lib/authRateLimit.d.ts +0 -13
  565. package/dist/lib/authRateLimit.js +0 -117
  566. package/dist/lib/clientIp.d.ts +0 -14
  567. package/dist/lib/credentialStuffing.d.ts +0 -31
  568. package/dist/lib/credentialStuffing.js +0 -77
  569. package/dist/lib/crypto.d.ts +0 -11
  570. package/dist/lib/crypto.js +0 -22
  571. package/dist/lib/deletionCancelToken.d.ts +0 -12
  572. package/dist/lib/deletionCancelToken.js +0 -88
  573. package/dist/lib/emailVerification.d.ts +0 -19
  574. package/dist/lib/emailVerification.js +0 -129
  575. package/dist/lib/fingerprint.js +0 -36
  576. package/dist/lib/idempotency.js +0 -182
  577. package/dist/lib/jwks.d.ts +0 -25
  578. package/dist/lib/jwks.js +0 -51
  579. package/dist/lib/jwt.d.ts +0 -15
  580. package/dist/lib/jwt.js +0 -111
  581. package/dist/lib/metrics.d.ts +0 -14
  582. package/dist/lib/mfaChallenge.d.ts +0 -55
  583. package/dist/lib/mfaChallenge.js +0 -398
  584. package/dist/lib/mongo.d.ts +0 -39
  585. package/dist/lib/mongo.js +0 -124
  586. package/dist/lib/oauth.d.ts +0 -40
  587. package/dist/lib/oauth.js +0 -101
  588. package/dist/lib/oauthCode.d.ts +0 -15
  589. package/dist/lib/oauthCode.js +0 -95
  590. package/dist/lib/pagination.d.ts +0 -119
  591. package/dist/lib/pagination.js +0 -166
  592. package/dist/lib/queue.d.ts +0 -37
  593. package/dist/lib/queue.js +0 -117
  594. package/dist/lib/redis.d.ts +0 -9
  595. package/dist/lib/redis.js +0 -61
  596. package/dist/lib/resetPassword.d.ts +0 -12
  597. package/dist/lib/resetPassword.js +0 -93
  598. package/dist/lib/roles.d.ts +0 -7
  599. package/dist/lib/roles.js +0 -49
  600. package/dist/lib/saml.d.ts +0 -25
  601. package/dist/lib/saml.js +0 -64
  602. package/dist/lib/securityEvents.d.ts +0 -28
  603. package/dist/lib/securityEvents.js +0 -26
  604. package/dist/lib/session.d.ts +0 -49
  605. package/dist/lib/session.js +0 -597
  606. package/dist/lib/tenant.d.ts +0 -15
  607. package/dist/lib/tenant.js +0 -65
  608. package/dist/lib/upload.js +0 -112
  609. package/dist/lib/uploadRegistry.d.ts +0 -18
  610. package/dist/lib/uploadRegistry.js +0 -83
  611. package/dist/lib/ws.d.ts +0 -22
  612. package/dist/lib/ws.js +0 -96
  613. package/dist/lib/wsHeartbeat.d.ts +0 -12
  614. package/dist/lib/wsHeartbeat.js +0 -57
  615. package/dist/lib/wsMessages.d.ts +0 -40
  616. package/dist/lib/wsMessages.js +0 -330
  617. package/dist/lib/wsPresence.d.ts +0 -25
  618. package/dist/lib/wsPresence.js +0 -99
  619. package/dist/middleware/auditLog.js +0 -39
  620. package/dist/middleware/bearerAuth.d.ts +0 -2
  621. package/dist/middleware/bearerAuth.js +0 -11
  622. package/dist/middleware/cacheResponse.d.ts +0 -15
  623. package/dist/middleware/cacheResponse.js +0 -178
  624. package/dist/middleware/captcha.js +0 -36
  625. package/dist/middleware/csrf.js +0 -129
  626. package/dist/middleware/identify.d.ts +0 -3
  627. package/dist/middleware/identify.js +0 -122
  628. package/dist/middleware/index.js +0 -1
  629. package/dist/middleware/metrics.d.ts +0 -9
  630. package/dist/middleware/metrics.js +0 -26
  631. package/dist/middleware/rateLimit.js +0 -22
  632. package/dist/middleware/requestId.d.ts +0 -3
  633. package/dist/middleware/scimAuth.d.ts +0 -8
  634. package/dist/middleware/scimAuth.js +0 -29
  635. package/dist/middleware/tenant.d.ts +0 -5
  636. package/dist/middleware/upload.d.ts +0 -5
  637. package/dist/middleware/userAuth.d.ts +0 -3
  638. package/dist/middleware/userAuth.js +0 -6
  639. package/dist/models/AuditLog.d.ts +0 -30
  640. package/dist/models/AuditLog.js +0 -39
  641. package/dist/models/AuthUser.js +0 -55
  642. package/dist/models/Group.d.ts +0 -21
  643. package/dist/models/Group.js +0 -28
  644. package/dist/models/GroupMembership.js +0 -25
  645. package/dist/models/TenantRole.d.ts +0 -15
  646. package/dist/models/TenantRole.js +0 -23
  647. package/dist/routes/auth.d.ts +0 -12
  648. package/dist/routes/auth.js +0 -744
  649. package/dist/routes/groups.js +0 -346
  650. package/dist/routes/health.d.ts +0 -1
  651. package/dist/routes/health.js +0 -22
  652. package/dist/routes/home.d.ts +0 -1
  653. package/dist/routes/home.js +0 -16
  654. package/dist/routes/jobs.d.ts +0 -2
  655. package/dist/routes/m2m.d.ts +0 -2
  656. package/dist/routes/m2m.js +0 -72
  657. package/dist/routes/metrics.d.ts +0 -8
  658. package/dist/routes/metrics.js +0 -55
  659. package/dist/routes/mfa.d.ts +0 -5
  660. package/dist/routes/mfa.js +0 -628
  661. package/dist/routes/oauth.d.ts +0 -2
  662. package/dist/routes/oauth.js +0 -520
  663. package/dist/routes/oidc.d.ts +0 -2
  664. package/dist/routes/oidc.js +0 -29
  665. package/dist/routes/passkey.d.ts +0 -1
  666. package/dist/routes/passkey.js +0 -157
  667. package/dist/routes/saml.d.ts +0 -2
  668. package/dist/routes/saml.js +0 -86
  669. package/dist/routes/scim.d.ts +0 -2
  670. package/dist/routes/scim.js +0 -255
  671. package/dist/routes/uploads.js +0 -227
  672. package/dist/schemas/auth.js +0 -30
  673. package/dist/server.d.ts +0 -57
  674. package/dist/server.js +0 -112
  675. package/dist/services/auth.d.ts +0 -29
  676. package/dist/services/auth.js +0 -238
  677. package/dist/ws/index.d.ts +0 -10
  678. package/dist/ws/index.js +0 -39
  679. package/docs/sections/adding-middleware/full.md +0 -35
  680. package/docs/sections/adding-models/full.md +0 -125
  681. package/docs/sections/adding-models/overview.md +0 -13
  682. package/docs/sections/adding-routes/full.md +0 -182
  683. package/docs/sections/adding-routes/overview.md +0 -23
  684. package/docs/sections/auth-flow/full.md +0 -790
  685. package/docs/sections/auth-flow/overview.md +0 -10
  686. package/docs/sections/auth-security-examples/full.md +0 -388
  687. package/docs/sections/authentication/full.md +0 -130
  688. package/docs/sections/authentication/overview.md +0 -5
  689. package/docs/sections/cli/full.md +0 -42
  690. package/docs/sections/configuration/full.md +0 -172
  691. package/docs/sections/configuration/overview.md +0 -18
  692. package/docs/sections/configuration-example/full.md +0 -117
  693. package/docs/sections/configuration-example/overview.md +0 -30
  694. package/docs/sections/documentation/full.md +0 -171
  695. package/docs/sections/environment-variables/full.md +0 -55
  696. package/docs/sections/exports/full.md +0 -123
  697. package/docs/sections/extending-context/full.md +0 -59
  698. package/docs/sections/header.md +0 -3
  699. package/docs/sections/installation/full.md +0 -6
  700. package/docs/sections/jobs/full.md +0 -140
  701. package/docs/sections/jobs/overview.md +0 -15
  702. package/docs/sections/logging/full.md +0 -83
  703. package/docs/sections/metrics/full.md +0 -131
  704. package/docs/sections/mongodb-connections/full.md +0 -45
  705. package/docs/sections/mongodb-connections/overview.md +0 -7
  706. package/docs/sections/multi-tenancy/full.md +0 -66
  707. package/docs/sections/multi-tenancy/overview.md +0 -15
  708. package/docs/sections/oauth/full.md +0 -189
  709. package/docs/sections/oauth/overview.md +0 -16
  710. package/docs/sections/package-development/full.md +0 -7
  711. package/docs/sections/pagination/full.md +0 -93
  712. package/docs/sections/passkey-login/full.md +0 -90
  713. package/docs/sections/passkey-login/overview.md +0 -1
  714. package/docs/sections/peer-dependencies/full.md +0 -47
  715. package/docs/sections/quick-start/full.md +0 -43
  716. package/docs/sections/response-caching/full.md +0 -117
  717. package/docs/sections/response-caching/overview.md +0 -13
  718. package/docs/sections/roles/full.md +0 -225
  719. package/docs/sections/roles/overview.md +0 -14
  720. package/docs/sections/running-without-redis/full.md +0 -16
  721. package/docs/sections/running-without-redis-or-mongodb/full.md +0 -60
  722. package/docs/sections/signing/full.md +0 -203
  723. package/docs/sections/stack/full.md +0 -10
  724. package/docs/sections/uploads/full.md +0 -208
  725. package/docs/sections/versioning/full.md +0 -85
  726. package/docs/sections/webhook-auth/full.md +0 -100
  727. package/docs/sections/websocket/full.md +0 -196
  728. package/docs/sections/websocket/overview.md +0 -5
  729. package/docs/sections/websocket-rooms/full.md +0 -102
  730. package/docs/sections/websocket-rooms/overview.md +0 -5
  731. /package/dist/{lib/storageAdapter.js → packages/bunshot-admin/src/types/env.js} +0 -0
  732. /package/dist/{lib → packages/bunshot-auth/src/lib}/fingerprint.d.ts +0 -0
  733. /package/dist/{lib → packages/bunshot-auth/src/lib}/logger.d.ts +0 -0
  734. /package/dist/{lib → packages/bunshot-core/src}/constants.d.ts +0 -0
  735. /package/dist/{lib → packages/bunshot-core/src}/storageAdapter.d.ts +0 -0
  736. /package/dist/{lib → src/framework/lib}/createDtoMapper.d.ts +0 -0
  737. /package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.d.ts +0 -0
  738. /package/dist/{middleware → src/framework/middleware}/cors.d.ts +0 -0
  739. /package/dist/{middleware → src/framework/middleware}/cors.js +0 -0
  740. /package/dist/{middleware → src/framework/middleware}/index.d.ts +0 -0
  741. /package/dist/{middleware → src/framework/middleware}/logger.js +0 -0
  742. /package/dist/{lib → src/shared/lib}/constants.js +0 -0
@@ -0,0 +1,35 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { Connection } from 'mongoose';
3
+ import type { AppEnv } from '../../../packages/bunshot-core/src/index.js';
4
+ import type { CacheStoreName } from '../../../packages/bunshot-core/src/index.js';
5
+ interface CacheDoc {
6
+ key: string;
7
+ value: string;
8
+ expiresAt?: Date;
9
+ }
10
+ /**
11
+ * Get or create the Mongoose CacheEntry model on the given connection.
12
+ * Accepts connection and mongoose module as parameters — no module-level state.
13
+ */
14
+ export declare function getCacheModel(conn?: Connection): import('mongoose').Model<CacheDoc>;
15
+ type CacheStore = CacheStoreName;
16
+ /**
17
+ * Delete a cached entry by exact key across ALL cache backends.
18
+ *
19
+ * Requires an app reference so cache invalidation uses the correct instance-owned adapters.
20
+ */
21
+ export declare const bustCache: (key: string, app: object) => Promise<void>;
22
+ /**
23
+ * Delete cached entries matching a glob pattern across ALL cache backends.
24
+ *
25
+ * Same defense-in-depth rationale as `bustCache` — see comment above.
26
+ */
27
+ export declare const bustCachePattern: (pattern: string, app: object) => Promise<void>;
28
+ type KeyFn = (c: Parameters<MiddlewareHandler<any>>[0]) => string;
29
+ interface CacheOptions {
30
+ ttl?: number;
31
+ key: string | KeyFn;
32
+ store?: CacheStore;
33
+ }
34
+ export declare const cacheResponse: ({ ttl, key, store: storeOverride, }: CacheOptions) => MiddlewareHandler<AppEnv>;
35
+ export {};
@@ -0,0 +1,126 @@
1
+ import { getMongooseModule } from '../../lib/mongo';
2
+ import { getBunshotCtx, getCacheAdapter, getCacheAdapterOrNull } from '../../../packages/bunshot-core/src/index.js';
3
+ /**
4
+ * Get or create the Mongoose CacheEntry model on the given connection.
5
+ * Accepts connection and mongoose module as parameters — no module-level state.
6
+ */
7
+ export function getCacheModel(conn) {
8
+ // When called without args (from registerBoundaryAdapters), the model
9
+ // must already be registered on the connection from a prior call.
10
+ // This is a lazy model that gets created on first use with a connection.
11
+ if (!conn) {
12
+ // Fallback: the model must have been registered already on some connection.
13
+ // This path is only hit from registerBoundaryAdapters where appConnection is passed
14
+ // through the closure. We need to accept the connection as parameter.
15
+ throw new Error('getCacheModel requires a connection parameter');
16
+ }
17
+ if (conn.models['CacheEntry'])
18
+ return conn.models['CacheEntry'];
19
+ const mg = getMongooseModule();
20
+ const { Schema } = mg;
21
+ const cacheSchema = new Schema({
22
+ key: { type: String, required: true, unique: true },
23
+ value: { type: String, required: true },
24
+ expiresAt: { type: Date, index: { expireAfterSeconds: 0 } },
25
+ }, { collection: 'cache_entries' });
26
+ return conn.model('CacheEntry', cacheSchema);
27
+ }
28
+ async function storeGet(ctx, store, cacheKey) {
29
+ const adapter = getCacheAdapter(ctx, store);
30
+ if (!adapter.isReady()) {
31
+ throw new Error(`cacheResponse: store "${store}" is not ready.`);
32
+ }
33
+ return adapter.get(cacheKey);
34
+ }
35
+ async function storeSet(ctx, store, cacheKey, value, ttl) {
36
+ const adapter = getCacheAdapter(ctx, store);
37
+ if (!adapter.isReady()) {
38
+ throw new Error(`cacheResponse: store "${store}" is not ready.`);
39
+ }
40
+ await adapter.set(cacheKey, value, ttl);
41
+ }
42
+ async function storeDel(app, store, cacheKey) {
43
+ const adapter = getCacheAdapterOrNull(app, store);
44
+ if (!adapter?.isReady())
45
+ return;
46
+ await adapter.del(cacheKey);
47
+ }
48
+ async function storeDelPattern(app, store, fullPattern) {
49
+ const adapter = getCacheAdapterOrNull(app, store);
50
+ if (!adapter?.isReady())
51
+ return;
52
+ await adapter.delPattern(fullPattern);
53
+ }
54
+ // ---------------------------------------------------------------------------
55
+ // Public API
56
+ // ---------------------------------------------------------------------------
57
+ /**
58
+ * Delete a cached entry by exact key across ALL cache backends.
59
+ *
60
+ * Requires an app reference so cache invalidation uses the correct instance-owned adapters.
61
+ */
62
+ export const bustCache = async (key, app) => {
63
+ const { getContext } = await import('../../../packages/bunshot-core/src/index.js');
64
+ const ctx = getContext(app);
65
+ const appName = ctx.config.appName;
66
+ const cacheKey = `cache:${appName}:${key}`;
67
+ const stores = [...ctx.cacheAdapters.keys()];
68
+ await Promise.all(stores.map(store => storeDel(app, store, cacheKey)));
69
+ };
70
+ /**
71
+ * Delete cached entries matching a glob pattern across ALL cache backends.
72
+ *
73
+ * Same defense-in-depth rationale as `bustCache` — see comment above.
74
+ */
75
+ export const bustCachePattern = async (pattern, app) => {
76
+ const { getContext } = await import('../../../packages/bunshot-core/src/index.js');
77
+ const ctx = getContext(app);
78
+ const appName = ctx.config.appName;
79
+ const fullPattern = `cache:${appName}:${pattern}`;
80
+ const stores = [...ctx.cacheAdapters.keys()];
81
+ await Promise.all(stores.map(store => storeDelPattern(app, store, fullPattern)));
82
+ };
83
+ /** Headers that must never be cached — storing these can cause session fixation or auth bypass. */
84
+ const UNCACHEABLE_HEADERS = new Set([
85
+ 'set-cookie',
86
+ 'www-authenticate',
87
+ 'authorization',
88
+ 'x-csrf-token',
89
+ 'proxy-authenticate',
90
+ ]);
91
+ export const cacheResponse = ({ ttl, key, store: storeOverride, }) => {
92
+ return async (c, next) => {
93
+ const ctx = getBunshotCtx(c);
94
+ const store = storeOverride ?? ctx.config.resolvedStores.cache ?? 'redis';
95
+ const appName = ctx.config.appName;
96
+ const rawKey = typeof key === 'function' ? key(c) : key;
97
+ // Per-tenant namespacing: prevents two tenants caching the same key from colliding
98
+ const tenantId = c.get('tenantId');
99
+ const tenantSegment = tenantId ? `${tenantId}:` : '';
100
+ const cacheKey = `cache:${appName}:${tenantSegment}${rawKey}`;
101
+ const cached = await storeGet(ctx, store, cacheKey);
102
+ if (cached) {
103
+ const { status, headers, body } = JSON.parse(cached);
104
+ return new Response(body, {
105
+ status,
106
+ headers: { ...headers, 'x-cache': 'HIT' },
107
+ });
108
+ }
109
+ await next();
110
+ const res = c.res;
111
+ if (res.status >= 200 && res.status < 300) {
112
+ const body = await res.text();
113
+ const headers = {};
114
+ res.headers.forEach((value, name) => {
115
+ if (!UNCACHEABLE_HEADERS.has(name.toLowerCase())) {
116
+ headers[name] = value;
117
+ }
118
+ });
119
+ await storeSet(ctx, store, cacheKey, JSON.stringify({ status: res.status, headers, body }), ttl);
120
+ c.res = new Response(body, {
121
+ status: res.status,
122
+ headers: { ...headers, 'x-cache': 'MISS' },
123
+ });
124
+ }
125
+ };
126
+ };
@@ -1,6 +1,5 @@
1
- import type { MiddlewareHandler } from "hono";
2
- import type { AppEnv } from "../lib/context";
3
- import { type CaptchaConfig } from "../lib/captcha";
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { AppEnv, CaptchaConfig } from '../../../packages/bunshot-core/src/index.js';
4
3
  /**
5
4
  * Middleware factory that verifies a CAPTCHA token from the request body.
6
5
  *
@@ -0,0 +1,37 @@
1
+ import { verifyCaptcha } from '../lib/captcha';
2
+ import { HttpError, getContextOrNull } from '../../../packages/bunshot-core/src/index.js';
3
+ import { getClientIp } from '../../../packages/bunshot-core/src/index.js';
4
+ /**
5
+ * Middleware factory that verifies a CAPTCHA token from the request body.
6
+ *
7
+ * @example
8
+ * router.post("/contact", requireCaptcha({ provider: "turnstile", secretKey: "..." }), handler);
9
+ */
10
+ export const requireCaptcha = (config) => async (c, next) => {
11
+ // Get effective config: param takes precedence, then context config
12
+ const app = c.get('bunshotCtx')?.app;
13
+ const ctx = app ? getContextOrNull(app) : null;
14
+ const effectiveConfig = config ?? ctx?.config?.captcha ?? undefined;
15
+ if (!effectiveConfig) {
16
+ await next();
17
+ return;
18
+ }
19
+ const tokenField = effectiveConfig.tokenField ?? 'captcha-token';
20
+ let body;
21
+ try {
22
+ body = await c.req.json();
23
+ }
24
+ catch {
25
+ body = {};
26
+ }
27
+ const token = body[tokenField];
28
+ if (!token) {
29
+ throw new HttpError(400, 'CAPTCHA token is required', 'CAPTCHA_MISSING');
30
+ }
31
+ const ip = getClientIp(c) ?? undefined;
32
+ const result = await verifyCaptcha(token, effectiveConfig, ip);
33
+ if (!result.success) {
34
+ throw new HttpError(400, 'CAPTCHA verification failed', 'CAPTCHA_FAILED');
35
+ }
36
+ await next();
37
+ };
@@ -1,2 +1,2 @@
1
- import type { Middleware } from ".";
1
+ import type { Middleware } from '.';
2
2
  export declare const errorHandler: Middleware;
@@ -1,4 +1,4 @@
1
- import { HttpError } from "../lib/HttpError";
1
+ import { HttpError } from '../../../packages/bunshot-core/src/index.js';
2
2
  export const errorHandler = async (req, next) => {
3
3
  try {
4
4
  return await next(req);
@@ -11,6 +11,6 @@ export const errorHandler = async (req, next) => {
11
11
  body.code = err.code;
12
12
  return Response.json(body, { status: err.status });
13
13
  }
14
- return Response.json({ error: "Internal Server Error" }, { status: 500 });
14
+ return Response.json({ error: 'Internal Server Error' }, { status: 500 });
15
15
  }
16
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,7 +1,5 @@
1
- import { getSigningConfig, getSigningSecret } from "../lib/appConfig";
2
- import { hmacVerify } from "../lib/signing";
3
- import { HEADER_SIGNATURE, HEADER_TIMESTAMP } from "../lib/constants";
4
- import { HttpError } from "../lib/HttpError";
1
+ import { hmacVerify } from '../../lib/signing';
2
+ import { HEADER_SIGNATURE, HEADER_TIMESTAMP, HttpError } from '../../../packages/bunshot-core/src/index.js';
5
3
  /**
6
4
  * Canonicalize the query string for signing.
7
5
  *
@@ -14,19 +12,19 @@ import { HttpError } from "../lib/HttpError";
14
12
  */
15
13
  function canonicalizeQuery(search) {
16
14
  // Remove leading "?"
17
- const qs = search.startsWith("?") ? search.slice(1) : search;
15
+ const qs = search.startsWith('?') ? search.slice(1) : search;
18
16
  if (!qs)
19
- return "";
17
+ return '';
20
18
  const pairs = [];
21
- for (const part of qs.split("&")) {
19
+ for (const part of qs.split('&')) {
22
20
  if (!part)
23
21
  continue;
24
- const eqIdx = part.indexOf("=");
22
+ const eqIdx = part.indexOf('=');
25
23
  const rawKey = eqIdx === -1 ? part : part.slice(0, eqIdx);
26
- const rawVal = eqIdx === -1 ? "" : part.slice(eqIdx + 1);
24
+ const rawVal = eqIdx === -1 ? '' : part.slice(eqIdx + 1);
27
25
  // Normalize encoding: decode then re-encode
28
- const key = encodeURIComponent(decodeURIComponent(rawKey.replace(/\+/g, " ")));
29
- const val = encodeURIComponent(decodeURIComponent(rawVal.replace(/\+/g, " ")));
26
+ const key = encodeURIComponent(decodeURIComponent(rawKey.replace(/\+/g, ' ')));
27
+ const val = encodeURIComponent(decodeURIComponent(rawVal.replace(/\+/g, ' ')));
30
28
  pairs.push([key, val]);
31
29
  }
32
30
  // Sort by key, then by value for repeated keys
@@ -35,7 +33,7 @@ function canonicalizeQuery(search) {
35
33
  return a[0] < b[0] ? -1 : 1;
36
34
  return a[1] < b[1] ? -1 : 1;
37
35
  });
38
- return pairs.map(([k, v]) => `${k}=${v}`).join("&");
36
+ return pairs.map(([k, v]) => `${k}=${v}`).join('&');
39
37
  }
40
38
  /**
41
39
  * Middleware that verifies the client has HMAC-signed the canonical request.
@@ -47,13 +45,13 @@ function canonicalizeQuery(search) {
47
45
  * is a no-op pass-through.
48
46
  */
49
47
  export const requireSignedRequest = (opts) => async (c, next) => {
50
- const cfg = getSigningConfig();
48
+ const cfg = c.get('bunshotCtx')?.signing;
51
49
  // No-op when request signing is not enabled
52
50
  if (!cfg?.requestSigning) {
53
51
  await next();
54
52
  return;
55
53
  }
56
- const signingOpts = typeof cfg.requestSigning === "object" ? cfg.requestSigning : {};
54
+ const signingOpts = typeof cfg.requestSigning === 'object' ? cfg.requestSigning : {};
57
55
  const tolerance = opts?.tolerance ?? signingOpts.tolerance ?? 300_000;
58
56
  const sigHeader = opts?.header ?? signingOpts.header ?? HEADER_SIGNATURE;
59
57
  const tsHeader = opts?.timestampHeader ?? signingOpts.timestampHeader ?? HEADER_TIMESTAMP;
@@ -61,22 +59,22 @@ export const requireSignedRequest = (opts) => async (c, next) => {
61
59
  const rawTs = c.req.header(tsHeader);
62
60
  const tsNum = rawTs !== undefined ? parseInt(rawTs, 10) : NaN;
63
61
  if (isNaN(tsNum)) {
64
- throw new HttpError(401, "Unauthorized", "EXPIRED_TIMESTAMP");
62
+ throw new HttpError(401, 'Unauthorized', 'EXPIRED_TIMESTAMP');
65
63
  }
66
64
  // Auto-detect Unix seconds (< 1e10) vs milliseconds
67
65
  const tsMs = tsNum < 1e10 ? tsNum * 1000 : tsNum;
68
66
  if (Math.abs(Date.now() - tsMs) > tolerance) {
69
- throw new HttpError(401, "Unauthorized", "EXPIRED_TIMESTAMP");
67
+ throw new HttpError(401, 'Unauthorized', 'EXPIRED_TIMESTAMP');
70
68
  }
71
69
  // --- Signature header ---
72
70
  const sig = c.req.header(sigHeader);
73
71
  if (!sig) {
74
- throw new HttpError(401, "Unauthorized", "INVALID_SIGNATURE");
72
+ throw new HttpError(401, 'Unauthorized', 'INVALID_SIGNATURE');
75
73
  }
76
74
  // --- Secret resolution ---
77
- const secret = getSigningSecret();
75
+ const secret = cfg.secret ?? null;
78
76
  if (!secret) {
79
- throw new HttpError(500, "Internal Server Error", "SIGNING_SECRET_MISSING");
77
+ throw new HttpError(500, 'Internal Server Error', 'SIGNING_SECRET_MISSING');
80
78
  }
81
79
  // --- Build canonical string ---
82
80
  const method = c.req.method.toUpperCase();
@@ -94,7 +92,7 @@ export const requireSignedRequest = (opts) => async (c, next) => {
94
92
  valid = false;
95
93
  }
96
94
  if (!valid) {
97
- throw new HttpError(401, "Unauthorized", "INVALID_SIGNATURE");
95
+ throw new HttpError(401, 'Unauthorized', 'INVALID_SIGNATURE');
98
96
  }
99
97
  await next();
100
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>;