@lastshotlabs/bunshot 0.0.27 → 0.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (742) hide show
  1. package/.oclif.manifest.json +39 -0
  2. package/README.md +8282 -2147
  3. package/dist/cli/commands/init.js +690 -0
  4. package/dist/cli/index.js +6 -0
  5. package/dist/cli.js +4 -4
  6. package/dist/packages/bunshot-admin/src/index.d.ts +15 -0
  7. package/dist/packages/bunshot-admin/src/index.js +11 -0
  8. package/dist/packages/bunshot-admin/src/lib/resourceTypes.d.ts +8 -0
  9. package/dist/packages/bunshot-admin/src/lib/resourceTypes.js +33 -0
  10. package/dist/packages/bunshot-admin/src/lib/typedRoute.d.ts +14 -0
  11. package/dist/packages/bunshot-admin/src/lib/typedRoute.js +17 -0
  12. package/dist/packages/bunshot-admin/src/plugin.d.ts +4 -0
  13. package/dist/packages/bunshot-admin/src/plugin.js +46 -0
  14. package/dist/packages/bunshot-admin/src/providers/auth0Access.d.ts +6 -0
  15. package/dist/packages/bunshot-admin/src/providers/auth0Access.js +32 -0
  16. package/dist/packages/bunshot-admin/src/routes/admin.d.ts +10 -0
  17. package/dist/packages/bunshot-admin/src/routes/admin.js +923 -0
  18. package/dist/packages/bunshot-admin/src/routes/mail.d.ts +6 -0
  19. package/dist/packages/bunshot-admin/src/routes/mail.js +114 -0
  20. package/dist/packages/bunshot-admin/src/routes/permissions.d.ts +8 -0
  21. package/dist/packages/bunshot-admin/src/routes/permissions.js +315 -0
  22. package/dist/packages/bunshot-admin/src/types/config.d.ts +16 -0
  23. package/dist/packages/bunshot-admin/src/types/config.js +37 -0
  24. package/dist/packages/bunshot-admin/src/types/env.d.ts +14 -0
  25. package/dist/packages/bunshot-admin/src/types/provider.d.ts +1 -0
  26. package/dist/packages/bunshot-admin/src/types/provider.js +4 -0
  27. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.d.ts +66 -0
  28. package/dist/packages/bunshot-auth/src/adapters/memoryAuth.js +1063 -0
  29. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.d.ts +2 -0
  30. package/dist/packages/bunshot-auth/src/adapters/mongoAuth.js +536 -0
  31. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.d.ts +88 -0
  32. package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.js +1366 -0
  33. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.d.ts +2 -0
  34. package/dist/packages/bunshot-auth/src/admin/bunshotAccess.js +23 -0
  35. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.d.ts +5 -0
  36. package/dist/packages/bunshot-auth/src/admin/bunshotUsers.js +131 -0
  37. package/dist/packages/bunshot-auth/src/bootstrap.d.ts +38 -0
  38. package/dist/packages/bunshot-auth/src/bootstrap.js +384 -0
  39. package/dist/packages/bunshot-auth/src/config/appConfig.d.ts +3 -0
  40. package/dist/packages/bunshot-auth/src/config/appConfig.js +4 -0
  41. package/dist/packages/bunshot-auth/src/config/authConfig.d.ts +478 -0
  42. package/dist/packages/bunshot-auth/src/config/authConfig.js +46 -0
  43. package/dist/packages/bunshot-auth/src/config/configLock.d.ts +2 -0
  44. package/dist/packages/bunshot-auth/src/config/configLock.js +10 -0
  45. package/dist/packages/bunshot-auth/src/index.d.ts +25 -0
  46. package/dist/packages/bunshot-auth/src/index.js +23 -0
  47. package/dist/packages/bunshot-auth/src/infra/mongo.d.ts +15 -0
  48. package/dist/packages/bunshot-auth/src/infra/mongo.js +44 -0
  49. package/dist/packages/bunshot-auth/src/infra/queue.d.ts +14 -0
  50. package/dist/packages/bunshot-auth/src/infra/queue.js +27 -0
  51. package/dist/packages/bunshot-auth/src/infra/redis.d.ts +5 -0
  52. package/dist/packages/bunshot-auth/src/infra/redis.js +15 -0
  53. package/dist/packages/bunshot-auth/src/infra/signing.d.ts +7 -0
  54. package/dist/packages/bunshot-auth/src/infra/signing.js +8 -0
  55. package/dist/packages/bunshot-auth/src/lib/accountLockout.d.ts +34 -0
  56. package/dist/packages/bunshot-auth/src/lib/accountLockout.js +244 -0
  57. package/dist/packages/bunshot-auth/src/lib/adapterTiers.d.ts +1 -0
  58. package/dist/packages/bunshot-auth/src/lib/adapterTiers.js +1 -0
  59. package/dist/packages/bunshot-auth/src/lib/authAdapter.d.ts +1 -0
  60. package/dist/packages/bunshot-auth/src/lib/authAdapter.js +1 -0
  61. package/dist/packages/bunshot-auth/src/lib/authContext.d.ts +15 -0
  62. package/dist/packages/bunshot-auth/src/lib/authContext.js +1 -0
  63. package/dist/packages/bunshot-auth/src/lib/authEventBus.d.ts +4 -0
  64. package/dist/packages/bunshot-auth/src/lib/authEventBus.js +15 -0
  65. package/dist/packages/bunshot-auth/src/lib/authRateLimit.d.ts +28 -0
  66. package/dist/packages/bunshot-auth/src/lib/authRateLimit.js +205 -0
  67. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.d.ts +8 -2
  68. package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.js +22 -9
  69. package/dist/packages/bunshot-auth/src/lib/cache.d.ts +12 -0
  70. package/dist/packages/bunshot-auth/src/lib/cache.js +120 -0
  71. package/dist/packages/bunshot-auth/src/lib/clientIp.d.ts +4 -0
  72. package/dist/{lib → packages/bunshot-auth/src/lib}/clientIp.js +14 -7
  73. package/dist/packages/bunshot-auth/src/lib/cookieOptions.d.ts +27 -0
  74. package/dist/packages/bunshot-auth/src/lib/cookieOptions.js +33 -0
  75. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.d.ts +40 -0
  76. package/dist/packages/bunshot-auth/src/lib/credentialStuffing.js +221 -0
  77. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.d.ts +19 -0
  78. package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.js +148 -0
  79. package/dist/packages/bunshot-auth/src/lib/emailTemplates.d.ts +23 -0
  80. package/dist/packages/bunshot-auth/src/lib/emailTemplates.js +265 -0
  81. package/dist/packages/bunshot-auth/src/lib/emailVerification.d.ts +30 -0
  82. package/dist/packages/bunshot-auth/src/lib/emailVerification.js +200 -0
  83. package/dist/packages/bunshot-auth/src/lib/env.d.ts +1 -0
  84. package/dist/packages/bunshot-auth/src/lib/env.js +3 -0
  85. package/dist/packages/bunshot-auth/src/lib/fingerprint.js +36 -0
  86. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.d.ts +15 -16
  87. package/dist/{lib → packages/bunshot-auth/src/lib}/groups.js +22 -34
  88. package/dist/packages/bunshot-auth/src/lib/jwks.d.ts +28 -0
  89. package/dist/packages/bunshot-auth/src/lib/jwks.js +79 -0
  90. package/dist/packages/bunshot-auth/src/lib/jwt.d.ts +12 -0
  91. package/dist/packages/bunshot-auth/src/lib/jwt.js +86 -0
  92. package/dist/{lib → packages/bunshot-auth/src/lib}/logger.js +3 -3
  93. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.d.ts +5 -4
  94. package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.js +6 -10
  95. package/dist/packages/bunshot-auth/src/lib/magicLink.d.ts +13 -0
  96. package/dist/packages/bunshot-auth/src/lib/magicLink.js +145 -0
  97. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.d.ts +60 -0
  98. package/dist/packages/bunshot-auth/src/lib/mfaChallenge.js +419 -0
  99. package/dist/packages/bunshot-auth/src/lib/oauth.d.ts +82 -0
  100. package/dist/packages/bunshot-auth/src/lib/oauth.js +177 -0
  101. package/dist/packages/bunshot-auth/src/lib/oauthCode.d.ts +19 -0
  102. package/dist/packages/bunshot-auth/src/lib/oauthCode.js +182 -0
  103. package/dist/packages/bunshot-auth/src/lib/oauthReauth.d.ts +19 -0
  104. package/dist/packages/bunshot-auth/src/lib/oauthReauth.js +255 -0
  105. package/dist/packages/bunshot-auth/src/lib/organization.d.ts +66 -0
  106. package/dist/packages/bunshot-auth/src/lib/organization.js +225 -0
  107. package/dist/packages/bunshot-auth/src/lib/passwordHistory.d.ts +12 -0
  108. package/dist/packages/bunshot-auth/src/lib/passwordHistory.js +31 -0
  109. package/dist/packages/bunshot-auth/src/lib/resetPassword.d.ts +20 -0
  110. package/dist/packages/bunshot-auth/src/lib/resetPassword.js +148 -0
  111. package/dist/packages/bunshot-auth/src/lib/roles.d.ts +9 -0
  112. package/dist/packages/bunshot-auth/src/lib/roles.js +93 -0
  113. package/dist/packages/bunshot-auth/src/lib/saml.d.ts +29 -0
  114. package/dist/packages/bunshot-auth/src/lib/saml.js +73 -0
  115. package/dist/packages/bunshot-auth/src/lib/samlRequestId.d.ts +13 -0
  116. package/dist/packages/bunshot-auth/src/lib/samlRequestId.js +129 -0
  117. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.d.ts +7 -7
  118. package/dist/{lib → packages/bunshot-auth/src/lib}/scim.js +15 -13
  119. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.d.ts +22 -0
  120. package/dist/packages/bunshot-auth/src/lib/securityEventWiring.js +65 -0
  121. package/dist/packages/bunshot-auth/src/lib/session.d.ts +45 -0
  122. package/dist/packages/bunshot-auth/src/lib/session.js +1211 -0
  123. package/dist/packages/bunshot-auth/src/lib/storeInfra.d.ts +26 -0
  124. package/dist/packages/bunshot-auth/src/lib/storeInfra.js +18 -0
  125. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.d.ts +3 -2
  126. package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.js +2 -5
  127. package/dist/packages/bunshot-auth/src/lib/validateAdapter.d.ts +16 -0
  128. package/dist/packages/bunshot-auth/src/lib/validateAdapter.js +161 -0
  129. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.d.ts +13 -0
  130. package/dist/packages/bunshot-auth/src/middleware/bearerAuth.js +58 -0
  131. package/dist/{middleware → packages/bunshot-auth/src/middleware}/csrf.d.ts +5 -4
  132. package/dist/packages/bunshot-auth/src/middleware/csrf.js +138 -0
  133. package/dist/packages/bunshot-auth/src/middleware/identify.d.ts +4 -0
  134. package/dist/packages/bunshot-auth/src/middleware/identify.js +124 -0
  135. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.d.ts +2 -2
  136. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.js +10 -8
  137. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.d.ts +2 -2
  138. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.js +20 -16
  139. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.d.ts +2 -2
  140. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.js +6 -6
  141. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.d.ts +2 -2
  142. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.js +8 -7
  143. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.d.ts +2 -2
  144. package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.js +7 -6
  145. package/dist/packages/bunshot-auth/src/middleware/scimAuth.d.ts +8 -0
  146. package/dist/packages/bunshot-auth/src/middleware/scimAuth.js +29 -0
  147. package/dist/packages/bunshot-auth/src/middleware/userAuth.d.ts +3 -0
  148. package/dist/packages/bunshot-auth/src/middleware/userAuth.js +6 -0
  149. package/dist/{models → packages/bunshot-auth/src/models}/AuthUser.d.ts +12 -8
  150. package/dist/packages/bunshot-auth/src/models/AuthUser.js +53 -0
  151. package/dist/packages/bunshot-auth/src/models/Group.d.ts +19 -0
  152. package/dist/packages/bunshot-auth/src/models/Group.js +22 -0
  153. package/dist/{models → packages/bunshot-auth/src/models}/GroupMembership.d.ts +6 -8
  154. package/dist/packages/bunshot-auth/src/models/GroupMembership.js +19 -0
  155. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.d.ts +1 -1
  156. package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.js +5 -5
  157. package/dist/packages/bunshot-auth/src/models/TenantRole.d.ts +13 -0
  158. package/dist/packages/bunshot-auth/src/models/TenantRole.js +17 -0
  159. package/dist/packages/bunshot-auth/src/plugin.d.ts +4 -0
  160. package/dist/packages/bunshot-auth/src/plugin.js +274 -0
  161. package/dist/packages/bunshot-auth/src/routes/auth.d.ts +15 -0
  162. package/dist/packages/bunshot-auth/src/routes/auth.js +1624 -0
  163. package/dist/packages/bunshot-auth/src/routes/groups.d.ts +4 -0
  164. package/dist/packages/bunshot-auth/src/routes/groups.js +481 -0
  165. package/dist/packages/bunshot-auth/src/routes/m2m.d.ts +2 -0
  166. package/dist/packages/bunshot-auth/src/routes/m2m.js +145 -0
  167. package/dist/packages/bunshot-auth/src/routes/mfa.d.ts +6 -0
  168. package/dist/packages/bunshot-auth/src/routes/mfa.js +991 -0
  169. package/dist/packages/bunshot-auth/src/routes/oauth.d.ts +3 -0
  170. package/dist/packages/bunshot-auth/src/routes/oauth.js +1727 -0
  171. package/dist/packages/bunshot-auth/src/routes/oidc.d.ts +2 -0
  172. package/dist/packages/bunshot-auth/src/routes/oidc.js +84 -0
  173. package/dist/packages/bunshot-auth/src/routes/organizations.d.ts +3 -0
  174. package/dist/packages/bunshot-auth/src/routes/organizations.js +741 -0
  175. package/dist/packages/bunshot-auth/src/routes/passkey.d.ts +2 -0
  176. package/dist/packages/bunshot-auth/src/routes/passkey.js +199 -0
  177. package/dist/packages/bunshot-auth/src/routes/saml.d.ts +2 -0
  178. package/dist/packages/bunshot-auth/src/routes/saml.js +226 -0
  179. package/dist/packages/bunshot-auth/src/routes/scim.d.ts +3 -0
  180. package/dist/packages/bunshot-auth/src/routes/scim.js +588 -0
  181. package/dist/packages/bunshot-auth/src/runtime.d.ts +52 -0
  182. package/dist/packages/bunshot-auth/src/runtime.js +11 -0
  183. package/dist/{schemas → packages/bunshot-auth/src/schemas}/auth.d.ts +4 -5
  184. package/dist/packages/bunshot-auth/src/schemas/auth.js +24 -0
  185. package/dist/packages/bunshot-auth/src/schemas/error.d.ts +10 -0
  186. package/dist/packages/bunshot-auth/src/schemas/error.js +10 -0
  187. package/dist/packages/bunshot-auth/src/schemas/success.d.ts +10 -0
  188. package/dist/packages/bunshot-auth/src/schemas/success.js +10 -0
  189. package/dist/packages/bunshot-auth/src/services/auth.d.ts +39 -0
  190. package/dist/packages/bunshot-auth/src/services/auth.js +378 -0
  191. package/dist/{services → packages/bunshot-auth/src/services}/mfa.d.ts +41 -17
  192. package/dist/{services → packages/bunshot-auth/src/services}/mfa.js +259 -183
  193. package/dist/packages/bunshot-auth/src/testing.d.ts +31 -0
  194. package/dist/packages/bunshot-auth/src/testing.js +23 -0
  195. package/dist/packages/bunshot-auth/src/types/adapter.d.ts +1 -0
  196. package/dist/packages/bunshot-auth/src/types/adapter.js +1 -0
  197. package/dist/packages/bunshot-auth/src/types/config.d.ts +152 -0
  198. package/dist/packages/bunshot-auth/src/types/config.js +179 -0
  199. package/dist/{routes → packages/bunshot-auth/src/types}/groups.d.ts +2 -3
  200. package/dist/packages/bunshot-auth/src/types/groups.js +1 -0
  201. package/dist/packages/bunshot-auth/src/types/oauthCode.d.ts +6 -0
  202. package/dist/packages/bunshot-auth/src/types/oauthCode.js +1 -0
  203. package/dist/packages/bunshot-auth/src/types/oauthReauth.d.ts +13 -0
  204. package/dist/packages/bunshot-auth/src/types/oauthReauth.js +1 -0
  205. package/dist/packages/bunshot-auth/src/types/redis.d.ts +1 -0
  206. package/dist/packages/bunshot-auth/src/types/redis.js +1 -0
  207. package/dist/packages/bunshot-auth/src/types/saml.d.ts +10 -0
  208. package/dist/packages/bunshot-auth/src/types/saml.js +1 -0
  209. package/dist/packages/bunshot-auth/src/types/session.d.ts +18 -0
  210. package/dist/packages/bunshot-auth/src/types/session.js +1 -0
  211. package/dist/packages/bunshot-auth/src/types/store.d.ts +1 -0
  212. package/dist/packages/bunshot-auth/src/types/store.js +1 -0
  213. package/dist/packages/bunshot-core/src/adminProvider.d.ts +95 -0
  214. package/dist/packages/bunshot-core/src/adminProvider.js +1 -0
  215. package/dist/packages/bunshot-core/src/auditLog.d.ts +34 -0
  216. package/dist/packages/bunshot-core/src/auditLog.js +1 -0
  217. package/dist/packages/bunshot-core/src/auth-adapter.d.ts +227 -0
  218. package/dist/packages/bunshot-core/src/auth-adapter.js +4 -0
  219. package/dist/packages/bunshot-core/src/authVariables.d.ts +14 -0
  220. package/dist/packages/bunshot-core/src/authVariables.js +4 -0
  221. package/dist/packages/bunshot-core/src/cache.d.ts +12 -0
  222. package/dist/packages/bunshot-core/src/cache.js +21 -0
  223. package/dist/{lib → packages/bunshot-core/src}/captcha.d.ts +1 -10
  224. package/dist/packages/bunshot-core/src/captcha.js +1 -0
  225. package/dist/packages/bunshot-core/src/clearRegistry.d.ts +6 -0
  226. package/dist/packages/bunshot-core/src/clearRegistry.js +17 -0
  227. package/dist/packages/bunshot-core/src/clientIp.d.ts +3 -0
  228. package/dist/packages/bunshot-core/src/clientIp.js +45 -0
  229. package/dist/packages/bunshot-core/src/configLock.d.ts +4 -0
  230. package/dist/packages/bunshot-core/src/configLock.js +7 -0
  231. package/dist/packages/bunshot-core/src/configValidation.d.ts +22 -0
  232. package/dist/packages/bunshot-core/src/configValidation.js +39 -0
  233. package/dist/packages/bunshot-core/src/constants.js +10 -0
  234. package/dist/packages/bunshot-core/src/context/bunshotContext.d.ts +232 -0
  235. package/dist/packages/bunshot-core/src/context/bunshotContext.js +1 -0
  236. package/dist/packages/bunshot-core/src/context/contextAccess.d.ts +3 -0
  237. package/dist/packages/bunshot-core/src/context/contextAccess.js +16 -0
  238. package/dist/packages/bunshot-core/src/context/contextStore.d.ts +16 -0
  239. package/dist/packages/bunshot-core/src/context/contextStore.js +31 -0
  240. package/dist/packages/bunshot-core/src/context/frameworkConfig.d.ts +38 -0
  241. package/dist/packages/bunshot-core/src/context/frameworkConfig.js +1 -0
  242. package/dist/packages/bunshot-core/src/context/index.d.ts +4 -0
  243. package/dist/packages/bunshot-core/src/context/index.js +2 -0
  244. package/dist/packages/bunshot-core/src/context.d.ts +40 -0
  245. package/dist/packages/bunshot-core/src/context.js +35 -0
  246. package/dist/packages/bunshot-core/src/coreContracts.d.ts +47 -0
  247. package/dist/packages/bunshot-core/src/coreContracts.js +1 -0
  248. package/dist/packages/bunshot-core/src/coreRegistrar.d.ts +6 -0
  249. package/dist/packages/bunshot-core/src/coreRegistrar.js +42 -0
  250. package/dist/{lib → packages/bunshot-core/src}/createRoute.d.ts +4 -30
  251. package/dist/{lib → packages/bunshot-core/src}/createRoute.js +39 -88
  252. package/dist/packages/bunshot-core/src/cronRegistry.d.ts +11 -0
  253. package/dist/packages/bunshot-core/src/cronRegistry.js +1 -0
  254. package/dist/packages/bunshot-core/src/crypto.d.ts +43 -0
  255. package/dist/packages/bunshot-core/src/crypto.js +74 -0
  256. package/dist/packages/bunshot-core/src/csrf.d.ts +8 -0
  257. package/dist/packages/bunshot-core/src/csrf.js +1 -0
  258. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.d.ts +7 -0
  259. package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.js +19 -0
  260. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.d.ts +6 -0
  261. package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.js +40 -0
  262. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.d.ts +6 -0
  263. package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.js +24 -0
  264. package/dist/packages/bunshot-core/src/emailTemplates.d.ts +5 -0
  265. package/dist/packages/bunshot-core/src/emailTemplates.js +10 -0
  266. package/dist/{lib/HttpError.d.ts → packages/bunshot-core/src/errors.d.ts} +4 -1
  267. package/dist/{lib/HttpError.js → packages/bunshot-core/src/errors.js} +7 -1
  268. package/dist/packages/bunshot-core/src/eventBus.d.ts +270 -0
  269. package/dist/packages/bunshot-core/src/eventBus.js +143 -0
  270. package/dist/packages/bunshot-core/src/idempotency.d.ts +18 -0
  271. package/dist/packages/bunshot-core/src/idempotency.js +1 -0
  272. package/dist/packages/bunshot-core/src/index.d.ts +60 -0
  273. package/dist/packages/bunshot-core/src/index.js +34 -0
  274. package/dist/packages/bunshot-core/src/mail.d.ts +14 -0
  275. package/dist/packages/bunshot-core/src/mail.js +8 -0
  276. package/dist/packages/bunshot-core/src/memoryEviction.d.ts +24 -0
  277. package/dist/packages/bunshot-core/src/memoryEviction.js +52 -0
  278. package/dist/packages/bunshot-core/src/pagination.d.ts +45 -0
  279. package/dist/packages/bunshot-core/src/pagination.js +61 -0
  280. package/dist/packages/bunshot-core/src/permissions.d.ts +64 -0
  281. package/dist/packages/bunshot-core/src/permissions.js +27 -0
  282. package/dist/packages/bunshot-core/src/plugin.d.ts +44 -0
  283. package/dist/packages/bunshot-core/src/plugin.js +1 -0
  284. package/dist/packages/bunshot-core/src/rateLimit.d.ts +5 -0
  285. package/dist/packages/bunshot-core/src/rateLimit.js +18 -0
  286. package/dist/packages/bunshot-core/src/redis.d.ts +21 -0
  287. package/dist/packages/bunshot-core/src/redis.js +1 -0
  288. package/dist/packages/bunshot-core/src/routeAuth.d.ts +5 -0
  289. package/dist/packages/bunshot-core/src/routeAuth.js +11 -0
  290. package/dist/packages/bunshot-core/src/routeOverrides.d.ts +24 -0
  291. package/dist/packages/bunshot-core/src/routeOverrides.js +25 -0
  292. package/dist/packages/bunshot-core/src/routerAdapter.d.ts +6 -0
  293. package/dist/packages/bunshot-core/src/routerAdapter.js +56 -0
  294. package/dist/packages/bunshot-core/src/secrets.d.ts +48 -0
  295. package/dist/packages/bunshot-core/src/secrets.js +8 -0
  296. package/dist/packages/bunshot-core/src/signing.d.ts +41 -0
  297. package/dist/packages/bunshot-core/src/signing.js +1 -0
  298. package/dist/packages/bunshot-core/src/sse.d.ts +36 -0
  299. package/dist/packages/bunshot-core/src/sse.js +1 -0
  300. package/dist/packages/bunshot-core/src/storageAdapter.js +1 -0
  301. package/dist/packages/bunshot-core/src/storeInfra.d.ts +44 -0
  302. package/dist/packages/bunshot-core/src/storeInfra.js +18 -0
  303. package/dist/packages/bunshot-core/src/storeType.d.ts +7 -0
  304. package/dist/packages/bunshot-core/src/storeType.js +1 -0
  305. package/dist/packages/bunshot-core/src/testing.d.ts +1 -0
  306. package/dist/packages/bunshot-core/src/testing.js +1 -0
  307. package/dist/packages/bunshot-core/src/uploadRegistry.d.ts +23 -0
  308. package/dist/packages/bunshot-core/src/uploadRegistry.js +4 -0
  309. package/dist/packages/bunshot-core/src/userResolver.d.ts +5 -0
  310. package/dist/packages/bunshot-core/src/userResolver.js +14 -0
  311. package/dist/packages/bunshot-core/src/wsMessages.d.ts +42 -0
  312. package/dist/packages/bunshot-core/src/wsMessages.js +4 -0
  313. package/dist/packages/bunshot-permissions/src/adapters/memory.d.ts +7 -0
  314. package/dist/packages/bunshot-permissions/src/adapters/memory.js +73 -0
  315. package/dist/packages/bunshot-permissions/src/index.d.ts +10 -0
  316. package/dist/packages/bunshot-permissions/src/index.js +5 -0
  317. package/dist/packages/bunshot-permissions/src/lib/bootstrap.d.ts +7 -0
  318. package/dist/packages/bunshot-permissions/src/lib/bootstrap.js +12 -0
  319. package/dist/packages/bunshot-permissions/src/lib/evaluator.d.ts +10 -0
  320. package/dist/packages/bunshot-permissions/src/lib/evaluator.js +165 -0
  321. package/dist/packages/bunshot-permissions/src/lib/registry.d.ts +2 -0
  322. package/dist/packages/bunshot-permissions/src/lib/registry.js +31 -0
  323. package/dist/packages/bunshot-permissions/src/lib/validation.d.ts +1 -0
  324. package/dist/packages/bunshot-permissions/src/lib/validation.js +1 -0
  325. package/dist/packages/bunshot-permissions/src/types/adapter.d.ts +1 -0
  326. package/dist/packages/bunshot-permissions/src/types/adapter.js +1 -0
  327. package/dist/packages/bunshot-permissions/src/types/evaluator.d.ts +1 -0
  328. package/dist/packages/bunshot-permissions/src/types/evaluator.js +1 -0
  329. package/dist/packages/bunshot-permissions/src/types/models.d.ts +1 -0
  330. package/dist/packages/bunshot-permissions/src/types/models.js +1 -0
  331. package/dist/packages/bunshot-permissions/src/types/registry.d.ts +1 -0
  332. package/dist/packages/bunshot-permissions/src/types/registry.js +1 -0
  333. package/dist/packages/bunshot-postgres/src/adapter.d.ts +6 -0
  334. package/dist/packages/bunshot-postgres/src/adapter.js +794 -0
  335. package/dist/packages/bunshot-postgres/src/connection.d.ts +15 -0
  336. package/dist/packages/bunshot-postgres/src/connection.js +16 -0
  337. package/dist/packages/bunshot-postgres/src/index.d.ts +4 -0
  338. package/dist/packages/bunshot-postgres/src/index.js +2 -0
  339. package/dist/packages/bunshot-postgres/src/schema.d.ts +997 -0
  340. package/dist/packages/bunshot-postgres/src/schema.js +105 -0
  341. package/dist/src/app.d.ts +230 -0
  342. package/dist/src/app.js +182 -0
  343. package/dist/src/cli/commands/init.d.ts +10 -0
  344. package/dist/src/cli/commands/init.js +709 -0
  345. package/dist/src/cli/index.d.ts +1 -0
  346. package/dist/src/cli/index.js +3 -0
  347. package/dist/src/entrypoints/mongo.d.ts +6 -0
  348. package/dist/src/entrypoints/mongo.js +4 -0
  349. package/dist/src/entrypoints/queue.d.ts +2 -0
  350. package/dist/src/entrypoints/queue.js +1 -0
  351. package/dist/src/entrypoints/redis.d.ts +1 -0
  352. package/dist/src/entrypoints/redis.js +1 -0
  353. package/dist/{adapters → src/framework/adapters}/localStorage.d.ts +1 -1
  354. package/dist/{adapters → src/framework/adapters}/localStorage.js +10 -10
  355. package/dist/src/framework/adapters/memoryStorage.d.ts +2 -0
  356. package/dist/src/framework/adapters/memoryStorage.js +45 -0
  357. package/dist/{adapters → src/framework/adapters}/s3Storage.d.ts +1 -1
  358. package/dist/{adapters → src/framework/adapters}/s3Storage.js +12 -12
  359. package/dist/src/framework/admin/bunshotAccess.d.ts +2 -0
  360. package/dist/src/framework/admin/bunshotAccess.js +23 -0
  361. package/dist/src/framework/admin/bunshotUsers.d.ts +2 -0
  362. package/dist/src/framework/admin/bunshotUsers.js +103 -0
  363. package/dist/src/framework/admin/index.d.ts +7 -0
  364. package/dist/src/framework/admin/index.js +21 -0
  365. package/dist/src/framework/boundaryAdapters/cacheFactories.d.ts +13 -0
  366. package/dist/src/framework/boundaryAdapters/cacheFactories.js +86 -0
  367. package/dist/src/framework/boundaryAdapters/index.d.ts +2 -0
  368. package/dist/src/framework/boundaryAdapters/index.js +1 -0
  369. package/dist/src/framework/boundaryAdapters.d.ts +17 -0
  370. package/dist/src/framework/boundaryAdapters.js +62 -0
  371. package/dist/src/framework/buildContext.d.ts +33 -0
  372. package/dist/src/framework/buildContext.js +119 -0
  373. package/dist/src/framework/config/schema.d.ts +447 -0
  374. package/dist/src/framework/config/schema.js +528 -0
  375. package/dist/src/framework/createInfrastructure.d.ts +76 -0
  376. package/dist/src/framework/createInfrastructure.js +221 -0
  377. package/dist/src/framework/lib/auditLog.d.ts +23 -0
  378. package/dist/src/framework/lib/auditLog.js +416 -0
  379. package/dist/src/framework/lib/captcha.d.ts +11 -0
  380. package/dist/{lib → src/framework/lib}/captcha.js +13 -10
  381. package/dist/{lib → src/framework/lib}/createDtoMapper.js +4 -4
  382. package/dist/src/framework/lib/createRoute.d.ts +1 -0
  383. package/dist/src/framework/lib/createRoute.js +2 -0
  384. package/dist/{lib → src/framework/lib}/idempotency.d.ts +2 -6
  385. package/dist/src/framework/lib/idempotency.js +74 -0
  386. package/dist/src/framework/lib/logger.d.ts +3 -0
  387. package/dist/src/framework/lib/logger.js +14 -0
  388. package/dist/src/framework/lib/metrics.d.ts +34 -0
  389. package/dist/{lib → src/framework/lib}/metrics.js +49 -57
  390. package/dist/src/framework/lib/pagination.d.ts +42 -0
  391. package/dist/src/framework/lib/pagination.js +51 -0
  392. package/dist/src/framework/lib/redisTransport.d.ts +38 -0
  393. package/dist/src/framework/lib/redisTransport.js +107 -0
  394. package/dist/src/framework/lib/resolveUserId.d.ts +2 -0
  395. package/dist/src/framework/lib/resolveUserId.js +5 -0
  396. package/dist/src/framework/lib/sseCollision.d.ts +6 -0
  397. package/dist/src/framework/lib/sseCollision.js +26 -0
  398. package/dist/src/framework/lib/storageAdapter.d.ts +1 -0
  399. package/dist/src/framework/lib/storageAdapter.js +1 -0
  400. package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.js +4 -4
  401. package/dist/src/framework/lib/tenant.d.ts +21 -0
  402. package/dist/src/framework/lib/tenant.js +70 -0
  403. package/dist/{lib → src/framework/lib}/upload.d.ts +11 -10
  404. package/dist/src/framework/lib/upload.js +132 -0
  405. package/dist/src/framework/lib/uploadRegistry.d.ts +23 -0
  406. package/dist/src/framework/lib/uploadRegistry.js +34 -0
  407. package/dist/{lib → src/framework/lib}/validate.d.ts +1 -1
  408. package/dist/{lib → src/framework/lib}/validate.js +2 -2
  409. package/dist/src/framework/lib/ws.d.ts +19 -0
  410. package/dist/src/framework/lib/ws.js +130 -0
  411. package/dist/src/framework/lib/wsHeartbeat.d.ts +12 -0
  412. package/dist/src/framework/lib/wsHeartbeat.js +53 -0
  413. package/dist/src/framework/lib/wsMessages.d.ts +25 -0
  414. package/dist/src/framework/lib/wsMessages.js +45 -0
  415. package/dist/src/framework/lib/wsNamespace.d.ts +17 -0
  416. package/dist/src/framework/lib/wsNamespace.js +19 -0
  417. package/dist/src/framework/lib/wsPresence.d.ts +17 -0
  418. package/dist/src/framework/lib/wsPresence.js +84 -0
  419. package/dist/src/framework/lib/wsTransport.d.ts +38 -0
  420. package/dist/src/framework/lib/wsTransport.js +9 -0
  421. package/dist/{lib → src/framework/lib}/zodToMongoose.d.ts +1 -1
  422. package/dist/{lib → src/framework/lib}/zodToMongoose.js +11 -11
  423. package/dist/{middleware → src/framework/middleware}/auditLog.d.ts +4 -3
  424. package/dist/src/framework/middleware/auditLog.js +42 -0
  425. package/dist/{middleware → src/framework/middleware}/botProtection.d.ts +2 -2
  426. package/dist/{middleware → src/framework/middleware}/botProtection.js +8 -9
  427. package/dist/src/framework/middleware/cacheResponse.d.ts +35 -0
  428. package/dist/src/framework/middleware/cacheResponse.js +126 -0
  429. package/dist/{middleware → src/framework/middleware}/captcha.d.ts +2 -3
  430. package/dist/src/framework/middleware/captcha.js +37 -0
  431. package/dist/{middleware → src/framework/middleware}/errorHandler.d.ts +1 -1
  432. package/dist/{middleware → src/framework/middleware}/errorHandler.js +2 -2
  433. package/dist/src/framework/middleware/index.js +1 -0
  434. package/dist/{middleware → src/framework/middleware}/logger.d.ts +1 -1
  435. package/dist/src/framework/middleware/metrics.d.ts +12 -0
  436. package/dist/src/framework/middleware/metrics.js +26 -0
  437. package/dist/{middleware → src/framework/middleware}/rateLimit.d.ts +2 -2
  438. package/dist/src/framework/middleware/rateLimit.js +22 -0
  439. package/dist/src/framework/middleware/requestId.d.ts +3 -0
  440. package/dist/{middleware → src/framework/middleware}/requestId.js +2 -2
  441. package/dist/{middleware → src/framework/middleware}/requestLogger.d.ts +3 -3
  442. package/dist/{middleware → src/framework/middleware}/requestLogger.js +17 -12
  443. package/dist/{middleware → src/framework/middleware}/requestSigning.d.ts +2 -2
  444. package/dist/{middleware → src/framework/middleware}/requestSigning.js +18 -20
  445. package/dist/src/framework/middleware/tenant.d.ts +14 -0
  446. package/dist/{middleware → src/framework/middleware}/tenant.js +31 -27
  447. package/dist/src/framework/middleware/upload.d.ts +5 -0
  448. package/dist/{middleware → src/framework/middleware}/upload.js +4 -4
  449. package/dist/{middleware → src/framework/middleware}/webhookAuth.d.ts +3 -3
  450. package/dist/{middleware → src/framework/middleware}/webhookAuth.js +11 -12
  451. package/dist/src/framework/models/AuditLog.d.ts +21 -0
  452. package/dist/src/framework/models/AuditLog.js +31 -0
  453. package/dist/src/framework/mountMiddleware.d.ts +91 -0
  454. package/dist/src/framework/mountMiddleware.js +128 -0
  455. package/dist/src/framework/mountOptionalEndpoints.d.ts +103 -0
  456. package/dist/src/framework/mountOptionalEndpoints.js +47 -0
  457. package/dist/src/framework/mountRoutes.d.ts +21 -0
  458. package/dist/src/framework/mountRoutes.js +144 -0
  459. package/dist/src/framework/persistence/cronRegistry.d.ts +28 -0
  460. package/dist/src/framework/persistence/cronRegistry.js +139 -0
  461. package/dist/src/framework/persistence/idempotency.d.ts +26 -0
  462. package/dist/src/framework/persistence/idempotency.js +178 -0
  463. package/dist/src/framework/persistence/index.d.ts +6 -0
  464. package/dist/src/framework/persistence/index.js +8 -0
  465. package/dist/src/framework/persistence/storeInfra.d.ts +9 -0
  466. package/dist/src/framework/persistence/storeInfra.js +1 -0
  467. package/dist/src/framework/persistence/uploadRegistry.d.ts +35 -0
  468. package/dist/src/framework/persistence/uploadRegistry.js +235 -0
  469. package/dist/src/framework/persistence/wsMessages.d.ts +22 -0
  470. package/dist/src/framework/persistence/wsMessages.js +296 -0
  471. package/dist/src/framework/preloadSchemas.d.ts +24 -0
  472. package/dist/src/framework/preloadSchemas.js +42 -0
  473. package/dist/src/framework/registerBoundaryAdapters.d.ts +23 -0
  474. package/dist/src/framework/registerBoundaryAdapters.js +46 -0
  475. package/dist/src/framework/routes/admin.d.ts +9 -0
  476. package/dist/src/framework/routes/admin.js +361 -0
  477. package/dist/src/framework/routes/health.d.ts +1 -0
  478. package/dist/src/framework/routes/health.js +21 -0
  479. package/dist/src/framework/routes/home.d.ts +1 -0
  480. package/dist/src/framework/routes/home.js +18 -0
  481. package/dist/src/framework/routes/jobs.d.ts +3 -0
  482. package/dist/{routes → src/framework/routes}/jobs.js +128 -103
  483. package/dist/src/framework/routes/metrics.d.ts +10 -0
  484. package/dist/src/framework/routes/metrics.js +57 -0
  485. package/dist/{routes → src/framework/routes}/uploads.d.ts +3 -3
  486. package/dist/src/framework/routes/uploads.js +262 -0
  487. package/dist/src/framework/runPluginLifecycle.d.ts +27 -0
  488. package/dist/src/framework/runPluginLifecycle.js +121 -0
  489. package/dist/src/framework/secrets/frameworkSecretSchema.d.ts +58 -0
  490. package/dist/src/framework/secrets/frameworkSecretSchema.js +20 -0
  491. package/dist/src/framework/secrets/index.d.ts +9 -0
  492. package/dist/src/framework/secrets/index.js +7 -0
  493. package/dist/src/framework/secrets/providers/envProvider.d.ts +15 -0
  494. package/dist/src/framework/secrets/providers/envProvider.js +18 -0
  495. package/dist/src/framework/secrets/providers/fileProvider.d.ts +8 -0
  496. package/dist/src/framework/secrets/providers/fileProvider.js +82 -0
  497. package/dist/src/framework/secrets/providers/ssmProvider.d.ts +20 -0
  498. package/dist/src/framework/secrets/providers/ssmProvider.js +127 -0
  499. package/dist/src/framework/secrets/resolveSecretBundle.d.ts +53 -0
  500. package/dist/src/framework/secrets/resolveSecretBundle.js +84 -0
  501. package/dist/src/framework/secrets/resolveSecrets.d.ts +18 -0
  502. package/dist/src/framework/secrets/resolveSecrets.js +34 -0
  503. package/dist/src/framework/sse/index.d.ts +21 -0
  504. package/dist/src/framework/sse/index.js +109 -0
  505. package/dist/src/framework/ws/index.d.ts +11 -0
  506. package/dist/src/framework/ws/index.js +8 -0
  507. package/dist/src/index.d.ts +87 -0
  508. package/dist/src/index.js +58 -0
  509. package/dist/src/lib/appConfig.d.ts +7 -0
  510. package/dist/src/lib/appConfig.js +27 -0
  511. package/dist/src/lib/appMeta.d.ts +7 -0
  512. package/dist/src/lib/appMeta.js +3 -0
  513. package/dist/src/lib/authConfig.d.ts +532 -0
  514. package/dist/{lib/appConfig.js → src/lib/authConfig.js} +75 -17
  515. package/dist/{lib → src/lib}/context.d.ts +6 -12
  516. package/dist/{lib → src/lib}/context.js +5 -5
  517. package/dist/src/lib/logger.d.ts +1 -0
  518. package/dist/src/lib/logger.js +1 -0
  519. package/dist/src/lib/mongo.d.ts +58 -0
  520. package/dist/src/lib/mongo.js +96 -0
  521. package/dist/src/lib/queue.d.ts +72 -0
  522. package/dist/src/lib/queue.js +152 -0
  523. package/dist/src/lib/redis.d.ts +28 -0
  524. package/dist/src/lib/redis.js +72 -0
  525. package/dist/{lib → src/lib}/signing.d.ts +2 -2
  526. package/dist/src/lib/signing.js +210 -0
  527. package/dist/src/lib/signingConfig.d.ts +40 -0
  528. package/dist/src/lib/signingConfig.js +28 -0
  529. package/dist/src/server.d.ts +146 -0
  530. package/dist/src/server.js +469 -0
  531. package/dist/src/shared/lib/HttpError.d.ts +1 -0
  532. package/dist/src/shared/lib/HttpError.js +2 -0
  533. package/dist/src/shared/lib/constants.d.ts +10 -0
  534. package/dist/src/shared/lib/crypto.d.ts +43 -0
  535. package/dist/src/shared/lib/crypto.js +74 -0
  536. package/dist/src/shared/lib/signing.d.ts +52 -0
  537. package/dist/{lib → src/shared/lib}/signing.js +35 -8
  538. package/dist/src/testing.d.ts +34 -0
  539. package/dist/src/testing.js +93 -0
  540. package/package.json +60 -24
  541. package/dist/adapters/memoryAuth.d.ts +0 -52
  542. package/dist/adapters/memoryAuth.js +0 -749
  543. package/dist/adapters/memoryStorage.d.ts +0 -3
  544. package/dist/adapters/memoryStorage.js +0 -44
  545. package/dist/adapters/mongoAuth.d.ts +0 -2
  546. package/dist/adapters/mongoAuth.js +0 -403
  547. package/dist/adapters/sqliteAuth.d.ts +0 -72
  548. package/dist/adapters/sqliteAuth.js +0 -858
  549. package/dist/app.d.ts +0 -559
  550. package/dist/app.js +0 -651
  551. package/dist/entrypoints/mongo.d.ts +0 -5
  552. package/dist/entrypoints/mongo.js +0 -4
  553. package/dist/entrypoints/queue.d.ts +0 -2
  554. package/dist/entrypoints/queue.js +0 -1
  555. package/dist/entrypoints/redis.d.ts +0 -1
  556. package/dist/entrypoints/redis.js +0 -1
  557. package/dist/index.d.ts +0 -117
  558. package/dist/index.js +0 -88
  559. package/dist/lib/appConfig.d.ts +0 -275
  560. package/dist/lib/auditLog.d.ts +0 -58
  561. package/dist/lib/auditLog.js +0 -218
  562. package/dist/lib/authAdapter.d.ts +0 -246
  563. package/dist/lib/authAdapter.js +0 -7
  564. package/dist/lib/authRateLimit.d.ts +0 -13
  565. package/dist/lib/authRateLimit.js +0 -117
  566. package/dist/lib/clientIp.d.ts +0 -14
  567. package/dist/lib/credentialStuffing.d.ts +0 -31
  568. package/dist/lib/credentialStuffing.js +0 -77
  569. package/dist/lib/crypto.d.ts +0 -11
  570. package/dist/lib/crypto.js +0 -22
  571. package/dist/lib/deletionCancelToken.d.ts +0 -12
  572. package/dist/lib/deletionCancelToken.js +0 -88
  573. package/dist/lib/emailVerification.d.ts +0 -19
  574. package/dist/lib/emailVerification.js +0 -129
  575. package/dist/lib/fingerprint.js +0 -36
  576. package/dist/lib/idempotency.js +0 -182
  577. package/dist/lib/jwks.d.ts +0 -25
  578. package/dist/lib/jwks.js +0 -51
  579. package/dist/lib/jwt.d.ts +0 -15
  580. package/dist/lib/jwt.js +0 -111
  581. package/dist/lib/metrics.d.ts +0 -14
  582. package/dist/lib/mfaChallenge.d.ts +0 -55
  583. package/dist/lib/mfaChallenge.js +0 -398
  584. package/dist/lib/mongo.d.ts +0 -39
  585. package/dist/lib/mongo.js +0 -124
  586. package/dist/lib/oauth.d.ts +0 -40
  587. package/dist/lib/oauth.js +0 -101
  588. package/dist/lib/oauthCode.d.ts +0 -15
  589. package/dist/lib/oauthCode.js +0 -95
  590. package/dist/lib/pagination.d.ts +0 -119
  591. package/dist/lib/pagination.js +0 -166
  592. package/dist/lib/queue.d.ts +0 -37
  593. package/dist/lib/queue.js +0 -117
  594. package/dist/lib/redis.d.ts +0 -9
  595. package/dist/lib/redis.js +0 -61
  596. package/dist/lib/resetPassword.d.ts +0 -12
  597. package/dist/lib/resetPassword.js +0 -93
  598. package/dist/lib/roles.d.ts +0 -7
  599. package/dist/lib/roles.js +0 -49
  600. package/dist/lib/saml.d.ts +0 -25
  601. package/dist/lib/saml.js +0 -64
  602. package/dist/lib/securityEvents.d.ts +0 -28
  603. package/dist/lib/securityEvents.js +0 -26
  604. package/dist/lib/session.d.ts +0 -49
  605. package/dist/lib/session.js +0 -597
  606. package/dist/lib/tenant.d.ts +0 -15
  607. package/dist/lib/tenant.js +0 -65
  608. package/dist/lib/upload.js +0 -112
  609. package/dist/lib/uploadRegistry.d.ts +0 -18
  610. package/dist/lib/uploadRegistry.js +0 -83
  611. package/dist/lib/ws.d.ts +0 -22
  612. package/dist/lib/ws.js +0 -96
  613. package/dist/lib/wsHeartbeat.d.ts +0 -12
  614. package/dist/lib/wsHeartbeat.js +0 -57
  615. package/dist/lib/wsMessages.d.ts +0 -40
  616. package/dist/lib/wsMessages.js +0 -330
  617. package/dist/lib/wsPresence.d.ts +0 -25
  618. package/dist/lib/wsPresence.js +0 -99
  619. package/dist/middleware/auditLog.js +0 -39
  620. package/dist/middleware/bearerAuth.d.ts +0 -2
  621. package/dist/middleware/bearerAuth.js +0 -11
  622. package/dist/middleware/cacheResponse.d.ts +0 -15
  623. package/dist/middleware/cacheResponse.js +0 -178
  624. package/dist/middleware/captcha.js +0 -36
  625. package/dist/middleware/csrf.js +0 -129
  626. package/dist/middleware/identify.d.ts +0 -3
  627. package/dist/middleware/identify.js +0 -122
  628. package/dist/middleware/index.js +0 -1
  629. package/dist/middleware/metrics.d.ts +0 -9
  630. package/dist/middleware/metrics.js +0 -26
  631. package/dist/middleware/rateLimit.js +0 -22
  632. package/dist/middleware/requestId.d.ts +0 -3
  633. package/dist/middleware/scimAuth.d.ts +0 -8
  634. package/dist/middleware/scimAuth.js +0 -29
  635. package/dist/middleware/tenant.d.ts +0 -5
  636. package/dist/middleware/upload.d.ts +0 -5
  637. package/dist/middleware/userAuth.d.ts +0 -3
  638. package/dist/middleware/userAuth.js +0 -6
  639. package/dist/models/AuditLog.d.ts +0 -30
  640. package/dist/models/AuditLog.js +0 -39
  641. package/dist/models/AuthUser.js +0 -55
  642. package/dist/models/Group.d.ts +0 -21
  643. package/dist/models/Group.js +0 -28
  644. package/dist/models/GroupMembership.js +0 -25
  645. package/dist/models/TenantRole.d.ts +0 -15
  646. package/dist/models/TenantRole.js +0 -23
  647. package/dist/routes/auth.d.ts +0 -12
  648. package/dist/routes/auth.js +0 -744
  649. package/dist/routes/groups.js +0 -346
  650. package/dist/routes/health.d.ts +0 -1
  651. package/dist/routes/health.js +0 -22
  652. package/dist/routes/home.d.ts +0 -1
  653. package/dist/routes/home.js +0 -16
  654. package/dist/routes/jobs.d.ts +0 -2
  655. package/dist/routes/m2m.d.ts +0 -2
  656. package/dist/routes/m2m.js +0 -72
  657. package/dist/routes/metrics.d.ts +0 -8
  658. package/dist/routes/metrics.js +0 -55
  659. package/dist/routes/mfa.d.ts +0 -5
  660. package/dist/routes/mfa.js +0 -628
  661. package/dist/routes/oauth.d.ts +0 -2
  662. package/dist/routes/oauth.js +0 -520
  663. package/dist/routes/oidc.d.ts +0 -2
  664. package/dist/routes/oidc.js +0 -29
  665. package/dist/routes/passkey.d.ts +0 -1
  666. package/dist/routes/passkey.js +0 -157
  667. package/dist/routes/saml.d.ts +0 -2
  668. package/dist/routes/saml.js +0 -86
  669. package/dist/routes/scim.d.ts +0 -2
  670. package/dist/routes/scim.js +0 -255
  671. package/dist/routes/uploads.js +0 -227
  672. package/dist/schemas/auth.js +0 -30
  673. package/dist/server.d.ts +0 -57
  674. package/dist/server.js +0 -112
  675. package/dist/services/auth.d.ts +0 -29
  676. package/dist/services/auth.js +0 -238
  677. package/dist/ws/index.d.ts +0 -10
  678. package/dist/ws/index.js +0 -39
  679. package/docs/sections/adding-middleware/full.md +0 -35
  680. package/docs/sections/adding-models/full.md +0 -125
  681. package/docs/sections/adding-models/overview.md +0 -13
  682. package/docs/sections/adding-routes/full.md +0 -182
  683. package/docs/sections/adding-routes/overview.md +0 -23
  684. package/docs/sections/auth-flow/full.md +0 -790
  685. package/docs/sections/auth-flow/overview.md +0 -10
  686. package/docs/sections/auth-security-examples/full.md +0 -388
  687. package/docs/sections/authentication/full.md +0 -130
  688. package/docs/sections/authentication/overview.md +0 -5
  689. package/docs/sections/cli/full.md +0 -42
  690. package/docs/sections/configuration/full.md +0 -172
  691. package/docs/sections/configuration/overview.md +0 -18
  692. package/docs/sections/configuration-example/full.md +0 -117
  693. package/docs/sections/configuration-example/overview.md +0 -30
  694. package/docs/sections/documentation/full.md +0 -171
  695. package/docs/sections/environment-variables/full.md +0 -55
  696. package/docs/sections/exports/full.md +0 -123
  697. package/docs/sections/extending-context/full.md +0 -59
  698. package/docs/sections/header.md +0 -3
  699. package/docs/sections/installation/full.md +0 -6
  700. package/docs/sections/jobs/full.md +0 -140
  701. package/docs/sections/jobs/overview.md +0 -15
  702. package/docs/sections/logging/full.md +0 -83
  703. package/docs/sections/metrics/full.md +0 -131
  704. package/docs/sections/mongodb-connections/full.md +0 -45
  705. package/docs/sections/mongodb-connections/overview.md +0 -7
  706. package/docs/sections/multi-tenancy/full.md +0 -66
  707. package/docs/sections/multi-tenancy/overview.md +0 -15
  708. package/docs/sections/oauth/full.md +0 -189
  709. package/docs/sections/oauth/overview.md +0 -16
  710. package/docs/sections/package-development/full.md +0 -7
  711. package/docs/sections/pagination/full.md +0 -93
  712. package/docs/sections/passkey-login/full.md +0 -90
  713. package/docs/sections/passkey-login/overview.md +0 -1
  714. package/docs/sections/peer-dependencies/full.md +0 -47
  715. package/docs/sections/quick-start/full.md +0 -43
  716. package/docs/sections/response-caching/full.md +0 -117
  717. package/docs/sections/response-caching/overview.md +0 -13
  718. package/docs/sections/roles/full.md +0 -225
  719. package/docs/sections/roles/overview.md +0 -14
  720. package/docs/sections/running-without-redis/full.md +0 -16
  721. package/docs/sections/running-without-redis-or-mongodb/full.md +0 -60
  722. package/docs/sections/signing/full.md +0 -203
  723. package/docs/sections/stack/full.md +0 -10
  724. package/docs/sections/uploads/full.md +0 -208
  725. package/docs/sections/versioning/full.md +0 -85
  726. package/docs/sections/webhook-auth/full.md +0 -100
  727. package/docs/sections/websocket/full.md +0 -196
  728. package/docs/sections/websocket/overview.md +0 -5
  729. package/docs/sections/websocket-rooms/full.md +0 -102
  730. package/docs/sections/websocket-rooms/overview.md +0 -5
  731. /package/dist/{lib/storageAdapter.js → packages/bunshot-admin/src/types/env.js} +0 -0
  732. /package/dist/{lib → packages/bunshot-auth/src/lib}/fingerprint.d.ts +0 -0
  733. /package/dist/{lib → packages/bunshot-auth/src/lib}/logger.d.ts +0 -0
  734. /package/dist/{lib → packages/bunshot-core/src}/constants.d.ts +0 -0
  735. /package/dist/{lib → packages/bunshot-core/src}/storageAdapter.d.ts +0 -0
  736. /package/dist/{lib → src/framework/lib}/createDtoMapper.d.ts +0 -0
  737. /package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.d.ts +0 -0
  738. /package/dist/{middleware → src/framework/middleware}/cors.d.ts +0 -0
  739. /package/dist/{middleware → src/framework/middleware}/cors.js +0 -0
  740. /package/dist/{middleware → src/framework/middleware}/index.d.ts +0 -0
  741. /package/dist/{middleware → src/framework/middleware}/logger.js +0 -0
  742. /package/dist/{lib → src/shared/lib}/constants.js +0 -0
