@lastshotlabs/bunshot 0.0.27 → 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 (742) hide show
  1. package/.oclif.manifest.json +39 -0
  2. package/README.md +8282 -2147
  3. package/dist/cli/commands/init.js +690 -0
  4. package/dist/cli/index.js +6 -0
  5. package/dist/cli.js +4 -4
  6. package/dist/packages/bunshot-admin/src/index.d.ts +15 -0
  7. package/dist/packages/bunshot-admin/src/index.js +11 -0
  8. package/dist/packages/bunshot-admin/src/lib/resourceTypes.d.ts +8 -0
  9. package/dist/packages/bunshot-admin/src/lib/resourceTypes.js +33 -0
  10. package/dist/packages/bunshot-admin/src/lib/typedRoute.d.ts +14 -0
  11. package/dist/packages/bunshot-admin/src/lib/typedRoute.js +17 -0
  12. package/dist/packages/bunshot-admin/src/plugin.d.ts +4 -0
  13. package/dist/packages/bunshot-admin/src/plugin.js +46 -0
  14. package/dist/packages/bunshot-admin/src/providers/auth0Access.d.ts +6 -0
  15. package/dist/packages/bunshot-admin/src/providers/auth0Access.js +32 -0
  16. package/dist/packages/bunshot-admin/src/routes/admin.d.ts +10 -0
  17. package/dist/packages/bunshot-admin/src/routes/admin.js +923 -0
  18. package/dist/packages/bunshot-admin/src/routes/mail.d.ts +6 -0
  19. package/dist/packages/bunshot-admin/src/routes/mail.js +114 -0
  20. package/dist/packages/bunshot-admin/src/routes/permissions.d.ts +8 -0
  21. package/dist/packages/bunshot-admin/src/routes/permissions.js +315 -0
  22. package/dist/packages/bunshot-admin/src/types/config.d.ts +16 -0
  23. package/dist/packages/bunshot-admin/src/types/config.js +37 -0
  24. package/dist/packages/bunshot-admin/src/types/env.d.ts +14 -0
  25. package/dist/packages/bunshot-admin/src/types/provider.d.ts +1 -0
  26. package/dist/packages/bunshot-admin/src/types/provider.js +4 -0
  27. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.d.ts +66 -0
  28. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.js +1063 -0
  29. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.d.ts +2 -0
  30. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.js +536 -0
  31. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.d.ts +88 -0
  32. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.js +1366 -0
  33. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.d.ts +2 -0
  34. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.js +23 -0
  35. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.d.ts +5 -0
  36. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.js +131 -0
  37. package/dist/packages/bunshot-auth/src/bootstrap.d.ts +38 -0
  38. package/dist/packages/bunshot-auth/src/bootstrap.js +384 -0
  39. package/dist/packages/bunshot-auth/src/config/appConfig.d.ts +3 -0
  40. package/dist/packages/bunshot-auth/src/config/appConfig.js +4 -0
  41. package/dist/packages/bunshot-auth/src/config/authConfig.d.ts +478 -0
  42. package/dist/packages/bunshot-auth/src/config/authConfig.js +46 -0
  43. package/dist/packages/bunshot-auth/src/config/configLock.d.ts +2 -0
  44. package/dist/packages/bunshot-auth/src/config/configLock.js +10 -0
  45. package/dist/packages/bunshot-auth/src/index.d.ts +25 -0
  46. package/dist/packages/bunshot-auth/src/index.js +23 -0
  47. package/dist/packages/bunshot-auth/src/infra/mongo.d.ts +15 -0
  48. package/dist/packages/bunshot-auth/src/infra/mongo.js +44 -0
  49. package/dist/packages/bunshot-auth/src/infra/queue.d.ts +14 -0
  50. package/dist/packages/bunshot-auth/src/infra/queue.js +27 -0
  51. package/dist/packages/bunshot-auth/src/infra/redis.d.ts +5 -0
  52. package/dist/packages/bunshot-auth/src/infra/redis.js +15 -0
  53. package/dist/packages/bunshot-auth/src/infra/signing.d.ts +7 -0
  54. package/dist/packages/bunshot-auth/src/infra/signing.js +8 -0
  55. package/dist/packages/bunshot-auth/src/lib/accountLockout.d.ts +34 -0
  56. package/dist/packages/bunshot-auth/src/lib/accountLockout.js +244 -0
  57. package/dist/packages/bunshot-auth/src/lib/adapterTiers.d.ts +1 -0
  58. package/dist/packages/bunshot-auth/src/lib/adapterTiers.js +1 -0
  59. package/dist/packages/bunshot-auth/src/lib/authAdapter.d.ts +1 -0
  60. package/dist/packages/bunshot-auth/src/lib/authAdapter.js +1 -0
  61. package/dist/packages/bunshot-auth/src/lib/authContext.d.ts +15 -0
  62. package/dist/packages/bunshot-auth/src/lib/authContext.js +1 -0
  63. package/dist/packages/bunshot-auth/src/lib/authEventBus.d.ts +4 -0
  64. package/dist/packages/bunshot-auth/src/lib/authEventBus.js +15 -0
  65. package/dist/packages/bunshot-auth/src/lib/authRateLimit.d.ts +28 -0
  66. package/dist/packages/bunshot-auth/src/lib/authRateLimit.js +205 -0
  67. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.d.ts +8 -2
  68. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.js +22 -9
  69. package/dist/packages/bunshot-auth/src/lib/cache.d.ts +12 -0
  70. package/dist/packages/bunshot-auth/src/lib/cache.js +120 -0
  71. package/dist/packages/bunshot-auth/src/lib/clientIp.d.ts +4 -0
  72. package/dist/{lib → packages/bunshot-auth/src/lib}/clientIp.js +14 -7
  73. package/dist/packages/bunshot-auth/src/lib/cookieOptions.d.ts +27 -0
  74. package/dist/packages/bunshot-auth/src/lib/cookieOptions.js +33 -0
  75. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.d.ts +40 -0
  76. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.js +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/{lib → packages/bunshot-auth/src/lib}/logger.js +3 -3
  93. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.d.ts +5 -4
  94. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.js +6 -10
  95. package/dist/packages/bunshot-auth/src/lib/magicLink.d.ts +13 -0
  96. package/dist/packages/bunshot-auth/src/lib/magicLink.js +145 -0
  97. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.d.ts +60 -0
  98. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.js +419 -0
  99. package/dist/packages/bunshot-auth/src/lib/oauth.d.ts +82 -0
  100. package/dist/packages/bunshot-auth/src/lib/oauth.js +177 -0
  101. package/dist/packages/bunshot-auth/src/lib/oauthCode.d.ts +19 -0
  102. package/dist/packages/bunshot-auth/src/lib/oauthCode.js +182 -0
  103. package/dist/packages/bunshot-auth/src/lib/oauthReauth.d.ts +19 -0
  104. package/dist/packages/bunshot-auth/src/lib/oauthReauth.js +255 -0
  105. package/dist/packages/bunshot-auth/src/lib/organization.d.ts +66 -0
  106. package/dist/packages/bunshot-auth/src/lib/organization.js +225 -0
  107. package/dist/packages/bunshot-auth/src/lib/passwordHistory.d.ts +12 -0
  108. package/dist/packages/bunshot-auth/src/lib/passwordHistory.js +31 -0
  109. package/dist/packages/bunshot-auth/src/lib/resetPassword.d.ts +20 -0
  110. package/dist/packages/bunshot-auth/src/lib/resetPassword.js +148 -0
  111. package/dist/packages/bunshot-auth/src/lib/roles.d.ts +9 -0
  112. package/dist/packages/bunshot-auth/src/lib/roles.js +93 -0
  113. package/dist/packages/bunshot-auth/src/lib/saml.d.ts +29 -0
  114. package/dist/packages/bunshot-auth/src/lib/saml.js +73 -0
  115. package/dist/packages/bunshot-auth/src/lib/samlRequestId.d.ts +13 -0
  116. package/dist/packages/bunshot-auth/src/lib/samlRequestId.js +129 -0
  117. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.d.ts +7 -7
  118. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.js +15 -13
  119. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.d.ts +22 -0
  120. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.js +65 -0
  121. package/dist/packages/bunshot-auth/src/lib/session.d.ts +45 -0
  122. package/dist/packages/bunshot-auth/src/lib/session.js +1211 -0
  123. package/dist/packages/bunshot-auth/src/lib/storeInfra.d.ts +26 -0
  124. package/dist/packages/bunshot-auth/src/lib/storeInfra.js +18 -0
  125. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.d.ts +3 -2
  126. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.js +2 -5
  127. package/dist/packages/bunshot-auth/src/lib/validateAdapter.d.ts +16 -0
  128. package/dist/packages/bunshot-auth/src/lib/validateAdapter.js +161 -0
  129. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.d.ts +13 -0
  130. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.js +58 -0
  131. package/dist/{middleware → packages/bunshot-auth/src/middleware}/csrf.d.ts +5 -4
  132. package/dist/packages/bunshot-auth/src/middleware/csrf.js +138 -0
  133. package/dist/packages/bunshot-auth/src/middleware/identify.d.ts +4 -0
  134. package/dist/packages/bunshot-auth/src/middleware/identify.js +124 -0
  135. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.d.ts +2 -2
  136. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.js +10 -8
  137. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.d.ts +2 -2
  138. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.js +20 -16
  139. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.d.ts +2 -2
  140. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.js +6 -6
  141. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.d.ts +2 -2
  142. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.js +8 -7
  143. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.d.ts +2 -2
  144. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.js +7 -6
  145. package/dist/packages/bunshot-auth/src/middleware/scimAuth.d.ts +8 -0
  146. package/dist/packages/bunshot-auth/src/middleware/scimAuth.js +29 -0
  147. package/dist/packages/bunshot-auth/src/middleware/userAuth.d.ts +3 -0
  148. package/dist/packages/bunshot-auth/src/middleware/userAuth.js +6 -0
  149. package/dist/{models → packages/bunshot-auth/src/models}/AuthUser.d.ts +12 -8
  150. package/dist/packages/bunshot-auth/src/models/AuthUser.js +53 -0
  151. package/dist/packages/bunshot-auth/src/models/Group.d.ts +19 -0
  152. package/dist/packages/bunshot-auth/src/models/Group.js +22 -0
  153. package/dist/{models → packages/bunshot-auth/src/models}/GroupMembership.d.ts +6 -8
  154. package/dist/packages/bunshot-auth/src/models/GroupMembership.js +19 -0
  155. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.d.ts +1 -1
  156. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.js +5 -5
  157. package/dist/packages/bunshot-auth/src/models/TenantRole.d.ts +13 -0
  158. package/dist/packages/bunshot-auth/src/models/TenantRole.js +17 -0
  159. package/dist/packages/bunshot-auth/src/plugin.d.ts +4 -0
  160. package/dist/packages/bunshot-auth/src/plugin.js +274 -0
  161. package/dist/packages/bunshot-auth/src/routes/auth.d.ts +15 -0
  162. package/dist/packages/bunshot-auth/src/routes/auth.js +1624 -0
  163. package/dist/packages/bunshot-auth/src/routes/groups.d.ts +4 -0
  164. package/dist/packages/bunshot-auth/src/routes/groups.js +481 -0
  165. package/dist/packages/bunshot-auth/src/routes/m2m.d.ts +2 -0
  166. package/dist/packages/bunshot-auth/src/routes/m2m.js +145 -0
  167. package/dist/packages/bunshot-auth/src/routes/mfa.d.ts +6 -0
  168. package/dist/packages/bunshot-auth/src/routes/mfa.js +991 -0
  169. package/dist/packages/bunshot-auth/src/routes/oauth.d.ts +3 -0
  170. package/dist/packages/bunshot-auth/src/routes/oauth.js +1727 -0
  171. package/dist/packages/bunshot-auth/src/routes/oidc.d.ts +2 -0
  172. package/dist/packages/bunshot-auth/src/routes/oidc.js +84 -0
  173. package/dist/packages/bunshot-auth/src/routes/organizations.d.ts +3 -0
  174. package/dist/packages/bunshot-auth/src/routes/organizations.js +741 -0
  175. package/dist/packages/bunshot-auth/src/routes/passkey.d.ts +2 -0
  176. package/dist/packages/bunshot-auth/src/routes/passkey.js +199 -0
  177. package/dist/packages/bunshot-auth/src/routes/saml.d.ts +2 -0
  178. package/dist/packages/bunshot-auth/src/routes/saml.js +226 -0
  179. package/dist/packages/bunshot-auth/src/routes/scim.d.ts +3 -0
  180. package/dist/packages/bunshot-auth/src/routes/scim.js +588 -0
  181. package/dist/packages/bunshot-auth/src/runtime.d.ts +52 -0
  182. package/dist/packages/bunshot-auth/src/runtime.js +11 -0
  183. package/dist/{schemas → packages/bunshot-auth/src/schemas}/auth.d.ts +4 -5
  184. package/dist/packages/bunshot-auth/src/schemas/auth.js +24 -0
  185. package/dist/packages/bunshot-auth/src/schemas/error.d.ts +10 -0
  186. package/dist/packages/bunshot-auth/src/schemas/error.js +10 -0
  187. package/dist/packages/bunshot-auth/src/schemas/success.d.ts +10 -0
  188. package/dist/packages/bunshot-auth/src/schemas/success.js +10 -0
  189. package/dist/packages/bunshot-auth/src/services/auth.d.ts +39 -0
  190. package/dist/packages/bunshot-auth/src/services/auth.js +378 -0
  191. package/dist/{services → packages/bunshot-auth/src/services}/mfa.d.ts +41 -17
  192. package/dist/{services → packages/bunshot-auth/src/services}/mfa.js +259 -183
  193. package/dist/packages/bunshot-auth/src/testing.d.ts +31 -0
  194. package/dist/packages/bunshot-auth/src/testing.js +23 -0
  195. package/dist/packages/bunshot-auth/src/types/adapter.d.ts +1 -0
  196. package/dist/packages/bunshot-auth/src/types/adapter.js +1 -0
  197. package/dist/packages/bunshot-auth/src/types/config.d.ts +152 -0
  198. package/dist/packages/bunshot-auth/src/types/config.js +179 -0
  199. package/dist/{routes → packages/bunshot-auth/src/types}/groups.d.ts +2 -3
  200. package/dist/packages/bunshot-auth/src/types/groups.js +1 -0
  201. package/dist/packages/bunshot-auth/src/types/oauthCode.d.ts +6 -0
  202. package/dist/packages/bunshot-auth/src/types/oauthCode.js +1 -0
  203. package/dist/packages/bunshot-auth/src/types/oauthReauth.d.ts +13 -0
  204. package/dist/packages/bunshot-auth/src/types/oauthReauth.js +1 -0
  205. package/dist/packages/bunshot-auth/src/types/redis.d.ts +1 -0
  206. package/dist/packages/bunshot-auth/src/types/redis.js +1 -0
  207. package/dist/packages/bunshot-auth/src/types/saml.d.ts +10 -0
  208. package/dist/packages/bunshot-auth/src/types/saml.js +1 -0
  209. package/dist/packages/bunshot-auth/src/types/session.d.ts +18 -0
  210. package/dist/packages/bunshot-auth/src/types/session.js +1 -0
  211. package/dist/packages/bunshot-auth/src/types/store.d.ts +1 -0
  212. package/dist/packages/bunshot-auth/src/types/store.js +1 -0
  213. package/dist/packages/bunshot-core/src/adminProvider.d.ts +95 -0
  214. package/dist/packages/bunshot-core/src/adminProvider.js +1 -0
  215. package/dist/packages/bunshot-core/src/auditLog.d.ts +34 -0
  216. package/dist/packages/bunshot-core/src/auditLog.js +1 -0
  217. package/dist/packages/bunshot-core/src/auth-adapter.d.ts +227 -0
  218. package/dist/packages/bunshot-core/src/auth-adapter.js +4 -0
  219. package/dist/packages/bunshot-core/src/authVariables.d.ts +14 -0
  220. package/dist/packages/bunshot-core/src/authVariables.js +4 -0
  221. package/dist/packages/bunshot-core/src/cache.d.ts +12 -0
  222. package/dist/packages/bunshot-core/src/cache.js +21 -0
  223. package/dist/{lib → packages/bunshot-core/src}/captcha.d.ts +1 -10
  224. package/dist/packages/bunshot-core/src/captcha.js +1 -0
  225. package/dist/packages/bunshot-core/src/clearRegistry.d.ts +6 -0
  226. package/dist/packages/bunshot-core/src/clearRegistry.js +17 -0
  227. package/dist/packages/bunshot-core/src/clientIp.d.ts +3 -0
  228. package/dist/packages/bunshot-core/src/clientIp.js +45 -0
  229. package/dist/packages/bunshot-core/src/configLock.d.ts +4 -0
  230. package/dist/packages/bunshot-core/src/configLock.js +7 -0
  231. package/dist/packages/bunshot-core/src/configValidation.d.ts +22 -0
  232. package/dist/packages/bunshot-core/src/configValidation.js +39 -0
  233. package/dist/packages/bunshot-core/src/constants.js +10 -0
  234. package/dist/packages/bunshot-core/src/context/bunshotContext.d.ts +232 -0
  235. package/dist/packages/bunshot-core/src/context/bunshotContext.js +1 -0
  236. package/dist/packages/bunshot-core/src/context/contextAccess.d.ts +3 -0
  237. package/dist/packages/bunshot-core/src/context/contextAccess.js +16 -0
  238. package/dist/packages/bunshot-core/src/context/contextStore.d.ts +16 -0
  239. package/dist/packages/bunshot-core/src/context/contextStore.js +31 -0
  240. package/dist/packages/bunshot-core/src/context/frameworkConfig.d.ts +38 -0
  241. package/dist/packages/bunshot-core/src/context/frameworkConfig.js +1 -0
  242. package/dist/packages/bunshot-core/src/context/index.d.ts +4 -0
  243. package/dist/packages/bunshot-core/src/context/index.js +2 -0
  244. package/dist/packages/bunshot-core/src/context.d.ts +40 -0
  245. package/dist/packages/bunshot-core/src/context.js +35 -0
  246. package/dist/packages/bunshot-core/src/coreContracts.d.ts +47 -0
  247. package/dist/packages/bunshot-core/src/coreContracts.js +1 -0
  248. package/dist/packages/bunshot-core/src/coreRegistrar.d.ts +6 -0
  249. package/dist/packages/bunshot-core/src/coreRegistrar.js +42 -0
  250. package/dist/{lib → packages/bunshot-core/src}/createRoute.d.ts +4 -30
  251. package/dist/{lib → packages/bunshot-core/src}/createRoute.js +39 -88
  252. package/dist/packages/bunshot-core/src/cronRegistry.d.ts +11 -0
  253. package/dist/packages/bunshot-core/src/cronRegistry.js +1 -0
  254. package/dist/packages/bunshot-core/src/crypto.d.ts +43 -0
  255. package/dist/packages/bunshot-core/src/crypto.js +74 -0
  256. package/dist/packages/bunshot-core/src/csrf.d.ts +8 -0
  257. package/dist/packages/bunshot-core/src/csrf.js +1 -0
  258. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.d.ts +7 -0
  259. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.js +19 -0
  260. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.d.ts +6 -0
  261. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.js +40 -0
  262. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.d.ts +6 -0
  263. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.js +24 -0
  264. package/dist/packages/bunshot-core/src/emailTemplates.d.ts +5 -0
  265. package/dist/packages/bunshot-core/src/emailTemplates.js +10 -0
  266. package/dist/{lib/HttpError.d.ts → packages/bunshot-core/src/errors.d.ts} +4 -1
  267. package/dist/{lib/HttpError.js → packages/bunshot-core/src/errors.js} +7 -1
  268. package/dist/packages/bunshot-core/src/eventBus.d.ts +270 -0
  269. package/dist/packages/bunshot-core/src/eventBus.js +143 -0
  270. package/dist/packages/bunshot-core/src/idempotency.d.ts +18 -0
  271. package/dist/packages/bunshot-core/src/idempotency.js +1 -0
  272. package/dist/packages/bunshot-core/src/index.d.ts +60 -0
  273. package/dist/packages/bunshot-core/src/index.js +34 -0
  274. package/dist/packages/bunshot-core/src/mail.d.ts +14 -0
  275. package/dist/packages/bunshot-core/src/mail.js +8 -0
  276. package/dist/packages/bunshot-core/src/memoryEviction.d.ts +24 -0
  277. package/dist/packages/bunshot-core/src/memoryEviction.js +52 -0
  278. package/dist/packages/bunshot-core/src/pagination.d.ts +45 -0
  279. package/dist/packages/bunshot-core/src/pagination.js +61 -0
  280. package/dist/packages/bunshot-core/src/permissions.d.ts +64 -0
  281. package/dist/packages/bunshot-core/src/permissions.js +27 -0
  282. package/dist/packages/bunshot-core/src/plugin.d.ts +44 -0
  283. package/dist/packages/bunshot-core/src/plugin.js +1 -0
  284. package/dist/packages/bunshot-core/src/rateLimit.d.ts +5 -0
  285. package/dist/packages/bunshot-core/src/rateLimit.js +18 -0
  286. package/dist/packages/bunshot-core/src/redis.d.ts +21 -0
  287. package/dist/packages/bunshot-core/src/redis.js +1 -0
  288. package/dist/packages/bunshot-core/src/routeAuth.d.ts +5 -0
  289. package/dist/packages/bunshot-core/src/routeAuth.js +11 -0
  290. package/dist/packages/bunshot-core/src/routeOverrides.d.ts +24 -0
  291. package/dist/packages/bunshot-core/src/routeOverrides.js +25 -0
  292. package/dist/packages/bunshot-core/src/routerAdapter.d.ts +6 -0
  293. package/dist/packages/bunshot-core/src/routerAdapter.js +56 -0
  294. package/dist/packages/bunshot-core/src/secrets.d.ts +48 -0
  295. package/dist/packages/bunshot-core/src/secrets.js +8 -0
  296. package/dist/packages/bunshot-core/src/signing.d.ts +41 -0
  297. package/dist/packages/bunshot-core/src/signing.js +1 -0
  298. package/dist/packages/bunshot-core/src/sse.d.ts +36 -0
  299. package/dist/packages/bunshot-core/src/sse.js +1 -0
  300. package/dist/packages/bunshot-core/src/storageAdapter.js +1 -0
  301. package/dist/packages/bunshot-core/src/storeInfra.d.ts +44 -0
  302. package/dist/packages/bunshot-core/src/storeInfra.js +18 -0
  303. package/dist/packages/bunshot-core/src/storeType.d.ts +7 -0
  304. package/dist/packages/bunshot-core/src/storeType.js +1 -0
  305. package/dist/packages/bunshot-core/src/testing.d.ts +1 -0
  306. package/dist/packages/bunshot-core/src/testing.js +1 -0
  307. package/dist/packages/bunshot-core/src/uploadRegistry.d.ts +23 -0
  308. package/dist/packages/bunshot-core/src/uploadRegistry.js +4 -0
  309. package/dist/packages/bunshot-core/src/userResolver.d.ts +5 -0
  310. package/dist/packages/bunshot-core/src/userResolver.js +14 -0
  311. package/dist/packages/bunshot-core/src/wsMessages.d.ts +42 -0
  312. package/dist/packages/bunshot-core/src/wsMessages.js +4 -0
  313. package/dist/packages/bunshot-permissions/src/adapters/memory.d.ts +7 -0
  314. package/dist/packages/bunshot-permissions/src/adapters/memory.js +73 -0
  315. package/dist/packages/bunshot-permissions/src/index.d.ts +10 -0
  316. package/dist/packages/bunshot-permissions/src/index.js +5 -0
  317. package/dist/packages/bunshot-permissions/src/lib/bootstrap.d.ts +7 -0
  318. package/dist/packages/bunshot-permissions/src/lib/bootstrap.js +12 -0
  319. package/dist/packages/bunshot-permissions/src/lib/evaluator.d.ts +10 -0
  320. package/dist/packages/bunshot-permissions/src/lib/evaluator.js +165 -0
  321. package/dist/packages/bunshot-permissions/src/lib/registry.d.ts +2 -0
  322. package/dist/packages/bunshot-permissions/src/lib/registry.js +31 -0
  323. package/dist/packages/bunshot-permissions/src/lib/validation.d.ts +1 -0
  324. package/dist/packages/bunshot-permissions/src/lib/validation.js +1 -0
  325. package/dist/packages/bunshot-permissions/src/types/adapter.d.ts +1 -0
  326. package/dist/packages/bunshot-permissions/src/types/adapter.js +1 -0
  327. package/dist/packages/bunshot-permissions/src/types/evaluator.d.ts +1 -0
  328. package/dist/packages/bunshot-permissions/src/types/evaluator.js +1 -0
  329. package/dist/packages/bunshot-permissions/src/types/models.d.ts +1 -0
  330. package/dist/packages/bunshot-permissions/src/types/models.js +1 -0
  331. package/dist/packages/bunshot-permissions/src/types/registry.d.ts +1 -0
  332. package/dist/packages/bunshot-permissions/src/types/registry.js +1 -0
  333. package/dist/packages/bunshot-postgres/src/adapter.d.ts +6 -0
  334. package/dist/packages/bunshot-postgres/src/adapter.js +794 -0
  335. package/dist/packages/bunshot-postgres/src/connection.d.ts +15 -0
  336. package/dist/packages/bunshot-postgres/src/connection.js +16 -0
  337. package/dist/packages/bunshot-postgres/src/index.d.ts +4 -0
  338. package/dist/packages/bunshot-postgres/src/index.js +2 -0
  339. package/dist/packages/bunshot-postgres/src/schema.d.ts +997 -0
  340. package/dist/packages/bunshot-postgres/src/schema.js +105 -0
  341. package/dist/src/app.d.ts +230 -0
  342. package/dist/src/app.js +182 -0
  343. package/dist/src/cli/commands/init.d.ts +10 -0
  344. package/dist/src/cli/commands/init.js +709 -0
  345. package/dist/src/cli/index.d.ts +1 -0
  346. package/dist/src/cli/index.js +3 -0
  347. package/dist/src/entrypoints/mongo.d.ts +6 -0
  348. package/dist/src/entrypoints/mongo.js +4 -0
  349. package/dist/src/entrypoints/queue.d.ts +2 -0
  350. package/dist/src/entrypoints/queue.js +1 -0
  351. package/dist/src/entrypoints/redis.d.ts +1 -0
  352. package/dist/src/entrypoints/redis.js +1 -0
  353. package/dist/{adapters → src/framework/adapters}/localStorage.d.ts +1 -1
  354. package/dist/{adapters → src/framework/adapters}/localStorage.js +10 -10
  355. package/dist/src/framework/adapters/memoryStorage.d.ts +2 -0
  356. package/dist/src/framework/adapters/memoryStorage.js +45 -0
  357. package/dist/{adapters → src/framework/adapters}/s3Storage.d.ts +1 -1
  358. package/dist/{adapters → src/framework/adapters}/s3Storage.js +12 -12
  359. package/dist/src/framework/admin/bunshotAccess.d.ts +2 -0
  360. package/dist/src/framework/admin/bunshotAccess.js +23 -0
  361. package/dist/src/framework/admin/bunshotUsers.d.ts +2 -0
  362. package/dist/src/framework/admin/bunshotUsers.js +103 -0
  363. package/dist/src/framework/admin/index.d.ts +7 -0
  364. package/dist/src/framework/admin/index.js +21 -0
  365. package/dist/src/framework/boundaryAdapters/cacheFactories.d.ts +13 -0
  366. package/dist/src/framework/boundaryAdapters/cacheFactories.js +86 -0
  367. package/dist/src/framework/boundaryAdapters/index.d.ts +2 -0
  368. package/dist/src/framework/boundaryAdapters/index.js +1 -0
  369. package/dist/src/framework/boundaryAdapters.d.ts +17 -0
  370. package/dist/src/framework/boundaryAdapters.js +62 -0
  371. package/dist/src/framework/buildContext.d.ts +33 -0
  372. package/dist/src/framework/buildContext.js +119 -0
  373. package/dist/src/framework/config/schema.d.ts +447 -0
  374. package/dist/src/framework/config/schema.js +528 -0
  375. package/dist/src/framework/createInfrastructure.d.ts +76 -0
  376. package/dist/src/framework/createInfrastructure.js +221 -0
  377. package/dist/src/framework/lib/auditLog.d.ts +23 -0
  378. package/dist/src/framework/lib/auditLog.js +416 -0
  379. package/dist/src/framework/lib/captcha.d.ts +11 -0
  380. package/dist/{lib → src/framework/lib}/captcha.js +13 -10
  381. package/dist/{lib → src/framework/lib}/createDtoMapper.js +4 -4
  382. package/dist/src/framework/lib/createRoute.d.ts +1 -0
  383. package/dist/src/framework/lib/createRoute.js +2 -0
  384. package/dist/{lib → src/framework/lib}/idempotency.d.ts +2 -6
  385. package/dist/src/framework/lib/idempotency.js +74 -0
  386. package/dist/src/framework/lib/logger.d.ts +3 -0
  387. package/dist/src/framework/lib/logger.js +14 -0
  388. package/dist/src/framework/lib/metrics.d.ts +34 -0
  389. package/dist/{lib → src/framework/lib}/metrics.js +49 -57
  390. package/dist/src/framework/lib/pagination.d.ts +42 -0
  391. package/dist/src/framework/lib/pagination.js +51 -0
  392. package/dist/src/framework/lib/redisTransport.d.ts +38 -0
  393. package/dist/src/framework/lib/redisTransport.js +107 -0
  394. package/dist/src/framework/lib/resolveUserId.d.ts +2 -0
  395. package/dist/src/framework/lib/resolveUserId.js +5 -0
  396. package/dist/src/framework/lib/sseCollision.d.ts +6 -0
  397. package/dist/src/framework/lib/sseCollision.js +26 -0
  398. package/dist/src/framework/lib/storageAdapter.d.ts +1 -0
  399. package/dist/src/framework/lib/storageAdapter.js +1 -0
  400. package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.js +4 -4
  401. package/dist/src/framework/lib/tenant.d.ts +21 -0
  402. package/dist/src/framework/lib/tenant.js +70 -0
  403. package/dist/{lib → src/framework/lib}/upload.d.ts +11 -10
  404. package/dist/src/framework/lib/upload.js +132 -0
  405. package/dist/src/framework/lib/uploadRegistry.d.ts +23 -0
  406. package/dist/src/framework/lib/uploadRegistry.js +34 -0
  407. package/dist/{lib → src/framework/lib}/validate.d.ts +1 -1
  408. package/dist/{lib → src/framework/lib}/validate.js +2 -2
  409. package/dist/src/framework/lib/ws.d.ts +19 -0
  410. package/dist/src/framework/lib/ws.js +130 -0
  411. package/dist/src/framework/lib/wsHeartbeat.d.ts +12 -0
  412. package/dist/src/framework/lib/wsHeartbeat.js +53 -0
  413. package/dist/src/framework/lib/wsMessages.d.ts +25 -0
  414. package/dist/src/framework/lib/wsMessages.js +45 -0
  415. package/dist/src/framework/lib/wsNamespace.d.ts +17 -0
  416. package/dist/src/framework/lib/wsNamespace.js +19 -0
  417. package/dist/src/framework/lib/wsPresence.d.ts +17 -0
  418. package/dist/src/framework/lib/wsPresence.js +84 -0
  419. package/dist/src/framework/lib/wsTransport.d.ts +38 -0
  420. package/dist/src/framework/lib/wsTransport.js +9 -0
  421. package/dist/{lib → src/framework/lib}/zodToMongoose.d.ts +1 -1
  422. package/dist/{lib → src/framework/lib}/zodToMongoose.js +11 -11
  423. package/dist/{middleware → src/framework/middleware}/auditLog.d.ts +4 -3
  424. package/dist/src/framework/middleware/auditLog.js +42 -0
  425. package/dist/{middleware → src/framework/middleware}/botProtection.d.ts +2 -2
  426. package/dist/{middleware → src/framework/middleware}/botProtection.js +8 -9
  427. package/dist/src/framework/middleware/cacheResponse.d.ts +35 -0
  428. package/dist/src/framework/middleware/cacheResponse.js +126 -0
  429. package/dist/{middleware → src/framework/middleware}/captcha.d.ts +2 -3
  430. package/dist/src/framework/middleware/captcha.js +37 -0
  431. package/dist/{middleware → src/framework/middleware}/errorHandler.d.ts +1 -1
  432. package/dist/{middleware → src/framework/middleware}/errorHandler.js +2 -2
  433. package/dist/src/framework/middleware/index.js +1 -0
  434. package/dist/{middleware → src/framework/middleware}/logger.d.ts +1 -1
  435. package/dist/src/framework/middleware/metrics.d.ts +12 -0
  436. package/dist/src/framework/middleware/metrics.js +26 -0
  437. package/dist/{middleware → src/framework/middleware}/rateLimit.d.ts +2 -2
  438. package/dist/src/framework/middleware/rateLimit.js +22 -0
  439. package/dist/src/framework/middleware/requestId.d.ts +3 -0
  440. package/dist/{middleware → src/framework/middleware}/requestId.js +2 -2
  441. package/dist/{middleware → src/framework/middleware}/requestLogger.d.ts +3 -3
  442. package/dist/{middleware → src/framework/middleware}/requestLogger.js +17 -12
  443. package/dist/{middleware → src/framework/middleware}/requestSigning.d.ts +2 -2
  444. package/dist/{middleware → src/framework/middleware}/requestSigning.js +18 -20
  445. package/dist/src/framework/middleware/tenant.d.ts +14 -0
  446. package/dist/{middleware → src/framework/middleware}/tenant.js +31 -27
  447. package/dist/src/framework/middleware/upload.d.ts +5 -0
  448. package/dist/{middleware → src/framework/middleware}/upload.js +4 -4
  449. package/dist/{middleware → src/framework/middleware}/webhookAuth.d.ts +3 -3
  450. package/dist/{middleware → src/framework/middleware}/webhookAuth.js +11 -12
  451. package/dist/src/framework/models/AuditLog.d.ts +21 -0
  452. package/dist/src/framework/models/AuditLog.js +31 -0
  453. package/dist/src/framework/mountMiddleware.d.ts +91 -0
  454. package/dist/src/framework/mountMiddleware.js +128 -0
  455. package/dist/src/framework/mountOptionalEndpoints.d.ts +103 -0
  456. package/dist/src/framework/mountOptionalEndpoints.js +47 -0
  457. package/dist/src/framework/mountRoutes.d.ts +21 -0
  458. package/dist/src/framework/mountRoutes.js +144 -0
  459. package/dist/src/framework/persistence/cronRegistry.d.ts +28 -0
  460. package/dist/src/framework/persistence/cronRegistry.js +139 -0
  461. package/dist/src/framework/persistence/idempotency.d.ts +26 -0
  462. package/dist/src/framework/persistence/idempotency.js +178 -0
  463. package/dist/src/framework/persistence/index.d.ts +6 -0
  464. package/dist/src/framework/persistence/index.js +8 -0
  465. package/dist/src/framework/persistence/storeInfra.d.ts +9 -0
  466. package/dist/src/framework/persistence/storeInfra.js +1 -0
  467. package/dist/src/framework/persistence/uploadRegistry.d.ts +35 -0
  468. package/dist/src/framework/persistence/uploadRegistry.js +235 -0
  469. package/dist/src/framework/persistence/wsMessages.d.ts +22 -0
  470. package/dist/src/framework/persistence/wsMessages.js +296 -0
  471. package/dist/src/framework/preloadSchemas.d.ts +24 -0
  472. package/dist/src/framework/preloadSchemas.js +42 -0
  473. package/dist/src/framework/registerBoundaryAdapters.d.ts +23 -0
  474. package/dist/src/framework/registerBoundaryAdapters.js +46 -0
  475. package/dist/src/framework/routes/admin.d.ts +9 -0
  476. package/dist/src/framework/routes/admin.js +361 -0
  477. package/dist/src/framework/routes/health.d.ts +1 -0
  478. package/dist/src/framework/routes/health.js +21 -0
  479. package/dist/src/framework/routes/home.d.ts +1 -0
  480. package/dist/src/framework/routes/home.js +18 -0
  481. package/dist/src/framework/routes/jobs.d.ts +3 -0
  482. package/dist/{routes → src/framework/routes}/jobs.js +128 -103
  483. package/dist/src/framework/routes/metrics.d.ts +10 -0
  484. package/dist/src/framework/routes/metrics.js +57 -0
  485. package/dist/{routes → src/framework/routes}/uploads.d.ts +3 -3
  486. package/dist/src/framework/routes/uploads.js +262 -0
  487. package/dist/src/framework/runPluginLifecycle.d.ts +27 -0
  488. package/dist/src/framework/runPluginLifecycle.js +121 -0
  489. package/dist/src/framework/secrets/frameworkSecretSchema.d.ts +58 -0
  490. package/dist/src/framework/secrets/frameworkSecretSchema.js +20 -0
  491. package/dist/src/framework/secrets/index.d.ts +9 -0
  492. package/dist/src/framework/secrets/index.js +7 -0
  493. package/dist/src/framework/secrets/providers/envProvider.d.ts +15 -0
  494. package/dist/src/framework/secrets/providers/envProvider.js +18 -0
  495. package/dist/src/framework/secrets/providers/fileProvider.d.ts +8 -0
  496. package/dist/src/framework/secrets/providers/fileProvider.js +82 -0
  497. package/dist/src/framework/secrets/providers/ssmProvider.d.ts +20 -0
  498. package/dist/src/framework/secrets/providers/ssmProvider.js +127 -0
  499. package/dist/src/framework/secrets/resolveSecretBundle.d.ts +53 -0
  500. package/dist/src/framework/secrets/resolveSecretBundle.js +84 -0
  501. package/dist/src/framework/secrets/resolveSecrets.d.ts +18 -0
  502. package/dist/src/framework/secrets/resolveSecrets.js +34 -0
  503. package/dist/src/framework/sse/index.d.ts +21 -0
  504. package/dist/src/framework/sse/index.js +109 -0
  505. package/dist/src/framework/ws/index.d.ts +11 -0
  506. package/dist/src/framework/ws/index.js +8 -0
  507. package/dist/src/index.d.ts +87 -0
  508. package/dist/src/index.js +58 -0
  509. package/dist/src/lib/appConfig.d.ts +7 -0
  510. package/dist/src/lib/appConfig.js +27 -0
  511. package/dist/src/lib/appMeta.d.ts +7 -0
  512. package/dist/src/lib/appMeta.js +3 -0
  513. package/dist/src/lib/authConfig.d.ts +532 -0
  514. package/dist/{lib/appConfig.js → src/lib/authConfig.js} +75 -17
  515. package/dist/{lib → src/lib}/context.d.ts +6 -12
  516. package/dist/{lib → src/lib}/context.js +5 -5
  517. package/dist/src/lib/logger.d.ts +1 -0
  518. package/dist/src/lib/logger.js +1 -0
  519. package/dist/src/lib/mongo.d.ts +58 -0
  520. package/dist/src/lib/mongo.js +96 -0
  521. package/dist/src/lib/queue.d.ts +72 -0
  522. package/dist/src/lib/queue.js +152 -0
  523. package/dist/src/lib/redis.d.ts +28 -0
  524. package/dist/src/lib/redis.js +72 -0
  525. package/dist/{lib → src/lib}/signing.d.ts +2 -2
  526. package/dist/src/lib/signing.js +210 -0
  527. package/dist/src/lib/signingConfig.d.ts +40 -0
  528. package/dist/src/lib/signingConfig.js +28 -0
  529. package/dist/src/server.d.ts +146 -0
  530. package/dist/src/server.js +469 -0
  531. package/dist/src/shared/lib/HttpError.d.ts +1 -0
  532. package/dist/src/shared/lib/HttpError.js +2 -0
  533. package/dist/src/shared/lib/constants.d.ts +10 -0
  534. package/dist/src/shared/lib/crypto.d.ts +43 -0
  535. package/dist/src/shared/lib/crypto.js +74 -0
  536. package/dist/src/shared/lib/signing.d.ts +52 -0
  537. package/dist/{lib → src/shared/lib}/signing.js +35 -8
  538. package/dist/src/testing.d.ts +34 -0
  539. package/dist/src/testing.js +93 -0
  540. package/package.json +60 -24
  541. package/dist/adapters/memoryAuth.d.ts +0 -52
  542. package/dist/adapters/memoryAuth.js +0 -749
  543. package/dist/adapters/memoryStorage.d.ts +0 -3
  544. package/dist/adapters/memoryStorage.js +0 -44
  545. package/dist/adapters/mongoAuth.d.ts +0 -2
  546. package/dist/adapters/mongoAuth.js +0 -403
  547. package/dist/adapters/sqliteAuth.d.ts +0 -72
  548. package/dist/adapters/sqliteAuth.js +0 -858
  549. package/dist/app.d.ts +0 -559
  550. package/dist/app.js +0 -651
  551. package/dist/entrypoints/mongo.d.ts +0 -5
  552. package/dist/entrypoints/mongo.js +0 -4
  553. package/dist/entrypoints/queue.d.ts +0 -2
  554. package/dist/entrypoints/queue.js +0 -1
  555. package/dist/entrypoints/redis.d.ts +0 -1
  556. package/dist/entrypoints/redis.js +0 -1
  557. package/dist/index.d.ts +0 -117
  558. package/dist/index.js +0 -88
  559. package/dist/lib/appConfig.d.ts +0 -275
  560. package/dist/lib/auditLog.d.ts +0 -58
  561. package/dist/lib/auditLog.js +0 -218
  562. package/dist/lib/authAdapter.d.ts +0 -246
  563. package/dist/lib/authAdapter.js +0 -7
  564. package/dist/lib/authRateLimit.d.ts +0 -13
  565. package/dist/lib/authRateLimit.js +0 -117
  566. package/dist/lib/clientIp.d.ts +0 -14
  567. package/dist/lib/credentialStuffing.d.ts +0 -31
  568. package/dist/lib/credentialStuffing.js +0 -77
  569. package/dist/lib/crypto.d.ts +0 -11
  570. package/dist/lib/crypto.js +0 -22
  571. package/dist/lib/deletionCancelToken.d.ts +0 -12
  572. package/dist/lib/deletionCancelToken.js +0 -88
  573. package/dist/lib/emailVerification.d.ts +0 -19
  574. package/dist/lib/emailVerification.js +0 -129
  575. package/dist/lib/fingerprint.js +0 -36
  576. package/dist/lib/idempotency.js +0 -182
  577. package/dist/lib/jwks.d.ts +0 -25
  578. package/dist/lib/jwks.js +0 -51
  579. package/dist/lib/jwt.d.ts +0 -15
  580. package/dist/lib/jwt.js +0 -111
  581. package/dist/lib/metrics.d.ts +0 -14
  582. package/dist/lib/mfaChallenge.d.ts +0 -55
  583. package/dist/lib/mfaChallenge.js +0 -398
  584. package/dist/lib/mongo.d.ts +0 -39
  585. package/dist/lib/mongo.js +0 -124
  586. package/dist/lib/oauth.d.ts +0 -40
  587. package/dist/lib/oauth.js +0 -101
  588. package/dist/lib/oauthCode.d.ts +0 -15
  589. package/dist/lib/oauthCode.js +0 -95
  590. package/dist/lib/pagination.d.ts +0 -119
  591. package/dist/lib/pagination.js +0 -166
  592. package/dist/lib/queue.d.ts +0 -37
  593. package/dist/lib/queue.js +0 -117
  594. package/dist/lib/redis.d.ts +0 -9
  595. package/dist/lib/redis.js +0 -61
  596. package/dist/lib/resetPassword.d.ts +0 -12
  597. package/dist/lib/resetPassword.js +0 -93
  598. package/dist/lib/roles.d.ts +0 -7
  599. package/dist/lib/roles.js +0 -49
  600. package/dist/lib/saml.d.ts +0 -25
  601. package/dist/lib/saml.js +0 -64
  602. package/dist/lib/securityEvents.d.ts +0 -28
  603. package/dist/lib/securityEvents.js +0 -26
  604. package/dist/lib/session.d.ts +0 -49
  605. package/dist/lib/session.js +0 -597
  606. package/dist/lib/tenant.d.ts +0 -15
  607. package/dist/lib/tenant.js +0 -65
  608. package/dist/lib/upload.js +0 -112
  609. package/dist/lib/uploadRegistry.d.ts +0 -18
  610. package/dist/lib/uploadRegistry.js +0 -83
  611. package/dist/lib/ws.d.ts +0 -22
  612. package/dist/lib/ws.js +0 -96
  613. package/dist/lib/wsHeartbeat.d.ts +0 -12
  614. package/dist/lib/wsHeartbeat.js +0 -57
  615. package/dist/lib/wsMessages.d.ts +0 -40
  616. package/dist/lib/wsMessages.js +0 -330
  617. package/dist/lib/wsPresence.d.ts +0 -25
  618. package/dist/lib/wsPresence.js +0 -99
  619. package/dist/middleware/auditLog.js +0 -39
  620. package/dist/middleware/bearerAuth.d.ts +0 -2
  621. package/dist/middleware/bearerAuth.js +0 -11
  622. package/dist/middleware/cacheResponse.d.ts +0 -15
  623. package/dist/middleware/cacheResponse.js +0 -178
  624. package/dist/middleware/captcha.js +0 -36
  625. package/dist/middleware/csrf.js +0 -129
  626. package/dist/middleware/identify.d.ts +0 -3
  627. package/dist/middleware/identify.js +0 -122
  628. package/dist/middleware/index.js +0 -1
  629. package/dist/middleware/metrics.d.ts +0 -9
  630. package/dist/middleware/metrics.js +0 -26
  631. package/dist/middleware/rateLimit.js +0 -22
  632. package/dist/middleware/requestId.d.ts +0 -3
  633. package/dist/middleware/scimAuth.d.ts +0 -8
  634. package/dist/middleware/scimAuth.js +0 -29
  635. package/dist/middleware/tenant.d.ts +0 -5
  636. package/dist/middleware/upload.d.ts +0 -5
  637. package/dist/middleware/userAuth.d.ts +0 -3
  638. package/dist/middleware/userAuth.js +0 -6
  639. package/dist/models/AuditLog.d.ts +0 -30
  640. package/dist/models/AuditLog.js +0 -39
  641. package/dist/models/AuthUser.js +0 -55
  642. package/dist/models/Group.d.ts +0 -21
  643. package/dist/models/Group.js +0 -28
  644. package/dist/models/GroupMembership.js +0 -25
  645. package/dist/models/TenantRole.d.ts +0 -15
  646. package/dist/models/TenantRole.js +0 -23
  647. package/dist/routes/auth.d.ts +0 -12
  648. package/dist/routes/auth.js +0 -744
  649. package/dist/routes/groups.js +0 -346
  650. package/dist/routes/health.d.ts +0 -1
  651. package/dist/routes/health.js +0 -22
  652. package/dist/routes/home.d.ts +0 -1
  653. package/dist/routes/home.js +0 -16
  654. package/dist/routes/jobs.d.ts +0 -2
  655. package/dist/routes/m2m.d.ts +0 -2
  656. package/dist/routes/m2m.js +0 -72
  657. package/dist/routes/metrics.d.ts +0 -8
  658. package/dist/routes/metrics.js +0 -55
  659. package/dist/routes/mfa.d.ts +0 -5
  660. package/dist/routes/mfa.js +0 -628
  661. package/dist/routes/oauth.d.ts +0 -2
  662. package/dist/routes/oauth.js +0 -520
  663. package/dist/routes/oidc.d.ts +0 -2
  664. package/dist/routes/oidc.js +0 -29
  665. package/dist/routes/passkey.d.ts +0 -1
  666. package/dist/routes/passkey.js +0 -157
  667. package/dist/routes/saml.d.ts +0 -2
  668. package/dist/routes/saml.js +0 -86
  669. package/dist/routes/scim.d.ts +0 -2
  670. package/dist/routes/scim.js +0 -255
  671. package/dist/routes/uploads.js +0 -227
  672. package/dist/schemas/auth.js +0 -30
  673. package/dist/server.d.ts +0 -57
  674. package/dist/server.js +0 -112
  675. package/dist/services/auth.d.ts +0 -29
  676. package/dist/services/auth.js +0 -238
  677. package/dist/ws/index.d.ts +0 -10
  678. package/dist/ws/index.js +0 -39
  679. package/docs/sections/adding-middleware/full.md +0 -35
  680. package/docs/sections/adding-models/full.md +0 -125
  681. package/docs/sections/adding-models/overview.md +0 -13
  682. package/docs/sections/adding-routes/full.md +0 -182
  683. package/docs/sections/adding-routes/overview.md +0 -23
  684. package/docs/sections/auth-flow/full.md +0 -790
  685. package/docs/sections/auth-flow/overview.md +0 -10
  686. package/docs/sections/auth-security-examples/full.md +0 -388
  687. package/docs/sections/authentication/full.md +0 -130
  688. package/docs/sections/authentication/overview.md +0 -5
  689. package/docs/sections/cli/full.md +0 -42
  690. package/docs/sections/configuration/full.md +0 -172
  691. package/docs/sections/configuration/overview.md +0 -18
  692. package/docs/sections/configuration-example/full.md +0 -117
  693. package/docs/sections/configuration-example/overview.md +0 -30
  694. package/docs/sections/documentation/full.md +0 -171
  695. package/docs/sections/environment-variables/full.md +0 -55
  696. package/docs/sections/exports/full.md +0 -123
  697. package/docs/sections/extending-context/full.md +0 -59
  698. package/docs/sections/header.md +0 -3
  699. package/docs/sections/installation/full.md +0 -6
  700. package/docs/sections/jobs/full.md +0 -140
  701. package/docs/sections/jobs/overview.md +0 -15
  702. package/docs/sections/logging/full.md +0 -83
  703. package/docs/sections/metrics/full.md +0 -131
  704. package/docs/sections/mongodb-connections/full.md +0 -45
  705. package/docs/sections/mongodb-connections/overview.md +0 -7
  706. package/docs/sections/multi-tenancy/full.md +0 -66
  707. package/docs/sections/multi-tenancy/overview.md +0 -15
  708. package/docs/sections/oauth/full.md +0 -189
  709. package/docs/sections/oauth/overview.md +0 -16
  710. package/docs/sections/package-development/full.md +0 -7
  711. package/docs/sections/pagination/full.md +0 -93
  712. package/docs/sections/passkey-login/full.md +0 -90
  713. package/docs/sections/passkey-login/overview.md +0 -1
  714. package/docs/sections/peer-dependencies/full.md +0 -47
  715. package/docs/sections/quick-start/full.md +0 -43
  716. package/docs/sections/response-caching/full.md +0 -117
  717. package/docs/sections/response-caching/overview.md +0 -13
  718. package/docs/sections/roles/full.md +0 -225
  719. package/docs/sections/roles/overview.md +0 -14
  720. package/docs/sections/running-without-redis/full.md +0 -16
  721. package/docs/sections/running-without-redis-or-mongodb/full.md +0 -60
  722. package/docs/sections/signing/full.md +0 -203
  723. package/docs/sections/stack/full.md +0 -10
  724. package/docs/sections/uploads/full.md +0 -208
  725. package/docs/sections/versioning/full.md +0 -85
  726. package/docs/sections/webhook-auth/full.md +0 -100
  727. package/docs/sections/websocket/full.md +0 -196
  728. package/docs/sections/websocket/overview.md +0 -5
  729. package/docs/sections/websocket-rooms/full.md +0 -102
  730. package/docs/sections/websocket-rooms/overview.md +0 -5
  731. /package/dist/{lib/storageAdapter.js → packages/bunshot-admin/src/types/env.js} +0 -0
  732. /package/dist/{lib → packages/bunshot-auth/src/lib}/fingerprint.d.ts +0 -0
  733. /package/dist/{lib → packages/bunshot-auth/src/lib}/logger.d.ts +0 -0
  734. /package/dist/{lib → packages/bunshot-core/src}/constants.d.ts +0 -0
  735. /package/dist/{lib → packages/bunshot-core/src}/storageAdapter.d.ts +0 -0
  736. /package/dist/{lib → src/framework/lib}/createDtoMapper.d.ts +0 -0
  737. /package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.d.ts +0 -0
  738. /package/dist/{middleware → src/framework/middleware}/cors.d.ts +0 -0
  739. /package/dist/{middleware → src/framework/middleware}/cors.js +0 -0
  740. /package/dist/{middleware → src/framework/middleware}/index.d.ts +0 -0
  741. /package/dist/{middleware → src/framework/middleware}/logger.js +0 -0
  742. /package/dist/{lib → src/shared/lib}/constants.js +0 -0
