@kartik.doda/openclaw-plugin-test 1.0.0

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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +128 -0
  3. package/dist/cli/admin-api.d.ts +58 -0
  4. package/dist/cli/admin-api.d.ts.map +1 -0
  5. package/dist/cli/admin-api.js +242 -0
  6. package/dist/cli/admin-api.js.map +1 -0
  7. package/dist/cli/auth.d.ts +5 -0
  8. package/dist/cli/auth.d.ts.map +1 -0
  9. package/dist/cli/auth.js +184 -0
  10. package/dist/cli/auth.js.map +1 -0
  11. package/dist/cli/bot.d.ts +3 -0
  12. package/dist/cli/bot.d.ts.map +1 -0
  13. package/dist/cli/bot.js +100 -0
  14. package/dist/cli/bot.js.map +1 -0
  15. package/dist/cli/config-updater.d.ts +70 -0
  16. package/dist/cli/config-updater.d.ts.map +1 -0
  17. package/dist/cli/config-updater.js +277 -0
  18. package/dist/cli/config-updater.js.map +1 -0
  19. package/dist/cli/credentials.d.ts +14 -0
  20. package/dist/cli/credentials.d.ts.map +1 -0
  21. package/dist/cli/credentials.js +45 -0
  22. package/dist/cli/credentials.js.map +1 -0
  23. package/dist/cli/rate-limiter.d.ts +17 -0
  24. package/dist/cli/rate-limiter.d.ts.map +1 -0
  25. package/dist/cli/rate-limiter.js +78 -0
  26. package/dist/cli/rate-limiter.js.map +1 -0
  27. package/dist/cli/setup.d.ts +2 -0
  28. package/dist/cli/setup.d.ts.map +1 -0
  29. package/dist/cli/setup.js +292 -0
  30. package/dist/cli/setup.js.map +1 -0
  31. package/dist/cli/ui.d.ts +30 -0
  32. package/dist/cli/ui.d.ts.map +1 -0
  33. package/dist/cli/ui.js +202 -0
  34. package/dist/cli/ui.js.map +1 -0
  35. package/dist/client/ddp.d.ts +31 -0
  36. package/dist/client/ddp.d.ts.map +1 -0
  37. package/dist/client/ddp.js +86 -0
  38. package/dist/client/ddp.js.map +1 -0
  39. package/dist/client/rest.d.ts +49 -0
  40. package/dist/client/rest.d.ts.map +1 -0
  41. package/dist/client/rest.js +347 -0
  42. package/dist/client/rest.js.map +1 -0
  43. package/dist/config/access-store.d.ts +29 -0
  44. package/dist/config/access-store.d.ts.map +1 -0
  45. package/dist/config/access-store.js +71 -0
  46. package/dist/config/access-store.js.map +1 -0
  47. package/dist/config/schema.d.ts +33 -0
  48. package/dist/config/schema.d.ts.map +1 -0
  49. package/dist/config/schema.js +52 -0
  50. package/dist/config/schema.js.map +1 -0
  51. package/dist/config/store.d.ts +11 -0
  52. package/dist/config/store.d.ts.map +1 -0
  53. package/dist/config/store.js +82 -0
  54. package/dist/config/store.js.map +1 -0
  55. package/dist/index.d.ts +4 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +17 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/plugin.d.ts +5 -0
  60. package/dist/plugin.d.ts.map +1 -0
  61. package/dist/plugin.js +164 -0
  62. package/dist/plugin.js.map +1 -0
  63. package/dist/service/attachments.d.ts +10 -0
  64. package/dist/service/attachments.d.ts.map +1 -0
  65. package/dist/service/attachments.js +105 -0
  66. package/dist/service/attachments.js.map +1 -0
  67. package/dist/service/channel.d.ts +25 -0
  68. package/dist/service/channel.d.ts.map +1 -0
  69. package/dist/service/channel.js +747 -0
  70. package/dist/service/channel.js.map +1 -0
  71. package/dist/service/gateway.d.ts +7 -0
  72. package/dist/service/gateway.d.ts.map +1 -0
  73. package/dist/service/gateway.js +621 -0
  74. package/dist/service/gateway.js.map +1 -0
  75. package/dist/service/group-history.d.ts +8 -0
  76. package/dist/service/group-history.d.ts.map +1 -0
  77. package/dist/service/group-history.js +24 -0
  78. package/dist/service/group-history.js.map +1 -0
  79. package/dist/service/inbound.d.ts +16 -0
  80. package/dist/service/inbound.d.ts.map +1 -0
  81. package/dist/service/inbound.js +189 -0
  82. package/dist/service/inbound.js.map +1 -0
  83. package/dist/service/runtime-state.d.ts +8 -0
  84. package/dist/service/runtime-state.d.ts.map +1 -0
  85. package/dist/service/runtime-state.js +3 -0
  86. package/dist/service/runtime-state.js.map +1 -0
  87. package/dist/types.d.ts +220 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +2 -0
  90. package/dist/types.js.map +1 -0
  91. package/dist/utils.d.ts +15 -0
  92. package/dist/utils.d.ts.map +1 -0
  93. package/dist/utils.js +68 -0
  94. package/dist/utils.js.map +1 -0
  95. package/package.json +57 -0
