diff --git a/.github/component-label-map.yml b/.github/component-label-map.yml
index 0fd1ed4159..2db09c16a0 100644
--- a/.github/component-label-map.yml
+++ b/.github/component-label-map.yml
@@ -104,11 +104,6 @@ pkg:instrumentation-express:
- changed-files:
- any-glob-to-any-file:
- packages/instrumentation-express/**
-pkg:instrumentation-fastify:
- - changed-files:
- - any-glob-to-any-file:
- - packages/instrumentation-fastify/**
- - packages/contrib-test-utils/**
pkg:instrumentation-fs:
- changed-files:
- any-glob-to-any-file:
@@ -304,7 +299,6 @@ pkg-status:unmaintained:
- packages/instrumentation-tedious/**
- packages/instrumentation-connect/**
- packages/instrumentation-dns/**
- - packages/instrumentation-fastify/**
- packages/instrumentation-generic-pool/**
- packages/instrumentation-hapi/**
- packages/instrumentation-knex/**
diff --git a/.github/component_owners.yml b/.github/component_owners.yml
index 5f01a17b2c..a3c8c5558c 100644
--- a/.github/component_owners.yml
+++ b/.github/component_owners.yml
@@ -102,8 +102,6 @@ components:
- JamieDanielson
- pkanal
- raphael-theriault-swi
- packages/instrumentation-fastify: []
- # Unmaintained
packages/instrumentation-generic-pool: []
# Unmaintained
packages/instrumentation-graphql:
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 0cd3620c51..6afcd60206 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -39,7 +39,6 @@
"packages/instrumentation-connect": "0.56.0",
"packages/instrumentation-dns": "0.56.0",
"packages/instrumentation-express": "0.61.0",
- "packages/instrumentation-fastify": "0.57.0",
"packages/instrumentation-generic-pool": "0.56.0",
"packages/instrumentation-graphql": "0.61.0",
"packages/instrumentation-hapi": "0.59.0",
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 5e2192a109..bd9e01cc65 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -195,7 +195,7 @@ Ways do to so may be by providing proof of:
- current or prior involvement with a community that develops systems with similar concepts
- **Example:** A person previously working on a MySQL requesting ownership of a instrumentation package that instruments another database client library instrumentation.
- current or prior extensive use of the instrumented package in other project they are involved in
- - **Example:** A person working at a company that makes extensive use of the `fastify` library requesting ownership of the `@opentelemetry/instrumentation-fastify` package.
+ - **Example:** A person working at a company that makes extensive use of the `Pino` library requesting ownership of the `@opentelemetry/instrumentation-pino` package.
- a vested interest in the telemetry being emitted from that instrumentation
- **Example:** A person employed at an observability vendor that relies on the continued maintenance of the instrumentation
diff --git a/GUIDELINES.md b/GUIDELINES.md
index a3850fc6e3..3dd928b324 100644
--- a/GUIDELINES.md
+++ b/GUIDELINES.md
@@ -193,7 +193,7 @@ Instrumentation should not add additional debug messages for triggering the patc
Instrumentation may add additional patch/unpatch messages for specific functions if it is expected to help in troubleshooting issues with the instrumentation. Few examples:
- If the patch logic is conditional, and user can benefit from ensuring the condition is met and the patch happened. `koa` patching logic examine an object and branch between patching it as router vs middleware, which is applied at runtime. `aws-lambda` will abort patching if the environment is not configured properly.
-- When the patch is not applied directly on a `moduleExports` object in the `InstrumentationBase` callbacks, but rather from an event in the package, like creating new client instance, registering a listener, etc. `fastify` instrumentation applies a patch when a hook is added to the fastify app instance, which is patched from `moduleExports`.
+- When the patch is not applied directly on a `moduleExports` object in the `InstrumentationBase` callbacks, but rather from an event in the package, like creating new client instance, registering a listener, etc.
- In situations where the patch logic is not trivial and it helps to specify patch events in the right context and nuances. `aws-lambda` logs additional properties extracted from the lambda framework and exposes them for troubleshooting.
The cases above are not covered by the base class and offer additional context to the user troubleshooting an issue with the instrumentation.
diff --git a/archive/instrumentation-fastify/README.md b/archive/instrumentation-fastify/README.md
new file mode 100644
index 0000000000..4655896d3b
--- /dev/null
+++ b/archive/instrumentation-fastify/README.md
@@ -0,0 +1,13 @@
+# OpenTelemetry Fastify Instrumentation for Node.js
+
+> [!IMPORTANT]
+> The `@opentelemetry/instrumentation-fastify` package has been **removed** (Mar 2026),
+> both from this git repository and from the `@opentelemetry/auto-instrumentations-node` package.
+> It had been [deprecated](https://github.com/open-telemetry/opentelemetry-js-contrib/pull/2651) Jan 2025, in favor of the [`@fastify/otel`](https://www.npmjs.com/package/@fastify/otel) package, maintained by the Fastify authors.
+> Please check [the offical Fastify plugin's README.md](https://github.com/fastify/otel?tab=readme-ov-file#usage) for instructions on how to use `@fastify/otel`.
+>
+> The last published version of `@opentelemetry/instrumentation-fastify` was version v0.57.0 (4 Mar 2026).
+> For reference, the [source code for the last version can be found here][last-code].
+
+[last-code]: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/instrumentation-fastify-v0.57.0/packages/instrumentation-fastify/
+
diff --git a/examples/fastify/.npmrc b/examples/fastify/.npmrc
deleted file mode 100644
index 43c97e719a..0000000000
--- a/examples/fastify/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-package-lock=false
diff --git a/examples/fastify/README.md b/examples/fastify/README.md
deleted file mode 100644
index 1ebe0395fd..0000000000
--- a/examples/fastify/README.md
+++ /dev/null
@@ -1,65 +0,0 @@
-# Overview
-
-OpenTelemetry Fastify Instrumentation allows the user to automatically collect trace data and export them to the backend of choice (Collector Exporter), to give observability to distributed systems.
-
-This is a simple example that demonstrates tracing calls made to Fastify API. The example shows key aspects of tracing such as
-
-- Root Span (on Client)
-- Child Span (on Client)
-- Span Events
-- Span Attributes
-
-## Prerequisites
-
-Install [Docker Desktop](https://docs.docker.com/desktop), version 4.12.0 or later.
-
-If you have an existing Docker Engine installation, you can [install the docker-compose plugin](https://docs.docker.com/compose/install) instead.
-
-## Installation
-
-```sh
-# from this directory
-npm install
-```
-
-## Run the Application
-
-### Collector - docker container
-
-- Run docker container with collector
-
- ```sh
- # from this directory
- $ npm run docker:start
- ```
-
-### Server
-
-- Run the server
-
- ```sh
- # from this directory
- $ npm run server
- ```
-
-- Run the client
-
- ```sh
- # from this directory
- npm run client
- ```
-
-#### Zipkin UI
-
-Go to Zipkin with your browser
-
-

-
-## Useful links
-
-- For more information on OpenTelemetry, visit:
-- For more information on OpenTelemetry for Node.js, visit:
-
-## LICENSE
-
-Apache License 2.0
diff --git a/examples/fastify/client.js b/examples/fastify/client.js
deleted file mode 100644
index 4cf66f9d63..0000000000
--- a/examples/fastify/client.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const api = require('@opentelemetry/api');
-const axios = require('axios').default;
-
-const tracer = api.trace.getTracer('fastify-client');
-
-function makeRequest() {
- console.log('starting');
- const span = tracer.startSpan('client.makeRequest()', {
- kind: api.SpanKind.CLIENT,
- });
-
- api.context.with(api.trace.setSpan(api.ROOT_CONTEXT, span), async () => {
- try {
- const res = await axios.post('http://localhost:8080/run_test/1', {
- headers: {
- 'Content-Type': 'application/json',
- },
- timeout: 3000,
- });
- console.log('status:', res.statusText);
- span.setStatus({ code: api.SpanStatusCode.OK });
- } catch (e) {
- console.log('failed:', e.message);
- span.setStatus({ code: api.SpanStatusCode.ERROR, message: e.message });
- }
- span.end();
- });
-}
-
-makeRequest();
diff --git a/examples/fastify/docker/collector-config.yaml b/examples/fastify/docker/collector-config.yaml
deleted file mode 100644
index 8f934ed80b..0000000000
--- a/examples/fastify/docker/collector-config.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-receivers:
- otlp:
- protocols:
- grpc:
- http:
- cors:
- allowed_origins:
- - http://*
- - https://*
-
-exporters:
- otlp:
- endpoint: "jaeger:4317"
- tls:
- insecure: true
- prometheus:
- endpoint: "0.0.0.0:9464"
- zipkin:
- endpoint: "http://zipkin:9411/api/v2/spans"
-
-processors:
- batch:
-
-service:
- pipelines:
- traces:
- receivers:
- - otlp
- exporters:
- - otlp
- - zipkin
- processors:
- - batch
- metrics:
- receivers:
- - otlp
- exporters:
- - prometheus
- processors:
- - batch
diff --git a/examples/fastify/docker/docker-compose.yaml b/examples/fastify/docker/docker-compose.yaml
deleted file mode 100644
index 58fcc88163..0000000000
--- a/examples/fastify/docker/docker-compose.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-version: "3"
-services:
- collector:
- image: otel/opentelemetry-collector:0.118.0
- command: ["--config=/conf/collector-config.yaml"]
- volumes:
- - ./collector-config.yaml:/conf/collector-config.yaml
- ports:
- - "4317:4317" # OTLP-grpc compatible endpoint (used by client/server)
- - "4318:4318" # OTLP-http compatible endpoint (unused in this example)
- depends_on:
- - jaeger
- - zipkin
-
- jaeger:
- image: jaegertracing/all-in-one:1.52
- ports:
- - "16686:16686" # frontend (to inspect traces)
-
- zipkin:
- image: openzipkin/zipkin:3
- ports:
- - "9411:9411" # frontend (to inspect traces)
-
- prometheus:
- container_name: prometheus
- image: prom/prometheus:v2.49.0
- volumes:
- - ./prometheus.yaml:/etc/prometheus/prometheus.yml
- ports:
- - "9090:9090"
diff --git a/examples/fastify/docker/prometheus.yaml b/examples/fastify/docker/prometheus.yaml
deleted file mode 100644
index b027daf9a0..0000000000
--- a/examples/fastify/docker/prometheus.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-global:
- scrape_interval: 15s # Default is every 1 minute.
-
-scrape_configs:
- - job_name: 'collector'
- # metrics_path defaults to '/metrics'
- # scheme defaults to 'http'.
- static_configs:
- - targets: ['collector:9464']
diff --git a/examples/fastify/images/trace1.png b/examples/fastify/images/trace1.png
deleted file mode 100644
index 6128ac96a5..0000000000
Binary files a/examples/fastify/images/trace1.png and /dev/null differ
diff --git a/examples/fastify/opentelemetry.js b/examples/fastify/opentelemetry.js
deleted file mode 100644
index a50035fcb2..0000000000
--- a/examples/fastify/opentelemetry.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const { diag, DiagConsoleLogger, DiagLogLevel } = require('@opentelemetry/api');
-
-diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.WARN);
-
-const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http');
-const {
- FastifyInstrumentation,
-} = require('@opentelemetry/instrumentation-fastify');
-
-const {
- OTLPTraceExporter,
-} = require('@opentelemetry/exporter-trace-otlp-proto');
-const {
- OTLPMetricExporter,
-} = require('@opentelemetry/exporter-metrics-otlp-proto');
-const { NodeSDK, metrics } = require('@opentelemetry/sdk-node');
-
-const sdk = new NodeSDK({
- instrumentations: [HttpInstrumentation, new FastifyInstrumentation()],
- traceExporter: new OTLPTraceExporter(),
- metricReader: new metrics.PeriodicExportingMetricReader({
- exporter: new OTLPMetricExporter(),
- }),
-});
-
-process.on('beforeExit', async () => {
- await sdk.shutdown();
-});
-
-sdk.start();
diff --git a/examples/fastify/package.json b/examples/fastify/package.json
deleted file mode 100644
index 7df877be80..0000000000
--- a/examples/fastify/package.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "name": "example-fastify",
- "private": true,
- "version": "0.26.0",
- "description": "Example of Fastify integration with OpenTelemetry",
- "main": "index.js",
- "scripts": {
- "client": "cross-env OTEL_SERVICE_NAME=example-fastify-client node --require ./opentelemetry.js ./client.js",
- "docker:start": "cd ./docker && docker compose down && docker compose up",
- "docker:stop": "cd ./docker && docker compose down",
- "server": "cross-env OTEL_SERVICE_NAME=example-fastify-server node --require ./opentelemetry.js ./server.js"
- },
- "repository": {
- "type": "git",
- "url": "git+ssh://git@github.com/open-telemetry/opentelemetry-js.git"
- },
- "keywords": [
- "opentelemetry",
- "express",
- "tracing"
- ],
- "engines": {
- "node": ">=8"
- },
- "files": [
- "build/src/**/*.js",
- "build/src/**/*.map",
- "build/src/**/*.d.ts",
- "doc",
- "LICENSE",
- "README.md"
- ],
- "author": "OpenTelemetry Authors",
- "license": "Apache-2.0",
- "bugs": {
- "url": "https://github.com/open-telemetry/opentelemetry-js/issues"
- },
- "dependencies": {
- "@opentelemetry/api": "1.7.0",
- "@opentelemetry/sdk-node": "^0.46.0",
- "@opentelemetry/exporter-trace-otlp-proto": "^0.46.0",
- "@opentelemetry/exporter-metrics-otlp-proto": "^0.46.0",
- "@opentelemetry/instrumentation": "^0.46.0",
- "@opentelemetry/instrumentation-http": "^0.46.0",
- "@opentelemetry/instrumentation-fastify": "^0.32.6",
- "@opentelemetry/sdk-trace-node": "~1.19.0",
- "@opentelemetry/resources": "~1.19.0",
- "@opentelemetry/semantic-conventions": "^1.27.0",
- "@opentelemetry/sdk-trace-base": "~1.19.0",
- "cross-env": "^7.0.3",
- "axios": "^1.6.4",
- "fastify": "^4.25.2",
- "fastify-cors": "^6.1.0",
- "@fastify/express": "^2.3.0",
- "middie": "^7.1.0"
- },
- "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme",
- "devDependencies": {}
-}
diff --git a/examples/fastify/server.js b/examples/fastify/server.js
deleted file mode 100644
index afad11a43a..0000000000
--- a/examples/fastify/server.js
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const api = require('@opentelemetry/api');
-const tracer = api.trace.getTracer('fastify-server');
-const Fastify = require('fastify');
-const axios = require('axios');
-
-const PORT = 8080;
-const app = Fastify({ logger: true });
-app.register(require('@fastify/express')).register(subsystem);
-
-async function subsystem(fastify) {
- fastify.addHook('onRequest', async () => {
- const span = api.trace.getSpan(api.context.active());
- span.setAttribute('order', 2);
- });
-
- fastify.addHook('onRequest', async function onRequestHook() {
- const span = api.trace.getSpan(api.context.active());
- span.setAttribute('order', 3);
-
- const newSpan = tracer.startSpan('foo');
- newSpan.setAttribute('foo', 'bar');
- newSpan.end();
- });
-
- fastify.use((req, res, next) => {
- const span = api.trace.getSpan(api.context.active());
- span.setAttribute('order', 1);
- next();
- });
-
- fastify.post('/run_test2/:id', async (req, res) => {
- const span = api.trace.getSpan(api.context.active());
- span.setAttribute('order', 4);
-
- const result = await axios.get(
- 'https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/main/package.json'
- );
- const result2 = await axios.get(
- 'https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/main/package.json'
- );
-
- console.log('sending response');
- // throw Error('boom lala');
- res.send(`OK ${result.data.version} ${result2.data.version}`);
- });
-
- fastify.addHook('onRequest', (req, reply, done) => {
- const span = api.trace.getSpan(api.context.active());
- console.log('first', span);
- console.log('kuku1');
- span.setAttribute('kuku1', 'lala');
-
- setTimeout(() => {
- console.log('kuku2');
- span.setAttribute('kuku2', 'lala');
- const newSpan = api.trace.tracer.startSpan('tada');
- newSpan.end();
-
- reply.send('foo');
- done();
- }, 2000);
- });
-}
-
-app.post('/run_test/:id', async (req, res) => {
- const result = await axios.get(
- 'https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/main/package.json'
- );
- console.log('sending response');
- res.send(`OK ${result.data.version}`);
-});
-
-app.listen({
- port: PORT,
-});
diff --git a/package-lock.json b/package-lock.json
index 0f5fbfcc3e..f1171ccd74 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5234,315 +5234,6 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@fastify/ajv-compiler": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz",
- "integrity": "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^8.11.0",
- "ajv-formats": "^2.1.1",
- "fast-uri": "^2.0.0"
- }
- },
- "node_modules/@fastify/ajv-compiler/node_modules/ajv": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
- "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/@fastify/ajv-compiler/node_modules/ajv/node_modules/fast-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
- "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fastify"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fastify"
- }
- ],
- "license": "BSD-3-Clause"
- },
- "node_modules/@fastify/ajv-compiler/node_modules/fast-uri": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz",
- "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@fastify/error": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz",
- "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@fastify/express": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@fastify/express/-/express-3.0.0.tgz",
- "integrity": "sha512-Ug6aulXCUiHgMyrHVYQqnQbGdsAV0aTad6nZxbOr6w3QjKn1mdQS3Kyzvc+I0xMjZ9yIyMUWHSooHgZ0l7nOng==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "express": "^4.17.1",
- "fastify-plugin": "^4.0.0"
- }
- },
- "node_modules/@fastify/express/node_modules/array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@fastify/express/node_modules/content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "5.2.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/@fastify/express/node_modules/cookie-signature": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
- "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@fastify/express/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/@fastify/express/node_modules/debug/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@fastify/express/node_modules/encodeurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
- "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/@fastify/express/node_modules/express": {
- "version": "4.22.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz",
- "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "accepts": "~1.3.8",
- "array-flatten": "1.1.1",
- "body-parser": "~1.20.3",
- "content-disposition": "~0.5.4",
- "content-type": "~1.0.4",
- "cookie": "~0.7.1",
- "cookie-signature": "~1.0.6",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "~1.3.1",
- "fresh": "~0.5.2",
- "http-errors": "~2.0.0",
- "merge-descriptors": "1.0.3",
- "methods": "~1.1.2",
- "on-finished": "~2.4.1",
- "parseurl": "~1.3.3",
- "path-to-regexp": "~0.1.12",
- "proxy-addr": "~2.0.7",
- "qs": "~6.14.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.2.1",
- "send": "~0.19.0",
- "serve-static": "~1.16.2",
- "setprototypeof": "1.2.0",
- "statuses": "~2.0.1",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/@fastify/express/node_modules/finalhandler": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz",
- "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "on-finished": "~2.4.1",
- "parseurl": "~1.3.3",
- "statuses": "~2.0.2",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/@fastify/express/node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/@fastify/express/node_modules/merge-descriptors": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
- "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@fastify/express/node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@fastify/express/node_modules/path-to-regexp": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
- "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@fastify/express/node_modules/send": {
- "version": "0.19.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz",
- "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "~0.5.2",
- "http-errors": "~2.0.1",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "~2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "~2.0.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/@fastify/express/node_modules/serve-static": {
- "version": "1.16.3",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz",
- "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "~0.19.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/@fastify/express/node_modules/statuses": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
- "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/@fastify/fast-json-stringify-compiler": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz",
- "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-json-stringify": "^5.7.0"
- }
- },
- "node_modules/@fastify/merge-json-schemas": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz",
- "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3"
- }
- },
"node_modules/@gar/promisify": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
@@ -9534,10 +9225,6 @@
"resolved": "packages/instrumentation-express",
"link": true
},
- "node_modules/@opentelemetry/instrumentation-fastify": {
- "resolved": "packages/instrumentation-fastify",
- "link": true
- },
"node_modules/@opentelemetry/instrumentation-fetch": {
"version": "0.213.0",
"resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fetch/-/instrumentation-fetch-0.213.0.tgz",
@@ -13832,13 +13519,6 @@
"node": ">=6.5"
}
},
- "node_modules/abstract-logging": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz",
- "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -14632,17 +14312,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/avvio": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.4.0.tgz",
- "integrity": "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@fastify/error": "^3.3.0",
- "fastq": "^1.17.1"
- }
- },
"node_modules/aws-ssl-profiles": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz",
@@ -18881,13 +18550,6 @@
"node": "> 0.1.90"
}
},
- "node_modules/fast-content-type-parse": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz",
- "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/fast-decode-uri-component": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz",
@@ -18946,88 +18608,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/fast-json-stringify": {
- "version": "5.16.1",
- "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz",
- "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@fastify/merge-json-schemas": "^0.1.0",
- "ajv": "^8.10.0",
- "ajv-formats": "^3.0.1",
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^2.1.0",
- "json-schema-ref-resolver": "^1.0.1",
- "rfdc": "^1.2.0"
- }
- },
- "node_modules/fast-json-stringify/node_modules/ajv": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
- "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/fast-json-stringify/node_modules/ajv-formats": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
- "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
- }
- },
- "node_modules/fast-json-stringify/node_modules/ajv/node_modules/fast-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
- "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fastify"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fastify"
- }
- ],
- "license": "BSD-3-Clause"
- },
- "node_modules/fast-json-stringify/node_modules/fast-uri": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz",
- "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-json-stringify/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
@@ -19108,38 +18688,6 @@
"node": ">= 4.9.1"
}
},
- "node_modules/fastify": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.18.0.tgz",
- "integrity": "sha512-L5o/2GEkBastQ3HV0dtKo7SUZ497Z1+q4fcqAoPyq6JCQ/8zdk1JQEoTQwnBWCp+EmA7AQa6mxNqSAEhzP0RwQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@fastify/ajv-compiler": "^3.5.0",
- "@fastify/error": "^3.2.0",
- "@fastify/fast-json-stringify-compiler": "^4.3.0",
- "abstract-logging": "^2.0.1",
- "avvio": "^8.2.1",
- "fast-content-type-parse": "^1.0.0",
- "fast-json-stringify": "^5.7.0",
- "find-my-way": "^7.6.0",
- "light-my-request": "^5.9.1",
- "pino": "^8.12.0",
- "process-warning": "^2.2.0",
- "proxy-addr": "^2.0.7",
- "rfdc": "^1.3.0",
- "secure-json-parse": "^2.5.0",
- "semver": "^7.5.0",
- "tiny-lru": "^11.0.1"
- }
- },
- "node_modules/fastify-plugin": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.1.tgz",
- "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/fastq": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
@@ -22492,16 +22040,6 @@
"dev": true,
"license": "(AFL-2.1 OR BSD-3-Clause)"
},
- "node_modules/json-schema-ref-resolver": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz",
- "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3"
- }
- },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -24106,25 +23644,6 @@
"node": "^20.17.0 || >=22.9.0"
}
},
- "node_modules/light-my-request": {
- "version": "5.14.0",
- "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.14.0.tgz",
- "integrity": "sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "cookie": "^0.7.0",
- "process-warning": "^3.0.0",
- "set-cookie-parser": "^2.4.1"
- }
- },
- "node_modules/light-my-request/node_modules/process-warning": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz",
- "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/lighthouse-logger": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz",
@@ -29639,13 +29158,6 @@
"node": ">=8"
}
},
- "node_modules/process-warning": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.2.tgz",
- "integrity": "sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/proggy": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/proggy/-/proggy-3.0.0.tgz",
@@ -31581,13 +31093,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/secure-json-parse": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz",
- "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
"node_modules/seed-random": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz",
@@ -31825,13 +31330,6 @@
"dev": true,
"license": "ISC"
},
- "node_modules/set-cookie-parser": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
- "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/set-function-length": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
@@ -34237,16 +33735,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/tiny-lru": {
- "version": "11.4.7",
- "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.4.7.tgz",
- "integrity": "sha512-w/Te7uMUVeH0CR8vZIjr+XiN41V+30lkDdK+NRIDCUYKKuL9VcmaUEmaPISuwGhLlrTGh5yu18lENtR9axSxYw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/tinyglobby": {
"version": "0.2.15",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
@@ -36635,7 +36123,6 @@
"@opentelemetry/instrumentation-dataloader": "^0.30.0",
"@opentelemetry/instrumentation-dns": "^0.56.0",
"@opentelemetry/instrumentation-express": "^0.61.0",
- "@opentelemetry/instrumentation-fastify": "^0.57.0",
"@opentelemetry/instrumentation-fs": "^0.32.0",
"@opentelemetry/instrumentation-generic-pool": "^0.56.0",
"@opentelemetry/instrumentation-graphql": "^0.61.0",
@@ -37101,32 +36588,6 @@
"@opentelemetry/api": "^1.3.0"
}
},
- "packages/instrumentation-fastify": {
- "name": "@opentelemetry/instrumentation-fastify",
- "version": "0.57.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "^2.0.0",
- "@opentelemetry/instrumentation": "^0.213.0",
- "@opentelemetry/semantic-conventions": "^1.27.0"
- },
- "devDependencies": {
- "@fastify/express": "^3.0.0",
- "@opentelemetry/api": "^1.3.0",
- "@opentelemetry/context-async-hooks": "^2.0.0",
- "@opentelemetry/contrib-test-utils": "^0.60.0",
- "@opentelemetry/instrumentation-http": "^0.213.0",
- "@opentelemetry/sdk-trace-base": "^2.0.0",
- "@opentelemetry/sdk-trace-node": "^2.0.0",
- "fastify": "4.18.0"
- },
- "engines": {
- "node": "^18.19.0 || >=20.6.0"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
"packages/instrumentation-fs": {
"name": "@opentelemetry/instrumentation-fs",
"version": "0.32.0",
diff --git a/packages/auto-instrumentations-node/README.md b/packages/auto-instrumentations-node/README.md
index b7da0a441d..7500daa8be 100644
--- a/packages/auto-instrumentations-node/README.md
+++ b/packages/auto-instrumentations-node/README.md
@@ -177,10 +177,6 @@ registerInstrumentations({
- [@opentelemetry/instrumentation-dataloader](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-dataloader)
- [@opentelemetry/instrumentation-dns](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-dns)
- [@opentelemetry/instrumentation-express](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-express)
-- [@opentelemetry/instrumentation-fastify](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-fastify) (deprecated, default disabled)
- - This component is **deprecated** in favor of the official instrumentation package [`@fastify/otel`](https://www.npmjs.com/package/@fastify/otel), maintained by the Fastify authors.
- - Please see [the offical plugin's README.md](https://github.com/fastify/otel?tab=readme-ov-file#usage) for instructions on how to use `@fastify/otel`.
- - This component will be removed on June 30, 2025
- [@opentelemetry/instrumentation-fs](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-fs) (default disabled)
- [@opentelemetry/instrumentation-generic-pool](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-generic-pool)
- [@opentelemetry/instrumentation-graphql](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-graphql)
@@ -210,6 +206,11 @@ registerInstrumentations({
- [@opentelemetry/instrumentation-undici](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-undici)
- [@opentelemetry/instrumentation-winston](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-winston)
+### Removed instrumentations
+
+- [`@opentelemetry/instrumentation-fastify`](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/archive/instrumentation-fastify) was removed Mar 2026. It had been deprecated (and default disabled) Jan 2025, in favor of the [`@fastify/otel`](https://www.npmjs.com/package/@fastify/otel) instrumentation package, maintained by the Fastify authors.
+ - Please see [the offical plugin's README.md](https://github.com/fastify/otel?tab=readme-ov-file#usage) for instructions on how to use `@fastify/otel`.
+
## Useful links
- For more information on OpenTelemetry, visit:
diff --git a/packages/auto-instrumentations-node/package.json b/packages/auto-instrumentations-node/package.json
index dfb61f76bc..56ab112b51 100644
--- a/packages/auto-instrumentations-node/package.json
+++ b/packages/auto-instrumentations-node/package.json
@@ -54,7 +54,6 @@
"@opentelemetry/instrumentation-dataloader": "^0.30.0",
"@opentelemetry/instrumentation-dns": "^0.56.0",
"@opentelemetry/instrumentation-express": "^0.61.0",
- "@opentelemetry/instrumentation-fastify": "^0.57.0",
"@opentelemetry/instrumentation-fs": "^0.32.0",
"@opentelemetry/instrumentation-generic-pool": "^0.56.0",
"@opentelemetry/instrumentation-graphql": "^0.61.0",
diff --git a/packages/auto-instrumentations-node/src/utils.ts b/packages/auto-instrumentations-node/src/utils.ts
index 8d99113eb4..ee3fb68c09 100644
--- a/packages/auto-instrumentations-node/src/utils.ts
+++ b/packages/auto-instrumentations-node/src/utils.ts
@@ -27,7 +27,6 @@ import { CucumberInstrumentation } from '@opentelemetry/instrumentation-cucumber
import { DataloaderInstrumentation } from '@opentelemetry/instrumentation-dataloader';
import { DnsInstrumentation } from '@opentelemetry/instrumentation-dns';
import { ExpressInstrumentation } from '@opentelemetry/instrumentation-express';
-import { FastifyInstrumentation } from '@opentelemetry/instrumentation-fastify';
import { FsInstrumentation } from '@opentelemetry/instrumentation-fs';
import { GenericPoolInstrumentation } from '@opentelemetry/instrumentation-generic-pool';
import { GraphQLInstrumentation } from '@opentelemetry/instrumentation-graphql';
@@ -106,7 +105,6 @@ const InstrumentationMap = {
'@opentelemetry/instrumentation-dataloader': DataloaderInstrumentation,
'@opentelemetry/instrumentation-dns': DnsInstrumentation,
'@opentelemetry/instrumentation-express': ExpressInstrumentation,
- '@opentelemetry/instrumentation-fastify': FastifyInstrumentation,
'@opentelemetry/instrumentation-fs': FsInstrumentation,
'@opentelemetry/instrumentation-generic-pool': GenericPoolInstrumentation,
'@opentelemetry/instrumentation-graphql': GraphQLInstrumentation,
@@ -139,10 +137,7 @@ const InstrumentationMap = {
'@opentelemetry/instrumentation-winston': WinstonInstrumentation,
};
-const defaultExcludedInstrumentations = [
- '@opentelemetry/instrumentation-fs',
- '@opentelemetry/instrumentation-fastify',
-];
+const defaultExcludedInstrumentations = ['@opentelemetry/instrumentation-fs'];
// Config types inferred automatically from the first argument of the constructor
type ConfigArg = T extends new (...args: infer U) => unknown ? U[0] : never;
diff --git a/packages/auto-instrumentations-node/test/utils.test.ts b/packages/auto-instrumentations-node/test/utils.test.ts
index c83fc520c0..b0f6aaf2f4 100644
--- a/packages/auto-instrumentations-node/test/utils.test.ts
+++ b/packages/auto-instrumentations-node/test/utils.test.ts
@@ -30,8 +30,7 @@ describe('utils', () => {
).filter(depName => {
return (
depName.startsWith('@opentelemetry/instrumentation-') &&
- depName !== '@opentelemetry/instrumentation-fs' &&
- depName !== '@opentelemetry/instrumentation-fastify'
+ depName !== '@opentelemetry/instrumentation-fs'
);
});
diff --git a/packages/instrumentation-fastify/.tav.yml b/packages/instrumentation-fastify/.tav.yml
deleted file mode 100644
index 608eb2dbf8..0000000000
--- a/packages/instrumentation-fastify/.tav.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-"fastify":
- - versions:
- include: "^4.0.0"
- mode: max-7
- commands: npm run test
- - versions:
- include: ">=5 <6"
- mode: max-7
- commands: npm run test
- peerDependencies: "@fastify/express@4.0.1"
- node: '>=20'
-
-# Fastify versions after 4.18.0 require a typescript greater than 4.4.4.
-"typescript":
- - versions: "4.7.4"
diff --git a/packages/instrumentation-fastify/CHANGELOG.md b/packages/instrumentation-fastify/CHANGELOG.md
deleted file mode 100644
index 244022b9e6..0000000000
--- a/packages/instrumentation-fastify/CHANGELOG.md
+++ /dev/null
@@ -1,610 +0,0 @@
-
-# Changelog
-
-## [0.57.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.56.0...instrumentation-fastify-v0.57.0) (2026-03-04)
-
-
-### Features
-
-* **deps:** update deps matching "@opentelemetry/*" ([#3411](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3411)) ([7f4b776](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/7f4b776abbe22aa38d2e9f36c22aa293a9e31687))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.59.0 to ^0.60.0
-
-## [0.56.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.55.0...instrumentation-fastify-v0.56.0) (2026-02-16)
-
-
-### Features
-
-* **deps:** update deps matching "@opentelemetry/*" ([#3383](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3383)) ([d3ac785](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/d3ac7851d69d0781c2c631012937a73998b744e1))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.58.0 to ^0.59.0
-
-## [0.55.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.54.0...instrumentation-fastify-v0.55.0) (2026-01-21)
-
-
-### Features
-
-* **deps:** update deps matching '@opentelemetry/*' ([#3353](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3353)) ([a56bbdc](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/a56bbdc34a5015b0a5fdcb7522f168cfc90ba95c))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.57.0 to ^0.58.0
-
-## [0.54.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.53.1...instrumentation-fastify-v0.54.0) (2026-01-14)
-
-
-### Features
-
-* **deps:** update deps matching '@opentelemetry/*' ([#3332](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3332)) ([925a150](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/925a1501ce0d082c6845d36e7c964e625ee3de0c))
-* **deps:** update deps matching '@opentelemetry/*' ([#3340](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3340)) ([2954943](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/29549434e7204b03d58635eb20352efee0e797d4))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.56.0 to ^0.57.0
-
-## [0.53.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.53.0...instrumentation-fastify-v0.53.1) (2025-12-17)
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.55.0 to ^0.56.0
-
-## [0.53.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.52.0...instrumentation-fastify-v0.53.0) (2025-11-06)
-
-
-### Features
-
-* **deps:** update deps matching '@opentelemetry/*' ([#3210](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3210)) ([2d675d3](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/2d675d368a1b8df0599bc5f6462db535a225c0b6))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.54.0 to ^0.55.0
-
-## [0.52.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.51.0...instrumentation-fastify-v0.52.0) (2025-10-21)
-
-
-### Features
-
-* **deps:** update deps matching '@opentelemetry/*' ([#3187](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3187)) ([ab96334](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/ab9633455794de79964e60775c804791d19259bc))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.53.0 to ^0.54.0
-
-## [0.51.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.50.3...instrumentation-fastify-v0.51.0) (2025-10-06)
-
-
-### Features
-
-* **deps:** update deps matching '@opentelemetry/*' ([#3145](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3145)) ([704c716](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/704c7161f782590d7b644ab607b5f9c29cdfd63f))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.52.2 to ^0.53.0
-
-## [0.50.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.50.2...instrumentation-fastify-v0.50.3) (2025-09-29)
-
-
-### Bug Fixes
-
-* force new release-please PR ([#3123](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3123)) ([0dab838](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/0dab8383b5349e21a968fe2cedd8a6e2243f86d0))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.52.1 to ^0.52.2
-
-## [0.50.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.50.1...instrumentation-fastify-v0.50.2) (2025-09-25)
-
-
-### Bug Fixes
-
-* force new release-please PR ([#3098](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3098)) ([13c58e9](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/13c58e9ad77b266a03e34ffd4b61ab18c86f9d73))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.52.0 to ^0.52.1
-
-## [0.50.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.50.0...instrumentation-fastify-v0.50.1) (2025-09-24)
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.51.0 to ^0.52.0
-
-## [0.50.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.49.0...instrumentation-fastify-v0.50.0) (2025-09-10)
-
-
-### Features
-
-* **deps:** update deps matching '@opentelemetry/*' ([#3034](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3034)) ([bee0a66](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/bee0a66ef825145fb1a9b172c3468ccf0c97a820))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.50.0 to ^0.51.0
-
-## [0.49.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.48.0...instrumentation-fastify-v0.49.0) (2025-09-08)
-
-
-### Features
-
-* **deps:** update otel deps ([#3027](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/3027)) ([fd9e262](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/fd9e262fabf4e8fd8e246b8967892fa26442968a))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.49.0 to ^0.50.0
-
-## [0.48.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.47.1...instrumentation-fastify-v0.48.0) (2025-07-09)
-
-
-### Features
-
-* **deps:** update deps matching '@opentelemetry/*' ([#2930](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2930)) ([e4ab2a9](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/e4ab2a932084016f9750bd09d3f9a469c44628ea))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.48.0 to ^0.49.0
-
-## [0.47.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.47.0...instrumentation-fastify-v0.47.1) (2025-07-04)
-
-
-### Bug Fixes
-
-* **deps:** update all patch versions ([#2832](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2832)) ([e45605d](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/e45605d0e70158b0ea868bc3c8acb65095d6d4d1))
-
-## [0.47.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.46.0...instrumentation-fastify-v0.47.0) (2025-06-02)
-
-
-### Features
-
-* **deps:** update deps matching '@opentelemetry/*' ([#2871](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2871)) ([d33c6f2](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/d33c6f232a3c5673e618fa62692d2d3bbfe4c0fc))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.47.0 to ^0.48.0
-
-## [0.46.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.45.0...instrumentation-fastify-v0.46.0) (2025-05-15)
-
-
-### Features
-
-* **deps:** update deps matching '@opentelemetry/*' ([#2828](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2828)) ([59c2a4c](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/59c2a4c002992518da2d91b4ceb24f8479ad2346))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.46.0 to ^0.47.0
-
-## [0.45.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.44.2...instrumentation-fastify-v0.45.0) (2025-03-18)
-
-
-### ⚠ BREAKING CHANGES
-
-* chore!: Update to 2.x and 0.200.x @opentelemetry/* packages from opentelemetry-js.git per [2.x upgrade guide](https://github.com/open-telemetry/opentelemetry-js/blob/main/doc/upgrade-to-2.x.md)
- * The minimum supported Node.js has been raised to ^18.19.0 || >=20.6.0. This means that support for Node.js 14 and 16 has been dropped.
- * The minimum supported TypeScript version has been raised to 5.0.4.
- * The compilation target for transpiled TypeScript has been raised to ES2022 (from ES2017).
-
-### Bug Fixes
-
-* **deps:** update otel core experimental to ^0.57.2 ([#2716](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2716)) ([d2a9a20](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/d2a9a20f1cd8c46c842e18490a4eba36fd71c2da))
-
-
-### Miscellaneous Chores
-
-* update to JS SDK 2.x ([#2738](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2738)) ([7fb4ba3](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/7fb4ba3bc36dc616bd86375cfd225722b850d0d5))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.45.1 to ^0.46.0
-
-## [0.44.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.44.1...instrumentation-fastify-v0.44.2) (2025-02-19)
-
-
-### Bug Fixes
-
-* **deps:** update otel core experimental to ^0.57.1 ([#2687](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2687)) ([5e20fe2](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/5e20fe2f450a1be4ea100e8a6d196e33ccff0cda))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.45.0 to ^0.45.1
-
-## [0.44.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.44.0...instrumentation-fastify-v0.44.1) (2025-01-20)
-
-
-### Bug Fixes
-
-* **instrumentation-fastify:** add missing module export ([#2633](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2633)) ([1a6839b](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/1a6839b00bfb116528e620c19f118d0a920c987f))
-
-## [0.44.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.43.0...instrumentation-fastify-v0.44.0) (2024-12-18)
-
-
-### Features
-
-* **deps:** update deps matching '@opentelemetry/*' ([#2608](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2608)) ([aa46705](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/aa46705d2fd1bd5ee6d763ac8cd73a7630889d34))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.44.0 to ^0.45.0
-
-## [0.43.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.42.0...instrumentation-fastify-v0.43.0) (2024-12-04)
-
-
-### Features
-
-* **deps:** update deps matching '@opentelemetry/*' ([#2582](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2582)) ([5df02cb](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/5df02cbb35681d2b5cce359dda7b023d7bf339f2))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.43.0 to ^0.44.0
-
-## [0.42.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.41.0...instrumentation-fastify-v0.42.0) (2024-11-18)
-
-
-### Features
-
-* **deps:** update deps matching '@opentelemetry/*' ([#2535](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2535)) ([5223a6c](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/5223a6ca10c5930cf2753271e1e670ae682d6d9c))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.42.0 to ^0.43.0
-
-## [0.41.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.40.0...instrumentation-fastify-v0.41.0) (2024-10-25)
-
-
-### Features
-
-* update "@opentelemetry/*" dependencies to 1.27.0/0.54.0 ([2822511](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/2822511a8acffb875ebd67ff2cf95980a9ddc01e))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.41.0 to ^0.42.0
-
-## [0.40.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.39.0...instrumentation-fastify-v0.40.0) (2024-10-08)
-
-
-### Features
-
-* **instrumentation-fastify:** Enable Fastify v5 ([#2460](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2460)) ([02a9fdb](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/02a9fdb60ce9cb05f77bb431811cd40b348c45f1))
-
-## [0.39.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.38.0...instrumentation-fastify-v0.39.0) (2024-09-02)
-
-
-### Features
-
-* update deps matching "@opentelemetry/" ([9fa058e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/9fa058ebb919de4e2a4e1af95b3c792c6ea962ac))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.40.0 to ^0.41.0
-
-## [0.38.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.37.0...instrumentation-fastify-v0.38.0) (2024-07-03)
-
-
-### ⚠ BREAKING CHANGES
-
-* standardize supported versions and set upper bound limit ([#2196](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2196))
-
-### Bug Fixes
-
-* standardize supported versions and set upper bound limit ([#2196](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2196)) ([01c28ae](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/01c28ae016ed32f9968e52bc91e3e3700dcef82e))
-
-## [0.37.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.36.1...instrumentation-fastify-v0.37.0) (2024-06-06)
-
-
-### Features
-
-* update otel core dependencies ([#2257](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2257)) ([71c15d5](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/71c15d597276773c19c16c1117b8d151892e5366))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.39.0 to ^0.40.0
-
-## [0.36.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.36.0...instrumentation-fastify-v0.36.1) (2024-05-02)
-
-
-### Bug Fixes
-
-* remove unuseful patch message from instrumentations ([#2161](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2161)) ([34f56e0](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/34f56e0e28a0873b69a499c9e91798b19fea8e96))
-
-## [0.36.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.35.0...instrumentation-fastify-v0.36.0) (2024-04-25)
-
-
-### Features
-
-* **deps:** update otel-js to 0.51.0 ([80cbee7](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/80cbee73130c65c8ccd78384485a7be8d2a4a84b))
-* remove generic type from instrumentations ([80cbee7](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/80cbee73130c65c8ccd78384485a7be8d2a4a84b))
-
-
-### Bug Fixes
-
-* revert modifications to Apache license ([#2105](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2105)) ([4590c8d](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/4590c8df184bbcb9bd67ce1111df9f25f865ccf2))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.38.0 to ^0.39.0
-
-## [0.35.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.34.0...instrumentation-fastify-v0.35.0) (2024-04-03)
-
-
-### Features
-
-* **deps:** update otel-js to 1.23.0/0.50.0 ([#2076](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2076)) ([d5f079b](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/d5f079b3992395dcfb3b791c9fdaeefd6d6526f8))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.37.0 to ^0.38.0
-
-## [0.34.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.33.0...instrumentation-fastify-v0.34.0) (2024-03-06)
-
-
-### Features
-
-* **deps:** update otel-js to 1.22.0/0.49.1 ([edc426b](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/edc426b348bc5f45ff6816bcd5ea7473251a05df))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.36.0 to ^0.37.0
-
-## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.32.6...instrumentation-fastify-v0.33.0) (2024-01-29)
-
-
-### Features
-
-* **deps:** update otel-js to 1.21.0/0.48.0 ([9624486](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/96244869d0fe22e6006fa6ef5e54839e06afb99d))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.35.1 to ^0.36.0
-
-## [0.32.6](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.32.5...instrumentation-fastify-v0.32.6) (2024-01-04)
-
-
-### Bug Fixes
-
-* **deps:** update otel core experimental ([#1866](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1866)) ([9366543](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/9366543f5572e1e976ce176ddeb0b438f6c16c45))
-
-
-### Dependencies
-
-* The following workspace dependencies were updated
- * devDependencies
- * @opentelemetry/contrib-test-utils bumped from ^0.35.0 to ^0.35.1
-
-## [0.32.5](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.32.4...instrumentation-fastify-v0.32.5) (2023-12-07)
-
-
-### Bug Fixes
-
-* **instrumentation-fastify:** fix span attributes and avoid FSTDEP017 FastifyDeprecation warning for 404 request ([#1763](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1763)) ([18ae75c](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/18ae75c6004d66744ee99be68469843372c19d1e))
-
-## [0.32.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.32.3...instrumentation-fastify-v0.32.4) (2023-11-13)
-
-
-### Bug Fixes
-
-* **deps:** update otel core experimental to v0.45.0 ([#1779](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1779)) ([7348635](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/734863562c25cd0497aa3f51eccb2bf8bbd5e711))
-* **deps:** update otel core experimental to v0.45.1 ([#1781](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1781)) ([7f420e2](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/7f420e25a8d396c83fd38101088434210705e365))
-* **instrumentation-fastify:** do not wrap preClose and onRequestAbort hooks ([#1764](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1764)) ([de6156a](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/de6156aea1db7a7a018ad34f08cfc9f7ff7752b8))
-
-## [0.32.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.32.2...instrumentation-fastify-v0.32.3) (2023-10-10)
-
-
-### Bug Fixes
-
-* **deps:** update all patch versions ([#1687](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1687)) ([47301c0](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/47301c038e4dc7d24797cb0b8426033ecc0374e6))
-* **deps:** update otel core experimental to v0.43.0 ([#1676](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1676)) ([deb9aa4](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/deb9aa441dc7d2b0fd5ec11b41c934a1e93134fd))
-* **deps:** update otel core experimental to v0.44.0 ([#1725](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1725)) ([540a0d1](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/540a0d1ff5641522abba560d59a298084f786630))
-* **fastify:** Use plugin name for middleware span name ([#1680](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1680)) ([4503d3e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/4503d3efe98c0b440582101df69a6df49a6cdb97))
-* **instrumentation-fastify:** add tav script ([#1710](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1710)) ([52dd42d](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/52dd42d4748f6aef43988e62f464d95b808a06a6))
-* Removed deprecated properties usage in Fastify instrumentation ([#1679](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1679)) ([d3328f8](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/d3328f8f55c6e3e2e7405a8e499d50555e9bec1a))
-
-## [0.32.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.32.1...instrumentation-fastify-v0.32.2) (2023-08-30)
-
-
-### Bug Fixes
-
-* **fastify:** Make sure consturctor patching works with esm ([#1624](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1624)) ([67f66d2](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/67f66d2e0e8ea9f5d9b46819d4f736fa1e0666b6))
-
-## [0.32.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.32.0...instrumentation-fastify-v0.32.1) (2023-08-14)
-
-
-### Bug Fixes
-
-* **deps:** update otel core experimental to v0.41.2 ([#1628](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1628)) ([4f11245](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/4f1124524aee565c3cfbf3975aa5d3d039377621))
-* **fastify:** readme option table format ([#1619](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1619)) ([3d6c7be](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/3d6c7beffd7c1cc0ef99c7560bc21e01db28b431))
-* Revert "feat(minification): Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545))" ([#1611](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1611)) ([e5bca5f](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/e5bca5fe5b27adc59c8de8fe4087d38b69d93bd4))
-
-## [0.32.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.31.4...instrumentation-fastify-v0.32.0) (2023-07-12)
-
-
-### Features
-
-* **fastify:** Skip update HTTP's span name and update RpcMetadata's route instead ([#1569](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1569)) ([8d9687d](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/8d9687d89e4a80dbf2a5e8be6fb027ff20824593))
-* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482))
-
-
-### Bug Fixes
-
-* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885))
-* **instrumentation-fastify:** fix fastify typescript compilation issue ([#1556](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1556)) ([784a422](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/784a4225182037b4233aefb43c7a104eab1ac818))
-
-## [0.31.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.31.3...instrumentation-fastify-v0.31.4) (2023-06-12)
-
-
-### Bug Fixes
-
-* **deps:** update otel core experimental to ^0.40.0 ([#1527](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1527)) ([4e18a46](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/4e18a46396eb2f06e86790dbbd68075c4c2dc83b))
-
-## [0.31.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.31.2...instrumentation-fastify-v0.31.3) (2023-05-16)
-
-
-### Bug Fixes
-
-* **deps:** update otel core experimental to ^0.39.1 ([#1493](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1493)) ([8ef95bc](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/8ef95bccc2d03302089f256f3d0ee091869b4c44))
-* **eslint-config:** replace gts with prettier and eslint ([#1439](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1439)) ([2571c37](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/2571c371be1b5738442200cab2415b6a04c32aab))
-
-## [0.31.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.31.1...instrumentation-fastify-v0.31.2) (2023-04-25)
-
-
-### Bug Fixes
-
-* **deps:** update otel core experimental to ^0.38.0 ([#1468](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1468)) ([565a2b2](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/565a2b2c6fde88af3f5401ef6a5a9643d0d66349))
-
-## [0.31.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.31.0...instrumentation-fastify-v0.31.1) (2023-02-07)
-
-
-### Bug Fixes
-
-* **deps:** update otel core experimental to ^0.35.1 ([#1358](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1358)) ([ff109b7](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/ff109b77928cc9a139a21c63d6b54399bb017fa4))
-
-## [0.31.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.30.1...instrumentation-fastify-v0.31.0) (2022-11-16)
-
-
-### Features
-
-* **fastify:** add requestHook support ([#1255](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1255)) ([c9923e3](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/c9923e3636649c67e5122531f164909b48dbb58d))
-* update experimental deps to `^0.34.0`, core deps to `^1.8.0`, api to `^1.3.0` ([#1278](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1278)) ([e9fe8e1](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/e9fe8e13e34f54e96c50525cadeb74ac048c5624))
-
-
-### Bug Fixes
-
-* **instrumentation-fastify:** stop using fastify types in public api ([#1267](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1267)) ([40515c3](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/40515c3dca81d1c177d71af2663fce3b8813bbf2))
-
-## [0.30.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.30.0...instrumentation-fastify-v0.30.1) (2022-11-02)
-
-
-### Bug Fixes
-
-* separate public and internal types for all instrumentations ([#1251](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1251)) ([e72ea58](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/e72ea58cfb888a90590970f63d3a042a8ea3aaf2))
-
-## [0.30.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.29.0...instrumentation-fastify-v0.30.0) (2022-09-27)
-
-
-### Features
-
-* **opentelemetry-instrumentation-fastify:** Support Fastify V4 also ([#1164](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1164)) ([d932d3e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/d932d3edcbf41685ca0af546347450fa81444b4e))
-
-## [0.29.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.28.0...instrumentation-fastify-v0.29.0) (2022-09-02)
-
-
-### Features
-
-* update experimental Otel deps to ^0.31.0 ([#1096](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1096)) ([4c8843b](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/4c8843be14896d1159a622c07eb3a049401ccba1))
-* update experimental Otel deps to ^0.32.0 ([#1143](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1143)) ([6fb1911](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/6fb191139aed2ca763300dcf9adb51121a88f97e))
-
-## [0.28.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.27.0...instrumentation-fastify-v0.28.0) (2022-06-08)
-
-
-### Features
-
-* update core dependencies stable ^1.3.1 experimental ^0.29.2 ([141b155](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/141b155e344980b51264e26b26c117b2113bcef6))
-
-## [0.27.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.26.0...instrumentation-fastify-v0.27.0) (2022-05-14)
-
-
-### Features
-
-* add supported node versions for all packages ([#973](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/973)) ([baaacbd](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/baaacbdd35ca4baab0afae64647aa8c0380ee4b7))
-* use Otel SDK 1.2/0.28 ([#984](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/984)) ([098c2ed](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/098c2ed6f9c5ab7bd865685018c0777245aab3b7))
-
-## [0.26.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.25.0...instrumentation-fastify-v0.26.0) (2022-03-02)
-
-
-### Features
-
-* new fastify instrumentation ([#611](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/611)) ([77c215b](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/77c215bdd7adb76c8934028458a2b7f28e041f37))
-* upstream mocha instrumentation testing plugin from ext-js [#621](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/621) ([#669](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/669)) ([a5170c4](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/a5170c494706a2bec3ba51e59966d0ca8a41d00e))
-* use latest instrumentation base ([#769](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/769)) ([7aff23e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/7aff23ebebbe209fa3b78c2e7f513c9cd2231be4))
-
-
-### Bug Fixes
-
-* fastify and browser autoinjection failed to compile ([#793](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/793)) ([c08efa8](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/c08efa82a38d3d5b4d0c51d712a39052317b9f74))
-* typo in fastify description ([#891](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/891)) ([adbd6dc](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/adbd6dcb0af6540a6d10b7e2ceaaf2c69a3e1146))
-* update some dev-deps in fastify instrumentation ([a20f77b](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/a20f77b539d2a1eecc8a423d3b0381988e4734b8))
-* use localhost for services in CI ([#816](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/816)) ([f497313](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/f4973133e86549bbca301983085cc67788a10acd))
diff --git a/packages/instrumentation-fastify/LICENSE b/packages/instrumentation-fastify/LICENSE
deleted file mode 100644
index 261eeb9e9f..0000000000
--- a/packages/instrumentation-fastify/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/packages/instrumentation-fastify/README.md b/packages/instrumentation-fastify/README.md
deleted file mode 100644
index 735a13c9f1..0000000000
--- a/packages/instrumentation-fastify/README.md
+++ /dev/null
@@ -1,101 +0,0 @@
-# OpenTelemetry Fastify Instrumentation for Node.js
-
-[![NPM Published Version][npm-img]][npm-url]
-[![Apache License][license-image]][license-image]
-
-> [!IMPORTANT]
-> This component is **deprecated** in favor of the official instrumentation package [`@fastify/otel`](https://www.npmjs.com/package/@fastify/otel), maintained by the Fastify authors.
-> Please check [the offical Fastify plugin's README.md](https://github.com/fastify/otel?tab=readme-ov-file#usage) for instructions on how to use `@fastify/otel`.
->
-> We will stop publishing new versions of `@opentelemetry/instrumentation-fastify` on June 30, 2025.
-
-This module provides automatic instrumentation for the [`fastify`](https://www.fastify.dev/) module, which may be loaded using the [`@opentelemetry/sdk-trace-node`](https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-node) package.
-
-Compatible with OpenTelemetry JS API and SDK `1.0+`.
-
-## Installation
-
-This instrumentation relies on HTTP calls to also be instrumented. Make sure you install and enable both, otherwise you will have spans that are not connected with each other.
-
-```bash
-npm install --save @opentelemetry/instrumentation-http @opentelemetry/instrumentation-fastify
-```
-
-### Supported Versions
-
-- [`fastify`](https://www.npmjs.com/package/fastify) versions `>=3.0.0 <6`
-
-## Usage
-
-OpenTelemetry fastify Instrumentation allows the user to automatically collect trace data and export them to their backend of choice, to give observability to distributed systems.
-
-To load the instrumentation, specify it in the Node Tracer's configuration:
-
-```js
-const { NodeTracerProvider } = require('@opentelemetry/node');
-const { registerInstrumentations } = require('@opentelemetry/instrumentation');
-const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http');
-const { FastifyInstrumentation } = require('@opentelemetry/instrumentation-fastify');
-
-const provider = new NodeTracerProvider();
-provider.register();
-
-registerInstrumentations({
- instrumentations: [
- // Fastify instrumentation expects HTTP layer to be instrumented
- new HttpInstrumentation(),
- new FastifyInstrumentation(),
- ],
-});
-```
-
-See [examples/fastify](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/examples/fastify) for a short example.
-
-## Fastify Instrumentation Options
-
-| Options | Type | Example | Description |
-|---------------|----------------------------------|-----------------------------|-------------------------------------------------------------------------------------------------------------|
-| `requestHook` | `FastifyCustomAttributeFunction` | `(span, requestInfo) => {}` | Function for adding custom attributes to Fastify requests. Receives parameters: `Span, FastifyRequestInfo`. |
-
-### Using `requestHook`
-
-Instrumentation configuration accepts a custom "hook" function which will be called for every instrumented Fastify request. Custom attributes can be set on the span or run any custom logic per request.
-
-```javascript
-import { FastifyInstrumentation } from "@opentelemetry/instrumentation-fastify"
-
-const fastifyInstrumentation = new FastifyInstrumentation({
- requestHook: function (span: Span, info: FastifyRequestInfo) {
- span.setAttribute(
- 'http.method',
- info.request.method,
- )
- }
-});
-```
-
-## Semantic Conventions
-
-This package uses `@opentelemetry/semantic-conventions` version `1.22+`, which implements Semantic Convention [Version 1.7.0](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.7.0/semantic_conventions/README.md)
-
-Attributes collected:
-
-| Attribute | Short Description |
-|--------------|------------------------------------|
-| `http.route` | The matched route (path template). |
-
-## Useful links
-
-- For more information on OpenTelemetry, visit:
-- For more about OpenTelemetry JavaScript:
-- For help or feedback on this project, join us in [GitHub Discussions][discussions-url]
-
-## License
-
-Apache 2.0 - See [LICENSE][license-url] for more information.
-
-[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions
-[license-url]: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/LICENSE
-[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat
-[npm-url]: https://www.npmjs.com/package/@opentelemetry/instrumentation-fastify
-[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Finstrumentation-fastify.svg
diff --git a/packages/instrumentation-fastify/package.json b/packages/instrumentation-fastify/package.json
deleted file mode 100644
index 005f7ef140..0000000000
--- a/packages/instrumentation-fastify/package.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "name": "@opentelemetry/instrumentation-fastify",
- "version": "0.57.0",
- "description": "OpenTelemetry instrumentation for `fastify` http web application framework",
- "main": "build/src/index.js",
- "types": "build/src/index.d.ts",
- "repository": {
- "type": "git",
- "url": "https://github.com/open-telemetry/opentelemetry-js-contrib.git",
- "directory": "packages/instrumentation-fastify"
- },
- "scripts": {
- "clean": "rimraf build/*",
- "compile:with-dependencies": "nx run-many -t compile -p @opentelemetry/instrumentation-fastify",
- "compile": "tsc -p .",
- "lint:readme": "node ../../scripts/lint-readme.js",
- "prepublishOnly": "npm run compile",
- "test": "nyc --no-clean mocha 'test/**/*.test.ts'",
- "test-all-versions": "tav",
- "version:update": "node ../../scripts/version-update.js",
- "watch": "tsc -w"
- },
- "keywords": [
- "fastify",
- "instrumentation",
- "nodejs",
- "opentelemetry",
- "profiling",
- "tracing"
- ],
- "author": "OpenTelemetry Authors",
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.19.0 || >=20.6.0"
- },
- "files": [
- "build/src/**/*.js",
- "build/src/**/*.js.map",
- "build/src/**/*.d.ts"
- ],
- "publishConfig": {
- "access": "public"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- },
- "devDependencies": {
- "@fastify/express": "^3.0.0",
- "@opentelemetry/api": "^1.3.0",
- "@opentelemetry/context-async-hooks": "^2.0.0",
- "@opentelemetry/contrib-test-utils": "^0.60.0",
- "@opentelemetry/instrumentation-http": "^0.213.0",
- "@opentelemetry/sdk-trace-base": "^2.0.0",
- "@opentelemetry/sdk-trace-node": "^2.0.0",
- "fastify": "4.18.0"
- },
- "dependencies": {
- "@opentelemetry/core": "^2.0.0",
- "@opentelemetry/instrumentation": "^0.213.0",
- "@opentelemetry/semantic-conventions": "^1.27.0"
- },
- "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-fastify#readme"
-}
diff --git a/packages/instrumentation-fastify/src/constants.ts b/packages/instrumentation-fastify/src/constants.ts
deleted file mode 100644
index 4f2efd02d5..0000000000
--- a/packages/instrumentation-fastify/src/constants.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export const spanRequestSymbol = Symbol(
- 'opentelemetry.instrumentation.fastify.request_active_span'
-);
-
-// The instrumentation creates a span for invocations of lifecycle hook handlers
-// that take `(request, reply, ...[, done])` arguments. Currently this is all
-// lifecycle hooks except `onRequestAbort`.
-// https://fastify.dev/docs/latest/Reference/Hooks
-export const hooksNamesToWrap = new Set([
- 'onTimeout',
- 'onRequest',
- 'preParsing',
- 'preValidation',
- 'preSerialization',
- 'preHandler',
- 'onSend',
- 'onResponse',
- 'onError',
-]);
diff --git a/packages/instrumentation-fastify/src/enums/AttributeNames.ts b/packages/instrumentation-fastify/src/enums/AttributeNames.ts
deleted file mode 100644
index 3626fb8fab..0000000000
--- a/packages/instrumentation-fastify/src/enums/AttributeNames.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export enum AttributeNames {
- FASTIFY_NAME = 'fastify.name',
- FASTIFY_TYPE = 'fastify.type',
- HOOK_NAME = 'hook.name',
- PLUGIN_NAME = 'plugin.name',
-}
-
-export enum FastifyTypes {
- MIDDLEWARE = 'middleware',
- REQUEST_HANDLER = 'request_handler',
-}
-
-export enum FastifyNames {
- MIDDLEWARE = 'middleware',
- REQUEST_HANDLER = 'request handler',
-}
diff --git a/packages/instrumentation-fastify/src/index.ts b/packages/instrumentation-fastify/src/index.ts
deleted file mode 100644
index e4787dea25..0000000000
--- a/packages/instrumentation-fastify/src/index.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export { FastifyInstrumentation } from './instrumentation';
-export {
- AttributeNames,
- FastifyNames,
- FastifyTypes,
-} from './enums/AttributeNames';
-export type {
- FastifyCustomAttributeFunction,
- FastifyInstrumentationConfig,
- FastifyRequestInfo,
-} from './types';
diff --git a/packages/instrumentation-fastify/src/instrumentation.ts b/packages/instrumentation-fastify/src/instrumentation.ts
deleted file mode 100644
index 4ce655bcfd..0000000000
--- a/packages/instrumentation-fastify/src/instrumentation.ts
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { context, Attributes, SpanStatusCode, trace } from '@opentelemetry/api';
-import { getRPCMetadata, RPCType } from '@opentelemetry/core';
-import {
- InstrumentationBase,
- InstrumentationNodeModuleDefinition,
- safeExecuteInTheMiddle,
-} from '@opentelemetry/instrumentation';
-import { ATTR_HTTP_ROUTE } from '@opentelemetry/semantic-conventions';
-import type {
- HookHandlerDoneFunction,
- FastifyInstance,
- FastifyRequest,
- FastifyReply,
- FastifyErrorCodes,
-} from 'fastify';
-import { hooksNamesToWrap } from './constants';
-import {
- AttributeNames,
- FastifyNames,
- FastifyTypes,
-} from './enums/AttributeNames';
-import type { HandlerOriginal, PluginFastifyReply } from './internal-types';
-import type { FastifyInstrumentationConfig } from './types';
-import {
- endSpan,
- safeExecuteInTheMiddleMaybePromise,
- startSpan,
-} from './utils';
-/** @knipignore */
-import { PACKAGE_NAME, PACKAGE_VERSION } from './version';
-
-export const ANONYMOUS_NAME = 'anonymous';
-
-/**
- * Fastify instrumentation for OpenTelemetry
- * @deprecated This instrumentation is deprecated in favor of the official instrumentation package `@fastify/otel`,
- * which is maintained by the fastify authors.
- */
-export class FastifyInstrumentation extends InstrumentationBase {
- constructor(config: FastifyInstrumentationConfig = {}) {
- super(PACKAGE_NAME, PACKAGE_VERSION, config);
- }
-
- init() {
- return [
- new InstrumentationNodeModuleDefinition(
- 'fastify',
- ['>=3.0.0 <6'],
- moduleExports => {
- return this._patchConstructor(moduleExports);
- }
- ),
- ];
- }
-
- private _hookOnRequest() {
- const instrumentation = this;
- return function onRequest(
- request: FastifyRequest,
- reply: FastifyReply,
- done: HookHandlerDoneFunction
- ) {
- if (!instrumentation.isEnabled()) {
- return done();
- }
- instrumentation._wrap(reply, 'send', instrumentation._patchSend());
-
- const anyRequest = request as any;
-
- const rpcMetadata = getRPCMetadata(context.active());
- const routeName = anyRequest.routeOptions
- ? anyRequest.routeOptions.url // since fastify@4.10.0
- : request.routerPath;
- if (routeName && rpcMetadata?.type === RPCType.HTTP) {
- rpcMetadata.route = routeName;
- }
- done();
- };
- }
-
- private _wrapHandler(
- pluginName: string,
- hookName: string,
- original: (...args: unknown[]) => Promise,
- syncFunctionWithDone: boolean
- ): () => Promise {
- const instrumentation = this;
- this._diag.debug('Patching fastify route.handler function');
-
- return function (this: any, ...args: unknown[]): Promise {
- if (!instrumentation.isEnabled()) {
- return original.apply(this, args);
- }
-
- const name = original.name || pluginName || ANONYMOUS_NAME;
- const spanName = `${FastifyNames.MIDDLEWARE} - ${name}`;
-
- const reply = args[1] as PluginFastifyReply;
-
- const span = startSpan(reply, instrumentation.tracer, spanName, {
- [AttributeNames.FASTIFY_TYPE]: FastifyTypes.MIDDLEWARE,
- [AttributeNames.PLUGIN_NAME]: pluginName,
- [AttributeNames.HOOK_NAME]: hookName,
- });
-
- const origDone =
- syncFunctionWithDone &&
- (args[args.length - 1] as HookHandlerDoneFunction);
- if (origDone) {
- args[args.length - 1] = function (
- ...doneArgs: Parameters
- ) {
- endSpan(reply);
- origDone.apply(this, doneArgs);
- };
- }
-
- return context.with(trace.setSpan(context.active(), span), () => {
- return safeExecuteInTheMiddleMaybePromise(
- () => {
- return original.apply(this, args);
- },
- err => {
- if (err instanceof Error) {
- span.setStatus({
- code: SpanStatusCode.ERROR,
- message: err.message,
- });
- span.recordException(err);
- }
- // async hooks should end the span as soon as the promise is resolved
- if (!syncFunctionWithDone) {
- endSpan(reply);
- }
- }
- );
- });
- };
- }
-
- private _wrapAddHook(): (
- original: FastifyInstance['addHook']
- ) => () => FastifyInstance {
- const instrumentation = this;
- this._diag.debug('Patching fastify server.addHook function');
-
- return function (
- original: FastifyInstance['addHook']
- ): () => FastifyInstance {
- return function wrappedAddHook(this: any, ...args: any) {
- const name = args[0] as string;
- const handler = args[1] as HandlerOriginal;
- const pluginName = this.pluginName;
- if (!hooksNamesToWrap.has(name)) {
- return original.apply(this, args);
- }
-
- const syncFunctionWithDone =
- typeof args[args.length - 1] === 'function' &&
- handler.constructor.name !== 'AsyncFunction';
-
- return original.apply(this, [
- name,
- instrumentation._wrapHandler(
- pluginName,
- name,
- handler,
- syncFunctionWithDone
- ),
- ] as never);
- };
- };
- }
-
- private _patchConstructor(moduleExports: {
- fastify: () => FastifyInstance;
- errorCodes: FastifyErrorCodes | undefined;
- }): () => FastifyInstance {
- const instrumentation = this;
-
- function fastify(this: FastifyInstance, ...args: any) {
- const app: FastifyInstance = moduleExports.fastify.apply(this, args);
- app.addHook('onRequest', instrumentation._hookOnRequest());
- app.addHook('preHandler', instrumentation._hookPreHandler());
-
- instrumentation._wrap(app, 'addHook', instrumentation._wrapAddHook());
-
- return app;
- }
-
- if (moduleExports.errorCodes !== undefined) {
- fastify.errorCodes = moduleExports.errorCodes;
- }
- fastify.fastify = fastify;
- fastify.default = fastify;
- return fastify;
- }
-
- private _patchSend() {
- const instrumentation = this;
- this._diag.debug('Patching fastify reply.send function');
-
- return function patchSend(
- original: () => FastifyReply
- ): () => FastifyReply {
- return function send(this: FastifyReply, ...args: any) {
- const maybeError: any = args[0];
-
- if (!instrumentation.isEnabled()) {
- return original.apply(this, args);
- }
-
- return safeExecuteInTheMiddle(
- () => {
- return original.apply(this, args);
- },
- err => {
- if (!err && maybeError instanceof Error) {
- err = maybeError;
- }
- endSpan(this, err);
- }
- );
- };
- };
- }
-
- private _hookPreHandler() {
- const instrumentation = this;
- this._diag.debug('Patching fastify preHandler function');
-
- return function preHandler(
- this: any,
- request: FastifyRequest,
- reply: FastifyReply,
- done: HookHandlerDoneFunction
- ) {
- if (!instrumentation.isEnabled()) {
- return done();
- }
- const anyRequest = request as any;
-
- const handler =
- anyRequest.routeOptions?.handler || anyRequest.context?.handler;
-
- const handlerName = handler?.name.startsWith('bound ')
- ? handler.name.substring(6)
- : handler?.name;
- const spanName = `${FastifyNames.REQUEST_HANDLER} - ${
- handlerName || this.pluginName || ANONYMOUS_NAME
- }`;
-
- const spanAttributes: Attributes = {
- [AttributeNames.PLUGIN_NAME]: this.pluginName,
- [AttributeNames.FASTIFY_TYPE]: FastifyTypes.REQUEST_HANDLER,
- [ATTR_HTTP_ROUTE]: anyRequest.routeOptions
- ? anyRequest.routeOptions.url // since fastify@4.10.0
- : request.routerPath,
- };
- if (handlerName) {
- spanAttributes[AttributeNames.FASTIFY_NAME] = handlerName;
- }
- const span = startSpan(
- reply,
- instrumentation.tracer,
- spanName,
- spanAttributes
- );
-
- const { requestHook } = instrumentation.getConfig();
- if (requestHook) {
- safeExecuteInTheMiddle(
- () => requestHook(span, { request }),
- e => {
- if (e) {
- instrumentation._diag.error('request hook failed', e);
- }
- },
- true
- );
- }
-
- return context.with(trace.setSpan(context.active(), span), () => {
- done();
- });
- };
- }
-}
diff --git a/packages/instrumentation-fastify/src/internal-types.ts b/packages/instrumentation-fastify/src/internal-types.ts
deleted file mode 100644
index 95521eed2f..0000000000
--- a/packages/instrumentation-fastify/src/internal-types.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Span } from '@opentelemetry/api';
-import type { FastifyReply } from 'fastify';
-import { spanRequestSymbol } from './constants';
-
-export type HandlerOriginal = (() => Promise) & (() => void);
-
-export type PluginFastifyReply = FastifyReply & {
- [spanRequestSymbol]?: Span[];
-};
diff --git a/packages/instrumentation-fastify/src/types.ts b/packages/instrumentation-fastify/src/types.ts
deleted file mode 100644
index 2deadc0598..0000000000
--- a/packages/instrumentation-fastify/src/types.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Span } from '@opentelemetry/api';
-import { InstrumentationConfig } from '@opentelemetry/instrumentation';
-
-export interface FastifyRequestInfo {
- request: any; // FastifyRequest object from fastify package
-}
-
-/**
- * Function that can be used to add custom attributes to the current span
- * @param span - The Fastify handler span.
- * @param info - The Fastify request info object.
- */
-export interface FastifyCustomAttributeFunction {
- (span: Span, info: FastifyRequestInfo): void;
-}
-
-/**
- * Options available for the Fastify Instrumentation
- */
-export interface FastifyInstrumentationConfig extends InstrumentationConfig {
- /** Function for adding custom attributes to each handler span */
- requestHook?: FastifyCustomAttributeFunction;
-}
diff --git a/packages/instrumentation-fastify/src/utils.ts b/packages/instrumentation-fastify/src/utils.ts
deleted file mode 100644
index 225892c6bd..0000000000
--- a/packages/instrumentation-fastify/src/utils.ts
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import { Attributes, Span, SpanStatusCode, Tracer } from '@opentelemetry/api';
-import { spanRequestSymbol } from './constants';
-
-import type { PluginFastifyReply } from './internal-types';
-
-/**
- * Starts Span
- * @param reply - reply function
- * @param tracer - tracer
- * @param spanName - span name
- * @param spanAttributes - span attributes
- */
-export function startSpan(
- reply: PluginFastifyReply,
- tracer: Tracer,
- spanName: string,
- spanAttributes: Attributes = {}
-) {
- const span = tracer.startSpan(spanName, { attributes: spanAttributes });
-
- const spans: Span[] = reply[spanRequestSymbol] || [];
- spans.push(span);
-
- Object.defineProperty(reply, spanRequestSymbol, {
- enumerable: false,
- configurable: true,
- value: spans,
- });
-
- return span;
-}
-
-/**
- * Ends span
- * @param reply - reply function
- * @param err - error
- */
-export function endSpan(reply: PluginFastifyReply, err?: any) {
- const spans = reply[spanRequestSymbol] || [];
- // there is no active span, or it has already ended
- if (!spans.length) {
- return;
- }
- spans.forEach(span => {
- if (err) {
- span.setStatus({
- code: SpanStatusCode.ERROR,
- message: err.message,
- });
- span.recordException(err);
- }
- span.end();
- });
- delete reply[spanRequestSymbol];
-}
-
-// @TODO after approve add this to instrumentation package and replace usage
-// when it will be released
-
-/**
- * This function handles the missing case from instrumentation package when
- * execute can either return a promise or void. And using async is not an
- * option as it is producing unwanted side effects.
- * @param execute - function to be executed
- * @param onFinish - function called when function executed
- * @param preventThrowingError - prevent to throw error when execute
- * function fails
- */
-export function safeExecuteInTheMiddleMaybePromise(
- execute: () => Promise,
- onFinish: (e: unknown, result?: T) => void,
- preventThrowingError?: boolean
-): Promise;
-export function safeExecuteInTheMiddleMaybePromise(
- execute: () => T,
- onFinish: (e: unknown, result?: T) => void,
- preventThrowingError?: boolean
-): T;
-export function safeExecuteInTheMiddleMaybePromise(
- execute: () => T | Promise,
- onFinish: (e: unknown, result?: T) => void,
- preventThrowingError?: boolean
-): T | Promise | undefined {
- let error: unknown;
- let result: T | Promise | undefined = undefined;
- try {
- result = execute();
-
- if (isPromise(result)) {
- result.then(
- res => onFinish(undefined, res),
- err => onFinish(err)
- );
- }
- } catch (e) {
- error = e;
- } finally {
- if (!isPromise(result)) {
- onFinish(error, result);
- if (error && !preventThrowingError) {
- // eslint-disable-next-line no-unsafe-finally
- throw error;
- }
- }
- // eslint-disable-next-line no-unsafe-finally
- return result;
- }
-}
-
-function isPromise(val: T | Promise): val is Promise {
- return (
- (typeof val === 'object' &&
- val &&
- typeof Object.getOwnPropertyDescriptor(val, 'then')?.value ===
- 'function') ||
- false
- );
-}
diff --git a/packages/instrumentation-fastify/test/fixtures/use-fastify.mjs b/packages/instrumentation-fastify/test/fixtures/use-fastify.mjs
deleted file mode 100644
index 99bd5bffb9..0000000000
--- a/packages/instrumentation-fastify/test/fixtures/use-fastify.mjs
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Use fastify from an ES module:
-// node --experimental-loader=@opentelemetry/instrumentation/hook.mjs use-fastify.mjs
-
-import { createTestNodeSdk } from '@opentelemetry/contrib-test-utils';
-
-import { FastifyInstrumentation } from '../../build/src/index.js';
-
-const sdk = createTestNodeSdk({
- serviceName: 'use-fastify',
- instrumentations: [new FastifyInstrumentation()],
-});
-sdk.start();
-
-import Fastify from 'fastify';
-import http from 'http';
-
-// Start a fastify server.
-const app = Fastify();
-app.get('/a-route', function aRoute(_request, reply) {
- reply.send({ hello: 'world' });
-});
-const addr = await app.listen({ port: 0 });
-
-// Make a single request to it.
-await new Promise(resolve => {
- http.get(addr + '/a-route', res => {
- res.resume();
- res.on('end', () => {
- resolve();
- });
- });
-});
-
-await app.close();
-await sdk.shutdown();
diff --git a/packages/instrumentation-fastify/test/instrumentation.test.ts b/packages/instrumentation-fastify/test/instrumentation.test.ts
deleted file mode 100644
index a890abf123..0000000000
--- a/packages/instrumentation-fastify/test/instrumentation.test.ts
+++ /dev/null
@@ -1,595 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import * as assert from 'assert';
-import { context, SpanStatusCode } from '@opentelemetry/api';
-import { ATTR_HTTP_ROUTE } from '@opentelemetry/semantic-conventions';
-import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';
-import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
-import {
- InMemorySpanExporter,
- ReadableSpan,
- SimpleSpanProcessor,
-} from '@opentelemetry/sdk-trace-base';
-import { Span } from '@opentelemetry/api';
-import {
- getPackageVersion,
- runTestFixture,
- TestCollector,
-} from '@opentelemetry/contrib-test-utils';
-import * as semver from 'semver';
-import * as http from 'http';
-import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
-import { AttributeNames, FastifyInstrumentation } from '../src';
-import { FastifyRequestInfo } from '../src/types';
-
-const URL = require('url').URL;
-
-const fastifyVersion = getPackageVersion('fastify');
-
-const httpRequest = {
- get: (options: http.ClientRequestArgs | string) => {
- return new Promise((resolve, reject) => {
- return http.get(options, resp => {
- let data = '';
- resp.on('data', chunk => {
- data += chunk;
- });
- resp.on('end', () => {
- resolve(data);
- });
- resp.on('error', err => {
- reject(err);
- });
- });
- });
- },
-};
-
-const httpInstrumentation = new HttpInstrumentation();
-const instrumentation = new FastifyInstrumentation();
-const contextManager = new AsyncLocalStorageContextManager().enable();
-const memoryExporter = new InMemorySpanExporter();
-const spanProcessor = new SimpleSpanProcessor(memoryExporter);
-const provider = new NodeTracerProvider({
- spanProcessors: [spanProcessor],
-});
-instrumentation.setTracerProvider(provider);
-httpInstrumentation.setTracerProvider(provider);
-context.setGlobalContextManager(contextManager);
-
-instrumentation.enable();
-httpInstrumentation.enable();
-
-import '@fastify/express';
-import {
- FastifyInstance,
- HookHandlerDoneFunction,
- FastifyReply,
- FastifyRequest,
-} from 'fastify';
-
-const Fastify = require('fastify');
-
-const assertRootContextActive = () => {
- // Asserting the context.active() to strictly equal ROOT_CONTEXT doesn't
- // always work because of the linking and dep resolution.
- // Specially in our CI environment there can be multiple instances to
- // different @opentelemetry/api and thus ROOT_CONTEXTs in the tree.
- assert.strictEqual((context.active() as any)['_currentContext'].size, 0);
-};
-
-function getSpans(): ReadableSpan[] {
- const spans = memoryExporter.getFinishedSpans().filter(s => {
- return (
- s.instrumentationScope.name === '@opentelemetry/instrumentation-fastify'
- );
- });
- return spans;
-}
-
-describe('fastify', () => {
- let PORT: number;
- let app: FastifyInstance;
-
- async function startServer(): Promise {
- const address = await app.listen({ port: 0 });
- const url = new URL(address);
- PORT = parseInt(url.port, 10);
- }
-
- beforeEach(async () => {
- instrumentation.enable();
- app = Fastify();
- app.register(require('@fastify/express'));
- });
-
- afterEach(async () => {
- if (app.server.address()) {
- await app.close();
- }
-
- contextManager.disable();
- contextManager.enable();
- memoryExporter.reset();
- instrumentation.disable();
- });
-
- describe('when fastify is disabled', () => {
- it('should not generate any spans', async () => {
- instrumentation.disable();
- app.get('/test', (req, res) => {
- res.send('OK');
- });
-
- await startServer();
- await httpRequest.get(`http://localhost:${PORT}/test`);
-
- const spans = getSpans();
- assert.strictEqual(spans.length, 0); // http instrumentation only
- });
- });
-
- describe('when fastify is enabled', () => {
- it('should generate span for anonymous middleware', async () => {
- app.get('/test', (req, res) => {
- res.send('OK');
- });
-
- await startServer();
- await httpRequest.get(`http://localhost:${PORT}/test`);
-
- const spans = memoryExporter.getFinishedSpans();
- assert.strictEqual(spans.length, 5);
- const span = spans[2];
- assert.deepStrictEqual(span.attributes, {
- 'fastify.type': 'request_handler',
- 'plugin.name': 'fastify -> @fastify/express',
- [ATTR_HTTP_ROUTE]: '/test',
- });
- assert.strictEqual(
- span.name,
- 'request handler - fastify -> @fastify/express'
- );
- const baseSpan = spans[1];
- assert.strictEqual(
- span.parentSpanContext?.spanId,
- baseSpan.spanContext().spanId
- );
- });
-
- it('should generate span for named handler', async () => {
- app.get('/test', function namedHandler(req, res) {
- res.send('OK');
- });
-
- await startServer();
- await httpRequest.get(`http://localhost:${PORT}/test`);
-
- const spans = memoryExporter.getFinishedSpans();
- assert.strictEqual(spans.length, 5);
- const span = spans[2];
- assert.deepStrictEqual(span.attributes, {
- 'fastify.type': 'request_handler',
- 'fastify.name': 'namedHandler',
- 'plugin.name': 'fastify -> @fastify/express',
- [ATTR_HTTP_ROUTE]: '/test',
- });
- assert.strictEqual(span.name, 'request handler - namedHandler');
-
- const baseSpan = spans[1];
- assert.strictEqual(
- span.parentSpanContext?.spanId,
- baseSpan.spanContext().spanId
- );
- });
-
- it('should generate span for 404 request', async () => {
- await startServer();
- await httpRequest.get(`http://localhost:${PORT}/no-such-route`);
-
- const spans = memoryExporter.getFinishedSpans();
- assert.strictEqual(spans.length, 5);
- const span = spans[2];
- assert.deepStrictEqual(span.attributes, {
- 'fastify.name': 'basic404',
- 'fastify.type': 'request_handler',
- 'plugin.name': 'fastify -> @fastify/express',
- });
- assert.strictEqual(span.name, 'request handler - basic404');
- const baseSpan = spans[1];
- assert.strictEqual(
- span.parentSpanContext?.spanId,
- baseSpan.spanContext().spanId
- );
- });
-
- describe('when subsystem is registered', () => {
- beforeEach(async () => {
- httpInstrumentation.enable();
-
- async function subsystem(fastify: FastifyInstance) {
- fastify.addHook(
- 'onRequest',
- (
- req: FastifyRequest,
- res: FastifyReply,
- next: HookHandlerDoneFunction
- ) => {
- next();
- }
- );
- fastify.use((req, res, next) => {
- next();
- });
-
- fastify.get('/test/:id', function foo(req, res) {
- res.send('OK');
- });
- fastify.get('/test-error', () => {
- throw Error('foo');
- });
- }
-
- app.register(subsystem);
-
- await startServer();
- await httpRequest.get(`http://localhost:${PORT}/test/1`);
-
- assert.strictEqual(getSpans().length, 4);
- });
-
- it('should change name for parent http route', async () => {
- const spans = memoryExporter.getFinishedSpans();
-
- assert.strictEqual(spans.length, 6);
- const changedRootSpan = spans[4];
- const span = spans[3];
- assert.strictEqual(changedRootSpan.name, 'GET /test/:id');
- assert.strictEqual(span.name, 'request handler - foo');
- assert.strictEqual(
- span.parentSpanContext?.spanId,
- spans[2].spanContext().spanId
- );
- });
-
- it('should create span for fastify express runConnect', async () => {
- const spans = memoryExporter.getFinishedSpans();
-
- assert.strictEqual(spans.length, 6);
- const baseSpan = spans[0];
- const span = spans[1];
- assert.strictEqual(span.name, 'middleware - runConnect');
- assert.deepStrictEqual(span.attributes, {
- 'fastify.type': 'middleware',
- 'plugin.name': 'fastify -> @fastify/express',
- 'hook.name': 'onRequest',
- });
-
- assert.strictEqual(
- span.parentSpanContext?.spanId,
- baseSpan.spanContext().spanId
- );
- });
-
- it('should create span for fastify express for enhanceRequest', async () => {
- const spans = memoryExporter.getFinishedSpans();
-
- assert.strictEqual(spans.length, 6);
- const baseSpan = spans[4];
- const span = spans[0];
- assert.strictEqual(span.name, 'middleware - enhanceRequest');
- assert.deepStrictEqual(span.attributes, {
- 'fastify.type': 'middleware',
- 'plugin.name': 'fastify -> @fastify/express',
- 'hook.name': 'onRequest',
- });
-
- assert.strictEqual(
- span.parentSpanContext?.spanId,
- baseSpan.spanContext().spanId
- );
- });
-
- it('should create span for request', async () => {
- const spans = memoryExporter.getFinishedSpans();
-
- assert.strictEqual(spans.length, 6);
- const baseSpan = spans[2];
- const span = spans[3];
- assert.strictEqual(span.name, 'request handler - foo');
- assert.deepStrictEqual(span.attributes, {
- 'plugin.name': 'subsystem',
- 'fastify.type': 'request_handler',
- 'fastify.name': 'foo',
- 'http.route': '/test/:id',
- });
-
- assert.strictEqual(
- span.parentSpanContext?.spanId,
- baseSpan.spanContext().spanId
- );
- });
-
- it('should update http.route for http span', async () => {
- const spans = memoryExporter.getFinishedSpans();
-
- assert.strictEqual(spans.length, 6);
- const span = spans[4];
- assert.strictEqual(span.attributes['http.route'], '/test/:id');
- });
-
- it('should create span for subsystem anonymous middleware', async () => {
- const spans = memoryExporter.getFinishedSpans();
-
- assert.strictEqual(spans.length, 6);
- const baseSpan = spans[1];
- const span = spans[2];
- assert.strictEqual(span.name, 'middleware - subsystem');
- assert.deepStrictEqual(span.attributes, {
- 'fastify.type': 'middleware',
- 'plugin.name': 'subsystem',
- 'hook.name': 'onRequest',
- });
-
- assert.strictEqual(
- span.parentSpanContext?.spanId,
- baseSpan.spanContext().spanId
- );
- });
-
- it('should update span with error that was raised', async () => {
- memoryExporter.reset();
- await httpRequest.get(`http://localhost:${PORT}/test-error`);
- const spans = memoryExporter.getFinishedSpans();
-
- assert.strictEqual(spans.length, 6);
- const span = spans[3];
- assert.strictEqual(span.name, 'request handler - subsystem');
- assert.deepStrictEqual(span.status, {
- code: SpanStatusCode.ERROR,
- message: 'foo',
- });
- assert.deepStrictEqual(span.attributes, {
- 'fastify.type': 'request_handler',
- 'plugin.name': 'subsystem',
- 'http.route': '/test-error',
- });
- });
- });
-
- describe('spans context', () => {
- describe('hook callback', () => {
- it('span should end upon done invocation', async () => {
- let hookDone: HookHandlerDoneFunction;
- const hookExecutedPromise = new Promise(resolve => {
- app.addHook(
- 'onRequest',
- (_req, _reply, done: HookHandlerDoneFunction) => {
- hookDone = done;
- resolve();
- }
- );
- });
- app.get('/test', (_req, reply: FastifyReply) => {
- reply.send('request ended in handler');
- });
- await startServer();
- httpRequest.get(`http://localhost:${PORT}/test`);
- await hookExecutedPromise;
-
- // done was not yet called from the hook, so it should not end the span
- const preDoneSpans = getSpans().filter(
- s =>
- !s.attributes[AttributeNames.PLUGIN_NAME] ||
- s.attributes[AttributeNames.PLUGIN_NAME] === 'fastify'
- );
- assert.strictEqual(preDoneSpans.length, 0);
- hookDone!();
- const postDoneSpans = getSpans().filter(
- s =>
- !s.attributes[AttributeNames.PLUGIN_NAME] ||
- s.attributes[AttributeNames.PLUGIN_NAME] === 'fastify'
- );
- assert.strictEqual(postDoneSpans.length, 1);
- });
-
- it('span should end when calling reply.send from hook', async () => {
- app.addHook(
- 'onRequest',
- (
- _req: FastifyRequest,
- reply: FastifyReply,
- _done: HookHandlerDoneFunction
- ) => {
- reply.send('request ended prematurely in hook');
- }
- );
- app.get('/test', (_req: FastifyRequest, _reply: FastifyReply) => {
- throw Error(
- 'handler should not be executed as request is ended in onRequest hook'
- );
- });
- await startServer();
- await httpRequest.get(`http://localhost:${PORT}/test`);
- const spans = getSpans().filter(
- s =>
- !s.attributes[AttributeNames.PLUGIN_NAME] ||
- s.attributes[AttributeNames.PLUGIN_NAME] === 'fastify'
- );
- assert.strictEqual(spans.length, 1);
- });
- });
- });
-
- describe('application hooks', () => {
- afterEach(() => {
- const spans = getSpans();
- assert.strictEqual(spans.length, 0);
- });
-
- it('onRoute not instrumented', async () => {
- app.addHook('onRoute', () => {
- assertRootContextActive();
- });
- // add a route to trigger the 'onRoute' hook
- app.get('/test', (_req: FastifyRequest, reply: FastifyReply) => {
- reply.send('OK');
- });
-
- await startServer();
- });
-
- it('onRegister is not instrumented', async () => {
- app.addHook('onRegister', () => {
- assertRootContextActive();
- });
- // register a plugin to trigger 'onRegister' hook
- app.register((fastify, options, done) => {
- done();
- });
-
- await startServer();
- });
-
- it('onReady is not instrumented', async () => {
- app.addHook('onReady', () => {
- assertRootContextActive();
- });
-
- await startServer();
- });
-
- it('preClose is not instrumented', async function () {
- // 'preClose' was added in fastify@4.16.0.
- if (semver.lt(fastifyVersion, '4.16.0')) {
- this.skip();
- } else {
- app.addHook('preClose', () => {
- assertRootContextActive();
- });
-
- await startServer();
- }
- });
-
- it('onClose is not instrumented', async () => {
- app.addHook('onClose', () => {
- assertRootContextActive();
- });
-
- await startServer();
- });
- });
-
- describe('using requestHook in config', () => {
- it('calls requestHook provided function when set in config', async () => {
- const requestHook = (span: Span, info: FastifyRequestInfo) => {
- span.setAttribute('my.http.method', info.request.method);
- };
-
- instrumentation.setConfig({
- ...instrumentation.getConfig(),
- requestHook,
- });
-
- app.get('/test', (req, res) => {
- res.send('OK');
- });
-
- await startServer();
- await httpRequest.get(`http://localhost:${PORT}/test`);
-
- const spans = memoryExporter.getFinishedSpans();
- assert.strictEqual(spans.length, 5);
- const span = spans[2];
- assert.deepStrictEqual(span.attributes, {
- 'fastify.type': 'request_handler',
- 'plugin.name': 'fastify -> @fastify/express',
- [ATTR_HTTP_ROUTE]: '/test',
- 'my.http.method': 'GET',
- });
- });
-
- it('does not propagate an error from a requestHook that throws exception', async () => {
- const requestHook = (span: Span, info: FastifyRequestInfo) => {
- span.setAttribute('my.http.method', info.request.method);
-
- throw Error('error thrown in requestHook');
- };
-
- instrumentation.setConfig({
- ...instrumentation.getConfig(),
- requestHook,
- });
-
- app.get('/test', (req, res) => {
- res.send('OK');
- });
-
- await startServer();
- await httpRequest.get(`http://localhost:${PORT}/test`);
-
- const spans = memoryExporter.getFinishedSpans();
- assert.strictEqual(spans.length, 5);
- const span = spans[2];
- assert.deepStrictEqual(span.attributes, {
- 'fastify.type': 'request_handler',
- 'plugin.name': 'fastify -> @fastify/express',
- [ATTR_HTTP_ROUTE]: '/test',
- 'my.http.method': 'GET',
- });
- });
- });
- });
-
- it('should work with ESM usage', async () => {
- await runTestFixture({
- cwd: __dirname,
- argv: ['fixtures/use-fastify.mjs'],
- env: {
- NODE_OPTIONS:
- '--experimental-loader=@opentelemetry/instrumentation/hook.mjs',
- NODE_NO_WARNINGS: '1',
- },
- checkResult: (err, stdout, stderr) => {
- assert.ifError(err);
- },
- checkCollector: (collector: TestCollector) => {
- const spans = collector.sortedSpans;
- assert.strictEqual(spans.length, 1);
- assert.strictEqual(spans[0].name, 'request handler - aRoute');
- assert.strictEqual(
- spans[0].attributes.filter(a => a.key === 'plugin.name')[0]?.value
- ?.stringValue,
- 'fastify',
- 'attribute plugin.name'
- );
- },
- });
- });
-
- it('should expose errorCodes', async function () {
- // errorCodes was added in v4.8.0
- // ref: https://github.com/fastify/fastify/compare/v4.7.0...v4.8.0
- if (semver.lt(fastifyVersion, '4.8.0')) {
- this.skip();
- }
- assert.ok(Fastify.errorCodes);
- assert.strictEqual(typeof Fastify.errorCodes, 'object');
- assert.ok('FST_ERR_NOT_FOUND' in Fastify.errorCodes);
- });
-});
diff --git a/packages/instrumentation-fastify/tsconfig.json b/packages/instrumentation-fastify/tsconfig.json
deleted file mode 100644
index 4078877ce6..0000000000
--- a/packages/instrumentation-fastify/tsconfig.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "extends": "../../tsconfig.base",
- "compilerOptions": {
- "rootDir": ".",
- "outDir": "build"
- },
- "include": [
- "src/**/*.ts",
- "test/**/*.ts"
- ]
-}
diff --git a/release-please-config.json b/release-please-config.json
index 18bd96821c..7233d8d054 100644
--- a/release-please-config.json
+++ b/release-please-config.json
@@ -46,7 +46,6 @@
"packages/instrumentation-connect": {},
"packages/instrumentation-dns": {},
"packages/instrumentation-express": {},
- "packages/instrumentation-fastify": {},
"packages/instrumentation-generic-pool": {},
"packages/instrumentation-graphql": {},
"packages/instrumentation-hapi": {},
diff --git a/scripts/lint-readme.js b/scripts/lint-readme.js
index 1a8654a3a1..d73d593616 100644
--- a/scripts/lint-readme.js
+++ b/scripts/lint-readme.js
@@ -27,9 +27,6 @@ const autoInstrumentationWebDeps = require(
`${monorepoRoot}/packages/auto-instrumentations-web/package.json`
).dependencies;
-// remove exempt instrumentations
-delete autoInstrumentationNodeDeps['@opentelemetry/instrumentation-fastify'];
-
// extract info from package.json
const packageJsonUrl = path.resolve(`${packageRoot}/package.json`);
const pjson = require(packageJsonUrl);