Files
openclaw/extensions/zalouser/src/status-issues.ts
2026-03-18 22:58:40 -05:00

56 lines
1.5 KiB
TypeScript

import {
coerceStatusIssueAccountId,
readStatusIssueFields,
} from "openclaw/plugin-sdk/extension-shared";
import type { ChannelAccountSnapshot, ChannelStatusIssue } from "../runtime-api.js";
const ZALOUSER_STATUS_FIELDS = [
"accountId",
"enabled",
"configured",
"dmPolicy",
"lastError",
] as const;
export function collectZalouserStatusIssues(
accounts: ChannelAccountSnapshot[],
): ChannelStatusIssue[] {
const issues: ChannelStatusIssue[] = [];
for (const entry of accounts) {
const account = readStatusIssueFields(entry, ZALOUSER_STATUS_FIELDS);
if (!account) {
continue;
}
const accountId = coerceStatusIssueAccountId(account.accountId) ?? "default";
const enabled = account.enabled !== false;
if (!enabled) {
continue;
}
const configured = account.configured === true;
if (!configured) {
issues.push({
channel: "zalouser",
accountId,
kind: "auth",
message: "Not authenticated (no saved Zalo session).",
fix: "Run: openclaw channels login --channel zalouser",
});
continue;
}
if (account.dmPolicy === "open") {
issues.push({
channel: "zalouser",
accountId,
kind: "config",
message:
'Zalo Personal dmPolicy is "open", allowing any user to message the bot without pairing.',
fix: 'Set channels.zalouser.dmPolicy to "pairing" or "allowlist" to restrict access.',
});
}
}
return issues;
}