UNPKG

@clerk/shared

Version:

Internal package utils used by the Clerk SDKs

1 lines 3.39 kB
{"version":3,"file":"password.mjs","names":[],"sources":["../../../../src/internal/clerk-js/passwords/password.ts"],"sourcesContent":["import type { PasswordSettingsData, PasswordValidation, ValidatePasswordCallbacks, ZxcvbnResult } from '@/types';\nimport { noop } from '@/utils';\n\nimport { createValidateComplexity } from './complexity';\nimport { createValidatePasswordStrength } from './strength';\n\ntype zxcvbnFN = (password: string, userInputs?: (string | number)[]) => ZxcvbnResult;\n\nexport type UsePasswordConfig = PasswordSettingsData & {\n validatePassword: boolean;\n};\n\nexport type UsePasswordCbs = {\n onValidationError?: (error: string | undefined) => void;\n onValidationSuccess?: () => void;\n onValidationWarning?: (warning: string) => void;\n onValidationInfo?: (info: string) => void;\n onValidationComplexity?: (b: boolean) => void;\n};\n\nexport const createValidatePassword = (\n loadZxcvbn: () => Promise<zxcvbnFN>,\n config: UsePasswordConfig,\n callbacks?: ValidatePasswordCallbacks,\n) => {\n const { onValidation = noop, onValidationComplexity = noop } = callbacks || {};\n const { show_zxcvbn, validatePassword: validatePasswordProp } = config;\n const getComplexity = createValidateComplexity(config);\n const getScore = createValidatePasswordStrength(config);\n let result: PasswordValidation = {} satisfies PasswordValidation;\n\n return (password: string, internalCallbacks?: ValidatePasswordCallbacks) => {\n const {\n onValidation: internalOnValidation = onValidation,\n onValidationComplexity: internalOnValidationComplexity = onValidationComplexity,\n } = internalCallbacks || {};\n if (!validatePasswordProp) {\n return;\n }\n\n /**\n * Validate Complexity\n */\n const failedValidationsComplexity = getComplexity(password);\n internalOnValidationComplexity(Object.keys(failedValidationsComplexity).length === 0);\n result = {\n ...result,\n complexity: failedValidationsComplexity,\n };\n /**\n * Validate score\n */\n if (show_zxcvbn) {\n /**\n * Lazy load zxcvbn without preventing a complexityError to be thrown if it exists\n */\n void loadZxcvbn().then(zxcvbn => {\n const setPasswordScore = getScore(zxcvbn);\n const strength = setPasswordScore(password);\n\n result = {\n ...result,\n strength,\n };\n internalOnValidation({\n ...result,\n strength,\n });\n });\n }\n\n if (result.complexity && Object.keys(result.complexity).length === 0 && show_zxcvbn) {\n return;\n }\n\n internalOnValidation(result);\n };\n};\n"],"mappings":";;;;;AAoBA,MAAa,0BACX,YACA,QACA,cACG;CACH,MAAM,EAAE,eAAe,MAAM,yBAAyB,SAAS,aAAa,CAAC;CAC7E,MAAM,EAAE,aAAa,kBAAkB,yBAAyB;CAChE,MAAM,gBAAgB,yBAAyB,MAAM;CACrD,MAAM,WAAW,+BAA+B,MAAM;CACtD,IAAI,SAA6B,CAAC;CAElC,QAAQ,UAAkB,sBAAkD;EAC1E,MAAM,EACJ,cAAc,uBAAuB,cACrC,wBAAwB,iCAAiC,2BACvD,qBAAqB,CAAC;EAC1B,IAAI,CAAC,sBACH;;;;EAMF,MAAM,8BAA8B,cAAc,QAAQ;EAC1D,+BAA+B,OAAO,KAAK,2BAA2B,CAAC,CAAC,WAAW,CAAC;EACpF,SAAS;GACP,GAAG;GACH,YAAY;EACd;;;;EAIA,IAAI;;;;EAIF,AAAK,WAAW,CAAC,CAAC,MAAK,WAAU;GAE/B,MAAM,WADmB,SAAS,MACF,CAAC,CAAC,QAAQ;GAE1C,SAAS;IACP,GAAG;IACH;GACF;GACA,qBAAqB;IACnB,GAAG;IACH;GACF,CAAC;EACH,CAAC;EAGH,IAAI,OAAO,cAAc,OAAO,KAAK,OAAO,UAAU,CAAC,CAAC,WAAW,KAAK,aACtE;EAGF,qBAAqB,MAAM;CAC7B;AACF"}