opentelemetry-js-contrib: dependency version mismatch in `instrumentation-express`

What version of OpenTelemetry are you using?

@opentelemetry/api: 1.1.0 @opentelemetry/sdk-node: 0.29.0 @opentelemetry/instrumentation-express: 0.29.0

What version of Node are you using?

16.15.1

What did you do?

import the three packages above and then add ExpressInstrumentation to the instrumentations list when initializing NodeSDK.

What did you expect to see?

No errors

What did you see instead?

Typescript failed to compile:

src/main.ts:37:5 - error TS2322: Type 'ExpressInstrumentation' is not assignable to type 'InstrumentationOption'.
  Type 'ExpressInstrumentation' is not assignable to type 'Instrumentation'.
    Types of property 'setMeterProvider' are incompatible.
      Type '(meterProvider: import("D:/code/node_modules/@opentelemetry/api-metrics/build/src/types/MeterProvider").MeterProvider) => void' is not assignable to type '(meterProvider: import("D:/code/node_modules/@opentelemetry/sdk-metrics-base/node_modules/@opentelemetry/api-metrics/build/src/types/MeterProvider").MeterProvider) => void'.
        Types of parameters 'meterProvider' and 'meterProvider' are incompatible.
          Type 'import("D:/code/node_modules/@opentelemetry/sdk-metrics-base/node_modules/@opentelemetry/api-metrics/build/src/types/MeterProvider").MeterProvider' is not assignable to type 'import("D:/code/node_modules/@opentelemetry/api-metrics/build/src/types/MeterProvider").MeterProvider'.
            The types of 'getMeter(...).createObservableGauge' are incompatible between these types.
              Type '(name: string, options?: MetricOptions | undefined) => Observable' is not assignable to type '(name: string, callback: ObservableCallback, options?: MetricOptions | undefined) => void'.
                Types of parameters 'options' and 'callback' are incompatible.
                  Type 'ObservableCallback' has no properties in common with type 'MetricOptions'.

Additional context

Upon investigating my package-lock.json I found that @opentelemetry/instrumentation-express@0.29.0 imports @opentelemetry/istrumentation@^0.28.0 which creates a version mismatch (0.29.0 vs 0.28.0). The compilation error comes from my dependency tree having two different versions of @opentelemetry/api-metrics: 0.28.0 and 0.29.0.

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 16 (11 by maintainers)

Most upvoted comments

yes, the correct solution would be to reduce the coupling by introducing stable interfaces for everything. The short term solution would be releasing all these packages in lock step - even if some of them don’t have any new commits, release a new version just so they’re always in sync.