{"version":3,"sources":["../../../src/clients/conversation/activity.ts"],"names":["HttpClient"],"mappings":"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","file":"activity.mjs","sourcesContent":["import type { Span } from '@opentelemetry/api';\nimport type { AxiosResponse } from 'axios';\n\nimport {\n  Client as HttpClient,\n  type ClientOptions as HttpClientOptions\n} from '@microsoft/teams.common';\n\nimport {\n  toActivityParams,\n  type IMessageActivityInput,\n  type ITypingActivityInput\n} from '../../activities';\nimport {\n  API_ATTRIBUTE_NAMES,\n  OUTBOUND_OPERATIONS,\n  type ConversationActivityOperation\n} from '../../diagnostics/constants';\nimport { resolveAadObjectId, type DeprecatedInputActivity, type Resource, type TeamsChannelAccount } from '../../models';\nimport { ApiClientSettings, mergeApiClientSettings } from '../api-client-settings';\nimport {\n  ensureApiOutboundTelemetryMiddleware,\n  withApiOutboundTelemetry\n} from '../api-outbound-middleware';\nimport { normalizeServiceUrl } from '../service-url';\n\n/**\n * Payload accepted by the low-level conversation activity client.\n *\n * The OUTBOUND activity union: an app only sends message or typing activity inputs.\n * Kept as a named export for backwards compatibility.\n */\nexport type ActivityParams = IMessageActivityInput | ITypingActivityInput;\ntype ActivityParamsLike = ActivityParams | DeprecatedInputActivity;\n\nfunction apiOutboundTelemetryConfig(\n  operation: ConversationActivityOperation,\n  serviceUrl: string,\n  conversationId: string,\n  activity: ActivityParams | undefined,\n  options?: {\n    readonly activityId?: string;\n    readonly captureResponseActivityId?: boolean;\n  }\n) {\n  return {\n    extensions: withApiOutboundTelemetry({\n      operation,\n      attributes: {\n        [API_ATTRIBUTE_NAMES.operation]: operation,\n        [API_ATTRIBUTE_NAMES.serviceUrl]: serviceUrl,\n        [API_ATTRIBUTE_NAMES.conversationId]: conversationId,\n        ...(activity?.type !== undefined ? { [API_ATTRIBUTE_NAMES.activityType]: activity.type } : {}),\n        ...(options?.activityId !== undefined ? { [API_ATTRIBUTE_NAMES.activityId]: options.activityId } : {}),\n      },\n      ...(options?.captureResponseActivityId ? { onResponse: setResponseActivityId } : {}),\n    }),\n  };\n}\n\nfunction setResponseActivityId(span: Span, res: AxiosResponse): void {\n  const id = getResponseActivityId(res.data);\n  if (id) {\n    span.setAttribute(API_ATTRIBUTE_NAMES.activityId, id);\n  }\n}\n\nfunction getResponseActivityId(data: unknown): string | undefined {\n  if (!data || typeof data !== 'object') {\n    return undefined;\n  }\n\n  const id = (data as { id?: unknown }).id;\n  return typeof id === 'string' && id ? id : undefined;\n}\n\nexport class ConversationActivityClient {\n  readonly serviceUrl: string;\n\n  get http() {\n    return this._http;\n  }\n  set http(v) {\n    ensureApiOutboundTelemetryMiddleware(v);\n    this._http = v;\n  }\n  protected _http: HttpClient;\n  protected _apiClientSettings: Partial<ApiClientSettings>;\n\n  constructor(serviceUrl: string, options?: HttpClient | HttpClientOptions, apiClientSettings?: Partial<ApiClientSettings>) {\n    this.serviceUrl = normalizeServiceUrl(serviceUrl);\n\n    if (!options) {\n      this._http = new HttpClient();\n    } else if ('request' in options) {\n      this._http = options;\n    } else {\n      this._http = new HttpClient(options);\n    }\n    ensureApiOutboundTelemetryMiddleware(this._http);\n\n    this._apiClientSettings = mergeApiClientSettings(apiClientSettings);\n  }\n\n  /**\n   * @deprecated Use MessageActivityInput or TypingActivityInput instead.\n   */\n  async create(conversationId: string, params: DeprecatedInputActivity): Promise<Resource>;\n  async create(conversationId: string, params: ActivityParams): Promise<Resource>;\n  async create(conversationId: string, params: ActivityParamsLike): Promise<Resource>;\n  async create(conversationId: string, params: ActivityParamsLike) {\n    // TODO: Will be deprecated alongside accessor in ConversationClient\n    const activity = toActivityParams(params);\n    const res = await this.http.post<Resource>(\n                  `${this.serviceUrl}/v3/conversations/${conversationId}/activities`,\n      activity,\n      apiOutboundTelemetryConfig(OUTBOUND_OPERATIONS.create, this.serviceUrl, conversationId, activity, {\n        captureResponseActivityId: true,\n      })\n    );\n    return res.data;\n  }\n\n  /**\n   * @deprecated Use MessageActivityInput or TypingActivityInput instead.\n   */\n  async update(conversationId: string, id: string, params: DeprecatedInputActivity): Promise<Resource>;\n  async update(conversationId: string, id: string, params: ActivityParams): Promise<Resource>;\n  async update(conversationId: string, id: string, params: ActivityParamsLike): Promise<Resource>;\n  async update(conversationId: string, id: string, params: ActivityParamsLike) {\n    // TODO: Will be deprecated alongside accessor in ConversationClient\n    const activity = toActivityParams(params);\n    const res = await this.http.put<Resource>(\n      `${this.serviceUrl}/v3/conversations/${conversationId}/activities/${id}`,\n      activity,\n      apiOutboundTelemetryConfig(OUTBOUND_OPERATIONS.update, this.serviceUrl, conversationId, activity, {\n        activityId: id,\n        captureResponseActivityId: true,\n      })\n    );\n    return res.data;\n  }\n\n  /**\n   * @deprecated Use MessageActivityInput or TypingActivityInput instead.\n   */\n  async reply(conversationId: string, id: string, params: DeprecatedInputActivity): Promise<Resource>;\n  async reply(conversationId: string, id: string, params: ActivityParams): Promise<Resource>;\n  async reply(conversationId: string, id: string, params: ActivityParamsLike): Promise<Resource>;\n  async reply(conversationId: string, id: string, params: ActivityParamsLike) {\n    // TODO: Will be deprecated alongside accessor in ConversationClient\n    const activity = toActivityParams(params);\n    activity.replyToId = id;\n    const res = await this.http.post<Resource>(\n      `${this.serviceUrl}/v3/conversations/${conversationId}/activities`,\n      activity,\n      apiOutboundTelemetryConfig(OUTBOUND_OPERATIONS.reply, this.serviceUrl, conversationId, activity, {\n        captureResponseActivityId: true,\n      })\n    );\n    return res.data;\n  }\n\n  async delete(conversationId: string, id: string) {\n    const url = `${this.serviceUrl}/v3/conversations/${conversationId}/activities/${id}`;\n    const res = await this.http.delete<void>(\n      url,\n      apiOutboundTelemetryConfig(\n        OUTBOUND_OPERATIONS.delete,\n        this.serviceUrl,\n        conversationId,\n        undefined,\n        { activityId: id }\n      )\n    );\n    return res.data;\n  }\n\n  async getMembers(conversationId: string, id: string): Promise<TeamsChannelAccount[]> {\n    const url = `${this.serviceUrl}/v3/conversations/${conversationId}/activities/${id}/members`;\n    const res = await this.http.get<TeamsChannelAccount[]>(url);\n    return (res.data ?? []).map(resolveAadObjectId);\n  }\n\n  /**\n   * @deprecated Use MessageActivityInput or TypingActivityInput instead.\n   */\n  async createTargeted(conversationId: string, params: DeprecatedInputActivity): Promise<Resource>;\n  async createTargeted(conversationId: string, params: ActivityParams): Promise<Resource>;\n  async createTargeted(conversationId: string, params: ActivityParamsLike): Promise<Resource>;\n  async createTargeted(conversationId: string, params: ActivityParamsLike) {\n    // TODO: Will be deprecated alongside accessor in ConversationClient\n    const activity = toActivityParams(params);\n    const res = await this.http.post<Resource>(\n      `${this.serviceUrl}/v3/conversations/${conversationId}/activities?isTargetedActivity=true`,\n      activity,\n      apiOutboundTelemetryConfig(OUTBOUND_OPERATIONS.createTargeted, this.serviceUrl, conversationId, activity, {\n        captureResponseActivityId: true,\n      })\n    );\n    return res.data;\n  }\n\n  /**\n   * @deprecated Use MessageActivityInput or TypingActivityInput instead.\n   */\n  async updateTargeted(conversationId: string, id: string, params: DeprecatedInputActivity): Promise<Resource>;\n  async updateTargeted(conversationId: string, id: string, params: ActivityParams): Promise<Resource>;\n  async updateTargeted(conversationId: string, id: string, params: ActivityParamsLike): Promise<Resource>;\n  async updateTargeted(conversationId: string, id: string, params: ActivityParamsLike) {\n    // TODO: Will be deprecated alongside accessor in ConversationClient\n    const activity = toActivityParams(params);\n    const res = await this.http.put<Resource>(\n      `${this.serviceUrl}/v3/conversations/${conversationId}/activities/${id}?isTargetedActivity=true`,\n      activity,\n      apiOutboundTelemetryConfig(OUTBOUND_OPERATIONS.updateTargeted, this.serviceUrl, conversationId, activity, {\n        activityId: id,\n        captureResponseActivityId: true,\n      })\n    );\n    return res.data;\n  }\n\n  async deleteTargeted(conversationId: string, id: string) {\n    const url = `${this.serviceUrl}/v3/conversations/${conversationId}/activities/${id}?isTargetedActivity=true`;\n    const res = await this.http.delete<void>(\n      url,\n      apiOutboundTelemetryConfig(\n        OUTBOUND_OPERATIONS.deleteTargeted,\n        this.serviceUrl,\n        conversationId,\n        undefined,\n        { activityId: id }\n      )\n    );\n    return res.data;\n  }\n}\n"]}