diff --git a/extensions/signal/src/approval-auth.ts b/extensions/signal/src/approval-auth.ts index 83006136101..a8e5133af52 100644 --- a/extensions/signal/src/approval-auth.ts +++ b/extensions/signal/src/approval-auth.ts @@ -5,7 +5,7 @@ import { import { normalizeSignalMessagingTarget } from "openclaw/plugin-sdk/channel-targets"; import { normalizeE164 } from "openclaw/plugin-sdk/text-runtime"; import { resolveSignalAccount } from "./accounts.js"; -import { looksLikeUuid } from "./identity.js"; +import { looksLikeUuid } from "./uuid.js"; function normalizeSignalApproverId(value: string | number): string | undefined { const normalized = normalizeSignalMessagingTarget(String(value)); diff --git a/extensions/signal/src/identity.ts b/extensions/signal/src/identity.ts index dbd86ca1584..4375e79e0c4 100644 --- a/extensions/signal/src/identity.ts +++ b/extensions/signal/src/identity.ts @@ -1,5 +1,6 @@ import { evaluateSenderGroupAccessForPolicy } from "openclaw/plugin-sdk/group-access"; import { normalizeE164 } from "openclaw/plugin-sdk/text-runtime"; +import { looksLikeUuid } from "./uuid.js"; export type SignalSender = | { kind: "phone"; raw: string; e164: string } @@ -10,19 +11,7 @@ type SignalAllowEntry = | { kind: "phone"; e164: string } | { kind: "uuid"; raw: string }; -const UUID_HYPHENATED_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; -const UUID_COMPACT_RE = /^[0-9a-f]{32}$/i; - -export function looksLikeUuid(value: string): boolean { - if (UUID_HYPHENATED_RE.test(value) || UUID_COMPACT_RE.test(value)) { - return true; - } - const compact = value.replace(/-/g, ""); - if (!/^[0-9a-f]+$/i.test(compact)) { - return false; - } - return /[a-f]/i.test(compact); -} +export { looksLikeUuid } from "./uuid.js"; function stripSignalPrefix(value: string): string { return value.replace(/^signal:/i, "").trim(); diff --git a/extensions/signal/src/outbound-session.ts b/extensions/signal/src/outbound-session.ts index b239b6c252c..0b56664e27a 100644 --- a/extensions/signal/src/outbound-session.ts +++ b/extensions/signal/src/outbound-session.ts @@ -1,10 +1,6 @@ import { type RoutePeer } from "openclaw/plugin-sdk/routing"; -import { - looksLikeUuid, - resolveSignalPeerId, - resolveSignalRecipient, - resolveSignalSender, -} from "./identity.js"; +import { resolveSignalPeerId, resolveSignalRecipient, resolveSignalSender } from "./identity.js"; +import { looksLikeUuid } from "./uuid.js"; export type ResolvedSignalOutboundTarget = { peer: RoutePeer; diff --git a/extensions/signal/src/uuid.ts b/extensions/signal/src/uuid.ts new file mode 100644 index 00000000000..4736e1949bd --- /dev/null +++ b/extensions/signal/src/uuid.ts @@ -0,0 +1,13 @@ +const UUID_HYPHENATED_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; +const UUID_COMPACT_RE = /^[0-9a-f]{32}$/i; + +export function looksLikeUuid(value: string): boolean { + if (UUID_HYPHENATED_RE.test(value) || UUID_COMPACT_RE.test(value)) { + return true; + } + const compact = value.replace(/-/g, ""); + if (!/^[0-9a-f]+$/i.test(compact)) { + return false; + } + return /[a-f]/i.test(compact); +}