From 947200bba611c42f2bc52fa16b58b15678c91c7f Mon Sep 17 00:00:00 2001
From: Marc Pichler <marc.pichler@dynatrace.com>
Date: Wed, 26 Feb 2025 14:08:16 +0100
Subject: [PATCH] feat(js): move to SDK 2.x

---
 content/en/docs/languages/js/_index.md        |  4 ++
 .../en/docs/languages/js/instrumentation.md   | 65 +++++++++++--------
 content/en/docs/languages/js/resources.md     |  4 +-
 content/en/docs/languages/js/serverless.md    | 15 ++---
 4 files changed, 52 insertions(+), 36 deletions(-)

diff --git a/content/en/docs/languages/js/_index.md b/content/en/docs/languages/js/_index.md
index 4e26ff63118a..4438fb18a917 100644
--- a/content/en/docs/languages/js/_index.md
+++ b/content/en/docs/languages/js/_index.md
@@ -21,6 +21,10 @@ OpenTelemetry.
 OpenTelemetry JavaScript has no official supported list of browsers. It is aimed
 to work on currently supported versions of major browsers.
 
+OpenTelemetry JavaScript follows DefinitelyType's support policy for TypeScript
+which sets a support window of 2 years. Support for TypeScript versions older
+than 2 years will be dropped in minor releases of OpenTelemetry JavaScript.
+
 For more details on runtime support see
 [this overview](https://github.com/open-telemetry/opentelemetry-js#supported-runtimes).
 
diff --git a/content/en/docs/languages/js/instrumentation.md b/content/en/docs/languages/js/instrumentation.md
index e8476b527304..f670d735d947 100644
--- a/content/en/docs/languages/js/instrumentation.md
+++ b/content/en/docs/languages/js/instrumentation.md
@@ -221,14 +221,14 @@ import {
   PeriodicExportingMetricReader,
   ConsoleMetricExporter,
 } from '@opentelemetry/sdk-metrics';
-import { Resource } from '@opentelemetry/resources';
+import { resourceFromAttributes } from '@opentelemetry/resources';
 import {
   ATTR_SERVICE_NAME,
   ATTR_SERVICE_VERSION,
 } from '@opentelemetry/semantic-conventions';
 
 const sdk = new NodeSDK({
-  resource: new Resource({
+  resource: resourceFromAttributes({
     [ATTR_SERVICE_NAME]: 'yourServiceName',
     [ATTR_SERVICE_VERSION]: '1.0',
   }),
@@ -251,14 +251,14 @@ const {
   PeriodicExportingMetricReader,
   ConsoleMetricExporter,
 } = require('@opentelemetry/sdk-metrics');
-const { Resource } = require('@opentelemetry/resources');
+const { resourceFromAttributes } = require('@opentelemetry/resources');
 const {
   ATTR_SERVICE_NAME,
   ATTR_SERVICE_VERSION,
 } = require('@opentelemetry/semantic-conventions');
 
 const sdk = new NodeSDK({
-  resource: new Resource({
+  resource: resourceFromAttributes({
     [ATTR_SERVICE_NAME]: 'dice-server',
     [ATTR_SERVICE_VERSION]: '0.1.0',
   }),
@@ -349,7 +349,10 @@ SDK initialization code in it:
 {{< tabpane text=true >}} {{% tab TypeScript %}}
 
 ```ts
-import { Resource } from '@opentelemetry/resources';
+import {
+  defaultResource,
+  resourceFromAttributes,
+} from '@opentelemetry/resources';
 import {
   ATTR_SERVICE_NAME,
   ATTR_SERVICE_VERSION,
@@ -360,8 +363,8 @@ import {
   ConsoleSpanExporter,
 } from '@opentelemetry/sdk-trace-base';
 
-const resource = Resource.default().merge(
-  new Resource({
+const resource = defaultResource().merge(
+  resourceFromAttributes({
     [ATTR_SERVICE_NAME]: 'service-name-here',
     [ATTR_SERVICE_VERSION]: '0.1.0',
   }),
@@ -382,7 +385,10 @@ provider.register();
 
 ```js
 const opentelemetry = require('@opentelemetry/api');
-const { Resource } = require('@opentelemetry/resources');
+const {
+  defaultResource,
+  resourceFromAttributes,
+} = require('@opentelemetry/resources');
 const {
   ATTR_SERVICE_NAME,
   ATTR_SERVICE_VERSION,
@@ -393,8 +399,8 @@ const {
   BatchSpanProcessor,
 } = require('@opentelemetry/sdk-trace-base');
 
-const resource = Resource.default().merge(
-  new Resource({
+const resource = defaultResource().merge(
+  resourceFromAttributes({
     [ATTR_SERVICE_NAME]: 'service-name-here',
     [ATTR_SERVICE_VERSION]: '0.1.0',
   }),
@@ -1286,14 +1292,17 @@ import {
   MeterProvider,
   PeriodicExportingMetricReader,
 } from '@opentelemetry/sdk-metrics';
-import { Resource } from '@opentelemetry/resources';
+import {
+  defaultResource,
+  resourceFromAttributes,
+} from '@opentelemetry/resources';
 import {
   ATTR_SERVICE_NAME,
   ATTR_SERVICE_VERSION,
 } from '@opentelemetry/semantic-conventions';
 
-const resource = Resource.default().merge(
-  new Resource({
+const resource = defaultResource().merge(
+  resourceFromAttributes({
     [ATTR_SERVICE_NAME]: 'dice-server',
     [ATTR_SERVICE_VERSION]: '0.1.0',
   }),
@@ -1323,14 +1332,17 @@ const {
   PeriodicExportingMetricReader,
   ConsoleMetricExporter,
 } = require('@opentelemetry/sdk-metrics');
-const { Resource } = require('@opentelemetry/resources');
+const {
+  defaultResource,
+  resourceFromAttributes,
+} = require('@opentelemetry/resources');
 const {
   ATTR_SERVICE_NAME,
   ATTR_SERVICE_VERSION,
 } = require('@opentelemetry/semantic-conventions');
 
-const resource = Resource.default().merge(
-  new Resource({
+const resource = defaultResource().merge(
+  resourceFromAttributes({
     [ATTR_SERVICE_NAME]: 'service-name-here',
     [ATTR_SERVICE_VERSION]: '0.1.0',
   }),
@@ -1761,33 +1773,34 @@ with `http` by using `http*`.
 Filter attributes on all metric types:
 
 ```js
-const limitAttributesView = new View({
+const limitAttributesView = {
   // only export the attribute 'environment'
   attributeKeys: ['environment'],
   // apply the view to all instruments
   instrumentName: '*',
-});
+};
 ```
 
 Drop all instruments with the meter name `pubsub`:
 
 ```js
-const dropView = new View({
-  aggregation: new DropAggregation(),
+const dropView = {
+  aggregation: { type: AggrgationType.DROP },
   meterName: 'pubsub',
-});
+};
 ```
 
 Define explicit bucket sizes for the Histogram named `http.server.duration`:
 
 ```js
-const histogramView = new View({
-  aggregation: new ExplicitBucketHistogramAggregation([
-    0, 1, 5, 10, 15, 20, 25, 30,
-  ]),
+const histogramView = {
+  aggregation: {
+    type: AggregationType.EXPLICIT_BUCKET_HISTOGRAM,
+    options: { boundaries: [0, 1, 5, 10, 15, 20, 25, 30] },
+  },
   instrumentName: 'http.server.duration',
   instrumentType: InstrumentType.HISTOGRAM,
-});
+};
 ```
 
 #### Attach to meter provider
diff --git a/content/en/docs/languages/js/resources.md b/content/en/docs/languages/js/resources.md
index a7237551d1ee..1227dd6ab0aa 100644
--- a/content/en/docs/languages/js/resources.md
+++ b/content/en/docs/languages/js/resources.md
@@ -91,12 +91,12 @@ configuration option, where you can set them. For example you can update the
 
 ```javascript
 ...
-const { Resource } = require('@opentelemetry/resources');
+const { resourceFromAttributes } = require('@opentelemetry/resources');
 const { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_NAMESPACE, SEMRESATTRS_SERVICE_VERSION, SEMRESATTRS_SERVICE_INSTANCE_ID } = require('@opentelemetry/semantic-conventions');
 ...
 const sdk = new opentelemetry.NodeSDK({
   ...
-  resource: new Resource({
+  resource: resourceFromAttributes({
     [ SEMRESATTRS_SERVICE_NAME ]: "yourServiceName",
     [ SEMRESATTRS_SERVICE_NAMESPACE ]: "yourNameSpace",
     [ SEMRESATTRS_SERVICE_VERSION ]: "1.0",
diff --git a/content/en/docs/languages/js/serverless.md b/content/en/docs/languages/js/serverless.md
index 15ab541c40bd..7ec209b19b92 100644
--- a/content/en/docs/languages/js/serverless.md
+++ b/content/en/docs/languages/js/serverless.md
@@ -224,7 +224,7 @@ service. Please make sure that you provide a `SERVICE_NAME` and that you set the
 ```javascript
 /* otelwrapper.js */
 
-const { Resource } = require('@opentelemetry/resources');
+const { resourceFromAttributes } = require('@opentelemetry/resources');
 const {
   SEMRESATTRS_SERVICE_NAME,
 } = require('@opentelemetry/semantic-conventions');
@@ -271,13 +271,12 @@ Add the following to your `package.json`:
     "@google-cloud/functions-framework": "^3.0.0",
     "@opentelemetry/api": "^1.9.0",
     "@opentelemetry/auto-instrumentations-node": "^0.56.1",
-    "@opentelemetry/exporter-trace-otlp-http": "^0.57.2",
-    "@opentelemetry/instrumentation": "^0.57.2",
-    "@opentelemetry/sdk-node": "^0.57.2",
-    "@opentelemetry/sdk-trace-base": "^1.30.1",
-    "@opentelemetry/sdk-trace-node": "^1.30.1",
-    "@opentelemetry/resources": "^1.30.1",
-    "@opentelemetry/semantic-conventions": "^1.30.0"
+    "@opentelemetry/exporter-trace-otlp-http": "^0.200.0",
+    "@opentelemetry/instrumentation": "^0.200.0",
+    "@opentelemetry/sdk-trace-base": "^2.0.0",
+    "@opentelemetry/sdk-trace-node": "^2.0.0",
+    "@opentelemetry/resources": "^2.0.0",
+    "@opentelemetry/semantic-conventions": "^2.0.0"
   }
 }
 ```