{"version":3,"sources":["../../src/clients/index.ts"],"names":["HttpClient"],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n  Client as HttpClient,\n  type ClientOptions as HttpClientOptions\n} from '@microsoft/teams.common';\n\nimport { CloudEnvironment } from '../auth/cloud-environment';\nimport type { ITokenProvider } from '../auth/credentials';\nimport { AgenticIdentity } from '../models';\n\nimport { ApiClientSettings, mergeApiClientSettings } from './api-client-settings';\nimport {\n  ensureApiOutboundTelemetryMiddleware\n} from './api-outbound-middleware';\nimport { BotClient } from './bot';\nimport { ConversationClient } from './conversation';\nimport { MeetingClient } from './meeting';\nimport { ReactionClient } from './reaction';\nimport { normalizeServiceUrl } from './service-url';\nimport { TeamClient } from './team';\nimport { createTokenProviderFactory } from './token-provider-factory';\nimport { UserClient } from './user';\n\n/**\n * Options for creating a scoped API client from an existing client.\n */\nexport type ApiClientCloneOptions = Omit<Partial<ApiClientSettings>, 'agenticIdentity'> & {\n  /**\n   * Service URL for the scoped client. Defaults to the current client's service URL.\n   */\n  readonly serviceUrl?: string;\n\n  /**\n   * `undefined` preserves the current client default; `null` clears it.\n   */\n  readonly agenticIdentity?: AgenticIdentity | null;\n};\n\n/**\n * Options for creating a scoped API client for a specific Bot Framework service URL.\n */\nexport type ApiClientFromServiceUrlOptions = {\n  /**\n   * Service URL for the scoped client.\n   */\n  readonly serviceUrl: string;\n};\n\nexport class Client {\n  readonly serviceUrl: string;\n  readonly bots: BotClient;\n  readonly users: UserClient;\n  readonly conversations: ConversationClient;\n  readonly teams: TeamClient;\n  readonly meetings: MeetingClient;\n  readonly reactions: ReactionClient;\n\n  get http() {\n    return this._http;\n  }\n  set http(v) {\n    const http = this.prepareHttpClient(v);\n    this.bots.http = http;\n    this.users.http = http;\n    this.conversations.http = http;\n    this.teams.http = http;\n    this.meetings.http = http;\n    this.reactions.http = http;\n    this._http = http;\n  }\n  protected _http: HttpClient;\n  protected _baseHttp!: HttpClient;\n  protected _apiClientSettings: Partial<ApiClientSettings>;\n  protected _tokenProvider?: ITokenProvider;\n  protected _cloud?: CloudEnvironment;\n  protected _defaultAgenticIdentity?: AgenticIdentity;\n\n  constructor(\n    serviceUrl: string,\n    httpOptions?: HttpClient | HttpClientOptions,\n    apiClientSettings?: Partial<ApiClientSettings>,\n  ) {\n    this.serviceUrl = normalizeServiceUrl(serviceUrl);\n    this._cloud = apiClientSettings?.cloud;\n    this._tokenProvider = apiClientSettings?.tokenProvider;\n    this._defaultAgenticIdentity = apiClientSettings?.agenticIdentity;\n\n    if (!httpOptions) {\n      this._http = this.prepareHttpClient(new HttpClient());\n    } else if ('request' in httpOptions) {\n      this._http = this.prepareHttpClient(httpOptions);\n    } else {\n      this._http = this.prepareHttpClient(new HttpClient({\n        ...httpOptions,\n        headers: {\n          ...httpOptions?.headers,\n          'Content-Type': 'application/json',\n        },\n      }));\n    }\n\n    this._apiClientSettings = mergeApiClientSettings(apiClientSettings, this._cloud);\n\n    this.bots = new BotClient(this.http, this._apiClientSettings, this._cloud);\n    this.users = new UserClient(this.http, this._apiClientSettings, this._cloud);\n    this.conversations = new ConversationClient(this.serviceUrl, this.http, this._apiClientSettings);\n    this.teams = new TeamClient(this.serviceUrl, this.http, this._apiClientSettings);\n    this.meetings = new MeetingClient(this.serviceUrl, this.http, this._apiClientSettings);\n    this.reactions = new ReactionClient(this.serviceUrl, this.http, this._apiClientSettings);\n  }\n\n  /**\n   * Create a scoped API client that reuses this client's HTTP configuration and token provider.\n   */\n  clone(options: ApiClientCloneOptions = {}): Client {\n    const { serviceUrl, agenticIdentity, ...apiClientSettings } = options;\n    const http = this._baseHttp.clone();\n    if (this._tokenProvider) {\n      http.token = undefined;\n    }\n\n    return new Client(\n      serviceUrl ?? this.serviceUrl,\n      http,\n      {\n        ...this._apiClientSettings,\n        ...apiClientSettings,\n        ...(agenticIdentity === undefined ? {} : { agenticIdentity: agenticIdentity ?? undefined }),\n      }\n    );\n  }\n\n  /**\n   * Create a scoped API client for the provided agentic identity.\n   *\n   * @param agenticIdentity Agentic operation identity used by the scoped client\n   * when acquiring auth tokens.\n   */\n  forAgenticIdentity(agenticIdentity: AgenticIdentity): Client {\n    return this.clone({ agenticIdentity });\n  }\n\n  /**\n   * Create a scoped API client for the provided Bot Framework service URL.\n   */\n  fromServiceUrl(options: ApiClientFromServiceUrlOptions): Client {\n    return this.clone(options);\n  }\n\n  private prepareHttpClient(http: HttpClient): HttpClient {\n    if (this._tokenProvider && http.token !== undefined) {\n      throw new Error('Cannot use both a token provider and an HTTP client token.');\n    }\n\n    ensureApiOutboundTelemetryMiddleware(http);\n    if (this._tokenProvider) {\n      http.token = createTokenProviderFactory(this._tokenProvider, this._defaultAgenticIdentity, this._cloud);\n    }\n\n    this._baseHttp = http;\n    return http;\n  }\n\n}\n\nexport * from './user';\nexport * from './bot';\nexport * from './conversation';\nexport * from './meeting';\nexport * from './reaction';\nexport * from './team';\nexport * from './api-client-settings';\n"]}