**Motivations:** - Parcours login contrat: sélection service → membre → build path → proof, vérification côté parent (service-login-verify) - Scripts data: initialisation SQLite (utxos, anchors, fees), migration depuis fichiers, sync UTXOs - Website-skeleton: intégration contrat, extraction validateurs login, vérification preuve **Root causes:** - N/A (évolutions) **Correctifs:** - N/A **Evolutions:** - UserWallet: MemberSelectionScreen, LoginScreen machine à états (S_LOGIN_SELECT_SERVICE → S_LOGIN_SELECT_MEMBER → build path), service/membre via query params, useChannel/iframeChannel - Website-skeleton: contract.ts (extractLoginValidators, isValidContract, isValidAction), main.ts validateurs depuis contrat, config étendu - Data: init-db.js (tables utxos/anchors/fees), migrate-from-files.js **Pages affectées:** - data/init-db.js, data/migrate-from-files.js, data/sync-utxos.log - userwallet: App, LoginCollectShare, LoginScreen, MemberSelectionScreen, ServiceListScreen, useChannel, iframeChannel - website-skeleton: README, config, contract, main
65 lines
1.8 KiB
TypeScript
65 lines
1.8 KiB
TypeScript
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<string, unknown>;
|
|
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<string, unknown>;
|
|
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,
|
|
)
|
|
);
|
|
}
|