mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-19 13:41:43 +00:00
* fix(channels): enforce configured read targets * test(channels): align policy checks with boundaries * fix: bind channel reads to trusted turn context * test: satisfy gateway lint * fix: narrow message action channel imports * fix(feishu): authorize message reads before provider access * fix(slack): await reaction clear authorization * fix(channels): align provider action contracts * fix(matrix): read direct-room account data before sync * fix(channels): reject unsupported attachment actions early * fix: restore trusted operator conversation reads * fix(matrix): authorize pin actions before provider reads * fix: preserve trusted channel read workflows * fix(discord): resolve current channel ids consistently * fix(agents): preserve message action turn capability * fix(plugins): enforce host-owned read provenance * fix(channels): harden Teams and Discord read policy * fix(channels): preserve exact-current action compatibility * fix(imessage): authorize trusted current chat aliases * fix(channels): preserve normalized current aliases * fix(channels): preserve external current target aliases * fix: reconcile channel policy with current main * fix(discord): isolate DM read policy * fix(channels): enforce provider read gates * fix(gateway): await serialized message action identity tokens * fix(ci): refresh channel protocol contracts
46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
// Nextcloud Talk helper module supports normalize behavior.
|
|
export function stripNextcloudTalkTargetPrefix(raw: string): string | undefined {
|
|
const trimmed = raw.trim();
|
|
if (!trimmed) {
|
|
return undefined;
|
|
}
|
|
|
|
let normalized = trimmed;
|
|
|
|
if (normalized.startsWith("nextcloud-talk:")) {
|
|
normalized = normalized.slice("nextcloud-talk:".length).trim();
|
|
} else if (normalized.startsWith("nc-talk:")) {
|
|
normalized = normalized.slice("nc-talk:".length).trim();
|
|
} else if (normalized.startsWith("nc:")) {
|
|
normalized = normalized.slice("nc:".length).trim();
|
|
}
|
|
|
|
if (normalized.startsWith("room:")) {
|
|
normalized = normalized.slice("room:".length).trim();
|
|
}
|
|
|
|
if (!normalized) {
|
|
return undefined;
|
|
}
|
|
|
|
return normalized;
|
|
}
|
|
|
|
export function normalizeNextcloudTalkMessagingTarget(raw: string): string | undefined {
|
|
const normalized = stripNextcloudTalkTargetPrefix(raw);
|
|
return normalized ? `nextcloud-talk:${normalized}`.toLowerCase() : undefined;
|
|
}
|
|
|
|
export function looksLikeNextcloudTalkTargetId(raw: string): boolean {
|
|
const trimmed = raw.trim();
|
|
if (!trimmed) {
|
|
return false;
|
|
}
|
|
|
|
if (/^(nextcloud-talk|nc-talk|nc|room):/i.test(trimmed)) {
|
|
return true;
|
|
}
|
|
|
|
return /^[a-z0-9]{8,}$/i.test(trimmed);
|
|
}
|