mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 15:28:27 +00:00
refactor: centralize message provider normalization
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { randomUUID } from "node:crypto";
|
||||
import type { IncomingMessage } from "node:http";
|
||||
import type { ClawdbotConfig } from "../config/config.js";
|
||||
import { normalizeMessageProvider } from "../utils/message-provider.js";
|
||||
import {
|
||||
type HookMappingResolved,
|
||||
resolveHookMappings,
|
||||
@@ -174,20 +175,22 @@ export function normalizeAgentPayload(
|
||||
? sessionKeyRaw.trim()
|
||||
: `hook:${idFactory()}`;
|
||||
const providerRaw = payload.provider;
|
||||
const providerNormalized =
|
||||
typeof providerRaw === "string"
|
||||
? normalizeMessageProvider(providerRaw)
|
||||
: undefined;
|
||||
const provider =
|
||||
providerRaw === "whatsapp" ||
|
||||
providerRaw === "telegram" ||
|
||||
providerRaw === "discord" ||
|
||||
providerRaw === "slack" ||
|
||||
providerRaw === "signal" ||
|
||||
providerRaw === "imessage" ||
|
||||
providerRaw === "last"
|
||||
? providerRaw
|
||||
: providerRaw === "imsg"
|
||||
? "imessage"
|
||||
: providerRaw === undefined
|
||||
? "last"
|
||||
: null;
|
||||
providerNormalized === "whatsapp" ||
|
||||
providerNormalized === "telegram" ||
|
||||
providerNormalized === "discord" ||
|
||||
providerNormalized === "slack" ||
|
||||
providerNormalized === "signal" ||
|
||||
providerNormalized === "imessage" ||
|
||||
providerNormalized === "last"
|
||||
? providerNormalized
|
||||
: providerRaw === undefined
|
||||
? "last"
|
||||
: null;
|
||||
if (provider === null) {
|
||||
return {
|
||||
ok: false,
|
||||
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
import { registerAgentRunContext } from "../../infra/agent-events.js";
|
||||
import { defaultRuntime } from "../../runtime.js";
|
||||
import { resolveSendPolicy } from "../../sessions/send-policy.js";
|
||||
import { normalizeMessageProvider } from "../../utils/message-provider.js";
|
||||
import { normalizeE164 } from "../../utils.js";
|
||||
import {
|
||||
type AgentWaitParams,
|
||||
@@ -138,15 +139,8 @@ export const agentHandlers: GatewayRequestHandlers = {
|
||||
|
||||
const runId = idem;
|
||||
|
||||
const requestedProviderRaw =
|
||||
typeof request.provider === "string" ? request.provider.trim() : "";
|
||||
const requestedProviderNormalized = requestedProviderRaw
|
||||
? requestedProviderRaw.toLowerCase()
|
||||
: "last";
|
||||
const requestedProvider =
|
||||
requestedProviderNormalized === "imsg"
|
||||
? "imessage"
|
||||
: requestedProviderNormalized;
|
||||
normalizeMessageProvider(request.provider) ?? "last";
|
||||
|
||||
const lastProvider = sessionEntry?.lastProvider;
|
||||
const lastTo =
|
||||
|
||||
@@ -6,6 +6,7 @@ import { sendMessageSignal } from "../../signal/index.js";
|
||||
import { sendMessageSlack } from "../../slack/send.js";
|
||||
import { sendMessageTelegram } from "../../telegram/send.js";
|
||||
import { resolveTelegramToken } from "../../telegram/token.js";
|
||||
import { normalizeMessageProvider } from "../../utils/message-provider.js";
|
||||
import { resolveDefaultWhatsAppAccountId } from "../../web/accounts.js";
|
||||
import { sendMessageWhatsApp, sendPollWhatsApp } from "../../web/outbound.js";
|
||||
import {
|
||||
@@ -51,8 +52,7 @@ export const sendHandlers: GatewayRequestHandlers = {
|
||||
}
|
||||
const to = request.to.trim();
|
||||
const message = request.message.trim();
|
||||
const providerRaw = (request.provider ?? "whatsapp").toLowerCase();
|
||||
const provider = providerRaw === "imsg" ? "imessage" : providerRaw;
|
||||
const provider = normalizeMessageProvider(request.provider) ?? "whatsapp";
|
||||
try {
|
||||
if (provider === "telegram") {
|
||||
const cfg = loadConfig();
|
||||
@@ -220,8 +220,7 @@ export const sendHandlers: GatewayRequestHandlers = {
|
||||
return;
|
||||
}
|
||||
const to = request.to.trim();
|
||||
const providerRaw = (request.provider ?? "whatsapp").toLowerCase();
|
||||
const provider = providerRaw === "imsg" ? "imessage" : providerRaw;
|
||||
const provider = normalizeMessageProvider(request.provider) ?? "whatsapp";
|
||||
if (provider !== "whatsapp" && provider !== "discord") {
|
||||
respond(
|
||||
false,
|
||||
|
||||
@@ -21,6 +21,11 @@ import {
|
||||
|
||||
installGatewayTestHooks();
|
||||
|
||||
function expectProviders(call: Record<string, unknown>, provider: string) {
|
||||
expect(call.provider).toBe(provider);
|
||||
expect(call.messageProvider).toBe(provider);
|
||||
}
|
||||
|
||||
describe("gateway server agent", () => {
|
||||
test("agent falls back to allowFrom when lastTo is stale", async () => {
|
||||
testState.allowFrom = ["+436769770569"];
|
||||
@@ -57,8 +62,7 @@ describe("gateway server agent", () => {
|
||||
|
||||
const spy = vi.mocked(agentCommand);
|
||||
const call = spy.mock.calls.at(-1)?.[0] as Record<string, unknown>;
|
||||
expect(call.provider).toBe("whatsapp");
|
||||
expect(call.messageProvider).toBe("whatsapp");
|
||||
expectProviders(call, "whatsapp");
|
||||
expect(call.to).toBe("+436769770569");
|
||||
expect(call.sessionId).toBe("sess-main-stale");
|
||||
|
||||
@@ -138,7 +142,7 @@ describe("gateway server agent", () => {
|
||||
|
||||
const spy = vi.mocked(agentCommand);
|
||||
const call = spy.mock.calls.at(-1)?.[0] as Record<string, unknown>;
|
||||
expect(call.provider).toBe("whatsapp");
|
||||
expectProviders(call, "whatsapp");
|
||||
expect(call.messageProvider).toBe("whatsapp");
|
||||
expect(call.to).toBe("+1555");
|
||||
expect(call.deliver).toBe(true);
|
||||
@@ -183,8 +187,7 @@ describe("gateway server agent", () => {
|
||||
|
||||
const spy = vi.mocked(agentCommand);
|
||||
const call = spy.mock.calls.at(-1)?.[0] as Record<string, unknown>;
|
||||
expect(call.provider).toBe("telegram");
|
||||
expect(call.messageProvider).toBe("telegram");
|
||||
expectProviders(call, "telegram");
|
||||
expect(call.to).toBe("123");
|
||||
expect(call.deliver).toBe(true);
|
||||
expect(call.bestEffortDeliver).toBe(true);
|
||||
@@ -228,8 +231,7 @@ describe("gateway server agent", () => {
|
||||
|
||||
const spy = vi.mocked(agentCommand);
|
||||
const call = spy.mock.calls.at(-1)?.[0] as Record<string, unknown>;
|
||||
expect(call.provider).toBe("discord");
|
||||
expect(call.messageProvider).toBe("discord");
|
||||
expectProviders(call, "discord");
|
||||
expect(call.to).toBe("channel:discord-123");
|
||||
expect(call.deliver).toBe(true);
|
||||
expect(call.bestEffortDeliver).toBe(true);
|
||||
@@ -273,7 +275,7 @@ describe("gateway server agent", () => {
|
||||
|
||||
const spy = vi.mocked(agentCommand);
|
||||
const call = spy.mock.calls.at(-1)?.[0] as Record<string, unknown>;
|
||||
expect(call.provider).toBe("signal");
|
||||
expectProviders(call, "signal");
|
||||
expect(call.to).toBe("+15551234567");
|
||||
expect(call.deliver).toBe(true);
|
||||
expect(call.bestEffortDeliver).toBe(true);
|
||||
@@ -318,7 +320,7 @@ describe("gateway server agent", () => {
|
||||
|
||||
const spy = vi.mocked(agentCommand);
|
||||
const call = spy.mock.calls.at(-1)?.[0] as Record<string, unknown>;
|
||||
expect(call.provider).toBe("whatsapp");
|
||||
expectProviders(call, "whatsapp");
|
||||
expect(call.to).toBe("+1555");
|
||||
expect(call.deliver).toBe(true);
|
||||
expect(call.bestEffortDeliver).toBe(true);
|
||||
|
||||
Reference in New Issue
Block a user