Repository: formbricks/formbricks
Pull request #5672: chore: updated open telemtry package versions
Author: login: Dhruwang
Created: 2025-05-06T11:24:54Z | Merged: 2025-05-06T12:15:54Z

<!-- We require pull request titles to follow the Conventional Commits specification ( https://www.conventionalcommits.org/en/v1.0.0/#summary ). Please make sure your title follow these conventions -->

## What does this PR do?

<!-- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. -->

Fixes #5378 

<!-- Please provide a screenshots or a loom video for visual changes to speed up reviews
 Loom Video: https://www.loom.com/
-->

## How should this be tested?

<!-- Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration -->

test open telemetry setup

## Checklist

<!-- We're starting to get more and more contributions. Please help us making this efficient for all of us and go through this checklist. Please tick off what you did  -->

### Required

- [x] Filled out the "How to test" section in this PR
- [x] Read [How we Code at Formbricks](<[https://github.com/formbricks/formbricks/blob/main/CONTRIBUTING.md](https://formbricks.com/docs/contributing/how-we-code)>)
- [x] Self-reviewed my own code
- [x] Commented on my code in hard-to-understand bits
- [x] Ran `pnpm build`
- [x] Checked for warnings, there are none
- [x] Removed all `console.logs`
- [x] Merged the latest changes from main onto my branch with `git pull origin main`
- [x] My changes don't cause any responsiveness issues
- [x] First PR at Formbricks? [Please sign the CLA!](https://cla-assistant.io/formbricks/formbricks) Without it we wont be able to merge it 🙏

### Appreciated

- [x] If a UI change was made: Added a screen recording or screenshots to this PR
- [x] Updated the Formbricks Docs if changes were necessary


<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Chores**
  - Updated several OpenTelemetry dependencies to newer versions.
  - Removed the unused `@opentelemetry/api-logs` package from dependencies.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Linked issue #5378: Update the open telemetry dependencies to the latest version
### Task description

The open telemetry dependencies in `apps/web` are outdated. A simple version update using [npm check updates](https://github.com/raineorshine/npm-check-updates) led to to some compatibility issues with our existing code.

Please update all open telemetry dependencies and fix the code errors if any occur :-) 

Diff:
diff --git a/apps/web/instrumentation-node.ts b/apps/web/instrumentation-node.ts
index ef3de4c70c17..3e43e9f5c151 100644
--- a/apps/web/instrumentation-node.ts
+++ b/apps/web/instrumentation-node.ts
@@ -6,11 +6,11 @@ import { registerInstrumentations } from "@opentelemetry/instrumentation";
 import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
 import { RuntimeNodeInstrumentation } from "@opentelemetry/instrumentation-runtime-node";
 import {
-  Resource,
-  detectResourcesSync,
+  detectResources,
   envDetector,
   hostDetector,
   processDetector,
+  resourceFromAttributes,
 } from "@opentelemetry/resources";
 import { MeterProvider } from "@opentelemetry/sdk-metrics";
 import { logger } from "@formbricks/logger";
@@ -21,11 +21,11 @@ const exporter = new PrometheusExporter({
   host: "0.0.0.0", // Listen on all network interfaces
 });
 
-const detectedResources = detectResourcesSync({
+const detectedResources = detectResources({
   detectors: [envDetector, processDetector, hostDetector],
 });
 
-const customResources = new Resource({});
+const customResources = resourceFromAttributes({});
 
 const resources = detectedResources.merge(customResources);
 
diff --git a/apps/web/package.json b/apps/web/package.json
index f44a0ae1591c..32ee3c43a0f8 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -41,14 +41,13 @@
     "@lexical/react": "0.31.0",
     "@lexical/rich-text": "0.31.0",
     "@lexical/table": "0.31.0",
-    "@opentelemetry/api-logs": "0.56.0",
-    "@opentelemetry/exporter-prometheus": "0.57.2",
-    "@opentelemetry/host-metrics": "0.35.5",
-    "@opentelemetry/instrumentation": "0.57.2",
-    "@opentelemetry/instrumentation-http": "0.57.2",
-    "@opentelemetry/instrumentation-runtime-node": "0.12.2",
-    "@opentelemetry/sdk-logs": "0.56.0",
-    "@opentelemetry/sdk-metrics": "1.30.1",
+    "@opentelemetry/exporter-prometheus": "0.200.0",
+    "@opentelemetry/host-metrics": "0.36.0",
+    "@opentelemetry/instrumentation": "0.200.0",
+    "@opentelemetry/instrumentation-http": "0.200.0",
+    "@opentelemetry/instrumentation-runtime-node": "0.14.0",
+    "@opentelemetry/sdk-logs": "0.200.0",
+    "@opentelemetry/sdk-metrics": "2.0.0",
     "@paralleldrive/cuid2": "2.2.2",
     "@prisma/client": "6.7.0",
     "@radix-ui/react-accordion": "1.2.9",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index dbc9c1161cfb..b54078fdabf7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -181,30 +181,27 @@ importers:
       '@lexical/table':
         specifier: 0.31.0
         version: 0.31.0
-      '@opentelemetry/api-logs':
-        specifier: 0.56.0
-        version: 0.56.0
       '@opentelemetry/exporter-prometheus':
-        specifier: 0.57.2
-        version: 0.57.2(@opentelemetry/api@1.9.0)
+        specifier: 0.200.0
+        version: 0.200.0(@opentelemetry/api@1.9.0)
       '@opentelemetry/host-metrics':
-        specifier: 0.35.5
-        version: 0.35.5(@opentelemetry/api@1.9.0)
+        specifier: 0.36.0
+        version: 0.36.0(@opentelemetry/api@1.9.0)
       '@opentelemetry/instrumentation':
-        specifier: 0.57.2
-        version: 0.57.2(@opentelemetry/api@1.9.0)
+        specifier: 0.200.0
+        version: 0.200.0(@opentelemetry/api@1.9.0)
       '@opentelemetry/instrumentation-http':
-        specifier: 0.57.2
-        version: 0.57.2(@opentelemetry/api@1.9.0)
+        specifier: 0.200.0
+        version: 0.200.0(@opentelemetry/api@1.9.0)
       '@opentelemetry/instrumentation-runtime-node':
-        specifier: 0.12.2
-        version: 0.12.2(@opentelemetry/api@1.9.0)
+        specifier: 0.14.0
+        version: 0.14.0(@opentelemetry/api@1.9.0)
       '@opentelemetry/sdk-logs':
-        specifier: 0.56.0
-        version: 0.56.0(@opentelemetry/api@1.9.0)
+        specifier: 0.200.0
+        version: 0.200.0(@opentelemetry/api@1.9.0)
       '@opentelemetry/sdk-metrics':
-        specifier: 1.30.1
-        version: 1.30.1(@opentelemetry/api@1.9.0)
+        specifier: 2.0.0
+        version: 2.0.0(@opentelemetry/api@1.9.0)
       '@paralleldrive/cuid2':
         specifier: 2.2.2
         version: 2.2.2
@@ -267,7 +264,7 @@ importers:
         version: 0.0.38(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
       '@sentry/nextjs':
         specifier: 9.15.0
-        version: 9.15.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.7)
+        version: 9.15.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.7)
       '@t3-oss/env-nextjs':
         specifier: 0.13.4
         version: 0.13.4(arktype@2.1.20)(typescript@5.8.3)(zod@3.24.1)
@@ -2009,9 +2006,9 @@ packages:
     engines: {node: '>=10'}
     deprecated: This functionality has been moved to @npmcli/fs
 
-  '@opentelemetry/api-logs@0.56.0':
-    resolution: {integrity: sha512-Wr39+94UNNG3Ei9nv3pHd4AJ63gq5nSemMRpCd8fPwDL9rN3vK26lzxfH27mw16XzOSO+TpyQwBAMaLxaPWG0g==}
-    engines: {node: '>=14'}
+  '@opentelemetry/api-logs@0.200.0':
+    resolution: {integrity: sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q==}
+    engines: {node: '>=8.0.0'}
 
   '@opentelemetry/api-logs@0.57.1':
     resolution: {integrity: sha512-I4PHczeujhQAQv6ZBzqHYEUiggZL4IdSMixtVD3EYqbdrjujE7kRfI5QohjlPoJm8BvenoW5YaTMWRrbpot6tg==}
@@ -2031,15 +2028,15 @@ packages:
     peerDependencies:
       '@opentelemetry/api': '>=1.0.0 <1.10.0'
 
-  '@opentelemetry/core@1.29.0':
-    resolution: {integrity: sha512-gmT7vAreXl0DTHD2rVZcw3+l2g84+5XiHIqdBUxXbExymPCvSsGOpiwMmn8nkiJur28STV31wnhIDrzWDPzjfA==}
+  '@opentelemetry/core@1.30.1':
+    resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': '>=1.0.0 <1.10.0'
 
-  '@opentelemetry/core@1.30.1':
-    resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==}
-    engines: {node: '>=14'}
+  '@opentelemetry/core@2.0.0':
+    resolution: {integrity: sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==}
+    engines: {node: ^18.19.0 || >=20.6.0}
     peerDependencies:
       '@opentelemetry/api': '>=1.0.0 <1.10.0'
 
@@ -2055,15 +2052,15 @@ packages:
     peerDependencies:
       '@opentelemetry/api': ^1.3.0
 
-  '@opentelemetry/exporter-prometheus@0.57.2':
-    resolution: {integrity: sha512-VqIqXnuxWMWE/1NatAGtB1PvsQipwxDcdG4RwA/umdBcW3/iOHp0uejvFHTRN2O78ZPged87ErJajyUBPUhlDQ==}
-    engines: {node: '>=14'}
+  '@opentelemetry/exporter-prometheus@0.200.0':
+    resolution: {integrity: sha512-ZYdlU9r0USuuYppiDyU2VFRA0kFl855ylnb3N/2aOlXrbA4PMCznen7gmPbetGQu7pz8Jbaf4fwvrDnVdQQXSw==}
+    engines: {node: ^18.19.0 || >=20.6.0}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0
 
-  '@opentelemetry/host-metrics@0.35.5':
-    resolution: {integrity: sha512-Zf9Cjl7H6JalspnK5KD1+LLKSVecSinouVctNmUxRy+WP+20KwHq+qg4hADllkEmJ99MZByLLmEmzrr7s92V6g==}
-    engines: {node: '>=14'}
+  '@opentelemetry/host-metrics@0.36.0':
+    resolution: {integrity: sha512-14lNY57qa21V3ZOl6xrqLMHR0HGlnPIApR6hr3oCw/Dqs5IzxhTwt2X8Stn82vWJJis7j/ezn11oODsizHj2dQ==}
+    engines: {node: ^18.19.0 || >=20.6.0}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0
 
@@ -2121,6 +2118,12 @@ packages:
     peerDependencies:
       '@opentelemetry/api': ^1.3.0
 
+  '@opentelemetry/instrumentation-http@0.200.0':
+    resolution: {integrity: sha512-9tqGbCJikhYU68y3k9mi6yWsMyMeCcwoQuHvIXan5VvvPPQ5WIZaV6Mxu/MCVe4swRNoFs8Th+qyj0TZV5ELvw==}
+    engines: {node: ^18.19.0 || >=20.6.0}
+    peerDependencies:
+      '@opentelemetry/api': ^1.3.0
+
   '@opentelemetry/instrumentation-http@0.57.2':
     resolution: {integrity: sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==}
     engines: {node: '>=14'}
@@ -2193,9 +2196,9 @@ packages:
     peerDependencies:
       '@opentelemetry/api': ^1.3.0
 
-  '@opentelemetry/instrumentation-runtime-node@0.12.2':
-    resolution: {integrity: sha512-HNBW1rJiHDBTHQlh5oH1IAcV8O5VR7/L5BBOfGAMpGno3Jq9cNqTh96uUp0qBXBuxD8Yl1eoI5N+B5TdmjLteQ==}
-    engines: {node: '>=17.4.0'}
+  '@opentelemetry/instrumentation-runtime-node@0.14.0':
+    resolution: {integrity: sha512-y78dGoFMKwHSz0SD113Gt1dFTcfunpPZXIJh2SzJN27Lyb9FIzuMfjc3Iu3+s/N6qNOLuS9mKnPe3/qVGG4Waw==}
+    engines: {node: ^18.19.0 || >=20.6.0}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0
 
@@ -2211,6 +2214,12 @@ packages:
     peerDependencies:
       '@opentelemetry/api': ^1.7.0
 
+  '@opentelemetry/instrumentation@0.200.0':
+    resolution: {integrity: sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg==}
+    engines: {node: ^18.19.0 || >=20.6.0}
+    peerDependencies:
+      '@opentelemetry/api': ^1.3.0
+
   '@opentelemetry/instrumentation@0.57.2':
     resolution: {integrity: sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==}
     engines: {node: '>=14'}
@@ -2239,21 +2248,21 @@ packages:
     resolution: {integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==}
     engines: {node: '>=14'}
 
-  '@opentelemetry/resources@1.29.0':
-    resolution: {integrity: sha512-s7mLXuHZE7RQr1wwweGcaRp3Q4UJJ0wazeGlc/N5/XSe6UyXfsh1UQGMADYeg7YwD+cEdMtU1yJAUXdnFzYzyQ==}
-    engines: {node: '>=14'}
-    peerDependencies:
-      '@opentelemetry/api': '>=1.0.0 <1.10.0'
-
   '@opentelemetry/resources@1.30.1':
     resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': '>=1.0.0 <1.10.0'
 
-  '@opentelemetry/sdk-logs@0.56.0':
-    resolution: {integrity: sha512-OS0WPBJF++R/cSl+terUjQH5PebloidB1Jbbecgg2rnCmQbTST9xsRes23bLfDQVRvmegmHqDh884h0aRdJyLw==}
-    engines: {node: '>=14'}
+  '@opentelemetry/resources@2.0.0':
+    resolution: {integrity: sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg==}
+    engines: {node: ^18.19.0 || >=20.6.0}
+    peerDependencies:
+      '@opentelemetry/api': '>=1.3.0 <1.10.0'
+
+  '@opentelemetry/sdk-logs@0.200.0':
+    resolution: {integrity: sha512-VZG870063NLfObmQQNtCVcdXXLzI3vOjjrRENmU37HYiPFa0ZXpXVDsTD02Nh3AT3xYJzQaWKl2X2lQ2l7TWJA==}
+    engines: {node: ^18.19.0 || >=20.6.0}
     peerDependencies:
       '@opentelemetry/api': '>=1.4.0 <1.10.0'
 
@@ -2269,6 +2278,12 @@ packages:
     peerDependencies:
       '@opentelemetry/api': '>=1.3.0 <1.10.0'
 
+  '@opentelemetry/sdk-metrics@2.0.0':
+    resolution: {integrity: sha512-Bvy8QDjO05umd0+j+gDeWcTaVa1/R2lDj/eOvjzpm8VQj1K1vVZJuyjThpV5/lSHyYW2JaHF2IQ7Z8twJFAhjA==}
+    engines: {node: ^18.19.0 || >=20.6.0}
+    peerDependencies:
+      '@opentelemetry/api': '>=1.9.0 <1.10.0'
+
   '@opentelemetry/sdk-trace-base@1.30.1':
     resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==}
     engines: {node: '>=14'}
@@ -11996,7 +12011,7 @@ snapshots:
       rimraf: 3.0.2
     optional: true
 
-  '@opentelemetry/api-logs@0.56.0':
+  '@opentelemetry/api-logs@0.200.0':
     dependencies:
       '@opentelemetry/api': 1.9.0
 
@@ -12014,15 +12029,15 @@ snapshots:
     dependencies:
       '@opentelemetry/api': 1.9.0
 
-  '@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0)':
+  '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)':
     dependencies:
       '@opentelemetry/api': 1.9.0
       '@opentelemetry/semantic-conventions': 1.28.0
 
-  '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)':
+  '@opentelemetry/core@2.0.0(@opentelemetry/api@1.9.0)':
     dependencies:
       '@opentelemetry/api': 1.9.0
-      '@opentelemetry/semantic-conventions': 1.28.0
+      '@opentelemetry/semantic-conventions': 1.32.0
 
   '@opentelemetry/exporter-metrics-otlp-grpc@0.57.1(@opentelemetry/api@1.9.0)':
     dependencies:
@@ -12045,14 +12060,14 @@ snapshots:
       '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0)
       '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.0)
 
-  '@opentelemetry/exporter-prometheus@0.57.2(@opentelemetry/api@1.9.0)':
+  '@opentelemetry/exporter-prometheus@0.200.0(@opentelemetry/api@1.9.0)':
     dependencies:
       '@opentelemetry/api': 1.9.0
-      '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
-      '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0)
-      '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.0)
+      '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0)
+      '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0)
+      '@opentelemetry/sdk-metrics': 2.0.0(@opentelemetry/api@1.9.0)
 
-  '@opentelemetry/host-metrics@0.35.5(@opentelemetry/api@1.9.0)':
+  '@opentelemetry/host-metrics@0.36.0(@opentelemetry/api@1.9.0)':
     dependencies:
       '@opentelemetry/api': 1.9.0
       systeminformation: 5.23.8
@@ -12132,6 +12147,16 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@opentelemetry/instrumentation-http@0.200.0(@opentelemetry/api@1.9.0)':
+    dependencies:
+      '@opentelemetry/api': 1.9.0
+      '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0)
+      '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0)
+      '@opentelemetry/semantic-conventions': 1.32.0
+      forwarded-parse: 2.1.2
+    transitivePeerDependencies:
+      - supports-color
+
   '@opentelemetry/instrumentation-http@0.57.2(@opentelemetry/api@1.9.0)':
     dependencies:
       '@opentelemetry/api': 1.9.0
@@ -12240,10 +12265,10 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@opentelemetry/instrumentation-runtime-node@0.12.2(@opentelemetry/api@1.9.0)':
+  '@opentelemetry/instrumentation-runtime-node@0.14.0(@opentelemetry/api@1.9.0)':
     dependencies:
       '@opentelemetry/api': 1.9.0
-      '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0)
+      '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0)
     transitivePeerDependencies:
       - supports-color
 
@@ -12264,6 +12289,17 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.0)':
+    dependencies:
+      '@opentelemetry/api': 1.9.0
+      '@opentelemetry/api-logs': 0.200.0
+      '@types/shimmer': 1.2.0
+      import-in-the-middle: 1.13.1
+      require-in-the-middle: 7.5.2
+      shimmer: 1.2.1
+    transitivePeerDependencies:
+      - supports-color
+
   '@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0)':
     dependencies:
       '@opentelemetry/api': 1.9.0
@@ -12303,24 +12339,24 @@ snapshots:
 
   '@opentelemetry/redis-common@0.36.2': {}
 
-  '@opentelemetry/resources@1.29.0(@opentelemetry/api@1.9.0)':
+  '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)':
     dependencies:
       '@opentelemetry/api': 1.9.0
-      '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0)
+      '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
       '@opentelemetry/semantic-conventions': 1.28.0
 
-  '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)':
+  '@opentelemetry/resources@2.0.0(@opentelemetry/api@1.9.0)':
     dependencies:
       '@opentelemetry/api': 1.9.0
-      '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
-      '@opentelemetry/semantic-conventions': 1.28.0
+      '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0)
+      '@opentelemetry/semantic-conventions': 1.32.0
 
-  '@opentelemetry/sdk-logs@0.56.0(@opentelemetry/api@1.9.0)':
+  '@opentelemetry/sdk-logs@0.200.0(@opentelemetry/api@1.9.0)':
     dependencies:
       '@opentelemetry/api': 1.9.0
-      '@opentelemetry/api-logs': 0.56.0
-      '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0)
-      '@opentelemetry/resources': 1.29.0(@opentelemetry/api@1.9.0)
+      '@opentelemetry/api-logs': 0.200.0
+      '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0)
+      '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0)
 
   '@opentelemetry/sdk-logs@0.57.1(@opentelemetry/api@1.9.0)':
     dependencies:
@@ -12335,6 +12371,12 @@ snapshots:
       '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
       '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0)
 
+  '@opentelemetry/sdk-metrics@2.0.0(@opentelemetry/api@1.9.0)':
+    dependencies:
+      '@opentelemetry/api': 1.9.0
+      '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0)
+      '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0)
+
   '@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)':
     dependencies:
       '@opentelemetry/api': 1.9.0
@@ -13445,7 +13487,7 @@ snapshots:
 
   '@sentry/core@9.15.0': {}
 
-  '@sentry/nextjs@9.15.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.7)':
+  '@sentry/nextjs@9.15.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.3.1(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.7)':
     dependencies:
       '@opentelemetry/api': 1.9.0
       '@opentelemetry/semantic-conventions': 1.32.0
@@ -13453,7 +13495,7 @@ snapshots:
       '@sentry-internal/browser-utils': 9.15.0
       '@sentry/core': 9.15.0
       '@sentry/node': 9.15.0
-      '@sentry/opentelemetry': 9.15.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.32.0)
+      '@sentry/opentelemetry': 9.15.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.32.0)
       '@sentry/react': 9.15.0(react@19.1.0)
       '@sentry/vercel-edge': 9.15.0
       '@sentry/webpack-plugin': 3.3.1(encoding@0.1.13)(webpack@5.99.7)
