@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 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
- async upload(selector, source, filename) {
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: 'application/octet-stream'});
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>"