rezo 1.0.4 → 1.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.
Files changed (47) hide show
  1. package/README.md +352 -9
  2. package/dist/adapters/curl.cjs +796 -0
  3. package/dist/adapters/curl.js +796 -0
  4. package/dist/adapters/entries/curl.d.ts +2332 -20
  5. package/dist/adapters/entries/fetch.d.ts +289 -20
  6. package/dist/adapters/entries/http.d.ts +289 -20
  7. package/dist/adapters/entries/http2.d.ts +289 -20
  8. package/dist/adapters/entries/react-native.d.ts +289 -20
  9. package/dist/adapters/entries/xhr.d.ts +289 -20
  10. package/dist/adapters/index.cjs +6 -6
  11. package/dist/adapters/picker.cjs +2 -2
  12. package/dist/adapters/picker.js +2 -2
  13. package/dist/cache/index.cjs +13 -13
  14. package/dist/core/rezo.cjs +2 -2
  15. package/dist/core/rezo.js +2 -2
  16. package/dist/crawler.d.ts +291 -22
  17. package/dist/entries/crawler.cjs +5 -5
  18. package/dist/index.cjs +23 -18
  19. package/dist/index.d.ts +556 -20
  20. package/dist/index.js +1 -0
  21. package/dist/platform/browser.d.ts +289 -20
  22. package/dist/platform/bun.d.ts +289 -20
  23. package/dist/platform/deno.d.ts +289 -20
  24. package/dist/platform/node.d.ts +289 -20
  25. package/dist/platform/react-native.d.ts +289 -20
  26. package/dist/platform/worker.d.ts +289 -20
  27. package/dist/plugin/crawler-options.cjs +1 -1
  28. package/dist/plugin/crawler-options.js +1 -1
  29. package/dist/plugin/crawler.cjs +2 -2
  30. package/dist/plugin/crawler.js +2 -2
  31. package/dist/plugin/index.cjs +36 -36
  32. package/dist/proxy/index.cjs +2 -2
  33. package/dist/proxy/manager.cjs +14 -1
  34. package/dist/proxy/manager.js +14 -1
  35. package/dist/queue/http-queue.cjs +313 -0
  36. package/dist/queue/http-queue.js +312 -0
  37. package/dist/queue/index.cjs +8 -0
  38. package/dist/queue/index.js +6 -0
  39. package/dist/queue/queue.cjs +346 -0
  40. package/dist/queue/queue.js +344 -0
  41. package/dist/queue/types.cjs +17 -0
  42. package/dist/queue/types.js +17 -0
  43. package/dist/types/curl-options.cjs +25 -0
  44. package/dist/types/curl-options.js +25 -0
  45. package/dist/utils/http-config.cjs +0 -15
  46. package/dist/utils/http-config.js +0 -15
  47. package/package.json +1 -2
@@ -265,9 +265,805 @@ class CurlCommandBuilder {
265
265
  if (originalRequest.onUploadProgress || originalRequest.onDownloadProgress) {
266
266
  this.addArg("--progress-bar");
267
267
  }
268
+ this.applyCurlOptions(originalRequest.curl);
268
269
  this.addArg("-w", this.buildWriteOutFormat());
269
270
  return { args: this.args, tempFiles: createdTempFiles, cookieJar };
270
271
  }
