@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,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { HttpError } from '../../../bunshot-core/src/index.js';
|
|
2
|
+
import { getAuthRuntimeFromRequest } from '../runtime';
|
|
3
|
+
const EXEMPT_PREFIXES = ['/auth/', '/health', '/docs', '/openapi.json'];
|
|
3
4
|
/**
|
|
4
5
|
* Middleware that blocks authenticated users who have not completed MFA setup.
|
|
5
6
|
*
|
|
@@ -14,23 +15,25 @@ const EXEMPT_PREFIXES = ["/auth/", "/health", "/docs", "/openapi.json"];
|
|
|
14
15
|
* Unauthenticated requests pass through — use `userAuth` to block those.
|
|
15
16
|
*/
|
|
16
17
|
export const requireMfaSetup = async (c, next) => {
|
|
17
|
-
const
|
|
18
|
+
const rawPath = c.req.path;
|
|
19
|
+
// Strip version prefix if present (e.g., /v1/auth/... → /auth/...)
|
|
20
|
+
const path = rawPath.replace(/^\/v\d+/, '');
|
|
18
21
|
// Exempt paths — auth routes (including MFA setup), health, docs, root
|
|
19
|
-
if (path ===
|
|
22
|
+
if (path === '/' || EXEMPT_PREFIXES.some(p => path.startsWith(p))) {
|
|
20
23
|
return next();
|
|
21
24
|
}
|
|
22
25
|
// Only applies to authenticated users — unauthenticated requests pass through
|
|
23
|
-
const userId = c.get(
|
|
26
|
+
const userId = c.get('authUserId');
|
|
24
27
|
if (!userId) {
|
|
25
28
|
return next();
|
|
26
29
|
}
|
|
27
|
-
const adapter =
|
|
30
|
+
const adapter = getAuthRuntimeFromRequest(c).adapter;
|
|
28
31
|
if (!adapter.isMfaEnabled) {
|
|
29
32
|
return next();
|
|
30
33
|
}
|
|
31
34
|
const enabled = await adapter.isMfaEnabled(userId);
|
|
32
35
|
if (!enabled) {
|
|
33
|
-
|
|
36
|
+
throw new HttpError(403, 'MFA setup required', 'MFA_SETUP_REQUIRED');
|
|
34
37
|
}
|
|
35
38
|
return next();
|
|
36
39
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { MiddlewareHandler } from
|
|
2
|
-
import type { AppEnv } from
|
|
1
|
+
import type { MiddlewareHandler } from 'hono';
|
|
2
|
+
import type { AppEnv } from '../../../bunshot-core/src/index.js';
|
|
3
3
|
/**
|
|
4
4
|
* Middleware factory that enforces role-based access.
|
|
5
5
|
* Requires `identify` to have run first (authUserId must be set).
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { getEffectiveRoles } from
|
|
1
|
+
import { getEffectiveRoles } from '../lib/groups';
|
|
2
|
+
import { isProd } from '../lib/env';
|
|
3
|
+
import { getAuthRuntimeFromRequest } from '../runtime';
|
|
2
4
|
/**
|
|
3
5
|
* Middleware factory that enforces role-based access.
|
|
4
6
|
* Requires `identify` to have run first (authUserId must be set).
|
|
@@ -17,15 +19,16 @@ import { getEffectiveRoles } from "../lib/groups";
|
|
|
17
19
|
* app.get("/mod", userAuth, requireRole("admin", "moderator"), handler)
|
|
18
20
|
*/
|
|
19
21
|
export const requireRole = Object.assign((...roles) => async (c, next) => {
|
|
20
|
-
const userId = c.get(
|
|
22
|
+
const userId = c.get('authUserId');
|
|
21
23
|
if (!userId) {
|
|
22
|
-
return c.json({ error:
|
|
24
|
+
return c.json({ error: 'Unauthorized' }, 401);
|
|
23
25
|
}
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
const runtime = getAuthRuntimeFromRequest(c);
|
|
27
|
+
const tenantId = c.get('tenantId') ?? null;
|
|
28
|
+
const effective = await getEffectiveRoles(runtime.adapter, userId, tenantId);
|
|
29
|
+
c.set('roles', effective);
|
|
30
|
+
if (!roles.some(r => effective.includes(r))) {
|
|
31
|
+
return c.json({ error: 'Forbidden' }, 403);
|
|
29
32
|
}
|
|
30
33
|
await next();
|
|
31
34
|
}, {
|
|
@@ -42,21 +45,22 @@ export const requireRole = Object.assign((...roles) => async (c, next) => {
|
|
|
42
45
|
* app.get("/super-admin", userAuth, requireRole.global("superadmin"), handler)
|
|
43
46
|
*/
|
|
44
47
|
global: (...roles) => async (c, next) => {
|
|
45
|
-
const userId = c.get(
|
|
48
|
+
const userId = c.get('authUserId');
|
|
46
49
|
if (!userId) {
|
|
47
|
-
return c.json({ error:
|
|
50
|
+
return c.json({ error: 'Unauthorized' }, 401);
|
|
48
51
|
}
|
|
52
|
+
const runtime = getAuthRuntimeFromRequest(c);
|
|
49
53
|
// In development, log when tenant context is present but intentionally ignored.
|
|
50
54
|
// console.info is used deliberately: console.debug is suppressed by default in most
|
|
51
55
|
// runtimes, so info gives reliably visible output during development without being
|
|
52
56
|
// noisy in production (this branch never executes there).
|
|
53
|
-
if (
|
|
54
|
-
console.info(
|
|
57
|
+
if (!isProd() && c.get('tenantId')) {
|
|
58
|
+
console.info('[requireRole.global] tenant context present but intentionally ignored — checking app-wide roles only');
|
|
55
59
|
}
|
|
56
|
-
const effective = await getEffectiveRoles(userId, null);
|
|
57
|
-
c.set(
|
|
58
|
-
if (!roles.some(
|
|
59
|
-
return c.json({ error:
|
|
60
|
+
const effective = await getEffectiveRoles(runtime.adapter, userId, null);
|
|
61
|
+
c.set('roles', effective);
|
|
62
|
+
if (!roles.some(r => effective.includes(r))) {
|
|
63
|
+
return c.json({ error: 'Forbidden' }, 403);
|
|
60
64
|
}
|
|
61
65
|
await next();
|
|
62
66
|
},
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from 'hono';
|
|
2
|
+
import type { AppEnv } from '../../../bunshot-core/src/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Middleware that requires the JWT to contain all specified scopes.
|
|
5
|
+
* Reads scope from `tokenPayload.scope` (set by identify middleware).
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* router.get("/data", requireScope("read:data"), handler);
|
|
9
|
+
*/
|
|
10
|
+
export declare const requireScope: (...requiredScopes: string[]) => MiddlewareHandler<AppEnv>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { HttpError } from '../../../bunshot-core/src/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Middleware that requires the JWT to contain all specified scopes.
|
|
4
|
+
* Reads scope from `tokenPayload.scope` (set by identify middleware).
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* router.get("/data", requireScope("read:data"), handler);
|
|
8
|
+
*/
|
|
9
|
+
export const requireScope = (...requiredScopes) => async (c, next) => {
|
|
10
|
+
const payload = c.get('tokenPayload');
|
|
11
|
+
if (!payload) {
|
|
12
|
+
throw new HttpError(401, 'Authentication required');
|
|
13
|
+
}
|
|
14
|
+
const scope = payload.scope;
|
|
15
|
+
if (!scope) {
|
|
16
|
+
throw new HttpError(403, 'Insufficient scope', 'INSUFFICIENT_SCOPE');
|
|
17
|
+
}
|
|
18
|
+
const grantedScopes = scope.split(' ');
|
|
19
|
+
for (const required of requiredScopes) {
|
|
20
|
+
if (!grantedScopes.includes(required)) {
|
|
21
|
+
throw new HttpError(403, 'Insufficient scope', 'INSUFFICIENT_SCOPE');
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
await next();
|
|
25
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from 'hono';
|
|
2
|
+
import type { AppEnv } from '../../../bunshot-core/src/index.js';
|
|
3
|
+
export interface StepUpOptions {
|
|
4
|
+
/** Max age in seconds since last MFA verification. Default: 300 (5 min). */
|
|
5
|
+
maxAge?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Middleware that requires the user to have recently completed step-up MFA.
|
|
9
|
+
*
|
|
10
|
+
* Attach to sensitive routes that require fresh MFA verification:
|
|
11
|
+
* ```
|
|
12
|
+
* router.post("/transfer", userAuth, requireStepUp(), transferHandler);
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* The user completes step-up via POST /auth/step-up.
|
|
16
|
+
* After successful step-up, mfaVerifiedAt is stored in their session.
|
|
17
|
+
*/
|
|
18
|
+
export declare const requireStepUp: (opts?: StepUpOptions) => MiddlewareHandler<AppEnv>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { HttpError } from '../../../bunshot-core/src/index.js';
|
|
2
|
+
import { getAuthRuntimeFromRequest } from '../runtime';
|
|
3
|
+
/**
|
|
4
|
+
* Middleware that requires the user to have recently completed step-up MFA.
|
|
5
|
+
*
|
|
6
|
+
* Attach to sensitive routes that require fresh MFA verification:
|
|
7
|
+
* ```
|
|
8
|
+
* router.post("/transfer", userAuth, requireStepUp(), transferHandler);
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* The user completes step-up via POST /auth/step-up.
|
|
12
|
+
* After successful step-up, mfaVerifiedAt is stored in their session.
|
|
13
|
+
*/
|
|
14
|
+
export const requireStepUp = (opts) => async (c, next) => {
|
|
15
|
+
const sessionId = c.get('sessionId');
|
|
16
|
+
if (!sessionId) {
|
|
17
|
+
throw new HttpError(401, 'Authentication required');
|
|
18
|
+
}
|
|
19
|
+
const maxAge = opts?.maxAge ?? 300;
|
|
20
|
+
const runtime = getAuthRuntimeFromRequest(c);
|
|
21
|
+
const verifiedAt = await runtime.repos.session.getMfaVerifiedAt(sessionId);
|
|
22
|
+
if (verifiedAt === null) {
|
|
23
|
+
throw new HttpError(403, 'Step-up authentication required', 'STEP_UP_REQUIRED');
|
|
24
|
+
}
|
|
25
|
+
const now = Math.floor(Date.now() / 1000);
|
|
26
|
+
if (now - verifiedAt > maxAge) {
|
|
27
|
+
throw new HttpError(403, 'Step-up authentication expired', 'STEP_UP_REQUIRED');
|
|
28
|
+
}
|
|
29
|
+
await next();
|
|
30
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { MiddlewareHandler } from
|
|
2
|
-
import type { AppEnv } from
|
|
1
|
+
import type { MiddlewareHandler } from 'hono';
|
|
2
|
+
import type { AppEnv } from '../../../bunshot-core/src/index.js';
|
|
3
3
|
/**
|
|
4
4
|
* Middleware that blocks access for users whose email address has not been verified.
|
|
5
5
|
* Must run after `userAuth` (requires `authUserId` to be set on context).
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { HttpError } from '../../../bunshot-core/src/index.js';
|
|
2
|
+
import { getAuthRuntimeFromRequest } from '../runtime';
|
|
2
3
|
/**
|
|
3
4
|
* Middleware that blocks access for users whose email address has not been verified.
|
|
4
5
|
* Must run after `userAuth` (requires `authUserId` to be set on context).
|
|
@@ -9,17 +10,17 @@ import { getAuthAdapter } from "../lib/authAdapter";
|
|
|
9
10
|
* router.use("/dashboard", userAuth, requireVerifiedEmail);
|
|
10
11
|
*/
|
|
11
12
|
export const requireVerifiedEmail = async (c, next) => {
|
|
12
|
-
const userId = c.get(
|
|
13
|
+
const userId = c.get('authUserId');
|
|
13
14
|
if (!userId) {
|
|
14
|
-
return c.json({ error:
|
|
15
|
+
return c.json({ error: 'Unauthorized' }, 401);
|
|
15
16
|
}
|
|
16
|
-
const adapter =
|
|
17
|
+
const adapter = getAuthRuntimeFromRequest(c).adapter;
|
|
17
18
|
if (!adapter.getEmailVerified) {
|
|
18
|
-
throw new
|
|
19
|
+
throw new HttpError(500, 'Internal server error');
|
|
19
20
|
}
|
|
20
21
|
const verified = await adapter.getEmailVerified(userId);
|
|
21
22
|
if (!verified) {
|
|
22
|
-
return c.json({ error:
|
|
23
|
+
return c.json({ error: 'Email not verified' }, 403);
|
|
23
24
|
}
|
|
24
25
|
await next();
|
|
25
26
|
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from 'hono';
|
|
2
|
+
import type { AppEnv } from '../../../bunshot-core/src/index.js';
|
|
3
|
+
import type { AuthRuntimeContext } from '../runtime';
|
|
4
|
+
/**
|
|
5
|
+
* Middleware that validates SCIM bearer tokens.
|
|
6
|
+
* Tokens are checked with timingSafeEqual to prevent timing attacks.
|
|
7
|
+
*/
|
|
8
|
+
export declare const createScimAuth: (runtime: AuthRuntimeContext) => MiddlewareHandler<AppEnv>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { HttpError, timingSafeEqual } from '../../../bunshot-core/src/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Middleware that validates SCIM bearer tokens.
|
|
4
|
+
* Tokens are checked with timingSafeEqual to prevent timing attacks.
|
|
5
|
+
*/
|
|
6
|
+
export const createScimAuth = (runtime) => async (c, next) => {
|
|
7
|
+
const tokens = runtime.config.scim?.bearerTokens;
|
|
8
|
+
const configuredTokens = (Array.isArray(tokens) ? tokens : tokens ? [tokens] : []).filter(token => token.length > 0);
|
|
9
|
+
if (configuredTokens.length === 0) {
|
|
10
|
+
throw new Error('[bunshot-auth] SCIM auth middleware mounted without configured bearer tokens');
|
|
11
|
+
}
|
|
12
|
+
const authHeader = c.req.header('authorization') ?? '';
|
|
13
|
+
if (!authHeader.startsWith('Bearer ')) {
|
|
14
|
+
throw new HttpError(401, 'SCIM bearer token required');
|
|
15
|
+
}
|
|
16
|
+
const provided = authHeader.slice(7);
|
|
17
|
+
const valid = configuredTokens.some(token => {
|
|
18
|
+
try {
|
|
19
|
+
return timingSafeEqual(provided, token);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
if (!valid) {
|
|
26
|
+
throw new HttpError(401, 'Invalid SCIM token');
|
|
27
|
+
}
|
|
28
|
+
await next();
|
|
29
|
+
};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import type { Document, Model } from
|
|
1
|
+
import type { Connection, Document, Model, Mongoose } from 'mongoose';
|
|
2
2
|
interface IAuthUser {
|
|
3
3
|
email?: string | null;
|
|
4
|
+
/** Primary login identifier — equals email when primaryField="email", username or phone otherwise. */
|
|
5
|
+
identifier?: string | null;
|
|
4
6
|
password?: string | null;
|
|
5
7
|
/** Compound provider keys: ["google:123456", "apple:000111"] */
|
|
6
8
|
providerIds: string[];
|
|
@@ -25,13 +27,22 @@ interface IAuthUser {
|
|
|
25
27
|
name?: string;
|
|
26
28
|
createdAt: Date;
|
|
27
29
|
}>;
|
|
30
|
+
displayName?: string;
|
|
31
|
+
firstName?: string;
|
|
32
|
+
lastName?: string;
|
|
33
|
+
externalId?: string;
|
|
34
|
+
suspended: boolean;
|
|
35
|
+
suspendedAt?: Date;
|
|
36
|
+
suspendedReason?: string;
|
|
37
|
+
/** Previous bcrypt password hashes for reuse prevention. Oldest-first; max length = preventReuse config. */
|
|
38
|
+
passwordHistory?: string[];
|
|
39
|
+
userMetadata?: Record<string, unknown>;
|
|
40
|
+
appMetadata?: Record<string, unknown>;
|
|
28
41
|
}
|
|
29
42
|
type AuthUserDocument = IAuthUser & Document;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
id: string;
|
|
36
|
-
}, any, AuthUserDocument>;
|
|
43
|
+
/**
|
|
44
|
+
* Create (or retrieve cached) AuthUser model on the given connection.
|
|
45
|
+
* Model caching is handled by Mongoose's connection.models registry.
|
|
46
|
+
*/
|
|
47
|
+
export declare function createAuthUserModel(conn: Connection, mongooseInstance: Mongoose): Model<AuthUserDocument>;
|
|
37
48
|
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create (or retrieve cached) AuthUser model on the given connection.
|
|
3
|
+
* Model caching is handled by Mongoose's connection.models registry.
|
|
4
|
+
*/
|
|
5
|
+
export function createAuthUserModel(conn, mongooseInstance) {
|
|
6
|
+
if (conn.models['AuthUser'])
|
|
7
|
+
return conn.models['AuthUser'];
|
|
8
|
+
const { Schema } = mongooseInstance;
|
|
9
|
+
const schema = new Schema({
|
|
10
|
+
email: { type: String, unique: true, sparse: true, lowercase: true },
|
|
11
|
+
/** Primary login identifier — equals email when primaryField="email", username or phone otherwise. */
|
|
12
|
+
identifier: { type: String, unique: true, sparse: true, lowercase: true },
|
|
13
|
+
password: { type: String },
|
|
14
|
+
/** Compound provider keys: ["google:123456", "apple:000111"] */
|
|
15
|
+
providerIds: [{ type: String }],
|
|
16
|
+
/** App-defined roles assigned to this user: ["admin", "editor", ...] */
|
|
17
|
+
roles: [{ type: String }],
|
|
18
|
+
/** Whether the user's email address has been verified. */
|
|
19
|
+
emailVerified: { type: Boolean, default: false },
|
|
20
|
+
/** TOTP secret for MFA. */
|
|
21
|
+
mfaSecret: { type: String, default: null },
|
|
22
|
+
/** Whether MFA is enabled. */
|
|
23
|
+
mfaEnabled: { type: Boolean, default: false },
|
|
24
|
+
/** SHA-256 hashed recovery codes for MFA. */
|
|
25
|
+
recoveryCodes: [{ type: String }],
|
|
26
|
+
/** MFA methods enabled for this user. */
|
|
27
|
+
mfaMethods: [{ type: String }],
|
|
28
|
+
/** WebAuthn credentials (security keys / platform authenticators). */
|
|
29
|
+
webauthnCredentials: [
|
|
30
|
+
{
|
|
31
|
+
credentialId: { type: String, required: true },
|
|
32
|
+
publicKey: { type: String, required: true },
|
|
33
|
+
signCount: { type: Number, required: true, default: 0 },
|
|
34
|
+
transports: [{ type: String }],
|
|
35
|
+
name: { type: String },
|
|
36
|
+
createdAt: { type: Date, default: Date.now },
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
displayName: { type: String, default: null },
|
|
40
|
+
firstName: { type: String, default: null },
|
|
41
|
+
lastName: { type: String, default: null },
|
|
42
|
+
externalId: { type: String, default: null, index: true, sparse: true },
|
|
43
|
+
suspended: { type: Boolean, default: false },
|
|
44
|
+
suspendedAt: { type: Date, default: null },
|
|
45
|
+
suspendedReason: { type: String, default: null },
|
|
46
|
+
/** Previous bcrypt password hashes for reuse prevention. */
|
|
47
|
+
passwordHistory: [{ type: String }],
|
|
48
|
+
userMetadata: { type: Schema.Types.Mixed, default: {} },
|
|
49
|
+
appMetadata: { type: Schema.Types.Mixed, default: {} },
|
|
50
|
+
}, { timestamps: true });
|
|
51
|
+
schema.index({ providerIds: 1 });
|
|
52
|
+
return conn.model('AuthUser', schema);
|
|
53
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Connection, Document, Model, Mongoose } from 'mongoose';
|
|
2
|
+
interface IGroup {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName?: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
roles: string[];
|
|
7
|
+
/**
|
|
8
|
+
* null = app-wide group, string = tenant-scoped group.
|
|
9
|
+
* Immutable after creation — adapters must reject updates that include tenantId.
|
|
10
|
+
*/
|
|
11
|
+
tenantId: string | null;
|
|
12
|
+
}
|
|
13
|
+
type GroupDocument = IGroup & Document;
|
|
14
|
+
/**
|
|
15
|
+
* Create (or retrieve cached) Group model on the given connection.
|
|
16
|
+
* Model caching is handled by Mongoose's connection.models registry.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createGroupModel(conn: Connection, mongooseInstance: Mongoose): Model<GroupDocument>;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create (or retrieve cached) Group model on the given connection.
|
|
3
|
+
* Model caching is handled by Mongoose's connection.models registry.
|
|
4
|
+
*/
|
|
5
|
+
export function createGroupModel(conn, mongooseInstance) {
|
|
6
|
+
if (conn.models['Group'])
|
|
7
|
+
return conn.models['Group'];
|
|
8
|
+
const { Schema } = mongooseInstance;
|
|
9
|
+
const schema = new Schema({
|
|
10
|
+
name: { type: String, required: true },
|
|
11
|
+
displayName: { type: String },
|
|
12
|
+
description: { type: String },
|
|
13
|
+
roles: [{ type: String }],
|
|
14
|
+
tenantId: { type: String, default: null },
|
|
15
|
+
}, { timestamps: true });
|
|
16
|
+
// Name is unique within scope (app-wide or per-tenant).
|
|
17
|
+
// MongoDB treats null as a value, so this compound index correctly enforces uniqueness
|
|
18
|
+
// for app-wide groups (both have tenantId: null) and per-tenant groups separately.
|
|
19
|
+
schema.index({ name: 1, tenantId: 1 }, { unique: true });
|
|
20
|
+
schema.index({ tenantId: 1 });
|
|
21
|
+
return conn.model('Group', schema);
|
|
22
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Document, Model } from
|
|
1
|
+
import type { Connection, Document, Model, Mongoose } from 'mongoose';
|
|
2
2
|
interface IGroupMembership {
|
|
3
3
|
userId: string;
|
|
4
4
|
groupId: string;
|
|
@@ -11,11 +11,9 @@ interface IGroupMembership {
|
|
|
11
11
|
tenantId: string | null;
|
|
12
12
|
}
|
|
13
13
|
type GroupMembershipDocument = IGroupMembership & Document;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
id: string;
|
|
20
|
-
}, any, GroupMembershipDocument>;
|
|
14
|
+
/**
|
|
15
|
+
* Create (or retrieve cached) GroupMembership model on the given connection.
|
|
16
|
+
* Model caching is handled by Mongoose's connection.models registry.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createGroupMembershipModel(conn: Connection, mongooseInstance: Mongoose): Model<GroupMembershipDocument>;
|
|
21
19
|
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create (or retrieve cached) GroupMembership model on the given connection.
|
|
3
|
+
* Model caching is handled by Mongoose's connection.models registry.
|
|
4
|
+
*/
|
|
5
|
+
export function createGroupMembershipModel(conn, mongooseInstance) {
|
|
6
|
+
if (conn.models['GroupMembership'])
|
|
7
|
+
return conn.models['GroupMembership'];
|
|
8
|
+
const { Schema } = mongooseInstance;
|
|
9
|
+
const schema = new Schema({
|
|
10
|
+
userId: { type: String, required: true },
|
|
11
|
+
groupId: { type: String, required: true },
|
|
12
|
+
roles: [{ type: String }],
|
|
13
|
+
tenantId: { type: String, default: null },
|
|
14
|
+
}, { timestamps: { createdAt: true, updatedAt: false } });
|
|
15
|
+
schema.index({ userId: 1, groupId: 1 }, { unique: true });
|
|
16
|
+
schema.index({ groupId: 1 });
|
|
17
|
+
schema.index({ userId: 1, tenantId: 1 });
|
|
18
|
+
return conn.model('GroupMembership', schema);
|
|
19
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import mongoose from 'mongoose';
|
|
2
|
+
export interface IM2MClient {
|
|
3
|
+
_id: string;
|
|
4
|
+
clientId: string;
|
|
5
|
+
clientSecretHash: string;
|
|
6
|
+
name: string;
|
|
7
|
+
scopes: string[];
|
|
8
|
+
active: boolean;
|
|
9
|
+
createdAt: Date;
|
|
10
|
+
updatedAt: Date;
|
|
11
|
+
}
|
|
12
|
+
export declare const M2MClient: mongoose.Model<IM2MClient, {}, {}, {}, mongoose.Document<unknown, {}, IM2MClient, {}, mongoose.DefaultSchemaOptions> & IM2MClient & Required<{
|
|
13
|
+
_id: string;
|
|
14
|
+
}> & {
|
|
15
|
+
__v: number;
|
|
16
|
+
} & {
|
|
17
|
+
id: string;
|
|
18
|
+
}, any, IM2MClient>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import mongoose from 'mongoose';
|
|
2
|
+
const m2mClientSchema = new mongoose.Schema({
|
|
3
|
+
clientId: { type: String, required: true, unique: true },
|
|
4
|
+
clientSecretHash: { type: String, required: true },
|
|
5
|
+
name: { type: String, required: true },
|
|
6
|
+
scopes: { type: [String], default: [] },
|
|
7
|
+
active: { type: Boolean, default: true },
|
|
8
|
+
}, { timestamps: true });
|
|
9
|
+
// Lazy proxy pattern (same as AuthUser.ts)
|
|
10
|
+
export const M2MClient = new Proxy({}, {
|
|
11
|
+
get(_, prop) {
|
|
12
|
+
const { authConnection } = require('../infra/mongo');
|
|
13
|
+
if (!authConnection)
|
|
14
|
+
throw new Error('authConnection not initialized — call connectAuthMongo() or connectMongo() first');
|
|
15
|
+
const model = authConnection.models['M2MClient'] ?? authConnection.model('M2MClient', m2mClientSchema);
|
|
16
|
+
return Reflect.get(model, prop);
|
|
17
|
+
},
|
|
18
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Connection, Document, Model, Mongoose } from 'mongoose';
|
|
2
|
+
interface ITenantRole {
|
|
3
|
+
userId: string;
|
|
4
|
+
tenantId: string;
|
|
5
|
+
roles: string[];
|
|
6
|
+
}
|
|
7
|
+
type TenantRoleDocument = ITenantRole & Document;
|
|
8
|
+
/**
|
|
9
|
+
* Create (or retrieve cached) TenantRole model on the given connection.
|
|
10
|
+
* Model caching is handled by Mongoose's connection.models registry.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createTenantRoleModel(conn: Connection, mongooseInstance: Mongoose): Model<TenantRoleDocument>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create (or retrieve cached) TenantRole model on the given connection.
|
|
3
|
+
* Model caching is handled by Mongoose's connection.models registry.
|
|
4
|
+
*/
|
|
5
|
+
export function createTenantRoleModel(conn, mongooseInstance) {
|
|
6
|
+
if (conn.models['TenantRole'])
|
|
7
|
+
return conn.models['TenantRole'];
|
|
8
|
+
const { Schema } = mongooseInstance;
|
|
9
|
+
const schema = new Schema({
|
|
10
|
+
userId: { type: String, required: true },
|
|
11
|
+
tenantId: { type: String, required: true },
|
|
12
|
+
roles: [{ type: String }],
|
|
13
|
+
}, { timestamps: true });
|
|
14
|
+
schema.index({ userId: 1, tenantId: 1 }, { unique: true });
|
|
15
|
+
schema.index({ tenantId: 1 });
|
|
16
|
+
return conn.model('TenantRole', schema);
|
|
17
|
+
}
|