Sha Zhou Devin AI nomagick commited on
Commit
6c23342
·
unverified ·
1 Parent(s): 2606c44

feat: fetch page content by curl (#1119)

Browse files

* feat: fetch url without script data

* refactor: rename X-Agent to X-Engine

Co-Authored-By: yanlong.wang@jina.ai <yanlong.wang@jina.ai>

* refactor: rename X-Agent to X-Engine

Co-Authored-By: yanlong.wang@jina.ai <yanlong.wang@jina.ai>

* refactor: rename X-Agent to X-Engine header and property (#1122)

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: yanlong.wang@jina.ai <yanlong.wang@jina.ai>

* refactor: rename X-Agent to X-Engine while preserving user-agent functionality (#1123)

- Remove duplicate X-Engine header definition
- Restore userAgent threadLocal.set
- Restore overrideUserAgent in crawler options
- Maintain engine-related changes

Link to Devin run: https://app.devin.ai/sessions/cd65e5d9466049a28a92002267c48e8b

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: yanlong.wang@jina.ai <yanlong.wang@jina.ai>

* fix: remove duplicate engine declarations in scrapping-options.ts (#1124)

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: yanlong.wang@jina.ai <yanlong.wang@jina.ai>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: yanlong.wang@jina.ai <yanlong.wang@jina.ai>

backend/functions/package-lock.json CHANGED
@@ -29,6 +29,7 @@
29
  "linkedom": "^0.18.4",
30
  "maxmind": "^4.3.18",
31
  "minio": "^7.1.3",
 
32
  "openai": "^4.20.0",
33
  "pdfjs-dist": "^4.2.67",
34
  "puppeteer": "^23.3.0",
@@ -1036,6 +1037,95 @@
1036
  "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
1037
  "dev": true
1038
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1039
  "node_modules/@istanbuljs/load-nyc-config": {
1040
  "version": "1.1.0",
1041
  "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -1776,6 +1866,52 @@
1776
  "node": ">= 8"
1777
  }
1778
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1779
  "node_modules/@peculiar/asn1-cms": {
1780
  "version": "2.3.8",
1781
  "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.3.8.tgz",
@@ -1928,6 +2064,15 @@
1928
  "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==",
1929
  "optional": true
1930
  },
 
 
 
 
 
 
 
 
 
1931
  "node_modules/@protobufjs/aspromise": {
1932
  "version": "1.1.2",
1933
  "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -2762,6 +2907,18 @@
2762
  "node": ">= 8.0.0"
2763
  }
2764
  },
 
 
 
 
 
 
 
 
 
 
 
 
2765
  "node_modules/ajv": {
2766
  "version": "6.12.6",
2767
  "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -3567,6 +3724,88 @@
3567
  "node": ">= 0.8"
3568
  }
3569
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3570
  "node_modules/cache-content-type": {
3571
  "version": "1.0.1",
3572
  "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz",
@@ -3814,6 +4053,14 @@
3814
  "dev": true,
3815
  "peer": true
3816
  },
 
 
 
 
 
 
 
 
3817
  "node_modules/cliui": {
3818
  "version": "8.0.1",
3819
  "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
@@ -4121,7 +4368,6 @@
4121
  "version": "7.0.3",
4122
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
4123
  "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
4124
- "dev": true,
4125
  "dependencies": {
4126
  "path-key": "^3.1.0",
4127
  "shebang-command": "^2.0.0",
@@ -4526,6 +4772,11 @@
4526
  "stream-shift": "^1.0.2"
4527
  }
4528
  },
 
 
 
 
 
4529
  "node_modules/ecdsa-sig-formatter": {
4530
  "version": "1.0.11",
4531
  "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
@@ -4572,6 +4823,15 @@
4572
  "node": ">= 0.8"
4573
  }
4574
  },
 
 
 
 
 
 
 
 
 
4575
  "node_modules/end-of-stream": {
4576
  "version": "1.4.4",
4577
  "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
@@ -4604,6 +4864,11 @@
4604
  "node": ">=6"
4605
  }
4606
  },
 
 
 
 
 
4607
  "node_modules/error-ex": {
4608
  "version": "1.3.2",
4609
  "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -5193,6 +5458,11 @@
5193
  "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
5194
  }
5195
  },
 
 
 
 
 
5196
  "node_modules/express": {
5197
  "version": "4.21.1",
5198
  "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
@@ -5656,6 +5926,32 @@
5656
  "node": ">=0.10.0"
5657
  }
5658
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5659
  "node_modules/form-data": {
5660
  "version": "4.0.0",
5661
  "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
@@ -6558,11 +6854,18 @@
6558
  "version": "0.1.4",
6559
  "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
6560
  "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
6561
- "dev": true,
6562
  "engines": {
6563
  "node": ">=0.8.19"
6564
  }
6565
  },
 
 
 
 
 
 
 
 
6566
  "node_modules/inflation": {
6567
  "version": "2.1.0",
6568
  "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.1.0.tgz",
@@ -6825,6 +7128,11 @@
6825
  "node": ">=8"
6826
  }
6827
  },
 
 
 
 
 
6828
  "node_modules/is-negative-zero": {
6829
  "version": "2.0.3",
6830
  "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
@@ -6989,8 +7297,7 @@
6989
  "node_modules/isexe": {
6990
  "version": "2.0.0",
6991
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
6992
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
6993
- "dev": true
6994
  },
6995
  "node_modules/isobject": {
6996
  "version": "3.0.1",
@@ -7087,6 +7394,20 @@
7087
  "node": ">=8"
7088
  }
7089
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7090
  "node_modules/jest": {
7091
  "version": "29.7.0",
7092
  "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
@@ -8264,6 +8585,11 @@
8264
  "node": ">=8"
8265
  }
8266
  },
 
 
 
 
 
8267
  "node_modules/lru-memoizer": {
8268
  "version": "2.2.0",
8269
  "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.2.0.tgz",
@@ -8318,6 +8644,36 @@
8318
  "semver": "bin/semver.js"
8319
  }
8320
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8321
  "node_modules/makeerror": {
8322
  "version": "1.0.12",
8323
  "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
@@ -8507,19 +8863,61 @@
8507
  "node": ">=8"
8508
  }
8509
  },
8510
- "node_modules/minizlib": {
8511
- "version": "2.1.2",
8512
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
8513
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
8514
  "dependencies": {
8515
- "minipass": "^3.0.0",
8516
- "yallist": "^4.0.0"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8517
  },
8518
  "engines": {
8519
  "node": ">= 8"
8520
  }
8521
  },
8522
- "node_modules/minizlib/node_modules/minipass": {
8523
  "version": "3.3.6",
8524
  "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
8525
  "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
@@ -8530,40 +8928,122 @@
8530
  "node": ">=8"
8531
  }
8532
  },
8533
- "node_modules/minizlib/node_modules/yallist": {
8534
  "version": "4.0.0",
8535
  "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
8536
  "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
8537
  },
8538
- "node_modules/mitt": {
8539
- "version": "3.0.1",
8540
- "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
8541
- "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
8542
- },
8543
- "node_modules/mixin-object": {
8544
- "version": "2.0.1",
8545
- "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
8546
- "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==",
8547
  "dependencies": {
8548
- "for-in": "^0.1.3",
8549
- "is-extendable": "^0.1.1"
8550
  },
8551
  "engines": {
8552
- "node": ">=0.10.0"
8553
  }
8554
  },
