64 lines
2.2 KiB
TypeScript
64 lines
2.2 KiB
TypeScript
import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "clawdbot/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 ?? {}) as MatrixConfig;
|
|
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);
|
|
}
|