@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/oauthCode.js
DELETED
|
@@ -1,90 +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
|
-
let _store = "redis";
|
|
22
|
-
export const setOAuthCodeStore = (store) => { _store = store; };
|
|
23
|
-
const CODE_TTL = 60; // 60 seconds
|
|
24
|
-
// ---------------------------------------------------------------------------
|
|
25
|
-
// Public API
|
|
26
|
-
// ---------------------------------------------------------------------------
|
|
27
|
-
/** Store a one-time authorization code. Returns the raw code (for the redirect URL).
|
|
28
|
-
* Only the SHA-256 hash is persisted. */
|
|
29
|
-
export const storeOAuthCode = async (payload) => {
|
|
30
|
-
const code = crypto.randomUUID();
|
|
31
|
-
const hash = sha256(code);
|
|
32
|
-
if (_store === "memory") {
|
|
33
|
-
memoryStoreOAuthCode(hash, payload, CODE_TTL);
|
|
34
|
-
return code;
|
|
35
|
-
}
|
|
36
|
-
if (_store === "sqlite") {
|
|
37
|
-
sqliteStoreOAuthCode(hash, payload, CODE_TTL);
|
|
38
|
-
return code;
|
|
39
|
-
}
|
|
40
|
-
if (_store === "mongo") {
|
|
41
|
-
await getOAuthCodeModel().create({
|
|
42
|
-
codeHash: hash,
|
|
43
|
-
...payload,
|
|
44
|
-
expiresAt: new Date(Date.now() + CODE_TTL * 1000),
|
|
45
|
-
});
|
|
46
|
-
return code;
|
|
47
|
-
}
|
|
48
|
-
// Redis
|
|
49
|
-
await getRedis().set(`oauthcode:${getAppName()}:${hash}`, JSON.stringify(payload), "EX", CODE_TTL);
|
|
50
|
-
return code;
|
|
51
|
-
};
|
|
52
|
-
/** Atomically consume an authorization code — returns its payload and deletes it.
|
|
53
|
-
* Returns null if invalid, expired, or already used. */
|
|
54
|
-
export const consumeOAuthCode = async (code) => {
|
|
55
|
-
const hash = sha256(code);
|
|
56
|
-
if (_store === "memory")
|
|
57
|
-
return memoryConsumeOAuthCode(hash);
|
|
58
|
-
if (_store === "sqlite")
|
|
59
|
-
return sqliteConsumeOAuthCode(hash);
|
|
60
|
-
if (_store === "mongo") {
|
|
61
|
-
const doc = await getOAuthCodeModel()
|
|
62
|
-
.findOneAndDelete({ codeHash: hash, expiresAt: { $gt: new Date() } })
|
|
63
|
-
.lean();
|
|
64
|
-
if (!doc)
|
|
65
|
-
return null;
|
|
66
|
-
return { token: doc.token, userId: doc.userId, email: doc.email, refreshToken: doc.refreshToken };
|
|
67
|
-
}
|
|
68
|
-
// Redis
|
|
69
|
-
const key = `oauthcode:${getAppName()}:${hash}`;
|
|
70
|
-
const redis = getRedis();
|
|
71
|
-
let raw = null;
|
|
72
|
-
if (typeof redis.getdel === "function") {
|
|
73
|
-
try {
|
|
74
|
-
raw = await redis.getdel(key);
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
raw = await redis.get(key);
|
|
78
|
-
if (raw)
|
|
79
|
-
await redis.del(key);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
raw = await redis.get(key);
|
|
84
|
-
if (raw)
|
|
85
|
-
await redis.del(key);
|
|
86
|
-
}
|
|
87
|
-
if (!raw)
|
|
88
|
-
return null;
|
|
89
|
-
return JSON.parse(raw);
|
|
90
|
-
};
|
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
|
-
}
|
package/dist/lib/queue.d.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { Queue as QueueType, Worker as WorkerType, Processor, QueueOptions, WorkerOptions, Job } from "bullmq";
|
|
2
|
-
export declare const createQueue: <T = unknown, R = unknown>(name: string, options?: Omit<QueueOptions, "connection">) => QueueType<T, R>;
|
|
3
|
-
export declare const createWorker: <T = unknown, R = unknown>(name: string, processor: Processor<T, R>, options?: Omit<WorkerOptions, "connection">) => WorkerType<T, R>;
|
|
4
|
-
export declare const getRegisteredCronNames: () => ReadonlySet<string>;
|
|
5
|
-
export interface CronSchedule {
|
|
6
|
-
/** Cron expression. Mutually exclusive with `every`. */
|
|
7
|
-
cron?: string;
|
|
8
|
-
/** Interval in milliseconds. Mutually exclusive with `cron`. */
|
|
9
|
-
every?: number;
|
|
10
|
-
/** Timezone for cron expressions. */
|
|
11
|
-
timezone?: string;
|
|
12
|
-
}
|
|
13
|
-
export declare const createCronWorker: <T = void, R = unknown>(name: string, processor: Processor<T, R>, schedule: CronSchedule, options?: Omit<WorkerOptions, "connection">) => {
|
|
14
|
-
worker: WorkerType<T, R>;
|
|
15
|
-
queue: QueueType<T, R>;
|
|
16
|
-
};
|
|
17
|
-
/**
|
|
18
|
-
* Remove job schedulers that are no longer registered.
|
|
19
|
-
* Called automatically after worker discovery in createServer.
|
|
20
|
-
* Can also be called manually for workers managed outside workersDir.
|
|
21
|
-
*/
|
|
22
|
-
export declare const cleanupStaleSchedulers: (activeNames: string[]) => Promise<void>;
|
|
23
|
-
export interface DLQOptions<T = unknown> {
|
|
24
|
-
/** Max jobs to keep in the DLQ. Default: 1000. */
|
|
25
|
-
maxSize?: number;
|
|
26
|
-
/** Called when a job is moved to the DLQ. */
|
|
27
|
-
onDeadLetter?: (job: Job<T>, error: Error) => Promise<void>;
|
|
28
|
-
/** Auto-retry delay in ms. No auto-retry by default. */
|
|
29
|
-
retryAfter?: number;
|
|
30
|
-
/** Preserve original job options on retry. Default: true. */
|
|
31
|
-
preserveJobOptions?: boolean;
|
|
32
|
-
}
|
|
33
|
-
export declare const createDLQHandler: <T = unknown>(sourceWorker: WorkerType<T>, sourceQueueName: string, options?: DLQOptions<T>) => {
|
|
34
|
-
dlqQueue: QueueType<T>;
|
|
35
|
-
retryJob: (jobId: string) => Promise<void>;
|
|
36
|
-
};
|
|
37
|
-
export type { Job };
|
package/dist/lib/queue.js
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { getRedisConnectionOptions } from "./redis";
|
|
2
|
-
function requireBullMQ() {
|
|
3
|
-
try {
|
|
4
|
-
// Bun supports require() in ESM; this defers the import to call time
|
|
5
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
6
|
-
return require("bullmq");
|
|
7
|
-
}
|
|
8
|
-
catch {
|
|
9
|
-
throw new Error("bullmq is not installed. Run: bun add bullmq");
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
export const createQueue = (name, options) => {
|
|
13
|
-
const { Queue } = requireBullMQ();
|
|
14
|
-
return new Queue(name, { connection: getRedisConnectionOptions(), ...options });
|
|
15
|
-
};
|
|
16
|
-
export const createWorker = (name, processor, options) => {
|
|
17
|
-
const { Worker } = requireBullMQ();
|
|
18
|
-
return new Worker(name, processor, { connection: getRedisConnectionOptions(), ...options });
|
|
19
|
-
};
|
|
20
|
-
// ---------------------------------------------------------------------------
|
|
21
|
-
// Cron worker
|
|
22
|
-
// ---------------------------------------------------------------------------
|
|
23
|
-
/** Tracks all registered cron scheduler names for ghost job cleanup. */
|
|
24
|
-
const _registeredCronNames = new Set();
|
|
25
|
-
export const getRegisteredCronNames = () => _registeredCronNames;
|
|
26
|
-
export const createCronWorker = (name, processor, schedule, options) => {
|
|
27
|
-
const { Queue, Worker } = requireBullMQ();
|
|
28
|
-
const connection = getRedisConnectionOptions();
|
|
29
|
-
const queue = new Queue(name, { connection });
|
|
30
|
-
const worker = new Worker(name, processor, { connection, ...options });
|
|
31
|
-
_registeredCronNames.add(name);
|
|
32
|
-
// Use upsertJobScheduler — idempotent across restarts
|
|
33
|
-
if (schedule.cron) {
|
|
34
|
-
queue.upsertJobScheduler(name, { pattern: schedule.cron, tz: schedule.timezone }, { name });
|
|
35
|
-
}
|
|
36
|
-
else if (schedule.every) {
|
|
37
|
-
queue.upsertJobScheduler(name, { every: schedule.every }, { name });
|
|
38
|
-
}
|
|
39
|
-
return { worker, queue };
|
|
40
|
-
};
|
|
41
|
-
/**
|
|
42
|
-
* Remove job schedulers that are no longer registered.
|
|
43
|
-
* Called automatically after worker discovery in createServer.
|
|
44
|
-
* Can also be called manually for workers managed outside workersDir.
|
|
45
|
-
*/
|
|
46
|
-
export const cleanupStaleSchedulers = async (activeNames) => {
|
|
47
|
-
const { Queue } = requireBullMQ();
|
|
48
|
-
const connection = getRedisConnectionOptions();
|
|
49
|
-
const activeSet = new Set(activeNames);
|
|
50
|
-
// Check all known queue names for stale schedulers
|
|
51
|
-
for (const name of _registeredCronNames) {
|
|
52
|
-
if (activeSet.has(name))
|
|
53
|
-
continue;
|
|
54
|
-
const queue = new Queue(name, { connection });
|
|
55
|
-
try {
|
|
56
|
-
await queue.removeJobScheduler(name);
|
|
57
|
-
}
|
|
58
|
-
catch { /* scheduler may not exist */ }
|
|
59
|
-
await queue.close();
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
export const createDLQHandler = (sourceWorker, sourceQueueName, options) => {
|
|
63
|
-
const { Queue } = requireBullMQ();
|
|
64
|
-
const connection = getRedisConnectionOptions();
|
|
65
|
-
const dlqName = `${sourceQueueName}-dlq`;
|
|
66
|
-
const dlqQueue = new Queue(dlqName, { connection });
|
|
67
|
-
const maxSize = options?.maxSize ?? 1000;
|
|
68
|
-
const preserveJobOptions = options?.preserveJobOptions ?? true;
|
|
69
|
-
sourceWorker.on("failed", async (job, error) => {
|
|
70
|
-
if (!job)
|
|
71
|
-
return;
|
|
72
|
-
// Only move to DLQ when all attempts are exhausted
|
|
73
|
-
if (job.attemptsMade < (job.opts?.attempts ?? 1))
|
|
74
|
-
return;
|
|
75
|
-
await dlqQueue.add(`dlq:${job.name}`, job.data, {
|
|
76
|
-
...(preserveJobOptions ? {
|
|
77
|
-
delay: job.opts?.delay,
|
|
78
|
-
priority: job.opts?.priority,
|
|
79
|
-
attempts: job.opts?.attempts,
|
|
80
|
-
backoff: job.opts?.backoff,
|
|
81
|
-
} : {}),
|
|
82
|
-
jobId: `dlq:${job.id}`,
|
|
83
|
-
});
|
|
84
|
-
if (options?.onDeadLetter) {
|
|
85
|
-
try {
|
|
86
|
-
await options.onDeadLetter(job, error);
|
|
87
|
-
}
|
|
88
|
-
catch (e) {
|
|
89
|
-
console.error(`[dlq:${sourceQueueName}] onDeadLetter callback error:`, e);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
// Trim DLQ to maxSize
|
|
93
|
-
const waitingCount = await dlqQueue.getWaitingCount();
|
|
94
|
-
if (waitingCount > maxSize) {
|
|
95
|
-
const excess = waitingCount - maxSize;
|
|
96
|
-
const jobs = await dlqQueue.getWaiting(0, excess - 1);
|
|
97
|
-
for (const j of jobs) {
|
|
98
|
-
await j.remove();
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
const sourceQueue = new Queue(sourceQueueName, { connection });
|
|
103
|
-
const retryJob = async (jobId) => {
|
|
104
|
-
const job = await dlqQueue.getJob(jobId);
|
|
105
|
-
if (!job)
|
|
106
|
-
throw new Error(`Job ${jobId} not found in DLQ`);
|
|
107
|
-
const opts = preserveJobOptions ? {
|
|
108
|
-
delay: job.opts?.delay,
|
|
109
|
-
priority: job.opts?.priority,
|
|
110
|
-
attempts: job.opts?.attempts,
|
|
111
|
-
backoff: job.opts?.backoff,
|
|
112
|
-
} : {};
|
|
113
|
-
await sourceQueue.add(job.name, job.data, opts);
|
|
114
|
-
await job.remove();
|
|
115
|
-
};
|
|
116
|
-
return { dlqQueue, retryJob };
|
|
117
|
-
};
|
package/dist/lib/redis.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { default as RedisClass, RedisOptions } from "ioredis";
|
|
2
|
-
export declare const getRedisConnectionOptions: () => RedisOptions;
|
|
3
|
-
export declare const connectRedis: () => Promise<void>;
|
|
4
|
-
/**
|
|
5
|
-
* Gracefully close the Redis connection.
|
|
6
|
-
* Useful for one-off scripts that need a clean exit.
|
|
7
|
-
*/
|
|
8
|
-
export declare const disconnectRedis: () => Promise<void>;
|
|
9
|
-
export declare const getRedis: () => RedisClass;
|
package/dist/lib/redis.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { log } from "./logger";
|
|
2
|
-
const isProd = process.env.NODE_ENV === "production";
|
|
3
|
-
function requireIoredis() {
|
|
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("ioredis");
|
|
8
|
-
return mod.default ?? mod;
|
|
9
|
-
}
|
|
10
|
-
catch {
|
|
11
|
-
throw new Error("ioredis is not installed. Run: bun add ioredis");
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
export const getRedisConnectionOptions = () => {
|
|
15
|
-
const host_port = isProd ? process.env.REDIS_HOST_PROD : process.env.REDIS_HOST_DEV;
|
|
16
|
-
if (!host_port)
|
|
17
|
-
throw new Error(`Missing env var: ${isProd ? "REDIS_HOST_PROD" : "REDIS_HOST_DEV"}`);
|
|
18
|
-
const [host, port] = host_port.split(":");
|
|
19
|
-
if (!host || !port)
|
|
20
|
-
throw new Error(`Invalid Redis host format — expected "host:port", got "${host_port}"`);
|
|
21
|
-
const username = isProd ? process.env.REDIS_USER_PROD : process.env.REDIS_USER_DEV;
|
|
22
|
-
const password = isProd ? process.env.REDIS_PW_PROD : process.env.REDIS_PW_DEV;
|
|
23
|
-
return {
|
|
24
|
-
host,
|
|
25
|
-
port: Number(port),
|
|
26
|
-
...(username && { username }),
|
|
27
|
-
...(password && { password }),
|
|
28
|
-
};
|
|
29
|
-
};
|
|
30
|
-
let client = null;
|
|
31
|
-
export const connectRedis = () => {
|
|
32
|
-
if (client)
|
|
33
|
-
return Promise.resolve();
|
|
34
|
-
const Redis = requireIoredis();
|
|
35
|
-
client = new Redis(getRedisConnectionOptions());
|
|
36
|
-
client.on("error", (err) => log(`[redis] error: ${err.message}`));
|
|
37
|
-
return new Promise((resolve, reject) => {
|
|
38
|
-
client.once("ready", () => {
|
|
39
|
-
const opts = getRedisConnectionOptions();
|
|
40
|
-
log(`[redis] connected to ${opts.host}:${opts.port} as ${opts.username || "default user"}`);
|
|
41
|
-
resolve();
|
|
42
|
-
});
|
|
43
|
-
client.once("error", reject);
|
|
44
|
-
});
|
|
45
|
-
};
|
|
46
|
-
/**
|
|
47
|
-
* Gracefully close the Redis connection.
|
|
48
|
-
* Useful for one-off scripts that need a clean exit.
|
|
49
|
-
*/
|
|
50
|
-
export const disconnectRedis = async () => {
|
|
51
|
-
if (!client)
|
|
52
|
-
return;
|
|
53
|
-
await client.quit();
|
|
54
|
-
client = null;
|
|
55
|
-
log("[redis] disconnected");
|
|
56
|
-
};
|
|
57
|
-
export const getRedis = () => {
|
|
58
|
-
if (!client)
|
|
59
|
-
throw new Error("Redis not connected — call connectRedis() first");
|
|
60
|
-
return client;
|
|
61
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
type ResetStore = "redis" | "mongo" | "sqlite" | "memory";
|
|
2
|
-
export declare const setPasswordResetStore: (store: ResetStore) => void;
|
|
3
|
-
/** Create a reset token. Returns the raw token (to embed in the email link).
|
|
4
|
-
* Only the SHA-256 hash is persisted in the store. */
|
|
5
|
-
export declare const createResetToken: (userId: string, email: string) => Promise<string>;
|
|
6
|
-
/** Atomically consume a reset token — returns its payload and deletes it in one operation.
|
|
7
|
-
* Returns null if the token is invalid, expired, or already used. */
|
|
8
|
-
export declare const consumeResetToken: (token: string) => Promise<{
|
|
9
|
-
userId: string;
|
|
10
|
-
email: string;
|
|
11
|
-
} | null>;
|
|
12
|
-
export {};
|