8555
- "node_modules/mixin-object/node_modules/for-in": {
8556
- "version": "0.1.8",
8557
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
8558
- "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==",
 
 
 
8559
  "engines": {
8560
- "node": ">=0.10.0"
8561
  }
8562
  },
8563
- "node_modules/mkdirp": {
8564
- "version": "1.0.4",
8565
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
8566
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8567
  "bin": {
8568
  "mkdirp": "bin/cmd.js"
8569
  },
@@ -8646,6 +9126,10 @@
8646
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
8647
  "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
8648
  },
 
 
 
 
8649
  "node_modules/napi-build-utils": {
8650
  "version": "1.0.2",
8651
  "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
@@ -8759,6 +9243,122 @@
8759
  "node": ">= 6.13.0"
8760
  }
8761
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8762
  "node_modules/node-int64": {
8763
  "version": "0.4.0",
8764
  "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
@@ -8766,6 +9366,152 @@
8766
  "dev": true,
8767
  "peer": true
8768
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8769
  "node_modules/node-object-hash": {
8770
  "version": "3.0.0",
8771
  "resolved": "https://registry.npmjs.org/node-object-hash/-/node-object-hash-3.0.0.tgz",
@@ -9105,6 +9851,20 @@
9105
  "url": "https://github.com/sponsors/sindresorhus"
9106
  }
9107
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9108
  "node_modules/p-try": {
9109
  "version": "2.2.0",
9110
  "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@@ -9168,6 +9928,11 @@
9168
  "node": ">= 14"
9169
  }
9170
  },
 
 
 
 
 
9171
  "node_modules/parent-module": {
9172
  "version": "1.0.1",
9173
  "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -9225,7 +9990,6 @@
9225
  "version": "3.1.1",
9226
  "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
9227
  "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
9228
- "dev": true,
9229
  "engines": {
9230
  "node": ">=8"
9231
  }
@@ -9236,6 +10000,21 @@
9236
  "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
9237
  "dev": true
9238
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9239
  "node_modules/path-to-regexp": {
9240
  "version": "6.3.0",
9241
  "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
@@ -9544,6 +10323,14 @@
9544
  "url": "https://github.com/chalk/ansi-styles?sponsor=1"
9545
  }
9546
  },
 
 
 
 
 
 
 
 
9547
  "node_modules/process": {
9548
  "version": "0.11.10",
9549
  "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -9572,6 +10359,26 @@
9572
  "node": ">=0.4.0"
9573
  }
9574
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9575
  "node_modules/prompts": {
9576
  "version": "2.4.2",
9577
  "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
@@ -10689,7 +11496,6 @@
10689
  "version": "2.0.0",
10690
  "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
10691
  "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
10692
- "dev": true,
10693
  "dependencies": {
10694
  "shebang-regex": "^3.0.0"
10695
  },
@@ -10701,7 +11507,6 @@
10701
  "version": "3.0.0",
10702
  "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
10703
  "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
10704
- "dev": true,
10705
  "engines": {
10706
  "node": ">=8"
10707
  }
@@ -10923,6 +11728,25 @@
10923
  "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
10924
  "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="
10925
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10926
  "node_modules/stack-utils": {
10927
  "version": "2.0.6",
10928
  "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
@@ -11031,6 +11855,20 @@
11031
  "node": ">=8"
11032
  }
11033
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11034
  "node_modules/string.prototype.trim": {
11035
  "version": "1.2.9",
11036
  "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
@@ -11091,6 +11929,18 @@
11091
  "node": ">=8"
11092
  }
11093
  },
 
 
 
 
 
 
 
 
 
 
 
 
11094
  "node_modules/strip-bom": {
11095
  "version": "4.0.0",
11096
  "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
@@ -11705,6 +12555,28 @@
11705
  "integrity": "sha512-aqL0GQ3LB2nC3ZEKBZ93hfn7QY80sVGk+OT9Sc6lTxl4wRiwzUBRlAjJB9Fe4+5XydXOV+tb8udp5oRBoED5Tw==",
11706
  "deprecated": "Use @unicode/unicode-9.0.0 instead."
11707
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11708
  "node_modules/universalify": {
11709
  "version": "2.0.1",
11710
  "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
@@ -11911,7 +12783,6 @@
11911
  "version": "2.0.2",
11912
  "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
11913
  "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
11914
- "dev": true,
11915
  "dependencies": {
11916
  "isexe": "^2.0.0"
11917
  },
@@ -11980,6 +12851,23 @@
11980
  "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
11981
  }
11982
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11983
  "node_modules/wrappy": {
11984
  "version": "1.0.2",
11985
  "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
 
29
  "linkedom": "^0.18.4",
30
  "maxmind": "^4.3.18",
31
  "minio": "^7.1.3",
32
+ "node-libcurl": "^4.1.0",
33
  "openai": "^4.20.0",
34
  "pdfjs-dist": "^4.2.67",
35
  "puppeteer": "^23.3.0",
 
1037
  "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
1038
  "dev": true
1039
  },
1040
+ "node_modules/@isaacs/cliui": {
1041
+ "version": "8.0.2",
1042
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
1043
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
1044
+ "dependencies": {
1045
+ "string-width": "^5.1.2",
1046
+ "string-width-cjs": "npm:string-width@^4.2.0",
1047
+ "strip-ansi": "^7.0.1",
1048
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
1049
+ "wrap-ansi": "^8.1.0",
1050
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
1051
+ },
1052
+ "engines": {
1053
+ "node": ">=12"
1054
+ }
1055
+ },
1056
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
1057
+ "version": "6.1.0",
1058
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
1059
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
1060
+ "engines": {
1061
+ "node": ">=12"
1062
+ },
1063
+ "funding": {
1064
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
1065
+ }
1066
+ },
1067
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
1068
+ "version": "6.2.1",
1069
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
1070
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
1071
+ "engines": {
1072
+ "node": ">=12"
1073
+ },
1074
+ "funding": {
1075
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1076
+ }
1077
+ },
1078
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
1079
+ "version": "9.2.2",
1080
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
1081
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
1082
+ },
1083
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
1084
+ "version": "5.1.2",
1085
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
1086
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
1087
+ "dependencies": {
1088
+ "eastasianwidth": "^0.2.0",
1089
+ "emoji-regex": "^9.2.2",
1090
+ "strip-ansi": "^7.0.1"
1091
+ },
1092
+ "engines": {
1093
+ "node": ">=12"
1094
+ },
1095
+ "funding": {
1096
+ "url": "https://github.com/sponsors/sindresorhus"
1097
+ }
1098
+ },
1099
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
1100
+ "version": "7.1.0",
1101
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
1102
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
1103
+ "dependencies": {
1104
+ "ansi-regex": "^6.0.1"
1105
+ },
1106
+ "engines": {
1107
+ "node": ">=12"
1108
+ },
1109
+ "funding": {
1110
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
1111
+ }
1112
+ },
1113
+ "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
1114
+ "version": "8.1.0",
1115
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
1116
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
1117
+ "dependencies": {
1118
+ "ansi-styles": "^6.1.0",
1119
+ "string-width": "^5.0.1",
1120
+ "strip-ansi": "^7.0.1"
1121
+ },
1122
+ "engines": {
1123
+ "node": ">=12"
1124
+ },
1125
+ "funding": {
1126
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
1127
+ }
1128
+ },
1129
  "node_modules/@istanbuljs/load-nyc-config": {
1130
  "version": "1.1.0",
1131
  "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
 
1866
  "node": ">= 8"
1867
  }
