@lastshotlabs/bunshot 0.0.25 → 0.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/packages/bunshot-auth/src/lib/breachedPassword.d.ts +19 -0
- package/dist/packages/bunshot-auth/src/lib/breachedPassword.js +61 -0
- 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/packages/bunshot-auth/src/lib/logger.d.ts +3 -0
- package/dist/packages/bunshot-auth/src/lib/logger.js +13 -0
- package/dist/packages/bunshot-auth/src/lib/m2m.d.ts +30 -0
- package/dist/packages/bunshot-auth/src/lib/m2m.js +44 -0
- 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/packages/bunshot-auth/src/lib/scim.d.ts +44 -0
- package/dist/packages/bunshot-auth/src/lib/scim.js +56 -0
- 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/packages/bunshot-auth/src/lib/suspension.d.ts +14 -0
- package/dist/packages/bunshot-auth/src/lib/suspension.js +20 -0
- 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 -7
- 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/packages/bunshot-auth/src/middleware/requireScope.d.ts +10 -0
- package/dist/packages/bunshot-auth/src/middleware/requireScope.js +25 -0
- package/dist/packages/bunshot-auth/src/middleware/requireStepUp.d.ts +18 -0
- package/dist/packages/bunshot-auth/src/middleware/requireStepUp.js +30 -0
- 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 +19 -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/packages/bunshot-auth/src/models/M2MClient.d.ts +18 -0
- package/dist/packages/bunshot-auth/src/models/M2MClient.js +18 -0
- 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/packages/bunshot-core/src/captcha.d.ts +16 -0
- 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/packages/bunshot-core/src/errors.d.ts +13 -0
- package/dist/packages/bunshot-core/src/errors.js +22 -0
- 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 +23 -8
- 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/src/framework/lib/captcha.js +40 -0
- 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 +14 -9
- 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/src/framework/middleware/captcha.d.ts +9 -0
- package/dist/src/framework/middleware/captcha.js +37 -0
- package/dist/{middleware → src/framework/middleware}/errorHandler.d.ts +1 -1
- package/dist/src/framework/middleware/errorHandler.js +16 -0
- 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 -19
- 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 -11
- 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/src/framework/routes/jobs.js +315 -0
- package/dist/src/framework/routes/metrics.d.ts +10 -0
- package/dist/src/framework/routes/metrics.js +57 -0
- package/dist/src/framework/routes/uploads.d.ts +14 -0
- 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/src/lib/authConfig.js +179 -0
- package/dist/{lib → src/lib}/context.d.ts +6 -7
- 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 +40 -10
- package/dist/src/testing.d.ts +34 -0
- package/dist/src/testing.js +93 -0
- package/package.json +62 -25
- package/dist/adapters/memoryAuth.d.ts +0 -46
- package/dist/adapters/memoryAuth.js +0 -634
- 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 -307
- package/dist/adapters/sqliteAuth.d.ts +0 -49
- package/dist/adapters/sqliteAuth.js +0 -707
- package/dist/app.d.ts +0 -456
- package/dist/app.js +0 -548
- 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 -98
- package/dist/index.js +0 -77
- package/dist/lib/HttpError.d.ts +0 -9
- package/dist/lib/HttpError.js +0 -14
- package/dist/lib/appConfig.d.ts +0 -162
- package/dist/lib/appConfig.js +0 -83
- package/dist/lib/auditLog.d.ts +0 -52
- package/dist/lib/auditLog.js +0 -201
- package/dist/lib/authAdapter.d.ts +0 -176
- package/dist/lib/authAdapter.js +0 -7
- package/dist/lib/authRateLimit.d.ts +0 -13
- package/dist/lib/authRateLimit.js +0 -81
- package/dist/lib/clientIp.d.ts +0 -14
- 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 -13
- package/dist/lib/emailVerification.js +0 -86
- package/dist/lib/fingerprint.js +0 -36
- package/dist/lib/idempotency.js +0 -182
- package/dist/lib/jwt.d.ts +0 -2
- package/dist/lib/jwt.js +0 -24
- package/dist/lib/logger.d.ts +0 -1
- package/dist/lib/logger.js +0 -7
- package/dist/lib/metrics.d.ts +0 -14
- package/dist/lib/mfaChallenge.d.ts +0 -42
- package/dist/lib/mfaChallenge.js +0 -293
- 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 -90
- 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 -91
- package/dist/lib/roles.d.ts +0 -7
- package/dist/lib/roles.js +0 -49
- package/dist/lib/session.d.ts +0 -39
- package/dist/lib/session.js +0 -535
- package/dist/lib/tenant.d.ts +0 -15
- package/dist/lib/tenant.js +0 -65
- package/dist/lib/upload.js +0 -87
- package/dist/lib/ws.d.ts +0 -22
- package/dist/lib/ws.js +0 -89
- 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/csrf.js +0 -125
- package/dist/middleware/errorHandler.js +0 -13
- package/dist/middleware/identify.d.ts +0 -3
- package/dist/middleware/identify.js +0 -95
- 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/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 -48
- 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 -11
- package/dist/routes/auth.js +0 -605
- 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/jobs.js +0 -272
- package/dist/routes/metrics.d.ts +0 -7
- package/dist/routes/metrics.js +0 -52
- package/dist/routes/mfa.d.ts +0 -5
- package/dist/routes/mfa.js +0 -620
- package/dist/routes/oauth.d.ts +0 -2
- package/dist/routes/oauth.js +0 -514
- package/dist/routes/uploads.d.ts +0 -2
- package/dist/routes/uploads.js +0 -135
- 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 -27
- package/dist/services/auth.js +0 -159
- package/dist/ws/index.d.ts +0 -10
- package/dist/ws/index.js +0 -38
- 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 -779
- package/docs/sections/auth-flow/overview.md +0 -10
- package/docs/sections/auth-security-examples/full.md +0 -365
- 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 -127
- 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/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 -199
- package/docs/sections/versioning/full.md +0 -85
- package/docs/sections/webhook-auth/full.md +0 -100
- package/docs/sections/websocket/full.md +0 -184
- 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-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
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
## Exports
|
|
2
|
-
|
|
3
|
-
```ts
|
|
4
|
-
import {
|
|
5
|
-
// Server factory
|
|
6
|
-
createServer, createApp,
|
|
7
|
-
|
|
8
|
-
// DB
|
|
9
|
-
connectMongo, connectAuthMongo, connectAppMongo, disconnectMongo,
|
|
10
|
-
authConnection, appConnection, mongoose,
|
|
11
|
-
connectRedis, disconnectRedis, getRedis,
|
|
12
|
-
|
|
13
|
-
// Jobs
|
|
14
|
-
createQueue, createWorker,
|
|
15
|
-
type Job,
|
|
16
|
-
|
|
17
|
-
// WebSocket
|
|
18
|
-
websocket, createWsUpgradeHandler, publish,
|
|
19
|
-
subscribe, unsubscribe, getSubscriptions, handleRoomActions,
|
|
20
|
-
getRooms, getRoomSubscribers, setPresenceEnabled,
|
|
21
|
-
|
|
22
|
-
// WebSocket — Heartbeat
|
|
23
|
-
registerSocket, deregisterSocket, handlePong,
|
|
24
|
-
startHeartbeat, stopHeartbeat, clearHeartbeatState,
|
|
25
|
-
type HeartbeatConfig,
|
|
26
|
-
|
|
27
|
-
// WebSocket — Presence
|
|
28
|
-
trackSocket, untrackSocket, addPresence, removePresence, cleanupPresence,
|
|
29
|
-
getRoomPresence, getUserPresence, clearPresenceStore,
|
|
30
|
-
|
|
31
|
-
// WebSocket — Message Persistence
|
|
32
|
-
persistMessage, getMessageHistory, configureRoom,
|
|
33
|
-
setWsMessageStore, setWsMessageDefaults, clearWsMessageMemoryStore,
|
|
34
|
-
type StoredMessage, type WsMessageStore, type WsMessageDefaults, type RoomPersistenceConfig,
|
|
35
|
-
|
|
36
|
-
// Auth utilities
|
|
37
|
-
signToken, verifyToken,
|
|
38
|
-
createSession, getSession, deleteSession, getUserSessions, getActiveSessionCount,
|
|
39
|
-
evictOldestSession, updateSessionLastActive, setSessionStore, deleteUserSessions,
|
|
40
|
-
setRefreshToken, getSessionByRefreshToken, rotateRefreshToken, // refresh token management
|
|
41
|
-
createVerificationToken, getVerificationToken, deleteVerificationToken, // email verification tokens
|
|
42
|
-
createResetToken, consumeResetToken, setPasswordResetStore, // password reset tokens
|
|
43
|
-
createMfaChallenge, consumeMfaChallenge, replaceMfaChallengeOtp, setMfaChallengeStore, // MFA challenge tokens
|
|
44
|
-
storeOAuthCode, consumeOAuthCode, setOAuthCodeStore, // OAuth one-time authorization codes
|
|
45
|
-
bustAuthLimit, trackAttempt, isLimited, clearMemoryRateLimitStore, // auth rate limiting — use in custom routes or admin unlocks
|
|
46
|
-
buildFingerprint, // HTTP fingerprint hash (IP-independent) — use in custom bot detection logic
|
|
47
|
-
sqliteAuthAdapter, setSqliteDb, startSqliteCleanup, // SQLite backend (persisted)
|
|
48
|
-
memoryAuthAdapter, clearMemoryStore, // in-memory backend (ephemeral)
|
|
49
|
-
setUserRoles, addUserRole, removeUserRole, // app-wide role management
|
|
50
|
-
getTenantRoles, setTenantRoles, addTenantRole, removeTenantRole, // tenant-scoped role management
|
|
51
|
-
type AuthAdapter, type OAuthProfile, type OAuthProviderConfig, type MfaChallengeData,
|
|
52
|
-
type AuthRateLimitConfig, type BotProtectionConfig, type BotProtectionOptions,
|
|
53
|
-
type LimitOpts, type RateLimitOptions,
|
|
54
|
-
type SessionMetadata, type SessionInfo, type RefreshResult,
|
|
55
|
-
|
|
56
|
-
// Tenancy
|
|
57
|
-
createTenant, deleteTenant, getTenant, listTenants, // tenant provisioning (MongoDB)
|
|
58
|
-
invalidateTenantCache, // invalidate LRU cache entry
|
|
59
|
-
type TenantInfo, type CreateTenantOptions,
|
|
60
|
-
type TenancyConfig, type TenantConfig,
|
|
61
|
-
|
|
62
|
-
// Middleware
|
|
63
|
-
bearerAuth, identify, userAuth, rateLimit,
|
|
64
|
-
botProtection, // CIDR blocklist + per-route bot protection
|
|
65
|
-
requireRole, // role-based access control (tenant-aware)
|
|
66
|
-
requireVerifiedEmail, // blocks unverified email addresses
|
|
67
|
-
cacheResponse, bustCache, bustCachePattern, setCacheStore, // response caching (tenant-namespaced)
|
|
68
|
-
webhookAuth, // HMAC signature verification for incoming webhooks
|
|
69
|
-
type WebhookAuthOptions, type WebhookTimestampOptions,
|
|
70
|
-
|
|
71
|
-
// Crypto / HMAC utilities
|
|
72
|
-
timingSafeEqual, // constant-time string comparison for secrets/hashes
|
|
73
|
-
sha256, // SHA-256 hash helper
|
|
74
|
-
hmacSign, hmacVerify, // low-level HMAC-SHA256 primitives (key rotation supported)
|
|
75
|
-
signCookieValue, verifyCookieValue, // signed cookie values (tamper-proof)
|
|
76
|
-
signCursor, verifyCursor, // signed pagination cursors
|
|
77
|
-
createPresignedUrl, verifyPresignedUrl, // stateless HMAC presigned URLs
|
|
78
|
-
idempotent, setIdempotencyStore, clearIdempotencyMemoryStore, // idempotency deduplication
|
|
79
|
-
type IdempotencyOptions,
|
|
80
|
-
requireSignedRequest, // middleware: require HMAC-signed requests
|
|
81
|
-
type RequestSigningOptions,
|
|
82
|
-
maybeSignCursor, // sign a cursor if signing.cursors is enabled
|
|
83
|
-
|
|
84
|
-
// IP / proxy utilities
|
|
85
|
-
getClientIp, // centralized IP extraction — respects security.trustProxy setting
|
|
86
|
-
setTrustProxy, // configure trust level (called automatically by createApp)
|
|
87
|
-
|
|
88
|
-
// Utilities
|
|
89
|
-
HttpError, ValidationError, // ValidationError extends HttpError, carries ZodIssue[]
|
|
90
|
-
defaultValidationErrorFormatter, // default { error, details, requestId } shape
|
|
91
|
-
log, validate, createRouter, createRoute,
|
|
92
|
-
registerSchema, registerSchemas, // named OpenAPI schema registration
|
|
93
|
-
zodToMongoose, // Zod → Mongoose schema conversion
|
|
94
|
-
createDtoMapper, // DB document → API DTO mapper factory
|
|
95
|
-
type ZodToMongooseConfig, type ZodToMongooseRefConfig, type DtoMapperConfig,
|
|
96
|
-
getAppRoles, // returns the valid roles list configured at startup
|
|
97
|
-
|
|
98
|
-
// Constants
|
|
99
|
-
COOKIE_TOKEN, HEADER_USER_TOKEN,
|
|
100
|
-
COOKIE_REFRESH_TOKEN, HEADER_REFRESH_TOKEN, // refresh token cookie/header names
|
|
101
|
-
HEADER_IDEMPOTENCY_KEY, // "idempotency-key"
|
|
102
|
-
HEADER_SIGNATURE, HEADER_TIMESTAMP, // request signing header names
|
|
103
|
-
|
|
104
|
-
// Types
|
|
105
|
-
type AppEnv, type AppVariables,
|
|
106
|
-
type ValidationErrorFormatter, type DefaultValidationErrorBody, type ValidationErrorDetail,
|
|
107
|
-
type ValidationConfig,
|
|
108
|
-
type CreateServerConfig, type CreateAppConfig, type ModelSchemasConfig,
|
|
109
|
-
type DbConfig, type AppMeta, type AuthConfig, type OAuthConfig, type SecurityConfig,
|
|
110
|
-
type PrimaryField, type EmailVerificationConfig, type PasswordResetConfig,
|
|
111
|
-
type RefreshTokenConfig, type MfaConfig, type MfaEmailOtpConfig, type JobsConfig,
|
|
112
|
-
type AccountDeletionConfig, type PasswordPolicyConfig, type OAuthCodePayload,
|
|
113
|
-
type SocketData, type WsConfig,
|
|
114
|
-
} from "@lastshotlabs/bunshot";
|
|
115
|
-
|
|
116
|
-
// Jobs (separate entrypoint)
|
|
117
|
-
import {
|
|
118
|
-
createQueue, createWorker,
|
|
119
|
-
createCronWorker, cleanupStaleSchedulers, getRegisteredCronNames,
|
|
120
|
-
createDLQHandler,
|
|
121
|
-
type Job,
|
|
122
|
-
} from "@lastshotlabs/bunshot/queue";
|
|
123
|
-
```
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
## Extending the Context (Custom Variables)
|
|
2
|
-
|
|
3
|
-
When building a tenant app or any app that needs extra typed context variables (beyond the built-in), extend `AppEnv["Variables"]` and create a typed router factory.
|
|
4
|
-
|
|
5
|
-
```ts
|
|
6
|
-
// src/lib/context.ts
|
|
7
|
-
import { createRouter as coreCreateRouter, type AppEnv } from "@lastshotlabs/bunshot";
|
|
8
|
-
import type { OpenAPIHono } from "@hono/zod-openapi";
|
|
9
|
-
|
|
10
|
-
export type MyVariables = AppEnv["Variables"] & {
|
|
11
|
-
tenantId: string;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export type MyEnv = { Variables: MyVariables };
|
|
15
|
-
|
|
16
|
-
export const createRouter = () => coreCreateRouter() as unknown as OpenAPIHono<MyEnv>;
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
Use the local `createRouter` instead of the one from the package — your routes will then have full TypeScript access to the extra variables:
|
|
20
|
-
|
|
21
|
-
```ts
|
|
22
|
-
// src/routes/items.ts
|
|
23
|
-
import { createRouter } from "../lib/context";
|
|
24
|
-
import { userAuth } from "@lastshotlabs/bunshot";
|
|
25
|
-
|
|
26
|
-
export const router = createRouter();
|
|
27
|
-
|
|
28
|
-
router.use("/items", userAuth);
|
|
29
|
-
|
|
30
|
-
router.get("/items", async (c) => {
|
|
31
|
-
const tenantId = c.get("tenantId"); // fully typed
|
|
32
|
-
const userId = c.get("userId"); // still available from AppEnv
|
|
33
|
-
return c.json({ tenantId, userId });
|
|
34
|
-
});
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
Populate the extra variables from a global middleware:
|
|
38
|
-
|
|
39
|
-
```ts
|
|
40
|
-
// src/middleware/tenant.ts
|
|
41
|
-
import type { MiddlewareHandler } from "hono";
|
|
42
|
-
import type { MyEnv } from "../lib/context";
|
|
43
|
-
|
|
44
|
-
export const tenantMiddleware: MiddlewareHandler<MyEnv> = async (c, next) => {
|
|
45
|
-
const tenantId = c.req.header("x-tenant-id") ?? "default";
|
|
46
|
-
c.set("tenantId", tenantId);
|
|
47
|
-
await next();
|
|
48
|
-
};
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Then register it in `createServer`:
|
|
52
|
-
|
|
53
|
-
```ts
|
|
54
|
-
await createServer({
|
|
55
|
-
routesDir: import.meta.dir + "/routes",
|
|
56
|
-
app: { name: "My App", version: "1.0.0" },
|
|
57
|
-
middleware: [tenantMiddleware],
|
|
58
|
-
});
|
|
59
|
-
```
|
package/docs/sections/header.md
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
## Jobs (BullMQ)
|
|
2
|
-
|
|
3
|
-
> **Redis requirement**: BullMQ requires `maxmemory-policy noeviction`. Set it in `redis.conf` or via Docker:
|
|
4
|
-
> ```yaml
|
|
5
|
-
> command: redis-server --maxmemory-policy noeviction
|
|
6
|
-
> ```
|
|
7
|
-
|
|
8
|
-
Queues and workers share the existing Redis connection automatically.
|
|
9
|
-
|
|
10
|
-
### Define a queue
|
|
11
|
-
|
|
12
|
-
```ts
|
|
13
|
-
// src/queues/email.ts
|
|
14
|
-
import { createQueue } from "@lastshotlabs/bunshot";
|
|
15
|
-
|
|
16
|
-
export type EmailJob = { to: string; subject: string; body: string };
|
|
17
|
-
|
|
18
|
-
export const emailQueue = createQueue<EmailJob>("email");
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
### Add jobs
|
|
22
|
-
|
|
23
|
-
```ts
|
|
24
|
-
import { emailQueue } from "../queues/email";
|
|
25
|
-
|
|
26
|
-
await emailQueue.add("send-welcome", { to: "user@example.com", subject: "Welcome", body: "..." });
|
|
27
|
-
|
|
28
|
-
// with options
|
|
29
|
-
await emailQueue.add("send-reset", payload, { delay: 5000, attempts: 3 });
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### Define a worker
|
|
33
|
-
|
|
34
|
-
```ts
|
|
35
|
-
// src/workers/email.ts
|
|
36
|
-
import { createWorker } from "@lastshotlabs/bunshot";
|
|
37
|
-
import type { EmailJob } from "../queues/email";
|
|
38
|
-
|
|
39
|
-
export const emailWorker = createWorker<EmailJob>("email", async (job) => {
|
|
40
|
-
const { to, subject, body } = job.data;
|
|
41
|
-
// send email...
|
|
42
|
-
});
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
Workers in `workersDir` are auto-discovered and registered after the server starts — no manual imports needed. Subdirectories are supported.
|
|
46
|
-
|
|
47
|
-
### Broadcasting WebSocket messages from a worker
|
|
48
|
-
|
|
49
|
-
Use `publish` to broadcast to all connected clients from inside a worker (or anywhere):
|
|
50
|
-
|
|
51
|
-
```ts
|
|
52
|
-
// src/workers/notify.ts
|
|
53
|
-
import { createWorker, publish } from "@lastshotlabs/bunshot";
|
|
54
|
-
import type { NotifyJob } from "../queues/notify";
|
|
55
|
-
|
|
56
|
-
export const notifyWorker = createWorker<NotifyJob>("notify", async (job) => {
|
|
57
|
-
const { text, from } = job.data;
|
|
58
|
-
publish("broadcast", { text, from, timestamp: new Date().toISOString() });
|
|
59
|
-
});
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
`publish` is available after `createServer` resolves. Workers are loaded after that point, so it's always safe to use inside a worker.
|
|
63
|
-
|
|
64
|
-
### Cron / scheduled workers
|
|
65
|
-
|
|
66
|
-
Use `createCronWorker` for recurring jobs. It creates both a queue and worker, and uses BullMQ's `upsertJobScheduler` for idempotent scheduling across restarts.
|
|
67
|
-
|
|
68
|
-
```ts
|
|
69
|
-
// src/workers/cleanup.ts
|
|
70
|
-
import { createCronWorker } from "@lastshotlabs/bunshot/queue";
|
|
71
|
-
|
|
72
|
-
export const { worker, queue } = createCronWorker(
|
|
73
|
-
"cleanup",
|
|
74
|
-
async (job) => {
|
|
75
|
-
// runs every hour
|
|
76
|
-
await deleteExpiredRecords();
|
|
77
|
-
},
|
|
78
|
-
{ cron: "0 * * * *" } // or { every: 3_600_000 } for interval-based
|
|
79
|
-
);
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
**Ghost job cleanup**: When a cron worker is renamed or removed, the old scheduler persists in Redis. Bunshot handles this automatically — after all workers in `workersDir` are loaded, stale schedulers are pruned. For workers managed outside `workersDir`, call `cleanupStaleSchedulers(activeNames)` manually.
|
|
83
|
-
|
|
84
|
-
### Job status endpoint
|
|
85
|
-
|
|
86
|
-
Expose job state via REST for client-side polling (e.g., long-running uploads or exports):
|
|
87
|
-
|
|
88
|
-
```ts
|
|
89
|
-
import { userAuth, requireRole } from "@lastshotlabs/bunshot";
|
|
90
|
-
|
|
91
|
-
await createServer({
|
|
92
|
-
jobs: {
|
|
93
|
-
statusEndpoint: true, // default: false
|
|
94
|
-
auth: "userAuth", // "userAuth" | "none" | MiddlewareHandler[]
|
|
95
|
-
roles: ["admin"], // require these roles (works with userAuth)
|
|
96
|
-
allowedQueues: ["export", "upload"], // whitelist — empty = nothing exposed (secure by default)
|
|
97
|
-
scopeToUser: false, // when true with userAuth, users only see their own jobs
|
|
98
|
-
},
|
|
99
|
-
});
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
**Auth options:**
|
|
103
|
-
- `"userAuth"` — requires an authenticated user session. Combine with `roles` for RBAC.
|
|
104
|
-
- `"none"` — no auth protection (not recommended for production).
|
|
105
|
-
- `MiddlewareHandler[]` — pass a custom middleware stack for full control, e.g. `[userAuth, requireRole("admin")]`.
|
|
106
|
-
|
|
107
|
-
#### Endpoints
|
|
108
|
-
|
|
109
|
-
| Endpoint | Purpose |
|
|
110
|
-
|---|---|
|
|
111
|
-
| `GET /jobs` | List available queues |
|
|
112
|
-
| `GET /jobs/:queue` | List jobs in a queue (paginated, filterable by state) |
|
|
113
|
-
| `GET /jobs/:queue/:id` | Job state, progress, result, or failure reason |
|
|
114
|
-
| `GET /jobs/:queue/:id/logs` | Job logs |
|
|
115
|
-
| `GET /jobs/:queue/dead-letters` | Paginated list of DLQ jobs |
|
|
116
|
-
|
|
117
|
-
The list endpoint (`GET /jobs/:queue`) accepts `?state=waiting|active|completed|failed|delayed|paused` and `?start=0&end=19` for pagination.
|
|
118
|
-
|
|
119
|
-
### Dead Letter Queue (DLQ)
|
|
120
|
-
|
|
121
|
-
Automatically move permanently failed jobs to a DLQ for inspection and retry:
|
|
122
|
-
|
|
123
|
-
```ts
|
|
124
|
-
import { createWorker, createDLQHandler } from "@lastshotlabs/bunshot/queue";
|
|
125
|
-
|
|
126
|
-
const emailWorker = createWorker("email", async (job) => { ... });
|
|
127
|
-
|
|
128
|
-
const { dlqQueue, retryJob } = createDLQHandler(emailWorker, "email", {
|
|
129
|
-
maxSize: 1000, // default: 1000 — oldest trimmed when exceeded
|
|
130
|
-
onDeadLetter: async (job, error) => { // optional alerting callback
|
|
131
|
-
await alertSlack(`Job ${job.id} failed: ${error.message}`);
|
|
132
|
-
},
|
|
133
|
-
preserveJobOptions: true, // default: true — retry with original delay/priority/attempts
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
// Retry a specific failed job
|
|
137
|
-
await retryJob("job-id-123");
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
The DLQ queue is named `${sourceQueueName}-dlq` (e.g., `email-dlq`). It's automatically available via the job status endpoint if listed in `allowedQueues`.
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
## Jobs (BullMQ)
|
|
2
|
-
|
|
3
|
-
Queue-based background jobs powered by BullMQ (requires Redis with `noeviction` policy).
|
|
4
|
-
|
|
5
|
-
```ts
|
|
6
|
-
// Define a queue
|
|
7
|
-
import { createQueue } from "@lastshotlabs/bunshot";
|
|
8
|
-
export const emailQueue = createQueue<{ to: string; subject: string }>("email");
|
|
9
|
-
|
|
10
|
-
// Define a worker (auto-discovered from workersDir)
|
|
11
|
-
import { createWorker } from "@lastshotlabs/bunshot";
|
|
12
|
-
export const emailWorker = createWorker("email", async (job) => { /* send email */ });
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
Features include cron/scheduled workers via `createCronWorker`, dead letter queues via `createDLQHandler`, job status REST endpoints, and WebSocket broadcasting from workers via `publish`.
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
## Request Logging & Request IDs
|
|
2
|
-
|
|
3
|
-
Every request gets a unique **request ID** — either read from the incoming `X-Request-Id` header or generated as a `crypto.randomUUID()`. The ID is:
|
|
4
|
-
|
|
5
|
-
- Set on context: `c.get("requestId")`
|
|
6
|
-
- Echoed back in the `X-Request-Id` response header
|
|
7
|
-
- Included in error JSON responses (`{ error: "...", requestId: "..." }`)
|
|
8
|
-
- Included in audit log entries (when audit logging is enabled)
|
|
9
|
-
|
|
10
|
-
### Structured JSON Logging
|
|
11
|
-
|
|
12
|
-
By default, every request/response is logged as structured JSON (replacing Hono's built-in text logger):
|
|
13
|
-
|
|
14
|
-
```json
|
|
15
|
-
{
|
|
16
|
-
"level": "info",
|
|
17
|
-
"time": 1710000000000,
|
|
18
|
-
"msg": "GET /api/users 200",
|
|
19
|
-
"requestId": "550e8400-e29b-41d4-a716-446655440000",
|
|
20
|
-
"method": "GET",
|
|
21
|
-
"path": "/api/users",
|
|
22
|
-
"statusCode": 200,
|
|
23
|
-
"responseTime": 12.34,
|
|
24
|
-
"ip": "203.0.113.42",
|
|
25
|
-
"userAgent": "Mozilla/5.0...",
|
|
26
|
-
"userId": "user-123",
|
|
27
|
-
"sessionId": "sess-456",
|
|
28
|
-
"tenantId": "tenant-789"
|
|
29
|
-
}
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
Status codes map to log levels: 5xx → `"error"`, 4xx → `"warn"`, else `"info"`.
|
|
33
|
-
|
|
34
|
-
Default excluded paths: `/health`, `/docs`, `/openapi.json` (prefix matching).
|
|
35
|
-
|
|
36
|
-
### Configuration
|
|
37
|
-
|
|
38
|
-
```ts
|
|
39
|
-
await createServer({
|
|
40
|
-
routesDir: import.meta.dir + "/routes",
|
|
41
|
-
logging: {
|
|
42
|
-
// Default: true. Set false to disable logging entirely (no fallback to Hono's text logger)
|
|
43
|
-
enabled: true,
|
|
44
|
-
// Minimum level to emit — "info" (default), "warn", or "error"
|
|
45
|
-
level: "info",
|
|
46
|
-
// Custom log handler — plug in Pino, Datadog, etc.
|
|
47
|
-
onLog: (entry) => pino.info(entry),
|
|
48
|
-
// Paths to exclude (prefix matching for strings, .test() for RegExp)
|
|
49
|
-
excludePaths: ["/health", "/docs", "/openapi.json", /^\/internal\//],
|
|
50
|
-
// HTTP methods to exclude
|
|
51
|
-
excludeMethods: ["OPTIONS"],
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### Using Request IDs
|
|
57
|
-
|
|
58
|
-
Access the request ID in any route or middleware:
|
|
59
|
-
|
|
60
|
-
```ts
|
|
61
|
-
router.get("/api/example", (c) => {
|
|
62
|
-
const requestId = c.get("requestId");
|
|
63
|
-
// Pass to downstream services, include in logs, etc.
|
|
64
|
-
return c.json({ requestId, data: "..." });
|
|
65
|
-
});
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### Exports
|
|
69
|
-
|
|
70
|
-
```ts
|
|
71
|
-
import {
|
|
72
|
-
requestId, // middleware — generates/propagates X-Request-Id
|
|
73
|
-
requestLogger, // middleware — structured JSON request logging
|
|
74
|
-
HEADER_REQUEST_ID, // "x-request-id" constant
|
|
75
|
-
} from "@lastshotlabs/bunshot";
|
|
76
|
-
|
|
77
|
-
import type {
|
|
78
|
-
RequestLogEntry, // shape of each log entry
|
|
79
|
-
RequestLoggerOptions, // options for requestLogger()
|
|
80
|
-
LogLevel, // "info" | "warn" | "error"
|
|
81
|
-
LoggingConfig, // config shape for createApp/createServer
|
|
82
|
-
} from "@lastshotlabs/bunshot";
|
|
83
|
-
```
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
## Prometheus Metrics
|
|
2
|
-
|
|
3
|
-
Opt-in `/metrics` endpoint that Prometheus can scrape. Tracks request counts, latency distributions, and optionally BullMQ queue depths.
|
|
4
|
-
|
|
5
|
-
### Quick Start
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
await createServer({
|
|
9
|
-
routesDir: import.meta.dir + "/routes",
|
|
10
|
-
metrics: {
|
|
11
|
-
enabled: true,
|
|
12
|
-
},
|
|
13
|
-
});
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
`GET /metrics` now returns Prometheus text exposition format:
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
# HELP http_requests_total Total http requests total
|
|
20
|
-
# TYPE http_requests_total counter
|
|
21
|
-
http_requests_total{method="GET",path="/users",status="200"} 42
|
|
22
|
-
|
|
23
|
-
# HELP http_request_duration_seconds http request duration seconds
|
|
24
|
-
# TYPE http_request_duration_seconds histogram
|
|
25
|
-
http_request_duration_seconds_bucket{method="GET",path="/users",le="0.005"} 10
|
|
26
|
-
...
|
|
27
|
-
http_request_duration_seconds_bucket{method="GET",path="/users",le="+Inf"} 42
|
|
28
|
-
http_request_duration_seconds_sum{method="GET",path="/users"} 12.345
|
|
29
|
-
http_request_duration_seconds_count{method="GET",path="/users"} 42
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### Configuration
|
|
33
|
-
|
|
34
|
-
```ts
|
|
35
|
-
await createServer({
|
|
36
|
-
routesDir: import.meta.dir + "/routes",
|
|
37
|
-
metrics: {
|
|
38
|
-
enabled: true,
|
|
39
|
-
// Auth for /metrics — "none" (default), "userAuth", or custom middleware stack
|
|
40
|
-
auth: "userAuth",
|
|
41
|
-
// Paths excluded from collection (prefix matching for strings, .test() for RegExp)
|
|
42
|
-
excludePaths: ["/metrics", "/health", "/docs", "/openapi.json"], // defaults
|
|
43
|
-
// Custom path normalizer (default collapses UUIDs, ObjectIDs, numeric segments to :id)
|
|
44
|
-
normalizePath: (path) => path.replace(/\/[0-9]+/g, "/:id"),
|
|
45
|
-
// BullMQ queue names to report depth gauges for (requires Redis)
|
|
46
|
-
queues: ["email", "reports"],
|
|
47
|
-
},
|
|
48
|
-
});
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### Path Normalization
|
|
52
|
-
|
|
53
|
-
To prevent high-cardinality labels, dynamic path segments are normalized by default:
|
|
54
|
-
|
|
55
|
-
| Pattern | Example | Normalized |
|
|
56
|
-
|---------|---------|------------|
|
|
57
|
-
| UUID | `/users/550e8400-e29b-41d4-a716-446655440000` | `/users/:id` |
|
|
58
|
-
| MongoDB ObjectID | `/items/507f1f77bcf86cd799439011` | `/items/:id` |
|
|
59
|
-
| Numeric segment | `/posts/123/comments` | `/posts/:id/comments` |
|
|
60
|
-
| Short slug | `/api/v2/users` | `/api/v2/users` (unchanged) |
|
|
61
|
-
|
|
62
|
-
Override with `metrics.normalizePath` for custom normalization logic.
|
|
63
|
-
|
|
64
|
-
### Multi-Tenancy
|
|
65
|
-
|
|
66
|
-
When tenancy is configured, a `tenant` label is automatically added to all metrics:
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
http_requests_total{method="GET",path="/data",status="200",tenant="acme"} 15
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### BullMQ Queue Depths
|
|
73
|
-
|
|
74
|
-
When `metrics.queues` is set, a `bullmq_queue_depth` gauge is registered and queried on each scrape:
|
|
75
|
-
|
|
76
|
-
```
|
|
77
|
-
bullmq_queue_depth{queue="email",state="waiting"} 5
|
|
78
|
-
bullmq_queue_depth{queue="email",state="active"} 2
|
|
79
|
-
bullmq_queue_depth{queue="email",state="delayed"} 0
|
|
80
|
-
bullmq_queue_depth{queue="email",state="failed"} 1
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
Queue instances are lazily cached and reused across scrapes. Call `closeMetricsQueues()` during graceful shutdown to clean up Redis connections.
|
|
84
|
-
|
|
85
|
-
### Error Handling
|
|
86
|
-
|
|
87
|
-
Gauge callback errors never cause a 500. If a gauge callback fails, the gauge is omitted from that scrape and an internal error counter is incremented:
|
|
88
|
-
|
|
89
|
-
```
|
|
90
|
-
bunshot_gauge_errors_total{gauge="bullmq_queue_depth"} 1
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
This counter is always present when metrics are enabled so you can alert on scrape failures.
|
|
94
|
-
|
|
95
|
-
### Security
|
|
96
|
-
|
|
97
|
-
Auth defaults to `"none"` for easy adoption. A production warning is logged when metrics are enabled without auth. **Recommended:** Lock down `/metrics` in production since it exposes operational details (error rates, queue depths, tenant activity patterns).
|
|
98
|
-
|
|
99
|
-
```ts
|
|
100
|
-
metrics: {
|
|
101
|
-
enabled: true,
|
|
102
|
-
auth: [userAuth, requireRole("admin")], // custom middleware stack
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### Self-Exclusion
|
|
107
|
-
|
|
108
|
-
`/metrics` is excluded from its own collection and from request logging by default, so scraping doesn't inflate your metrics.
|
|
109
|
-
|
|
110
|
-
### Exports
|
|
111
|
-
|
|
112
|
-
```ts
|
|
113
|
-
import {
|
|
114
|
-
metricsCollector, // middleware — collects request metrics
|
|
115
|
-
incrementCounter, // manually increment a counter
|
|
116
|
-
observeHistogram, // manually observe a histogram value
|
|
117
|
-
registerGaugeCallback, // register an async gauge callback
|
|
118
|
-
serializeMetrics, // produce Prometheus text format
|
|
119
|
-
resetMetrics, // clear all metrics (for tests)
|
|
120
|
-
closeMetricsQueues, // close cached BullMQ queue instances
|
|
121
|
-
} from "@lastshotlabs/bunshot";
|
|
122
|
-
|
|
123
|
-
import type {
|
|
124
|
-
MetricsConfig, // config shape for createApp/createServer
|
|
125
|
-
MetricsMiddlewareOptions, // options for metricsCollector()
|
|
126
|
-
} from "@lastshotlabs/bunshot";
|
|
127
|
-
```
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
## MongoDB Connections
|
|
2
|
-
|
|
3
|
-
MongoDB and Redis connect automatically inside `createServer` / `createApp`. Control the behavior via the `db` config object:
|
|
4
|
-
|
|
5
|
-
### Single database (default)
|
|
6
|
-
|
|
7
|
-
Both auth and app data share one server. Uses `MONGO_*` env vars.
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
await createServer({
|
|
11
|
-
// ...
|
|
12
|
-
db: { mongo: "single", redis: true }, // these are the defaults — can omit db entirely
|
|
13
|
-
// app, auth, security are all optional with sensible defaults
|
|
14
|
-
});
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
### Separate auth database
|
|
18
|
-
|
|
19
|
-
Auth users live on a dedicated server (`MONGO_AUTH_*` env vars), app data on its own server (`MONGO_*` env vars). Useful when multiple tenant apps share one auth cluster.
|
|
20
|
-
|
|
21
|
-
```ts
|
|
22
|
-
await createServer({
|
|
23
|
-
// ...
|
|
24
|
-
db: { mongo: "separate" },
|
|
25
|
-
});
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
### Manual connections
|
|
29
|
-
|
|
30
|
-
Set `mongo: false` and/or `redis: false` to skip auto-connect and manage connections yourself:
|
|
31
|
-
|
|
32
|
-
```ts
|
|
33
|
-
import { connectAuthMongo, connectAppMongo, connectRedis, createServer } from "@lastshotlabs/bunshot";
|
|
34
|
-
|
|
35
|
-
await connectAuthMongo();
|
|
36
|
-
await connectAppMongo();
|
|
37
|
-
await connectRedis();
|
|
38
|
-
|
|
39
|
-
await createServer({
|
|
40
|
-
// ...
|
|
41
|
-
db: { mongo: false, redis: false },
|
|
42
|
-
});
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
`AuthUser` and all built-in auth routes always use `authConnection`. Your app models use `appConnection` (see Adding Models below).
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
## MongoDB Connections
|
|
2
|
-
|
|
3
|
-
MongoDB and Redis connect automatically inside `createServer` / `createApp`. Control via the `db` config:
|
|
4
|
-
|
|
5
|
-
- **`mongo: "single"`** (default) — auth and app data share one server (`MONGO_*` env vars)
|
|
6
|
-
- **`mongo: "separate"`** — auth on its own server (`MONGO_AUTH_*` env vars), app data on another
|
|
7
|
-
- **`mongo: false`** — skip auto-connect, manage connections yourself via `connectAuthMongo()`, `connectAppMongo()`, `connectRedis()`
|