@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
@@ -1,7 +1,7 @@
1
1
  const VERIFY_URLS = {
2
- recaptcha: "https://www.google.com/recaptcha/api/siteverify",
3
- hcaptcha: "https://hcaptcha.com/siteverify",
4
- turnstile: "https://challenges.cloudflare.com/turnstile/v0/siteverify",
2
+ recaptcha: 'https://www.google.com/recaptcha/api/siteverify',
3
+ hcaptcha: 'https://hcaptcha.com/siteverify',
4
+ turnstile: 'https://challenges.cloudflare.com/turnstile/v0/siteverify',
5
5
  };
6
6
  /**
7
7
  * Verify a CAPTCHA token with the provider's API.
@@ -11,25 +11,28 @@ export async function verifyCaptcha(token, config, ip) {
11
11
  const url = VERIFY_URLS[config.provider];
12
12
  const body = new URLSearchParams({ secret: config.secretKey, response: token });
13
13
  if (ip)
14
- body.set("remoteip", ip);
14
+ body.set('remoteip', ip);
15
15
  let data;
16
16
  try {
17
- const res = await fetch(url, { method: "POST", body });
17
+ const res = await fetch(url, { method: 'POST', body });
18
18
  if (!res.ok)
19
19
  return { success: false, error: `Provider returned ${res.status}` };
20
- data = await res.json();
20
+ data = (await res.json());
21
21
  }
22
22
  catch (err) {
23
- return { success: false, error: "CAPTCHA provider unreachable" };
23
+ return { success: false, error: 'CAPTCHA provider unreachable' };
24
24
  }
25
25
  if (!data.success) {
26
- return { success: false, error: String(data["error-codes"]?.[0] ?? "invalid-token") };
26
+ return {
27
+ success: false,
28
+ error: String(data['error-codes']?.[0] ?? 'invalid-token'),
29
+ };
27
30
  }
28
31
  // reCAPTCHA v3: check score
29
- if (config.provider === "recaptcha" && typeof data.score === "number") {
32
+ if (config.provider === 'recaptcha' && typeof data.score === 'number') {
30
33
  const minScore = config.minScore ?? 0.5;
31
34
  if (data.score < minScore) {
32
- return { success: false, score: data.score, error: "score-too-low" };
35
+ return { success: false, score: data.score, error: 'score-too-low' };
33
36
  }
34
37
  return { success: true, score: data.score };
35
38
  }
@@ -1,11 +1,11 @@
1
1
  /** Check if a Zod type is nullable or optional */
2
2
  function isNullable(zodType) {
3
3
  const defType = zodType?._zod?.def?.type;
4
- if (defType === "nullable")
4
+ if (defType === 'nullable')
5
5
  return true;
6
- if (defType === "optional")
6
+ if (defType === 'optional')
7
7
  return true;
8
- if (defType === "default")
8
+ if (defType === 'default')
9
9
  return isNullable(zodType._zod.def.innerType);
10
10
  return false;
11
11
  }