@@ -0,0 +1,262 @@
1
+ import { createRoute } from '../lib/createRoute';
2
+ import { generateUploadKeyFromFilename, getStorageAdapter } from '../lib/upload';
3
+ import { deleteUploadRecord, getUploadRecord, registerUpload } from '../lib/uploadRegistry';
4
+ import { createPresignedUrl } from '../../lib/signing';
5
+ import { z } from 'zod';
6
+ import { createRouter, getBunshotCtx, getRouteAuth } from '../../../packages/bunshot-core/src/index.js';
7
+ const tags = ['Uploads'];
8
+ async function checkUploadAccess(action, key, userId, tenantId, config, app) {
9
+ const record = await getUploadRecord(key, app);
10
+ const authorize = config.authorization?.authorize;
11
+ const allowExternalKeys = config.allowExternalKeys ?? false;
12
+ if (record) {
13
+ // If the registry record has a tenantId, the requester must match — period.
14
+ if (record.tenantId && record.tenantId !== tenantId) {
15
+ return { allowed: false, notFound: false };
16
+ }
17
+ // Owner match → allow
18
+ if (record.ownerUserId && record.ownerUserId === userId) {
19
+ return { allowed: true, notFound: false };
20
+ }
21
+ // No owner or owner mismatch → try callback
22
+ if (authorize) {
23
+ const ok = await authorize({
24
+ action,
25
+ key,
26
+ userId: userId ?? undefined,
27
+ tenantId: tenantId ?? undefined,
28
+ });
29
+ return { allowed: ok, notFound: false };
30
+ }
31
+ return { allowed: false, notFound: false };
32
+ }
33
+ // Record not in registry
34
+ if (allowExternalKeys) {
35
+ if (authorize) {
36
+ const ok = await authorize({
37
+ action,
38
+ key,
39
+ userId: userId ?? undefined,
40
+ tenantId: tenantId ?? undefined,
41
+ });
42
+ return { allowed: ok, notFound: false };
43
+ }
44
+ return { allowed: false, notFound: false };
45
+ }
46
+ return { allowed: false, notFound: true };
47
+ }
48
+ export const createUploadsRouter = (config) => {
49
+ const router = createRouter();
50
+ const basePath = (config.path ?? '/uploads').replace(/\/$/, '');
51
+ router.use(`${basePath}/*`, async (c, next) => getRouteAuth(getBunshotCtx(c)).userAuth(c, next));
52
+ const BLOCKED_MIME_TYPES = new Set([
53
+ 'application/x-executable',
54
+ 'application/x-sh',
55
+ 'application/x-msdownload',
56
+ 'text/html',
57
+ 'application/x-httpd-php',
58
+ 'application/javascript',
59
+ 'text/javascript',
60
+ ]);
61
+ const presignRoute = createRoute({
62
+ method: 'post',
63
+ path: `${basePath}/presign`,
64
+ tags,
65
+ summary: 'Generate presigned upload URL',
66
+ request: {
67
+ body: {
68
+ content: {
69
+ 'application/json': {
70
+ schema: z.object({
71
+ filename: z
72
+ .string()
73
+ .optional()
74
+ .describe('Original filename (used to derive the storage key extension)'),
75
+ mimeType: z.string().optional().describe('MIME type of the file'),
76
+ expirySeconds: z
77
+ .number()
78
+ .int()
79
+ .positive()
80
+ .optional()
81
+ .describe('URL expiry in seconds'),
82
+ maxBytes: z
83
+ .number()
84
+ .int()
85
+ .positive()
86
+ .max(100 * 1024 * 1024)
87
+ .optional()
88
+ .describe('Maximum allowed file size in bytes (client-enforced via Content-Length header). Defaults to 10MB. Maximum: 100MB.'),
89
+ }),
90
+ },
91
+ },
92
+ },
93
+ },
94
+ responses: {
95
+ 200: {
96
+ description: 'Presigned URL generated',
97
+ content: {
98
+ 'application/json': {
99
+ schema: z.object({ url: z.string(), key: z.string(), maxBytes: z.number().optional() }),
100
+ },
101
+ },
102
+ },
103
+ 400: {
104
+ description: 'File type not allowed',
105
+ content: { 'application/json': { schema: z.object({ error: z.string() }) } },
106
+ },
107
+ 501: {
108
+ description: 'Not implemented by adapter',
109
+ content: { 'application/json': { schema: z.object({ error: z.string() }) } },
110
+ },
111
+ },
112
+ });
113
+ router.openapi(presignRoute, async (c) => {
114
+ const bunshotCtx = c.get('bunshotCtx');
115
+ const adapter = getStorageAdapter(bunshotCtx);
116
+ if (!adapter?.presignPut) {
117
+ return c.json({ error: 'Presigned URLs not supported by the configured storage adapter' }, 501);
118
+ }
119
+ const { filename, mimeType, expirySeconds, maxBytes } = c.req.valid('json');
120
+ if (mimeType && BLOCKED_MIME_TYPES.has(mimeType)) {
121
+ return c.json({ error: 'File type not allowed.' }, 400);
122
+ }
123
+ const app = bunshotCtx.app;
124
+ const userId = c.get('authUserId') ?? undefined;
125
+ const tenantId = c.get('tenantId') ?? undefined;
126
+ // Server-generates the key — client cannot control the storage path
127
+ const key = generateUploadKeyFromFilename(filename, { userId, tenantId }, undefined, bunshotCtx);
128
+ const expiry = expirySeconds ?? (typeof config.expirySeconds === 'number' ? config.expirySeconds : 3600);
129
+ const url = await adapter.presignPut(key, { expirySeconds: expiry, mimeType });
130
+ // Register the upload for ownership tracking
131
+ await registerUpload({
132
+ key,
133
+ ownerUserId: userId,
134
+ tenantId,
135
+ mimeType,
136
+ bucket: c.get('uploadBucket') ?? undefined,
137
+ createdAt: Date.now(),
138
+ }, app);
139
+ return c.json({ url, key, ...(maxBytes !== undefined ? { maxBytes } : {}) }, 200);
140
+ });
141
+ const presignGetRoute = createRoute({
142
+ method: 'get',
143
+ path: `${basePath}/presign/:key{.+}`,
144
+ tags,
145
+ summary: 'Generate presigned download URL',
146
+ request: {
147
+ params: z.object({ key: z.string() }),
148
+ query: z.object({
149
+ expiry: z.string().optional().describe('URL expiry in seconds (default: 3600)'),
150
+ }),
151
+ },
152
+ responses: {
153
+ 200: {
154
+ description: 'Presigned download URL',
155
+ content: {
156
+ 'application/json': {
157
+ schema: z.object({
158
+ url: z.string(),
159
+ expiresAt: z.number().describe('Unix timestamp (seconds) when the URL expires'),
160
+ }),
161
+ },
162
+ },
163
+ },
164
+ 403: {
165
+ description: 'Forbidden — not the owner or unauthorized',
166
+ content: { 'application/json': { schema: z.object({ error: z.string() }) } },
167
+ },
168
+ 404: {
169
+ description: 'Key not found in upload registry',
170
+ content: { 'application/json': { schema: z.object({ error: z.string() }) } },
171
+ },
172
+ 501: {
173
+ description: 'Not implemented',
174
+ content: { 'application/json': { schema: z.object({ error: z.string() }) } },
175
+ },
176
+ },
177
+ });
178
+ router.openapi(presignGetRoute, async (c) => {
179
+ const { key } = c.req.valid('param');
180
+ const { expiry: expiryStr } = c.req.valid('query');
181
+ const userId = c.get('authUserId');
182
+ const tenantId = c.get('tenantId');
183
+ const app = c.get('bunshotCtx').app;
184
+ const { allowed, notFound } = await checkUploadAccess('read', key, userId, tenantId, config, app);
185
+ if (notFound)
186
+ return c.json({ error: 'Not found' }, 404);
187
+ if (!allowed)
188
+ return c.json({ error: 'Forbidden' }, 403);
189
+ const expirySeconds = expiryStr
190
+ ? parseInt(expiryStr, 10)
191
+ : typeof config.expirySeconds === 'number'
192
+ ? config.expirySeconds
193
+ : 3600;
194
+ const signingCfg = c.get('bunshotCtx').signing;
195
+ if (signingCfg?.presignedUrls) {
196
+ const secret = signingCfg.secret ?? null;
197
+ if (!secret)
198
+ return c.json({ error: 'Signing secret not configured' }, 501);
199
+ const defaultExpiry = typeof signingCfg.presignedUrls === 'object'
200
+ ? (signingCfg.presignedUrls.defaultExpiry ?? expirySeconds)
201
+ : expirySeconds;
202
+ const base = new URL(c.req.url);
203
+ base.pathname = `${basePath}/download/${key}`;
204
+ base.search = '';
205
+ const url = createPresignedUrl(base.toString(), key, { method: 'GET', expiry: defaultExpiry }, secret);
206
+ const expiresAt = Math.floor(Date.now() / 1000) + defaultExpiry;
207
+ return c.json({ url, expiresAt }, 200);
208
+ }
209
+ // Fallback: adapter.presignGet (S3 only)
210
+ const adapter = getStorageAdapter(c.get('bunshotCtx'));
211
+ if (!adapter?.presignGet) {
212
+ return c.json({
213
+ error: 'Presigned download URLs not supported. Enable signing.presignedUrls or use an S3 adapter.',
214
+ }, 501);
215
+ }
216
+ const url = await adapter.presignGet(key, { expirySeconds });
217
+ const expiresAt = Math.floor(Date.now() / 1000) + expirySeconds;
218
+ return c.json({ url, expiresAt }, 200);
219
+ });
220
+ const deleteRoute = createRoute({
221
+ method: 'delete',
222
+ path: `${basePath}/:key{.+}`,
223
+ tags,
224
+ summary: 'Delete an uploaded file',
225
+ request: {
226
+ params: z.object({ key: z.string() }),
227
+ },
228
+ responses: {
229
+ 204: { description: 'Deleted' },
230
+ 403: {
231
+ description: 'Forbidden — not the owner or unauthorized',
232
+ content: { 'application/json': { schema: z.object({ error: z.string() }) } },
233
+ },
234
+ 404: {
235
+ description: 'Key not found in upload registry',
236
+ content: { 'application/json': { schema: z.object({ error: z.string() }) } },
237
+ },
238
+ 500: {
239
+ description: 'No storage adapter configured',
240
+ content: { 'application/json': { schema: z.object({ error: z.string() }) } },
241
+ },
242
+ },
243
+ });
244
+ router.openapi(deleteRoute, async (c) => {
245
+ const adapter = getStorageAdapter(c.get('bunshotCtx'));
246
+ if (!adapter)
247
+ return c.json({ error: 'No storage adapter configured' }, 500);
248
+ const { key } = c.req.valid('param');
249
+ const userId = c.get('authUserId');
250
+ const tenantId = c.get('tenantId');
251
+ const app = c.get('bunshotCtx').app;
252
+ const { allowed, notFound } = await checkUploadAccess('delete', key, userId, tenantId, config, app);
253
+ if (notFound)
254
+ return c.json({ error: 'Not found' }, 404);
255
+ if (!allowed)
256
+ return c.json({ error: 'Forbidden' }, 403);
257
+ await adapter.delete(key);
258
+ await deleteUploadRecord(key, app);
259
+ return c.body(null, 204);
260
+ });
261
+ return router;
262
+ };
@@ -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;