@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
package/dist/lib/auditLog.js
DELETED
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
// ---------------------------------------------------------------------------
|
|
2
|
-
// Memory store
|
|
3
|
-
// ---------------------------------------------------------------------------
|
|
4
|
-
let _auditLogs = [];
|
|
5
|
-
export function clearAuditLogMemoryStore() {
|
|
6
|
-
_auditLogs = [];
|
|
7
|
-
}
|
|
8
|
-
// ---------------------------------------------------------------------------
|
|
9
|
-
// SQLite helpers
|
|
10
|
-
// ---------------------------------------------------------------------------
|
|
11
|
-
function ensureSqliteTable(db) {
|
|
12
|
-
// No module-level flag — CREATE IF NOT EXISTS is idempotent and cheap.
|
|
13
|
-
// A flag would break when multiple Database instances are used (e.g. in tests).
|
|
14
|
-
db.run(`
|
|
15
|
-
CREATE TABLE IF NOT EXISTS audit_logs (
|
|
16
|
-
id TEXT PRIMARY KEY,
|
|
17
|
-
userId TEXT,
|
|
18
|
-
sessionId TEXT,
|
|
19
|
-
tenantId TEXT,
|
|
20
|
-
method TEXT NOT NULL,
|
|
21
|
-
path TEXT NOT NULL,
|
|
22
|
-
status INTEGER NOT NULL,
|
|
23
|
-
ip TEXT,
|
|
24
|
-
userAgent TEXT,
|
|
25
|
-
action TEXT,
|
|
26
|
-
resource TEXT,
|
|
27
|
-
resourceId TEXT,
|
|
28
|
-
meta TEXT,
|
|
29
|
-
createdAt TEXT NOT NULL
|
|
30
|
-
)
|
|
31
|
-
`);
|
|
32
|
-
db.run("CREATE INDEX IF NOT EXISTS idx_al_user ON audit_logs(userId, createdAt)");
|
|
33
|
-
db.run("CREATE INDEX IF NOT EXISTS idx_al_tenant ON audit_logs(tenantId, createdAt)");
|
|
34
|
-
db.run("CREATE INDEX IF NOT EXISTS idx_al_path ON audit_logs(path)");
|
|
35
|
-
}
|
|
36
|
-
// ---------------------------------------------------------------------------
|
|
37
|
-
// logAuditEntry
|
|
38
|
-
// ---------------------------------------------------------------------------
|
|
39
|
-
/**
|
|
40
|
-
* Persist an audit log entry to the configured store.
|
|
41
|
-
* Errors are caught internally — this function never throws, to ensure
|
|
42
|
-
* storage failures never fail the HTTP request.
|
|
43
|
-
*/
|
|
44
|
-
export async function logAuditEntry(entry, options) {
|
|
45
|
-
try {
|
|
46
|
-
if (options.store === "memory") {
|
|
47
|
-
_auditLogs.push(entry);
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
if (options.store === "sqlite") {
|
|
51
|
-
const db = options.db;
|
|
52
|
-
if (!db)
|
|
53
|
-
throw new Error("AuditLog: store is 'sqlite' but no db instance was provided");
|
|
54
|
-
ensureSqliteTable(db);
|
|
55
|
-
db.run(`INSERT INTO audit_logs
|
|
56
|
-
(id, userId, sessionId, tenantId, method, path, status,
|
|
57
|
-
ip, userAgent, action, resource, resourceId, meta, createdAt)
|
|
58
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
59
|
-
entry.id,
|
|
60
|
-
entry.userId ?? null,
|
|
61
|
-
entry.sessionId ?? null,
|
|
62
|
-
entry.tenantId ?? null,
|
|
63
|
-
entry.method,
|
|
64
|
-
entry.path,
|
|
65
|
-
entry.status,
|
|
66
|
-
entry.ip ?? null,
|
|
67
|
-
entry.userAgent ?? null,
|
|
68
|
-
entry.action ?? null,
|
|
69
|
-
entry.resource ?? null,
|
|
70
|
-
entry.resourceId ?? null,
|
|
71
|
-
entry.meta !== undefined ? JSON.stringify(entry.meta) : null,
|
|
72
|
-
entry.createdAt,
|
|
73
|
-
]);
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
if (options.store === "mongo") {
|
|
77
|
-
// Lazy import to avoid bundling mongoose when not used
|
|
78
|
-
const { AuditLog } = await import("../models/AuditLog");
|
|
79
|
-
await AuditLog.create({
|
|
80
|
-
...entry,
|
|
81
|
-
createdAt: new Date(entry.createdAt),
|
|
82
|
-
});
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
console.error("[auditLog] failed to write entry:", err);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
// ---------------------------------------------------------------------------
|
|
91
|
-
// getAuditLogs
|
|
92
|
-
// ---------------------------------------------------------------------------
|
|
93
|
-
/**
|
|
94
|
-
* Query audit log entries from the configured store.
|
|
95
|
-
* Returns `{ items, total }` where `total` is the filtered count before pagination.
|
|
96
|
-
*/
|
|
97
|
-
export async function getAuditLogs(query, options) {
|
|
98
|
-
const limit = Math.min(query.limit ?? 50, 200);
|
|
99
|
-
const offset = query.offset ?? 0;
|
|
100
|
-
const after = query.after ? new Date(query.after).toISOString() : undefined;
|
|
101
|
-
const before = query.before ? new Date(query.before).toISOString() : undefined;
|
|
102
|
-
// --- Memory ---
|
|
103
|
-
if (options.store === "memory") {
|
|
104
|
-
let filtered = _auditLogs.slice();
|
|
105
|
-
if (query.userId !== undefined)
|
|
106
|
-
filtered = filtered.filter(e => e.userId === query.userId);
|
|
107
|
-
if (query.tenantId !== undefined)
|
|
108
|
-
filtered = filtered.filter(e => e.tenantId === query.tenantId);
|
|
109
|
-
if (after)
|
|
110
|
-
filtered = filtered.filter(e => e.createdAt >= after);
|
|
111
|
-
if (before)
|
|
112
|
-
filtered = filtered.filter(e => e.createdAt < before);
|
|
113
|
-
return { items: filtered.slice(offset, offset + limit), total: filtered.length };
|
|
114
|
-
}
|
|
115
|
-
// --- SQLite ---
|
|
116
|
-
if (options.store === "sqlite") {
|
|
117
|
-
const db = options.db;
|
|
118
|
-
if (!db)
|
|
119
|
-
throw new Error("AuditLog: store is 'sqlite' but no db instance was provided");
|
|
120
|
-
ensureSqliteTable(db);
|
|
121
|
-
const conditions = [];
|
|
122
|
-
const params = [];
|
|
123
|
-
if (query.userId !== undefined) {
|
|
124
|
-
conditions.push("userId = ?");
|
|
125
|
-
params.push(query.userId);
|
|
126
|
-
}
|
|
127
|
-
if (query.tenantId !== undefined) {
|
|
128
|
-
conditions.push("tenantId = ?");
|
|
129
|
-
params.push(query.tenantId);
|
|
130
|
-
}
|
|
131
|
-
if (after) {
|
|
132
|
-
conditions.push("createdAt >= ?");
|
|
133
|
-
params.push(after);
|
|
134
|
-
}
|
|
135
|
-
if (before) {
|
|
136
|
-
conditions.push("createdAt < ?");
|
|
137
|
-
params.push(before);
|
|
138
|
-
}
|
|
139
|
-
const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
140
|
-
const { count } = db.query(`SELECT COUNT(*) as count FROM audit_logs ${where}`).get(...params) ?? { count: 0 };
|
|
141
|
-
const rows = db.query(`SELECT * FROM audit_logs ${where} ORDER BY createdAt DESC LIMIT ? OFFSET ?`).all(...params, limit, offset);
|
|
142
|
-
const items = rows.map(row => ({
|
|
143
|
-
id: row.id,
|
|
144
|
-
userId: row.userId ?? null,
|
|
145
|
-
sessionId: row.sessionId ?? null,
|
|
146
|
-
tenantId: row.tenantId ?? null,
|
|
147
|
-
method: row.method,
|
|
148
|
-
path: row.path,
|
|
149
|
-
status: row.status,
|
|
150
|
-
ip: row.ip ?? null,
|
|
151
|
-
userAgent: row.userAgent ?? null,
|
|
152
|
-
action: row.action ?? undefined,
|
|
153
|
-
resource: row.resource ?? undefined,
|
|
154
|
-
resourceId: row.resourceId ?? undefined,
|
|
155
|
-
meta: row.meta ? JSON.parse(row.meta) : undefined,
|
|
156
|
-
createdAt: row.createdAt,
|
|
157
|
-
}));
|
|
158
|
-
return { items, total: count };
|
|
159
|
-
}
|
|
160
|
-
// --- MongoDB ---
|
|
161
|
-
if (options.store === "mongo") {
|
|
162
|
-
const { AuditLog } = await import("../models/AuditLog");
|
|
163
|
-
const filter = {};
|
|
164
|
-
if (query.userId !== undefined)
|
|
165
|
-
filter.userId = query.userId;
|
|
166
|
-
if (query.tenantId !== undefined)
|
|
167
|
-
filter.tenantId = query.tenantId;
|
|
168
|
-
if (after || before) {
|
|
169
|
-
filter.createdAt = {
|
|
170
|
-
...(after ? { $gte: new Date(after) } : {}),
|
|
171
|
-
...(before ? { $lt: new Date(before) } : {}),
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
const [total, docs] = await Promise.all([
|
|
175
|
-
AuditLog.countDocuments(filter),
|
|
176
|
-
AuditLog.find(filter)
|
|
177
|
-
.sort({ createdAt: -1 })
|
|
178
|
-
.skip(offset)
|
|
179
|
-
.limit(limit)
|
|
180
|
-
.lean(),
|
|
181
|
-
]);
|
|
182
|
-
const items = docs.map(doc => ({
|
|
183
|
-
id: doc.id,
|
|
184
|
-
userId: doc.userId ?? null,
|
|
185
|
-
sessionId: doc.sessionId ?? null,
|
|
186
|
-
tenantId: doc.tenantId ?? null,
|
|
187
|
-
method: doc.method,
|
|
188
|
-
path: doc.path,
|
|
189
|
-
status: doc.status,
|
|
190
|
-
ip: doc.ip ?? null,
|
|
191
|
-
userAgent: doc.userAgent ?? null,
|
|
192
|
-
action: doc.action,
|
|
193
|
-
resource: doc.resource,
|
|
194
|
-
resourceId: doc.resourceId,
|
|
195
|
-
meta: doc.meta,
|
|
196
|
-
createdAt: doc.createdAt.toISOString(),
|
|
197
|
-
}));
|
|
198
|
-
return { items, total };
|
|
199
|
-
}
|
|
200
|
-
return { items: [], total: 0 };
|
|
201
|
-
}
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
import type { GroupRecord, GroupMembershipRecord, PaginationOpts, PaginatedResult } from "./groups";
|
|
2
|
-
export type { GroupRecord, GroupMembershipRecord, PaginationOpts, PaginatedResult };
|
|
3
|
-
export interface OAuthProfile {
|
|
4
|
-
email?: string;
|
|
5
|
-
name?: string;
|
|
6
|
-
avatarUrl?: string;
|
|
7
|
-
}
|
|
8
|
-
export interface WebAuthnCredential {
|
|
9
|
-
/** Base64url-encoded credential ID. */
|
|
10
|
-
credentialId: string;
|
|
11
|
-
/** Base64url-encoded public key. */
|
|
12
|
-
publicKey: string;
|
|
13
|
-
/** Counter for signature verification (replay protection). */
|
|
14
|
-
signCount: number;
|
|
15
|
-
/** Transport hints from the authenticator (usb, ble, nfc, internal). */
|
|
16
|
-
transports?: string[];
|
|
17
|
-
/** User-assigned name for the key (e.g. "YubiKey 5"). */
|
|
18
|
-
name?: string;
|
|
19
|
-
/** When the credential was registered (epoch ms). */
|
|
20
|
-
createdAt: number;
|
|
21
|
-
}
|
|
22
|
-
export interface AuthAdapter {
|
|
23
|
-
findByEmail(email: string): Promise<{
|
|
24
|
-
id: string;
|
|
25
|
-
passwordHash: string;
|
|
26
|
-
} | null>;
|
|
27
|
-
create(email: string, passwordHash: string): Promise<{
|
|
28
|
-
id: string;
|
|
29
|
-
}>;
|
|
30
|
-
/** Required when using OAuth providers. Find or create a user by provider + provider user ID. */
|
|
31
|
-
findOrCreateByProvider?(provider: string, providerId: string, profile: OAuthProfile): Promise<{
|
|
32
|
-
id: string;
|
|
33
|
-
created: boolean;
|
|
34
|
-
}>;
|
|
35
|
-
/** Optional. Set or update the password hash for a user (used by /auth/set-password). */
|
|
36
|
-
setPassword?(userId: string, passwordHash: string): Promise<void>;
|
|
37
|
-
/** Optional. Link a provider identity to an existing user (used by /auth/:provider/link). */
|
|
38
|
-
linkProvider?(userId: string, provider: string, providerId: string): Promise<void>;
|
|
39
|
-
/** Optional. Return the roles assigned to a user (used by requireRole middleware). */
|
|
40
|
-
getRoles?(userId: string): Promise<string[]>;
|
|
41
|
-
/** Optional. Set the roles for a user, replacing any existing roles. */
|
|
42
|
-
setRoles?(userId: string, roles: string[]): Promise<void>;
|
|
43
|
-
/** Optional. Add a single role to a user without affecting their other roles. */
|
|
44
|
-
addRole?(userId: string, role: string): Promise<void>;
|
|
45
|
-
/** Optional. Remove a single role from a user without affecting their other roles. */
|
|
46
|
-
removeRole?(userId: string, role: string): Promise<void>;
|
|
47
|
-
/** Optional. Return basic profile info for a user by ID (used by GET /auth/me). */
|
|
48
|
-
getUser?(userId: string): Promise<{
|
|
49
|
-
email?: string;
|
|
50
|
-
providerIds?: string[];
|
|
51
|
-
emailVerified?: boolean;
|
|
52
|
-
} | null>;
|
|
53
|
-
/** Optional. Unlink a provider identity from a user (used by DELETE /auth/:provider/link). */
|
|
54
|
-
unlinkProvider?(userId: string, provider: string): Promise<void>;
|
|
55
|
-
/**
|
|
56
|
-
* Optional. Look up a user by their primary identifier (email, username, or phone depending on config).
|
|
57
|
-
* When provided, used instead of findByEmail for credential login/register flows.
|
|
58
|
-
*/
|
|
59
|
-
findByIdentifier?(value: string): Promise<{
|
|
60
|
-
id: string;
|
|
61
|
-
passwordHash: string;
|
|
62
|
-
} | null>;
|
|
63
|
-
/** Optional. Mark a user's email address as verified (used by POST /auth/verify-email). */
|
|
64
|
-
setEmailVerified?(userId: string, verified: boolean): Promise<void>;
|
|
65
|
-
/** Optional. Return whether a user's email address has been verified. */
|
|
66
|
-
getEmailVerified?(userId: string): Promise<boolean>;
|
|
67
|
-
/** Optional. Permanently delete a user account. Used by DELETE /auth/me. */
|
|
68
|
-
deleteUser?(userId: string): Promise<void>;
|
|
69
|
-
/** Optional. Check whether a user has a password set (credential account vs OAuth-only). */
|
|
70
|
-
hasPassword?(userId: string): Promise<boolean>;
|
|
71
|
-
/** Optional. Store the TOTP secret for MFA setup (encrypted or plaintext, adapter decides). */
|
|
72
|
-
setMfaSecret?(userId: string, secret: string | null): Promise<void>;
|
|
73
|
-
/** Optional. Retrieve the TOTP secret for MFA verification. */
|
|
74
|
-
getMfaSecret?(userId: string): Promise<string | null>;
|
|
75
|
-
/** Optional. Check whether MFA is enabled for a user. */
|
|
76
|
-
isMfaEnabled?(userId: string): Promise<boolean>;
|
|
77
|
-
/** Optional. Enable or disable MFA for a user. */
|
|
78
|
-
setMfaEnabled?(userId: string, enabled: boolean): Promise<void>;
|
|
79
|
-
/** Optional. Store hashed recovery codes for MFA. */
|
|
80
|
-
setRecoveryCodes?(userId: string, codes: string[]): Promise<void>;
|
|
81
|
-
/** Optional. Retrieve hashed recovery codes for MFA. */
|
|
82
|
-
getRecoveryCodes?(userId: string): Promise<string[]>;
|
|
83
|
-
/** Optional. Remove a single recovery code after use. */
|
|
84
|
-
removeRecoveryCode?(userId: string, code: string): Promise<void>;
|
|
85
|
-
/** Optional. Get the MFA methods enabled for a user (e.g., ["totp"], ["emailOtp"], ["totp", "emailOtp"]). */
|
|
86
|
-
getMfaMethods?(userId: string): Promise<string[]>;
|
|
87
|
-
/** Optional. Set the MFA methods enabled for a user. */
|
|
88
|
-
setMfaMethods?(userId: string, methods: string[]): Promise<void>;
|
|
89
|
-
/** Optional. Get roles for a user within a specific tenant. */
|
|
90
|
-
getTenantRoles?(userId: string, tenantId: string): Promise<string[]>;
|
|
91
|
-
/** Optional. Set roles for a user within a specific tenant (replaces existing). */
|
|
92
|
-
setTenantRoles?(userId: string, tenantId: string, roles: string[]): Promise<void>;
|
|
93
|
-
/** Optional. Add a single role to a user within a specific tenant. */
|
|
94
|
-
addTenantRole?(userId: string, tenantId: string, role: string): Promise<void>;
|
|
95
|
-
/** Optional. Remove a single role from a user within a specific tenant. */
|
|
96
|
-
removeTenantRole?(userId: string, tenantId: string, role: string): Promise<void>;
|
|
97
|
-
/** Optional. Get all WebAuthn credentials for a user. */
|
|
98
|
-
getWebAuthnCredentials?(userId: string): Promise<WebAuthnCredential[]>;
|
|
99
|
-
/** Optional. Add a WebAuthn credential for a user. */
|
|
100
|
-
addWebAuthnCredential?(userId: string, credential: WebAuthnCredential): Promise<void>;
|
|
101
|
-
/** Optional. Remove a WebAuthn credential by its credential ID. */
|
|
102
|
-
removeWebAuthnCredential?(userId: string, credentialId: string): Promise<void>;
|
|
103
|
-
/** Optional. Update the sign count for a WebAuthn credential after successful authentication. */
|
|
104
|
-
updateWebAuthnCredentialSignCount?(userId: string, credentialId: string, signCount: number): Promise<void>;
|
|
105
|
-
/** Optional. Find the user who owns a WebAuthn credential. Returns userId or null. Used for cross-user uniqueness checks. */
|
|
106
|
-
findUserByWebAuthnCredentialId?(credentialId: string): Promise<string | null>;
|
|
107
|
-
/**
|
|
108
|
-
* Create a new group. Returns the new group's id.
|
|
109
|
-
* The name must be a slug (/^[a-z0-9_-]+$/) and unique within its scope.
|
|
110
|
-
* tenantId: null = app-wide group, string = tenant-scoped group.
|
|
111
|
-
*/
|
|
112
|
-
createGroup?(group: Omit<GroupRecord, "id" | "createdAt" | "updatedAt">): Promise<{
|
|
113
|
-
id: string;
|
|
114
|
-
}>;
|
|
115
|
-
/**
|
|
116
|
-
* Delete a group and cascade-delete all its memberships.
|
|
117
|
-
* Cascade behavior is adapter-specific (MongoDB: manual deleteMany, SQLite: ON DELETE CASCADE).
|
|
118
|
-
*/
|
|
119
|
-
deleteGroup?(groupId: string): Promise<void>;
|
|
120
|
-
/** Get a group by ID. Returns null if not found. */
|
|
121
|
-
getGroup?(groupId: string): Promise<GroupRecord | null>;
|
|
122
|
-
/**
|
|
123
|
-
* List groups scoped to a tenant (tenantId string) or app-wide (tenantId null).
|
|
124
|
-
* Results are paginated (default limit 50, max 200).
|
|
125
|
-
*/
|
|
126
|
-
listGroups?(tenantId: string | null, opts?: PaginationOpts): Promise<PaginatedResult<GroupRecord>>;
|
|
127
|
-
/**
|
|
128
|
-
* Update mutable group fields: name, displayName, description, roles.
|
|
129
|
-
* tenantId is intentionally excluded — it is immutable after creation.
|
|
130
|
-
*/
|
|
131
|
-
updateGroup?(groupId: string, updates: Partial<Pick<GroupRecord, "roles" | "name" | "displayName" | "description">>): Promise<void>;
|
|
132
|
-
/**
|
|
133
|
-
* Add a user to a group with optional per-membership roles.
|
|
134
|
-
*
|
|
135
|
-
* CONTRACT: throws if the user is already a member (unique constraint violation).
|
|
136
|
-
* All adapters must surface this as a thrown error, not a silent no-op.
|
|
137
|
-
* Use updateGroupMembership to change roles on an existing membership.
|
|
138
|
-
*/
|
|
139
|
-
addGroupMember?(groupId: string, userId: string, roles?: string[]): Promise<void>;
|
|
140
|
-
/**
|
|
141
|
-
* Update the per-membership roles for an existing group member.
|
|
142
|
-
* Replaces the member's roles[] in place (not additive).
|
|
143
|
-
* No updatedAt is tracked — intentional, see GroupMembershipRecord.
|
|
144
|
-
*/
|
|
145
|
-
updateGroupMembership?(groupId: string, userId: string, roles: string[]): Promise<void>;
|
|
146
|
-
/** Remove a user from a group. No-op if the user is not a member. */
|
|
147
|
-
removeGroupMember?(groupId: string, userId: string): Promise<void>;
|
|
148
|
-
/** List members of a group with their per-membership roles. Paginated. */
|
|
149
|
-
getGroupMembers?(groupId: string, opts?: PaginationOpts): Promise<PaginatedResult<{
|
|
150
|
-
userId: string;
|
|
151
|
-
roles: string[];
|
|
152
|
-
}>>;
|
|
153
|
-
/**
|
|
154
|
-
* List all groups a user belongs to in the given scope, with their per-membership roles.
|
|
155
|
-
* tenantId = null → app-wide groups; tenantId = string → tenant-scoped groups.
|
|
156
|
-
*/
|
|
157
|
-
getUserGroups?(userId: string, tenantId: string | null): Promise<Array<{
|
|
158
|
-
group: GroupRecord;
|
|
159
|
-
membershipRoles: string[];
|
|
160
|
-
}>>;
|
|
161
|
-
/**
|
|
162
|
-
* Return all roles a user effectively has in the given scope, combining:
|
|
163
|
-
* 1. Direct roles (app-wide or tenant-scoped)
|
|
164
|
-
* 2. Group baseline roles (from all groups the user belongs to in that scope)
|
|
165
|
-
* 3. Per-membership roles (user-specific extras within each group)
|
|
166
|
-
*
|
|
167
|
-
* SCOPE CONTRACT (matches requireRole behavior):
|
|
168
|
-
* - tenantId = null → app-wide direct roles + app-wide group roles only
|
|
169
|
-
* - tenantId = string → tenant-scoped direct roles + tenant-scoped group roles only
|
|
170
|
-
*
|
|
171
|
-
* Tenant-scoped group roles NEVER satisfy app-wide role checks and vice versa.
|
|
172
|
-
*/
|
|
173
|
-
getEffectiveRoles?(userId: string, tenantId: string | null): Promise<string[]>;
|
|
174
|
-
}
|
|
175
|
-
export declare const setAuthAdapter: (adapter: AuthAdapter) => void;
|
|
176
|
-
export declare const getAuthAdapter: () => AuthAdapter;
|
package/dist/lib/authAdapter.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
let _adapter = null;
|
|
2
|
-
export const setAuthAdapter = (adapter) => { _adapter = adapter; };
|
|
3
|
-
export const getAuthAdapter = () => {
|
|
4
|
-
if (!_adapter)
|
|
5
|
-
throw new Error("No auth adapter set — pass authAdapter to createApp/createServer, or call setAuthAdapter()");
|
|
6
|
-
return _adapter;
|
|
7
|
-
};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export declare const setAuthRateLimitStore: (store: "memory" | "redis") => void;
|
|
2
|
-
export interface LimitOpts {
|
|
3
|
-
windowMs: number;
|
|
4
|
-
max: number;
|
|
5
|
-
}
|
|
6
|
-
/** Returns true if the key is currently over the limit (read-only, no increment). */
|
|
7
|
-
export declare const isLimited: (key: string, opts: LimitOpts) => Promise<boolean>;
|
|
8
|
-
/** Increments the counter and returns true if now over the limit. */
|
|
9
|
-
export declare const trackAttempt: (key: string, opts: LimitOpts) => Promise<boolean>;
|
|
10
|
-
/** Resets a rate limit key. Use on login success or for admin unlock. */
|
|
11
|
-
export declare const bustAuthLimit: (key: string) => Promise<void>;
|
|
12
|
-
/** Clears all in-memory rate limit entries. Called by clearMemoryStore(). */
|
|
13
|
-
export declare const clearMemoryRateLimitStore: () => void;
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { getAppName } from "./appConfig";
|
|
2
|
-
// ---------------------------------------------------------------------------
|
|
3
|
-
// Memory implementation
|
|
4
|
-
// ---------------------------------------------------------------------------
|
|
5
|
-
const _memoryStore = new Map();
|
|
6
|
-
const memoryStore = {
|
|
7
|
-
async get(key) {
|
|
8
|
-
const entry = _memoryStore.get(key);
|
|
9
|
-
if (!entry)
|
|
10
|
-
return null;
|
|
11
|
-
if (entry.resetAt <= Date.now()) {
|
|
12
|
-
_memoryStore.delete(key);
|
|
13
|
-
return null;
|
|
14
|
-
}
|
|
15
|
-
return entry;
|
|
16
|
-
},
|
|
17
|
-
async set(key, entry) {
|
|
18
|
-
_memoryStore.set(key, entry);
|
|
19
|
-
},
|
|
20
|
-
async delete(key) {
|
|
21
|
-
_memoryStore.delete(key);
|
|
22
|
-
},
|
|
23
|
-
};
|
|
24
|
-
// ---------------------------------------------------------------------------
|
|
25
|
-
// Redis implementation
|
|
26
|
-
// ---------------------------------------------------------------------------
|
|
27
|
-
const redisStore = {
|
|
28
|
-
async get(key) {
|
|
29
|
-
const { getRedis } = await import("./redis");
|
|
30
|
-
const raw = await getRedis().get(`rl:${getAppName()}:${key}`);
|
|
31
|
-
if (!raw)
|
|
32
|
-
return null;
|
|
33
|
-
const entry = JSON.parse(raw);
|
|
34
|
-
if (entry.resetAt <= Date.now())
|
|
35
|
-
return null;
|
|
36
|
-
return entry;
|
|
37
|
-
},
|
|
38
|
-
async set(key, entry, ttlMs) {
|
|
39
|
-
const { getRedis } = await import("./redis");
|
|
40
|
-
await getRedis().set(`rl:${getAppName()}:${key}`, JSON.stringify(entry), "PX", ttlMs);
|
|
41
|
-
},
|
|
42
|
-
async delete(key) {
|
|
43
|
-
const { getRedis } = await import("./redis");
|
|
44
|
-
await getRedis().del(`rl:${getAppName()}:${key}`);
|
|
45
|
-
},
|
|
46
|
-
};
|
|
47
|
-
// ---------------------------------------------------------------------------
|
|
48
|
-
// Active store + setter
|
|
49
|
-
// ---------------------------------------------------------------------------
|
|
50
|
-
let _store = memoryStore;
|
|
51
|
-
export const setAuthRateLimitStore = (store) => {
|
|
52
|
-
_store = store === "redis" ? redisStore : memoryStore;
|
|
53
|
-
};
|
|
54
|
-
/** Returns true if the key is currently over the limit (read-only, no increment). */
|
|
55
|
-
export const isLimited = async (key, opts) => {
|
|
56
|
-
const entry = await _store.get(key);
|
|
57
|
-
if (!entry)
|
|
58
|
-
return false;
|
|
59
|
-
return entry.count >= opts.max;
|
|
60
|
-
};
|
|
61
|
-
/** Increments the counter and returns true if now over the limit. */
|
|
62
|
-
export const trackAttempt = async (key, opts) => {
|
|
63
|
-
const now = Date.now();
|
|
64
|
-
const existing = await _store.get(key);
|
|
65
|
-
if (!existing) {
|
|
66
|
-
await _store.set(key, { count: 1, resetAt: now + opts.windowMs }, opts.windowMs);
|
|
67
|
-
return 1 >= opts.max;
|
|
68
|
-
}
|
|
69
|
-
const updated = { count: existing.count + 1, resetAt: existing.resetAt };
|
|
70
|
-
const remaining = Math.max(1, existing.resetAt - now);
|
|
71
|
-
await _store.set(key, updated, remaining);
|
|
72
|
-
return updated.count >= opts.max;
|
|
73
|
-
};
|
|
74
|
-
/** Resets a rate limit key. Use on login success or for admin unlock. */
|
|
75
|
-
export const bustAuthLimit = async (key) => {
|
|
76
|
-
await _store.delete(key);
|
|
77
|
-
};
|
|
78
|
-
/** Clears all in-memory rate limit entries. Called by clearMemoryStore(). */
|
|
79
|
-
export const clearMemoryRateLimitStore = () => {
|
|
80
|
-
_memoryStore.clear();
|
|
81
|
-
};
|
package/dist/lib/clientIp.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { Context } from "hono";
|
|
2
|
-
export declare const setTrustProxy: (value: false | number) => void;
|
|
3
|
-
/**
|
|
4
|
-
* Returns the client IP address, respecting the `trustProxy` setting.
|
|
5
|
-
*
|
|
6
|
-
* - When `trustProxy` is `false`: returns the socket-level IP (via Bun's
|
|
7
|
-
* `server.requestIP()`), ignoring `X-Forwarded-For` entirely.
|
|
8
|
-
* - When `trustProxy` is a number N: takes the Nth-from-right entry in the
|
|
9
|
-
* `X-Forwarded-For` chain (skipping N trusted proxy hops), falling back to
|
|
10
|
-
* the socket-level IP.
|
|
11
|
-
*
|
|
12
|
-
* Returns `"unknown"` if no IP can be determined.
|
|
13
|
-
*/
|
|
14
|
-
export declare const getClientIp: (c: Context<any>) => string;
|
package/dist/lib/crypto.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Constant-time string comparison to prevent timing attacks.
|
|
3
|
-
* Returns true if both strings are equal, false otherwise.
|
|
4
|
-
* Always compares the full length even on mismatch.
|
|
5
|
-
*/
|
|
6
|
-
export declare function timingSafeEqual(a: string, b: string): boolean;
|
|
7
|
-
/**
|
|
8
|
-
* SHA-256 hash a string and return the hex digest.
|
|
9
|
-
* Centralized to avoid duplicate implementations across modules.
|
|
10
|
-
*/
|
|
11
|
-
export declare function sha256(input: string): string;
|
package/dist/lib/crypto.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { createHash, timingSafeEqual as nodeTimingSafeEqual } from "crypto";
|
|
2
|
-
/**
|
|
3
|
-
* Constant-time string comparison to prevent timing attacks.
|
|
4
|
-
* Returns true if both strings are equal, false otherwise.
|
|
5
|
-
* Always compares the full length even on mismatch.
|
|
6
|
-
*/
|
|
7
|
-
export function timingSafeEqual(a, b) {
|
|
8
|
-
if (a.length !== b.length) {
|
|
9
|
-
// Compare against self to burn the same time, then return false
|
|
10
|
-
const buf = Buffer.from(a, "utf-8");
|
|
11
|
-
nodeTimingSafeEqual(buf, buf);
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
return nodeTimingSafeEqual(Buffer.from(a, "utf-8"), Buffer.from(b, "utf-8"));
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* SHA-256 hash a string and return the hex digest.
|
|
18
|
-
* Centralized to avoid duplicate implementations across modules.
|
|
19
|
-
*/
|
|
20
|
-
export function sha256(input) {
|
|
21
|
-
return createHash("sha256").update(input).digest("hex");
|
|
22
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
type CancelStore = "redis" | "mongo" | "sqlite" | "memory";
|
|
2
|
-
export declare const setDeletionCancelTokenStore: (store: CancelStore) => void;
|
|
3
|
-
/** Create a cancel token. Returns the raw token (to embed in the cancel link).
|
|
4
|
-
* Only the SHA-256 hash is persisted. TTL is gracePeriod + a 5-minute buffer. */
|
|
5
|
-
export declare const createDeletionCancelToken: (userId: string, jobId: string, gracePeriodSeconds: number) => Promise<string>;
|
|
6
|
-
/** Atomically consume a cancel token — returns its payload and deletes it.
|
|
7
|
-
* Returns null if the token is invalid, expired, or already used. */
|
|
8
|
-
export declare const consumeDeletionCancelToken: (token: string) => Promise<{
|
|
9
|
-
userId: string;
|
|
10
|
-
jobId: string;
|
|
11
|
-
} | null>;
|
|
12
|
-
export {};
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { getRedis } from "./redis";
|
|
2
|
-
import { appConnection, mongoose } from "./mongo";
|
|
3
|
-
import { getAppName } from "./appConfig";
|
|
4
|
-
import { sqliteCreateDeletionCancelToken, sqliteConsumeDeletionCancelToken, } from "../adapters/sqliteAuth";
|
|
5
|
-
import { memoryCreateDeletionCancelToken, memoryConsumeDeletionCancelToken, } from "../adapters/memoryAuth";
|
|
6
|
-
import { sha256 as hashToken } from "./crypto";
|
|
7
|
-
function getCancelModel() {
|
|
8
|
-
if (appConnection.models["DeletionCancelToken"])
|
|
9
|
-
return appConnection.models["DeletionCancelToken"];
|
|
10
|
-
const { Schema } = mongoose;
|
|
11
|
-
const schema = new Schema({
|
|
12
|
-
token: { type: String, required: true, unique: true },
|
|
13
|
-
userId: { type: String, required: true },
|
|
14
|
-
jobId: { type: String, required: true },
|
|
15
|
-
expiresAt: { type: Date, required: true, index: { expireAfterSeconds: 0 } },
|
|
16
|
-
}, { collection: "deletion_cancel_tokens" });
|
|
17
|
-
return appConnection.model("DeletionCancelToken", schema);
|
|
18
|
-
}
|
|
19
|
-
// ---------------------------------------------------------------------------
|
|
20
|
-
// Redis helpers
|
|
21
|
-
// ---------------------------------------------------------------------------
|
|
22
|
-
async function redisGetDel(key) {
|
|
23
|
-
const redis = getRedis();
|
|
24
|
-
if (typeof redis.getdel === "function") {
|
|
25
|
-
try {
|
|
26
|
-
return await redis.getdel(key);
|
|
27
|
-
}
|
|
28
|
-
catch (err) {
|
|
29
|
-
const msg = err?.message ?? "";
|
|
30
|
-
if (!/unknown command|ERR unknown command/i.test(msg))
|
|
31
|
-
throw err;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
const result = await redis.eval("local v = redis.call('GET', KEYS[1])\nif v then redis.call('DEL', KEYS[1]) end\nreturn v", 1, key);
|
|
35
|
-
return result ?? null;
|
|
36
|
-
}
|
|
37
|
-
let _store = "redis";
|
|
38
|
-
export const setDeletionCancelTokenStore = (store) => { _store = store; };
|
|
39
|
-
// ---------------------------------------------------------------------------
|
|
40
|
-
// Public API
|
|
41
|
-
// ---------------------------------------------------------------------------
|
|
42
|
-
/** Create a cancel token. Returns the raw token (to embed in the cancel link).
|
|
43
|
-
* Only the SHA-256 hash is persisted. TTL is gracePeriod + a 5-minute buffer. */
|
|
44
|
-
export const createDeletionCancelToken = async (userId, jobId, gracePeriodSeconds) => {
|
|
45
|
-
const token = crypto.randomUUID();
|
|
46
|
-
const hash = hashToken(token);
|
|
47
|
-
const ttl = gracePeriodSeconds + 300; // 5-min buffer after grace period expires
|
|
48
|
-
if (_store === "memory") {
|
|
49
|
-
memoryCreateDeletionCancelToken(hash, userId, jobId, ttl);
|
|
50
|
-
return token;
|
|
51
|
-
}
|
|
52
|
-
if (_store === "sqlite") {
|
|
53
|
-
sqliteCreateDeletionCancelToken(hash, userId, jobId, ttl);
|
|
54
|
-
return token;
|
|
55
|
-
}
|
|
56
|
-
if (_store === "mongo") {
|
|
57
|
-
await getCancelModel().create({
|
|
58
|
-
token: hash,
|
|
59
|
-
userId,
|
|
60
|
-
jobId,
|
|
61
|
-
expiresAt: new Date(Date.now() + ttl * 1000),
|
|
62
|
-
});
|
|
63
|
-
return token;
|
|
64
|
-
}
|
|
65
|
-
await getRedis().set(`delcancel:${getAppName()}:${hash}`, JSON.stringify({ userId, jobId }), "EX", ttl);
|
|
66
|
-
return token;
|
|
67
|
-
};
|
|
68
|
-
/** Atomically consume a cancel token — returns its payload and deletes it.
|
|
69
|
-
* Returns null if the token is invalid, expired, or already used. */
|
|
70
|
-
export const consumeDeletionCancelToken = async (token) => {
|
|
71
|
-
const hash = hashToken(token);
|
|
72
|
-
if (_store === "memory")
|
|
73
|
-
return memoryConsumeDeletionCancelToken(hash);
|
|
74
|
-
if (_store === "sqlite")
|
|
75
|
-
return sqliteConsumeDeletionCancelToken(hash);
|
|
76
|
-
if (_store === "mongo") {
|
|
77
|
-
const doc = await getCancelModel()
|
|
78
|
-
.findOneAndDelete({ token: hash, expiresAt: { $gt: new Date() } })
|
|
79
|
-
.lean();
|
|
80
|
-
if (!doc)
|
|
81
|
-
return null;
|
|
82
|
-
return { userId: doc.userId, jobId: doc.jobId };
|
|
83
|
-
}
|
|
84
|
-
const raw = await redisGetDel(`delcancel:${getAppName()}:${hash}`);
|
|
85
|
-
if (!raw)
|
|
86
|
-
return null;
|
|
87
|
-
return JSON.parse(raw);
|
|
88
|
-
};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
type VerificationStore = "redis" | "mongo" | "sqlite" | "memory";
|
|
2
|
-
export declare const setEmailVerificationStore: (store: VerificationStore) => void;
|
|
3
|
-
/** Create a verification token. Returns the raw token (for the email link).
|
|
4
|
-
* Only the SHA-256 hash is persisted in the store. */
|
|
5
|
-
export declare const createVerificationToken: (userId: string, email: string) => Promise<string>;
|
|
6
|
-
/** Look up a verification token by its raw value. Hashes before lookup. */
|
|
7
|
-
export declare const getVerificationToken: (token: string) => Promise<{
|
|
8
|
-
userId: string;
|
|
9
|
-
email: string;
|
|
10
|
-
} | null>;
|
|
11
|
-
/** Delete a verification token by its raw value. Hashes before lookup. */
|
|
12
|
-
export declare const deleteVerificationToken: (token: string) => Promise<void>;
|
|
13
|
-
export {};
|