diff --git a/package.json b/package.json
index b83d13febc0a..d0512db843b8 100644
--- a/package.json
+++ b/package.json
@@ -46,6 +46,7 @@
"packages/nextjs",
"packages/node",
"packages/node-integration-tests",
+ "packages/opentelemetry-node",
"packages/react",
"packages/remix",
"packages/serverless",
diff --git a/packages/e2e-tests/publish-packages.ts b/packages/e2e-tests/publish-packages.ts
index 38a034d7e9eb..22341b7aec6c 100644
--- a/packages/e2e-tests/publish-packages.ts
+++ b/packages/e2e-tests/publish-packages.ts
@@ -16,6 +16,11 @@ const packageTarballPaths = glob.sync('packages/*/sentry-*.tgz', {
// Publish built packages to the fake registry
packageTarballPaths.forEach(tarballPath => {
+ // Don't run publish opentelemetry-node package because it is private.
+ if (tarballPath.includes('sentry-opentelemetry-node')) {
+ return;
+ }
+
// `--userconfig` flag needs to be before `publish`
childProcess.execSync(`npm --userconfig ${__dirname}/test-registry.npmrc publish ${tarballPath}`, {
cwd: repositoryRoot, // Can't use __dirname here because npm would try to publish `@sentry-internal/e2e-tests`
diff --git a/packages/e2e-tests/verdaccio-config/config.yaml b/packages/e2e-tests/verdaccio-config/config.yaml
index d0e5eab87ddf..ce7c847562c3 100644
--- a/packages/e2e-tests/verdaccio-config/config.yaml
+++ b/packages/e2e-tests/verdaccio-config/config.yaml
@@ -86,6 +86,12 @@ packages:
unpublish: $all
# proxy: npmjs # Don't proxy for E2E tests!
+ '@sentry/opentelemetry-node':
+ access: $all
+ publish: $all
+ unpublish: $all
+ # proxy: npmjs # Don't proxy for E2E tests!
+
'@sentry/react':
access: $all
publish: $all
diff --git a/packages/opentelemetry-node/.eslintrc.js b/packages/opentelemetry-node/.eslintrc.js
new file mode 100644
index 000000000000..ce28fd3a0514
--- /dev/null
+++ b/packages/opentelemetry-node/.eslintrc.js
@@ -0,0 +1,9 @@
+module.exports = {
+ env: {
+ node: true,
+ },
+ extends: ['../../.eslintrc.js'],
+ rules: {
+ '@sentry-internal/sdk/no-async-await': 'off',
+ },
+};
diff --git a/packages/opentelemetry-node/LICENSE b/packages/opentelemetry-node/LICENSE
new file mode 100644
index 000000000000..4ac873d49f33
--- /dev/null
+++ b/packages/opentelemetry-node/LICENSE
@@ -0,0 +1,14 @@
+Copyright (c) 2022 Sentry (https://sentry.io) and individual contributors. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
+persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
+Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/packages/opentelemetry-node/README.md b/packages/opentelemetry-node/README.md
new file mode 100644
index 000000000000..18d393c767d1
--- /dev/null
+++ b/packages/opentelemetry-node/README.md
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+# Official Sentry SDK for OpenTelemetry Node
+
+[](https://www.npmjs.com/package/@sentry/opentelemetry-node)
+[](https://www.npmjs.com/package/@sentry/opentelemetry-node)
+[](https://www.npmjs.com/package/@sentry/opentelemetry-node)
+
+## Links
+
+- [Official SDK Docs](https://docs.sentry.io/quickstart/)
+
+## Usage
+
+TODO
diff --git a/packages/opentelemetry-node/jest.config.js b/packages/opentelemetry-node/jest.config.js
new file mode 100644
index 000000000000..24f49ab59a4c
--- /dev/null
+++ b/packages/opentelemetry-node/jest.config.js
@@ -0,0 +1 @@
+module.exports = require('../../jest/jest.config.js');
diff --git a/packages/opentelemetry-node/package.json b/packages/opentelemetry-node/package.json
new file mode 100644
index 000000000000..4bf1f6bae01e
--- /dev/null
+++ b/packages/opentelemetry-node/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "@sentry/opentelemetry-node",
+ "version": "7.16.0",
+ "description": "Official Sentry SDK for OpenTelemetry Node.js",
+ "private": true,
+ "repository": "git://github.com/getsentry/sentry-javascript.git",
+ "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/opentelemetry-node",
+ "author": "Sentry",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "main": "build/cjs/index.js",
+ "module": "build/esm/index.js",
+ "types": "build/types/index.d.ts",
+ "publishConfig": {
+ "access": "public"
+ },
+ "dependencies": {
+ "@sentry/core": "7.16.0",
+ "@sentry/tracing": "7.16.0",
+ "@sentry/types": "7.16.0",
+ "@sentry/utils": "7.16.0"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "1.x",
+ "@opentelemetry/sdk-trace-base": "1.x"
+ },
+ "devDependencies": {
+ "@opentelemetry/api": "^1.2.0",
+ "@opentelemetry/sdk-trace-base": "^1.7.0"
+ },
+ "scripts": {
+ "build": "run-p build:rollup build:types",
+ "build:dev": "run-s build",
+ "build:rollup": "rollup -c rollup.npm.config.js",
+ "build:types": "tsc -p tsconfig.types.json",
+ "build:watch": "run-p build:rollup:watch build:types:watch",
+ "build:dev:watch": "run-s build:watch",
+ "build:rollup:watch": "rollup -c rollup.npm.config.js --watch",
+ "build:types:watch": "tsc -p tsconfig.types.json --watch",
+ "build:npm": "ts-node ../../scripts/prepack.ts && npm pack ./build",
+ "circularDepCheck": "madge --circular src/index.ts",
+ "clean": "rimraf build coverage sentry-node-*.tgz",
+ "fix": "run-s fix:eslint fix:prettier",
+ "fix:eslint": "eslint . --format stylish --fix",
+ "fix:prettier": "prettier --write \"{src,test,scripts}/**/*.ts\"",
+ "lint": "run-s lint:prettier lint:eslint",
+ "lint:eslint": "eslint . --cache --cache-location '../../eslintcache/' --format stylish",
+ "lint:prettier": "prettier --check \"{src,test,scripts}/**/*.ts\"",
+ "test": "run-s test:jest",
+ "test:jest": "jest",
+ "test:watch": "jest --watch"
+ },
+ "volta": {
+ "extends": "../../package.json"
+ }
+}
diff --git a/packages/opentelemetry-node/rollup.npm.config.js b/packages/opentelemetry-node/rollup.npm.config.js
new file mode 100644
index 000000000000..5a62b528ef44
--- /dev/null
+++ b/packages/opentelemetry-node/rollup.npm.config.js
@@ -0,0 +1,3 @@
+import { makeBaseNPMConfig, makeNPMConfigVariants } from '../../rollup/index.js';
+
+export default makeNPMConfigVariants(makeBaseNPMConfig());
diff --git a/packages/opentelemetry-node/src/index.ts b/packages/opentelemetry-node/src/index.ts
new file mode 100644
index 000000000000..11c68582d535
--- /dev/null
+++ b/packages/opentelemetry-node/src/index.ts
@@ -0,0 +1,6 @@
+/**
+ * Test function
+ */
+export function test(): void {
+ // no-op
+}
diff --git a/packages/opentelemetry-node/test/index.test.ts b/packages/opentelemetry-node/test/index.test.ts
new file mode 100644
index 000000000000..13c12febdc85
--- /dev/null
+++ b/packages/opentelemetry-node/test/index.test.ts
@@ -0,0 +1,7 @@
+import { test } from '../src';
+
+describe('index', () => {
+ it('runs', () => {
+ test();
+ });
+});
diff --git a/packages/opentelemetry-node/tsconfig.json b/packages/opentelemetry-node/tsconfig.json
new file mode 100644
index 000000000000..bf45a09f2d71
--- /dev/null
+++ b/packages/opentelemetry-node/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.json",
+
+ "include": ["src/**/*"],
+
+ "compilerOptions": {
+ // package-specific options
+ }
+}
diff --git a/packages/opentelemetry-node/tsconfig.test.json b/packages/opentelemetry-node/tsconfig.test.json
new file mode 100644
index 000000000000..87f6afa06b86
--- /dev/null
+++ b/packages/opentelemetry-node/tsconfig.test.json
@@ -0,0 +1,12 @@
+{
+ "extends": "./tsconfig.json",
+
+ "include": ["test/**/*"],
+
+ "compilerOptions": {
+ // should include all types from `./tsconfig.json` plus types for all test frameworks used
+ "types": ["node", "jest"]
+
+ // other package-specific, test-specific options
+ }
+}
diff --git a/packages/opentelemetry-node/tsconfig.types.json b/packages/opentelemetry-node/tsconfig.types.json
new file mode 100644
index 000000000000..65455f66bd75
--- /dev/null
+++ b/packages/opentelemetry-node/tsconfig.types.json
@@ -0,0 +1,10 @@
+{
+ "extends": "./tsconfig.json",
+
+ "compilerOptions": {
+ "declaration": true,
+ "declarationMap": true,
+ "emitDeclarationOnly": true,
+ "outDir": "build/types"
+ }
+}
diff --git a/yarn.lock b/yarn.lock
index 2f3d6c5b0b7b..acf1ee5d06cd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3013,6 +3013,11 @@
dependencies:
"@opentelemetry/context-base" "^0.12.0"
+"@opentelemetry/api@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.2.0.tgz#89ef99401cde6208cff98760b67663726ef26686"
+ integrity sha512-0nBr+VZNKm9tvNDZFstI3Pq1fCTEDK5OZTnVKNvBNAKgd0yIvmwsP4m61rEv7ZP+tOUjWJhROpxK5MsnlF911g==
+
"@opentelemetry/context-base@^0.12.0":
version "0.12.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.12.0.tgz#4906ae27359d3311e3dea1b63770a16f60848550"
@@ -3023,6 +3028,13 @@
resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.14.0.tgz#c67fc20a4d891447ca1a855d7d70fa79a3533001"
integrity sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw==
+"@opentelemetry/core@1.7.0":
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.7.0.tgz#83bdd1b7a4ceafcdffd6590420657caec5f7b34c"
+ integrity sha512-AVqAi5uc8DrKJBimCTFUT4iFI+5eXpo4sYmGbQ0CypG0piOTHE2g9c5aSoTGYXu3CzOmJZf7pT6Xh+nwm5d6yQ==
+ dependencies:
+ "@opentelemetry/semantic-conventions" "1.7.0"
+
"@opentelemetry/core@^0.12.0":
version "0.12.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-0.12.0.tgz#a888badc9a408fa1f13976a574e69d14be32488e"
@@ -3032,6 +3044,14 @@
"@opentelemetry/context-base" "^0.12.0"
semver "^7.1.3"
+"@opentelemetry/resources@1.7.0":
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.7.0.tgz#90ccd3a6a86b4dfba4e833e73944bd64958d78c5"
+ integrity sha512-u1M0yZotkjyKx8dj+46Sg5thwtOTBmtRieNXqdCRiWUp6SfFiIP0bI+1XK3LhuXqXkBXA1awJZaTqKduNMStRg==
+ dependencies:
+ "@opentelemetry/core" "1.7.0"
+ "@opentelemetry/semantic-conventions" "1.7.0"
+
"@opentelemetry/resources@^0.12.0":
version "0.12.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-0.12.0.tgz#5eb287c3032a2bebb2bb9f69b44bd160d2a7d591"
@@ -3040,6 +3060,20 @@
"@opentelemetry/api" "^0.12.0"
"@opentelemetry/core" "^0.12.0"
+"@opentelemetry/sdk-trace-base@^1.7.0":
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.7.0.tgz#b498424e0c6340a9d80de63fd408c5c2130a60a5"
+ integrity sha512-Iz84C+FVOskmauh9FNnj4+VrA+hG5o+tkMzXuoesvSfunVSioXib0syVFeNXwOm4+M5GdWCuW632LVjqEXStIg==
+ dependencies:
+ "@opentelemetry/core" "1.7.0"
+ "@opentelemetry/resources" "1.7.0"
+ "@opentelemetry/semantic-conventions" "1.7.0"
+
+"@opentelemetry/semantic-conventions@1.7.0":
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.7.0.tgz#af80a1ef7cf110ea3a68242acd95648991bcd763"
+ integrity sha512-FGBx/Qd09lMaqQcogCHyYrFEpTx4cAjeS+48lMIR12z7LdH+zofGDVQSubN59nL6IpubfKqTeIDu9rNO28iHVA==
+
"@opentelemetry/semantic-conventions@^0.12.0":
version "0.12.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-0.12.0.tgz#7e392aecdbdbd5d737d3995998b120dc17589ab0"