@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.
- package/.oclif.manifest.json +39 -0
- package/README.md +8282 -2147
- package/dist/cli/commands/init.js +690 -0
- package/dist/cli/index.js +6 -0
- package/dist/cli.js +4 -4
- package/dist/packages/bunshot-admin/src/index.d.ts +15 -0
- package/dist/packages/bunshot-admin/src/index.js +11 -0
- package/dist/packages/bunshot-admin/src/lib/resourceTypes.d.ts +8 -0
- package/dist/packages/bunshot-admin/src/lib/resourceTypes.js +33 -0
- package/dist/packages/bunshot-admin/src/lib/typedRoute.d.ts +14 -0
- package/dist/packages/bunshot-admin/src/lib/typedRoute.js +17 -0
- package/dist/packages/bunshot-admin/src/plugin.d.ts +4 -0
- package/dist/packages/bunshot-admin/src/plugin.js +46 -0
- package/dist/packages/bunshot-admin/src/providers/auth0Access.d.ts +6 -0
- package/dist/packages/bunshot-admin/src/providers/auth0Access.js +32 -0
- package/dist/packages/bunshot-admin/src/routes/admin.d.ts +10 -0
- package/dist/packages/bunshot-admin/src/routes/admin.js +923 -0
- package/dist/packages/bunshot-admin/src/routes/mail.d.ts +6 -0
- package/dist/packages/bunshot-admin/src/routes/mail.js +114 -0
- package/dist/packages/bunshot-admin/src/routes/permissions.d.ts +8 -0
- package/dist/packages/bunshot-admin/src/routes/permissions.js +315 -0
- package/dist/packages/bunshot-admin/src/types/config.d.ts +16 -0
- package/dist/packages/bunshot-admin/src/types/config.js +37 -0
- package/dist/packages/bunshot-admin/src/types/env.d.ts +14 -0
- package/dist/packages/bunshot-admin/src/types/provider.d.ts +1 -0
- package/dist/packages/bunshot-admin/src/types/provider.js +4 -0
- package/dist/packages/bunshot-auth/src/adapters/memoryAuth.d.ts +66 -0
- package/dist/packages/bunshot-auth/src/adapters/memoryAuth.js +1063 -0
- package/dist/packages/bunshot-auth/src/adapters/mongoAuth.d.ts +2 -0
- package/dist/packages/bunshot-auth/src/adapters/mongoAuth.js +536 -0
- package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.d.ts +88 -0
- package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.js +1366 -0
- package/dist/packages/bunshot-auth/src/admin/bunshotAccess.d.ts +2 -0
- package/dist/packages/bunshot-auth/src/admin/bunshotAccess.js +23 -0
- package/dist/packages/bunshot-auth/src/admin/bunshotUsers.d.ts +5 -0
- package/dist/packages/bunshot-auth/src/admin/bunshotUsers.js +131 -0
- package/dist/packages/bunshot-auth/src/bootstrap.d.ts +38 -0
- package/dist/packages/bunshot-auth/src/bootstrap.js +384 -0
- package/dist/packages/bunshot-auth/src/config/appConfig.d.ts +3 -0
- package/dist/packages/bunshot-auth/src/config/appConfig.js +4 -0
- package/dist/packages/bunshot-auth/src/config/authConfig.d.ts +478 -0
- package/dist/packages/bunshot-auth/src/config/authConfig.js +46 -0
- package/dist/packages/bunshot-auth/src/config/configLock.d.ts +2 -0
- package/dist/packages/bunshot-auth/src/config/configLock.js +10 -0
- package/dist/packages/bunshot-auth/src/index.d.ts +25 -0
- package/dist/packages/bunshot-auth/src/index.js +23 -0
- package/dist/packages/bunshot-auth/src/infra/mongo.d.ts +15 -0
- package/dist/packages/bunshot-auth/src/infra/mongo.js +44 -0
- package/dist/packages/bunshot-auth/src/infra/queue.d.ts +14 -0
- package/dist/packages/bunshot-auth/src/infra/queue.js +27 -0
- package/dist/packages/bunshot-auth/src/infra/redis.d.ts +5 -0
- package/dist/packages/bunshot-auth/src/infra/redis.js +15 -0
- package/dist/packages/bunshot-auth/src/infra/signing.d.ts +7 -0
- package/dist/packages/bunshot-auth/src/infra/signing.js +8 -0
- package/dist/packages/bunshot-auth/src/lib/accountLockout.d.ts +34 -0
- package/dist/packages/bunshot-auth/src/lib/accountLockout.js +244 -0
- package/dist/packages/bunshot-auth/src/lib/adapterTiers.d.ts +1 -0
- package/dist/packages/bunshot-auth/src/lib/adapterTiers.js +1 -0
- package/dist/packages/bunshot-auth/src/lib/authAdapter.d.ts +1 -0
- package/dist/packages/bunshot-auth/src/lib/authAdapter.js +1 -0
- package/dist/packages/bunshot-auth/src/lib/authContext.d.ts +15 -0
- package/dist/packages/bunshot-auth/src/lib/authContext.js +1 -0
- package/dist/packages/bunshot-auth/src/lib/authEventBus.d.ts +4 -0
- package/dist/packages/bunshot-auth/src/lib/authEventBus.js +15 -0
- package/dist/packages/bunshot-auth/src/lib/authRateLimit.d.ts +28 -0
- package/dist/packages/bunshot-auth/src/lib/authRateLimit.js +205 -0
- package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.d.ts +8 -2
- package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.js +22 -9
- package/dist/packages/bunshot-auth/src/lib/cache.d.ts +12 -0
- package/dist/packages/bunshot-auth/src/lib/cache.js +120 -0
- package/dist/packages/bunshot-auth/src/lib/clientIp.d.ts +4 -0
- package/dist/{lib → packages/bunshot-auth/src/lib}/clientIp.js +14 -7
- package/dist/packages/bunshot-auth/src/lib/cookieOptions.d.ts +27 -0
- package/dist/packages/bunshot-auth/src/lib/cookieOptions.js +33 -0
- package/dist/packages/bunshot-auth/src/lib/credentialStuffing.d.ts +40 -0
- package/dist/packages/bunshot-auth/src/lib/credentialStuffing.js +221 -0
- package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.d.ts +19 -0
- package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.js +148 -0
- package/dist/packages/bunshot-auth/src/lib/emailTemplates.d.ts +23 -0
- package/dist/packages/bunshot-auth/src/lib/emailTemplates.js +265 -0
- package/dist/packages/bunshot-auth/src/lib/emailVerification.d.ts +30 -0
- package/dist/packages/bunshot-auth/src/lib/emailVerification.js +200 -0
- package/dist/packages/bunshot-auth/src/lib/env.d.ts +1 -0
- package/dist/packages/bunshot-auth/src/lib/env.js +3 -0
- package/dist/packages/bunshot-auth/src/lib/fingerprint.js +36 -0
- package/dist/{lib → packages/bunshot-auth/src/lib}/groups.d.ts +15 -16
- package/dist/{lib → packages/bunshot-auth/src/lib}/groups.js +22 -34
- package/dist/packages/bunshot-auth/src/lib/jwks.d.ts +28 -0
- package/dist/packages/bunshot-auth/src/lib/jwks.js +79 -0
- package/dist/packages/bunshot-auth/src/lib/jwt.d.ts +12 -0
- package/dist/packages/bunshot-auth/src/lib/jwt.js +86 -0
- package/dist/{lib → packages/bunshot-auth/src/lib}/logger.js +3 -3
- package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.d.ts +5 -4
- package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.js +6 -10
- package/dist/packages/bunshot-auth/src/lib/magicLink.d.ts +13 -0
- package/dist/packages/bunshot-auth/src/lib/magicLink.js +145 -0
- package/dist/packages/bunshot-auth/src/lib/mfaChallenge.d.ts +60 -0
- package/dist/packages/bunshot-auth/src/lib/mfaChallenge.js +419 -0
- package/dist/packages/bunshot-auth/src/lib/oauth.d.ts +82 -0
- package/dist/packages/bunshot-auth/src/lib/oauth.js +177 -0
- package/dist/packages/bunshot-auth/src/lib/oauthCode.d.ts +19 -0
- package/dist/packages/bunshot-auth/src/lib/oauthCode.js +182 -0
- package/dist/packages/bunshot-auth/src/lib/oauthReauth.d.ts +19 -0
- package/dist/packages/bunshot-auth/src/lib/oauthReauth.js +255 -0
- package/dist/packages/bunshot-auth/src/lib/organization.d.ts +66 -0
- package/dist/packages/bunshot-auth/src/lib/organization.js +225 -0
- package/dist/packages/bunshot-auth/src/lib/passwordHistory.d.ts +12 -0
- package/dist/packages/bunshot-auth/src/lib/passwordHistory.js +31 -0
- package/dist/packages/bunshot-auth/src/lib/resetPassword.d.ts +20 -0
- package/dist/packages/bunshot-auth/src/lib/resetPassword.js +148 -0
- package/dist/packages/bunshot-auth/src/lib/roles.d.ts +9 -0
- package/dist/packages/bunshot-auth/src/lib/roles.js +93 -0
- package/dist/packages/bunshot-auth/src/lib/saml.d.ts +29 -0
- package/dist/packages/bunshot-auth/src/lib/saml.js +73 -0
- package/dist/packages/bunshot-auth/src/lib/samlRequestId.d.ts +13 -0
- package/dist/packages/bunshot-auth/src/lib/samlRequestId.js +129 -0
- package/dist/{lib → packages/bunshot-auth/src/lib}/scim.d.ts +7 -7
- package/dist/{lib → packages/bunshot-auth/src/lib}/scim.js +15 -13
- package/dist/packages/bunshot-auth/src/lib/securityEventWiring.d.ts +22 -0
- package/dist/packages/bunshot-auth/src/lib/securityEventWiring.js +65 -0
- package/dist/packages/bunshot-auth/src/lib/session.d.ts +45 -0
- package/dist/packages/bunshot-auth/src/lib/session.js +1211 -0
- package/dist/packages/bunshot-auth/src/lib/storeInfra.d.ts +26 -0
- package/dist/packages/bunshot-auth/src/lib/storeInfra.js +18 -0
- package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.d.ts +3 -2
- package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.js +2 -5
- package/dist/packages/bunshot-auth/src/lib/validateAdapter.d.ts +16 -0
- package/dist/packages/bunshot-auth/src/lib/validateAdapter.js +161 -0
- package/dist/packages/bunshot-auth/src/middleware/bearerAuth.d.ts +13 -0
- package/dist/packages/bunshot-auth/src/middleware/bearerAuth.js +58 -0
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/csrf.d.ts +5 -4
- package/dist/packages/bunshot-auth/src/middleware/csrf.js +138 -0
- package/dist/packages/bunshot-auth/src/middleware/identify.d.ts +4 -0
- package/dist/packages/bunshot-auth/src/middleware/identify.js +124 -0
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.d.ts +2 -2
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.js +10 -8
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.d.ts +2 -2
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.js +20 -16
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.d.ts +2 -2
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.js +6 -6
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.d.ts +2 -2
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.js +8 -7
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.d.ts +2 -2
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.js +7 -6
- package/dist/packages/bunshot-auth/src/middleware/scimAuth.d.ts +8 -0
- package/dist/packages/bunshot-auth/src/middleware/scimAuth.js +29 -0
- package/dist/packages/bunshot-auth/src/middleware/userAuth.d.ts +3 -0
- package/dist/packages/bunshot-auth/src/middleware/userAuth.js +6 -0
- package/dist/{models → packages/bunshot-auth/src/models}/AuthUser.d.ts +12 -8
- package/dist/packages/bunshot-auth/src/models/AuthUser.js +53 -0
- package/dist/packages/bunshot-auth/src/models/Group.d.ts +19 -0
- package/dist/packages/bunshot-auth/src/models/Group.js +22 -0
- package/dist/{models → packages/bunshot-auth/src/models}/GroupMembership.d.ts +6 -8
- package/dist/packages/bunshot-auth/src/models/GroupMembership.js +19 -0
- package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.d.ts +1 -1
- package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.js +5 -5
- package/dist/packages/bunshot-auth/src/models/TenantRole.d.ts +13 -0
- package/dist/packages/bunshot-auth/src/models/TenantRole.js +17 -0
- package/dist/packages/bunshot-auth/src/plugin.d.ts +4 -0
- package/dist/packages/bunshot-auth/src/plugin.js +274 -0
- package/dist/packages/bunshot-auth/src/routes/auth.d.ts +15 -0
- package/dist/packages/bunshot-auth/src/routes/auth.js +1624 -0
- package/dist/packages/bunshot-auth/src/routes/groups.d.ts +4 -0
- package/dist/packages/bunshot-auth/src/routes/groups.js +481 -0
- package/dist/packages/bunshot-auth/src/routes/m2m.d.ts +2 -0
- package/dist/packages/bunshot-auth/src/routes/m2m.js +145 -0
- package/dist/packages/bunshot-auth/src/routes/mfa.d.ts +6 -0
- package/dist/packages/bunshot-auth/src/routes/mfa.js +991 -0
- package/dist/packages/bunshot-auth/src/routes/oauth.d.ts +3 -0
- package/dist/packages/bunshot-auth/src/routes/oauth.js +1727 -0
- package/dist/packages/bunshot-auth/src/routes/oidc.d.ts +2 -0
- package/dist/packages/bunshot-auth/src/routes/oidc.js +84 -0
- package/dist/packages/bunshot-auth/src/routes/organizations.d.ts +3 -0
- package/dist/packages/bunshot-auth/src/routes/organizations.js +741 -0
- package/dist/packages/bunshot-auth/src/routes/passkey.d.ts +2 -0
- package/dist/packages/bunshot-auth/src/routes/passkey.js +199 -0
- package/dist/packages/bunshot-auth/src/routes/saml.d.ts +2 -0
- package/dist/packages/bunshot-auth/src/routes/saml.js +226 -0
- package/dist/packages/bunshot-auth/src/routes/scim.d.ts +3 -0
- package/dist/packages/bunshot-auth/src/routes/scim.js +588 -0
- package/dist/packages/bunshot-auth/src/runtime.d.ts +52 -0
- package/dist/packages/bunshot-auth/src/runtime.js +11 -0
- package/dist/{schemas → packages/bunshot-auth/src/schemas}/auth.d.ts +4 -5
- package/dist/packages/bunshot-auth/src/schemas/auth.js +24 -0
- package/dist/packages/bunshot-auth/src/schemas/error.d.ts +10 -0
- package/dist/packages/bunshot-auth/src/schemas/error.js +10 -0
- package/dist/packages/bunshot-auth/src/schemas/success.d.ts +10 -0
- package/dist/packages/bunshot-auth/src/schemas/success.js +10 -0
- package/dist/packages/bunshot-auth/src/services/auth.d.ts +39 -0
- package/dist/packages/bunshot-auth/src/services/auth.js +378 -0
- package/dist/{services → packages/bunshot-auth/src/services}/mfa.d.ts +41 -17
- package/dist/{services → packages/bunshot-auth/src/services}/mfa.js +259 -183
- package/dist/packages/bunshot-auth/src/testing.d.ts +31 -0
- package/dist/packages/bunshot-auth/src/testing.js +23 -0
- package/dist/packages/bunshot-auth/src/types/adapter.d.ts +1 -0
- package/dist/packages/bunshot-auth/src/types/adapter.js +1 -0
- package/dist/packages/bunshot-auth/src/types/config.d.ts +152 -0
- package/dist/packages/bunshot-auth/src/types/config.js +179 -0
- package/dist/{routes → packages/bunshot-auth/src/types}/groups.d.ts +2 -3
- package/dist/packages/bunshot-auth/src/types/groups.js +1 -0
- package/dist/packages/bunshot-auth/src/types/oauthCode.d.ts +6 -0
- package/dist/packages/bunshot-auth/src/types/oauthCode.js +1 -0
- package/dist/packages/bunshot-auth/src/types/oauthReauth.d.ts +13 -0
- package/dist/packages/bunshot-auth/src/types/oauthReauth.js +1 -0
- package/dist/packages/bunshot-auth/src/types/redis.d.ts +1 -0
- package/dist/packages/bunshot-auth/src/types/redis.js +1 -0
- package/dist/packages/bunshot-auth/src/types/saml.d.ts +10 -0
- package/dist/packages/bunshot-auth/src/types/saml.js +1 -0
- package/dist/packages/bunshot-auth/src/types/session.d.ts +18 -0
- package/dist/packages/bunshot-auth/src/types/session.js +1 -0
- package/dist/packages/bunshot-auth/src/types/store.d.ts +1 -0
- package/dist/packages/bunshot-auth/src/types/store.js +1 -0
- package/dist/packages/bunshot-core/src/adminProvider.d.ts +95 -0
- package/dist/packages/bunshot-core/src/adminProvider.js +1 -0
- package/dist/packages/bunshot-core/src/auditLog.d.ts +34 -0
- package/dist/packages/bunshot-core/src/auditLog.js +1 -0
- package/dist/packages/bunshot-core/src/auth-adapter.d.ts +227 -0
- package/dist/packages/bunshot-core/src/auth-adapter.js +4 -0
- package/dist/packages/bunshot-core/src/authVariables.d.ts +14 -0
- package/dist/packages/bunshot-core/src/authVariables.js +4 -0
- package/dist/packages/bunshot-core/src/cache.d.ts +12 -0
- package/dist/packages/bunshot-core/src/cache.js +21 -0
- package/dist/{lib → packages/bunshot-core/src}/captcha.d.ts +1 -10
- package/dist/packages/bunshot-core/src/captcha.js +1 -0
- package/dist/packages/bunshot-core/src/clearRegistry.d.ts +6 -0
- package/dist/packages/bunshot-core/src/clearRegistry.js +17 -0
- package/dist/packages/bunshot-core/src/clientIp.d.ts +3 -0
- package/dist/packages/bunshot-core/src/clientIp.js +45 -0
- package/dist/packages/bunshot-core/src/configLock.d.ts +4 -0
- package/dist/packages/bunshot-core/src/configLock.js +7 -0
- package/dist/packages/bunshot-core/src/configValidation.d.ts +22 -0
- package/dist/packages/bunshot-core/src/configValidation.js +39 -0
- package/dist/packages/bunshot-core/src/constants.js +10 -0
- package/dist/packages/bunshot-core/src/context/bunshotContext.d.ts +232 -0
- package/dist/packages/bunshot-core/src/context/bunshotContext.js +1 -0
- package/dist/packages/bunshot-core/src/context/contextAccess.d.ts +3 -0
- package/dist/packages/bunshot-core/src/context/contextAccess.js +16 -0
- package/dist/packages/bunshot-core/src/context/contextStore.d.ts +16 -0
- package/dist/packages/bunshot-core/src/context/contextStore.js +31 -0
- package/dist/packages/bunshot-core/src/context/frameworkConfig.d.ts +38 -0
- package/dist/packages/bunshot-core/src/context/frameworkConfig.js +1 -0
- package/dist/packages/bunshot-core/src/context/index.d.ts +4 -0
- package/dist/packages/bunshot-core/src/context/index.js +2 -0
- package/dist/packages/bunshot-core/src/context.d.ts +40 -0
- package/dist/packages/bunshot-core/src/context.js +35 -0
- package/dist/packages/bunshot-core/src/coreContracts.d.ts +47 -0
- package/dist/packages/bunshot-core/src/coreContracts.js +1 -0
- package/dist/packages/bunshot-core/src/coreRegistrar.d.ts +6 -0
- package/dist/packages/bunshot-core/src/coreRegistrar.js +42 -0
- package/dist/{lib → packages/bunshot-core/src}/createRoute.d.ts +4 -30
- package/dist/{lib → packages/bunshot-core/src}/createRoute.js +39 -88
- package/dist/packages/bunshot-core/src/cronRegistry.d.ts +11 -0
- package/dist/packages/bunshot-core/src/cronRegistry.js +1 -0
- package/dist/packages/bunshot-core/src/crypto.d.ts +43 -0
- package/dist/packages/bunshot-core/src/crypto.js +74 -0
- package/dist/packages/bunshot-core/src/csrf.d.ts +8 -0
- package/dist/packages/bunshot-core/src/csrf.js +1 -0
- package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.d.ts +7 -0
- package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.js +19 -0
- package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.d.ts +6 -0
- package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.js +40 -0
- package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.d.ts +6 -0
- package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.js +24 -0
- package/dist/packages/bunshot-core/src/emailTemplates.d.ts +5 -0
- package/dist/packages/bunshot-core/src/emailTemplates.js +10 -0
- package/dist/{lib/HttpError.d.ts → packages/bunshot-core/src/errors.d.ts} +4 -1
- package/dist/{lib/HttpError.js → packages/bunshot-core/src/errors.js} +7 -1
- package/dist/packages/bunshot-core/src/eventBus.d.ts +270 -0
- package/dist/packages/bunshot-core/src/eventBus.js +143 -0
- package/dist/packages/bunshot-core/src/idempotency.d.ts +18 -0
- package/dist/packages/bunshot-core/src/idempotency.js +1 -0
- package/dist/packages/bunshot-core/src/index.d.ts +60 -0
- package/dist/packages/bunshot-core/src/index.js +34 -0
- package/dist/packages/bunshot-core/src/mail.d.ts +14 -0
- package/dist/packages/bunshot-core/src/mail.js +8 -0
- package/dist/packages/bunshot-core/src/memoryEviction.d.ts +24 -0
- package/dist/packages/bunshot-core/src/memoryEviction.js +52 -0
- package/dist/packages/bunshot-core/src/pagination.d.ts +45 -0
- package/dist/packages/bunshot-core/src/pagination.js +61 -0
- package/dist/packages/bunshot-core/src/permissions.d.ts +64 -0
- package/dist/packages/bunshot-core/src/permissions.js +27 -0
- package/dist/packages/bunshot-core/src/plugin.d.ts +44 -0
- package/dist/packages/bunshot-core/src/plugin.js +1 -0
- package/dist/packages/bunshot-core/src/rateLimit.d.ts +5 -0
- package/dist/packages/bunshot-core/src/rateLimit.js +18 -0
- package/dist/packages/bunshot-core/src/redis.d.ts +21 -0
- package/dist/packages/bunshot-core/src/redis.js +1 -0
- package/dist/packages/bunshot-core/src/routeAuth.d.ts +5 -0
- package/dist/packages/bunshot-core/src/routeAuth.js +11 -0
- package/dist/packages/bunshot-core/src/routeOverrides.d.ts +24 -0
- package/dist/packages/bunshot-core/src/routeOverrides.js +25 -0
- package/dist/packages/bunshot-core/src/routerAdapter.d.ts +6 -0
- package/dist/packages/bunshot-core/src/routerAdapter.js +56 -0
- package/dist/packages/bunshot-core/src/secrets.d.ts +48 -0
- package/dist/packages/bunshot-core/src/secrets.js +8 -0
- package/dist/packages/bunshot-core/src/signing.d.ts +41 -0
- package/dist/packages/bunshot-core/src/signing.js +1 -0
- package/dist/packages/bunshot-core/src/sse.d.ts +36 -0
- package/dist/packages/bunshot-core/src/sse.js +1 -0
- package/dist/packages/bunshot-core/src/storageAdapter.js +1 -0
- package/dist/packages/bunshot-core/src/storeInfra.d.ts +44 -0
- package/dist/packages/bunshot-core/src/storeInfra.js +18 -0
- package/dist/packages/bunshot-core/src/storeType.d.ts +7 -0
- package/dist/packages/bunshot-core/src/storeType.js +1 -0
- package/dist/packages/bunshot-core/src/testing.d.ts +1 -0
- package/dist/packages/bunshot-core/src/testing.js +1 -0
- package/dist/packages/bunshot-core/src/uploadRegistry.d.ts +23 -0
- package/dist/packages/bunshot-core/src/uploadRegistry.js +4 -0
- package/dist/packages/bunshot-core/src/userResolver.d.ts +5 -0
- package/dist/packages/bunshot-core/src/userResolver.js +14 -0
- package/dist/packages/bunshot-core/src/wsMessages.d.ts +42 -0
- package/dist/packages/bunshot-core/src/wsMessages.js +4 -0
- package/dist/packages/bunshot-permissions/src/adapters/memory.d.ts +7 -0
- package/dist/packages/bunshot-permissions/src/adapters/memory.js +73 -0
- package/dist/packages/bunshot-permissions/src/index.d.ts +10 -0
- package/dist/packages/bunshot-permissions/src/index.js +5 -0
- package/dist/packages/bunshot-permissions/src/lib/bootstrap.d.ts +7 -0
- package/dist/packages/bunshot-permissions/src/lib/bootstrap.js +12 -0
- package/dist/packages/bunshot-permissions/src/lib/evaluator.d.ts +10 -0
- package/dist/packages/bunshot-permissions/src/lib/evaluator.js +165 -0
- package/dist/packages/bunshot-permissions/src/lib/registry.d.ts +2 -0
- package/dist/packages/bunshot-permissions/src/lib/registry.js +31 -0
- package/dist/packages/bunshot-permissions/src/lib/validation.d.ts +1 -0
- package/dist/packages/bunshot-permissions/src/lib/validation.js +1 -0
- package/dist/packages/bunshot-permissions/src/types/adapter.d.ts +1 -0
- package/dist/packages/bunshot-permissions/src/types/adapter.js +1 -0
- package/dist/packages/bunshot-permissions/src/types/evaluator.d.ts +1 -0
- package/dist/packages/bunshot-permissions/src/types/evaluator.js +1 -0
- package/dist/packages/bunshot-permissions/src/types/models.d.ts +1 -0
- package/dist/packages/bunshot-permissions/src/types/models.js +1 -0
- package/dist/packages/bunshot-permissions/src/types/registry.d.ts +1 -0
- package/dist/packages/bunshot-permissions/src/types/registry.js +1 -0
- package/dist/packages/bunshot-postgres/src/adapter.d.ts +6 -0
- package/dist/packages/bunshot-postgres/src/adapter.js +794 -0
- package/dist/packages/bunshot-postgres/src/connection.d.ts +15 -0
- package/dist/packages/bunshot-postgres/src/connection.js +16 -0
- package/dist/packages/bunshot-postgres/src/index.d.ts +4 -0
- package/dist/packages/bunshot-postgres/src/index.js +2 -0
- package/dist/packages/bunshot-postgres/src/schema.d.ts +997 -0
- package/dist/packages/bunshot-postgres/src/schema.js +105 -0
- package/dist/src/app.d.ts +230 -0
- package/dist/src/app.js +182 -0
- package/dist/src/cli/commands/init.d.ts +10 -0
- package/dist/src/cli/commands/init.js +709 -0
- package/dist/src/cli/index.d.ts +1 -0
- package/dist/src/cli/index.js +3 -0
- package/dist/src/entrypoints/mongo.d.ts +6 -0
- package/dist/src/entrypoints/mongo.js +4 -0
- package/dist/src/entrypoints/queue.d.ts +2 -0
- package/dist/src/entrypoints/queue.js +1 -0
- package/dist/src/entrypoints/redis.d.ts +1 -0
- package/dist/src/entrypoints/redis.js +1 -0
- package/dist/{adapters → src/framework/adapters}/localStorage.d.ts +1 -1
- package/dist/{adapters → src/framework/adapters}/localStorage.js +10 -10
- package/dist/src/framework/adapters/memoryStorage.d.ts +2 -0
- package/dist/src/framework/adapters/memoryStorage.js +45 -0
- package/dist/{adapters → src/framework/adapters}/s3Storage.d.ts +1 -1
- package/dist/{adapters → src/framework/adapters}/s3Storage.js +12 -12
- package/dist/src/framework/admin/bunshotAccess.d.ts +2 -0
- package/dist/src/framework/admin/bunshotAccess.js +23 -0
- package/dist/src/framework/admin/bunshotUsers.d.ts +2 -0
- package/dist/src/framework/admin/bunshotUsers.js +103 -0
- package/dist/src/framework/admin/index.d.ts +7 -0
- package/dist/src/framework/admin/index.js +21 -0
- package/dist/src/framework/boundaryAdapters/cacheFactories.d.ts +13 -0
- package/dist/src/framework/boundaryAdapters/cacheFactories.js +86 -0
- package/dist/src/framework/boundaryAdapters/index.d.ts +2 -0
- package/dist/src/framework/boundaryAdapters/index.js +1 -0
- package/dist/src/framework/boundaryAdapters.d.ts +17 -0
- package/dist/src/framework/boundaryAdapters.js +62 -0
- package/dist/src/framework/buildContext.d.ts +33 -0
- package/dist/src/framework/buildContext.js +119 -0
- package/dist/src/framework/config/schema.d.ts +447 -0
- package/dist/src/framework/config/schema.js +528 -0
- package/dist/src/framework/createInfrastructure.d.ts +76 -0
- package/dist/src/framework/createInfrastructure.js +221 -0
- package/dist/src/framework/lib/auditLog.d.ts +23 -0
- package/dist/src/framework/lib/auditLog.js +416 -0
- package/dist/src/framework/lib/captcha.d.ts +11 -0
- package/dist/{lib → src/framework/lib}/captcha.js +13 -10
- package/dist/{lib → src/framework/lib}/createDtoMapper.js +4 -4
- package/dist/src/framework/lib/createRoute.d.ts +1 -0
- package/dist/src/framework/lib/createRoute.js +2 -0
- package/dist/{lib → src/framework/lib}/idempotency.d.ts +2 -6
- package/dist/src/framework/lib/idempotency.js +74 -0
- package/dist/src/framework/lib/logger.d.ts +3 -0
- package/dist/src/framework/lib/logger.js +14 -0
- package/dist/src/framework/lib/metrics.d.ts +34 -0
- package/dist/{lib → src/framework/lib}/metrics.js +49 -57
- package/dist/src/framework/lib/pagination.d.ts +42 -0
- package/dist/src/framework/lib/pagination.js +51 -0
- package/dist/src/framework/lib/redisTransport.d.ts +38 -0
- package/dist/src/framework/lib/redisTransport.js +107 -0
- package/dist/src/framework/lib/resolveUserId.d.ts +2 -0
- package/dist/src/framework/lib/resolveUserId.js +5 -0
- package/dist/src/framework/lib/sseCollision.d.ts +6 -0
- package/dist/src/framework/lib/sseCollision.js +26 -0
- package/dist/src/framework/lib/storageAdapter.d.ts +1 -0
- package/dist/src/framework/lib/storageAdapter.js +1 -0
- package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.js +4 -4
- package/dist/src/framework/lib/tenant.d.ts +21 -0
- package/dist/src/framework/lib/tenant.js +70 -0
- package/dist/{lib → src/framework/lib}/upload.d.ts +11 -10
- package/dist/src/framework/lib/upload.js +132 -0
- package/dist/src/framework/lib/uploadRegistry.d.ts +23 -0
- package/dist/src/framework/lib/uploadRegistry.js +34 -0
- package/dist/{lib → src/framework/lib}/validate.d.ts +1 -1
- package/dist/{lib → src/framework/lib}/validate.js +2 -2
- package/dist/src/framework/lib/ws.d.ts +19 -0
- package/dist/src/framework/lib/ws.js +130 -0
- package/dist/src/framework/lib/wsHeartbeat.d.ts +12 -0
- package/dist/src/framework/lib/wsHeartbeat.js +53 -0
- package/dist/src/framework/lib/wsMessages.d.ts +25 -0
- package/dist/src/framework/lib/wsMessages.js +45 -0
- package/dist/src/framework/lib/wsNamespace.d.ts +17 -0
- package/dist/src/framework/lib/wsNamespace.js +19 -0
- package/dist/src/framework/lib/wsPresence.d.ts +17 -0
- package/dist/src/framework/lib/wsPresence.js +84 -0
- package/dist/src/framework/lib/wsTransport.d.ts +38 -0
- package/dist/src/framework/lib/wsTransport.js +9 -0
- package/dist/{lib → src/framework/lib}/zodToMongoose.d.ts +1 -1
- package/dist/{lib → src/framework/lib}/zodToMongoose.js +11 -11
- package/dist/{middleware → src/framework/middleware}/auditLog.d.ts +4 -3
- package/dist/src/framework/middleware/auditLog.js +42 -0
- package/dist/{middleware → src/framework/middleware}/botProtection.d.ts +2 -2
- package/dist/{middleware → src/framework/middleware}/botProtection.js +8 -9
- package/dist/src/framework/middleware/cacheResponse.d.ts +35 -0
- package/dist/src/framework/middleware/cacheResponse.js +126 -0
- package/dist/{middleware → src/framework/middleware}/captcha.d.ts +2 -3
- package/dist/src/framework/middleware/captcha.js +37 -0
- package/dist/{middleware → src/framework/middleware}/errorHandler.d.ts +1 -1
- package/dist/{middleware → src/framework/middleware}/errorHandler.js +2 -2
- package/dist/src/framework/middleware/index.js +1 -0
- package/dist/{middleware → src/framework/middleware}/logger.d.ts +1 -1
- package/dist/src/framework/middleware/metrics.d.ts +12 -0
- package/dist/src/framework/middleware/metrics.js +26 -0
- package/dist/{middleware → src/framework/middleware}/rateLimit.d.ts +2 -2
- package/dist/src/framework/middleware/rateLimit.js +22 -0
- package/dist/src/framework/middleware/requestId.d.ts +3 -0
- package/dist/{middleware → src/framework/middleware}/requestId.js +2 -2
- package/dist/{middleware → src/framework/middleware}/requestLogger.d.ts +3 -3
- package/dist/{middleware → src/framework/middleware}/requestLogger.js +17 -12
- package/dist/{middleware → src/framework/middleware}/requestSigning.d.ts +2 -2
- package/dist/{middleware → src/framework/middleware}/requestSigning.js +18 -20
- package/dist/src/framework/middleware/tenant.d.ts +14 -0
- package/dist/{middleware → src/framework/middleware}/tenant.js +31 -27
- package/dist/src/framework/middleware/upload.d.ts +5 -0
- package/dist/{middleware → src/framework/middleware}/upload.js +4 -4
- package/dist/{middleware → src/framework/middleware}/webhookAuth.d.ts +3 -3
- package/dist/{middleware → src/framework/middleware}/webhookAuth.js +11 -12
- package/dist/src/framework/models/AuditLog.d.ts +21 -0
- package/dist/src/framework/models/AuditLog.js +31 -0
- package/dist/src/framework/mountMiddleware.d.ts +91 -0
- package/dist/src/framework/mountMiddleware.js +128 -0
- package/dist/src/framework/mountOptionalEndpoints.d.ts +103 -0
- package/dist/src/framework/mountOptionalEndpoints.js +47 -0
- package/dist/src/framework/mountRoutes.d.ts +21 -0
- package/dist/src/framework/mountRoutes.js +144 -0
- package/dist/src/framework/persistence/cronRegistry.d.ts +28 -0
- package/dist/src/framework/persistence/cronRegistry.js +139 -0
- package/dist/src/framework/persistence/idempotency.d.ts +26 -0
- package/dist/src/framework/persistence/idempotency.js +178 -0
- package/dist/src/framework/persistence/index.d.ts +6 -0
- package/dist/src/framework/persistence/index.js +8 -0
- package/dist/src/framework/persistence/storeInfra.d.ts +9 -0
- package/dist/src/framework/persistence/storeInfra.js +1 -0
- package/dist/src/framework/persistence/uploadRegistry.d.ts +35 -0
- package/dist/src/framework/persistence/uploadRegistry.js +235 -0
- package/dist/src/framework/persistence/wsMessages.d.ts +22 -0
- package/dist/src/framework/persistence/wsMessages.js +296 -0
- package/dist/src/framework/preloadSchemas.d.ts +24 -0
- package/dist/src/framework/preloadSchemas.js +42 -0
- package/dist/src/framework/registerBoundaryAdapters.d.ts +23 -0
- package/dist/src/framework/registerBoundaryAdapters.js +46 -0
- package/dist/src/framework/routes/admin.d.ts +9 -0
- package/dist/src/framework/routes/admin.js +361 -0
- package/dist/src/framework/routes/health.d.ts +1 -0
- package/dist/src/framework/routes/health.js +21 -0
- package/dist/src/framework/routes/home.d.ts +1 -0
- package/dist/src/framework/routes/home.js +18 -0
- package/dist/src/framework/routes/jobs.d.ts +3 -0
- package/dist/{routes → src/framework/routes}/jobs.js +128 -103
- package/dist/src/framework/routes/metrics.d.ts +10 -0
- package/dist/src/framework/routes/metrics.js +57 -0
- package/dist/{routes → src/framework/routes}/uploads.d.ts +3 -3
- package/dist/src/framework/routes/uploads.js +262 -0
- package/dist/src/framework/runPluginLifecycle.d.ts +27 -0
- package/dist/src/framework/runPluginLifecycle.js +121 -0
- package/dist/src/framework/secrets/frameworkSecretSchema.d.ts +58 -0
- package/dist/src/framework/secrets/frameworkSecretSchema.js +20 -0
- package/dist/src/framework/secrets/index.d.ts +9 -0
- package/dist/src/framework/secrets/index.js +7 -0
- package/dist/src/framework/secrets/providers/envProvider.d.ts +15 -0
- package/dist/src/framework/secrets/providers/envProvider.js +18 -0
- package/dist/src/framework/secrets/providers/fileProvider.d.ts +8 -0
- package/dist/src/framework/secrets/providers/fileProvider.js +82 -0
- package/dist/src/framework/secrets/providers/ssmProvider.d.ts +20 -0
- package/dist/src/framework/secrets/providers/ssmProvider.js +127 -0
- package/dist/src/framework/secrets/resolveSecretBundle.d.ts +53 -0
- package/dist/src/framework/secrets/resolveSecretBundle.js +84 -0
- package/dist/src/framework/secrets/resolveSecrets.d.ts +18 -0
- package/dist/src/framework/secrets/resolveSecrets.js +34 -0
- package/dist/src/framework/sse/index.d.ts +21 -0
- package/dist/src/framework/sse/index.js +109 -0
- package/dist/src/framework/ws/index.d.ts +11 -0
- package/dist/src/framework/ws/index.js +8 -0
- package/dist/src/index.d.ts +87 -0
- package/dist/src/index.js +58 -0
- package/dist/src/lib/appConfig.d.ts +7 -0
- package/dist/src/lib/appConfig.js +27 -0
- package/dist/src/lib/appMeta.d.ts +7 -0
- package/dist/src/lib/appMeta.js +3 -0
- package/dist/src/lib/authConfig.d.ts +532 -0
- package/dist/{lib/appConfig.js → src/lib/authConfig.js} +75 -17
- package/dist/{lib → src/lib}/context.d.ts +6 -12
- package/dist/{lib → src/lib}/context.js +5 -5
- package/dist/src/lib/logger.d.ts +1 -0
- package/dist/src/lib/logger.js +1 -0
- package/dist/src/lib/mongo.d.ts +58 -0
- package/dist/src/lib/mongo.js +96 -0
- package/dist/src/lib/queue.d.ts +72 -0
- package/dist/src/lib/queue.js +152 -0
- package/dist/src/lib/redis.d.ts +28 -0
- package/dist/src/lib/redis.js +72 -0
- package/dist/{lib → src/lib}/signing.d.ts +2 -2
- package/dist/src/lib/signing.js +210 -0
- package/dist/src/lib/signingConfig.d.ts +40 -0
- package/dist/src/lib/signingConfig.js +28 -0
- package/dist/src/server.d.ts +146 -0
- package/dist/src/server.js +469 -0
- package/dist/src/shared/lib/HttpError.d.ts +1 -0
- package/dist/src/shared/lib/HttpError.js +2 -0
- package/dist/src/shared/lib/constants.d.ts +10 -0
- package/dist/src/shared/lib/crypto.d.ts +43 -0
- package/dist/src/shared/lib/crypto.js +74 -0
- package/dist/src/shared/lib/signing.d.ts +52 -0
- package/dist/{lib → src/shared/lib}/signing.js +35 -8
- package/dist/src/testing.d.ts +34 -0
- package/dist/src/testing.js +93 -0
- package/package.json +60 -24
- package/dist/adapters/memoryAuth.d.ts +0 -52
- package/dist/adapters/memoryAuth.js +0 -749
- package/dist/adapters/memoryStorage.d.ts +0 -3
- package/dist/adapters/memoryStorage.js +0 -44
- package/dist/adapters/mongoAuth.d.ts +0 -2
- package/dist/adapters/mongoAuth.js +0 -403
- package/dist/adapters/sqliteAuth.d.ts +0 -72
- package/dist/adapters/sqliteAuth.js +0 -858
- package/dist/app.d.ts +0 -559
- package/dist/app.js +0 -651
- package/dist/entrypoints/mongo.d.ts +0 -5
- package/dist/entrypoints/mongo.js +0 -4
- package/dist/entrypoints/queue.d.ts +0 -2
- package/dist/entrypoints/queue.js +0 -1
- package/dist/entrypoints/redis.d.ts +0 -1
- package/dist/entrypoints/redis.js +0 -1
- package/dist/index.d.ts +0 -117
- package/dist/index.js +0 -88
- package/dist/lib/appConfig.d.ts +0 -275
- package/dist/lib/auditLog.d.ts +0 -58
- package/dist/lib/auditLog.js +0 -218
- package/dist/lib/authAdapter.d.ts +0 -246
- package/dist/lib/authAdapter.js +0 -7
- package/dist/lib/authRateLimit.d.ts +0 -13
- package/dist/lib/authRateLimit.js +0 -117
- package/dist/lib/clientIp.d.ts +0 -14
- package/dist/lib/credentialStuffing.d.ts +0 -31
- package/dist/lib/credentialStuffing.js +0 -77
- package/dist/lib/crypto.d.ts +0 -11
- package/dist/lib/crypto.js +0 -22
- package/dist/lib/deletionCancelToken.d.ts +0 -12
- package/dist/lib/deletionCancelToken.js +0 -88
- package/dist/lib/emailVerification.d.ts +0 -19
- package/dist/lib/emailVerification.js +0 -129
- package/dist/lib/fingerprint.js +0 -36
- package/dist/lib/idempotency.js +0 -182
- package/dist/lib/jwks.d.ts +0 -25
- package/dist/lib/jwks.js +0 -51
- package/dist/lib/jwt.d.ts +0 -15
- package/dist/lib/jwt.js +0 -111
- package/dist/lib/metrics.d.ts +0 -14
- package/dist/lib/mfaChallenge.d.ts +0 -55
- package/dist/lib/mfaChallenge.js +0 -398
- package/dist/lib/mongo.d.ts +0 -39
- package/dist/lib/mongo.js +0 -124
- package/dist/lib/oauth.d.ts +0 -40
- package/dist/lib/oauth.js +0 -101
- package/dist/lib/oauthCode.d.ts +0 -15
- package/dist/lib/oauthCode.js +0 -95
- package/dist/lib/pagination.d.ts +0 -119
- package/dist/lib/pagination.js +0 -166
- package/dist/lib/queue.d.ts +0 -37
- package/dist/lib/queue.js +0 -117
- package/dist/lib/redis.d.ts +0 -9
- package/dist/lib/redis.js +0 -61
- package/dist/lib/resetPassword.d.ts +0 -12
- package/dist/lib/resetPassword.js +0 -93
- package/dist/lib/roles.d.ts +0 -7
- package/dist/lib/roles.js +0 -49
- package/dist/lib/saml.d.ts +0 -25
- package/dist/lib/saml.js +0 -64
- package/dist/lib/securityEvents.d.ts +0 -28
- package/dist/lib/securityEvents.js +0 -26
- package/dist/lib/session.d.ts +0 -49
- package/dist/lib/session.js +0 -597
- package/dist/lib/tenant.d.ts +0 -15
- package/dist/lib/tenant.js +0 -65
- package/dist/lib/upload.js +0 -112
- package/dist/lib/uploadRegistry.d.ts +0 -18
- package/dist/lib/uploadRegistry.js +0 -83
- package/dist/lib/ws.d.ts +0 -22
- package/dist/lib/ws.js +0 -96
- package/dist/lib/wsHeartbeat.d.ts +0 -12
- package/dist/lib/wsHeartbeat.js +0 -57
- package/dist/lib/wsMessages.d.ts +0 -40
- package/dist/lib/wsMessages.js +0 -330
- package/dist/lib/wsPresence.d.ts +0 -25
- package/dist/lib/wsPresence.js +0 -99
- package/dist/middleware/auditLog.js +0 -39
- package/dist/middleware/bearerAuth.d.ts +0 -2
- package/dist/middleware/bearerAuth.js +0 -11
- package/dist/middleware/cacheResponse.d.ts +0 -15
- package/dist/middleware/cacheResponse.js +0 -178
- package/dist/middleware/captcha.js +0 -36
- package/dist/middleware/csrf.js +0 -129
- package/dist/middleware/identify.d.ts +0 -3
- package/dist/middleware/identify.js +0 -122
- package/dist/middleware/index.js +0 -1
- package/dist/middleware/metrics.d.ts +0 -9
- package/dist/middleware/metrics.js +0 -26
- package/dist/middleware/rateLimit.js +0 -22
- package/dist/middleware/requestId.d.ts +0 -3
- package/dist/middleware/scimAuth.d.ts +0 -8
- package/dist/middleware/scimAuth.js +0 -29
- package/dist/middleware/tenant.d.ts +0 -5
- package/dist/middleware/upload.d.ts +0 -5
- package/dist/middleware/userAuth.d.ts +0 -3
- package/dist/middleware/userAuth.js +0 -6
- package/dist/models/AuditLog.d.ts +0 -30
- package/dist/models/AuditLog.js +0 -39
- package/dist/models/AuthUser.js +0 -55
- package/dist/models/Group.d.ts +0 -21
- package/dist/models/Group.js +0 -28
- package/dist/models/GroupMembership.js +0 -25
- package/dist/models/TenantRole.d.ts +0 -15
- package/dist/models/TenantRole.js +0 -23
- package/dist/routes/auth.d.ts +0 -12
- package/dist/routes/auth.js +0 -744
- package/dist/routes/groups.js +0 -346
- package/dist/routes/health.d.ts +0 -1
- package/dist/routes/health.js +0 -22
- package/dist/routes/home.d.ts +0 -1
- package/dist/routes/home.js +0 -16
- package/dist/routes/jobs.d.ts +0 -2
- package/dist/routes/m2m.d.ts +0 -2
- package/dist/routes/m2m.js +0 -72
- package/dist/routes/metrics.d.ts +0 -8
- package/dist/routes/metrics.js +0 -55
- package/dist/routes/mfa.d.ts +0 -5
- package/dist/routes/mfa.js +0 -628
- package/dist/routes/oauth.d.ts +0 -2
- package/dist/routes/oauth.js +0 -520
- package/dist/routes/oidc.d.ts +0 -2
- package/dist/routes/oidc.js +0 -29
- package/dist/routes/passkey.d.ts +0 -1
- package/dist/routes/passkey.js +0 -157
- package/dist/routes/saml.d.ts +0 -2
- package/dist/routes/saml.js +0 -86
- package/dist/routes/scim.d.ts +0 -2
- package/dist/routes/scim.js +0 -255
- package/dist/routes/uploads.js +0 -227
- package/dist/schemas/auth.js +0 -30
- package/dist/server.d.ts +0 -57
- package/dist/server.js +0 -112
- package/dist/services/auth.d.ts +0 -29
- package/dist/services/auth.js +0 -238
- package/dist/ws/index.d.ts +0 -10
- package/dist/ws/index.js +0 -39
- package/docs/sections/adding-middleware/full.md +0 -35
- package/docs/sections/adding-models/full.md +0 -125
- package/docs/sections/adding-models/overview.md +0 -13
- package/docs/sections/adding-routes/full.md +0 -182
- package/docs/sections/adding-routes/overview.md +0 -23
- package/docs/sections/auth-flow/full.md +0 -790
- package/docs/sections/auth-flow/overview.md +0 -10
- package/docs/sections/auth-security-examples/full.md +0 -388
- package/docs/sections/authentication/full.md +0 -130
- package/docs/sections/authentication/overview.md +0 -5
- package/docs/sections/cli/full.md +0 -42
- package/docs/sections/configuration/full.md +0 -172
- package/docs/sections/configuration/overview.md +0 -18
- package/docs/sections/configuration-example/full.md +0 -117
- package/docs/sections/configuration-example/overview.md +0 -30
- package/docs/sections/documentation/full.md +0 -171
- package/docs/sections/environment-variables/full.md +0 -55
- package/docs/sections/exports/full.md +0 -123
- package/docs/sections/extending-context/full.md +0 -59
- package/docs/sections/header.md +0 -3
- package/docs/sections/installation/full.md +0 -6
- package/docs/sections/jobs/full.md +0 -140
- package/docs/sections/jobs/overview.md +0 -15
- package/docs/sections/logging/full.md +0 -83
- package/docs/sections/metrics/full.md +0 -131
- package/docs/sections/mongodb-connections/full.md +0 -45
- package/docs/sections/mongodb-connections/overview.md +0 -7
- package/docs/sections/multi-tenancy/full.md +0 -66
- package/docs/sections/multi-tenancy/overview.md +0 -15
- package/docs/sections/oauth/full.md +0 -189
- package/docs/sections/oauth/overview.md +0 -16
- package/docs/sections/package-development/full.md +0 -7
- package/docs/sections/pagination/full.md +0 -93
- package/docs/sections/passkey-login/full.md +0 -90
- package/docs/sections/passkey-login/overview.md +0 -1
- package/docs/sections/peer-dependencies/full.md +0 -47
- package/docs/sections/quick-start/full.md +0 -43
- package/docs/sections/response-caching/full.md +0 -117
- package/docs/sections/response-caching/overview.md +0 -13
- package/docs/sections/roles/full.md +0 -225
- package/docs/sections/roles/overview.md +0 -14
- package/docs/sections/running-without-redis/full.md +0 -16
- package/docs/sections/running-without-redis-or-mongodb/full.md +0 -60
- package/docs/sections/signing/full.md +0 -203
- package/docs/sections/stack/full.md +0 -10
- package/docs/sections/uploads/full.md +0 -208
- package/docs/sections/versioning/full.md +0 -85
- package/docs/sections/webhook-auth/full.md +0 -100
- package/docs/sections/websocket/full.md +0 -196
- package/docs/sections/websocket/overview.md +0 -5
- package/docs/sections/websocket-rooms/full.md +0 -102
- package/docs/sections/websocket-rooms/overview.md +0 -5
- /package/dist/{lib/storageAdapter.js → packages/bunshot-admin/src/types/env.js} +0 -0
- /package/dist/{lib → packages/bunshot-auth/src/lib}/fingerprint.d.ts +0 -0
- /package/dist/{lib → packages/bunshot-auth/src/lib}/logger.d.ts +0 -0
- /package/dist/{lib → packages/bunshot-core/src}/constants.d.ts +0 -0
- /package/dist/{lib → packages/bunshot-core/src}/storageAdapter.d.ts +0 -0
- /package/dist/{lib → src/framework/lib}/createDtoMapper.d.ts +0 -0
- /package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.d.ts +0 -0
- /package/dist/{middleware → src/framework/middleware}/cors.d.ts +0 -0
- /package/dist/{middleware → src/framework/middleware}/cors.js +0 -0
- /package/dist/{middleware → src/framework/middleware}/index.d.ts +0 -0
- /package/dist/{middleware → src/framework/middleware}/logger.js +0 -0
- /package/dist/{lib → src/shared/lib}/constants.js +0 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { sql } from 'drizzle-orm';
|
|
2
|
+
import { boolean, integer, jsonb, pgTable, primaryKey, text, timestamp } from 'drizzle-orm/pg-core';
|
|
3
|
+
export const users = pgTable('bunshot_users', {
|
|
4
|
+
id: text('id').primaryKey(),
|
|
5
|
+
email: text('email').unique(),
|
|
6
|
+
passwordHash: text('password_hash'),
|
|
7
|
+
emailVerified: boolean('email_verified').default(false).notNull(),
|
|
8
|
+
suspended: boolean('suspended').default(false).notNull(),
|
|
9
|
+
suspendedReason: text('suspended_reason'),
|
|
10
|
+
suspendedAt: timestamp('suspended_at', { withTimezone: true }),
|
|
11
|
+
displayName: text('display_name'),
|
|
12
|
+
firstName: text('first_name'),
|
|
13
|
+
lastName: text('last_name'),
|
|
14
|
+
externalId: text('external_id'),
|
|
15
|
+
userMetadata: jsonb('user_metadata').$type(),
|
|
16
|
+
appMetadata: jsonb('app_metadata').$type(),
|
|
17
|
+
// Tier 3 — MFA (added in migration v2)
|
|
18
|
+
mfaSecret: text('mfa_secret'),
|
|
19
|
+
mfaEnabled: boolean('mfa_enabled').default(false).notNull(),
|
|
20
|
+
mfaMethods: text('mfa_methods')
|
|
21
|
+
.array()
|
|
22
|
+
.notNull()
|
|
23
|
+
.default(sql `ARRAY[]::text[]`),
|
|
24
|
+
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
25
|
+
updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
|
|
26
|
+
});
|
|
27
|
+
// Tier 3 — recovery codes are a separate table so consumeRecoveryCode can be
|
|
28
|
+
// a single atomic DELETE ... RETURNING rather than a read-modify-write cycle.
|
|
29
|
+
export const recoveryCodes = pgTable('bunshot_recovery_codes', {
|
|
30
|
+
userId: text('user_id')
|
|
31
|
+
.notNull()
|
|
32
|
+
.references(() => users.id, { onDelete: 'cascade' }),
|
|
33
|
+
codeHash: text('code_hash').notNull(),
|
|
34
|
+
}, t => ({
|
|
35
|
+
pk: primaryKey({ columns: [t.userId, t.codeHash] }),
|
|
36
|
+
}));
|
|
37
|
+
// Tier 4 — WebAuthn credentials (added in migration v2)
|
|
38
|
+
export const webauthnCredentials = pgTable('bunshot_webauthn_credentials', {
|
|
39
|
+
credentialId: text('credential_id').primaryKey(),
|
|
40
|
+
userId: text('user_id')
|
|
41
|
+
.notNull()
|
|
42
|
+
.references(() => users.id, { onDelete: 'cascade' }),
|
|
43
|
+
publicKey: text('public_key').notNull(),
|
|
44
|
+
signCount: integer('sign_count').default(0).notNull(),
|
|
45
|
+
transports: text('transports').array(), // nullable — not all authenticators report transports
|
|
46
|
+
name: text('name'),
|
|
47
|
+
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
48
|
+
});
|
|
49
|
+
export const oauthAccounts = pgTable('bunshot_oauth_accounts', {
|
|
50
|
+
userId: text('user_id')
|
|
51
|
+
.notNull()
|
|
52
|
+
.references(() => users.id, { onDelete: 'cascade' }),
|
|
53
|
+
provider: text('provider').notNull(),
|
|
54
|
+
providerUserId: text('provider_user_id').notNull(),
|
|
55
|
+
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
56
|
+
}, t => ({
|
|
57
|
+
pk: primaryKey({ columns: [t.provider, t.providerUserId] }),
|
|
58
|
+
}));
|
|
59
|
+
export const userRoles = pgTable('bunshot_user_roles', {
|
|
60
|
+
userId: text('user_id')
|
|
61
|
+
.notNull()
|
|
62
|
+
.references(() => users.id, { onDelete: 'cascade' }),
|
|
63
|
+
role: text('role').notNull(),
|
|
64
|
+
}, t => ({
|
|
65
|
+
pk: primaryKey({ columns: [t.userId, t.role] }),
|
|
66
|
+
}));
|
|
67
|
+
export const tenantRoles = pgTable('bunshot_tenant_roles', {
|
|
68
|
+
userId: text('user_id')
|
|
69
|
+
.notNull()
|
|
70
|
+
.references(() => users.id, { onDelete: 'cascade' }),
|
|
71
|
+
tenantId: text('tenant_id').notNull(),
|
|
72
|
+
role: text('role').notNull(),
|
|
73
|
+
}, t => ({
|
|
74
|
+
pk: primaryKey({ columns: [t.userId, t.tenantId, t.role] }),
|
|
75
|
+
}));
|
|
76
|
+
// Tier 6 — Groups (added in migration v2)
|
|
77
|
+
export const groups = pgTable('bunshot_groups', {
|
|
78
|
+
id: text('id').primaryKey(),
|
|
79
|
+
name: text('name').notNull(),
|
|
80
|
+
displayName: text('display_name'),
|
|
81
|
+
description: text('description'),
|
|
82
|
+
roles: text('roles')
|
|
83
|
+
.array()
|
|
84
|
+
.notNull()
|
|
85
|
+
.default(sql `ARRAY[]::text[]`),
|
|
86
|
+
tenantId: text('tenant_id'),
|
|
87
|
+
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
88
|
+
updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
|
|
89
|
+
});
|
|
90
|
+
export const groupMemberships = pgTable('bunshot_group_memberships', {
|
|
91
|
+
userId: text('user_id')
|
|
92
|
+
.notNull()
|
|
93
|
+
.references(() => users.id, { onDelete: 'cascade' }),
|
|
94
|
+
groupId: text('group_id')
|
|
95
|
+
.notNull()
|
|
96
|
+
.references(() => groups.id, { onDelete: 'cascade' }),
|
|
97
|
+
roles: text('roles')
|
|
98
|
+
.array()
|
|
99
|
+
.notNull()
|
|
100
|
+
.default(sql `ARRAY[]::text[]`),
|
|
101
|
+
tenantId: text('tenant_id'),
|
|
102
|
+
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
103
|
+
}, t => ({
|
|
104
|
+
pk: primaryKey({ columns: [t.userId, t.groupId] }),
|
|
105
|
+
}));
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import type { AuthCookieConfig, ConcealRegistrationConfig, CsrfCookieConfig, EmailVerificationConfig, JwtConfig, MagicLinkConfig, MfaConfig, MfaEmailOtpConfig, MfaWebAuthnConfig, OidcConfig, PasswordResetConfig, PrimaryField, RefreshTokenConfig, SamlConfig, ScimConfig, StepUpConfig } from '../packages/bunshot-auth/src/config/authConfig';
|
|
2
|
+
import type { CaptchaConfig, CaptchaProvider } from './framework/lib/captcha';
|
|
3
|
+
import type { LogLevel, RequestLogEntry } from './framework/middleware/requestLogger';
|
|
4
|
+
import { MetricsConfig } from './framework/mountMiddleware';
|
|
5
|
+
import { JobsConfig, UploadConfig } from './framework/mountOptionalEndpoints';
|
|
6
|
+
import { VersioningConfig } from './framework/mountRoutes';
|
|
7
|
+
import { ModelSchemasConfig } from './framework/preloadSchemas';
|
|
8
|
+
import type { RegisteredSecretRepository, SecretStoreConfig } from './framework/secrets';
|
|
9
|
+
import { OpenAPIHono } from '@hono/zod-openapi';
|
|
10
|
+
import type { SigningConfig } from './lib/signingConfig';
|
|
11
|
+
import type { MiddlewareHandler } from 'hono';
|
|
12
|
+
import type { AuthConfig, OAuthConfig } from '../packages/bunshot-auth/src/index.js';
|
|
13
|
+
import type { AppEnv, BunshotContext, BunshotEventBus, BunshotPlugin, CsrfConfig, ISecretRepository, StoreType, ValidationErrorFormatter } from '../packages/bunshot-core/src/index.js';
|
|
14
|
+
export type { BreachedPasswordConfig } from '../packages/bunshot-auth/src/config/authConfig';
|
|
15
|
+
export type { AuthRateLimitConfig } from '../packages/bunshot-auth/src/config/authConfig';
|
|
16
|
+
export type { AuthConfig, OAuthConfig };
|
|
17
|
+
export type { AccountDeletionConfig, AuthSessionPolicyConfig } from '../packages/bunshot-auth/src/config/authConfig';
|
|
18
|
+
export type { PrimaryField, EmailVerificationConfig, PasswordResetConfig, RefreshTokenConfig, MfaConfig, MfaEmailOtpConfig, MfaWebAuthnConfig, SigningConfig, JwtConfig, StepUpConfig, OidcConfig, SamlConfig, ScimConfig, AuthCookieConfig, CsrfCookieConfig, ConcealRegistrationConfig, MagicLinkConfig, };
|
|
19
|
+
export type { OrganizationConfig } from '../packages/bunshot-auth/src/lib/organization';
|
|
20
|
+
export type { CaptchaConfig, CaptchaProvider };
|
|
21
|
+
export type { CsrfConfig };
|
|
22
|
+
export type { ModelSchemasConfig } from './framework/preloadSchemas';
|
|
23
|
+
export type { JobsConfig } from './framework/mountOptionalEndpoints';
|
|
24
|
+
export type { PresignedUrlConfig, UploadConfig } from './framework/mountOptionalEndpoints';
|
|
25
|
+
export type { MetricsConfig } from './framework/mountMiddleware';
|
|
26
|
+
export type { VersioningConfig } from './framework/mountRoutes';
|
|
27
|
+
export interface DbConfig {
|
|
28
|
+
/**
|
|
29
|
+
* Absolute path to the SQLite database file.
|
|
30
|
+
* Required when any store is "sqlite".
|
|
31
|
+
* Example: import.meta.dir + "/../data.db"
|
|
32
|
+
*/
|
|
33
|
+
sqlite?: string;
|
|
34
|
+
/**
|
|
35
|
+
* MongoDB auto-connect mode.
|
|
36
|
+
* - "single" (default): calls connectMongo() — auth and app share one server (MONGO_* env vars)
|
|
37
|
+
* - "separate": calls connectAuthMongo() + connectAppMongo() — auth on MONGO_AUTH_* server, app on MONGO_* server
|
|
38
|
+
* - false: skip auto-connect (call connectMongo / connectAuthMongo / connectAppMongo yourself)
|
|
39
|
+
*/
|
|
40
|
+
mongo?: 'single' | 'separate' | false;
|
|
41
|
+
/**
|
|
42
|
+
* Auto-connect Redis before starting. Defaults to true.
|
|
43
|
+
* Set false to skip (e.g. when using sqlite or memory stores only).
|
|
44
|
+
*/
|
|
45
|
+
redis?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Where to store JWT sessions. Default: "redis".
|
|
48
|
+
* Sessions are stored on appConnection (not authConnection) so they are isolated per-app
|
|
49
|
+
* in "separate" mongo mode.
|
|
50
|
+
*/
|
|
51
|
+
sessions?: StoreType;
|
|
52
|
+
/**
|
|
53
|
+
* Where to store OAuth state (PKCE code verifier, link user ID). Default: follows `sessions`.
|
|
54
|
+
*/
|
|
55
|
+
oauthState?: StoreType;
|
|
56
|
+
/**
|
|
57
|
+
* Global default store for cacheResponse middleware. Default: "redis".
|
|
58
|
+
* Can be overridden per-route via cacheResponse({ store: "..." }).
|
|
59
|
+
*/
|
|
60
|
+
cache?: StoreType;
|
|
61
|
+
/**
|
|
62
|
+
* Which built-in auth adapter to use for /auth/* routes.
|
|
63
|
+
* - "mongo" (default when mongo is enabled): Mongoose adapter (requires connectMongo)
|
|
64
|
+
* - "sqlite": bun:sqlite adapter (requires sqlite path)
|
|
65
|
+
* - "memory": in-memory Maps (ephemeral, great for tests)
|
|
66
|
+
* When `mongo: false`, defaults to the same store as `sessions`.
|
|
67
|
+
* Ignored when `auth.adapter` is explicitly passed in CreateAppConfig.
|
|
68
|
+
*/
|
|
69
|
+
auth?: 'mongo' | 'sqlite' | 'memory';
|
|
70
|
+
}
|
|
71
|
+
export interface AppMeta {
|
|
72
|
+
/** App name shown in the root endpoint and OpenAPI docs title. Defaults to "Bun Core API" */
|
|
73
|
+
name?: string;
|
|
74
|
+
/** Version shown in OpenAPI docs. Defaults to "1.0.0" */
|
|
75
|
+
version?: string;
|
|
76
|
+
}
|
|
77
|
+
export interface BotProtectionConfig {
|
|
78
|
+
/**
|
|
79
|
+
* List of IPv4 CIDRs (e.g. "198.51.100.0/24"), IPv4 addresses, or IPv6 addresses to block outright.
|
|
80
|
+
* Matched requests receive a 403 before any other processing.
|
|
81
|
+
* Example: ["198.51.100.0/24", "203.0.113.42"]
|
|
82
|
+
*/
|
|
83
|
+
blockList?: string[];
|
|
84
|
+
/**
|
|
85
|
+
* Also rate-limit by HTTP fingerprint (User-Agent, Accept-*, Connection, browser header presence)
|
|
86
|
+
* in addition to IP. Bots that rotate IPs but use the same HTTP client share a bucket.
|
|
87
|
+
* Uses the same store as auth rate limiting (Redis or memory).
|
|
88
|
+
* Default: false
|
|
89
|
+
*/
|
|
90
|
+
fingerprintRateLimit?: boolean;
|
|
91
|
+
}
|
|
92
|
+
export interface SecurityConfig {
|
|
93
|
+
/** CORS origins. Defaults to "*" */
|
|
94
|
+
cors?: string | string[];
|
|
95
|
+
/** Additional security headers to set via Hono's secureHeaders middleware.
|
|
96
|
+
* Pass a Content-Security-Policy, Permissions-Policy, etc. */
|
|
97
|
+
headers?: {
|
|
98
|
+
contentSecurityPolicy?: string;
|
|
99
|
+
permissionsPolicy?: string;
|
|
100
|
+
};
|
|
101
|
+
/** Global rate limit. Defaults to 100 req / 60s */
|
|
102
|
+
rateLimit?: {
|
|
103
|
+
windowMs: number;
|
|
104
|
+
max: number;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Bot protection: CIDR blocklist and fingerprint-based rate limiting.
|
|
108
|
+
* Runs before IP rate limiting so blocked IPs are rejected immediately.
|
|
109
|
+
*/
|
|
110
|
+
botProtection?: BotProtectionConfig;
|
|
111
|
+
/**
|
|
112
|
+
* Trusted proxy configuration for IP extraction.
|
|
113
|
+
* - `false` (default): use socket-level IP only, ignore X-Forwarded-For entirely.
|
|
114
|
+
* - A number N: trust N proxy hops — take the Nth-from-right IP in the X-Forwarded-For chain.
|
|
115
|
+
*/
|
|
116
|
+
trustProxy?: false | number;
|
|
117
|
+
/**
|
|
118
|
+
* Unified HMAC signing for cookies, cursors, presigned URLs, request signing,
|
|
119
|
+
* idempotency key hashing, and session binding. All features are opt-in.
|
|
120
|
+
*/
|
|
121
|
+
signing?: SigningConfig;
|
|
122
|
+
/**
|
|
123
|
+
* Global CAPTCHA configuration. When set, use requireCaptcha() middleware on specific routes,
|
|
124
|
+
* or enable adaptive mode to auto-require CAPTCHA after rate limit thresholds.
|
|
125
|
+
*/
|
|
126
|
+
captcha?: CaptchaConfig;
|
|
127
|
+
}
|
|
128
|
+
export interface TenantConfig {
|
|
129
|
+
[key: string]: unknown;
|
|
130
|
+
}
|
|
131
|
+
export interface TenancyConfig {
|
|
132
|
+
/** How tenant is identified. */
|
|
133
|
+
resolution: 'header' | 'subdomain' | 'path';
|
|
134
|
+
/** Header name when resolution is "header". Default: "x-tenant-id". */
|
|
135
|
+
headerName?: string;
|
|
136
|
+
/** Path segment index when resolution is "path". Default: 0. */
|
|
137
|
+
pathSegment?: number;
|
|
138
|
+
/** Callback to validate/load tenant. Return null to reject. */
|
|
139
|
+
onResolve?: (tenantId: string) => Promise<TenantConfig | null>;
|
|
140
|
+
/** TTL in ms for caching onResolve results (LRU cache). Default: 60_000. Set 0 to disable. */
|
|
141
|
+
cacheTtlMs?: number;
|
|
142
|
+
/** Max entries in tenant resolution cache. Default: 500. */
|
|
143
|
+
cacheMaxSize?: number;
|
|
144
|
+
/** Paths that skip tenant resolution. Uses startsWith matching. Default: ["/health", "/docs", "/openapi.json"]. */
|
|
145
|
+
exemptPaths?: string[];
|
|
146
|
+
/** HTTP status when onResolve returns null. Default: 403. */
|
|
147
|
+
rejectionStatus?: 403 | 404;
|
|
148
|
+
}
|
|
149
|
+
export interface LoggingConfig {
|
|
150
|
+
/** Enable structured request logging. Default: true. When false, no logger is registered at all. */
|
|
151
|
+
enabled?: boolean;
|
|
152
|
+
/** Custom log handler. Default: `console.log(JSON.stringify(entry))`. */
|
|
153
|
+
onLog?: (entry: RequestLogEntry) => void | Promise<void>;
|
|
154
|
+
/** Minimum log level to emit. Entries below this level are dropped. */
|
|
155
|
+
level?: LogLevel;
|
|
156
|
+
/**
|
|
157
|
+
* Paths to exclude from logging. Strings use **prefix matching**.
|
|
158
|
+
* Default: `["/health", "/docs", "/openapi.json"]`.
|
|
159
|
+
*/
|
|
160
|
+
excludePaths?: (string | RegExp)[];
|
|
161
|
+
/** HTTP methods to exclude from logging (e.g. `["OPTIONS"]`). */
|
|
162
|
+
excludeMethods?: string[];
|
|
163
|
+
}
|
|
164
|
+
export interface ValidationConfig {
|
|
165
|
+
/** Custom formatter for Zod validation errors. Receives issues + requestId, returns the JSON body. */
|
|
166
|
+
formatError?: ValidationErrorFormatter;
|
|
167
|
+
}
|
|
168
|
+
export interface CreateAppConfig {
|
|
169
|
+
/** Absolute path to the service's routes directory (use import.meta.dir + "/routes") */
|
|
170
|
+
routesDir: string;
|
|
171
|
+
/**
|
|
172
|
+
* Shared Zod schema sources. Files are imported before route discovery so schemas
|
|
173
|
+
* are registered before any route references them.
|
|
174
|
+
* Accepts a directory path, an array of paths/globs, or a full ModelSchemasConfig object.
|
|
175
|
+
* Shorthand string/array defaults to registration: "auto".
|
|
176
|
+
*/
|
|
177
|
+
modelSchemas?: string | string[] | ModelSchemasConfig;
|
|
178
|
+
/** App name and version for the root endpoint and OpenAPI docs */
|
|
179
|
+
app?: AppMeta;
|
|
180
|
+
/** Security: CORS, rate limiting, trust-proxy, signing, captcha */
|
|
181
|
+
security?: SecurityConfig;
|
|
182
|
+
/** Extra middleware injected after plugin middleware, before route matching */
|
|
183
|
+
middleware?: MiddlewareHandler<AppEnv>[];
|
|
184
|
+
/** Database connection and store routing configuration */
|
|
185
|
+
db?: DbConfig;
|
|
186
|
+
/** Job status endpoint configuration. Requires BullMQ + Redis. */
|
|
187
|
+
jobs?: JobsConfig;
|
|
188
|
+
/** Multi-tenancy configuration. When set, tenant middleware resolves tenant on each request. */
|
|
189
|
+
tenancy?: TenancyConfig;
|
|
190
|
+
/** Structured request logging configuration. Replaces Hono's built-in text logger. */
|
|
191
|
+
logging?: LoggingConfig;
|
|
192
|
+
/** Prometheus-compatible /metrics endpoint. Opt-in. */
|
|
193
|
+
metrics?: MetricsConfig;
|
|
194
|
+
/** Zod validation error formatting configuration. */
|
|
195
|
+
validation?: ValidationConfig;
|
|
196
|
+
/** File upload configuration. When set, registers storage adapter and upload settings. */
|
|
197
|
+
upload?: UploadConfig;
|
|
198
|
+
/**
|
|
199
|
+
* API versioning configuration. When set, routes are discovered per-version from
|
|
200
|
+
* subdirectories of `routesDir` (e.g. `routes/v1/`, `routes/v2/`). Each version
|
|
201
|
+
* gets its own OpenAPI spec at `/{version}/openapi.json` and Scalar docs at
|
|
202
|
+
* `/{version}/docs`. Root `/docs` becomes a version selector.
|
|
203
|
+
*/
|
|
204
|
+
versioning?: VersioningConfig | string[];
|
|
205
|
+
/**
|
|
206
|
+
* Optional plugins to mount alongside the framework. Each plugin's setup() is called
|
|
207
|
+
* after all framework middleware is registered, in dependency order.
|
|
208
|
+
*/
|
|
209
|
+
plugins?: BunshotPlugin[];
|
|
210
|
+
/**
|
|
211
|
+
* Event bus for cross-plugin communication. Defaults to an in-process EventEmitter adapter.
|
|
212
|
+
*/
|
|
213
|
+
eventBus?: BunshotEventBus;
|
|
214
|
+
/**
|
|
215
|
+
* Secret provider for resolving credentials, API keys, and signing secrets.
|
|
216
|
+
*
|
|
217
|
+
* - Omit or pass nothing: defaults to env provider (reads process.env / .env)
|
|
218
|
+
* - Pass an ISecretRepository instance directly for full control
|
|
219
|
+
* - Pass a config object to let the framework create the repository:
|
|
220
|
+
* - `{ provider: 'env', prefix?: string }` — environment variables
|
|
221
|
+
* - `{ provider: 'ssm', pathPrefix: string, region?: string }` — AWS SSM Parameter Store
|
|
222
|
+
* - `{ provider: 'file', directory: string }` — file-based (Docker/K8s secrets)
|
|
223
|
+
*/
|
|
224
|
+
secrets?: ISecretRepository | SecretStoreConfig | RegisteredSecretRepository;
|
|
225
|
+
}
|
|
226
|
+
export interface CreateAppResult {
|
|
227
|
+
app: OpenAPIHono<AppEnv>;
|
|
228
|
+
ctx: BunshotContext;
|
|
229
|
+
}
|
|
230
|
+
export declare const createApp: (config: CreateAppConfig) => Promise<CreateAppResult>;
|
package/dist/src/app.js
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { buildContext, finalizeContext } from './framework/buildContext';
|
|
2
|
+
import { validateAppConfig } from './framework/config/schema';
|
|
3
|
+
import { createInfrastructure } from './framework/createInfrastructure';
|
|
4
|
+
import { createMetricsState } from './framework/lib/metrics';
|
|
5
|
+
import { mountFrameworkMiddleware, mountTenantMiddleware, } from './framework/mountMiddleware';
|
|
6
|
+
import { mountOptionalEndpoints, } from './framework/mountOptionalEndpoints';
|
|
7
|
+
import { mountRoutes } from './framework/mountRoutes';
|
|
8
|
+
import { preloadModelSchemas } from './framework/preloadSchemas';
|
|
9
|
+
import { registerBoundaryAdapters } from './framework/registerBoundaryAdapters';
|
|
10
|
+
import { runPluginMiddleware, runPluginPost, runPluginRoutes, validateAndSortPlugins, } from './framework/runPluginLifecycle';
|
|
11
|
+
import { resolveSecretBundle } from './framework/secrets';
|
|
12
|
+
import { OpenAPIHono } from '@hono/zod-openapi';
|
|
13
|
+
import { HttpError, ValidationError, attachContext, createCoreRegistrar, defaultValidationErrorFormatter, getContext, } from '../packages/bunshot-core/src/index.js';
|
|
14
|
+
import { createInProcessAdapter } from '../packages/bunshot-core/src/index.js';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Phase 1: validate config, resolve secrets, connect infrastructure
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
async function prepareBootstrap(config) {
|
|
19
|
+
const { warnings } = validateAppConfig(config);
|
|
20
|
+
for (const w of warnings)
|
|
21
|
+
console.warn(w);
|
|
22
|
+
const { app: appConfig = {}, security: securityInput = {}, db = {} } = config;
|
|
23
|
+
const securityConfig = {
|
|
24
|
+
...securityInput,
|
|
25
|
+
signing: securityInput.signing ? { ...securityInput.signing } : undefined,
|
|
26
|
+
};
|
|
27
|
+
const plugins = config.plugins ?? [];
|
|
28
|
+
const bus = config.eventBus ?? createInProcessAdapter();
|
|
29
|
+
const { registrar, drain } = createCoreRegistrar();
|
|
30
|
+
const sortedPlugins = validateAndSortPlugins(plugins);
|
|
31
|
+
const appName = appConfig.name ?? 'Bun Core API';
|
|
32
|
+
const openApiVersion = appConfig.version ?? '1.0.0';
|
|
33
|
+
const secretBundle = await resolveSecretBundle(config.secrets);
|
|
34
|
+
const resolvedSecrets = secretBundle.framework;
|
|
35
|
+
if (resolvedSecrets.jwtSecret && !securityConfig.signing?.secret) {
|
|
36
|
+
securityConfig.signing = { ...securityConfig.signing, secret: resolvedSecrets.jwtSecret };
|
|
37
|
+
}
|
|
38
|
+
const infra = await createInfrastructure({
|
|
39
|
+
db,
|
|
40
|
+
securitySigning: securityConfig.signing,
|
|
41
|
+
cors: securityConfig.cors,
|
|
42
|
+
captcha: securityConfig.captcha,
|
|
43
|
+
trustProxy: securityConfig.trustProxy,
|
|
44
|
+
registrar,
|
|
45
|
+
secrets: resolvedSecrets,
|
|
46
|
+
uploadRegistryTtlSeconds: config.upload?.registryTtlSeconds,
|
|
47
|
+
});
|
|
48
|
+
return {
|
|
49
|
+
bus,
|
|
50
|
+
registrar,
|
|
51
|
+
drain,
|
|
52
|
+
sortedPlugins,
|
|
53
|
+
appName,
|
|
54
|
+
openApiVersion,
|
|
55
|
+
securityConfig,
|
|
56
|
+
secretBundle,
|
|
57
|
+
infra,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Phase 2: create Hono app + context, mount framework and plugin middleware
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
async function assembleApp(bootstrap, config) {
|
|
64
|
+
const { bus, registrar, sortedPlugins, appName, securityConfig, secretBundle, infra } = bootstrap;
|
|
65
|
+
const { middleware = [] } = config;
|
|
66
|
+
const app = new OpenAPIHono();
|
|
67
|
+
const metricsState = createMetricsState();
|
|
68
|
+
const tenantCacheCarrier = {
|
|
69
|
+
cache: null,
|
|
70
|
+
};
|
|
71
|
+
const ctx = buildContext({
|
|
72
|
+
app,
|
|
73
|
+
appName,
|
|
74
|
+
infra,
|
|
75
|
+
signing: securityConfig.signing,
|
|
76
|
+
captcha: securityConfig.captcha,
|
|
77
|
+
upload: config.upload,
|
|
78
|
+
metricsState,
|
|
79
|
+
plugins: bootstrap.sortedPlugins,
|
|
80
|
+
bus,
|
|
81
|
+
secretBundle,
|
|
82
|
+
});
|
|
83
|
+
attachContext(app, ctx);
|
|
84
|
+
// Context middleware — registered first so all downstream handlers can access the context.
|
|
85
|
+
app.use(async (c, next) => {
|
|
86
|
+
c.set('bunshotCtx', getContext(app));
|
|
87
|
+
await next();
|
|
88
|
+
});
|
|
89
|
+
await mountFrameworkMiddleware(app, {
|
|
90
|
+
security: securityConfig,
|
|
91
|
+
logging: config.logging,
|
|
92
|
+
metrics: config.metrics,
|
|
93
|
+
metricsState,
|
|
94
|
+
validation: config.validation,
|
|
95
|
+
});
|
|
96
|
+
// Register default boundary adapters (plugins may override during setupMiddleware)
|
|
97
|
+
await registerBoundaryAdapters(registrar, {
|
|
98
|
+
redisEnabled: infra.redisEnabled,
|
|
99
|
+
mongoMode: infra.mongoMode,
|
|
100
|
+
redis: infra.redis,
|
|
101
|
+
appConnection: infra.mongo?.app ?? null,
|
|
102
|
+
sqliteDb: infra.sqliteDb,
|
|
103
|
+
});
|
|
104
|
+
// Plugin middleware phase — after framework rate limiting, before tenant + user middleware.
|
|
105
|
+
await runPluginMiddleware(sortedPlugins, app, infra.frameworkConfig, bus);
|
|
106
|
+
if (config.tenancy) {
|
|
107
|
+
await mountTenantMiddleware(app, config.tenancy, tenantCacheCarrier);
|
|
108
|
+
}
|
|
109
|
+
for (const mw of middleware)
|
|
110
|
+
app.use(mw);
|
|
111
|
+
return { ...bootstrap, app, ctx, tenantCacheCarrier };
|
|
112
|
+
}
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
// Phase 3: preload schemas, mount plugin + core + service routes, error handlers
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
async function mountAppRoutes(assembly, config) {
|
|
117
|
+
const { app, sortedPlugins, appName, openApiVersion, secretBundle, infra, bus } = assembly;
|
|
118
|
+
// Schema pre-loading before routes so registerSchema calls run first ($ref not inline).
|
|
119
|
+
await preloadModelSchemas(config.modelSchemas);
|
|
120
|
+
// Plugin routes — after tenant/user middleware, before framework routes.
|
|
121
|
+
await runPluginRoutes(sortedPlugins, app, infra.frameworkConfig, bus);
|
|
122
|
+
// Core framework routes (health, metrics, uploads, etc.)
|
|
123
|
+
const coreRoutesDir = import.meta.dir + '/framework/routes';
|
|
124
|
+
const coreGlob = new Bun.Glob('*.ts');
|
|
125
|
+
for await (const file of coreGlob.scan({ cwd: coreRoutesDir })) {
|
|
126
|
+
if (file === 'jobs.ts')
|
|
127
|
+
continue; // mounted separately below
|
|
128
|
+
const mod = await import(`${coreRoutesDir}/${file}`);
|
|
129
|
+
if (mod.router)
|
|
130
|
+
app.route('/', mod.router);
|
|
131
|
+
}
|
|
132
|
+
await mountOptionalEndpoints(app, coreRoutesDir, config.jobs, config.metrics, config.upload, assembly.ctx.metrics, secretBundle.framework);
|
|
133
|
+
await mountRoutes(app, config.routesDir, config.versioning, appName, openApiVersion);
|
|
134
|
+
app.onError((err, c) => {
|
|
135
|
+
const reqId = c.get('requestId') ?? 'unknown';
|
|
136
|
+
// ValidationError extends HttpError — must check first or the details payload is lost
|
|
137
|
+
if (err instanceof ValidationError) {
|
|
138
|
+
const fmt = c.get('validationErrorFormatter') ?? defaultValidationErrorFormatter;
|
|
139
|
+
try {
|
|
140
|
+
return c.json(fmt(err.issues, reqId), 400);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return c.json(defaultValidationErrorFormatter(err.issues, reqId), 400);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (err instanceof HttpError) {
|
|
147
|
+
const body = { error: err.message, requestId: reqId };
|
|
148
|
+
if (err.code !== undefined)
|
|
149
|
+
body.code = err.code;
|
|
150
|
+
return c.json(body, err.status);
|
|
151
|
+
}
|
|
152
|
+
console.error(err);
|
|
153
|
+
return c.json({ error: 'Internal Server Error', requestId: reqId }, 500);
|
|
154
|
+
});
|
|
155
|
+
app.notFound(c => c.json({ error: 'Not Found', requestId: c.get('requestId') ?? 'unknown' }, 404));
|
|
156
|
+
app.get('/sw.js', c => c.body('', 200, { 'Content-Type': 'application/javascript' }));
|
|
157
|
+
}
|
|
158
|
+
// ---------------------------------------------------------------------------
|
|
159
|
+
// Phase 4: plugin post phase, drain registrar into context, emit ready
|
|
160
|
+
// NOT for routes/middleware — would be invisible to OpenAPI / unreachable by onError.
|
|
161
|
+
// ---------------------------------------------------------------------------
|
|
162
|
+
async function finalizeApp(assembly) {
|
|
163
|
+
const { app, ctx, sortedPlugins, bus, drain, tenantCacheCarrier, infra } = assembly;
|
|
164
|
+
await runPluginPost(sortedPlugins, app, infra.frameworkConfig, bus);
|
|
165
|
+
if (sortedPlugins.length > 0) {
|
|
166
|
+
bus.emit('app:ready', { plugins: sortedPlugins.map(p => p.name) });
|
|
167
|
+
}
|
|
168
|
+
finalizeContext(ctx, drain());
|
|
169
|
+
if (tenantCacheCarrier.cache) {
|
|
170
|
+
ctx.pluginState.set('tenantResolutionCache', tenantCacheCarrier.cache);
|
|
171
|
+
}
|
|
172
|
+
return { app, ctx };
|
|
173
|
+
}
|
|
174
|
+
// ---------------------------------------------------------------------------
|
|
175
|
+
// Public entry point
|
|
176
|
+
// ---------------------------------------------------------------------------
|
|
177
|
+
export const createApp = async (config) => {
|
|
178
|
+
const bootstrap = await prepareBootstrap(config);
|
|
179
|
+
const assembly = await assembleApp(bootstrap, config);
|
|
180
|
+
await mountAppRoutes(assembly, config);
|
|
181
|
+
return finalizeApp(assembly);
|
|
182
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Init extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
7
|
+
dir: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
8
|
+
};
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
}
|