@@ -13511,6 +13553,16 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@sentry/opentelemetry@9.15.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.32.0)':
+    dependencies:
+      '@opentelemetry/api': 1.9.0
+      '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0)
+      '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0)
+      '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0)
+      '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0)
+      '@opentelemetry/semantic-conventions': 1.32.0
+      '@sentry/core': 9.15.0
+
   '@sentry/opentelemetry@9.15.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.32.0)':
     dependencies:
       '@opentelemetry/api': 1.9.0
@@ -14867,7 +14919,7 @@ snapshots:
       '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)(typescript@5.8.3)
       '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.8.3)
       eslint-config-prettier: 9.1.0(eslint@8.57.0)
-      eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.31.0)
+      eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0))
       eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.0)
       eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0)
       eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0)
@@ -16377,9 +16429,9 @@ snapshots:
       eslint-plugin-turbo: 2.5.0(eslint@8.57.0)(turbo@2.5.2)
       turbo: 2.5.2
 
-  eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0):
+  eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0)):
     dependencies:
-      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)
+      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0)
 
   eslint-import-resolver-node@0.3.9:
     dependencies:
@@ -16400,11 +16452,11 @@ snapshots:
       tinyglobby: 0.2.13
       unrs-resolver: 1.6.2
     optionalDependencies:
