From a5d38039f2d55a8dfbe2872e2a61ca92120cf959 Mon Sep 17 00:00:00 2001 From: tractorjuice <129532814+tractorjuice@users.noreply.github.com> Date: Sat, 27 Apr 2024 11:03:27 +0100 Subject: [PATCH 01/16] Add additional file extensions to crawler.ts Add additional file extensions. --- apps/api/src/scraper/WebScraper/crawler.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/api/src/scraper/WebScraper/crawler.ts b/apps/api/src/scraper/WebScraper/crawler.ts index 23cb629..3c7aefa 100644 --- a/apps/api/src/scraper/WebScraper/crawler.ts +++ b/apps/api/src/scraper/WebScraper/crawler.ts @@ -267,6 +267,13 @@ export class WebCrawler { ".docx", ".xlsx", ".xml", + ".pptx", + ".avi", + ".flv", + ".woff", + ".ttf", + ".woff2", + ".webp", ]; return fileExtensions.some((ext) => url.endsWith(ext)); } From 0f694e06082de99384dd89abfbb7fed25018f4d3 Mon Sep 17 00:00:00 2001 From: Nicolas Date: Sat, 27 Apr 2024 11:14:52 -0700 Subject: [PATCH 02/16] Update crawler.ts --- apps/api/src/scraper/WebScraper/crawler.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/api/src/scraper/WebScraper/crawler.ts b/apps/api/src/scraper/WebScraper/crawler.ts index 3c7aefa..adc71c5 100644 --- a/apps/api/src/scraper/WebScraper/crawler.ts +++ b/apps/api/src/scraper/WebScraper/crawler.ts @@ -267,7 +267,6 @@ export class WebCrawler { ".docx", ".xlsx", ".xml", - ".pptx", ".avi", ".flv", ".woff", From 1dc6458c6a668a79a277ac161604bbfef18d17e1 Mon Sep 17 00:00:00 2001 From: Nicolas Date: Sat, 27 Apr 2024 11:17:10 -0700 Subject: [PATCH 03/16] Update crawler.ts --- apps/api/src/scraper/WebScraper/crawler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/api/src/scraper/WebScraper/crawler.ts b/apps/api/src/scraper/WebScraper/crawler.ts index adc71c5..7bf9988 100644 --- a/apps/api/src/scraper/WebScraper/crawler.ts +++ b/apps/api/src/scraper/WebScraper/crawler.ts @@ -272,7 +272,7 @@ export class WebCrawler { ".woff", ".ttf", ".woff2", - ".webp", + ".webp" ]; return fileExtensions.some((ext) => url.endsWith(ext)); } From bc6b929b43ffa0385c3243ae284c95919997e707 Mon Sep 17 00:00:00 2001 From: rafaelsideguide <150964962+rafaelsideguide@users.noreply.github.com> Date: Fri, 10 May 2024 12:15:54 -0300 Subject: [PATCH 04/16] [Bug] Fixing /crawl limit --- apps/api/src/scraper/WebScraper/crawler.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/api/src/scraper/WebScraper/crawler.ts b/apps/api/src/scraper/WebScraper/crawler.ts index 0248df2..1b371fd 100644 --- a/apps/api/src/scraper/WebScraper/crawler.ts +++ b/apps/api/src/scraper/WebScraper/crawler.ts @@ -25,7 +25,7 @@ export class WebCrawler { initialUrl, includes, excludes, - maxCrawledLinks, + maxCrawledLinks = 10000, limit = 10000, generateImgAltText = false, maxCrawledDepth = 10, @@ -136,7 +136,7 @@ export class WebCrawler { inProgress?: (progress: Progress) => void ): Promise { const queue = async.queue(async (task: string, callback) => { - if (this.crawledUrls.size >= this.maxCrawledLinks) { + if (this.crawledUrls.size >= Math.min(this.maxCrawledLinks, this.limit)) { if (callback && typeof callback === "function") { callback(); } @@ -147,14 +147,14 @@ export class WebCrawler { if (inProgress && newUrls.length > 0) { inProgress({ current: this.crawledUrls.size, - total: this.maxCrawledLinks, + total: Math.min(this.maxCrawledLinks, this.limit), status: "SCRAPING", currentDocumentUrl: newUrls[newUrls.length - 1], }); } else if (inProgress) { inProgress({ current: this.crawledUrls.size, - total: this.maxCrawledLinks, + total: Math.min(this.maxCrawledLinks, this.limit), status: "SCRAPING", currentDocumentUrl: task, }); From 60002e79b85d041b9c76cf279affd49f07c32f2c Mon Sep 17 00:00:00 2001 From: Nicolas Date: Mon, 20 May 2024 10:06:48 -0700 Subject: [PATCH 05/16] Nick: python sdk bump --- .../build/lib/firecrawl/firecrawl.py | 17 +++++++++-------- apps/python-sdk/dist/firecrawl-py-0.0.8.tar.gz | Bin 4068 -> 0 bytes apps/python-sdk/dist/firecrawl-py-0.0.9.tar.gz | Bin 0 -> 4340 bytes .../dist/firecrawl_py-0.0.8-py3-none-any.whl | Bin 3119 -> 0 bytes .../dist/firecrawl_py-0.0.9-py3-none-any.whl | Bin 0 -> 3144 bytes apps/python-sdk/firecrawl_py.egg-info/PKG-INFO | 2 +- apps/python-sdk/setup.py | 2 +- 7 files changed, 11 insertions(+), 10 deletions(-) delete mode 100644 apps/python-sdk/dist/firecrawl-py-0.0.8.tar.gz create mode 100644 apps/python-sdk/dist/firecrawl-py-0.0.9.tar.gz delete mode 100644 apps/python-sdk/dist/firecrawl_py-0.0.8-py3-none-any.whl create mode 100644 apps/python-sdk/dist/firecrawl_py-0.0.9-py3-none-any.whl diff --git a/apps/python-sdk/build/lib/firecrawl/firecrawl.py b/apps/python-sdk/build/lib/firecrawl/firecrawl.py index 701810c..98cb8ed 100644 --- a/apps/python-sdk/build/lib/firecrawl/firecrawl.py +++ b/apps/python-sdk/build/lib/firecrawl/firecrawl.py @@ -4,10 +4,11 @@ import requests import time class FirecrawlApp: - def __init__(self, api_key=None): + def __init__(self, api_key=None, api_url='https://api.firecrawl.dev'): self.api_key = api_key or os.getenv('FIRECRAWL_API_KEY') if self.api_key is None: raise ValueError('No API key provided') + self.api_url = api_url or os.getenv('FIRECRAWL_API_URL') @@ -38,7 +39,7 @@ class FirecrawlApp: scrape_params[key] = value # Make the POST request with the prepared headers and JSON data response = requests.post( - 'https://api.firecrawl.dev/v0/scrape', + f'{self.api_url}/v0/scrape', headers=headers, json=scrape_params ) @@ -48,7 +49,7 @@ class FirecrawlApp: return response['data'] else: raise Exception(f'Failed to scrape URL. Error: {response["error"]}') - elif response.status_code in [402, 409, 500]: + elif response.status_code in [402, 408, 409, 500]: error_message = response.json().get('error', 'Unknown error occurred') raise Exception(f'Failed to scrape URL. Status code: {response.status_code}. Error: {error_message}') else: @@ -63,7 +64,7 @@ class FirecrawlApp: if params: json_data.update(params) response = requests.post( - 'https://api.firecrawl.dev/v0/search', + f'{self.api_url}/v0/search', headers=headers, json=json_data ) @@ -85,7 +86,7 @@ class FirecrawlApp: json_data = {'url': url} if params: json_data.update(params) - response = self._post_request('https://api.firecrawl.dev/v0/crawl', json_data, headers) + response = self._post_request(f'{self.api_url}/v0/crawl', json_data, headers) if response.status_code == 200: job_id = response.json().get('jobId') if wait_until_done: @@ -97,7 +98,7 @@ class FirecrawlApp: def check_crawl_status(self, job_id): headers = self._prepare_headers() - response = self._get_request(f'https://api.firecrawl.dev/v0/crawl/status/{job_id}', headers) + response = self._get_request(f'{self.api_url}/v0/crawl/status/{job_id}', headers) if response.status_code == 200: return response.json() else: @@ -130,7 +131,7 @@ class FirecrawlApp: def _monitor_job_status(self, job_id, headers, timeout): import time while True: - status_response = self._get_request(f'https://api.firecrawl.dev/v0/crawl/status/{job_id}', headers) + status_response = self._get_request(f'{self.api_url}/v0/crawl/status/{job_id}', headers) if status_response.status_code == 200: status_data = status_response.json() if status_data['status'] == 'completed': @@ -148,7 +149,7 @@ class FirecrawlApp: self._handle_error(status_response, 'check crawl status') def _handle_error(self, response, action): - if response.status_code in [402, 409, 500]: + if response.status_code in [402, 408, 409, 500]: error_message = response.json().get('error', 'Unknown error occurred') raise Exception(f'Failed to {action}. Status code: {response.status_code}. Error: {error_message}') else: diff --git a/apps/python-sdk/dist/firecrawl-py-0.0.8.tar.gz b/apps/python-sdk/dist/firecrawl-py-0.0.8.tar.gz deleted file mode 100644 index b18dde5338bd63b8265d14e6bcb585d403bb59b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4068 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 W6jMww#S~NiK;{2+#s201pa1|E9WRCe diff --git a/apps/python-sdk/dist/firecrawl-py-0.0.9.tar.gz b/apps/python-sdk/dist/firecrawl-py-0.0.9.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..55e0eed7b11f182f42a69f4f864156a6e79ba381 GIT binary patch literal 4340 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 literal 0 HcmV?d00001 diff --git a/apps/python-sdk/dist/firecrawl_py-0.0.8-py3-none-any.whl b/apps/python-sdk/dist/firecrawl_py-0.0.8-py3-none-any.whl deleted file mode 100644 index f71cb8e109621cf3fcba79a4f5136381d6ac1091..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3119 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 diff --git a/apps/python-sdk/dist/firecrawl_py-0.0.9-py3-none-any.whl b/apps/python-sdk/dist/firecrawl_py-0.0.9-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..83cb5b77411b29a142592767d8f15946d19e22ef GIT binary patch literal 3144 zcmai$c{G%L8^^~wB2tzTQ<@~pm@&2t5oO9?msR|MNN5_4{4lbA2(UJiOun06+jBeK*E7 zCfj2`mh&gakpxHQT|7wyPe&>lhR3_Oxp?F8Pd6M`60E{#MAo&aOJDkJpwY^ATYl(izz}G+6tFW_x zKvcQUx5R*$29wW9Yji~I6W~3bP0%XMiAzj)xj-KPp;{B4mZM(T1R4{g9w$doSs+D8 zYeh}P-afM=p=^rMNt~$TiRGvpDeF)yC?WZ}B&mK;Wf`?dcP%Qv5ae1ic;<{tXCjyt zHkwbgS+%#Gb=&TzroSHr7R*YJ!ydlX6lM*s8a>prlT<%je0t1M=T$ZK5u2^5nxX00 zEQNm&ClS8QWS1@%u|E==%X_4GCvNGSRJT(^vB+oqYz-}A1_Y9)?^!=~q7VR|ZWE2l z1W6087|V+vq?bJ&17efZvSB9Nr2<8FiB;lKtixG_M($7T!YT7*Q=`3J2kXAL)ME#! zO&&F&LhpPpzfhBxNFZnVvO$O@VI9p|4z-<~2AY4Vfn(@R!B;K3I@O>O0eGMFoHY_x z^W?K)ijp~X3(5NWmBg%-*~$Wl^P8KsHq$i4CS7$N$>$T4bQH9;4d{brTTg$U-G_*m zIXq~@LLi&~_kDV+`DBBGZH}@!s0^pjBIHy57<~+bH?eWxs-FdGXe*KdwrValvn`hi zfV(-g?Xz`!(GVj9q&y?U@@FaALf?5b6h9#5Lv!B(NRp@`Kz(PnuRXTQ=O9no>hcH@aC+1zW11oqo*9Yi42-TB9IG?9t>papEp16}kF&5H9ZND} z6DQ>jZtRC%qiG2|4}N$ptj7_+kDfD@A|lgXN#)pZjb8b4j60p!@>XxtTG6{DQP%N?ia63lK444tU-#0yMH4uxFd~fY&6Q_oD zRn!GF2ENhNs@PH9>-B=_SW}-#aC-Gs|LHAE?H#9{76Yf)&a+}X2w6&+NV9j)Z3B@o?xyCg1q5O;*^WX?~E3a0&sptlcvdoPvXE%k*_skD>T^ETdCj%P6;>wxEU> zIqo>%(W~t-VsGW!gK)QB;mw~RGY*^MPMydS*8>^@TI*Ny8S+t#HIif=)#RKnjziOLBi#t9n0APW|-wWF-VdiF_}0sGJ1@M-h>+iE=lFUoONh*w?b!YRB9_Rq^Rc132S zERZQcT_v6l*QKz=+Y)`#6%#?0-Nvp6M6sr#N#g}f)AcfkF3r;yE3<`^l?$IQXdXZ`{jF8ySSWY?9C!ANuGeTMV6<+4^D28i^d~ zA!yQO|7@QgawJ-VcqZUl*l9N#h(&vb4WP3eZ_pfd?k3NjuBtb zW$|+kGeW;MnUxEl!*QDXCh+f?v@u2^&4gIS=#Fk-Qx&Do=d3cU>Pz)OPm2yy6%$A+ ztQ2c((h7lIh5_?WcByu$S9Ga&j|#T2VBMb}eZmSVCLOJ2rC0?;CG>kilvyQK;jTts zM?1^37yX<$I?Vl3l=yZ5X6m6LTRAlea-{UT+Po?5crwYCM233%d4CTpLz|h+6FiO( zE&$*)NBe)r#3GMbV2#2%Yy3l00pUY$UAOEK#at3;p=>vDVZ1o7?E=F{)I?FiW&p)* zb#wBsP3XBM^N4(JY*&xaEPRYDy`rRk@|1mu<{Mr`=(gxgD%C;z-E8tmXZ!Q(UAClZ z2f3nZSB%gf_c7;J8~yJcc|G`OT0nl-u`I0tMHM}h{3Yc?g`MFUmC;yTQpwP`8=M0UVj7~Yd)T!AS<8Gj|RS5Ok_DXJH ztw>cv#oq0r$RR|AcHZP$l80O&4A&X|L4G?E{m95*!i!3txj2_dV&vmYpE3F(_}7=K zDW`F9!BzqE*?F!@mt6AAQ7Fpp)WvGwNaAdjnpGy0c~b5SXi19nZdp)ZfhMc*Nmc`p zvcb7PE^cw2{~a(nC;s=76a4M-JrVvKH-AR_TcG?00086!TmFLh4&%hjpBevVc_-}Ru{0ESR8Z`g_ literal 0 HcmV?d00001 diff --git a/apps/python-sdk/firecrawl_py.egg-info/PKG-INFO b/apps/python-sdk/firecrawl_py.egg-info/PKG-INFO index e54fda5..c1ee531 100644 --- a/apps/python-sdk/firecrawl_py.egg-info/PKG-INFO +++ b/apps/python-sdk/firecrawl_py.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: firecrawl-py -Version: 0.0.8 +Version: 0.0.9 Summary: Python SDK for Firecrawl API Home-page: https://github.com/mendableai/firecrawl Author: Mendable.ai diff --git a/apps/python-sdk/setup.py b/apps/python-sdk/setup.py index 78a4d84..7df520e 100644 --- a/apps/python-sdk/setup.py +++ b/apps/python-sdk/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name='firecrawl-py', - version='0.0.8', + version='0.0.9', url='https://github.com/mendableai/firecrawl', author='Mendable.ai', author_email='nick@mendable.ai', From 9e61d431f0720e709f353f3c8fe3cd90ca18d17a Mon Sep 17 00:00:00 2001 From: Nicolas Date: Mon, 20 May 2024 13:36:34 -0700 Subject: [PATCH 06/16] Nick: hyper dx integration init --- apps/api/package.json | 1 + apps/api/pnpm-lock.yaml | 1472 ++++++++++++++++- apps/api/src/controllers/auth.ts | 23 +- apps/api/src/index.ts | 5 + apps/api/src/scraper/WebScraper/crawler.ts | 2 +- .../src/services/billing/credit_billing.ts | 3 +- apps/api/src/services/queue-worker.ts | 3 + 7 files changed, 1484 insertions(+), 25 deletions(-) diff --git a/apps/api/package.json b/apps/api/package.json index ad99c5e..92dfb6d 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -48,6 +48,7 @@ "@bull-board/express": "^5.8.0", "@devil7softwares/pos": "^1.0.2", "@dqbd/tiktoken": "^1.0.13", + "@hyperdx/node-opentelemetry": "^0.7.0", "@logtail/node": "^0.4.12", "@nangohq/node": "^0.36.33", "@sentry/node": "^7.48.0", diff --git a/apps/api/pnpm-lock.yaml b/apps/api/pnpm-lock.yaml index 16b2f6c..a2d1394 100644 --- a/apps/api/pnpm-lock.yaml +++ b/apps/api/pnpm-lock.yaml @@ -23,6 +23,9 @@ dependencies: '@dqbd/tiktoken': specifier: ^1.0.13 version: 1.0.13 + '@hyperdx/node-opentelemetry': + specifier: ^0.7.0 + version: 0.7.0 '@logtail/node': specifier: ^0.4.12 version: 0.4.20 @@ -640,6 +643,11 @@ packages: '@bull-board/api': 5.14.2(@bull-board/ui@5.14.2) dev: false + /@colors/colors@1.6.0: + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + dev: false + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -669,6 +677,58 @@ packages: yargs: 17.7.2 dev: true + /@grpc/grpc-js@1.10.8: + resolution: {integrity: sha512-vYVqYzHicDqyKB+NQhAc54I1QWCBLCrYG6unqOIcBTHx+7x8C9lcoLj3KVJXs2VB4lUbpWY+Kk9NipcbXYWmvg==} + engines: {node: '>=12.10.0'} + dependencies: + '@grpc/proto-loader': 0.7.13 + '@js-sdsl/ordered-map': 4.4.2 + dev: false + + /@grpc/proto-loader@0.7.13: + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} + engines: {node: '>=6'} + hasBin: true + dependencies: + lodash.camelcase: 4.3.0 + long: 5.2.3 + protobufjs: 7.3.0 + yargs: 17.7.2 + dev: false + + /@hyperdx/node-opentelemetry@0.7.0: + resolution: {integrity: sha512-3PH1CLUITIx8Awlyye0if0xAgdm0+rK4Shs5nE2q7b/8dc66krYzOFvpDcFS9/R4jOiw1t7tY4q8V1p9/dHLmw==} + hasBin: true + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.51.1 + '@opentelemetry/auto-instrumentations-node': 0.46.1(@opentelemetry/api@1.8.0) + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/exporter-logs-otlp-http': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/exporter-metrics-otlp-proto': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-http': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-logs': 0.51.1(@opentelemetry/api-logs@0.51.1)(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-metrics': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-node': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + debug: 4.3.4 + json-stringify-safe: 5.0.1 + lodash.isobject: 3.0.2 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + pino-abstract-transport: 1.2.0 + shimmer: 1.2.1 + tslib: 2.6.2 + winston-transport: 4.7.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + /@ioredis/commands@1.2.0: resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} @@ -951,6 +1011,10 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /@js-sdsl/ordered-map@4.4.2: + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + dev: false + /@langchain/community@0.0.35(@supabase/supabase-js@2.39.7)(ioredis@5.3.2)(redis@4.6.13)(typesense@1.7.2): resolution: {integrity: sha512-xZGjiqlS7X0EDWM67s2PxSLg0Rz/Wfc741IPF0Ok/f4yFwFseWjtcWXwBwe0dVnapIstpKR82q+RDAa06xFxyw==} engines: {node: '>=18'} @@ -1348,6 +1412,991 @@ packages: - debug dev: false + /@opentelemetry/api-logs@0.51.1: + resolution: {integrity: sha512-E3skn949Pk1z2XtXu/lxf6QAZpawuTM/IUEXcAzpiUkTd73Hmvw26FiN3cJuTmkpM5hZzHwkomVdtrh/n/zzwA==} + engines: {node: '>=14'} + dependencies: + '@opentelemetry/api': 1.8.0 + dev: false + + /@opentelemetry/api@1.8.0: + resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} + engines: {node: '>=8.0.0'} + dev: false + + /@opentelemetry/auto-instrumentations-node@0.46.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-s0CwmY9KYtPawOhV5YO2Gf62uVOQRNvT6Or8IZ0S4gr/kPVNhoMehTsQvqBwSWQfoFrkmW3KKOHiKJEp4dVGXg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.4.1 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-amqplib': 0.37.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-aws-lambda': 0.41.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-aws-sdk': 0.41.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-bunyan': 0.38.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-cassandra-driver': 0.38.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-connect': 0.36.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-cucumber': 0.6.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-dataloader': 0.9.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-dns': 0.36.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-express': 0.39.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-fastify': 0.36.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-fs': 0.12.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-generic-pool': 0.36.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-graphql': 0.40.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-grpc': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-hapi': 0.38.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-http': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-ioredis': 0.40.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-knex': 0.36.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-koa': 0.40.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-lru-memoizer': 0.37.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-memcached': 0.36.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-mongodb': 0.43.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-mongoose': 0.38.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-mysql': 0.38.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-mysql2': 0.38.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-nestjs-core': 0.37.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-net': 0.36.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-pg': 0.41.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-pino': 0.39.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-redis': 0.39.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-redis-4': 0.39.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-restify': 0.38.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-router': 0.37.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-socket.io': 0.39.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-tedious': 0.10.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-undici': 0.2.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-winston': 0.37.0(@opentelemetry/api@1.8.0) + '@opentelemetry/resource-detector-alibaba-cloud': 0.28.9(@opentelemetry/api@1.8.0) + '@opentelemetry/resource-detector-aws': 1.5.0(@opentelemetry/api@1.8.0) + '@opentelemetry/resource-detector-azure': 0.2.7(@opentelemetry/api@1.8.0) + '@opentelemetry/resource-detector-container': 0.3.9(@opentelemetry/api@1.8.0) + '@opentelemetry/resource-detector-gcp': 0.29.9(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-node': 0.51.1(@opentelemetry/api@1.8.0) + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@opentelemetry/context-async-hooks@1.24.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-R5r6DO4kgEOVBxFXhXjwospLQkv+sYxwCfjvoZBe7Zm6KKXAV9kDSJhi/D1BweowdZmO+sdbENLs374gER8hpQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + dev: false + + /@opentelemetry/core@1.24.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-wMSGfsdmibI88K9wB498zXY04yThPexo8jvwNNlm542HZB7XrrMRBbAyKJqG8qDRJwIBdBrPMi4V9ZPW/sqrcg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/semantic-conventions': 1.24.1 + dev: false + + /@opentelemetry/exporter-logs-otlp-http@0.51.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-cd6GZ9IqCrmvOJwi1HjRR7o9ihF7xhZTekgxUsoyTsPF+SjKMsLF9ur6HeBYkYhk+YjZ1ken3XUMH47oUTvu8Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.51.1 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-exporter-base': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-transformer': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-logs': 0.51.1(@opentelemetry/api-logs@0.51.1)(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/exporter-metrics-otlp-http@0.51.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-oFXvif9iksHUxrzG3P8ohMLt7xSrl+oDMqxD/3XXndU761RFAKSbRDpfrQs25U5D+A2aMV3qk+4kfUWdJhZ77g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-exporter-base': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-transformer': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-metrics': 1.24.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/exporter-metrics-otlp-proto@0.51.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-jhj8xD6S4cydXGCuf2tp56+4QI0DbDH6g+0MiPPJVdXjxLj+iycQuqB2cwljWpByblFaOjyUsL/VKtm8C7sQ9A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-exporter-base': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-proto-exporter-base': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-transformer': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-metrics': 1.24.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/exporter-trace-otlp-grpc@0.51.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-P9+Hkszih95ITvldGZ+kXvj9HpD1QfS+PwooyHK72GYA+Bgm+yUSAsDkUkDms8+s9HW6poxURv3LcjaMuBBpVQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@grpc/grpc-js': 1.10.8 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-transformer': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.24.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/exporter-trace-otlp-http@0.51.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-n+LhLPsX07URh+HhV2SHVSvz1t4G/l/CE5BjpmhAPqeTceFac1VpyQkavWEJbvnK5bUEXijWt4LxAxFpt2fXyw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-exporter-base': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-transformer': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.24.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/exporter-trace-otlp-proto@0.51.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-SE9f0/6V6EeXC9i+WA4WFjS1EYgaBCpAnI5+lxWvZ7iO7EU1IvHvZhP6Kojr0nLldo83gqg6G7OWFqsID3uF+w==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-exporter-base': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-proto-exporter-base': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-transformer': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.24.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/exporter-zipkin@1.24.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-+Rl/VFmu2n6eaRMnVbyfZx1DqR/1KNyWebYuHyQBZaEAVIn/ZLgmofRpXN1X2nhJ4BNaptQUNxAstCYYz6dKoQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + dev: false + + /@opentelemetry/instrumentation-amqplib@0.37.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-XjOHeAOreh0XX4jlzTTUWWqu1dIGvMWM8yvd43JJdRMAmTZisezjKsxLjMEMIvF0PzQdoXwh9DiS9nYE4/QmpA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-aws-lambda@0.41.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-/BLG+0DQr2tCILFGJKJH2Fg6eyjhqOlVflYpNddUEXnzyQ/PAhTdgirkqbICFgeSW2XYcEY9zXpuRldrVNw9cA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/propagator-aws-xray': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + '@types/aws-lambda': 8.10.122 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-aws-sdk@0.41.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-7+8WMY0LQeqv6KIObXK+Py44qNFLeCU0ZLLxSZtXEbZ2wJlQISP1St65jRto0NV7isnZoyuOxb2+ZpypPPNv7Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/propagation-utils': 0.30.9(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-bunyan@0.38.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-ThNcgTE22W7PKzTzz5qfGxb5Gf7rA3EORousYo2nJWHHcF6gqiMNv2+GXY3MdpjLBr8IgCfhtvbQdD6rlIPUpA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.51.1 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@types/bunyan': 1.8.9 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-cassandra-driver@0.38.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-ML4Vw0it2uIpETfX6skuSIGLHF9D3TUKOfdfrk9lnrzzWSzg2aS6pl3UeepkQX4wXHdzlxVRB0USrUqsmxMd5Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-connect@0.36.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-xI5Q/CMmzBmHshPnzzjD19ptFaYO/rQWzokpNio4QixZYWhJsa35QgRvN9FhPkwgtuJIbt/CWWAufJ3egJNHEA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + '@types/connect': 3.4.36 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-cucumber@0.6.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-90eAF2JPSbPAsOuGfYyctYaoYXqy4Clbxt0j/uUgg6dto4oqwUw3AvTyHQEztLGxeXwEzC1EQigDtVPg5ZexYA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-dataloader@0.9.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-fiyCOAw+tlbneok1x7P5UseoGW5nS60CWWx7NXzYW+WOexpSmDQQW7olttGa8fqE6/sVCoi1l+QdfVoETZi/NQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-dns@0.36.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-NWRbQ7q0E3co/CNTWLZZvUzZoKhB1iTitY282IM8HDTXkA6VRssCfOcvaHw5ezOh23TJbAeYxmmpVj4hFvDPYQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-express@0.39.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-AG8U7z7D0JcBu/7dDcwb47UMEzj9/FMiJV2iQZqrsZnxR3FjB9J9oIH2iszJYci2eUdp2WbdvtpD9RV/zmME5A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-fastify@0.36.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-3Nfm43PI0I+3EX+1YbSy6xbDu276R1Dh1tqAk68yd4yirnIh52Kd5B+nJ8CgHA7o3UKakpBjj6vSzi5vNCzJIA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-fs@0.12.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-Waf+2hekJRxIwq1PmivxOWLdMOtYbY22hKr34gEtfbv2CArSv8FBJH4BmQxB9o5ZcwkdKu589qs009dbuSfNmQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-generic-pool@0.36.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-CExAEqJvK8jYxrhN8cl6EaGg57EGJi+qsSKouLC5lndXi68gZLOKbZIMZg4pF0kNfp/D4BFaGmA6Ap7d5WoPTw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-graphql@0.40.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-LVRdEHWACWOczv2imD+mhUrLMxsEjPPi32vIZJT57zygR5aUiA4em8X3aiGOCycgbMWkIu8xOSGSxdx3JmzN+w==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-grpc@0.51.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-coRTugFL7De/VNH/1NqPlxnfik87jS+jBXsny+Y/lMhXIA3x8t71IyL9ihuewkD+lNtIxIz6Y7Sq6kPuOqz5dQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-hapi@0.38.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-ZcOqEuwuutTDYIjhDIStix22ECblG/i9pHje23QGs4Q4YS4RMaZ5hKCoQJxW88Z4K7T53rQkdISmoXFKDV8xMg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-http@0.51.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-6b3nZnFFEz/3xZ6w8bVxctPUWIPWiXuPQ725530JgxnN1cvYFd8CJ75PrHZNjynmzSSnqBkN3ef4R9N+RpMh8Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-ioredis@0.40.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-Jv/fH7KhpWe4KBirsiqeUJIYrsdR2iu2l4nWhfOlRvaZ+zYIiLEzTQR6QhBbyRoAbU4OuYJzjWusOmmpGBnwng==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-knex@0.36.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-6bEuiI+yMf3D0+ZWZE2AKmXhIhBvZ0brdO/0A8lUqeqeS+sS4fTcjA1F2CclsCNxYWEgcs8o3QyQqPceBeVRlg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-koa@0.40.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-dJc3H/bKMcgUYcQpLF+1IbmUKus0e5Fnn/+ru/3voIRHwMADT3rFSUcGLWSczkg68BCgz0vFWGDTvPtcWIFr7A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + '@types/koa': 2.14.0 + '@types/koa__router': 12.0.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-lru-memoizer@0.37.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-dHLrn55qVWsHJQYdForPWPUWDk2HZ2jjzkT+WoQSqpYT1j4HxfoiLfBTF+I3EbEYFAJnDRmRAUfA6nU5GPdCLQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-memcached@0.36.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-5efkT8ZfN8il5z+yfKYFGm2YR3mhlhaJoGfNOAylKE/6tUH3WDTTWaP7nrURtWGc+fuvDktcEch18Se8qsGS7w==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + '@types/memcached': 2.2.10 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-mongodb@0.43.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-bMKej7Y76QVUD3l55Q9YqizXybHUzF3pujsBFjqbZrRn2WYqtsDtTUlbCK7fvXNPwFInqZ2KhnTqd0gwo8MzaQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-metrics': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-mongoose@0.38.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-zaeiasdnRjXe6VhYCBMdkmAVh1S5MmXC/0spet+yqoaViGnYst/DOxPvhwg3yT4Yag5crZNWsVXnA538UjP6Ow==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-mysql2@0.38.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-qkpHMgWSDTYVB1vlZ9sspf7l2wdS5DDq/rbIepDwX5BA0N0068JTQqh0CgAh34tdFqSCnWXIhcyOXC2TtRb0sg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.8.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-mysql@0.38.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-+iBAawUaTfX/HAlvySwozx0C2B6LBfNPXX1W8Z2On1Uva33AGkw2UjL9XgIg1Pj4eLZ9R4EoJ/aFz+Xj4E/7Fw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + '@types/mysql': 2.15.22 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-nestjs-core@0.37.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-ebYQjHZEmGHWEALwwDGhSQVLBaurFnuLIkZD5igPXrt7ohfF4lc5/4al1LO+vKc0NHk8SJWStuRueT86ISA8Vg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-net@0.36.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-rZlbSgwAJys8lpug+xIeAdO98ypYMAPVqrHqc4AHuUl5S4MULHEcjGLMZLoE/guEGO4xAQ5XUezpRFGM1SAnsg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-pg@0.41.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-BSlhpivzBD77meQNZY9fS4aKgydA8AJBzv2dqvxXFy/Hq64b7HURgw/ztbmwFeYwdF5raZZUifiiNSMLpOJoSA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.8.0) + '@types/pg': 8.6.1 + '@types/pg-pool': 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-pino@0.39.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-uA17F2iP77o3NculB63QD2zv3jkJ093Gfb0GxHLEqTIqpYs1ToJ53ybWwjJwqFByxk7GrliaxaxVtWC23PKzBg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-redis-4@0.39.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-Zpfqfi83KeKgVQ0C2083GZPon3ZPYQ5E59v9FAbhubtOoUb9Rh7n111YD8FPW3sgx6JKp1odXmBmfQhWCaTOpQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-redis@0.39.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-HUjTerD84jRJnSyDrRPqn6xQ7K91o9qLflRPZqzRvq0GRj5PMfc6TJ/z3q/ayWy/2Kzffhrp7HCIVp0u0TkgUg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-restify@0.38.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-VYK47Z9GBaZX5MQLL7kZDdzQDdyUtHRD4J/GSr6kdwmIpdpUQXLsV3EnboeB8P+BlpucF57FyJKE8yWTOEMfnA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-router@0.37.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-+OPcm7C9I5oPqnpStE+1WkdPWjRx0k5XKratxQmIDFZrmhRcqvMte3vrrzE/OBPg9iqh2tKrSe0y7+0sRfTJyQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-socket.io@0.39.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-4J2ehk5mJyDT6j2yJCOuPxAjit5QB1Fwzhx0LID5jjvhI9LxzZIGDNAPTTHyghSiaRDeNMzceXKkkEQJkg2MNw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-tedious@0.10.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-maSXMxgS0szU52khQzAROV4nWr+3M8mZajMQOc3/7tYjo+Q3HlWAowOuagPvp4pwROK4x6oDaFYlY+ZSj1qjYA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + '@types/tedious': 4.0.14 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-undici@0.2.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-RH9WdVRtpnyp8kvya2RYqKsJouPxvHl7jKPsIfrbL8u2QCKloAGi0uEqDHoOS15ZRYPQTDXZ7d8jSpUgSQmvpA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.7.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-winston@0.37.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-vOx55fxdNjo2XojJf8JN4jP7VVvQCh7UQzzQ2Q2FpGJpt8Z3EErKaY8xOBkOuJH0TtL/Q72rmIn9c+mRG46BxA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.51.1 + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation@0.51.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-JIrvhpgqY6437QIqToyozrUG1h5UhwHkaGK/WAX+fkrpyPtc+RO5FkRtUd9BH0MibabHHvqsnBGKfKVijbmp8w==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.51.1 + '@types/shimmer': 1.0.5 + import-in-the-middle: 1.7.4 + require-in-the-middle: 7.3.0 + semver: 7.6.0 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/otlp-exporter-base@0.51.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-UYlnOYyDdzo1Gw559EHCzru0RwhvuXCwoH8jGo9J4gO1TE58GjnEmIjomMsKBCym3qWNJfIQXw+9SZCV0DdQNg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/otlp-grpc-exporter-base@0.51.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-ZAS+4pq8o7dsugGTwV9s6JMKSxi+guIHdn0acOv0bqj26e9pWDFx5Ky+bI0aY46uR9Y0JyXqY+KAEYM/SO3DFA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@grpc/grpc-js': 1.10.8 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-exporter-base': 0.51.1(@opentelemetry/api@1.8.0) + protobufjs: 7.3.0 + dev: false + + /@opentelemetry/otlp-proto-exporter-base@0.51.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-gxxxwfk0inDMb5DLeuxQ3L8TtptxSiTNHE4nnAJH34IQXAVRhXSXW1rK8PmDKDngRPIZ6J7ncUCjjIn8b+AgqQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-exporter-base': 0.51.1(@opentelemetry/api@1.8.0) + protobufjs: 7.3.0 + dev: false + + /@opentelemetry/otlp-transformer@0.51.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-OppYOXwV9LQqqtYUCywqoOqX/JT9LQ5/FMuPZ//eTkvuHdUC4ZMwz2c6uSoT2R90GWvvGnF1iEqTGyTT3xAt2Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.51.1 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-logs': 0.51.1(@opentelemetry/api-logs@0.51.1)(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-metrics': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.24.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/propagation-utils@0.30.9(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-DP2Y91zyw2uNgKLbej6c3IIjyF27sKnRK/UY/6msMIVGPIbZgtH9L0JOioN5L5kYjEkH4CDvt921SjutN7hY4A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + dev: false + + /@opentelemetry/propagator-aws-xray@1.24.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-RzwoLe6QzsYGcpmxxDbbbgSpe3ncxSM4dtFHXh/rCYGjyq0nZGXKvk26mJtWZ4kQ3nuiIoqSZueIuGmt/mvOTA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/propagator-b3@1.24.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-nda97ZwhpZKyUJTXqQuKzNhPMUgMLunbbGWn8kroBwegn+nh6OhtyGkrVQsQLNdVKJl0KeB5z0ZgeWszrYhwFw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/propagator-jaeger@1.24.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-7bRBJn3FG1l195A1m+xXRHvgzAOBsfmRi9uZ5Da18oTh7BLmNDiA8+kpk51FpTsU1PCikPVpRDNPhKVB6lyzZg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/redis-common@0.36.2: + resolution: {integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==} + engines: {node: '>=14'} + dev: false + + /@opentelemetry/resource-detector-alibaba-cloud@0.28.9(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-cTV2YFFkKAZUZgs5SMknIX4MmFb/0KQhrJuiz2dtJKnI1n7OanCgnMkuXzJ5+CbifRB57I2g3HnwcSPOx3zsKw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + dev: false + + /@opentelemetry/resource-detector-aws@1.5.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-JNk/kSzzNQaiMo/F0b/bm8S3Qtr/m89BckN9B4U/cPHSqKLdxX03vgRBOqkXJ5KlAD8kc6K1Etcr8QfvGw6+uA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + dev: false + + /@opentelemetry/resource-detector-azure@0.2.7(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-+R3VnPaK6rc+kKfdvhgQlYDGXy0+JMAjPNDjcRQSeXY8pVOzHGCIrY+gT6gUrpjsw8w1EgNBVofr+qeNOr+o4A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + dev: false + + /@opentelemetry/resource-detector-container@0.3.9(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-kfJ78av51EKk09fn5cwe5UNt+G7UBLvPTmfK/nZzvmNs7enw/TGB8X0j0JUHb9487ypRGph6MBoeP1+qZh+w1A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + dev: false + + /@opentelemetry/resource-detector-gcp@0.29.9(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-rTUm0U0cF8f75JzeMpMLbQ4m1uLph+Q31DQKk8ekdDe6SZ1EPD4rM1JgRnbxZtsC2sE8ju87s5nEio77xPz7dQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + gcp-metadata: 6.1.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@opentelemetry/resources@1.24.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-cyv0MwAaPF7O86x5hk3NNgenMObeejZFLJJDVuSeSMIsknlsj3oOZzRv3qSzlwYomXsICfBeFFlxwHQte5mGXQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + dev: false + + /@opentelemetry/sdk-logs@0.51.1(@opentelemetry/api-logs@0.51.1)(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-ULQQtl82b673PpZc5/0EtH4V+BrwVOgKJZEB7tYZnGTG3I98tQVk89S9/JSixomDr++F4ih+LSJTCqIKBz+MQQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.9.0' + '@opentelemetry/api-logs': '>=0.39.1' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.51.1 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/sdk-metrics@1.24.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-FrAqCbbGao9iKI+Mgh+OsC9+U2YMoXnlDHe06yH7dvavCKzE3S892dGtX54+WhSFVxHR/TMRVJiK/CV93GR0TQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + lodash.merge: 4.6.2 + dev: false + + /@opentelemetry/sdk-node@0.51.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-GgmNF9C+6esr8PIJxCqHw84rEOkYm6XdFWZ2+Wyc3qaUt92ACoN7uSw5iKNvaUq62W0xii1wsGxwHzyENtPP8w==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.51.1 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/exporter-trace-otlp-http': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/exporter-zipkin': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.51.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-logs': 0.51.1(@opentelemetry/api-logs@0.51.1)(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-metrics': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-node': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/sdk-trace-base@1.24.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-zz+N423IcySgjihl2NfjBf0qw1RWe11XIAWVrTNOSSI6dtSPJiVom2zipFB2AEEtJWpv0Iz6DY6+TjnyTV5pWg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.1 + dev: false + + /@opentelemetry/sdk-trace-node@1.24.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-/FZX8uWaGIAwsDhqI8VvQ+qWtfMNlXjaFYGc+vmxgdRFppCSSIRwrPyIhJO1qx61okyYhoyxVEZAfoiNxrfJCg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/context-async-hooks': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/propagator-b3': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/propagator-jaeger': 1.24.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.24.1(@opentelemetry/api@1.8.0) + semver: 7.6.0 + dev: false + + /@opentelemetry/semantic-conventions@1.24.1: + resolution: {integrity: sha512-VkliWlS4/+GHLLW7J/rVBA00uXus1SWvwFvcUDxDwmFxYfg/2VI6ekwdXS28cjI8Qz2ky2BzG8OUHo+WeYIWqw==} + engines: {node: '>=14'} + dev: false + + /@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.1.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.1(@opentelemetry/api@1.8.0) + dev: false + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1355,6 +2404,49 @@ packages: dev: false optional: true + /@protobufjs/aspromise@1.1.2: + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + dev: false + + /@protobufjs/base64@1.1.2: + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + dev: false + + /@protobufjs/codegen@2.0.4: + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + dev: false + + /@protobufjs/eventemitter@1.1.0: + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + dev: false + + /@protobufjs/fetch@1.1.0: + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + dev: false + + /@protobufjs/float@1.0.2: + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + dev: false + + /@protobufjs/inquire@1.1.0: + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + dev: false + + /@protobufjs/path@1.1.2: + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + dev: false + + /@protobufjs/pool@1.1.0: + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + dev: false + + /@protobufjs/utf8@1.1.0: + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + dev: false + /@puppeteer/browsers@2.2.1: resolution: {integrity: sha512-QSXujx4d4ogDamQA8ckkkRieFzDgZEuZuGiey9G7CuDcbnX4iINKWxTPC5Br2AEzY9ICAvcndqgAUFMMKnS/Tw==} engines: {node: '>=18'} @@ -1557,6 +2649,16 @@ packages: resolution: {integrity: sha512-+jby/Guq9H8O7NWgCv6X8VAiQE8Dr/nccsCtL74xyHKhu2Knu5EAKmOZj3nLCnLm1KooUzKY+5DsnGVqhM8/wQ==} dev: true + /@types/accepts@1.3.7: + resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} + dependencies: + '@types/node': 20.11.25 + dev: false + + /@types/aws-lambda@8.10.122: + resolution: {integrity: sha512-vBkIh9AY22kVOCEKo5CJlyCgmSWvasC+SWUxL/x/vOwRobMpI/HG1xp/Ae3AqmSiZeLUbOhW0FCD3ZjqqUxmXw==} + dev: false + /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: @@ -1591,7 +2693,6 @@ packages: dependencies: '@types/connect': 3.4.38 '@types/node': 20.11.25 - dev: true /@types/bull@4.10.0: resolution: {integrity: sha512-RkYW8K2H3J76HT6twmHYbzJ0GtLDDotpLP9ah9gtiA7zfF6peBH1l5fEiK0oeIZ3/642M7Jcb9sPmor8Vf4w6g==} @@ -1602,11 +2703,35 @@ packages: - supports-color dev: true + /@types/bunyan@1.8.9: + resolution: {integrity: sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==} + dependencies: + '@types/node': 20.11.25 + dev: false + + /@types/connect@3.4.36: + resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} + dependencies: + '@types/node': 20.11.25 + dev: false + /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: '@types/node': 20.11.25 - dev: true + + /@types/content-disposition@0.5.8: + resolution: {integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==} + dev: false + + /@types/cookies@0.9.0: + resolution: {integrity: sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==} + dependencies: + '@types/connect': 3.4.38 + '@types/express': 4.17.21 + '@types/keygrip': 1.0.6 + '@types/node': 20.11.25 + dev: false /@types/cors@2.8.17: resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} @@ -1621,7 +2746,6 @@ packages: '@types/qs': 6.9.12 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - dev: true /@types/express@4.17.21: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} @@ -1630,7 +2754,6 @@ packages: '@types/express-serve-static-core': 4.17.43 '@types/qs': 6.9.12 '@types/serve-static': 1.15.5 - dev: true /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -1638,9 +2761,12 @@ packages: '@types/node': 20.11.25 dev: true + /@types/http-assert@1.5.5: + resolution: {integrity: sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==} + dev: false + /@types/http-errors@2.0.4: resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: true /@types/istanbul-lib-coverage@2.0.6: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -1665,13 +2791,52 @@ packages: pretty-format: 29.7.0 dev: true + /@types/keygrip@1.0.6: + resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} + dev: false + + /@types/koa-compose@3.2.8: + resolution: {integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==} + dependencies: + '@types/koa': 2.14.0 + dev: false + + /@types/koa@2.14.0: + resolution: {integrity: sha512-DTDUyznHGNHAl+wd1n0z1jxNajduyTh8R53xoewuerdBzGo6Ogj6F2299BFtrexJw4NtgjsI5SMPCmV9gZwGXA==} + dependencies: + '@types/accepts': 1.3.7 + '@types/content-disposition': 0.5.8 + '@types/cookies': 0.9.0 + '@types/http-assert': 1.5.5 + '@types/http-errors': 2.0.4 + '@types/keygrip': 1.0.6 + '@types/koa-compose': 3.2.8 + '@types/node': 20.11.25 + dev: false + + /@types/koa__router@12.0.3: + resolution: {integrity: sha512-5YUJVv6NwM1z7m6FuYpKfNLTZ932Z6EF6xy2BbtpJSyn13DKNQEkXVffFVSnJHxvwwWh2SAeumpjAYUELqgjyw==} + dependencies: + '@types/koa': 2.14.0 + dev: false + + /@types/memcached@2.2.10: + resolution: {integrity: sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==} + dependencies: + '@types/node': 20.11.25 + dev: false + /@types/mime@1.3.5: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: true /@types/mime@3.0.4: resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - dev: true + + /@types/mysql@2.15.22: + resolution: {integrity: sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==} + dependencies: + '@types/node': 20.11.25 + dev: false /@types/node-fetch@2.6.11: resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} @@ -1691,17 +2856,29 @@ packages: dependencies: undici-types: 5.26.5 + /@types/pg-pool@2.0.4: + resolution: {integrity: sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==} + dependencies: + '@types/pg': 8.6.1 + dev: false + + /@types/pg@8.6.1: + resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} + dependencies: + '@types/node': 20.11.25 + pg-protocol: 1.6.1 + pg-types: 2.2.0 + dev: false + /@types/phoenix@1.6.4: resolution: {integrity: sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==} dev: false /@types/qs@6.9.12: resolution: {integrity: sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==} - dev: true /@types/range-parser@1.2.7: resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: true /@types/retry@0.12.0: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -1712,7 +2889,6 @@ packages: dependencies: '@types/mime': 1.3.5 '@types/node': 20.11.25 - dev: true /@types/serve-static@1.15.5: resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} @@ -1720,7 +2896,10 @@ packages: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 '@types/node': 20.11.25 - dev: true + + /@types/shimmer@1.0.5: + resolution: {integrity: sha512-9Hp0ObzwwO57DpLFF0InUjUm/II8GmKAvzbefxQTihCb7KI6yc9yzf0nLc4mVdby5N4DRCgQM2wCup9KTieeww==} + dev: false /@types/stack-trace@0.0.29: resolution: {integrity: sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==} @@ -1730,6 +2909,16 @@ packages: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: true + /@types/tedious@4.0.14: + resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} + dependencies: + '@types/node': 20.11.25 + dev: false + + /@types/triple-beam@1.3.5: + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + dev: false + /@types/uuid@9.0.8: resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} dev: false @@ -1790,6 +2979,14 @@ packages: mime-types: 2.1.35 negotiator: 0.6.3 + /acorn-import-attributes@1.9.5(acorn@8.11.3): + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.11.3 + dev: false + /acorn-walk@8.3.2: resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} @@ -1799,7 +2996,6 @@ packages: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /afinn-165-financialmarketnews@3.0.0: resolution: {integrity: sha512-0g9A1S3ZomFIGDTzZ0t6xmv4AuokBvBmpes8htiyHpH7N4xDmvSQL6UxL/Zcs2ypRb3VwgCscaD8Q3zEawKYhw==} @@ -2083,6 +3279,10 @@ packages: engines: {node: '>=10.0.0'} dev: false + /bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + dev: false + /bin-links@4.0.3: resolution: {integrity: sha512-obsRaULtJurnfox/MDwgq6Yo9kzbv1CPTk/1/s7Z/61Lezc8IKkFCOXNeVLXz0456WRzBQmSsDWlai2tIhBsfA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -2193,6 +3393,13 @@ packages: ieee754: 1.2.1 dev: false + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + /bull@4.12.2: resolution: {integrity: sha512-WPuc0VCYx+cIVMiZtPwRpWyyJFBrj4/OgKJ6n9Jf4tIw7rQNV+HAKQv15UDkcTvfpGFehvod7Fd1YztbYSJIDQ==} engines: {node: '>=12'} @@ -2329,7 +3536,6 @@ packages: /cjs-module-lexer@1.2.3: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - dev: true /class-transformer@0.5.1: resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} @@ -2864,6 +4070,11 @@ packages: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} dev: false + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2946,6 +4157,10 @@ packages: transitivePeerDependencies: - supports-color + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + /extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} @@ -2992,6 +4207,10 @@ packages: pend: 1.2.0 dev: false + /fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + dev: false + /fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -3132,6 +4351,31 @@ packages: /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + /gaxios@6.6.0: + resolution: {integrity: sha512-bpOZVQV5gthH/jVCSuYuokRo2bTKOcuBiVWpjmTn6C5Agl5zclGfTljuGsQZxwwDBkli+YhZhP4TdlqTnhOezQ==} + engines: {node: '>=14'} + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.4 + is-stream: 2.0.1 + node-fetch: 2.7.0 + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /gcp-metadata@6.1.0: + resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} + engines: {node: '>=14'} + dependencies: + gaxios: 6.6.0 + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + /generic-pool@3.9.0: resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} engines: {node: '>= 4'} @@ -3362,6 +4606,15 @@ packages: resolve-from: 4.0.0 dev: false + /import-in-the-middle@1.7.4: + resolution: {integrity: sha512-Lk+qzWmiQuRPPulGQeK5qq0v32k2bHnWrRPFgqyvhw7Kkov5L6MOLOIU3pcWeujc9W4q54Cp3Q2WV16eQkc7Bg==} + dependencies: + acorn: 8.11.3 + acorn-import-attributes: 1.9.5(acorn@8.11.3) + cjs-module-lexer: 1.2.3 + module-details-from-path: 1.0.3 + dev: false + /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} @@ -3436,7 +4689,6 @@ packages: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.1 - dev: true /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -3482,7 +4734,6 @@ packages: /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - dev: true /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -4035,6 +5286,12 @@ packages: hasBin: true dev: true + /json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + dependencies: + bignumber.js: 9.1.2 + dev: false + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -4047,6 +5304,10 @@ packages: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: false + /json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: false + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -4393,19 +5654,51 @@ packages: p-locate: 4.1.0 dev: true + /lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + dev: false + /lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} /lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + /lodash.isobject@3.0.2: + resolution: {integrity: sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==} + dev: false + + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: false + + /lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + dev: false + /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: false + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + /logform@2.6.0: + resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==} + engines: {node: '>= 12.0.0'} + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.4.3 + triple-beam: 1.4.1 + dev: false + /loglevel@1.9.1: resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==} engines: {node: '>= 0.6.0'} @@ -4419,6 +5712,10 @@ packages: - encoding dev: false + /long@5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + dev: false + /lop@0.4.1: resolution: {integrity: sha512-9xyho9why2A2tzm5aIcMWKvzqKsnxrf9B5I+8O30olh6lQU8PH978LqZoI4++37RBgS1Em5i54v1TFs/3wnmXQ==} dependencies: @@ -4634,6 +5931,10 @@ packages: num-sort: 2.1.0 dev: false + /module-details-from-path@1.0.3: + resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} + dev: false + /moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} dev: false @@ -5077,7 +6378,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true /path-scurry@1.10.2: resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} @@ -5104,6 +6404,26 @@ packages: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} dev: false + /pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + dev: false + + /pg-protocol@1.6.1: + resolution: {integrity: sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==} + dev: false + + /pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + dev: false + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -5112,6 +6432,13 @@ packages: engines: {node: '>=8.6'} dev: true + /pino-abstract-transport@1.2.0: + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} + dependencies: + readable-stream: 4.5.2 + split2: 4.2.0 + dev: false + /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} @@ -5138,6 +6465,28 @@ packages: source-map-js: 1.0.2 dev: false + /postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + dev: false + + /postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + dependencies: + xtend: 4.0.2 + dev: false + /posthog-node@4.0.1: resolution: {integrity: sha512-rtqm2h22QxLGBrW2bLYzbRhliIrqgZ0k+gF0LkQ1SNdeD06YE5eilV0MxZppFSxC8TfH0+B0cWCuebEnreIDgQ==} engines: {node: '>=15.0.0'} @@ -5165,6 +6514,11 @@ packages: /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + /process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: false + /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -5199,6 +6553,25 @@ packages: sisteransi: 1.0.5 dev: true + /protobufjs@7.3.0: + resolution: {integrity: sha512-YWD03n3shzV9ImZRX3ccbjqLxj7NokGN0V/ESiBV5xWqrommYHYiihuIyavq03pWSGqlyvYUFmfoMKd+1rPA/g==} + engines: {node: '>=12.0.0'} + requiresBuild: true + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 20.11.25 + long: 5.2.3 + dev: false + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -5332,6 +6705,26 @@ packages: string_decoder: 1.1.1 util-deprecate: 1.0.2 + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false + + /readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + dev: false + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -5383,6 +6776,17 @@ packages: engines: {node: '>=0.10.0'} dev: false + /require-in-the-middle@7.3.0: + resolution: {integrity: sha512-nQFEv9gRw6SJAwWD2LrL0NmQvAcO7FBwJbwmr2ttPAacfy0xuiOjE5zt+zM4xDyuyvUaxBi/9gb2SoCyNEVJcw==} + engines: {node: '>=8.6.0'} + dependencies: + debug: 4.3.4 + module-details-from-path: 1.0.3 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: false + /resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -5412,7 +6816,6 @@ packages: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} @@ -5564,6 +6967,10 @@ packages: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: true + /shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + dev: false + /side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -5647,6 +7054,11 @@ packages: memory-pager: 1.5.0 dev: false + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: false + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -5722,6 +7134,12 @@ packages: dependencies: safe-buffer: 5.1.2 + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -5822,7 +7240,6 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true /sylvester@0.0.12: resolution: {integrity: sha512-SzRP5LQ6Ts2G5NyAa/jg16s8e3R7rfdFjizy1zeoecYWw+nGL+YA1xZvW/+iJmidBGSdLkuvdwTYEyJEb+EiUw==} @@ -5909,6 +7326,11 @@ packages: punycode: 2.3.1 dev: false + /triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + dev: false + /ts-jest@29.1.2(@babel/core@7.24.0)(jest@29.7.0)(typescript@5.4.2): resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} @@ -6193,6 +7615,15 @@ packages: dependencies: isexe: 2.0.0 + /winston-transport@4.7.0: + resolution: {integrity: sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==} + engines: {node: '>= 12.0.0'} + dependencies: + logform: 2.6.0 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + dev: false + /word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -6284,6 +7715,11 @@ packages: engines: {node: '>=4.0'} dev: false + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} diff --git a/apps/api/src/controllers/auth.ts b/apps/api/src/controllers/auth.ts index 4009d69..b0bfabb 100644 --- a/apps/api/src/controllers/auth.ts +++ b/apps/api/src/controllers/auth.ts @@ -4,11 +4,22 @@ import { AuthResponse, RateLimiterMode } from "../../src/types"; import { supabase_service } from "../../src/services/supabase"; import { withAuth } from "../../src/lib/withAuth"; import { RateLimiterRedis } from "rate-limiter-flexible"; +import { setTraceAttributes } from '@hyperdx/node-opentelemetry'; export async function authenticateUser(req, res, mode?: RateLimiterMode) : Promise { return withAuth(supaAuthenticateUser)(req, res, mode); } - +function setTrace(team_id: string, api_key: string) { + try { + setTraceAttributes({ + team_id, + api_key + }); + } catch (error) { + console.error('Error setting trace attributes:', error); + } + +} export async function supaAuthenticateUser( req, res, @@ -78,11 +89,13 @@ export async function supaAuthenticateUser( status: 401, }; } - - + const team_id = data[0].team_id; + const plan = getPlanByPriceId(data[0].price_id); + // HyperDX Logging + setTrace(team_id, normalizedApi); subscriptionData = { - team_id: data[0].team_id, - plan: getPlanByPriceId(data[0].price_id) + team_id: team_id, + plan: plan } switch (mode) { case RateLimiterMode.Crawl: diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index 27e8713..2579d4e 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -5,6 +5,8 @@ import "dotenv/config"; import { getWebScraperQueue } from "./services/queue-service"; import { redisClient } from "./services/rate-limiter"; import { v0Router } from "./routes/v0"; +import { initSDK } from '@hyperdx/node-opentelemetry'; + const { createBullBoard } = require("@bull-board/api"); const { BullAdapter } = require("@bull-board/api/bullAdapter"); const { ExpressAdapter } = require("@bull-board/express"); @@ -47,6 +49,9 @@ const DEFAULT_PORT = process.env.PORT ?? 3002; const HOST = process.env.HOST ?? "localhost"; redisClient.connect(); +// HyperDX OpenTelemetry +initSDK({ consoleCapture: true, additionalInstrumentations: []}); + export function startServer(port = DEFAULT_PORT) { const server = app.listen(Number(port), HOST, () => { diff --git a/apps/api/src/scraper/WebScraper/crawler.ts b/apps/api/src/scraper/WebScraper/crawler.ts index f53ef22..7827620 100644 --- a/apps/api/src/scraper/WebScraper/crawler.ts +++ b/apps/api/src/scraper/WebScraper/crawler.ts @@ -117,7 +117,7 @@ export class WebCrawler { const response = await axios.get(this.robotsTxtUrl); this.robots = robotsParser(this.robotsTxtUrl, response.data); } catch (error) { - console.error(`Failed to fetch robots.txt from ${this.robotsTxtUrl}`); + console.log(`Failed to fetch robots.txt from ${this.robotsTxtUrl}`); } diff --git a/apps/api/src/services/billing/credit_billing.ts b/apps/api/src/services/billing/credit_billing.ts index 892530c..4703a7f 100644 --- a/apps/api/src/services/billing/credit_billing.ts +++ b/apps/api/src/services/billing/credit_billing.ts @@ -227,10 +227,11 @@ export async function supaCheckTeamCredits(team_id: string, credits: number) { if (creditUsages && creditUsages.length > 0) { totalCreditsUsed = creditUsages[0].total_credits_used; - console.log("Total Credits Used:", totalCreditsUsed); + // console.log("Total Credits Used:", totalCreditsUsed); } } catch (error) { console.error("Error calculating credit usage:", error); + } // Adjust total credits used by subtracting coupon value const adjustedCreditsUsed = Math.max(0, totalCreditsUsed - couponCredits); diff --git a/apps/api/src/services/queue-worker.ts b/apps/api/src/services/queue-worker.ts index ef7bb1f..065f6d7 100644 --- a/apps/api/src/services/queue-worker.ts +++ b/apps/api/src/services/queue-worker.ts @@ -5,6 +5,9 @@ import { logtail } from "./logtail"; import { startWebScraperPipeline } from "../main/runWebScraper"; import { callWebhook } from "./webhook"; import { logJob } from "./logging/log_job"; +import { initSDK } from '@hyperdx/node-opentelemetry'; + +initSDK({ consoleCapture: true, additionalInstrumentations: []}); getWebScraperQueue().process( Math.floor(Number(process.env.NUM_WORKERS_PER_QUEUE ?? 8)), From 2644e1c0296155e53d1785d611bf31422269a787 Mon Sep 17 00:00:00 2001 From: Nicolas Date: Mon, 20 May 2024 13:36:51 -0700 Subject: [PATCH 07/16] Update .env.example --- apps/api/.env.example | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/api/.env.example b/apps/api/.env.example index 3bdfcf1..a2bffd0 100644 --- a/apps/api/.env.example +++ b/apps/api/.env.example @@ -31,3 +31,6 @@ POSTHOG_HOST= # set if you'd like to send posthog events like job logs STRIPE_PRICE_ID_STANDARD= STRIPE_PRICE_ID_SCALE= + +HYPERDX_API_KEY= +HDX_NODE_BETA_MODE=1 \ No newline at end of file From 77a79b5a79ec51f39b69f25a465d2b1dc6ed1af5 Mon Sep 17 00:00:00 2001 From: Nicolas Date: Mon, 20 May 2024 17:07:38 -0700 Subject: [PATCH 08/16] Nick: max num tokens for llm extract (for now) + slice the max --- apps/api/src/controllers/scrape.ts | 3 +++ apps/api/src/lib/LLM-extraction/models.ts | 24 +++++++++++++++---- apps/api/src/lib/entities.ts | 1 + .../scraper/WebScraper/utils/excludeTags.ts | 10 ++------ 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/apps/api/src/controllers/scrape.ts b/apps/api/src/controllers/scrape.ts index 449a50f..0b3f146 100644 --- a/apps/api/src/controllers/scrape.ts +++ b/apps/api/src/controllers/scrape.ts @@ -106,6 +106,9 @@ export async function scrapeController(req: Request, res: Response) { const extractorOptions = req.body.extractorOptions ?? { mode: "markdown" } + if (extractorOptions.mode === "llm-extraction") { + pageOptions.onlyMainContent = true; + } const origin = req.body.origin ?? "api"; const timeout = req.body.timeout ?? 30000; // Default timeout of 30 seconds diff --git a/apps/api/src/lib/LLM-extraction/models.ts b/apps/api/src/lib/LLM-extraction/models.ts index 4a25b43..1434e35 100644 --- a/apps/api/src/lib/LLM-extraction/models.ts +++ b/apps/api/src/lib/LLM-extraction/models.ts @@ -1,25 +1,38 @@ import OpenAI from "openai"; import { Document } from "../../lib/entities"; +import { numTokensFromString } from "./helpers"; export type ScraperCompletionResult = { data: any | null; url: string; }; +const maxTokens = 32000; +const modifier = 4; const defaultPrompt = "You are a professional web scraper. Extract the contents of the webpage"; function prepareOpenAIDoc( document: Document -): OpenAI.Chat.Completions.ChatCompletionContentPart[] { - // Check if the markdown content exists in the document - if (!document.markdown) { +): [OpenAI.Chat.Completions.ChatCompletionContentPart[], number] { + let markdown = document.markdown; + +// Check if the markdown content exists in the document + if (!markdown) { throw new Error( "Markdown content is missing in the document. This is likely due to an error in the scraping process. Please try again or reach out to help@mendable.ai" ); } - return [{ type: "text", text: document.markdown }]; + // count number of tokens + const numTokens = numTokensFromString(document.markdown, "gpt-4"); + + if (numTokens > maxTokens) { + // trim the document to the maximum number of tokens, tokens != characters + markdown = markdown.slice(0, (maxTokens * modifier)); + } + + return [[{ type: "text", text: markdown }], numTokens]; } export async function generateOpenAICompletions({ @@ -38,7 +51,7 @@ export async function generateOpenAICompletions({ temperature?: number; }): Promise { const openai = client as OpenAI; - const content = prepareOpenAIDoc(document); + const [content, numTokens] = prepareOpenAIDoc(document); const completion = await openai.chat.completions.create({ model, @@ -72,6 +85,7 @@ export async function generateOpenAICompletions({ return { ...document, llm_extraction: llmExtraction, + warning: numTokens > maxTokens ? `Page was trimmed to fit the maximum token limit defined by the LLM model (Max: ${maxTokens} tokens, Attemped: ${numTokens} tokens). If results are not good, email us at help@mendable.ai so we can help you.` : undefined, }; } diff --git a/apps/api/src/lib/entities.ts b/apps/api/src/lib/entities.ts index 15550be..ab0a0ef 100644 --- a/apps/api/src/lib/entities.ts +++ b/apps/api/src/lib/entities.ts @@ -72,6 +72,7 @@ export class Document { }; childrenLinks?: string[]; provider?: string; + warning?: string; constructor(data: Partial) { if (!data.content) { diff --git a/apps/api/src/scraper/WebScraper/utils/excludeTags.ts b/apps/api/src/scraper/WebScraper/utils/excludeTags.ts index 142bcef..bb9c519 100644 --- a/apps/api/src/scraper/WebScraper/utils/excludeTags.ts +++ b/apps/api/src/scraper/WebScraper/utils/excludeTags.ts @@ -34,8 +34,6 @@ export const excludeNonMainTags = [ "#nav", ".breadcrumbs", "#breadcrumbs", - ".form", - "form", "#search-form", ".search", "#search", @@ -51,10 +49,6 @@ export const excludeNonMainTags = [ "#tag", ".category", "#category", - ".comment", - "#comment", - ".reply", - "#reply", - ".author", - "#author", + ".cookie", + "#cookie" ]; From 01783dc336713ac549069c005c366d3021e2b25f Mon Sep 17 00:00:00 2001 From: Nicolas Date: Mon, 20 May 2024 17:10:55 -0700 Subject: [PATCH 09/16] Update openapi.json --- apps/api/openapi.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/apps/api/openapi.json b/apps/api/openapi.json index 98acbbb..b483bc4 100644 --- a/apps/api/openapi.json +++ b/apps/api/openapi.json @@ -479,6 +479,16 @@ "format": "uri" } } + }, + "llm_extraction": { + "type": "object", + "description": "Displayed when using LLM Extraction. Extracted data from the page following the schema defined.", + "nullable": true + }, + "warning": { + "type": "string", + "nullable": true, + "description": "Can be displayed when using LLM Extraction. Warning message will let you know any issues with the extraction." } } } From 2e264a4c759a17080848304b1ac0ccde0286a4f6 Mon Sep 17 00:00:00 2001 From: Nicolas Date: Tue, 21 May 2024 13:24:09 -0700 Subject: [PATCH 10/16] Update ci.yml --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0b24d07..049aeaf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,6 +25,9 @@ env: SUPABASE_SERVICE_TOKEN: ${{ secrets.SUPABASE_SERVICE_TOKEN }} SUPABASE_URL: ${{ secrets.SUPABASE_URL }} TEST_API_KEY: ${{ secrets.TEST_API_KEY }} + HYPERDX_API_KEY: ${{ secrets.HYPERDX_API_KEY }} + HDX_NODE_BETA_MODE: 1 + jobs: pre-deploy: From a5e718b0840a2888be2ad5105dfdcdc132313651 Mon Sep 17 00:00:00 2001 From: Nicolas Date: Tue, 21 May 2024 18:34:23 -0700 Subject: [PATCH 11/16] Nick: improvements --- apps/api/.env.example | 4 +- apps/api/src/lib/load-testing-example.ts | 42 ++++++++++ apps/api/src/scraper/WebScraper/single_url.ts | 82 +++++++++++++------ .../WebScraper/utils/custom/website_params.ts | 2 +- 4 files changed, 102 insertions(+), 28 deletions(-) create mode 100644 apps/api/src/lib/load-testing-example.ts diff --git a/apps/api/.env.example b/apps/api/.env.example index a2bffd0..659d68f 100644 --- a/apps/api/.env.example +++ b/apps/api/.env.example @@ -33,4 +33,6 @@ STRIPE_PRICE_ID_STANDARD= STRIPE_PRICE_ID_SCALE= HYPERDX_API_KEY= -HDX_NODE_BETA_MODE=1 \ No newline at end of file +HDX_NODE_BETA_MODE=1 + +FIRE_ENGINE_BETA_URL= # set if you'd like to use the fire engine closed beta \ No newline at end of file diff --git a/apps/api/src/lib/load-testing-example.ts b/apps/api/src/lib/load-testing-example.ts new file mode 100644 index 0000000..6fd56fc --- /dev/null +++ b/apps/api/src/lib/load-testing-example.ts @@ -0,0 +1,42 @@ +import { scrapWithFireEngine } from "../../src/scraper/WebScraper/single_url"; + +const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +const scrapInBatches = async ( + urls: string[], + batchSize: number, + delayMs: number +) => { + let successCount = 0; + let errorCount = 0; + + for (let i = 0; i < urls.length; i += batchSize) { + const batch = urls + .slice(i, i + batchSize) + .map((url) => scrapWithFireEngine(url)); + try { + const results = await Promise.all(batch); + results.forEach((data, index) => { + if (data.trim() === "") { + errorCount++; + } else { + successCount++; + console.log( + `Scraping result ${i + index + 1}:`, + data.trim().substring(0, 20) + "..." + ); + } + }); + } catch (error) { + console.error("Error during scraping:", error); + } + await delay(delayMs); + } + + console.log(`Total successful scrapes: ${successCount}`); + console.log(`Total errored scrapes: ${errorCount}`); +}; +function run() { + const urls = Array.from({ length: 200 }, () => "https://scrapethissite.com"); + scrapInBatches(urls, 10, 1000); +} diff --git a/apps/api/src/scraper/WebScraper/single_url.ts b/apps/api/src/scraper/WebScraper/single_url.ts index 4c08168..f58ec77 100644 --- a/apps/api/src/scraper/WebScraper/single_url.ts +++ b/apps/api/src/scraper/WebScraper/single_url.ts @@ -10,6 +10,15 @@ import { fetchAndProcessPdf } from "./utils/pdfProcessor"; dotenv.config(); +const baseScrapers = [ + "fire-engine", + "scrapingBee", + "playwright", + "scrapingBeeLoad", + "fetch", +] as const; + + export async function generateRequestParams( url: string, wait_browser: string = "domcontentloaded", @@ -33,15 +42,39 @@ export async function generateRequestParams( return defaultParams; } } -export async function scrapWithCustomFirecrawl( +export async function scrapWithFireEngine( url: string, options?: any ): Promise { try { - // TODO: merge the custom firecrawl scraper into mono-repo when ready - return null; + const reqParams = await generateRequestParams(url); + const wait_playwright = reqParams["params"]?.wait ?? 0; + + const response = await fetch(process.env.FIRE_ENGINE_BETA_URL+ "/scrape", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ url: url, wait: wait_playwright }), + }); + + if (!response.ok) { + console.error( + `[Fire-Engine] Error fetching url: ${url} with status: ${response.status}` + ); + return ""; + } + + const contentType = response.headers['content-type']; + if (contentType && contentType.includes('application/pdf')) { + return fetchAndProcessPdf(url); + } else { + const data = await response.json(); + const html = data.content; + return html ?? ""; + } } catch (error) { - console.error(`Error scraping with custom firecrawl-scraper: ${error}`); + console.error(`Error scraping with Fire Engine: ${error}`); return ""; } } @@ -63,7 +96,7 @@ export async function scrapWithScrapingBee( if (response.status !== 200 && response.status !== 404) { console.error( - `Scraping bee error in ${url} with status code ${response.status}` + `[ScrapingBee] Error fetching url: ${url} with status code ${response.status}` ); return ""; } @@ -77,7 +110,7 @@ export async function scrapWithScrapingBee( return text; } } catch (error) { - console.error(`Error scraping with Scraping Bee: ${error}`); + console.error(`[ScrapingBee] Error fetching url: ${url} -> ${error}`); return ""; } } @@ -97,7 +130,7 @@ export async function scrapWithPlaywright(url: string): Promise { if (!response.ok) { console.error( - `Error fetching w/ playwright server -> URL: ${url} with status: ${response.status}` + `[Playwright] Error fetching url: ${url} with status: ${response.status}` ); return ""; } @@ -111,11 +144,18 @@ export async function scrapWithPlaywright(url: string): Promise { return html ?? ""; } } catch (error) { - console.error(`Error scraping with Puppeteer: ${error}`); + console.error(`Error scraping with Playwright: ${error}`); return ""; } } +function getScrapingFallbackOrder(defaultScraper?: string) { + const fireEngineScraper = process.env.FIRE_ENGINE_BETA_URL ? ["fire-engine"] : []; + const uniqueScrapers = new Set(defaultScraper ? [defaultScraper, ...fireEngineScraper, ...baseScrapers] : [...fireEngineScraper, ...baseScrapers]); + const scrapersInOrder = Array.from(uniqueScrapers); + return scrapersInOrder as typeof baseScrapers[number][]; +} + export async function scrapSingleUrl( urlToScrap: string, pageOptions: PageOptions = { onlyMainContent: true, includeHtml: false }, @@ -137,17 +177,12 @@ export async function scrapSingleUrl( const attemptScraping = async ( url: string, - method: - | "firecrawl-scraper" - | "scrapingBee" - | "playwright" - | "scrapingBeeLoad" - | "fetch" + method: typeof baseScrapers[number] ) => { let text = ""; switch (method) { - case "firecrawl-scraper": - text = await scrapWithCustomFirecrawl(url); + case "fire-engine": + text = await scrapWithFireEngine(url); break; case "scrapingBee": if (process.env.SCRAPING_BEE_API_KEY) { @@ -205,15 +240,7 @@ export async function scrapSingleUrl( console.error(`Invalid URL key, trying: ${urlToScrap}`); } const defaultScraper = urlSpecificParams[urlKey]?.defaultScraper ?? ""; - const scrapersInOrder = defaultScraper - ? [ - defaultScraper, - "scrapingBee", - "playwright", - "scrapingBeeLoad", - "fetch", - ] - : ["scrapingBee", "playwright", "scrapingBeeLoad", "fetch"]; + const scrapersInOrder = getScrapingFallbackOrder(defaultScraper) for (const scraper of scrapersInOrder) { // If exists text coming from crawler, use it @@ -225,7 +252,10 @@ export async function scrapSingleUrl( } [text, html] = await attemptScraping(urlToScrap, scraper); if (text && text.trim().length >= 100) break; - console.log(`Falling back to ${scraper}`); + const nextScraperIndex = scrapersInOrder.indexOf(scraper) + 1; + if (nextScraperIndex < scrapersInOrder.length) { + console.info(`Falling back to ${scrapersInOrder[nextScraperIndex]}`); + } } if (!text) { diff --git a/apps/api/src/scraper/WebScraper/utils/custom/website_params.ts b/apps/api/src/scraper/WebScraper/utils/custom/website_params.ts index 32f5c08..9094fc3 100644 --- a/apps/api/src/scraper/WebScraper/utils/custom/website_params.ts +++ b/apps/api/src/scraper/WebScraper/utils/custom/website_params.ts @@ -63,7 +63,7 @@ export const urlSpecificParams = { }, }, "ycombinator.com":{ - defaultScraper: "playwright", + defaultScraper: "fire-engine", params: { wait_browser: "networkidle2", block_resources: false, From a8ff2959779c318de8b8b0ddb23f40406eb26a57 Mon Sep 17 00:00:00 2001 From: Nicolas Date: Tue, 21 May 2024 18:50:42 -0700 Subject: [PATCH 12/16] Update single_url.ts --- apps/api/src/scraper/WebScraper/single_url.ts | 78 +++++++++++++------ 1 file changed, 53 insertions(+), 25 deletions(-) diff --git a/apps/api/src/scraper/WebScraper/single_url.ts b/apps/api/src/scraper/WebScraper/single_url.ts index f58ec77..419bdba 100644 --- a/apps/api/src/scraper/WebScraper/single_url.ts +++ b/apps/api/src/scraper/WebScraper/single_url.ts @@ -74,7 +74,7 @@ export async function scrapWithFireEngine( return html ?? ""; } } catch (error) { - console.error(`Error scraping with Fire Engine: ${error}`); + console.error(`[Fire-Engine][c] Error fetching url: ${url} -> ${error}`); return ""; } } @@ -110,7 +110,7 @@ export async function scrapWithScrapingBee( return text; } } catch (error) { - console.error(`[ScrapingBee] Error fetching url: ${url} -> ${error}`); + console.error(`[ScrapingBee][c] Error fetching url: ${url} -> ${error}`); return ""; } } @@ -144,14 +144,58 @@ export async function scrapWithPlaywright(url: string): Promise { return html ?? ""; } } catch (error) { - console.error(`Error scraping with Playwright: ${error}`); + console.error(`[Playwright][c] Error fetching url: ${url} -> ${error}`); return ""; } } +export async function scrapWithFetch(url: string): Promise { + try { + const response = await fetch(url); + if (!response.ok) { + console.error( + `[Fetch] Error fetching url: ${url} with status: ${response.status}` + ); + return ""; + } + + const contentType = response.headers['content-type']; + if (contentType && contentType.includes('application/pdf')) { + return fetchAndProcessPdf(url); + } else { + const text = await response.text(); + return text; + } + } catch (error) { + console.error(`[Fetch][c] Error fetching url: ${url} -> ${error}`); + return ""; + } +} + +/** + * Get the order of scrapers to be used for scraping a URL + * If the user doesn't have envs set for a specific scraper, it will be removed from the order. + * @param defaultScraper The default scraper to use if the URL does not have a specific scraper order defined + * @returns The order of scrapers to be used for scraping a URL + */ function getScrapingFallbackOrder(defaultScraper?: string) { - const fireEngineScraper = process.env.FIRE_ENGINE_BETA_URL ? ["fire-engine"] : []; - const uniqueScrapers = new Set(defaultScraper ? [defaultScraper, ...fireEngineScraper, ...baseScrapers] : [...fireEngineScraper, ...baseScrapers]); + const availableScrapers = baseScrapers.filter(scraper => { + switch (scraper) { + case "scrapingBee": + case "scrapingBeeLoad": + return !!process.env.SCRAPING_BEE_API_KEY; + case "fire-engine": + return !!process.env.FIRE_ENGINE_BETA_URL; + case "playwright": + return !!process.env.PLAYWRIGHT_MICROSERVICE_URL; + default: + return true; + } + }); + + const defaultOrder = ["scrapingBee", "fire-engine", "playwright", "scrapingBeeLoad", "fetch"]; + const filteredDefaultOrder = defaultOrder.filter((scraper: typeof baseScrapers[number]) => availableScrapers.includes(scraper)); + const uniqueScrapers = new Set(defaultScraper ? [defaultScraper, ...filteredDefaultOrder, ...availableScrapers] : [...filteredDefaultOrder, ...availableScrapers]); const scrapersInOrder = Array.from(uniqueScrapers); return scrapersInOrder as typeof baseScrapers[number][]; } @@ -182,7 +226,9 @@ export async function scrapSingleUrl( let text = ""; switch (method) { case "fire-engine": - text = await scrapWithFireEngine(url); + if (process.env.FIRE_ENGINE_BETA_URL) { + text = await scrapWithFireEngine(url); + } break; case "scrapingBee": if (process.env.SCRAPING_BEE_API_KEY) { @@ -204,25 +250,7 @@ export async function scrapSingleUrl( } break; case "fetch": - try { - const response = await fetch(url); - if (!response.ok) { - console.error( - `Error fetching URL: ${url} with status: ${response.status}` - ); - return ""; - } - - const contentType = response.headers['content-type']; - if (contentType && contentType.includes('application/pdf')) { - return fetchAndProcessPdf(url); - } else { - text = await response.text(); - } - } catch (error) { - console.error(`Error scraping URL: ${error}`); - return ""; - } + text = await scrapWithFetch(url); break; } From 229b9908d21dc33c52dfdee420b0a6c14dc4477f Mon Sep 17 00:00:00 2001 From: Nicolas Date: Tue, 21 May 2024 18:52:46 -0700 Subject: [PATCH 13/16] Nick: only enable hyper dx in prod --- apps/api/src/index.ts | 4 +++- apps/api/src/services/queue-worker.ts | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index 2579d4e..326728e 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -50,7 +50,9 @@ const HOST = process.env.HOST ?? "localhost"; redisClient.connect(); // HyperDX OpenTelemetry -initSDK({ consoleCapture: true, additionalInstrumentations: []}); +if(process.env.ENV === 'production') { + initSDK({ consoleCapture: true, additionalInstrumentations: []}); +} export function startServer(port = DEFAULT_PORT) { diff --git a/apps/api/src/services/queue-worker.ts b/apps/api/src/services/queue-worker.ts index 065f6d7..6772c57 100644 --- a/apps/api/src/services/queue-worker.ts +++ b/apps/api/src/services/queue-worker.ts @@ -7,7 +7,9 @@ import { callWebhook } from "./webhook"; import { logJob } from "./logging/log_job"; import { initSDK } from '@hyperdx/node-opentelemetry'; -initSDK({ consoleCapture: true, additionalInstrumentations: []}); +if(process.env.ENV === 'production') { + initSDK({ consoleCapture: true, additionalInstrumentations: []}); +} getWebScraperQueue().process( Math.floor(Number(process.env.NUM_WORKERS_PER_QUEUE ?? 8)), From 253abb849fc277e5bf8a1b168ff6e0d318679197 Mon Sep 17 00:00:00 2001 From: Nicolas Date: Tue, 21 May 2024 18:53:58 -0700 Subject: [PATCH 14/16] Update rate-limiter.ts --- apps/api/src/services/rate-limiter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/api/src/services/rate-limiter.ts b/apps/api/src/services/rate-limiter.ts index 5bc48c9..5fa0964 100644 --- a/apps/api/src/services/rate-limiter.ts +++ b/apps/api/src/services/rate-limiter.ts @@ -54,7 +54,7 @@ export const testSuiteRateLimiter = new RateLimiterRedis({ export function getRateLimiter(mode: RateLimiterMode, token: string, plan?: string){ // Special test suite case. TODO: Change this later. - if (token.includes("5089cefa58")){ + if (token.includes("5089cefa58") || token.includes("6254cf9")){ return testSuiteRateLimiter; } switch (mode) { From cb2bd0e71fcf454b27b39385975385536bcfca84 Mon Sep 17 00:00:00 2001 From: Nicolas Date: Tue, 21 May 2024 19:03:32 -0700 Subject: [PATCH 15/16] Update index.test.ts --- .../api/src/__tests__/e2e_withAuth/index.test.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/api/src/__tests__/e2e_withAuth/index.test.ts b/apps/api/src/__tests__/e2e_withAuth/index.test.ts index e9082ca..331283e 100644 --- a/apps/api/src/__tests__/e2e_withAuth/index.test.ts +++ b/apps/api/src/__tests__/e2e_withAuth/index.test.ts @@ -81,7 +81,7 @@ describe("E2E Tests for API Routes", () => { expect(response.body.data).toHaveProperty("markdown"); expect(response.body.data).toHaveProperty("metadata"); expect(response.body.data).not.toHaveProperty("html"); - expect(response.body.data.content).toContain("🔥 FireCrawl"); + expect(response.body.data.content).toContain("🔥 Firecrawl"); }, 30000); // 30 seconds timeout it("should return a successful response with a valid API key and includeHtml set to true", async () => { @@ -99,8 +99,8 @@ describe("E2E Tests for API Routes", () => { expect(response.body.data).toHaveProperty("markdown"); expect(response.body.data).toHaveProperty("html"); expect(response.body.data).toHaveProperty("metadata"); - expect(response.body.data.content).toContain("🔥 FireCrawl"); - expect(response.body.data.markdown).toContain("🔥 FireCrawl"); + expect(response.body.data.content).toContain("🔥 Firecrawl"); + expect(response.body.data.markdown).toContain("🔥 Firecrawl"); expect(response.body.data.html).toContain(" { // 120 seconds expect(completedResponse.body.data[0]).toHaveProperty("html"); expect(completedResponse.body.data[0]).toHaveProperty("metadata"); - expect(completedResponse.body.data[0].content).toContain("🔥 FireCrawl"); - expect(completedResponse.body.data[0].markdown).toContain("FireCrawl"); + expect(completedResponse.body.data[0].content).toContain("🔥 Firecrawl"); + expect(completedResponse.body.data[0].markdown).toContain("Firecrawl"); expect(completedResponse.body.data[0].html).toContain(" { expect(completedResponse.body.data[0]).toHaveProperty("content"); expect(completedResponse.body.data[0]).toHaveProperty("markdown"); expect(completedResponse.body.data[0]).toHaveProperty("metadata"); - expect(completedResponse.body.data[0].content).toContain("🔥 FireCrawl"); + expect(completedResponse.body.data[0].content).toContain("🔥 Firecrawl"); }, 60000); // 60 seconds it('should return a successful response for a valid crawl job with PDF files without explicit .pdf extension', async () => { @@ -697,8 +697,8 @@ describe("E2E Tests for API Routes", () => { // 120 seconds expect(completedResponse.body.data[0]).toHaveProperty("html"); expect(completedResponse.body.data[0]).toHaveProperty("metadata"); - expect(completedResponse.body.data[0].content).toContain("🔥 FireCrawl"); - expect(completedResponse.body.data[0].markdown).toContain("FireCrawl"); + expect(completedResponse.body.data[0].content).toContain("🔥 Firecrawl"); + expect(completedResponse.body.data[0].markdown).toContain("Firecrawl"); expect(completedResponse.body.data[0].html).toContain(" Date: Wed, 22 May 2024 14:38:41 -0300 Subject: [PATCH 16/16] Update index.test.ts --- apps/api/src/__tests__/e2e_withAuth/index.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/api/src/__tests__/e2e_withAuth/index.test.ts b/apps/api/src/__tests__/e2e_withAuth/index.test.ts index 331283e..39825c4 100644 --- a/apps/api/src/__tests__/e2e_withAuth/index.test.ts +++ b/apps/api/src/__tests__/e2e_withAuth/index.test.ts @@ -266,7 +266,7 @@ describe("E2E Tests for API Routes", () => { urls.forEach((url: string) => { expect(url.startsWith("https://wwww.mendable.ai/blog/")).toBeFalsy(); }); - }, 60000); // 60 seconds + }, 90000); // 90 seconds it("should return a successful response with a valid API key and limit to 3", async () => { const crawlResponse = await request(TEST_URL)