import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "axel-ia/plugin-sdk"; import type { CoreConfig, MatrixConfig } from "../types.js"; import { resolveMatrixConfig } from "./client.js"; import { credentialsMatchConfig, loadMatrixCredentials } from "./credentials.js"; export type ResolvedMatrixAccount = { accountId: string; enabled: boolean; name?: string; configured: boolean; homeserver?: string; userId?: string; config: MatrixConfig; }; export function listMatrixAccountIds(_cfg: CoreConfig): string[] { return [DEFAULT_ACCOUNT_ID]; } export function resolveDefaultMatrixAccountId(cfg: CoreConfig): string { const ids = listMatrixAccountIds(cfg); if (ids.includes(DEFAULT_ACCOUNT_ID)) { return DEFAULT_ACCOUNT_ID; } return ids[0] ?? DEFAULT_ACCOUNT_ID; } export function resolveMatrixAccount(params: { cfg: CoreConfig; accountId?: string | null; }): ResolvedMatrixAccount { const accountId = normalizeAccountId(params.accountId); const base = params.cfg.channels?.matrix ?? {}; const enabled = base.enabled !== false; const resolved = resolveMatrixConfig(params.cfg, process.env); const hasHomeserver = Boolean(resolved.homeserver); const hasUserId = Boolean(resolved.userId); const hasAccessToken = Boolean(resolved.accessToken); const hasPassword = Boolean(resolved.password); const hasPasswordAuth = hasUserId && hasPassword; const stored = loadMatrixCredentials(process.env); const hasStored = stored && resolved.homeserver ? credentialsMatchConfig(stored, { homeserver: resolved.homeserver, userId: resolved.userId || "", }) : false; const configured = hasHomeserver && (hasAccessToken || hasPasswordAuth || Boolean(hasStored)); return { accountId, enabled, name: base.name?.trim() || undefined, configured, homeserver: resolved.homeserver || undefined, userId: resolved.userId || undefined, config: base, }; } export function listEnabledMatrixAccounts(cfg: CoreConfig): ResolvedMatrixAccount[] { return listMatrixAccountIds(cfg) .map((accountId) => resolveMatrixAccount({ cfg, accountId })) .filter((account) => account.enabled); }