File size: 2,161 Bytes
fc93158 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | import { isRecord } from "../../../utils.js";
import type { ChannelAccountSnapshot, ChannelStatusIssue } from "../types.js";
export { isRecord };
export function asString(value: unknown): string | undefined {
return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
}
export function formatMatchMetadata(params: {
matchKey?: unknown;
matchSource?: unknown;
}): string | undefined {
const matchKey =
typeof params.matchKey === "string"
? params.matchKey
: typeof params.matchKey === "number"
? String(params.matchKey)
: undefined;
const matchSource = asString(params.matchSource);
const parts = [
matchKey ? `matchKey=${matchKey}` : null,
matchSource ? `matchSource=${matchSource}` : null,
].filter((entry): entry is string => Boolean(entry));
return parts.length > 0 ? parts.join(" ") : undefined;
}
export function appendMatchMetadata(
message: string,
params: { matchKey?: unknown; matchSource?: unknown },
): string {
const meta = formatMatchMetadata(params);
return meta ? `${message} (${meta})` : message;
}
export function resolveEnabledConfiguredAccountId(account: {
accountId?: unknown;
enabled?: unknown;
configured?: unknown;
}): string | null {
const accountId = asString(account.accountId) ?? "default";
const enabled = account.enabled !== false;
const configured = account.configured === true;
return enabled && configured ? accountId : null;
}
export function collectIssuesForEnabledAccounts<
T extends { accountId?: unknown; enabled?: unknown },
>(params: {
accounts: ChannelAccountSnapshot[];
readAccount: (value: ChannelAccountSnapshot) => T | null;
collectIssues: (params: { account: T; accountId: string; issues: ChannelStatusIssue[] }) => void;
}): ChannelStatusIssue[] {
const issues: ChannelStatusIssue[] = [];
for (const entry of params.accounts) {
const account = params.readAccount(entry);
if (!account || account.enabled === false) {
continue;
}
const accountId = asString(account.accountId) ?? "default";
params.collectIssues({ account, accountId, issues });
}
return issues;
}
|