-      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0)
+      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0)
     transitivePeerDependencies:
       - supports-color
 
-  eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0):
+  eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0):
     dependencies:
       debug: 3.2.7
     optionalDependencies:
@@ -16455,7 +16507,7 @@ snapshots:
       doctrine: 2.1.0
       eslint: 8.57.0
       eslint-import-resolver-node: 0.3.9
-      eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0)
+      eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0)
       hasown: 2.0.2
       is-core-module: 2.16.1
       is-glob: 4.0.3


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 2**

<details>
<summary>🧹 Nitpick comments (1)</summary><blockquote>

<details>
<summary>apps/web/package.json (1)</summary><blockquote>

`44-50`: **Consider adding a lock file update**

When updating multiple related packages with significant version changes, it's important to ensure the lock file is updated as well to capture the resolved dependency tree.


Make sure to commit the updated package-lock.json or yarn.lock file along with these changes to ensure consistent dependency resolution across environments.

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 649f28ff8d1a4abe9d715b09ba371424b839d933 and 4b0bccaf86bf730a61e288e1536b3e9e1c29c0b3.

</details>

<details>
<summary>⛔ Files ignored due to path filters (1)</summary>

* `pnpm-lock.yaml` is excluded by `!**/pnpm-lock.yaml`

</details>