1868
  },
1869
+ "node_modules/@npmcli/agent": {
1870
+ "version": "2.2.2",
1871
+ "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz",
1872
+ "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==",
1873
+ "dependencies": {
1874
+ "agent-base": "^7.1.0",
1875
+ "http-proxy-agent": "^7.0.0",
1876
+ "https-proxy-agent": "^7.0.1",
1877
+ "lru-cache": "^10.0.1",
1878
+ "socks-proxy-agent": "^8.0.3"
1879
+ },
1880
+ "engines": {
1881
+ "node": "^16.14.0 || >=18.0.0"
1882
+ }
1883
+ },
1884
+ "node_modules/@npmcli/agent/node_modules/agent-base": {
1885
+ "version": "7.1.3",
1886
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
1887
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
1888
+ "engines": {
1889
+ "node": ">= 14"
1890
+ }
1891
+ },
1892
+ "node_modules/@npmcli/agent/node_modules/https-proxy-agent": {
1893
+ "version": "7.0.6",
1894
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
1895
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
1896
+ "dependencies": {
1897
+ "agent-base": "^7.1.2",
1898
+ "debug": "4"
1899
+ },
1900
+ "engines": {
1901
+ "node": ">= 14"
1902
+ }
1903
+ },
1904
+ "node_modules/@npmcli/fs": {
1905
+ "version": "3.1.1",
1906
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz",
1907
+ "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==",
1908
+ "dependencies": {
1909
+ "semver": "^7.3.5"
1910
+ },
1911
+ "engines": {
1912
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
1913
+ }
1914
+ },
1915
  "node_modules/@peculiar/asn1-cms": {
1916
  "version": "2.3.8",
1917
  "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.3.8.tgz",
 
2064
  "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==",
2065
  "optional": true
2066
  },
2067
+ "node_modules/@pkgjs/parseargs": {
2068
+ "version": "0.11.0",
2069
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
2070
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
2071
+ "optional": true,
2072
+ "engines": {
2073
+ "node": ">=14"
2074
+ }
2075
+ },
2076
  "node_modules/@protobufjs/aspromise": {
2077
  "version": "1.1.2",
2078
  "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
 
2907
  "node": ">= 8.0.0"
2908
  }
2909
  },
2910
+ "node_modules/aggregate-error": {
2911
+ "version": "3.1.0",
2912
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
2913
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
2914
+ "dependencies": {
2915
+ "clean-stack": "^2.0.0",
2916
+ "indent-string": "^4.0.0"
2917
+ },
2918
+ "engines": {
2919
+ "node": ">=8"
2920
+ }
2921
+ },
2922
  "node_modules/ajv": {
2923
  "version": "6.12.6",
2924
  "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
 
3724
  "node": ">= 0.8"
3725
  }
3726
  },
3727
+ "node_modules/cacache": {
3728
+ "version": "18.0.4",
3729
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz",
3730
+ "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==",
3731
+ "dependencies": {
3732
+ "@npmcli/fs": "^3.1.0",
3733
+ "fs-minipass": "^3.0.0",
3734
+ "glob": "^10.2.2",
3735
+ "lru-cache": "^10.0.1",
3736
+ "minipass": "^7.0.3",
3737
+ "minipass-collect": "^2.0.1",
3738
+ "minipass-flush": "^1.0.5",
3739
+ "minipass-pipeline": "^1.2.4",
3740
+ "p-map": "^4.0.0",
3741
+ "ssri": "^10.0.0",
3742
+ "tar": "^6.1.11",
3743
+ "unique-filename": "^3.0.0"
3744
+ },
3745
+ "engines": {
3746
+ "node": "^16.14.0 || >=18.0.0"
3747
+ }
3748
+ },
3749
+ "node_modules/cacache/node_modules/brace-expansion": {
3750
+ "version": "2.0.1",
3751
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
3752
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
3753
+ "dependencies": {
3754
+ "balanced-match": "^1.0.0"
3755
+ }
3756
+ },
3757
+ "node_modules/cacache/node_modules/fs-minipass": {
3758
+ "version": "3.0.3",
3759
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
3760
+ "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==",
3761
+ "dependencies": {
3762
+ "minipass": "^7.0.3"
3763
+ },
3764
+ "engines": {
3765
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
3766
+ }
3767
+ },
3768
+ "node_modules/cacache/node_modules/glob": {
3769
+ "version": "10.4.5",
3770
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
3771
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
3772
+ "dependencies": {
3773
+ "foreground-child": "^3.1.0",
3774
+ "jackspeak": "^3.1.2",
3775
+ "minimatch": "^9.0.4",
3776
+ "minipass": "^7.1.2",
3777
+ "package-json-from-dist": "^1.0.0",
3778
+ "path-scurry": "^1.11.1"
3779
+ },
3780
+ "bin": {
3781
+ "glob": "dist/esm/bin.mjs"
3782
+ },
3783
+ "funding": {
3784
+ "url": "https://github.com/sponsors/isaacs"
3785
+ }
3786
+ },
3787
+ "node_modules/cacache/node_modules/minimatch": {
3788
+ "version": "9.0.5",
3789
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
3790
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
3791
+ "dependencies": {
3792
+ "brace-expansion": "^2.0.1"
3793
+ },
3794
+ "engines": {
3795
+ "node": ">=16 || 14 >=14.17"
3796
+ },
3797
+ "funding": {
3798
+ "url": "https://github.com/sponsors/isaacs"
3799
+ }
3800
+ },
3801
+ "node_modules/cacache/node_modules/minipass": {
3802
+ "version": "7.1.2",
3803
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
3804
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
3805
+ "engines": {
3806
+ "node": ">=16 || 14 >=14.17"
3807
+ }
3808
+ },
3809
  "node_modules/cache-content-type": {
3810
  "version": "1.0.1",
3811
  "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz",
 
4053
  "dev": true,
4054
  "peer": true
4055
  },
4056
+ "node_modules/clean-stack": {
4057
+ "version": "2.2.0",
4058
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
4059
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
4060
+ "engines": {
4061
+ "node": ">=6"
4062
+ }
4063
+ },
4064
  "node_modules/cliui": {
4065
  "version": "8.0.1",
4066
  "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
 
4368
  "version": "7.0.3",
4369
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
4370
  "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
 
4371
  "dependencies": {
4372
  "path-key": "^3.1.0",
4373
  "shebang-command": "^2.0.0",
 
4772
  "stream-shift": "^1.0.2"
4773
  }
4774
  },
4775
+ "node_modules/eastasianwidth": {
4776
+ "version": "0.2.0",
4777
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
4778
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
4779
+ },
4780
  "node_modules/ecdsa-sig-formatter": {
4781
  "version": "1.0.11",
4782
  "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
 
4823
  "node": ">= 0.8"
4824
  }
4825
  },
4826
+ "node_modules/encoding": {
4827
+ "version": "0.1.13",
4828
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
4829
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
4830
+ "optional": true,
4831
+ "dependencies": {
4832
+ "iconv-lite": "^0.6.2"
4833
+ }
4834
+ },
4835
  "node_modules/end-of-stream": {
4836
  "version": "1.4.4",
4837
  "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
 
4864
  "node": ">=6"
4865
  }
4866
  },
