@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
package/dist/app.js DELETED
@@ -1,548 +0,0 @@
1
- import { OpenAPIHono } from "@hono/zod-openapi";
2
- import { cors } from "hono/cors";
3
- import { secureHeaders } from "hono/secure-headers";
4
- import { Scalar } from "@scalar/hono-api-reference";
5
- import { HttpError, ValidationError } from "./lib/HttpError";
6
- import { rateLimit } from "./middleware/rateLimit";
7
- import { bearerAuth } from "./middleware/bearerAuth";
8
- import { identify } from "./middleware/identify";
9
- import { defaultValidationErrorFormatter } from "./lib/context";
10
- import { HEADER_USER_TOKEN, HEADER_REFRESH_TOKEN, HEADER_CSRF_TOKEN, HEADER_REQUEST_ID } from "./lib/constants";
11
- import { requestId } from "./middleware/requestId";
12
- import { requestLogger } from "./middleware/requestLogger";
13
- import { setAppName, setAppRoles, setDefaultRole, setPrimaryField, setEmailVerificationConfig, setPasswordResetConfig, setPasswordPolicy, setMaxSessions, setPersistSessionMetadata, setIncludeInactiveSessions, setTrackLastActive, setRefreshTokenConfig, setMfaConfig, setCsrfEnabled, setSigningConfig } from "./lib/appConfig";
14
- import { setEmailVerificationStore } from "./lib/emailVerification";
15
- import { setPasswordResetStore } from "./lib/resetPassword";
16
- import { setAuthRateLimitStore } from "./lib/authRateLimit";
17
- import { setAuthAdapter } from "./lib/authAdapter";
18
- import { mongoAuthAdapter } from "./adapters/mongoAuth";
19
- import { memoryAuthAdapter } from "./adapters/memoryAuth";
20
- import { initOAuthProviders, getConfiguredOAuthProviders, setOAuthStateStore } from "./lib/oauth";
21
- import { setOAuthCodeStore } from "./lib/oauthCode";
22
- import { connectMongo, connectAuthMongo, connectAppMongo } from "./lib/mongo";
23
- import { connectRedis } from "./lib/redis";
24
- import { setSessionStore } from "./lib/session";
25
- import { setCacheStore } from "./middleware/cacheResponse";
26
- import { maybeAutoRegister } from "./lib/createRoute";
27
- import { setStorageAdapter, setUploadConfig } from "./lib/upload";
28
- export const createApp = async (config) => {
29
- const { routesDir, app: appConfig = {}, auth: authConfig = {}, security: securityConfig = {}, middleware = [], db = {}, } = config;
30
- const appName = appConfig.name ?? "Bun Core API";
31
- const openApiVersion = appConfig.version ?? "1.0.0";
32
- // Trust-proxy for IP extraction
33
- const { setTrustProxy } = await import("./lib/clientIp");
34
- setTrustProxy(securityConfig.trustProxy ?? false);
35
- const corsOrigins = securityConfig.cors ?? "*";
36
- if (corsOrigins === "*" && process.env.NODE_ENV === "production") {
37
- console.warn("[security] CORS is set to wildcard (*) in production. Configure security.cors with specific origins to restrict cross-origin access.");
38
- }
39
- const rlConfig = securityConfig.rateLimit ?? { windowMs: 60_000, max: 100 };
40
- const botCfg = securityConfig.botProtection ?? {};
41
- const enableBearerAuth = securityConfig.bearerAuth !== false;
42
- const extraBypass = typeof securityConfig.bearerAuth === "object" && securityConfig.bearerAuth !== null
43
- ? (securityConfig.bearerAuth.bypass ?? [])
44
- : [];
45
- const enableAuthRoutes = authConfig.enabled !== false;
46
- const explicitAuthAdapter = authConfig.adapter;
47
- const oauthProviders = authConfig.oauth?.providers;
48
- const postOAuthRedirect = authConfig.oauth?.postRedirect ?? "/";
49
- const allowedRedirectUrls = authConfig.oauth?.allowedRedirectUrls;
50
- // Validate postRedirect against allowlist at startup (not per-request)
51
- if (allowedRedirectUrls && postOAuthRedirect !== "/") {
52
- try {
53
- const redirectUrl = new URL(postOAuthRedirect);
54
- const allowed = allowedRedirectUrls.some((u) => {
55
- try {
56
- return new URL(u).origin === redirectUrl.origin;
57
- }
58
- catch {
59
- return false;
60
- }
61
- });
62
- if (!allowed) {
63
- throw new Error(`createApp: oauth.postRedirect "${postOAuthRedirect}" is not in the allowedRedirectUrls list. Add its origin to oauth.allowedRedirectUrls.`);
64
- }
65
- }
66
- catch (e) {
67
- if (e instanceof Error && e.message.startsWith("createApp:"))
68
- throw e;
69
- // Relative path — always allowed
70
- }
71
- }
72
- const roles = authConfig.roles ?? [];
73
- const defaultRole = authConfig.defaultRole;
74
- const primaryField = authConfig.primaryField ?? "email";
75
- const emailVerification = authConfig.emailVerification;
76
- const passwordReset = authConfig.passwordReset;
77
- const authRateLimit = authConfig.rateLimit;
78
- const sessionPolicy = authConfig.sessionPolicy ?? {};
79
- const { sqlite, mongo = "single", redis: enableRedis = true } = db;
80
- // Smart fallback: pick the best available store rather than blindly defaulting to "redis"
81
- const defaultStore = enableRedis
82
- ? "redis"
83
- : sqlite
84
- ? "sqlite"
85
- : mongo !== false
86
- ? "mongo"
87
- : "memory";
88
- const sessions = db.sessions ?? defaultStore;
89
- const oauthState = db.oauthState ?? sessions;
90
- const cache = db.cache ?? defaultStore;
91
- const authStore = db.auth ?? (mongo !== false ? "mongo" : sessions);
92
- if (sqlite || sessions === "sqlite" || oauthState === "sqlite" || authStore === "sqlite") {
93
- const { setSqliteDb } = await import("./adapters/sqliteAuth");
94
- setSqliteDb(sqlite ?? "./data.db");
95
- }
96
- setSessionStore(sessions);
97
- setOAuthStateStore(oauthState);
98
- setOAuthCodeStore(oauthState);
99
- setCacheStore(cache);
100
- if (mongo === "single")
101
- await connectMongo();
102
- else if (mongo === "separate")
103
- await Promise.all([connectAuthMongo(), connectAppMongo()]);
104
- if (enableRedis)
105
- await connectRedis();
106
- // Resolve auth adapter: explicit prop wins, then db.auth, then mongo default
107
- let authAdapter;
108
- if (explicitAuthAdapter) {
109
- authAdapter = explicitAuthAdapter;
110
- }
111
- else if (authStore === "sqlite") {
112
- const { sqliteAuthAdapter } = await import("./adapters/sqliteAuth");
113
- authAdapter = sqliteAuthAdapter;
114
- }
115
- else if (authStore === "memory") {
116
- authAdapter = memoryAuthAdapter;
117
- }
118
- else {
119
- authAdapter = mongoAuthAdapter;
120
- }
121
- if (defaultRole && !authAdapter.setRoles) {
122
- throw new Error(`createApp: "defaultRole" is set to "${defaultRole}" but the auth adapter does not implement setRoles. Add setRoles to your adapter or remove defaultRole.`);
123
- }
124
- if (emailVerification && primaryField !== "email") {
125
- throw new Error(`createApp: "emailVerification" is only supported when primaryField is "email". Either set primaryField to "email" or remove emailVerification.`);
126
- }
127
- if (passwordReset && primaryField !== "email") {
128
- throw new Error(`createApp: "passwordReset" is only supported when primaryField is "email". Either set primaryField to "email" or remove passwordReset.`);
129
- }
130
- if (passwordReset && !authAdapter.setPassword) {
131
- throw new Error(`createApp: "passwordReset" is configured but the auth adapter does not implement setPassword. Add setPassword to your adapter or remove passwordReset.`);
132
- }
133
- setAuthAdapter(authAdapter);
134
- setAppRoles(roles);
135
- setDefaultRole(defaultRole ?? null);
136
- setPrimaryField(primaryField);
137
- setEmailVerificationConfig(emailVerification ?? null);
138
- setEmailVerificationStore(sessions);
139
- setPasswordResetConfig(passwordReset ?? null);
140
- setPasswordPolicy(authConfig.passwordPolicy ?? {});
141
- setPasswordResetStore(sessions);
142
- const { setDeletionCancelTokenStore } = await import("./lib/deletionCancelToken");
143
- setDeletionCancelTokenStore(sessions);
144
- setAuthRateLimitStore(authRateLimit?.store ?? (enableRedis ? "redis" : "memory"));
145
- setMaxSessions(sessionPolicy.maxSessions ?? 6);
146
- setPersistSessionMetadata(sessionPolicy.persistSessionMetadata ?? true);
147
- setIncludeInactiveSessions(sessionPolicy.includeInactiveSessions ?? false);
148
- setTrackLastActive(sessionPolicy.trackLastActive ?? false);
149
- setRefreshTokenConfig(authConfig.refreshTokens ?? null);
150
- setMfaConfig(authConfig.mfa ?? null);
151
- if (oauthProviders)
152
- initOAuthProviders(oauthProviders);
153
- const configuredOAuth = getConfiguredOAuthProviders();
154
- // Start the account deletion worker when queued deletion is configured.
155
- // The worker runs in-process alongside the API server.
156
- if (authConfig.accountDeletion?.queued && enableAuthRoutes) {
157
- try {
158
- const { createWorker } = await import("./lib/queue");
159
- const appName_ = appName;
160
- const accountDeletion_ = authConfig.accountDeletion;
161
- createWorker(`${appName_}:account-deletions`, async (job) => {
162
- const { userId } = job.data;
163
- const adapter_ = authAdapter;
164
- if (accountDeletion_.onBeforeDelete)
165
- await accountDeletion_.onBeforeDelete(userId);
166
- if (adapter_.deleteUser)
167
- await adapter_.deleteUser(userId);
168
- if (accountDeletion_.onAfterDelete)
169
- await accountDeletion_.onAfterDelete(userId);
170
- }, { concurrency: 1 });
171
- }
172
- catch (err) {
173
- if (err?.message?.includes("bullmq is not installed")) {
174
- throw new Error("createApp: accountDeletion.queued requires BullMQ. Run: bun add bullmq");
175
- }
176
- throw err;
177
- }
178
- }
179
- // OAuth paths must bypass bearer auth — initiation and link routes are browser redirects,
180
- // callbacks come from external providers; none can send a bearer token header.
181
- const oauthBypass = configuredOAuth.flatMap((p) => [
182
- `/auth/${p}`,
183
- `/auth/${p}/callback`,
184
- `/auth/${p}/link`,
185
- ]);
186
- const DEFAULT_BYPASS = ["/docs", "/openapi.json", "/sw.js", "/health", "/", "/metrics"];
187
- // Add per-version docs/spec paths when versioning is configured
188
- const versionBypass = config.versioning
189
- ? config.versioning.versions.flatMap((v) => [`/${v}/docs`, `/${v}/openapi.json`])
190
- : [];
191
- const bearerAuthBypass = [...DEFAULT_BYPASS, ...versionBypass, ...oauthBypass, ...extraBypass];
192
- const app = new OpenAPIHono();
193
- app.use(requestId);
194
- // Set the validation error formatter on context so defaultHook and onError both pick it up
195
- const validationFormatter = config.validation?.formatError ?? defaultValidationErrorFormatter;
196
- app.use("*", async (c, next) => {
197
- c.set("validationErrorFormatter", validationFormatter);
198
- await next();
199
- });
200
- // Metrics collection middleware (before requestLogger so it captures all requests)
201
- if (config.metrics?.enabled) {
202
- if (!config.metrics.auth || config.metrics.auth === "none") {
203
- if (process.env.NODE_ENV === "production") {
204
- console.warn("[security] /metrics endpoint is enabled without auth. Configure metrics.auth to restrict access in production.");
205
- }
206
- }
207
- const { metricsCollector } = await import("./middleware/metrics");
208
- app.use(metricsCollector({
209
- excludePaths: config.metrics.excludePaths,
210
- normalizePath: config.metrics.normalizePath,
211
- }));
212
- }
213
- const loggingConfig = config.logging ?? {};
214
- if (loggingConfig.enabled !== false) {
215
- app.use(requestLogger({
216
- onLog: loggingConfig.onLog,
217
- level: loggingConfig.level,
218
- excludePaths: loggingConfig.excludePaths,
219
- excludeMethods: loggingConfig.excludeMethods,
220
- }));
221
- }
222
- const headerOpts = {};
223
- if (securityConfig.headers?.contentSecurityPolicy) {
224
- headerOpts["Content-Security-Policy"] = securityConfig.headers.contentSecurityPolicy;
225
- }
226
- if (securityConfig.headers?.permissionsPolicy) {
227
- headerOpts["Permissions-Policy"] = securityConfig.headers.permissionsPolicy;
228
- }
229
- app.use(secureHeaders());
230
- if (Object.keys(headerOpts).length > 0) {
231
- app.use(async (c, next) => {
232
- await next();
233
- for (const [k, v] of Object.entries(headerOpts)) {
234
- c.res.headers.set(k, v);
235
- }
236
- });
237
- }
238
- const corsAllowHeaders = ["Content-Type", "Authorization", HEADER_USER_TOKEN, HEADER_REFRESH_TOKEN];
239
- if (securityConfig.csrf?.enabled)
240
- corsAllowHeaders.push(HEADER_CSRF_TOKEN);
241
- app.use(cors({ origin: corsOrigins, allowHeaders: corsAllowHeaders, exposeHeaders: ["x-cache", HEADER_REQUEST_ID], credentials: true }));
242
- if ((botCfg.blockList?.length ?? 0) > 0) {
243
- const { botProtection } = await import("./middleware/botProtection");
244
- app.use(botProtection({ blockList: botCfg.blockList }));
245
- }
246
- app.use(rateLimit({ ...rlConfig, fingerprintLimit: botCfg.fingerprintRateLimit ?? false }));
247
- if (enableBearerAuth) {
248
- app.use(async (c, next) => {
249
- const path = c.req.path;
250
- if (bearerAuthBypass.includes(path)) {
251
- return next();
252
- }
253
- return bearerAuth(c, next);
254
- });
255
- }
256
- app.use(identify);
257
- // Signing config — make available to pagination, identify, and other lib modules
258
- if (securityConfig.signing) {
259
- setSigningConfig(securityConfig.signing);
260
- }
261
- // CSRF protection (after identify so we can check for auth cookie presence)
262
- if (securityConfig.csrf?.enabled) {
263
- setCsrfEnabled(true);
264
- const { csrfProtection } = await import("./middleware/csrf");
265
- const csrfExemptPaths = [
266
- ...oauthBypass.filter(p => p.includes("/callback")),
267
- ...(securityConfig.csrf.exemptPaths ?? []),
268
- ];
269
- app.use(csrfProtection({
270
- exemptPaths: csrfExemptPaths,
271
- checkOrigin: securityConfig.csrf.checkOrigin ?? true,
272
- allowedOrigins: corsOrigins,
273
- }));
274
- }
275
- // Tenant resolution middleware (after identify, before user middleware + routes)
276
- if (config.tenancy) {
277
- if (!config.tenancy.onResolve) {
278
- if (process.env.NODE_ENV === "production") {
279
- throw new Error("[security] Tenancy is configured without an onResolve callback. " +
280
- "In production, onResolve is required to validate tenant IDs and prevent cross-tenant access. " +
281
- "Provide tenancy.onResolve or remove the tenancy config.");
282
- }
283
- else {
284
- console.warn("[security] Tenancy is configured without an onResolve callback — " +
285
- "tenant IDs will be trusted without validation. This is unsafe in production.");
286
- }
287
- }
288
- const { createTenantMiddleware } = await import("./middleware/tenant");
289
- app.use(createTenantMiddleware(config.tenancy));
290
- }
291
- for (const mw of middleware)
292
- app.use(mw);
293
- if (authConfig.mfa?.required) {
294
- const { requireMfaSetup } = await import("./middleware/requireMfaSetup");
295
- app.use(requireMfaSetup);
296
- }
297
- setAppName(appName);
298
- // Schema pre-loading — import shared schema files before routes so registerSchema /
299
- // registerSchemas calls run first, guaranteeing $ref instead of inline shapes.
300
- const msConfig = config.modelSchemas;
301
- if (msConfig) {
302
- const { paths, registration = "auto" } = typeof msConfig === "string" || Array.isArray(msConfig)
303
- ? { paths: msConfig, registration: "auto" }
304
- : msConfig;
305
- const pathArray = paths ? (Array.isArray(paths) ? paths : [paths]) : [];
306
- for (const entry of pathArray) {
307
- // Normalize to forward slashes so splitting works on both Windows and Unix.
308
- const normalized = entry.replaceAll("\\", "/");
309
- // Split glob patterns: everything before the first wildcard segment is the cwd.
310
- let cwd;
311
- let pattern;
312
- if (!normalized.includes("*")) {
313
- cwd = normalized;
314
- pattern = "**/*.ts";
315
- }
316
- else {
317
- const parts = normalized.split("/");
318
- const starIdx = parts.findIndex((p) => p.includes("*"));
319
- cwd = parts.slice(0, starIdx).join("/");
320
- pattern = parts.slice(starIdx).join("/");
321
- }
322
- const schemaGlob = new Bun.Glob(pattern);
323
- for await (const file of schemaGlob.scan({ cwd })) {
324
- const mod = await import(`${cwd}/${file}`);
325
- if (registration === "auto") {
326
- for (const [exportName, value] of Object.entries(mod)) {
327
- maybeAutoRegister(exportName, value);
328
- }
329
- }
330
- // "explicit": file imported; any registerSchema/registerSchemas calls inside already ran
331
- }
332
- }
333
- }
334
- // Core routes (auth, etc.)
335
- const coreRoutesDir = import.meta.dir + "/routes";
336
- const coreGlob = new Bun.Glob("*.ts");
337
- for await (const file of coreGlob.scan({ cwd: coreRoutesDir })) {
338
- if (file === "auth.ts")
339
- continue; // mounted separately below via createAuthRouter
340
- if (file === "oauth.ts")
341
- continue; // mounted separately below
342
- if (file === "mfa.ts")
343
- continue; // mounted separately below when mfa is configured
344
- if (file === "jobs.ts")
345
- continue; // mounted separately below when jobs.statusEndpoint is true
346
- const mod = await import(`${coreRoutesDir}/${file}`);
347
- if (mod.router)
348
- app.route("/", mod.router);
349
- }
350
- if (enableAuthRoutes) {
351
- const { createAuthRouter } = await import(`${coreRoutesDir}/auth`);
352
- app.route("/", createAuthRouter({ primaryField, emailVerification, passwordReset, rateLimit: authRateLimit, accountDeletion: authConfig.accountDeletion, refreshTokens: authConfig.refreshTokens }));
353
- }
354
- if (configuredOAuth.length > 0) {
355
- const { createOAuthRouter } = await import(`${coreRoutesDir}/oauth`);
356
- app.route("/", createOAuthRouter(configuredOAuth, postOAuthRedirect));
357
- }
358
- if (authConfig.mfa && enableAuthRoutes) {
359
- const { setMfaChallengeStore, setMfaChallengeSqliteDb } = await import("./lib/mfaChallenge");
360
- setMfaChallengeStore(sessions);
361
- if (sessions === "sqlite") {
362
- const { getDb } = await import("./adapters/sqliteAuth");
363
- setMfaChallengeSqliteDb(getDb());
364
- }
365
- const { createMfaRouter } = await import(`${coreRoutesDir}/mfa`);
366
- app.route("/", createMfaRouter({ rateLimit: authRateLimit }));
367
- }
368
- if (config.jobs?.statusEndpoint) {
369
- const { createJobsRouter } = await import(`${coreRoutesDir}/jobs`);
370
- app.route("/", createJobsRouter(config.jobs));
371
- }
372
- if (config.metrics?.enabled) {
373
- const { createMetricsRouter } = await import(`${coreRoutesDir}/metrics`);
374
- app.route("/", createMetricsRouter({
375
- auth: config.metrics.auth,
376
- queues: config.metrics.queues,
377
- }));
378
- }
379
- if (config.groups?.managementRoutes) {
380
- const { createGroupsRouter } = await import(`${coreRoutesDir}/groups`);
381
- app.route("/", createGroupsRouter(config.groups));
382
- }
383
- if (config.upload) {
384
- const { storage, presignedUrls, ...uploadOpts } = config.upload;
385
- setStorageAdapter(storage);
386
- setUploadConfig(uploadOpts);
387
- if (presignedUrls) {
388
- const { createUploadsRouter } = await import(`${coreRoutesDir}/uploads`);
389
- const presignConfig = presignedUrls === true ? {} : presignedUrls;
390
- app.route("/", createUploadsRouter(presignConfig));
391
- }
392
- }
393
- // Helper to register standard security schemes on an OpenAPI registry
394
- const registerSecuritySchemes = (registry) => {
395
- registry.registerComponent("securitySchemes", "cookieAuth", {
396
- type: "apiKey",
397
- in: "cookie",
398
- name: "token",
399
- description: "Session cookie set automatically on login/register.",
400
- });
401
- registry.registerComponent("securitySchemes", "userToken", {
402
- type: "apiKey",
403
- in: "header",
404
- name: "x-user-token",
405
- description: "JWT session token passed as the x-user-token request header (alternative to the session cookie).",
406
- });
407
- registry.registerComponent("securitySchemes", "bearerAuth", {
408
- type: "http",
409
- scheme: "bearer",
410
- 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.",
411
- });
412
- };
413
- if (config.versioning) {
414
- // Version-aware route discovery — each version gets its own OpenAPIHono instance
415
- const { versions, sharedDir = "shared", defaultVersion = versions[versions.length - 1] } = config.versioning;
416
- const { setVersionPrefix, clearVersionPrefix, getVersionToken, drainCapturedTokens, assertCapturedTokens } = await import("./lib/createRoute");
417
- const { defaultHook } = await import("./lib/context");
418
- const { stripUnreferencedSchemas } = await import("./lib/stripUnreferencedSchemas");
419
- // Import shared routes with no prefix — schemas stay unprefixed (version-agnostic)
420
- let sharedMods = [];
421
- if (sharedDir !== false) {
422
- const sharedRoutesDir = `${routesDir}/${sharedDir}`;
423
- try {
424
- const sharedGlob = new Bun.Glob("**/*.ts");
425
- const sharedFiles = [];
426
- for await (const file of sharedGlob.scan({ cwd: sharedRoutesDir })) {
427
- sharedFiles.push(file);
428
- }
429
- sharedMods = await Promise.all(sharedFiles.map(async (file) => ({ file, mod: await import(`${sharedRoutesDir}/${file}`) })));
430
- }
431
- catch {
432
- // sharedDir doesn't exist — fine
433
- }
434
- }
435
- // Drain any tokens captured during shared route imports (token=null, correct since no prefix was set)
436
- // to prevent null tokens from bleeding into per-version assertions below.
437
- drainCapturedTokens();
438
- // For each version sequentially: set prefix, import routes, mount on isolated OpenAPIHono
439
- for (const version of versions) {
440
- setVersionPrefix(version);
441
- const expectedToken = getVersionToken();
442
- const vApp = new OpenAPIHono({ defaultHook });
443
- const versionRoutesDir = `${routesDir}/${version}`;
444
- const versionFiles = [];
445
- try {
446
- const versionGlob = new Bun.Glob("**/*.ts");
447
- for await (const file of versionGlob.scan({ cwd: versionRoutesDir })) {
448
- versionFiles.push(file);
449
- }
450
- }
451
- catch {
452
- // version dir doesn't exist — fine
453
- }
454
- // Import all version route files in parallel
455
- const versionMods = await Promise.all(versionFiles.map(async (file) => ({ file, mod: await import(`${versionRoutesDir}/${file}`) })));
456
- // Assert version token to catch top-level await interleaving bugs at startup
457
- assertCapturedTokens(drainCapturedTokens(), expectedToken);
458
- // Mount version-specific routes (sorted by priority)
459
- versionMods
460
- .sort((a, b) => (a.mod.priority ?? Infinity) - (b.mod.priority ?? Infinity))
461
- .forEach(({ mod }) => {
462
- if (mod.router)
463
- vApp.route("/", mod.router);
464
- });
465
- // Mount shared routes on this versioned app
466
- for (const { mod } of sharedMods) {
467
- if (mod.router)
468
- vApp.route("/", mod.router);
469
- }
470
- registerSecuritySchemes(vApp.openAPIRegistry);
471
- // Serve per-version spec stripped of schemas from other versions
472
- vApp.get("/openapi.json", (c) => {
473
- const spec = vApp.getOpenAPIDocument({
474
- openapi: "3.0.0",
475
- info: { title: `${appName} ${version.toUpperCase()}`, version: openApiVersion },
476
- });
477
- return c.json(stripUnreferencedSchemas(spec));
478
- });
479
- // Per-version Scalar docs
480
- vApp.get("/docs", Scalar({ url: `/${version}/openapi.json` }));
481
- clearVersionPrefix();
482
- // Mount versioned app under /v1, /v2, etc.
483
- app.route(`/${version}`, vApp);
484
- }
485
- // Root /docs → version selector page
486
- app.get("/docs", (c) => {
487
- const links = versions
488
- .map((v) => `<li><a href="/${v}/docs" style="font-size:1.1em">${v.toUpperCase()}</a></li>`)
489
- .join("\n");
490
- const html = `<!DOCTYPE html>
491
- <html lang="en">
492
- <head><meta charset="utf-8"><title>${appName} — API Docs</title>
493
- <style>body{font-family:sans-serif;padding:2rem}ul{list-style:none;padding:0}li{margin:.5rem 0}</style>
494
- </head>
495
- <body>
496
- <h1>${appName}</h1>
497
- <h2>API Documentation</h2>
498
- <ul>${links}</ul>
499
- </body></html>`;
500
- return c.html(html);
501
- });
502
- // Root /openapi.json → 302 to default version (no merged spec exists)
503
- app.get("/openapi.json", (c) => c.redirect(`/${defaultVersion}/openapi.json`, 302));
504
- }
505
- else {
506
- // Non-versioned path — existing behavior unchanged
507
- // Service routes — collect all, sort by optional exported `priority`, then mount
508
- const serviceGlob = new Bun.Glob("**/*.ts");
509
- const serviceFiles = [];
510
- for await (const file of serviceGlob.scan({ cwd: routesDir })) {
511
- serviceFiles.push(file);
512
- }
513
- const serviceMods = await Promise.all(serviceFiles.map(async (file) => ({
514
- file,
515
- mod: await import(`${routesDir}/${file}`),
516
- })));
517
- serviceMods
518
- .sort((a, b) => (a.mod.priority ?? Infinity) - (b.mod.priority ?? Infinity))
519
- .forEach(({ mod }) => {
520
- if (mod.router)
521
- app.route("/", mod.router);
522
- });
523
- registerSecuritySchemes(app.openAPIRegistry);
524
- app.doc("/openapi.json", { openapi: "3.0.0", info: { title: appName, version: openApiVersion } });
525
- app.get("/docs", Scalar({ url: "/openapi.json" }));
526
- }
527
- app.onError((err, c) => {
528
- const reqId = c.get("requestId") ?? "unknown";
529
- // ValidationError extends HttpError — must check first or the details payload is lost
530
- if (err instanceof ValidationError) {
531
- const fmt = c.get("validationErrorFormatter") ?? defaultValidationErrorFormatter;
532
- try {
533
- return c.json(fmt(err.issues, reqId), 400);
534
- }
535
- catch {
536
- return c.json(defaultValidationErrorFormatter(err.issues, reqId), 400);
537
- }
538
- }
539
- if (err instanceof HttpError) {
540
- return c.json({ error: err.message, requestId: reqId }, err.status);
541
- }
542
- console.error(err);
543
- return c.json({ error: "Internal Server Error", requestId: reqId }, 500);
544
- });
545
- app.notFound((c) => c.json({ error: "Not Found", requestId: c.get("requestId") ?? "unknown" }, 404));
546
- app.get("/sw.js", (c) => c.body("", 200, { "Content-Type": "application/javascript" }));
547
- return app;
548
- };
@@ -1,5 +0,0 @@
1
- export { connectMongo, connectAuthMongo, connectAppMongo, disconnectMongo, authConnection, appConnection, mongoose } from "../lib/mongo";
2
- export { mongoAuthAdapter } from "../adapters/mongoAuth";
3
- export { AuthUser } from "../models/AuthUser";
4
- export { zodToMongoose } from "../lib/zodToMongoose";
5
- export type { ZodToMongooseConfig, ZodToMongooseRefConfig } from "../lib/zodToMongoose";
@@ -1,4 +0,0 @@
1
- export { connectMongo, connectAuthMongo, connectAppMongo, disconnectMongo, authConnection, appConnection, mongoose } from "../lib/mongo";
2
- export { mongoAuthAdapter } from "../adapters/mongoAuth";
3
- export { AuthUser } from "../models/AuthUser";
4
- export { zodToMongoose } from "../lib/zodToMongoose";
@@ -1,2 +0,0 @@
1
- export { createQueue, createWorker, createCronWorker, cleanupStaleSchedulers, getRegisteredCronNames, createDLQHandler } from "../lib/queue";
2
- export type { Job, CronSchedule, DLQOptions } from "../lib/queue";
@@ -1 +0,0 @@
1
- export { createQueue, createWorker, createCronWorker, cleanupStaleSchedulers, getRegisteredCronNames, createDLQHandler } from "../lib/queue";
@@ -1 +0,0 @@
1
- export { connectRedis, disconnectRedis, getRedis } from "../lib/redis";
@@ -1 +0,0 @@
1
- export { connectRedis, disconnectRedis, getRedis } from "../lib/redis";