@lastshotlabs/bunshot 0.0.25 → 0.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (725) hide show
  1. package/.oclif.manifest.json +39 -0
  2. package/README.md +8282 -2147
  3. package/dist/cli/commands/init.js +690 -0
  4. package/dist/cli/index.js +6 -0
  5. package/dist/cli.js +4 -4
  6. package/dist/packages/bunshot-admin/src/index.d.ts +15 -0
  7. package/dist/packages/bunshot-admin/src/index.js +11 -0
  8. package/dist/packages/bunshot-admin/src/lib/resourceTypes.d.ts +8 -0
  9. package/dist/packages/bunshot-admin/src/lib/resourceTypes.js +33 -0
  10. package/dist/packages/bunshot-admin/src/lib/typedRoute.d.ts +14 -0
  11. package/dist/packages/bunshot-admin/src/lib/typedRoute.js +17 -0
  12. package/dist/packages/bunshot-admin/src/plugin.d.ts +4 -0
  13. package/dist/packages/bunshot-admin/src/plugin.js +46 -0
  14. package/dist/packages/bunshot-admin/src/providers/auth0Access.d.ts +6 -0
  15. package/dist/packages/bunshot-admin/src/providers/auth0Access.js +32 -0
  16. package/dist/packages/bunshot-admin/src/routes/admin.d.ts +10 -0
  17. package/dist/packages/bunshot-admin/src/routes/admin.js +923 -0
  18. package/dist/packages/bunshot-admin/src/routes/mail.d.ts +6 -0
  19. package/dist/packages/bunshot-admin/src/routes/mail.js +114 -0
  20. package/dist/packages/bunshot-admin/src/routes/permissions.d.ts +8 -0
  21. package/dist/packages/bunshot-admin/src/routes/permissions.js +315 -0
  22. package/dist/packages/bunshot-admin/src/types/config.d.ts +16 -0
  23. package/dist/packages/bunshot-admin/src/types/config.js +37 -0
  24. package/dist/packages/bunshot-admin/src/types/env.d.ts +14 -0
  25. package/dist/packages/bunshot-admin/src/types/provider.d.ts +1 -0
  26. package/dist/packages/bunshot-admin/src/types/provider.js +4 -0
  27. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.d.ts +66 -0
  28. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.js +1063 -0
  29. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.d.ts +2 -0
  30. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.js +536 -0
  31. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.d.ts +88 -0
  32. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.js +1366 -0
  33. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.d.ts +2 -0
  34. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.js +23 -0
  35. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.d.ts +5 -0
  36. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.js +131 -0
  37. package/dist/packages/bunshot-auth/src/bootstrap.d.ts +38 -0
  38. package/dist/packages/bunshot-auth/src/bootstrap.js +384 -0
  39. package/dist/packages/bunshot-auth/src/config/appConfig.d.ts +3 -0
  40. package/dist/packages/bunshot-auth/src/config/appConfig.js +4 -0
  41. package/dist/packages/bunshot-auth/src/config/authConfig.d.ts +478 -0
  42. package/dist/packages/bunshot-auth/src/config/authConfig.js +46 -0
  43. package/dist/packages/bunshot-auth/src/config/configLock.d.ts +2 -0
  44. package/dist/packages/bunshot-auth/src/config/configLock.js +10 -0
  45. package/dist/packages/bunshot-auth/src/index.d.ts +25 -0
  46. package/dist/packages/bunshot-auth/src/index.js +23 -0
  47. package/dist/packages/bunshot-auth/src/infra/mongo.d.ts +15 -0
  48. package/dist/packages/bunshot-auth/src/infra/mongo.js +44 -0
  49. package/dist/packages/bunshot-auth/src/infra/queue.d.ts +14 -0
  50. package/dist/packages/bunshot-auth/src/infra/queue.js +27 -0
  51. package/dist/packages/bunshot-auth/src/infra/redis.d.ts +5 -0
  52. package/dist/packages/bunshot-auth/src/infra/redis.js +15 -0
  53. package/dist/packages/bunshot-auth/src/infra/signing.d.ts +7 -0
  54. package/dist/packages/bunshot-auth/src/infra/signing.js +8 -0
  55. package/dist/packages/bunshot-auth/src/lib/accountLockout.d.ts +34 -0
  56. package/dist/packages/bunshot-auth/src/lib/accountLockout.js +244 -0
  57. package/dist/packages/bunshot-auth/src/lib/adapterTiers.d.ts +1 -0
  58. package/dist/packages/bunshot-auth/src/lib/adapterTiers.js +1 -0
  59. package/dist/packages/bunshot-auth/src/lib/authAdapter.d.ts +1 -0
  60. package/dist/packages/bunshot-auth/src/lib/authAdapter.js +1 -0
  61. package/dist/packages/bunshot-auth/src/lib/authContext.d.ts +15 -0
  62. package/dist/packages/bunshot-auth/src/lib/authContext.js +1 -0
  63. package/dist/packages/bunshot-auth/src/lib/authEventBus.d.ts +4 -0
  64. package/dist/packages/bunshot-auth/src/lib/authEventBus.js +15 -0
  65. package/dist/packages/bunshot-auth/src/lib/authRateLimit.d.ts +28 -0
  66. package/dist/packages/bunshot-auth/src/lib/authRateLimit.js +205 -0
  67. package/dist/packages/bunshot-auth/src/lib/breachedPassword.d.ts +19 -0
  68. package/dist/packages/bunshot-auth/src/lib/breachedPassword.js +61 -0
  69. package/dist/packages/bunshot-auth/src/lib/cache.d.ts +12 -0
  70. package/dist/packages/bunshot-auth/src/lib/cache.js +120 -0
  71. package/dist/packages/bunshot-auth/src/lib/clientIp.d.ts +4 -0
  72. package/dist/{lib → packages/bunshot-auth/src/lib}/clientIp.js +14 -7
  73. package/dist/packages/bunshot-auth/src/lib/cookieOptions.d.ts +27 -0
  74. package/dist/packages/bunshot-auth/src/lib/cookieOptions.js +33 -0
  75. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.d.ts +40 -0
  76. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.js +221 -0
  77. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.d.ts +19 -0
  78. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.js +148 -0
  79. package/dist/packages/bunshot-auth/src/lib/emailTemplates.d.ts +23 -0
  80. package/dist/packages/bunshot-auth/src/lib/emailTemplates.js +265 -0
  81. package/dist/packages/bunshot-auth/src/lib/emailVerification.d.ts +30 -0
  82. package/dist/packages/bunshot-auth/src/lib/emailVerification.js +200 -0
  83. package/dist/packages/bunshot-auth/src/lib/env.d.ts +1 -0
  84. package/dist/packages/bunshot-auth/src/lib/env.js +3 -0
  85. package/dist/packages/bunshot-auth/src/lib/fingerprint.js +36 -0
  86. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.d.ts +15 -16
  87. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.js +22 -34
  88. package/dist/packages/bunshot-auth/src/lib/jwks.d.ts +28 -0
  89. package/dist/packages/bunshot-auth/src/lib/jwks.js +79 -0
  90. package/dist/packages/bunshot-auth/src/lib/jwt.d.ts +12 -0
  91. package/dist/packages/bunshot-auth/src/lib/jwt.js +86 -0
  92. package/dist/packages/bunshot-auth/src/lib/logger.d.ts +3 -0
  93. package/dist/packages/bunshot-auth/src/lib/logger.js +13 -0
  94. package/dist/packages/bunshot-auth/src/lib/m2m.d.ts +30 -0
  95. package/dist/packages/bunshot-auth/src/lib/m2m.js +44 -0
  96. package/dist/packages/bunshot-auth/src/lib/magicLink.d.ts +13 -0
  97. package/dist/packages/bunshot-auth/src/lib/magicLink.js +145 -0
  98. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.d.ts +60 -0
  99. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.js +419 -0
  100. package/dist/packages/bunshot-auth/src/lib/oauth.d.ts +82 -0
  101. package/dist/packages/bunshot-auth/src/lib/oauth.js +177 -0
  102. package/dist/packages/bunshot-auth/src/lib/oauthCode.d.ts +19 -0
  103. package/dist/packages/bunshot-auth/src/lib/oauthCode.js +182 -0
  104. package/dist/packages/bunshot-auth/src/lib/oauthReauth.d.ts +19 -0
  105. package/dist/packages/bunshot-auth/src/lib/oauthReauth.js +255 -0
  106. package/dist/packages/bunshot-auth/src/lib/organization.d.ts +66 -0
  107. package/dist/packages/bunshot-auth/src/lib/organization.js +225 -0
  108. package/dist/packages/bunshot-auth/src/lib/passwordHistory.d.ts +12 -0
  109. package/dist/packages/bunshot-auth/src/lib/passwordHistory.js +31 -0
  110. package/dist/packages/bunshot-auth/src/lib/resetPassword.d.ts +20 -0
  111. package/dist/packages/bunshot-auth/src/lib/resetPassword.js +148 -0
  112. package/dist/packages/bunshot-auth/src/lib/roles.d.ts +9 -0
  113. package/dist/packages/bunshot-auth/src/lib/roles.js +93 -0
  114. package/dist/packages/bunshot-auth/src/lib/saml.d.ts +29 -0
  115. package/dist/packages/bunshot-auth/src/lib/saml.js +73 -0
  116. package/dist/packages/bunshot-auth/src/lib/samlRequestId.d.ts +13 -0
  117. package/dist/packages/bunshot-auth/src/lib/samlRequestId.js +129 -0
  118. package/dist/packages/bunshot-auth/src/lib/scim.d.ts +44 -0
  119. package/dist/packages/bunshot-auth/src/lib/scim.js +56 -0
  120. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.d.ts +22 -0
  121. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.js +65 -0
  122. package/dist/packages/bunshot-auth/src/lib/session.d.ts +45 -0
  123. package/dist/packages/bunshot-auth/src/lib/session.js +1211 -0
  124. package/dist/packages/bunshot-auth/src/lib/storeInfra.d.ts +26 -0
  125. package/dist/packages/bunshot-auth/src/lib/storeInfra.js +18 -0
  126. package/dist/packages/bunshot-auth/src/lib/suspension.d.ts +14 -0
  127. package/dist/packages/bunshot-auth/src/lib/suspension.js +20 -0
  128. package/dist/packages/bunshot-auth/src/lib/validateAdapter.d.ts +16 -0
  129. package/dist/packages/bunshot-auth/src/lib/validateAdapter.js +161 -0
  130. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.d.ts +13 -0
  131. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.js +58 -0
  132. package/dist/{middleware → packages/bunshot-auth/src/middleware}/csrf.d.ts +5 -4
  133. package/dist/packages/bunshot-auth/src/middleware/csrf.js +138 -0
  134. package/dist/packages/bunshot-auth/src/middleware/identify.d.ts +4 -0
  135. package/dist/packages/bunshot-auth/src/middleware/identify.js +124 -0
  136. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.d.ts +2 -2
  137. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.js +10 -7
  138. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.d.ts +2 -2
  139. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.js +20 -16
  140. package/dist/packages/bunshot-auth/src/middleware/requireScope.d.ts +10 -0
  141. package/dist/packages/bunshot-auth/src/middleware/requireScope.js +25 -0
  142. package/dist/packages/bunshot-auth/src/middleware/requireStepUp.d.ts +18 -0
  143. package/dist/packages/bunshot-auth/src/middleware/requireStepUp.js +30 -0
  144. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.d.ts +2 -2
  145. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.js +7 -6
  146. package/dist/packages/bunshot-auth/src/middleware/scimAuth.d.ts +8 -0
  147. package/dist/packages/bunshot-auth/src/middleware/scimAuth.js +29 -0
  148. package/dist/packages/bunshot-auth/src/middleware/userAuth.d.ts +3 -0
  149. package/dist/packages/bunshot-auth/src/middleware/userAuth.js +6 -0
  150. package/dist/{models → packages/bunshot-auth/src/models}/AuthUser.d.ts +19 -8
  151. package/dist/packages/bunshot-auth/src/models/AuthUser.js +53 -0
  152. package/dist/packages/bunshot-auth/src/models/Group.d.ts +19 -0
  153. package/dist/packages/bunshot-auth/src/models/Group.js +22 -0
  154. package/dist/{models → packages/bunshot-auth/src/models}/GroupMembership.d.ts +6 -8
  155. package/dist/packages/bunshot-auth/src/models/GroupMembership.js +19 -0
  156. package/dist/packages/bunshot-auth/src/models/M2MClient.d.ts +18 -0
  157. package/dist/packages/bunshot-auth/src/models/M2MClient.js +18 -0
  158. package/dist/packages/bunshot-auth/src/models/TenantRole.d.ts +13 -0
  159. package/dist/packages/bunshot-auth/src/models/TenantRole.js +17 -0
  160. package/dist/packages/bunshot-auth/src/plugin.d.ts +4 -0
  161. package/dist/packages/bunshot-auth/src/plugin.js +274 -0
  162. package/dist/packages/bunshot-auth/src/routes/auth.d.ts +15 -0
  163. package/dist/packages/bunshot-auth/src/routes/auth.js +1624 -0
  164. package/dist/packages/bunshot-auth/src/routes/groups.d.ts +4 -0
  165. package/dist/packages/bunshot-auth/src/routes/groups.js +481 -0
  166. package/dist/packages/bunshot-auth/src/routes/m2m.d.ts +2 -0
  167. package/dist/packages/bunshot-auth/src/routes/m2m.js +145 -0
  168. package/dist/packages/bunshot-auth/src/routes/mfa.d.ts +6 -0
  169. package/dist/packages/bunshot-auth/src/routes/mfa.js +991 -0
  170. package/dist/packages/bunshot-auth/src/routes/oauth.d.ts +3 -0
  171. package/dist/packages/bunshot-auth/src/routes/oauth.js +1727 -0
  172. package/dist/packages/bunshot-auth/src/routes/oidc.d.ts +2 -0
  173. package/dist/packages/bunshot-auth/src/routes/oidc.js +84 -0
  174. package/dist/packages/bunshot-auth/src/routes/organizations.d.ts +3 -0
  175. package/dist/packages/bunshot-auth/src/routes/organizations.js +741 -0
  176. package/dist/packages/bunshot-auth/src/routes/passkey.d.ts +2 -0
  177. package/dist/packages/bunshot-auth/src/routes/passkey.js +199 -0
  178. package/dist/packages/bunshot-auth/src/routes/saml.d.ts +2 -0
  179. package/dist/packages/bunshot-auth/src/routes/saml.js +226 -0
  180. package/dist/packages/bunshot-auth/src/routes/scim.d.ts +3 -0
  181. package/dist/packages/bunshot-auth/src/routes/scim.js +588 -0
  182. package/dist/packages/bunshot-auth/src/runtime.d.ts +52 -0
  183. package/dist/packages/bunshot-auth/src/runtime.js +11 -0
  184. package/dist/{schemas → packages/bunshot-auth/src/schemas}/auth.d.ts +4 -5
  185. package/dist/packages/bunshot-auth/src/schemas/auth.js +24 -0
  186. package/dist/packages/bunshot-auth/src/schemas/error.d.ts +10 -0
  187. package/dist/packages/bunshot-auth/src/schemas/error.js +10 -0
  188. package/dist/packages/bunshot-auth/src/schemas/success.d.ts +10 -0
  189. package/dist/packages/bunshot-auth/src/schemas/success.js +10 -0
  190. package/dist/packages/bunshot-auth/src/services/auth.d.ts +39 -0
  191. package/dist/packages/bunshot-auth/src/services/auth.js +378 -0
  192. package/dist/{services → packages/bunshot-auth/src/services}/mfa.d.ts +41 -17
  193. package/dist/{services → packages/bunshot-auth/src/services}/mfa.js +259 -183
  194. package/dist/packages/bunshot-auth/src/testing.d.ts +31 -0
  195. package/dist/packages/bunshot-auth/src/testing.js +23 -0
  196. package/dist/packages/bunshot-auth/src/types/adapter.d.ts +1 -0
  197. package/dist/packages/bunshot-auth/src/types/adapter.js +1 -0
  198. package/dist/packages/bunshot-auth/src/types/config.d.ts +152 -0
  199. package/dist/packages/bunshot-auth/src/types/config.js +179 -0
  200. package/dist/{routes → packages/bunshot-auth/src/types}/groups.d.ts +2 -3
  201. package/dist/packages/bunshot-auth/src/types/groups.js +1 -0
  202. package/dist/packages/bunshot-auth/src/types/oauthCode.d.ts +6 -0
  203. package/dist/packages/bunshot-auth/src/types/oauthCode.js +1 -0
  204. package/dist/packages/bunshot-auth/src/types/oauthReauth.d.ts +13 -0
  205. package/dist/packages/bunshot-auth/src/types/oauthReauth.js +1 -0
  206. package/dist/packages/bunshot-auth/src/types/redis.d.ts +1 -0
  207. package/dist/packages/bunshot-auth/src/types/redis.js +1 -0
  208. package/dist/packages/bunshot-auth/src/types/saml.d.ts +10 -0
  209. package/dist/packages/bunshot-auth/src/types/saml.js +1 -0
  210. package/dist/packages/bunshot-auth/src/types/session.d.ts +18 -0
  211. package/dist/packages/bunshot-auth/src/types/session.js +1 -0
  212. package/dist/packages/bunshot-auth/src/types/store.d.ts +1 -0
  213. package/dist/packages/bunshot-auth/src/types/store.js +1 -0
  214. package/dist/packages/bunshot-core/src/adminProvider.d.ts +95 -0
  215. package/dist/packages/bunshot-core/src/adminProvider.js +1 -0
  216. package/dist/packages/bunshot-core/src/auditLog.d.ts +34 -0
  217. package/dist/packages/bunshot-core/src/auditLog.js +1 -0
  218. package/dist/packages/bunshot-core/src/auth-adapter.d.ts +227 -0
  219. package/dist/packages/bunshot-core/src/auth-adapter.js +4 -0
  220. package/dist/packages/bunshot-core/src/authVariables.d.ts +14 -0
  221. package/dist/packages/bunshot-core/src/authVariables.js +4 -0
  222. package/dist/packages/bunshot-core/src/cache.d.ts +12 -0
  223. package/dist/packages/bunshot-core/src/cache.js +21 -0
  224. package/dist/packages/bunshot-core/src/captcha.d.ts +16 -0
  225. package/dist/packages/bunshot-core/src/captcha.js +1 -0
  226. package/dist/packages/bunshot-core/src/clearRegistry.d.ts +6 -0
  227. package/dist/packages/bunshot-core/src/clearRegistry.js +17 -0
  228. package/dist/packages/bunshot-core/src/clientIp.d.ts +3 -0
  229. package/dist/packages/bunshot-core/src/clientIp.js +45 -0
  230. package/dist/packages/bunshot-core/src/configLock.d.ts +4 -0
  231. package/dist/packages/bunshot-core/src/configLock.js +7 -0
  232. package/dist/packages/bunshot-core/src/configValidation.d.ts +22 -0
  233. package/dist/packages/bunshot-core/src/configValidation.js +39 -0
  234. package/dist/packages/bunshot-core/src/constants.js +10 -0
  235. package/dist/packages/bunshot-core/src/context/bunshotContext.d.ts +232 -0
  236. package/dist/packages/bunshot-core/src/context/bunshotContext.js +1 -0
  237. package/dist/packages/bunshot-core/src/context/contextAccess.d.ts +3 -0
  238. package/dist/packages/bunshot-core/src/context/contextAccess.js +16 -0
  239. package/dist/packages/bunshot-core/src/context/contextStore.d.ts +16 -0
  240. package/dist/packages/bunshot-core/src/context/contextStore.js +31 -0
  241. package/dist/packages/bunshot-core/src/context/frameworkConfig.d.ts +38 -0
  242. package/dist/packages/bunshot-core/src/context/frameworkConfig.js +1 -0
  243. package/dist/packages/bunshot-core/src/context/index.d.ts +4 -0
  244. package/dist/packages/bunshot-core/src/context/index.js +2 -0
  245. package/dist/packages/bunshot-core/src/context.d.ts +40 -0
  246. package/dist/packages/bunshot-core/src/context.js +35 -0
  247. package/dist/packages/bunshot-core/src/coreContracts.d.ts +47 -0
  248. package/dist/packages/bunshot-core/src/coreContracts.js +1 -0
  249. package/dist/packages/bunshot-core/src/coreRegistrar.d.ts +6 -0
  250. package/dist/packages/bunshot-core/src/coreRegistrar.js +42 -0
  251. package/dist/{lib → packages/bunshot-core/src}/createRoute.d.ts +4 -30
  252. package/dist/{lib → packages/bunshot-core/src}/createRoute.js +39 -88
  253. package/dist/packages/bunshot-core/src/cronRegistry.d.ts +11 -0
  254. package/dist/packages/bunshot-core/src/cronRegistry.js +1 -0
  255. package/dist/packages/bunshot-core/src/crypto.d.ts +43 -0
  256. package/dist/packages/bunshot-core/src/crypto.js +74 -0
  257. package/dist/packages/bunshot-core/src/csrf.d.ts +8 -0
  258. package/dist/packages/bunshot-core/src/csrf.js +1 -0
  259. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.d.ts +7 -0
  260. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.js +19 -0
  261. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.d.ts +6 -0
  262. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.js +40 -0
  263. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.d.ts +6 -0
  264. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.js +24 -0
  265. package/dist/packages/bunshot-core/src/emailTemplates.d.ts +5 -0
  266. package/dist/packages/bunshot-core/src/emailTemplates.js +10 -0
  267. package/dist/packages/bunshot-core/src/errors.d.ts +13 -0
  268. package/dist/packages/bunshot-core/src/errors.js +22 -0
  269. package/dist/packages/bunshot-core/src/eventBus.d.ts +270 -0
  270. package/dist/packages/bunshot-core/src/eventBus.js +143 -0
  271. package/dist/packages/bunshot-core/src/idempotency.d.ts +18 -0
  272. package/dist/packages/bunshot-core/src/idempotency.js +1 -0
  273. package/dist/packages/bunshot-core/src/index.d.ts +60 -0
  274. package/dist/packages/bunshot-core/src/index.js +34 -0
  275. package/dist/packages/bunshot-core/src/mail.d.ts +14 -0
  276. package/dist/packages/bunshot-core/src/mail.js +8 -0
  277. package/dist/packages/bunshot-core/src/memoryEviction.d.ts +24 -0
  278. package/dist/packages/bunshot-core/src/memoryEviction.js +52 -0
  279. package/dist/packages/bunshot-core/src/pagination.d.ts +45 -0
  280. package/dist/packages/bunshot-core/src/pagination.js +61 -0
  281. package/dist/packages/bunshot-core/src/permissions.d.ts +64 -0
  282. package/dist/packages/bunshot-core/src/permissions.js +27 -0
  283. package/dist/packages/bunshot-core/src/plugin.d.ts +44 -0
  284. package/dist/packages/bunshot-core/src/plugin.js +1 -0
  285. package/dist/packages/bunshot-core/src/rateLimit.d.ts +5 -0
  286. package/dist/packages/bunshot-core/src/rateLimit.js +18 -0
  287. package/dist/packages/bunshot-core/src/redis.d.ts +21 -0
  288. package/dist/packages/bunshot-core/src/redis.js +1 -0
  289. package/dist/packages/bunshot-core/src/routeAuth.d.ts +5 -0
  290. package/dist/packages/bunshot-core/src/routeAuth.js +11 -0
  291. package/dist/packages/bunshot-core/src/routeOverrides.d.ts +24 -0
  292. package/dist/packages/bunshot-core/src/routeOverrides.js +25 -0
  293. package/dist/packages/bunshot-core/src/routerAdapter.d.ts +6 -0
  294. package/dist/packages/bunshot-core/src/routerAdapter.js +56 -0
  295. package/dist/packages/bunshot-core/src/secrets.d.ts +48 -0
  296. package/dist/packages/bunshot-core/src/secrets.js +8 -0
  297. package/dist/packages/bunshot-core/src/signing.d.ts +41 -0
  298. package/dist/packages/bunshot-core/src/signing.js +1 -0
  299. package/dist/packages/bunshot-core/src/sse.d.ts +36 -0
  300. package/dist/packages/bunshot-core/src/sse.js +1 -0
  301. package/dist/packages/bunshot-core/src/storageAdapter.js +1 -0
  302. package/dist/packages/bunshot-core/src/storeInfra.d.ts +44 -0
  303. package/dist/packages/bunshot-core/src/storeInfra.js +18 -0
  304. package/dist/packages/bunshot-core/src/storeType.d.ts +7 -0
  305. package/dist/packages/bunshot-core/src/storeType.js +1 -0
  306. package/dist/packages/bunshot-core/src/testing.d.ts +1 -0
  307. package/dist/packages/bunshot-core/src/testing.js +1 -0
  308. package/dist/packages/bunshot-core/src/uploadRegistry.d.ts +23 -0
  309. package/dist/packages/bunshot-core/src/uploadRegistry.js +4 -0
  310. package/dist/packages/bunshot-core/src/userResolver.d.ts +5 -0
  311. package/dist/packages/bunshot-core/src/userResolver.js +14 -0
  312. package/dist/packages/bunshot-core/src/wsMessages.d.ts +42 -0
  313. package/dist/packages/bunshot-core/src/wsMessages.js +4 -0
  314. package/dist/packages/bunshot-permissions/src/adapters/memory.d.ts +7 -0
  315. package/dist/packages/bunshot-permissions/src/adapters/memory.js +73 -0
  316. package/dist/packages/bunshot-permissions/src/index.d.ts +10 -0
  317. package/dist/packages/bunshot-permissions/src/index.js +5 -0
  318. package/dist/packages/bunshot-permissions/src/lib/bootstrap.d.ts +7 -0
  319. package/dist/packages/bunshot-permissions/src/lib/bootstrap.js +12 -0
  320. package/dist/packages/bunshot-permissions/src/lib/evaluator.d.ts +10 -0
  321. package/dist/packages/bunshot-permissions/src/lib/evaluator.js +165 -0
  322. package/dist/packages/bunshot-permissions/src/lib/registry.d.ts +2 -0
  323. package/dist/packages/bunshot-permissions/src/lib/registry.js +31 -0
  324. package/dist/packages/bunshot-permissions/src/lib/validation.d.ts +1 -0
  325. package/dist/packages/bunshot-permissions/src/lib/validation.js +1 -0
  326. package/dist/packages/bunshot-permissions/src/types/adapter.d.ts +1 -0
  327. package/dist/packages/bunshot-permissions/src/types/adapter.js +1 -0
  328. package/dist/packages/bunshot-permissions/src/types/evaluator.d.ts +1 -0
  329. package/dist/packages/bunshot-permissions/src/types/evaluator.js +1 -0
  330. package/dist/packages/bunshot-permissions/src/types/models.d.ts +1 -0
  331. package/dist/packages/bunshot-permissions/src/types/models.js +1 -0
  332. package/dist/packages/bunshot-permissions/src/types/registry.d.ts +1 -0
  333. package/dist/packages/bunshot-permissions/src/types/registry.js +1 -0
  334. package/dist/packages/bunshot-postgres/src/adapter.d.ts +6 -0
  335. package/dist/packages/bunshot-postgres/src/adapter.js +794 -0
  336. package/dist/packages/bunshot-postgres/src/connection.d.ts +15 -0
  337. package/dist/packages/bunshot-postgres/src/connection.js +16 -0
  338. package/dist/packages/bunshot-postgres/src/index.d.ts +4 -0
  339. package/dist/packages/bunshot-postgres/src/index.js +2 -0
  340. package/dist/packages/bunshot-postgres/src/schema.d.ts +997 -0
  341. package/dist/packages/bunshot-postgres/src/schema.js +105 -0
  342. package/dist/src/app.d.ts +230 -0
  343. package/dist/src/app.js +182 -0
  344. package/dist/src/cli/commands/init.d.ts +10 -0
  345. package/dist/src/cli/commands/init.js +709 -0
  346. package/dist/src/cli/index.d.ts +1 -0
  347. package/dist/src/cli/index.js +3 -0
  348. package/dist/src/entrypoints/mongo.d.ts +6 -0
  349. package/dist/src/entrypoints/mongo.js +4 -0
  350. package/dist/src/entrypoints/queue.d.ts +2 -0
  351. package/dist/src/entrypoints/queue.js +1 -0
  352. package/dist/src/entrypoints/redis.d.ts +1 -0
  353. package/dist/src/entrypoints/redis.js +1 -0
  354. package/dist/{adapters → src/framework/adapters}/localStorage.d.ts +1 -1
  355. package/dist/{adapters → src/framework/adapters}/localStorage.js +23 -8
  356. package/dist/src/framework/adapters/memoryStorage.d.ts +2 -0
  357. package/dist/src/framework/adapters/memoryStorage.js +45 -0
  358. package/dist/{adapters → src/framework/adapters}/s3Storage.d.ts +1 -1
  359. package/dist/{adapters → src/framework/adapters}/s3Storage.js +12 -12
  360. package/dist/src/framework/admin/bunshotAccess.d.ts +2 -0
  361. package/dist/src/framework/admin/bunshotAccess.js +23 -0
  362. package/dist/src/framework/admin/bunshotUsers.d.ts +2 -0
  363. package/dist/src/framework/admin/bunshotUsers.js +103 -0
  364. package/dist/src/framework/admin/index.d.ts +7 -0
  365. package/dist/src/framework/admin/index.js +21 -0
  366. package/dist/src/framework/boundaryAdapters/cacheFactories.d.ts +13 -0
  367. package/dist/src/framework/boundaryAdapters/cacheFactories.js +86 -0
  368. package/dist/src/framework/boundaryAdapters/index.d.ts +2 -0
  369. package/dist/src/framework/boundaryAdapters/index.js +1 -0
  370. package/dist/src/framework/boundaryAdapters.d.ts +17 -0
  371. package/dist/src/framework/boundaryAdapters.js +62 -0
  372. package/dist/src/framework/buildContext.d.ts +33 -0
  373. package/dist/src/framework/buildContext.js +119 -0
  374. package/dist/src/framework/config/schema.d.ts +447 -0
  375. package/dist/src/framework/config/schema.js +528 -0
  376. package/dist/src/framework/createInfrastructure.d.ts +76 -0
  377. package/dist/src/framework/createInfrastructure.js +221 -0
  378. package/dist/src/framework/lib/auditLog.d.ts +23 -0
  379. package/dist/src/framework/lib/auditLog.js +416 -0
  380. package/dist/src/framework/lib/captcha.d.ts +11 -0
  381. package/dist/src/framework/lib/captcha.js +40 -0
  382. package/dist/{lib → src/framework/lib}/createDtoMapper.js +4 -4
  383. package/dist/src/framework/lib/createRoute.d.ts +1 -0
  384. package/dist/src/framework/lib/createRoute.js +2 -0
  385. package/dist/{lib → src/framework/lib}/idempotency.d.ts +2 -6
  386. package/dist/src/framework/lib/idempotency.js +74 -0
  387. package/dist/src/framework/lib/logger.d.ts +3 -0
  388. package/dist/src/framework/lib/logger.js +14 -0
  389. package/dist/src/framework/lib/metrics.d.ts +34 -0
  390. package/dist/{lib → src/framework/lib}/metrics.js +49 -57
  391. package/dist/src/framework/lib/pagination.d.ts +42 -0
  392. package/dist/src/framework/lib/pagination.js +51 -0
  393. package/dist/src/framework/lib/redisTransport.d.ts +38 -0
  394. package/dist/src/framework/lib/redisTransport.js +107 -0
  395. package/dist/src/framework/lib/resolveUserId.d.ts +2 -0
  396. package/dist/src/framework/lib/resolveUserId.js +5 -0
  397. package/dist/src/framework/lib/sseCollision.d.ts +6 -0
  398. package/dist/src/framework/lib/sseCollision.js +26 -0
  399. package/dist/src/framework/lib/storageAdapter.d.ts +1 -0
  400. package/dist/src/framework/lib/storageAdapter.js +1 -0
  401. package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.js +4 -4
  402. package/dist/src/framework/lib/tenant.d.ts +21 -0
  403. package/dist/src/framework/lib/tenant.js +70 -0
  404. package/dist/{lib → src/framework/lib}/upload.d.ts +14 -9
  405. package/dist/src/framework/lib/upload.js +132 -0
  406. package/dist/src/framework/lib/uploadRegistry.d.ts +23 -0
  407. package/dist/src/framework/lib/uploadRegistry.js +34 -0
  408. package/dist/{lib → src/framework/lib}/validate.d.ts +1 -1
  409. package/dist/{lib → src/framework/lib}/validate.js +2 -2
  410. package/dist/src/framework/lib/ws.d.ts +19 -0
  411. package/dist/src/framework/lib/ws.js +130 -0
  412. package/dist/src/framework/lib/wsHeartbeat.d.ts +12 -0
  413. package/dist/src/framework/lib/wsHeartbeat.js +53 -0
  414. package/dist/src/framework/lib/wsMessages.d.ts +25 -0
  415. package/dist/src/framework/lib/wsMessages.js +45 -0
  416. package/dist/src/framework/lib/wsNamespace.d.ts +17 -0
  417. package/dist/src/framework/lib/wsNamespace.js +19 -0
  418. package/dist/src/framework/lib/wsPresence.d.ts +17 -0
  419. package/dist/src/framework/lib/wsPresence.js +84 -0
  420. package/dist/src/framework/lib/wsTransport.d.ts +38 -0
  421. package/dist/src/framework/lib/wsTransport.js +9 -0
  422. package/dist/{lib → src/framework/lib}/zodToMongoose.d.ts +1 -1
  423. package/dist/{lib → src/framework/lib}/zodToMongoose.js +11 -11
  424. package/dist/{middleware → src/framework/middleware}/auditLog.d.ts +4 -3
  425. package/dist/src/framework/middleware/auditLog.js +42 -0
  426. package/dist/{middleware → src/framework/middleware}/botProtection.d.ts +2 -2
  427. package/dist/{middleware → src/framework/middleware}/botProtection.js +8 -9
  428. package/dist/src/framework/middleware/cacheResponse.d.ts +35 -0
  429. package/dist/src/framework/middleware/cacheResponse.js +126 -0
  430. package/dist/src/framework/middleware/captcha.d.ts +9 -0
  431. package/dist/src/framework/middleware/captcha.js +37 -0
  432. package/dist/{middleware → src/framework/middleware}/errorHandler.d.ts +1 -1
  433. package/dist/src/framework/middleware/errorHandler.js +16 -0
  434. package/dist/src/framework/middleware/index.js +1 -0
  435. package/dist/{middleware → src/framework/middleware}/logger.d.ts +1 -1
  436. package/dist/src/framework/middleware/metrics.d.ts +12 -0
  437. package/dist/src/framework/middleware/metrics.js +26 -0
  438. package/dist/{middleware → src/framework/middleware}/rateLimit.d.ts +2 -2
  439. package/dist/src/framework/middleware/rateLimit.js +22 -0
  440. package/dist/src/framework/middleware/requestId.d.ts +3 -0
  441. package/dist/{middleware → src/framework/middleware}/requestId.js +2 -2
  442. package/dist/{middleware → src/framework/middleware}/requestLogger.d.ts +3 -3
  443. package/dist/{middleware → src/framework/middleware}/requestLogger.js +17 -12
  444. package/dist/{middleware → src/framework/middleware}/requestSigning.d.ts +2 -2
  445. package/dist/{middleware → src/framework/middleware}/requestSigning.js +18 -19
  446. package/dist/src/framework/middleware/tenant.d.ts +14 -0
  447. package/dist/{middleware → src/framework/middleware}/tenant.js +31 -27
  448. package/dist/src/framework/middleware/upload.d.ts +5 -0
  449. package/dist/{middleware → src/framework/middleware}/upload.js +4 -4
  450. package/dist/{middleware → src/framework/middleware}/webhookAuth.d.ts +3 -3
  451. package/dist/{middleware → src/framework/middleware}/webhookAuth.js +11 -11
  452. package/dist/src/framework/models/AuditLog.d.ts +21 -0
  453. package/dist/src/framework/models/AuditLog.js +31 -0
  454. package/dist/src/framework/mountMiddleware.d.ts +91 -0
  455. package/dist/src/framework/mountMiddleware.js +128 -0
  456. package/dist/src/framework/mountOptionalEndpoints.d.ts +103 -0
  457. package/dist/src/framework/mountOptionalEndpoints.js +47 -0
  458. package/dist/src/framework/mountRoutes.d.ts +21 -0
  459. package/dist/src/framework/mountRoutes.js +144 -0
  460. package/dist/src/framework/persistence/cronRegistry.d.ts +28 -0
  461. package/dist/src/framework/persistence/cronRegistry.js +139 -0
  462. package/dist/src/framework/persistence/idempotency.d.ts +26 -0
  463. package/dist/src/framework/persistence/idempotency.js +178 -0
  464. package/dist/src/framework/persistence/index.d.ts +6 -0
  465. package/dist/src/framework/persistence/index.js +8 -0
  466. package/dist/src/framework/persistence/storeInfra.d.ts +9 -0
  467. package/dist/src/framework/persistence/storeInfra.js +1 -0
  468. package/dist/src/framework/persistence/uploadRegistry.d.ts +35 -0
  469. package/dist/src/framework/persistence/uploadRegistry.js +235 -0
  470. package/dist/src/framework/persistence/wsMessages.d.ts +22 -0
  471. package/dist/src/framework/persistence/wsMessages.js +296 -0
  472. package/dist/src/framework/preloadSchemas.d.ts +24 -0
  473. package/dist/src/framework/preloadSchemas.js +42 -0
  474. package/dist/src/framework/registerBoundaryAdapters.d.ts +23 -0
  475. package/dist/src/framework/registerBoundaryAdapters.js +46 -0
  476. package/dist/src/framework/routes/admin.d.ts +9 -0
  477. package/dist/src/framework/routes/admin.js +361 -0
  478. package/dist/src/framework/routes/health.d.ts +1 -0
  479. package/dist/src/framework/routes/health.js +21 -0
  480. package/dist/src/framework/routes/home.d.ts +1 -0
  481. package/dist/src/framework/routes/home.js +18 -0
  482. package/dist/src/framework/routes/jobs.d.ts +3 -0
  483. package/dist/src/framework/routes/jobs.js +315 -0
  484. package/dist/src/framework/routes/metrics.d.ts +10 -0
  485. package/dist/src/framework/routes/metrics.js +57 -0
  486. package/dist/src/framework/routes/uploads.d.ts +14 -0
  487. package/dist/src/framework/routes/uploads.js +262 -0
  488. package/dist/src/framework/runPluginLifecycle.d.ts +27 -0
  489. package/dist/src/framework/runPluginLifecycle.js +121 -0
  490. package/dist/src/framework/secrets/frameworkSecretSchema.d.ts +58 -0
  491. package/dist/src/framework/secrets/frameworkSecretSchema.js +20 -0
  492. package/dist/src/framework/secrets/index.d.ts +9 -0
  493. package/dist/src/framework/secrets/index.js +7 -0
  494. package/dist/src/framework/secrets/providers/envProvider.d.ts +15 -0
  495. package/dist/src/framework/secrets/providers/envProvider.js +18 -0
  496. package/dist/src/framework/secrets/providers/fileProvider.d.ts +8 -0
  497. package/dist/src/framework/secrets/providers/fileProvider.js +82 -0
  498. package/dist/src/framework/secrets/providers/ssmProvider.d.ts +20 -0
  499. package/dist/src/framework/secrets/providers/ssmProvider.js +127 -0
  500. package/dist/src/framework/secrets/resolveSecretBundle.d.ts +53 -0
  501. package/dist/src/framework/secrets/resolveSecretBundle.js +84 -0
  502. package/dist/src/framework/secrets/resolveSecrets.d.ts +18 -0
  503. package/dist/src/framework/secrets/resolveSecrets.js +34 -0
  504. package/dist/src/framework/sse/index.d.ts +21 -0
  505. package/dist/src/framework/sse/index.js +109 -0
  506. package/dist/src/framework/ws/index.d.ts +11 -0
  507. package/dist/src/framework/ws/index.js +8 -0
  508. package/dist/src/index.d.ts +87 -0
  509. package/dist/src/index.js +58 -0
  510. package/dist/src/lib/appConfig.d.ts +7 -0
  511. package/dist/src/lib/appConfig.js +27 -0
  512. package/dist/src/lib/appMeta.d.ts +7 -0
  513. package/dist/src/lib/appMeta.js +3 -0
  514. package/dist/src/lib/authConfig.d.ts +532 -0
  515. package/dist/src/lib/authConfig.js +179 -0
  516. package/dist/{lib → src/lib}/context.d.ts +6 -7
  517. package/dist/{lib → src/lib}/context.js +5 -5
  518. package/dist/src/lib/logger.d.ts +1 -0
  519. package/dist/src/lib/logger.js +1 -0
  520. package/dist/src/lib/mongo.d.ts +58 -0
  521. package/dist/src/lib/mongo.js +96 -0
  522. package/dist/src/lib/queue.d.ts +72 -0
  523. package/dist/src/lib/queue.js +152 -0
  524. package/dist/src/lib/redis.d.ts +28 -0
  525. package/dist/src/lib/redis.js +72 -0
  526. package/dist/{lib → src/lib}/signing.d.ts +2 -2
  527. package/dist/src/lib/signing.js +210 -0
  528. package/dist/src/lib/signingConfig.d.ts +40 -0
  529. package/dist/src/lib/signingConfig.js +28 -0
  530. package/dist/src/server.d.ts +146 -0
  531. package/dist/src/server.js +469 -0
  532. package/dist/src/shared/lib/HttpError.d.ts +1 -0
  533. package/dist/src/shared/lib/HttpError.js +2 -0
  534. package/dist/src/shared/lib/constants.d.ts +10 -0
  535. package/dist/src/shared/lib/crypto.d.ts +43 -0
  536. package/dist/src/shared/lib/crypto.js +74 -0
  537. package/dist/src/shared/lib/signing.d.ts +52 -0
  538. package/dist/{lib → src/shared/lib}/signing.js +40 -10
  539. package/dist/src/testing.d.ts +34 -0
  540. package/dist/src/testing.js +93 -0
  541. package/package.json +62 -25
  542. package/dist/adapters/memoryAuth.d.ts +0 -46
  543. package/dist/adapters/memoryAuth.js +0 -634
  544. package/dist/adapters/memoryStorage.d.ts +0 -3
  545. package/dist/adapters/memoryStorage.js +0 -44
  546. package/dist/adapters/mongoAuth.d.ts +0 -2
  547. package/dist/adapters/mongoAuth.js +0 -307
  548. package/dist/adapters/sqliteAuth.d.ts +0 -49
  549. package/dist/adapters/sqliteAuth.js +0 -707
  550. package/dist/app.d.ts +0 -456
  551. package/dist/app.js +0 -548
  552. package/dist/entrypoints/mongo.d.ts +0 -5
  553. package/dist/entrypoints/mongo.js +0 -4
  554. package/dist/entrypoints/queue.d.ts +0 -2
  555. package/dist/entrypoints/queue.js +0 -1
  556. package/dist/entrypoints/redis.d.ts +0 -1
  557. package/dist/entrypoints/redis.js +0 -1
  558. package/dist/index.d.ts +0 -98
  559. package/dist/index.js +0 -77
  560. package/dist/lib/HttpError.d.ts +0 -9
  561. package/dist/lib/HttpError.js +0 -14
  562. package/dist/lib/appConfig.d.ts +0 -162
  563. package/dist/lib/appConfig.js +0 -83
  564. package/dist/lib/auditLog.d.ts +0 -52
  565. package/dist/lib/auditLog.js +0 -201
  566. package/dist/lib/authAdapter.d.ts +0 -176
  567. package/dist/lib/authAdapter.js +0 -7
  568. package/dist/lib/authRateLimit.d.ts +0 -13
  569. package/dist/lib/authRateLimit.js +0 -81
  570. package/dist/lib/clientIp.d.ts +0 -14
  571. package/dist/lib/crypto.d.ts +0 -11
  572. package/dist/lib/crypto.js +0 -22
  573. package/dist/lib/deletionCancelToken.d.ts +0 -12
  574. package/dist/lib/deletionCancelToken.js +0 -88
  575. package/dist/lib/emailVerification.d.ts +0 -13
  576. package/dist/lib/emailVerification.js +0 -86
  577. package/dist/lib/fingerprint.js +0 -36
  578. package/dist/lib/idempotency.js +0 -182
  579. package/dist/lib/jwt.d.ts +0 -2
  580. package/dist/lib/jwt.js +0 -24
  581. package/dist/lib/logger.d.ts +0 -1
  582. package/dist/lib/logger.js +0 -7
  583. package/dist/lib/metrics.d.ts +0 -14
  584. package/dist/lib/mfaChallenge.d.ts +0 -42
  585. package/dist/lib/mfaChallenge.js +0 -293
  586. package/dist/lib/mongo.d.ts +0 -39
  587. package/dist/lib/mongo.js +0 -124
  588. package/dist/lib/oauth.d.ts +0 -40
  589. package/dist/lib/oauth.js +0 -101
  590. package/dist/lib/oauthCode.d.ts +0 -15
  591. package/dist/lib/oauthCode.js +0 -90
  592. package/dist/lib/pagination.d.ts +0 -119
  593. package/dist/lib/pagination.js +0 -166
  594. package/dist/lib/queue.d.ts +0 -37
  595. package/dist/lib/queue.js +0 -117
  596. package/dist/lib/redis.d.ts +0 -9
  597. package/dist/lib/redis.js +0 -61
  598. package/dist/lib/resetPassword.d.ts +0 -12
  599. package/dist/lib/resetPassword.js +0 -91
  600. package/dist/lib/roles.d.ts +0 -7
  601. package/dist/lib/roles.js +0 -49
  602. package/dist/lib/session.d.ts +0 -39
  603. package/dist/lib/session.js +0 -535
  604. package/dist/lib/tenant.d.ts +0 -15
  605. package/dist/lib/tenant.js +0 -65
  606. package/dist/lib/upload.js +0 -87
  607. package/dist/lib/ws.d.ts +0 -22
  608. package/dist/lib/ws.js +0 -89
  609. package/dist/lib/wsHeartbeat.d.ts +0 -12
  610. package/dist/lib/wsHeartbeat.js +0 -57
  611. package/dist/lib/wsMessages.d.ts +0 -40
  612. package/dist/lib/wsMessages.js +0 -330
  613. package/dist/lib/wsPresence.d.ts +0 -25
  614. package/dist/lib/wsPresence.js +0 -99
  615. package/dist/middleware/auditLog.js +0 -39
  616. package/dist/middleware/bearerAuth.d.ts +0 -2
  617. package/dist/middleware/bearerAuth.js +0 -11
  618. package/dist/middleware/cacheResponse.d.ts +0 -15
  619. package/dist/middleware/cacheResponse.js +0 -178
  620. package/dist/middleware/csrf.js +0 -125
  621. package/dist/middleware/errorHandler.js +0 -13
  622. package/dist/middleware/identify.d.ts +0 -3
  623. package/dist/middleware/identify.js +0 -95
  624. package/dist/middleware/index.js +0 -1
  625. package/dist/middleware/metrics.d.ts +0 -9
  626. package/dist/middleware/metrics.js +0 -26
  627. package/dist/middleware/rateLimit.js +0 -22
  628. package/dist/middleware/requestId.d.ts +0 -3
  629. package/dist/middleware/tenant.d.ts +0 -5
  630. package/dist/middleware/upload.d.ts +0 -5
  631. package/dist/middleware/userAuth.d.ts +0 -3
  632. package/dist/middleware/userAuth.js +0 -6
  633. package/dist/models/AuditLog.d.ts +0 -30
  634. package/dist/models/AuditLog.js +0 -39
  635. package/dist/models/AuthUser.js +0 -48
  636. package/dist/models/Group.d.ts +0 -21
  637. package/dist/models/Group.js +0 -28
  638. package/dist/models/GroupMembership.js +0 -25
  639. package/dist/models/TenantRole.d.ts +0 -15
  640. package/dist/models/TenantRole.js +0 -23
  641. package/dist/routes/auth.d.ts +0 -11
  642. package/dist/routes/auth.js +0 -605
  643. package/dist/routes/groups.js +0 -346
  644. package/dist/routes/health.d.ts +0 -1
  645. package/dist/routes/health.js +0 -22
  646. package/dist/routes/home.d.ts +0 -1
  647. package/dist/routes/home.js +0 -16
  648. package/dist/routes/jobs.d.ts +0 -2
  649. package/dist/routes/jobs.js +0 -272
  650. package/dist/routes/metrics.d.ts +0 -7
  651. package/dist/routes/metrics.js +0 -52
  652. package/dist/routes/mfa.d.ts +0 -5
  653. package/dist/routes/mfa.js +0 -620
  654. package/dist/routes/oauth.d.ts +0 -2
  655. package/dist/routes/oauth.js +0 -514
  656. package/dist/routes/uploads.d.ts +0 -2
  657. package/dist/routes/uploads.js +0 -135
  658. package/dist/schemas/auth.js +0 -30
  659. package/dist/server.d.ts +0 -57
  660. package/dist/server.js +0 -112
  661. package/dist/services/auth.d.ts +0 -27
  662. package/dist/services/auth.js +0 -159
  663. package/dist/ws/index.d.ts +0 -10
  664. package/dist/ws/index.js +0 -38
  665. package/docs/sections/adding-middleware/full.md +0 -35
  666. package/docs/sections/adding-models/full.md +0 -125
  667. package/docs/sections/adding-models/overview.md +0 -13
  668. package/docs/sections/adding-routes/full.md +0 -182
  669. package/docs/sections/adding-routes/overview.md +0 -23
  670. package/docs/sections/auth-flow/full.md +0 -779
  671. package/docs/sections/auth-flow/overview.md +0 -10
  672. package/docs/sections/auth-security-examples/full.md +0 -365
  673. package/docs/sections/authentication/full.md +0 -130
  674. package/docs/sections/authentication/overview.md +0 -5
  675. package/docs/sections/cli/full.md +0 -42
  676. package/docs/sections/configuration/full.md +0 -172
  677. package/docs/sections/configuration/overview.md +0 -18
  678. package/docs/sections/configuration-example/full.md +0 -117
  679. package/docs/sections/configuration-example/overview.md +0 -30
  680. package/docs/sections/documentation/full.md +0 -171
  681. package/docs/sections/environment-variables/full.md +0 -55
  682. package/docs/sections/exports/full.md +0 -123
  683. package/docs/sections/extending-context/full.md +0 -59
  684. package/docs/sections/header.md +0 -3
  685. package/docs/sections/installation/full.md +0 -6
  686. package/docs/sections/jobs/full.md +0 -140
  687. package/docs/sections/jobs/overview.md +0 -15
  688. package/docs/sections/logging/full.md +0 -83
  689. package/docs/sections/metrics/full.md +0 -127
  690. package/docs/sections/mongodb-connections/full.md +0 -45
  691. package/docs/sections/mongodb-connections/overview.md +0 -7
  692. package/docs/sections/multi-tenancy/full.md +0 -66
  693. package/docs/sections/multi-tenancy/overview.md +0 -15
  694. package/docs/sections/oauth/full.md +0 -189
  695. package/docs/sections/oauth/overview.md +0 -16
  696. package/docs/sections/package-development/full.md +0 -7
  697. package/docs/sections/pagination/full.md +0 -93
  698. package/docs/sections/peer-dependencies/full.md +0 -47
  699. package/docs/sections/quick-start/full.md +0 -43
  700. package/docs/sections/response-caching/full.md +0 -117
  701. package/docs/sections/response-caching/overview.md +0 -13
  702. package/docs/sections/roles/full.md +0 -225
  703. package/docs/sections/roles/overview.md +0 -14
  704. package/docs/sections/running-without-redis/full.md +0 -16
  705. package/docs/sections/running-without-redis-or-mongodb/full.md +0 -60
  706. package/docs/sections/signing/full.md +0 -203
  707. package/docs/sections/stack/full.md +0 -10
  708. package/docs/sections/uploads/full.md +0 -199
  709. package/docs/sections/versioning/full.md +0 -85
  710. package/docs/sections/webhook-auth/full.md +0 -100
  711. package/docs/sections/websocket/full.md +0 -184
  712. package/docs/sections/websocket/overview.md +0 -5
  713. package/docs/sections/websocket-rooms/full.md +0 -102
  714. package/docs/sections/websocket-rooms/overview.md +0 -5
  715. /package/dist/{lib/storageAdapter.js → packages/bunshot-admin/src/types/env.js} +0 -0
  716. /package/dist/{lib → packages/bunshot-auth/src/lib}/fingerprint.d.ts +0 -0
  717. /package/dist/{lib → packages/bunshot-core/src}/constants.d.ts +0 -0
  718. /package/dist/{lib → packages/bunshot-core/src}/storageAdapter.d.ts +0 -0
  719. /package/dist/{lib → src/framework/lib}/createDtoMapper.d.ts +0 -0
  720. /package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.d.ts +0 -0
  721. /package/dist/{middleware → src/framework/middleware}/cors.d.ts +0 -0
  722. /package/dist/{middleware → src/framework/middleware}/cors.js +0 -0
  723. /package/dist/{middleware → src/framework/middleware}/index.d.ts +0 -0
  724. /package/dist/{middleware → src/framework/middleware}/logger.js +0 -0
  725. /package/dist/{lib → src/shared/lib}/constants.js +0 -0
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Plugin lifecycle execution — extracted from createApp().
3
+ *
4
+ * Handles plugin dependency validation, topological sorting,
5
+ * and execution of the three framework lifecycle phases.
6
+ */
7
+ import type { OpenAPIHono } from '@hono/zod-openapi';
8
+ import type { AppEnv, BunshotEventBus, BunshotPlugin } from '../../packages/bunshot-core/src/index.js';
9
+ import type { FrameworkConfig } from './createInfrastructure';
10
+ /**
11
+ * Validate the plugin dependency graph and return plugins in topological order.
12
+ * Throws on circular dependencies, missing dependencies, lifecycle-less plugins,
13
+ * and cross-phase dependency violations.
14
+ */
15
+ export declare function validateAndSortPlugins(plugins: BunshotPlugin[]): BunshotPlugin[];
16
+ /**
17
+ * Run the setupMiddleware phase for all sorted plugins.
18
+ */
19
+ export declare function runPluginMiddleware(sortedPlugins: BunshotPlugin[], app: OpenAPIHono<AppEnv>, frameworkConfig: FrameworkConfig, bus: BunshotEventBus): Promise<void>;
20
+ /**
21
+ * Run the setupRoutes phase for all sorted plugins.
22
+ */
23
+ export declare function runPluginRoutes(sortedPlugins: BunshotPlugin[], app: OpenAPIHono<AppEnv>, frameworkConfig: FrameworkConfig, bus: BunshotEventBus): Promise<void>;
24
+ /**
25
+ * Run the setupPost phase for all sorted plugins.
26
+ */
27
+ export declare function runPluginPost(sortedPlugins: BunshotPlugin[], app: OpenAPIHono<AppEnv>, frameworkConfig: FrameworkConfig, bus: BunshotEventBus): Promise<void>;
@@ -0,0 +1,121 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Topological sort
3
+ // ---------------------------------------------------------------------------
4
+ function topologicalSort(plugins) {
5
+ const nameToPlugin = new Map(plugins.map(p => [p.name, p]));
6
+ const completed = new Set();
7
+ const inProgress = new Set();
8
+ const result = [];
9
+ function visit(name, path) {
10
+ if (completed.has(name))
11
+ return;
12
+ if (inProgress.has(name)) {
13
+ const cycleStart = path.indexOf(name);
14
+ const cycle = [...path.slice(cycleStart), name];
15
+ throw new Error(`[bunshot] Circular plugin dependency detected: ${cycle.join(' → ')}`);
16
+ }
17
+ const plugin = nameToPlugin.get(name);
18
+ if (!plugin) {
19
+ throw new Error(`[bunshot] Plugin dependency "${name}" not found (required by "${path[path.length - 1] ?? 'root'}").`);
20
+ }
21
+ inProgress.add(name);
22
+ for (const dep of plugin.dependencies ?? []) {
23
+ visit(dep, [...path, name]);
24
+ }
25
+ inProgress.delete(name);
26
+ completed.add(name);
27
+ result.push(plugin);
28
+ }
29
+ for (const plugin of plugins) {
30
+ visit(plugin.name, []);
31
+ }
32
+ return result;
33
+ }
34
+ // ---------------------------------------------------------------------------
35
+ // Plugin validation
36
+ // ---------------------------------------------------------------------------
37
+ function getEarliestPhase(p) {
38
+ if (p.setupMiddleware)
39
+ return 0;
40
+ if (p.setupRoutes)
41
+ return 1;
42
+ if (p.setupPost)
43
+ return 2;
44
+ return 3; // setup-only (standalone)
45
+ }
46
+ const PHASE_NAMES = ['setupMiddleware', 'setupRoutes', 'setupPost', 'setup-only (standalone)'];
47
+ /**
48
+ * Validate the plugin dependency graph and return plugins in topological order.
49
+ * Throws on circular dependencies, missing dependencies, lifecycle-less plugins,
50
+ * and cross-phase dependency violations.
51
+ */
52
+ export function validateAndSortPlugins(plugins) {
53
+ if (plugins.length === 0)
54
+ return [];
55
+ const pluginNames = new Set(plugins.map(p => p.name));
56
+ const nameToPlugin = new Map(plugins.map(p => [p.name, p]));
57
+ for (const plugin of plugins) {
58
+ // Validate all declared dependencies are present
59
+ for (const dep of plugin.dependencies ?? []) {
60
+ if (!pluginNames.has(dep)) {
61
+ throw new Error(`[bunshot] Plugin "${plugin.name}" declares dependency "${dep}" but it is not in the plugins array.`);
62
+ }
63
+ }
64
+ // Each plugin must define at least one lifecycle method
65
+ if (!plugin.setupMiddleware && !plugin.setupRoutes && !plugin.setupPost && !plugin.setup) {
66
+ throw new Error(`[bunshot] Plugin "${plugin.name}" must define at least one of: setupMiddleware, setupRoutes, setupPost, or setup.`);
67
+ }
68
+ // setup()-only plugins are standalone-only — the framework skips them
69
+ if (!plugin.setupMiddleware && !plugin.setupRoutes && !plugin.setupPost && plugin.setup) {
70
+ console.info(`[bunshot] Plugin "${plugin.name}" defines only setup() — standalone-only, skipped by framework. Use setupMiddleware(), setupRoutes(), or setupPost() for framework integration.`);
71
+ }
72
+ }
73
+ // Cross-phase dependency validation
74
+ for (const plugin of plugins) {
75
+ const pluginPhase = getEarliestPhase(plugin);
76
+ if (pluginPhase === 3)
77
+ continue; // standalone-only: no framework phase to validate
78
+ for (const depName of plugin.dependencies ?? []) {
79
+ const dep = nameToPlugin.get(depName);
80
+ const depPhase = getEarliestPhase(dep);
81
+ if (depPhase > pluginPhase) {
82
+ throw new Error(`[bunshot] Plugin "${plugin.name}" (earliest phase: ${PHASE_NAMES[pluginPhase]}) ` +
83
+ `depends on "${depName}" (earliest phase: ${PHASE_NAMES[depPhase]}). ` +
84
+ `A dependency's earliest phase must be ≤ the dependent's earliest phase.`);
85
+ }
86
+ }
87
+ }
88
+ // Topological sort — only include plugins that participate in at least one framework phase
89
+ const frameworkPlugins = plugins.filter(p => p.setupMiddleware || p.setupRoutes || p.setupPost);
90
+ return topologicalSort(frameworkPlugins);
91
+ }
92
+ // ---------------------------------------------------------------------------
93
+ // Plugin lifecycle execution
94
+ // ---------------------------------------------------------------------------
95
+ /**
96
+ * Run the setupMiddleware phase for all sorted plugins.
97
+ */
98
+ export async function runPluginMiddleware(sortedPlugins, app, frameworkConfig, bus) {
99
+ for (const plugin of sortedPlugins) {
100
+ if (plugin.setupMiddleware)
101
+ await plugin.setupMiddleware(app, frameworkConfig, bus);
102
+ }
103
+ }
104
+ /**
105
+ * Run the setupRoutes phase for all sorted plugins.
106
+ */
107
+ export async function runPluginRoutes(sortedPlugins, app, frameworkConfig, bus) {
108
+ for (const plugin of sortedPlugins) {
109
+ if (plugin.setupRoutes)
110
+ await plugin.setupRoutes(app, frameworkConfig, bus);
111
+ }
112
+ }
113
+ /**
114
+ * Run the setupPost phase for all sorted plugins.
115
+ */
116
+ export async function runPluginPost(sortedPlugins, app, frameworkConfig, bus) {
117
+ for (const plugin of sortedPlugins) {
118
+ if (plugin.setupPost)
119
+ await plugin.setupPost(app, frameworkConfig, bus);
120
+ }
121
+ }
@@ -0,0 +1,58 @@
1
+ export declare const frameworkSecretSchema: {
2
+ readonly jwtSecret: {
3
+ readonly path: "JWT_SECRET";
4
+ readonly required: false;
5
+ };
6
+ readonly bearerToken: {
7
+ readonly path: "BEARER_TOKEN";
8
+ readonly required: false;
9
+ };
10
+ readonly dataEncryptionKey: {
11
+ readonly path: "BUNSHOT_DATA_ENCRYPTION_KEY";
12
+ readonly required: false;
13
+ };
14
+ readonly redisHost: {
15
+ readonly path: "REDIS_HOST";
16
+ readonly required: false;
17
+ };
18
+ readonly redisUser: {
19
+ readonly path: "REDIS_USER";
20
+ readonly required: false;
21
+ };
22
+ readonly redisPassword: {
23
+ readonly path: "REDIS_PASSWORD";
24
+ readonly required: false;
25
+ };
26
+ readonly mongoUser: {
27
+ readonly path: "MONGO_USER";
28
+ readonly required: false;
29
+ };
30
+ readonly mongoPassword: {
31
+ readonly path: "MONGO_PASSWORD";
32
+ readonly required: false;
33
+ };
34
+ readonly mongoHost: {
35
+ readonly path: "MONGO_HOST";
36
+ readonly required: false;
37
+ };
38
+ readonly mongoDb: {
39
+ readonly path: "MONGO_DB";
40
+ readonly required: false;
41
+ };
42
+ readonly mongoAuthUser: {
43
+ readonly path: "MONGO_AUTH_USER";
44
+ readonly required: false;
45
+ };
46
+ readonly mongoAuthPassword: {
47
+ readonly path: "MONGO_AUTH_PASSWORD";
48
+ readonly required: false;
49
+ };
50
+ readonly mongoAuthHost: {
51
+ readonly path: "MONGO_AUTH_HOST";
52
+ readonly required: false;
53
+ };
54
+ readonly mongoAuthDb: {
55
+ readonly path: "MONGO_AUTH_DB";
56
+ readonly required: false;
57
+ };
58
+ };
@@ -0,0 +1,20 @@
1
+ export const frameworkSecretSchema = {
2
+ // Signing & encryption
3
+ jwtSecret: { path: 'JWT_SECRET', required: false },
4
+ bearerToken: { path: 'BEARER_TOKEN', required: false },
5
+ dataEncryptionKey: { path: 'BUNSHOT_DATA_ENCRYPTION_KEY', required: false },
6
+ // Redis
7
+ redisHost: { path: 'REDIS_HOST', required: false },
8
+ redisUser: { path: 'REDIS_USER', required: false },
9
+ redisPassword: { path: 'REDIS_PASSWORD', required: false },
10
+ // Mongo (primary / single mode)
11
+ mongoUser: { path: 'MONGO_USER', required: false },
12
+ mongoPassword: { path: 'MONGO_PASSWORD', required: false },
13
+ mongoHost: { path: 'MONGO_HOST', required: false },
14
+ mongoDb: { path: 'MONGO_DB', required: false },
15
+ // Mongo (auth — separate mode)
16
+ mongoAuthUser: { path: 'MONGO_AUTH_USER', required: false },
17
+ mongoAuthPassword: { path: 'MONGO_AUTH_PASSWORD', required: false },
18
+ mongoAuthHost: { path: 'MONGO_AUTH_HOST', required: false },
19
+ mongoAuthDb: { path: 'MONGO_AUTH_DB', required: false },
20
+ };
@@ -0,0 +1,9 @@
1
+ export { resolveSecrets } from './resolveSecrets';
2
+ export { frameworkSecretSchema } from './frameworkSecretSchema';
3
+ export { resolveSecretBundle, resolveSecretRepo_fromInput, resolveSecretRepo, secretRepositoryFactories, } from './resolveSecretBundle';
4
+ export type { SecretStoreConfig, SecretRepositoryFactories, SecretStoreInput, SecretStoreInfra, SecretRepoFactories, ResolvedSecretBundle, RegisteredSecretRepository, EnvSecretStoreConfig, SsmSecretStoreConfig, FileSecretStoreConfig, } from './resolveSecretBundle';
5
+ export { createEnvSecretRepository } from './providers/envProvider';
6
+ export { createSsmSecretRepository } from './providers/ssmProvider';
7
+ export type { SsmProviderOptions } from './providers/ssmProvider';
8
+ export { createFileSecretRepository } from './providers/fileProvider';
9
+ export type { FileProviderOptions } from './providers/fileProvider';
@@ -0,0 +1,7 @@
1
+ // Barrel export for framework secrets module
2
+ export { resolveSecrets } from './resolveSecrets';
3
+ export { frameworkSecretSchema } from './frameworkSecretSchema';
4
+ export { resolveSecretBundle, resolveSecretRepo_fromInput, resolveSecretRepo, secretRepositoryFactories, } from './resolveSecretBundle';
5
+ export { createEnvSecretRepository } from './providers/envProvider';
6
+ export { createSsmSecretRepository } from './providers/ssmProvider';
7
+ export { createFileSecretRepository } from './providers/fileProvider';
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Environment variable secret repository.
3
+ *
4
+ * Reads secrets from process.env. Covers:
5
+ * - Local .env files (loaded by Bun automatically)
6
+ * - GitHub Actions secrets (injected as env vars in CI)
7
+ * - Any platform that maps secrets to environment variables
8
+ *
9
+ * Factory pattern: closure-owned prefix, no module-level state.
10
+ */
11
+ import type { ISecretRepository } from '../../../../packages/bunshot-core/src/index.js';
12
+ export declare function createEnvSecretRepository(opts?: {
13
+ /** Optional prefix stripped from env var names (e.g., 'MYAPP_') */
14
+ prefix?: string;
15
+ }): ISecretRepository;
@@ -0,0 +1,18 @@
1
+ export function createEnvSecretRepository(opts) {
2
+ const prefix = opts?.prefix ?? '';
3
+ return {
4
+ name: 'env',
5
+ async get(key) {
6
+ return process.env[prefix + key] ?? null;
7
+ },
8
+ async getMany(keys) {
9
+ const result = new Map();
10
+ for (const key of keys) {
11
+ const val = process.env[prefix + key];
12
+ if (val !== undefined)
13
+ result.set(key, val);
14
+ }
15
+ return result;
16
+ },
17
+ };
18
+ }
@@ -0,0 +1,8 @@
1
+ import type { ISecretRepository } from '../../../../packages/bunshot-core/src/index.js';
2
+ export interface FileProviderOptions {
3
+ /** Directory containing secret files (e.g., '/run/secrets') */
4
+ directory: string;
5
+ /** File extension to strip when deriving key names. Default: none. */
6
+ extension?: string;
7
+ }
8
+ export declare function createFileSecretRepository(opts: FileProviderOptions): ISecretRepository;
@@ -0,0 +1,82 @@
1
+ /**
2
+ * File-based secret repository.
3
+ *
4
+ * Reads secrets from individual files in a directory. Each file name is the
5
+ * secret key, file content is the secret value (trailing newline trimmed).
6
+ *
7
+ * Use cases:
8
+ * - Docker Swarm secrets mounted at /run/secrets/
9
+ * - Kubernetes mounted secret volumes
10
+ * - Any file-based secret injection
11
+ *
12
+ * Factory pattern: closure-owned cache + directory ref, no module-level state.
13
+ */
14
+ import { readFile, readdir } from 'node:fs/promises';
15
+ import { join } from 'node:path';
16
+ export function createFileSecretRepository(opts) {
17
+ const { directory, extension } = opts;
18
+ // Closure-owned cache — populated on initialize(), keyed by secret name
19
+ const cache = new Map();
20
+ let initialized = false;
21
+ function stripExtension(filename) {
22
+ if (extension && filename.endsWith(extension)) {
23
+ return filename.slice(0, -extension.length);
24
+ }
25
+ return filename;
26
+ }
27
+ async function readSecret(key) {
28
+ const filename = extension ? key + extension : key;
29
+ try {
30
+ const content = await readFile(join(directory, filename), 'utf-8');
31
+ return content.replace(/\n$/, '');
32
+ }
33
+ catch (err) {
34
+ if (err.code === 'ENOENT')
35
+ return null;
36
+ throw err;
37
+ }
38
+ }
39
+ return {
40
+ name: 'file',
41
+ async initialize() {
42
+ try {
43
+ const files = await readdir(directory);
44
+ for (const file of files) {
45
+ const key = stripExtension(file);
46
+ const content = await readFile(join(directory, file), 'utf-8');
47
+ cache.set(key, content.replace(/\n$/, ''));
48
+ }
49
+ initialized = true;
50
+ }
51
+ catch (err) {
52
+ if (err.code === 'ENOENT') {
53
+ throw new Error(`[secrets/file] Directory not found: ${directory}`);
54
+ }
55
+ throw err;
56
+ }
57
+ },
58
+ async get(key) {
59
+ if (initialized)
60
+ return cache.get(key) ?? null;
61
+ return readSecret(key);
62
+ },
63
+ async getMany(keys) {
64
+ const result = new Map();
65
+ for (const key of keys) {
66
+ const value = initialized ? (cache.get(key) ?? null) : await readSecret(key);
67
+ if (value !== null)
68
+ result.set(key, value);
69
+ }
70
+ return result;
71
+ },
72
+ async refresh() {
73
+ cache.clear();
74
+ initialized = false;
75
+ await this.initialize?.();
76
+ },
77
+ async destroy() {
78
+ cache.clear();
79
+ initialized = false;
80
+ },
81
+ };
82
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * AWS Systems Manager Parameter Store secret repository.
3
+ *
4
+ * Batch-loads parameters by path prefix on initialize(), caches locally.
5
+ * Lazy SDK import — @aws-sdk/client-ssm is only loaded when this repository is used.
6
+ *
7
+ * Factory pattern: closure-owned cache + client, no module-level state.
8
+ */
9
+ import type { ISecretRepository } from '../../../../packages/bunshot-core/src/index.js';
10
+ export interface SsmProviderOptions {
11
+ /** SSM path prefix, e.g., '/myapp/prod/' — must end with '/' */
12
+ pathPrefix: string;
13
+ /** AWS region. Defaults to AWS_REGION env var or 'us-east-1'. */
14
+ region?: string;
15
+ /** Cache TTL in milliseconds. Default: 300_000 (5 min). */
16
+ cacheTtlMs?: number;
17
+ /** Whether to decrypt SecureString params. Default: true. */
18
+ withDecryption?: boolean;
19
+ }
20
+ export declare function createSsmSecretRepository(opts: SsmProviderOptions): ISecretRepository;
@@ -0,0 +1,127 @@
1
+ export function createSsmSecretRepository(opts) {
2
+ const { pathPrefix, region, withDecryption = true } = opts;
3
+ const cacheTtl = opts.cacheTtlMs ?? 300_000;
4
+ // Closure-owned state — no module globals
5
+ const cache = new Map();
6
+ let ssmClient = null;
7
+ async function requireSsm() {
8
+ try {
9
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
10
+ return await new Function('specifier', 'return import(specifier)')('@aws-sdk/client-ssm');
11
+ }
12
+ catch {
13
+ throw new Error('SSM secret repository requires @aws-sdk/client-ssm to be installed');
14
+ }
15
+ }
16
+ async function getClient() {
17
+ if (ssmClient)
18
+ return ssmClient;
19
+ const { SSMClient } = await requireSsm();
20
+ ssmClient = new SSMClient({ region: region ?? process.env.AWS_REGION ?? 'us-east-1' });
21
+ return ssmClient;
22
+ }
23
+ function stripPrefix(name) {
24
+ return name.startsWith(pathPrefix) ? name.slice(pathPrefix.length) : name;
25
+ }
26
+ function getCached(key) {
27
+ const entry = cache.get(key);
28
+ if (!entry)
29
+ return null;
30
+ if (entry.expiresAt <= Date.now()) {
31
+ cache.delete(key);
32
+ return null;
33
+ }
34
+ return entry.value;
35
+ }
36
+ function setCache(key, value) {
37
+ cache.set(key, { value, expiresAt: Date.now() + cacheTtl });
38
+ }
39
+ return {
40
+ name: 'ssm',
41
+ async initialize() {
42
+ const client = await getClient();
43
+ const { GetParametersByPathCommand } = await requireSsm();
44
+ let nextToken;
45
+ do {
46
+ const cmd = new GetParametersByPathCommand({
47
+ Path: pathPrefix,
48
+ Recursive: true,
49
+ WithDecryption: withDecryption,
50
+ NextToken: nextToken,
51
+ });
52
+ const resp = await client.send(cmd);
53
+ for (const param of resp.Parameters ?? []) {
54
+ if (param.Name && param.Value) {
55
+ setCache(stripPrefix(param.Name), param.Value);
56
+ }
57
+ }
58
+ nextToken = resp.NextToken;
59
+ } while (nextToken);
60
+ },
61
+ async get(key) {
62
+ const cached = getCached(key);
63
+ if (cached !== null)
64
+ return cached;
65
+ const client = await getClient();
66
+ const { GetParameterCommand } = await requireSsm();
67
+ try {
68
+ const cmd = new GetParameterCommand({
69
+ Name: pathPrefix + key,
70
+ WithDecryption: withDecryption,
71
+ });
72
+ const resp = await client.send(cmd);
73
+ const value = resp.Parameter?.Value ?? null;
74
+ if (value !== null)
75
+ setCache(key, value);
76
+ return value;
77
+ }
78
+ catch (err) {
79
+ if (err.name === 'ParameterNotFound')
80
+ return null;
81
+ throw err;
82
+ }
83
+ },
84
+ async getMany(keys) {
85
+ const result = new Map();
86
+ const uncached = [];
87
+ for (const key of keys) {
88
+ const cached = getCached(key);
89
+ if (cached !== null) {
90
+ result.set(key, cached);
91
+ }
92
+ else {
93
+ uncached.push(key);
94
+ }
95
+ }
96
+ if (uncached.length > 0) {
97
+ const client = await getClient();
98
+ const { GetParametersCommand } = await requireSsm();
99
+ // GetParameters supports max 10 names per call
100
+ for (let i = 0; i < uncached.length; i += 10) {
101
+ const batch = uncached.slice(i, i + 10);
102
+ const cmd = new GetParametersCommand({
103
+ Names: batch.map(k => pathPrefix + k),
104
+ WithDecryption: withDecryption,
105
+ });
106
+ const resp = await client.send(cmd);
107
+ for (const param of resp.Parameters ?? []) {
108
+ if (param.Name && param.Value) {
109
+ const key = stripPrefix(param.Name);
110
+ setCache(key, param.Value);
111
+ result.set(key, param.Value);
112
+ }
113
+ }
114
+ }
115
+ }
116
+ return result;
117
+ },
118
+ async refresh() {
119
+ cache.clear();
120
+ await this.initialize?.();
121
+ },
122
+ async destroy() {
123
+ cache.clear();
124
+ ssmClient = null;
125
+ },
126
+ };
127
+ }
@@ -0,0 +1,53 @@
1
+ import type { ISecretRepository, ResolvedSecrets, SecretSchema, SecretStoreType } from '../../../packages/bunshot-core/src/index.js';
2
+ import { frameworkSecretSchema } from './frameworkSecretSchema';
3
+ /** Infrastructure options for secret store resolution — equivalent to StoreInfra */
4
+ export interface SecretStoreInfra {
5
+ readonly prefix?: string;
6
+ readonly pathPrefix?: string;
7
+ readonly region?: string;
8
+ readonly directory?: string;
9
+ readonly extension?: string;
10
+ readonly cacheTtlMs?: number;
11
+ readonly withDecryption?: boolean;
12
+ }
13
+ export type SecretRepoFactories<T> = Record<SecretStoreType, (infra: SecretStoreInfra) => T | Promise<T>>;
14
+ export declare function resolveSecretRepo<T>(factories: SecretRepoFactories<T>, storeType: SecretStoreType, infra: SecretStoreInfra): T | Promise<T>;
15
+ export interface EnvSecretStoreConfig {
16
+ provider: 'env';
17
+ prefix?: string;
18
+ schema?: SecretSchema;
19
+ }
20
+ export interface SsmSecretStoreConfig {
21
+ provider: 'ssm';
22
+ pathPrefix: string;
23
+ region?: string;
24
+ schema?: SecretSchema;
25
+ }
26
+ export interface FileSecretStoreConfig {
27
+ provider: 'file';
28
+ directory: string;
29
+ schema?: SecretSchema;
30
+ }
31
+ export interface RegisteredSecretRepository {
32
+ provider: ISecretRepository;
33
+ schema?: SecretSchema;
34
+ }
35
+ export type SecretStoreConfig = EnvSecretStoreConfig | SsmSecretStoreConfig | FileSecretStoreConfig;
36
+ export type SecretStoreInput = ISecretRepository | SecretStoreConfig | RegisteredSecretRepository | undefined;
37
+ type MergeSchemas<A extends SecretSchema, B extends SecretSchema | undefined> = B extends SecretSchema ? A & B : A;
38
+ type SecretRepoFactory<K extends SecretStoreType> = (config: Extract<SecretStoreConfig, {
39
+ provider: K;
40
+ }>) => Promise<ISecretRepository> | ISecretRepository;
41
+ export type SecretRepositoryFactories = {
42
+ [K in SecretStoreType]: SecretRepoFactory<K>;
43
+ };
44
+ export declare const secretRepositoryFactories: SecretRepositoryFactories;
45
+ export interface ResolvedSecretBundle<S extends SecretSchema | undefined = undefined> {
46
+ readonly provider: ISecretRepository;
47
+ readonly framework: ResolvedSecrets<typeof frameworkSecretSchema>;
48
+ readonly app: S extends SecretSchema ? ResolvedSecrets<S> : null;
49
+ readonly merged: ResolvedSecrets<MergeSchemas<typeof frameworkSecretSchema, S>>;
50
+ }
51
+ export declare function resolveSecretRepo_fromInput(input: SecretStoreInput): Promise<ISecretRepository>;
52
+ export declare function resolveSecretBundle<S extends SecretSchema | undefined = undefined>(input: SecretStoreInput): Promise<ResolvedSecretBundle<S>>;
53
+ export {};
@@ -0,0 +1,84 @@
1
+ import { frameworkSecretSchema } from './frameworkSecretSchema';
2
+ import { createEnvSecretRepository } from './providers/envProvider';
3
+ import { resolveSecrets } from './resolveSecrets';
4
+ export function resolveSecretRepo(factories, storeType, infra) {
5
+ const factory = factories[storeType];
6
+ if (!factory)
7
+ throw new Error(`[secrets] Unsupported store type: ${storeType}`);
8
+ return factory(infra);
9
+ }
10
+ export const secretRepositoryFactories = {
11
+ env: config => createEnvSecretRepository({ prefix: config.prefix }),
12
+ ssm: async (config) => {
13
+ const { createSsmSecretRepository } = await import('./providers/ssmProvider');
14
+ return createSsmSecretRepository({
15
+ pathPrefix: config.pathPrefix,
16
+ region: config.region,
17
+ });
18
+ },
19
+ file: async (config) => {
20
+ const { createFileSecretRepository } = await import('./providers/fileProvider');
21
+ return createFileSecretRepository({ directory: config.directory });
22
+ },
23
+ };
24
+ function isSecretRepository(value) {
25
+ if (!value || typeof value !== 'object')
26
+ return false;
27
+ return 'name' in value && 'get' in value && 'getMany' in value;
28
+ }
29
+ function isRegisteredSecretRepository(value) {
30
+ if (!value || typeof value !== 'object' || !('provider' in value))
31
+ return false;
32
+ const provider = value.provider;
33
+ return !!provider && isSecretRepository(provider);
34
+ }
35
+ function getAppSecretSchema(input) {
36
+ if (!input || isSecretRepository(input))
37
+ return undefined;
38
+ if (isRegisteredSecretRepository(input))
39
+ return input.schema;
40
+ return input.schema;
41
+ }
42
+ function mergeSecretSchemas(frameworkSchema, appSchema) {
43
+ if (!appSchema) {
44
+ return frameworkSchema;
45
+ }
46
+ return {
47
+ ...frameworkSchema,
48
+ ...appSchema,
49
+ };
50
+ }
51
+ function pickResolvedSecrets(resolved, schema) {
52
+ const picked = {};
53
+ for (const key of Object.keys(schema)) {
54
+ picked[key] = resolved[key];
55
+ }
56
+ return Object.freeze(picked);
57
+ }
58
+ export async function resolveSecretRepo_fromInput(input) {
59
+ if (!input)
60
+ return createEnvSecretRepository();
61
+ if (isSecretRepository(input))
62
+ return input;
63
+ if (isRegisteredSecretRepository(input))
64
+ return input.provider;
65
+ const factory = secretRepositoryFactories[input.provider];
66
+ if (!factory) {
67
+ throw new Error(`[secrets] Unsupported provider type: ${input.provider}`);
68
+ }
69
+ return await factory(input);
70
+ }
71
+ export async function resolveSecretBundle(input) {
72
+ const provider = await resolveSecretRepo_fromInput(input);
73
+ const appSchema = getAppSecretSchema(input);
74
+ const mergedSchema = mergeSecretSchemas(frameworkSecretSchema, appSchema);
75
+ const merged = await resolveSecrets(provider, mergedSchema);
76
+ return {
77
+ provider,
78
+ framework: pickResolvedSecrets(merged, frameworkSecretSchema),
79
+ app: (appSchema
80
+ ? pickResolvedSecrets(merged, appSchema)
81
+ : null),
82
+ merged,
83
+ };
84
+ }