4867
+ "node_modules/err-code": {
4868
+ "version": "2.0.3",
4869
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
4870
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="
4871
+ },
4872
  "node_modules/error-ex": {
4873
  "version": "1.3.2",
4874
  "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
 
5458
  "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
5459
  }
5460
  },
5461
+ "node_modules/exponential-backoff": {
5462
+ "version": "3.1.1",
5463
+ "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz",
5464
+ "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw=="
5465
+ },
5466
  "node_modules/express": {
5467
  "version": "4.21.1",
5468
  "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
 
5926
  "node": ">=0.10.0"
5927
  }
5928
  },
5929
+ "node_modules/foreground-child": {
5930
+ "version": "3.3.0",
5931
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
5932
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
5933
+ "dependencies": {
5934
+ "cross-spawn": "^7.0.0",
5935
+ "signal-exit": "^4.0.1"
5936
+ },
5937
+ "engines": {
5938
+ "node": ">=14"
5939
+ },
5940
+ "funding": {
5941
+ "url": "https://github.com/sponsors/isaacs"
5942
+ }
5943
+ },
5944
+ "node_modules/foreground-child/node_modules/signal-exit": {
5945
+ "version": "4.1.0",
5946
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
5947
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
5948
+ "engines": {
5949
+ "node": ">=14"
5950
+ },
5951
+ "funding": {
5952
+ "url": "https://github.com/sponsors/isaacs"
5953
+ }
5954
+ },
5955
  "node_modules/form-data": {
5956
  "version": "4.0.0",
5957
  "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
 
6854
  "version": "0.1.4",
6855
  "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
6856
  "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
 
6857
  "engines": {
6858
  "node": ">=0.8.19"
6859
  }
6860
  },
6861
+ "node_modules/indent-string": {
6862
+ "version": "4.0.0",
6863
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
6864
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
6865
+ "engines": {
6866
+ "node": ">=8"
6867
+ }
6868
+ },
6869
  "node_modules/inflation": {
6870
  "version": "2.1.0",
6871
  "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.1.0.tgz",
 
7128
  "node": ">=8"
7129
  }
7130
  },
7131
+ "node_modules/is-lambda": {
7132
+ "version": "1.0.1",
7133
+ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
7134
+ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="
7135
+ },
7136
  "node_modules/is-negative-zero": {
7137
  "version": "2.0.3",
7138
  "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
 
7297
  "node_modules/isexe": {
7298
  "version": "2.0.0",
7299
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
7300
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
 
7301
  },
7302
  "node_modules/isobject": {
7303
  "version": "3.0.1",
 
7394
  "node": ">=8"
7395
  }
7396
  },
7397
+ "node_modules/jackspeak": {
7398
+ "version": "3.4.3",
7399
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
7400
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
7401
+ "dependencies": {
7402
+ "@isaacs/cliui": "^8.0.2"
7403
+ },
7404
+ "funding": {
7405
+ "url": "https://github.com/sponsors/isaacs"
7406
+ },
7407
+ "optionalDependencies": {
7408
+ "@pkgjs/parseargs": "^0.11.0"
7409
+ }
7410
+ },
7411
  "node_modules/jest": {
7412
  "version": "29.7.0",
7413
  "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
 
8585
  "node": ">=8"
8586
  }
8587
  },
8588
+ "node_modules/lru-cache": {
8589
+ "version": "10.4.3",
8590
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
8591
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
8592
+ },
8593
  "node_modules/lru-memoizer": {
8594
  "version": "2.2.0",
8595
  "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.2.0.tgz",
 
8644
  "semver": "bin/semver.js"
8645
  }
8646
  },
8647
+ "node_modules/make-fetch-happen": {
8648
+ "version": "13.0.1",
8649
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz",
8650
+ "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==",
8651
+ "dependencies": {
8652
+ "@npmcli/agent": "^2.0.0",
8653
+ "cacache": "^18.0.0",
8654
+ "http-cache-semantics": "^4.1.1",
8655
+ "is-lambda": "^1.0.1",
8656
+ "minipass": "^7.0.2",
8657
+ "minipass-fetch": "^3.0.0",
8658
+ "minipass-flush": "^1.0.5",
8659
+ "minipass-pipeline": "^1.2.4",
8660
+ "negotiator": "^0.6.3",
8661
+ "proc-log": "^4.2.0",
8662
+ "promise-retry": "^2.0.1",
8663
+ "ssri": "^10.0.0"
8664
+ },
8665
+ "engines": {
8666
+ "node": "^16.14.0 || >=18.0.0"
8667
+ }
8668
+ },
8669
+ "node_modules/make-fetch-happen/node_modules/minipass": {
8670
+ "version": "7.1.2",
8671
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
8672
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
8673
+ "engines": {
8674
+ "node": ">=16 || 14 >=14.17"
8675
+ }
8676
+ },
8677
  "node_modules/makeerror": {
8678
  "version": "1.0.12",
8679
  "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
 
8863
  "node": ">=8"
8864
  }
8865
  },
8866
+ "node_modules/minipass-collect": {
8867
+ "version": "2.0.1",
8868
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz",
8869
+ "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==",
8870
  "dependencies": {
8871
+ "minipass": "^7.0.3"
8872
+ },
8873
+ "engines": {
8874
+ "node": ">=16 || 14 >=14.17"
8875
+ }
8876
+ },
8877
+ "node_modules/minipass-collect/node_modules/minipass": {
8878
+ "version": "7.1.2",
8879
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
8880
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
8881
+ "engines": {
8882
+ "node": ">=16 || 14 >=14.17"
8883
+ }
8884
+ },
8885
+ "node_modules/minipass-fetch": {
8886
+ "version": "3.0.5",
8887
+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz",
8888
+ "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==",
8889
+ "dependencies": {
8890
+ "minipass": "^7.0.3",
8891
+ "minipass-sized": "^1.0.3",
8892
+ "minizlib": "^2.1.2"
8893
+ },
8894
+ "engines": {
8895
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
8896
+ },
8897
+ "optionalDependencies": {
8898
+ "encoding": "^0.1.13"
8899
+ }
8900
+ },
8901
+ "node_modules/minipass-fetch/node_modules/minipass": {
8902
+ "version": "7.1.2",
8903
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
8904
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
8905
+ "engines": {
8906
+ "node": ">=16 || 14 >=14.17"
8907
+ }
8908
+ },
8909
+ "node_modules/minipass-flush": {
8910
+ "version": "1.0.5",
8911
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
8912
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
8913
+ "dependencies": {
8914
+ "minipass": "^3.0.0"
8915
  },
8916
  "engines": {
8917
  "node": ">= 8"
8918
  }
8919
  },
8920
+ "node_modules/minipass-flush/node_modules/minipass": {
8921
  "version": "3.3.6",
8922
  "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
8923
  "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
 
8928
  "node": ">=8"
8929
  }
8930
  },
8931
+ "node_modules/minipass-flush/node_modules/yallist": {
8932
  "version": "4.0.0",
8933
  "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
8934
  "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
8935
  },
8936
+ "node_modules/minipass-pipeline": {
8937
+ "version": "1.2.4",
8938
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
8939
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
 
 
 
 
 
8940
  "dependencies": {
8941
+ "minipass": "^3.0.0"
 
8942
  },
8943
  "engines": {
8944
+ "node": ">=8"
8945
  }
8946
  },
8947
+ "node_modules/minipass-pipeline/node_modules/minipass": {
8948
+ "version": "3.3.6",
8949
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
8950
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
8951
+ "dependencies": {
8952
+ "yallist": "^4.0.0"
8953
+ },
8954
  "engines": {
8955
+ "node": ">=8"
8956
  }
8957
  },