<details>
<summary>📒 Files selected for processing (2)</summary>

* `apps/web/instrumentation-node.ts` (2 hunks)
* `apps/web/package.json` (1 hunks)

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (6)</summary>

* GitHub Check: Build Formbricks-web / Build Formbricks-web
* GitHub Check: Run E2E Tests / Run E2E Tests
* GitHub Check: Run Unit Tests / Unit Tests
* GitHub Check: SonarQube
* GitHub Check: Validate Docker Build
* GitHub Check: Analyze (javascript)

</details>

<details>
<summary>🔇 Additional comments (1)</summary><blockquote>

<details>
<summary>apps/web/package.json (1)</summary>

`44-50`: <details>
<summary>✅ Verification successful</summary>

**Verify removal of @opentelemetry/api-logs**

The AI summary indicates that `@opentelemetry/api-logs` was removed from dependencies. Ensure that this package's functionality is now covered by other packages (possibly by the updated `@opentelemetry/sdk-logs`).

---

🏁 Script executed:

```shell
#!/bin/bash
# Check for any usage of api-logs in the codebase
echo "Searching for imports of @opentelemetry/api-logs:"
rg -l "@opentelemetry/api-logs" --type ts
```

Length of output: 150

---

To be thorough, let’s search *all* file types for any lingering references:

---

🏁 Script executed:

```shell
#!/bin/bash
# Search for any references to @opentelemetry/api-logs in the entire codebase
echo "Searching for references to @opentelemetry/api-logs in codebase:"
rg -n "@opentelemetry/api-logs"
```

Length of output: 818

---



</details>

**Removal of @opentelemetry/api-logs Verified**

No imports or code references to `@opentelemetry/api-logs` were found outside of lockfile entries, so removing it from `apps/web/package.json` is safe. Its functionality is now provided by the upgraded `@opentelemetry/sdk-logs`.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-06T11:27:51Z
user: login: mattinannt
state: APPROVED
author_association: MEMBER
submitted_at: 2025-05-06T11:38:34Z
user: login: Dhruwang
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-06T11:53:27Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-06T11:54:24Z

