@uphold/opentelemetry-instrumentation-connect-node 0.1.4 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,7 +14,7 @@ const createMetadataAttributesExtractor = (config, kind, phase) => {
14
14
  }
15
15
  // See: https://opentelemetry.io/docs/specs/semconv/rpc/
16
16
  return (span, metadata) => {
17
- const rpcSystem = span.attributes[incubating_1.ATTR_RPC_SYSTEM];
17
+ const rpcSystem = span.attributes?.[incubating_1.ATTR_RPC_SYSTEM];
18
18
  const attributes = {};
19
19
  if (rpcSystem && metadata) {
20
20
  for (const [key, mappedKey] of mappings) {
@@ -1 +1 @@
1
- {"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ATTR_RPC_CONNECT_RPC_ERROR_CODE,\n ATTR_RPC_GRPC_STATUS_CODE,\n ATTR_RPC_METHOD,\n ATTR_RPC_SERVICE,\n ATTR_RPC_SYSTEM,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT\n} from '@opentelemetry/semantic-conventions/incubating';\nimport { ConnectError, StreamRequest, StreamResponse, UnaryRequest, UnaryResponse } from '@connectrpc/connect';\nimport { ConnectNodeInstrumentationConfig } from './types';\nimport { DiagLogger, SpanStatusCode, Tracer, context, propagation, trace } from '@opentelemetry/api';\nimport { InterceptorAnyFn, RpcKind, RpcPhase } from './internal-types';\nimport { Span } from '@opentelemetry/sdk-trace-base';\nimport { errorCodeToString, isConnectError, resolveRpcSystem, rpcKindToSpanKind } from './utils';\nimport { memoize } from 'lodash';\nimport { safeExecuteInTheMiddle } from '@opentelemetry/instrumentation';\n\nconst createMetadataAttributesExtractor = (\n config: ConnectNodeInstrumentationConfig,\n kind: RpcKind,\n phase: RpcPhase\n) => {\n const metadataToSpanAttributes = config.metadataToSpanAttributes?.[kind]?.[phase] ?? [];\n const mappings = new Map(\n metadataToSpanAttributes.map(value => [value.toLowerCase(), value.toLowerCase().replace(/-/g, '_')])\n );\n\n if (mappings.size === 0) {\n return () => ({});\n }\n\n // See: https://opentelemetry.io/docs/specs/semconv/rpc/\n return (span: Span, metadata?: Headers) => {\n const rpcSystem = span.attributes[ATTR_RPC_SYSTEM];\n const attributes: Record<string, string> = {};\n\n if (rpcSystem && metadata) {\n for (const [key, mappedKey] of mappings) {\n const value = metadata.get(key);\n\n if (value != null) {\n attributes[`grpc.${rpcSystem}.${phase}.metadata.${mappedKey}`] = value;\n }\n }\n }\n\n return attributes;\n };\n};\n\nconst createStartSpan = (config: ConnectNodeInstrumentationConfig, tracer: Tracer, kind: RpcKind) => {\n const extractMetadata = createMetadataAttributesExtractor(config, kind, 'request');\n const parseUrl = memoize((url: string) => new URL(url));\n\n // See: https://opentelemetry.io/docs/specs/semconv/rpc/\n return (req: UnaryRequest | StreamRequest) => {\n const fullName = `${req.service.typeName}/${req.method.name}`;\n const url = parseUrl(req.url);\n const rpcSystem = resolveRpcSystem(req.header);\n\n const span = tracer.startSpan(fullName, {\n attributes: {\n [ATTR_RPC_METHOD]: req.method.name,\n [ATTR_RPC_SERVICE]: req.service.typeName,\n [ATTR_RPC_SYSTEM]: rpcSystem,\n [ATTR_SERVER_ADDRESS]: url.hostname,\n [ATTR_SERVER_PORT]: url.port || undefined\n },\n kind: rpcKindToSpanKind(kind)\n });\n\n span.setAttributes(extractMetadata(span as Span, req.header));\n\n return span;\n };\n};\n\nconst createEndSpanWithSuccess = (config: ConnectNodeInstrumentationConfig, kind: RpcKind) => {\n const extractMetadata = createMetadataAttributesExtractor(config, kind, 'response');\n\n // See: https://opentelemetry.io/docs/specs/semconv/rpc/\n return (span: Span, res: UnaryResponse | StreamResponse) => {\n if (span.ended) {\n return;\n }\n\n const rpcSystem = span.attributes[ATTR_RPC_SYSTEM];\n\n span.setStatus({ code: SpanStatusCode.OK });\n\n if (rpcSystem === 'grpc') {\n span.setAttribute(ATTR_RPC_GRPC_STATUS_CODE, 0);\n }\n\n span.setAttributes(extractMetadata(span as Span, res.header));\n span.end();\n };\n};\n\nconst createEndSpanWithError = (config: ConnectNodeInstrumentationConfig, kind: RpcKind) => {\n const extractMetadata = createMetadataAttributesExtractor(config, kind, 'response');\n\n // See: https://opentelemetry.io/docs/specs/semconv/rpc/\n return (span: Span, err: unknown) => {\n if (span.ended) {\n return;\n }\n\n const error = err instanceof Error ? (err as Error) : undefined;\n const connectError = isConnectError(error) ? (error as ConnectError) : undefined;\n const rpcSystem = span.attributes[ATTR_RPC_SYSTEM];\n\n span.setStatus({ code: SpanStatusCode.ERROR, message: error?.message });\n\n if (rpcSystem === 'grpc') {\n span.setAttribute(ATTR_RPC_GRPC_STATUS_CODE, connectError?.code ?? 2);\n } else if (rpcSystem === 'connect_rpc') {\n span.setAttribute(ATTR_RPC_CONNECT_RPC_ERROR_CODE, errorCodeToString(connectError?.code));\n }\n\n span.setAttributes(extractMetadata(span as Span, connectError?.metadata));\n\n if (error) {\n span.recordException(error);\n }\n\n span.end();\n };\n};\n\nconst carrierSetterAndGetter = {\n get: (carrier: Headers, key: string) => carrier.get(key) ?? undefined,\n keys: (carrier: Headers) => Array.from(carrier.keys()),\n set: (carrier: Headers, key: string, value: string) => carrier.set(key, value)\n};\n\nexport const createClientInterceptor = (config: ConnectNodeInstrumentationConfig, diag: DiagLogger, tracer: Tracer) => {\n const startSpan = createStartSpan(config, tracer, 'client');\n const endSpanWithSuccess = createEndSpanWithSuccess(config, 'client');\n const endSpanWithError = createEndSpanWithError(config, 'client');\n\n return (next: InterceptorAnyFn): InterceptorAnyFn =>\n async req => {\n // Only unary requests are supported due to a bug in Node.js async context propagation on generator functions.\n // See https://github.com/open-telemetry/opentelemetry-js/issues/2951 and https://github.com/nodejs/node/issues/42237\n if (req.method.methodKind !== 'unary') {\n return await next(req);\n }\n\n const shouldIgnoreRequest = safeExecuteInTheMiddle(\n () => config.ignoreRequest?.(req) === true,\n (err: unknown) => {\n if (err != null) {\n diag.error('caught ignoreRequest error: ', err);\n }\n },\n true\n );\n\n if (shouldIgnoreRequest) {\n return await next(req);\n }\n\n const span = startSpan(req);\n\n try {\n return await context.with(trace.setSpan(context.active(), span), async () => {\n propagation.inject(context.active(), req.header, carrierSetterAndGetter);\n\n const res = await next(req);\n\n endSpanWithSuccess(span as Span, res);\n\n return res;\n });\n } catch (err) {\n endSpanWithError(span as Span, err);\n\n throw err;\n }\n };\n};\n\nexport const createServerInterceptor = (config: ConnectNodeInstrumentationConfig, diag: DiagLogger, tracer: Tracer) => {\n const startSpan = createStartSpan(config, tracer, 'server');\n const endSpanWithSuccess = createEndSpanWithSuccess(config, 'server');\n const endSpanWithError = createEndSpanWithError(config, 'server');\n\n return (next: InterceptorAnyFn): InterceptorAnyFn =>\n async req => {\n // Only unary requests are supported due to a bug in Node.js async context propagation on generator functions.\n // See https://github.com/open-telemetry/opentelemetry-js/issues/2951 and https://github.com/nodejs/node/issues/42237\n if (req.method.methodKind !== 'unary') {\n return await next(req);\n }\n\n const shouldIgnoreRequest = safeExecuteInTheMiddle(\n () => config.ignoreRequest?.(req) === true,\n (err: unknown) => {\n if (err != null) {\n diag.error('caught ignoreRequest error: ', err);\n }\n },\n true\n );\n\n if (shouldIgnoreRequest) {\n return await next(req);\n }\n\n return await context.with(propagation.extract(context.active(), req.header, carrierSetterAndGetter), async () => {\n const span = startSpan(req);\n\n try {\n return await context.with(trace.setSpan(context.active(), span), async () => {\n const res = await next(req);\n\n endSpanWithSuccess(span as Span, res);\n\n return res;\n });\n } catch (err) {\n endSpanWithError(span as Span, err);\n\n throw err;\n }\n });\n };\n};\n"]}
1
+ {"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":";;;AAAA,+EAQwD;AAGxD,4CAAqG;AAGrG,mCAAiG;AACjG,mCAAiC;AACjC,oEAAwE;AAExE,MAAM,iCAAiC,GAAG,CACxC,MAAwC,EACxC,IAAa,EACb,KAAe,EACf,EAAE;IACF,MAAM,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACxF,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CACrG,CAAC;IAEF,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,wDAAwD;IACxD,OAAO,CAAC,IAAU,EAAE,QAAkB,EAAE,EAAE;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,4BAAe,CAAC,CAAC;QACrD,MAAM,UAAU,GAA2B,EAAE,CAAC;QAE9C,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;YAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEhC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;oBAClB,UAAU,CAAC,QAAQ,SAAS,IAAI,KAAK,aAAa,SAAS,EAAE,CAAC,GAAG,KAAK,CAAC;gBACzE,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAwC,EAAE,MAAc,EAAE,IAAa,EAAE,EAAE;IAClG,MAAM,eAAe,GAAG,iCAAiC,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,IAAA,gBAAO,EAAC,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAExD,wDAAwD;IACxD,OAAO,CAAC,GAAiC,EAAE,EAAE;QAC3C,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9D,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAA,wBAAgB,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE/C,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;YACtC,UAAU,EAAE;gBACV,CAAC,4BAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI;gBAClC,CAAC,6BAAgB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ;gBACxC,CAAC,4BAAe,CAAC,EAAE,SAAS;gBAC5B,CAAC,gCAAmB,CAAC,EAAE,GAAG,CAAC,QAAQ;gBACnC,CAAC,6BAAgB,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,SAAS;aAC1C;YACD,IAAI,EAAE,IAAA,yBAAiB,EAAC,IAAI,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAE9D,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,MAAwC,EAAE,IAAa,EAAE,EAAE;IAC3F,MAAM,eAAe,GAAG,iCAAiC,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAEpF,wDAAwD;IACxD,OAAO,CAAC,IAAU,EAAE,GAAmC,EAAE,EAAE;QACzD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,4BAAe,CAAC,CAAC;QAEnD,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,EAAE,EAAE,CAAC,CAAC;QAE5C,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,sCAAyB,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,MAAwC,EAAE,IAAa,EAAE,EAAE;IACzF,MAAM,eAAe,GAAG,iCAAiC,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAEpF,wDAAwD;IACxD,OAAO,CAAC,IAAU,EAAE,GAAY,EAAE,EAAE;QAClC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAE,GAAa,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,MAAM,YAAY,GAAG,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAsB,CAAC,CAAC,CAAC,SAAS,CAAC;QACjF,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,4BAAe,CAAC,CAAC;QAEnD,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAExE,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,sCAAyB,EAAE,YAAY,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;QACxE,CAAC;aAAM,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YACvC,IAAI,CAAC,YAAY,CAAC,4CAA+B,EAAE,IAAA,yBAAiB,EAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5F,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE1E,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG;IAC7B,GAAG,EAAE,CAAC,OAAgB,EAAE,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,SAAS;IACrE,IAAI,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACtD,GAAG,EAAE,CAAC,OAAgB,EAAE,GAAW,EAAE,KAAa,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;CAC/E,CAAC;AAEK,MAAM,uBAAuB,GAAG,CAAC,MAAwC,EAAE,IAAgB,EAAE,MAAc,EAAE,EAAE;IACpH,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtE,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAElE,OAAO,CAAC,IAAsB,EAAoB,EAAE,CAClD,KAAK,EAAC,GAAG,EAAC,EAAE;QACV,8GAA8G;QAC9G,qHAAqH;QACrH,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;YACtC,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,MAAM,mBAAmB,GAAG,IAAA,wCAAsB,EAChD,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAC1C,CAAC,GAAY,EAAE,EAAE;YACf,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBAChB,IAAI,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,EACD,IAAI,CACL,CAAC;QAEF,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAE5B,IAAI,CAAC;YACH,OAAO,MAAM,aAAO,CAAC,IAAI,CAAC,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE;gBAC1E,iBAAW,CAAC,MAAM,CAAC,aAAO,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;gBAEzE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;gBAE5B,kBAAkB,CAAC,IAAY,EAAE,GAAG,CAAC,CAAC;gBAEtC,OAAO,GAAG,CAAC;YACb,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,gBAAgB,CAAC,IAAY,EAAE,GAAG,CAAC,CAAC;YAEpC,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;AACN,CAAC,CAAC;AA7CW,QAAA,uBAAuB,2BA6ClC;AAEK,MAAM,uBAAuB,GAAG,CAAC,MAAwC,EAAE,IAAgB,EAAE,MAAc,EAAE,EAAE;IACpH,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtE,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAElE,OAAO,CAAC,IAAsB,EAAoB,EAAE,CAClD,KAAK,EAAC,GAAG,EAAC,EAAE;QACV,8GAA8G;QAC9G,qHAAqH;QACrH,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;YACtC,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,MAAM,mBAAmB,GAAG,IAAA,wCAAsB,EAChD,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAC1C,CAAC,GAAY,EAAE,EAAE;YACf,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBAChB,IAAI,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,EACD,IAAI,CACL,CAAC;QAEF,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,MAAM,aAAO,CAAC,IAAI,CAAC,iBAAW,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,EAAE,KAAK,IAAI,EAAE;YAC9G,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAE5B,IAAI,CAAC;gBACH,OAAO,MAAM,aAAO,CAAC,IAAI,CAAC,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE;oBAC1E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;oBAE5B,kBAAkB,CAAC,IAAY,EAAE,GAAG,CAAC,CAAC;oBAEtC,OAAO,GAAG,CAAC;gBACb,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,gBAAgB,CAAC,IAAY,EAAE,GAAG,CAAC,CAAC;gBAEpC,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACN,CAAC,CAAC;AA7CW,QAAA,uBAAuB,2BA6ClC","sourcesContent":["import {\n ATTR_RPC_CONNECT_RPC_ERROR_CODE,\n ATTR_RPC_GRPC_STATUS_CODE,\n ATTR_RPC_METHOD,\n ATTR_RPC_SERVICE,\n ATTR_RPC_SYSTEM,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT\n} from '@opentelemetry/semantic-conventions/incubating';\nimport { ConnectError, StreamRequest, StreamResponse, UnaryRequest, UnaryResponse } from '@connectrpc/connect';\nimport { ConnectNodeInstrumentationConfig } from './types';\nimport { DiagLogger, SpanStatusCode, Tracer, context, propagation, trace } from '@opentelemetry/api';\nimport { InterceptorAnyFn, RpcKind, RpcPhase } from './internal-types';\nimport { Span } from '@opentelemetry/sdk-trace-base';\nimport { errorCodeToString, isConnectError, resolveRpcSystem, rpcKindToSpanKind } from './utils';\nimport { memoize } from 'lodash';\nimport { safeExecuteInTheMiddle } from '@opentelemetry/instrumentation';\n\nconst createMetadataAttributesExtractor = (\n config: ConnectNodeInstrumentationConfig,\n kind: RpcKind,\n phase: RpcPhase\n) => {\n const metadataToSpanAttributes = config.metadataToSpanAttributes?.[kind]?.[phase] ?? [];\n const mappings = new Map(\n metadataToSpanAttributes.map(value => [value.toLowerCase(), value.toLowerCase().replace(/-/g, '_')])\n );\n\n if (mappings.size === 0) {\n return () => ({});\n }\n\n // See: https://opentelemetry.io/docs/specs/semconv/rpc/\n return (span: Span, metadata?: Headers) => {\n const rpcSystem = span.attributes?.[ATTR_RPC_SYSTEM];\n const attributes: Record<string, string> = {};\n\n if (rpcSystem && metadata) {\n for (const [key, mappedKey] of mappings) {\n const value = metadata.get(key);\n\n if (value != null) {\n attributes[`grpc.${rpcSystem}.${phase}.metadata.${mappedKey}`] = value;\n }\n }\n }\n\n return attributes;\n };\n};\n\nconst createStartSpan = (config: ConnectNodeInstrumentationConfig, tracer: Tracer, kind: RpcKind) => {\n const extractMetadata = createMetadataAttributesExtractor(config, kind, 'request');\n const parseUrl = memoize((url: string) => new URL(url));\n\n // See: https://opentelemetry.io/docs/specs/semconv/rpc/\n return (req: UnaryRequest | StreamRequest) => {\n const fullName = `${req.service.typeName}/${req.method.name}`;\n const url = parseUrl(req.url);\n const rpcSystem = resolveRpcSystem(req.header);\n\n const span = tracer.startSpan(fullName, {\n attributes: {\n [ATTR_RPC_METHOD]: req.method.name,\n [ATTR_RPC_SERVICE]: req.service.typeName,\n [ATTR_RPC_SYSTEM]: rpcSystem,\n [ATTR_SERVER_ADDRESS]: url.hostname,\n [ATTR_SERVER_PORT]: url.port || undefined\n },\n kind: rpcKindToSpanKind(kind)\n });\n\n span.setAttributes(extractMetadata(span as Span, req.header));\n\n return span;\n };\n};\n\nconst createEndSpanWithSuccess = (config: ConnectNodeInstrumentationConfig, kind: RpcKind) => {\n const extractMetadata = createMetadataAttributesExtractor(config, kind, 'response');\n\n // See: https://opentelemetry.io/docs/specs/semconv/rpc/\n return (span: Span, res: UnaryResponse | StreamResponse) => {\n if (span.ended) {\n return;\n }\n\n const rpcSystem = span.attributes[ATTR_RPC_SYSTEM];\n\n span.setStatus({ code: SpanStatusCode.OK });\n\n if (rpcSystem === 'grpc') {\n span.setAttribute(ATTR_RPC_GRPC_STATUS_CODE, 0);\n }\n\n span.setAttributes(extractMetadata(span as Span, res.header));\n span.end();\n };\n};\n\nconst createEndSpanWithError = (config: ConnectNodeInstrumentationConfig, kind: RpcKind) => {\n const extractMetadata = createMetadataAttributesExtractor(config, kind, 'response');\n\n // See: https://opentelemetry.io/docs/specs/semconv/rpc/\n return (span: Span, err: unknown) => {\n if (span.ended) {\n return;\n }\n\n const error = err instanceof Error ? (err as Error) : undefined;\n const connectError = isConnectError(error) ? (error as ConnectError) : undefined;\n const rpcSystem = span.attributes[ATTR_RPC_SYSTEM];\n\n span.setStatus({ code: SpanStatusCode.ERROR, message: error?.message });\n\n if (rpcSystem === 'grpc') {\n span.setAttribute(ATTR_RPC_GRPC_STATUS_CODE, connectError?.code ?? 2);\n } else if (rpcSystem === 'connect_rpc') {\n span.setAttribute(ATTR_RPC_CONNECT_RPC_ERROR_CODE, errorCodeToString(connectError?.code));\n }\n\n span.setAttributes(extractMetadata(span as Span, connectError?.metadata));\n\n if (error) {\n span.recordException(error);\n }\n\n span.end();\n };\n};\n\nconst carrierSetterAndGetter = {\n get: (carrier: Headers, key: string) => carrier.get(key) ?? undefined,\n keys: (carrier: Headers) => Array.from(carrier.keys()),\n set: (carrier: Headers, key: string, value: string) => carrier.set(key, value)\n};\n\nexport const createClientInterceptor = (config: ConnectNodeInstrumentationConfig, diag: DiagLogger, tracer: Tracer) => {\n const startSpan = createStartSpan(config, tracer, 'client');\n const endSpanWithSuccess = createEndSpanWithSuccess(config, 'client');\n const endSpanWithError = createEndSpanWithError(config, 'client');\n\n return (next: InterceptorAnyFn): InterceptorAnyFn =>\n async req => {\n // Only unary requests are supported due to a bug in Node.js async context propagation on generator functions.\n // See https://github.com/open-telemetry/opentelemetry-js/issues/2951 and https://github.com/nodejs/node/issues/42237\n if (req.method.methodKind !== 'unary') {\n return await next(req);\n }\n\n const shouldIgnoreRequest = safeExecuteInTheMiddle(\n () => config.ignoreRequest?.(req) === true,\n (err: unknown) => {\n if (err != null) {\n diag.error('caught ignoreRequest error: ', err);\n }\n },\n true\n );\n\n if (shouldIgnoreRequest) {\n return await next(req);\n }\n\n const span = startSpan(req);\n\n try {\n return await context.with(trace.setSpan(context.active(), span), async () => {\n propagation.inject(context.active(), req.header, carrierSetterAndGetter);\n\n const res = await next(req);\n\n endSpanWithSuccess(span as Span, res);\n\n return res;\n });\n } catch (err) {\n endSpanWithError(span as Span, err);\n\n throw err;\n }\n };\n};\n\nexport const createServerInterceptor = (config: ConnectNodeInstrumentationConfig, diag: DiagLogger, tracer: Tracer) => {\n const startSpan = createStartSpan(config, tracer, 'server');\n const endSpanWithSuccess = createEndSpanWithSuccess(config, 'server');\n const endSpanWithError = createEndSpanWithError(config, 'server');\n\n return (next: InterceptorAnyFn): InterceptorAnyFn =>\n async req => {\n // Only unary requests are supported due to a bug in Node.js async context propagation on generator functions.\n // See https://github.com/open-telemetry/opentelemetry-js/issues/2951 and https://github.com/nodejs/node/issues/42237\n if (req.method.methodKind !== 'unary') {\n return await next(req);\n }\n\n const shouldIgnoreRequest = safeExecuteInTheMiddle(\n () => config.ignoreRequest?.(req) === true,\n (err: unknown) => {\n if (err != null) {\n diag.error('caught ignoreRequest error: ', err);\n }\n },\n true\n );\n\n if (shouldIgnoreRequest) {\n return await next(req);\n }\n\n return await context.with(propagation.extract(context.active(), req.header, carrierSetterAndGetter), async () => {\n const span = startSpan(req);\n\n try {\n return await context.with(trace.setSpan(context.active(), span), async () => {\n const res = await next(req);\n\n endSpanWithSuccess(span as Span, res);\n\n return res;\n });\n } catch (err) {\n endSpanWithError(span as Span, err);\n\n throw err;\n }\n });\n };\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uphold/opentelemetry-instrumentation-connect-node",
3
- "version": "0.1.4",
3
+ "version": "0.2.1",
4
4
  "description": "OpenTelemetry instrumentation for `@connectrpc/connect-node` RPC client and server",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -26,7 +26,7 @@
26
26
  "access": "public"
27
27
  },
28
28
  "engines": {
29
- "node": ">=20"
29
+ "node": ">=22"
30
30
  },
31
31
  "scripts": {
32
32
  "prebuild": "rm -rf dist",
@@ -42,18 +42,18 @@
42
42
  ]
43
43
  },
44
44
  "dependencies": {
45
- "@opentelemetry/instrumentation": "^0.200.0",
46
- "@opentelemetry/semantic-conventions": "~1.32.0",
47
- "lodash": "^4.17.21"
45
+ "@opentelemetry/instrumentation": "^0.211.0",
46
+ "@opentelemetry/semantic-conventions": "~1.29.0",
47
+ "lodash": "^4.17.23"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "@opentelemetry/api": ">=1 <2"
51
51
  },
52
52
  "devDependencies": {
53
- "@connectrpc/connect": "^2.0.2",
54
- "@connectrpc/connect-node": "^2.0.2",
55
- "@opentelemetry/sdk-trace-base": "^2.0.0",
56
- "@opentelemetry/sdk-trace-node": "^2.0.0",
57
- "@types/lodash": "^4.17.16"
53
+ "@connectrpc/connect": "^2.1.1",
54
+ "@connectrpc/connect-node": "^2.1.1",
55
+ "@opentelemetry/sdk-trace-base": "^2.5.0",
56
+ "@opentelemetry/sdk-trace-node": "^2.5.0",
57
+ "@types/lodash": "^4.17.23"
58
58
  }
59
59
  }