8958
+ "node_modules/minipass-pipeline/node_modules/yallist": {
8959
+ "version": "4.0.0",
8960
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
8961
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
8962
+ },
8963
+ "node_modules/minipass-sized": {
8964
+ "version": "1.0.3",
8965
+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
8966
+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
8967
+ "dependencies": {
8968
+ "minipass": "^3.0.0"
8969
+ },
8970
+ "engines": {
8971
+ "node": ">=8"
8972
+ }
8973
+ },
8974
+ "node_modules/minipass-sized/node_modules/minipass": {
8975
+ "version": "3.3.6",
8976
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
8977
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
8978
+ "dependencies": {
8979
+ "yallist": "^4.0.0"
8980
+ },
8981
+ "engines": {
8982
+ "node": ">=8"
8983
+ }
8984
+ },
8985
+ "node_modules/minipass-sized/node_modules/yallist": {
8986
+ "version": "4.0.0",
8987
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
8988
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
8989
+ },
8990
+ "node_modules/minizlib": {
8991
+ "version": "2.1.2",
8992
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
8993
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
8994
+ "dependencies": {
8995
+ "minipass": "^3.0.0",
8996
+ "yallist": "^4.0.0"
8997
+ },
8998
+ "engines": {
8999
+ "node": ">= 8"
9000
+ }
9001
+ },
9002
+ "node_modules/minizlib/node_modules/minipass": {
9003
+ "version": "3.3.6",
9004
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
9005
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
9006
+ "dependencies": {
9007
+ "yallist": "^4.0.0"
9008
+ },
9009
+ "engines": {
9010
+ "node": ">=8"
9011
+ }
9012
+ },
9013
+ "node_modules/minizlib/node_modules/yallist": {
9014
+ "version": "4.0.0",
9015
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
9016
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
9017
+ },
9018
+ "node_modules/mitt": {
9019
+ "version": "3.0.1",
9020
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
9021
+ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
9022
+ },
9023
+ "node_modules/mixin-object": {
9024
+ "version": "2.0.1",
9025
+ "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
9026
+ "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==",
9027
+ "dependencies": {
9028
+ "for-in": "^0.1.3",
9029
+ "is-extendable": "^0.1.1"
9030
+ },
9031
+ "engines": {
9032
+ "node": ">=0.10.0"
9033
+ }
9034
+ },
9035
+ "node_modules/mixin-object/node_modules/for-in": {
9036
+ "version": "0.1.8",
9037
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
9038
+ "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==",
9039
+ "engines": {
9040
+ "node": ">=0.10.0"
9041
+ }
9042
+ },
9043
+ "node_modules/mkdirp": {
9044
+ "version": "1.0.4",
9045
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
9046
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
9047
  "bin": {
9048
  "mkdirp": "bin/cmd.js"
9049
  },
 
9126
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
9127
  "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
9128
  },
9129
+ "node_modules/nan": {
9130
+ "version": "2.22.0",
9131
+ "resolved": "git+ssh://git@github.com/JCMais/nan.git#0ec2eca8b2fd7518affb3945d087e393ad839b7e"
9132
+ },
9133
  "node_modules/napi-build-utils": {
9134
  "version": "1.0.2",
9135
  "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
 
9243
  "node": ">= 6.13.0"
9244
  }
9245
  },
9246
+ "node_modules/node-gyp": {
9247
+ "version": "10.2.0",
9248
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz",
9249
+ "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==",
9250
+ "dependencies": {
9251
+ "env-paths": "^2.2.0",
9252
+ "exponential-backoff": "^3.1.1",
9253
+ "glob": "^10.3.10",
9254
+ "graceful-fs": "^4.2.6",
9255
+ "make-fetch-happen": "^13.0.0",
9256
+ "nopt": "^7.0.0",
9257
+ "proc-log": "^4.1.0",
9258
+ "semver": "^7.3.5",
9259
+ "tar": "^6.2.1",
9260
+ "which": "^4.0.0"
9261
+ },
9262
+ "bin": {
9263
+ "node-gyp": "bin/node-gyp.js"
9264
+ },
9265
+ "engines": {
9266
+ "node": "^16.14.0 || >=18.0.0"
9267
+ }
9268
+ },
9269
+ "node_modules/node-gyp/node_modules/abbrev": {
9270
+ "version": "2.0.0",
9271
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
9272
+ "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
9273
+ "engines": {
9274
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
9275
+ }
9276
+ },
9277
+ "node_modules/node-gyp/node_modules/brace-expansion": {
9278
+ "version": "2.0.1",
9279
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
9280
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
9281
+ "dependencies": {
9282
+ "balanced-match": "^1.0.0"
9283
+ }
9284
+ },
9285
+ "node_modules/node-gyp/node_modules/glob": {
9286
+ "version": "10.4.5",
9287
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
9288
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
9289
+ "dependencies": {
9290
+ "foreground-child": "^3.1.0",
9291
+ "jackspeak": "^3.1.2",
9292
+ "minimatch": "^9.0.4",
9293
+ "minipass": "^7.1.2",
9294
+ "package-json-from-dist": "^1.0.0",
9295
+ "path-scurry": "^1.11.1"
9296
+ },
9297
+ "bin": {
9298
+ "glob": "dist/esm/bin.mjs"
9299
+ },
9300
+ "funding": {
9301
+ "url": "https://github.com/sponsors/isaacs"
9302
+ }
9303
+ },
9304
+ "node_modules/node-gyp/node_modules/isexe": {
9305
+ "version": "3.1.1",
9306
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
9307
+ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
9308
+ "engines": {
9309
+ "node": ">=16"
9310
+ }
9311
+ },
9312
+ "node_modules/node-gyp/node_modules/minimatch": {
9313
+ "version": "9.0.5",
9314
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
9315
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
9316
+ "dependencies": {
9317
+ "brace-expansion": "^2.0.1"
9318
+ },
9319
+ "engines": {
9320
+ "node": ">=16 || 14 >=14.17"
9321
+ },
9322
+ "funding": {
9323
+ "url": "https://github.com/sponsors/isaacs"
9324
+ }
9325
+ },
9326
+ "node_modules/node-gyp/node_modules/minipass": {
9327
+ "version": "7.1.2",
9328
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
9329
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
9330
+ "engines": {
9331
+ "node": ">=16 || 14 >=14.17"
9332
+ }
9333
+ },
9334
+ "node_modules/node-gyp/node_modules/nopt": {
9335
+ "version": "7.2.1",
9336
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
9337
+ "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
9338
+ "dependencies": {
9339
+ "abbrev": "^2.0.0"
9340
+ },
9341
+ "bin": {
9342
+ "nopt": "bin/nopt.js"
9343
+ },
9344
+ "engines": {
9345
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
9346
+ }
9347
+ },
9348
+ "node_modules/node-gyp/node_modules/which": {
9349
+ "version": "4.0.0",
9350
+ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
9351
+ "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
9352
+ "dependencies": {
9353
+ "isexe": "^3.1.1"
9354
+ },
9355
+ "bin": {
9356
+ "node-which": "bin/which.js"
9357
+ },
9358
+ "engines": {
9359
+ "node": "^16.13.0 || >=18.0.0"
9360
+ }
9361
+ },
9362
  "node_modules/node-int64": {
9363
  "version": "0.4.0",
9364
  "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
 
9366
  "dev": true,
9367
  "peer": true
9368
  },
