@ceki/sdk 1.9.2 → 1.10.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.
- package/dist/cli.js +28 -7
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +24 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +24 -5
- package/dist/index.js.map +1 -1
- package/package.json +5 -3
package/dist/cli.js
CHANGED
|
@@ -125,6 +125,9 @@ var ChatSendFailed = class extends CekiBrowserError {
|
|
|
125
125
|
}
|
|
126
126
|
};
|
|
127
127
|
|
|
128
|
+
// src/browser.ts
|
|
129
|
+
import mime from "mime-types";
|
|
130
|
+
|
|
128
131
|
// src/chat.ts
|
|
129
132
|
import * as crypto from "crypto";
|
|
130
133
|
import * as fs from "fs";
|
|
@@ -190,7 +193,7 @@ var BrowserChat = class {
|
|
|
190
193
|
if (buf.length > MAX_IMAGE_SIZE) {
|
|
191
194
|
throw new Error(`Image too large: ${buf.length} bytes (max ${MAX_IMAGE_SIZE})`);
|
|
192
195
|
}
|
|
193
|
-
const { mime, ext } = detectMime(buf);
|
|
196
|
+
const { mime: mime2, ext } = detectMime(buf);
|
|
194
197
|
if (!filename.includes(".")) {
|
|
195
198
|
filename = `${filename}.${ext}`;
|
|
196
199
|
}
|
|
@@ -201,7 +204,7 @@ var BrowserChat = class {
|
|
|
201
204
|
session_id: this._browser.sessionId,
|
|
202
205
|
client_msg_id: clientMsgId,
|
|
203
206
|
filename,
|
|
204
|
-
mime,
|
|
207
|
+
mime: mime2,
|
|
205
208
|
data_b64
|
|
206
209
|
};
|
|
207
210
|
if (text) msg.text = text;
|
|
@@ -557,7 +560,7 @@ function keymapForChar(char) {
|
|
|
557
560
|
}
|
|
558
561
|
|
|
559
562
|
// src/browser.ts
|
|
560
|
-
var Browser = class {
|
|
563
|
+
var Browser = class _Browser {
|
|
561
564
|
sessionId;
|
|
562
565
|
browserId;
|
|
563
566
|
scheduleId;
|
|
@@ -797,7 +800,10 @@ var Browser = class {
|
|
|
797
800
|
ts: /* @__PURE__ */ new Date()
|
|
798
801
|
};
|
|
799
802
|
}
|
|
800
|
-
|
|
803
|
+
static _detectMime(filename) {
|
|
804
|
+
return mime.lookup(filename) || "application/octet-stream";
|
|
805
|
+
}
|
|
806
|
+
async upload(selector, source, filename, mime2) {
|
|
801
807
|
let buf;
|
|
802
808
|
let resolvedFilename;
|
|
803
809
|
if (typeof source === "string") {
|
|
@@ -809,6 +815,8 @@ var Browser = class {
|
|
|
809
815
|
buf = Buffer.isBuffer(source) ? source : Buffer.from(source);
|
|
810
816
|
resolvedFilename = filename ?? "file";
|
|
811
817
|
}
|
|
818
|
+
const mimeType = mime2 ?? _Browser._detectMime(resolvedFilename);
|
|
819
|
+
console.info(`upload: file=${resolvedFilename} mime=${mimeType} size=${buf.length}`);
|
|
812
820
|
const b64 = buf.toString("base64");
|
|
813
821
|
const size = buf.length;
|
|
814
822
|
const expression = `
|
|
@@ -819,7 +827,7 @@ var Browser = class {
|
|
|
819
827
|
var binary = atob(b64);
|
|
820
828
|
var bytes = new Uint8Array(binary.length);
|
|
821
829
|
for (var i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
|
|
822
|
-
var file = new File([bytes], ${JSON.stringify(resolvedFilename)}, {type:
|
|
830
|
+
var file = new File([bytes], ${JSON.stringify(resolvedFilename)}, {type: ${JSON.stringify(mimeType)}});
|
|
823
831
|
var dt = new DataTransfer();
|
|
824
832
|
dt.items.add(file);
|
|
825
833
|
input.files = dt.files;
|
|
@@ -832,6 +840,17 @@ var Browser = class {
|
|
|
832
840
|
params: { expression, returnByValue: true }
|
|
833
841
|
});
|
|
834
842
|
const resultObj = result?.result;
|
|
843
|
+
try {
|
|
844
|
+
await this.send({
|
|
845
|
+
method: "Input.dispatchKeyEvent",
|
|
846
|
+
params: { type: "keyDown", key: "Escape", code: "Escape", windowsVirtualKeyCode: 27, nativeVirtualKeyCode: 27 }
|
|
847
|
+
});
|
|
848
|
+
await this.send({
|
|
849
|
+
method: "Input.dispatchKeyEvent",
|
|
850
|
+
params: { type: "keyUp", key: "Escape", code: "Escape", windowsVirtualKeyCode: 27, nativeVirtualKeyCode: 27 }
|
|
851
|
+
});
|
|
852
|
+
} catch {
|
|
853
|
+
}
|
|
835
854
|
if (resultObj?.value) {
|
|
836
855
|
return JSON.parse(String(resultObj.value));
|
|
837
856
|
}
|
|
@@ -2482,10 +2501,12 @@ async function cmdUpload(sid, args) {
|
|
|
2482
2501
|
let selector = null;
|
|
2483
2502
|
let filePath = null;
|
|
2484
2503
|
let filename;
|
|
2504
|
+
let mime2;
|
|
2485
2505
|
for (let i = 0; i < args.length; i++) {
|
|
2486
2506
|
if (args[i] === "--selector" && args[i + 1]) selector = args[++i];
|
|
2487
2507
|
if (args[i] === "--file" && args[i + 1]) filePath = args[++i];
|
|
2488
2508
|
if (args[i] === "--filename" && args[i + 1]) filename = args[++i];
|
|
2509
|
+
if (args[i] === "--mime" && args[i + 1]) mime2 = args[++i];
|
|
2489
2510
|
}
|
|
2490
2511
|
if (!selector || !filePath) {
|
|
2491
2512
|
err("--selector and --file are required", "args");
|
|
@@ -2498,7 +2519,7 @@ async function cmdUpload(sid, args) {
|
|
|
2498
2519
|
const apiKey = getApiKey();
|
|
2499
2520
|
const [client, browser] = await resumeBrowser(apiKey, sid);
|
|
2500
2521
|
try {
|
|
2501
|
-
const result = await browser.upload(selector, filePath, filename);
|
|
2522
|
+
const result = await browser.upload(selector, filePath, filename, mime2);
|
|
2502
2523
|
out(result);
|
|
2503
2524
|
} finally {
|
|
2504
2525
|
await closeClient(client);
|
|
@@ -2522,7 +2543,7 @@ Commands:
|
|
|
2522
2543
|
switch-tab <sid>
|
|
2523
2544
|
configure <sid> [--masking-mode true|false] [--fingerprint true|false]
|
|
2524
2545
|
cdp <sid> --method <M> [--params JSON]
|
|
2525
|
-
upload <sid> --selector CSS --file PATH [--filename NAME]
|
|
2546
|
+
upload <sid> --selector CSS --file PATH [--filename NAME] [--mime TYPE]
|
|
2526
2547
|
request-captcha <sid> [--acceptance N] [--completion M] [--manual]
|
|
2527
2548
|
wait <sid>
|
|
2528
2549
|
chat <sid> send "<text>"
|