package/dist/app.js DELETED
@@ -1,651 +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, setJwtConfig, setCheckSuspensionOnIdentify, setBreachedPasswordConfig, setCaptchaConfig, setStepUpConfig, setM2MConfig, setOidcConfig, setSamlConfig, setScimConfig } 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
- import { validateJwtSecrets } from "./lib/jwt";
29
- export const createApp = async (config) => {
30
- const { routesDir, app: appConfig = {}, auth: authConfig = {}, security: securityConfig = {}, middleware = [], db = {}, } = config;
31
- if (config.securityEvents) {
32
- const { setSecurityEventConfig } = await import("./lib/securityEvents");
33
- setSecurityEventConfig(config.securityEvents);
34
- }
35
- const appName = appConfig.name ?? "Bun Core API";
36
- const openApiVersion = appConfig.version ?? "1.0.0";
37
- // Validate JWT secrets eagerly so misconfiguration is caught at startup
38
- validateJwtSecrets();
39
- // Trust-proxy for IP extraction
40
- const { setTrustProxy } = await import("./lib/clientIp");
41
- setTrustProxy(securityConfig.trustProxy ?? false);
42
- const corsOrigins = securityConfig.cors ?? "*";
43
- if (corsOrigins === "*" && process.env.NODE_ENV === "production") {
44
- console.warn("[security] CORS is set to wildcard (*) in production. Configure security.cors with specific origins to restrict cross-origin access.");
45
- }
46
- if (securityConfig.csrf?.enabled && corsOrigins === "*") {
47
- if (process.env.NODE_ENV === "production") {
48
- throw new Error("[security] CSRF protection with wildcard CORS (*) is unsafe. " +
49
- "Set security.cors to specific origins when using CSRF.");
50
- }
51
- console.warn("[security] CSRF is enabled with wildcard CORS. This will be rejected in production.");
52
- }
53
- const rlConfig = securityConfig.rateLimit ?? { windowMs: 60_000, max: 100 };
54
- const botCfg = securityConfig.botProtection ?? {};
55
- const enableBearerAuth = securityConfig.bearerAuth !== false;
56
- const extraBypass = typeof securityConfig.bearerAuth === "object" && securityConfig.bearerAuth !== null
57
- ? (securityConfig.bearerAuth.bypass ?? [])
58
- : [];
59
- const enableAuthRoutes = authConfig.enabled !== false;
60
- const explicitAuthAdapter = authConfig.adapter;
61
- const oauthProviders = authConfig.oauth?.providers;
62
- const postOAuthRedirect = authConfig.oauth?.postRedirect ?? "/";
63
- const allowedRedirectUrls = authConfig.oauth?.allowedRedirectUrls;
64
- // Validate postRedirect against allowlist at startup (not per-request)
65
- if (allowedRedirectUrls && postOAuthRedirect !== "/") {
66
- try {
67
- const redirectUrl = new URL(postOAuthRedirect);
68
- const allowed = allowedRedirectUrls.some((u) => {
69
- try {
70
- return new URL(u).origin === redirectUrl.origin;
71
- }
72
- catch {
73
- return false;
74
- }
75
- });
76
- if (!allowed) {
77
- throw new Error(`createApp: oauth.postRedirect "${postOAuthRedirect}" is not in the allowedRedirectUrls list. Add its origin to oauth.allowedRedirectUrls.`);
78
- }
79
- }
80
- catch (e) {
81
- if (e instanceof Error && e.message.startsWith("createApp:"))
82
- throw e;
83
- // Relative path — always allowed
84
- }
85
- }
86
- const roles = authConfig.roles ?? [];
87
- const defaultRole = authConfig.defaultRole;
88
- const primaryField = authConfig.primaryField ?? "email";
89
- const emailVerification = authConfig.emailVerification;
90
- const passwordReset = authConfig.passwordReset;
91
- const authRateLimit = authConfig.rateLimit;
92
- const sessionPolicy = authConfig.sessionPolicy ?? {};
93
- const { sqlite, mongo = "single", redis: enableRedis = true } = db;
94
- // Smart fallback: pick the best available store rather than blindly defaulting to "redis"
95
- const defaultStore = enableRedis
96
- ? "redis"
97
- : sqlite
98
- ? "sqlite"
99
- : mongo !== false
100
- ? "mongo"
101
- : "memory";
102
- const sessions = db.sessions ?? defaultStore;
103
- const oauthState = db.oauthState ?? sessions;
104
- const cache = db.cache ?? defaultStore;
105
- const authStore = db.auth ?? (mongo !== false ? "mongo" : sessions);
106
- if (sqlite || sessions === "sqlite" || oauthState === "sqlite" || authStore === "sqlite") {
107
- const { setSqliteDb } = await import("./adapters/sqliteAuth");
108
- setSqliteDb(sqlite ?? "./data.db");
109
- }
110
- setSessionStore(sessions);
111
- setOAuthStateStore(oauthState);
112
- setOAuthCodeStore(oauthState);
113
- setCacheStore(cache);
114
- if (mongo === "single")
115
- await connectMongo();
116
- else if (mongo === "separate")
117
- await Promise.all([connectAuthMongo(), connectAppMongo()]);
118
- if (enableRedis)
119
- await connectRedis();
120
- // Resolve auth adapter: explicit prop wins, then db.auth, then mongo default
121
- let authAdapter;
122
- if (explicitAuthAdapter) {
123
- authAdapter = explicitAuthAdapter;
124
- }
125
- else if (authStore === "sqlite") {
126
- const { sqliteAuthAdapter } = await import("./adapters/sqliteAuth");
127
- authAdapter = sqliteAuthAdapter;
128
- }
129
- else if (authStore === "memory") {
130
- authAdapter = memoryAuthAdapter;
131
- }
132
- else {
133
- authAdapter = mongoAuthAdapter;
134
- }
135
- if (defaultRole && !authAdapter.setRoles) {
136
- 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.`);
137
- }
138
- if (emailVerification && primaryField !== "email") {
139
- throw new Error(`createApp: "emailVerification" is only supported when primaryField is "email". Either set primaryField to "email" or remove emailVerification.`);
140
- }
141
- if (passwordReset && primaryField !== "email") {
142
- throw new Error(`createApp: "passwordReset" is only supported when primaryField is "email". Either set primaryField to "email" or remove passwordReset.`);
143
- }
144
- if (passwordReset && !authAdapter.setPassword) {
145
- throw new Error(`createApp: "passwordReset" is configured but the auth adapter does not implement setPassword. Add setPassword to your adapter or remove passwordReset.`);
146
- }
147
- setAuthAdapter(authAdapter);
148
- setAppRoles(roles);
149
- setDefaultRole(defaultRole ?? null);
150
- setPrimaryField(primaryField);
151
- setEmailVerificationConfig(emailVerification ?? null);
152
- setEmailVerificationStore(sessions);
153
- setPasswordResetConfig(passwordReset ?? null);
154
- setPasswordPolicy(authConfig.passwordPolicy ?? {});
155
- setPasswordResetStore(sessions);
156
- const { setDeletionCancelTokenStore } = await import("./lib/deletionCancelToken");
157
- setDeletionCancelTokenStore(sessions);
158
- setAuthRateLimitStore(authRateLimit?.store ?? (enableRedis ? "redis" : "memory"));
159
- if (authRateLimit?.credentialStuffing) {
160
- const { setCredentialStuffingConfig } = await import("./lib/credentialStuffing");
161
- setCredentialStuffingConfig(authRateLimit.credentialStuffing);
162
- }
163
- setMaxSessions(sessionPolicy.maxSessions ?? 6);
164
- setPersistSessionMetadata(sessionPolicy.persistSessionMetadata ?? true);
165
- setIncludeInactiveSessions(sessionPolicy.includeInactiveSessions ?? false);
166
- setTrackLastActive(sessionPolicy.trackLastActive ?? false);
167
- setRefreshTokenConfig(authConfig.refreshTokens ?? null);
168
- setMfaConfig(authConfig.mfa ?? null);
169
- if (authConfig.jwt)
170
- setJwtConfig(authConfig.jwt);
171
- if (authConfig.checkSuspensionOnIdentify)
172
- setCheckSuspensionOnIdentify(true);
173
- if (authConfig.breachedPasswordCheck)
174
- setBreachedPasswordConfig(authConfig.breachedPasswordCheck);
175
- if (authConfig.stepUp)
176
- setStepUpConfig(authConfig.stepUp);
177
- // JWT config
178
- if (authConfig.jwt)
179
- setJwtConfig(authConfig.jwt);
180
- // OIDC: load keys, set RS256, mount discovery routes
181
- if (authConfig.oidc) {
182
- setOidcConfig(authConfig.oidc);
183
- // Override JWT config with OIDC issuer and RS256
184
- setJwtConfig({ ...(authConfig.jwt ?? {}), issuer: authConfig.oidc.issuer, algorithm: "RS256" });
185
- const { loadJwksKey, generateAndLoadKeyPair, loadPreviousKey } = await import("./lib/jwks");
186
- const { _setAlgorithm } = await import("./lib/jwt");
187
- if (authConfig.oidc.signingKey) {
188
- await loadJwksKey(authConfig.oidc.signingKey);
189
- }
190
- else {
191
- await generateAndLoadKeyPair();
192
- }
193
- for (const prev of authConfig.oidc.previousKeys ?? []) {
194
- await loadPreviousKey(prev);
195
- }
196
- _setAlgorithm("RS256");
197
- }
198
- if (oauthProviders)
199
- initOAuthProviders(oauthProviders);
200
- const configuredOAuth = getConfiguredOAuthProviders();
201
- // Start the account deletion worker when queued deletion is configured.
202
- // The worker runs in-process alongside the API server.
203
- if (authConfig.accountDeletion?.queued && enableAuthRoutes) {
204
- try {
205
- const { createWorker } = await import("./lib/queue");
206
- const appName_ = appName;
207
- const accountDeletion_ = authConfig.accountDeletion;
208
- createWorker(`${appName_}:account-deletions`, async (job) => {
209
- const { userId } = job.data;
210
- const adapter_ = authAdapter;
211
- if (accountDeletion_.onBeforeDelete)
212
- await accountDeletion_.onBeforeDelete(userId);
213
- if (adapter_.deleteUser)
214
- await adapter_.deleteUser(userId);
215
- if (accountDeletion_.onAfterDelete)
216
- await accountDeletion_.onAfterDelete(userId);
217
- }, { concurrency: 1 });
218
- }
219
- catch (err) {
220
- if (err?.message?.includes("bullmq is not installed")) {
221
- throw new Error("createApp: accountDeletion.queued requires BullMQ. Run: bun add bullmq");
222
- }
223
- throw err;
224
- }
225
- }
226
- // OAuth paths must bypass bearer auth — initiation and link routes are browser redirects,
227
- // callbacks come from external providers; none can send a bearer token header.
228
- const oauthBypass = configuredOAuth.flatMap((p) => [
229
- `/auth/${p}`,
230
- `/auth/${p}/callback`,
231
- `/auth/${p}/link`,
232
- ]);
233
- const DEFAULT_BYPASS = ["/docs", "/openapi.json", "/sw.js", "/health", "/", "/metrics", "/oauth/token", "/.well-known/openid-configuration", "/.well-known/jwks.json", "/auth/saml/*", "/scim/v2/*"];
234
- // Add per-version docs/spec paths when versioning is configured
235
- const versionBypass = config.versioning
236
- ? config.versioning.versions.flatMap((v) => [`/${v}/docs`, `/${v}/openapi.json`])
237
- : [];
238
- const bearerAuthBypass = [...DEFAULT_BYPASS, ...versionBypass, ...oauthBypass, ...extraBypass];
239
- const app = new OpenAPIHono();
240
- app.use(requestId);
241
- // Set the validation error formatter on context so defaultHook and onError both pick it up
242
- const validationFormatter = config.validation?.formatError ?? defaultValidationErrorFormatter;
243
- app.use("*", async (c, next) => {
244
- c.set("validationErrorFormatter", validationFormatter);
245
- await next();
246
- });
247
- // Metrics collection middleware (before requestLogger so it captures all requests)
248
- if (config.metrics?.enabled) {
249
- const metricsAuth = config.metrics.auth ?? "none";
250
- if (metricsAuth === "none" && !config.metrics.unsafePublic) {
251
- if (process.env.NODE_ENV === "production") {
252
- throw new Error("[security] metrics.auth is required in production. Set metrics.auth or explicitly set unsafePublic: true with auth: \"none\".");
253
- }
254
- console.warn("[security] /metrics is enabled without auth. Configure metrics.auth for production.");
255
- }
256
- const { metricsCollector } = await import("./middleware/metrics");
257
- app.use(metricsCollector({
258
- excludePaths: config.metrics.excludePaths,
259
- normalizePath: config.metrics.normalizePath,
260
- }));
261
- }
262
- const loggingConfig = config.logging ?? {};
263
- if (loggingConfig.enabled !== false) {
264
- app.use(requestLogger({
265
- onLog: loggingConfig.onLog,
266
- level: loggingConfig.level,
267
- excludePaths: loggingConfig.excludePaths,
268
- excludeMethods: loggingConfig.excludeMethods,
269
- }));
270
- }
271
- const headerOpts = {};
272
- if (securityConfig.headers?.contentSecurityPolicy) {
273
- headerOpts["Content-Security-Policy"] = securityConfig.headers.contentSecurityPolicy;
274
- }
275
- if (securityConfig.headers?.permissionsPolicy) {
276
- headerOpts["Permissions-Policy"] = securityConfig.headers.permissionsPolicy;
277
- }
278
- app.use(secureHeaders());
279
- if (Object.keys(headerOpts).length > 0) {
280
- app.use(async (c, next) => {
281
- await next();
282
- for (const [k, v] of Object.entries(headerOpts)) {
283
- c.res.headers.set(k, v);
284
- }
285
- });
286
- }
287
- const corsAllowHeaders = ["Content-Type", "Authorization", HEADER_USER_TOKEN, HEADER_REFRESH_TOKEN];
288
- if (securityConfig.csrf?.enabled)
289
- corsAllowHeaders.push(HEADER_CSRF_TOKEN);
290
- app.use(cors({ origin: corsOrigins, allowHeaders: corsAllowHeaders, exposeHeaders: ["x-cache", HEADER_REQUEST_ID], credentials: true }));
291
- if ((botCfg.blockList?.length ?? 0) > 0) {
292
- const { botProtection } = await import("./middleware/botProtection");
293
- app.use(botProtection({ blockList: botCfg.blockList }));
294
- }
295
- app.use(rateLimit({ ...rlConfig, fingerprintLimit: botCfg.fingerprintRateLimit ?? false }));
296
- if (enableBearerAuth) {
297
- app.use(async (c, next) => {
298
- const path = c.req.path;
299
- const bypassed = bearerAuthBypass.some((entry) => entry.endsWith("*") ? path.startsWith(entry.slice(0, -1)) : path === entry);
300
- if (bypassed) {
301
- return next();
302
- }
303
- return bearerAuth(c, next);
304
- });
305
- }
306
- app.use(identify);
307
- // Signing config — make available to pagination, identify, and other lib modules
308
- if (securityConfig.signing) {
309
- setSigningConfig(securityConfig.signing);
310
- }
311
- // CAPTCHA config — store globally so requireCaptcha() can read it without explicit param
312
- if (securityConfig.captcha) {
313
- setCaptchaConfig(securityConfig.captcha);
314
- }
315
- // CSRF protection (after identify so we can check for auth cookie presence)
316
- if (securityConfig.csrf?.enabled) {
317
- setCsrfEnabled(true);
318
- const { csrfProtection } = await import("./middleware/csrf");
319
- const csrfExemptPaths = [
320
- ...oauthBypass.filter(p => p.includes("/callback")),
321
- ...(securityConfig.csrf.exemptPaths ?? []),
322
- ];
323
- app.use(csrfProtection({
324
- exemptPaths: csrfExemptPaths,
325
- checkOrigin: securityConfig.csrf.checkOrigin ?? true,
326
- allowedOrigins: corsOrigins,
327
- }));
328
- }
329
- // Tenant resolution middleware (after identify, before user middleware + routes)
330
- if (config.tenancy) {
331
- if (!config.tenancy.onResolve) {
332
- if (process.env.NODE_ENV === "production") {
333
- throw new Error("[security] Tenancy is configured without an onResolve callback. " +
334
- "In production, onResolve is required to validate tenant IDs and prevent cross-tenant access. " +
335
- "Provide tenancy.onResolve or remove the tenancy config.");
336
- }
337
- else {
338
- console.warn("[security] Tenancy is configured without an onResolve callback — " +
339
- "tenant IDs will be trusted without validation. This is unsafe in production.");
340
- }
341
- }
342
- const { createTenantMiddleware } = await import("./middleware/tenant");
343
- app.use(createTenantMiddleware(config.tenancy));
344
- }
345
- for (const mw of middleware)
346
- app.use(mw);
347
- if (authConfig.mfa?.required) {
348
- const { requireMfaSetup } = await import("./middleware/requireMfaSetup");
349
- app.use(requireMfaSetup);
350
- }
351
- setAppName(appName);
352
- // Schema pre-loading — import shared schema files before routes so registerSchema /
353
- // registerSchemas calls run first, guaranteeing $ref instead of inline shapes.
354
- const msConfig = config.modelSchemas;
355
- if (msConfig) {
356
- const { paths, registration = "auto" } = typeof msConfig === "string" || Array.isArray(msConfig)
357
- ? { paths: msConfig, registration: "auto" }
358
- : msConfig;
359
- const pathArray = paths ? (Array.isArray(paths) ? paths : [paths]) : [];
360
- for (const entry of pathArray) {
361
- // Normalize to forward slashes so splitting works on both Windows and Unix.
362
- const normalized = entry.replaceAll("\\", "/");
363
- // Split glob patterns: everything before the first wildcard segment is the cwd.
364
- let cwd;
365
- let pattern;
366
- if (!normalized.includes("*")) {
367
- cwd = normalized;
368
- pattern = "**/*.ts";
369
- }
370
- else {
371
- const parts = normalized.split("/");
372
- const starIdx = parts.findIndex((p) => p.includes("*"));
373
- cwd = parts.slice(0, starIdx).join("/");
374
- pattern = parts.slice(starIdx).join("/");
375
- }
376
- const schemaGlob = new Bun.Glob(pattern);
377
- for await (const file of schemaGlob.scan({ cwd })) {
378
- const mod = await import(`${cwd}/${file}`);
379
- if (registration === "auto") {
380
- for (const [exportName, value] of Object.entries(mod)) {
381
- maybeAutoRegister(exportName, value);
382
- }
383
- }
384
- // "explicit": file imported; any registerSchema/registerSchemas calls inside already ran
385
- }
386
- }
387
- }
388
- // Core routes (auth, etc.)
389
- const coreRoutesDir = import.meta.dir + "/routes";
390
- const coreGlob = new Bun.Glob("*.ts");
391
- for await (const file of coreGlob.scan({ cwd: coreRoutesDir })) {
392
- if (file === "auth.ts")
393
- continue; // mounted separately below via createAuthRouter
394
- if (file === "oauth.ts")
395
- continue; // mounted separately below
396
- if (file === "mfa.ts")
397
- continue; // mounted separately below when mfa is configured
398
- if (file === "jobs.ts")
399
- continue; // mounted separately below when jobs.statusEndpoint is true
400
- if (file === "oidc.ts")
401
- continue; // mounted separately below when oidc is configured
402
- const mod = await import(`${coreRoutesDir}/${file}`);
403
- if (mod.router)
404
- app.route("/", mod.router);
405
- }
406
- if (enableAuthRoutes) {
407
- const { createAuthRouter } = await import(`${coreRoutesDir}/auth`);
408
- app.route("/", createAuthRouter({ primaryField, emailVerification, passwordReset, rateLimit: authRateLimit, accountDeletion: authConfig.accountDeletion, refreshTokens: authConfig.refreshTokens, stepUp: authConfig.stepUp }));
409
- }
410
- if (configuredOAuth.length > 0) {
411
- const { createOAuthRouter } = await import(`${coreRoutesDir}/oauth`);
412
- app.route("/", createOAuthRouter(configuredOAuth, postOAuthRedirect));
413
- }
414
- if (authConfig.mfa && enableAuthRoutes) {
415
- const { setMfaChallengeStore, setMfaChallengeSqliteDb } = await import("./lib/mfaChallenge");
416
- setMfaChallengeStore(sessions);
417
- if (sessions === "sqlite") {
418
- const { getDb } = await import("./adapters/sqliteAuth");
419
- setMfaChallengeSqliteDb(getDb());
420
- }
421
- const { createMfaRouter } = await import(`${coreRoutesDir}/mfa`);
422
- app.route("/", createMfaRouter({ rateLimit: authRateLimit }));
423
- }
424
- if (authConfig.mfa?.webauthn?.allowPasswordlessLogin && enableAuthRoutes) {
425
- const { assertWebAuthnDependency } = await import("./services/mfa");
426
- await assertWebAuthnDependency();
427
- const { createPasskeyRouter } = await import(`${coreRoutesDir}/passkey`);
428
- app.route("/", createPasskeyRouter());
429
- }
430
- if (authConfig.m2m?.enabled !== false && authConfig.m2m) {
431
- setM2MConfig(authConfig.m2m);
432
- const { createM2MRouter } = await import(`${coreRoutesDir}/m2m`);
433
- app.route("/", createM2MRouter());
434
- }
435
- if (config.jobs?.statusEndpoint) {
436
- const jobsAuth = config.jobs.auth ?? "none";
437
- if (jobsAuth === "none" && !config.jobs.unsafePublic) {
438
- if (process.env.NODE_ENV === "production") {
439
- throw new Error("[security] jobs.auth is required in production. Set jobs.auth or explicitly set unsafePublic: true with auth: \"none\".");
440
- }
441
- console.warn("[security] /jobs is enabled without auth. Configure jobs.auth for production.");
442
- }
443
- }
444
- if (config.jobs?.statusEndpoint) {
445
- const { createJobsRouter } = await import(`${coreRoutesDir}/jobs`);
446
- app.route("/", createJobsRouter(config.jobs));
447
- }
448
- if (config.metrics?.enabled) {
449
- const { createMetricsRouter } = await import(`${coreRoutesDir}/metrics`);
450
- app.route("/", createMetricsRouter({
451
- auth: config.metrics.auth,
452
- queues: config.metrics.queues,
453
- unsafePublic: config.metrics.unsafePublic,
454
- }));
455
- }
456
- if (config.groups?.managementRoutes) {
457
- const { createGroupsRouter } = await import(`${coreRoutesDir}/groups`);
458
- app.route("/", createGroupsRouter(config.groups));
459
- }
460
- if (authConfig.oidc) {
461
- const { createOidcRouter } = await import(`${coreRoutesDir}/oidc`);
462
- app.route("/", createOidcRouter());
463
- }
464
- if (authConfig.saml) {
465
- setSamlConfig(authConfig.saml);
466
- const { createSamlRouter } = await import(`${coreRoutesDir}/saml`);
467
- app.route("/", createSamlRouter());
468
- }
469
- if (authConfig.scim) {
470
- const { setScimTokens } = await import("./middleware/scimAuth");
471
- setScimConfig(authConfig.scim);
472
- setScimTokens(authConfig.scim.bearerTokens);
473
- const { createScimRouter } = await import(`${coreRoutesDir}/scim`);
474
- app.route("/", createScimRouter());
475
- }
476
- if (config.upload) {
477
- const { storage, presignedUrls, authorization, allowExternalKeys, ...uploadOpts } = config.upload;
478
- setStorageAdapter(storage);
479
- setUploadConfig(uploadOpts);
480
- // Wire upload registry store to match session store backend
481
- const { setUploadRegistryStore } = await import("./lib/uploadRegistry");
482
- setUploadRegistryStore(sessions);
483
- if (presignedUrls) {
484
- const { createUploadsRouter } = await import(`${coreRoutesDir}/uploads`);
485
- const presignConfig = presignedUrls === true ? {} : presignedUrls;
486
- app.route("/", createUploadsRouter({
487
- ...presignConfig,
488
- authorization,
489
- allowExternalKeys,
490
- }));
491
- }
492
- }
493
- // Helper to register standard security schemes on an OpenAPI registry
494
- const registerSecuritySchemes = (registry) => {
495
- registry.registerComponent("securitySchemes", "cookieAuth", {
496
- type: "apiKey",
497
- in: "cookie",
498
- name: "token",
499
- description: "Session cookie set automatically on login/register.",
500
- });
501
- registry.registerComponent("securitySchemes", "userToken", {
502
- type: "apiKey",
503
- in: "header",
504
- name: "x-user-token",
505
- description: "JWT session token passed as the x-user-token request header (alternative to the session cookie).",
506
- });
507
- registry.registerComponent("securitySchemes", "bearerAuth", {
508
- type: "http",
509
- scheme: "bearer",
510
- 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.",
511
- });
512
- };
513
- if (config.versioning) {
514
- // Version-aware route discovery — each version gets its own OpenAPIHono instance
515
- const { versions, sharedDir = "shared", defaultVersion = versions[versions.length - 1] } = config.versioning;
516
- const { setVersionPrefix, clearVersionPrefix, getVersionToken, drainCapturedTokens, assertCapturedTokens } = await import("./lib/createRoute");
517
- const { defaultHook } = await import("./lib/context");
518
- const { stripUnreferencedSchemas } = await import("./lib/stripUnreferencedSchemas");
519
- // Import shared routes with no prefix — schemas stay unprefixed (version-agnostic)
520
- let sharedMods = [];
521
- if (sharedDir !== false) {
522
- const sharedRoutesDir = `${routesDir}/${sharedDir}`;
523
- try {
524
- const sharedGlob = new Bun.Glob("**/*.ts");
525
- const sharedFiles = [];
526
- for await (const file of sharedGlob.scan({ cwd: sharedRoutesDir })) {
527
- sharedFiles.push(file);
528
- }
529
- sharedMods = await Promise.all(sharedFiles.map(async (file) => ({ file, mod: await import(`${sharedRoutesDir}/${file}`) })));
530
- }
531
- catch {
532
- // sharedDir doesn't exist — fine
533
- }
534
- }
535
- // Drain any tokens captured during shared route imports (token=null, correct since no prefix was set)
536
- // to prevent null tokens from bleeding into per-version assertions below.
537
- drainCapturedTokens();
538
- // For each version sequentially: set prefix, import routes, mount on isolated OpenAPIHono
539
- for (const version of versions) {
540
- setVersionPrefix(version);
541
- const expectedToken = getVersionToken();
542
- const vApp = new OpenAPIHono({ defaultHook });
543
- const versionRoutesDir = `${routesDir}/${version}`;
544
- const versionFiles = [];
545
- try {
546
- const versionGlob = new Bun.Glob("**/*.ts");
547
- for await (const file of versionGlob.scan({ cwd: versionRoutesDir })) {
548
- versionFiles.push(file);
549
- }
550
- }
551
- catch {
552
- // version dir doesn't exist — fine
553
- }
554
- // Import all version route files in parallel
555
- const versionMods = await Promise.all(versionFiles.map(async (file) => ({ file, mod: await import(`${versionRoutesDir}/${file}`) })));
556
- // Assert version token to catch top-level await interleaving bugs at startup
557
- assertCapturedTokens(drainCapturedTokens(), expectedToken);
558
- // Mount version-specific routes (sorted by priority)
559
- versionMods
560
- .sort((a, b) => (a.mod.priority ?? Infinity) - (b.mod.priority ?? Infinity))
561
- .forEach(({ mod }) => {
562
- if (mod.router)
563
- vApp.route("/", mod.router);
564
- });
565
- // Mount shared routes on this versioned app
566
- for (const { mod } of sharedMods) {
567
- if (mod.router)
568
- vApp.route("/", mod.router);
569
- }
570
- registerSecuritySchemes(vApp.openAPIRegistry);
571
- // Serve per-version spec stripped of schemas from other versions
572
- vApp.get("/openapi.json", (c) => {
573
- const spec = vApp.getOpenAPIDocument({
574
- openapi: "3.0.0",
575
- info: { title: `${appName} ${version.toUpperCase()}`, version: openApiVersion },
576
- });
577
- return c.json(stripUnreferencedSchemas(spec));
578
- });
579
- // Per-version Scalar docs
580
- vApp.get("/docs", Scalar({ url: `/${version}/openapi.json` }));
581
- clearVersionPrefix();
582
- // Mount versioned app under /v1, /v2, etc.
583
- app.route(`/${version}`, vApp);
584
- }
585
- // Root /docs → version selector page
586
- app.get("/docs", (c) => {
587
- const links = versions
588
- .map((v) => `<li><a href="/${v}/docs" style="font-size:1.1em">${v.toUpperCase()}</a></li>`)
589
- .join("\n");
590
- const html = `<!DOCTYPE html>
591
- <html lang="en">
592
- <head><meta charset="utf-8"><title>${appName} — API Docs</title>
593
- <style>body{font-family:sans-serif;padding:2rem}ul{list-style:none;padding:0}li{margin:.5rem 0}</style>
594
- </head>
595
- <body>
596
- <h1>${appName}</h1>
597
- <h2>API Documentation</h2>
598
- <ul>${links}</ul>
599
- </body></html>`;
600
- return c.html(html);
601
- });
602
- // Root /openapi.json → 302 to default version (no merged spec exists)
603
- app.get("/openapi.json", (c) => c.redirect(`/${defaultVersion}/openapi.json`, 302));
604
- }
605
- else {
606
- // Non-versioned path — existing behavior unchanged
607
- // Service routes — collect all, sort by optional exported `priority`, then mount
608
- const serviceGlob = new Bun.Glob("**/*.ts");
609
- const serviceFiles = [];
610
- for await (const file of serviceGlob.scan({ cwd: routesDir })) {
611
- serviceFiles.push(file);
612
- }
613
- const serviceMods = await Promise.all(serviceFiles.map(async (file) => ({
614
- file,
615
- mod: await import(`${routesDir}/${file}`),
616
- })));
617
- serviceMods
618
- .sort((a, b) => (a.mod.priority ?? Infinity) - (b.mod.priority ?? Infinity))
619
- .forEach(({ mod }) => {
620
- if (mod.router)
621
- app.route("/", mod.router);
622
- });
623
- registerSecuritySchemes(app.openAPIRegistry);
624
- app.doc("/openapi.json", { openapi: "3.0.0", info: { title: appName, version: openApiVersion } });
625
- app.get("/docs", Scalar({ url: "/openapi.json" }));
626
- }
627
- app.onError((err, c) => {
628
- const reqId = c.get("requestId") ?? "unknown";
629
- // ValidationError extends HttpError — must check first or the details payload is lost
630
- if (err instanceof ValidationError) {
631
- const fmt = c.get("validationErrorFormatter") ?? defaultValidationErrorFormatter;
632
- try {
633
- return c.json(fmt(err.issues, reqId), 400);
634
- }
635
- catch {
636
- return c.json(defaultValidationErrorFormatter(err.issues, reqId), 400);
637
- }
638
- }
639
- if (err instanceof HttpError) {
640
- const body = { error: err.message, requestId: reqId };
641
- if (err.code !== undefined)
642
- body.code = err.code;
643
- return c.json(body, err.status);
644
- }
645
- console.error(err);
646
- return c.json({ error: "Internal Server Error", requestId: reqId }, 500);
647
- });
648
- app.notFound((c) => c.json({ error: "Not Found", requestId: c.get("requestId") ?? "unknown" }, 404));
649
- app.get("/sw.js", (c) => c.body("", 200, { "Content-Type": "application/javascript" }));
650
- return app;
651
- };
@@ -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";