9369
+ "node_modules/node-libcurl": {
9370
+ "version": "4.1.0",
9371
+ "resolved": "https://registry.npmjs.org/node-libcurl/-/node-libcurl-4.1.0.tgz",
9372
+ "integrity": "sha512-cwJ4pEqFmzUivMl0CtS2yYjBmZJ3/63Fl1WJCGzw45jXTCL04Ygbqvl+I5blMZm4ZOQChbATmQ6H4lxAnlIU+g==",
9373
+ "hasInstallScript": true,
9374
+ "dependencies": {
9375
+ "@mapbox/node-pre-gyp": "1.0.11",
9376
+ "env-paths": "2.2.0",
9377
+ "nan": "github:JCMais/nan#fix/electron-failures",
9378
+ "node-gyp": "10.2.0",
9379
+ "npmlog": "7.0.1",
9380
+ "rimraf": "5.0.5",
9381
+ "tslib": "2.6.2"
9382
+ },
9383
+ "engines": {
9384
+ "node": ">=16.14"
9385
+ }
9386
+ },
9387
+ "node_modules/node-libcurl/node_modules/are-we-there-yet": {
9388
+ "version": "4.0.2",
9389
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.2.tgz",
9390
+ "integrity": "sha512-ncSWAawFhKMJDTdoAeOV+jyW1VCMj5QIAwULIBV0SSR7B/RLPPEQiknKcg/RIIZlUQrxELpsxMiTUoAQ4sIUyg==",
9391
+ "deprecated": "This package is no longer supported.",
9392
+ "engines": {
9393
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
9394
+ }
9395
+ },
9396
+ "node_modules/node-libcurl/node_modules/brace-expansion": {
9397
+ "version": "2.0.1",
9398
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
9399
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
9400
+ "dependencies": {
9401
+ "balanced-match": "^1.0.0"
9402
+ }
9403
+ },
9404
+ "node_modules/node-libcurl/node_modules/env-paths": {
9405
+ "version": "2.2.0",
9406
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz",
9407
+ "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==",
9408
+ "engines": {
9409
+ "node": ">=6"
9410
+ }
9411
+ },
9412
+ "node_modules/node-libcurl/node_modules/gauge": {
9413
+ "version": "5.0.2",
9414
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.2.tgz",
9415
+ "integrity": "sha512-pMaFftXPtiGIHCJHdcUUx9Rby/rFT/Kkt3fIIGCs+9PMDIljSyRiqraTlxNtBReJRDfUefpa263RQ3vnp5G/LQ==",
9416
+ "deprecated": "This package is no longer supported.",
9417
+ "dependencies": {
9418
+ "aproba": "^1.0.3 || ^2.0.0",
9419
+ "color-support": "^1.1.3",
9420
+ "console-control-strings": "^1.1.0",
9421
+ "has-unicode": "^2.0.1",
9422
+ "signal-exit": "^4.0.1",
9423
+ "string-width": "^4.2.3",
9424
+ "strip-ansi": "^6.0.1",
9425
+ "wide-align": "^1.1.5"
9426
+ },
9427
+ "engines": {
9428
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
9429
+ }
9430
+ },
9431
+ "node_modules/node-libcurl/node_modules/glob": {
9432
+ "version": "10.4.5",
9433
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
9434
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
9435
+ "dependencies": {
9436
+ "foreground-child": "^3.1.0",
9437
+ "jackspeak": "^3.1.2",
9438
+ "minimatch": "^9.0.4",
9439
+ "minipass": "^7.1.2",
9440
+ "package-json-from-dist": "^1.0.0",
9441
+ "path-scurry": "^1.11.1"
9442
+ },
9443
+ "bin": {
9444
+ "glob": "dist/esm/bin.mjs"
9445
+ },
9446
+ "funding": {
9447
+ "url": "https://github.com/sponsors/isaacs"
9448
+ }
9449
+ },
9450
+ "node_modules/node-libcurl/node_modules/minimatch": {
9451
+ "version": "9.0.5",
9452
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
9453
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
9454
+ "dependencies": {
9455
+ "brace-expansion": "^2.0.1"
9456
+ },
9457
+ "engines": {
9458
+ "node": ">=16 || 14 >=14.17"
9459
+ },
9460
+ "funding": {
9461
+ "url": "https://github.com/sponsors/isaacs"
9462
+ }
9463
+ },
9464
+ "node_modules/node-libcurl/node_modules/minipass": {
9465
+ "version": "7.1.2",
9466
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
9467
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
9468
+ "engines": {
9469
+ "node": ">=16 || 14 >=14.17"
9470
+ }
9471
+ },
9472
+ "node_modules/node-libcurl/node_modules/npmlog": {
9473
+ "version": "7.0.1",
9474
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz",
9475
+ "integrity": "sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==",
9476
+ "deprecated": "This package is no longer supported.",
9477
+ "dependencies": {
9478
+ "are-we-there-yet": "^4.0.0",
9479
+ "console-control-strings": "^1.1.0",
9480
+ "gauge": "^5.0.0",
9481
+ "set-blocking": "^2.0.0"
9482
+ },
9483
+ "engines": {
9484
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
9485
+ }
9486
+ },
9487
+ "node_modules/node-libcurl/node_modules/rimraf": {
9488
+ "version": "5.0.5",
9489
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz",
9490
+ "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==",
9491
+ "dependencies": {
9492
+ "glob": "^10.3.7"
9493
+ },
9494
+ "bin": {
9495
+ "rimraf": "dist/esm/bin.mjs"
9496
+ },
9497
+ "engines": {
9498
+ "node": ">=14"
9499
+ },
9500
+ "funding": {
9501
+ "url": "https://github.com/sponsors/isaacs"
9502
+ }
9503
+ },
9504
+ "node_modules/node-libcurl/node_modules/signal-exit": {
9505
+ "version": "4.1.0",
9506
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
9507
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
9508
+ "engines": {
9509
+ "node": ">=14"
9510
+ },
9511
+ "funding": {
9512
+ "url": "https://github.com/sponsors/isaacs"
9513
+ }
9514
+ },
9515
  "node_modules/node-object-hash": {
9516
  "version": "3.0.0",
9517
  "resolved": "https://registry.npmjs.org/node-object-hash/-/node-object-hash-3.0.0.tgz",
 
9851
  "url": "https://github.com/sponsors/sindresorhus"
9852
  }
9853
  },
9854
+ "node_modules/p-map": {
9855
+ "version": "4.0.0",
9856
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
9857
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
9858
+ "dependencies": {
9859
+ "aggregate-error": "^3.0.0"
9860
+ },
9861
+ "engines": {
9862
+ "node": ">=10"
9863
+ },
9864
+ "funding": {
9865
+ "url": "https://github.com/sponsors/sindresorhus"
9866
+ }
9867
+ },
9868
  "node_modules/p-try": {
9869
  "version": "2.2.0",
9870
  "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
 
9928
  "node": ">= 14"
9929
  }
9930
  },
9931
+ "node_modules/package-json-from-dist": {
9932
+ "version": "1.0.1",
9933
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
9934
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
9935
+ },
9936
  "node_modules/parent-module": {
9937
  "version": "1.0.1",
9938
  "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
 
9990
  "version": "3.1.1",
9991
  "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
9992
  "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
 
9993
  "engines": {
9994
  "node": ">=8"
9995
  }
 
10000
  "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
10001
  "dev": true
10002
  },
