@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/mfaChallenge.js
DELETED
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
import { getRedis } from "./redis";
|
|
2
|
-
import { appConnection, mongoose } from "./mongo";
|
|
3
|
-
import { getAppName, getMfaChallengeTtl } from "./appConfig";
|
|
4
|
-
import { sha256 } from "./crypto";
|
|
5
|
-
const MAX_RESENDS = 3;
|
|
6
|
-
function getMfaChallengeModel() {
|
|
7
|
-
if (appConnection.models["MfaChallenge"])
|
|
8
|
-
return appConnection.models["MfaChallenge"];
|
|
9
|
-
const { Schema } = mongoose;
|
|
10
|
-
const schema = new Schema({
|
|
11
|
-
token: { type: String, required: true, unique: true },
|
|
12
|
-
userId: { type: String, required: true },
|
|
13
|
-
purpose: { type: String, required: true, default: "login" },
|
|
14
|
-
emailOtpHash: { type: String },
|
|
15
|
-
webauthnChallenge: { type: String },
|
|
16
|
-
createdAt: { type: Date, required: true },
|
|
17
|
-
resendCount: { type: Number, required: true, default: 0 },
|
|
18
|
-
expiresAt: { type: Date, required: true, index: { expireAfterSeconds: 0 } },
|
|
19
|
-
}, { collection: "mfa_challenges" });
|
|
20
|
-
return appConnection.model("MfaChallenge", schema);
|
|
21
|
-
}
|
|
22
|
-
// ---------------------------------------------------------------------------
|
|
23
|
-
// In-memory store
|
|
24
|
-
// ---------------------------------------------------------------------------
|
|
25
|
-
const _memoryChallenges = new Map();
|
|
26
|
-
/** Reset all in-memory MFA challenge state. Called by clearMemoryStore(). */
|
|
27
|
-
export const clearMemoryMfaChallenges = () => { _memoryChallenges.clear(); };
|
|
28
|
-
// ---------------------------------------------------------------------------
|
|
29
|
-
// SQLite store (reuses the existing SQLite DB instance)
|
|
30
|
-
// ---------------------------------------------------------------------------
|
|
31
|
-
let _sqliteDb = null;
|
|
32
|
-
let _sqliteTableCreated = false;
|
|
33
|
-
/** Must be called when store is "sqlite" to inject the db instance. */
|
|
34
|
-
export const setMfaChallengeSqliteDb = (db) => { _sqliteDb = db; };
|
|
35
|
-
function ensureSqliteMfaTable() {
|
|
36
|
-
if (_sqliteTableCreated || !_sqliteDb)
|
|
37
|
-
return;
|
|
38
|
-
_sqliteDb.run(`CREATE TABLE IF NOT EXISTS mfa_challenges (
|
|
39
|
-
token TEXT PRIMARY KEY,
|
|
40
|
-
userId TEXT NOT NULL,
|
|
41
|
-
purpose TEXT NOT NULL DEFAULT 'login',
|
|
42
|
-
emailOtpHash TEXT,
|
|
43
|
-
webauthnChallenge TEXT,
|
|
44
|
-
createdAt INTEGER NOT NULL,
|
|
45
|
-
resendCount INTEGER NOT NULL DEFAULT 0,
|
|
46
|
-
expiresAt INTEGER NOT NULL
|
|
47
|
-
)`);
|
|
48
|
-
// Migrate pre-existing tables that lack newer columns
|
|
49
|
-
try {
|
|
50
|
-
_sqliteDb.run("ALTER TABLE mfa_challenges ADD COLUMN emailOtpHash TEXT");
|
|
51
|
-
}
|
|
52
|
-
catch { /* already exists */ }
|
|
53
|
-
try {
|
|
54
|
-
_sqliteDb.run("ALTER TABLE mfa_challenges ADD COLUMN createdAt INTEGER NOT NULL DEFAULT 0");
|
|
55
|
-
}
|
|
56
|
-
catch { /* already exists */ }
|
|
57
|
-
try {
|
|
58
|
-
_sqliteDb.run("ALTER TABLE mfa_challenges ADD COLUMN resendCount INTEGER NOT NULL DEFAULT 0");
|
|
59
|
-
}
|
|
60
|
-
catch { /* already exists */ }
|
|
61
|
-
try {
|
|
62
|
-
_sqliteDb.run("ALTER TABLE mfa_challenges ADD COLUMN purpose TEXT NOT NULL DEFAULT 'login'");
|
|
63
|
-
}
|
|
64
|
-
catch { /* already exists */ }
|
|
65
|
-
try {
|
|
66
|
-
_sqliteDb.run("ALTER TABLE mfa_challenges ADD COLUMN webauthnChallenge TEXT");
|
|
67
|
-
}
|
|
68
|
-
catch { /* already exists */ }
|
|
69
|
-
_sqliteTableCreated = true;
|
|
70
|
-
}
|
|
71
|
-
let _store = "redis";
|
|
72
|
-
export const setMfaChallengeStore = (store) => { _store = store; };
|
|
73
|
-
// ---------------------------------------------------------------------------
|
|
74
|
-
// Public API
|
|
75
|
-
// ---------------------------------------------------------------------------
|
|
76
|
-
export const createMfaChallenge = async (userId, options) => {
|
|
77
|
-
const token = crypto.randomUUID();
|
|
78
|
-
const hash = sha256(token);
|
|
79
|
-
const ttl = getMfaChallengeTtl();
|
|
80
|
-
const now = Date.now();
|
|
81
|
-
const purpose = "login";
|
|
82
|
-
const emailOtpHash = options?.emailOtpHash;
|
|
83
|
-
const webauthnChallenge = options?.webauthnChallenge;
|
|
84
|
-
if (_store === "memory") {
|
|
85
|
-
_memoryChallenges.set(hash, { userId, purpose, emailOtpHash, webauthnChallenge, createdAt: now, resendCount: 0, expiresAt: now + ttl * 1000 });
|
|
86
|
-
return token;
|
|
87
|
-
}
|
|
88
|
-
if (_store === "sqlite") {
|
|
89
|
-
ensureSqliteMfaTable();
|
|
90
|
-
_sqliteDb.run("INSERT INTO mfa_challenges (token, userId, purpose, emailOtpHash, webauthnChallenge, createdAt, resendCount, expiresAt) VALUES (?, ?, ?, ?, ?, ?, 0, ?)", [hash, userId, purpose, emailOtpHash ?? null, webauthnChallenge ?? null, now, now + ttl * 1000]);
|
|
91
|
-
return token;
|
|
92
|
-
}
|
|
93
|
-
if (_store === "mongo") {
|
|
94
|
-
await getMfaChallengeModel().create({
|
|
95
|
-
token: hash,
|
|
96
|
-
userId,
|
|
97
|
-
purpose,
|
|
98
|
-
emailOtpHash,
|
|
99
|
-
webauthnChallenge,
|
|
100
|
-
createdAt: new Date(now),
|
|
101
|
-
resendCount: 0,
|
|
102
|
-
expiresAt: new Date(now + ttl * 1000),
|
|
103
|
-
});
|
|
104
|
-
return token;
|
|
105
|
-
}
|
|
106
|
-
// redis
|
|
107
|
-
await getRedis().set(`mfachallenge:${getAppName()}:${hash}`, JSON.stringify({ userId, purpose, emailOtpHash, webauthnChallenge, createdAt: now, resendCount: 0 }), "EX", ttl);
|
|
108
|
-
return token;
|
|
109
|
-
};
|
|
110
|
-
export const consumeMfaChallenge = async (token) => {
|
|
111
|
-
const hash = sha256(token);
|
|
112
|
-
if (_store === "memory") {
|
|
113
|
-
const entry = _memoryChallenges.get(hash);
|
|
114
|
-
if (!entry || entry.expiresAt <= Date.now()) {
|
|
115
|
-
_memoryChallenges.delete(hash);
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
_memoryChallenges.delete(hash);
|
|
119
|
-
if (entry.purpose !== "login")
|
|
120
|
-
return null;
|
|
121
|
-
return { userId: entry.userId, purpose: entry.purpose, emailOtpHash: entry.emailOtpHash, webauthnChallenge: entry.webauthnChallenge };
|
|
122
|
-
}
|
|
123
|
-
if (_store === "sqlite") {
|
|
124
|
-
ensureSqliteMfaTable();
|
|
125
|
-
const row = _sqliteDb.query("DELETE FROM mfa_challenges WHERE token = ? AND expiresAt > ? RETURNING userId, purpose, emailOtpHash, webauthnChallenge").get(hash, Date.now());
|
|
126
|
-
if (!row || row.purpose !== "login")
|
|
127
|
-
return null;
|
|
128
|
-
return { userId: row.userId, purpose: "login", emailOtpHash: row.emailOtpHash ?? undefined, webauthnChallenge: row.webauthnChallenge ?? undefined };
|
|
129
|
-
}
|
|
130
|
-
if (_store === "mongo") {
|
|
131
|
-
const doc = await getMfaChallengeModel().findOneAndDelete({ token: hash, expiresAt: { $gt: new Date() } });
|
|
132
|
-
if (!doc || doc.purpose !== "login")
|
|
133
|
-
return null;
|
|
134
|
-
return { userId: doc.userId, purpose: "login", emailOtpHash: doc.emailOtpHash, webauthnChallenge: doc.webauthnChallenge };
|
|
135
|
-
}
|
|
136
|
-
// redis
|
|
137
|
-
const key = `mfachallenge:${getAppName()}:${hash}`;
|
|
138
|
-
const raw = await getRedis().get(key);
|
|
139
|
-
if (!raw)
|
|
140
|
-
return null;
|
|
141
|
-
await getRedis().del(key);
|
|
142
|
-
const data = JSON.parse(raw);
|
|
143
|
-
if (data.purpose !== "login")
|
|
144
|
-
return null;
|
|
145
|
-
return { userId: data.userId, purpose: "login", emailOtpHash: data.emailOtpHash, webauthnChallenge: data.webauthnChallenge };
|
|
146
|
-
};
|
|
147
|
-
/**
|
|
148
|
-
* Replace the email OTP hash on an existing challenge without consuming it.
|
|
149
|
-
* Used for the resend flow. Increments resendCount and caps the challenge lifetime.
|
|
150
|
-
* Returns { userId, resendCount } on success, null if challenge not found/expired/max resends reached.
|
|
151
|
-
*/
|
|
152
|
-
export const replaceMfaChallengeOtp = async (token, newEmailOtpHash) => {
|
|
153
|
-
const hash = sha256(token);
|
|
154
|
-
const ttl = getMfaChallengeTtl();
|
|
155
|
-
if (_store === "memory") {
|
|
156
|
-
const entry = _memoryChallenges.get(hash);
|
|
157
|
-
if (!entry || entry.expiresAt <= Date.now()) {
|
|
158
|
-
_memoryChallenges.delete(hash);
|
|
159
|
-
return null;
|
|
160
|
-
}
|
|
161
|
-
if (entry.resendCount >= MAX_RESENDS)
|
|
162
|
-
return null;
|
|
163
|
-
entry.emailOtpHash = newEmailOtpHash;
|
|
164
|
-
entry.resendCount++;
|
|
165
|
-
// Cap lifetime: min(now + ttl, createdAt + ttl * 3)
|
|
166
|
-
const maxExpiry = entry.createdAt + ttl * 3 * 1000;
|
|
167
|
-
entry.expiresAt = Math.min(Date.now() + ttl * 1000, maxExpiry);
|
|
168
|
-
return { userId: entry.userId, resendCount: entry.resendCount };
|
|
169
|
-
}
|
|
170
|
-
if (_store === "sqlite") {
|
|
171
|
-
ensureSqliteMfaTable();
|
|
172
|
-
const now = Date.now();
|
|
173
|
-
const existing = _sqliteDb.query("SELECT createdAt, resendCount FROM mfa_challenges WHERE token = ? AND expiresAt > ?").get(hash, now);
|
|
174
|
-
if (!existing || existing.resendCount >= MAX_RESENDS)
|
|
175
|
-
return null;
|
|
176
|
-
const newExpiry = Math.min(now + ttl * 1000, existing.createdAt + ttl * 3 * 1000);
|
|
177
|
-
const newCount = existing.resendCount + 1;
|
|
178
|
-
const row = _sqliteDb.query("UPDATE mfa_challenges SET emailOtpHash = ?, resendCount = ?, expiresAt = ? WHERE token = ? RETURNING userId").get(newEmailOtpHash, newCount, newExpiry, hash);
|
|
179
|
-
return row ? { userId: row.userId, resendCount: newCount } : null;
|
|
180
|
-
}
|
|
181
|
-
if (_store === "mongo") {
|
|
182
|
-
const now = new Date();
|
|
183
|
-
const existing = await getMfaChallengeModel().findOne({
|
|
184
|
-
token: hash,
|
|
185
|
-
expiresAt: { $gt: now },
|
|
186
|
-
resendCount: { $lt: MAX_RESENDS },
|
|
187
|
-
});
|
|
188
|
-
if (!existing)
|
|
189
|
-
return null;
|
|
190
|
-
const newCount = existing.resendCount + 1;
|
|
191
|
-
const newExpiry = new Date(Math.min(Date.now() + ttl * 1000, existing.createdAt.getTime() + ttl * 3 * 1000));
|
|
192
|
-
existing.emailOtpHash = newEmailOtpHash;
|
|
193
|
-
existing.resendCount = newCount;
|
|
194
|
-
existing.expiresAt = newExpiry;
|
|
195
|
-
await existing.save();
|
|
196
|
-
return { userId: existing.userId, resendCount: newCount };
|
|
197
|
-
}
|
|
198
|
-
// redis
|
|
199
|
-
const key = `mfachallenge:${getAppName()}:${hash}`;
|
|
200
|
-
const raw = await getRedis().get(key);
|
|
201
|
-
if (!raw)
|
|
202
|
-
return null;
|
|
203
|
-
const data = JSON.parse(raw);
|
|
204
|
-
if (data.resendCount >= MAX_RESENDS)
|
|
205
|
-
return null;
|
|
206
|
-
data.emailOtpHash = newEmailOtpHash;
|
|
207
|
-
data.resendCount++;
|
|
208
|
-
// Cap lifetime
|
|
209
|
-
const maxExpiry = data.createdAt + ttl * 3 * 1000;
|
|
210
|
-
const newExpiry = Math.min(Date.now() + ttl * 1000, maxExpiry);
|
|
211
|
-
const remainingTtl = Math.max(1, Math.ceil((newExpiry - Date.now()) / 1000));
|
|
212
|
-
await getRedis().set(key, JSON.stringify(data), "EX", remainingTtl);
|
|
213
|
-
return { userId: data.userId, resendCount: data.resendCount };
|
|
214
|
-
};
|
|
215
|
-
// ---------------------------------------------------------------------------
|
|
216
|
-
// WebAuthn registration challenge helpers
|
|
217
|
-
// ---------------------------------------------------------------------------
|
|
218
|
-
/**
|
|
219
|
-
* Create a WebAuthn registration challenge token. Separate from the login flow —
|
|
220
|
-
* uses `purpose: "webauthn-registration"` so it cannot be consumed by `consumeMfaChallenge`.
|
|
221
|
-
*/
|
|
222
|
-
export const createWebAuthnRegistrationChallenge = async (userId, challenge) => {
|
|
223
|
-
const token = crypto.randomUUID();
|
|
224
|
-
const hash = sha256(token);
|
|
225
|
-
const ttl = getMfaChallengeTtl();
|
|
226
|
-
const now = Date.now();
|
|
227
|
-
const purpose = "webauthn-registration";
|
|
228
|
-
if (_store === "memory") {
|
|
229
|
-
_memoryChallenges.set(hash, { userId, purpose, webauthnChallenge: challenge, createdAt: now, resendCount: 0, expiresAt: now + ttl * 1000 });
|
|
230
|
-
return token;
|
|
231
|
-
}
|
|
232
|
-
if (_store === "sqlite") {
|
|
233
|
-
ensureSqliteMfaTable();
|
|
234
|
-
_sqliteDb.run("INSERT INTO mfa_challenges (token, userId, purpose, webauthnChallenge, createdAt, resendCount, expiresAt) VALUES (?, ?, ?, ?, ?, 0, ?)", [hash, userId, purpose, challenge, now, now + ttl * 1000]);
|
|
235
|
-
return token;
|
|
236
|
-
}
|
|
237
|
-
if (_store === "mongo") {
|
|
238
|
-
await getMfaChallengeModel().create({
|
|
239
|
-
token: hash,
|
|
240
|
-
userId,
|
|
241
|
-
purpose,
|
|
242
|
-
webauthnChallenge: challenge,
|
|
243
|
-
createdAt: new Date(now),
|
|
244
|
-
resendCount: 0,
|
|
245
|
-
expiresAt: new Date(now + ttl * 1000),
|
|
246
|
-
});
|
|
247
|
-
return token;
|
|
248
|
-
}
|
|
249
|
-
// redis
|
|
250
|
-
await getRedis().set(`mfachallenge:${getAppName()}:${hash}`, JSON.stringify({ userId, purpose, webauthnChallenge: challenge, createdAt: now, resendCount: 0 }), "EX", ttl);
|
|
251
|
-
return token;
|
|
252
|
-
};
|
|
253
|
-
/**
|
|
254
|
-
* Consume a WebAuthn registration challenge token.
|
|
255
|
-
* Only accepts tokens with `purpose: "webauthn-registration"`.
|
|
256
|
-
*/
|
|
257
|
-
export const consumeWebAuthnRegistrationChallenge = async (token) => {
|
|
258
|
-
const hash = sha256(token);
|
|
259
|
-
if (_store === "memory") {
|
|
260
|
-
const entry = _memoryChallenges.get(hash);
|
|
261
|
-
if (!entry || entry.expiresAt <= Date.now()) {
|
|
262
|
-
_memoryChallenges.delete(hash);
|
|
263
|
-
return null;
|
|
264
|
-
}
|
|
265
|
-
_memoryChallenges.delete(hash);
|
|
266
|
-
if (entry.purpose !== "webauthn-registration" || !entry.webauthnChallenge)
|
|
267
|
-
return null;
|
|
268
|
-
return { userId: entry.userId, challenge: entry.webauthnChallenge };
|
|
269
|
-
}
|
|
270
|
-
if (_store === "sqlite") {
|
|
271
|
-
ensureSqliteMfaTable();
|
|
272
|
-
const row = _sqliteDb.query("DELETE FROM mfa_challenges WHERE token = ? AND expiresAt > ? RETURNING userId, purpose, webauthnChallenge").get(hash, Date.now());
|
|
273
|
-
if (!row || row.purpose !== "webauthn-registration" || !row.webauthnChallenge)
|
|
274
|
-
return null;
|
|
275
|
-
return { userId: row.userId, challenge: row.webauthnChallenge };
|
|
276
|
-
}
|
|
277
|
-
if (_store === "mongo") {
|
|
278
|
-
const doc = await getMfaChallengeModel().findOneAndDelete({ token: hash, expiresAt: { $gt: new Date() } });
|
|
279
|
-
if (!doc || doc.purpose !== "webauthn-registration" || !doc.webauthnChallenge)
|
|
280
|
-
return null;
|
|
281
|
-
return { userId: doc.userId, challenge: doc.webauthnChallenge };
|
|
282
|
-
}
|
|
283
|
-
// redis
|
|
284
|
-
const key = `mfachallenge:${getAppName()}:${hash}`;
|
|
285
|
-
const raw = await getRedis().get(key);
|
|
286
|
-
if (!raw)
|
|
287
|
-
return null;
|
|
288
|
-
await getRedis().del(key);
|
|
289
|
-
const data = JSON.parse(raw);
|
|
290
|
-
if (data.purpose !== "webauthn-registration" || !data.webauthnChallenge)
|
|
291
|
-
return null;
|
|
292
|
-
return { userId: data.userId, challenge: data.webauthnChallenge };
|
|
293
|
-
};
|
package/dist/lib/mongo.d.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import type { Connection, Mongoose } from "mongoose";
|
|
2
|
-
type MongooseModule = Mongoose;
|
|
3
|
-
/**
|
|
4
|
-
* Named connection used exclusively for auth data (AuthUser model).
|
|
5
|
-
* Connected via connectAuthMongo() or connectMongo() (backward compat).
|
|
6
|
-
*/
|
|
7
|
-
export declare const authConnection: Connection;
|
|
8
|
-
/**
|
|
9
|
-
* Named connection for app/tenant data.
|
|
10
|
-
* Connected via connectAppMongo() or connectMongo() (backward compat).
|
|
11
|
-
* Use this when registering your own models: appConnection.model("Product", schema).
|
|
12
|
-
*/
|
|
13
|
-
export declare const appConnection: Connection;
|
|
14
|
-
/**
|
|
15
|
-
* The mongoose instance. Available after connectMongo() / connectAuthMongo() is called.
|
|
16
|
-
*/
|
|
17
|
-
export declare const mongoose: MongooseModule;
|
|
18
|
-
/**
|
|
19
|
-
* Connect the auth connection to its dedicated MongoDB server.
|
|
20
|
-
* Uses MONGO_AUTH_USER_*, MONGO_AUTH_PW_*, MONGO_AUTH_HOST_*, MONGO_AUTH_DB_* env vars.
|
|
21
|
-
*/
|
|
22
|
-
export declare const connectAuthMongo: () => Promise<void>;
|
|
23
|
-
/**
|
|
24
|
-
* Connect the app connection to its MongoDB server.
|
|
25
|
-
* Uses MONGO_USER_*, MONGO_PW_*, MONGO_HOST_*, MONGO_DB_* env vars.
|
|
26
|
-
*/
|
|
27
|
-
export declare const connectAppMongo: () => Promise<void>;
|
|
28
|
-
/**
|
|
29
|
-
* Connect both auth and app connections to the same MongoDB server.
|
|
30
|
-
* Backward-compatible shorthand for single-DB setups.
|
|
31
|
-
* Uses MONGO_USER_*, MONGO_PW_*, MONGO_HOST_*, MONGO_DB_* env vars.
|
|
32
|
-
*/
|
|
33
|
-
export declare const connectMongo: () => Promise<void>;
|
|
34
|
-
/**
|
|
35
|
-
* Close both auth and app Mongo connections.
|
|
36
|
-
* Useful for one-off scripts that need a clean exit.
|
|
37
|
-
*/
|
|
38
|
-
export declare const disconnectMongo: () => Promise<void>;
|
|
39
|
-
export {};
|
package/dist/lib/mongo.js
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { log } from "./logger";
|
|
2
|
-
const isProd = process.env.NODE_ENV === "production";
|
|
3
|
-
function requireMongoose() {
|
|
4
|
-
try {
|
|
5
|
-
// Bun supports require() in ESM; this defers the import to call time
|
|
6
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
7
|
-
const mod = require("mongoose");
|
|
8
|
-
return mod.default ?? mod;
|
|
9
|
-
}
|
|
10
|
-
catch {
|
|
11
|
-
throw new Error("mongoose is not installed. Run: bun add mongoose");
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
function buildUri(user, password, host, db) {
|
|
15
|
-
const [hostPart, queryPart] = host.split("?");
|
|
16
|
-
return `mongodb+srv://${user}:${password}@${hostPart.replace(/\/$/, "")}/${db}${queryPart ? `?${queryPart}` : ""}`;
|
|
17
|
-
}
|
|
18
|
-
// Internal mutable references — set inside connect functions
|
|
19
|
-
let _authConn = null;
|
|
20
|
-
let _appConn = null;
|
|
21
|
-
let _mongoose = null;
|
|
22
|
-
function makeConnectionProxy(label, getConn, setConn) {
|
|
23
|
-
return new Proxy({}, {
|
|
24
|
-
get(_, prop) {
|
|
25
|
-
let conn = getConn();
|
|
26
|
-
if (!conn) {
|
|
27
|
-
// Lazily create a disconnected connection so appConnection.model() works at module
|
|
28
|
-
// load time. Mongoose buffers queries until openUri() is called by connectMongo().
|
|
29
|
-
conn = requireMongoose().createConnection();
|
|
30
|
-
setConn(conn);
|
|
31
|
-
}
|
|
32
|
-
const val = conn[prop];
|
|
33
|
-
return typeof val === "function" ? val.bind(conn) : val;
|
|
34
|
-
},
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Named connection used exclusively for auth data (AuthUser model).
|
|
39
|
-
* Connected via connectAuthMongo() or connectMongo() (backward compat).
|
|
40
|
-
*/
|
|
41
|
-
export const authConnection = makeConnectionProxy("auth", () => _authConn, (c) => { _authConn = c; });
|
|
42
|
-
/**
|
|
43
|
-
* Named connection for app/tenant data.
|
|
44
|
-
* Connected via connectAppMongo() or connectMongo() (backward compat).
|
|
45
|
-
* Use this when registering your own models: appConnection.model("Product", schema).
|
|
46
|
-
*/
|
|
47
|
-
export const appConnection = makeConnectionProxy("app", () => _appConn, (c) => { _appConn = c; });
|
|
48
|
-
/**
|
|
49
|
-
* The mongoose instance. Available after connectMongo() / connectAuthMongo() is called.
|
|
50
|
-
*/
|
|
51
|
-
export const mongoose = new Proxy({}, {
|
|
52
|
-
get(_, prop) {
|
|
53
|
-
const mg = _mongoose ?? requireMongoose();
|
|
54
|
-
return mg[prop];
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
/**
|
|
58
|
-
* Connect the auth connection to its dedicated MongoDB server.
|
|
59
|
-
* Uses MONGO_AUTH_USER_*, MONGO_AUTH_PW_*, MONGO_AUTH_HOST_*, MONGO_AUTH_DB_* env vars.
|
|
60
|
-
*/
|
|
61
|
-
export const connectAuthMongo = async () => {
|
|
62
|
-
const mg = requireMongoose();
|
|
63
|
-
_mongoose = mg;
|
|
64
|
-
if (!_authConn)
|
|
65
|
-
_authConn = mg.createConnection();
|
|
66
|
-
const user = isProd ? process.env.MONGO_AUTH_USER_PROD : process.env.MONGO_AUTH_USER_DEV;
|
|
67
|
-
const password = isProd ? process.env.MONGO_AUTH_PW_PROD : process.env.MONGO_AUTH_PW_DEV;
|
|
68
|
-
const host = isProd ? process.env.MONGO_AUTH_HOST_PROD : process.env.MONGO_AUTH_HOST_DEV;
|
|
69
|
-
const db = isProd ? process.env.MONGO_AUTH_DB_PROD : process.env.MONGO_AUTH_DB_DEV;
|
|
70
|
-
const uri = buildUri(user, password, host, db);
|
|
71
|
-
await _authConn.openUri(uri);
|
|
72
|
-
log(`[mongo] auth connected to ${host} as ${user}`);
|
|
73
|
-
};
|
|
74
|
-
/**
|
|
75
|
-
* Connect the app connection to its MongoDB server.
|
|
76
|
-
* Uses MONGO_USER_*, MONGO_PW_*, MONGO_HOST_*, MONGO_DB_* env vars.
|
|
77
|
-
*/
|
|
78
|
-
export const connectAppMongo = async () => {
|
|
79
|
-
const mg = requireMongoose();
|
|
80
|
-
_mongoose = mg;
|
|
81
|
-
if (!_appConn)
|
|
82
|
-
_appConn = mg.createConnection();
|
|
83
|
-
const user = isProd ? process.env.MONGO_USER_PROD : process.env.MONGO_USER_DEV;
|
|
84
|
-
const password = isProd ? process.env.MONGO_PW_PROD : process.env.MONGO_PW_DEV;
|
|
85
|
-
const host = isProd ? process.env.MONGO_HOST_PROD : process.env.MONGO_HOST_DEV;
|
|
86
|
-
const db = isProd ? process.env.MONGO_DB_PROD : process.env.MONGO_DB_DEV;
|
|
87
|
-
const uri = buildUri(user, password, host, db);
|
|
88
|
-
await _appConn.openUri(uri);
|
|
89
|
-
log(`[mongo] app connected to ${host} as ${user}`);
|
|
90
|
-
};
|
|
91
|
-
/**
|
|
92
|
-
* Connect both auth and app connections to the same MongoDB server.
|
|
93
|
-
* Backward-compatible shorthand for single-DB setups.
|
|
94
|
-
* Uses MONGO_USER_*, MONGO_PW_*, MONGO_HOST_*, MONGO_DB_* env vars.
|
|
95
|
-
*/
|
|
96
|
-
export const connectMongo = async () => {
|
|
97
|
-
const mg = requireMongoose();
|
|
98
|
-
_mongoose = mg;
|
|
99
|
-
if (!_authConn)
|
|
100
|
-
_authConn = mg.createConnection();
|
|
101
|
-
if (!_appConn)
|
|
102
|
-
_appConn = mg.createConnection();
|
|
103
|
-
const user = isProd ? process.env.MONGO_USER_PROD : process.env.MONGO_USER_DEV;
|
|
104
|
-
const password = isProd ? process.env.MONGO_PW_PROD : process.env.MONGO_PW_DEV;
|
|
105
|
-
const host = isProd ? process.env.MONGO_HOST_PROD : process.env.MONGO_HOST_DEV;
|
|
106
|
-
const db = isProd ? process.env.MONGO_DB_PROD : process.env.MONGO_DB_DEV;
|
|
107
|
-
const uri = buildUri(user, password, host, db);
|
|
108
|
-
await Promise.all([
|
|
109
|
-
_authConn.openUri(uri),
|
|
110
|
-
_appConn.openUri(uri),
|
|
111
|
-
]);
|
|
112
|
-
log(`[mongo] connected to ${host} as ${user}`);
|
|
113
|
-
};
|
|
114
|
-
/**
|
|
115
|
-
* Close both auth and app Mongo connections.
|
|
116
|
-
* Useful for one-off scripts that need a clean exit.
|
|
117
|
-
*/
|
|
118
|
-
export const disconnectMongo = async () => {
|
|
119
|
-
await Promise.all([
|
|
120
|
-
_authConn && _authConn.readyState !== 0 ? _authConn.close() : Promise.resolve(),
|
|
121
|
-
_appConn && _appConn.readyState !== 0 ? _appConn.close() : Promise.resolve(),
|
|
122
|
-
]);
|
|
123
|
-
log("[mongo] disconnected");
|
|
124
|
-
};
|
package/dist/lib/oauth.d.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { Google, Apple, MicrosoftEntraId, GitHub, generateState, generateCodeVerifier } from "arctic";
|
|
2
|
-
export type OAuthProviderConfig = {
|
|
3
|
-
google?: {
|
|
4
|
-
clientId: string;
|
|
5
|
-
clientSecret: string;
|
|
6
|
-
redirectUri: string;
|
|
7
|
-
};
|
|
8
|
-
apple?: {
|
|
9
|
-
clientId: string;
|
|
10
|
-
teamId: string;
|
|
11
|
-
keyId: string;
|
|
12
|
-
privateKey: string;
|
|
13
|
-
redirectUri: string;
|
|
14
|
-
};
|
|
15
|
-
microsoft?: {
|
|
16
|
-
tenantId: string;
|
|
17
|
-
clientId: string;
|
|
18
|
-
clientSecret: string;
|
|
19
|
-
redirectUri: string;
|
|
20
|
-
};
|
|
21
|
-
github?: {
|
|
22
|
-
clientId: string;
|
|
23
|
-
clientSecret: string;
|
|
24
|
-
redirectUri: string;
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
export declare const initOAuthProviders: (config: OAuthProviderConfig) => void;
|
|
28
|
-
export declare const getGoogle: () => Google;
|
|
29
|
-
export declare const getApple: () => Apple;
|
|
30
|
-
export declare const getMicrosoft: () => MicrosoftEntraId;
|
|
31
|
-
export declare const getGitHub: () => GitHub;
|
|
32
|
-
export declare const getConfiguredOAuthProviders: () => string[];
|
|
33
|
-
type OAuthStateStore = "redis" | "mongo" | "sqlite" | "memory";
|
|
34
|
-
export declare const setOAuthStateStore: (store: OAuthStateStore) => void;
|
|
35
|
-
export declare const storeOAuthState: (state: string, codeVerifier?: string, linkUserId?: string) => Promise<void>;
|
|
36
|
-
export declare const consumeOAuthState: (state: string) => Promise<{
|
|
37
|
-
codeVerifier?: string;
|
|
38
|
-
linkUserId?: string;
|
|
39
|
-
} | null>;
|
|
40
|
-
export { generateState, generateCodeVerifier };
|
package/dist/lib/oauth.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { Google, Apple, MicrosoftEntraId, GitHub, generateState, generateCodeVerifier } from "arctic";
|
|
2
|
-
import { getRedis } from "./redis";
|
|
3
|
-
import { appConnection, mongoose } from "./mongo";
|
|
4
|
-
import { getAppName } from "./appConfig";
|
|
5
|
-
import { sqliteStoreOAuthState, sqliteConsumeOAuthState } from "../adapters/sqliteAuth";
|
|
6
|
-
import { memoryStoreOAuthState, memoryConsumeOAuthState } from "../adapters/memoryAuth";
|
|
7
|
-
let _providers = {};
|
|
8
|
-
export const initOAuthProviders = (config) => {
|
|
9
|
-
if (config.google) {
|
|
10
|
-
const { clientId, clientSecret, redirectUri } = config.google;
|
|
11
|
-
_providers.google = new Google(clientId, clientSecret, redirectUri);
|
|
12
|
-
}
|
|
13
|
-
if (config.apple) {
|
|
14
|
-
const { clientId, teamId, keyId, privateKey, redirectUri } = config.apple;
|
|
15
|
-
_providers.apple = new Apple(clientId, teamId, keyId, new TextEncoder().encode(privateKey), redirectUri);
|
|
16
|
-
}
|
|
17
|
-
if (config.microsoft) {
|
|
18
|
-
const { tenantId, clientId, clientSecret, redirectUri } = config.microsoft;
|
|
19
|
-
_providers.microsoft = new MicrosoftEntraId(tenantId, clientId, clientSecret, redirectUri);
|
|
20
|
-
}
|
|
21
|
-
if (config.github) {
|
|
22
|
-
const { clientId, clientSecret, redirectUri } = config.github;
|
|
23
|
-
_providers.github = new GitHub(clientId, clientSecret, redirectUri);
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
export const getGoogle = () => {
|
|
27
|
-
if (!_providers.google)
|
|
28
|
-
throw new Error("Google OAuth not configured");
|
|
29
|
-
return _providers.google;
|
|
30
|
-
};
|
|
31
|
-
export const getApple = () => {
|
|
32
|
-
if (!_providers.apple)
|
|
33
|
-
throw new Error("Apple OAuth not configured");
|
|
34
|
-
return _providers.apple;
|
|
35
|
-
};
|
|
36
|
-
export const getMicrosoft = () => {
|
|
37
|
-
if (!_providers.microsoft)
|
|
38
|
-
throw new Error("Microsoft Entra ID OAuth not configured");
|
|
39
|
-
return _providers.microsoft;
|
|
40
|
-
};
|
|
41
|
-
export const getGitHub = () => {
|
|
42
|
-
if (!_providers.github)
|
|
43
|
-
throw new Error("GitHub OAuth not configured");
|
|
44
|
-
return _providers.github;
|
|
45
|
-
};
|
|
46
|
-
export const getConfiguredOAuthProviders = () => Object.entries(_providers)
|
|
47
|
-
.filter(([, v]) => v != null)
|
|
48
|
-
.map(([k]) => k);
|
|
49
|
-
function getOAuthStateModel() {
|
|
50
|
-
if (appConnection.models["OAuthState"])
|
|
51
|
-
return appConnection.models["OAuthState"];
|
|
52
|
-
const { Schema } = mongoose;
|
|
53
|
-
const oauthStateSchema = new Schema({
|
|
54
|
-
state: { type: String, required: true, unique: true },
|
|
55
|
-
codeVerifier: { type: String },
|
|
56
|
-
linkUserId: { type: String },
|
|
57
|
-
expiresAt: { type: Date, required: true, index: { expireAfterSeconds: 0 } },
|
|
58
|
-
}, { collection: "oauth_states" });
|
|
59
|
-
return appConnection.model("OAuthState", oauthStateSchema);
|
|
60
|
-
}
|
|
61
|
-
let _oauthStore = "redis";
|
|
62
|
-
export const setOAuthStateStore = (store) => { _oauthStore = store; };
|
|
63
|
-
// ---------------------------------------------------------------------------
|
|
64
|
-
// State helpers
|
|
65
|
-
// ---------------------------------------------------------------------------
|
|
66
|
-
const STATE_TTL = 300; // 5 minutes
|
|
67
|
-
export const storeOAuthState = async (state, codeVerifier, linkUserId) => {
|
|
68
|
-
if (_oauthStore === "memory") {
|
|
69
|
-
memoryStoreOAuthState(state, codeVerifier, linkUserId);
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
if (_oauthStore === "sqlite") {
|
|
73
|
-
sqliteStoreOAuthState(state, codeVerifier, linkUserId);
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
if (_oauthStore === "mongo") {
|
|
77
|
-
const expiresAt = new Date(Date.now() + STATE_TTL * 1000);
|
|
78
|
-
await getOAuthStateModel().create({ state, codeVerifier, linkUserId, expiresAt });
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
await getRedis().set(`oauth:${getAppName()}:state:${state}`, JSON.stringify({ codeVerifier, linkUserId }), "EX", STATE_TTL);
|
|
82
|
-
};
|
|
83
|
-
export const consumeOAuthState = async (state) => {
|
|
84
|
-
if (_oauthStore === "memory")
|
|
85
|
-
return memoryConsumeOAuthState(state);
|
|
86
|
-
if (_oauthStore === "sqlite")
|
|
87
|
-
return sqliteConsumeOAuthState(state);
|
|
88
|
-
if (_oauthStore === "mongo") {
|
|
89
|
-
const doc = await getOAuthStateModel()
|
|
90
|
-
.findOneAndDelete({ state, expiresAt: { $gt: new Date() } })
|
|
91
|
-
.lean();
|
|
92
|
-
return doc ? { codeVerifier: doc.codeVerifier, linkUserId: doc.linkUserId } : null;
|
|
93
|
-
}
|
|
94
|
-
const key = `oauth:${getAppName()}:state:${state}`;
|
|
95
|
-
const value = await getRedis().get(key);
|
|
96
|
-
if (!value)
|
|
97
|
-
return null;
|
|
98
|
-
await getRedis().del(key);
|
|
99
|
-
return JSON.parse(value);
|
|
100
|
-
};
|
|
101
|
-
export { generateState, generateCodeVerifier };
|
package/dist/lib/oauthCode.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
type OAuthCodeStore = "redis" | "mongo" | "sqlite" | "memory";
|
|
2
|
-
export declare const setOAuthCodeStore: (store: OAuthCodeStore) => void;
|
|
3
|
-
export interface OAuthCodePayload {
|
|
4
|
-
token: string;
|
|
5
|
-
userId: string;
|
|
6
|
-
email?: string;
|
|
7
|
-
refreshToken?: string;
|
|
8
|
-
}
|
|
9
|
-
/** Store a one-time authorization code. Returns the raw code (for the redirect URL).
|
|
10
|
-
* Only the SHA-256 hash is persisted. */
|
|
11
|
-
export declare const storeOAuthCode: (payload: OAuthCodePayload) => Promise<string>;
|
|
12
|
-
/** Atomically consume an authorization code — returns its payload and deletes it.
|
|
13
|
-
* Returns null if invalid, expired, or already used. */
|
|
14
|
-
export declare const consumeOAuthCode: (code: string) => Promise<OAuthCodePayload | null>;
|
|
15
|
-
export {};
|