@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,91 @@
1
+ /**
2
+ * Middleware mounting — extracted from createApp().
3
+ *
4
+ * Handles the framework middleware stack: request ID, validation formatter,
5
+ * metrics collection, request logging, secure headers, CORS, bot protection,
6
+ * rate limiting, and tenant resolution.
7
+ */
8
+ import type { MetricsState } from './lib/metrics';
9
+ import type { LogLevel, RequestLogEntry } from './middleware/requestLogger';
10
+ import type { OpenAPIHono } from '@hono/zod-openapi';
11
+ import type { MiddlewareHandler } from 'hono';
12
+ import type { AppEnv, ValidationErrorFormatter } from '../../packages/bunshot-core/src/index.js';
13
+ export interface SecurityConfig {
14
+ cors?: string | string[];
15
+ headers?: {
16
+ contentSecurityPolicy?: string;
17
+ permissionsPolicy?: string;
18
+ };
19
+ rateLimit?: {
20
+ windowMs: number;
21
+ max: number;
22
+ };
23
+ botProtection?: {
24
+ blockList?: string[];
25
+ fingerprintRateLimit?: boolean;
26
+ };
27
+ trustProxy?: false | number;
28
+ signing?: unknown;
29
+ captcha?: unknown;
30
+ }
31
+ export interface LoggingConfig {
32
+ enabled?: boolean;
33
+ onLog?: (entry: RequestLogEntry) => void | Promise<void>;
34
+ level?: LogLevel;
35
+ excludePaths?: (string | RegExp)[];
36
+ excludeMethods?: string[];
37
+ }
38
+ export interface MetricsConfig {
39
+ enabled?: boolean;
40
+ auth?: 'userAuth' | 'none' | MiddlewareHandler<AppEnv>[];
41
+ excludePaths?: (string | RegExp)[];
42
+ normalizePath?: (path: string) => string;
43
+ queues?: string[];
44
+ unsafePublic?: boolean;
45
+ }
46
+ export interface TenancyConfig {
47
+ resolution: 'header' | 'subdomain' | 'path';
48
+ headerName?: string;
49
+ pathSegment?: number;
50
+ onResolve?: (tenantId: string) => Promise<Record<string, unknown> | null>;
51
+ cacheTtlMs?: number;
52
+ cacheMaxSize?: number;
53
+ exemptPaths?: string[];
54
+ rejectionStatus?: 403 | 404;
55
+ }
56
+ export interface MountMiddlewareConfig {
57
+ security: SecurityConfig;
58
+ logging?: LoggingConfig;
59
+ metrics?: MetricsConfig;
60
+ metricsState?: MetricsState;
61
+ tenancy?: TenancyConfig;
62
+ validation?: {
63
+ formatError?: ValidationErrorFormatter;
64
+ };
65
+ middleware?: MiddlewareHandler<AppEnv>[];
66
+ }
67
+ /**
68
+ * Mount all framework middleware on the Hono app in the correct order.
69
+ *
70
+ * Order:
71
+ * 1. Request ID
72
+ * 2. Validation error formatter (context variable)
73
+ * 3. Metrics collection (if enabled)
74
+ * 4. Request logging (if enabled)
75
+ * 5. Secure headers
76
+ * 6. Custom security headers
77
+ * 7. CORS
78
+ * 8. Bot protection (if configured)
79
+ * 9. Rate limiting
80
+ *
81
+ * Plugin middleware and tenant resolution are mounted separately
82
+ * (after this function returns) to maintain correct ordering.
83
+ */
84
+ export declare function mountFrameworkMiddleware(app: OpenAPIHono<AppEnv>, config: MountMiddlewareConfig): Promise<void>;
85
+ /**
86
+ * Mount tenant resolution middleware. Called after plugin middleware phase
87
+ * so tenant context is available in routes but plugins can set up auth first.
88
+ */
89
+ export declare function mountTenantMiddleware(app: OpenAPIHono<AppEnv>, tenancy: TenancyConfig, carrier?: {
90
+ cache: import('./middleware/tenant').TenantResolutionCache | null;
91
+ }): Promise<void>;
@@ -0,0 +1,128 @@
1
+ import { rateLimit } from './middleware/rateLimit';
2
+ import { requestId } from './middleware/requestId';
3
+ import { requestLogger } from './middleware/requestLogger';
4
+ import { cors } from 'hono/cors';
5
+ import { secureHeaders } from 'hono/secure-headers';
6
+ import { HEADER_CSRF_TOKEN, HEADER_REFRESH_TOKEN, HEADER_REQUEST_ID, HEADER_USER_TOKEN, defaultValidationErrorFormatter, } from '../../packages/bunshot-core/src/index.js';
7
+ // ---------------------------------------------------------------------------
8
+ // Implementation
9
+ // ---------------------------------------------------------------------------
10
+ /**
11
+ * Mount all framework middleware on the Hono app in the correct order.
12
+ *
13
+ * Order:
14
+ * 1. Request ID
15
+ * 2. Validation error formatter (context variable)
16
+ * 3. Metrics collection (if enabled)
17
+ * 4. Request logging (if enabled)
18
+ * 5. Secure headers
19
+ * 6. Custom security headers
20
+ * 7. CORS
21
+ * 8. Bot protection (if configured)
22
+ * 9. Rate limiting
23
+ *
24
+ * Plugin middleware and tenant resolution are mounted separately
25
+ * (after this function returns) to maintain correct ordering.
26
+ */
27
+ export async function mountFrameworkMiddleware(app, config) {
28
+ const { security: securityConfig = {} } = config;
29
+ app.use(requestId);
30
+ // Set the validation error formatter on context so defaultHook and onError both pick it up
31
+ const validationFormatter = config.validation?.formatError ?? defaultValidationErrorFormatter;
32
+ app.use('*', async (c, next) => {
33
+ c.set('validationErrorFormatter', validationFormatter);
34
+ await next();
35
+ });
36
+ // Metrics collection middleware (before requestLogger so it captures all requests)
37
+ if (config.metrics?.enabled) {
38
+ const metricsAuth = config.metrics.auth ?? 'none';
39
+ if (metricsAuth === 'none' && !config.metrics.unsafePublic) {
40
+ if (process.env.NODE_ENV === 'production') {
41
+ throw new Error('[security] metrics.auth is required in production. Set metrics.auth or explicitly set unsafePublic: true with auth: "none".');
42
+ }
43
+ console.warn('[security] /metrics is enabled without auth. Configure metrics.auth for production.');
44
+ }
45
+ const { metricsCollector } = await import('./middleware/metrics');
46
+ app.use(metricsCollector({
47
+ state: config.metricsState ??
48
+ (() => {
49
+ throw new Error('metricsState is required when metrics are enabled');
50
+ })(),
51
+ excludePaths: config.metrics.excludePaths,
52
+ normalizePath: config.metrics.normalizePath,
53
+ }));
54
+ }
55
+ // Request logging
56
+ const loggingConfig = config.logging ?? {};
57
+ if (loggingConfig.enabled !== false) {
58
+ app.use(requestLogger({
59
+ onLog: loggingConfig.onLog,
60
+ level: loggingConfig.level,
61
+ excludePaths: loggingConfig.excludePaths,
62
+ excludeMethods: loggingConfig.excludeMethods,
63
+ }));
64
+ }
65
+ // Secure headers
66
+ const headerOpts = {};
67
+ if (securityConfig.headers?.contentSecurityPolicy) {
68
+ headerOpts['Content-Security-Policy'] = securityConfig.headers.contentSecurityPolicy;
69
+ }
70
+ if (securityConfig.headers?.permissionsPolicy) {
71
+ headerOpts['Permissions-Policy'] = securityConfig.headers.permissionsPolicy;
72
+ }
73
+ app.use(secureHeaders());
74
+ if (Object.keys(headerOpts).length > 0) {
75
+ app.use(async (c, next) => {
76
+ await next();
77
+ for (const [k, v] of Object.entries(headerOpts)) {
78
+ c.res.headers.set(k, v);
79
+ }
80
+ });
81
+ }
82
+ // CORS
83
+ const corsOrigins = securityConfig.cors ?? '*';
84
+ if (corsOrigins === '*' && process.env.NODE_ENV === 'production') {
85
+ console.warn('[security] CORS is set to wildcard (*) in production. Configure security.cors with specific origins to restrict cross-origin access.');
86
+ }
87
+ const corsAllowHeaders = [
88
+ 'Content-Type',
89
+ 'Authorization',
90
+ HEADER_USER_TOKEN,
91
+ HEADER_REFRESH_TOKEN,
92
+ HEADER_CSRF_TOKEN,
93
+ ];
94
+ app.use(cors({
95
+ origin: corsOrigins,
96
+ allowHeaders: corsAllowHeaders,
97
+ exposeHeaders: ['x-cache', HEADER_REQUEST_ID],
98
+ credentials: true,
99
+ }));
100
+ // Bot protection
101
+ const botCfg = securityConfig.botProtection ?? {};
102
+ if ((botCfg.blockList?.length ?? 0) > 0) {
103
+ const { botProtection } = await import('./middleware/botProtection');
104
+ app.use(botProtection({ blockList: botCfg.blockList }));
105
+ }
106
+ // Rate limiting
107
+ const rlConfig = securityConfig.rateLimit ?? { windowMs: 60_000, max: 100 };
108
+ app.use(rateLimit({ ...rlConfig, fingerprintLimit: botCfg.fingerprintRateLimit ?? false }));
109
+ }
110
+ /**
111
+ * Mount tenant resolution middleware. Called after plugin middleware phase
112
+ * so tenant context is available in routes but plugins can set up auth first.
113
+ */
114
+ export async function mountTenantMiddleware(app, tenancy, carrier) {
115
+ if (!tenancy.onResolve) {
116
+ if (process.env.NODE_ENV === 'production') {
117
+ throw new Error('[security] Tenancy is configured without an onResolve callback. ' +
118
+ 'In production, onResolve is required to validate tenant IDs and prevent cross-tenant access. ' +
119
+ 'Provide tenancy.onResolve or remove the tenancy config.');
120
+ }
121
+ else {
122
+ console.warn('[security] Tenancy is configured without an onResolve callback — ' +
123
+ 'tenant IDs will be trusted without validation. This is unsafe in production.');
124
+ }
125
+ }
126
+ const { createTenantMiddleware } = await import('./middleware/tenant');
127
+ app.use(createTenantMiddleware(tenancy, carrier));
128
+ }
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Optional endpoint mounting — extracted from createApp().
3
+ *
4
+ * Mounts the jobs status endpoint, /metrics endpoint, and upload presigned-URL
5
+ * endpoint when each is enabled in the app config.
6
+ */
7
+ import type { MetricsState } from './lib/metrics';
8
+ import type { OpenAPIHono } from '@hono/zod-openapi';
9
+ import type { MiddlewareHandler } from 'hono';
10
+ import type { AppEnv } from '../../packages/bunshot-core/src/index.js';
11
+ export interface JobsConfig {
12
+ /** Enable the job status endpoint. Default: false. */
13
+ statusEndpoint?: boolean;
14
+ /**
15
+ * Auth protection for job endpoints.
16
+ * - `"userAuth"` — requires authenticated user session (cookie/token).
17
+ * - `"none"` — no auth (not recommended for production).
18
+ * - `MiddlewareHandler[]` — custom middleware stack (e.g., `[userAuth, requireRole("admin")]`).
19
+ *
20
+ * Default: `"none"`. You must explicitly configure auth.
21
+ */
22
+ auth?: 'userAuth' | 'none' | MiddlewareHandler<AppEnv>[];
23
+ /** Required roles for accessing job endpoints. Only works when auth includes userAuth. */
24
+ roles?: string[];
25
+ /** Whitelist of queue names exposed. Default: [] (nothing exposed). */
26
+ allowedQueues?: string[];
27
+ /** When using userAuth, restrict job visibility to the user who created it. Default: false. */
28
+ scopeToUser?: boolean;
29
+ /**
30
+ * Explicitly acknowledge that jobs endpoint is public in production.
31
+ * Set to true only when auth is "none" and you understand the risk.
32
+ * Without this, createApp throws in production when auth is "none".
33
+ */
34
+ unsafePublic?: boolean;
35
+ }
36
+ export interface MetricsConfig {
37
+ /** Enable the /metrics endpoint. Default: false (must be explicitly enabled). */
38
+ enabled?: boolean;
39
+ /**
40
+ * Auth protection for the /metrics endpoint.
41
+ * - `"userAuth"` — requires authenticated user session.
42
+ * - `"none"` — no auth (default — logs a production warning).
43
+ * - `MiddlewareHandler[]` — custom middleware stack.
44
+ */
45
+ auth?: 'userAuth' | 'none' | MiddlewareHandler<AppEnv>[];
46
+ /** Paths to exclude from metrics collection. Strings use prefix matching. */
47
+ excludePaths?: (string | RegExp)[];
48
+ /** Custom path normalizer to prevent high-cardinality labels. */
49
+ normalizePath?: (path: string) => string;
50
+ /** BullMQ queue names to report depth gauges for. */
51
+ queues?: string[];
52
+ /**
53
+ * Explicitly acknowledge that metrics endpoint is public in production.
54
+ * Set to true only when auth is "none" and you understand the risk.
55
+ * Without this, createApp throws in production when auth is "none".
56
+ */
57
+ unsafePublic?: boolean;
58
+ }
59
+ export interface PresignedUrlConfig {
60
+ expirySeconds?: number;
61
+ path?: string;
62
+ }
63
+ export interface UploadConfig {
64
+ storage: import('./lib/storageAdapter').StorageAdapter;
65
+ maxFileSize?: number;
66
+ maxFiles?: number;
67
+ allowedMimeTypes?: string[];
68
+ keyPrefix?: string;
69
+ generateKey?: (file: File, ctx: {
70
+ userId?: string;
71
+ tenantId?: string;
72
+ }) => string;
73
+ tenantScopedKeys?: boolean;
74
+ presignedUrls?: boolean | PresignedUrlConfig;
75
+ /**
76
+ * TTL in seconds for upload registry entries across all backends.
77
+ * Default: 2592000 (30 days).
78
+ */
79
+ registryTtlSeconds?: number;
80
+ /**
81
+ * Authorization callback for upload read/delete operations.
82
+ * Called when registry ownership check fails or key is not in registry.
83
+ */
84
+ authorization?: {
85
+ authorize?: (input: {
86
+ action: 'read' | 'delete';
87
+ key: string;
88
+ userId?: string;
89
+ tenantId?: string;
90
+ }) => boolean | Promise<boolean>;
91
+ };
92
+ /**
93
+ * Allow operations on keys not in the upload registry.
94
+ * When false (default), operations on unknown keys return 404.
95
+ * When true, requires an authorize callback — denies if absent.
96
+ */
97
+ allowExternalKeys?: boolean;
98
+ }
99
+ export declare function mountOptionalEndpoints(app: OpenAPIHono<AppEnv>, coreRoutesDir: string, jobs: JobsConfig | undefined, metrics: MetricsConfig | undefined, upload: UploadConfig | undefined, metricsState: MetricsState, resolvedSecrets: {
100
+ redisHost?: string;
101
+ redisUser?: string;
102
+ redisPassword?: string;
103
+ }): Promise<void>;
@@ -0,0 +1,47 @@
1
+ import { createQueueFactory } from '../lib/queue';
2
+ // ---------------------------------------------------------------------------
3
+ // Implementation
4
+ // ---------------------------------------------------------------------------
5
+ export async function mountOptionalEndpoints(app, coreRoutesDir, jobs, metrics, upload, metricsState, resolvedSecrets) {
6
+ const needsQueueFactory = !!jobs?.statusEndpoint || !!metrics?.queues?.length;
7
+ const queueFactory = needsQueueFactory
8
+ ? (() => {
9
+ if (!resolvedSecrets.redisHost) {
10
+ throw new Error('[queue] Jobs/metrics queue helpers require REDIS_HOST via the Bunshot secret bundle at startup.');
11
+ }
12
+ return createQueueFactory({
13
+ host: resolvedSecrets.redisHost,
14
+ user: resolvedSecrets.redisUser,
15
+ password: resolvedSecrets.redisPassword,
16
+ });
17
+ })()
18
+ : undefined;
19
+ if (jobs?.statusEndpoint) {
20
+ const jobsAuth = jobs.auth ?? 'none';
21
+ if (jobsAuth === 'none' && !jobs.unsafePublic) {
22
+ if (process.env.NODE_ENV === 'production') {
23
+ throw new Error('[security] jobs.auth is required in production. Set jobs.auth or explicitly set unsafePublic: true with auth: "none".');
24
+ }
25
+ console.warn('[security] /jobs is enabled without auth. Configure jobs.auth for production.');
26
+ }
27
+ const { createJobsRouter } = await import(`${coreRoutesDir}/jobs`);
28
+ app.route('/', createJobsRouter(jobs, queueFactory));
29
+ }
30
+ if (metrics?.enabled) {
31
+ const { createMetricsRouter } = await import(`${coreRoutesDir}/metrics`);
32
+ app.route('/', createMetricsRouter({
33
+ auth: metrics.auth,
34
+ queues: metrics.queues,
35
+ unsafePublic: metrics.unsafePublic,
36
+ }, metricsState, queueFactory));
37
+ }
38
+ if (upload?.presignedUrls) {
39
+ const { createUploadsRouter } = await import(`${coreRoutesDir}/uploads`);
40
+ const presignConfig = upload.presignedUrls === true ? {} : upload.presignedUrls;
41
+ app.route('/', createUploadsRouter({
42
+ ...presignConfig,
43
+ authorization: upload.authorization,
44
+ allowExternalKeys: upload.allowExternalKeys,
45
+ }));
46
+ }
47
+ }
@@ -0,0 +1,21 @@
1
+ import { OpenAPIHono } from '@hono/zod-openapi';
2
+ import type { AppEnv } from '../../packages/bunshot-core/src/index.js';
3
+ export interface VersioningConfig {
4
+ /**
5
+ * Version identifiers in ascending order, e.g. `["v1", "v2"]`.
6
+ * Each version needs a matching subdirectory under `routesDir` (e.g. `routes/v1/`).
7
+ */
8
+ versions: string[];
9
+ /**
10
+ * Subdirectory name for routes shared across all versions. Shared route schemas
11
+ * receive unprefixed names since they are version-agnostic. Default: `"shared"`.
12
+ * Set `false` to disable shared route discovery.
13
+ */
14
+ sharedDir?: string | false;
15
+ /**
16
+ * Which version `/docs` and `/openapi.json` redirect to.
17
+ * Defaults to the last version in the array (i.e. the latest).
18
+ */
19
+ defaultVersion?: string;
20
+ }
21
+ export declare function mountRoutes(app: OpenAPIHono<AppEnv>, routesDir: string, versioning: VersioningConfig | string[] | undefined, appName: string, openApiVersion: string): Promise<void>;
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Route discovery and mounting — extracted from createApp().
3
+ *
4
+ * Handles both versioned (routes/v1/, routes/v2/, ...) and non-versioned
5
+ * (routes/**) discovery. Each versioned sub-app gets its own OpenAPI spec,
6
+ * Scalar docs, and schema stripping pass.
7
+ */
8
+ import { stripUnreferencedSchemas } from './lib/stripUnreferencedSchemas';
9
+ import { OpenAPIHono } from '@hono/zod-openapi';
10
+ import { Scalar } from '@scalar/hono-api-reference';
11
+ import { defaultHook } from '../../packages/bunshot-core/src/index.js';
12
+ // ---------------------------------------------------------------------------
13
+ // Helpers
14
+ // ---------------------------------------------------------------------------
15
+ function registerSecuritySchemes(registry) {
16
+ registry.registerComponent('securitySchemes', 'cookieAuth', {
17
+ type: 'apiKey',
18
+ in: 'cookie',
19
+ name: 'token',
20
+ description: 'Session cookie set automatically on login/register.',
21
+ });
22
+ registry.registerComponent('securitySchemes', 'userToken', {
23
+ type: 'apiKey',
24
+ in: 'header',
25
+ name: 'x-user-token',
26
+ description: 'JWT session token passed as the x-user-token request header (alternative to the session cookie).',
27
+ });
28
+ registry.registerComponent('securitySchemes', 'bearerAuth', {
29
+ type: 'http',
30
+ scheme: 'bearer',
31
+ description: 'API key passed as Authorization: Bearer <token>. Required on all endpoints unless bearer auth is disabled in CreateAppConfig or the path is in the bypass list.',
32
+ });
33
+ }
34
+ // ---------------------------------------------------------------------------
35
+ // Implementation
36
+ // ---------------------------------------------------------------------------
37
+ export async function mountRoutes(app, routesDir, versioning, appName, openApiVersion) {
38
+ if (versioning) {
39
+ await mountVersionedRoutes(app, routesDir, versioning, appName, openApiVersion);
40
+ }
41
+ else {
42
+ await mountFlatRoutes(app, routesDir, appName, openApiVersion);
43
+ }
44
+ }
45
+ async function mountVersionedRoutes(app, routesDir, versioning, appName, openApiVersion) {
46
+ const { versions, sharedDir = 'shared', defaultVersion = versions[versions.length - 1], } = Array.isArray(versioning) ? { versions: versioning } : versioning;
47
+ // Import shared routes with no prefix — schemas stay unprefixed (version-agnostic)
48
+ let sharedMods = [];
49
+ if (sharedDir !== false) {
50
+ const sharedRoutesDir = `${routesDir}/${sharedDir}`;
51
+ const sharedFiles = [];
52
+ try {
53
+ const sharedGlob = new Bun.Glob('**/*.ts');
54
+ for await (const file of sharedGlob.scan({ cwd: sharedRoutesDir })) {
55
+ sharedFiles.push(file);
56
+ }
57
+ }
58
+ catch {
59
+ // sharedDir doesn't exist — fine
60
+ }
61
+ sharedMods = await Promise.all(sharedFiles.map(async (file) => ({ file, mod: await import(`${sharedRoutesDir}/${file}`) })));
62
+ }
63
+ // For each version: import routes, mount on isolated OpenAPIHono
64
+ for (const version of versions) {
65
+ const vApp = new OpenAPIHono({ defaultHook });
66
+ const versionRoutesDir = `${routesDir}/${version}`;
67
+ const versionFiles = [];
68
+ try {
69
+ const versionGlob = new Bun.Glob('**/*.ts');
70
+ for await (const file of versionGlob.scan({ cwd: versionRoutesDir })) {
71
+ versionFiles.push(file);
72
+ }
73
+ }
74
+ catch {
75
+ // version dir doesn't exist — fine
76
+ }
77
+ // Import all version route files in parallel
78
+ const versionMods = await Promise.all(versionFiles.map(async (file) => ({ file, mod: await import(`${versionRoutesDir}/${file}`) })));
79
+ // Mount version-specific routes (sorted by priority)
80
+ versionMods
81
+ .sort((a, b) => (a.mod.priority ?? Infinity) - (b.mod.priority ?? Infinity))
82
+ .forEach(({ mod }) => {
83
+ if (mod.router)
84
+ vApp.route('/', mod.router);
85
+ });
86
+ // Mount shared routes on this versioned app
87
+ for (const { mod } of sharedMods) {
88
+ if (mod.router)
89
+ vApp.route('/', mod.router);
90
+ }
91
+ registerSecuritySchemes(vApp.openAPIRegistry);
92
+ // Serve per-version spec stripped of schemas from other versions
93
+ vApp.get('/openapi.json', c => {
94
+ const spec = vApp.getOpenAPIDocument({
95
+ openapi: '3.0.0',
96
+ info: { title: `${appName} ${version.toUpperCase()}`, version: openApiVersion },
97
+ });
98
+ return c.json(stripUnreferencedSchemas(spec));
99
+ });
100
+ // Per-version Scalar docs
101
+ vApp.get('/docs', Scalar({ url: `/${version}/openapi.json` }));
102
+ // Mount versioned app under /v1, /v2, etc.
103
+ app.route(`/${version}`, vApp);
104
+ }
105
+ // Root /docs → version selector page
106
+ app.get('/docs', c => {
107
+ const links = versions
108
+ .map(v => `<li><a href="/${v}/docs" style="font-size:1.1em">${v.toUpperCase()}</a></li>`)
109
+ .join('\n');
110
+ const html = `<!DOCTYPE html>
111
+ <html lang="en">
112
+ <head><meta charset="utf-8"><title>${appName} — API Docs</title>
113
+ <style>body{font-family:sans-serif;padding:2rem}ul{list-style:none;padding:0}li{margin:.5rem 0}</style>
114
+ </head>
115
+ <body>
116
+ <h1>${appName}</h1>
117
+ <h2>API Documentation</h2>
118
+ <ul>${links}</ul>
119
+ </body></html>`;
120
+ return c.html(html);
121
+ });
122
+ // Root /openapi.json → 302 to default version (no merged spec exists)
123
+ app.get('/openapi.json', c => c.redirect(`/${defaultVersion}/openapi.json`, 302));
124
+ }
125
+ async function mountFlatRoutes(app, routesDir, appName, openApiVersion) {
126
+ const serviceGlob = new Bun.Glob('**/*.ts');
127
+ const serviceFiles = [];
128
+ for await (const file of serviceGlob.scan({ cwd: routesDir })) {
129
+ serviceFiles.push(file);
130
+ }
131
+ const serviceMods = await Promise.all(serviceFiles.map(async (file) => ({
132
+ file,
133
+ mod: await import(`${routesDir}/${file}`),
134
+ })));
135
+ serviceMods
136
+ .sort((a, b) => (a.mod.priority ?? Infinity) - (b.mod.priority ?? Infinity))
137
+ .forEach(({ mod }) => {
138
+ if (mod.router)
139
+ app.route('/', mod.router);
140
+ });
141
+ registerSecuritySchemes(app.openAPIRegistry);
142
+ app.doc('/openapi.json', { openapi: '3.0.0', info: { title: appName, version: openApiVersion } });
143
+ app.get('/docs', Scalar({ url: '/openapi.json' }));
144
+ }
@@ -0,0 +1,28 @@
1
+ import type { ICronRegistryRepository } from '../../../packages/bunshot-core/src/index.js';
2
+ import type { RepoFactories } from '../../../packages/bunshot-core/src/index.js';
3
+ export declare function createMemoryCronRegistry(): ICronRegistryRepository;
4
+ export declare function createRedisCronRegistry(getRedis: () => {
5
+ get(key: string): Promise<string | null>;
6
+ set(key: string, value: string): Promise<unknown>;
7
+ }, appName: string): ICronRegistryRepository;
8
+ export declare function createSqliteCronRegistry(getDb: () => {
9
+ run(sql: string, params?: unknown[]): void;
10
+ query<T>(sql: string): {
11
+ all(...args: unknown[]): T[];
12
+ };
13
+ }): ICronRegistryRepository;
14
+ export declare function createMongoCronRegistry(getConn: () => {
15
+ models: Record<string, unknown>;
16
+ model(name: string, schema: unknown): unknown;
17
+ }, getMg: () => {
18
+ Schema: new (def: object, opts?: object) => unknown;
19
+ }, appName: string): ICronRegistryRepository;
20
+ type PgPool = {
21
+ query<R extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<{
22
+ rows: R[];
23
+ rowCount: number | null;
24
+ }>;
25
+ };
26
+ export declare function createPostgresCronRegistry(pool: PgPool, appName: string): ICronRegistryRepository;
27
+ export declare const cronRegistryFactories: RepoFactories<ICronRegistryRepository>;
28
+ export {};