@lastshotlabs/bunshot 0.0.27 → 0.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.oclif.manifest.json +39 -0
- package/README.md +8282 -2147
- package/dist/cli/commands/init.js +690 -0
- package/dist/cli/index.js +6 -0
- package/dist/cli.js +4 -4
- package/dist/packages/bunshot-admin/src/index.d.ts +15 -0
- package/dist/packages/bunshot-admin/src/index.js +11 -0
- package/dist/packages/bunshot-admin/src/lib/resourceTypes.d.ts +8 -0
- package/dist/packages/bunshot-admin/src/lib/resourceTypes.js +33 -0
- package/dist/packages/bunshot-admin/src/lib/typedRoute.d.ts +14 -0
- package/dist/packages/bunshot-admin/src/lib/typedRoute.js +17 -0
- package/dist/packages/bunshot-admin/src/plugin.d.ts +4 -0
- package/dist/packages/bunshot-admin/src/plugin.js +46 -0
- package/dist/packages/bunshot-admin/src/providers/auth0Access.d.ts +6 -0
- package/dist/packages/bunshot-admin/src/providers/auth0Access.js +32 -0
- package/dist/packages/bunshot-admin/src/routes/admin.d.ts +10 -0
- package/dist/packages/bunshot-admin/src/routes/admin.js +923 -0
- package/dist/packages/bunshot-admin/src/routes/mail.d.ts +6 -0
- package/dist/packages/bunshot-admin/src/routes/mail.js +114 -0
- package/dist/packages/bunshot-admin/src/routes/permissions.d.ts +8 -0
- package/dist/packages/bunshot-admin/src/routes/permissions.js +315 -0
- package/dist/packages/bunshot-admin/src/types/config.d.ts +16 -0
- package/dist/packages/bunshot-admin/src/types/config.js +37 -0
- package/dist/packages/bunshot-admin/src/types/env.d.ts +14 -0
- package/dist/packages/bunshot-admin/src/types/provider.d.ts +1 -0
- package/dist/packages/bunshot-admin/src/types/provider.js +4 -0
- package/dist/packages/bunshot-auth/src/adapters/memoryAuth.d.ts +66 -0
- package/dist/packages/bunshot-auth/src/adapters/memoryAuth.js +1063 -0
- package/dist/packages/bunshot-auth/src/adapters/mongoAuth.d.ts +2 -0
- package/dist/packages/bunshot-auth/src/adapters/mongoAuth.js +536 -0
- package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.d.ts +88 -0
- package/dist/packages/bunshot-auth/src/adapters/sqliteAuth.js +1366 -0
- package/dist/packages/bunshot-auth/src/admin/bunshotAccess.d.ts +2 -0
- package/dist/packages/bunshot-auth/src/admin/bunshotAccess.js +23 -0
- package/dist/packages/bunshot-auth/src/admin/bunshotUsers.d.ts +5 -0
- package/dist/packages/bunshot-auth/src/admin/bunshotUsers.js +131 -0
- package/dist/packages/bunshot-auth/src/bootstrap.d.ts +38 -0
- package/dist/packages/bunshot-auth/src/bootstrap.js +384 -0
- package/dist/packages/bunshot-auth/src/config/appConfig.d.ts +3 -0
- package/dist/packages/bunshot-auth/src/config/appConfig.js +4 -0
- package/dist/packages/bunshot-auth/src/config/authConfig.d.ts +478 -0
- package/dist/packages/bunshot-auth/src/config/authConfig.js +46 -0
- package/dist/packages/bunshot-auth/src/config/configLock.d.ts +2 -0
- package/dist/packages/bunshot-auth/src/config/configLock.js +10 -0
- package/dist/packages/bunshot-auth/src/index.d.ts +25 -0
- package/dist/packages/bunshot-auth/src/index.js +23 -0
- package/dist/packages/bunshot-auth/src/infra/mongo.d.ts +15 -0
- package/dist/packages/bunshot-auth/src/infra/mongo.js +44 -0
- package/dist/packages/bunshot-auth/src/infra/queue.d.ts +14 -0
- package/dist/packages/bunshot-auth/src/infra/queue.js +27 -0
- package/dist/packages/bunshot-auth/src/infra/redis.d.ts +5 -0
- package/dist/packages/bunshot-auth/src/infra/redis.js +15 -0
- package/dist/packages/bunshot-auth/src/infra/signing.d.ts +7 -0
- package/dist/packages/bunshot-auth/src/infra/signing.js +8 -0
- package/dist/packages/bunshot-auth/src/lib/accountLockout.d.ts +34 -0
- package/dist/packages/bunshot-auth/src/lib/accountLockout.js +244 -0
- package/dist/packages/bunshot-auth/src/lib/adapterTiers.d.ts +1 -0
- package/dist/packages/bunshot-auth/src/lib/adapterTiers.js +1 -0
- package/dist/packages/bunshot-auth/src/lib/authAdapter.d.ts +1 -0
- package/dist/packages/bunshot-auth/src/lib/authAdapter.js +1 -0
- package/dist/packages/bunshot-auth/src/lib/authContext.d.ts +15 -0
- package/dist/packages/bunshot-auth/src/lib/authContext.js +1 -0
- package/dist/packages/bunshot-auth/src/lib/authEventBus.d.ts +4 -0
- package/dist/packages/bunshot-auth/src/lib/authEventBus.js +15 -0
- package/dist/packages/bunshot-auth/src/lib/authRateLimit.d.ts +28 -0
- package/dist/packages/bunshot-auth/src/lib/authRateLimit.js +205 -0
- package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.d.ts +8 -2
- package/dist/{lib → packages/bunshot-auth/src/lib}/breachedPassword.js +22 -9
- package/dist/packages/bunshot-auth/src/lib/cache.d.ts +12 -0
- package/dist/packages/bunshot-auth/src/lib/cache.js +120 -0
- package/dist/packages/bunshot-auth/src/lib/clientIp.d.ts +4 -0
- package/dist/{lib → packages/bunshot-auth/src/lib}/clientIp.js +14 -7
- package/dist/packages/bunshot-auth/src/lib/cookieOptions.d.ts +27 -0
- package/dist/packages/bunshot-auth/src/lib/cookieOptions.js +33 -0
- package/dist/packages/bunshot-auth/src/lib/credentialStuffing.d.ts +40 -0
- package/dist/packages/bunshot-auth/src/lib/credentialStuffing.js +221 -0
- package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.d.ts +19 -0
- package/dist/packages/bunshot-auth/src/lib/deletionCancelToken.js +148 -0
- package/dist/packages/bunshot-auth/src/lib/emailTemplates.d.ts +23 -0
- package/dist/packages/bunshot-auth/src/lib/emailTemplates.js +265 -0
- package/dist/packages/bunshot-auth/src/lib/emailVerification.d.ts +30 -0
- package/dist/packages/bunshot-auth/src/lib/emailVerification.js +200 -0
- package/dist/packages/bunshot-auth/src/lib/env.d.ts +1 -0
- package/dist/packages/bunshot-auth/src/lib/env.js +3 -0
- package/dist/packages/bunshot-auth/src/lib/fingerprint.js +36 -0
- package/dist/{lib → packages/bunshot-auth/src/lib}/groups.d.ts +15 -16
- package/dist/{lib → packages/bunshot-auth/src/lib}/groups.js +22 -34
- package/dist/packages/bunshot-auth/src/lib/jwks.d.ts +28 -0
- package/dist/packages/bunshot-auth/src/lib/jwks.js +79 -0
- package/dist/packages/bunshot-auth/src/lib/jwt.d.ts +12 -0
- package/dist/packages/bunshot-auth/src/lib/jwt.js +86 -0
- package/dist/{lib → packages/bunshot-auth/src/lib}/logger.js +3 -3
- package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.d.ts +5 -4
- package/dist/{lib → packages/bunshot-auth/src/lib}/m2m.js +6 -10
- package/dist/packages/bunshot-auth/src/lib/magicLink.d.ts +13 -0
- package/dist/packages/bunshot-auth/src/lib/magicLink.js +145 -0
- package/dist/packages/bunshot-auth/src/lib/mfaChallenge.d.ts +60 -0
- package/dist/packages/bunshot-auth/src/lib/mfaChallenge.js +419 -0
- package/dist/packages/bunshot-auth/src/lib/oauth.d.ts +82 -0
- package/dist/packages/bunshot-auth/src/lib/oauth.js +177 -0
- package/dist/packages/bunshot-auth/src/lib/oauthCode.d.ts +19 -0
- package/dist/packages/bunshot-auth/src/lib/oauthCode.js +182 -0
- package/dist/packages/bunshot-auth/src/lib/oauthReauth.d.ts +19 -0
- package/dist/packages/bunshot-auth/src/lib/oauthReauth.js +255 -0
- package/dist/packages/bunshot-auth/src/lib/organization.d.ts +66 -0
- package/dist/packages/bunshot-auth/src/lib/organization.js +225 -0
- package/dist/packages/bunshot-auth/src/lib/passwordHistory.d.ts +12 -0
- package/dist/packages/bunshot-auth/src/lib/passwordHistory.js +31 -0
- package/dist/packages/bunshot-auth/src/lib/resetPassword.d.ts +20 -0
- package/dist/packages/bunshot-auth/src/lib/resetPassword.js +148 -0
- package/dist/packages/bunshot-auth/src/lib/roles.d.ts +9 -0
- package/dist/packages/bunshot-auth/src/lib/roles.js +93 -0
- package/dist/packages/bunshot-auth/src/lib/saml.d.ts +29 -0
- package/dist/packages/bunshot-auth/src/lib/saml.js +73 -0
- package/dist/packages/bunshot-auth/src/lib/samlRequestId.d.ts +13 -0
- package/dist/packages/bunshot-auth/src/lib/samlRequestId.js +129 -0
- package/dist/{lib → packages/bunshot-auth/src/lib}/scim.d.ts +7 -7
- package/dist/{lib → packages/bunshot-auth/src/lib}/scim.js +15 -13
- package/dist/packages/bunshot-auth/src/lib/securityEventWiring.d.ts +22 -0
- package/dist/packages/bunshot-auth/src/lib/securityEventWiring.js +65 -0
- package/dist/packages/bunshot-auth/src/lib/session.d.ts +45 -0
- package/dist/packages/bunshot-auth/src/lib/session.js +1211 -0
- package/dist/packages/bunshot-auth/src/lib/storeInfra.d.ts +26 -0
- package/dist/packages/bunshot-auth/src/lib/storeInfra.js +18 -0
- package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.d.ts +3 -2
- package/dist/{lib → packages/bunshot-auth/src/lib}/suspension.js +2 -5
- package/dist/packages/bunshot-auth/src/lib/validateAdapter.d.ts +16 -0
- package/dist/packages/bunshot-auth/src/lib/validateAdapter.js +161 -0
- package/dist/packages/bunshot-auth/src/middleware/bearerAuth.d.ts +13 -0
- package/dist/packages/bunshot-auth/src/middleware/bearerAuth.js +58 -0
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/csrf.d.ts +5 -4
- package/dist/packages/bunshot-auth/src/middleware/csrf.js +138 -0
- package/dist/packages/bunshot-auth/src/middleware/identify.d.ts +4 -0
- package/dist/packages/bunshot-auth/src/middleware/identify.js +124 -0
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.d.ts +2 -2
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireMfaSetup.js +10 -8
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.d.ts +2 -2
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireRole.js +20 -16
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.d.ts +2 -2
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireScope.js +6 -6
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.d.ts +2 -2
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireStepUp.js +8 -7
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.d.ts +2 -2
- package/dist/{middleware → packages/bunshot-auth/src/middleware}/requireVerifiedEmail.js +7 -6
- package/dist/packages/bunshot-auth/src/middleware/scimAuth.d.ts +8 -0
- package/dist/packages/bunshot-auth/src/middleware/scimAuth.js +29 -0
- package/dist/packages/bunshot-auth/src/middleware/userAuth.d.ts +3 -0
- package/dist/packages/bunshot-auth/src/middleware/userAuth.js +6 -0
- package/dist/{models → packages/bunshot-auth/src/models}/AuthUser.d.ts +12 -8
- package/dist/packages/bunshot-auth/src/models/AuthUser.js +53 -0
- package/dist/packages/bunshot-auth/src/models/Group.d.ts +19 -0
- package/dist/packages/bunshot-auth/src/models/Group.js +22 -0
- package/dist/{models → packages/bunshot-auth/src/models}/GroupMembership.d.ts +6 -8
- package/dist/packages/bunshot-auth/src/models/GroupMembership.js +19 -0
- package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.d.ts +1 -1
- package/dist/{models → packages/bunshot-auth/src/models}/M2MClient.js +5 -5
- package/dist/packages/bunshot-auth/src/models/TenantRole.d.ts +13 -0
- package/dist/packages/bunshot-auth/src/models/TenantRole.js +17 -0
- package/dist/packages/bunshot-auth/src/plugin.d.ts +4 -0
- package/dist/packages/bunshot-auth/src/plugin.js +274 -0
- package/dist/packages/bunshot-auth/src/routes/auth.d.ts +15 -0
- package/dist/packages/bunshot-auth/src/routes/auth.js +1624 -0
- package/dist/packages/bunshot-auth/src/routes/groups.d.ts +4 -0
- package/dist/packages/bunshot-auth/src/routes/groups.js +481 -0
- package/dist/packages/bunshot-auth/src/routes/m2m.d.ts +2 -0
- package/dist/packages/bunshot-auth/src/routes/m2m.js +145 -0
- package/dist/packages/bunshot-auth/src/routes/mfa.d.ts +6 -0
- package/dist/packages/bunshot-auth/src/routes/mfa.js +991 -0
- package/dist/packages/bunshot-auth/src/routes/oauth.d.ts +3 -0
- package/dist/packages/bunshot-auth/src/routes/oauth.js +1727 -0
- package/dist/packages/bunshot-auth/src/routes/oidc.d.ts +2 -0
- package/dist/packages/bunshot-auth/src/routes/oidc.js +84 -0
- package/dist/packages/bunshot-auth/src/routes/organizations.d.ts +3 -0
- package/dist/packages/bunshot-auth/src/routes/organizations.js +741 -0
- package/dist/packages/bunshot-auth/src/routes/passkey.d.ts +2 -0
- package/dist/packages/bunshot-auth/src/routes/passkey.js +199 -0
- package/dist/packages/bunshot-auth/src/routes/saml.d.ts +2 -0
- package/dist/packages/bunshot-auth/src/routes/saml.js +226 -0
- package/dist/packages/bunshot-auth/src/routes/scim.d.ts +3 -0
- package/dist/packages/bunshot-auth/src/routes/scim.js +588 -0
- package/dist/packages/bunshot-auth/src/runtime.d.ts +52 -0
- package/dist/packages/bunshot-auth/src/runtime.js +11 -0
- package/dist/{schemas → packages/bunshot-auth/src/schemas}/auth.d.ts +4 -5
- package/dist/packages/bunshot-auth/src/schemas/auth.js +24 -0
- package/dist/packages/bunshot-auth/src/schemas/error.d.ts +10 -0
- package/dist/packages/bunshot-auth/src/schemas/error.js +10 -0
- package/dist/packages/bunshot-auth/src/schemas/success.d.ts +10 -0
- package/dist/packages/bunshot-auth/src/schemas/success.js +10 -0
- package/dist/packages/bunshot-auth/src/services/auth.d.ts +39 -0
- package/dist/packages/bunshot-auth/src/services/auth.js +378 -0
- package/dist/{services → packages/bunshot-auth/src/services}/mfa.d.ts +41 -17
- package/dist/{services → packages/bunshot-auth/src/services}/mfa.js +259 -183
- package/dist/packages/bunshot-auth/src/testing.d.ts +31 -0
- package/dist/packages/bunshot-auth/src/testing.js +23 -0
- package/dist/packages/bunshot-auth/src/types/adapter.d.ts +1 -0
- package/dist/packages/bunshot-auth/src/types/adapter.js +1 -0
- package/dist/packages/bunshot-auth/src/types/config.d.ts +152 -0
- package/dist/packages/bunshot-auth/src/types/config.js +179 -0
- package/dist/{routes → packages/bunshot-auth/src/types}/groups.d.ts +2 -3
- package/dist/packages/bunshot-auth/src/types/groups.js +1 -0
- package/dist/packages/bunshot-auth/src/types/oauthCode.d.ts +6 -0
- package/dist/packages/bunshot-auth/src/types/oauthCode.js +1 -0
- package/dist/packages/bunshot-auth/src/types/oauthReauth.d.ts +13 -0
- package/dist/packages/bunshot-auth/src/types/oauthReauth.js +1 -0
- package/dist/packages/bunshot-auth/src/types/redis.d.ts +1 -0
- package/dist/packages/bunshot-auth/src/types/redis.js +1 -0
- package/dist/packages/bunshot-auth/src/types/saml.d.ts +10 -0
- package/dist/packages/bunshot-auth/src/types/saml.js +1 -0
- package/dist/packages/bunshot-auth/src/types/session.d.ts +18 -0
- package/dist/packages/bunshot-auth/src/types/session.js +1 -0
- package/dist/packages/bunshot-auth/src/types/store.d.ts +1 -0
- package/dist/packages/bunshot-auth/src/types/store.js +1 -0
- package/dist/packages/bunshot-core/src/adminProvider.d.ts +95 -0
- package/dist/packages/bunshot-core/src/adminProvider.js +1 -0
- package/dist/packages/bunshot-core/src/auditLog.d.ts +34 -0
- package/dist/packages/bunshot-core/src/auditLog.js +1 -0
- package/dist/packages/bunshot-core/src/auth-adapter.d.ts +227 -0
- package/dist/packages/bunshot-core/src/auth-adapter.js +4 -0
- package/dist/packages/bunshot-core/src/authVariables.d.ts +14 -0
- package/dist/packages/bunshot-core/src/authVariables.js +4 -0
- package/dist/packages/bunshot-core/src/cache.d.ts +12 -0
- package/dist/packages/bunshot-core/src/cache.js +21 -0
- package/dist/{lib → packages/bunshot-core/src}/captcha.d.ts +1 -10
- package/dist/packages/bunshot-core/src/captcha.js +1 -0
- package/dist/packages/bunshot-core/src/clearRegistry.d.ts +6 -0
- package/dist/packages/bunshot-core/src/clearRegistry.js +17 -0
- package/dist/packages/bunshot-core/src/clientIp.d.ts +3 -0
- package/dist/packages/bunshot-core/src/clientIp.js +45 -0
- package/dist/packages/bunshot-core/src/configLock.d.ts +4 -0
- package/dist/packages/bunshot-core/src/configLock.js +7 -0
- package/dist/packages/bunshot-core/src/configValidation.d.ts +22 -0
- package/dist/packages/bunshot-core/src/configValidation.js +39 -0
- package/dist/packages/bunshot-core/src/constants.js +10 -0
- package/dist/packages/bunshot-core/src/context/bunshotContext.d.ts +232 -0
- package/dist/packages/bunshot-core/src/context/bunshotContext.js +1 -0
- package/dist/packages/bunshot-core/src/context/contextAccess.d.ts +3 -0
- package/dist/packages/bunshot-core/src/context/contextAccess.js +16 -0
- package/dist/packages/bunshot-core/src/context/contextStore.d.ts +16 -0
- package/dist/packages/bunshot-core/src/context/contextStore.js +31 -0
- package/dist/packages/bunshot-core/src/context/frameworkConfig.d.ts +38 -0
- package/dist/packages/bunshot-core/src/context/frameworkConfig.js +1 -0
- package/dist/packages/bunshot-core/src/context/index.d.ts +4 -0
- package/dist/packages/bunshot-core/src/context/index.js +2 -0
- package/dist/packages/bunshot-core/src/context.d.ts +40 -0
- package/dist/packages/bunshot-core/src/context.js +35 -0
- package/dist/packages/bunshot-core/src/coreContracts.d.ts +47 -0
- package/dist/packages/bunshot-core/src/coreContracts.js +1 -0
- package/dist/packages/bunshot-core/src/coreRegistrar.d.ts +6 -0
- package/dist/packages/bunshot-core/src/coreRegistrar.js +42 -0
- package/dist/{lib → packages/bunshot-core/src}/createRoute.d.ts +4 -30
- package/dist/{lib → packages/bunshot-core/src}/createRoute.js +39 -88
- package/dist/packages/bunshot-core/src/cronRegistry.d.ts +11 -0
- package/dist/packages/bunshot-core/src/cronRegistry.js +1 -0
- package/dist/packages/bunshot-core/src/crypto.d.ts +43 -0
- package/dist/packages/bunshot-core/src/crypto.js +74 -0
- package/dist/packages/bunshot-core/src/csrf.d.ts +8 -0
- package/dist/packages/bunshot-core/src/csrf.js +1 -0
- package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.d.ts +7 -0
- package/dist/packages/bunshot-core/src/defaults/defaultFingerprint.js +19 -0
- package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.d.ts +6 -0
- package/dist/packages/bunshot-core/src/defaults/memoryCacheAdapter.js +40 -0
- package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.d.ts +6 -0
- package/dist/packages/bunshot-core/src/defaults/memoryRateLimit.js +24 -0
- package/dist/packages/bunshot-core/src/emailTemplates.d.ts +5 -0
- package/dist/packages/bunshot-core/src/emailTemplates.js +10 -0
- package/dist/{lib/HttpError.d.ts → packages/bunshot-core/src/errors.d.ts} +4 -1
- package/dist/{lib/HttpError.js → packages/bunshot-core/src/errors.js} +7 -1
- package/dist/packages/bunshot-core/src/eventBus.d.ts +270 -0
- package/dist/packages/bunshot-core/src/eventBus.js +143 -0
- package/dist/packages/bunshot-core/src/idempotency.d.ts +18 -0
- package/dist/packages/bunshot-core/src/idempotency.js +1 -0
- package/dist/packages/bunshot-core/src/index.d.ts +60 -0
- package/dist/packages/bunshot-core/src/index.js +34 -0
- package/dist/packages/bunshot-core/src/mail.d.ts +14 -0
- package/dist/packages/bunshot-core/src/mail.js +8 -0
- package/dist/packages/bunshot-core/src/memoryEviction.d.ts +24 -0
- package/dist/packages/bunshot-core/src/memoryEviction.js +52 -0
- package/dist/packages/bunshot-core/src/pagination.d.ts +45 -0
- package/dist/packages/bunshot-core/src/pagination.js +61 -0
- package/dist/packages/bunshot-core/src/permissions.d.ts +64 -0
- package/dist/packages/bunshot-core/src/permissions.js +27 -0
- package/dist/packages/bunshot-core/src/plugin.d.ts +44 -0
- package/dist/packages/bunshot-core/src/plugin.js +1 -0
- package/dist/packages/bunshot-core/src/rateLimit.d.ts +5 -0
- package/dist/packages/bunshot-core/src/rateLimit.js +18 -0
- package/dist/packages/bunshot-core/src/redis.d.ts +21 -0
- package/dist/packages/bunshot-core/src/redis.js +1 -0
- package/dist/packages/bunshot-core/src/routeAuth.d.ts +5 -0
- package/dist/packages/bunshot-core/src/routeAuth.js +11 -0
- package/dist/packages/bunshot-core/src/routeOverrides.d.ts +24 -0
- package/dist/packages/bunshot-core/src/routeOverrides.js +25 -0
- package/dist/packages/bunshot-core/src/routerAdapter.d.ts +6 -0
- package/dist/packages/bunshot-core/src/routerAdapter.js +56 -0
- package/dist/packages/bunshot-core/src/secrets.d.ts +48 -0
- package/dist/packages/bunshot-core/src/secrets.js +8 -0
- package/dist/packages/bunshot-core/src/signing.d.ts +41 -0
- package/dist/packages/bunshot-core/src/signing.js +1 -0
- package/dist/packages/bunshot-core/src/sse.d.ts +36 -0
- package/dist/packages/bunshot-core/src/sse.js +1 -0
- package/dist/packages/bunshot-core/src/storageAdapter.js +1 -0
- package/dist/packages/bunshot-core/src/storeInfra.d.ts +44 -0
- package/dist/packages/bunshot-core/src/storeInfra.js +18 -0
- package/dist/packages/bunshot-core/src/storeType.d.ts +7 -0
- package/dist/packages/bunshot-core/src/storeType.js +1 -0
- package/dist/packages/bunshot-core/src/testing.d.ts +1 -0
- package/dist/packages/bunshot-core/src/testing.js +1 -0
- package/dist/packages/bunshot-core/src/uploadRegistry.d.ts +23 -0
- package/dist/packages/bunshot-core/src/uploadRegistry.js +4 -0
- package/dist/packages/bunshot-core/src/userResolver.d.ts +5 -0
- package/dist/packages/bunshot-core/src/userResolver.js +14 -0
- package/dist/packages/bunshot-core/src/wsMessages.d.ts +42 -0
- package/dist/packages/bunshot-core/src/wsMessages.js +4 -0
- package/dist/packages/bunshot-permissions/src/adapters/memory.d.ts +7 -0
- package/dist/packages/bunshot-permissions/src/adapters/memory.js +73 -0
- package/dist/packages/bunshot-permissions/src/index.d.ts +10 -0
- package/dist/packages/bunshot-permissions/src/index.js +5 -0
- package/dist/packages/bunshot-permissions/src/lib/bootstrap.d.ts +7 -0
- package/dist/packages/bunshot-permissions/src/lib/bootstrap.js +12 -0
- package/dist/packages/bunshot-permissions/src/lib/evaluator.d.ts +10 -0
- package/dist/packages/bunshot-permissions/src/lib/evaluator.js +165 -0
- package/dist/packages/bunshot-permissions/src/lib/registry.d.ts +2 -0
- package/dist/packages/bunshot-permissions/src/lib/registry.js +31 -0
- package/dist/packages/bunshot-permissions/src/lib/validation.d.ts +1 -0
- package/dist/packages/bunshot-permissions/src/lib/validation.js +1 -0
- package/dist/packages/bunshot-permissions/src/types/adapter.d.ts +1 -0
- package/dist/packages/bunshot-permissions/src/types/adapter.js +1 -0
- package/dist/packages/bunshot-permissions/src/types/evaluator.d.ts +1 -0
- package/dist/packages/bunshot-permissions/src/types/evaluator.js +1 -0
- package/dist/packages/bunshot-permissions/src/types/models.d.ts +1 -0
- package/dist/packages/bunshot-permissions/src/types/models.js +1 -0
- package/dist/packages/bunshot-permissions/src/types/registry.d.ts +1 -0
- package/dist/packages/bunshot-permissions/src/types/registry.js +1 -0
- package/dist/packages/bunshot-postgres/src/adapter.d.ts +6 -0
- package/dist/packages/bunshot-postgres/src/adapter.js +794 -0
- package/dist/packages/bunshot-postgres/src/connection.d.ts +15 -0
- package/dist/packages/bunshot-postgres/src/connection.js +16 -0
- package/dist/packages/bunshot-postgres/src/index.d.ts +4 -0
- package/dist/packages/bunshot-postgres/src/index.js +2 -0
- package/dist/packages/bunshot-postgres/src/schema.d.ts +997 -0
- package/dist/packages/bunshot-postgres/src/schema.js +105 -0
- package/dist/src/app.d.ts +230 -0
- package/dist/src/app.js +182 -0
- package/dist/src/cli/commands/init.d.ts +10 -0
- package/dist/src/cli/commands/init.js +709 -0
- package/dist/src/cli/index.d.ts +1 -0
- package/dist/src/cli/index.js +3 -0
- package/dist/src/entrypoints/mongo.d.ts +6 -0
- package/dist/src/entrypoints/mongo.js +4 -0
- package/dist/src/entrypoints/queue.d.ts +2 -0
- package/dist/src/entrypoints/queue.js +1 -0
- package/dist/src/entrypoints/redis.d.ts +1 -0
- package/dist/src/entrypoints/redis.js +1 -0
- package/dist/{adapters → src/framework/adapters}/localStorage.d.ts +1 -1
- package/dist/{adapters → src/framework/adapters}/localStorage.js +10 -10
- package/dist/src/framework/adapters/memoryStorage.d.ts +2 -0
- package/dist/src/framework/adapters/memoryStorage.js +45 -0
- package/dist/{adapters → src/framework/adapters}/s3Storage.d.ts +1 -1
- package/dist/{adapters → src/framework/adapters}/s3Storage.js +12 -12
- package/dist/src/framework/admin/bunshotAccess.d.ts +2 -0
- package/dist/src/framework/admin/bunshotAccess.js +23 -0
- package/dist/src/framework/admin/bunshotUsers.d.ts +2 -0
- package/dist/src/framework/admin/bunshotUsers.js +103 -0
- package/dist/src/framework/admin/index.d.ts +7 -0
- package/dist/src/framework/admin/index.js +21 -0
- package/dist/src/framework/boundaryAdapters/cacheFactories.d.ts +13 -0
- package/dist/src/framework/boundaryAdapters/cacheFactories.js +86 -0
- package/dist/src/framework/boundaryAdapters/index.d.ts +2 -0
- package/dist/src/framework/boundaryAdapters/index.js +1 -0
- package/dist/src/framework/boundaryAdapters.d.ts +17 -0
- package/dist/src/framework/boundaryAdapters.js +62 -0
- package/dist/src/framework/buildContext.d.ts +33 -0
- package/dist/src/framework/buildContext.js +119 -0
- package/dist/src/framework/config/schema.d.ts +447 -0
- package/dist/src/framework/config/schema.js +528 -0
- package/dist/src/framework/createInfrastructure.d.ts +76 -0
- package/dist/src/framework/createInfrastructure.js +221 -0
- package/dist/src/framework/lib/auditLog.d.ts +23 -0
- package/dist/src/framework/lib/auditLog.js +416 -0
- package/dist/src/framework/lib/captcha.d.ts +11 -0
- package/dist/{lib → src/framework/lib}/captcha.js +13 -10
- package/dist/{lib → src/framework/lib}/createDtoMapper.js +4 -4
- package/dist/src/framework/lib/createRoute.d.ts +1 -0
- package/dist/src/framework/lib/createRoute.js +2 -0
- package/dist/{lib → src/framework/lib}/idempotency.d.ts +2 -6
- package/dist/src/framework/lib/idempotency.js +74 -0
- package/dist/src/framework/lib/logger.d.ts +3 -0
- package/dist/src/framework/lib/logger.js +14 -0
- package/dist/src/framework/lib/metrics.d.ts +34 -0
- package/dist/{lib → src/framework/lib}/metrics.js +49 -57
- package/dist/src/framework/lib/pagination.d.ts +42 -0
- package/dist/src/framework/lib/pagination.js +51 -0
- package/dist/src/framework/lib/redisTransport.d.ts +38 -0
- package/dist/src/framework/lib/redisTransport.js +107 -0
- package/dist/src/framework/lib/resolveUserId.d.ts +2 -0
- package/dist/src/framework/lib/resolveUserId.js +5 -0
- package/dist/src/framework/lib/sseCollision.d.ts +6 -0
- package/dist/src/framework/lib/sseCollision.js +26 -0
- package/dist/src/framework/lib/storageAdapter.d.ts +1 -0
- package/dist/src/framework/lib/storageAdapter.js +1 -0
- package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.js +4 -4
- package/dist/src/framework/lib/tenant.d.ts +21 -0
- package/dist/src/framework/lib/tenant.js +70 -0
- package/dist/{lib → src/framework/lib}/upload.d.ts +11 -10
- package/dist/src/framework/lib/upload.js +132 -0
- package/dist/src/framework/lib/uploadRegistry.d.ts +23 -0
- package/dist/src/framework/lib/uploadRegistry.js +34 -0
- package/dist/{lib → src/framework/lib}/validate.d.ts +1 -1
- package/dist/{lib → src/framework/lib}/validate.js +2 -2
- package/dist/src/framework/lib/ws.d.ts +19 -0
- package/dist/src/framework/lib/ws.js +130 -0
- package/dist/src/framework/lib/wsHeartbeat.d.ts +12 -0
- package/dist/src/framework/lib/wsHeartbeat.js +53 -0
- package/dist/src/framework/lib/wsMessages.d.ts +25 -0
- package/dist/src/framework/lib/wsMessages.js +45 -0
- package/dist/src/framework/lib/wsNamespace.d.ts +17 -0
- package/dist/src/framework/lib/wsNamespace.js +19 -0
- package/dist/src/framework/lib/wsPresence.d.ts +17 -0
- package/dist/src/framework/lib/wsPresence.js +84 -0
- package/dist/src/framework/lib/wsTransport.d.ts +38 -0
- package/dist/src/framework/lib/wsTransport.js +9 -0
- package/dist/{lib → src/framework/lib}/zodToMongoose.d.ts +1 -1
- package/dist/{lib → src/framework/lib}/zodToMongoose.js +11 -11
- package/dist/{middleware → src/framework/middleware}/auditLog.d.ts +4 -3
- package/dist/src/framework/middleware/auditLog.js +42 -0
- package/dist/{middleware → src/framework/middleware}/botProtection.d.ts +2 -2
- package/dist/{middleware → src/framework/middleware}/botProtection.js +8 -9
- package/dist/src/framework/middleware/cacheResponse.d.ts +35 -0
- package/dist/src/framework/middleware/cacheResponse.js +126 -0
- package/dist/{middleware → src/framework/middleware}/captcha.d.ts +2 -3
- package/dist/src/framework/middleware/captcha.js +37 -0
- package/dist/{middleware → src/framework/middleware}/errorHandler.d.ts +1 -1
- package/dist/{middleware → src/framework/middleware}/errorHandler.js +2 -2
- package/dist/src/framework/middleware/index.js +1 -0
- package/dist/{middleware → src/framework/middleware}/logger.d.ts +1 -1
- package/dist/src/framework/middleware/metrics.d.ts +12 -0
- package/dist/src/framework/middleware/metrics.js +26 -0
- package/dist/{middleware → src/framework/middleware}/rateLimit.d.ts +2 -2
- package/dist/src/framework/middleware/rateLimit.js +22 -0
- package/dist/src/framework/middleware/requestId.d.ts +3 -0
- package/dist/{middleware → src/framework/middleware}/requestId.js +2 -2
- package/dist/{middleware → src/framework/middleware}/requestLogger.d.ts +3 -3
- package/dist/{middleware → src/framework/middleware}/requestLogger.js +17 -12
- package/dist/{middleware → src/framework/middleware}/requestSigning.d.ts +2 -2
- package/dist/{middleware → src/framework/middleware}/requestSigning.js +18 -20
- package/dist/src/framework/middleware/tenant.d.ts +14 -0
- package/dist/{middleware → src/framework/middleware}/tenant.js +31 -27
- package/dist/src/framework/middleware/upload.d.ts +5 -0
- package/dist/{middleware → src/framework/middleware}/upload.js +4 -4
- package/dist/{middleware → src/framework/middleware}/webhookAuth.d.ts +3 -3
- package/dist/{middleware → src/framework/middleware}/webhookAuth.js +11 -12
- package/dist/src/framework/models/AuditLog.d.ts +21 -0
- package/dist/src/framework/models/AuditLog.js +31 -0
- package/dist/src/framework/mountMiddleware.d.ts +91 -0
- package/dist/src/framework/mountMiddleware.js +128 -0
- package/dist/src/framework/mountOptionalEndpoints.d.ts +103 -0
- package/dist/src/framework/mountOptionalEndpoints.js +47 -0
- package/dist/src/framework/mountRoutes.d.ts +21 -0
- package/dist/src/framework/mountRoutes.js +144 -0
- package/dist/src/framework/persistence/cronRegistry.d.ts +28 -0
- package/dist/src/framework/persistence/cronRegistry.js +139 -0
- package/dist/src/framework/persistence/idempotency.d.ts +26 -0
- package/dist/src/framework/persistence/idempotency.js +178 -0
- package/dist/src/framework/persistence/index.d.ts +6 -0
- package/dist/src/framework/persistence/index.js +8 -0
- package/dist/src/framework/persistence/storeInfra.d.ts +9 -0
- package/dist/src/framework/persistence/storeInfra.js +1 -0
- package/dist/src/framework/persistence/uploadRegistry.d.ts +35 -0
- package/dist/src/framework/persistence/uploadRegistry.js +235 -0
- package/dist/src/framework/persistence/wsMessages.d.ts +22 -0
- package/dist/src/framework/persistence/wsMessages.js +296 -0
- package/dist/src/framework/preloadSchemas.d.ts +24 -0
- package/dist/src/framework/preloadSchemas.js +42 -0
- package/dist/src/framework/registerBoundaryAdapters.d.ts +23 -0
- package/dist/src/framework/registerBoundaryAdapters.js +46 -0
- package/dist/src/framework/routes/admin.d.ts +9 -0
- package/dist/src/framework/routes/admin.js +361 -0
- package/dist/src/framework/routes/health.d.ts +1 -0
- package/dist/src/framework/routes/health.js +21 -0
- package/dist/src/framework/routes/home.d.ts +1 -0
- package/dist/src/framework/routes/home.js +18 -0
- package/dist/src/framework/routes/jobs.d.ts +3 -0
- package/dist/{routes → src/framework/routes}/jobs.js +128 -103
- package/dist/src/framework/routes/metrics.d.ts +10 -0
- package/dist/src/framework/routes/metrics.js +57 -0
- package/dist/{routes → src/framework/routes}/uploads.d.ts +3 -3
- package/dist/src/framework/routes/uploads.js +262 -0
- package/dist/src/framework/runPluginLifecycle.d.ts +27 -0
- package/dist/src/framework/runPluginLifecycle.js +121 -0
- package/dist/src/framework/secrets/frameworkSecretSchema.d.ts +58 -0
- package/dist/src/framework/secrets/frameworkSecretSchema.js +20 -0
- package/dist/src/framework/secrets/index.d.ts +9 -0
- package/dist/src/framework/secrets/index.js +7 -0
- package/dist/src/framework/secrets/providers/envProvider.d.ts +15 -0
- package/dist/src/framework/secrets/providers/envProvider.js +18 -0
- package/dist/src/framework/secrets/providers/fileProvider.d.ts +8 -0
- package/dist/src/framework/secrets/providers/fileProvider.js +82 -0
- package/dist/src/framework/secrets/providers/ssmProvider.d.ts +20 -0
- package/dist/src/framework/secrets/providers/ssmProvider.js +127 -0
- package/dist/src/framework/secrets/resolveSecretBundle.d.ts +53 -0
- package/dist/src/framework/secrets/resolveSecretBundle.js +84 -0
- package/dist/src/framework/secrets/resolveSecrets.d.ts +18 -0
- package/dist/src/framework/secrets/resolveSecrets.js +34 -0
- package/dist/src/framework/sse/index.d.ts +21 -0
- package/dist/src/framework/sse/index.js +109 -0
- package/dist/src/framework/ws/index.d.ts +11 -0
- package/dist/src/framework/ws/index.js +8 -0
- package/dist/src/index.d.ts +87 -0
- package/dist/src/index.js +58 -0
- package/dist/src/lib/appConfig.d.ts +7 -0
- package/dist/src/lib/appConfig.js +27 -0
- package/dist/src/lib/appMeta.d.ts +7 -0
- package/dist/src/lib/appMeta.js +3 -0
- package/dist/src/lib/authConfig.d.ts +532 -0
- package/dist/{lib/appConfig.js → src/lib/authConfig.js} +75 -17
- package/dist/{lib → src/lib}/context.d.ts +6 -12
- package/dist/{lib → src/lib}/context.js +5 -5
- package/dist/src/lib/logger.d.ts +1 -0
- package/dist/src/lib/logger.js +1 -0
- package/dist/src/lib/mongo.d.ts +58 -0
- package/dist/src/lib/mongo.js +96 -0
- package/dist/src/lib/queue.d.ts +72 -0
- package/dist/src/lib/queue.js +152 -0
- package/dist/src/lib/redis.d.ts +28 -0
- package/dist/src/lib/redis.js +72 -0
- package/dist/{lib → src/lib}/signing.d.ts +2 -2
- package/dist/src/lib/signing.js +210 -0
- package/dist/src/lib/signingConfig.d.ts +40 -0
- package/dist/src/lib/signingConfig.js +28 -0
- package/dist/src/server.d.ts +146 -0
- package/dist/src/server.js +469 -0
- package/dist/src/shared/lib/HttpError.d.ts +1 -0
- package/dist/src/shared/lib/HttpError.js +2 -0
- package/dist/src/shared/lib/constants.d.ts +10 -0
- package/dist/src/shared/lib/crypto.d.ts +43 -0
- package/dist/src/shared/lib/crypto.js +74 -0
- package/dist/src/shared/lib/signing.d.ts +52 -0
- package/dist/{lib → src/shared/lib}/signing.js +35 -8
- package/dist/src/testing.d.ts +34 -0
- package/dist/src/testing.js +93 -0
- package/package.json +60 -24
- package/dist/adapters/memoryAuth.d.ts +0 -52
- package/dist/adapters/memoryAuth.js +0 -749
- package/dist/adapters/memoryStorage.d.ts +0 -3
- package/dist/adapters/memoryStorage.js +0 -44
- package/dist/adapters/mongoAuth.d.ts +0 -2
- package/dist/adapters/mongoAuth.js +0 -403
- package/dist/adapters/sqliteAuth.d.ts +0 -72
- package/dist/adapters/sqliteAuth.js +0 -858
- package/dist/app.d.ts +0 -559
- package/dist/app.js +0 -651
- package/dist/entrypoints/mongo.d.ts +0 -5
- package/dist/entrypoints/mongo.js +0 -4
- package/dist/entrypoints/queue.d.ts +0 -2
- package/dist/entrypoints/queue.js +0 -1
- package/dist/entrypoints/redis.d.ts +0 -1
- package/dist/entrypoints/redis.js +0 -1
- package/dist/index.d.ts +0 -117
- package/dist/index.js +0 -88
- package/dist/lib/appConfig.d.ts +0 -275
- package/dist/lib/auditLog.d.ts +0 -58
- package/dist/lib/auditLog.js +0 -218
- package/dist/lib/authAdapter.d.ts +0 -246
- package/dist/lib/authAdapter.js +0 -7
- package/dist/lib/authRateLimit.d.ts +0 -13
- package/dist/lib/authRateLimit.js +0 -117
- package/dist/lib/clientIp.d.ts +0 -14
- package/dist/lib/credentialStuffing.d.ts +0 -31
- package/dist/lib/credentialStuffing.js +0 -77
- package/dist/lib/crypto.d.ts +0 -11
- package/dist/lib/crypto.js +0 -22
- package/dist/lib/deletionCancelToken.d.ts +0 -12
- package/dist/lib/deletionCancelToken.js +0 -88
- package/dist/lib/emailVerification.d.ts +0 -19
- package/dist/lib/emailVerification.js +0 -129
- package/dist/lib/fingerprint.js +0 -36
- package/dist/lib/idempotency.js +0 -182
- package/dist/lib/jwks.d.ts +0 -25
- package/dist/lib/jwks.js +0 -51
- package/dist/lib/jwt.d.ts +0 -15
- package/dist/lib/jwt.js +0 -111
- package/dist/lib/metrics.d.ts +0 -14
- package/dist/lib/mfaChallenge.d.ts +0 -55
- package/dist/lib/mfaChallenge.js +0 -398
- package/dist/lib/mongo.d.ts +0 -39
- package/dist/lib/mongo.js +0 -124
- package/dist/lib/oauth.d.ts +0 -40
- package/dist/lib/oauth.js +0 -101
- package/dist/lib/oauthCode.d.ts +0 -15
- package/dist/lib/oauthCode.js +0 -95
- package/dist/lib/pagination.d.ts +0 -119
- package/dist/lib/pagination.js +0 -166
- package/dist/lib/queue.d.ts +0 -37
- package/dist/lib/queue.js +0 -117
- package/dist/lib/redis.d.ts +0 -9
- package/dist/lib/redis.js +0 -61
- package/dist/lib/resetPassword.d.ts +0 -12
- package/dist/lib/resetPassword.js +0 -93
- package/dist/lib/roles.d.ts +0 -7
- package/dist/lib/roles.js +0 -49
- package/dist/lib/saml.d.ts +0 -25
- package/dist/lib/saml.js +0 -64
- package/dist/lib/securityEvents.d.ts +0 -28
- package/dist/lib/securityEvents.js +0 -26
- package/dist/lib/session.d.ts +0 -49
- package/dist/lib/session.js +0 -597
- package/dist/lib/tenant.d.ts +0 -15
- package/dist/lib/tenant.js +0 -65
- package/dist/lib/upload.js +0 -112
- package/dist/lib/uploadRegistry.d.ts +0 -18
- package/dist/lib/uploadRegistry.js +0 -83
- package/dist/lib/ws.d.ts +0 -22
- package/dist/lib/ws.js +0 -96
- package/dist/lib/wsHeartbeat.d.ts +0 -12
- package/dist/lib/wsHeartbeat.js +0 -57
- package/dist/lib/wsMessages.d.ts +0 -40
- package/dist/lib/wsMessages.js +0 -330
- package/dist/lib/wsPresence.d.ts +0 -25
- package/dist/lib/wsPresence.js +0 -99
- package/dist/middleware/auditLog.js +0 -39
- package/dist/middleware/bearerAuth.d.ts +0 -2
- package/dist/middleware/bearerAuth.js +0 -11
- package/dist/middleware/cacheResponse.d.ts +0 -15
- package/dist/middleware/cacheResponse.js +0 -178
- package/dist/middleware/captcha.js +0 -36
- package/dist/middleware/csrf.js +0 -129
- package/dist/middleware/identify.d.ts +0 -3
- package/dist/middleware/identify.js +0 -122
- package/dist/middleware/index.js +0 -1
- package/dist/middleware/metrics.d.ts +0 -9
- package/dist/middleware/metrics.js +0 -26
- package/dist/middleware/rateLimit.js +0 -22
- package/dist/middleware/requestId.d.ts +0 -3
- package/dist/middleware/scimAuth.d.ts +0 -8
- package/dist/middleware/scimAuth.js +0 -29
- package/dist/middleware/tenant.d.ts +0 -5
- package/dist/middleware/upload.d.ts +0 -5
- package/dist/middleware/userAuth.d.ts +0 -3
- package/dist/middleware/userAuth.js +0 -6
- package/dist/models/AuditLog.d.ts +0 -30
- package/dist/models/AuditLog.js +0 -39
- package/dist/models/AuthUser.js +0 -55
- package/dist/models/Group.d.ts +0 -21
- package/dist/models/Group.js +0 -28
- package/dist/models/GroupMembership.js +0 -25
- package/dist/models/TenantRole.d.ts +0 -15
- package/dist/models/TenantRole.js +0 -23
- package/dist/routes/auth.d.ts +0 -12
- package/dist/routes/auth.js +0 -744
- package/dist/routes/groups.js +0 -346
- package/dist/routes/health.d.ts +0 -1
- package/dist/routes/health.js +0 -22
- package/dist/routes/home.d.ts +0 -1
- package/dist/routes/home.js +0 -16
- package/dist/routes/jobs.d.ts +0 -2
- package/dist/routes/m2m.d.ts +0 -2
- package/dist/routes/m2m.js +0 -72
- package/dist/routes/metrics.d.ts +0 -8
- package/dist/routes/metrics.js +0 -55
- package/dist/routes/mfa.d.ts +0 -5
- package/dist/routes/mfa.js +0 -628
- package/dist/routes/oauth.d.ts +0 -2
- package/dist/routes/oauth.js +0 -520
- package/dist/routes/oidc.d.ts +0 -2
- package/dist/routes/oidc.js +0 -29
- package/dist/routes/passkey.d.ts +0 -1
- package/dist/routes/passkey.js +0 -157
- package/dist/routes/saml.d.ts +0 -2
- package/dist/routes/saml.js +0 -86
- package/dist/routes/scim.d.ts +0 -2
- package/dist/routes/scim.js +0 -255
- package/dist/routes/uploads.js +0 -227
- package/dist/schemas/auth.js +0 -30
- package/dist/server.d.ts +0 -57
- package/dist/server.js +0 -112
- package/dist/services/auth.d.ts +0 -29
- package/dist/services/auth.js +0 -238
- package/dist/ws/index.d.ts +0 -10
- package/dist/ws/index.js +0 -39
- package/docs/sections/adding-middleware/full.md +0 -35
- package/docs/sections/adding-models/full.md +0 -125
- package/docs/sections/adding-models/overview.md +0 -13
- package/docs/sections/adding-routes/full.md +0 -182
- package/docs/sections/adding-routes/overview.md +0 -23
- package/docs/sections/auth-flow/full.md +0 -790
- package/docs/sections/auth-flow/overview.md +0 -10
- package/docs/sections/auth-security-examples/full.md +0 -388
- package/docs/sections/authentication/full.md +0 -130
- package/docs/sections/authentication/overview.md +0 -5
- package/docs/sections/cli/full.md +0 -42
- package/docs/sections/configuration/full.md +0 -172
- package/docs/sections/configuration/overview.md +0 -18
- package/docs/sections/configuration-example/full.md +0 -117
- package/docs/sections/configuration-example/overview.md +0 -30
- package/docs/sections/documentation/full.md +0 -171
- package/docs/sections/environment-variables/full.md +0 -55
- package/docs/sections/exports/full.md +0 -123
- package/docs/sections/extending-context/full.md +0 -59
- package/docs/sections/header.md +0 -3
- package/docs/sections/installation/full.md +0 -6
- package/docs/sections/jobs/full.md +0 -140
- package/docs/sections/jobs/overview.md +0 -15
- package/docs/sections/logging/full.md +0 -83
- package/docs/sections/metrics/full.md +0 -131
- package/docs/sections/mongodb-connections/full.md +0 -45
- package/docs/sections/mongodb-connections/overview.md +0 -7
- package/docs/sections/multi-tenancy/full.md +0 -66
- package/docs/sections/multi-tenancy/overview.md +0 -15
- package/docs/sections/oauth/full.md +0 -189
- package/docs/sections/oauth/overview.md +0 -16
- package/docs/sections/package-development/full.md +0 -7
- package/docs/sections/pagination/full.md +0 -93
- package/docs/sections/passkey-login/full.md +0 -90
- package/docs/sections/passkey-login/overview.md +0 -1
- package/docs/sections/peer-dependencies/full.md +0 -47
- package/docs/sections/quick-start/full.md +0 -43
- package/docs/sections/response-caching/full.md +0 -117
- package/docs/sections/response-caching/overview.md +0 -13
- package/docs/sections/roles/full.md +0 -225
- package/docs/sections/roles/overview.md +0 -14
- package/docs/sections/running-without-redis/full.md +0 -16
- package/docs/sections/running-without-redis-or-mongodb/full.md +0 -60
- package/docs/sections/signing/full.md +0 -203
- package/docs/sections/stack/full.md +0 -10
- package/docs/sections/uploads/full.md +0 -208
- package/docs/sections/versioning/full.md +0 -85
- package/docs/sections/webhook-auth/full.md +0 -100
- package/docs/sections/websocket/full.md +0 -196
- package/docs/sections/websocket/overview.md +0 -5
- package/docs/sections/websocket-rooms/full.md +0 -102
- package/docs/sections/websocket-rooms/overview.md +0 -5
- /package/dist/{lib/storageAdapter.js → packages/bunshot-admin/src/types/env.js} +0 -0
- /package/dist/{lib → packages/bunshot-auth/src/lib}/fingerprint.d.ts +0 -0
- /package/dist/{lib → packages/bunshot-auth/src/lib}/logger.d.ts +0 -0
- /package/dist/{lib → packages/bunshot-core/src}/constants.d.ts +0 -0
- /package/dist/{lib → packages/bunshot-core/src}/storageAdapter.d.ts +0 -0
- /package/dist/{lib → src/framework/lib}/createDtoMapper.d.ts +0 -0
- /package/dist/{lib → src/framework/lib}/stripUnreferencedSchemas.d.ts +0 -0
- /package/dist/{middleware → src/framework/middleware}/cors.d.ts +0 -0
- /package/dist/{middleware → src/framework/middleware}/cors.js +0 -0
- /package/dist/{middleware → src/framework/middleware}/index.d.ts +0 -0
- /package/dist/{middleware → src/framework/middleware}/logger.js +0 -0
- /package/dist/{lib → src/shared/lib}/constants.js +0 -0
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://${encodeURIComponent(user)}:${encodeURIComponent(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 {};
|
package/dist/lib/oauthCode.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { getRedis } from "./redis";
|
|
2
|
-
import { appConnection, mongoose } from "./mongo";
|
|
3
|
-
import { getAppName } from "./appConfig";
|
|
4
|
-
import { sha256 } from "./crypto";
|
|
5
|
-
import { memoryStoreOAuthCode, memoryConsumeOAuthCode, } from "../adapters/memoryAuth";
|
|
6
|
-
import { sqliteStoreOAuthCode, sqliteConsumeOAuthCode, } from "../adapters/sqliteAuth";
|
|
7
|
-
function getOAuthCodeModel() {
|
|
8
|
-
if (appConnection.models["OAuthCode"])
|
|
9
|
-
return appConnection.models["OAuthCode"];
|
|
10
|
-
const { Schema } = mongoose;
|
|
11
|
-
const schema = new Schema({
|
|
12
|
-
codeHash: { type: String, required: true, unique: true },
|
|
13
|
-
token: { type: String, required: true },
|
|
14
|
-
userId: { type: String, required: true },
|
|
15
|
-
email: { type: String },
|
|
16
|
-
refreshToken: { type: String },
|
|
17
|
-
expiresAt: { type: Date, required: true, index: { expireAfterSeconds: 0 } },
|
|
18
|
-
}, { collection: "oauth_codes" });
|
|
19
|
-
return appConnection.model("OAuthCode", schema);
|
|
20
|
-
}
|
|
21
|
-
// ---------------------------------------------------------------------------
|
|
22
|
-
// Redis helpers
|
|
23
|
-
// ---------------------------------------------------------------------------
|
|
24
|
-
/** Atomically GET+DEL a key. Uses native GETDEL (Redis >= 6.2) with a Lua fallback. */
|
|
25
|
-
async function redisGetDel(key) {
|
|
26
|
-
const redis = getRedis();
|
|
27
|
-
if (typeof redis.getdel === "function") {
|
|
28
|
-
try {
|
|
29
|
-
return await redis.getdel(key);
|
|
30
|
-
}
|
|
31
|
-
catch (err) {
|
|
32
|
-
const msg = err?.message ?? "";
|
|
33
|
-
if (!/unknown command|ERR unknown command/i.test(msg))
|
|
34
|
-
throw err;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
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);
|
|
38
|
-
return result ?? null;
|
|
39
|
-
}
|
|
40
|
-
let _store = "redis";
|
|
41
|
-
export const setOAuthCodeStore = (store) => { _store = store; };
|
|
42
|
-
const CODE_TTL = 60; // 60 seconds
|
|
43
|
-
// ---------------------------------------------------------------------------
|
|
44
|
-
// Public API
|
|
45
|
-
// ---------------------------------------------------------------------------
|
|
46
|
-
/** Store a one-time authorization code. Returns the raw code (for the redirect URL).
|
|
47
|
-
* Only the SHA-256 hash is persisted. */
|
|
48
|
-
export const storeOAuthCode = async (payload) => {
|
|
49
|
-
const bytes = new Uint8Array(32);
|
|
50
|
-
crypto.getRandomValues(bytes);
|
|
51
|
-
const code = Buffer.from(bytes).toString("base64url");
|
|
52
|
-
const hash = sha256(code);
|
|
53
|
-
if (_store === "memory") {
|
|
54
|
-
memoryStoreOAuthCode(hash, payload, CODE_TTL);
|
|
55
|
-
return code;
|
|
56
|
-
}
|
|
57
|
-
if (_store === "sqlite") {
|
|
58
|
-
sqliteStoreOAuthCode(hash, payload, CODE_TTL);
|
|
59
|
-
return code;
|
|
60
|
-
}
|
|
61
|
-
if (_store === "mongo") {
|
|
62
|
-
await getOAuthCodeModel().create({
|
|
63
|
-
codeHash: hash,
|
|
64
|
-
...payload,
|
|
65
|
-
expiresAt: new Date(Date.now() + CODE_TTL * 1000),
|
|
66
|
-
});
|
|
67
|
-
return code;
|
|
68
|
-
}
|
|
69
|
-
// Redis
|
|
70
|
-
await getRedis().set(`oauthcode:${getAppName()}:${hash}`, JSON.stringify(payload), "EX", CODE_TTL);
|
|
71
|
-
return code;
|
|
72
|
-
};
|
|
73
|
-
/** Atomically consume an authorization code — returns its payload and deletes it.
|
|
74
|
-
* Returns null if invalid, expired, or already used. */
|
|
75
|
-
export const consumeOAuthCode = async (code) => {
|
|
76
|
-
const hash = sha256(code);
|
|
77
|
-
if (_store === "memory")
|
|
78
|
-
return memoryConsumeOAuthCode(hash);
|
|
79
|
-
if (_store === "sqlite")
|
|
80
|
-
return sqliteConsumeOAuthCode(hash);
|
|
81
|
-
if (_store === "mongo") {
|
|
82
|
-
const doc = await getOAuthCodeModel()
|
|
83
|
-
.findOneAndDelete({ codeHash: hash, expiresAt: { $gt: new Date() } })
|
|
84
|
-
.lean();
|
|
85
|
-
if (!doc)
|
|
86
|
-
return null;
|
|
87
|
-
return { token: doc.token, userId: doc.userId, email: doc.email, refreshToken: doc.refreshToken };
|
|
88
|
-
}
|
|
89
|
-
// Redis
|
|
90
|
-
const key = `oauthcode:${getAppName()}:${hash}`;
|
|
91
|
-
const raw = await redisGetDel(key);
|
|
92
|
-
if (!raw)
|
|
93
|
-
return null;
|
|
94
|
-
return JSON.parse(raw);
|
|
95
|
-
};
|
package/dist/lib/pagination.d.ts
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import type { ZodType } from "zod";
|
|
3
|
-
export type { PaginationOpts, PaginatedResult } from "./groups";
|
|
4
|
-
export interface OffsetParamDefaults {
|
|
5
|
-
/** Default: 50 */
|
|
6
|
-
limit?: number;
|
|
7
|
-
/** Default: 200 */
|
|
8
|
-
maxLimit?: number;
|
|
9
|
-
/** Default: 0 */
|
|
10
|
-
offset?: number;
|
|
11
|
-
}
|
|
12
|
-
export interface ParsedOffsetParams {
|
|
13
|
-
limit: number;
|
|
14
|
-
offset: number;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Zod schema for offset pagination query params.
|
|
18
|
-
* Fields are `z.string().optional()` — matches the existing query param
|
|
19
|
-
* convention. Parse the values with `parseOffsetParams`.
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* createRoute({ ..., request: { query: offsetParams({ limit: 20 }) }, ... })
|
|
23
|
-
*/
|
|
24
|
-
export declare function offsetParams(defaults?: OffsetParamDefaults): z.ZodObject<{
|
|
25
|
-
limit: z.ZodOptional<z.ZodString>;
|
|
26
|
-
offset: z.ZodOptional<z.ZodString>;
|
|
27
|
-
}, z.core.$strip>;
|
|
28
|
-
/**
|
|
29
|
-
* Parses raw string query values into clamped integers.
|
|
30
|
-
* - NaN (non-numeric strings) falls back to defaults
|
|
31
|
-
* - limit clamped to [1, maxLimit]
|
|
32
|
-
* - offset clamped to [0, ∞)
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* const { limit, offset } = parseOffsetParams(c.req.query(), { maxLimit: 100 });
|
|
36
|
-
*/
|
|
37
|
-
export declare function parseOffsetParams(raw: {
|
|
38
|
-
limit?: string;
|
|
39
|
-
offset?: string;
|
|
40
|
-
}, defaults?: OffsetParamDefaults): ParsedOffsetParams;
|
|
41
|
-
/**
|
|
42
|
-
* Zod schema factory for paginated offset responses.
|
|
43
|
-
* Wraps `itemSchema` in `{ items, total, limit, offset }` and registers
|
|
44
|
-
* the result as a named OpenAPI component.
|
|
45
|
-
*
|
|
46
|
-
* Throws if `name` was previously registered to a different schema instance.
|
|
47
|
-
* Calling with the same `name` + `schema` pair is idempotent.
|
|
48
|
-
*
|
|
49
|
-
* @example
|
|
50
|
-
* const PaginatedUsersResponse = paginatedResponse(UserSchema, "PaginatedUsers");
|
|
51
|
-
*/
|
|
52
|
-
export declare function paginatedResponse<T extends ZodType>(itemSchema: T, name: string): z.ZodObject<{
|
|
53
|
-
items: z.ZodArray<T>;
|
|
54
|
-
total: z.ZodNumber;
|
|
55
|
-
limit: z.ZodNumber;
|
|
56
|
-
offset: z.ZodNumber;
|
|
57
|
-
}, z.core.$strip>;
|
|
58
|
-
export interface CursorParamDefaults {
|
|
59
|
-
/** Default: 50 */
|
|
60
|
-
limit?: number;
|
|
61
|
-
/** Default: 200 */
|
|
62
|
-
maxLimit?: number;
|
|
63
|
-
}
|
|
64
|
-
export interface ParsedCursorParams {
|
|
65
|
-
limit: number;
|
|
66
|
-
cursor: string | undefined;
|
|
67
|
-
}
|
|
68
|
-
export interface CursorResult<T> {
|
|
69
|
-
items: T[];
|
|
70
|
-
nextCursor: string | null;
|
|
71
|
-
hasMore: boolean;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Zod schema for cursor pagination query params.
|
|
75
|
-
* Fields are `z.string().optional()`. Parse the values with `parseCursorParams`.
|
|
76
|
-
*
|
|
77
|
-
* @example
|
|
78
|
-
* createRoute({ ..., request: { query: cursorParams() }, ... })
|
|
79
|
-
*/
|
|
80
|
-
export declare function cursorParams(defaults?: CursorParamDefaults): z.ZodObject<{
|
|
81
|
-
limit: z.ZodOptional<z.ZodString>;
|
|
82
|
-
cursor: z.ZodOptional<z.ZodString>;
|
|
83
|
-
}, z.core.$strip>;
|
|
84
|
-
/**
|
|
85
|
-
* Parses raw string query values into typed cursor params.
|
|
86
|
-
* - limit: NaN falls back to default, clamped to [1, maxLimit]
|
|
87
|
-
* - cursor: empty string normalized to `undefined`; non-empty is pass-through
|
|
88
|
-
* - When `signing.cursors: true`, verifies the cursor HMAC — invalid cursor returns null
|
|
89
|
-
*
|
|
90
|
-
* @example
|
|
91
|
-
* const { limit, cursor } = parseCursorParams(c.req.query());
|
|
92
|
-
*/
|
|
93
|
-
export declare function parseCursorParams(raw: {
|
|
94
|
-
limit?: string;
|
|
95
|
-
cursor?: string;
|
|
96
|
-
}, defaults?: CursorParamDefaults): ParsedCursorParams & {
|
|
97
|
-
invalidCursor?: true;
|
|
98
|
-
};
|
|
99
|
-
/**
|
|
100
|
-
* Sign a cursor value if `signing.cursors: true`. Otherwise returns the
|
|
101
|
-
* cursor unchanged (current behavior).
|
|
102
|
-
*/
|
|
103
|
-
export declare function maybeSignCursor(cursor: string | null): string | null;
|
|
104
|
-
/**
|
|
105
|
-
* Zod schema factory for cursor-paginated responses.
|
|
106
|
-
* Wraps `itemSchema` in `{ items, nextCursor, hasMore }` and registers
|
|
107
|
-
* the result as a named OpenAPI component.
|
|
108
|
-
*
|
|
109
|
-
* Throws if `name` was previously registered to a different schema instance.
|
|
110
|
-
* Calling with the same `name` + `schema` pair is idempotent.
|
|
111
|
-
*
|
|
112
|
-
* @example
|
|
113
|
-
* const PostsPage = cursorResponse(PostSchema, "PostsPage");
|
|
114
|
-
*/
|
|
115
|
-
export declare function cursorResponse<T extends ZodType>(itemSchema: T, name: string): z.ZodObject<{
|
|
116
|
-
items: z.ZodArray<T>;
|
|
117
|
-
nextCursor: z.ZodNullable<z.ZodString>;
|
|
118
|
-
hasMore: z.ZodBoolean;
|
|
119
|
-
}, z.core.$strip>;
|
package/dist/lib/pagination.js
DELETED
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { registerSchema } from "./createRoute";
|
|
3
|
-
import { getSigningConfig, getSigningSecret } from "./appConfig";
|
|
4
|
-
import { signCursor, verifyCursor } from "./signing";
|
|
5
|
-
const _registered = new Map();
|
|
6
|
-
function guardedRegister(name, itemSchema, buildWrapper) {
|
|
7
|
-
const existing = _registered.get(name);
|
|
8
|
-
if (existing !== undefined) {
|
|
9
|
-
if (existing.itemSchema !== itemSchema) {
|
|
10
|
-
throw new Error(`Pagination schema name "${name}" is already registered to a different schema`);
|
|
11
|
-
}
|
|
12
|
-
// Same item schema → idempotent, return the cached wrapper
|
|
13
|
-
return existing.wrapper;
|
|
14
|
-
}
|
|
15
|
-
const wrapper = buildWrapper();
|
|
16
|
-
_registered.set(name, { itemSchema, wrapper });
|
|
17
|
-
registerSchema(name, wrapper);
|
|
18
|
-
return wrapper;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Zod schema for offset pagination query params.
|
|
22
|
-
* Fields are `z.string().optional()` — matches the existing query param
|
|
23
|
-
* convention. Parse the values with `parseOffsetParams`.
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* createRoute({ ..., request: { query: offsetParams({ limit: 20 }) }, ... })
|
|
27
|
-
*/
|
|
28
|
-
export function offsetParams(defaults) {
|
|
29
|
-
const defaultLimit = defaults?.limit ?? 50;
|
|
30
|
-
const defaultOffset = defaults?.offset ?? 0;
|
|
31
|
-
const maxLimit = defaults?.maxLimit ?? 200;
|
|
32
|
-
return z.object({
|
|
33
|
-
limit: z
|
|
34
|
-
.string()
|
|
35
|
-
.optional()
|
|
36
|
-
.describe(`Number of items to return (1–${maxLimit}, default ${defaultLimit})`),
|
|
37
|
-
offset: z
|
|
38
|
-
.string()
|
|
39
|
-
.optional()
|
|
40
|
-
.describe(`Number of items to skip (default ${defaultOffset})`),
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Parses raw string query values into clamped integers.
|
|
45
|
-
* - NaN (non-numeric strings) falls back to defaults
|
|
46
|
-
* - limit clamped to [1, maxLimit]
|
|
47
|
-
* - offset clamped to [0, ∞)
|
|
48
|
-
*
|
|
49
|
-
* @example
|
|
50
|
-
* const { limit, offset } = parseOffsetParams(c.req.query(), { maxLimit: 100 });
|
|
51
|
-
*/
|
|
52
|
-
export function parseOffsetParams(raw, defaults) {
|
|
53
|
-
const defaultLimit = defaults?.limit ?? 50;
|
|
54
|
-
const maxLimit = defaults?.maxLimit ?? 200;
|
|
55
|
-
const defaultOffset = defaults?.offset ?? 0;
|
|
56
|
-
const rawLimit = parseInt(raw.limit ?? "", 10);
|
|
57
|
-
const rawOffset = parseInt(raw.offset ?? "", 10);
|
|
58
|
-
const limit = isNaN(rawLimit)
|
|
59
|
-
? defaultLimit
|
|
60
|
-
: Math.min(Math.max(rawLimit, 1), maxLimit);
|
|
61
|
-
const offset = isNaN(rawOffset) ? defaultOffset : Math.max(rawOffset, 0);
|
|
62
|
-
return { limit, offset };
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Zod schema factory for paginated offset responses.
|
|
66
|
-
* Wraps `itemSchema` in `{ items, total, limit, offset }` and registers
|
|
67
|
-
* the result as a named OpenAPI component.
|
|
68
|
-
*
|
|
69
|
-
* Throws if `name` was previously registered to a different schema instance.
|
|
70
|
-
* Calling with the same `name` + `schema` pair is idempotent.
|
|
71
|
-
*
|
|
72
|
-
* @example
|
|
73
|
-
* const PaginatedUsersResponse = paginatedResponse(UserSchema, "PaginatedUsers");
|
|
74
|
-
*/
|
|
75
|
-
export function paginatedResponse(itemSchema, name) {
|
|
76
|
-
return guardedRegister(name, itemSchema, () => z.object({
|
|
77
|
-
items: z.array(itemSchema),
|
|
78
|
-
total: z.number().int().nonnegative(),
|
|
79
|
-
limit: z.number().int().positive(),
|
|
80
|
-
offset: z.number().int().nonnegative(),
|
|
81
|
-
}));
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Zod schema for cursor pagination query params.
|
|
85
|
-
* Fields are `z.string().optional()`. Parse the values with `parseCursorParams`.
|
|
86
|
-
*
|
|
87
|
-
* @example
|
|
88
|
-
* createRoute({ ..., request: { query: cursorParams() }, ... })
|
|
89
|
-
*/
|
|
90
|
-
export function cursorParams(defaults) {
|
|
91
|
-
const defaultLimit = defaults?.limit ?? 50;
|
|
92
|
-
const maxLimit = defaults?.maxLimit ?? 200;
|
|
93
|
-
return z.object({
|
|
94
|
-
limit: z
|
|
95
|
-
.string()
|
|
96
|
-
.optional()
|
|
97
|
-
.describe(`Number of items to return (1–${maxLimit}, default ${defaultLimit})`),
|
|
98
|
-
cursor: z
|
|
99
|
-
.string()
|
|
100
|
-
.optional()
|
|
101
|
-
.describe("Opaque cursor from a previous response's nextCursor field"),
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Parses raw string query values into typed cursor params.
|
|
106
|
-
* - limit: NaN falls back to default, clamped to [1, maxLimit]
|
|
107
|
-
* - cursor: empty string normalized to `undefined`; non-empty is pass-through
|
|
108
|
-
* - When `signing.cursors: true`, verifies the cursor HMAC — invalid cursor returns null
|
|
109
|
-
*
|
|
110
|
-
* @example
|
|
111
|
-
* const { limit, cursor } = parseCursorParams(c.req.query());
|
|
112
|
-
*/
|
|
113
|
-
export function parseCursorParams(raw, defaults) {
|
|
114
|
-
const defaultLimit = defaults?.limit ?? 50;
|
|
115
|
-
const maxLimit = defaults?.maxLimit ?? 200;
|
|
116
|
-
const rawLimit = parseInt(raw.limit ?? "", 10);
|
|
117
|
-
const limit = isNaN(rawLimit)
|
|
118
|
-
? defaultLimit
|
|
119
|
-
: Math.min(Math.max(rawLimit, 1), maxLimit);
|
|
120
|
-
if (!raw.cursor)
|
|
121
|
-
return { limit, cursor: undefined };
|
|
122
|
-
const cfg = getSigningConfig();
|
|
123
|
-
if (cfg?.cursors) {
|
|
124
|
-
const secret = getSigningSecret();
|
|
125
|
-
if (secret) {
|
|
126
|
-
const verified = verifyCursor(raw.cursor, secret);
|
|
127
|
-
if (verified === null)
|
|
128
|
-
return { limit, cursor: undefined, invalidCursor: true };
|
|
129
|
-
return { limit, cursor: verified };
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return { limit, cursor: raw.cursor };
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Sign a cursor value if `signing.cursors: true`. Otherwise returns the
|
|
136
|
-
* cursor unchanged (current behavior).
|
|
137
|
-
*/
|
|
138
|
-
export function maybeSignCursor(cursor) {
|
|
139
|
-
if (!cursor)
|
|
140
|
-
return cursor;
|
|
141
|
-
const cfg = getSigningConfig();
|
|
142
|
-
if (cfg?.cursors) {
|
|
143
|
-
const secret = getSigningSecret();
|
|
144
|
-
if (secret)
|
|
145
|
-
return signCursor(cursor, secret);
|
|
146
|
-
}
|
|
147
|
-
return cursor;
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Zod schema factory for cursor-paginated responses.
|
|
151
|
-
* Wraps `itemSchema` in `{ items, nextCursor, hasMore }` and registers
|
|
152
|
-
* the result as a named OpenAPI component.
|
|
153
|
-
*
|
|
154
|
-
* Throws if `name` was previously registered to a different schema instance.
|
|
155
|
-
* Calling with the same `name` + `schema` pair is idempotent.
|
|
156
|
-
*
|
|
157
|
-
* @example
|
|
158
|
-
* const PostsPage = cursorResponse(PostSchema, "PostsPage");
|
|
159
|
-
*/
|
|
160
|
-
export function cursorResponse(itemSchema, name) {
|
|
161
|
-
return guardedRegister(name, itemSchema, () => z.object({
|
|
162
|
-
items: z.array(itemSchema),
|
|
163
|
-
nextCursor: z.string().nullable(),
|
|
164
|
-
hasMore: z.boolean(),
|
|
165
|
-
}));
|
|
166
|
-
}
|