"use strict";Object.defineProperty(exports, "__esModule", { value: true });Object.defineProperty(exports, "extractSignalCliArchive", { enumerable: true, get: function () {return _installSignalCliDG3UpcMC.t;} });Object.defineProperty(exports, "formatSignalPairingIdLine", { enumerable: true, get: function () {return _identityDjM1QVic.t;} });Object.defineProperty(exports, "formatSignalSenderDisplay", { enumerable: true, get: function () {return _identityDjM1QVic.n;} });Object.defineProperty(exports, "formatSignalSenderId", { enumerable: true, get: function () {return _identityDjM1QVic.r;} });Object.defineProperty(exports, "installSignalCli", { enumerable: true, get: function () {return _installSignalCliDG3UpcMC.n;} });Object.defineProperty(exports, "isSignalGroupAllowed", { enumerable: true, get: function () {return _identityDjM1QVic.i;} });Object.defineProperty(exports, "isSignalSenderAllowed", { enumerable: true, get: function () {return _identityDjM1QVic.a;} });Object.defineProperty(exports, "listEnabledSignalAccounts", { enumerable: true, get: function () {return _accountsDmKrW9vL.t;} });Object.defineProperty(exports, "listSignalAccountIds", { enumerable: true, get: function () {return _accountsDmKrW9vL.n;} });Object.defineProperty(exports, "looksLikeArchive", { enumerable: true, get: function () {return _installSignalCliDG3UpcMC.r;} });Object.defineProperty(exports, "looksLikeSignalTargetId", { enumerable: true, get: function () {return _identityDjM1QVic.d;} });Object.defineProperty(exports, "looksLikeUuid", { enumerable: true, get: function () {return _identityDjM1QVic.u;} });Object.defineProperty(exports, "markdownToSignalText", { enumerable: true, get: function () {return _sendYvq8Fn7p.i;} });Object.defineProperty(exports, "markdownToSignalTextChunks", { enumerable: true, get: function () {return _sendYvq8Fn7p.a;} });Object.defineProperty(exports, "monitorSignalProvider", { enumerable: true, get: function () {return _monitorC_ncZRO.t;} });Object.defineProperty(exports, "normalizeSignalAccountInput", { enumerable: true, get: function () {return _setupCoreWZ0r306I.r;} });Object.defineProperty(exports, "normalizeSignalAllowRecipient", { enumerable: true, get: function () {return _identityDjM1QVic.o;} });Object.defineProperty(exports, "normalizeSignalMessagingTarget", { enumerable: true, get: function () {return _identityDjM1QVic.f;} });Object.defineProperty(exports, "pickAsset", { enumerable: true, get: function () {return _installSignalCliDG3UpcMC.i;} });Object.defineProperty(exports, "probeSignal", { enumerable: true, get: function () {return _probeCa9NqB3D.t;} });Object.defineProperty(exports, "removeReactionSignal", { enumerable: true, get: function () {return _reactionRuntimeApi1LqtjFOR.t;} });Object.defineProperty(exports, "resolveDefaultSignalAccountId", { enumerable: true, get: function () {return _accountsDmKrW9vL.r;} });Object.defineProperty(exports, "resolveSignalAccount", { enumerable: true, get: function () {return _accountsDmKrW9vL.i;} });exports.resolveSignalOutboundTarget = resolveSignalOutboundTarget;Object.defineProperty(exports, "resolveSignalPeerId", { enumerable: true, get: function () {return _identityDjM1QVic.s;} });Object.defineProperty(exports, "resolveSignalReactionLevel", { enumerable: true, get: function () {return _messageActionsDouooyu.n;} });Object.defineProperty(exports, "resolveSignalRecipient", { enumerable: true, get: function () {return _identityDjM1QVic.c;} });Object.defineProperty(exports, "resolveSignalSender", { enumerable: true, get: function () {return _identityDjM1QVic.l;} });Object.defineProperty(exports, "sendMessageSignal", { enumerable: true, get: function () {return _sendYvq8Fn7p.t;} });Object.defineProperty(exports, "sendReactionSignal", { enumerable: true, get: function () {return _reactionRuntimeApi1LqtjFOR.n;} });Object.defineProperty(exports, "sendReadReceiptSignal", { enumerable: true, get: function () {return _sendYvq8Fn7p.n;} });Object.defineProperty(exports, "sendTypingSignal", { enumerable: true, get: function () {return _sendYvq8Fn7p.r;} });Object.defineProperty(exports, "signalMessageActions", { enumerable: true, get: function () {return _messageActionsDouooyu.t;} });exports.signalSetupPlugin = exports.signalPlugin = void 0;var _stringCoerceBUSzWgUA = require("../../string-coerce-BUSzWgUA.js"); var _utilsD5DtWkEu = require("../../utils-D5DtWkEu.js"); var _accountIdDvNGLnmF = require("../../account-id-DvNGLnmF.js"); var _chunkBJOSq3sp = require("../../chunk-BJOSq3sp.js"); var _sendDepsBtbJzzlt = require("../../send-deps-BtbJzzlt.js"); var _channelConfigHelpersDQ2y7w8c = require("../../channel-config-helpers-DQ2y7w8c.js"); require("../../text-runtime-3VPC1sGh.js"); var _accountHelpersBRpBAbGJ = require("../../account-helpers-BRpBAbGJ.js"); var _baseSessionKeyH0Gn9zFj = require("../../base-session-key-h0Gn9zFj.js"); var _coreDaNQJg_E = require("../../core-DaNQJg_E.js"); require("../../channel-core-DnL1WWaZ.js"); require("../../routing-Ewkev_pm.js"); var _markdownTablesBYk02T3e = require("../../markdown-tables-BYk02T3e.js"); var _channelPolicyNo84IHKf = require("../../channel-policy-no84IHKf.js"); var _mediaLimitsDkn3YOzj = require("../../media-limits-Dkn3YOzj.js"); var _pairingMessageYncCu3V = require("../../pairing-message-YncCu3-v.js"); var _channelPairingRPdRacuP = require("../../channel-pairing-rPdRacuP.js"); var _statusHelpersCsb7hAJZ = require("../../status-helpers-Csb7hAJZ.js"); var _approvalAuthHelpersDuj02slu = require("../../approval-auth-helpers-Duj02slu.js"); require("../../config-runtime-Hrpwdk2u.js"); require("../../reply-chunking-Bt55O3Yu.js"); require("../../outbound-runtime--HEvGZCa.js"); require("../../media-runtime-_5B9mz0A.js"); var _allowlistConfigEditCxMdpY_U = require("../../allowlist-config-edit-CxMdpY_U.js"); var _channelSendResultEblsyUhk = require("../../channel-send-result-eblsyUhk.js"); require("../../channel-status-D_X-Zkpl.js"); var _accountsDmKrW9vL = require("../../accounts-DmKrW9vL.js"); var _identityDjM1QVic = require("../../identity-DjM1QVic.js"); var _sendYvq8Fn7p = require("../../send-Yvq8Fn7p.js"); var _reactionRuntimeApi1LqtjFOR = require("../../reaction-runtime-api-1LqtjFOR.js"); var _messageActionsDouooyu = require("../../message-actions-Douooyu3.js"); var _setupCoreWZ0r306I = require("../../setup-core-WZ0r306I.js"); var _configSchemaFvU1lLzV = require("../../config-schema-fvU1lLzV.js"); var _installSignalCliDG3UpcMC = require("../../install-signal-cli-DG3UpcMC.js"); var _monitorC_ncZRO = require("../../monitor-C_ncZRO6.js"); var _probeCa9NqB3D = require("../../probe-Ca9NqB3D.js");function _interopRequireWildcard(e, t) {if ("function" == typeof WeakMap) var r = new WeakMap(),n = new WeakMap();return (_interopRequireWildcard = function (e, t) {if (!t && e && e.__esModule) return e;var o,i,f = { __proto__: null, default: e };if (null === e || "object" != typeof e && "function" != typeof e) return f;if (o = t ? n : r) {if (o.has(e)) return o.get(e);o.set(e, f);}for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]);return f;})(e, t);} //#region extensions/signal/src/approval-auth.ts function normalizeSignalApproverId(value) { const normalized = (0, _identityDjM1QVic.f)(String(value)); if (!normalized || normalized.startsWith("group:") || normalized.startsWith("username:")) return; if ((0, _identityDjM1QVic.u)(normalized)) return `uuid:${normalized}`; const e164 = (0, _utilsD5DtWkEu.u)(normalized); return e164.length > 1 ? e164 : void 0; } const signalApprovalAuth = (0, _approvalAuthHelpersDuj02slu.t)({ channelLabel: "Signal", resolveApprovers: ({ cfg, accountId }) => { const account = (0, _accountsDmKrW9vL.i)({ cfg, accountId }).config; return (0, _approvalAuthHelpersDuj02slu.n)({ allowFrom: account.allowFrom, defaultTo: account.defaultTo, normalizeApprover: normalizeSignalApproverId }); }, normalizeSenderId: (value) => normalizeSignalApproverId(value) }); //#endregion //#region extensions/signal/src/outbound-session.ts function resolveSignalOutboundTarget(target) { const stripped = target.replace(/^signal:/i, "").trim(); const lowered = (0, _stringCoerceBUSzWgUA.i)(stripped); if (lowered.startsWith("group:")) { const groupId = stripped.slice(6).trim(); if (!groupId) return null; return { peer: { kind: "group", id: groupId }, chatType: "group", from: `group:${groupId}`, to: `group:${groupId}` }; } let recipient = stripped.trim(); if (lowered.startsWith("username:")) recipient = stripped.slice(9).trim();else if (lowered.startsWith("u:")) recipient = stripped.slice(2).trim(); if (!recipient) return null; const uuidCandidate = (0, _stringCoerceBUSzWgUA.i)(recipient).startsWith("uuid:") ? recipient.slice(5) : recipient; const sender = (0, _identityDjM1QVic.l)({ sourceUuid: (0, _identityDjM1QVic.u)(uuidCandidate) ? uuidCandidate : null, sourceNumber: (0, _identityDjM1QVic.u)(uuidCandidate) ? null : recipient }); const peerId = sender ? (0, _identityDjM1QVic.s)(sender) : recipient; const displayRecipient = sender ? (0, _identityDjM1QVic.c)(sender) : recipient; return { peer: { kind: "direct", id: peerId }, chatType: "direct", from: `signal:${displayRecipient}`, to: `signal:${displayRecipient}` }; } //#endregion //#region extensions/signal/src/shared.ts const SIGNAL_CHANNEL = "signal"; async function loadSignalChannelRuntime() { return await Promise.resolve().then(() => jitiImport("../../channel.runtime-CrwbqxQK.js").then((m) => _interopRequireWildcard(m))); } const signalSetupWizard = (0, _setupCoreWZ0r306I.n)(async () => (await loadSignalChannelRuntime()).signalSetupWizard); const signalConfigAdapter = (0, _channelConfigHelpersDQ2y7w8c.c)({ sectionKey: SIGNAL_CHANNEL, listAccountIds: (cfg) => (0, _accountsDmKrW9vL.n)(cfg), resolveAccount: (0, _channelConfigHelpersDQ2y7w8c.t)((params) => (0, _accountsDmKrW9vL.i)(params)), defaultAccountId: (cfg) => (0, _accountsDmKrW9vL.r)(cfg), clearBaseFields: [ "account", "httpUrl", "httpHost", "httpPort", "cliPath", "name"], resolveAllowFrom: (account) => account.config.allowFrom, formatAllowFrom: (allowFrom) => allowFrom.map((entry) => (0, _stringCoerceBUSzWgUA.u)(entry)).filter((entry) => Boolean(entry)).map((entry) => entry === "*" ? "*" : (0, _utilsD5DtWkEu.u)(entry.replace(/^signal:/i, ""))).filter(Boolean), resolveDefaultTo: (account) => account.config.defaultTo }); const signalSecurityAdapter = (0, _channelPolicyNo84IHKf.r)({ channelKey: SIGNAL_CHANNEL, resolveDmPolicy: (account) => account.config.dmPolicy, resolveDmAllowFrom: (account) => account.config.allowFrom, resolveGroupPolicy: (account) => account.config.groupPolicy, surface: "Signal groups", openScope: "any member", groupPolicyPath: "channels.signal.groupPolicy", groupAllowFromPath: "channels.signal.groupAllowFrom", mentionGated: false, policyPathSuffix: "dmPolicy", normalizeDmEntry: (raw) => (0, _utilsD5DtWkEu.u)(raw.replace(/^signal:/i, "").trim()) }); function createSignalPluginBase(params) { return { ...(0, _coreDaNQJg_E.n)({ id: SIGNAL_CHANNEL, meta: { ...(0, _coreDaNQJg_E.o)(SIGNAL_CHANNEL) }, setupWizard: params.setupWizard, capabilities: { chatTypes: ["direct", "group"], media: true, reactions: true }, streaming: { blockStreamingCoalesceDefaults: { minChars: 1500, idleMs: 1e3 } }, reload: { configPrefixes: ["channels.signal"] }, configSchema: _configSchemaFvU1lLzV.t, config: { ...signalConfigAdapter, isConfigured: (account) => account.configured, describeAccount: (account) => (0, _accountHelpersBRpBAbGJ.n)({ account, configured: account.configured, extra: { baseUrl: account.baseUrl } }) }, security: signalSecurityAdapter, setup: params.setup }), messaging: { defaultMarkdownTableMode: "bullets" } }; } //#endregion //#region extensions/signal/src/channel.ts let signalMonitorModulePromise = null; let signalProbeModulePromise = null; let signalSendRuntimePromise = null; async function loadSignalMonitorModule() { signalMonitorModulePromise ??= Promise.resolve().then(() => jitiImport("../../monitor-tlEuzAl6.js").then((m) => _interopRequireWildcard(m))); return await signalMonitorModulePromise; } async function loadSignalProbeModule() { signalProbeModulePromise ??= Promise.resolve().then(() => jitiImport("../../probe-Czf9BuP-.js").then((m) => _interopRequireWildcard(m))); return await signalProbeModulePromise; } async function loadSignalSendRuntime() { signalSendRuntimePromise ??= Promise.resolve().then(() => jitiImport("../../send.runtime-DEE8JtoU.js").then((m) => _interopRequireWildcard(m))); return await signalSendRuntimePromise; } async function resolveSignalSendContext(params) { return { send: (0, _sendDepsBtbJzzlt.t)(params.deps, "signal") ?? (await loadSignalSendRuntime()).sendMessageSignal, maxBytes: (0, _mediaLimitsDkn3YOzj.t)({ cfg: params.cfg, resolveChannelLimitMb: ({ cfg, accountId }) => cfg.channels?.signal?.accounts?.[accountId]?.mediaMaxMb ?? cfg.channels?.signal?.mediaMaxMb, accountId: params.accountId }) }; } async function sendSignalOutbound(params) { const { send, maxBytes } = await resolveSignalSendContext(params); return await send(params.to, params.text, { cfg: params.cfg, ...(params.mediaUrl ? { mediaUrl: params.mediaUrl } : {}), ...(params.mediaLocalRoots?.length ? { mediaLocalRoots: params.mediaLocalRoots } : {}), ...(params.mediaReadFile ? { mediaReadFile: params.mediaReadFile } : {}), maxBytes, accountId: params.accountId ?? void 0 }); } function inferSignalTargetChatType(rawTo) { let to = rawTo.trim(); if (!to) return; if (/^signal:/i.test(to)) to = to.replace(/^signal:/i, "").trim(); if (!to) return; const lower = (0, _stringCoerceBUSzWgUA.i)(to); if (lower.startsWith("group:")) return "group"; if (lower.startsWith("username:") || lower.startsWith("u:")) return "direct"; return "direct"; } function parseSignalExplicitTarget(raw) { const normalized = (0, _identityDjM1QVic.f)(raw); if (!normalized) return null; return { to: normalized, chatType: inferSignalTargetChatType(normalized) }; } function buildSignalBaseSessionKey(params) { return (0, _baseSessionKeyH0Gn9zFj.t)({ ...params, channel: "signal" }); } function resolveSignalOutboundSessionRoute(params) { const resolved = resolveSignalOutboundTarget(params.target); if (!resolved) return null; const baseSessionKey = buildSignalBaseSessionKey({ cfg: params.cfg, agentId: params.agentId, accountId: params.accountId, peer: resolved.peer }); return { sessionKey: baseSessionKey, baseSessionKey, ...resolved }; } async function sendFormattedSignalText(ctx) { const { send, maxBytes } = await resolveSignalSendContext({ cfg: ctx.cfg, accountId: ctx.accountId ?? void 0, deps: ctx.deps }); const limit = (0, _chunkBJOSq3sp.c)(ctx.cfg, "signal", ctx.accountId ?? void 0, { fallbackLimit: 4e3 }); const tableMode = (0, _markdownTablesBYk02T3e.t)({ cfg: ctx.cfg, channel: "signal", accountId: ctx.accountId ?? void 0 }); let chunks = limit === void 0 ? (0, _sendYvq8Fn7p.a)(ctx.text, Number.POSITIVE_INFINITY, { tableMode }) : (0, _sendYvq8Fn7p.a)(ctx.text, limit, { tableMode }); if (chunks.length === 0 && ctx.text) chunks = [{ text: ctx.text, styles: [] }]; const results = []; for (const chunk of chunks) { ctx.abortSignal?.throwIfAborted(); const result = await send(ctx.to, chunk.text, { cfg: ctx.cfg, maxBytes, accountId: ctx.accountId ?? void 0, textMode: "plain", textStyles: chunk.styles }); results.push(result); } return (0, _channelSendResultEblsyUhk.n)("signal", results); } async function sendFormattedSignalMedia(ctx) { ctx.abortSignal?.throwIfAborted(); const { send, maxBytes } = await resolveSignalSendContext({ cfg: ctx.cfg, accountId: ctx.accountId ?? void 0, deps: ctx.deps }); const tableMode = (0, _markdownTablesBYk02T3e.t)({ cfg: ctx.cfg, channel: "signal", accountId: ctx.accountId ?? void 0 }); const formatted = (0, _sendYvq8Fn7p.a)(ctx.text, Number.POSITIVE_INFINITY, { tableMode })[0] ?? { text: ctx.text, styles: [] }; return (0, _channelSendResultEblsyUhk.t)("signal", await send(ctx.to, formatted.text, { cfg: ctx.cfg, mediaUrl: ctx.mediaUrl, mediaLocalRoots: ctx.mediaLocalRoots, ...(ctx.mediaReadFile ? { mediaReadFile: ctx.mediaReadFile } : {}), maxBytes, accountId: ctx.accountId ?? void 0, textMode: "plain", textStyles: formatted.styles })); } const signalPlugin = exports.signalPlugin = (0, _coreDaNQJg_E.r)({ base: { ...createSignalPluginBase({ setupWizard: signalSetupWizard, setup: _setupCoreWZ0r306I.s }), actions: _messageActionsDouooyu.t, approvalCapability: signalApprovalAuth, allowlist: (0, _allowlistConfigEditCxMdpY_U.n)({ channelId: "signal", resolveAccount: _accountsDmKrW9vL.i, normalize: ({ cfg, accountId, values }) => signalConfigAdapter.formatAllowFrom({ cfg, accountId, allowFrom: values }), resolveDmAllowFrom: (account) => account.config.allowFrom, resolveGroupAllowFrom: (account) => account.config.groupAllowFrom, resolveDmPolicy: (account) => account.config.dmPolicy, resolveGroupPolicy: (account) => account.config.groupPolicy }), agentPrompt: { reactionGuidance: ({ cfg, accountId }) => { const level = (0, _messageActionsDouooyu.n)({ cfg, accountId: accountId ?? void 0 }).agentReactionGuidance; return level ? { level, channelLabel: "Signal" } : void 0; } }, messaging: { normalizeTarget: _identityDjM1QVic.f, parseExplicitTarget: ({ raw }) => parseSignalExplicitTarget(raw), inferTargetChatType: ({ to }) => inferSignalTargetChatType(to), resolveOutboundSessionRoute: (params) => resolveSignalOutboundSessionRoute(params), targetResolver: { looksLikeId: _identityDjM1QVic.d, hint: "" } }, status: (0, _statusHelpersCsb7hAJZ.u)({ defaultRuntime: (0, _statusHelpersCsb7hAJZ.d)(_accountIdDvNGLnmF.t), collectStatusIssues: (accounts) => (0, _statusHelpersCsb7hAJZ.c)("signal", accounts), buildChannelSummary: ({ snapshot }) => (0, _statusHelpersCsb7hAJZ.n)(snapshot, { baseUrl: snapshot.baseUrl ?? null, probe: snapshot.probe, lastProbeAt: snapshot.lastProbeAt ?? null }), probeAccount: async ({ account, timeoutMs }) => { const baseUrl = account.baseUrl; const { probeSignal } = await loadSignalProbeModule(); return await probeSignal(baseUrl, timeoutMs); }, formatCapabilitiesProbe: ({ probe }) => probe?.version ? [{ text: `Signal daemon: ${probe.version}` }] : [], resolveAccountSnapshot: ({ account }) => ({ accountId: account.accountId, name: account.name, enabled: account.enabled, configured: account.configured, extra: { baseUrl: account.baseUrl } }) }), gateway: { startAccount: async (ctx) => { const account = ctx.account; ctx.setStatus({ accountId: account.accountId, baseUrl: account.baseUrl }); ctx.log?.info(`[${account.accountId}] starting provider (${account.baseUrl})`); const { monitorSignalProvider } = await loadSignalMonitorModule(); return await monitorSignalProvider({ accountId: account.accountId, config: ctx.cfg, runtime: ctx.runtime, abortSignal: ctx.abortSignal, mediaMaxMb: account.config.mediaMaxMb }); } } }, pairing: { text: { idLabel: "signalNumber", message: _pairingMessageYncCu3V.t, normalizeAllowEntry: (0, _channelPairingRPdRacuP.i)(/^signal:/i), notify: async ({ id, message }) => { await (await loadSignalSendRuntime()).sendMessageSignal(id, message); } } }, security: signalSecurityAdapter, outbound: { base: { deliveryMode: "direct", chunker: _chunkBJOSq3sp.a, chunkerMode: "text", textChunkLimit: 4e3, sendFormattedText: async ({ cfg, to, text, accountId, deps, abortSignal }) => await sendFormattedSignalText({ cfg, to, text, accountId, deps, abortSignal }), sendFormattedMedia: async ({ cfg, to, text, mediaUrl, mediaLocalRoots, mediaReadFile, accountId, deps, abortSignal }) => await sendFormattedSignalMedia({ cfg, to, text, mediaUrl, mediaLocalRoots, mediaReadFile, accountId, deps, abortSignal }) }, attachedResults: { channel: "signal", sendText: async ({ cfg, to, text, accountId, deps }) => await sendSignalOutbound({ cfg, to, text, accountId: accountId ?? void 0, deps }), sendMedia: async ({ cfg, to, text, mediaUrl, mediaLocalRoots, mediaReadFile, accountId, deps }) => await sendSignalOutbound({ cfg, to, text, mediaUrl, mediaLocalRoots, mediaReadFile, accountId: accountId ?? void 0, deps }) } } }); //#endregion //#region extensions/signal/src/channel.setup.ts const signalSetupPlugin = exports.signalSetupPlugin = { ...createSignalPluginBase({ setupWizard: signalSetupWizard, setup: _setupCoreWZ0r306I.s }) }; //#endregion /* v9-ce1b13ba7e95be17 */