@@ -0,0 +1,82 @@
1
+ import { mkdirSync } from "node:fs";
2
+ import { dirname } from "node:path";
3
+ import { DatabaseSync } from "node:sqlite";
4
+ export class CheckpointStore {
5
+ limit;
6
+ failureLimit;
7
+ db;
8
+ constructor(filePath, limit = 250, failureLimit = 100) {
9
+ this.limit = limit;
10
+ this.failureLimit = failureLimit;
11
+ mkdirSync(dirname(filePath), { recursive: true });
12
+ this.db = new DatabaseSync(filePath);
13
+ this.db.exec(`
14
+ CREATE TABLE IF NOT EXISTS meta (
15
+ key TEXT PRIMARY KEY,
16
+ value TEXT
17
+ );
18
+ CREATE TABLE IF NOT EXISTS seen_messages (
19
+ id TEXT PRIMARY KEY,
20
+ seen_at INTEGER NOT NULL DEFAULT (unixepoch())
21
+ );
22
+ CREATE TABLE IF NOT EXISTS failed_messages (
23
+ message_id TEXT PRIMARY KEY,
24
+ room_id TEXT,
25
+ sender_name TEXT,
26
+ sent_at TEXT,
27
+ failed_at TEXT,
28
+ reason TEXT
29
+ );
30
+ `);
31
+ }
32
+ async read() {
33
+ const updatedRow = this.db
34
+ .prepare("SELECT value FROM meta WHERE key = 'updatedSince'")
35
+ .get();
36
+ const seenRows = this.db
37
+ .prepare("SELECT id FROM seen_messages ORDER BY seen_at DESC LIMIT ?")
38
+ .all(this.limit);
39
+ const failedRows = this.db
40
+ .prepare("SELECT message_id as messageId, room_id as roomId, sender_name as senderName, sent_at as sentAt, failed_at as failedAt, reason FROM failed_messages LIMIT ?")
41
+ .all(this.failureLimit);
42
+ return {
43
+ updatedSince: updatedRow?.value ?? null,
44
+ recentMessageIds: seenRows.map((r) => r.id),
45
+ failedMessages: failedRows,
46
+ };
47
+ }
48
+ async write(state) {
49
+ this.db.exec("BEGIN");
50
+ try {
51
+ if (state.updatedSince) {
52
+ this.db
53
+ .prepare("INSERT OR REPLACE INTO meta (key, value) VALUES ('updatedSince', ?)")
54
+ .run(state.updatedSince);
55
+ }
56
+ this.db.prepare("DELETE FROM seen_messages").run();
57
+ const insertSeen = this.db.prepare("INSERT OR IGNORE INTO seen_messages (id) VALUES (?)");
58
+ for (const id of state.recentMessageIds.slice(-this.limit)) {
59
+ insertSeen.run(id);
60
+ }
61
+ this.db.prepare("DELETE FROM failed_messages").run();
62
+ const insertFailed = this.db.prepare("INSERT OR REPLACE INTO failed_messages (message_id, room_id, sender_name, sent_at, failed_at, reason) VALUES (?, ?, ?, ?, ?, ?)");
63
+ for (const f of (state.failedMessages ?? []).slice(-this.failureLimit)) {
64
+ insertFailed.run(f.messageId, f.roomId, f.senderName, f.sentAt, f.failedAt, f.reason);
65
+ }
66
+ this.db.exec("COMMIT");
67
+ }
68
+ catch (err) {
69
+ this.db.exec("ROLLBACK");
70
+ throw err;
71
+ }
72
+ }
73
+ async recordFailure(failure) {
74
+ this.db
75
+ .prepare("INSERT OR REPLACE INTO failed_messages (message_id, room_id, sender_name, sent_at, failed_at, reason) VALUES (?, ?, ?, ?, ?, ?)")
76
+ .run(failure.messageId, failure.roomId, failure.senderName, failure.sentAt, failure.failedAt, failure.reason);
77
+ this.db
78
+ .prepare("DELETE FROM failed_messages WHERE message_id NOT IN (SELECT message_id FROM failed_messages ORDER BY rowid DESC LIMIT ?)")
79
+ .run(this.failureLimit);
80
+ }
81
+ }
82
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { OpenClawPluginApi } from "openclaw/plugin-sdk/core";
2
+ export { startGateway } from "./plugin.js";
3
+ export default function register(api: OpenClawPluginApi): void;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAkB7D"}
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ import { rocketchatPlugin, startGateway } from "./plugin.js";
2
+ export { startGateway } from "./plugin.js";
3
+ export default function register(api) {
4
+ api.registerChannel({ plugin: rocketchatPlugin });
5
+ api.registerCli(({ program }) => {
6
+ const rc = program.command("rocketchat").description("Rocket.Chat channel plugin commands");
7
+ rc.command("setup")
8
+ .description("Interactive setup wizard - connect Rocket.Chat to OpenClaw")
9
+ .action(async () => {
10
+ const { runSetup } = await import("./cli/setup.js");
11
+ await runSetup();
12
+ });
13
+ }, {
14
+ commands: ["rocketchat"],
15
+ });
16
+ }
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAsB;IACrD,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAElD,GAAG,CAAC,WAAW,CACb,CAAC,EAAE,OAAO,EAAoB,EAAE,EAAE;QAChC,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,qCAAqC,CAAC,CAAC;QAE5F,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;aAChB,WAAW,CAAC,4DAA4D,CAAC;aACzE,MAAM,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACpD,MAAM,QAAQ,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACP,CAAC,EACD;QACE,QAAQ,EAAE,CAAC,YAAY,CAAC;KACzB,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { startGateway, resolveAccount, listAccountIds, isConfigured } from "./service/gateway.js";
2
+ import type { ResolvedAccount } from "./types.js";
3
+ export { startGateway, resolveAccount, listAccountIds, isConfigured };
4
+ export declare const rocketchatPlugin: import("openclaw/plugin-sdk/channel-core").ChannelPlugin<ResolvedAccount, unknown, unknown>;
5
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,cAAc,EACd,YAAY,EAEb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC;AAEtE,eAAO,MAAM,gBAAgB,6FA0K3B,CAAC"}
package/dist/plugin.js ADDED
@@ -0,0 +1,164 @@
1
+ import { createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
2
+ import { readFile } from "node:fs/promises";
3
+ import { basename } from "node:path";
4
+ import { RocketChatClient } from "./client/rest.js";
5
+ import { startGateway, resolveAccount, listAccountIds, isConfigured, activeClients, } from "./service/gateway.js";
6
+ import { collectBotUsernamesForServer } from "./cli/config-updater.js";
7
+ export { startGateway, resolveAccount, listAccountIds, isConfigured };
8
+ export const rocketchatPlugin = createChatChannelPlugin({
9
+ base: {
10
+ id: "rocketchat",
11
+ meta: {
12
+ id: "rocketchat",
13
+ label: "Rocket.Chat",
14
+ selectionLabel: "Rocket.Chat",
15
+ docsPath: "https://rocket.chat/docs",
16
+ blurb: "Rocket.Chat channel plugin with DDP/websocket outbound/inbound",
17
+ aliases: ["rc"],
18
+ },
19
+ capabilities: { chatTypes: ["direct", "group", "channel"] },
20
+ config: {
21
+ listAccountIds: listAccountIds,
22
+ resolveAccount: resolveAccount,
23
+ isConfigured: ((account, _cfg) => isConfigured(account)),
24
+ formatAllowFrom: (params) => {
25
+ return params.allowFrom.map((entry) => {
26
+ const s = String(entry).trim();
27
+ if (!s || s === "*")
28
+ return s;
29
+ if (s.startsWith("rocketchat:"))
30
+ return s;
31
+ return `rocketchat:${s}`;
32
+ });
33
+ },
34
+ },
35
+ messaging: {
36
+ targetPrefixes: ["rocketchat", "channel", "user", "@"],
37
+ normalizeTarget: (target) => {
38
+ const trimmed = target?.trim();
39
+ if (!trimmed)
40
+ return undefined;
41
+ return trimmed.replace(/^rocketchat:(?:channel:|user:)?/i, "").replace(/^channel:/i, "");
42
+ },
43
+ targetResolver: {
44
+ looksLikeId: (id) => {
45
+ const trimmed = id?.trim();
46
+ if (!trimmed)
47
+ return false;
48
+ return (/^[a-z0-9_]{4,32}$/i.test(trimmed) ||
49
+ /^rocketchat:/i.test(trimmed) ||
50
+ /^channel:/i.test(trimmed) ||
51
+ /^user:/i.test(trimmed) ||
52
+ /^@/.test(trimmed));
53
+ },
54
+ hint: "<roomId|rocketchat:roomId|channel:roomId|user:userId|@username>",
55
+ },
56
+ },
57
+ gateway: {
58
+ startAccount: (ctx) => startGateway(ctx),
59
+ },
60
+ },
61
+ threading: {
62
+ topLevelReplyToMode: "reply",
63
+ },
64
+ outbound: {
65
+ base: {
66
+ deliveryMode: "direct",
67
+ resolveTarget: (params) => {
68
+ const to = params?.to?.trim();
69
+ if (!to)
70
+ return { ok: false, error: new Error("Rocket.Chat send requires a target id") };
71
+ const normalized = to
72
+ .replace(/^rocketchat:(?:channel:|user:)?/i, "")
73
+ .replace(/^channel:/i, "");
74
+ return { ok: true, to: normalized };
75
+ },
76
+ },
77
+ attachedResults: {
78
+ channel: "rocketchat",
79
+ sendText: async (ctx) => {
80
+ const accountId = ctx.accountId ?? undefined;
81
+ let account = resolveAccount(ctx.cfg, accountId);
82
+ if (!account) {
83
+ const accounts = listAccountIds(ctx.cfg);
84
+ if (accounts.length > 0) {
85
+ account = resolveAccount(ctx.cfg, accounts[0]);
86
+ }
87
+ }
88
+ if (!account)
89
+ throw new Error(`Unknown Rocket.Chat account: ${ctx.accountId}`);
90
+ const entry = activeClients.get(account.accountId);
91
+ let client = entry?.client ?? null;
92
+ if (!client) {
93
+ client = new RocketChatClient({ serverUrl: account.serverUrl, auth: account.auth });
94
+ client.setBotUsernames(collectBotUsernamesForServer(account.serverUrl));
95
+ }
96
+ const tmidOptions = ctx.replyToId ? { tmid: ctx.replyToId } : undefined;
97
+ const messageId = await client.postMessage(ctx.to, ctx.text, tmidOptions);
98
+ return { channel: "rocketchat", ok: true, messageId };
99
+ },
100
+ sendMedia: async (ctx) => {
101
+ const accountId = ctx.accountId ?? undefined;
102
+ let account = resolveAccount(ctx.cfg, accountId);
103
+ if (!account) {
104
+ const accounts = listAccountIds(ctx.cfg);
105
+ if (accounts.length > 0) {
106
+ account = resolveAccount(ctx.cfg, accounts[0]);
107
+ }
108
+ }
109
+ if (!account)
110
+ throw new Error(`Unknown Rocket.Chat account: ${ctx.accountId}`);
111
+ const entry = activeClients.get(account.accountId);
112
+ let client = entry?.client ?? null;
113
+ if (!client) {
114
+ client = new RocketChatClient({ serverUrl: account.serverUrl, auth: account.auth });
115
+ client.setBotUsernames(collectBotUsernamesForServer(account.serverUrl));
116
+ }
117
+ const tmidOptions = ctx.replyToId ? { tmid: ctx.replyToId } : undefined;
118
+ const urls = ctx.mediaUrl ? [ctx.mediaUrl] : [];
119
+ if (!urls.length) {
120
+ // No media — fall back to text-only delivery.
121
+ const messageId = await client.postMessage(ctx.to, ctx.text ?? "", tmidOptions);
122
+ return { channel: "rocketchat", ok: true, messageId };
123
+ }
124
+ // Send the caption first (if any).
125
+ if (ctx.text?.trim()) {
126
+ await client.postMessage(ctx.to, ctx.text, tmidOptions);
127
+ }
128
+ let delivered = 0;
129
+ for (const url of urls) {
130
+ try {
131
+ let buffer;
132
+ let fileName = "file";
133
+ if (/^https?:\/\//i.test(url)) {
134
+ const resp = await fetch(url, { signal: AbortSignal.timeout(30_000) });
135
+ if (!resp.ok)
136
+ throw new Error(`download failed: ${resp.status}`);
137
+ const arr = new Uint8Array(await resp.arrayBuffer());
138
+ buffer = Buffer.from(arr);
139
+ const pathName = new URL(url).pathname;
140
+ fileName = pathName.split("/").pop() || "file";
141
+ }
142
+ else {
143
+ if (ctx.mediaReadFile) {
144
+ buffer = await ctx.mediaReadFile(url);
145
+ }
146
+ else {
147
+ buffer = await readFile(url);
148
+ }
149
+ fileName = basename(url);
150
+ }
151
+ await client.uploadAttachmentFromBuffer(ctx.to, buffer, fileName, undefined, tmidOptions);
152
+ delivered++;
153
+ }
154
+ catch (err) {
155
+ // Graceful degradation: post the URL as a text link.
156
+ await client.postMessage(ctx.to, `📎 ${url}`, tmidOptions);
157
+ }
158
+ }
159
+ return { channel: "rocketchat", ok: true, messageId: "" };
160
+ },
161
+ },
162
+ },
163
+ });
164
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { InboundAttachment } from "../types.js";
2
+ export declare function getMessageAttachmentInputs(message: {
3
+ attachments?: unknown[];
4
+ file?: unknown;
5
+ files?: unknown[];
6
+ }): unknown[];
7
+ export declare function normalizeInboundAttachments(inputs: unknown[], options?: {
8
+ serverUrl?: string;
9
+ }): InboundAttachment[];
10
+ //# sourceMappingURL=attachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/service/attachments.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAA2C,MAAM,aAAa,CAAC;AAG9F,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB,GAAG,OAAO,EAAE,CA8CZ;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B,iBAAiB,EAAE,CAErB"}
@@ -0,0 +1,105 @@
1
+ import { resolveUrl } from "../utils.js";
2
+ import { mediaKindFromMime, mimeTypeFromFilePath } from "openclaw/plugin-sdk/media-mime";
3
+ export function getMessageAttachmentInputs(message) {
4
+ const hasId = (r) => typeof r._id === "string" && r._id.length > 0;
5
+ const fileRecords = toRecords([
6
+ ...(message.file ? [message.file] : []),
7
+ ...(message.files ?? []),
8
+ ]);
9
+ const fileIds = new Set(fileRecords.filter(hasId).map((r) => r._id));
10
+ const attachmentRecords = toRecords(message.attachments ?? []).filter((r) => !hasId(r) || !fileIds.has(r._id));
11
+ const hasUrl = (r) => typeof r.url === "string" ||
12
+ typeof r.title_link === "string" ||
13
+ typeof r.image_url === "string" ||
14
+ typeof r.video_url === "string" ||
15
+ typeof r.audio_url === "string";
16
+ const merged = [];
17
+ const paired = new Set();
18
+ for (const fileRec of fileRecords) {
19
+ const matchIdx = attachmentRecords.findIndex((att, i) => !paired.has(i) &&
20
+ ((fileRec._id && att._id && fileRec._id === att._id) || (!hasId(att) && hasUrl(att))));
21
+ if (matchIdx !== -1) {
22
+ paired.add(matchIdx);
23
+ const att = attachmentRecords[matchIdx];
24
+ const m = { ...att };
25
+ if (fileRec._id)
26
+ m._id = fileRec._id;
27
+ if (fileRec.type)
28
+ m.type = fileRec.type;
29
+ if (fileRec.name)
30
+ m.name = fileRec.name;
31
+ if (typeof fileRec.size === "number")
32
+ m.size = fileRec.size;
33
+ merged.push(m);
34
+ }
35
+ else {
36
+ merged.push(fileRec);
37
+ }
38
+ }
39
+ for (let i = 0; i < attachmentRecords.length; i++) {
40
+ if (!paired.has(i))
41
+ merged.push(attachmentRecords[i]);
42
+ }
43
+ return merged;
44
+ }
45
+ export function normalizeInboundAttachments(inputs, options) {
46
+ return inputs.map((input) => toAttachment(input, options));
47
+ }
48
+ function toAttachment(input, options) {
49
+ const record = asRecord(input);
50
+ const mimeType = getMime(record);
51
+ const url = getUrl(record, options?.serverUrl);
52
+ const fileName = getFileName(record, url);
53
+ return {
54
+ kind: classify(mimeType, fileName),
55
+ source: record?._id ? "rocketchat-file" : "rocketchat-attachment",
56
+ raw: input,
57
+ ...(mimeType !== undefined ? { mimeType } : {}),
58
+ ...(fileName !== undefined ? { fileName } : {}),
59
+ ...(url !== undefined ? { url } : {}),
60
+ ...(typeof record?.size === "number" ? { sizeBytes: record.size } : {}),
61
+ };
62
+ }
63
+ function asRecord(input) {
64
+ return input && typeof input === "object" && !Array.isArray(input)
65
+ ? input
66
+ : null;
67
+ }
68
+ function toRecords(inputs) {
69
+ return inputs.map(asRecord).filter((r) => r !== null);
70
+ }
71
+ function getMime(record) {
72
+ const v = record?.type ?? record?.mimeType ?? record?.mimetype ?? record?.contentType;
73
+ return typeof v === "string" && v.trim().length > 0 ? v.trim().toLowerCase() : undefined;
74
+ }
75
+ function getUrl(record, serverUrl) {
76
+ const candidates = [
77
+ record?.url,
78
+ record?.title_link,
79
+ record?.image_url,
80
+ record?.video_url,
81
+ record?.audio_url,
82
+ ];
83
+ const raw = candidates.find((v) => typeof v === "string" && v.length > 0);
84
+ return raw ? resolveUrl(raw, serverUrl) : undefined;
85
+ }
86
+ function getFileName(record, url) {
87
+ const name = [record?.title, record?.name, record?.filename].find((v) => typeof v === "string" && v.trim().length > 0);
88
+ if (name)
89
+ return name.trim();
90
+ if (!url)
91
+ return undefined;
92
+ try {
93
+ const seg = new URL(url).pathname.split("/").filter(Boolean).at(-1);
94
+ return seg ? decodeURIComponent(seg) : undefined;
95
+ }
96
+ catch {
97
+ return undefined;
98
+ }
99
+ }
100
+ function classify(mimeType, fileName) {
101
+ const mime = mimeType ?? (fileName ? mimeTypeFromFilePath(fileName) : undefined);
102
+ const kind = mime ? mediaKindFromMime(mime) : undefined;
103
+ return kind ?? "unknown";
104
+ }
105
+ //# sourceMappingURL=attachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/service/attachments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { InboundEvent } from "../types.js";
2
+ import type { ChannelRuleOptions } from "../types.js";
3
+ import { RocketChatClient } from "../client/rest.js";
4
+ import { type ExistingAccount } from "../cli/config-updater.js";
5
+ export declare function shouldHandleInboundEvent(event: InboundEvent, options: ChannelRuleOptions): boolean;
6
+ export type CommandContext = {
7
+ accountId: string;
8
+ account: ExistingAccount;
9
+ client: RocketChatClient;
10
+ channelRuntime?: import("../types.js").ChannelRuntimeLike;
11
+ senderName?: string;
12
+ roomId?: string;
13
+ roomType?: import("../types.js").InboundEvent["roomType"];
14
+ };
15
+ export type CommandResult = {
16
+ action: "reply";
17
+ replyText: string;
18
+ } | {
19
+ action: "passthrough";
20
+ } | {
21
+ action: "openclaw-command";
22
+ command: string;
23
+ };
24
+ export declare function matchCommand(text: string, ctx: CommandContext): Promise<CommandResult>;
25
+ //# sourceMappingURL=channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/service/channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAKrD,OAAO,EAWL,KAAK,eAAe,EAErB,MAAM,0BAA0B,CAAC;AAoBlC,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CA6BT;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,aAAa,EAAE,kBAAkB,CAAC;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,aAAa,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,GACzB;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAwBpD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAmE5F"}