@@ -46,7 +46,7 @@ export function createDtoMapper(zodSchema, config = {}) {
46
46
  return (doc) => {
47
47
  const dto = {};
48
48
  for (const field of apiFields) {
49
- if (field === "id") {
49
+ if (field === 'id') {
50
50
  dto.id = doc._id.toString();
51
51
  continue;
52
52
  }
@@ -0,0 +1 @@
1
+ export { createRoute, withSecurity, registerSchema, registerSchemas, maybeAutoRegister, } from '../../../packages/bunshot-core/src/index.js';
@@ -0,0 +1,2 @@
1
+ // Re-export from core — all route utilities now live in @lastshotlabs/bunshot-core
2
+ export { createRoute, withSecurity, registerSchema, registerSchemas, maybeAutoRegister, } from '../../../packages/bunshot-core/src/index.js';
@@ -1,12 +1,9 @@
1
- import type { MiddlewareHandler } from "hono";
2
- import type { AppEnv } from "./context";
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { AppEnv } from '../../../packages/bunshot-core/src/index.js';
3
3
  export interface IdempotencyOptions {
4
4
  /** TTL in seconds for cached responses. Default: 86400 (24 hours). */
5
5
  ttl?: number;
6
6
  }
7
- type IdempotencyStore = "redis" | "mongo" | "sqlite" | "memory";
8
- export declare const setIdempotencyStore: (store: IdempotencyStore) => void;
9
- export declare const clearIdempotencyMemoryStore: () => void;
10
7
  /**
11
8
  * Idempotency middleware. Reads the `Idempotency-Key` header and returns a
12
9
  * cached response if one exists for this user + key combination. Otherwise
@@ -19,4 +16,3 @@ export declare const clearIdempotencyMemoryStore: () => void;
19
16
  * prevent enumeration. When off, raw keys are stored (slight enumeration risk).
20
17
  */
21
18
  export declare const idempotent: (opts?: IdempotencyOptions) => MiddlewareHandler<AppEnv>;
22
- export {};
@@ -0,0 +1,74 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Idempotency middleware — consumes repository from BunshotContext
3
+ // ---------------------------------------------------------------------------
4
+ import { hmacSign } from '../../lib/signing';
5
+ import { HEADER_IDEMPOTENCY_KEY } from '../../../packages/bunshot-core/src/index.js';
6
+ // ---------------------------------------------------------------------------
7
+ // Key derivation
8
+ // ---------------------------------------------------------------------------
9
+ function deriveKey(rawKey, userId, signing) {
10
+ const prefix = userId ?? 'anon';
11
+ if (signing?.config?.idempotencyKeys && signing.secret) {
12
+ return `${prefix}:${hmacSign(rawKey, signing.secret)}`;
13
+ }
14
+ return `${prefix}:${rawKey}`;
15
+ }
16
+ // ---------------------------------------------------------------------------
17
+ // Middleware factory
18
+ // ---------------------------------------------------------------------------
19
+ /**
20
+ * Idempotency middleware. Reads the `Idempotency-Key` header and returns a
21
+ * cached response if one exists for this user + key combination. Otherwise
22
+ * calls the next handler, stores the response, and returns it.
23
+ *
24
+ * On write collision (two concurrent identical requests), the second request
25
+ * re-reads and returns the first-stored result.
26
+ *
27
+ * When `signing.idempotencyKeys: true`, keys are HMAC'd before storage to
28
+ * prevent enumeration. When off, raw keys are stored (slight enumeration risk).
29
+ */
30
+ export const idempotent = (opts) => async (c, next) => {
31
+ const rawKey = c.req.header(HEADER_IDEMPOTENCY_KEY);
32
+ if (!rawKey) {
33
+ await next();
34
+ return;
35
+ }
36
+ const ctx = c.get('bunshotCtx');
37
+ const adapter = ctx?.persistence.idempotency;
38
+ if (!adapter) {
39
+ // No persistence configured — pass through
40
+ await next();
41
+ return;
42
+ }
43
+ const userId = c.get('authUserId') ?? null;
44
+ const signingConfig = ctx?.signing ?? null;
45
+ const signingSecret = signingConfig?.secret ?? null;
46
+ const key = deriveKey(rawKey, userId, { config: signingConfig, secret: signingSecret });
47
+ const ttl = opts?.ttl ?? 86400;
48
+ // Cache hit — return stored response
49
+ const cached = await adapter.get(key);
50
+ if (cached) {
51
+ return c.json(JSON.parse(cached.response), cached.status);
52
+ }
53
+ // Cache miss — call handler
54
+ await next();
55
+ // Capture the response body by reading it
56
+ const status = c.res.status;
57
+ let body = '';
58
+ try {
59
+ body = await c.res.clone().text();
60
+ }
61
+ catch {
62
+ // Non-text/non-json response — skip caching
63
+ return;
64
+ }
65
+ await adapter.set(key, body, status, ttl);
66
+ // Re-read to handle write collision (NX semantics — set() may have been a no-op)
67
+ const stored = await adapter.get(key);
68
+ if (stored && stored.response !== body) {
69
+ c.res = new Response(stored.response, {
70
+ status: stored.status,
71
+ headers: { 'content-type': 'application/json' },
72
+ });
73
+ }
74
+ };
@@ -0,0 +1,3 @@
1
+ export declare const log: (...args: unknown[]) => void;
2
+ /** Like log(), but also requires LOGGING_AUTH_TRACE=true. Use for lines that include user/session IDs. */
3
+ export declare const authTrace: (...args: unknown[]) => void;
@@ -0,0 +1,14 @@
1
+ function isVerbose() {
2
+ const v = process.env.LOGGING_VERBOSE;
3
+ return v !== undefined ? v === 'true' : process.env.NODE_ENV !== 'production';
4
+ }
5
+ export const log = (...args) => {
6
+ if (isVerbose())
7
+ console.log(...args);
8
+ };
9
+ const authTraceEnabled = process.env.LOGGING_AUTH_TRACE === 'true';
10
+ /** Like log(), but also requires LOGGING_AUTH_TRACE=true. Use for lines that include user/session IDs. */
11
+ export const authTrace = (...args) => {
12
+ if (authTraceEnabled)
13
+ log(...args);
14
+ };
@@ -0,0 +1,34 @@
1
+ type Labels = Record<string, string>;
2
+ interface CounterEntry {
3
+ labels: Labels;
4
+ value: number;
5
+ }
6
+ interface HistogramEntry {
7
+ labels: Labels;
8
+ buckets: number[];
9
+ sum: number;
10
+ count: number;
11
+ }
12
+ type GaugeCallback = () => Promise<{
13
+ labels: Labels;
14
+ value: number;
15
+ }[]>;
16
+ export interface MetricsState {
17
+ readonly counters: Map<string, Map<string, CounterEntry>>;
18
+ readonly histograms: Map<string, {
19
+ boundaries: number[];
20
+ entries: Map<string, HistogramEntry>;
21
+ }>;
22
+ readonly gaugeCallbacks: Map<string, GaugeCallback>;
23
+ queues: Map<string, any> | null;
24
+ }
25
+ export declare function createMetricsState(): MetricsState;
26
+ export declare function defaultNormalizePath(path: string): string;
27
+ export declare function incrementCounter(state: MetricsState, name: string, labels: Labels, amount?: number): void;
28
+ export declare function observeHistogram(state: MetricsState, name: string, labels: Labels, value: number, buckets?: number[]): void;
29
+ export declare function registerGaugeCallback(state: MetricsState, name: string, cb: GaugeCallback): void;
30
+ export declare function serializeMetrics(state: MetricsState): Promise<string>;
31
+ export declare function resetMetrics(state: MetricsState): void;
32
+ export declare function setMetricsQueues(state: MetricsState, map: Map<string, any>): void;
33
+ export declare function closeMetricsQueues(state: MetricsState): Promise<void>;
34
+ export {};
@@ -1,44 +1,49 @@
1
1
  // In-memory Prometheus-compatible metrics registry.
2
- // Bun is single-threaded so no atomics are needed.
3
- // ── Helpers ──────────────────────────────────────────────────────────────────
2
+ // Owned per app instance via MetricsState, not process-global.
3
+ export function createMetricsState() {
4
+ return {
5
+ counters: new Map(),
6
+ histograms: new Map(),
7
+ gaugeCallbacks: new Map(),
8
+ queues: null,
9
+ };
10
+ }
4
11
  function labelKey(labels) {
5
12
  return Object.entries(labels)
6
13
  .sort(([a], [b]) => a.localeCompare(b))
7
14
  .map(([k, v]) => `${k}="${v}"`)
8
- .join(",");
15
+ .join(',');
9
16
  }
10
17
  function formatLabels(labels) {
11
18
  const pairs = Object.entries(labels)
12
19
  .sort(([a], [b]) => a.localeCompare(b))
13
20
  .map(([k, v]) => `${k}="${v}"`);
14
- return pairs.length ? `{${pairs.join(",")}}` : "";
21
+ return pairs.length ? `{${pairs.join(',')}}` : '';
15
22
  }
16
- // ── Path normalization ───────────────────────────────────────────────────────
17
23
  const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
18
24
  const OBJECTID_RE = /^[0-9a-f]{24}$/i;
19
25
  const NUMERIC_RE = /^\d+$/;
20
26
  export function defaultNormalizePath(path) {
21
27
  return path
22
- .split("/")
23
- .map((seg) => {
28
+ .split('/')
29
+ .map(seg => {
24
30
  if (!seg)
25
31
  return seg;
26
32
  if (UUID_RE.test(seg))
27
- return ":id";
33
+ return ':id';
28
34
  if (OBJECTID_RE.test(seg))
29
- return ":id";
35
+ return ':id';
30
36
  if (NUMERIC_RE.test(seg))
31
- return ":id";
37
+ return ':id';
32
38
  return seg;
33
39
  })
34
- .join("/");
40
+ .join('/');
35
41
  }
36
- const counters = new Map();
37
- export function incrementCounter(name, labels, amount = 1) {
38
- let metric = counters.get(name);
42
+ export function incrementCounter(state, name, labels, amount = 1) {
43
+ let metric = state.counters.get(name);
39
44
  if (!metric) {
40
45
  metric = new Map();
41
- counters.set(name, metric);
46
+ state.counters.set(name, metric);
42
47
  }
43
48
  const key = labelKey(labels);
44
49
  const existing = metric.get(key);
@@ -49,14 +54,12 @@ export function incrementCounter(name, labels, amount = 1) {
49
54
  metric.set(key, { labels: { ...labels }, value: amount });
50
55
  }
51
56
  }
52
- // ── Histogram ────────────────────────────────────────────────────────────────
53
57
  const DEFAULT_BUCKETS = [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10];
54
- const histograms = new Map();
55
- export function observeHistogram(name, labels, value, buckets = DEFAULT_BUCKETS) {
56
- let metric = histograms.get(name);
58
+ export function observeHistogram(state, name, labels, value, buckets = DEFAULT_BUCKETS) {
59
+ let metric = state.histograms.get(name);
57
60
  if (!metric) {
58
61
  metric = { boundaries: buckets, entries: new Map() };
59
- histograms.set(name, metric);
62
+ state.histograms.set(name, metric);
60
63
  }
61
64
  const key = labelKey(labels);
62
65
  let entry = metric.entries.get(key);
@@ -64,8 +67,6 @@ export function observeHistogram(name, labels, value, buckets = DEFAULT_BUCKETS)
64
67
  entry = { labels: { ...labels }, buckets: new Array(buckets.length).fill(0), sum: 0, count: 0 };
65
68
  metric.entries.set(key, entry);
66
69
  }
67
- // Find the first (tightest) bucket the value fits in.
68
- // Serialization will compute cumulative sums across buckets.
69
70
  for (let i = 0; i < metric.boundaries.length; i++) {
70
71
  if (value <= metric.boundaries[i]) {
71
72
  entry.buckets[i]++;
@@ -75,43 +76,37 @@ export function observeHistogram(name, labels, value, buckets = DEFAULT_BUCKETS)
75
76
  entry.sum += value;
76
77
  entry.count++;
77
78
  }
78
- const gaugeCallbacks = new Map();
79
- export function registerGaugeCallback(name, cb) {
80
- gaugeCallbacks.set(name, cb);
79
+ export function registerGaugeCallback(state, name, cb) {
80
+ state.gaugeCallbacks.set(name, cb);
81
81
  }
82
- // ── Serialize ────────────────────────────────────────────────────────────────
83
- export async function serializeMetrics() {
82
+ export async function serializeMetrics(state) {
84
83
  const lines = [];
85
- // Collect gauge callbacks first so any error-counter increments are
86
- // included when we serialize counters below.
87
84
  const gaugeLines = [];
88
- for (const [name, cb] of gaugeCallbacks) {
85
+ for (const [name, cb] of state.gaugeCallbacks) {
89
86
  try {
90
87
  const results = await cb();
91
- gaugeLines.push(`# HELP ${name} ${name.replace(/_/g, " ")}`);
88
+ gaugeLines.push(`# HELP ${name} ${name.replace(/_/g, ' ')}`);
92
89
  gaugeLines.push(`# TYPE ${name} gauge`);
93
90
  for (const { labels, value } of results) {
94
91
  gaugeLines.push(`${name}${formatLabels(labels)} ${value}`);
95
92
  }
96
- gaugeLines.push("");
93
+ gaugeLines.push('');
97
94
  }
98
95
  catch (err) {
99
96
  console.warn(`[metrics] Gauge callback "${name}" failed:`, err);
100
- incrementCounter("bunshot_gauge_errors_total", { gauge: name });
97
+ incrementCounter(state, 'bunshot_gauge_errors_total', { gauge: name });
101
98
  }
102
99
  }
103
- // Counters
104
- for (const [name, entries] of counters) {
105
- lines.push(`# HELP ${name} Total ${name.replace(/_/g, " ")}`);
100
+ for (const [name, entries] of state.counters) {
101
+ lines.push(`# HELP ${name} Total ${name.replace(/_/g, ' ')}`);
106
102
  lines.push(`# TYPE ${name} counter`);
107
103
  for (const entry of entries.values()) {
108
104
  lines.push(`${name}${formatLabels(entry.labels)} ${entry.value}`);
109
105
  }
110
- lines.push("");
106
+ lines.push('');
111
107
  }
112
- // Histograms
113
- for (const [name, metric] of histograms) {
114
- lines.push(`# HELP ${name} ${name.replace(/_/g, " ")}`);
108
+ for (const [name, metric] of state.histograms) {
109
+ lines.push(`# HELP ${name} ${name.replace(/_/g, ' ')}`);
115
110
  lines.push(`# TYPE ${name} histogram`);
116
111
  for (const entry of metric.entries.values()) {
117
112
  const lbls = formatLabels(entry.labels);
@@ -121,32 +116,28 @@ export async function serializeMetrics() {
121
116
  const bucketLabels = { ...entry.labels, le: String(metric.boundaries[i]) };
122
117
  lines.push(`${name}_bucket${formatLabels(bucketLabels)} ${cumulative}`);
123
118
  }
124
- const infLabels = { ...entry.labels, le: "+Inf" };
119
+ const infLabels = { ...entry.labels, le: '+Inf' };
125
120
  lines.push(`${name}_bucket${formatLabels(infLabels)} ${entry.count}`);
126
121
  lines.push(`${name}_sum${lbls} ${entry.sum}`);
127
122
  lines.push(`${name}_count${lbls} ${entry.count}`);
128
123
  }
129
- lines.push("");
124
+ lines.push('');
130
125
  }
131
- // Gauges (already collected above)
132
126
  lines.push(...gaugeLines);
133
- return lines.join("\n");
127
+ return lines.join('\n');
134
128
  }
135
- // ── Reset (for tests) ───────────────────────────────────────────────────────
136
- export function resetMetrics() {
137
- counters.clear();
138
- histograms.clear();
139
- gaugeCallbacks.clear();
129
+ export function resetMetrics(state) {
130
+ state.counters.clear();
131
+ state.histograms.clear();
132
+ state.gaugeCallbacks.clear();
140
133
  }
141
- // ── Queue cleanup ────────────────────────────────────────────────────────────
142
- let metricsQueues = null;
143
- export function setMetricsQueues(map) {
144
- metricsQueues = map;
134
+ export function setMetricsQueues(state, map) {
135
+ state.queues = map;
145
136
  }
146
- export async function closeMetricsQueues() {
147
- if (!metricsQueues)
137
+ export async function closeMetricsQueues(state) {
138
+ if (!state.queues)
148
139
  return;
149
- for (const q of metricsQueues.values()) {
140
+ for (const q of state.queues.values()) {
150
141
  try {
151
142
  await q.close();
152
143
  }
@@ -154,5 +145,6 @@ export async function closeMetricsQueues() {
154
145
  // best-effort cleanup
155
146
  }
156
147
  }
157
- metricsQueues.clear();
148
+ state.queues.clear();
149
+ state.queues = null;
158
150
  }
@@ -0,0 +1,42 @@
1
+ import type { SigningConfig } from '../../lib/signingConfig';
2
+ import { z } from 'zod';
3
+ import type { ZodType } from 'zod';
4
+ export type { PaginationOpts, PaginatedResult } from '../../../packages/bunshot-core/src/index.js';
5
+ export { offsetParams, parseOffsetParams, paginatedResponse } from '../../../packages/bunshot-core/src/index.js';
6
+ export { cursorPaginatedResponse } from '../../../packages/bunshot-core/src/index.js';
7
+ export type { OffsetParamDefaults, ParsedOffsetParams } from '../../../packages/bunshot-core/src/index.js';
8
+ export interface CursorParamDefaults {
9
+ limit?: number;
10
+ maxLimit?: number;
11
+ }
12
+ export interface ParsedCursorParams {
13
+ limit: number;
14
+ cursor: string | undefined;
15
+ }
16
+ export interface CursorResult<T> {
17
+ items: T[];
18
+ nextCursor: string | null;
19
+ hasMore: boolean;
20
+ }
21
+ export declare function cursorParams(defaults?: CursorParamDefaults): z.ZodObject<{
22
+ limit: z.ZodOptional<z.ZodString>;
23
+ cursor: z.ZodOptional<z.ZodString>;
24
+ }, z.core.$strip>;
25
+ export declare function parseCursorParams(raw: {
26
+ limit?: string;
27
+ cursor?: string;
28
+ }, defaults?: CursorParamDefaults, signing?: {
29
+ config: SigningConfig | null;
30
+ secret: string | string[] | null;
31
+ }): ParsedCursorParams & {
32
+ invalidCursor?: true;
33
+ };
34
+ export declare function maybeSignCursor(cursor: string | null, signing?: {
35
+ config: SigningConfig | null;
36
+ secret: string | string[] | null;
37
+ }): string | null;
38
+ export declare function cursorResponse<T extends ZodType>(itemSchema: T, name: string): z.ZodObject<{
39
+ items: z.ZodArray<T>;
40
+ nextCursor: z.ZodNullable<z.ZodString>;
41
+ hasMore: z.ZodBoolean;
42
+ }, z.core.$strip>;
@@ -0,0 +1,51 @@
1
+ import { signCursor, verifyCursor } from '../../lib/signing';
2
+ import { z } from 'zod';
3
+ import { registerSchema } from '../../../packages/bunshot-core/src/index.js';
4
+ export { offsetParams, parseOffsetParams, paginatedResponse } from '../../../packages/bunshot-core/src/index.js';
5
+ export { cursorPaginatedResponse } from '../../../packages/bunshot-core/src/index.js';
6
+ export function cursorParams(defaults) {
7
+ const defaultLimit = defaults?.limit ?? 50;
8
+ const maxLimit = defaults?.maxLimit ?? 200;
9
+ return z.object({
10
+ limit: z
11
+ .string()
12
+ .optional()
13
+ .describe(`Number of items to return (1-${maxLimit}, default ${defaultLimit})`),
14
+ cursor: z
15
+ .string()
16
+ .optional()
17
+ .describe("Opaque cursor from a previous response's nextCursor field"),
18
+ });
19
+ }
20
+ export function parseCursorParams(raw, defaults, signing) {
21
+ const defaultLimit = defaults?.limit ?? 50;
22
+ const maxLimit = defaults?.maxLimit ?? 200;
23
+ const rawLimit = parseInt(raw.limit ?? '', 10);
24
+ const limit = isNaN(rawLimit) ? defaultLimit : Math.min(Math.max(rawLimit, 1), maxLimit);
25
+ if (!raw.cursor)
26
+ return { limit, cursor: undefined };
27
+ if (signing?.config?.cursors && signing.secret) {
28
+ const verified = verifyCursor(raw.cursor, signing.secret);
29
+ if (verified === null)
30
+ return { limit, cursor: undefined, invalidCursor: true };
31
+ return { limit, cursor: verified };
32
+ }
33
+ return { limit, cursor: raw.cursor };
34
+ }
35
+ export function maybeSignCursor(cursor, signing) {
36
+ if (!cursor)
37
+ return cursor;
38
+ if (signing?.config?.cursors && signing.secret) {
39
+ return signCursor(cursor, signing.secret);
40
+ }
41
+ return cursor;
42
+ }
43
+ export function cursorResponse(itemSchema, name) {
44
+ const wrapper = z.object({
45
+ items: z.array(itemSchema),
46
+ nextCursor: z.string().nullable(),
47
+ hasMore: z.boolean(),
48
+ });
49
+ registerSchema(name, wrapper);
50
+ return wrapper;
51
+ }
@@ -0,0 +1,38 @@
1
+ import type { RedisOptions } from 'ioredis';
2
+ import type { WsTransportAdapter } from './wsTransport';
3
+ export type { WsTransportAdapter };
4
+ export interface RedisTransportOptions {
5
+ /** ioredis connection options or a Redis URL string */
6
+ connection: RedisOptions | string;
7
+ /** Channel prefix for pub/sub. Default: "ws:room:" */
8
+ channelPrefix?: string;
9
+ }
10
+ /**
11
+ * Redis pub/sub transport for horizontal WebSocket scaling.
12
+ *
13
+ * Uses two ioredis clients — one for publishing and one for subscribing —
14
+ * as required by the Redis pub/sub protocol (a client in subscribe mode
15
+ * cannot issue regular commands).
16
+ *
17
+ * Uses `psubscribe` on `<prefix>*` so that joining new rooms never
18
+ * requires an additional SUBSCRIBE call.
19
+ *
20
+ * Self-echo prevention: every published message is wrapped with the
21
+ * `origin` passed in from `ws.ts` (the server instance UUID). Messages
22
+ * whose origin matches the local instance are dropped by the caller —
23
+ * the origin is forwarded intact to the `onMessage` callback.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * import { createRedisTransport } from '@lastshotlabs/bunshot'
28
+ *
29
+ * // Pass transport via ws.transport in createServer config:
30
+ * createServer({
31
+ * ws: {
32
+ * transport: createRedisTransport({ connection: { host: 'localhost', port: 6379 } }),
33
+ * endpoints: { '/ws': {} },
34
+ * },
35
+ * })
36
+ * ```
37
+ */
38
+ export declare function createRedisTransport(opts: RedisTransportOptions): WsTransportAdapter;