@hywkp/sider 0.0.4 → 0.0.6
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/README.md +280 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -1
- package/dist/index.js.map +1 -1
- package/dist/src/channel.d.ts +12 -0
- package/dist/src/channel.d.ts.map +1 -1
- package/dist/src/channel.js +494 -155
- package/dist/src/channel.js.map +1 -1
- package/dist/src/inbound-media.d.ts +24 -0
- package/dist/src/inbound-media.d.ts.map +1 -0
- package/dist/src/inbound-media.js +56 -0
- package/dist/src/inbound-media.js.map +1 -0
- package/dist/src/media-upload.d.ts +41 -0
- package/dist/src/media-upload.d.ts.map +1 -0
- package/dist/src/media-upload.js +389 -0
- package/dist/src/media-upload.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { loadOutboundMediaFromUrl, resolveOutboundMediaUrls } from "openclaw/plugin-sdk";
|
|
3
|
+
const DEFAULT_MIME = "application/octet-stream";
|
|
4
|
+
const MIME_BY_EXTENSION = {
|
|
5
|
+
".jpg": "image/jpeg",
|
|
6
|
+
".jpeg": "image/jpeg",
|
|
7
|
+
".png": "image/png",
|
|
8
|
+
".gif": "image/gif",
|
|
9
|
+
".webp": "image/webp",
|
|
10
|
+
".bmp": "image/bmp",
|
|
11
|
+
".svg": "image/svg+xml",
|
|
12
|
+
".pdf": "application/pdf",
|
|
13
|
+
".txt": "text/plain",
|
|
14
|
+
".json": "application/json",
|
|
15
|
+
".zip": "application/zip",
|
|
16
|
+
};
|
|
17
|
+
const EXTENSION_BY_MIME = {
|
|
18
|
+
"image/jpeg": ".jpg",
|
|
19
|
+
"image/png": ".png",
|
|
20
|
+
"image/gif": ".gif",
|
|
21
|
+
"image/webp": ".webp",
|
|
22
|
+
"image/bmp": ".bmp",
|
|
23
|
+
"image/svg+xml": ".svg",
|
|
24
|
+
"application/pdf": ".pdf",
|
|
25
|
+
"text/plain": ".txt",
|
|
26
|
+
"application/json": ".json",
|
|
27
|
+
"application/zip": ".zip",
|
|
28
|
+
};
|
|
29
|
+
function toRecord(value) {
|
|
30
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
function normalizeMime(raw) {
|
|
36
|
+
const value = raw?.trim().toLowerCase();
|
|
37
|
+
if (!value) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
const normalized = value.split(";")[0]?.trim();
|
|
41
|
+
return normalized || undefined;
|
|
42
|
+
}
|
|
43
|
+
function extFromPath(raw) {
|
|
44
|
+
const qPos = raw.indexOf("?");
|
|
45
|
+
const sanitized = qPos >= 0 ? raw.slice(0, qPos) : raw;
|
|
46
|
+
const slashPos = Math.max(sanitized.lastIndexOf("/"), sanitized.lastIndexOf("\\"));
|
|
47
|
+
const last = slashPos >= 0 ? sanitized.slice(slashPos + 1) : sanitized;
|
|
48
|
+
const dotPos = last.lastIndexOf(".");
|
|
49
|
+
return dotPos >= 0 ? last.slice(dotPos).toLowerCase() : "";
|
|
50
|
+
}
|
|
51
|
+
function fileNameFromMediaUrl(raw) {
|
|
52
|
+
try {
|
|
53
|
+
if (/^https?:\/\//i.test(raw) || /^file:\/\//i.test(raw)) {
|
|
54
|
+
const pathname = new URL(raw).pathname;
|
|
55
|
+
const seg = pathname.split("/").filter(Boolean).pop();
|
|
56
|
+
return seg || undefined;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// no-op
|
|
61
|
+
}
|
|
62
|
+
const qPos = raw.indexOf("?");
|
|
63
|
+
const sanitized = qPos >= 0 ? raw.slice(0, qPos) : raw;
|
|
64
|
+
const seg = sanitized.split(/[\\/]/).filter(Boolean).pop();
|
|
65
|
+
return seg || undefined;
|
|
66
|
+
}
|
|
67
|
+
function normalizeFileName(raw, fallback) {
|
|
68
|
+
const base = (raw ?? "").trim().split(/[\\/]/).filter(Boolean).pop() ?? "";
|
|
69
|
+
const cleaned = base.replace(/[\u0000-\u001f]/g, "");
|
|
70
|
+
if (!cleaned || cleaned === "." || cleaned === "..") {
|
|
71
|
+
return fallback;
|
|
72
|
+
}
|
|
73
|
+
return cleaned.slice(0, 255);
|
|
74
|
+
}
|
|
75
|
+
function inferMimeFromFileName(fileName) {
|
|
76
|
+
const ext = extFromPath(fileName);
|
|
77
|
+
return MIME_BY_EXTENSION[ext];
|
|
78
|
+
}
|
|
79
|
+
function inferFallbackFileName(params) {
|
|
80
|
+
const ext = EXTENSION_BY_MIME[params.mimeType];
|
|
81
|
+
if (ext) {
|
|
82
|
+
return `attachment${ext}`;
|
|
83
|
+
}
|
|
84
|
+
return params.mediaKind === "image" ? "attachment.png" : "attachment.bin";
|
|
85
|
+
}
|
|
86
|
+
function sha256Hex(buffer) {
|
|
87
|
+
return createHash("sha256").update(buffer).digest("hex");
|
|
88
|
+
}
|
|
89
|
+
function resolveGatewayApiUrl(gatewayUrl, path) {
|
|
90
|
+
const url = new URL(gatewayUrl);
|
|
91
|
+
const basePath = url.pathname.replace(/\/+$/, "");
|
|
92
|
+
const suffix = path.startsWith("/") ? path : `/${path}`;
|
|
93
|
+
url.pathname = `${basePath}${suffix}`;
|
|
94
|
+
url.search = "";
|
|
95
|
+
url.hash = "";
|
|
96
|
+
return url.toString();
|
|
97
|
+
}
|
|
98
|
+
async function readResponseErrorBody(response) {
|
|
99
|
+
try {
|
|
100
|
+
const text = (await response.text()).trim();
|
|
101
|
+
return text;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return "";
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function describeError(error) {
|
|
108
|
+
if (error instanceof Error) {
|
|
109
|
+
return error.message || String(error);
|
|
110
|
+
}
|
|
111
|
+
return String(error);
|
|
112
|
+
}
|
|
113
|
+
async function postJson(params) {
|
|
114
|
+
const response = await fetch(params.url, {
|
|
115
|
+
method: "POST",
|
|
116
|
+
headers: {
|
|
117
|
+
"Content-Type": "application/json",
|
|
118
|
+
},
|
|
119
|
+
body: JSON.stringify(params.body),
|
|
120
|
+
signal: AbortSignal.timeout(params.timeoutMs),
|
|
121
|
+
});
|
|
122
|
+
const text = await response.text();
|
|
123
|
+
if (!response.ok) {
|
|
124
|
+
const hint = text ? `: ${text.slice(0, 300)}` : "";
|
|
125
|
+
throw new Error(`HTTP ${response.status} ${response.statusText}${hint}`);
|
|
126
|
+
}
|
|
127
|
+
let parsed = {};
|
|
128
|
+
if (text.trim()) {
|
|
129
|
+
try {
|
|
130
|
+
parsed = JSON.parse(text);
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
throw new Error(`invalid JSON response from ${params.url}: ${String(error)}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return parsed;
|
|
137
|
+
}
|
|
138
|
+
function parseFileInitResult(value) {
|
|
139
|
+
const record = toRecord(value);
|
|
140
|
+
if (!record) {
|
|
141
|
+
throw new Error("files/init returned invalid response");
|
|
142
|
+
}
|
|
143
|
+
const fileId = typeof record.file_id === "string" ? record.file_id.trim() : "";
|
|
144
|
+
const objectKey = typeof record.object_key === "string" ? record.object_key.trim() : "";
|
|
145
|
+
const uploadUrl = typeof record.upload_url === "string" ? record.upload_url.trim() : "";
|
|
146
|
+
if (!fileId || !objectKey || !uploadUrl) {
|
|
147
|
+
throw new Error("files/init response missing file_id/object_key/upload_url");
|
|
148
|
+
}
|
|
149
|
+
return { fileId, objectKey, uploadUrl };
|
|
150
|
+
}
|
|
151
|
+
async function initFileUpload(params) {
|
|
152
|
+
const url = resolveGatewayApiUrl(params.account.gatewayUrl, "/v1/files/init");
|
|
153
|
+
try {
|
|
154
|
+
const response = await postJson({
|
|
155
|
+
url,
|
|
156
|
+
timeoutMs: params.account.sendTimeoutMs,
|
|
157
|
+
body: {
|
|
158
|
+
session_id: params.sessionId,
|
|
159
|
+
name: params.fileName,
|
|
160
|
+
size: params.size,
|
|
161
|
+
mime: params.mimeType,
|
|
162
|
+
sha256: params.sha256,
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
return parseFileInitResult(response);
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
params.logger?.warn?.("sider files/init failed", {
|
|
169
|
+
accountId: params.account.accountId,
|
|
170
|
+
sessionId: params.sessionId,
|
|
171
|
+
fileName: params.fileName,
|
|
172
|
+
size: params.size,
|
|
173
|
+
mimeType: params.mimeType,
|
|
174
|
+
sha256: params.sha256,
|
|
175
|
+
error: String(error),
|
|
176
|
+
});
|
|
177
|
+
throw new Error(`sider files/init failed: ${describeError(error)}`, {
|
|
178
|
+
cause: error instanceof Error ? error : undefined,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async function uploadToObjectStore(params) {
|
|
183
|
+
const headers = {};
|
|
184
|
+
if (params.mimeType) {
|
|
185
|
+
headers["Content-Type"] = params.mimeType;
|
|
186
|
+
}
|
|
187
|
+
if (params.sha256) {
|
|
188
|
+
// Required by gateway presign input (PutObjectInput.Metadata["sha256"]).
|
|
189
|
+
headers["x-amz-meta-sha256"] = params.sha256;
|
|
190
|
+
}
|
|
191
|
+
try {
|
|
192
|
+
const response = await fetch(params.uploadUrl, {
|
|
193
|
+
method: "PUT",
|
|
194
|
+
headers,
|
|
195
|
+
body: new Uint8Array(params.buffer),
|
|
196
|
+
signal: AbortSignal.timeout(params.timeoutMs),
|
|
197
|
+
});
|
|
198
|
+
if (!response.ok) {
|
|
199
|
+
const detail = await readResponseErrorBody(response);
|
|
200
|
+
const hint = detail ? `: ${detail.slice(0, 300)}` : "";
|
|
201
|
+
throw new Error(`upload failed (${response.status} ${response.statusText})${hint}`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
params.logger?.warn?.("sider object upload failed", {
|
|
206
|
+
accountId: params.accountId,
|
|
207
|
+
sessionId: params.sessionId,
|
|
208
|
+
fileId: params.fileId,
|
|
209
|
+
objectKey: params.objectKey,
|
|
210
|
+
fileName: params.fileName,
|
|
211
|
+
mimeType: params.mimeType,
|
|
212
|
+
size: params.buffer.length,
|
|
213
|
+
hasSha256Header: Boolean(params.sha256),
|
|
214
|
+
error: String(error),
|
|
215
|
+
});
|
|
216
|
+
const label = params.fileName ?? params.objectKey ?? "attachment";
|
|
217
|
+
throw new Error(`sider object upload failed (${label}): ${describeError(error)}`, {
|
|
218
|
+
cause: error instanceof Error ? error : undefined,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
async function completeFileUploadBestEffort(params) {
|
|
223
|
+
const url = resolveGatewayApiUrl(params.account.gatewayUrl, "/v1/files/complete");
|
|
224
|
+
try {
|
|
225
|
+
await postJson({
|
|
226
|
+
url,
|
|
227
|
+
timeoutMs: params.account.sendTimeoutMs,
|
|
228
|
+
body: {
|
|
229
|
+
session_id: params.sessionId,
|
|
230
|
+
file_id: params.fileId,
|
|
231
|
+
object_key: params.objectKey,
|
|
232
|
+
size: params.size,
|
|
233
|
+
sha256: params.sha256,
|
|
234
|
+
},
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
params.logger?.warn?.("sider files/complete failed (ignored)", {
|
|
239
|
+
accountId: params.account.accountId,
|
|
240
|
+
sessionId: params.sessionId,
|
|
241
|
+
fileId: params.fileId,
|
|
242
|
+
objectKey: params.objectKey,
|
|
243
|
+
error: String(error),
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
function buildSiderFilePart(params) {
|
|
248
|
+
return {
|
|
249
|
+
type: "core.file",
|
|
250
|
+
spec_version: 1,
|
|
251
|
+
payload: {
|
|
252
|
+
file_id: params.uploaded.fileId,
|
|
253
|
+
object_key: params.uploaded.objectKey,
|
|
254
|
+
name: params.uploaded.fileName,
|
|
255
|
+
size: params.uploaded.size,
|
|
256
|
+
mime: params.uploaded.mimeType,
|
|
257
|
+
sha256: params.uploaded.sha256,
|
|
258
|
+
upload_status: "uploaded",
|
|
259
|
+
},
|
|
260
|
+
meta: {
|
|
261
|
+
...(params.sourceLabel ? { source_media_url: params.sourceLabel } : {}),
|
|
262
|
+
media_kind: params.uploaded.mediaKind,
|
|
263
|
+
},
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
async function uploadPreparedMediaToSider(params) {
|
|
267
|
+
const contentType = normalizeMime(params.media.contentType);
|
|
268
|
+
const inferredKind = params.media.kind === "image" || contentType?.startsWith("image/") ? "image" : "file";
|
|
269
|
+
const sourceName = params.media.fileName || fileNameFromMediaUrl(params.media.sourceLabel ?? "");
|
|
270
|
+
const fallbackName = inferFallbackFileName({
|
|
271
|
+
mimeType: contentType ?? DEFAULT_MIME,
|
|
272
|
+
mediaKind: inferredKind,
|
|
273
|
+
});
|
|
274
|
+
const fileName = normalizeFileName(sourceName, fallbackName);
|
|
275
|
+
const mimeType = contentType || inferMimeFromFileName(fileName) || DEFAULT_MIME;
|
|
276
|
+
const size = params.media.buffer.length;
|
|
277
|
+
if (size <= 0) {
|
|
278
|
+
const suffix = params.media.sourceLabel ? ` from ${params.media.sourceLabel}` : "";
|
|
279
|
+
throw new Error(`empty media buffer${suffix}`);
|
|
280
|
+
}
|
|
281
|
+
const sha256 = sha256Hex(params.media.buffer);
|
|
282
|
+
const initResult = await initFileUpload({
|
|
283
|
+
account: params.account,
|
|
284
|
+
sessionId: params.sessionId,
|
|
285
|
+
fileName,
|
|
286
|
+
size,
|
|
287
|
+
mimeType,
|
|
288
|
+
sha256,
|
|
289
|
+
logger: params.logger,
|
|
290
|
+
});
|
|
291
|
+
params.logger?.debug?.("sider files/init success", {
|
|
292
|
+
accountId: params.account.accountId,
|
|
293
|
+
sessionId: params.sessionId,
|
|
294
|
+
fileId: initResult.fileId,
|
|
295
|
+
objectKey: initResult.objectKey,
|
|
296
|
+
size,
|
|
297
|
+
mimeType,
|
|
298
|
+
});
|
|
299
|
+
await uploadToObjectStore({
|
|
300
|
+
uploadUrl: initResult.uploadUrl,
|
|
301
|
+
mimeType,
|
|
302
|
+
sha256,
|
|
303
|
+
buffer: params.media.buffer,
|
|
304
|
+
timeoutMs: params.account.sendTimeoutMs,
|
|
305
|
+
logger: params.logger,
|
|
306
|
+
accountId: params.account.accountId,
|
|
307
|
+
sessionId: params.sessionId,
|
|
308
|
+
fileId: initResult.fileId,
|
|
309
|
+
objectKey: initResult.objectKey,
|
|
310
|
+
fileName,
|
|
311
|
+
});
|
|
312
|
+
await completeFileUploadBestEffort({
|
|
313
|
+
account: params.account,
|
|
314
|
+
sessionId: params.sessionId,
|
|
315
|
+
fileId: initResult.fileId,
|
|
316
|
+
objectKey: initResult.objectKey,
|
|
317
|
+
size,
|
|
318
|
+
sha256,
|
|
319
|
+
logger: params.logger,
|
|
320
|
+
});
|
|
321
|
+
return {
|
|
322
|
+
fileId: initResult.fileId,
|
|
323
|
+
objectKey: initResult.objectKey,
|
|
324
|
+
fileName,
|
|
325
|
+
mimeType,
|
|
326
|
+
size,
|
|
327
|
+
sha256,
|
|
328
|
+
mediaKind: inferredKind,
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
async function uploadMediaToSider(params) {
|
|
332
|
+
const loaded = await loadOutboundMediaFromUrl(params.mediaUrl, {
|
|
333
|
+
mediaLocalRoots: params.mediaLocalRoots,
|
|
334
|
+
});
|
|
335
|
+
return await uploadPreparedMediaToSider({
|
|
336
|
+
account: params.account,
|
|
337
|
+
sessionId: params.sessionId,
|
|
338
|
+
media: {
|
|
339
|
+
buffer: loaded.buffer,
|
|
340
|
+
contentType: loaded.contentType,
|
|
341
|
+
fileName: loaded.fileName || fileNameFromMediaUrl(params.mediaUrl),
|
|
342
|
+
kind: loaded.kind,
|
|
343
|
+
sourceLabel: params.mediaUrl,
|
|
344
|
+
},
|
|
345
|
+
logger: params.logger,
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
export async function buildSiderPartFromInlineAttachment(params) {
|
|
349
|
+
const uploaded = await uploadPreparedMediaToSider({
|
|
350
|
+
account: params.account,
|
|
351
|
+
sessionId: params.sessionId,
|
|
352
|
+
media: {
|
|
353
|
+
buffer: params.buffer,
|
|
354
|
+
contentType: params.contentType,
|
|
355
|
+
fileName: params.fileName,
|
|
356
|
+
kind: params.mediaKind,
|
|
357
|
+
sourceLabel: params.sourceLabel,
|
|
358
|
+
},
|
|
359
|
+
logger: params.logger,
|
|
360
|
+
});
|
|
361
|
+
return buildSiderFilePart({
|
|
362
|
+
uploaded,
|
|
363
|
+
sourceLabel: params.sourceLabel,
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
export async function buildSiderPartsFromReplyPayload(params) {
|
|
367
|
+
const parts = [];
|
|
368
|
+
const text = params.payload.text?.trim();
|
|
369
|
+
if (text) {
|
|
370
|
+
parts.push({
|
|
371
|
+
type: "core.text",
|
|
372
|
+
spec_version: 1,
|
|
373
|
+
payload: { text },
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
const mediaUrls = resolveOutboundMediaUrls(params.payload);
|
|
377
|
+
for (const mediaUrl of mediaUrls) {
|
|
378
|
+
const uploaded = await uploadMediaToSider({
|
|
379
|
+
account: params.account,
|
|
380
|
+
sessionId: params.sessionId,
|
|
381
|
+
mediaUrl,
|
|
382
|
+
mediaLocalRoots: params.mediaLocalRoots,
|
|
383
|
+
logger: params.logger,
|
|
384
|
+
});
|
|
385
|
+
parts.push(buildSiderFilePart({ uploaded, sourceLabel: mediaUrl }));
|
|
386
|
+
}
|
|
387
|
+
return parts;
|
|
388
|
+
}
|
|
389
|
+
//# sourceMappingURL=media-upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-upload.js","sourceRoot":"","sources":["../../src/media-upload.ts"],"names":[],"mappings":"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"}
|