10003
+ "node_modules/path-scurry": {
10004
+ "version": "1.11.1",
10005
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
10006
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
10007
+ "dependencies": {
10008
+ "lru-cache": "^10.2.0",
10009
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
10010
+ },
10011
+ "engines": {
10012
+ "node": ">=16 || 14 >=14.18"
10013
+ },
10014
+ "funding": {
10015
+ "url": "https://github.com/sponsors/isaacs"
10016
+ }
10017
+ },
10018
  "node_modules/path-to-regexp": {
10019
  "version": "6.3.0",
10020
  "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
 
10323
  "url": "https://github.com/chalk/ansi-styles?sponsor=1"
10324
  }
10325
  },
10326
+ "node_modules/proc-log": {
10327
+ "version": "4.2.0",
10328
+ "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
10329
+ "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
10330
+ "engines": {
10331
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
10332
+ }
10333
+ },
10334
  "node_modules/process": {
10335
  "version": "0.11.10",
10336
  "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
 
10359
  "node": ">=0.4.0"
10360
  }
10361
  },
10362
+ "node_modules/promise-retry": {
10363
+ "version": "2.0.1",
10364
+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
10365
+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
10366
+ "dependencies": {
10367
+ "err-code": "^2.0.2",
10368
+ "retry": "^0.12.0"
10369
+ },
10370
+ "engines": {
10371
+ "node": ">=10"
10372
+ }
10373
+ },
10374
+ "node_modules/promise-retry/node_modules/retry": {
10375
+ "version": "0.12.0",
10376
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
10377
+ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
10378
+ "engines": {
10379
+ "node": ">= 4"
10380
+ }
10381
+ },
10382
  "node_modules/prompts": {
10383
  "version": "2.4.2",
10384
  "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
 
11496
  "version": "2.0.0",
11497
  "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
11498
  "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
 
11499
  "dependencies": {
11500
  "shebang-regex": "^3.0.0"
11501
  },
 
11507
  "version": "3.0.0",
11508
  "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
11509
  "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
 
11510
  "engines": {
11511
  "node": ">=8"
11512
  }
 
11728
  "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
11729
  "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="
11730
  },
11731
+ "node_modules/ssri": {
11732
+ "version": "10.0.6",
11733
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
11734
+ "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
11735
+ "dependencies": {
11736
+ "minipass": "^7.0.3"
11737
+ },
11738
+ "engines": {
11739
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
11740
+ }
11741
+ },
11742
+ "node_modules/ssri/node_modules/minipass": {
11743
+ "version": "7.1.2",
11744
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
11745
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
11746
+ "engines": {
11747
+ "node": ">=16 || 14 >=14.17"
11748
+ }
11749
+ },
11750
  "node_modules/stack-utils": {
11751
  "version": "2.0.6",
11752
  "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
 
11855
  "node": ">=8"
11856
  }
11857
  },
11858
+ "node_modules/string-width-cjs": {
11859
+ "name": "string-width",
11860
+ "version": "4.2.3",
11861
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
11862
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
11863
+ "dependencies": {
11864
+ "emoji-regex": "^8.0.0",
11865
+ "is-fullwidth-code-point": "^3.0.0",
11866
+ "strip-ansi": "^6.0.1"
11867
+ },
11868
+ "engines": {
11869
+ "node": ">=8"
11870
+ }
11871
+ },
11872
  "node_modules/string.prototype.trim": {
11873
  "version": "1.2.9",
11874
  "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
 
11929
  "node": ">=8"
11930
  }
11931
  },
11932
+ "node_modules/strip-ansi-cjs": {
11933
+ "name": "strip-ansi",
11934
+ "version": "6.0.1",
11935
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
11936
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
11937
+ "dependencies": {
11938
+ "ansi-regex": "^5.0.1"
11939
+ },
11940
+ "engines": {
11941
+ "node": ">=8"
11942
+ }
11943
+ },
11944
  "node_modules/strip-bom": {
11945
  "version": "4.0.0",
11946
  "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
 
12555
  "integrity": "sha512-aqL0GQ3LB2nC3ZEKBZ93hfn7QY80sVGk+OT9Sc6lTxl4wRiwzUBRlAjJB9Fe4+5XydXOV+tb8udp5oRBoED5Tw==",
12556
  "deprecated": "Use @unicode/unicode-9.0.0 instead."
12557
  },
12558
+ "node_modules/unique-filename": {
12559
+ "version": "3.0.0",
12560
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
12561
+ "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==",
12562
+ "dependencies": {
12563
+ "unique-slug": "^4.0.0"
12564
+ },
12565
+ "engines": {
12566
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
12567
+ }
12568
+ },
12569
+ "node_modules/unique-slug": {
12570
+ "version": "4.0.0",
12571
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz",
12572
+ "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==",
12573
+ "dependencies": {
12574
+ "imurmurhash": "^0.1.4"
12575
+ },
12576
+ "engines": {
12577
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
12578
+ }
12579
+ },
12580
  "node_modules/universalify": {
12581
  "version": "2.0.1",
12582
  "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
 
12783
  "version": "2.0.2",
12784
  "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
12785
  "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
 
12786
  "dependencies": {
12787
  "isexe": "^2.0.0"
12788
  },
 
12851
  "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
12852
  }
12853
  },
