@lastshotlabs/bunshot 0.0.27 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (742) hide show
  1. package/.oclif.manifest.json +39 -0
  2. package/README.md +8282 -2147
  3. package/dist/cli/commands/init.js +690 -0
  4. package/dist/cli/index.js +6 -0
  5. package/dist/cli.js +4 -4
  6. package/dist/packages/bunshot-admin/src/index.d.ts +15 -0
  7. package/dist/packages/bunshot-admin/src/index.js +11 -0
  8. package/dist/packages/bunshot-admin/src/lib/resourceTypes.d.ts +8 -0
  9. package/dist/packages/bunshot-admin/src/lib/resourceTypes.js +33 -0
  10. package/dist/packages/bunshot-admin/src/lib/typedRoute.d.ts +14 -0
  11. package/dist/packages/bunshot-admin/src/lib/typedRoute.js +17 -0
  12. package/dist/packages/bunshot-admin/src/plugin.d.ts +4 -0
  13. package/dist/packages/bunshot-admin/src/plugin.js +46 -0
  14. package/dist/packages/bunshot-admin/src/providers/auth0Access.d.ts +6 -0
  15. package/dist/packages/bunshot-admin/src/providers/auth0Access.js +32 -0
  16. package/dist/packages/bunshot-admin/src/routes/admin.d.ts +10 -0
  17. package/dist/packages/bunshot-admin/src/routes/admin.js +923 -0
  18. package/dist/packages/bunshot-admin/src/routes/mail.d.ts +6 -0
  19. package/dist/packages/bunshot-admin/src/routes/mail.js +114 -0
  20. package/dist/packages/bunshot-admin/src/routes/permissions.d.ts +8 -0
  21. package/dist/packages/bunshot-admin/src/routes/permissions.js +315 -0
  22. package/dist/packages/bunshot-admin/src/types/config.d.ts +16 -0
  23. package/dist/packages/bunshot-admin/src/types/config.js +37 -0
  24. package/dist/packages/bunshot-admin/src/types/env.d.ts +14 -0
  25. package/dist/packages/bunshot-admin/src/types/provider.d.ts +1 -0
  26. package/dist/packages/bunshot-admin/src/types/provider.js +4 -0
  27. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.d.ts +66 -0
  28. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.js +1063 -0
  29. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.d.ts +2 -0
  30. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.js +536 -0
  31. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.d.ts +88 -0
  32. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.js +1366 -0
  33. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.d.ts +2 -0
  34. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.js +23 -0
  35. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.d.ts +5 -0
  36. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.js +131 -0
  37. package/dist/packages/bunshot-auth/src/bootstrap.d.ts +38 -0
  38. package/dist/packages/bunshot-auth/src/bootstrap.js +384 -0
  39. package/dist/packages/bunshot-auth/src/config/appConfig.d.ts +3 -0
  40. package/dist/packages/bunshot-auth/src/config/appConfig.js +4 -0
  41. package/dist/packages/bunshot-auth/src/config/authConfig.d.ts +478 -0
  42. package/dist/packages/bunshot-auth/src/config/authConfig.js +46 -0
  43. package/dist/packages/bunshot-auth/src/config/configLock.d.ts +2 -0
  44. package/dist/packages/bunshot-auth/src/config/configLock.js +10 -0
  45. package/dist/packages/bunshot-auth/src/index.d.ts +25 -0
  46. package/dist/packages/bunshot-auth/src/index.js +23 -0
  47. package/dist/packages/bunshot-auth/src/infra/mongo.d.ts +15 -0
  48. package/dist/packages/bunshot-auth/src/infra/mongo.js +44 -0
  49. package/dist/packages/bunshot-auth/src/infra/queue.d.ts +14 -0
  50. package/dist/packages/bunshot-auth/src/infra/queue.js +27 -0
  51. package/dist/packages/bunshot-auth/src/infra/redis.d.ts +5 -0
  52. package/dist/packages/bunshot-auth/src/infra/redis.js +15 -0
  53. package/dist/packages/bunshot-auth/src/infra/signing.d.ts +7 -0
  54. package/dist/packages/bunshot-auth/src/infra/signing.js +8 -0
  55. package/dist/packages/bunshot-auth/src/lib/accountLockout.d.ts +34 -0
  56. package/dist/packages/bunshot-auth/src/lib/accountLockout.js +244 -0
  57. package/dist/packages/bunshot-auth/src/lib/adapterTiers.d.ts +1 -0
  58. package/dist/packages/bunshot-auth/src/lib/adapterTiers.js +1 -0
  59. package/dist/packages/bunshot-auth/src/lib/authAdapter.d.ts +1 -0
  60. package/dist/packages/bunshot-auth/src/lib/authAdapter.js +1 -0
  61. package/dist/packages/bunshot-auth/src/lib/authContext.d.ts +15 -0
  62. package/dist/packages/bunshot-auth/src/lib/authContext.js +1 -0
  63. package/dist/packages/bunshot-auth/src/lib/authEventBus.d.ts +4 -0
  64. package/dist/packages/bunshot-auth/src/lib/authEventBus.js +15 -0
  65. package/dist/packages/bunshot-auth/src/lib/authRateLimit.d.ts +28 -0
  66. package/dist/packages/bunshot-auth/src/lib/authRateLimit.js +205 -0
  67. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.d.ts +8 -2
  68. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.js +22 -9
  69. package/dist/packages/bunshot-auth/src/lib/cache.d.ts +12 -0
  70. package/dist/packages/bunshot-auth/src/lib/cache.js +120 -0
  71. package/dist/packages/bunshot-auth/src/lib/clientIp.d.ts +4 -0
  72. package/dist/{lib → packages/bunshot-auth/src/lib}/clientIp.js +14 -7
  73. package/dist/packages/bunshot-auth/src/lib/cookieOptions.d.ts +27 -0
  74. package/dist/packages/bunshot-auth/src/lib/cookieOptions.js +33 -0
  75. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.d.ts +40 -0
  76. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.js +211 -0
  77. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.d.ts +19 -0
  78. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.js +148 -0
  79. package/dist/packages/bunshot-auth/src/lib/emailTemplates.d.ts +23 -0
  80. package/dist/packages/bunshot-auth/src/lib/emailTemplates.js +265 -0
  81. package/dist/packages/bunshot-auth/src/lib/emailVerification.d.ts +30 -0
  82. package/dist/packages/bunshot-auth/src/lib/emailVerification.js +200 -0
  83. package/dist/packages/bunshot-auth/src/lib/env.d.ts +1 -0
  84. package/dist/packages/bunshot-auth/src/lib/env.js +3 -0
  85. package/dist/packages/bunshot-auth/src/lib/fingerprint.js +36 -0
  86. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.d.ts +15 -16
  87. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.js +22 -34
  88. package/dist/packages/bunshot-auth/src/lib/jwks.d.ts +28 -0
  89. package/dist/packages/bunshot-auth/src/lib/jwks.js +79 -0
  90. package/dist/packages/bunshot-auth/src/lib/jwt.d.ts +12 -0
  91. package/dist/packages/bunshot-auth/src/lib/jwt.js +86 -0
  92. package/dist/{lib → packages/bunshot-auth/src/lib}/logger.js +3 -3
  93. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.d.ts +5 -4
  94. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.js +6 -10
  95. package/dist/packages/bunshot-auth/src/lib/magicLink.d.ts +13 -0
  96. package/dist/packages/bunshot-auth/src/lib/magicLink.js +145 -0
  97. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.d.ts +60 -0
  98. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.js +419 -0
  99. package/dist/packages/bunshot-auth/src/lib/oauth.d.ts +82 -0
  100. package/dist/packages/bunshot-auth/src/lib/oauth.js +177 -0
  101. package/dist/packages/bunshot-auth/src/lib/oauthCode.d.ts +19 -0
  102. package/dist/packages/bunshot-auth/src/lib/oauthCode.js +182 -0
  103. package/dist/packages/bunshot-auth/src/lib/oauthReauth.d.ts +19 -0
  104. package/dist/packages/bunshot-auth/src/lib/oauthReauth.js +255 -0
  105. package/dist/packages/bunshot-auth/src/lib/organization.d.ts +66 -0
  106. package/dist/packages/bunshot-auth/src/lib/organization.js +225 -0
  107. package/dist/packages/bunshot-auth/src/lib/passwordHistory.d.ts +12 -0
  108. package/dist/packages/bunshot-auth/src/lib/passwordHistory.js +31 -0
  109. package/dist/packages/bunshot-auth/src/lib/resetPassword.d.ts +20 -0
  110. package/dist/packages/bunshot-auth/src/lib/resetPassword.js +148 -0
  111. package/dist/packages/bunshot-auth/src/lib/roles.d.ts +9 -0
  112. package/dist/packages/bunshot-auth/src/lib/roles.js +93 -0
  113. package/dist/packages/bunshot-auth/src/lib/saml.d.ts +29 -0
  114. package/dist/packages/bunshot-auth/src/lib/saml.js +73 -0
  115. package/dist/packages/bunshot-auth/src/lib/samlRequestId.d.ts +13 -0
  116. package/dist/packages/bunshot-auth/src/lib/samlRequestId.js +129 -0
  117. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.d.ts +7 -7
  118. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.js +15 -13
  119. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.d.ts +22 -0
  120. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.js +65 -0
  121. package/dist/packages/bunshot-auth/src/lib/session.d.ts +45 -0
  122. package/dist/packages/bunshot-auth/src/lib/session.js +1211 -0
  123. package/dist/packages/bunshot-auth/src/lib/storeInfra.d.ts +26 -0
  124. package/dist/packages/bunshot-auth/src/lib/storeInfra.js +18 -0
  125. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.d.ts +3 -2
  126. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.js +2 -5
  127. package/dist/packages/bunshot-auth/src/lib/validateAdapter.d.ts +16 -0
  128. package/dist/packages/bunshot-auth/src/lib/validateAdapter.js +161 -0
  129. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.d.ts +13 -0
  130. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.js +58 -0
  131. package/dist/{middleware → packages/bunshot-auth/src/middleware}/csrf.d.ts +5 -4
  132. package/dist/packages/bunshot-auth/src/middleware/csrf.js +138 -0
  133. package/dist/packages/bunshot-auth/src/middleware/identify.d.ts +4 -0
  134. package/dist/packages/bunshot-auth/src/middleware/identify.js +124 -0
  135. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.d.ts +2 -2
  136. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.js +10 -8
  137. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.d.ts +2 -2
  138. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.js +20 -16
  139. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.d.ts +2 -2
  140. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.js +6 -6
  141. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.d.ts +2 -2
  142. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.js +8 -7
  143. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.d.ts +2 -2
  144. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.js +7 -6
  145. package/dist/packages/bunshot-auth/src/middleware/scimAuth.d.ts +8 -0
  146. package/dist/packages/bunshot-auth/src/middleware/scimAuth.js +29 -0
  147. package/dist/packages/bunshot-auth/src/middleware/userAuth.d.ts +3 -0
  148. package/dist/packages/bunshot-auth/src/middleware/userAuth.js +6 -0
  149. package/dist/{models → packages/bunshot-auth/src/models}/AuthUser.d.ts +12 -8
  150. package/dist/packages/bunshot-auth/src/models/AuthUser.js +53 -0
  151. package/dist/packages/bunshot-auth/src/models/Group.d.ts +19 -0
  152. package/dist/packages/bunshot-auth/src/models/Group.js +22 -0
  153. package/dist/{models → packages/bunshot-auth/src/models}/GroupMembership.d.ts +6 -8
  154. package/dist/packages/bunshot-auth/src/models/GroupMembership.js +19 -0
  155. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.d.ts +1 -1
  156. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.js +5 -5
  157. package/dist/packages/bunshot-auth/src/models/TenantRole.d.ts +13 -0
  158. package/dist/packages/bunshot-auth/src/models/TenantRole.js +17 -0
  159. package/dist/packages/bunshot-auth/src/plugin.d.ts +4 -0
  160. package/dist/packages/bunshot-auth/src/plugin.js +277 -0
  161. package/dist/packages/bunshot-auth/src/routes/auth.d.ts +15 -0
  162. package/dist/packages/bunshot-auth/src/routes/auth.js +1624 -0
  163. package/dist/packages/bunshot-auth/src/routes/groups.d.ts +4 -0
  164. package/dist/packages/bunshot-auth/src/routes/groups.js +481 -0
  165. package/dist/packages/bunshot-auth/src/routes/m2m.d.ts +2 -0
  166. package/dist/packages/bunshot-auth/src/routes/m2m.js +145 -0
  167. package/dist/packages/bunshot-auth/src/routes/mfa.d.ts +6 -0
  168. package/dist/packages/bunshot-auth/src/routes/mfa.js +991 -0
  169. package/dist/packages/bunshot-auth/src/routes/oauth.d.ts +3 -0
  170. package/dist/packages/bunshot-auth/src/routes/oauth.js +1727 -0
  171. package/dist/packages/bunshot-auth/src/routes/oidc.d.ts +2 -0
  172. package/dist/packages/bunshot-auth/src/routes/oidc.js +84 -0
  173. package/dist/packages/bunshot-auth/src/routes/organizations.d.ts +3 -0
  174. package/dist/packages/bunshot-auth/src/routes/organizations.js +741 -0
  175. package/dist/packages/bunshot-auth/src/routes/passkey.d.ts +2 -0
  176. package/dist/packages/bunshot-auth/src/routes/passkey.js +199 -0
  177. package/dist/packages/bunshot-auth/src/routes/saml.d.ts +2 -0
  178. package/dist/packages/bunshot-auth/src/routes/saml.js +226 -0
  179. package/dist/packages/bunshot-auth/src/routes/scim.d.ts +3 -0
  180. package/dist/packages/bunshot-auth/src/routes/scim.js +588 -0
  181. package/dist/packages/bunshot-auth/src/runtime.d.ts +52 -0
  182. package/dist/packages/bunshot-auth/src/runtime.js +11 -0
  183. package/dist/{schemas → packages/bunshot-auth/src/schemas}/auth.d.ts +4 -5
  184. package/dist/packages/bunshot-auth/src/schemas/auth.js +24 -0
  185. package/dist/packages/bunshot-auth/src/schemas/error.d.ts +10 -0
  186. package/dist/packages/bunshot-auth/src/schemas/error.js +10 -0
  187. package/dist/packages/bunshot-auth/src/schemas/success.d.ts +10 -0
  188. package/dist/packages/bunshot-auth/src/schemas/success.js +10 -0
  189. package/dist/packages/bunshot-auth/src/services/auth.d.ts +39 -0
  190. package/dist/packages/bunshot-auth/src/services/auth.js +378 -0
  191. package/dist/{services → packages/bunshot-auth/src/services}/mfa.d.ts +41 -17
  192. package/dist/{services → packages/bunshot-auth/src/services}/mfa.js +259 -183
  193. package/dist/packages/bunshot-auth/src/testing.d.ts +31 -0
  194. package/dist/packages/bunshot-auth/src/testing.js +23 -0
  195. package/dist/packages/bunshot-auth/src/types/adapter.d.ts +1 -0
  196. package/dist/packages/bunshot-auth/src/types/adapter.js +1 -0
  197. package/dist/packages/bunshot-auth/src/types/config.d.ts +152 -0
  198. package/dist/packages/bunshot-auth/src/types/config.js +179 -0
  199. package/dist/{routes → packages/bunshot-auth/src/types}/groups.d.ts +2 -3
  200. package/dist/packages/bunshot-auth/src/types/groups.js +1 -0
  201. package/dist/packages/bunshot-auth/src/types/oauthCode.d.ts +6 -0
  202. package/dist/packages/bunshot-auth/src/types/oauthCode.js +1 -0
  203. package/dist/packages/bunshot-auth/src/types/oauthReauth.d.ts +13 -0
  204. package/dist/packages/bunshot-auth/src/types/oauthReauth.js +1 -0
  205. package/dist/packages/bunshot-auth/src/types/redis.d.ts +1 -0
  206. package/dist/packages/bunshot-auth/src/types/redis.js +1 -0
  207. package/dist/packages/bunshot-auth/src/types/saml.d.ts +10 -0
  208. package/dist/packages/bunshot-auth/src/types/saml.js +1 -0
  209. package/dist/packages/bunshot-auth/src/types/session.d.ts +18 -0
  210. package/dist/packages/bunshot-auth/src/types/session.js +1 -0
  211. package/dist/packages/bunshot-auth/src/types/store.d.ts +1 -0
  212. package/dist/packages/bunshot-auth/src/types/store.js +1 -0
  213. package/dist/packages/bunshot-core/src/adminProvider.d.ts +95 -0
  214. package/dist/packages/bunshot-core/src/adminProvider.js +1 -0
  215. package/dist/packages/bunshot-core/src/auditLog.d.ts +34 -0
  216. package/dist/packages/bunshot-core/src/auditLog.js +1 -0
  217. package/dist/packages/bunshot-core/src/auth-adapter.d.ts +227 -0
  218. package/dist/packages/bunshot-core/src/auth-adapter.js +4 -0
  219. package/dist/packages/bunshot-core/src/authVariables.d.ts +14 -0
  220. package/dist/packages/bunshot-core/src/authVariables.js +4 -0
  221. package/dist/packages/bunshot-core/src/cache.d.ts +12 -0
  222. package/dist/packages/bunshot-core/src/cache.js +21 -0
  223. package/dist/{lib → packages/bunshot-core/src}/captcha.d.ts +1 -10
  224. package/dist/packages/bunshot-core/src/captcha.js +1 -0
  225. package/dist/packages/bunshot-core/src/clearRegistry.d.ts +6 -0
  226. package/dist/packages/bunshot-core/src/clearRegistry.js +17 -0
  227. package/dist/packages/bunshot-core/src/clientIp.d.ts +3 -0
  228. package/dist/packages/bunshot-core/src/clientIp.js +45 -0
  229. package/dist/packages/bunshot-core/src/configLock.d.ts +4 -0
  230. package/dist/packages/bunshot-core/src/configLock.js +7 -0
  231. package/dist/packages/bunshot-core/src/configValidation.d.ts +22 -0
  232. package/dist/packages/bunshot-core/src/configValidation.js +39 -0
  233. package/dist/packages/bunshot-core/src/constants.js +10 -0
  234. package/dist/packages/bunshot-core/src/context/bunshotContext.d.ts +232 -0
  235. package/dist/packages/bunshot-core/src/context/bunshotContext.js +1 -0
  236. package/dist/packages/bunshot-core/src/context/contextAccess.d.ts +3 -0
  237. package/dist/packages/bunshot-core/src/context/contextAccess.js +16 -0
  238. package/dist/packages/bunshot-core/src/context/contextStore.d.ts +16 -0
  239. package/dist/packages/bunshot-core/src/context/contextStore.js +31 -0
  240. package/dist/packages/bunshot-core/src/context/frameworkConfig.d.ts +38 -0
  241. package/dist/packages/bunshot-core/src/context/frameworkConfig.js +1 -0
  242. package/dist/packages/bunshot-core/src/context/index.d.ts +4 -0
  243. package/dist/packages/bunshot-core/src/context/index.js +2 -0
  244. package/dist/packages/bunshot-core/src/context.d.ts +40 -0
  245. package/dist/packages/bunshot-core/src/context.js +35 -0
  246. package/dist/packages/bunshot-core/src/coreContracts.d.ts +47 -0
  247. package/dist/packages/bunshot-core/src/coreContracts.js +1 -0
  248. package/dist/packages/bunshot-core/src/coreRegistrar.d.ts +6 -0
  249. package/dist/packages/bunshot-core/src/coreRegistrar.js +42 -0
  250. package/dist/{lib → packages/bunshot-core/src}/createRoute.d.ts +4 -30
  251. package/dist/{lib → packages/bunshot-core/src}/createRoute.js +39 -88
  252. package/dist/packages/bunshot-core/src/cronRegistry.d.ts +11 -0
  253. package/dist/packages/bunshot-core/src/cronRegistry.js +1 -0
  254. package/dist/packages/bunshot-core/src/crypto.d.ts +43 -0
  255. package/dist/packages/bunshot-core/src/crypto.js +74 -0
  256. package/dist/packages/bunshot-core/src/csrf.d.ts +8 -0
  257. package/dist/packages/bunshot-core/src/csrf.js +1 -0
  258. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.d.ts +7 -0
  259. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.js +19 -0
  260. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.d.ts +6 -0
  261. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.js +40 -0
  262. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.d.ts +6 -0
  263. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.js +24 -0
  264. package/dist/packages/bunshot-core/src/emailTemplates.d.ts +5 -0
  265. package/dist/packages/bunshot-core/src/emailTemplates.js +10 -0
  266. package/dist/{lib/HttpError.d.ts → packages/bunshot-core/src/errors.d.ts} +4 -1
  267. package/dist/{lib/HttpError.js → packages/bunshot-core/src/errors.js} +7 -1
  268. package/dist/packages/bunshot-core/src/eventBus.d.ts +270 -0
  269. package/dist/packages/bunshot-core/src/eventBus.js +143 -0
  270. package/dist/packages/bunshot-core/src/idempotency.d.ts +18 -0
  271. package/dist/packages/bunshot-core/src/idempotency.js +1 -0
  272. package/dist/packages/bunshot-core/src/index.d.ts +60 -0
  273. package/dist/packages/bunshot-core/src/index.js +34 -0
  274. package/dist/packages/bunshot-core/src/mail.d.ts +14 -0
  275. package/dist/packages/bunshot-core/src/mail.js +8 -0
  276. package/dist/packages/bunshot-core/src/memoryEviction.d.ts +24 -0
  277. package/dist/packages/bunshot-core/src/memoryEviction.js +52 -0
  278. package/dist/packages/bunshot-core/src/pagination.d.ts +45 -0
  279. package/dist/packages/bunshot-core/src/pagination.js +61 -0
  280. package/dist/packages/bunshot-core/src/permissions.d.ts +64 -0
  281. package/dist/packages/bunshot-core/src/permissions.js +27 -0
  282. package/dist/packages/bunshot-core/src/plugin.d.ts +44 -0
  283. package/dist/packages/bunshot-core/src/plugin.js +1 -0
  284. package/dist/packages/bunshot-core/src/rateLimit.d.ts +5 -0
  285. package/dist/packages/bunshot-core/src/rateLimit.js +18 -0
  286. package/dist/packages/bunshot-core/src/redis.d.ts +21 -0
  287. package/dist/packages/bunshot-core/src/redis.js +1 -0
  288. package/dist/packages/bunshot-core/src/routeAuth.d.ts +5 -0
  289. package/dist/packages/bunshot-core/src/routeAuth.js +11 -0
  290. package/dist/packages/bunshot-core/src/routeOverrides.d.ts +24 -0
  291. package/dist/packages/bunshot-core/src/routeOverrides.js +25 -0
  292. package/dist/packages/bunshot-core/src/routerAdapter.d.ts +6 -0
  293. package/dist/packages/bunshot-core/src/routerAdapter.js +56 -0
  294. package/dist/packages/bunshot-core/src/secrets.d.ts +48 -0
  295. package/dist/packages/bunshot-core/src/secrets.js +8 -0
  296. package/dist/packages/bunshot-core/src/signing.d.ts +41 -0
  297. package/dist/packages/bunshot-core/src/signing.js +1 -0
  298. package/dist/packages/bunshot-core/src/sse.d.ts +36 -0
  299. package/dist/packages/bunshot-core/src/sse.js +1 -0
  300. package/dist/packages/bunshot-core/src/storageAdapter.js +1 -0
  301. package/dist/packages/bunshot-core/src/storeInfra.d.ts +44 -0
  302. package/dist/packages/bunshot-core/src/storeInfra.js +18 -0
  303. package/dist/packages/bunshot-core/src/storeType.d.ts +7 -0
  304. package/dist/packages/bunshot-core/src/storeType.js +1 -0
  305. package/dist/packages/bunshot-core/src/testing.d.ts +1 -0
  306. package/dist/packages/bunshot-core/src/testing.js +1 -0
  307. package/dist/packages/bunshot-core/src/uploadRegistry.d.ts +23 -0
  308. package/dist/packages/bunshot-core/src/uploadRegistry.js +4 -0
  309. package/dist/packages/bunshot-core/src/userResolver.d.ts +5 -0
  310. package/dist/packages/bunshot-core/src/userResolver.js +14 -0
  311. package/dist/packages/bunshot-core/src/wsMessages.d.ts +42 -0
  312. package/dist/packages/bunshot-core/src/wsMessages.js +4 -0
  313. package/dist/packages/bunshot-permissions/src/adapters/memory.d.ts +7 -0
  314. package/dist/packages/bunshot-permissions/src/adapters/memory.js +73 -0
  315. package/dist/packages/bunshot-permissions/src/index.d.ts +10 -0
  316. package/dist/packages/bunshot-permissions/src/index.js +5 -0
  317. package/dist/packages/bunshot-permissions/src/lib/bootstrap.d.ts +7 -0
  318. package/dist/packages/bunshot-permissions/src/lib/bootstrap.js +12 -0
  319. package/dist/packages/bunshot-permissions/src/lib/evaluator.d.ts +10 -0
  320. package/dist/packages/bunshot-permissions/src/lib/evaluator.js +165 -0
  321. package/dist/packages/bunshot-permissions/src/lib/registry.d.ts +2 -0
  322. package/dist/packages/bunshot-permissions/src/lib/registry.js +31 -0
  323. package/dist/packages/bunshot-permissions/src/lib/validation.d.ts +1 -0
  324. package/dist/packages/bunshot-permissions/src/lib/validation.js +1 -0
  325. package/dist/packages/bunshot-permissions/src/types/adapter.d.ts +1 -0
  326. package/dist/packages/bunshot-permissions/src/types/adapter.js +1 -0
  327. package/dist/packages/bunshot-permissions/src/types/evaluator.d.ts +1 -0
  328. package/dist/packages/bunshot-permissions/src/types/evaluator.js +1 -0
  329. package/dist/packages/bunshot-permissions/src/types/models.d.ts +1 -0
  330. package/dist/packages/bunshot-permissions/src/types/models.js +1 -0
  331. package/dist/packages/bunshot-permissions/src/types/registry.d.ts +1 -0
  332. package/dist/packages/bunshot-permissions/src/types/registry.js +1 -0
  333. package/dist/packages/bunshot-postgres/src/adapter.d.ts +6 -0
  334. package/dist/packages/bunshot-postgres/src/adapter.js +794 -0
  335. package/dist/packages/bunshot-postgres/src/connection.d.ts +15 -0
  336. package/dist/packages/bunshot-postgres/src/connection.js +16 -0
  337. package/dist/packages/bunshot-postgres/src/index.d.ts +4 -0
  338. package/dist/packages/bunshot-postgres/src/index.js +2 -0
  339. package/dist/packages/bunshot-postgres/src/schema.d.ts +997 -0
  340. package/dist/packages/bunshot-postgres/src/schema.js +105 -0
  341. package/dist/src/app.d.ts +230 -0
  342. package/dist/src/app.js +182 -0
  343. package/dist/src/cli/commands/init.d.ts +10 -0
  344. package/dist/src/cli/commands/init.js +709 -0
  345. package/dist/src/cli/index.d.ts +1 -0
  346. package/dist/src/cli/index.js +3 -0
  347. package/dist/src/entrypoints/mongo.d.ts +6 -0
  348. package/dist/src/entrypoints/mongo.js +4 -0
  349. package/dist/src/entrypoints/queue.d.ts +2 -0
  350. package/dist/src/entrypoints/queue.js +1 -0
  351. package/dist/src/entrypoints/redis.d.ts +1 -0
  352. package/dist/src/entrypoints/redis.js +1 -0
  353. package/dist/{adapters → src/framework/adapters}/localStorage.d.ts +1 -1
  354. package/dist/{adapters → src/framework/adapters}/localStorage.js +10 -10
  355. package/dist/src/framework/adapters/memoryStorage.d.ts +2 -0
  356. package/dist/src/framework/adapters/memoryStorage.js +45 -0
  357. package/dist/{adapters → src/framework/adapters}/s3Storage.d.ts +1 -1
  358. package/dist/{adapters → src/framework/adapters}/s3Storage.js +12 -12
  359. package/dist/src/framework/admin/bunshotAccess.d.ts +2 -0
  360. package/dist/src/framework/admin/bunshotAccess.js +23 -0
  361. package/dist/src/framework/admin/bunshotUsers.d.ts +2 -0
  362. package/dist/src/framework/admin/bunshotUsers.js +103 -0
  363. package/dist/src/framework/admin/index.d.ts +7 -0
  364. package/dist/src/framework/admin/index.js +21 -0
  365. package/dist/src/framework/boundaryAdapters/cacheFactories.d.ts +13 -0
  366. package/dist/src/framework/boundaryAdapters/cacheFactories.js +86 -0
  367. package/dist/src/framework/boundaryAdapters/index.d.ts +2 -0
  368. package/dist/src/framework/boundaryAdapters/index.js +1 -0
  369. package/dist/src/framework/boundaryAdapters.d.ts +17 -0
  370. package/dist/src/framework/boundaryAdapters.js +62 -0
  371. package/dist/src/framework/buildContext.d.ts +33 -0
  372. package/dist/src/framework/buildContext.js +119 -0
  373. package/dist/src/framework/config/schema.d.ts +447 -0
  374. package/dist/src/framework/config/schema.js +528 -0
  375. package/dist/src/framework/createInfrastructure.d.ts +76 -0
  376. package/dist/src/framework/createInfrastructure.js +221 -0
  377. package/dist/src/framework/lib/auditLog.d.ts +23 -0
  378. package/dist/src/framework/lib/auditLog.js +416 -0
  379. package/dist/src/framework/lib/captcha.d.ts +11 -0
  380. package/dist/{lib → src/framework/lib}/captcha.js +13 -10
  381. package/dist/{lib → src/framework/lib}/createDtoMapper.js +4 -4
  382. package/dist/src/framework/lib/createRoute.d.ts +1 -0
  383. package/dist/src/framework/lib/createRoute.js +2 -0
  384. package/dist/{lib → src/framework/lib}/idempotency.d.ts +2 -6
  385. package/dist/src/framework/lib/idempotency.js +74 -0
  386. package/dist/src/framework/lib/logger.d.ts +3 -0
  387. package/dist/src/framework/lib/logger.js +14 -0
  388. package/dist/src/framework/lib/metrics.d.ts +34 -0
  389. package/dist/{lib → src/framework/lib}/metrics.js +49 -57
  390. package/dist/src/framework/lib/pagination.d.ts +42 -0
  391. package/dist/src/framework/lib/pagination.js +51 -0
  392. package/dist/src/framework/lib/redisTransport.d.ts +38 -0
  393. package/dist/src/framework/lib/redisTransport.js +107 -0
  394. package/dist/src/framework/lib/resolveUserId.d.ts +2 -0
  395. package/dist/src/framework/lib/resolveUserId.js +5 -0
  396. package/dist/src/framework/lib/sseCollision.d.ts +6 -0
  397. package/dist/src/framework/lib/sseCollision.js +26 -0
  398. package/dist/src/framework/lib/storageAdapter.d.ts +1 -0
  399. package/dist/src/framework/lib/storageAdapter.js +1 -0
  400. package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.js +4 -4
  401. package/dist/src/framework/lib/tenant.d.ts +21 -0
  402. package/dist/src/framework/lib/tenant.js +70 -0
  403. package/dist/{lib → src/framework/lib}/upload.d.ts +11 -10
  404. package/dist/src/framework/lib/upload.js +132 -0
  405. package/dist/src/framework/lib/uploadRegistry.d.ts +23 -0
  406. package/dist/src/framework/lib/uploadRegistry.js +34 -0
  407. package/dist/{lib → src/framework/lib}/validate.d.ts +1 -1
  408. package/dist/{lib → src/framework/lib}/validate.js +2 -2
  409. package/dist/src/framework/lib/ws.d.ts +19 -0
  410. package/dist/src/framework/lib/ws.js +130 -0
  411. package/dist/src/framework/lib/wsHeartbeat.d.ts +12 -0
  412. package/dist/src/framework/lib/wsHeartbeat.js +53 -0
  413. package/dist/src/framework/lib/wsMessages.d.ts +25 -0
  414. package/dist/src/framework/lib/wsMessages.js +45 -0
  415. package/dist/src/framework/lib/wsNamespace.d.ts +17 -0
  416. package/dist/src/framework/lib/wsNamespace.js +19 -0
  417. package/dist/src/framework/lib/wsPresence.d.ts +17 -0
  418. package/dist/src/framework/lib/wsPresence.js +84 -0
  419. package/dist/src/framework/lib/wsTransport.d.ts +38 -0
  420. package/dist/src/framework/lib/wsTransport.js +9 -0
  421. package/dist/{lib → src/framework/lib}/zodToMongoose.d.ts +1 -1
  422. package/dist/{lib → src/framework/lib}/zodToMongoose.js +11 -11
  423. package/dist/{middleware → src/framework/middleware}/auditLog.d.ts +4 -3
  424. package/dist/src/framework/middleware/auditLog.js +42 -0
  425. package/dist/{middleware → src/framework/middleware}/botProtection.d.ts +2 -2
  426. package/dist/{middleware → src/framework/middleware}/botProtection.js +8 -9
  427. package/dist/src/framework/middleware/cacheResponse.d.ts +35 -0
  428. package/dist/src/framework/middleware/cacheResponse.js +126 -0
  429. package/dist/{middleware → src/framework/middleware}/captcha.d.ts +2 -3
  430. package/dist/src/framework/middleware/captcha.js +37 -0
  431. package/dist/{middleware → src/framework/middleware}/errorHandler.d.ts +1 -1
  432. package/dist/{middleware → src/framework/middleware}/errorHandler.js +2 -2
  433. package/dist/src/framework/middleware/index.js +1 -0
  434. package/dist/{middleware → src/framework/middleware}/logger.d.ts +1 -1
  435. package/dist/src/framework/middleware/metrics.d.ts +12 -0
  436. package/dist/src/framework/middleware/metrics.js +26 -0
  437. package/dist/{middleware → src/framework/middleware}/rateLimit.d.ts +2 -2
  438. package/dist/src/framework/middleware/rateLimit.js +22 -0
  439. package/dist/src/framework/middleware/requestId.d.ts +3 -0
  440. package/dist/{middleware → src/framework/middleware}/requestId.js +2 -2
  441. package/dist/{middleware → src/framework/middleware}/requestLogger.d.ts +3 -3
  442. package/dist/{middleware → src/framework/middleware}/requestLogger.js +17 -12
  443. package/dist/{middleware → src/framework/middleware}/requestSigning.d.ts +2 -2
  444. package/dist/{middleware → src/framework/middleware}/requestSigning.js +18 -20
  445. package/dist/src/framework/middleware/tenant.d.ts +14 -0
  446. package/dist/{middleware → src/framework/middleware}/tenant.js +31 -27
  447. package/dist/src/framework/middleware/upload.d.ts +5 -0
  448. package/dist/{middleware → src/framework/middleware}/upload.js +4 -4
  449. package/dist/{middleware → src/framework/middleware}/webhookAuth.d.ts +3 -3
  450. package/dist/{middleware → src/framework/middleware}/webhookAuth.js +11 -12
  451. package/dist/src/framework/models/AuditLog.d.ts +21 -0
  452. package/dist/src/framework/models/AuditLog.js +31 -0
  453. package/dist/src/framework/mountMiddleware.d.ts +91 -0
  454. package/dist/src/framework/mountMiddleware.js +128 -0
  455. package/dist/src/framework/mountOptionalEndpoints.d.ts +103 -0
  456. package/dist/src/framework/mountOptionalEndpoints.js +64 -0
  457. package/dist/src/framework/mountRoutes.d.ts +21 -0
  458. package/dist/src/framework/mountRoutes.js +144 -0
  459. package/dist/src/framework/persistence/cronRegistry.d.ts +28 -0
  460. package/dist/src/framework/persistence/cronRegistry.js +139 -0
  461. package/dist/src/framework/persistence/idempotency.d.ts +26 -0
  462. package/dist/src/framework/persistence/idempotency.js +178 -0
  463. package/dist/src/framework/persistence/index.d.ts +6 -0
  464. package/dist/src/framework/persistence/index.js +8 -0
  465. package/dist/src/framework/persistence/storeInfra.d.ts +9 -0
  466. package/dist/src/framework/persistence/storeInfra.js +1 -0
  467. package/dist/src/framework/persistence/uploadRegistry.d.ts +35 -0
  468. package/dist/src/framework/persistence/uploadRegistry.js +235 -0
  469. package/dist/src/framework/persistence/wsMessages.d.ts +22 -0
  470. package/dist/src/framework/persistence/wsMessages.js +296 -0
  471. package/dist/src/framework/preloadSchemas.d.ts +24 -0
  472. package/dist/src/framework/preloadSchemas.js +42 -0
  473. package/dist/src/framework/registerBoundaryAdapters.d.ts +23 -0
  474. package/dist/src/framework/registerBoundaryAdapters.js +46 -0
  475. package/dist/src/framework/routes/admin.d.ts +9 -0
  476. package/dist/src/framework/routes/admin.js +361 -0
  477. package/dist/src/framework/routes/health.d.ts +1 -0
  478. package/dist/src/framework/routes/health.js +21 -0
  479. package/dist/src/framework/routes/home.d.ts +1 -0
  480. package/dist/src/framework/routes/home.js +18 -0
  481. package/dist/src/framework/routes/jobs.d.ts +3 -0
  482. package/dist/{routes → src/framework/routes}/jobs.js +128 -103
  483. package/dist/src/framework/routes/metrics.d.ts +10 -0
  484. package/dist/src/framework/routes/metrics.js +57 -0
  485. package/dist/{routes → src/framework/routes}/uploads.d.ts +3 -3
  486. package/dist/src/framework/routes/uploads.js +262 -0
  487. package/dist/src/framework/runPluginLifecycle.d.ts +27 -0
  488. package/dist/src/framework/runPluginLifecycle.js +121 -0
  489. package/dist/src/framework/secrets/frameworkSecretSchema.d.ts +58 -0
  490. package/dist/src/framework/secrets/frameworkSecretSchema.js +20 -0
  491. package/dist/src/framework/secrets/index.d.ts +9 -0
  492. package/dist/src/framework/secrets/index.js +7 -0
  493. package/dist/src/framework/secrets/providers/envProvider.d.ts +15 -0
  494. package/dist/src/framework/secrets/providers/envProvider.js +18 -0
  495. package/dist/src/framework/secrets/providers/fileProvider.d.ts +8 -0
  496. package/dist/src/framework/secrets/providers/fileProvider.js +82 -0
  497. package/dist/src/framework/secrets/providers/ssmProvider.d.ts +20 -0
  498. package/dist/src/framework/secrets/providers/ssmProvider.js +127 -0
  499. package/dist/src/framework/secrets/resolveSecretBundle.d.ts +53 -0
  500. package/dist/src/framework/secrets/resolveSecretBundle.js +84 -0
  501. package/dist/src/framework/secrets/resolveSecrets.d.ts +18 -0
  502. package/dist/src/framework/secrets/resolveSecrets.js +34 -0
  503. package/dist/src/framework/sse/index.d.ts +21 -0
  504. package/dist/src/framework/sse/index.js +109 -0
  505. package/dist/src/framework/ws/index.d.ts +11 -0
  506. package/dist/src/framework/ws/index.js +8 -0
  507. package/dist/src/index.d.ts +87 -0
  508. package/dist/src/index.js +58 -0
  509. package/dist/src/lib/appConfig.d.ts +7 -0
  510. package/dist/src/lib/appConfig.js +27 -0
  511. package/dist/src/lib/appMeta.d.ts +7 -0
  512. package/dist/src/lib/appMeta.js +3 -0
  513. package/dist/src/lib/authConfig.d.ts +532 -0
  514. package/dist/{lib/appConfig.js → src/lib/authConfig.js} +75 -17
  515. package/dist/{lib → src/lib}/context.d.ts +6 -12
  516. package/dist/{lib → src/lib}/context.js +5 -5
  517. package/dist/src/lib/logger.d.ts +1 -0
  518. package/dist/src/lib/logger.js +1 -0
  519. package/dist/src/lib/mongo.d.ts +58 -0
  520. package/dist/src/lib/mongo.js +96 -0
  521. package/dist/src/lib/queue.d.ts +72 -0
  522. package/dist/src/lib/queue.js +152 -0
  523. package/dist/src/lib/redis.d.ts +28 -0
  524. package/dist/src/lib/redis.js +72 -0
  525. package/dist/{lib → src/lib}/signing.d.ts +2 -2
  526. package/dist/src/lib/signing.js +210 -0
  527. package/dist/src/lib/signingConfig.d.ts +40 -0
  528. package/dist/src/lib/signingConfig.js +28 -0
  529. package/dist/src/server.d.ts +146 -0
  530. package/dist/src/server.js +469 -0
  531. package/dist/src/shared/lib/HttpError.d.ts +1 -0
  532. package/dist/src/shared/lib/HttpError.js +2 -0
  533. package/dist/src/shared/lib/constants.d.ts +10 -0
  534. package/dist/src/shared/lib/crypto.d.ts +43 -0
  535. package/dist/src/shared/lib/crypto.js +74 -0
  536. package/dist/src/shared/lib/signing.d.ts +52 -0
  537. package/dist/{lib → src/shared/lib}/signing.js +35 -8
  538. package/dist/src/testing.d.ts +34 -0
  539. package/dist/src/testing.js +93 -0
  540. package/package.json +100 -26
  541. package/dist/adapters/memoryAuth.d.ts +0 -52
  542. package/dist/adapters/memoryAuth.js +0 -749
  543. package/dist/adapters/memoryStorage.d.ts +0 -3
  544. package/dist/adapters/memoryStorage.js +0 -44
  545. package/dist/adapters/mongoAuth.d.ts +0 -2
  546. package/dist/adapters/mongoAuth.js +0 -403
  547. package/dist/adapters/sqliteAuth.d.ts +0 -72
  548. package/dist/adapters/sqliteAuth.js +0 -858
  549. package/dist/app.d.ts +0 -559
  550. package/dist/app.js +0 -651
  551. package/dist/entrypoints/mongo.d.ts +0 -5
  552. package/dist/entrypoints/mongo.js +0 -4
  553. package/dist/entrypoints/queue.d.ts +0 -2
  554. package/dist/entrypoints/queue.js +0 -1
  555. package/dist/entrypoints/redis.d.ts +0 -1
  556. package/dist/entrypoints/redis.js +0 -1
  557. package/dist/index.d.ts +0 -117
  558. package/dist/index.js +0 -88
  559. package/dist/lib/appConfig.d.ts +0 -275
  560. package/dist/lib/auditLog.d.ts +0 -58
  561. package/dist/lib/auditLog.js +0 -218
  562. package/dist/lib/authAdapter.d.ts +0 -246
  563. package/dist/lib/authAdapter.js +0 -7
  564. package/dist/lib/authRateLimit.d.ts +0 -13
  565. package/dist/lib/authRateLimit.js +0 -117
  566. package/dist/lib/clientIp.d.ts +0 -14
  567. package/dist/lib/credentialStuffing.d.ts +0 -31
  568. package/dist/lib/credentialStuffing.js +0 -77
  569. package/dist/lib/crypto.d.ts +0 -11
  570. package/dist/lib/crypto.js +0 -22
  571. package/dist/lib/deletionCancelToken.d.ts +0 -12
  572. package/dist/lib/deletionCancelToken.js +0 -88
  573. package/dist/lib/emailVerification.d.ts +0 -19
  574. package/dist/lib/emailVerification.js +0 -129
  575. package/dist/lib/fingerprint.js +0 -36
  576. package/dist/lib/idempotency.js +0 -182
  577. package/dist/lib/jwks.d.ts +0 -25
  578. package/dist/lib/jwks.js +0 -51
  579. package/dist/lib/jwt.d.ts +0 -15
  580. package/dist/lib/jwt.js +0 -111
  581. package/dist/lib/metrics.d.ts +0 -14
  582. package/dist/lib/mfaChallenge.d.ts +0 -55
  583. package/dist/lib/mfaChallenge.js +0 -398
  584. package/dist/lib/mongo.d.ts +0 -39
  585. package/dist/lib/mongo.js +0 -124
  586. package/dist/lib/oauth.d.ts +0 -40
  587. package/dist/lib/oauth.js +0 -101
  588. package/dist/lib/oauthCode.d.ts +0 -15
  589. package/dist/lib/oauthCode.js +0 -95
  590. package/dist/lib/pagination.d.ts +0 -119
  591. package/dist/lib/pagination.js +0 -166
  592. package/dist/lib/queue.d.ts +0 -37
  593. package/dist/lib/queue.js +0 -117
  594. package/dist/lib/redis.d.ts +0 -9
  595. package/dist/lib/redis.js +0 -61
  596. package/dist/lib/resetPassword.d.ts +0 -12
  597. package/dist/lib/resetPassword.js +0 -93
  598. package/dist/lib/roles.d.ts +0 -7
  599. package/dist/lib/roles.js +0 -49
  600. package/dist/lib/saml.d.ts +0 -25
  601. package/dist/lib/saml.js +0 -64
  602. package/dist/lib/securityEvents.d.ts +0 -28
  603. package/dist/lib/securityEvents.js +0 -26
  604. package/dist/lib/session.d.ts +0 -49
  605. package/dist/lib/session.js +0 -597
  606. package/dist/lib/tenant.d.ts +0 -15
  607. package/dist/lib/tenant.js +0 -65
  608. package/dist/lib/upload.js +0 -112
  609. package/dist/lib/uploadRegistry.d.ts +0 -18
  610. package/dist/lib/uploadRegistry.js +0 -83
  611. package/dist/lib/ws.d.ts +0 -22
  612. package/dist/lib/ws.js +0 -96
  613. package/dist/lib/wsHeartbeat.d.ts +0 -12
  614. package/dist/lib/wsHeartbeat.js +0 -57
  615. package/dist/lib/wsMessages.d.ts +0 -40
  616. package/dist/lib/wsMessages.js +0 -330
  617. package/dist/lib/wsPresence.d.ts +0 -25
  618. package/dist/lib/wsPresence.js +0 -99
  619. package/dist/middleware/auditLog.js +0 -39
  620. package/dist/middleware/bearerAuth.d.ts +0 -2
  621. package/dist/middleware/bearerAuth.js +0 -11
  622. package/dist/middleware/cacheResponse.d.ts +0 -15
  623. package/dist/middleware/cacheResponse.js +0 -178
  624. package/dist/middleware/captcha.js +0 -36
  625. package/dist/middleware/csrf.js +0 -129
  626. package/dist/middleware/identify.d.ts +0 -3
  627. package/dist/middleware/identify.js +0 -122
  628. package/dist/middleware/index.js +0 -1
  629. package/dist/middleware/metrics.d.ts +0 -9
  630. package/dist/middleware/metrics.js +0 -26
  631. package/dist/middleware/rateLimit.js +0 -22
  632. package/dist/middleware/requestId.d.ts +0 -3
  633. package/dist/middleware/scimAuth.d.ts +0 -8
  634. package/dist/middleware/scimAuth.js +0 -29
  635. package/dist/middleware/tenant.d.ts +0 -5
  636. package/dist/middleware/upload.d.ts +0 -5
  637. package/dist/middleware/userAuth.d.ts +0 -3
  638. package/dist/middleware/userAuth.js +0 -6
  639. package/dist/models/AuditLog.d.ts +0 -30
  640. package/dist/models/AuditLog.js +0 -39
  641. package/dist/models/AuthUser.js +0 -55
  642. package/dist/models/Group.d.ts +0 -21
  643. package/dist/models/Group.js +0 -28
  644. package/dist/models/GroupMembership.js +0 -25
  645. package/dist/models/TenantRole.d.ts +0 -15
  646. package/dist/models/TenantRole.js +0 -23
  647. package/dist/routes/auth.d.ts +0 -12
  648. package/dist/routes/auth.js +0 -744
  649. package/dist/routes/groups.js +0 -346
  650. package/dist/routes/health.d.ts +0 -1
  651. package/dist/routes/health.js +0 -22
  652. package/dist/routes/home.d.ts +0 -1
  653. package/dist/routes/home.js +0 -16
  654. package/dist/routes/jobs.d.ts +0 -2
  655. package/dist/routes/m2m.d.ts +0 -2
  656. package/dist/routes/m2m.js +0 -72
  657. package/dist/routes/metrics.d.ts +0 -8
  658. package/dist/routes/metrics.js +0 -55
  659. package/dist/routes/mfa.d.ts +0 -5
  660. package/dist/routes/mfa.js +0 -628
  661. package/dist/routes/oauth.d.ts +0 -2
  662. package/dist/routes/oauth.js +0 -520
  663. package/dist/routes/oidc.d.ts +0 -2
  664. package/dist/routes/oidc.js +0 -29
  665. package/dist/routes/passkey.d.ts +0 -1
  666. package/dist/routes/passkey.js +0 -157
  667. package/dist/routes/saml.d.ts +0 -2
  668. package/dist/routes/saml.js +0 -86
  669. package/dist/routes/scim.d.ts +0 -2
  670. package/dist/routes/scim.js +0 -255
  671. package/dist/routes/uploads.js +0 -227
  672. package/dist/schemas/auth.js +0 -30
  673. package/dist/server.d.ts +0 -57
  674. package/dist/server.js +0 -112
  675. package/dist/services/auth.d.ts +0 -29
  676. package/dist/services/auth.js +0 -238
  677. package/dist/ws/index.d.ts +0 -10
  678. package/dist/ws/index.js +0 -39
  679. package/docs/sections/adding-middleware/full.md +0 -35
  680. package/docs/sections/adding-models/full.md +0 -125
  681. package/docs/sections/adding-models/overview.md +0 -13
  682. package/docs/sections/adding-routes/full.md +0 -182
  683. package/docs/sections/adding-routes/overview.md +0 -23
  684. package/docs/sections/auth-flow/full.md +0 -790
  685. package/docs/sections/auth-flow/overview.md +0 -10
  686. package/docs/sections/auth-security-examples/full.md +0 -388
  687. package/docs/sections/authentication/full.md +0 -130
  688. package/docs/sections/authentication/overview.md +0 -5
  689. package/docs/sections/cli/full.md +0 -42
  690. package/docs/sections/configuration/full.md +0 -172
  691. package/docs/sections/configuration/overview.md +0 -18
  692. package/docs/sections/configuration-example/full.md +0 -117
  693. package/docs/sections/configuration-example/overview.md +0 -30
  694. package/docs/sections/documentation/full.md +0 -171
  695. package/docs/sections/environment-variables/full.md +0 -55
  696. package/docs/sections/exports/full.md +0 -123
  697. package/docs/sections/extending-context/full.md +0 -59
  698. package/docs/sections/header.md +0 -3
  699. package/docs/sections/installation/full.md +0 -6
  700. package/docs/sections/jobs/full.md +0 -140
  701. package/docs/sections/jobs/overview.md +0 -15
  702. package/docs/sections/logging/full.md +0 -83
  703. package/docs/sections/metrics/full.md +0 -131
  704. package/docs/sections/mongodb-connections/full.md +0 -45
  705. package/docs/sections/mongodb-connections/overview.md +0 -7
  706. package/docs/sections/multi-tenancy/full.md +0 -66
  707. package/docs/sections/multi-tenancy/overview.md +0 -15
  708. package/docs/sections/oauth/full.md +0 -189
  709. package/docs/sections/oauth/overview.md +0 -16
  710. package/docs/sections/package-development/full.md +0 -7
  711. package/docs/sections/pagination/full.md +0 -93
  712. package/docs/sections/passkey-login/full.md +0 -90
  713. package/docs/sections/passkey-login/overview.md +0 -1
  714. package/docs/sections/peer-dependencies/full.md +0 -47
  715. package/docs/sections/quick-start/full.md +0 -43
  716. package/docs/sections/response-caching/full.md +0 -117
  717. package/docs/sections/response-caching/overview.md +0 -13
  718. package/docs/sections/roles/full.md +0 -225
  719. package/docs/sections/roles/overview.md +0 -14
  720. package/docs/sections/running-without-redis/full.md +0 -16
  721. package/docs/sections/running-without-redis-or-mongodb/full.md +0 -60
  722. package/docs/sections/signing/full.md +0 -203
  723. package/docs/sections/stack/full.md +0 -10
  724. package/docs/sections/uploads/full.md +0 -208
  725. package/docs/sections/versioning/full.md +0 -85
  726. package/docs/sections/webhook-auth/full.md +0 -100
  727. package/docs/sections/websocket/full.md +0 -196
  728. package/docs/sections/websocket/overview.md +0 -5
  729. package/docs/sections/websocket-rooms/full.md +0 -102
  730. package/docs/sections/websocket-rooms/overview.md +0 -5
  731. /package/dist/{lib/storageAdapter.js → packages/bunshot-admin/src/types/env.js} +0 -0
  732. /package/dist/{lib → packages/bunshot-auth/src/lib}/fingerprint.d.ts +0 -0
  733. /package/dist/{lib → packages/bunshot-auth/src/lib}/logger.d.ts +0 -0
  734. /package/dist/{lib → packages/bunshot-core/src}/constants.d.ts +0 -0
  735. /package/dist/{lib → packages/bunshot-core/src}/storageAdapter.d.ts +0 -0
  736. /package/dist/{lib → src/framework/lib}/createDtoMapper.d.ts +0 -0
  737. /package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.d.ts +0 -0
  738. /package/dist/{middleware → src/framework/middleware}/cors.d.ts +0 -0
  739. /package/dist/{middleware → src/framework/middleware}/cors.js +0 -0
  740. /package/dist/{middleware → src/framework/middleware}/index.d.ts +0 -0
  741. /package/dist/{middleware → src/framework/middleware}/logger.js +0 -0
  742. /package/dist/{lib → src/shared/lib}/constants.js +0 -0
