UNPKG

@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

196 lines (193 loc) • 7.29 kB
'use strict'; var teams_common = require('@microsoft/teams.common'); var activities = require('../../activities'); var constants = require('../../diagnostics/constants'); var models = require('../../models'); var apiClientSettings = require('../api-client-settings'); var apiOutboundMiddleware = require('../api-outbound-middleware'); var serviceUrl = require('../service-url'); function requireId(name, value) { if (typeof value !== "string" || value.trim() === "") { throw new Error(`${name} must be a non-empty string`); } if (value === "." || value === "..") { throw new Error(`${name} must not be a dot segment`); } } function apiOutboundTelemetryConfig(operation, serviceUrl, conversationId, activity, options) { return { extensions: apiOutboundMiddleware.withApiOutboundTelemetry({ operation, attributes: { [constants.API_ATTRIBUTE_NAMES.operation]: operation, [constants.API_ATTRIBUTE_NAMES.serviceUrl]: serviceUrl, [constants.API_ATTRIBUTE_NAMES.conversationId]: conversationId, ...activity?.type !== void 0 ? { [constants.API_ATTRIBUTE_NAMES.activityType]: activity.type } : {}, ...options?.activityId !== void 0 ? { [constants.API_ATTRIBUTE_NAMES.activityId]: options.activityId } : {} }, ...options?.captureResponseActivityId ? { onResponse: setResponseActivityId } : {} }) }; } function setResponseActivityId(span, res) { const id = getResponseActivityId(res.data); if (id) { span.setAttribute(constants.API_ATTRIBUTE_NAMES.activityId, id); } } function getResponseActivityId(data) { if (!data || typeof data !== "object") { return void 0; } const id = data.id; return typeof id === "string" && id ? id : void 0; } class ConversationActivityClient { serviceUrl; get http() { return this._http; } set http(v) { apiOutboundMiddleware.ensureApiOutboundTelemetryMiddleware(v); this._http = v; } _http; _apiClientSettings; constructor(serviceUrl$1, options, apiClientSettings$1) { this.serviceUrl = serviceUrl.normalizeServiceUrl(serviceUrl$1); if (!options) { this._http = new teams_common.Client(); } else if ("request" in options) { this._http = options; } else { this._http = new teams_common.Client(options); } apiOutboundMiddleware.ensureApiOutboundTelemetryMiddleware(this._http); this._apiClientSettings = apiClientSettings.mergeApiClientSettings(apiClientSettings$1); } async create(conversationId, params) { const activity = activities.toActivityParams(params); const plan = models.getPlanInfo(activity); const res = await this.http.post( `${this.serviceUrl}/v3/conversations/${conversationId}/activities`, activity, apiOutboundTelemetryConfig(constants.OUTBOUND_OPERATIONS.create, this.serviceUrl, conversationId, activity, { captureResponseActivityId: true }) ); if (plan && plan.planType !== "complete") { return { id: "DO_NOT_USE_PLACEHOLDER_ID" }; } return res.data; } async update(conversationId, id, params) { const activity = activities.toActivityParams(params); const res = await this.http.put( `${this.serviceUrl}/v3/conversations/${conversationId}/activities/${id}`, activity, apiOutboundTelemetryConfig(constants.OUTBOUND_OPERATIONS.update, this.serviceUrl, conversationId, activity, { activityId: id, captureResponseActivityId: true }) ); return res.data; } async reply(conversationId, id, params) { const activity = { ...activities.toActivityParams(params), replyToId: id }; const plan = models.getPlanInfo(activity); const res = await this.http.post( `${this.serviceUrl}/v3/conversations/${conversationId}/activities`, activity, apiOutboundTelemetryConfig(constants.OUTBOUND_OPERATIONS.reply, this.serviceUrl, conversationId, activity, { captureResponseActivityId: true }) ); if (plan && plan.planType !== "complete") { return { id: "DO_NOT_USE_PLACEHOLDER_ID" }; } return res.data; } async createReplyChain(conversationId, id, params) { return this.sendInReplyChain(conversationId, id, params, false); } async createTargetedReplyChain(conversationId, id, params) { return this.sendInReplyChain(conversationId, id, params, true); } async delete(conversationId, id) { const url = `${this.serviceUrl}/v3/conversations/${conversationId}/activities/${id}`; const res = await this.http.delete( url, apiOutboundTelemetryConfig( constants.OUTBOUND_OPERATIONS.delete, this.serviceUrl, conversationId, void 0, { activityId: id } ) ); return res.data; } async getMembers(conversationId, id) { const url = `${this.serviceUrl}/v3/conversations/${conversationId}/activities/${id}/members`; const res = await this.http.get(url); return (res.data ?? []).map(models.resolveAadObjectId); } async createTargeted(conversationId, params) { const activity = activities.toActivityParams(params); const res = await this.http.post( `${this.serviceUrl}/v3/conversations/${conversationId}/activities?isTargetedActivity=true`, activity, apiOutboundTelemetryConfig(constants.OUTBOUND_OPERATIONS.createTargeted, this.serviceUrl, conversationId, activity, { captureResponseActivityId: true }) ); return res.data; } async updateTargeted(conversationId, id, params) { const activity = activities.toActivityParams(params); const res = await this.http.put( `${this.serviceUrl}/v3/conversations/${conversationId}/activities/${id}?isTargetedActivity=true`, activity, apiOutboundTelemetryConfig(constants.OUTBOUND_OPERATIONS.updateTargeted, this.serviceUrl, conversationId, activity, { activityId: id, captureResponseActivityId: true }) ); return res.data; } async deleteTargeted(conversationId, id) { const url = `${this.serviceUrl}/v3/conversations/${conversationId}/activities/${id}?isTargetedActivity=true`; const res = await this.http.delete( url, apiOutboundTelemetryConfig( constants.OUTBOUND_OPERATIONS.deleteTargeted, this.serviceUrl, conversationId, void 0, { activityId: id } ) ); return res.data; } async sendInReplyChain(conversationId, id, params, targeted) { requireId("conversationId", conversationId); requireId("id", id); const activity = activities.toActivityParams(params); const query = targeted ? "?isTargetedActivity=true" : ""; const res = await this.http.post( `${this.serviceUrl}/v3/conversations/${encodeURIComponent(conversationId)}/replyChains/${encodeURIComponent(id)}${query}`, activity, apiOutboundTelemetryConfig( targeted ? constants.OUTBOUND_OPERATIONS.createTargetedReplyChain : constants.OUTBOUND_OPERATIONS.createReplyChain, this.serviceUrl, conversationId, activity, { captureResponseActivityId: true } ) ); return res.data; } } exports.ConversationActivityClient = ConversationActivityClient; //# sourceMappingURL=activity.js.map //# sourceMappingURL=activity.js.map