@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
@@ -0,0 +1,130 @@
1
+ import { wsEndpointKey } from './wsNamespace';
2
+ import { addPresence, cleanupPresence, removePresence } from './wsPresence';
3
+ const MAX_ROOM_ACTION_SIZE = 4096;
4
+ function isValidRoomName(room) {
5
+ return typeof room === 'string' && /^[a-zA-Z0-9_:./\-]{1,128}$/.test(room);
6
+ }
7
+ export const publish = (state, endpoint, room, data) => {
8
+ const key = wsEndpointKey(endpoint, room);
9
+ const msg = JSON.stringify(data);
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ state.server?.publish?.(key, msg);
12
+ if (state.transport) {
13
+ state.transport
14
+ .publish(endpoint, room, msg, state.instanceId)
15
+ .catch(e => console.error('[ws-transport] publish error:', e));
16
+ }
17
+ };
18
+ export const getRooms = (state, endpoint) => {
19
+ const prefix = encodeURIComponent(endpoint) + ':';
20
+ const rooms = [];
21
+ for (const key of state.roomRegistry.keys()) {
22
+ if (key.startsWith(prefix)) {
23
+ const colonIdx = key.indexOf(':');
24
+ rooms.push(decodeURIComponent(key.slice(colonIdx + 1)));
25
+ }
26
+ }
27
+ return rooms;
28
+ };
29
+ export const getRoomSubscribers = (state, endpoint, room) => [
30
+ ...(state.roomRegistry.get(wsEndpointKey(endpoint, room)) ?? []),
31
+ ];
32
+ export const handleRoomActions = async (state, ws, message, onSubscribe) => {
33
+ try {
34
+ const raw = typeof message === 'string' ? message : Buffer.from(message).toString();
35
+ if (raw.length > MAX_ROOM_ACTION_SIZE)
36
+ return false;
37
+ const data = JSON.parse(raw);
38
+ if (data.action === 'subscribe' && typeof data.room === 'string') {
39
+ if (!isValidRoomName(data.room))
40
+ return true;
41
+ if (onSubscribe) {
42
+ let allowed;
43
+ try {
44
+ allowed = await onSubscribe(ws, data.room);
45
+ }
46
+ catch (e) {
47
+ console.error(`[ws] onRoomSubscribe guard error for room "${data.room}":`, e);
48
+ allowed = false;
49
+ }
50
+ if (!allowed) {
51
+ ws.send(JSON.stringify({ event: 'subscribe_denied', room: data.room }));
52
+ return true;
53
+ }
54
+ }
55
+ subscribe(state, ws, data.room);
56
+ ws.send(JSON.stringify({ event: 'subscribed', room: data.room }));
57
+ return true;
58
+ }
59
+ if (data.action === 'unsubscribe' && typeof data.room === 'string') {
60
+ if (!isValidRoomName(data.room))
61
+ return true;
62
+ unsubscribe(state, ws, data.room);
63
+ ws.send(JSON.stringify({ event: 'unsubscribed', room: data.room }));
64
+ return true;
65
+ }
66
+ }
67
+ catch {
68
+ // not JSON
69
+ }
70
+ return false;
71
+ };
72
+ export const subscribe = (state, ws, room) => {
73
+ const key = wsEndpointKey(ws.data.endpoint, room);
74
+ ws.subscribe(key);
75
+ ws.data.rooms.add(room);
76
+ if (!state.roomRegistry.has(key))
77
+ state.roomRegistry.set(key, new Set());
78
+ state.roomRegistry.get(key).add(ws.data.id);
79
+ if (state.presenceEnabled) {
80
+ const result = addPresence(state, ws.data.id, ws.data.endpoint, room);
81
+ if (result?.isNewUser) {
82
+ publish(state, ws.data.endpoint, room, {
83
+ event: 'presence_join',
84
+ room,
85
+ userId: result.userId,
86
+ });
87
+ }
88
+ }
89
+ };
90
+ export const unsubscribe = (state, ws, room) => {
91
+ const key = wsEndpointKey(ws.data.endpoint, room);
92
+ ws.unsubscribe(key);
93
+ ws.data.rooms.delete(room);
94
+ const ids = state.roomRegistry.get(key);
95
+ if (ids) {
96
+ ids.delete(ws.data.id);
97
+ if (ids.size === 0)
98
+ state.roomRegistry.delete(key);
99
+ }
100
+ if (state.presenceEnabled) {
101
+ const result = removePresence(state, ws.data.id, ws.data.endpoint, room);
102
+ if (result?.isLastSocket) {
103
+ publish(state, ws.data.endpoint, room, {
104
+ event: 'presence_leave',
105
+ room,
106
+ userId: result.userId,
107
+ });
108
+ }
109
+ }
110
+ };
111
+ export const getSubscriptions = (ws) => [
112
+ ...ws.data.rooms,
113
+ ];
114
+ export const cleanupSocket = (state, ws) => {
115
+ if (state.presenceEnabled) {
116
+ const departed = cleanupPresence(state, ws.data.id, ws.data.endpoint, ws.data.rooms);
117
+ for (const { room, userId } of departed) {
118
+ publish(state, ws.data.endpoint, room, { event: 'presence_leave', room, userId });
119
+ }
120
+ }
121
+ for (const room of ws.data.rooms) {
122
+ const key = wsEndpointKey(ws.data.endpoint, room);
123
+ const ids = state.roomRegistry.get(key);
124
+ if (ids) {
125
+ ids.delete(ws.data.id);
126
+ if (ids.size === 0)
127
+ state.roomRegistry.delete(key);
128
+ }
129
+ }
130
+ };
@@ -0,0 +1,12 @@
1
+ import type { ServerWebSocket } from 'bun';
2
+ import type { WsState } from '../../../packages/bunshot-core/src/index.js';
3
+ export interface HeartbeatConfig {
4
+ intervalMs?: number;
5
+ timeoutMs?: number;
6
+ }
7
+ export declare const registerSocket: (state: WsState, ws: ServerWebSocket<any>, socketId: string, endpoint: string) => void;
8
+ export declare const deregisterSocket: (state: WsState, id: string) => void;
9
+ export declare const handlePong: (state: WsState, id: string) => void;
10
+ export declare const startHeartbeat: (state: WsState, configs: Record<string, HeartbeatConfig | boolean>) => void;
11
+ export declare const stopHeartbeat: (state: WsState) => void;
12
+ export declare const clearHeartbeatState: (state: WsState) => void;
@@ -0,0 +1,53 @@
1
+ const DEFAULT_INTERVAL_MS = 30_000;
2
+ const DEFAULT_TIMEOUT_MS = 10_000;
3
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
+ export const registerSocket = (state, ws, socketId, endpoint) => {
5
+ const timeoutMs = state.heartbeatEndpointConfigs.get(endpoint)?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
6
+ state.heartbeatSockets.set(socketId, { ws, endpoint, timeoutAt: Date.now() + timeoutMs });
7
+ };
8
+ export const deregisterSocket = (state, id) => {
9
+ state.heartbeatSockets.delete(id);
10
+ };
11
+ export const handlePong = (state, id) => {
12
+ const entry = state.heartbeatSockets.get(id);
13
+ if (!entry)
14
+ return;
15
+ const timeoutMs = state.heartbeatEndpointConfigs.get(entry.endpoint)?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
16
+ entry.timeoutAt = Date.now() + timeoutMs;
17
+ };
18
+ export const startHeartbeat = (state, configs) => {
19
+ if (state.heartbeatTimer)
20
+ return;
21
+ for (const [endpoint, cfg] of Object.entries(configs)) {
22
+ const opts = typeof cfg === 'object' ? cfg : {};
23
+ state.heartbeatEndpointConfigs.set(endpoint, {
24
+ intervalMs: opts.intervalMs ?? DEFAULT_INTERVAL_MS,
25
+ timeoutMs: opts.timeoutMs ?? DEFAULT_TIMEOUT_MS,
26
+ });
27
+ }
28
+ const minInterval = Math.min(...[...state.heartbeatEndpointConfigs.values()].map(c => c.intervalMs ?? DEFAULT_INTERVAL_MS));
29
+ state.heartbeatTimer = setInterval(() => {
30
+ const now = Date.now();
31
+ for (const [, entry] of state.heartbeatSockets) {
32
+ if (now >= entry.timeoutAt) {
33
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
+ entry.ws.close(1001, 'Heartbeat timeout');
35
+ }
36
+ else {
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ entry.ws.ping();
39
+ }
40
+ }
41
+ }, minInterval);
42
+ };
43
+ export const stopHeartbeat = (state) => {
44
+ if (state.heartbeatTimer) {
45
+ clearInterval(state.heartbeatTimer);
46
+ state.heartbeatTimer = null;
47
+ }
48
+ };
49
+ export const clearHeartbeatState = (state) => {
50
+ stopHeartbeat(state);
51
+ state.heartbeatSockets.clear();
52
+ state.heartbeatEndpointConfigs.clear();
53
+ };
@@ -0,0 +1,25 @@
1
+ import type { RoomPersistenceConfig, StoredMessage, WsMessageDefaults } from '../../../packages/bunshot-core/src/index.js';
2
+ export type { StoredMessage, WsMessageDefaults, RoomPersistenceConfig };
3
+ export type WsMessageStore = 'redis' | 'mongo' | 'sqlite' | 'memory';
4
+ /**
5
+ * Persist a message to a room. Returns null if room is not configured for persistence.
6
+ * On store errors, logs a warning and returns null (non-blocking).
7
+ */
8
+ export declare const persistMessage: (endpoint: string, room: string, data: {
9
+ senderId?: string | null;
10
+ payload: unknown;
11
+ }, app: object) => Promise<StoredMessage | null>;
12
+ /**
13
+ * Get message history for a room.
14
+ * Cursor-based pagination using message `id` as cursor.
15
+ */
16
+ export declare const getMessageHistory: (endpoint: string, room: string, opts: {
17
+ limit?: number;
18
+ before?: string;
19
+ after?: string;
20
+ } | undefined, app: object) => Promise<StoredMessage[]>;
21
+ /**
22
+ * Opt a room into message persistence.
23
+ * Delegates to persistence.configureRoom() on the context.
24
+ */
25
+ export declare const configureRoom: (endpoint: string, room: string, options: RoomPersistenceConfig, app: object) => void;
@@ -0,0 +1,45 @@
1
+ import { getContext } from '../../../packages/bunshot-core/src/index.js';
2
+ // ---------------------------------------------------------------------------
3
+ // Public API — requires app context
4
+ // ---------------------------------------------------------------------------
5
+ /**
6
+ * Persist a message to a room. Returns null if room is not configured for persistence.
7
+ * On store errors, logs a warning and returns null (non-blocking).
8
+ */
9
+ export const persistMessage = async (endpoint, room, data, app) => {
10
+ const ctx = getContext(app);
11
+ const persistence = ctx.persistence;
12
+ const config = persistence.getRoomConfig(endpoint, room);
13
+ if (!config)
14
+ return null;
15
+ const message = {
16
+ id: crypto.randomUUID(),
17
+ endpoint,
18
+ room,
19
+ senderId: data.senderId ?? null,
20
+ payload: data.payload,
21
+ createdAt: Date.now(),
22
+ };
23
+ try {
24
+ return await persistence.wsMessages.persist(message, config);
25
+ }
26
+ catch (err) {
27
+ console.warn(`[wsMessages] failed to persist message to ${endpoint}${room}:`, err);
28
+ return null;
29
+ }
30
+ };
31
+ /**
32
+ * Get message history for a room.
33
+ * Cursor-based pagination using message `id` as cursor.
34
+ */
35
+ export const getMessageHistory = async (endpoint, room, opts, app) => {
36
+ return getContext(app).persistence.wsMessages.getHistory(endpoint, room, opts);
37
+ };
38
+ /**
39
+ * Opt a room into message persistence.
40
+ * Delegates to persistence.configureRoom() on the context.
41
+ */
42
+ export const configureRoom = (endpoint, room, options, app) => {
43
+ const ctx = getContext(app);
44
+ ctx.persistence.configureRoom(endpoint, room, options);
45
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Produces a collision-safe composite key for scoping rooms to an endpoint.
3
+ *
4
+ * Both endpoint and room are percent-encoded before joining with `:`.
5
+ * Since encodeURIComponent encodes `:` → `%3A`, the literal `:` separator
6
+ * can only come from this function — not from endpoint or room values.
7
+ *
8
+ * Examples:
9
+ * wsEndpointKey("/chat", "general") → "%2Fchat:general"
10
+ * wsEndpointKey("/chat", "room:1") → "%2Fchat:room%3A1"
11
+ * wsEndpointKey("/a:b", "c") → "%2Fa%3Ab:c"
12
+ * wsEndpointKey("/notifications", "x") → "%2Fnotifications:x"
13
+ *
14
+ * Used for: in-memory room maps, Redis channel names, Redis message keys.
15
+ * NOT used for: SQLite or MongoDB schemas (those store endpoint + room separately).
16
+ */
17
+ export declare function wsEndpointKey(endpoint: string, room: string): string;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Produces a collision-safe composite key for scoping rooms to an endpoint.
3
+ *
4
+ * Both endpoint and room are percent-encoded before joining with `:`.
5
+ * Since encodeURIComponent encodes `:` → `%3A`, the literal `:` separator
6
+ * can only come from this function — not from endpoint or room values.
7
+ *
8
+ * Examples:
9
+ * wsEndpointKey("/chat", "general") → "%2Fchat:general"
10
+ * wsEndpointKey("/chat", "room:1") → "%2Fchat:room%3A1"
11
+ * wsEndpointKey("/a:b", "c") → "%2Fa%3Ab:c"
12
+ * wsEndpointKey("/notifications", "x") → "%2Fnotifications:x"
13
+ *
14
+ * Used for: in-memory room maps, Redis channel names, Redis message keys.
15
+ * NOT used for: SQLite or MongoDB schemas (those store endpoint + room separately).
16
+ */
17
+ export function wsEndpointKey(endpoint, room) {
18
+ return `${encodeURIComponent(endpoint)}:${encodeURIComponent(room)}`;
19
+ }
@@ -0,0 +1,17 @@
1
+ import type { WsState } from '../../../packages/bunshot-core/src/index.js';
2
+ export declare const trackSocket: (state: WsState, socketId: string, userId: string | null) => void;
3
+ export declare const untrackSocket: (state: WsState, socketId: string) => void;
4
+ export declare const addPresence: (state: WsState, socketId: string, endpoint: string, room: string) => {
5
+ userId: string;
6
+ isNewUser: boolean;
7
+ } | null;
8
+ export declare const removePresence: (state: WsState, socketId: string, endpoint: string, room: string) => {
9
+ userId: string;
10
+ isLastSocket: boolean;
11
+ } | null;
12
+ export declare const cleanupPresence: (state: WsState, socketId: string, endpoint: string, rooms: Set<string>) => Array<{
13
+ room: string;
14
+ userId: string;
15
+ }>;
16
+ export declare const getRoomPresence: (state: WsState, endpoint: string, room: string) => string[];
17
+ export declare const getUserPresence: (state: WsState, userId: string) => string[];
@@ -0,0 +1,84 @@
1
+ import { wsEndpointKey } from './wsNamespace';
2
+ export const trackSocket = (state, socketId, userId) => {
3
+ if (!userId)
4
+ return;
5
+ state.socketUsers.set(socketId, userId);
6
+ };
7
+ export const untrackSocket = (state, socketId) => {
8
+ state.socketUsers.delete(socketId);
9
+ };
10
+ export const addPresence = (state, socketId, endpoint, room) => {
11
+ const userId = state.socketUsers.get(socketId);
12
+ if (!userId)
13
+ return null;
14
+ const key = wsEndpointKey(endpoint, room);
15
+ if (!state.roomPresence.has(key))
16
+ state.roomPresence.set(key, new Map());
17
+ const roomMap = state.roomPresence.get(key);
18
+ const isNewUser = !roomMap.has(userId) || roomMap.get(userId).size === 0;
19
+ if (!roomMap.has(userId))
20
+ roomMap.set(userId, new Set());
21
+ roomMap.get(userId).add(socketId);
22
+ return { userId, isNewUser };
23
+ };
24
+ export const removePresence = (state, socketId, endpoint, room) => {
25
+ const userId = state.socketUsers.get(socketId);
26
+ if (!userId)
27
+ return null;
28
+ const key = wsEndpointKey(endpoint, room);
29
+ const roomMap = state.roomPresence.get(key);
30
+ if (!roomMap)
31
+ return null;
32
+ const sockets = roomMap.get(userId);
33
+ if (!sockets)
34
+ return null;
35
+ sockets.delete(socketId);
36
+ const isLastSocket = sockets.size === 0;
37
+ if (isLastSocket) {
38
+ roomMap.delete(userId);
39
+ if (roomMap.size === 0)
40
+ state.roomPresence.delete(key);
41
+ }
42
+ return { userId, isLastSocket };
43
+ };
44
+ export const cleanupPresence = (state, socketId, endpoint, rooms) => {
45
+ const userId = state.socketUsers.get(socketId);
46
+ if (!userId)
47
+ return [];
48
+ const departed = [];
49
+ for (const room of rooms) {
50
+ const key = wsEndpointKey(endpoint, room);
51
+ const roomMap = state.roomPresence.get(key);
52
+ if (!roomMap)
53
+ continue;
54
+ const sockets = roomMap.get(userId);
55
+ if (!sockets)
56
+ continue;
57
+ sockets.delete(socketId);
58
+ if (sockets.size === 0) {
59
+ roomMap.delete(userId);
60
+ if (roomMap.size === 0)
61
+ state.roomPresence.delete(key);
62
+ departed.push({ room, userId });
63
+ }
64
+ }
65
+ return departed;
66
+ };
67
+ export const getRoomPresence = (state, endpoint, room) => {
68
+ const roomMap = state.roomPresence.get(wsEndpointKey(endpoint, room));
69
+ if (!roomMap)
70
+ return [];
71
+ return [...roomMap.keys()];
72
+ };
73
+ export const getUserPresence = (state, userId) => {
74
+ const rooms = [];
75
+ for (const [key, roomMap] of state.roomPresence) {
76
+ const sockets = roomMap.get(userId);
77
+ if (sockets && sockets.size > 0) {
78
+ const colonIdx = key.indexOf(':');
79
+ if (colonIdx !== -1)
80
+ rooms.push(decodeURIComponent(key.slice(colonIdx + 1)));
81
+ }
82
+ }
83
+ return rooms;
84
+ };
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Pluggable transport for cross-instance WebSocket message delivery.
3
+ *
4
+ * `publish()` is called on every room broadcast — the transport fans out
5
+ * the message to other server instances (e.g. via Redis pub/sub).
6
+ *
7
+ * `connect()` is called once at server startup. The `onMessage` callback
8
+ * should be invoked when a message arrives from another instance —
9
+ * it will be delivered to local sockets via Bun's native `server.publish()`.
10
+ *
11
+ * `disconnect()` is called on graceful shutdown.
12
+ */
13
+ export interface WsTransportAdapter {
14
+ /**
15
+ * Fan out a message to other instances.
16
+ * Called on every `publish()` in ws.ts — must be non-blocking.
17
+ * Errors are caught and logged by the caller; they never break local delivery.
18
+ * @param origin — unique ID of the publishing instance (for self-echo filtering)
19
+ */
20
+ publish(endpoint: string, room: string, message: string, origin: string): Promise<void>;
21
+ /**
22
+ * Connect to the transport backend.
23
+ * @param onMessage — call this when a message arrives from the transport.
24
+ * Includes `origin` so the caller can skip self-echo.
25
+ */
26
+ connect(onMessage: (endpoint: string, room: string, message: string, origin: string) => void): Promise<void>;
27
+ /** Disconnect from the transport backend. Called on SIGTERM/SIGINT. */
28
+ disconnect(): Promise<void>;
29
+ }
30
+ /**
31
+ * Default no-op transport. Single-instance — all messages go through
32
+ * Bun's native `server.publish()` only. No cross-instance delivery.
33
+ */
34
+ export declare class InMemoryTransport implements WsTransportAdapter {
35
+ publish(_endpoint: string, _room: string, _message: string, _origin: string): Promise<void>;
36
+ connect(_onMessage: (endpoint: string, room: string, message: string, origin: string) => void): Promise<void>;
37
+ disconnect(): Promise<void>;
38
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Default no-op transport. Single-instance — all messages go through
3
+ * Bun's native `server.publish()` only. No cross-instance delivery.
4
+ */
5
+ export class InMemoryTransport {
6
+ async publish(_endpoint, _room, _message, _origin) { }
7
+ async connect(_onMessage) { }
8
+ async disconnect() { }
9
+ }
@@ -1,4 +1,4 @@
1
- import type { Schema as SchemaType } from "mongoose";
1
+ import type { Schema as SchemaType } from 'mongoose';
2
2
  type ZodSchema = any;
3
3
  export type ZodToMongooseRefConfig = {
4
4
  /** DB field name (e.g., "account") */
@@ -1,19 +1,19 @@
1
- import { mongoose } from "./mongo";
1
+ import { getMongooseModule } from '../../lib/mongo';
2
2
  /** Unwrap nullable, optional, and default wrappers to get the core Zod type */
3
3
  function unwrap(zodType) {
4
4
  let t = zodType;
5
5
  let required = true;
6
6
  while (true) {
7
7
  const defType = t._zod?.def?.type;
8
- if (defType === "nullable") {
8
+ if (defType === 'nullable') {
9
9
  t = t._zod.def.innerType;
10
10
  required = false;
11
11
  }
12
- else if (defType === "optional") {
12
+ else if (defType === 'optional') {
13
13
  t = t._zod.def.innerType;
14
14
  required = false;
15
15
  }
16
- else if (defType === "default") {
16
+ else if (defType === 'default') {
17
17
  t = t._zod.def.innerType;
18
18
  required = false;
19
19
  }
@@ -24,21 +24,21 @@ function unwrap(zodType) {
24
24
  }
25
25
  /** Lazily access the Mongoose Schema class (avoids top-level require of mongoose) */
26
26
  function getSchema() {
27
- return mongoose.Schema;
27
+ return getMongooseModule().Schema;
28
28
  }
29
29
  /** Convert a single Zod type to a Mongoose field definition */
30
30
  function toMongooseField(zodType) {
31
31
  const { core, required } = unwrap(zodType);
32
32
  const defType = core._zod?.def?.type;
33
- if (defType === "string")
33
+ if (defType === 'string')
34
34
  return { type: String, required };
35
- if (defType === "number")
35
+ if (defType === 'number')
36
36
  return { type: Number, required };
37
- if (defType === "boolean")
37
+ if (defType === 'boolean')
38
38
  return { type: Boolean, required };
39
- if (defType === "date")
39
+ if (defType === 'date')
40
40
  return { type: Date, required };
41
- if (defType === "enum")
41
+ if (defType === 'enum')
42
42
  return { type: String, enum: core.options, required };
43
43
  return { type: getSchema().Types.Mixed, required };
44
44
  }
@@ -64,7 +64,7 @@ export function zodToMongoose(zodSchema, config = {}) {
64
64
  const shape = zodSchema.shape;
65
65
  const fields = {};
66
66
  for (const [apiField, zodType] of Object.entries(shape)) {
67
- if (apiField === "id")
67
+ if (apiField === 'id')
68
68
  continue;
69
69
  if (config.refs?.[apiField]) {
70
70
  const { dbField, ref } = config.refs[apiField];
@@ -1,7 +1,8 @@
1
- import type { MiddlewareHandler, Context } from "hono";
2
- import type { AppEnv } from "../lib/context";
3
- import type { AuditLogEntry, AuditLogOptions } from "../lib/auditLog";
1
+ import type { AuditLogOptions } from '../lib/auditLog';
2
+ import type { Context, MiddlewareHandler } from 'hono';
3
+ import type { AppEnv, AuditLogEntry, AuditLogProvider } from '../../../packages/bunshot-core/src/index.js';
4
4
  export interface AuditLogMiddlewareOptions extends AuditLogOptions {
5
+ provider?: AuditLogProvider;
5
6
  exclude?: {
6
7
  /** Skip logging for requests with these HTTP methods (e.g. `["GET", "HEAD"]`). */
7
8
  methods?: string[];
@@ -0,0 +1,42 @@
1
+ import { createAuditLogProvider } from '../lib/auditLog';
2
+ import { getClientIp } from '../../../packages/bunshot-core/src/index.js';
3
+ export const auditLog = (options) => {
4
+ const provider = options.provider ?? createAuditLogProvider(options);
5
+ return async (c, next) => {
6
+ await next();
7
+ // Exclusion checks run after next() intentionally — c.res.status is only available
8
+ // after the route handler runs. The route still executes; we're only skipping the log write.
9
+ if (options.exclude?.methods?.includes(c.req.method))
10
+ return;
11
+ // Note: if exclude.paths grows large, regex evaluation on every request adds up.
12
+ // For high-traffic exclusions, prefer string matching over regex.
13
+ const path = c.req.path;
14
+ if (options.exclude?.paths?.some(p => (typeof p === 'string' ? p === path : p.test(path))))
15
+ return;
16
+ let entry = {
17
+ id: crypto.randomUUID(),
18
+ requestId: c.get('requestId') ?? undefined,
19
+ userId: c.get('authUserId') ?? null,
20
+ sessionId: c.get('sessionId') ?? null,
21
+ tenantId: c.get('tenantId') ?? null,
22
+ method: c.req.method,
23
+ path,
24
+ status: c.res.status,
25
+ ip: getClientIp(c),
26
+ userAgent: c.req.header('user-agent') ?? null,
27
+ createdAt: new Date().toISOString(),
28
+ };
29
+ if (options.onEntry) {
30
+ try {
31
+ entry = await options.onEntry(entry, c);
32
+ }
33
+ catch (err) {
34
+ console.error('[auditLog] onEntry hook threw:', err);
35
+ }
36
+ }
37
+ // Fire-and-forget — never block the response; logAuditEntry also swallows errors internally
38
+ provider.logEntry(entry).catch((err) => {
39
+ console.error('[auditLog] write failed:', err);
40
+ });
41
+ };
42
+ };
@@ -1,4 +1,4 @@
1
- import type { MiddlewareHandler } from "hono";
1
+ import type { MiddlewareHandler } from 'hono';
2
2
  export interface BotProtectionOptions {
3
3
  /**
4
4
  * List of IPv4 CIDRs (e.g. "198.51.100.0/24"), IPv4 exact addresses,
@@ -6,4 +6,4 @@ export interface BotProtectionOptions {
6
6
  */
7
7
  blockList?: string[];
8
8
  }
9
- export declare const botProtection: ({ blockList, }: BotProtectionOptions) => MiddlewareHandler;
9
+ export declare const botProtection: ({ blockList }: BotProtectionOptions) => MiddlewareHandler;
@@ -1,14 +1,13 @@
1
- import { getClientIp } from "../lib/clientIp";
1
+ import { getClientIp } from '../../../packages/bunshot-core/src/index.js';
2
2
  // ---------------------------------------------------------------------------
3
3
  // CIDR helpers (IPv4 only; IPv6 exact-match supported)
4
4
  // ---------------------------------------------------------------------------
5
5
  function ipv4ToUint32(ip) {
6
- const parts = ip.split(".").map(Number);
7
- return (((parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8) | parts[3]) >>>
8
- 0);
6
+ const parts = ip.split('.').map(Number);
7
+ return ((parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8) | parts[3]) >>> 0;
9
8
  }
10
9
  function cidrMatchesIpv4(cidr, ip) {
11
- const slash = cidr.indexOf("/");
10
+ const slash = cidr.indexOf('/');
12
11
  const network = slash === -1 ? cidr : cidr.slice(0, slash);
13
12
  const prefixLen = slash === -1 ? 32 : parseInt(cidr.slice(slash + 1), 10);
14
13
  const mask = prefixLen === 0 ? 0 : (~0 << (32 - prefixLen)) >>> 0;
@@ -17,7 +16,7 @@ function cidrMatchesIpv4(cidr, ip) {
17
16
  const IPV4_RE = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/;
18
17
  function normalizeIp(ip) {
19
18
  // Strip IPv4-mapped IPv6 prefix (::ffff:1.2.3.4)
20
- if (ip.startsWith("::ffff:"))
19
+ if (ip.startsWith('::ffff:'))
21
20
  return ip.slice(7);
22
21
  return ip;
23
22
  }
@@ -37,13 +36,13 @@ function isBlocked(ip, blockList) {
37
36
  }
38
37
  return false;
39
38
  }
40
- export const botProtection = ({ blockList = [], }) => {
39
+ export const botProtection = ({ blockList = [] }) => {
41
40
  if (blockList.length === 0)
42
41
  return (_c, next) => next();
43
42
  return async (c, next) => {
44
43
  const ip = getClientIp(c);
45
- if (ip !== "unknown" && isBlocked(ip, blockList)) {
46
- return c.json({ error: "Forbidden" }, 403);
44
+ if (ip !== 'unknown' && isBlocked(ip, blockList)) {
45
+ return c.json({ error: 'Forbidden' }, 403);
47
46
  }
48
47
  await next();
49
48
  };