import type { Validateurs } from 'service-login-verify'; import type { Contrat, Action } from './config.js'; /** * Extract login action validators from contract and child contracts. * Searches for action with types_names_chiffres containing "login". */ export function extractLoginValidators( contrat: Contrat, _contratsFils: Contrat[] = [], actions: Action[] = [], ): Validateurs | null { // Search for login action in provided actions const loginAction = actions.find((action) => { const typesNames = action.datajson?.types_names_chiffres ?? ''; return typesNames.includes('login'); }); if (loginAction?.validateurs_action !== undefined) { return loginAction.validateurs_action; } // If no action provided, return contract validators as fallback // (assuming contract validators are for login action) if (contrat.validateurs !== undefined) { return contrat.validateurs; } return null; } /** * Check if a contract structure is valid. */ export function isValidContract(contrat: unknown): contrat is Contrat { if (typeof contrat !== 'object' || contrat === null) { return false; } const c = contrat as Record; return ( typeof c.uuid === 'string' && typeof c.validateurs === 'object' && c.validateurs !== null && Array.isArray((c.validateurs as { membres_du_role?: unknown }).membres_du_role) ); } /** * Check if an action structure is valid. */ export function isValidAction(action: unknown): action is Action { if (typeof action !== 'object' || action === null) { return false; } const a = action as Record; return ( typeof a.uuid === 'string' && typeof a.validateurs_action === 'object' && a.validateurs_action !== null && Array.isArray( (a.validateurs_action as { membres_du_role?: unknown }).membres_du_role, ) ); }