@@ -0,0 +1,235 @@
1
+ import { DEFAULT_MAX_ENTRIES, evictOldest } from '../../../packages/bunshot-core/src/index.js';
2
+ export const DEFAULT_UPLOAD_REGISTRY_TTL_SECONDS = 30 * 24 * 60 * 60; // 30 days
3
+ export function createMemoryUploadRegistry(ttlSeconds = DEFAULT_UPLOAD_REGISTRY_TTL_SECONDS) {
4
+ const store = new Map();
5
+ return {
6
+ async register(record) {
7
+ evictOldest(store, DEFAULT_MAX_ENTRIES);
8
+ store.set(record.key, record);
9
+ },
10
+ async get(key) {
11
+ const record = store.get(key);
12
+ if (!record)
13
+ return null;
14
+ if (Date.now() - record.createdAt > ttlSeconds * 1000) {
15
+ store.delete(key);
16
+ return null;
17
+ }
18
+ return record;
19
+ },
20
+ async delete(key) {
21
+ return store.delete(key);
22
+ },
23
+ async clear() {
24
+ store.clear();
25
+ },
26
+ };
27
+ }
28
+ // ---------------------------------------------------------------------------
29
+ // Redis
30
+ // ---------------------------------------------------------------------------
31
+ export function createRedisUploadRegistry(redis, prefix, ttlSeconds = DEFAULT_UPLOAD_REGISTRY_TTL_SECONDS) {
32
+ function rkey(key) {
33
+ return `ur:${prefix}:${key}`;
34
+ }
35
+ return {
36
+ async register(record) {
37
+ await redis.set(rkey(record.key), JSON.stringify(record), 'EX', ttlSeconds);
38
+ },
39
+ async get(key) {
40
+ const raw = await redis.get(rkey(key));
41
+ if (!raw)
42
+ return null;
43
+ return JSON.parse(raw);
44
+ },
45
+ async delete(key) {
46
+ const deleted = await redis.del(rkey(key));
47
+ return deleted > 0;
48
+ },
49
+ };
50
+ }
51
+ // ---------------------------------------------------------------------------
52
+ // MongoDB
53
+ // ---------------------------------------------------------------------------
54
+ export function createMongoUploadRegistry(appConn, mongoosePkg, ttlSeconds = DEFAULT_UPLOAD_REGISTRY_TTL_SECONDS) {
55
+ function getModel() {
56
+ if (appConn.models['UploadRegistry'])
57
+ return appConn.models['UploadRegistry'];
58
+ const { Schema } = mongoosePkg;
59
+ const schema = new Schema({
60
+ key: { type: String, required: true, unique: true },
61
+ ownerUserId: { type: String },
62
+ tenantId: { type: String },
63
+ mimeType: { type: String },
64
+ bucket: { type: String },
65
+ createdAt: { type: Number, required: true },
66
+ expiresAt: { type: Date, required: true },
67
+ }, { collection: 'upload_registry' });
68
+ schema.index({ expiresAt: 1 }, { expireAfterSeconds: 0 });
69
+ return appConn.model('UploadRegistry', schema);
70
+ }
71
+ function expiresAt() {
72
+ return new Date(Date.now() + ttlSeconds * 1000);
73
+ }
74
+ return {
75
+ async register(record) {
76
+ await getModel().updateOne({ key: record.key }, { $set: { ...record, expiresAt: expiresAt() } }, { upsert: true });
77
+ },
78
+ async get(key) {
79
+ const doc = await getModel().findOne({ key }).lean();
80
+ if (!doc)
81
+ return null;
82
+ return {
83
+ key: doc.key,
84
+ ownerUserId: doc.ownerUserId,
85
+ tenantId: doc.tenantId,
86
+ mimeType: doc.mimeType,
87
+ bucket: doc.bucket,
88
+ createdAt: doc.createdAt,
89
+ };
90
+ },
91
+ async delete(key) {
92
+ const result = await getModel().deleteOne({ key });
93
+ return result.deletedCount > 0;
94
+ },
95
+ };
96
+ }
97
+ // ---------------------------------------------------------------------------
98
+ // SQLite
99
+ // ---------------------------------------------------------------------------
100
+ export function createSqliteUploadRegistry(db, ttlSeconds = DEFAULT_UPLOAD_REGISTRY_TTL_SECONDS) {
101
+ let initialized = false;
102
+ function ensureTable() {
103
+ if (initialized)
104
+ return;
105
+ db.run(`CREATE TABLE IF NOT EXISTS upload_registry (
106
+ key TEXT PRIMARY KEY,
107
+ owner_user_id TEXT,
108
+ tenant_id TEXT,
109
+ mime_type TEXT,
110
+ bucket TEXT,
111
+ created_at INTEGER NOT NULL,
112
+ expires_at INTEGER NOT NULL
113
+ )`);
114
+ initialized = true;
115
+ }
116
+ function nowPlusTtl() {
117
+ return Date.now() + ttlSeconds * 1000;
118
+ }
119
+ return {
120
+ async register(record) {
121
+ ensureTable();
122
+ // Lazy cleanup: remove expired entries on each write
123
+ db.run('DELETE FROM upload_registry WHERE expires_at < ?', [Date.now()]);
124
+ db.run(`INSERT OR REPLACE INTO upload_registry (key, owner_user_id, tenant_id, mime_type, bucket, created_at, expires_at)
125
+ VALUES (?, ?, ?, ?, ?, ?, ?)`, [
126
+ record.key,
127
+ record.ownerUserId ?? null,
128
+ record.tenantId ?? null,
129
+ record.mimeType ?? null,
130
+ record.bucket ?? null,
131
+ record.createdAt,
132
+ nowPlusTtl(),
133
+ ]);
134
+ },
135
+ async get(key) {
136
+ ensureTable();
137
+ const row = db
138
+ .query('SELECT * FROM upload_registry WHERE key = ? AND expires_at > ?')
139
+ .get(key, Date.now());
140
+ if (!row)
141
+ return null;
142
+ return {
143
+ key: row.key,
144
+ ownerUserId: row.owner_user_id ?? undefined,
145
+ tenantId: row.tenant_id ?? undefined,
146
+ mimeType: row.mime_type ?? undefined,
147
+ bucket: row.bucket ?? undefined,
148
+ createdAt: row.created_at,
149
+ };
150
+ },
151
+ async delete(key) {
152
+ ensureTable();
153
+ db.run('DELETE FROM upload_registry WHERE key = ?', [key]);
154
+ const changes = db.query('SELECT changes() as changes').get()?.changes ?? 0;
155
+ return changes > 0;
156
+ },
157
+ };
158
+ }
159
+ export function createPostgresUploadRegistry(pool, ttlSeconds = DEFAULT_UPLOAD_REGISTRY_TTL_SECONDS) {
160
+ let initialized = false;
161
+ async function ensureTable() {
162
+ if (initialized)
163
+ return;
164
+ await pool.query(`
165
+ CREATE TABLE IF NOT EXISTS bunshot_upload_registry (
166
+ key TEXT PRIMARY KEY,
167
+ owner_user_id TEXT,
168
+ tenant_id TEXT,
169
+ mime_type TEXT,
170
+ bucket TEXT,
171
+ created_at BIGINT NOT NULL,
172
+ expires_at BIGINT NOT NULL
173
+ )
174
+ `);
175
+ initialized = true;
176
+ }
177
+ return {
178
+ async register(record) {
179
+ await ensureTable();
180
+ const expiresAt = Date.now() + ttlSeconds * 1000;
181
+ await pool.query(`INSERT INTO bunshot_upload_registry
182
+ (key, owner_user_id, tenant_id, mime_type, bucket, created_at, expires_at)
183
+ VALUES ($1, $2, $3, $4, $5, $6, $7)
184
+ ON CONFLICT (key) DO UPDATE SET
185
+ owner_user_id = EXCLUDED.owner_user_id,
186
+ tenant_id = EXCLUDED.tenant_id,
187
+ mime_type = EXCLUDED.mime_type,
188
+ bucket = EXCLUDED.bucket,
189
+ created_at = EXCLUDED.created_at,
190
+ expires_at = EXCLUDED.expires_at`, [
191
+ record.key,
192
+ record.ownerUserId ?? null,
193
+ record.tenantId ?? null,
194
+ record.mimeType ?? null,
195
+ record.bucket ?? null,
196
+ record.createdAt,
197
+ expiresAt,
198
+ ]);
199
+ },
200
+ async get(key) {
201
+ await ensureTable();
202
+ const result = await pool.query('SELECT key, owner_user_id, tenant_id, mime_type, bucket, created_at FROM bunshot_upload_registry WHERE key = $1 AND expires_at > $2', [key, Date.now()]);
203
+ const row = result.rows[0];
204
+ if (!row)
205
+ return null;
206
+ return {
207
+ key: row.key,
208
+ ownerUserId: row.owner_user_id ?? undefined,
209
+ tenantId: row.tenant_id ?? undefined,
210
+ mimeType: row.mime_type ?? undefined,
211
+ bucket: row.bucket ?? undefined,
212
+ createdAt: Number(row.created_at),
213
+ };
214
+ },
215
+ async delete(key) {
216
+ await ensureTable();
217
+ const result = await pool.query('DELETE FROM bunshot_upload_registry WHERE key = $1', [key]);
218
+ return (result.rowCount ?? 0) > 0;
219
+ },
220
+ };
221
+ }
222
+ export function createUploadRegistryFactories(ttlSeconds = DEFAULT_UPLOAD_REGISTRY_TTL_SECONDS) {
223
+ return {
224
+ memory: () => createMemoryUploadRegistry(ttlSeconds),
225
+ sqlite: infra => createSqliteUploadRegistry(infra.getSqliteDb(), ttlSeconds),
226
+ redis: infra => createRedisUploadRegistry(infra.getRedis(), infra.appName, ttlSeconds),
227
+ mongo: infra => {
228
+ const { conn, mg } = infra.getMongo();
229
+ return createMongoUploadRegistry(conn, mg, ttlSeconds);
230
+ },
231
+ postgres: infra => createPostgresUploadRegistry(infra.getPostgres().pool, ttlSeconds),
232
+ };
233
+ }
234
+ /** @deprecated Use createUploadRegistryFactories() instead */
235
+ export const uploadRegistryFactories = createUploadRegistryFactories();
@@ -0,0 +1,22 @@
1
+ import type { WsMessageRepository } from '../../../packages/bunshot-core/src/index.js';
2
+ import type { RepoFactories } from '../../../packages/bunshot-core/src/index.js';
3
+ export declare function createMemoryWsMessageRepository(): WsMessageRepository;
4
+ export declare function createRedisWsMessageRepository(redis: {
5
+ lpush(key: string, value: string): Promise<number>;
6
+ ltrim(key: string, start: number, stop: number): Promise<string>;
7
+ expire(key: string, seconds: number): Promise<number>;
8
+ lrange(key: string, start: number, stop: number): Promise<string[]>;
9
+ del(...keys: string[]): Promise<number>;
10
+ }): WsMessageRepository;
11
+ export declare function createMongoWsMessageRepository(conn: {
12
+ models: Record<string, unknown>;
13
+ model(name: string, schema: unknown): unknown;
14
+ }, mongoosePkg: unknown): WsMessageRepository;
15
+ export declare function createSqliteWsMessageRepository(db: {
16
+ run(sql: string, params?: unknown[]): void;
17
+ query<T>(sql: string): {
18
+ get(...args: unknown[]): T | null;
19
+ all(...args: unknown[]): T[];
20
+ };
21
+ }): WsMessageRepository;
22
+ export declare const wsMessageFactories: RepoFactories<WsMessageRepository>;
@@ -0,0 +1,296 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Memory
3
+ // ---------------------------------------------------------------------------
4
+ export function createMemoryWsMessageRepository() {
5
+ // key: "endpoint\0room"
6
+ const store = new Map();
7
+ function scopeKey(endpoint, room) {
8
+ return `${endpoint}\0${room}`;
9
+ }
10
+ return {
11
+ async persist(message, config) {
12
+ const key = scopeKey(message.endpoint, message.room);
13
+ if (!store.has(key))
14
+ store.set(key, []);
15
+ const msgs = store.get(key);
16
+ msgs.push(message);
17
+ if (msgs.length > config.maxCount) {
18
+ msgs.splice(0, msgs.length - config.maxCount);
19
+ }
20
+ return message;
21
+ },
22
+ async getHistory(endpoint, room, opts) {
23
+ const key = scopeKey(endpoint, room);
24
+ const msgs = store.get(key) ?? [];
25
+ const limit = opts?.limit ?? 50;
26
+ let filtered = msgs.slice();
27
+ if (opts?.before) {
28
+ const idx = filtered.findIndex(m => m.id === opts.before);
29
+ if (idx > 0)
30
+ filtered = filtered.slice(0, idx);
31
+ }
32
+ else if (opts?.after) {
33
+ const idx = filtered.findIndex(m => m.id === opts.after);
34
+ if (idx >= 0)
35
+ filtered = filtered.slice(idx + 1);
36
+ }
37
+ return filtered.slice(-limit);
38
+ },
39
+ async clear() {
40
+ store.clear();
41
+ },
42
+ };
43
+ }
44
+ // ---------------------------------------------------------------------------
45
+ // Redis
46
+ // ---------------------------------------------------------------------------
47
+ export function createRedisWsMessageRepository(redis) {
48
+ const knownKeys = new Set();
49
+ function rkey(endpoint, room) {
50
+ return `wsmsg:${endpoint}\0${room}`;
51
+ }
52
+ return {
53
+ async persist(message, config) {
54
+ const key = rkey(message.endpoint, message.room);
55
+ knownKeys.add(key);
56
+ const serialized = JSON.stringify(message);
57
+ await redis.lpush(key, serialized);
58
+ await redis.ltrim(key, 0, config.maxCount - 1);
59
+ await redis.expire(key, config.ttlSeconds);
60
+ return message;
61
+ },
62
+ async getHistory(endpoint, room, opts) {
63
+ const key = rkey(endpoint, room);
64
+ const limit = opts?.limit ?? 50;
65
+ const raw = await redis.lrange(key, 0, -1);
66
+ let msgs = raw.map(s => JSON.parse(s)).reverse(); // oldest-first
67
+ if (opts?.before) {
68
+ const idx = msgs.findIndex(m => m.id === opts.before);
69
+ if (idx > 0)
70
+ msgs = msgs.slice(0, idx);
71
+ }
72
+ else if (opts?.after) {
73
+ const idx = msgs.findIndex(m => m.id === opts.after);
74
+ if (idx >= 0)
75
+ msgs = msgs.slice(idx + 1);
76
+ }
77
+ return msgs.slice(-limit);
78
+ },
79
+ async clear() {
80
+ if (knownKeys.size === 0)
81
+ return;
82
+ await redis.del(...knownKeys);
83
+ knownKeys.clear();
84
+ },
85
+ };
86
+ }
87
+ // ---------------------------------------------------------------------------
88
+ // MongoDB
89
+ // ---------------------------------------------------------------------------
90
+ const DEFAULT_TTL_SECONDS = 86_400;
91
+ export function createMongoWsMessageRepository(conn, mongoosePkg) {
92
+ let model = null;
93
+ function getModel() {
94
+ if (model)
95
+ return model;
96
+ const mongoose = mongoosePkg;
97
+ const schema = new mongoose.Schema({
98
+ _id: { type: String, default: () => crypto.randomUUID() },
99
+ endpoint: { type: String, required: true },
100
+ room: { type: String, required: true },
101
+ senderId: { type: String, default: null },
102
+ payload: { type: mongoose.Schema.Types.Mixed },
103
+ createdAt: { type: Number, required: true },
104
+ }, { collection: 'ws_messages' });
105
+ schema.index({ endpoint: 1, room: 1, createdAt: -1, _id: -1 });
106
+ schema.index({ createdAt: 1 }, { expireAfterSeconds: DEFAULT_TTL_SECONDS });
107
+ model = conn.model('WsMessage', schema);
108
+ return model;
109
+ }
110
+ return {
111
+ async persist(message, config) {
112
+ const Model = getModel();
113
+ await Model.create({
114
+ _id: message.id,
115
+ endpoint: message.endpoint,
116
+ room: message.room,
117
+ senderId: message.senderId,
118
+ payload: message.payload,
119
+ createdAt: message.createdAt,
120
+ });
121
+ const count = await Model.countDocuments({ endpoint: message.endpoint, room: message.room });
122
+ if (count > config.maxCount) {
123
+ const oldest = await Model.find({ endpoint: message.endpoint, room: message.room })
124
+ .sort({ createdAt: 1, _id: 1 })
125
+ .limit(count - config.maxCount)
126
+ .select('_id');
127
+ if (oldest.length > 0) {
128
+ await Model.deleteMany({ _id: { $in: oldest.map((d) => d._id) } });
129
+ }
130
+ }
131
+ return message;
132
+ },
133
+ async getHistory(endpoint, room, opts) {
134
+ const Model = getModel();
135
+ const limit = opts?.limit ?? 50;
136
+ const filter = { endpoint, room };
137
+ if (opts?.before) {
138
+ const cursor = await Model.findById(opts.before).lean();
139
+ if (cursor) {
140
+ filter.$or = [
141
+ { createdAt: { $lt: cursor.createdAt } },
142
+ { createdAt: cursor.createdAt, _id: { $lt: opts.before } },
143
+ ];
144
+ }
145
+ }
146
+ else if (opts?.after) {
147
+ const cursor = await Model.findById(opts.after).lean();
148
+ if (cursor) {
149
+ filter.$or = [
150
+ { createdAt: { $gt: cursor.createdAt } },
151
+ { createdAt: cursor.createdAt, _id: { $gt: opts.after } },
152
+ ];
153
+ }
154
+ }
155
+ const docs = await Model.find(filter).sort({ createdAt: -1, _id: -1 }).limit(limit).lean();
156
+ return docs.reverse().map((d) => ({
157
+ id: d._id,
158
+ endpoint: d.endpoint,
159
+ room: d.room,
160
+ senderId: d.senderId,
161
+ payload: d.payload,
162
+ createdAt: d.createdAt,
163
+ }));
164
+ },
165
+ async clear() {
166
+ // Mongo clear — drop all documents. Used for test isolation.
167
+ try {
168
+ await getModel().deleteMany({});
169
+ }
170
+ catch {
171
+ /* best-effort */
172
+ }
173
+ },
174
+ };
175
+ }
176
+ // ---------------------------------------------------------------------------
177
+ // SQLite
178
+ // ---------------------------------------------------------------------------
179
+ export function createSqliteWsMessageRepository(db) {
180
+ let initialized = false;
181
+ const trimCounters = new Map();
182
+ function scopeKey(endpoint, room) {
183
+ return `${endpoint}\0${room}`;
184
+ }
185
+ function ensureTable() {
186
+ if (initialized)
187
+ return;
188
+ db.run(`
189
+ CREATE TABLE IF NOT EXISTS ws_messages (
190
+ id TEXT PRIMARY KEY,
191
+ endpoint TEXT NOT NULL,
192
+ room TEXT NOT NULL,
193
+ sender_id TEXT,
194
+ payload TEXT,
195
+ created_at INTEGER NOT NULL
196
+ )
197
+ `);
198
+ db.run('CREATE INDEX IF NOT EXISTS idx_ws_messages_scope ON ws_messages (endpoint, room, created_at DESC)');
199
+ initialized = true;
200
+ }
201
+ return {
202
+ async persist(message, config) {
203
+ ensureTable();
204
+ db.run('INSERT INTO ws_messages (id, endpoint, room, sender_id, payload, created_at) VALUES (?, ?, ?, ?, ?, ?)', [
205
+ message.id,
206
+ message.endpoint,
207
+ message.room,
208
+ message.senderId,
209
+ JSON.stringify(message.payload),
210
+ message.createdAt,
211
+ ]);
212
+ // Modulo-based trimming
213
+ const key = scopeKey(message.endpoint, message.room);
214
+ const counter = (trimCounters.get(key) ?? 0) + 1;
215
+ const trimInterval = Math.max(10, Math.floor(config.maxCount * 0.1));
216
+ trimCounters.set(key, counter);
217
+ if (counter >= trimInterval) {
218
+ trimCounters.set(key, 0);
219
+ db.run(`DELETE FROM ws_messages WHERE endpoint = ? AND room = ? AND id NOT IN (
220
+ SELECT id FROM ws_messages WHERE endpoint = ? AND room = ? ORDER BY created_at DESC, id DESC LIMIT ?
221
+ )`, [message.endpoint, message.room, message.endpoint, message.room, config.maxCount]);
222
+ const ttlMs = config.ttlSeconds * 1000;
223
+ db.run('DELETE FROM ws_messages WHERE endpoint = ? AND room = ? AND created_at < ?', [
224
+ message.endpoint,
225
+ message.room,
226
+ Date.now() - ttlMs,
227
+ ]);
228
+ }
229
+ return message;
230
+ },
231
+ async getHistory(endpoint, room, opts) {
232
+ ensureTable();
233
+ const limit = opts?.limit ?? 50;
234
+ let sql;
235
+ let params;
236
+ if (opts?.before) {
237
+ sql = `
238
+ SELECT * FROM ws_messages
239
+ WHERE endpoint = ? AND room = ? AND (created_at, id) < (
240
+ (SELECT created_at FROM ws_messages WHERE id = ?), ?
241
+ )
242
+ ORDER BY created_at DESC, id DESC LIMIT ?
243
+ `;
244
+ params = [endpoint, room, opts.before, opts.before, limit];
245
+ }
246
+ else if (opts?.after) {
247
+ sql = `
248
+ SELECT * FROM ws_messages
249
+ WHERE endpoint = ? AND room = ? AND (created_at, id) > (
250
+ (SELECT created_at FROM ws_messages WHERE id = ?), ?
251
+ )
252
+ ORDER BY created_at ASC, id ASC LIMIT ?
253
+ `;
254
+ params = [endpoint, room, opts.after, opts.after, limit];
255
+ }
256
+ else {
257
+ sql =
258
+ 'SELECT * FROM ws_messages WHERE endpoint = ? AND room = ? ORDER BY created_at DESC, id DESC LIMIT ?';
259
+ params = [endpoint, room, limit];
260
+ }
261
+ const rows = db.query(sql).all(...params);
262
+ if (!opts?.after)
263
+ rows.reverse();
264
+ return rows.map((r) => ({
265
+ id: r.id,
266
+ endpoint: r.endpoint,
267
+ room: r.room,
268
+ senderId: r.sender_id,
269
+ payload: JSON.parse(r.payload),
270
+ createdAt: r.created_at,
271
+ }));
272
+ },
273
+ async clear() {
274
+ try {
275
+ ensureTable();
276
+ db.run('DELETE FROM ws_messages');
277
+ trimCounters.clear();
278
+ }
279
+ catch {
280
+ /* best-effort */
281
+ }
282
+ },
283
+ };
284
+ }
285
+ export const wsMessageFactories = {
286
+ memory: () => createMemoryWsMessageRepository(),
287
+ sqlite: infra => createSqliteWsMessageRepository(infra.getSqliteDb()),
288
+ redis: infra => createRedisWsMessageRepository(infra.getRedis()),
289
+ mongo: infra => {
290
+ const { conn, mg } = infra.getMongo();
291
+ return createMongoWsMessageRepository(conn, mg);
292
+ },
293
+ // TODO: implement a native postgres WS message store.
294
+ // For now postgres deployments fall back to in-memory (no cross-process fan-out).
295
+ postgres: () => createMemoryWsMessageRepository(),
296
+ };
@@ -0,0 +1,24 @@
1
+ export interface ModelSchemasConfig {
2
+ /**
3
+ * One or more absolute directory paths or glob patterns containing shared Zod schemas.
4
+ * All matching .ts files are imported before routes so schemas are registered first.
5
+ * Optional when registration is "explicit" — in that case your registerSchema /
6
+ * registerSchemas calls run at the time each schema file is imported by a route.
7
+ * Examples:
8
+ * import.meta.dir + "/schemas"
9
+ * [import.meta.dir + "/schemas", import.meta.dir + "/models"]
10
+ * import.meta.dir + "/models/**\/*.schema.ts"
11
+ */
12
+ paths?: string | string[];
13
+ /**
14
+ * How schemas found in the files are registered in `components/schemas`.
15
+ * - "auto" (default): exported Zod schemas are registered automatically. The export
16
+ * name is used as the schema name, with a trailing "Schema" suffix stripped
17
+ * (e.g. `LedgerItemSchema` → `"LedgerItem"`). Schemas already registered via
18
+ * `registerSchema` or `registerSchemas` inside the file are never overwritten.
19
+ * - "explicit": files are imported but registration is entirely up to the user —
20
+ * call `registerSchema` or `registerSchemas` inside each file.
21
+ */
22
+ registration?: 'auto' | 'explicit';
23
+ }
24
+ export declare function preloadModelSchemas(modelSchemas: string | string[] | ModelSchemasConfig | undefined): Promise<void>;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Schema pre-loading — extracted from createApp().
3
+ *
4
+ * Imports shared Zod schema files before route discovery so registerSchema /
5
+ * registerSchemas calls run first, guaranteeing $ref instead of inline shapes.
6
+ */
7
+ import { maybeAutoRegister } from './lib/createRoute';
8
+ export async function preloadModelSchemas(modelSchemas) {
9
+ if (!modelSchemas)
10
+ return;
11
+ const { paths, registration = 'auto' } = typeof modelSchemas === 'string' || Array.isArray(modelSchemas)
12
+ ? { paths: modelSchemas, registration: 'auto' }
13
+ : modelSchemas;
14
+ const pathArray = paths ? (Array.isArray(paths) ? paths : [paths]) : [];
15
+ for (const entry of pathArray) {
16
+ // Normalize to forward slashes so splitting works on both Windows and Unix.
17
+ const normalized = entry.replaceAll('\\', '/');
18
+ // Split glob patterns: everything before the first wildcard segment is the cwd.
19
+ let cwd;
20
+ let pattern;
21
+ if (!normalized.includes('*')) {
22
+ cwd = normalized;
23
+ pattern = '**/*.ts';
24
+ }
25
+ else {
26
+ const parts = normalized.split('/');
27
+ const starIdx = parts.findIndex(p => p.includes('*'));
28
+ cwd = parts.slice(0, starIdx).join('/');
29
+ pattern = parts.slice(starIdx).join('/');
30
+ }
31
+ const schemaGlob = new Bun.Glob(pattern);
32
+ for await (const file of schemaGlob.scan({ cwd })) {
33
+ const mod = await import(`${cwd}/${file}`);
34
+ if (registration === 'auto') {
35
+ for (const [exportName, value] of Object.entries(mod)) {
36
+ maybeAutoRegister(exportName, value);
37
+ }
38
+ }
39
+ // "explicit": file imported; any registerSchema/registerSchemas calls inside already ran
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,23 @@
1
+ import type { Connection } from 'mongoose';
2
+ import { type CacheAdapter, type CoreRegistrar, type FingerprintBuilder, type RateLimitAdapter } from '../../packages/bunshot-core/src/index.js';
3
+ import type { StoreType } from '../../packages/bunshot-core/src/index.js';
4
+ export interface RegisterBoundaryAdaptersOptions {
5
+ /** Whether Redis is connected and available. */
6
+ redisEnabled: boolean;
7
+ /** Mongo connection mode — false means no Mongo. */
8
+ mongoMode: 'single' | 'separate' | false;
9
+ /** Redis client handle, or null when Redis is disabled. */
10
+ redis: import('ioredis').default | null;
11
+ /** App Mongo connection, or null when Mongo is disabled. */
12
+ appConnection: Connection | null;
13
+ /** SQLite database handle, or null when SQLite is not configured. */
14
+ sqliteDb: import('bun:sqlite').Database | null;
15
+ }
16
+ export interface BoundaryAdaptersSnapshot {
17
+ readonly rateLimitAdapter: RateLimitAdapter;
18
+ readonly fingerprintBuilder: FingerprintBuilder;
19
+ readonly cacheAdapters: ReadonlyMap<StoreType, CacheAdapter>;
20
+ }
21
+ export declare function resolveBoundaryAdapters(options: RegisterBoundaryAdaptersOptions): Promise<BoundaryAdaptersSnapshot>;
22
+ export declare function applyBoundaryAdapters(registrar: CoreRegistrar, boundaryAdapters: BoundaryAdaptersSnapshot): void;
23
+ export declare function registerBoundaryAdapters(registrar: CoreRegistrar, options: RegisterBoundaryAdaptersOptions): Promise<void>;