272
+ applyCurlOptions(curlOpts) {
273
+ if (!curlOpts) {
274
+ return;
275
+ }
276
+ if (curlOpts.connectTimeout !== undefined) {
277
+ this.replaceArg("--connect-timeout", curlOpts.connectTimeout.toString());
278
+ }
279
+ if (curlOpts.maxTime !== undefined) {
280
+ this.replaceArg("--max-time", curlOpts.maxTime.toString());
281
+ }
282
+ if (curlOpts.expect100Timeout !== undefined) {
283
+ this.addArg("--expect100-timeout", curlOpts.expect100Timeout.toString());
284
+ }
285
+ if (curlOpts.keepaliveTime !== undefined) {
286
+ this.addArg("--keepalive-time", curlOpts.keepaliveTime.toString());
287
+ }
288
+ if (curlOpts.noKeepalive === true) {
289
+ this.addArg("--no-keepalive");
290
+ }
291
+ if (curlOpts.tcpFastOpen === true) {
292
+ this.addArg("--tcp-fastopen");
293
+ }
294
+ if (curlOpts.tcpNodelay === true) {
295
+ this.addArg("--tcp-nodelay");
296
+ }
297
+ if (curlOpts.limitRate) {
298
+ this.addArg("--limit-rate", curlOpts.limitRate);
299
+ }
300
+ if (curlOpts.speedLimit) {
301
+ this.addArg("--speed-limit", curlOpts.speedLimit.limit.toString());
302
+ if (curlOpts.speedLimit.time !== undefined) {
303
+ this.addArg("--speed-time", curlOpts.speedLimit.time.toString());
304
+ }
305
+ }
306
+ if (curlOpts.retry) {
307
+ if (curlOpts.retry.attempts !== undefined) {
308
+ this.addArg("--retry", curlOpts.retry.attempts.toString());
309
+ }
310
+ if (curlOpts.retry.delay !== undefined) {
311
+ this.addArg("--retry-delay", curlOpts.retry.delay.toString());
312
+ }
313
+ if (curlOpts.retry.maxTime !== undefined) {
314
+ this.addArg("--retry-max-time", curlOpts.retry.maxTime.toString());
315
+ }
316
+ if (curlOpts.retry.allErrors === true) {
317
+ this.addArg("--retry-all-errors");
318
+ }
319
+ if (curlOpts.retry.connRefused === true) {
320
+ this.addArg("--retry-connrefused");
321
+ }
322
+ }
323
+ if (curlOpts.interface) {
324
+ this.addArg("--interface", curlOpts.interface);
325
+ }
326
+ if (curlOpts.localAddress) {
327
+ this.addArg("--local-address", curlOpts.localAddress);
328
+ }
329
+ if (curlOpts.localPort !== undefined) {
330
+ if (typeof curlOpts.localPort === "number") {
331
+ this.addArg("--local-port", curlOpts.localPort.toString());
332
+ } else {
333
+ const portRange = curlOpts.localPort.end ? `${curlOpts.localPort.start}-${curlOpts.localPort.end}` : curlOpts.localPort.start.toString();
334
+ this.addArg("--local-port", portRange);
335
+ }
336
+ }
337
+ if (curlOpts.ipVersion) {
338
+ switch (curlOpts.ipVersion) {
339
+ case "v4":
340
+ this.addArg("--ipv4");
341
+ break;
342
+ case "v6":
343
+ this.addArg("--ipv6");
344
+ break;
345
+ }
346
+ }
347
+ if (curlOpts.resolve) {
348
+ for (const entry of curlOpts.resolve) {
349
+ if (typeof entry === "string") {
350
+ this.addArg("--resolve", entry);
351
+ } else {
352
+ const resolveEntry = entry;
353
+ this.addArg("--resolve", `${resolveEntry.host}:${resolveEntry.port}:${resolveEntry.address}`);
354
+ }
355
+ }
356
+ }
357
+ if (curlOpts.connectTo) {
358
+ for (const entry of curlOpts.connectTo) {
359
+ if (typeof entry === "string") {
360
+ this.addArg("--connect-to", entry);
361
+ } else {
362
+ const connectEntry = entry;
363
+ this.addArg("--connect-to", `${connectEntry.host}:${connectEntry.port}:${connectEntry.connectHost}:${connectEntry.connectPort}`);
364
+ }
365
+ }
366
+ }
367
+ if (curlOpts.noProxy) {
368
+ const noProxyValue = Array.isArray(curlOpts.noProxy) ? curlOpts.noProxy.join(",") : curlOpts.noProxy;
369
+ this.addArg("--noproxy", noProxyValue);
370
+ }
371
+ if (curlOpts.unixSocket) {
372
+ this.addArg("--unix-socket", curlOpts.unixSocket);
373
+ }
374
+ if (curlOpts.abstractUnixSocket) {
375
+ this.addArg("--abstract-unix-socket", curlOpts.abstractUnixSocket);
376
+ }
377
+ if (curlOpts.happyEyeballsTimeout !== undefined) {
378
+ this.addArg("--happy-eyeballs-timeout-ms", curlOpts.happyEyeballsTimeout.toString());
379
+ }
380
+ if (curlOpts.httpVersion) {
381
+ this.removeArg("--http1.1");
382
+ this.removeArg("--http2");
383
+ switch (curlOpts.httpVersion) {
384
+ case "1.0":
385
+ this.addArg("--http1.0");
386
+ break;
387
+ case "1.1":
388
+ this.addArg("--http1.1");
389
+ break;
390
+ case "2":
391
+ this.addArg("--http2");
392
+ break;
393
+ case "2-prior-knowledge":
394
+ this.addArg("--http2-prior-knowledge");
395
+ break;
396
+ case "3":
397
+ this.addArg("--http3");
398
+ break;
399
+ case "3-only":
400
+ this.addArg("--http3-only");
401
+ break;
402
+ }
403
+ }
404
+ if (curlOpts.pathAsIs === true) {
405
+ this.addArg("--path-as-is");
406
+ }
407
+ if (curlOpts.requestTarget) {
408
+ this.addArg("--request-target", curlOpts.requestTarget);
409
+ }
410
+ if (curlOpts.globOff === true) {
411
+ this.addArg("--globoff");
412
+ }
413
+ if (curlOpts.sslVersion) {
414
+ this.applySslVersion(curlOpts.sslVersion);
415
+ }
416
+ if (curlOpts.tlsMin) {
417
+ this.addArg("--tls-min", curlOpts.tlsMin.replace("tlsv", ""));
418
+ }
419
+ if (curlOpts.tlsMax) {
420
+ this.addArg("--tls-max", curlOpts.tlsMax.replace("tlsv", ""));
421
+ }
422
+ if (curlOpts.tls13Ciphers) {
423
+ this.addArg("--tls13-ciphers", curlOpts.tls13Ciphers);
424
+ }
425
+ if (curlOpts.ciphers) {
426
+ this.addArg("--ciphers", curlOpts.ciphers);
427
+ }
428
+ if (curlOpts.pinnedPubKey) {
429
+ const keys = Array.isArray(curlOpts.pinnedPubKey) ? curlOpts.pinnedPubKey.join(";") : curlOpts.pinnedPubKey;
430
+ this.addArg("--pinnedpubkey", keys);
431
+ }
432
+ if (curlOpts.certStatus === true) {
433
+ this.addArg("--cert-status");
434
+ }
435
+ if (curlOpts.crlfile) {
436
+ this.addArg("--crlfile", curlOpts.crlfile);
437
+ }
438
+ if (curlOpts.alpn) {
439
+ const protocols = Array.isArray(curlOpts.alpn) ? curlOpts.alpn.join(",") : curlOpts.alpn;
440
+ this.addArg("--alpn", protocols);
441
+ }
442
+ if (curlOpts.noAlpn === true) {
443
+ this.addArg("--no-alpn");
444
+ }
445
+ if (curlOpts.sessionId === false) {
446
+ this.addArg("--no-sessionid");
447
+ }
448
+ if (curlOpts.engine) {
449
+ this.addArg("--engine", curlOpts.engine);
450
+ }
451
+ if (curlOpts.capath) {
452
+ this.addArg("--capath", curlOpts.capath);
453
+ }
454
+ if (curlOpts.certType) {
455
+ this.addArg("--cert-type", curlOpts.certType);
456
+ }
457
+ if (curlOpts.keyType) {
458
+ this.addArg("--key-type", curlOpts.keyType);
459
+ }
460
+ if (curlOpts.proxyHeaders) {
461
+ for (const [key, value] of Object.entries(curlOpts.proxyHeaders)) {
462
+ this.addArg("--proxy-header", `${key}: ${value}`);
463
+ }
464
+ }
465
+ if (curlOpts.proxyTls) {
466
+ if (curlOpts.proxyTls.version) {
467
+ this.applyProxySslVersion(curlOpts.proxyTls.version);
468
+ }
469
+ if (curlOpts.proxyTls.cert) {
470
+ this.addArg("--proxy-cert", curlOpts.proxyTls.cert);
471
+ }
472
+ if (curlOpts.proxyTls.key) {
473
+ this.addArg("--proxy-key", curlOpts.proxyTls.key);
474
+ }
475
+ if (curlOpts.proxyTls.cacert) {
476
+ this.addArg("--proxy-cacert", curlOpts.proxyTls.cacert);
477
+ }
478
+ if (curlOpts.proxyTls.insecure === true) {
479
+ this.addArg("--proxy-insecure");
480
+ }
481
+ }
482
+ if (curlOpts.dns) {
483
+ if (curlOpts.dns.servers) {
484
+ this.addArg("--dns-servers", curlOpts.dns.servers);
485
+ }
486
+ if (curlOpts.dns.dohUrl) {
487
+ this.addArg("--doh-url", curlOpts.dns.dohUrl);
488
+ }
489
+ if (curlOpts.dns.dohInsecure === true) {
490
+ this.addArg("--doh-insecure");
491
+ }
492
+ if (curlOpts.dns.interface) {
493
+ this.addArg("--dns-interface", curlOpts.dns.interface);
494
+ }
495
+ if (curlOpts.dns.ipv4Addr) {
496
+ this.addArg("--dns-ipv4-addr", curlOpts.dns.ipv4Addr);
497
+ }
498
+ if (curlOpts.dns.ipv6Addr) {
499
+ this.addArg("--dns-ipv6-addr", curlOpts.dns.ipv6Addr);
500
+ }
501
+ }
502
+ if (curlOpts.hsts?.file) {
503
+ this.addArg("--hsts", curlOpts.hsts.file);
504
+ }
505
+ if (curlOpts.altSvc) {
506
+ this.addArg("--alt-svc", curlOpts.altSvc);
507
+ }
508
+ if (curlOpts.noAltSvc === true) {
509
+ this.addArg("--no-alt-svc");
510
+ }
511
+ if (curlOpts.locationTrusted === true) {
512
+ this.addArg("--location-trusted");
513
+ }
514
+ if (curlOpts.junkSessionCookies === true) {
515
+ this.addArg("--junk-session-cookies");
516
+ }
517
+ if (curlOpts.fail === true) {
518
+ this.addArg("--fail");
519
+ }
520
+ if (curlOpts.verbose === true) {
521
+ this.removeArg("-s");
522
+ this.addArg("-v");
523
+ }
524
+ if (curlOpts.trace) {
525
+ this.addArg("--trace", curlOpts.trace);
526
+ }
527
+ if (curlOpts.traceTime === true) {
528
+ this.addArg("--trace-time");
529
+ }
530
+ if (curlOpts.raw === true) {
531
+ this.addArg("--raw");
532
+ }
533
+ if (curlOpts.noCompressed === true) {
534
+ this.removeArg("--compressed");
535
+ }
536
+ if (curlOpts.bufferSize) {
537
+ this.addArg("--buffer-size", curlOpts.bufferSize);
538
+ }
539
+ if (curlOpts.maxFilesize !== undefined) {
540
+ this.addArg("--max-filesize", curlOpts.maxFilesize.toString());
541
+ }
542
+ if (curlOpts.netrc !== undefined) {
543
+ if (curlOpts.netrc === true) {
544
+ this.addArg("--netrc");
545
+ } else if (curlOpts.netrc === "optional") {
546
+ this.addArg("--netrc-optional");
547
+ } else if (typeof curlOpts.netrc === "string") {
548
+ this.addArg("--netrc-file", curlOpts.netrc);
549
+ }
550
+ }
551
+ if (curlOpts.netns) {
552
+ this.addArg("--netns", curlOpts.netns);
553
+ }
554
+ if (curlOpts.delegation) {
555
+ this.addArg("--delegation", curlOpts.delegation);
556
+ }
557
+ if (curlOpts.serviceName) {
558
+ this.addArg("--service-name", curlOpts.serviceName);
559
+ }
560
+ if (curlOpts.negotiate === true) {
561
+ this.addArg("--negotiate");
562
+ }
563
+ if (curlOpts.saslIr === true) {
564
+ this.addArg("--sasl-ir");
565
+ }
566
+ if (curlOpts.compressedSsh === true) {
567
+ this.addArg("--compressed-ssh");
568
+ }
569
+ if (curlOpts.parallel) {
570
+ if (curlOpts.parallel.enabled) {
571
+ this.addArg("--parallel");
572
+ if (curlOpts.parallel.max !== undefined) {
573
+ this.addArg("--parallel-max", curlOpts.parallel.max.toString());
574
+ }
575
+ if (curlOpts.parallel.immediate === true) {
576
+ this.addArg("--parallel-immediate");
577
+ }
578
+ }
579
+ }
580
+ if (curlOpts.tls) {
581
+ this.applyTlsOptions(curlOpts.tls);
582
+ }
583
+ if (curlOpts.proxyTls) {
584
+ this.applyProxyTlsOptions(curlOpts.proxyTls);
585
+ }
586
+ if (curlOpts.preProxy) {
587
+ this.addArg("--preproxy", curlOpts.preProxy);
588
+ }
589
+ if (curlOpts.socks5Gssapi === true) {
590
+ this.addArg("--socks5-gssapi");
591
+ }
592
+ if (curlOpts.socks5GssapiService) {
593
+ this.addArg("--socks5-gssapi-service", curlOpts.socks5GssapiService);
594
+ }
595
+ if (curlOpts.proxyHttp10 === true) {
596
+ this.addArg("--proxy1.0");
597
+ }
598
+ if (curlOpts.proxyDigest === true) {
599
+ this.addArg("--proxy-digest");
600
+ }
601
+ if (curlOpts.proxyBasic === true) {
602
+ this.addArg("--proxy-basic");
603
+ }
604
+ if (curlOpts.proxyNtlm === true) {
605
+ this.addArg("--proxy-ntlm");
606
+ }
607
+ if (curlOpts.proxyNegotiate === true) {
608
+ this.addArg("--proxy-negotiate");
609
+ }
610
+ if (curlOpts.proxyAnyAuth === true) {
611
+ this.addArg("--proxy-anyauth");
612
+ }
613
+ if (curlOpts.proxyServiceName) {
614
+ this.addArg("--proxy-service-name", curlOpts.proxyServiceName);
615
+ }
616
+ if (curlOpts.proxyTunnel === true) {
617
+ this.addArg("--proxytunnel");
618
+ }
619
+ if (curlOpts.haproxyProtocol === true) {
620
+ this.addArg("--haproxy-protocol");
621
+ }
622
+ if (curlOpts.haproxyClientIp) {
623
+ this.addArg("--haproxy-clientip", curlOpts.haproxyClientIp);
624
+ }
625
+ if (curlOpts.ftp) {
626
+ this.applyFtpOptions(curlOpts.ftp);
627
+ }
628
+ if (curlOpts.disableEprt === true) {
629
+ this.addArg("--disable-eprt");
630
+ }
631
+ if (curlOpts.disableEpsv === true) {
632
+ this.addArg("--disable-epsv");
633
+ }
634
+ if (curlOpts.quote) {
635
+ const quotes = Array.isArray(curlOpts.quote) ? curlOpts.quote : [curlOpts.quote];
636
+ for (const q of quotes) {
637
+ this.addArg("--quote", q);
638
+ }
639
+ }
640
+ if (curlOpts.prequote) {
641
+ const quotes = Array.isArray(curlOpts.prequote) ? curlOpts.prequote : [curlOpts.prequote];
642
+ for (const q of quotes) {
643
+ this.addArg("--prequote", q);
644
+ }
645
+ }
646
+ if (curlOpts.postquote) {
647
+ const quotes = Array.isArray(curlOpts.postquote) ? curlOpts.postquote : [curlOpts.postquote];
648
+ for (const q of quotes) {
649
+ this.addArg("--postquote", q);
650
+ }
651
+ }
652
+ if (curlOpts.continueAt !== undefined) {
653
+ const val = curlOpts.continueAt === "-" ? "-" : curlOpts.continueAt.toString();
654
+ this.addArg("--continue-at", val);
655
+ }
656
+ if (curlOpts.crlf === true) {
657
+ this.addArg("--crlf");
658
+ }
659
+ if (curlOpts.range) {
660
+ this.addArg("--range", curlOpts.range);
661
+ }
662
+ if (curlOpts.ssh) {
663
+ this.applySshOptions(curlOpts.ssh);
664
+ }
665
+ if (curlOpts.smtp) {
666
+ this.applySmtpOptions(curlOpts.smtp);
667
+ }
668
+ if (curlOpts.ntlmWb === true) {
669
+ this.addArg("--ntlm-wb");
670
+ }
671
+ if (curlOpts.saslAuthzid) {
672
+ this.addArg("--sasl-authzid", curlOpts.saslAuthzid);
673
+ }
674
+ if (curlOpts.awsSigv4) {
675
+ if (typeof curlOpts.awsSigv4 === "string") {
676
+ this.addArg("--aws-sigv4", curlOpts.awsSigv4);
677
+ } else {
678
+ this.addArg("--aws-sigv4", `${curlOpts.awsSigv4.provider}:${curlOpts.awsSigv4.region}:${curlOpts.awsSigv4.service}`);
679
+ }
680
+ }
681
+ if (curlOpts.oauth2Bearer) {
682
+ this.addArg("--oauth2-bearer", curlOpts.oauth2Bearer);
683
+ }
684
+ if (curlOpts.loginOptions) {
685
+ this.addArg("--login-options", curlOpts.loginOptions);
686
+ }
687
+ if (curlOpts.kerberos) {
688
+ this.addArg("--krb", curlOpts.kerberos);
689
+ }
690
+ if (curlOpts.xoauth2Bearer) {
691
+ this.addArg("--xoauth2-bearer", curlOpts.xoauth2Bearer);
692
+ }
693
+ if (curlOpts.digest === true) {
694
+ this.addArg("--digest");
695
+ }
696
+ if (curlOpts.basic === true) {
697
+ this.addArg("--basic");
698
+ }
699
+ if (curlOpts.anyAuth === true) {
700
+ this.addArg("--anyauth");
701
+ }
702
+ if (curlOpts.http09 === true) {
703
+ this.addArg("--http0.9");
704
+ }
705
+ if (curlOpts.noBuffer === true) {
706
+ this.addArg("--no-buffer");
707
+ }
708
+ if (curlOpts.disallowUsernameInUrl === true) {
709
+ this.addArg("--disallow-username-in-url");
710
+ }
711
+ if (curlOpts.referer) {
712
+ this.addArg("--referer", curlOpts.referer);
713
+ }
714
+ if (curlOpts.autoReferer === true) {
715
+ this.addArg("--referer", ";auto");
716
+ }
717
+ if (curlOpts.maxRedirs !== undefined) {
718
+ this.replaceArg("--max-redirs", curlOpts.maxRedirs.toString());
719
+ }
720
+ if (curlOpts.failEarly === true) {
721
+ this.addArg("--fail-early");
722
+ }
723
+ if (curlOpts.failWithBody === true) {
724
+ this.addArg("--fail-with-body");
725
+ }
726
+ if (curlOpts.insecure === true) {
727
+ this.addArg("--insecure");
728
+ }
729
+ if (curlOpts.traceAscii) {
730
+ this.addArg("--trace-ascii", curlOpts.traceAscii);
731
+ }
732
+ if (curlOpts.traceIds === true) {
733
+ this.addArg("--trace-ids");
734
+ }
735
+ if (curlOpts.traceConfig) {
736
+ this.addArg("--trace-config", curlOpts.traceConfig);
737
+ }
738
+ if (curlOpts.styledOutput === true) {
739
+ this.addArg("--styled-output");
740
+ }
741
+ if (curlOpts.dumpHeader) {
742
+ this.addArg("--dump-header", curlOpts.dumpHeader);
743
+ }
744
+ if (curlOpts.progressMeter) {
745
+ if (curlOpts.progressMeter === "bar") {
746
+ this.addArg("--progress-bar");
747
+ } else if (curlOpts.progressMeter === "none") {
748
+ this.addArg("--no-progress-meter");
749
+ }
750
+ }
751
+ if (curlOpts.tftpBlksize !== undefined) {
752
+ this.addArg("--tftp-blksize", curlOpts.tftpBlksize.toString());
753
+ }
754
+ if (curlOpts.tftpNoOptions === true) {
755
+ this.addArg("--tftp-no-options");
756
+ }
757
+ if (curlOpts.timeCond) {
758
+ const val = curlOpts.timeCond instanceof Date ? curlOpts.timeCond.toISOString() : curlOpts.timeCond;
759
+ this.addArg("--time-cond", val);
760
+ }
761
+ if (curlOpts.createDirs === true) {
762
+ this.addArg("--create-dirs");
763
+ }
764
+ if (curlOpts.createRemoteDirs === true) {
765
+ this.addArg("--ftp-create-dirs");
766
+ }
767
+ if (curlOpts.compressed === true) {
768
+ this.addArg("--compressed");
769
+ }
770
+ if (curlOpts.remoteTime === true) {
771
+ this.addArg("--remote-time");
772
+ }
773
+ if (curlOpts.outputDir) {
774
+ this.addArg("--output-dir", curlOpts.outputDir);
775
+ }
776
+ if (curlOpts.xattr === true) {
777
+ this.addArg("--xattr");
778
+ }
779
+ }
780
+ applyTlsOptions(tls) {
781
+ if (tls.version) {
782
+ this.applySslVersion(tls.version);
783
+ }
784
+ if (tls.min) {
785
+ this.addArg("--tls-min", tls.min.replace("tlsv", ""));
786
+ }
787
+ if (tls.max) {
788
+ this.addArg("--tls-max", tls.max.replace("tlsv", ""));
789
+ }
790
+ if (tls.tls13Ciphers) {
791
+ this.addArg("--tls13-ciphers", tls.tls13Ciphers);
792
+ }
793
+ if (tls.ciphers) {
794
+ this.addArg("--ciphers", tls.ciphers);
795
+ }
796
+ if (tls.pinnedPubKey) {
797
+ const keys = Array.isArray(tls.pinnedPubKey) ? tls.pinnedPubKey.join(";") : tls.pinnedPubKey;
798
+ this.addArg("--pinnedpubkey", keys);
799
+ }
800
+ if (tls.certStatus === true) {
801
+ this.addArg("--cert-status");
802
+ }
803
+ if (tls.crlfile) {
804
+ this.addArg("--crlfile", tls.crlfile);
805
+ }
806
+ if (tls.cert) {
807
+ this.addArg("--cert", tls.cert);
808
+ }
809
+ if (tls.certType) {
810
+ this.addArg("--cert-type", tls.certType);
811
+ }
812
+ if (tls.key) {
813
+ this.addArg("--key", tls.key);
814
+ }
815
+ if (tls.keyType) {
816
+ this.addArg("--key-type", tls.keyType);
817
+ }
818
+ if (tls.keyPassword) {
819
+ this.addArg("--pass", tls.keyPassword);
820
+ }
821
+ if (tls.cacert) {
822
+ this.addArg("--cacert", tls.cacert);
823
+ }
824
+ if (tls.capath) {
825
+ this.addArg("--capath", tls.capath);
826
+ }
827
+ if (tls.insecure === true) {
828
+ this.addArg("--insecure");
829
+ }
830
+ if (tls.caNative === true) {
831
+ this.addArg("--ca-native");
832
+ }
833
+ if (tls.noSessionId === true) {
834
+ this.addArg("--no-sessionid");
835
+ }
836
+ if (tls.engine) {
837
+ this.addArg("--engine", tls.engine);
838
+ }
839
+ if (tls.randomFile) {
840
+ this.addArg("--random-file", tls.randomFile);
841
+ }
842
+ if (tls.allowBeast === true) {
843
+ this.addArg("--ssl-allow-beast");
844
+ }
845
+ if (tls.noRevoke === true) {
846
+ this.addArg("--ssl-no-revoke");
847
+ }
848
+ if (tls.revokeBestEffort === true) {
849
+ this.addArg("--ssl-revoke-best-effort");
850
+ }
851
+ if (tls.autoClientCert === true) {
852
+ this.addArg("--ssl-auto-client-cert");
853
+ }
854
+ if (tls.forceSsl === true) {
855
+ this.addArg("--ssl");
856
+ }
857
+ if (tls.sslRequired === true) {
858
+ this.addArg("--ssl-reqd");
859
+ }
860
+ if (tls.alpn) {
861
+ const protocols = Array.isArray(tls.alpn) ? tls.alpn.join(",") : tls.alpn;
862
+ this.addArg("--alpn", protocols);
863
+ }
864
+ if (tls.noAlpn === true) {
865
+ this.addArg("--no-alpn");
866
+ }
867
+ if (tls.noNpn === true) {
868
+ this.addArg("--no-npn");
869
+ }
870
+ if (tls.falseStart === true) {
871
+ this.addArg("--false-start");
872
+ }
873
+ if (tls.curves) {
874
+ this.addArg("--curves", tls.curves);
875
+ }
876
+ }
877
+ applyProxyTlsOptions(proxyTls) {
878
+ if (proxyTls.version) {
879
+ this.applyProxySslVersion(proxyTls.version);
880
+ }
881
+ if (proxyTls.cert) {
882
+ this.addArg("--proxy-cert", proxyTls.cert);
883
+ }
884
+ if (proxyTls.key) {
885
+ this.addArg("--proxy-key", proxyTls.key);
886
+ }
887
+ if (proxyTls.cacert) {
888
+ this.addArg("--proxy-cacert", proxyTls.cacert);
889
+ }
890
+ if (proxyTls.capath) {
891
+ this.addArg("--proxy-capath", proxyTls.capath);
892
+ }
893
+ if (proxyTls.insecure === true) {
894
+ this.addArg("--proxy-insecure");
895
+ }
896
+ if (proxyTls.certType) {
897
+ this.addArg("--proxy-cert-type", proxyTls.certType);
898
+ }
899
+ if (proxyTls.keyType) {
900
+ this.addArg("--proxy-key-type", proxyTls.keyType);
901
+ }
902
+ if (proxyTls.keyPassword) {
903
+ this.addArg("--proxy-pass", proxyTls.keyPassword);
904
+ }
905
+ if (proxyTls.ciphers) {
906
+ this.addArg("--proxy-ciphers", proxyTls.ciphers);
907
+ }
908
+ if (proxyTls.tls13Ciphers) {
909
+ this.addArg("--proxy-tls13-ciphers", proxyTls.tls13Ciphers);
910
+ }
911
+ if (proxyTls.pinnedPubKey) {
912
+ const keys = Array.isArray(proxyTls.pinnedPubKey) ? proxyTls.pinnedPubKey.join(";") : proxyTls.pinnedPubKey;
913
+ this.addArg("--proxy-pinnedpubkey", keys);
914
+ }
915
+ if (proxyTls.crlfile) {
916
+ this.addArg("--proxy-crlfile", proxyTls.crlfile);
917
+ }
918
+ if (proxyTls.allowBeast === true) {
919
+ this.addArg("--proxy-ssl-allow-beast");
920
+ }
921
+ if (proxyTls.autoClientCert === true) {
922
+ this.addArg("--proxy-ssl-auto-client-cert");
923
+ }
924
+ }
925
+ applyFtpOptions(ftp) {
926
+ if (ftp.account) {
927
+ this.addArg("--ftp-account", ftp.account);
928
+ }
929
+ if (ftp.alternativeToUser) {
930
+ this.addArg("--ftp-alternative-to-user", ftp.alternativeToUser);
931
+ }
932
+ if (ftp.createDirs === true) {
933
+ this.addArg("--ftp-create-dirs");
934
+ }
935
+ if (ftp.method) {
936
+ this.addArg("--ftp-method", ftp.method);
937
+ }
938
+ if (ftp.pasv === true) {
939
+ this.addArg("--ftp-pasv");
940
+ }
941
+ if (ftp.port) {
942
+ this.addArg("--ftp-port", ftp.port);
943
+ }
944
+ if (ftp.pret === true) {
945
+ this.addArg("--ftp-pret");
946
+ }
947
+ if (ftp.skipPasvIp === true) {
948
+ this.addArg("--ftp-skip-pasv-ip");
949
+ }
950
+ if (ftp.sslCccMode) {
951
+ this.addArg("--ftp-ssl-ccc-mode", ftp.sslCccMode);
952
+ }
953
+ if (ftp.sslControl === true) {
954
+ this.addArg("--ftp-ssl-control");
955
+ }
956
+ if (ftp.activeMode === true) {
957
+ this.addArg("--ftp-port", "-");
958
+ }
959
+ if (ftp.append === true) {
960
+ this.addArg("--append");
961
+ }
962
+ if (ftp.ascii === true) {
963
+ this.addArg("--use-ascii");
964
+ }
965
+ }
966
+ applySshOptions(ssh) {
967
+ if (ssh.privateKey) {
968
+ this.addArg("--key", ssh.privateKey);
969
+ }
970
+ if (ssh.privateKeyPassword) {
971
+ this.addArg("--pass", ssh.privateKeyPassword);
972
+ }
973
+ if (ssh.publicKey) {
974
+ this.addArg("--pubkey", ssh.publicKey);
975
+ }
976
+ if (ssh.hostPubSha256) {
977
+ this.addArg("--hostpubsha256", ssh.hostPubSha256);
978
+ }
979
+ if (ssh.hostPubMd5) {
980
+ this.addArg("--hostpubmd5", ssh.hostPubMd5);
981
+ }
982
+ if (ssh.knownHosts) {
983
+ this.addArg("--known-hosts", ssh.knownHosts);
984
+ }
985
+ if (ssh.compression === true) {
986
+ this.addArg("--compressed-ssh");
987
+ }
988
+ }
989
+ applySmtpOptions(smtp) {
990
+ if (smtp.mailFrom) {
991
+ this.addArg("--mail-from", smtp.mailFrom);
992
+ }
993
+ if (smtp.mailRcpt) {
994
+ const recipients = Array.isArray(smtp.mailRcpt) ? smtp.mailRcpt : [smtp.mailRcpt];
995
+ for (const rcpt of recipients) {
996
+ this.addArg("--mail-rcpt", rcpt);
997
+ }
998
+ }
999
+ if (smtp.mailRcptAllowFails === true) {
1000
+ this.addArg("--mail-rcpt-allowfails");
1001
+ }
1002
+ if (smtp.mailAuth) {
1003
+ this.addArg("--mail-auth", smtp.mailAuth);
1004
+ }
1005
+ }
1006
+ applySslVersion(version) {
1007
+ switch (version) {
1008
+ case "sslv2":
1009
+ this.addArg("--sslv2");
1010
+ break;
1011
+ case "sslv3":
1012
+ this.addArg("--sslv3");
1013
+ break;
1014
+ case "tlsv1":
1015
+ this.addArg("--tlsv1");
1016
+ break;
1017
+ case "tlsv1.0":
1018
+ this.addArg("--tlsv1.0");
1019
+ break;
1020
+ case "tlsv1.1":
1021
+ this.addArg("--tlsv1.1");
1022
+ break;
1023
+ case "tlsv1.2":
1024
+ this.addArg("--tlsv1.2");
1025
+ break;
1026
+ case "tlsv1.3":
1027
+ this.addArg("--tlsv1.3");
1028
+ break;
1029
+ }
1030
+ }
1031
+ applyProxySslVersion(version) {
1032
+ switch (version) {
1033
+ case "tlsv1":
1034
+ this.addArg("--proxy-tlsv1");
1035
+ break;
1036
+ case "tlsv1.0":
1037
+ this.addArg("--proxy-tlsv1.0");
1038
+ break;
1039
+ case "tlsv1.1":
1040
+ this.addArg("--proxy-tlsv1.1");
1041
+ break;
1042
+ case "tlsv1.2":
1043
+ this.addArg("--proxy-tlsv1.2");
1044
+ break;
1045
+ case "tlsv1.3":
1046
+ this.addArg("--proxy-tlsv1.3");
1047
+ break;
1048
+ }
1049
+ }
1050
+ replaceArg(arg, value) {
1051
+ const index = this.args.indexOf(arg);
1052
+ if (index !== -1 && index + 1 < this.args.length) {
1053
+ this.args[index + 1] = this.escapeShellArg(value);
1054
+ } else {
1055
+ this.addArg(arg, value);
1056
+ }
1057
+ }
1058
+ removeArg(arg) {
1059
+ const index = this.args.indexOf(arg);
1060
+ if (index !== -1) {
1061
+ this.args.splice(index, 1);
1062
+ if (index < this.args.length && !this.args[index]?.startsWith("-")) {
1063
+ this.args.splice(index, 1);
1064
+ }
1065
+ }
1066
+ }
271
1067
  addArg(arg, value) {
272
1068
  this.args.push(arg);
273
1069
  if (value !== undefined) {