junis 0.4.3 → 0.4.5
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/dist/cli/index.js +20 -12
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -190,13 +190,16 @@ async function uploadLargeFile(relay, base64Data, filename, contentType) {
|
|
|
190
190
|
function isLargeBase64(base64) {
|
|
191
191
|
return base64.length * 0.75 > LARGE_FILE_THRESHOLD;
|
|
192
192
|
}
|
|
193
|
-
function detectContentType(
|
|
194
|
-
|
|
195
|
-
if (
|
|
196
|
-
if (
|
|
197
|
-
if (
|
|
198
|
-
if (
|
|
199
|
-
if (
|
|
193
|
+
function detectContentType(buffer) {
|
|
194
|
+
if (buffer[0] === 137 && buffer[1] === 80 && buffer[2] === 78 && buffer[3] === 71) return "image/png";
|
|
195
|
+
if (buffer[0] === 255 && buffer[1] === 216 && buffer[2] === 255) return "image/jpeg";
|
|
196
|
+
if (buffer[0] === 71 && buffer[1] === 73 && buffer[2] === 70 && buffer[3] === 56) return "image/gif";
|
|
197
|
+
if (buffer[0] === 37 && buffer[1] === 80 && buffer[2] === 68 && buffer[3] === 70) return "application/pdf";
|
|
198
|
+
if (buffer[0] === 82 && buffer[1] === 73 && buffer[2] === 70 && buffer[3] === 70 && buffer[8] === 87 && buffer[9] === 69 && buffer[10] === 66 && buffer[11] === 80) return "image/webp";
|
|
199
|
+
if (buffer[4] === 102 && buffer[5] === 116 && buffer[6] === 121 && buffer[7] === 112) return "video/mp4";
|
|
200
|
+
if (buffer[0] === 82 && buffer[1] === 73 && buffer[2] === 70 && buffer[3] === 70 && buffer[8] === 87 && buffer[9] === 65 && buffer[10] === 86 && buffer[11] === 69) return "audio/wav";
|
|
201
|
+
if (buffer[0] === 73 && buffer[1] === 68 && buffer[2] === 51) return "audio/mpeg";
|
|
202
|
+
if (buffer[0] === 255 && (buffer[1] === 251 || buffer[1] === 243 || buffer[1] === 242)) return "audio/mpeg";
|
|
200
203
|
return "application/octet-stream";
|
|
201
204
|
}
|
|
202
205
|
|
|
@@ -303,7 +306,9 @@ var RelayClient = class {
|
|
|
303
306
|
} catch {
|
|
304
307
|
}
|
|
305
308
|
});
|
|
306
|
-
ws.on("close", async (code) => {
|
|
309
|
+
ws.on("close", async (code, reason) => {
|
|
310
|
+
const reasonStr = reason?.toString() || "n/a";
|
|
311
|
+
console.log(`[debug] WebSocket close event: code=${code}, reason="${reasonStr}"`);
|
|
307
312
|
if (this.destroyed) return;
|
|
308
313
|
if (this.ws !== ws) return;
|
|
309
314
|
this.stopHeartbeat();
|
|
@@ -326,12 +331,13 @@ var RelayClient = class {
|
|
|
326
331
|
);
|
|
327
332
|
process.exit(1);
|
|
328
333
|
}
|
|
329
|
-
console.log(`\u26A0\uFE0F Disconnected. Reconnecting in ${this.reconnectDelay / 1e3}s...`);
|
|
334
|
+
console.log(`\u26A0\uFE0F Disconnected (code=${code}, reason="${reasonStr}"). Reconnecting in ${this.reconnectDelay / 1e3}s...`);
|
|
330
335
|
setTimeout(() => this.connect(), this.reconnectDelay);
|
|
331
336
|
this.reconnectDelay = Math.min(this.reconnectDelay * 2, 3e4);
|
|
332
337
|
});
|
|
333
338
|
ws.on("error", (err) => {
|
|
334
|
-
console.error(`Relay error: ${err.message}`
|
|
339
|
+
console.error(`Relay error: ${err.message}${err.stack ? `
|
|
340
|
+
${err.stack}` : ""}`);
|
|
335
341
|
});
|
|
336
342
|
}
|
|
337
343
|
/** 재인증 완료 후 재연결 */
|
|
@@ -455,7 +461,8 @@ var RelayClient = class {
|
|
|
455
461
|
}
|
|
456
462
|
} else if (item.type === "text" && typeof item.text === "string" && isLargeBase64(item.text) && /^[A-Za-z0-9+/\n\r]+=*$/.test(item.text.trim())) {
|
|
457
463
|
try {
|
|
458
|
-
const
|
|
464
|
+
const buffer = Buffer.from(item.text, "base64");
|
|
465
|
+
const contentType = detectContentType(buffer);
|
|
459
466
|
if (contentType === "application/octet-stream") {
|
|
460
467
|
content[i] = { type: "text", text: "[Binary file detected. Use the share_file tool to provide a download link to the user. Do not display this message.]" };
|
|
461
468
|
continue;
|
|
@@ -465,7 +472,8 @@ var RelayClient = class {
|
|
|
465
472
|
content[i] = { type: "text", text: url };
|
|
466
473
|
} catch (err) {
|
|
467
474
|
console.error("Failed to upload large text base64:", err);
|
|
468
|
-
const
|
|
475
|
+
const buffer = Buffer.from(item.text, "base64");
|
|
476
|
+
const contentType = detectContentType(buffer);
|
|
469
477
|
const ext = contentType.split("/")[1] || "bin";
|
|
470
478
|
item.text = `[\uD30C\uC77C \uC5C5\uB85C\uB4DC \uC2E4\uD328: ${String(err)}. \uD30C\uC77C\uBA85: file.${ext}]`;
|
|
471
479
|
}
|