@spfn/auth 0.2.1 → 0.3.0-beta.2
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 +1 -1
- package/README.md +1091 -2385
- package/dist/authenticate-55LeXHqZ.d.ts +1447 -0
- package/dist/client-proof.d.ts +606 -0
- package/dist/client-proof.js +1842 -0
- package/dist/client-proof.js.map +1 -0
- package/dist/config.d.ts +319 -3
- package/dist/config.js +155 -5
- package/dist/config.js.map +1 -1
- package/dist/crypto.d.ts +61 -0
- package/dist/crypto.js +108 -0
- package/dist/crypto.js.map +1 -0
- package/dist/errors.d.ts +180 -3
- package/dist/errors.js +116 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +166 -18
- package/dist/index.js +132 -8
- package/dist/index.js.map +1 -1
- package/dist/nextjs/api.js +404 -96
- package/dist/nextjs/api.js.map +1 -1
- package/dist/nextjs/server.d.ts +5 -4
- package/dist/nextjs/server.js +165 -26
- package/dist/nextjs/server.js.map +1 -1
- package/dist/server.d.ts +2356 -1053
- package/dist/server.js +5153 -736
- package/dist/server.js.map +1 -1
- package/dist/session-DTHahDQ9.d.ts +53 -0
- package/dist/types-DYyhze28.d.ts +98 -0
- package/dist/wire-version-CtzMKvBB.d.ts +134 -0
- package/migrations/20251125021229_premium_famine/snapshot.json +2641 -0
- package/migrations/20260225130050_smooth_the_fury/snapshot.json +2686 -0
- package/migrations/20260308141417_deep_iceman/snapshot.json +2686 -0
- package/migrations/20260308151309_perfect_deathbird/snapshot.json +2731 -0
- package/migrations/20260308201135_concerned_rawhide_kid/snapshot.json +2786 -0
- package/migrations/20260629103209_lethal_lifeguard/migration.sql +32 -0
- package/migrations/20260629103209_lethal_lifeguard/snapshot.json +2786 -0
- package/migrations/20260709073531_easy_hardball/migration.sql +24 -0
- package/migrations/20260709073531_easy_hardball/snapshot.json +3119 -0
- package/migrations/20260714081434_glossy_major_mapleleaf/migration.sql +1 -0
- package/migrations/20260714081434_glossy_major_mapleleaf/snapshot.json +3112 -0
- package/migrations/20260804105939_amazing_bushwacker/migration.sql +3 -0
- package/migrations/20260804105939_amazing_bushwacker/snapshot.json +3112 -0
- package/migrations/20260804110033_fat_piledriver/migration.sql +2 -0
- package/migrations/20260804110033_fat_piledriver/snapshot.json +3138 -0
- package/migrations/20260805143152_vengeful_ravenous/migration.sql +4 -0
- package/migrations/20260805143152_vengeful_ravenous/snapshot.json +3190 -0
- package/migrations/20260807145911_mixed_invisible_woman/migration.sql +11 -0
- package/migrations/20260807145911_mixed_invisible_woman/snapshot.json +3334 -0
- package/package.json +59 -40
- package/dist/authenticate-eucncHxN.d.ts +0 -940
- package/migrations/meta/0000_snapshot.json +0 -1632
- package/migrations/meta/0001_snapshot.json +0 -1660
- package/migrations/meta/0002_snapshot.json +0 -1660
- package/migrations/meta/0003_snapshot.json +0 -1689
- package/migrations/meta/0004_snapshot.json +0 -1721
- package/migrations/meta/_journal.json +0 -41
- /package/migrations/{0000_premium_famine.sql → 20251125021229_premium_famine/migration.sql} +0 -0
- /package/migrations/{0001_smooth_the_fury.sql → 20260225130050_smooth_the_fury/migration.sql} +0 -0
- /package/migrations/{0002_deep_iceman.sql → 20260308141417_deep_iceman/migration.sql} +0 -0
- /package/migrations/{0003_perfect_deathbird.sql → 20260308151309_perfect_deathbird/migration.sql} +0 -0
- /package/migrations/{0004_concerned_rawhide_kid.sql → 20260308201135_concerned_rawhide_kid/migration.sql} +0 -0
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors/index.ts","../src/errors/auth-errors.ts"],"sourcesContent":["/**\n * Auth Error Exports\n */\n\nimport { ErrorRegistry } from \"@spfn/core/errors\";\n\nimport {\n InvalidCredentialsError,\n InvalidTokenError,\n TokenExpiredError,\n KeyExpiredError,\n AccountDisabledError,\n AccountAlreadyExistsError,\n ReservedUsernameError,\n UsernameAlreadyTakenError,\n InvalidVerificationCodeError,\n InvalidVerificationTokenError,\n InvalidKeyFingerprintError,\n VerificationTokenPurposeMismatchError,\n VerificationTokenTargetMismatchError,\n InsufficientPermissionsError,\n InsufficientRoleError,\n} from './auth-errors';\n\nexport {\n InvalidCredentialsError,\n InvalidTokenError,\n TokenExpiredError,\n KeyExpiredError,\n AccountDisabledError,\n AccountAlreadyExistsError,\n ReservedUsernameError,\n UsernameAlreadyTakenError,\n InvalidVerificationCodeError,\n InvalidVerificationTokenError,\n InvalidKeyFingerprintError,\n VerificationTokenPurposeMismatchError,\n VerificationTokenTargetMismatchError,\n InsufficientPermissionsError,\n InsufficientRoleError,\n} from './auth-errors';\n\nexport const authErrorRegistry = new ErrorRegistry();\nauthErrorRegistry.append([\n InvalidCredentialsError,\n InvalidTokenError,\n TokenExpiredError,\n KeyExpiredError,\n AccountDisabledError,\n AccountAlreadyExistsError,\n ReservedUsernameError,\n UsernameAlreadyTakenError,\n InvalidVerificationCodeError,\n InvalidVerificationTokenError,\n InvalidKeyFingerprintError,\n VerificationTokenPurposeMismatchError,\n VerificationTokenTargetMismatchError,\n InsufficientPermissionsError,\n InsufficientRoleError,\n]);\n\nexport * as AuthError from './auth-errors';","/**\n * Authentication & Authorization Error Classes\n *\n * Custom error classes for auth-specific scenarios\n */\n\nimport {\n ValidationError,\n UnauthorizedError,\n ForbiddenError,\n ConflictError\n} from '@spfn/core/errors';\n\n/**\n * Invalid Credentials Error (401)\n *\n * Thrown when login credentials are incorrect\n */\nexport class InvalidCredentialsError extends UnauthorizedError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Invalid credentials', details: data.details });\n this.name = 'InvalidCredentialsError';\n }\n}\n\n/**\n * Invalid Token Error (401)\n *\n * Thrown when authentication token is invalid or malformed\n */\nexport class InvalidTokenError extends UnauthorizedError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Invalid authentication token', details: data.details });\n this.name = 'InvalidTokenError';\n }\n}\n\n/**\n * Token Expired Error (401)\n *\n * Thrown when authentication token has expired\n */\nexport class TokenExpiredError extends UnauthorizedError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Authentication token has expired', details: data.details });\n this.name = 'TokenExpiredError';\n }\n}\n\n/**\n * Key Expired Error (401)\n *\n * Thrown when public key has expired\n */\nexport class KeyExpiredError extends UnauthorizedError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Public key has expired', details: data.details });\n this.name = 'KeyExpiredError';\n }\n}\n\n/**\n * Account Disabled Error (403)\n *\n * Thrown when user account is disabled or inactive\n */\nexport class AccountDisabledError extends ForbiddenError\n{\n constructor(data: { status?: string; message?: string; details?: Record<string, any> } = {})\n {\n const status = data.status || 'disabled';\n super({\n message: data.message || `Account is ${status}`,\n details: { status, ...data.details }\n });\n this.name = 'AccountDisabledError';\n }\n}\n\n/**\n * Account Already Exists Error (409)\n *\n * Thrown when trying to register with existing email/phone\n */\nexport class AccountAlreadyExistsError extends ConflictError\n{\n constructor(data: { identifier?: string; identifierType?: 'email' | 'phone'; message?: string; details?: Record<string, any> } = {})\n {\n super({\n message: data.message || 'Account already exists',\n details: {\n identifier: data.identifier,\n identifierType: data.identifierType,\n ...data.details\n }\n });\n this.name = 'AccountAlreadyExistsError';\n }\n}\n\n/**\n * Invalid Verification Code Error (400)\n *\n * Thrown when verification code is invalid, expired, or already used\n */\nexport class InvalidVerificationCodeError extends ValidationError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Invalid verification code', details: data.details });\n this.name = 'InvalidVerificationCodeError';\n }\n}\n\n/**\n * Invalid Verification Token Error (400)\n *\n * Thrown when verification token is invalid or expired\n */\nexport class InvalidVerificationTokenError extends ValidationError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Invalid or expired verification token', details: data.details });\n this.name = 'InvalidVerificationTokenError';\n }\n}\n\n/**\n * Invalid Key Fingerprint Error (400)\n *\n * Thrown when public key fingerprint doesn't match the public key\n */\nexport class InvalidKeyFingerprintError extends ValidationError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Invalid key fingerprint', details: data.details });\n this.name = 'InvalidKeyFingerprintError';\n }\n}\n\n/**\n * Verification Token Purpose Mismatch Error (400)\n *\n * Thrown when verification token purpose doesn't match expected purpose\n */\nexport class VerificationTokenPurposeMismatchError extends ValidationError\n{\n constructor(data: { expected?: string; actual?: string; message?: string; details?: Record<string, any> } = {})\n {\n const expected = data.expected || 'unknown';\n const actual = data.actual || 'unknown';\n super({\n message: data.message || `Verification token is for ${actual}, but ${expected} was expected`,\n details: { expected, actual, ...data.details }\n });\n this.name = 'VerificationTokenPurposeMismatchError';\n }\n}\n\n/**\n * Verification Token Target Mismatch Error (400)\n *\n * Thrown when verification token target doesn't match provided email/phone\n */\nexport class VerificationTokenTargetMismatchError extends ValidationError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({\n message: data.message || 'Verification token does not match provided email/phone',\n details: data.details\n });\n this.name = 'VerificationTokenTargetMismatchError';\n }\n}\n\n/**\n * Reserved Username Error (400)\n *\n * Thrown when trying to use a reserved/prohibited username\n */\nexport class ReservedUsernameError extends ValidationError\n{\n constructor(data: { username?: string; message?: string; details?: Record<string, any> } = {})\n {\n super({\n message: data.message || 'This username is reserved',\n details: { username: data.username, ...data.details }\n });\n this.name = 'ReservedUsernameError';\n }\n}\n\n/**\n * Username Already Taken Error (409)\n *\n * Thrown when trying to set a username that is already in use\n */\nexport class UsernameAlreadyTakenError extends ConflictError\n{\n constructor(data: { username?: string; message?: string; details?: Record<string, any> } = {})\n {\n super({\n message: data.message || 'Username is already taken',\n details: { username: data.username, ...data.details }\n });\n this.name = 'UsernameAlreadyTakenError';\n }\n}\n\n/**\n * Insufficient Permissions Error (403)\n *\n * Thrown when user lacks required permissions for the operation\n */\nexport class InsufficientPermissionsError extends ForbiddenError\n{\n constructor(data: { requiredPermissions?: string[]; message?: string; details?: Record<string, any> } = {})\n {\n const requiredPermissions = data.requiredPermissions || [];\n super({\n message: data.message || `Missing required permissions: ${requiredPermissions.join(', ')}`,\n details: { requiredPermissions, ...data.details }\n });\n this.name = 'InsufficientPermissionsError';\n }\n}\n\n/**\n * Insufficient Role Error (403)\n *\n * Thrown when user lacks required role for the operation\n */\nexport class InsufficientRoleError extends ForbiddenError\n{\n constructor(data: { requiredRoles?: string[]; message?: string; details?: Record<string, any> } = {})\n {\n const requiredRoles = data.requiredRoles || [];\n super({\n message: data.message || `Required roles: ${requiredRoles.join(', ')}`,\n details: { requiredRoles, ...data.details }\n });\n this.name = 'InsufficientRoleError';\n }\n}"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/errors/index.ts","../src/errors/auth-errors.ts"],"sourcesContent":["/**\n * Auth Error Exports\n */\n\nimport { ErrorRegistry } from '@spfn/core/errors';\n\nimport {\n InvalidCredentialsError,\n InvalidTokenError,\n InvalidSocialTokenError,\n TokenExpiredError,\n KeyExpiredError,\n AccountDisabledError,\n AccountPendingDeletionError,\n DeletionAlreadyRequestedError,\n DeletionNotRequestedError,\n ImmediateDeletionNotAllowedError,\n AccountAlreadyExistsError,\n RegistrationRejectedError,\n ReservedUsernameError,\n UsernameAlreadyTakenError,\n InvalidVerificationCodeError,\n InvalidVerificationTokenError,\n InvalidKeyFingerprintError,\n NonceKeyBindingError,\n NativeSignInUnsupportedError,\n UnverifiedEmailLinkError,\n KeyNotFoundError,\n KeyIdAlreadyRegisteredError,\n VerificationTokenPurposeMismatchError,\n VerificationTokenTargetMismatchError,\n InsufficientPermissionsError,\n InsufficientRoleError,\n} from './auth-errors';\n\nexport {\n InvalidCredentialsError,\n InvalidTokenError,\n InvalidSocialTokenError,\n TokenExpiredError,\n KeyExpiredError,\n AccountDisabledError,\n AccountPendingDeletionError,\n DeletionAlreadyRequestedError,\n DeletionNotRequestedError,\n ImmediateDeletionNotAllowedError,\n AccountAlreadyExistsError,\n RegistrationRejectedError,\n ReservedUsernameError,\n UsernameAlreadyTakenError,\n InvalidVerificationCodeError,\n InvalidVerificationTokenError,\n InvalidKeyFingerprintError,\n NonceKeyBindingError,\n NativeSignInUnsupportedError,\n UnverifiedEmailLinkError,\n KeyNotFoundError,\n KeyIdAlreadyRegisteredError,\n VerificationTokenPurposeMismatchError,\n VerificationTokenTargetMismatchError,\n InsufficientPermissionsError,\n InsufficientRoleError,\n} from './auth-errors';\n\nexport const authErrorRegistry = new ErrorRegistry();\nauthErrorRegistry.append([\n InvalidCredentialsError,\n InvalidTokenError,\n InvalidSocialTokenError,\n TokenExpiredError,\n KeyExpiredError,\n AccountDisabledError,\n AccountPendingDeletionError,\n DeletionAlreadyRequestedError,\n DeletionNotRequestedError,\n ImmediateDeletionNotAllowedError,\n AccountAlreadyExistsError,\n RegistrationRejectedError,\n ReservedUsernameError,\n UsernameAlreadyTakenError,\n InvalidVerificationCodeError,\n InvalidVerificationTokenError,\n InvalidKeyFingerprintError,\n NonceKeyBindingError,\n NativeSignInUnsupportedError,\n UnverifiedEmailLinkError,\n KeyNotFoundError,\n KeyIdAlreadyRegisteredError,\n VerificationTokenPurposeMismatchError,\n VerificationTokenTargetMismatchError,\n InsufficientPermissionsError,\n InsufficientRoleError,\n]);\n\nexport * as AuthError from './auth-errors';\n","/**\n * Authentication & Authorization Error Classes\n *\n * Custom error classes for auth-specific scenarios\n */\n\nimport {\n ValidationError,\n UnauthorizedError,\n ForbiddenError,\n ConflictError,\n NotFoundError,\n} from '@spfn/core/errors';\n\n/**\n * Invalid Credentials Error (401)\n *\n * Thrown when login credentials are incorrect\n */\nexport class InvalidCredentialsError extends UnauthorizedError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Invalid credentials', details: data.details });\n this.name = 'InvalidCredentialsError';\n }\n}\n\n/**\n * Invalid Token Error (401)\n *\n * Thrown when authentication token is invalid or malformed\n */\nexport class InvalidTokenError extends UnauthorizedError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Invalid authentication token', details: data.details });\n this.name = 'InvalidTokenError';\n }\n}\n\n/**\n * Invalid Social Token Error (401)\n *\n * Thrown when a social provider id_token fails verification\n * (bad signature, wrong issuer/audience, expired, or nonce mismatch).\n */\nexport class InvalidSocialTokenError extends UnauthorizedError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Invalid social id_token', details: data.details });\n this.name = 'InvalidSocialTokenError';\n }\n}\n\n/**\n * Token Expired Error (401)\n *\n * Thrown when authentication token has expired\n */\nexport class TokenExpiredError extends UnauthorizedError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Authentication token has expired', details: data.details });\n this.name = 'TokenExpiredError';\n }\n}\n\n/**\n * Key Expired Error (401)\n *\n * Thrown when public key has expired\n */\nexport class KeyExpiredError extends UnauthorizedError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Public key has expired', details: data.details });\n this.name = 'KeyExpiredError';\n }\n}\n\n/**\n * Account Disabled Error (403)\n *\n * Thrown when user account is disabled or inactive\n */\nexport class AccountDisabledError extends ForbiddenError\n{\n constructor(data: { status?: string; message?: string; details?: Record<string, any> } = {})\n {\n const status = data.status || 'disabled';\n super({\n message: data.message || `Account is ${status}`,\n details: { status, ...data.details },\n });\n this.name = 'AccountDisabledError';\n }\n}\n\n/**\n * Account Pending Deletion Error (403)\n *\n * Thrown on login (password/OAuth/authenticate) when the account is within its\n * deletion grace period. Carries `purgeScheduledAt` so the client can offer a\n * recovery flow instead of a generic \"disabled\" message.\n */\nexport class AccountPendingDeletionError extends ForbiddenError\n{\n constructor(data: { purgeScheduledAt?: string; message?: string; details?: Record<string, any> } = {})\n {\n super({\n message: data.message || 'Account is scheduled for deletion',\n details: { status: 'pending_deletion', purgeScheduledAt: data.purgeScheduledAt, ...data.details },\n });\n this.name = 'AccountPendingDeletionError';\n }\n}\n\n/**\n * Deletion Already Requested Error (409)\n *\n * Thrown when requesting deletion for an account that already has a pending\n * deletion request (or has already been purged).\n */\nexport class DeletionAlreadyRequestedError extends ConflictError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Account deletion has already been requested', details: data.details });\n this.name = 'DeletionAlreadyRequestedError';\n }\n}\n\n/**\n * Deletion Not Requested Error (404)\n *\n * Thrown when trying to cancel/purge a deletion for an account that has no\n * pending deletion request.\n */\nexport class DeletionNotRequestedError extends NotFoundError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'No pending account deletion request found', details: data.details });\n this.name = 'DeletionNotRequestedError';\n }\n}\n\n/**\n * Immediate Deletion Not Allowed Error (403)\n *\n * Thrown when a self-service caller requests `immediate: true` but the server\n * has not enabled `deletion.allowSelfImmediate`.\n */\nexport class ImmediateDeletionNotAllowedError extends ForbiddenError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Immediate self-service deletion is not enabled', details: data.details });\n this.name = 'ImmediateDeletionNotAllowedError';\n }\n}\n\n/**\n * Account Already Exists Error (409)\n *\n * Thrown when trying to register with existing email/phone\n */\nexport class AccountAlreadyExistsError extends ConflictError\n{\n constructor(data: { identifier?: string; identifierType?: 'email' | 'phone'; message?: string; details?: Record<string, any> } = {})\n {\n super({\n message: data.message || 'Account already exists',\n details: {\n identifier: data.identifier,\n identifierType: data.identifierType,\n ...data.details,\n },\n });\n this.name = 'AccountAlreadyExistsError';\n }\n}\n\n/**\n * Registration Rejected Error (403)\n *\n * Thrown by the app-injected beforeRegister hook to reject a registration\n * (age gate, domain restriction, block list, ...)\n */\nexport class RegistrationRejectedError extends ForbiddenError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Registration rejected', details: data.details });\n this.name = 'RegistrationRejectedError';\n }\n}\n\n/**\n * Invalid Verification Code Error (400)\n *\n * Thrown when verification code is invalid, expired, or already used\n */\nexport class InvalidVerificationCodeError extends ValidationError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Invalid verification code', details: data.details });\n this.name = 'InvalidVerificationCodeError';\n }\n}\n\n/**\n * Invalid Verification Token Error (400)\n *\n * Thrown when verification token is invalid or expired\n */\nexport class InvalidVerificationTokenError extends ValidationError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Invalid or expired verification token', details: data.details });\n this.name = 'InvalidVerificationTokenError';\n }\n}\n\n/**\n * Key ID Already Registered Error (409)\n *\n * Thrown when a sign-in submits a keyId that is already taken — the client's own\n * revoked keyId, or a keyId belonging to another user. `keyId` is unique across\n * all users, so either case would collide on insert.\n *\n * The same error covers both cases on purpose: a distinguishable response would\n * let a caller probe whether an arbitrary keyId exists. Revoked stays revoked —\n * the client must generate a fresh keyId and retry.\n */\nexport class KeyIdAlreadyRegisteredError extends ConflictError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({\n message: data.message || 'This keyId is already registered. Generate a new keyId and retry.',\n details: data.details,\n });\n this.name = 'KeyIdAlreadyRegisteredError';\n }\n}\n\n/**\n * Invalid Key Fingerprint Error (400)\n *\n * Thrown when public key fingerprint doesn't match the public key\n */\nexport class InvalidKeyFingerprintError extends ValidationError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Invalid key fingerprint', details: data.details });\n this.name = 'InvalidKeyFingerprintError';\n }\n}\n\n/**\n * Key Not Found Error (404)\n *\n * Thrown when a key operation names a keyId the caller does not own. It says\n * nothing about whether that keyId exists on another account — the repository\n * scopes every lookup by userId, so the answer is only ever \"not yours\".\n */\nexport class KeyNotFoundError extends NotFoundError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({ message: data.message || 'Key not found', details: data.details });\n this.name = 'KeyNotFoundError';\n }\n}\n\n/**\n * Nonce Key Binding Error (400)\n *\n * Thrown when a native id_token sign-in submits a nonce that is not the public\n * key's fingerprint. The nonce is what the provider echoed back inside the\n * id_token, so tying it to the key is what proves the id_token and the key came\n * from the same device — see the native section of the README.\n */\nexport class NonceKeyBindingError extends ValidationError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({\n message: data.message || 'nonce must be the fingerprint of the submitted public key',\n details: data.details,\n });\n this.name = 'NonceKeyBindingError';\n }\n}\n\n/**\n * Native Sign-In Unsupported Error (400)\n *\n * Thrown when a provider is asked for native id_token sign-in and has no\n * implementation for it — a server configuration fact, not something the user\n * did. A client reading this hides that provider's native button instead of\n * asking the user to try again.\n *\n * Split out of ValidationError because the other native-enrollment refusal\n * (linking to an account whose email the provider never verified) needs a\n * different response from the app, and one code cannot ask for two.\n */\nexport class NativeSignInUnsupportedError extends ValidationError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({\n message: data.message || 'This provider does not support native id_token sign-in.',\n details: data.details,\n });\n this.name = 'NativeSignInUnsupportedError';\n }\n}\n\n/**\n * Unverified Email Link Error (400)\n *\n * Thrown when a social identity carries an email that already belongs to an\n * account, but the provider never verified it. Linking on an unverified email\n * is account takeover, so the refusal stands and the user is sent to a path\n * that proves the address.\n *\n * This says an account exists for that address. It is not a leak introduced\n * here: the message this replaces already stated the same fact in prose, and\n * the paths that must not disclose account existence (password login, deletion\n * re-auth, verification issuance) answer uniformly and are untouched.\n */\nexport class UnverifiedEmailLinkError extends ValidationError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({\n message: data.message\n || 'Cannot link to existing account with unverified email. Please verify your email with the provider first.',\n details: data.details,\n });\n this.name = 'UnverifiedEmailLinkError';\n }\n}\n\n/**\n * Verification Token Purpose Mismatch Error (400)\n *\n * Thrown when verification token purpose doesn't match expected purpose\n */\nexport class VerificationTokenPurposeMismatchError extends ValidationError\n{\n constructor(data: { expected?: string; actual?: string; message?: string; details?: Record<string, any> } = {})\n {\n const expected = data.expected || 'unknown';\n const actual = data.actual || 'unknown';\n super({\n message: data.message || `Verification token is for ${actual}, but ${expected} was expected`,\n details: { expected, actual, ...data.details },\n });\n this.name = 'VerificationTokenPurposeMismatchError';\n }\n}\n\n/**\n * Verification Token Target Mismatch Error (400)\n *\n * Thrown when verification token target doesn't match provided email/phone\n */\nexport class VerificationTokenTargetMismatchError extends ValidationError\n{\n constructor(data: { message?: string; details?: Record<string, any> } = {})\n {\n super({\n message: data.message || 'Verification token does not match provided email/phone',\n details: data.details,\n });\n this.name = 'VerificationTokenTargetMismatchError';\n }\n}\n\n/**\n * Reserved Username Error (400)\n *\n * Thrown when trying to use a reserved/prohibited username\n */\nexport class ReservedUsernameError extends ValidationError\n{\n constructor(data: { username?: string; message?: string; details?: Record<string, any> } = {})\n {\n super({\n message: data.message || 'This username is reserved',\n details: { username: data.username, ...data.details },\n });\n this.name = 'ReservedUsernameError';\n }\n}\n\n/**\n * Username Already Taken Error (409)\n *\n * Thrown when trying to set a username that is already in use\n */\nexport class UsernameAlreadyTakenError extends ConflictError\n{\n constructor(data: { username?: string; message?: string; details?: Record<string, any> } = {})\n {\n super({\n message: data.message || 'Username is already taken',\n details: { username: data.username, ...data.details },\n });\n this.name = 'UsernameAlreadyTakenError';\n }\n}\n\n/**\n * Insufficient Permissions Error (403)\n *\n * Thrown when user lacks required permissions for the operation\n */\nexport class InsufficientPermissionsError extends ForbiddenError\n{\n constructor(data: { requiredPermissions?: string[]; message?: string; details?: Record<string, any> } = {})\n {\n const requiredPermissions = data.requiredPermissions || [];\n super({\n message: data.message || `Missing required permissions: ${requiredPermissions.join(', ')}`,\n details: { requiredPermissions, ...data.details },\n });\n this.name = 'InsufficientPermissionsError';\n }\n}\n\n/**\n * Insufficient Role Error (403)\n *\n * Thrown when user lacks required role for the operation\n */\nexport class InsufficientRoleError extends ForbiddenError\n{\n constructor(data: { requiredRoles?: string[]; message?: string; details?: Record<string, any> } = {})\n {\n const requiredRoles = data.requiredRoles || [];\n super({\n message: data.message || `Required roles: ${requiredRoles.join(', ')}`,\n details: { requiredRoles, ...data.details },\n });\n this.name = 'InsufficientRoleError';\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import * as _spfn_core_nextjs from '@spfn/core/nextjs';
|
|
2
|
-
import {
|
|
3
|
-
export {
|
|
2
|
+
import { P as PermissionConfig, R as RoleConfig, m as mainAuthRouter, S as SendVerificationCodeResult, a as RegisterResult, L as LoginResult, b as RotateKeyResult, K as KeySummary, c as RevokeAllKeysResult, I as IssueOneTimeTokenResult, O as OAuthStartResult, d as OAuthNativeResult, U as UserProfile, e as ProfileInfo } from './authenticate-55LeXHqZ.js';
|
|
3
|
+
export { A as AuthInitOptions, f as AuthSession, g as PERMISSION_CATEGORIES, h as PermissionCategory, V as VERIFICATION_PURPOSES, i as VERIFICATION_TARGET_TYPES, j as VerificationPurpose, k as VerificationTargetType } from './authenticate-55LeXHqZ.js';
|
|
4
4
|
import * as _spfn_core_route from '@spfn/core/route';
|
|
5
5
|
import { HttpMethod } from '@spfn/core/route';
|
|
6
|
+
export { A as ACCOUNT_DELETION_REQUESTED_BY, a as ACCOUNT_DELETION_REQUEST_STATUSES, b as AccountDeletionRequestStatus, c as AccountDeletionRequestedBy, I as INVITATION_STATUSES, d as InvitationStatus, e as KEY_ALGORITHM, f as KEY_DEVICE_NAME_MAX_LENGTH, g as KEY_PLATFORM, K as KeyAlgorithmType, h as KeyPlatformType, P as PURGE_STRATEGIES, i as PurgeStrategy, S as SOCIAL_PROVIDERS, j as SocialProvider, U as USER_STATUSES, k as UserStatus } from './types-DYyhze28.js';
|
|
6
7
|
import * as _sinclair_typebox from '@sinclair/typebox';
|
|
8
|
+
import 'hono';
|
|
7
9
|
import '@spfn/auth/server';
|
|
8
10
|
|
|
9
11
|
/**
|
|
@@ -87,18 +89,11 @@ declare const routeMap: Record<string, RouteInfo>;
|
|
|
87
89
|
* ```
|
|
88
90
|
*/
|
|
89
91
|
declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
90
|
-
checkAccountExists: _spfn_core_route.RouteDef<{
|
|
91
|
-
body: _sinclair_typebox.TUnion<[_sinclair_typebox.TObject<{
|
|
92
|
-
email: _sinclair_typebox.TString;
|
|
93
|
-
}>, _sinclair_typebox.TObject<{
|
|
94
|
-
phone: _sinclair_typebox.TString;
|
|
95
|
-
}>]>;
|
|
96
|
-
}, {}, CheckAccountExistsResult>;
|
|
97
92
|
sendVerificationCode: _spfn_core_route.RouteDef<{
|
|
98
93
|
body: _sinclair_typebox.TObject<{
|
|
99
94
|
target: _sinclair_typebox.TString;
|
|
100
95
|
targetType: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"email">, _sinclair_typebox.TLiteral<"phone">]>;
|
|
101
|
-
purpose: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"registration">, _sinclair_typebox.TLiteral<"login">, _sinclair_typebox.TLiteral<"password_reset">, _sinclair_typebox.TLiteral<"email_change">, _sinclair_typebox.TLiteral<"phone_change">]>;
|
|
96
|
+
purpose: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"registration">, _sinclair_typebox.TLiteral<"login">, _sinclair_typebox.TLiteral<"password_reset">, _sinclair_typebox.TLiteral<"email_change">, _sinclair_typebox.TLiteral<"phone_change">, _sinclair_typebox.TLiteral<"account_deletion">]>;
|
|
102
97
|
}>;
|
|
103
98
|
}, {}, SendVerificationCodeResult>;
|
|
104
99
|
verifyCode: _spfn_core_route.RouteDef<{
|
|
@@ -106,7 +101,7 @@ declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
|
106
101
|
target: _sinclair_typebox.TString;
|
|
107
102
|
targetType: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"email">, _sinclair_typebox.TLiteral<"phone">]>;
|
|
108
103
|
code: _sinclair_typebox.TString;
|
|
109
|
-
purpose: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"registration">, _sinclair_typebox.TLiteral<"login">, _sinclair_typebox.TLiteral<"password_reset">, _sinclair_typebox.TLiteral<"email_change">, _sinclair_typebox.TLiteral<"phone_change">]>;
|
|
104
|
+
purpose: _sinclair_typebox.TUnion<[_sinclair_typebox.TLiteral<"registration">, _sinclair_typebox.TLiteral<"login">, _sinclair_typebox.TLiteral<"password_reset">, _sinclair_typebox.TLiteral<"email_change">, _sinclair_typebox.TLiteral<"phone_change">, _sinclair_typebox.TLiteral<"account_deletion">]>;
|
|
110
105
|
}>;
|
|
111
106
|
}, {}, {
|
|
112
107
|
valid: boolean;
|
|
@@ -126,6 +121,8 @@ declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
|
126
121
|
keyId: _sinclair_typebox.TString;
|
|
127
122
|
fingerprint: _sinclair_typebox.TString;
|
|
128
123
|
algorithm: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"ES256" | "RS256">[]>;
|
|
124
|
+
deviceName: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
125
|
+
platform: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"ios" | "android" | "web" | "desktop">[]>>;
|
|
129
126
|
}>;
|
|
130
127
|
}, RegisterResult>;
|
|
131
128
|
login: _spfn_core_route.RouteDef<{
|
|
@@ -141,6 +138,8 @@ declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
|
141
138
|
fingerprint: _sinclair_typebox.TString;
|
|
142
139
|
algorithm: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"ES256" | "RS256">[]>;
|
|
143
140
|
oldKeyId: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
141
|
+
deviceName: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
142
|
+
platform: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"ios" | "android" | "web" | "desktop">[]>>;
|
|
144
143
|
}>;
|
|
145
144
|
}, LoginResult>;
|
|
146
145
|
logout: _spfn_core_route.RouteDef<{}, {}, void>;
|
|
@@ -150,11 +149,33 @@ declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
|
150
149
|
keyId: _sinclair_typebox.TString;
|
|
151
150
|
fingerprint: _sinclair_typebox.TString;
|
|
152
151
|
algorithm: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"ES256" | "RS256">[]>;
|
|
152
|
+
deviceName: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
153
|
+
platform: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"ios" | "android" | "web" | "desktop">[]>>;
|
|
153
154
|
}>;
|
|
154
155
|
}, RotateKeyResult>;
|
|
156
|
+
listKeys: _spfn_core_route.RouteDef<{
|
|
157
|
+
body: _sinclair_typebox.TObject<{
|
|
158
|
+
includeRevoked: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
|
|
159
|
+
}>;
|
|
160
|
+
}, {}, {
|
|
161
|
+
keys: KeySummary[];
|
|
162
|
+
}>;
|
|
163
|
+
revokeKey: _spfn_core_route.RouteDef<{
|
|
164
|
+
body: _sinclair_typebox.TObject<{
|
|
165
|
+
keyId: _sinclair_typebox.TString;
|
|
166
|
+
}>;
|
|
167
|
+
}, {}, {
|
|
168
|
+
keyId: string;
|
|
169
|
+
selfRevoked: boolean;
|
|
170
|
+
}>;
|
|
171
|
+
revokeAllKeys: _spfn_core_route.RouteDef<{
|
|
172
|
+
body: _sinclair_typebox.TObject<{
|
|
173
|
+
includeCurrent: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
|
|
174
|
+
}>;
|
|
175
|
+
}, {}, RevokeAllKeysResult>;
|
|
155
176
|
changePassword: _spfn_core_route.RouteDef<{
|
|
156
177
|
body: _sinclair_typebox.TObject<{
|
|
157
|
-
currentPassword: _sinclair_typebox.TString
|
|
178
|
+
currentPassword: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
158
179
|
newPassword: _sinclair_typebox.TString;
|
|
159
180
|
}>;
|
|
160
181
|
}, {}, void>;
|
|
@@ -176,8 +197,27 @@ declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
|
176
197
|
email: string | null;
|
|
177
198
|
emailVerified: boolean;
|
|
178
199
|
phoneVerified: boolean;
|
|
200
|
+
hasPassword: boolean;
|
|
179
201
|
}>;
|
|
180
202
|
issueOneTimeToken: _spfn_core_route.RouteDef<{}, {}, IssueOneTimeTokenResult>;
|
|
203
|
+
requestAccountDeletion: _spfn_core_route.RouteDef<{
|
|
204
|
+
body: _sinclair_typebox.TObject<{
|
|
205
|
+
password: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
206
|
+
verificationToken: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
207
|
+
reason: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
208
|
+
immediate: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
|
|
209
|
+
}>;
|
|
210
|
+
}, {}, {
|
|
211
|
+
purgeScheduledAt: string;
|
|
212
|
+
}>;
|
|
213
|
+
cancelAccountDeletion: _spfn_core_route.RouteDef<{
|
|
214
|
+
body: _sinclair_typebox.TObject<{
|
|
215
|
+
email: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
216
|
+
phone: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
217
|
+
password: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
218
|
+
verificationToken: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
219
|
+
}>;
|
|
220
|
+
}, {}, void>;
|
|
181
221
|
oauthGoogleStart: _spfn_core_route.RouteDef<{
|
|
182
222
|
query: _sinclair_typebox.TObject<{
|
|
183
223
|
state: _sinclair_typebox.TString;
|
|
@@ -193,7 +233,7 @@ declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
|
193
233
|
}, {}, Response>;
|
|
194
234
|
oauthStart: _spfn_core_route.RouteDef<{
|
|
195
235
|
body: _sinclair_typebox.TObject<{
|
|
196
|
-
provider: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"google" | "github" | "kakao" | "naver">[]>;
|
|
236
|
+
provider: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"google" | "apple" | "github" | "kakao" | "naver" | "superself">[]>;
|
|
197
237
|
returnUrl: _sinclair_typebox.TString;
|
|
198
238
|
publicKey: _sinclair_typebox.TString;
|
|
199
239
|
keyId: _sinclair_typebox.TString;
|
|
@@ -203,11 +243,12 @@ declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
|
203
243
|
}>;
|
|
204
244
|
}, {}, OAuthStartResult>;
|
|
205
245
|
oauthProviders: _spfn_core_route.RouteDef<{}, {}, {
|
|
206
|
-
providers: ("google" | "github" | "kakao" | "naver")[];
|
|
246
|
+
providers: ("google" | "apple" | "github" | "kakao" | "naver" | "superself")[];
|
|
207
247
|
}>;
|
|
208
248
|
getGoogleOAuthUrl: _spfn_core_route.RouteDef<{
|
|
209
249
|
body: _sinclair_typebox.TObject<{
|
|
210
250
|
returnUrl: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
251
|
+
metadata: _sinclair_typebox.TOptional<_sinclair_typebox.TRecord<_sinclair_typebox.TString, _sinclair_typebox.TUnknown>>;
|
|
211
252
|
state: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
212
253
|
}>;
|
|
213
254
|
}, {}, {
|
|
@@ -225,6 +266,67 @@ declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
|
225
266
|
keyId: string;
|
|
226
267
|
returnUrl: string;
|
|
227
268
|
}>;
|
|
269
|
+
oauthProviderStart: _spfn_core_route.RouteDef<{
|
|
270
|
+
params: _sinclair_typebox.TObject<{
|
|
271
|
+
provider: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"google" | "apple" | "github" | "kakao" | "naver" | "superself">[]>;
|
|
272
|
+
}>;
|
|
273
|
+
query: _sinclair_typebox.TObject<{
|
|
274
|
+
state: _sinclair_typebox.TString;
|
|
275
|
+
}>;
|
|
276
|
+
}, {}, Response>;
|
|
277
|
+
oauthProviderCallback: _spfn_core_route.RouteDef<{
|
|
278
|
+
params: _sinclair_typebox.TObject<{
|
|
279
|
+
provider: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"google" | "apple" | "github" | "kakao" | "naver" | "superself">[]>;
|
|
280
|
+
}>;
|
|
281
|
+
query: _sinclair_typebox.TObject<{
|
|
282
|
+
code: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
283
|
+
state: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
284
|
+
error: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
285
|
+
error_description: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
286
|
+
}>;
|
|
287
|
+
}, {}, Response>;
|
|
288
|
+
getProviderOAuthUrl: _spfn_core_route.RouteDef<{
|
|
289
|
+
params: _sinclair_typebox.TObject<{
|
|
290
|
+
provider: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"google" | "apple" | "github" | "kakao" | "naver" | "superself">[]>;
|
|
291
|
+
}>;
|
|
292
|
+
body: _sinclair_typebox.TObject<{
|
|
293
|
+
returnUrl: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
294
|
+
metadata: _sinclair_typebox.TOptional<_sinclair_typebox.TRecord<_sinclair_typebox.TString, _sinclair_typebox.TUnknown>>;
|
|
295
|
+
state: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
296
|
+
}>;
|
|
297
|
+
}, {}, {
|
|
298
|
+
authUrl: string;
|
|
299
|
+
}>;
|
|
300
|
+
oauthNative: _spfn_core_route.RouteDef<{
|
|
301
|
+
params: _sinclair_typebox.TObject<{
|
|
302
|
+
provider: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"google" | "apple" | "github" | "kakao" | "naver" | "superself">[]>;
|
|
303
|
+
}>;
|
|
304
|
+
body: _sinclair_typebox.TObject<{
|
|
305
|
+
idToken: _sinclair_typebox.TString;
|
|
306
|
+
nonce: _sinclair_typebox.TString;
|
|
307
|
+
accessToken: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
308
|
+
publicKey: _sinclair_typebox.TString;
|
|
309
|
+
keyId: _sinclair_typebox.TString;
|
|
310
|
+
fingerprint: _sinclair_typebox.TString;
|
|
311
|
+
algorithm: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"ES256" | "RS256">[]>;
|
|
312
|
+
deviceName: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
313
|
+
platform: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"ios" | "android" | "web" | "desktop">[]>>;
|
|
314
|
+
profile: _sinclair_typebox.TOptional<_sinclair_typebox.TObject<{
|
|
315
|
+
name: _sinclair_typebox.TOptional<_sinclair_typebox.TString>;
|
|
316
|
+
}>>;
|
|
317
|
+
metadata: _sinclair_typebox.TOptional<_sinclair_typebox.TRecord<_sinclair_typebox.TString, _sinclair_typebox.TUnknown>>;
|
|
318
|
+
}>;
|
|
319
|
+
}, {}, OAuthNativeResult>;
|
|
320
|
+
oauthUnlinkNotify: _spfn_core_route.RouteDef<{
|
|
321
|
+
params: _sinclair_typebox.TObject<{
|
|
322
|
+
provider: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"google" | "apple" | "github" | "kakao" | "naver" | "superself">[]>;
|
|
323
|
+
}>;
|
|
324
|
+
}, {}, void | Response>;
|
|
325
|
+
oauthUnlinkNotifyGet: _spfn_core_route.RouteDef<{
|
|
326
|
+
params: _sinclair_typebox.TObject<{
|
|
327
|
+
provider: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"google" | "apple" | "github" | "kakao" | "naver" | "superself">[]>;
|
|
328
|
+
}>;
|
|
329
|
+
}, {}, void | Response>;
|
|
228
330
|
getInvitation: _spfn_core_route.RouteDef<{
|
|
229
331
|
params: _sinclair_typebox.TObject<{
|
|
230
332
|
token: _sinclair_typebox.TString;
|
|
@@ -357,6 +459,8 @@ declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
|
357
459
|
username: _sinclair_typebox.TUnion<[_sinclair_typebox.TString, _sinclair_typebox.TNull]>;
|
|
358
460
|
}>;
|
|
359
461
|
}, {}, {
|
|
462
|
+
deletedAt: Date | null;
|
|
463
|
+
deletedBy: string | null;
|
|
360
464
|
createdAt: Date;
|
|
361
465
|
updatedAt: Date;
|
|
362
466
|
id: number;
|
|
@@ -367,7 +471,7 @@ declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
|
367
471
|
passwordHash: string | null;
|
|
368
472
|
passwordChangeRequired: boolean;
|
|
369
473
|
roleId: number;
|
|
370
|
-
status: "active" | "inactive" | "suspended";
|
|
474
|
+
status: "active" | "inactive" | "suspended" | "pending_deletion" | "deleted";
|
|
371
475
|
emailVerifiedAt: Date | null;
|
|
372
476
|
phoneVerifiedAt: Date | null;
|
|
373
477
|
lastLoginAt: Date | null;
|
|
@@ -386,8 +490,8 @@ declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
|
386
490
|
}, {}, {
|
|
387
491
|
roles: {
|
|
388
492
|
description: string | null;
|
|
389
|
-
id: number;
|
|
390
493
|
name: string;
|
|
494
|
+
id: number;
|
|
391
495
|
displayName: string;
|
|
392
496
|
isBuiltin: boolean;
|
|
393
497
|
isSystem: boolean;
|
|
@@ -408,8 +512,8 @@ declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
|
408
512
|
}, {}, {
|
|
409
513
|
role: {
|
|
410
514
|
description: string | null;
|
|
411
|
-
id: number;
|
|
412
515
|
name: string;
|
|
516
|
+
id: number;
|
|
413
517
|
displayName: string;
|
|
414
518
|
isBuiltin: boolean;
|
|
415
519
|
isSystem: boolean;
|
|
@@ -432,8 +536,8 @@ declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
|
432
536
|
}, {}, {
|
|
433
537
|
role: {
|
|
434
538
|
description: string | null;
|
|
435
|
-
id: number;
|
|
436
539
|
name: string;
|
|
540
|
+
id: number;
|
|
437
541
|
displayName: string;
|
|
438
542
|
isBuiltin: boolean;
|
|
439
543
|
isSystem: boolean;
|
|
@@ -459,6 +563,50 @@ declare const authApi: _spfn_core_nextjs.Client<_spfn_core_route.Router<{
|
|
|
459
563
|
userId: number;
|
|
460
564
|
roleId: number;
|
|
461
565
|
}>;
|
|
566
|
+
issueOpsToken: _spfn_core_route.RouteDef<{
|
|
567
|
+
body: _sinclair_typebox.TObject<{
|
|
568
|
+
name: _sinclair_typebox.TString;
|
|
569
|
+
scopes: _sinclair_typebox.TArray<_sinclair_typebox.TString>;
|
|
570
|
+
expiresInDays: _sinclair_typebox.TOptional<_sinclair_typebox.TUnion<[_sinclair_typebox.TNumber, _sinclair_typebox.TNull]>>;
|
|
571
|
+
}>;
|
|
572
|
+
}, {}, {
|
|
573
|
+
token: string;
|
|
574
|
+
opsToken: {
|
|
575
|
+
id: number;
|
|
576
|
+
name: string;
|
|
577
|
+
scopes: string[];
|
|
578
|
+
expiresAt: string | null;
|
|
579
|
+
revokedAt: string | null;
|
|
580
|
+
lastUsedAt: string | null;
|
|
581
|
+
createdAt: string | null;
|
|
582
|
+
};
|
|
583
|
+
}>;
|
|
584
|
+
listOpsTokens: _spfn_core_route.RouteDef<{}, {}, {
|
|
585
|
+
opsTokens: {
|
|
586
|
+
id: number;
|
|
587
|
+
name: string;
|
|
588
|
+
scopes: string[];
|
|
589
|
+
expiresAt: string | null;
|
|
590
|
+
revokedAt: string | null;
|
|
591
|
+
lastUsedAt: string | null;
|
|
592
|
+
createdAt: string | null;
|
|
593
|
+
}[];
|
|
594
|
+
}>;
|
|
595
|
+
revokeOpsToken: _spfn_core_route.RouteDef<{
|
|
596
|
+
params: _sinclair_typebox.TObject<{
|
|
597
|
+
id: _sinclair_typebox.TNumber;
|
|
598
|
+
}>;
|
|
599
|
+
}, {}, {
|
|
600
|
+
opsToken: {
|
|
601
|
+
id: number;
|
|
602
|
+
name: string;
|
|
603
|
+
scopes: string[];
|
|
604
|
+
expiresAt: string | null;
|
|
605
|
+
revokedAt: string | null;
|
|
606
|
+
lastUsedAt: string | null;
|
|
607
|
+
createdAt: string | null;
|
|
608
|
+
};
|
|
609
|
+
}>;
|
|
462
610
|
}>>;
|
|
463
611
|
type AuthRouter = typeof mainAuthRouter;
|
|
464
612
|
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,8 @@ import {
|
|
|
15
15
|
ValidationError,
|
|
16
16
|
UnauthorizedError,
|
|
17
17
|
ForbiddenError,
|
|
18
|
-
ConflictError
|
|
18
|
+
ConflictError,
|
|
19
|
+
NotFoundError
|
|
19
20
|
} from "@spfn/core/errors";
|
|
20
21
|
var InvalidCredentialsError = class extends UnauthorizedError {
|
|
21
22
|
constructor(data = {}) {
|
|
@@ -29,6 +30,12 @@ var InvalidTokenError = class extends UnauthorizedError {
|
|
|
29
30
|
this.name = "InvalidTokenError";
|
|
30
31
|
}
|
|
31
32
|
};
|
|
33
|
+
var InvalidSocialTokenError = class extends UnauthorizedError {
|
|
34
|
+
constructor(data = {}) {
|
|
35
|
+
super({ message: data.message || "Invalid social id_token", details: data.details });
|
|
36
|
+
this.name = "InvalidSocialTokenError";
|
|
37
|
+
}
|
|
38
|
+
};
|
|
32
39
|
var TokenExpiredError = class extends UnauthorizedError {
|
|
33
40
|
constructor(data = {}) {
|
|
34
41
|
super({ message: data.message || "Authentication token has expired", details: data.details });
|
|
@@ -51,6 +58,33 @@ var AccountDisabledError = class extends ForbiddenError {
|
|
|
51
58
|
this.name = "AccountDisabledError";
|
|
52
59
|
}
|
|
53
60
|
};
|
|
61
|
+
var AccountPendingDeletionError = class extends ForbiddenError {
|
|
62
|
+
constructor(data = {}) {
|
|
63
|
+
super({
|
|
64
|
+
message: data.message || "Account is scheduled for deletion",
|
|
65
|
+
details: { status: "pending_deletion", purgeScheduledAt: data.purgeScheduledAt, ...data.details }
|
|
66
|
+
});
|
|
67
|
+
this.name = "AccountPendingDeletionError";
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
var DeletionAlreadyRequestedError = class extends ConflictError {
|
|
71
|
+
constructor(data = {}) {
|
|
72
|
+
super({ message: data.message || "Account deletion has already been requested", details: data.details });
|
|
73
|
+
this.name = "DeletionAlreadyRequestedError";
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
var DeletionNotRequestedError = class extends NotFoundError {
|
|
77
|
+
constructor(data = {}) {
|
|
78
|
+
super({ message: data.message || "No pending account deletion request found", details: data.details });
|
|
79
|
+
this.name = "DeletionNotRequestedError";
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
var ImmediateDeletionNotAllowedError = class extends ForbiddenError {
|
|
83
|
+
constructor(data = {}) {
|
|
84
|
+
super({ message: data.message || "Immediate self-service deletion is not enabled", details: data.details });
|
|
85
|
+
this.name = "ImmediateDeletionNotAllowedError";
|
|
86
|
+
}
|
|
87
|
+
};
|
|
54
88
|
var AccountAlreadyExistsError = class extends ConflictError {
|
|
55
89
|
constructor(data = {}) {
|
|
56
90
|
super({
|
|
@@ -64,6 +98,12 @@ var AccountAlreadyExistsError = class extends ConflictError {
|
|
|
64
98
|
this.name = "AccountAlreadyExistsError";
|
|
65
99
|
}
|
|
66
100
|
};
|
|
101
|
+
var RegistrationRejectedError = class extends ForbiddenError {
|
|
102
|
+
constructor(data = {}) {
|
|
103
|
+
super({ message: data.message || "Registration rejected", details: data.details });
|
|
104
|
+
this.name = "RegistrationRejectedError";
|
|
105
|
+
}
|
|
106
|
+
};
|
|
67
107
|
var InvalidVerificationCodeError = class extends ValidationError {
|
|
68
108
|
constructor(data = {}) {
|
|
69
109
|
super({ message: data.message || "Invalid verification code", details: data.details });
|
|
@@ -76,12 +116,54 @@ var InvalidVerificationTokenError = class extends ValidationError {
|
|
|
76
116
|
this.name = "InvalidVerificationTokenError";
|
|
77
117
|
}
|
|
78
118
|
};
|
|
119
|
+
var KeyIdAlreadyRegisteredError = class extends ConflictError {
|
|
120
|
+
constructor(data = {}) {
|
|
121
|
+
super({
|
|
122
|
+
message: data.message || "This keyId is already registered. Generate a new keyId and retry.",
|
|
123
|
+
details: data.details
|
|
124
|
+
});
|
|
125
|
+
this.name = "KeyIdAlreadyRegisteredError";
|
|
126
|
+
}
|
|
127
|
+
};
|
|
79
128
|
var InvalidKeyFingerprintError = class extends ValidationError {
|
|
80
129
|
constructor(data = {}) {
|
|
81
130
|
super({ message: data.message || "Invalid key fingerprint", details: data.details });
|
|
82
131
|
this.name = "InvalidKeyFingerprintError";
|
|
83
132
|
}
|
|
84
133
|
};
|
|
134
|
+
var KeyNotFoundError = class extends NotFoundError {
|
|
135
|
+
constructor(data = {}) {
|
|
136
|
+
super({ message: data.message || "Key not found", details: data.details });
|
|
137
|
+
this.name = "KeyNotFoundError";
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
var NonceKeyBindingError = class extends ValidationError {
|
|
141
|
+
constructor(data = {}) {
|
|
142
|
+
super({
|
|
143
|
+
message: data.message || "nonce must be the fingerprint of the submitted public key",
|
|
144
|
+
details: data.details
|
|
145
|
+
});
|
|
146
|
+
this.name = "NonceKeyBindingError";
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
var NativeSignInUnsupportedError = class extends ValidationError {
|
|
150
|
+
constructor(data = {}) {
|
|
151
|
+
super({
|
|
152
|
+
message: data.message || "This provider does not support native id_token sign-in.",
|
|
153
|
+
details: data.details
|
|
154
|
+
});
|
|
155
|
+
this.name = "NativeSignInUnsupportedError";
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
var UnverifiedEmailLinkError = class extends ValidationError {
|
|
159
|
+
constructor(data = {}) {
|
|
160
|
+
super({
|
|
161
|
+
message: data.message || "Cannot link to existing account with unverified email. Please verify your email with the provider first.",
|
|
162
|
+
details: data.details
|
|
163
|
+
});
|
|
164
|
+
this.name = "UnverifiedEmailLinkError";
|
|
165
|
+
}
|
|
166
|
+
};
|
|
85
167
|
var VerificationTokenPurposeMismatchError = class extends ValidationError {
|
|
86
168
|
constructor(data = {}) {
|
|
87
169
|
const expected = data.expected || "unknown";
|
|
@@ -146,15 +228,26 @@ var authErrorRegistry = new ErrorRegistry();
|
|
|
146
228
|
authErrorRegistry.append([
|
|
147
229
|
InvalidCredentialsError,
|
|
148
230
|
InvalidTokenError,
|
|
231
|
+
InvalidSocialTokenError,
|
|
149
232
|
TokenExpiredError,
|
|
150
233
|
KeyExpiredError,
|
|
151
234
|
AccountDisabledError,
|
|
235
|
+
AccountPendingDeletionError,
|
|
236
|
+
DeletionAlreadyRequestedError,
|
|
237
|
+
DeletionNotRequestedError,
|
|
238
|
+
ImmediateDeletionNotAllowedError,
|
|
152
239
|
AccountAlreadyExistsError,
|
|
240
|
+
RegistrationRejectedError,
|
|
153
241
|
ReservedUsernameError,
|
|
154
242
|
UsernameAlreadyTakenError,
|
|
155
243
|
InvalidVerificationCodeError,
|
|
156
244
|
InvalidVerificationTokenError,
|
|
157
245
|
InvalidKeyFingerprintError,
|
|
246
|
+
NonceKeyBindingError,
|
|
247
|
+
NativeSignInUnsupportedError,
|
|
248
|
+
UnverifiedEmailLinkError,
|
|
249
|
+
KeyNotFoundError,
|
|
250
|
+
KeyIdAlreadyRegisteredError,
|
|
158
251
|
VerificationTokenPurposeMismatchError,
|
|
159
252
|
VerificationTokenTargetMismatchError,
|
|
160
253
|
InsufficientPermissionsError,
|
|
@@ -163,13 +256,15 @@ authErrorRegistry.append([
|
|
|
163
256
|
|
|
164
257
|
// src/generated/route-map.ts
|
|
165
258
|
var routeMap = {
|
|
166
|
-
checkAccountExists: { method: "POST", path: "/_auth/exists" },
|
|
167
259
|
sendVerificationCode: { method: "POST", path: "/_auth/codes" },
|
|
168
260
|
verifyCode: { method: "POST", path: "/_auth/codes/verify" },
|
|
169
261
|
register: { method: "POST", path: "/_auth/register" },
|
|
170
262
|
login: { method: "POST", path: "/_auth/login" },
|
|
171
263
|
logout: { method: "POST", path: "/_auth/logout" },
|
|
172
264
|
rotateKey: { method: "POST", path: "/_auth/keys/rotate" },
|
|
265
|
+
listKeys: { method: "POST", path: "/_auth/keys/list" },
|
|
266
|
+
revokeKey: { method: "POST", path: "/_auth/keys/revoke" },
|
|
267
|
+
revokeAllKeys: { method: "POST", path: "/_auth/keys/revoke-all" },
|
|
173
268
|
changePassword: { method: "PUT", path: "/_auth/password" },
|
|
174
269
|
getAuthSession: { method: "GET", path: "/_auth/session" },
|
|
175
270
|
issueOneTimeToken: { method: "POST", path: "/_auth/tokens" },
|
|
@@ -191,11 +286,22 @@ var routeMap = {
|
|
|
191
286
|
oauthProviders: { method: "GET", path: "/_auth/oauth/providers" },
|
|
192
287
|
getGoogleOAuthUrl: { method: "POST", path: "/_auth/oauth/google/url" },
|
|
193
288
|
oauthFinalize: { method: "POST", path: "/_auth/oauth/finalize" },
|
|
289
|
+
oauthProviderStart: { method: "GET", path: "/_auth/oauth/:provider" },
|
|
290
|
+
oauthProviderCallback: { method: "GET", path: "/_auth/oauth/:provider/callback" },
|
|
291
|
+
getProviderOAuthUrl: { method: "POST", path: "/_auth/oauth/:provider/url" },
|
|
292
|
+
oauthNative: { method: "POST", path: "/_auth/oauth/:provider/native" },
|
|
293
|
+
oauthUnlinkNotify: { method: "POST", path: "/_auth/oauth/:provider/unlink-notify" },
|
|
294
|
+
oauthUnlinkNotifyGet: { method: "GET", path: "/_auth/oauth/:provider/unlink-notify" },
|
|
194
295
|
listRoles: { method: "GET", path: "/_auth/admin/roles" },
|
|
195
296
|
createAdminRole: { method: "POST", path: "/_auth/admin/roles" },
|
|
196
297
|
updateAdminRole: { method: "PATCH", path: "/_auth/admin/roles/:id" },
|
|
197
298
|
deleteAdminRole: { method: "DELETE", path: "/_auth/admin/roles/:id" },
|
|
198
|
-
updateUserRole: { method: "PATCH", path: "/_auth/admin/users/:userId/role" }
|
|
299
|
+
updateUserRole: { method: "PATCH", path: "/_auth/admin/users/:userId/role" },
|
|
300
|
+
requestAccountDeletion: { method: "POST", path: "/_auth/deletion/request" },
|
|
301
|
+
cancelAccountDeletion: { method: "POST", path: "/_auth/deletion/cancel" },
|
|
302
|
+
issueOpsToken: { method: "POST", path: "/_auth/ops-tokens" },
|
|
303
|
+
listOpsTokens: { method: "GET", path: "/_auth/ops-tokens" },
|
|
304
|
+
revokeOpsToken: { method: "DELETE", path: "/_auth/ops-tokens/:id" }
|
|
199
305
|
};
|
|
200
306
|
|
|
201
307
|
// src/lib/types.ts
|
|
@@ -331,9 +437,14 @@ var BUILTIN_ROLE_PERMISSIONS = {
|
|
|
331
437
|
|
|
332
438
|
// src/server/types.ts
|
|
333
439
|
var KEY_ALGORITHM = ["ES256", "RS256"];
|
|
440
|
+
var KEY_PLATFORM = ["ios", "android", "web", "desktop"];
|
|
441
|
+
var KEY_DEVICE_NAME_MAX_LENGTH = 64;
|
|
334
442
|
var INVITATION_STATUSES = ["pending", "accepted", "expired", "cancelled"];
|
|
335
|
-
var USER_STATUSES = ["active", "inactive", "suspended"];
|
|
336
|
-
var SOCIAL_PROVIDERS = ["google", "github", "kakao", "naver"];
|
|
443
|
+
var USER_STATUSES = ["active", "inactive", "suspended", "pending_deletion", "deleted"];
|
|
444
|
+
var SOCIAL_PROVIDERS = ["google", "apple", "github", "kakao", "naver", "superself"];
|
|
445
|
+
var ACCOUNT_DELETION_REQUEST_STATUSES = ["pending", "cancelled", "completed"];
|
|
446
|
+
var ACCOUNT_DELETION_REQUESTED_BY = ["self", "admin"];
|
|
447
|
+
var PURGE_STRATEGIES = ["anonymize", "hard-delete"];
|
|
337
448
|
|
|
338
449
|
// ../../node_modules/.pnpm/@sinclair+typebox@0.34.41/node_modules/@sinclair/typebox/build/esm/type/guard/value.mjs
|
|
339
450
|
var value_exports = {};
|
|
@@ -2956,9 +3067,18 @@ var PhoneSchema = Type.String({
|
|
|
2956
3067
|
pattern: PHONE_PATTERN2,
|
|
2957
3068
|
description: "Phone number in E.164 format (e.g., +821012345678)"
|
|
2958
3069
|
});
|
|
3070
|
+
var DeviceNameSchema = Type.String({
|
|
3071
|
+
maxLength: KEY_DEVICE_NAME_MAX_LENGTH,
|
|
3072
|
+
description: `Device label shown in the key list (max ${KEY_DEVICE_NAME_MAX_LENGTH} chars)`
|
|
3073
|
+
});
|
|
3074
|
+
var PlatformSchema = Type.Union(
|
|
3075
|
+
KEY_PLATFORM.map((platform) => Type.Literal(platform)),
|
|
3076
|
+
{ description: "Platform the key lives on" }
|
|
3077
|
+
);
|
|
2959
3078
|
var PasswordSchema = Type.String({
|
|
2960
3079
|
minLength: 8,
|
|
2961
|
-
|
|
3080
|
+
maxLength: 72,
|
|
3081
|
+
description: "User password (8\u201372 characters). bcrypt silently ignores bytes past 72, so longer inputs are rejected rather than truncated."
|
|
2962
3082
|
});
|
|
2963
3083
|
var TargetTypeSchema = Type.Union([
|
|
2964
3084
|
Type.Literal("email"),
|
|
@@ -2972,17 +3092,20 @@ var VerificationPurposeSchema = Type.Union([
|
|
|
2972
3092
|
Type.Literal("login"),
|
|
2973
3093
|
Type.Literal("password_reset"),
|
|
2974
3094
|
Type.Literal("email_change"),
|
|
2975
|
-
Type.Literal("phone_change")
|
|
3095
|
+
Type.Literal("phone_change"),
|
|
3096
|
+
Type.Literal("account_deletion")
|
|
2976
3097
|
], {
|
|
2977
3098
|
description: "Purpose of verification"
|
|
2978
3099
|
});
|
|
2979
|
-
var VERIFICATION_PURPOSES = ["registration", "login", "password_reset", "email_change", "phone_change"];
|
|
3100
|
+
var VERIFICATION_PURPOSES = ["registration", "login", "password_reset", "email_change", "phone_change", "account_deletion"];
|
|
2980
3101
|
|
|
2981
3102
|
// src/index.ts
|
|
2982
3103
|
var authApi = createApi({
|
|
2983
3104
|
errorRegistry: [authErrorRegistry]
|
|
2984
3105
|
});
|
|
2985
3106
|
export {
|
|
3107
|
+
ACCOUNT_DELETION_REQUESTED_BY,
|
|
3108
|
+
ACCOUNT_DELETION_REQUEST_STATUSES,
|
|
2986
3109
|
BASE64_PATTERN,
|
|
2987
3110
|
BUILTIN_PERMISSIONS,
|
|
2988
3111
|
BUILTIN_ROLES,
|
|
@@ -2993,6 +3116,7 @@ export {
|
|
|
2993
3116
|
KEY_ALGORITHM,
|
|
2994
3117
|
PERMISSION_CATEGORIES,
|
|
2995
3118
|
PHONE_PATTERN,
|
|
3119
|
+
PURGE_STRATEGIES,
|
|
2996
3120
|
SOCIAL_PROVIDERS,
|
|
2997
3121
|
USER_STATUSES,
|
|
2998
3122
|
UUID_PATTERN,
|