@microsoft/teams.api
Version:
<p> <a href="https://www.npmjs.com/package/@microsoft/teams.api" target="_blank"> <img src="https://img.shields.io/npm/v/@microsoft/teams.api/latest" /> </a> <a href="https://www.npmjs.com/package/@microsoft/teams.api?activeTab=code" t
63 lines (61 loc) • 2.2 kB
JavaScript
import { SpanKind } from '@opentelemetry/api';
import { API_SPAN_NAMES } from '../diagnostics/constants.mjs';
import { getTeamsApiTracer, recordTeamsApiOutboundCall, recordTeamsApiOutboundError, recordTeamsApiException } from '../diagnostics/helpers.mjs';
const apiOutboundTelemetryMetadataKey = /* @__PURE__ */ Symbol("Microsoft.Teams.Api.outboundTelemetryMetadata");
function withApiOutboundTelemetry(metadata, extensions) {
const next = { ...extensions ?? {} };
next[apiOutboundTelemetryMetadataKey] = metadata;
return next;
}
function ensureApiOutboundTelemetryMiddleware(client) {
if (!client.middlewares.some((middleware) => middleware instanceof ApiOutboundTelemetryMiddleware)) {
client.use(new ApiOutboundTelemetryMiddleware());
}
}
class ApiOutboundTelemetryMiddleware {
async invoke(context, next) {
const metadata = getApiOutboundTelemetryMetadata(context.config.extensions);
if (!metadata) {
return next();
}
return getTeamsApiTracer().startActiveSpan(
API_SPAN_NAMES.apiClient,
{
kind: SpanKind.CLIENT,
attributes: metadata.attributes
},
async (span) => {
recordTeamsApiOutboundCall(metadata.operation);
try {
let res;
try {
res = await next();
} catch (error) {
recordTeamsApiOutboundError(metadata.operation);
recordTeamsApiException(span, error);
throw error;
}
if (metadata.onResponse) {
try {
await metadata.onResponse(span, res);
} catch (hookError) {
context.log.warn(
"Microsoft.Teams.Api outbound telemetry response hook failed",
hookError
);
}
}
return res;
} finally {
span.end();
}
}
);
}
}
function getApiOutboundTelemetryMetadata(extensions) {
return extensions?.[apiOutboundTelemetryMetadataKey];
}
export { ApiOutboundTelemetryMiddleware, ensureApiOutboundTelemetryMiddleware, withApiOutboundTelemetry };
//# sourceMappingURL=api-outbound-middleware.mjs.map
//# sourceMappingURL=api-outbound-middleware.mjs.map