openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
104 lines (103 loc) • 4.51 kB
JavaScript
import { n as resolveOutboundSendDep } from "./send-deps-DjbvQHZ4.js";
import { a as resolveChannelMediaMaxBytes } from "./media-runtime-fgpmX6eL.js";
import { t as detectBinary } from "./detect-binary-ihWW1rG_.js";
import { J as setSetupChannelEnabled } from "./setup-wizard-helpers-Dv-t1nb8.js";
import { l as createDetectedBinaryStatus } from "./setup-wizard-proxy-mR4OIy7C.js";
import "./setup-DHfdBmUU.js";
import "./setup-tools-c-3eI4zR.js";
import "./channel-outbound-B3_Zy-kG.js";
import { t as PAIRING_APPROVED_MESSAGE } from "./pairing-message-DNhqI-OE.js";
import { a as resolveIMessageAccount, o as resolveIMessageDuplicateSourceOwner } from "./accounts-DzoymhDS.js";
import { o as probeIMessage } from "./sanitize-outbound-B_Wx0jBt.js";
import { i as imessageDmPolicy, o as imessageSetupStatusBase, r as imessageCompletionNote, t as createIMessageCliPathTextInput } from "./setup-core-e4UFbnJk.js";
import { t as IMESSAGE_LEGACY_OUTBOUND_SEND_DEP_KEYS } from "./outbound-send-deps-B-QEsLSM.js";
import { t as monitorIMessageProvider } from "./monitor-DixN9DPl.js";
import { t as sendMessageIMessage } from "./send-CjeAdmmw.js";
//#region extensions/imessage/src/setup-surface.ts
const channel = "imessage";
const imessageSetupWizard = {
channel,
status: createDetectedBinaryStatus({
channelLabel: "iMessage",
binaryLabel: "imsg",
configuredLabel: imessageSetupStatusBase.configuredLabel,
unconfiguredLabel: imessageSetupStatusBase.unconfiguredLabel,
configuredHint: imessageSetupStatusBase.configuredHint,
unconfiguredHint: imessageSetupStatusBase.unconfiguredHint,
configuredScore: imessageSetupStatusBase.configuredScore,
unconfiguredScore: imessageSetupStatusBase.unconfiguredScore,
resolveConfigured: imessageSetupStatusBase.resolveConfigured,
resolveBinaryPath: ({ cfg, accountId }) => resolveIMessageAccount({
cfg,
accountId
}).config.cliPath ?? "imsg",
detectBinary
}),
credentials: [],
textInputs: [createIMessageCliPathTextInput(async ({ currentValue }) => {
return !await detectBinary(currentValue ?? "imsg");
})],
completionNote: imessageCompletionNote,
dmPolicy: imessageDmPolicy,
disable: (cfg) => setSetupChannelEnabled(cfg, channel, false)
};
//#endregion
//#region extensions/imessage/src/channel.runtime.ts
async function sendIMessageOutbound(params) {
const send = resolveOutboundSendDep(params.deps, "imessage", { legacyKeys: IMESSAGE_LEGACY_OUTBOUND_SEND_DEP_KEYS }) ?? sendMessageIMessage;
const maxBytes = resolveChannelMediaMaxBytes({
cfg: params.cfg,
resolveChannelLimitMb: ({ cfg, accountId }) => cfg.channels?.imessage?.accounts?.[accountId]?.mediaMaxMb ?? cfg.channels?.imessage?.mediaMaxMb,
accountId: params.accountId
});
return await send(params.to, params.text, {
config: params.cfg,
...params.mediaUrl ? { mediaUrl: params.mediaUrl } : {},
...params.mediaLocalRoots?.length ? { mediaLocalRoots: params.mediaLocalRoots } : {},
...params.audioAsVoice ? { audioAsVoice: true } : {},
maxBytes,
accountId: params.accountId ?? void 0,
replyToId: params.replyToId ?? void 0
});
}
async function notifyIMessageApproval(params) {
await sendMessageIMessage(params.id, PAIRING_APPROVED_MESSAGE, { config: params.cfg });
}
async function probeIMessageAccount(params) {
return await probeIMessage(params?.timeoutMs, {
cliPath: params?.cliPath,
dbPath: params?.dbPath
});
}
async function startIMessageGatewayAccount(ctx) {
const account = ctx.account;
const cliPath = account.config.cliPath?.trim() || "imsg";
const dbPath = account.config.dbPath?.trim();
ctx.setStatus({
accountId: account.accountId,
cliPath,
dbPath: dbPath ?? null
});
const ownerAccountId = resolveIMessageDuplicateSourceOwner({
cfg: ctx.cfg,
account
});
if (ownerAccountId) {
ctx.log?.info?.(`[${account.accountId}] skipping watcher: duplicate iMessage source; using account "${ownerAccountId}"`);
if (ctx.abortSignal.aborted) return;
await new Promise((resolve) => {
ctx.abortSignal.addEventListener("abort", () => resolve(), { once: true });
});
return;
}
ctx.log?.info?.(`[${account.accountId}] starting provider (${cliPath}${dbPath ? ` db=${dbPath}` : ""})`);
return await monitorIMessageProvider({
accountId: account.accountId,
config: ctx.cfg,
runtime: ctx.runtime,
abortSignal: ctx.abortSignal,
channelRuntime: ctx.channelRuntime
});
}
//#endregion
export { imessageSetupWizard, notifyIMessageApproval, probeIMessageAccount, sendIMessageOutbound, startIMessageGatewayAccount };