Review comments:
diff_hunk: @@ -6,11 +6,11 @@ import { registerInstrumentations } from "@opentelemetry/instrumentation";
 import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
 import { RuntimeNodeInstrumentation } from "@opentelemetry/instrumentation-runtime-node";
 import {
-  Resource,
-  detectResourcesSync,
+  detectResources,
path: apps/web/instrumentation-node.ts
user: login: coderabbitai[bot]
body: _⚠️ Potential issue_

**Asynchronous resource detection requires Promise handling**

The code has been updated to use the asynchronous `detectResources` method instead of synchronous `detectResourcesSync`, but there's no Promise handling implemented. Currently, line 30 is attempting to call `merge()` on what would be a Promise object, not a Resource object.


Apply this fix to properly handle the Promise returned by `detectResources`:

```diff
- const detectedResources = detectResources({
-   detectors: [envDetector, processDetector, hostDetector],
- });
- 
- const customResources = resourceFromAttributes({});
- 
- const resources = detectedResources.merge(customResources);
+ // Initialize with default empty resource
+ let resources = resourceFromAttributes({});
+ 
+ // Set up async detection to update resources when available
+ detectResources({
+   detectors: [envDetector, processDetector, hostDetector],
+ }).then((detectedResources) => {
+   // Merge detected resources with custom resources
+   const customResources = resourceFromAttributes({});
+   resources = detectedResources.merge(customResources);
+   
+   // Update the meter provider's resource
+   meterProvider.resource = resources;
+ }).catch((error) => {
+   logger.error(error, "Error detecting OpenTelemetry resources");
+ });
```

Alternatively, you could refactor the entire initialization to be async/await:

```javascript
async function setupTelemetry() {
  try {
    const detectedResources = await detectResources({
      detectors: [envDetector, processDetector, hostDetector],
    });
    
    const customResources = resourceFromAttributes({});
    const resources = detectedResources.merge(customResources);
    
    // Initialize meter provider with resolved resources
    // ... rest of the setup
  } catch (error) {
    logger.error(error, "Error setting up OpenTelemetry");
  }
}

// Call the async setup function
setupTelemetry();
```


Also applies to: 13-13, 24-26, 28-28, 30-30

<details>
<summary>🤖 Prompt for AI Agents (early access)</summary>

```
In apps/web/instrumentation-node.ts around lines 9 and 13 to 30, the asynchronous detectResources method is used without awaiting its Promise, causing a merge() call on a Promise instead of a Resource object. Refactor the initialization to be async by wrapping the setup code in an async function, await the detectResources call to get the resolved resources, then merge with custom resources. Finally, call this async setup function to ensure proper Promise handling and avoid runtime errors.
```

</details>

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-05-06T11:27:50Z
author_association: CONTRIBUTOR
diff_hunk: @@ -41,14 +41,13 @@
     "@lexical/react": "0.31.0",
     "@lexical/rich-text": "0.31.0",
     "@lexical/table": "0.31.0",
-    "@opentelemetry/api-logs": "0.56.0",
-    "@opentelemetry/exporter-prometheus": "0.57.2",
-    "@opentelemetry/host-metrics": "0.35.5",
-    "@opentelemetry/instrumentation": "0.57.2",
-    "@opentelemetry/instrumentation-http": "0.57.2",
-    "@opentelemetry/instrumentation-runtime-node": "0.12.2",
-    "@opentelemetry/sdk-logs": "0.56.0",
-    "@opentelemetry/sdk-metrics": "1.30.1",
+    "@opentelemetry/exporter-prometheus": "0.200.0",
+    "@opentelemetry/host-metrics": "0.36.0",
+    "@opentelemetry/instrumentation": "0.200.0",
+    "@opentelemetry/instrumentation-http": "0.200.0",
+    "@opentelemetry/instrumentation-runtime-node": "0.14.0",
+    "@opentelemetry/sdk-logs": "0.200.0",
+    "@opentelemetry/sdk-metrics": "2.0.0",
path: apps/web/package.json
user: login: coderabbitai[bot]
body: _💡 Verification agent_

<details>
<summary>🧩 Analysis chain</summary>

**OpenTelemetry package updates need compatibility verification**

The OpenTelemetry package versions have been significantly updated, with major version jumps for some packages. For example, `@opentelemetry/sdk-metrics` went from a likely 1.x version to 2.0.0, which often indicates breaking changes.

---

🌐 Web query:

```web
Are OpenTelemetry SDK version 0.200.0 and sdk-metrics 2.0.0 compatible?
```

💡 Result:

Yes, OpenTelemetry SDK version 0.200.0 and sdk-metrics 2.0.0 are compatible. In the OpenTelemetry JavaScript SDK 2.0 release, package versions follow a specific pattern: stable packages are versioned as >=2.0.0 while unstable packages are versioned as >=0.200.0[1]. This means that the 0.200.0 version of unstable packages is designed to work with the 2.0.0 version of stable packages like sdk-metrics.

This versioning pattern is part of the major version release strategy for the OpenTelemetry JavaScript ecosystem. The packages are published from the same repository (`opentelemetry-js`), ensuring they are built to work together[1]. The only exceptions to this versioning scheme are the API and semantic-conventions packages, which follow their own versioning strategy.

There are several important compatibility considerations to note:

1. The minimum supported Node.js version for these packages has been raised to `^18.19.0 || >=20.6.0`, dropping support for Node.js 14 and 16[1].

2. TypeScript support requires version 5.0.4 or higher[1].

3. The sdk-metrics package specifically has API changes, including:
   - Using `Gauge` and `MetricAdvice` types from the API package
   - Requiring `@opentelemetry/api` peer dependency version 1.9.0 or higher
   - Replacing the `View` class with `ViewOptions` objects
   - Changing aggregation classes to use `AggregationType` enum[2]

These changes are part of a coordinated release, ensuring that the 0.200.0 and 2.0.0 versions maintain compatibility with each other while introducing breaking changes compared to previous major versions.

Citations:

- 1: https://opentelemetry.io/blog/2025/otel-js-sdk-2-0/
- 2: https://github.com/open-telemetry/opentelemetry-js/blob/main/doc/upgrade-to-2.x.md
- 3: https://www.npmjs.com/package/@opentelemetry/sdk-node
- 4: https://classic.yarnpkg.com/en/package/@opentelemetry/sdk-metrics
- 5: https://www.npmjs.com/package/@opentelemetry/sdk-metrics
- 6: https://opentelemetry.io/docs/languages/php/sdk/
- 7: https://opentelemetry.io/docs/specs/otel/versioning-and-stability/
- 8: https://opentelemetry.io/docs/specs/otel/metrics/sdk/
- 9: https://classic.yarnpkg.com/en/package/@opentelemetry/sdk-logs
- 10: https://github.com/open-telemetry/opentelemetry-js/issues/5148

---



</details>

**Confirm OpenTelemetry compatibility; address Node.js/TypeScript requirements & sdk-metrics API changes**

The chosen versions (`@opentelemetry/*@0.200.0` + `@opentelemetry/sdk-metrics@2.0.0`) are part of the coordinated v2 release and are compatible. However, this major bump introduces the following breaking changes you’ll need to handle:

• Update runtime requirements in apps/web/package.json under “engines”:  
  – Node.js: `^18.19.0 || >=20.6.0` (v14/16 no longer supported)  
  – TypeScript: `>=5.0.4`  

• Add/verify peer dependency:  
  – `@opentelemetry/api` >= 1.9.0  

• Refactor any sdk-metrics usage:  
  – Swap out the old `View` class for `ViewOptions` objects  
  – Import and use `Gauge` and `MetricAdvice` types from `@opentelemetry/api`  
  – Migrate aggregation implementations to the new `AggregationType` enum  

Please update your CI, documentation, and code accordingly to avoid runtime or typing errors.

<details>
<summary>🤖 Prompt for AI Agents (early access)</summary>

```
In apps/web/package.json around lines 44 to 50, the OpenTelemetry package versions have been updated to 0.200.0 and sdk-metrics to 2.0.0, which are compatible but introduce breaking changes. Update the "engines" field to require Node.js version ^18.19.0 || >=20.6.0 and TypeScript version >=5.0.4. Add or verify the peer dependency @opentelemetry/api at version >=1.9.0. Refactor any sdk-metrics usage by replacing the old View class with ViewOptions objects, importing Gauge and MetricAdvice types from @opentelemetry/api, and migrating aggregation implementations to use the AggregationType enum. Adjust CI and documentation to reflect these changes.
```

</details>

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-05-06T11:27:50Z
author_association: CONTRIBUTOR
diff_hunk: @@ -6,11 +6,11 @@ import { registerInstrumentations } from "@opentelemetry/instrumentation";
 import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
 import { RuntimeNodeInstrumentation } from "@opentelemetry/instrumentation-runtime-node";
 import {
-  Resource,
-  detectResourcesSync,
+  detectResources,
path: apps/web/instrumentation-node.ts
user: login: Dhruwang
body: detectResources is not a async function
created_at: 2025-05-06T11:53:27Z
author_association: MEMBER
diff_hunk: @@ -6,11 +6,11 @@ import { registerInstrumentations } from "@opentelemetry/instrumentation";
 import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
 import { RuntimeNodeInstrumentation } from "@opentelemetry/instrumentation-runtime-node";
 import {
-  Resource,
-  detectResourcesSync,
+  detectResources,
path: apps/web/instrumentation-node.ts
user: login: coderabbitai[bot]
body: <details>
<summary>🧩 Analysis chain</summary>

I need to verify the API signature of the `detectResources` function to properly respond to your comment.

---

🌐 Web query:

```web
@opentelemetry/resources detectResources function async
```

💡 Result:

The `detectResources` function in `@opentelemetry/resources` is an asynchronous function that allows you to detect and gather resource information from various resource detectors in OpenTelemetry JavaScript SDK. This function is essential for automatically collecting contextual information about the entity producing telemetry.

## How `detectResources` Works

The `detectResources` function accepts a configuration object with an array of detectors and returns a Promise that resolves to a Resource object. This function runs each detector sequentially, merges their results, and produces a comprehensive Resource with all detected attributes[7].

```typescript
import { Resource, detectResources } from '@opentelemetry/resources';
import { browserDetector } from '@opentelemetry/opentelemetry-browser-detector';

async function start() {
  // Create initial resource
  let resource = new Resource({
    'service.name': 'Test App Name',
  });
  
  // Detect resources asynchronously
  let detectedResources = await detectResources({
    detectors: [browserDetector]
  });
  
  // Merge detected resources with initial resource
  resource = resource.merge(detectedResources);
  
  // Use the resource with a provider
  // ...
}
```

## Resource Detectors

OpenTelemetry provides several built-in resource detectors for different environments:

1. **Environment Variable Detector**: Reads resource attributes from `OTEL_RESOURCE_ATTRIBUTES` environment variable[2][3][5].
2. **Process Detector**: Collects information about the current process[2].
3. **Browser Detector**: Detects browser-specific information through the `@opentelemetry/opentelemetry-browser-detector` package[7].
4. **Host Detector**: Gathers information about the host environment[10].

For Node.js applications, the SDK automatically detects process and environment information. For browser applications, specific browser detectors are available[2][7].

## Handling Async Resource Attributes

A common issue with resource detection is accessing resource attributes before asynchronous detection completes, which can lead to warning messages[10]. This happens because some resource detectors work asynchronously, but their attributes might be accessed before they're fully populated.

A workaround for this issue, as suggested by community members, is to create wrapper functions that ensure asynchronous attributes are properly awaited:

```typescript
function awaitAttributes(detector: DetectorSync): Detector {
  return {
    async detect(config?: ResourceDetectionConfig): Promise<IResource> {
      const resource = detector.detect(config);
      await resource.waitForAsyncAttributes?.();
      return resource;
    },
  };
}

// Then use it with your SDK
const sdk = new opentelemetry.NodeSDK({
  resourceDetectors: [
    awaitAttributes(envDetectorSync),
    awaitAttributes(processDetectorSync),
    awaitAttributes(hostDetectorSync),
  ],
});
```

## Resource in Tracing and Metrics

Resources are crucial for providing context to telemetry data. When setting up tracing or metrics, you typically:

1. Create a resource (possibly enhanced with detected attributes)
2. Pass it to a provider (TracerProvider or MeterProvider)
3. The provider makes the resource available to exporters[8]

```typescript
// Example for a tracer provider in browser
const provider = new WebTracerProvider({
  resource: resource, // The resource created with detectResources
  spanProcessors: [
    new BatchSpanProcessor(
      new OTLPTraceExporter({
        url: CONF.url,
        headers: {}
      }),
      {
        exportTimeoutMillis: CONF.timeOutMillis,
        scheduledDelayMillis: CONF.delayMillis
      }
    )
  ]
});
```

By using `detectResources` with appropriate detectors, you can automatically enrich your telemetry data with valuable contextual information about the environment in which your application is running.

Citations:

- 1: https://opentelemetry.io/docs/
- 2: https://opentelemetry.io/docs/languages/js/resources/
- 3: https://github.com/open-telemetry/opentelemetry-dotnet/blob/main/docs/resources/README.md
- 4: https://opentelemetry.io/docs/concepts/resources/
- 5: https://pkg.go.dev/go.opentelemetry.io/otel/sdk/resource
- 6: https://digma.ai/opentelemetry-a-practical-guide-to-improving-code-design/
- 7: https://www.npmjs.com/package/@opentelemetry%2Fopentelemetry-browser-detector
- 8: https://opentelemetry-python.readthedocs.io/en/latest/sdk/resources.html
- 9: https://opentelemetry.io/docs/languages/js/getting-started/browser/
- 10: https://github.com/open-telemetry/opentelemetry-js/issues/4638

---



</details>

@Dhruwang According to the official OpenTelemetry documentation, `detectResources` is indeed an asynchronous function that returns a Promise. The documentation shows that it should be used with await:

```typescript
// Detect resources asynchronously
let detectedResources = await detectResources({
  detectors: [browserDetector]
});
```

The current implementation is trying to call `merge()` directly on the Promise returned by `detectResources`, which would cause a runtime error. My suggestion to handle it asynchronously is correct based on the OpenTelemetry API design.

You'll need to implement Promise handling as I suggested in my previous comment, either by using async/await in a setup function or by using Promise chaining with `.then()`.

---

<details>
<summary>✏️ Learnings added</summary>

```
Learnt from: Dhruwang
PR: formbricks/formbricks#5672
File: apps/web/instrumentation-node.ts:9-9
Timestamp: 2025-05-06T11:54:23.812Z
Learning: The `detectResources` function from the OpenTelemetry resources package is asynchronous and returns a Promise that needs to be properly awaited before accessing the Resource object.
```

> Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure [review instructions](https://docs.coderabbit.ai/guides/review-instructions). You can manage existing learnings in the [app](https://app.coderabbit.ai/learnings).

</details>




<!-- <agentComponentType>chat-answer</agentComponentType> -->

<!-- <rawResChunk><answer><details>
<summary>🧩 Analysis chain</summary>

I need to verify the API signature of the `detectResources` function to properly respond to your comment.

---

🌐 Web query:

```web
@opentelemetry/resources detectResources function async
```

💡 Result:

The `detectResources` function in `@opentelemetry/resources` is an asynchronous function that allows you to detect and gather resource information from various resource detectors in OpenTelemetry JavaScript SDK. This function is essential for automatically collecting contextual information about the entity producing telemetry.

## How `detectResources` Works

The `detectResources` function accepts a configuration object with an array of detectors and returns a Promise that resolves to a Resource object. This function runs each detector sequentially, merges their results, and produces a comprehensive Resource with all detected attributes[7].

```typescript
import { Resource, detectResources } from '@opentelemetry/resources';
import { browserDetector } from '@opentelemetry/opentelemetry-browser-detector';

async function start() {
  // Create initial resource
  let resource = new Resource({
    'service.name': 'Test App Name',
  });
  
  // Detect resources asynchronously
  let detectedResources = await detectResources({
    detectors: [browserDetector]
  });
  
  // Merge detected resources with initial resource
  resource = resource.merge(detectedResources);
  
  // Use the resource with a provider
  // ...
}
```

## Resource Detectors

OpenTelemetry provides several built-in resource detectors for different environments:

1. **Environment Variable Detector**: Reads resource attributes from `OTEL_RESOURCE_ATTRIBUTES` environment variable[2][3][5].
2. **Process Detector**: Collects information about the current process[2].
3. **Browser Detector**: Detects browser-specific information through the `@opentelemetry/opentelemetry-browser-detector` package[7].
4. **Host Detector**: Gathers information about the host environment[10].

For Node.js applications, the SDK automatically detects process and environment information. For browser applications, specific browser detectors are available[2][7].

## Handling Async Resource Attributes

A common issue with resource detection is accessing resource attributes before asynchronous detection completes, which can lead to warning messages[10]. This happens because some resource detectors work asynchronously, but their attributes might be accessed before they're fully populated.

A workaround for this issue, as suggested by community members, is to create wrapper functions that ensure asynchronous attributes are properly awaited:

```typescript
function awaitAttributes(detector: DetectorSync): Detector {
  return {
    async detect(config?: ResourceDetectionConfig): Promise<IResource> {
      const resource = detector.detect(config);
      await resource.waitForAsyncAttributes?.();
      return resource;
    },
  };
}

// Then use it with your SDK
const sdk = new opentelemetry.NodeSDK({
  resourceDetectors: [
    awaitAttributes(envDetectorSync),
    awaitAttributes(processDetectorSync),
    awaitAttributes(hostDetectorSync),
  ],
});
```

## Resource in Tracing and Metrics

Resources are crucial for providing context to telemetry data. When setting up tracing or metrics, you typically:

1. Create a resource (possibly enhanced with detected attributes)
2. Pass it to a provider (TracerProvider or MeterProvider)
3. The provider makes the resource available to exporters[8]

```typescript
// Example for a tracer provider in browser
const provider = new WebTracerProvider({
  resource: resource, // The resource created with detectResources
  spanProcessors: [
    new BatchSpanProcessor(
      new OTLPTraceExporter({
        url: CONF.url,
        headers: {}
      }),
      {
        exportTimeoutMillis: CONF.timeOutMillis,
        scheduledDelayMillis: CONF.delayMillis
      }
    )
  ]
});
```

By using `detectResources` with appropriate detectors, you can automatically enrich your telemetry data with valuable contextual information about the environment in which your application is running.

Citations:

- 1: https://opentelemetry.io/docs/
- 2: https://opentelemetry.io/docs/languages/js/resources/
- 3: https://github.com/open-telemetry/opentelemetry-dotnet/blob/main/docs/resources/README.md
- 4: https://opentelemetry.io/docs/concepts/resources/
- 5: https://pkg.go.dev/go.opentelemetry.io/otel/sdk/resource
- 6: https://digma.ai/opentelemetry-a-practical-guide-to-improving-code-design/
- 7: https://www.npmjs.com/package/@opentelemetry%2Fopentelemetry-browser-detector
- 8: https://opentelemetry-python.readthedocs.io/en/latest/sdk/resources.html
- 9: https://opentelemetry.io/docs/languages/js/getting-started/browser/
- 10: https://github.com/open-telemetry/opentelemetry-js/issues/4638

---



</details>

@Dhruwang According to the official OpenTelemetry documentation, `detectResources` is indeed an asynchronous function that returns a Promise. The documentation shows that it should be used with await:

```typescript
// Detect resources asynchronously
let detectedResources = await detectResources({
  detectors: [browserDetector]
});
```

The current implementation is trying to call `merge()` directly on the Promise returned by `detectResources`, which would cause a runtime error. My suggestion to handle it asynchronously is correct based on the OpenTelemetry API design.

You'll need to implement Promise handling as I suggested in my previous comment, either by using async/await in a setup function or by using Promise chaining with `.then()`.

---

<details>
<summary>✏️ Learnings added</summary>

```
Learnt from: Dhruwang
PR: formbricks/formbricks#5672
File: apps/web/instrumentation-node.ts:9-9
Timestamp: 2025-05-06T11:54:23.812Z
Learning: The `detectResources` function from the OpenTelemetry resources package is asynchronous and returns a Promise that needs to be properly awaited before accessing the Resource object.
```

> Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure [review instructions](https://docs.coderabbit.ai/guides/review-instructions). You can manage existing learnings in the [app](https://app.coderabbit.ai/learnings).

</details>

</answer></rawResChunk> -->

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-05-06T11:54:24Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-05-06T11:25:11Z
body: Thank you for following the naming conventions for pull request titles! 🙏
<!-- Sticky Pull Request Commentpr-title-lint-error -->
author_association: CONTRIBUTOR
user: login: coderabbitai[bot]
created_at: 2025-05-06T11:27:47Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

## Walkthrough

The changes update several OpenTelemetry package dependencies in the `apps/web/package.json` file to their latest versions and remove the `@opentelemetry/api-logs` dependency. In the `apps/web/instrumentation-node.ts` file, the code replaces the synchronous `detectResourcesSync` method with the asynchronous `detectResources` for resource detection and changes resource instantiation from direct construction to using `resourceFromAttributes`. No changes were made to exported or public entities.

## Assessment against linked issues

| Objective                                                                                  | Addressed | Explanation                                                                                  |
|--------------------------------------------------------------------------------------------|-----------|----------------------------------------------------------------------------------------------|
| Update all OpenTelemetry dependencies in `apps/web` to the latest version (#5378)          | ✅        |                                                                                              |
| Fix code errors arising from OpenTelemetry dependency updates and ensure compatibility (#5378) | ✅        |                                                                                              |

## Possibly related PRs

- formbricks/formbricks#4922: Modifies `instrumentation-node.ts` for OpenTelemetry resource detection and meter provider setup, directly overlapping with the areas changed in this PR.

<!-- walkthrough_end -->
<!-- internal state start -->


<!-- DwQgtGAEAqAWCWBnSTIEMB26CuAXA9mAOYCmGJATmriQCaQDG+Ats2bgFyQAOFk+AIwBWJBrngA3EsgEBPRvlqU0AgfFwA6NPEgQAfACgjoCEYDEZyAAUASpETZWaCrKNxU3bABsvkCiQBHbGlcABpIcVwvOkgAIgZYfH8ubG5aahj8bjIIkmi2XBceNAYAazRSSCkKRHh8DERQ2MgAdzRkBwFmdRp6OQjYEkhsREpIABFYCmw2jCJ0ZFtIDEcBMYBWADYAdgAmfixcQcgAMSTmAQp4MuR/bnxaghcNGGPmbSxPCnvR/gAzAZDJaoAjDNIZQFVSi1erIfAAo5DADy2Qw0DyJAKRW4JXKpGQIxi8EOx14+BEYhe7gJ4Jo6FotH8iFGyCQDiGZnWAGZtgAODRuY5KRAMK7ccT1FAYBhebDC9CMQZlLxIXAKDB/eAUbpzAbUSFMDCFeACPBJSCwdqQP74Hz4FoxRE8Cjk0S4ADkyENxtNEqwRGw8CUKvIjXseT+YH8EngJAd9CdTCU4X8zHwUnohsQtqGXnwRDDpvgXjVTrJFLVDgYDGkiD+3i8snCmHoZAc/noGHwfmk9wakjItZQzOCyAd/ilhUU2BrtCpxyWaC82alMrl0iliEKM79yBtfBoW+J8ydKLI6PyJEK8lGuFSEW71Xgf3kictc2kAoMAEEGeo6hgS6NuEib1D6Zp8JayBkjGSj0Gg9iiiQOT+EwFC0Me/B8CK/htokuB7uamDyAAqgAkoqmD4ugGD0Kk6S9JCZzapc1ylMgtD4AwjjsNQAEoAC5A1syziyPOQJ2DadotMgToAML1FIRoAUukAKaw6gdNkDDPtcfGSvuKAERE6jRDR9DEmu8oISGpQPgaYFXL6/EBkGeTEhuhn+H8lBkDWX76MY4BQGQ9DwjgBDEIOVCMUwrDsFwvD8MIboDjI8hJsoqjqFoOiBSYUDUsONERYQpDkDFMRxWwRpcFQLT2I47xFP0mVUNlmjaLoYCGEFpgGGg3DcIgAD0DoCCNxJbtMNW4PpGBgF2SgaARHAGLEG0GBYkDfmRUUVRk9AOE4RThQkVHSIKQyZT23BeCUG5OogsjSlM9T4CMPbZtgFA1pASg0GI/EFIk9AAAYA26NjSB9v3SAAyi9DBg606iwJC7RI29XafRDV5QzDP3CSjfwuswkJnmiGJYvITKw8JxRlBUJAvGRapLiunRHneh6QhhqFqlNc3KfN/wKmD0PfXDKOCBWqNHAqDBAfZYN00TJAnGT364OBh4o6CSEQpgkCYuKtOE3D4m/OdH7IGgfw+WIFr2l99NDJDQOSi2jD+KLzhDNkFD7mwfQkPuQxsBQRCYR7jHe9xW4sK76uIOJX1quFTpCzNvF+uGd7cOElmyhhuoFGMMFuXwhqagGMUAeEJAAB73BQNDYVeqTNrR9jwEQgG+O+tAhkQKaYh8BKvRdc5GOYljfiWyi7vZTpKDKzjzXCALN63jHmp4AgqgwJvKeIl0GAAcvULPrZtBgQGARiDcNY0kBNOJM6QGhCNmGBrRtsQtrzz2uVJeMRjrNXkGdd8+Irr/RIKiJQ0p5DVBhA0a05pRjVFUpTC8mIrzYlxMzVkJIhhg2fqNcaI0P54hZj/eoJNixDHHEMeih0Xjw20rpJWPgmyQlQQBLekAwYAAEsjsGpgQ2QI0d5JHbmAMkIMSAjDBuEUR4ijSSOvCNRIW4wBYmuIgVRwixGohoJebR2ceJGnmsY9RZitEuEmg0bcs15pgFgDrbgdjTESIsU4qxbi/RRmwMpNgi1FAkB8Ro8x+DtGIFoKUMAeYCzGO9vYvxcSnEJKSQYhgRjWi+XQD4MERAqBwXsrUfu3DMBRHkOQccPZojtE/K8MhvjNH+OkYNeAyT8wFJoczVoVpUzphiOwLUeR5CkyTqvBBoU/KxlTpAK+/BER8CUIgxZG5MGingOKMcRSbakBnrPbaC926bxXkKUQ9166wjFrItumQ+AHyPifSISyjBX3IAKABRhAoGAKifMKAI0Bmn2mAzMLBZp1TQA1CBolICtUie1NQnU8o9SBcFBQGlcAAH0gyIHxdGWM8Z8VbmcGqQFwKAAsAgAAMAhqz215JsAQfxthcgZWgTYABGEguxeS8hIHy7k7KuQkAAJyioYLsKVDAmVcm6r1YF1V1CEtoMS0lcY6D4tCiqoAA -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details open="true">
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=formbricks/formbricks&utm_content=5672):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: CONTRIBUTOR
user: login: sonarqubecloud[bot]
created_at: 2025-05-06T11:30:23Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=formbricks_formbricks&pullRequest=5672) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=formbricks_formbricks&pullRequest=5672&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=formbricks_formbricks&pullRequest=5672&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=formbricks_formbricks&pullRequest=5672&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=formbricks_formbricks&pullRequest=5672&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=formbricks_formbricks&pullRequest=5672&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=formbricks_formbricks&pullRequest=5672)


author_association: NONE