@producible/cereworker-channels 26.520.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/adapters/discord.d.ts +21 -0
- package/dist/adapters/discord.d.ts.map +1 -0
- package/dist/adapters/discord.js +183 -0
- package/dist/adapters/discord.js.map +1 -0
- package/dist/adapters/feishu.d.ts +10 -0
- package/dist/adapters/feishu.d.ts.map +1 -0
- package/dist/adapters/feishu.js +114 -0
- package/dist/adapters/feishu.js.map +1 -0
- package/dist/adapters/irc.d.ts +23 -0
- package/dist/adapters/irc.d.ts.map +1 -0
- package/dist/adapters/irc.js +158 -0
- package/dist/adapters/irc.js.map +1 -0
- package/dist/adapters/matrix.d.ts +9 -0
- package/dist/adapters/matrix.d.ts.map +1 -0
- package/dist/adapters/matrix.js +70 -0
- package/dist/adapters/matrix.js.map +1 -0
- package/dist/adapters/signal.d.ts +10 -0
- package/dist/adapters/signal.d.ts.map +1 -0
- package/dist/adapters/signal.js +116 -0
- package/dist/adapters/signal.js.map +1 -0
- package/dist/adapters/slack.d.ts +9 -0
- package/dist/adapters/slack.d.ts.map +1 -0
- package/dist/adapters/slack.js +75 -0
- package/dist/adapters/slack.js.map +1 -0
- package/dist/adapters/telegram.d.ts +7 -0
- package/dist/adapters/telegram.d.ts.map +1 -0
- package/dist/adapters/telegram.js +92 -0
- package/dist/adapters/telegram.js.map +1 -0
- package/dist/adapters/wechat.d.ts +8 -0
- package/dist/adapters/wechat.d.ts.map +1 -0
- package/dist/adapters/wechat.js +107 -0
- package/dist/adapters/wechat.js.map +1 -0
- package/dist/adapters/whatsapp.d.ts +7 -0
- package/dist/adapters/whatsapp.d.ts.map +1 -0
- package/dist/adapters/whatsapp.js +102 -0
- package/dist/adapters/whatsapp.js.map +1 -0
- package/dist/chunking.d.ts +18 -0
- package/dist/chunking.d.ts.map +1 -0
- package/dist/chunking.js +137 -0
- package/dist/chunking.js.map +1 -0
- package/dist/factory.d.ts +5 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +86 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/manager.d.ts +34 -0
- package/dist/manager.d.ts.map +1 -0
- package/dist/manager.js +97 -0
- package/dist/manager.js.map +1 -0
- package/dist/types.d.ts +49 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { chunkMarkdown, CHANNEL_LIMITS } from '../chunking.js';
|
|
4
|
+
export function createWhatsAppChannel(config) {
|
|
5
|
+
let sock = null;
|
|
6
|
+
let connected = false;
|
|
7
|
+
const limit = CHANNEL_LIMITS.whatsapp;
|
|
8
|
+
const authDir = config.authDir ?? join(homedir(), '.cereworker', 'whatsapp-auth');
|
|
9
|
+
return {
|
|
10
|
+
id: 'whatsapp',
|
|
11
|
+
meta: { name: 'WhatsApp', emoji: 'W' },
|
|
12
|
+
async start(handler) {
|
|
13
|
+
// Dynamic import — baileys is an optional dependency
|
|
14
|
+
const baileys = await import('@whiskeysockets/baileys');
|
|
15
|
+
const makeWASocket = baileys.default;
|
|
16
|
+
const { useMultiFileAuthState, DisconnectReason } = baileys;
|
|
17
|
+
const { state, saveCreds } = await useMultiFileAuthState(authDir);
|
|
18
|
+
sock = makeWASocket({
|
|
19
|
+
auth: state,
|
|
20
|
+
printQRInTerminal: true,
|
|
21
|
+
});
|
|
22
|
+
sock.ev.on('creds.update', saveCreds);
|
|
23
|
+
sock.ev.on('connection.update', (update) => {
|
|
24
|
+
const { connection, lastDisconnect } = update;
|
|
25
|
+
if (connection === 'close') {
|
|
26
|
+
connected = false;
|
|
27
|
+
const statusCode = lastDisconnect?.error?.output?.statusCode;
|
|
28
|
+
// Reconnect unless logged out
|
|
29
|
+
if (statusCode !== DisconnectReason.loggedOut) {
|
|
30
|
+
// Re-start after a brief delay
|
|
31
|
+
setTimeout(() => {
|
|
32
|
+
if (sock)
|
|
33
|
+
void this.start(handler);
|
|
34
|
+
}, 3000);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else if (connection === 'open') {
|
|
38
|
+
connected = true;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
sock.ev.on('messages.upsert', async ({ messages: msgs, type }) => {
|
|
42
|
+
if (type !== 'notify')
|
|
43
|
+
return;
|
|
44
|
+
for (const msg of msgs) {
|
|
45
|
+
if (msg.key.fromMe)
|
|
46
|
+
continue;
|
|
47
|
+
if (!msg.message)
|
|
48
|
+
continue;
|
|
49
|
+
const text = msg.message.conversation ??
|
|
50
|
+
msg.message.extendedTextMessage?.text ??
|
|
51
|
+
'';
|
|
52
|
+
if (!text)
|
|
53
|
+
continue;
|
|
54
|
+
const jid = msg.key.remoteJid ?? '';
|
|
55
|
+
const senderId = msg.key.participant ?? jid; // participant in groups, jid in DMs
|
|
56
|
+
const isGroup = jid.endsWith('@g.us');
|
|
57
|
+
const inbound = {
|
|
58
|
+
channelId: 'whatsapp',
|
|
59
|
+
routeTo: jid,
|
|
60
|
+
senderId,
|
|
61
|
+
senderName: msg.pushName ?? undefined,
|
|
62
|
+
text,
|
|
63
|
+
sessionId: isGroup ? `group:${jid}` : `dm:${senderId}`,
|
|
64
|
+
timestamp: msg.messageTimestamp * 1000 || Date.now(),
|
|
65
|
+
raw: msg,
|
|
66
|
+
};
|
|
67
|
+
const response = await handler(inbound);
|
|
68
|
+
if (response) {
|
|
69
|
+
const chunks = chunkMarkdown(response, limit);
|
|
70
|
+
for (const chunk of chunks) {
|
|
71
|
+
await sock.sendMessage(jid, { text: chunk });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
},
|
|
77
|
+
async stop() {
|
|
78
|
+
if (sock) {
|
|
79
|
+
sock.end(undefined);
|
|
80
|
+
sock = null;
|
|
81
|
+
connected = false;
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
async send(msg) {
|
|
85
|
+
if (!sock)
|
|
86
|
+
throw new Error('WhatsApp not started');
|
|
87
|
+
const chunks = chunkMarkdown(msg.text, limit);
|
|
88
|
+
for (const chunk of chunks) {
|
|
89
|
+
await sock.sendMessage(msg.to, { text: chunk });
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
isAllowed(senderId) {
|
|
93
|
+
if (config.allowFrom.length === 0)
|
|
94
|
+
return true;
|
|
95
|
+
return config.allowFrom.includes(senderId);
|
|
96
|
+
},
|
|
97
|
+
isConnected() {
|
|
98
|
+
return connected;
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=whatsapp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whatsapp.js","sourceRoot":"","sources":["../../src/adapters/whatsapp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown-aware message chunking for channel adapters.
|
|
3
|
+
*
|
|
4
|
+
* Preserves code fences across splits, prefers paragraph boundaries,
|
|
5
|
+
* falls back to line boundaries, then hard splits.
|
|
6
|
+
*/
|
|
7
|
+
/** Default character limits per channel */
|
|
8
|
+
export declare const CHANNEL_LIMITS: Record<string, number>;
|
|
9
|
+
/**
|
|
10
|
+
* Split text into chunks that respect markdown structure.
|
|
11
|
+
*
|
|
12
|
+
* 1. Try to split on paragraph boundaries (blank lines)
|
|
13
|
+
* 2. If a paragraph is too long, split on line boundaries
|
|
14
|
+
* 3. If a line is too long, hard split at limit
|
|
15
|
+
* 4. Track open code fences and re-open them in the next chunk
|
|
16
|
+
*/
|
|
17
|
+
export declare function chunkMarkdown(text: string, limit: number): string[];
|
|
18
|
+
//# sourceMappingURL=chunking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunking.d.ts","sourceRoot":"","sources":["../src/chunking.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,2CAA2C;AAC3C,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAUjD,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAgDnE"}
|
package/dist/chunking.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown-aware message chunking for channel adapters.
|
|
3
|
+
*
|
|
4
|
+
* Preserves code fences across splits, prefers paragraph boundaries,
|
|
5
|
+
* falls back to line boundaries, then hard splits.
|
|
6
|
+
*/
|
|
7
|
+
/** Default character limits per channel */
|
|
8
|
+
export const CHANNEL_LIMITS = {
|
|
9
|
+
discord: 2000,
|
|
10
|
+
telegram: 4096,
|
|
11
|
+
slack: 4000,
|
|
12
|
+
matrix: 65536,
|
|
13
|
+
feishu: 4096,
|
|
14
|
+
wechat: 4096,
|
|
15
|
+
whatsapp: 4096,
|
|
16
|
+
signal: 4000,
|
|
17
|
+
irc: 400,
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Split text into chunks that respect markdown structure.
|
|
21
|
+
*
|
|
22
|
+
* 1. Try to split on paragraph boundaries (blank lines)
|
|
23
|
+
* 2. If a paragraph is too long, split on line boundaries
|
|
24
|
+
* 3. If a line is too long, hard split at limit
|
|
25
|
+
* 4. Track open code fences and re-open them in the next chunk
|
|
26
|
+
*/
|
|
27
|
+
export function chunkMarkdown(text, limit) {
|
|
28
|
+
if (text.length <= limit)
|
|
29
|
+
return [text];
|
|
30
|
+
const chunks = [];
|
|
31
|
+
let current = '';
|
|
32
|
+
let openFence = ''; // tracks the opening ``` line (e.g. "```ts")
|
|
33
|
+
const paragraphs = splitParagraphs(text);
|
|
34
|
+
for (const para of paragraphs) {
|
|
35
|
+
// Check if adding this paragraph (with separator) would exceed the limit
|
|
36
|
+
const separator = current ? '\n\n' : '';
|
|
37
|
+
const candidate = current + separator + para;
|
|
38
|
+
if (candidate.length <= limit) {
|
|
39
|
+
current = candidate;
|
|
40
|
+
// Track fence state
|
|
41
|
+
openFence = trackFences(para, openFence);
|
|
42
|
+
}
|
|
43
|
+
else if (!current) {
|
|
44
|
+
// Single paragraph exceeds limit — split by lines
|
|
45
|
+
const lineParts = splitByLines(para, limit, openFence);
|
|
46
|
+
for (let i = 0; i < lineParts.length; i++) {
|
|
47
|
+
if (i < lineParts.length - 1) {
|
|
48
|
+
chunks.push(lineParts[i]);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
current = lineParts[i];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
openFence = trackFences(para, openFence);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Flush current chunk
|
|
58
|
+
if (openFence) {
|
|
59
|
+
// Close the open fence in the current chunk
|
|
60
|
+
current += '\n```';
|
|
61
|
+
}
|
|
62
|
+
chunks.push(current);
|
|
63
|
+
// Start new chunk, re-open fence if needed
|
|
64
|
+
current = openFence ? openFence + '\n' + para : para;
|
|
65
|
+
openFence = trackFences(para, openFence);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (current) {
|
|
69
|
+
chunks.push(current);
|
|
70
|
+
}
|
|
71
|
+
return chunks.filter((c) => c.length > 0);
|
|
72
|
+
}
|
|
73
|
+
function splitParagraphs(text) {
|
|
74
|
+
return text.split(/\n{2,}/);
|
|
75
|
+
}
|
|
76
|
+
function trackFences(text, currentFence) {
|
|
77
|
+
const lines = text.split('\n');
|
|
78
|
+
let fence = currentFence;
|
|
79
|
+
for (const line of lines) {
|
|
80
|
+
const trimmed = line.trimStart();
|
|
81
|
+
if (trimmed.startsWith('```')) {
|
|
82
|
+
if (fence) {
|
|
83
|
+
// Closing fence
|
|
84
|
+
fence = '';
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
// Opening fence — capture the full line (e.g. "```typescript")
|
|
88
|
+
fence = trimmed;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return fence;
|
|
93
|
+
}
|
|
94
|
+
function splitByLines(text, limit, openFence) {
|
|
95
|
+
const lines = text.split('\n');
|
|
96
|
+
const parts = [];
|
|
97
|
+
let current = '';
|
|
98
|
+
let fence = openFence;
|
|
99
|
+
for (const line of lines) {
|
|
100
|
+
const separator = current ? '\n' : '';
|
|
101
|
+
const candidate = current + separator + line;
|
|
102
|
+
if (candidate.length <= limit) {
|
|
103
|
+
current = candidate;
|
|
104
|
+
}
|
|
105
|
+
else if (!current) {
|
|
106
|
+
// Single line exceeds limit — hard split
|
|
107
|
+
const hardParts = hardSplit(line, limit);
|
|
108
|
+
parts.push(...hardParts.slice(0, -1));
|
|
109
|
+
current = hardParts[hardParts.length - 1];
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// Flush
|
|
113
|
+
if (fence)
|
|
114
|
+
current += '\n```';
|
|
115
|
+
parts.push(current);
|
|
116
|
+
current = fence ? fence + '\n' + line : line;
|
|
117
|
+
}
|
|
118
|
+
// Track fences
|
|
119
|
+
const trimmed = line.trimStart();
|
|
120
|
+
if (trimmed.startsWith('```')) {
|
|
121
|
+
fence = fence ? '' : trimmed;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (current)
|
|
125
|
+
parts.push(current);
|
|
126
|
+
return parts;
|
|
127
|
+
}
|
|
128
|
+
function hardSplit(text, limit) {
|
|
129
|
+
const parts = [];
|
|
130
|
+
let i = 0;
|
|
131
|
+
while (i < text.length) {
|
|
132
|
+
parts.push(text.slice(i, i + limit));
|
|
133
|
+
i += limit;
|
|
134
|
+
}
|
|
135
|
+
return parts;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=chunking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunking.js","sourceRoot":"","sources":["../src/chunking.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CereWorkerConfig } from '@producible/cereworker-config';
|
|
2
|
+
import type { CommandDef } from './types.js';
|
|
3
|
+
import { ChannelManager } from './manager.js';
|
|
4
|
+
export declare function createChannelManager(config: CereWorkerConfig, commands?: CommandDef[]): ChannelManager;
|
|
5
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAW9C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,GAAG,cAAc,CAuGtG"}
|
package/dist/factory.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { ChannelManager } from './manager.js';
|
|
2
|
+
import { createSlackChannel } from './adapters/slack.js';
|
|
3
|
+
import { createDiscordChannel } from './adapters/discord.js';
|
|
4
|
+
import { createTelegramChannel } from './adapters/telegram.js';
|
|
5
|
+
import { createMatrixChannel } from './adapters/matrix.js';
|
|
6
|
+
import { createFeishuChannel } from './adapters/feishu.js';
|
|
7
|
+
import { createWeChatChannel } from './adapters/wechat.js';
|
|
8
|
+
import { createWhatsAppChannel } from './adapters/whatsapp.js';
|
|
9
|
+
import { createSignalChannel } from './adapters/signal.js';
|
|
10
|
+
import { createIrcChannel } from './adapters/irc.js';
|
|
11
|
+
export function createChannelManager(config, commands) {
|
|
12
|
+
const manager = new ChannelManager();
|
|
13
|
+
const { channels } = config;
|
|
14
|
+
if (channels.slack.enabled && channels.slack.botToken && channels.slack.appToken) {
|
|
15
|
+
manager.register(createSlackChannel({
|
|
16
|
+
botToken: channels.slack.botToken,
|
|
17
|
+
appToken: channels.slack.appToken,
|
|
18
|
+
signingSecret: channels.slack.signingSecret,
|
|
19
|
+
allowFrom: channels.slack.allowFrom,
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
if (channels.discord.enabled && channels.discord.token) {
|
|
23
|
+
manager.register(createDiscordChannel({
|
|
24
|
+
token: channels.discord.token,
|
|
25
|
+
applicationId: channels.discord.applicationId,
|
|
26
|
+
allowFrom: channels.discord.allowFrom,
|
|
27
|
+
channelIds: channels.discord.channelIds,
|
|
28
|
+
commands,
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
if (channels.telegram.enabled && channels.telegram.token) {
|
|
32
|
+
manager.register(createTelegramChannel({
|
|
33
|
+
token: channels.telegram.token,
|
|
34
|
+
allowFrom: channels.telegram.allowFrom,
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
if (channels.matrix.enabled && channels.matrix.token && channels.matrix.userId) {
|
|
38
|
+
manager.register(createMatrixChannel({
|
|
39
|
+
homeserver: channels.matrix.homeserver,
|
|
40
|
+
token: channels.matrix.token,
|
|
41
|
+
userId: channels.matrix.userId,
|
|
42
|
+
allowFrom: channels.matrix.allowFrom,
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
if (channels.feishu.enabled && channels.feishu.appId && channels.feishu.appSecret) {
|
|
46
|
+
manager.register(createFeishuChannel({
|
|
47
|
+
appId: channels.feishu.appId,
|
|
48
|
+
appSecret: channels.feishu.appSecret,
|
|
49
|
+
verificationToken: channels.feishu.verificationToken,
|
|
50
|
+
encryptKey: channels.feishu.encryptKey,
|
|
51
|
+
allowFrom: channels.feishu.allowFrom,
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
if (channels.wechat.enabled) {
|
|
55
|
+
manager.register(createWeChatChannel({
|
|
56
|
+
puppet: channels.wechat.puppet,
|
|
57
|
+
token: channels.wechat.token,
|
|
58
|
+
allowFrom: channels.wechat.allowFrom,
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
if (channels.whatsapp.enabled) {
|
|
62
|
+
manager.register(createWhatsAppChannel({
|
|
63
|
+
allowFrom: channels.whatsapp.allowFrom,
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
if (channels.signal.enabled && channels.signal.account) {
|
|
67
|
+
manager.register(createSignalChannel({
|
|
68
|
+
account: channels.signal.account,
|
|
69
|
+
signalCliUrl: channels.signal.signalCliUrl,
|
|
70
|
+
allowFrom: channels.signal.allowFrom,
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
if (channels.irc.enabled && channels.irc.host) {
|
|
74
|
+
manager.register(createIrcChannel({
|
|
75
|
+
host: channels.irc.host,
|
|
76
|
+
port: channels.irc.port,
|
|
77
|
+
tls: channels.irc.tls,
|
|
78
|
+
nick: channels.irc.nick,
|
|
79
|
+
password: channels.irc.password,
|
|
80
|
+
channels: channels.irc.channels,
|
|
81
|
+
allowFrom: channels.irc.allowFrom,
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
return manager;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type { ChannelPlugin, ChannelMeta, ChannelId, ChannelConfig, CommandDef, InboundMessage, OutboundMessage, MessageHandler, } from './types.js';
|
|
2
|
+
export { ChannelManager } from './manager.js';
|
|
3
|
+
export type { PairingProvider } from './manager.js';
|
|
4
|
+
export { createChannelManager } from './factory.js';
|
|
5
|
+
export { chunkMarkdown, CHANNEL_LIMITS } from './chunking.js';
|
|
6
|
+
export { createSlackChannel, type SlackChannelConfig } from './adapters/slack.js';
|
|
7
|
+
export { createDiscordChannel, type DiscordChannelConfig } from './adapters/discord.js';
|
|
8
|
+
export { createTelegramChannel, type TelegramChannelConfig } from './adapters/telegram.js';
|
|
9
|
+
export { createMatrixChannel, type MatrixChannelConfig } from './adapters/matrix.js';
|
|
10
|
+
export { createFeishuChannel, type FeishuChannelConfig } from './adapters/feishu.js';
|
|
11
|
+
export { createWeChatChannel, type WeChatChannelConfig } from './adapters/wechat.js';
|
|
12
|
+
export { createWhatsAppChannel, type WhatsAppChannelConfig } from './adapters/whatsapp.js';
|
|
13
|
+
export { createSignalChannel, type SignalChannelConfig } from './adapters/signal.js';
|
|
14
|
+
export { createIrcChannel, type IrcChannelConfig } from './adapters/irc.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,aAAa,EACb,UAAU,EACV,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { ChannelManager } from './manager.js';
|
|
2
|
+
export { createChannelManager } from './factory.js';
|
|
3
|
+
export { chunkMarkdown, CHANNEL_LIMITS } from './chunking.js';
|
|
4
|
+
export { createSlackChannel } from './adapters/slack.js';
|
|
5
|
+
export { createDiscordChannel } from './adapters/discord.js';
|
|
6
|
+
export { createTelegramChannel } from './adapters/telegram.js';
|
|
7
|
+
export { createMatrixChannel } from './adapters/matrix.js';
|
|
8
|
+
export { createFeishuChannel } from './adapters/feishu.js';
|
|
9
|
+
export { createWeChatChannel } from './adapters/wechat.js';
|
|
10
|
+
export { createWhatsAppChannel } from './adapters/whatsapp.js';
|
|
11
|
+
export { createSignalChannel } from './adapters/signal.js';
|
|
12
|
+
export { createIrcChannel } from './adapters/irc.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAA2B,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAA6B,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAA8B,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAA4B,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAA4B,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAA4B,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAA8B,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAA4B,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAyB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ChannelPlugin, MessageHandler, OutboundMessage } from './types.js';
|
|
2
|
+
export interface PairingProvider {
|
|
3
|
+
isApproved(channelId: string, senderId: string): boolean;
|
|
4
|
+
createPairingCode(channelId: string, senderId: string, senderName?: string): string | null;
|
|
5
|
+
}
|
|
6
|
+
export declare class ChannelManager {
|
|
7
|
+
private channels;
|
|
8
|
+
private handler;
|
|
9
|
+
private dmPolicy;
|
|
10
|
+
private pairingProvider;
|
|
11
|
+
/** Set the global message handler (usually wired to the orchestrator) */
|
|
12
|
+
setHandler(handler: MessageHandler): void;
|
|
13
|
+
/** Set the DM access policy */
|
|
14
|
+
setDmPolicy(policy: 'pairing' | 'open'): void;
|
|
15
|
+
/** Set the pairing provider for pairing mode */
|
|
16
|
+
setPairingProvider(provider: PairingProvider): void;
|
|
17
|
+
/** Register a channel plugin */
|
|
18
|
+
register(channel: ChannelPlugin): void;
|
|
19
|
+
/** Get a registered channel by ID */
|
|
20
|
+
get(id: string): ChannelPlugin | undefined;
|
|
21
|
+
/** List all registered channels */
|
|
22
|
+
list(): ChannelPlugin[];
|
|
23
|
+
/** List connected channels */
|
|
24
|
+
listConnected(): ChannelPlugin[];
|
|
25
|
+
/** Start all registered channels */
|
|
26
|
+
startAll(): Promise<void>;
|
|
27
|
+
/** Stop all channels */
|
|
28
|
+
stopAll(): Promise<void>;
|
|
29
|
+
/** Send a message to a specific channel */
|
|
30
|
+
send(channelId: string, msg: OutboundMessage): Promise<void>;
|
|
31
|
+
/** Broadcast a message to all connected channels */
|
|
32
|
+
broadcast(msg: OutboundMessage): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAa,MAAM,YAAY,CAAC;AAE5F,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACzD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC5F;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,eAAe,CAAgC;IAEvD,yEAAyE;IACzE,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIzC,+BAA+B;IAC/B,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI;IAI7C,gDAAgD;IAChD,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAInD,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAItC,qCAAqC;IACrC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1C,mCAAmC;IACnC,IAAI,IAAI,aAAa,EAAE;IAIvB,8BAA8B;IAC9B,aAAa,IAAI,aAAa,EAAE;IAIhC,oCAAoC;IAC9B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA6C/B,wBAAwB;IAClB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAY9B,2CAA2C;IACrC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,oDAAoD;IAC9C,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAKrD"}
|
package/dist/manager.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
export class ChannelManager {
|
|
2
|
+
channels = new Map();
|
|
3
|
+
handler = null;
|
|
4
|
+
dmPolicy = 'open';
|
|
5
|
+
pairingProvider = null;
|
|
6
|
+
/** Set the global message handler (usually wired to the orchestrator) */
|
|
7
|
+
setHandler(handler) {
|
|
8
|
+
this.handler = handler;
|
|
9
|
+
}
|
|
10
|
+
/** Set the DM access policy */
|
|
11
|
+
setDmPolicy(policy) {
|
|
12
|
+
this.dmPolicy = policy;
|
|
13
|
+
}
|
|
14
|
+
/** Set the pairing provider for pairing mode */
|
|
15
|
+
setPairingProvider(provider) {
|
|
16
|
+
this.pairingProvider = provider;
|
|
17
|
+
}
|
|
18
|
+
/** Register a channel plugin */
|
|
19
|
+
register(channel) {
|
|
20
|
+
this.channels.set(channel.id, channel);
|
|
21
|
+
}
|
|
22
|
+
/** Get a registered channel by ID */
|
|
23
|
+
get(id) {
|
|
24
|
+
return this.channels.get(id);
|
|
25
|
+
}
|
|
26
|
+
/** List all registered channels */
|
|
27
|
+
list() {
|
|
28
|
+
return Array.from(this.channels.values());
|
|
29
|
+
}
|
|
30
|
+
/** List connected channels */
|
|
31
|
+
listConnected() {
|
|
32
|
+
return this.list().filter((ch) => ch.isConnected());
|
|
33
|
+
}
|
|
34
|
+
/** Start all registered channels */
|
|
35
|
+
async startAll() {
|
|
36
|
+
if (!this.handler) {
|
|
37
|
+
throw new Error('No message handler set. Call setHandler() before startAll().');
|
|
38
|
+
}
|
|
39
|
+
const handler = this.handler;
|
|
40
|
+
const results = await Promise.allSettled(this.list().map(async (channel) => {
|
|
41
|
+
try {
|
|
42
|
+
await channel.start(async (msg) => {
|
|
43
|
+
// Pairing mode: PairingStore is the single source of truth
|
|
44
|
+
if (this.dmPolicy === 'pairing' && this.pairingProvider) {
|
|
45
|
+
if (this.pairingProvider.isApproved(msg.channelId, msg.senderId)) {
|
|
46
|
+
return handler(msg);
|
|
47
|
+
}
|
|
48
|
+
// Issue pairing challenge
|
|
49
|
+
const code = this.pairingProvider.createPairingCode(msg.channelId, msg.senderId, msg.senderName);
|
|
50
|
+
if (code) {
|
|
51
|
+
return `Access required. Your pairing code: ${code}\nAsk the bot owner to run: cereworker approve ${code}`;
|
|
52
|
+
}
|
|
53
|
+
return; // rate limited, silent drop
|
|
54
|
+
}
|
|
55
|
+
// Open mode: use legacy isAllowed behavior
|
|
56
|
+
if (!channel.isAllowed(msg.senderId)) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
return handler(msg);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
console.error(`[ChannelManager] Failed to start ${channel.id}:`, err);
|
|
64
|
+
throw err;
|
|
65
|
+
}
|
|
66
|
+
}));
|
|
67
|
+
const failures = results.filter((r) => r.status === 'rejected');
|
|
68
|
+
if (failures.length > 0) {
|
|
69
|
+
console.warn(`[ChannelManager] ${failures.length} channel(s) failed to start`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** Stop all channels */
|
|
73
|
+
async stopAll() {
|
|
74
|
+
await Promise.allSettled(this.list().map(async (channel) => {
|
|
75
|
+
try {
|
|
76
|
+
await channel.stop();
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
console.error(`[ChannelManager] Failed to stop ${channel.id}:`, err);
|
|
80
|
+
}
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
/** Send a message to a specific channel */
|
|
84
|
+
async send(channelId, msg) {
|
|
85
|
+
const channel = this.channels.get(channelId);
|
|
86
|
+
if (!channel)
|
|
87
|
+
throw new Error(`Channel not found: ${channelId}`);
|
|
88
|
+
if (!channel.isConnected())
|
|
89
|
+
throw new Error(`Channel not connected: ${channelId}`);
|
|
90
|
+
await channel.send(msg);
|
|
91
|
+
}
|
|
92
|
+
/** Broadcast a message to all connected channels */
|
|
93
|
+
async broadcast(msg) {
|
|
94
|
+
await Promise.allSettled(this.listConnected().map((ch) => ch.send(msg)));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export interface ChannelMeta {
|
|
2
|
+
name: string;
|
|
3
|
+
emoji: string;
|
|
4
|
+
}
|
|
5
|
+
export interface InboundMessage {
|
|
6
|
+
channelId: string;
|
|
7
|
+
routeTo?: string;
|
|
8
|
+
senderId: string;
|
|
9
|
+
senderName?: string;
|
|
10
|
+
text: string;
|
|
11
|
+
sessionId?: string;
|
|
12
|
+
threadId?: string;
|
|
13
|
+
replyToId?: string;
|
|
14
|
+
timestamp: number;
|
|
15
|
+
raw?: unknown;
|
|
16
|
+
}
|
|
17
|
+
export interface OutboundMessage {
|
|
18
|
+
to: string;
|
|
19
|
+
text: string;
|
|
20
|
+
threadId?: string;
|
|
21
|
+
replyToId?: string;
|
|
22
|
+
}
|
|
23
|
+
export type MessageHandler = (msg: InboundMessage) => Promise<string | void>;
|
|
24
|
+
export interface ChannelPlugin {
|
|
25
|
+
id: string;
|
|
26
|
+
meta: ChannelMeta;
|
|
27
|
+
/** Start the channel (connect, listen for events) */
|
|
28
|
+
start(handler: MessageHandler): Promise<void>;
|
|
29
|
+
/** Stop the channel gracefully */
|
|
30
|
+
stop(): Promise<void>;
|
|
31
|
+
/** Send a text message */
|
|
32
|
+
send(msg: OutboundMessage): Promise<void>;
|
|
33
|
+
/** Check if a sender is allowed (security) */
|
|
34
|
+
isAllowed(senderId: string): boolean;
|
|
35
|
+
/** Whether the channel is currently connected */
|
|
36
|
+
isConnected(): boolean;
|
|
37
|
+
}
|
|
38
|
+
export type ChannelId = 'slack' | 'discord' | 'telegram' | 'matrix' | 'feishu' | 'wechat' | 'whatsapp' | 'signal' | 'irc';
|
|
39
|
+
export interface CommandDef {
|
|
40
|
+
name: string;
|
|
41
|
+
description: string;
|
|
42
|
+
hasArgs?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface ChannelConfig {
|
|
45
|
+
enabled: boolean;
|
|
46
|
+
allowFrom: string[];
|
|
47
|
+
[key: string]: unknown;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAE7E,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAElB,qDAAqD;IACrD,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C,kCAAkC;IAClC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,0BAA0B;IAC1B,IAAI,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,8CAA8C;IAC9C,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAErC,iDAAiD;IACjD,WAAW,IAAI,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE1H,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|