12854
+ "node_modules/wrap-ansi-cjs": {
12855
+ "name": "wrap-ansi",
12856
+ "version": "7.0.0",
12857
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
12858
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
12859
+ "dependencies": {
12860
+ "ansi-styles": "^4.0.0",
12861
+ "string-width": "^4.1.0",
12862
+ "strip-ansi": "^6.0.0"
12863
+ },
12864
+ "engines": {
12865
+ "node": ">=10"
12866
+ },
12867
+ "funding": {
12868
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
12869
+ }
12870
+ },
12871
  "node_modules/wrappy": {
12872
  "version": "1.0.2",
12873
  "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
backend/functions/package.json CHANGED
@@ -49,6 +49,7 @@
49
  "linkedom": "^0.18.4",
50
  "maxmind": "^4.3.18",
51
  "minio": "^7.1.3",
 
52
  "openai": "^4.20.0",
53
  "pdfjs-dist": "^4.2.67",
54
  "puppeteer": "^23.3.0",
 
49
  "linkedom": "^0.18.4",
50
  "maxmind": "^4.3.18",
51
  "minio": "^7.1.3",
52
+ "node-libcurl": "^4.1.0",
53
  "openai": "^4.20.0",
54
  "pdfjs-dist": "^4.2.67",
55
  "puppeteer": "^23.3.0",
backend/functions/src/cloud-functions/crawler.ts CHANGED
@@ -9,6 +9,7 @@ import { RateLimitControl, RateLimitDesc } from '../shared/services/rate-limit';
9
  import _ from 'lodash';
10
  import { PageSnapshot, PuppeteerControl, ScrappingOptions } from '../services/puppeteer';
11
  import { Request, Response } from 'express';
 
12
  const pNormalizeUrl = import("@esm2cjs/normalize-url");
13
  import { Crawled } from '../db/crawled';
14
  import { randomUUID } from 'crypto';
@@ -28,6 +29,7 @@ export interface ExtraScrappingOptions extends ScrappingOptions {
28
  targetSelector?: string | string[];
29
  removeSelector?: string | string[];
30
  keepImgDataUrl?: boolean;
 
31
  }
32
 
33
  const indexProto = {
@@ -588,6 +590,58 @@ export class CrawlerHost extends RPCHost {
588
  return;
589
  }
590
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
591
  let cache;
592
 
593
  if (!crawlerOpts || crawlerOpts.isCacheQueryApplicable()) {
@@ -706,6 +760,7 @@ export class CrawlerHost extends RPCHost {
706
  this.threadLocal.set('keepImgDataUrl', opts.keepImgDataUrl);
707
  this.threadLocal.set('cacheTolerance', opts.cacheTolerance);
708
  this.threadLocal.set('userAgent', opts.userAgent);
 
709
  if (opts.timeout) {
710
  this.threadLocal.set('timeout', opts.timeout * 1000);
711
  }
@@ -720,6 +775,7 @@ export class CrawlerHost extends RPCHost {
720
  targetSelector: opts.targetSelector,
721
  waitForSelector: opts.waitForSelector,
722
  overrideUserAgent: opts.userAgent,
 
723
  timeoutMs: opts.timeout ? opts.timeout * 1000 : undefined,
724
  withIframe: opts.withIframe,
725
  withShadowDom: opts.withShadowDom,
 
9
  import _ from 'lodash';
10
  import { PageSnapshot, PuppeteerControl, ScrappingOptions } from '../services/puppeteer';
11
  import { Request, Response } from 'express';
12
+ import { Curl } from 'node-libcurl';
13
  const pNormalizeUrl = import("@esm2cjs/normalize-url");
14
  import { Crawled } from '../db/crawled';
15
  import { randomUUID } from 'crypto';
 
29
  targetSelector?: string | string[];
30
  removeSelector?: string | string[];
31
  keepImgDataUrl?: boolean;
32
+ engine?: string;
33
  }
34
 
35
  const indexProto = {
 
590
  return;
591
  }
592
 
593
+ if (crawlerOpts?.engine?.toLowerCase() === 'curl') {
594
+ const html = await new Promise<string>((resolve, reject) => {
595
+ const curl = new Curl();
596
+ curl.setOpt('URL', urlToCrawl.toString());
597
+ curl.setOpt(Curl.option.FOLLOWLOCATION, true);
598
+
599
+ if (crawlOpts?.timeoutMs) {
600
+ curl.setOpt(Curl.option.TIMEOUT_MS, crawlOpts.timeoutMs);
601
+ }
602
+ if (crawlOpts?.overrideUserAgent) {
603
+ curl.setOpt(Curl.option.USERAGENT, crawlOpts.overrideUserAgent);
604
+ }
605
+ if (crawlOpts?.extraHeaders) {
606
+ curl.setOpt(Curl.option.HTTPHEADER, Object.entries(crawlOpts.extraHeaders).map(([k, v]) => `${k}: ${v}`));
607
+ }
608
+ if (crawlOpts?.proxyUrl) {
609
+ curl.setOpt(Curl.option.PROXY, crawlOpts.proxyUrl);
610
+ }
611
+ if (crawlOpts?.cookies) {
612
+ curl.setOpt(Curl.option.COOKIE, crawlOpts.cookies.join('; '));
613
+ }
614
+ if (crawlOpts?.referer) {
615
+ curl.setOpt(Curl.option.REFERER, crawlOpts.referer);
616
+ }
617
+
618
+
619
+ curl.on('end', (statusCode, data, headers) => {
620
+ this.logger.info(`Successfully requested ${urlToCrawl} by curl`, { statusCode, headers });
621
+ resolve(data.toString());
622
+ curl.close();
623
+ });
624
+
625
+ curl.on('error', (err) => {
626
+ this.logger.error(`Failed to request ${urlToCrawl} by curl`, { err: marshalErrorLike(err) });
627
+ reject(err);
628
+ curl.close();
629
+ });
630
+
631
+ curl.perform();
632
+ });
633
+
634
+ const fakeSnapshot = {
635
+ href: urlToCrawl.toString(),
636
+ html: html,
637
+ title: '',
638
+ text: '',
639
+ } as PageSnapshot;
640
+
641
+ yield this.jsdomControl.narrowSnapshot(fakeSnapshot, crawlOpts);
642
+ return;
643
+ }
644
+
645
  let cache;
646
 
647
  if (!crawlerOpts || crawlerOpts.isCacheQueryApplicable()) {
 
760
  this.threadLocal.set('keepImgDataUrl', opts.keepImgDataUrl);
761
  this.threadLocal.set('cacheTolerance', opts.cacheTolerance);
762
  this.threadLocal.set('userAgent', opts.userAgent);
763
+ this.threadLocal.set('engine', opts.engine);
764
  if (opts.timeout) {
765
  this.threadLocal.set('timeout', opts.timeout * 1000);
766
  }
 
775
  targetSelector: opts.targetSelector,
776
  waitForSelector: opts.waitForSelector,
777
  overrideUserAgent: opts.userAgent,
778
+ engine: opts.engine,
779
  timeoutMs: opts.timeout ? opts.timeout * 1000 : undefined,
780
  withIframe: opts.withIframe,
781
  withShadowDom: opts.withShadowDom,
backend/functions/src/dto/scrapping-options.ts CHANGED
@@ -180,7 +180,12 @@ class Viewport extends AutoCastable {
180
  description: 'Specify a budget in tokens.\n\nIf the resulting token cost exceeds the budget, the request is rejected.',
181
  in: 'header',
182
  schema: { type: 'string' }
183
- }
 
 
 
 
 
184
  }
185
  }
186
  }
@@ -272,6 +277,9 @@ export class CrawlerOptions extends AutoCastable {
272
  @Prop()
273
  userAgent?: string;
274
 
 
 
 
275
  @Prop({
276
  arrayOf: String,
277
  })
@@ -376,6 +384,11 @@ export class CrawlerOptions extends AutoCastable {
376
  const overrideUserAgent = ctx?.req.get('x-user-agent');
377
  instance.userAgent ??= overrideUserAgent;
378
 
 
 
 
 
 
379
  const keepImgDataUrl = ctx?.req.get('x-keep-img-data-url');
380
  if (keepImgDataUrl !== undefined) {
381
  instance.keepImgDataUrl = Boolean(keepImgDataUrl);
 
180
  description: 'Specify a budget in tokens.\n\nIf the resulting token cost exceeds the budget, the request is rejected.',
181
  in: 'header',
182
  schema: { type: 'string' }
183
+ },
184
+ 'X-Engine': {
185
+ description: 'Specify the engine to use for crawling.\n\nDefault: puppeteer, supported: puppeteer, curl',
186
+ in: 'header',
187
+ schema: { type: 'string' }
188
+ },
189
  }
190
  }
191
  }
 
277
  @Prop()
278
  userAgent?: string;
279
 
280
+ @Prop({ default: 'puppeteer' })
281
+ engine?: string;
282
+
283
  @Prop({
284
  arrayOf: String,
285
  })
 
384
  const overrideUserAgent = ctx?.req.get('x-user-agent');
385
  instance.userAgent ??= overrideUserAgent;
386
 
387
+ const engine = ctx?.req.get('x-engine');
388
+ if (engine) {
389
+ instance.engine = engine;
390
+ }
391
+
392
  const keepImgDataUrl = ctx?.req.get('x-keep-img-data-url');
393
  if (keepImgDataUrl !== undefined) {
394
  instance.keepImgDataUrl = Boolean(keepImgDataUrl);