@effect-auth/core 0.1.0-alpha.15 → 0.1.0-alpha.18
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/LICENSE +21 -0
- package/README.md +332 -131
- package/dist/AbuseProtection.d.ts +100 -0
- package/dist/AbuseProtection.d.ts.map +1 -0
- package/dist/AbuseProtection.js +71 -0
- package/dist/AbuseProtection.js.map +1 -0
- package/dist/AccessGrant.d.ts +344 -0
- package/dist/AccessGrant.d.ts.map +1 -0
- package/dist/AccessGrant.js +687 -0
- package/dist/AccessGrant.js.map +1 -0
- package/dist/ApiKey.d.ts +2 -14
- package/dist/ApiKey.d.ts.map +1 -1
- package/dist/ApiKey.js +36 -27
- package/dist/ApiKey.js.map +1 -1
- package/dist/Assurance.d.ts +415 -0
- package/dist/Assurance.d.ts.map +1 -0
- package/dist/Assurance.js +764 -0
- package/dist/Assurance.js.map +1 -0
- package/dist/AtomicPlanExecutor.d.ts +28 -0
- package/dist/AtomicPlanExecutor.d.ts.map +1 -0
- package/dist/AtomicPlanExecutor.js +5 -0
- package/dist/AtomicPlanExecutor.js.map +1 -0
- package/dist/AuditLog.d.ts +2314 -52
- package/dist/AuditLog.d.ts.map +1 -1
- package/dist/AuditLog.js +511 -33
- package/dist/AuditLog.js.map +1 -1
- package/dist/AuthConfig.d.ts.map +1 -1
- package/dist/AuthConfig.js.map +1 -1
- package/dist/AuthFlow.d.ts +326 -220
- package/dist/AuthFlow.d.ts.map +1 -1
- package/dist/AuthFlow.js +611 -263
- package/dist/AuthFlow.js.map +1 -1
- package/dist/AuthKernel.d.ts +1 -1
- package/dist/AuthRateLimit.d.ts +96 -0
- package/dist/AuthRateLimit.d.ts.map +1 -0
- package/dist/AuthRateLimit.js +212 -0
- package/dist/AuthRateLimit.js.map +1 -0
- package/dist/Challenge.d.ts +0 -3
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +1 -4
- package/dist/Challenge.js.map +1 -1
- package/dist/Client.d.ts +205 -10
- package/dist/Client.d.ts.map +1 -1
- package/dist/Client.js +397 -16
- package/dist/Client.js.map +1 -1
- package/dist/CloudflareTurnstile.d.ts +28 -0
- package/dist/CloudflareTurnstile.d.ts.map +1 -0
- package/dist/CloudflareTurnstile.js +205 -0
- package/dist/CloudflareTurnstile.js.map +1 -0
- package/dist/Crypto.d.ts +0 -3
- package/dist/Crypto.d.ts.map +1 -1
- package/dist/Crypto.js +5 -7
- package/dist/Crypto.js.map +1 -1
- package/dist/DelegatedAccessStorageMigrations.d.ts +7 -0
- package/dist/DelegatedAccessStorageMigrations.d.ts.map +1 -0
- package/dist/DelegatedAccessStorageMigrations.js +159 -0
- package/dist/DelegatedAccessStorageMigrations.js.map +1 -0
- package/dist/DisposableEmailDomains.d.ts +19 -0
- package/dist/DisposableEmailDomains.d.ts.map +1 -0
- package/dist/DisposableEmailDomains.js +85 -0
- package/dist/DisposableEmailDomains.js.map +1 -0
- package/dist/DomainVerification.d.ts +0 -9
- package/dist/DomainVerification.d.ts.map +1 -1
- package/dist/DomainVerification.js +36 -22
- package/dist/DomainVerification.js.map +1 -1
- package/dist/DrizzleBunSqliteStorage.d.ts +18 -0
- package/dist/DrizzleBunSqliteStorage.d.ts.map +1 -0
- package/dist/DrizzleBunSqliteStorage.js +11 -0
- package/dist/DrizzleBunSqliteStorage.js.map +1 -0
- package/dist/DrizzleD1SqliteStorage.d.ts +28 -0
- package/dist/DrizzleD1SqliteStorage.d.ts.map +1 -0
- package/dist/DrizzleD1SqliteStorage.js +10 -0
- package/dist/DrizzleD1SqliteStorage.js.map +1 -0
- package/dist/DrizzleDurableObjectSqliteStorage.d.ts +19 -0
- package/dist/DrizzleDurableObjectSqliteStorage.d.ts.map +1 -0
- package/dist/DrizzleDurableObjectSqliteStorage.js +14 -0
- package/dist/DrizzleDurableObjectSqliteStorage.js.map +1 -0
- package/dist/DrizzleEffectSqliteStorage.d.ts +31 -0
- package/dist/DrizzleEffectSqliteStorage.d.ts.map +1 -0
- package/dist/DrizzleEffectSqliteStorage.js +108 -0
- package/dist/DrizzleEffectSqliteStorage.js.map +1 -0
- package/dist/DrizzleNodeSqliteStorage.d.ts +18 -0
- package/dist/DrizzleNodeSqliteStorage.d.ts.map +1 -0
- package/dist/DrizzleNodeSqliteStorage.js +11 -0
- package/dist/DrizzleNodeSqliteStorage.js.map +1 -0
- package/dist/DrizzleWasmSqliteStorage.d.ts +23 -0
- package/dist/DrizzleWasmSqliteStorage.d.ts.map +1 -0
- package/dist/DrizzleWasmSqliteStorage.js +15 -0
- package/dist/DrizzleWasmSqliteStorage.js.map +1 -0
- package/dist/EffectQbPostgresDelegatedAccessStorage.d.ts +34 -0
- package/dist/EffectQbPostgresDelegatedAccessStorage.d.ts.map +1 -0
- package/dist/EffectQbPostgresDelegatedAccessStorage.js +499 -0
- package/dist/EffectQbPostgresDelegatedAccessStorage.js.map +1 -0
- package/dist/EffectQbPostgresStorage.d.ts +171 -0
- package/dist/EffectQbPostgresStorage.d.ts.map +1 -0
- package/dist/EffectQbPostgresStorage.js +4280 -0
- package/dist/EffectQbPostgresStorage.js.map +1 -0
- package/dist/EffectQbSqliteDelegatedAccessStorage.d.ts +112 -0
- package/dist/EffectQbSqliteDelegatedAccessStorage.d.ts.map +1 -0
- package/dist/EffectQbSqliteDelegatedAccessStorage.js +602 -0
- package/dist/EffectQbSqliteDelegatedAccessStorage.js.map +1 -0
- package/dist/EffectQbSqliteStorage.d.ts +184 -27
- package/dist/EffectQbSqliteStorage.d.ts.map +1 -1
- package/dist/EffectQbSqliteStorage.js +1729 -135
- package/dist/EffectQbSqliteStorage.js.map +1 -1
- package/dist/EmailAuth.d.ts +65 -0
- package/dist/EmailAuth.d.ts.map +1 -0
- package/dist/EmailAuth.js +171 -0
- package/dist/EmailAuth.js.map +1 -0
- package/dist/EmailIdentityAuth.d.ts +30 -0
- package/dist/EmailIdentityAuth.d.ts.map +1 -0
- package/dist/EmailIdentityAuth.js +142 -0
- package/dist/EmailIdentityAuth.js.map +1 -0
- package/dist/EmailOtp.d.ts +10 -11
- package/dist/EmailOtp.d.ts.map +1 -1
- package/dist/EmailOtp.js +44 -81
- package/dist/EmailOtp.js.map +1 -1
- package/dist/EmailRisk.d.ts +48 -0
- package/dist/EmailRisk.d.ts.map +1 -0
- package/dist/EmailRisk.js +33 -0
- package/dist/EmailRisk.js.map +1 -0
- package/dist/EmailVerification.d.ts +10 -16
- package/dist/EmailVerification.d.ts.map +1 -1
- package/dist/EmailVerification.js +85 -42
- package/dist/EmailVerification.js.map +1 -1
- package/dist/Guard.d.ts +11 -0
- package/dist/Guard.d.ts.map +1 -0
- package/dist/Guard.js +11 -0
- package/dist/Guard.js.map +1 -0
- package/dist/HibpPwnedPasswords.d.ts +56 -0
- package/dist/HibpPwnedPasswords.d.ts.map +1 -0
- package/dist/HibpPwnedPasswords.js +232 -0
- package/dist/HibpPwnedPasswords.js.map +1 -0
- package/dist/HttpApi/AdminPermissionDefinition.d.ts +4 -0
- package/dist/HttpApi/AdminPermissionDefinition.d.ts.map +1 -0
- package/dist/HttpApi/AdminPermissionDefinition.js +4 -0
- package/dist/HttpApi/AdminPermissionDefinition.js.map +1 -0
- package/dist/HttpApi/AdminSecurityTimeline.d.ts +4 -0
- package/dist/HttpApi/AdminSecurityTimeline.d.ts.map +1 -0
- package/dist/HttpApi/AdminSecurityTimeline.js +4 -0
- package/dist/HttpApi/AdminSecurityTimeline.js.map +1 -0
- package/dist/HttpApi/AdminSession.d.ts +4 -0
- package/dist/HttpApi/AdminSession.d.ts.map +1 -0
- package/dist/HttpApi/AdminSession.js +4 -0
- package/dist/HttpApi/AdminSession.js.map +1 -0
- package/dist/HttpApi/AdminTrustedDevice.d.ts +4 -0
- package/dist/HttpApi/AdminTrustedDevice.d.ts.map +1 -0
- package/dist/HttpApi/AdminTrustedDevice.js +4 -0
- package/dist/HttpApi/AdminTrustedDevice.js.map +1 -0
- package/dist/HttpApi/Api.d.ts +1172 -1172
- package/dist/HttpApi/Api.d.ts.map +1 -1
- package/dist/HttpApi/Api.js +2160 -896
- package/dist/HttpApi/Api.js.map +1 -1
- package/dist/HttpApi/ApiKey.d.ts +4 -0
- package/dist/HttpApi/ApiKey.d.ts.map +1 -0
- package/dist/HttpApi/ApiKey.js +4 -0
- package/dist/HttpApi/ApiKey.js.map +1 -0
- package/dist/HttpApi/Audit.d.ts +6 -0
- package/dist/HttpApi/Audit.d.ts.map +1 -0
- package/dist/HttpApi/Audit.js +10 -0
- package/dist/HttpApi/Audit.js.map +1 -0
- package/dist/HttpApi/ClientApi.d.ts +917 -0
- package/dist/HttpApi/ClientApi.d.ts.map +1 -0
- package/dist/HttpApi/ClientApi.js +101 -0
- package/dist/HttpApi/ClientApi.js.map +1 -0
- package/dist/HttpApi/EmailAuth.d.ts +6 -0
- package/dist/HttpApi/EmailAuth.d.ts.map +1 -0
- package/dist/HttpApi/EmailAuth.js +6 -0
- package/dist/HttpApi/EmailAuth.js.map +1 -0
- package/dist/HttpApi/EmailGuards.d.ts +115 -0
- package/dist/HttpApi/EmailGuards.d.ts.map +1 -0
- package/dist/HttpApi/EmailGuards.js +191 -0
- package/dist/HttpApi/EmailGuards.js.map +1 -0
- package/dist/HttpApi/EmailOtp.d.ts +6 -0
- package/dist/HttpApi/EmailOtp.d.ts.map +1 -0
- package/dist/HttpApi/EmailOtp.js +6 -0
- package/dist/HttpApi/EmailOtp.js.map +1 -0
- package/dist/HttpApi/EmailVerification.d.ts +6 -0
- package/dist/HttpApi/EmailVerification.d.ts.map +1 -0
- package/dist/HttpApi/EmailVerification.js +6 -0
- package/dist/HttpApi/EmailVerification.js.map +1 -0
- package/dist/HttpApi/Endpoints.d.ts +629 -301
- package/dist/HttpApi/Endpoints.d.ts.map +1 -1
- package/dist/HttpApi/Endpoints.js +178 -120
- package/dist/HttpApi/Endpoints.js.map +1 -1
- package/dist/HttpApi/Errors.d.ts +26 -7
- package/dist/HttpApi/Errors.d.ts.map +1 -1
- package/dist/HttpApi/Errors.js +26 -4
- package/dist/HttpApi/Errors.js.map +1 -1
- package/dist/HttpApi/Identity.d.ts +6 -0
- package/dist/HttpApi/Identity.d.ts.map +1 -0
- package/dist/HttpApi/Identity.js +6 -0
- package/dist/HttpApi/Identity.js.map +1 -0
- package/dist/HttpApi/IdentityGuards.d.ts +31 -0
- package/dist/HttpApi/IdentityGuards.d.ts.map +1 -0
- package/dist/HttpApi/IdentityGuards.js +33 -0
- package/dist/HttpApi/IdentityGuards.js.map +1 -0
- package/dist/HttpApi/Jwt.d.ts +4 -0
- package/dist/HttpApi/Jwt.d.ts.map +1 -0
- package/dist/HttpApi/Jwt.js +4 -0
- package/dist/HttpApi/Jwt.js.map +1 -0
- package/dist/HttpApi/JwtDiscovery.d.ts +4 -0
- package/dist/HttpApi/JwtDiscovery.d.ts.map +1 -0
- package/dist/HttpApi/JwtDiscovery.js +4 -0
- package/dist/HttpApi/JwtDiscovery.js.map +1 -0
- package/dist/HttpApi/LoginApproval.d.ts +5 -0
- package/dist/HttpApi/LoginApproval.d.ts.map +1 -0
- package/dist/HttpApi/LoginApproval.js +5 -0
- package/dist/HttpApi/LoginApproval.js.map +1 -0
- package/dist/HttpApi/LoginNotification.d.ts +5 -0
- package/dist/HttpApi/LoginNotification.d.ts.map +1 -0
- package/dist/HttpApi/LoginNotification.js +5 -0
- package/dist/HttpApi/LoginNotification.js.map +1 -0
- package/dist/HttpApi/MagicLink.d.ts +6 -0
- package/dist/HttpApi/MagicLink.d.ts.map +1 -0
- package/dist/HttpApi/MagicLink.js +6 -0
- package/dist/HttpApi/MagicLink.js.map +1 -0
- package/dist/HttpApi/Mfa.d.ts +5 -0
- package/dist/HttpApi/Mfa.d.ts.map +1 -0
- package/dist/HttpApi/Mfa.js +5 -0
- package/dist/HttpApi/Mfa.js.map +1 -0
- package/dist/HttpApi/Middleware.d.ts +14 -0
- package/dist/HttpApi/Middleware.d.ts.map +1 -0
- package/dist/HttpApi/Middleware.js +5 -0
- package/dist/HttpApi/Middleware.js.map +1 -0
- package/dist/HttpApi/OAuth.d.ts +4 -0
- package/dist/HttpApi/OAuth.d.ts.map +1 -0
- package/dist/HttpApi/OAuth.js +4 -0
- package/dist/HttpApi/OAuth.js.map +1 -0
- package/dist/HttpApi/OAuthProviderAuthorization.d.ts +4 -0
- package/dist/HttpApi/OAuthProviderAuthorization.d.ts.map +1 -0
- package/dist/HttpApi/OAuthProviderAuthorization.js +4 -0
- package/dist/HttpApi/OAuthProviderAuthorization.js.map +1 -0
- package/dist/HttpApi/OAuthToken.d.ts +4 -0
- package/dist/HttpApi/OAuthToken.d.ts.map +1 -0
- package/dist/HttpApi/OAuthToken.js +4 -0
- package/dist/HttpApi/OAuthToken.js.map +1 -0
- package/dist/HttpApi/OidcDiscovery.d.ts +4 -0
- package/dist/HttpApi/OidcDiscovery.d.ts.map +1 -0
- package/dist/HttpApi/OidcDiscovery.js +4 -0
- package/dist/HttpApi/OidcDiscovery.js.map +1 -0
- package/dist/HttpApi/Operations/AdminPermissionDefinition.d.ts +28 -0
- package/dist/HttpApi/Operations/AdminPermissionDefinition.d.ts.map +1 -0
- package/dist/HttpApi/Operations/AdminPermissionDefinition.js +5 -0
- package/dist/HttpApi/Operations/AdminPermissionDefinition.js.map +1 -0
- package/dist/HttpApi/Operations/AdminSession.d.ts +16 -0
- package/dist/HttpApi/Operations/AdminSession.d.ts.map +1 -0
- package/dist/HttpApi/Operations/AdminSession.js +5 -0
- package/dist/HttpApi/Operations/AdminSession.js.map +1 -0
- package/dist/HttpApi/Operations/ApiKey.d.ts +16 -0
- package/dist/HttpApi/Operations/ApiKey.d.ts.map +1 -0
- package/dist/HttpApi/Operations/ApiKey.js +5 -0
- package/dist/HttpApi/Operations/ApiKey.js.map +1 -0
- package/dist/HttpApi/Operations/Discovery.d.ts +19 -0
- package/dist/HttpApi/Operations/Discovery.d.ts.map +1 -0
- package/dist/HttpApi/Operations/Discovery.js +7 -0
- package/dist/HttpApi/Operations/Discovery.js.map +1 -0
- package/dist/HttpApi/Operations/EmailAuth.d.ts +12 -0
- package/dist/HttpApi/Operations/EmailAuth.d.ts.map +1 -0
- package/dist/HttpApi/Operations/EmailAuth.js +5 -0
- package/dist/HttpApi/Operations/EmailAuth.js.map +1 -0
- package/dist/HttpApi/Operations/EmailOtp.d.ts +14 -0
- package/dist/HttpApi/Operations/EmailOtp.d.ts.map +1 -0
- package/dist/HttpApi/Operations/EmailOtp.js +5 -0
- package/dist/HttpApi/Operations/EmailOtp.js.map +1 -0
- package/dist/HttpApi/Operations/EmailVerification.d.ts +14 -0
- package/dist/HttpApi/Operations/EmailVerification.d.ts.map +1 -0
- package/dist/HttpApi/Operations/EmailVerification.js +5 -0
- package/dist/HttpApi/Operations/EmailVerification.js.map +1 -0
- package/dist/HttpApi/Operations/HttpOperation.d.ts +4 -0
- package/dist/HttpApi/Operations/HttpOperation.d.ts.map +1 -0
- package/dist/HttpApi/Operations/HttpOperation.js +2 -0
- package/dist/HttpApi/Operations/HttpOperation.js.map +1 -0
- package/dist/HttpApi/Operations/Identity.d.ts +22 -0
- package/dist/HttpApi/Operations/Identity.d.ts.map +1 -0
- package/dist/HttpApi/Operations/Identity.js +5 -0
- package/dist/HttpApi/Operations/Identity.js.map +1 -0
- package/dist/HttpApi/Operations/Jwt.d.ts +14 -0
- package/dist/HttpApi/Operations/Jwt.d.ts.map +1 -0
- package/dist/HttpApi/Operations/Jwt.js +5 -0
- package/dist/HttpApi/Operations/Jwt.js.map +1 -0
- package/dist/HttpApi/Operations/LoginApproval.d.ts +16 -0
- package/dist/HttpApi/Operations/LoginApproval.d.ts.map +1 -0
- package/dist/HttpApi/Operations/LoginApproval.js +5 -0
- package/dist/HttpApi/Operations/LoginApproval.js.map +1 -0
- package/dist/HttpApi/Operations/MagicLink.d.ts +14 -0
- package/dist/HttpApi/Operations/MagicLink.d.ts.map +1 -0
- package/dist/HttpApi/Operations/MagicLink.js +5 -0
- package/dist/HttpApi/Operations/MagicLink.js.map +1 -0
- package/dist/HttpApi/Operations/Mfa.d.ts +24 -0
- package/dist/HttpApi/Operations/Mfa.d.ts.map +1 -0
- package/dist/HttpApi/Operations/Mfa.js +5 -0
- package/dist/HttpApi/Operations/Mfa.js.map +1 -0
- package/dist/HttpApi/Operations/OAuth.d.ts +20 -0
- package/dist/HttpApi/Operations/OAuth.d.ts.map +1 -0
- package/dist/HttpApi/Operations/OAuth.js +5 -0
- package/dist/HttpApi/Operations/OAuth.js.map +1 -0
- package/dist/HttpApi/Operations/OAuthProviderAuthorization.d.ts +12 -0
- package/dist/HttpApi/Operations/OAuthProviderAuthorization.d.ts.map +1 -0
- package/dist/HttpApi/Operations/OAuthProviderAuthorization.js +5 -0
- package/dist/HttpApi/Operations/OAuthProviderAuthorization.js.map +1 -0
- package/dist/HttpApi/Operations/OAuthToken.d.ts +16 -0
- package/dist/HttpApi/Operations/OAuthToken.d.ts.map +1 -0
- package/dist/HttpApi/Operations/OAuthToken.js +5 -0
- package/dist/HttpApi/Operations/OAuthToken.js.map +1 -0
- package/dist/HttpApi/Operations/Passkey.d.ts +22 -0
- package/dist/HttpApi/Operations/Passkey.d.ts.map +1 -0
- package/dist/HttpApi/Operations/Passkey.js +5 -0
- package/dist/HttpApi/Operations/Passkey.js.map +1 -0
- package/dist/HttpApi/Operations/Password.d.ts +22 -0
- package/dist/HttpApi/Operations/Password.d.ts.map +1 -0
- package/dist/HttpApi/Operations/Password.js +5 -0
- package/dist/HttpApi/Operations/Password.js.map +1 -0
- package/dist/HttpApi/Operations/RecoveryCodes.d.ts +20 -0
- package/dist/HttpApi/Operations/RecoveryCodes.d.ts.map +1 -0
- package/dist/HttpApi/Operations/RecoveryCodes.js +5 -0
- package/dist/HttpApi/Operations/RecoveryCodes.js.map +1 -0
- package/dist/HttpApi/Operations/RefreshToken.d.ts +12 -0
- package/dist/HttpApi/Operations/RefreshToken.d.ts.map +1 -0
- package/dist/HttpApi/Operations/RefreshToken.js +5 -0
- package/dist/HttpApi/Operations/RefreshToken.js.map +1 -0
- package/dist/HttpApi/Operations/Security.d.ts +12 -0
- package/dist/HttpApi/Operations/Security.d.ts.map +1 -0
- package/dist/HttpApi/Operations/Security.js +5 -0
- package/dist/HttpApi/Operations/Security.js.map +1 -0
- package/dist/HttpApi/Operations/SecurityTimeline.d.ts +19 -0
- package/dist/HttpApi/Operations/SecurityTimeline.d.ts.map +1 -0
- package/dist/HttpApi/Operations/SecurityTimeline.js +7 -0
- package/dist/HttpApi/Operations/SecurityTimeline.js.map +1 -0
- package/dist/HttpApi/Operations/Session.d.ts +22 -0
- package/dist/HttpApi/Operations/Session.d.ts.map +1 -0
- package/dist/HttpApi/Operations/Session.js +5 -0
- package/dist/HttpApi/Operations/Session.js.map +1 -0
- package/dist/HttpApi/Operations/StepUp.d.ts +22 -0
- package/dist/HttpApi/Operations/StepUp.d.ts.map +1 -0
- package/dist/HttpApi/Operations/StepUp.js +5 -0
- package/dist/HttpApi/Operations/StepUp.js.map +1 -0
- package/dist/HttpApi/Operations/Totp.d.ts +20 -0
- package/dist/HttpApi/Operations/Totp.d.ts.map +1 -0
- package/dist/HttpApi/Operations/Totp.js +5 -0
- package/dist/HttpApi/Operations/Totp.js.map +1 -0
- package/dist/HttpApi/Operations/TrustedDevice.d.ts +23 -0
- package/dist/HttpApi/Operations/TrustedDevice.d.ts.map +1 -0
- package/dist/HttpApi/Operations/TrustedDevice.js +7 -0
- package/dist/HttpApi/Operations/TrustedDevice.js.map +1 -0
- package/dist/HttpApi/Operations/index.d.ts +27 -0
- package/dist/HttpApi/Operations/index.d.ts.map +1 -0
- package/dist/HttpApi/Operations/index.js +27 -0
- package/dist/HttpApi/Operations/index.js.map +1 -0
- package/dist/HttpApi/Passkey.d.ts +5 -0
- package/dist/HttpApi/Passkey.d.ts.map +1 -0
- package/dist/HttpApi/Passkey.js +5 -0
- package/dist/HttpApi/Passkey.js.map +1 -0
- package/dist/HttpApi/Password.d.ts +220 -0
- package/dist/HttpApi/Password.d.ts.map +1 -0
- package/dist/HttpApi/Password.js +237 -0
- package/dist/HttpApi/Password.js.map +1 -0
- package/dist/HttpApi/PasswordContract.d.ts +307 -0
- package/dist/HttpApi/PasswordContract.d.ts.map +1 -0
- package/dist/HttpApi/PasswordContract.js +63 -0
- package/dist/HttpApi/PasswordContract.js.map +1 -0
- package/dist/HttpApi/PasswordGuards.d.ts +82 -0
- package/dist/HttpApi/PasswordGuards.d.ts.map +1 -0
- package/dist/HttpApi/PasswordGuards.js +179 -0
- package/dist/HttpApi/PasswordGuards.js.map +1 -0
- package/dist/HttpApi/RecoveryCodes.d.ts +5 -0
- package/dist/HttpApi/RecoveryCodes.d.ts.map +1 -0
- package/dist/HttpApi/RecoveryCodes.js +5 -0
- package/dist/HttpApi/RecoveryCodes.js.map +1 -0
- package/dist/HttpApi/RefreshToken.d.ts +4 -0
- package/dist/HttpApi/RefreshToken.d.ts.map +1 -0
- package/dist/HttpApi/RefreshToken.js +4 -0
- package/dist/HttpApi/RefreshToken.js.map +1 -0
- package/dist/HttpApi/RequestGuards.d.ts +42 -0
- package/dist/HttpApi/RequestGuards.d.ts.map +1 -0
- package/dist/HttpApi/RequestGuards.js +194 -0
- package/dist/HttpApi/RequestGuards.js.map +1 -0
- package/dist/HttpApi/Schemas.d.ts +361 -84
- package/dist/HttpApi/Schemas.d.ts.map +1 -1
- package/dist/HttpApi/Schemas.js +190 -27
- package/dist/HttpApi/Schemas.js.map +1 -1
- package/dist/HttpApi/Security.d.ts +12 -93
- package/dist/HttpApi/Security.d.ts.map +1 -1
- package/dist/HttpApi/Security.js +65 -356
- package/dist/HttpApi/Security.js.map +1 -1
- package/dist/HttpApi/SecurityTimeline.d.ts +4 -0
- package/dist/HttpApi/SecurityTimeline.d.ts.map +1 -0
- package/dist/HttpApi/SecurityTimeline.js +4 -0
- package/dist/HttpApi/SecurityTimeline.js.map +1 -0
- package/dist/HttpApi/Session.d.ts +5 -0
- package/dist/HttpApi/Session.d.ts.map +1 -0
- package/dist/HttpApi/Session.js +5 -0
- package/dist/HttpApi/Session.js.map +1 -0
- package/dist/HttpApi/SessionGuards.d.ts +15 -0
- package/dist/HttpApi/SessionGuards.d.ts.map +1 -0
- package/dist/HttpApi/SessionGuards.js +37 -0
- package/dist/HttpApi/SessionGuards.js.map +1 -0
- package/dist/HttpApi/StepUp.d.ts +5 -0
- package/dist/HttpApi/StepUp.d.ts.map +1 -0
- package/dist/HttpApi/StepUp.js +5 -0
- package/dist/HttpApi/StepUp.js.map +1 -0
- package/dist/HttpApi/Totp.d.ts +5 -0
- package/dist/HttpApi/Totp.d.ts.map +1 -0
- package/dist/HttpApi/Totp.js +5 -0
- package/dist/HttpApi/Totp.js.map +1 -0
- package/dist/HttpApi/Transport.d.ts +4 -6
- package/dist/HttpApi/Transport.d.ts.map +1 -1
- package/dist/HttpApi/Transport.js +62 -36
- package/dist/HttpApi/Transport.js.map +1 -1
- package/dist/HttpApi/TrustedDevice.d.ts +4 -0
- package/dist/HttpApi/TrustedDevice.d.ts.map +1 -0
- package/dist/HttpApi/TrustedDevice.js +4 -0
- package/dist/HttpApi/TrustedDevice.js.map +1 -0
- package/dist/HttpApi/index.d.ts +9 -3
- package/dist/HttpApi/index.d.ts.map +1 -1
- package/dist/HttpApi/index.js +8 -2
- package/dist/HttpApi/index.js.map +1 -1
- package/dist/Identity.d.ts +138 -0
- package/dist/Identity.d.ts.map +1 -0
- package/dist/Identity.js +105 -0
- package/dist/Identity.js.map +1 -0
- package/dist/IdentityManagement.d.ts +189 -0
- package/dist/IdentityManagement.d.ts.map +1 -0
- package/dist/IdentityManagement.js +317 -0
- package/dist/IdentityManagement.js.map +1 -0
- package/dist/IncidentAction.d.ts +1 -4
- package/dist/IncidentAction.d.ts.map +1 -1
- package/dist/IncidentAction.js +15 -9
- package/dist/IncidentAction.js.map +1 -1
- package/dist/Internal.d.ts +2 -0
- package/dist/Internal.d.ts.map +1 -1
- package/dist/Internal.js +30 -0
- package/dist/Internal.js.map +1 -1
- package/dist/Invitation.d.ts +362 -0
- package/dist/Invitation.d.ts.map +1 -0
- package/dist/Invitation.js +633 -0
- package/dist/Invitation.js.map +1 -0
- package/dist/IpQualityScore.d.ts +38 -0
- package/dist/IpQualityScore.d.ts.map +1 -0
- package/dist/IpQualityScore.js +215 -0
- package/dist/IpQualityScore.js.map +1 -0
- package/dist/Jwt.d.ts +9 -30
- package/dist/Jwt.d.ts.map +1 -1
- package/dist/Jwt.js +72 -60
- package/dist/Jwt.js.map +1 -1
- package/dist/LoginApproval.d.ts +16 -31
- package/dist/LoginApproval.d.ts.map +1 -1
- package/dist/LoginApproval.js +47 -41
- package/dist/LoginApproval.js.map +1 -1
- package/dist/LoginNotification.d.ts +8 -12
- package/dist/LoginNotification.d.ts.map +1 -1
- package/dist/LoginNotification.js +30 -17
- package/dist/LoginNotification.js.map +1 -1
- package/dist/LoginRisk.d.ts +11 -13
- package/dist/LoginRisk.d.ts.map +1 -1
- package/dist/LoginRisk.js +66 -26
- package/dist/LoginRisk.js.map +1 -1
- package/dist/LoginRiskEnrichment.d.ts +145 -0
- package/dist/LoginRiskEnrichment.d.ts.map +1 -0
- package/dist/LoginRiskEnrichment.js +220 -0
- package/dist/LoginRiskEnrichment.js.map +1 -0
- package/dist/MachineAuth.d.ts.map +1 -1
- package/dist/MachineAuth.js.map +1 -1
- package/dist/MagicLink.d.ts +9 -8
- package/dist/MagicLink.d.ts.map +1 -1
- package/dist/MagicLink.js +40 -73
- package/dist/MagicLink.js.map +1 -1
- package/dist/Mailer.d.ts +20 -13
- package/dist/Mailer.d.ts.map +1 -1
- package/dist/Mailer.js +10 -12
- package/dist/Mailer.js.map +1 -1
- package/dist/OAuth.d.ts +100 -103
- package/dist/OAuth.d.ts.map +1 -1
- package/dist/OAuth.js +404 -217
- package/dist/OAuth.js.map +1 -1
- package/dist/Passkey.d.ts +17 -19
- package/dist/Passkey.d.ts.map +1 -1
- package/dist/Passkey.js +86 -39
- package/dist/Passkey.js.map +1 -1
- package/dist/PasskeyBrowser.d.ts +39 -0
- package/dist/PasskeyBrowser.d.ts.map +1 -0
- package/dist/PasskeyBrowser.js +206 -0
- package/dist/PasskeyBrowser.js.map +1 -0
- package/dist/PasskeySimpleWebAuthn.d.ts.map +1 -1
- package/dist/PasskeySimpleWebAuthn.js +19 -7
- package/dist/PasskeySimpleWebAuthn.js.map +1 -1
- package/dist/Password.d.ts +71 -37
- package/dist/Password.d.ts.map +1 -1
- package/dist/Password.js +296 -82
- package/dist/Password.js.map +1 -1
- package/dist/PasswordRisk.d.ts +63 -0
- package/dist/PasswordRisk.d.ts.map +1 -0
- package/dist/PasswordRisk.js +37 -0
- package/dist/PasswordRisk.js.map +1 -0
- package/dist/Permission.d.ts +308 -0
- package/dist/Permission.d.ts.map +1 -0
- package/dist/Permission.js +827 -0
- package/dist/Permission.js.map +1 -0
- package/dist/Policy.d.ts +31 -18
- package/dist/Policy.d.ts.map +1 -1
- package/dist/Policy.js +58 -14
- package/dist/Policy.js.map +1 -1
- package/dist/PostgresDelegatedAccessStorageMigrations.d.ts +7 -0
- package/dist/PostgresDelegatedAccessStorageMigrations.d.ts.map +1 -0
- package/dist/PostgresDelegatedAccessStorageMigrations.js +119 -0
- package/dist/PostgresDelegatedAccessStorageMigrations.js.map +1 -0
- package/dist/PostgresStorageMigrations.d.ts +15 -0
- package/dist/PostgresStorageMigrations.d.ts.map +1 -0
- package/dist/PostgresStorageMigrations.js +620 -0
- package/dist/PostgresStorageMigrations.js.map +1 -0
- package/dist/Privacy.d.ts +0 -3
- package/dist/Privacy.d.ts.map +1 -1
- package/dist/Privacy.js +2 -5
- package/dist/Privacy.js.map +1 -1
- package/dist/RateLimiter.d.ts +0 -3
- package/dist/RateLimiter.d.ts.map +1 -1
- package/dist/RateLimiter.js +1 -4
- package/dist/RateLimiter.js.map +1 -1
- package/dist/RecoveryCode.d.ts +84 -12
- package/dist/RecoveryCode.d.ts.map +1 -1
- package/dist/RecoveryCode.js +273 -75
- package/dist/RecoveryCode.js.map +1 -1
- package/dist/RecoveryPolicy.d.ts +81 -0
- package/dist/RecoveryPolicy.d.ts.map +1 -0
- package/dist/RecoveryPolicy.js +119 -0
- package/dist/RecoveryPolicy.js.map +1 -0
- package/dist/RefreshToken.d.ts +1 -10
- package/dist/RefreshToken.d.ts.map +1 -1
- package/dist/RefreshToken.js +31 -22
- package/dist/RefreshToken.js.map +1 -1
- package/dist/Retention.d.ts.map +1 -1
- package/dist/Retention.js.map +1 -1
- package/dist/SecurityTimeline.d.ts +1 -4
- package/dist/SecurityTimeline.d.ts.map +1 -1
- package/dist/SecurityTimeline.js +110 -17
- package/dist/SecurityTimeline.js.map +1 -1
- package/dist/Sessions.d.ts +124 -29
- package/dist/Sessions.d.ts.map +1 -1
- package/dist/Sessions.js +626 -94
- package/dist/Sessions.js.map +1 -1
- package/dist/StepUp.d.ts +132 -11
- package/dist/StepUp.d.ts.map +1 -1
- package/dist/StepUp.js +387 -19
- package/dist/StepUp.js.map +1 -1
- package/dist/Storage.d.ts +89 -23
- package/dist/Storage.d.ts.map +1 -1
- package/dist/Storage.js +10 -12
- package/dist/Storage.js.map +1 -1
- package/dist/StorageMigrations.d.ts +6 -1
- package/dist/StorageMigrations.d.ts.map +1 -1
- package/dist/StorageMigrations.js +224 -0
- package/dist/StorageMigrations.js.map +1 -1
- package/dist/StorageSchemaGenerator.d.ts +486 -0
- package/dist/StorageSchemaGenerator.d.ts.map +1 -0
- package/dist/StorageSchemaGenerator.js +1022 -0
- package/dist/StorageSchemaGenerator.js.map +1 -0
- package/dist/StrongFactor.d.ts +64 -0
- package/dist/StrongFactor.d.ts.map +1 -0
- package/dist/StrongFactor.js +100 -0
- package/dist/StrongFactor.js.map +1 -0
- package/dist/Testing.d.ts +1 -1
- package/dist/Testing.js +2 -2
- package/dist/Testing.js.map +1 -1
- package/dist/Totp.d.ts +88 -13
- package/dist/Totp.d.ts.map +1 -1
- package/dist/Totp.js +194 -36
- package/dist/Totp.js.map +1 -1
- package/dist/TrustedDevice.d.ts +0 -9
- package/dist/TrustedDevice.d.ts.map +1 -1
- package/dist/TrustedDevice.js +15 -17
- package/dist/TrustedDevice.js.map +1 -1
- package/dist/WaitUntil.d.ts +0 -3
- package/dist/WaitUntil.d.ts.map +1 -1
- package/dist/WaitUntil.js +1 -4
- package/dist/WaitUntil.js.map +1 -1
- package/dist/Webhook.d.ts +42 -12
- package/dist/Webhook.d.ts.map +1 -1
- package/dist/Webhook.js +165 -26
- package/dist/Webhook.js.map +1 -1
- package/dist/alchemy/cloudflare/Email.d.ts +4 -4
- package/dist/alchemy/cloudflare/Email.d.ts.map +1 -1
- package/dist/alchemy/cloudflare/Email.js +10 -5
- package/dist/alchemy/cloudflare/Email.js.map +1 -1
- package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts +4 -4
- package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts.map +1 -1
- package/dist/alchemy/cloudflare/RateLimitDurableObject.js +5 -4
- package/dist/alchemy/cloudflare/RateLimitDurableObject.js.map +1 -1
- package/dist/cloudflare/Email.d.ts.map +1 -1
- package/dist/cloudflare/Email.js +1 -1
- package/dist/cloudflare/Email.js.map +1 -1
- package/dist/cloudflare/RateLimitDurableObject.d.ts +6 -5
- package/dist/cloudflare/RateLimitDurableObject.d.ts.map +1 -1
- package/dist/cloudflare/RateLimitDurableObject.js.map +1 -1
- package/dist/cloudflare/RequestMetadata.d.ts +49 -0
- package/dist/cloudflare/RequestMetadata.d.ts.map +1 -0
- package/dist/cloudflare/RequestMetadata.js +71 -0
- package/dist/cloudflare/RequestMetadata.js.map +1 -0
- package/dist/index.d.ts +0 -35
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -35
- package/dist/index.js.map +1 -1
- package/dist/internal/AuthFlowFinalizer.d.ts +31 -0
- package/dist/internal/AuthFlowFinalizer.d.ts.map +1 -0
- package/dist/internal/AuthFlowFinalizer.js +182 -0
- package/dist/internal/AuthFlowFinalizer.js.map +1 -0
- package/dist/internal/RateLimitDurableObject.d.ts.map +1 -1
- package/dist/internal/RateLimitDurableObject.js +3 -0
- package/dist/internal/RateLimitDurableObject.js.map +1 -1
- package/migrations/0001_auth_storage.sql +1 -0
- package/migrations/0006_auth_totp_factor.sql +1 -0
- package/migrations/0024_auth_permission.sql +39 -0
- package/migrations/0025_auth_permission_definition.sql +19 -0
- package/migrations/0026_auth_user_identity.sql +59 -0
- package/migrations/0027_auth_audit_log_storage_order.sql +46 -0
- package/migrations/0028_auth_oauth_client_secret_key.sql +39 -0
- package/migrations/delegated-access/0001_auth_delegated_access.sql +152 -0
- package/migrations/postgres/0001_auth_core.sql +77 -0
- package/migrations/postgres/0002_auth_security_oauth.sql +65 -0
- package/migrations/postgres/0003_auth_credentials_tokens.sql +43 -0
- package/migrations/postgres/0004_auth_security_history.sql +103 -0
- package/migrations/postgres/0005_auth_webhooks.sql +29 -0
- package/migrations/postgres/0006_auth_domain_timeline.sql +50 -0
- package/migrations/postgres/0007_auth_oauth_clients.sql +85 -0
- package/migrations/postgres/0008_auth_oauth_tokens.sql +63 -0
- package/migrations/postgres/0009_auth_permissions.sql +66 -0
- package/migrations/postgres/delegated-access/0001_auth_delegated_access.sql +112 -0
- package/package.json +309 -2
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Context, Duration, Effect, Layer, Redacted } from "effect";
|
|
2
|
+
import { Challenge } from "./Challenge.js";
|
|
3
|
+
import type { ChallengeService } from "./Challenge.js";
|
|
4
|
+
import { Crypto } from "./Crypto.js";
|
|
5
|
+
import type { CryptoService } from "./Crypto.js";
|
|
6
|
+
import { EmailOtpSecretGenerator } from "./EmailOtp.js";
|
|
7
|
+
import type { EmailOtpSecretGeneratorService, EmailOtpStarted } from "./EmailOtp.js";
|
|
8
|
+
import type { Email } from "./Identifiers.js";
|
|
9
|
+
import type { LoginIdentityInput, IdentityKindRegistryService } from "./Identity.js";
|
|
10
|
+
import { IdentityKindRegistry } from "./Identity.js";
|
|
11
|
+
import type { MagicLinkStarted, MagicLinkUrlInput } from "./MagicLink.js";
|
|
12
|
+
import { AuthMailer } from "./Mailer.js";
|
|
13
|
+
import type { AuthMailerService } from "./Mailer.js";
|
|
14
|
+
import { IdentityStore, RegistrationStore, UserStore } from "./Storage.js";
|
|
15
|
+
import type { IdentityStoreService, RegistrationStoreService, UserStoreService } from "./Storage.js";
|
|
16
|
+
export interface EmailAuthStartInput {
|
|
17
|
+
readonly identity: LoginIdentityInput;
|
|
18
|
+
readonly emailOtpSecret?: Redacted.Redacted<string>;
|
|
19
|
+
readonly magicLinkSecret?: Redacted.Redacted<string>;
|
|
20
|
+
readonly ttl?: Duration.Duration;
|
|
21
|
+
readonly emailOtpTtl?: Duration.Duration;
|
|
22
|
+
readonly magicLinkTtl?: Duration.Duration;
|
|
23
|
+
readonly locale?: string;
|
|
24
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
25
|
+
}
|
|
26
|
+
export interface EmailAuthStarted {
|
|
27
|
+
readonly email: Email;
|
|
28
|
+
readonly emailOtp: EmailOtpStarted;
|
|
29
|
+
readonly magicLink: MagicLinkStarted;
|
|
30
|
+
}
|
|
31
|
+
declare const EmailAuthStartError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
32
|
+
readonly _tag: "EmailAuthStartError";
|
|
33
|
+
} & Readonly<A>;
|
|
34
|
+
export declare class EmailAuthStartError extends EmailAuthStartError_base<{
|
|
35
|
+
readonly message: string;
|
|
36
|
+
readonly cause?: unknown;
|
|
37
|
+
}> {
|
|
38
|
+
}
|
|
39
|
+
export interface EmailAuthService {
|
|
40
|
+
readonly start: (input: EmailAuthStartInput) => Effect.Effect<EmailAuthStarted, EmailAuthStartError>;
|
|
41
|
+
}
|
|
42
|
+
declare const EmailAuth_base: Context.ServiceClass<EmailAuth, "auth/EmailAuth", EmailAuthService>;
|
|
43
|
+
export declare class EmailAuth extends EmailAuth_base {
|
|
44
|
+
}
|
|
45
|
+
export interface EmailAuthOptions {
|
|
46
|
+
readonly ttl?: Duration.Duration;
|
|
47
|
+
readonly emailOtpTtl?: Duration.Duration;
|
|
48
|
+
readonly magicLinkTtl?: Duration.Duration;
|
|
49
|
+
readonly magicLinkSecretBytes?: number;
|
|
50
|
+
readonly makeUrl: (input: MagicLinkUrlInput) => string;
|
|
51
|
+
}
|
|
52
|
+
export interface EmailAuthDependencies extends EmailAuthOptions {
|
|
53
|
+
readonly challenge: ChallengeService;
|
|
54
|
+
readonly crypto: CryptoService;
|
|
55
|
+
readonly authMailer: AuthMailerService;
|
|
56
|
+
readonly emailOtpSecretGenerator: EmailOtpSecretGeneratorService;
|
|
57
|
+
readonly users: UserStoreService;
|
|
58
|
+
readonly identities: IdentityStoreService;
|
|
59
|
+
readonly registration: RegistrationStoreService;
|
|
60
|
+
readonly identityKinds: IdentityKindRegistryService;
|
|
61
|
+
}
|
|
62
|
+
export declare const makeEmailAuth: (dependencies: EmailAuthDependencies) => EmailAuthService;
|
|
63
|
+
export declare const EmailAuthLive: (options: EmailAuthOptions) => Layer.Layer<EmailAuth, never, AuthMailer | Challenge | Crypto | EmailOtpSecretGenerator | IdentityKindRegistry | IdentityStore | RegistrationStore | UserStore>;
|
|
64
|
+
export {};
|
|
65
|
+
//# sourceMappingURL=EmailAuth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailAuth.d.ts","sourceRoot":"","sources":["../src/EmailAuth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { Context, Data, Duration, Effect, Layer, Redacted } from "effect";
|
|
2
|
+
import { Challenge } from "./Challenge.js";
|
|
3
|
+
import { Crypto } from "./Crypto.js";
|
|
4
|
+
import { prepareEmailIdentityChallenge } from "./EmailIdentityAuth.js";
|
|
5
|
+
import { defaultEmailOtpTtl, EmailOtpSecretGenerator } from "./EmailOtp.js";
|
|
6
|
+
import { IdentityKindRegistry } from "./Identity.js";
|
|
7
|
+
import { defaultMagicLinkSecretBytes, defaultMagicLinkTtl, } from "./MagicLink.js";
|
|
8
|
+
import { AuthMailer } from "./Mailer.js";
|
|
9
|
+
import { IdentityStore, RegistrationStore, UserStore } from "./Storage.js";
|
|
10
|
+
export class EmailAuthStartError extends Data.TaggedError("EmailAuthStartError") {
|
|
11
|
+
}
|
|
12
|
+
export class EmailAuth extends Context.Service()("auth/EmailAuth") {
|
|
13
|
+
}
|
|
14
|
+
const invalidateChallenge = (challenge, id) => challenge
|
|
15
|
+
.consume(id)
|
|
16
|
+
.pipe(Effect.catchTag("ChallengeConsumeError", () => Effect.void));
|
|
17
|
+
const invalidateChallenges = (challenge, ids) => Effect.forEach(ids, (id) => invalidateChallenge(challenge, id), {
|
|
18
|
+
discard: true,
|
|
19
|
+
});
|
|
20
|
+
const normalizeEmailOtpSecret = (generator, secret) => generator.normalize({ secret }).pipe(Effect.mapError((cause) => new EmailAuthStartError({
|
|
21
|
+
message: "Failed to normalize email OTP secret",
|
|
22
|
+
cause,
|
|
23
|
+
})));
|
|
24
|
+
const emailOtpSecret = (generator, input, email) => Effect.gen(function* () {
|
|
25
|
+
if (input.emailOtpSecret !== undefined) {
|
|
26
|
+
return yield* normalizeEmailOtpSecret(generator, input.emailOtpSecret);
|
|
27
|
+
}
|
|
28
|
+
const generated = yield* generator
|
|
29
|
+
.generate({
|
|
30
|
+
email,
|
|
31
|
+
locale: input.locale,
|
|
32
|
+
metadata: input.metadata,
|
|
33
|
+
})
|
|
34
|
+
.pipe(Effect.mapError((cause) => new EmailAuthStartError({
|
|
35
|
+
message: "Failed to generate email OTP secret",
|
|
36
|
+
cause,
|
|
37
|
+
})));
|
|
38
|
+
return yield* normalizeEmailOtpSecret(generator, generated.secret);
|
|
39
|
+
});
|
|
40
|
+
const magicLinkSecret = (crypto, input, secretBytes) => {
|
|
41
|
+
if (input.magicLinkSecret !== undefined) {
|
|
42
|
+
return Effect.succeed(Redacted.make(Redacted.value(input.magicLinkSecret).trim()));
|
|
43
|
+
}
|
|
44
|
+
return crypto.randomToken(secretBytes).pipe(Effect.map(Redacted.make), Effect.mapError((cause) => new EmailAuthStartError({
|
|
45
|
+
message: "Failed to generate magic link secret",
|
|
46
|
+
cause,
|
|
47
|
+
})));
|
|
48
|
+
};
|
|
49
|
+
const makeMagicLinkUrl = (dependencies, input) => Effect.try({
|
|
50
|
+
try: () => dependencies.makeUrl(input),
|
|
51
|
+
catch: (cause) => new EmailAuthStartError({
|
|
52
|
+
message: "Failed to build magic link URL",
|
|
53
|
+
cause,
|
|
54
|
+
}),
|
|
55
|
+
});
|
|
56
|
+
export const makeEmailAuth = (dependencies) => {
|
|
57
|
+
const emailOtpTtl = dependencies.emailOtpTtl ?? dependencies.ttl ?? defaultEmailOtpTtl;
|
|
58
|
+
const magicLinkTtl = dependencies.magicLinkTtl ?? dependencies.ttl ?? defaultMagicLinkTtl;
|
|
59
|
+
const magicLinkSecretBytes = dependencies.magicLinkSecretBytes ?? defaultMagicLinkSecretBytes;
|
|
60
|
+
return EmailAuth.of({
|
|
61
|
+
start: Effect.fn("auth.email.start")(function* (input) {
|
|
62
|
+
yield* Effect.annotateCurrentSpan("auth.method", "email");
|
|
63
|
+
const binding = yield* prepareEmailIdentityChallenge(dependencies, input.identity, input.metadata, (message, cause) => new EmailAuthStartError({ message, cause }));
|
|
64
|
+
const otpSecret = yield* emailOtpSecret(dependencies.emailOtpSecretGenerator, input, binding.email);
|
|
65
|
+
const linkSecret = yield* magicLinkSecret(dependencies.crypto, input, magicLinkSecretBytes);
|
|
66
|
+
const emailOtpIssued = yield* dependencies.challenge
|
|
67
|
+
.issue({
|
|
68
|
+
type: "email-otp",
|
|
69
|
+
subject: binding.identityId,
|
|
70
|
+
ttl: input.emailOtpTtl ?? input.ttl ?? emailOtpTtl,
|
|
71
|
+
secret: otpSecret,
|
|
72
|
+
metadata: binding.metadata,
|
|
73
|
+
})
|
|
74
|
+
.pipe(Effect.mapError((cause) => new EmailAuthStartError({
|
|
75
|
+
message: "Failed to issue email OTP challenge",
|
|
76
|
+
cause,
|
|
77
|
+
})));
|
|
78
|
+
const magicLinkIssued = yield* dependencies.challenge
|
|
79
|
+
.issue({
|
|
80
|
+
type: "magic-link",
|
|
81
|
+
subject: binding.identityId,
|
|
82
|
+
ttl: input.magicLinkTtl ?? input.ttl ?? magicLinkTtl,
|
|
83
|
+
secret: linkSecret,
|
|
84
|
+
metadata: binding.metadata,
|
|
85
|
+
})
|
|
86
|
+
.pipe(Effect.mapError((cause) => new EmailAuthStartError({
|
|
87
|
+
message: "Failed to issue magic link challenge",
|
|
88
|
+
cause,
|
|
89
|
+
})), Effect.matchEffect({
|
|
90
|
+
onSuccess: Effect.succeed,
|
|
91
|
+
onFailure: (error) => invalidateChallenge(dependencies.challenge, emailOtpIssued.id).pipe(Effect.flatMap(() => Effect.fail(error))),
|
|
92
|
+
}));
|
|
93
|
+
const startedMagicLink = {
|
|
94
|
+
challengeId: magicLinkIssued.id,
|
|
95
|
+
email: binding.email,
|
|
96
|
+
expiresAt: magicLinkIssued.expiresAt,
|
|
97
|
+
};
|
|
98
|
+
const url = yield* makeMagicLinkUrl(dependencies, {
|
|
99
|
+
...startedMagicLink,
|
|
100
|
+
secret: linkSecret,
|
|
101
|
+
locale: input.locale,
|
|
102
|
+
metadata: input.metadata,
|
|
103
|
+
}).pipe(Effect.matchEffect({
|
|
104
|
+
onSuccess: Effect.succeed,
|
|
105
|
+
onFailure: (error) => invalidateChallenges(dependencies.challenge, [
|
|
106
|
+
emailOtpIssued.id,
|
|
107
|
+
magicLinkIssued.id,
|
|
108
|
+
]).pipe(Effect.flatMap(() => Effect.fail(error))),
|
|
109
|
+
}));
|
|
110
|
+
yield* dependencies.authMailer
|
|
111
|
+
.send({
|
|
112
|
+
_tag: "EmailAuth",
|
|
113
|
+
to: binding.email,
|
|
114
|
+
identityId: binding.identityId,
|
|
115
|
+
emailOtp: {
|
|
116
|
+
challengeId: emailOtpIssued.id,
|
|
117
|
+
secret: otpSecret,
|
|
118
|
+
expiresAt: emailOtpIssued.expiresAt,
|
|
119
|
+
},
|
|
120
|
+
magicLink: {
|
|
121
|
+
challengeId: magicLinkIssued.id,
|
|
122
|
+
url,
|
|
123
|
+
expiresAt: magicLinkIssued.expiresAt,
|
|
124
|
+
},
|
|
125
|
+
locale: input.locale,
|
|
126
|
+
metadata: input.metadata,
|
|
127
|
+
})
|
|
128
|
+
.pipe(Effect.mapError((cause) => new EmailAuthStartError({
|
|
129
|
+
message: "Failed to send email auth message",
|
|
130
|
+
cause,
|
|
131
|
+
})), Effect.matchEffect({
|
|
132
|
+
onSuccess: () => Effect.void,
|
|
133
|
+
onFailure: (error) => invalidateChallenges(dependencies.challenge, [
|
|
134
|
+
emailOtpIssued.id,
|
|
135
|
+
magicLinkIssued.id,
|
|
136
|
+
]).pipe(Effect.flatMap(() => Effect.fail(error))),
|
|
137
|
+
}));
|
|
138
|
+
return {
|
|
139
|
+
email: binding.email,
|
|
140
|
+
emailOtp: {
|
|
141
|
+
challengeId: emailOtpIssued.id,
|
|
142
|
+
email: binding.email,
|
|
143
|
+
expiresAt: emailOtpIssued.expiresAt,
|
|
144
|
+
},
|
|
145
|
+
magicLink: startedMagicLink,
|
|
146
|
+
};
|
|
147
|
+
}),
|
|
148
|
+
});
|
|
149
|
+
};
|
|
150
|
+
export const EmailAuthLive = (options) => Layer.effect(EmailAuth)(Effect.gen(function* () {
|
|
151
|
+
const challenge = yield* Challenge;
|
|
152
|
+
const crypto = yield* Crypto;
|
|
153
|
+
const authMailer = yield* AuthMailer;
|
|
154
|
+
const emailOtpSecretGenerator = yield* EmailOtpSecretGenerator;
|
|
155
|
+
const users = yield* UserStore;
|
|
156
|
+
const identities = yield* IdentityStore;
|
|
157
|
+
const registration = yield* RegistrationStore;
|
|
158
|
+
const identityKinds = yield* IdentityKindRegistry;
|
|
159
|
+
return makeEmailAuth({
|
|
160
|
+
...options,
|
|
161
|
+
challenge,
|
|
162
|
+
crypto,
|
|
163
|
+
authMailer,
|
|
164
|
+
emailOtpSecretGenerator,
|
|
165
|
+
users,
|
|
166
|
+
identities,
|
|
167
|
+
registration,
|
|
168
|
+
identityKinds,
|
|
169
|
+
});
|
|
170
|
+
}));
|
|
171
|
+
//# sourceMappingURL=EmailAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailAuth.js","sourceRoot":"","sources":["../src/EmailAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE1E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAU5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAwB3E,MAAM,OAAO,mBAAoB,SAAQ,IAAI,CAAC,WAAW,CACvD,qBAAqB,CAIrB;CAAG;AAQL,MAAM,OAAO,SAAU,SAAQ,OAAO,CAAC,OAAO,EAA+B,CAC3E,gBAAgB,CACjB;CAAG;AAqBJ,MAAM,mBAAmB,GAAG,CAAC,SAA2B,EAAE,EAAe,EAAE,EAAE,CAC3E,SAAS;KACN,OAAO,CAAC,EAAE,CAAC;KACX,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAEvE,MAAM,oBAAoB,GAAG,CAC3B,SAA2B,EAC3B,GAA2B,EAC3B,EAAE,CACF,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE;IAC9D,OAAO,EAAE,IAAI;CACd,CAAC,CAAC;AAEL,MAAM,uBAAuB,GAAG,CAC9B,SAAyC,EACzC,MAAiC,EAC8B,EAAE,CACjE,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAClC,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,mBAAmB,CAAC;IACtB,OAAO,EAAE,sCAAsC;IAC/C,KAAK;CACN,CAAC,CACL,CACF,CAAC;AAEJ,MAAM,cAAc,GAAG,CACrB,SAAyC,EACzC,KAA0B,EAC1B,KAAY,EACmD,EAAE,CACjE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC,CAAC,uBAAuB,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS;SAC/B,QAAQ,CAAC;QACR,KAAK;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC;SACD,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,mBAAmB,CAAC;QACtB,OAAO,EAAE,qCAAqC;QAC9C,KAAK;KACN,CAAC,CACL,CACF,CAAC;IAEJ,OAAO,KAAK,CAAC,CAAC,uBAAuB,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AACrE,CAAC,CAAC,CAAC;AAEL,MAAM,eAAe,GAAG,CACtB,MAAqB,EACrB,KAA0B,EAC1B,WAAmB,EAC4C,EAAE;IACjE,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,MAAM,CAAC,OAAO,CACnB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC,CAC5D,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EACzB,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,mBAAmB,CAAC;QACtB,OAAO,EAAE,sCAAsC;QAC/C,KAAK;KACN,CAAC,CACL,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACvB,YAAoD,EACpD,KAAwB,EACoB,EAAE,CAC9C,MAAM,CAAC,GAAG,CAAC;IACT,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;IACtC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,mBAAmB,CAAC;QACtB,OAAO,EAAE,gCAAgC;QACzC,KAAK;KACN,CAAC;CACL,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,YAAmC,EACjB,EAAE;IACpB,MAAM,WAAW,GACf,YAAY,CAAC,WAAW,IAAI,YAAY,CAAC,GAAG,IAAI,kBAAkB,CAAC;IACrE,MAAM,YAAY,GAChB,YAAY,CAAC,YAAY,IAAI,YAAY,CAAC,GAAG,IAAI,mBAAmB,CAAC;IACvE,MAAM,oBAAoB,GACxB,YAAY,CAAC,oBAAoB,IAAI,2BAA2B,CAAC;IAEnE,OAAO,SAAS,CAAC,EAAE,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,EAC5C,KAA0B;YAE1B,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAE1D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,6BAA6B,CAClD,YAAY,EACZ,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EACd,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,mBAAmB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAChE,CAAC;YACF,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,cAAc,CACrC,YAAY,CAAC,uBAAuB,EACpC,KAAK,EACL,OAAO,CAAC,KAAK,CACd,CAAC;YACF,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,eAAe,CACvC,YAAY,CAAC,MAAM,EACnB,KAAK,EACL,oBAAoB,CACrB,CAAC;YACF,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,SAAS;iBACjD,KAAK,CAAC;gBACL,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,OAAO,CAAC,UAAU;gBAC3B,GAAG,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,GAAG,IAAI,WAAW;gBAClD,MAAM,EAAE,SAAS;gBACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;iBACD,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,mBAAmB,CAAC;gBACtB,OAAO,EAAE,qCAAqC;gBAC9C,KAAK;aACN,CAAC,CACL,CACF,CAAC;YACJ,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,SAAS;iBAClD,KAAK,CAAC;gBACL,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,OAAO,CAAC,UAAU;gBAC3B,GAAG,EAAE,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,GAAG,IAAI,YAAY;gBACpD,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;iBACD,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,mBAAmB,CAAC;gBACtB,OAAO,EAAE,sCAAsC;gBAC/C,KAAK;aACN,CAAC,CACL,EACD,MAAM,CAAC,WAAW,CAAC;gBACjB,SAAS,EAAE,MAAM,CAAC,OAAO;gBACzB,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CACnB,mBAAmB,CACjB,YAAY,CAAC,SAAS,EACtB,cAAc,CAAC,EAAE,CAClB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aACnD,CAAC,CACH,CAAC;YACJ,MAAM,gBAAgB,GAAG;gBACvB,WAAW,EAAE,eAAe,CAAC,EAAE;gBAC/B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS,EAAE,eAAe,CAAC,SAAS;aACV,CAAC;YAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC,YAAY,EAAE;gBAChD,GAAG,gBAAgB;gBACnB,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,WAAW,CAAC;gBACjB,SAAS,EAAE,MAAM,CAAC,OAAO;gBACzB,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CACnB,oBAAoB,CAAC,YAAY,CAAC,SAAS,EAAE;oBAC3C,cAAc,CAAC,EAAE;oBACjB,eAAe,CAAC,EAAE;iBACnB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aACpD,CAAC,CACH,CAAC;YAEF,KAAK,CAAC,CAAC,YAAY,CAAC,UAAU;iBAC3B,IAAI,CAAC;gBACJ,IAAI,EAAE,WAAW;gBACjB,EAAE,EAAE,OAAO,CAAC,KAAK;gBACjB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,QAAQ,EAAE;oBACR,WAAW,EAAE,cAAc,CAAC,EAAE;oBAC9B,MAAM,EAAE,SAAS;oBACjB,SAAS,EAAE,cAAc,CAAC,SAAS;iBACpC;gBACD,SAAS,EAAE;oBACT,WAAW,EAAE,eAAe,CAAC,EAAE;oBAC/B,GAAG;oBACH,SAAS,EAAE,eAAe,CAAC,SAAS;iBACrC;gBACD,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB,CAAC;iBACD,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,mBAAmB,CAAC;gBACtB,OAAO,EAAE,mCAAmC;gBAC5C,KAAK;aACN,CAAC,CACL,EACD,MAAM,CAAC,WAAW,CAAC;gBACjB,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;gBAC5B,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CACnB,oBAAoB,CAAC,YAAY,CAAC,SAAS,EAAE;oBAC3C,cAAc,CAAC,EAAE;oBACjB,eAAe,CAAC,EAAE;iBACnB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aACpD,CAAC,CACH,CAAC;YAEJ,OAAO;gBACL,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ,EAAE;oBACR,WAAW,EAAE,cAAc,CAAC,EAAE;oBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,SAAS,EAAE,cAAc,CAAC,SAAS;iBACpC;gBACD,SAAS,EAAE,gBAAgB;aACD,CAAC;QAC/B,CAAC,CAAC;KACH,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAyB,EAAE,EAAE,CACzD,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CACrB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC;IACnC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC;IAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;IACrC,MAAM,uBAAuB,GAAG,KAAK,CAAC,CAAC,uBAAuB,CAAC;IAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC;IAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC;IACxC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC;IAC9C,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC;IAElD,OAAO,aAAa,CAAC;QACnB,GAAG,OAAO;QACV,SAAS;QACT,MAAM;QACN,UAAU;QACV,uBAAuB;QACvB,KAAK;QACL,UAAU;QACV,YAAY;QACZ,aAAa;KACd,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import type { AuthResultOf } from "./AuthFlow.js";
|
|
3
|
+
import type { CryptoService } from "./Crypto.js";
|
|
4
|
+
import type { IdentityKindRegistryService, LoginIdentityInput, NormalizedLoginIdentity, UserIdentityRow } from "./Identity.js";
|
|
5
|
+
import { Email, IdentityId } from "./Identifiers.js";
|
|
6
|
+
import type { IdentityStoreService, RegistrationStoreService, UserRow, UserStoreService } from "./Storage.js";
|
|
7
|
+
export interface EmailIdentityDependencies {
|
|
8
|
+
readonly identities: IdentityStoreService;
|
|
9
|
+
readonly users: UserStoreService;
|
|
10
|
+
readonly registration: RegistrationStoreService;
|
|
11
|
+
readonly identityKinds: IdentityKindRegistryService;
|
|
12
|
+
readonly crypto: CryptoService;
|
|
13
|
+
readonly identityIdBytes?: number;
|
|
14
|
+
readonly userIdBytes?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface EmailIdentityChallenge {
|
|
17
|
+
readonly identityId: IdentityId;
|
|
18
|
+
readonly email: Email;
|
|
19
|
+
readonly normalized: NormalizedLoginIdentity;
|
|
20
|
+
readonly pending: boolean;
|
|
21
|
+
readonly metadata: Readonly<Record<string, unknown>>;
|
|
22
|
+
}
|
|
23
|
+
export interface ResolvedEmailIdentity {
|
|
24
|
+
readonly user: UserRow;
|
|
25
|
+
readonly identity: UserIdentityRow;
|
|
26
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
27
|
+
}
|
|
28
|
+
export declare const prepareEmailIdentityChallenge: <E>(dependencies: EmailIdentityDependencies, identity: LoginIdentityInput, metadata: Readonly<Record<string, unknown>> | undefined, error: (message: string, cause?: unknown) => E) => Effect.Effect<EmailIdentityChallenge, E>;
|
|
29
|
+
export declare const resolveEmailIdentityChallenge: <E>(dependencies: EmailIdentityDependencies, subject: string, metadata: Readonly<Record<string, unknown>> | undefined, error: (message: string, cause?: unknown) => E) => Effect.Effect<ResolvedEmailIdentity | AuthResultOf<"AccountDisabled">, E>;
|
|
30
|
+
//# sourceMappingURL=EmailIdentityAuth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailIdentityAuth.d.ts","sourceRoot":"","sources":["../src/EmailIdentityAuth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAGxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EACV,2BAA2B,EAC3B,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAU,MAAM,kBAAkB,CAAC;AAE7D,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACxB,OAAO,EACP,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAOtB,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;IAChD,QAAQ,CAAC,aAAa,EAAE,2BAA2B,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAED,eAAO,MAAM,6BAA6B,GAAI,CAAC,gBAC/B,yBAAyB,YAC7B,kBAAkB,YAClB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,SAChD,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,KAC7C,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAuCtC,CAAC;AAcL,eAAO,MAAM,6BAA6B,GAAI,CAAC,gBAC/B,yBAAyB,WAC9B,MAAM,YACL,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,SAChD,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,KAC7C,MAAM,CAAC,MAAM,CAAC,qBAAqB,GAAG,YAAY,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAiGvE,CAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
// oxlint-disable complexity
|
|
2
|
+
import { Effect, Option } from "effect";
|
|
3
|
+
import { AuthResult } from "./AuthFlow.js";
|
|
4
|
+
import { globalIdentityScope } from "./Identity.js";
|
|
5
|
+
import { Email, IdentityId, UserId } from "./Identifiers.js";
|
|
6
|
+
import { currentUnixMillis } from "./Internal.js";
|
|
7
|
+
const identityIdKey = "emailIdentityId";
|
|
8
|
+
const normalizedValueKey = "emailNormalizedValue";
|
|
9
|
+
const pendingKey = "emailIdentityPending";
|
|
10
|
+
const metadataKey = "authMetadata";
|
|
11
|
+
export const prepareEmailIdentityChallenge = (dependencies, identity, metadata, error) => Effect.gen(function* () {
|
|
12
|
+
if (identity.kind !== "email" || identity.scope.type !== "global") {
|
|
13
|
+
return yield* Effect.fail(error("Email authentication requires a global email identity"));
|
|
14
|
+
}
|
|
15
|
+
const normalized = yield* dependencies.identityKinds
|
|
16
|
+
.normalize(identity)
|
|
17
|
+
.pipe(Effect.mapError((cause) => error("Invalid email identity", cause)));
|
|
18
|
+
if (normalized.kind !== "email" || normalized.scope.type !== "global") {
|
|
19
|
+
return yield* Effect.fail(error("Email authentication requires a global email identity"));
|
|
20
|
+
}
|
|
21
|
+
const found = yield* dependencies.identities
|
|
22
|
+
.findByKindAndNormalizedValue(normalized)
|
|
23
|
+
.pipe(Effect.mapError((cause) => error("Failed to load email identity", cause)));
|
|
24
|
+
const active = Option.isSome(found) &&
|
|
25
|
+
found.value.revokedAt === undefined &&
|
|
26
|
+
found.value.replacedById === undefined
|
|
27
|
+
? found.value
|
|
28
|
+
: undefined;
|
|
29
|
+
const identityId = active?.id ?? IdentityId(yield* dependencies.crypto
|
|
30
|
+
.randomToken(dependencies.identityIdBytes ?? 16)
|
|
31
|
+
.pipe(Effect.mapError((cause) => error("Failed to generate pending identity id", cause))));
|
|
32
|
+
const email = Email(normalized.normalizedValue);
|
|
33
|
+
const pending = active === undefined;
|
|
34
|
+
return {
|
|
35
|
+
identityId,
|
|
36
|
+
email,
|
|
37
|
+
normalized,
|
|
38
|
+
pending,
|
|
39
|
+
metadata: {
|
|
40
|
+
[identityIdKey]: identityId,
|
|
41
|
+
[normalizedValueKey]: normalized.normalizedValue,
|
|
42
|
+
[pendingKey]: pending,
|
|
43
|
+
...(metadata === undefined ? {} : { [metadataKey]: metadata }),
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
const activeIdentity = (identity, identityId, normalizedValue) => identity.id === identityId &&
|
|
48
|
+
identity.kind === "email" &&
|
|
49
|
+
identity.scope.type === "global" &&
|
|
50
|
+
identity.normalizedValue === normalizedValue &&
|
|
51
|
+
identity.revokedAt === undefined &&
|
|
52
|
+
identity.replacedById === undefined;
|
|
53
|
+
export const resolveEmailIdentityChallenge = (dependencies, subject, metadata, error) => Effect.gen(function* () {
|
|
54
|
+
const identityId = metadata?.[identityIdKey];
|
|
55
|
+
const normalizedValue = metadata?.[normalizedValueKey];
|
|
56
|
+
const pending = metadata?.[pendingKey];
|
|
57
|
+
const authMetadata = metadata?.[metadataKey];
|
|
58
|
+
if (typeof identityId !== "string" ||
|
|
59
|
+
typeof normalizedValue !== "string" ||
|
|
60
|
+
typeof pending !== "boolean" ||
|
|
61
|
+
subject !== identityId ||
|
|
62
|
+
(authMetadata !== undefined &&
|
|
63
|
+
(typeof authMetadata !== "object" || authMetadata === null || Array.isArray(authMetadata)))) {
|
|
64
|
+
return yield* Effect.fail(error("Email challenge has invalid identity metadata"));
|
|
65
|
+
}
|
|
66
|
+
const id = IdentityId(identityId);
|
|
67
|
+
let identity;
|
|
68
|
+
if (!pending) {
|
|
69
|
+
const found = yield* dependencies.identities.findById(id).pipe(Effect.mapError((cause) => error("Failed to load email identity", cause)));
|
|
70
|
+
if (Option.isNone(found) || !activeIdentity(found.value, id, normalizedValue)) {
|
|
71
|
+
return yield* Effect.fail(error("Email identity is no longer valid for this challenge"));
|
|
72
|
+
}
|
|
73
|
+
const user = yield* dependencies.users.findById(found.value.userId).pipe(Effect.mapError((cause) => error("Failed to load email identity owner", cause)));
|
|
74
|
+
if (Option.isNone(user)) {
|
|
75
|
+
return yield* Effect.fail(error("Email identity owner not found"));
|
|
76
|
+
}
|
|
77
|
+
if (user.value.disabledAt !== undefined) {
|
|
78
|
+
return AuthResult.AccountDisabled();
|
|
79
|
+
}
|
|
80
|
+
const verified = found.value.verifiedAt === undefined
|
|
81
|
+
? yield* dependencies.identities.markVerified({
|
|
82
|
+
id,
|
|
83
|
+
expectedNormalizedValue: normalizedValue,
|
|
84
|
+
verifiedAt: yield* currentUnixMillis,
|
|
85
|
+
}).pipe(Effect.mapError((cause) => error("Failed to verify email identity", cause)))
|
|
86
|
+
: found;
|
|
87
|
+
if (Option.isNone(verified) || !activeIdentity(verified.value, id, normalizedValue)) {
|
|
88
|
+
return yield* Effect.fail(error("Email identity changed before it could be verified"));
|
|
89
|
+
}
|
|
90
|
+
identity = verified.value;
|
|
91
|
+
return { user: user.value, identity, metadata: authMetadata };
|
|
92
|
+
}
|
|
93
|
+
const now = yield* currentUnixMillis;
|
|
94
|
+
const userId = UserId(yield* dependencies.crypto.randomToken(dependencies.userIdBytes ?? 16).pipe(Effect.mapError((cause) => error("Failed to generate user id", cause))));
|
|
95
|
+
const registered = yield* dependencies.registration.create({
|
|
96
|
+
user: { id: userId, createdAt: now, updatedAt: now },
|
|
97
|
+
identity: {
|
|
98
|
+
id,
|
|
99
|
+
userId,
|
|
100
|
+
scope: globalIdentityScope,
|
|
101
|
+
kind: "email",
|
|
102
|
+
value: normalizedValue,
|
|
103
|
+
normalizedValue,
|
|
104
|
+
verifiedAt: now,
|
|
105
|
+
isPrimaryLogin: true,
|
|
106
|
+
createdAt: now,
|
|
107
|
+
},
|
|
108
|
+
}).pipe(Effect.map(Option.some), Effect.catchTag("RegistrationConflictError", () => Effect.succeed(Option.none())), Effect.mapError((cause) => error("Failed to register email identity", cause)));
|
|
109
|
+
if (Option.isSome(registered)) {
|
|
110
|
+
return { user: registered.value.user, identity: registered.value.identity, metadata: authMetadata };
|
|
111
|
+
}
|
|
112
|
+
const winner = yield* dependencies.identities.findByKindAndNormalizedValue({
|
|
113
|
+
scope: globalIdentityScope,
|
|
114
|
+
kind: "email",
|
|
115
|
+
normalizedValue,
|
|
116
|
+
}).pipe(Effect.mapError((cause) => error("Failed to resolve concurrent email registration", cause)));
|
|
117
|
+
if (Option.isNone(winner) || winner.value.revokedAt !== undefined || winner.value.replacedById !== undefined) {
|
|
118
|
+
return yield* Effect.fail(error("Failed to register email identity"));
|
|
119
|
+
}
|
|
120
|
+
const owner = yield* dependencies.users.findById(winner.value.userId).pipe(Effect.mapError((cause) => error("Failed to load registered email identity owner", cause)));
|
|
121
|
+
if (Option.isNone(owner)) {
|
|
122
|
+
return yield* Effect.fail(error("Email identity owner not found"));
|
|
123
|
+
}
|
|
124
|
+
if (owner.value.disabledAt !== undefined) {
|
|
125
|
+
return AuthResult.AccountDisabled();
|
|
126
|
+
}
|
|
127
|
+
const verifiedWinner = winner.value.verifiedAt === undefined
|
|
128
|
+
? yield* dependencies.identities.markVerified({
|
|
129
|
+
id: winner.value.id,
|
|
130
|
+
expectedNormalizedValue: normalizedValue,
|
|
131
|
+
verifiedAt: now,
|
|
132
|
+
}).pipe(Effect.mapError((cause) => error("Failed to verify winning email identity", cause)))
|
|
133
|
+
: Option.some(winner.value);
|
|
134
|
+
if (Option.isNone(verifiedWinner) ||
|
|
135
|
+
verifiedWinner.value.revokedAt !== undefined ||
|
|
136
|
+
verifiedWinner.value.replacedById !== undefined) {
|
|
137
|
+
return yield* Effect.fail(error("Winning email identity changed before it could be verified"));
|
|
138
|
+
}
|
|
139
|
+
identity = verifiedWinner.value;
|
|
140
|
+
return { user: owner.value, identity, metadata: authMetadata };
|
|
141
|
+
});
|
|
142
|
+
//# sourceMappingURL=EmailIdentityAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailIdentityAuth.js","sourceRoot":"","sources":["../src/EmailIdentityAuth.ts"],"names":[],"mappings":"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"}
|
package/dist/EmailOtp.d.ts
CHANGED
|
@@ -7,13 +7,15 @@ import { Crypto } from "./Crypto.js";
|
|
|
7
7
|
import type { CryptoService } from "./Crypto.js";
|
|
8
8
|
import type { ChallengeId, UnixMillis } from "./Identifiers.js";
|
|
9
9
|
import { Email } from "./Identifiers.js";
|
|
10
|
+
import { IdentityKindRegistry } from "./Identity.js";
|
|
11
|
+
import type { IdentityKindRegistryService, LoginIdentityInput } from "./Identity.js";
|
|
10
12
|
import type { LoginRequestContext } from "./LoginRisk.js";
|
|
11
13
|
import { AuthMailer } from "./Mailer.js";
|
|
12
14
|
import type { AuthMailerService } from "./Mailer.js";
|
|
13
|
-
import { UserStore } from "./Storage.js";
|
|
14
|
-
import type { UserStoreService } from "./Storage.js";
|
|
15
|
+
import { IdentityStore, RegistrationStore, UserStore } from "./Storage.js";
|
|
16
|
+
import type { IdentityStoreService, RegistrationStoreService, UserStoreService } from "./Storage.js";
|
|
15
17
|
export interface EmailOtpStartInput {
|
|
16
|
-
readonly
|
|
18
|
+
readonly identity: LoginIdentityInput;
|
|
17
19
|
readonly secret?: Redacted.Redacted<string>;
|
|
18
20
|
readonly ttl?: Duration.Duration;
|
|
19
21
|
readonly locale?: string;
|
|
@@ -65,9 +67,6 @@ export interface EmailOtpLoginService {
|
|
|
65
67
|
declare const EmailOtpLogin_base: Context.ServiceClass<EmailOtpLogin, "auth/login/EmailOtp", EmailOtpLoginService>;
|
|
66
68
|
export declare class EmailOtpLogin extends EmailOtpLogin_base {
|
|
67
69
|
}
|
|
68
|
-
export declare namespace EmailOtpLogin {
|
|
69
|
-
const make: (service: EmailOtpLoginService) => EmailOtpLoginService;
|
|
70
|
-
}
|
|
71
70
|
export interface EmailOtpSecretGenerateInput {
|
|
72
71
|
readonly email: Email;
|
|
73
72
|
readonly locale?: string;
|
|
@@ -86,9 +85,6 @@ export interface EmailOtpSecretGeneratorService {
|
|
|
86
85
|
declare const EmailOtpSecretGenerator_base: Context.ServiceClass<EmailOtpSecretGenerator, "auth/email-otp/SecretGenerator", EmailOtpSecretGeneratorService>;
|
|
87
86
|
export declare class EmailOtpSecretGenerator extends EmailOtpSecretGenerator_base {
|
|
88
87
|
}
|
|
89
|
-
export declare namespace EmailOtpSecretGenerator {
|
|
90
|
-
const make: (service: EmailOtpSecretGeneratorService) => EmailOtpSecretGeneratorService;
|
|
91
|
-
}
|
|
92
88
|
export interface EmailOtpSecretGeneratorOptions {
|
|
93
89
|
readonly alphabet?: string;
|
|
94
90
|
readonly length?: number;
|
|
@@ -100,6 +96,9 @@ export interface EmailOtpOptions extends EmailOtpSecretGeneratorOptions {
|
|
|
100
96
|
export interface EmailOtpDependencies extends EmailOtpOptions {
|
|
101
97
|
readonly challenge: ChallengeService;
|
|
102
98
|
readonly users: UserStoreService;
|
|
99
|
+
readonly identities: IdentityStoreService;
|
|
100
|
+
readonly registration: RegistrationStoreService;
|
|
101
|
+
readonly identityKinds: IdentityKindRegistryService;
|
|
103
102
|
readonly crypto: CryptoService;
|
|
104
103
|
readonly authFlow: AuthFlowService;
|
|
105
104
|
readonly authMailer: AuthMailerService;
|
|
@@ -114,7 +113,7 @@ export interface AlphabetEmailOtpSecretGeneratorDependencies extends EmailOtpSec
|
|
|
114
113
|
export declare const makeAlphabetEmailOtpSecretGenerator: (dependencies: AlphabetEmailOtpSecretGeneratorDependencies) => EmailOtpSecretGeneratorService;
|
|
115
114
|
export declare const EmailOtpSecretGeneratorLive: (options?: EmailOtpSecretGeneratorOptions) => Layer.Layer<EmailOtpSecretGenerator, never, Crypto>;
|
|
116
115
|
export declare const makeEmailOtpLogin: (dependencies: EmailOtpDependencies) => EmailOtpLoginService;
|
|
117
|
-
export declare const EmailOtpLoginLive: (options?: EmailOtpOptions) => Layer.Layer<EmailOtpLogin, never,
|
|
118
|
-
export declare const
|
|
116
|
+
export declare const EmailOtpLoginLive: (options?: EmailOtpOptions) => Layer.Layer<EmailOtpLogin, never, AuthFlow | AuthMailer | Challenge | Crypto | EmailOtpSecretGenerator | IdentityKindRegistry | IdentityStore | RegistrationStore | UserStore>;
|
|
117
|
+
export declare const EmailOtpDefaultLive: (options?: EmailOtpOptions) => Layer.Layer<EmailOtpLogin | EmailOtpSecretGenerator, never, AuthFlow | AuthMailer | Challenge | Crypto | IdentityKindRegistry | IdentityStore | RegistrationStore | UserStore>;
|
|
119
118
|
export {};
|
|
120
119
|
//# sourceMappingURL=EmailOtp.d.ts.map
|
package/dist/EmailOtp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmailOtp.d.ts","sourceRoot":"","sources":["../src/EmailOtp.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAEP,QAAQ,EACR,MAAM,EACN,KAAK,EAEL,QAAQ,EACT,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"EmailOtp.d.ts","sourceRoot":"","sources":["../src/EmailOtp.ts"],"names":[],"mappings":"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"}
|