UNPKG

@microsoft/teams.common

Version:

<p> <a href="https://www.npmjs.com/package/@microsoft/teams.common" target="_blank"> <img src="https://img.shields.io/npm/v/@microsoft/teams.common" /> </a> <a href="https://www.npmjs.com/package/@microsoft/teams.common?activeTab=code"

1 lines 10.6 kB
{"version":3,"sources":["../../src/http/client.ts"],"names":[],"mappings":";;;AA+DO,MAAM,MAAO,CAAA;AAAA,EAClB,KAAA;AAAA,EACS,IAAA;AAAA,EAEC,OAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAc,GAAA,CAAA;AAAA,EACd,YAAA;AAAA,EAEV,WAAA,CAAY,OAAyB,GAAA,EAAI,EAAA;AACvC,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA;AACf,IAAK,IAAA,CAAA,IAAA,GAAO,QAAQ,IAAQ,IAAA,MAAA;AAC5B,IAAA,IAAA,CAAK,QAAQ,OAAQ,CAAA,KAAA;AACrB,IAAA,IAAA,CAAK,MAAM,OAAQ,CAAA,MAAA,IAAU,IAAI,aAAA,CAAc,KAAK,IAAI,CAAA;AACxD,IAAK,IAAA,CAAA,YAAA,uBAAmB,GAAiC,EAAA;AACzD,IAAK,IAAA,CAAA,IAAA,GAAO,MAAM,MAAO,CAAA;AAAA,MACvB,SAAS,OAAQ,CAAA,OAAA;AAAA,MACjB,SAAS,OAAQ,CAAA,OAAA;AAAA,MACjB,SAAS,OAAQ,CAAA;AAAA,KAClB,CAAA;AAED,IAAA,KAAA,MAAW,WAAe,IAAA,OAAA,CAAQ,YAAgB,IAAA,EAAI,EAAA;AACpD,MAAA,IAAA,CAAK,IAAI,WAAW,CAAA;AAAA;AACtB;AACF,EAEA,MAAM,GAA4C,CAAA,GAAA,EAAa,MAA2B,EAAA;AACxF,IAAO,OAAA,IAAA,CAAK,KAAK,GAAa,CAAA,GAAA,EAAK,MAAM,IAAK,CAAA,UAAA,CAAW,MAAM,CAAC,CAAA;AAAA;AAClE,EAEA,MAAM,IAAA,CACJ,GACA,EAAA,IAAA,EACA,MACA,EAAA;AACA,IAAO,OAAA,IAAA,CAAK,KAAK,IAAc,CAAA,GAAA,EAAK,MAAM,MAAM,IAAA,CAAK,UAAW,CAAA,MAAM,CAAC,CAAA;AAAA;AACzE,EAEA,MAAM,GAAA,CACJ,GACA,EAAA,IAAA,EACA,MACA,EAAA;AACA,IAAO,OAAA,IAAA,CAAK,KAAK,GAAa,CAAA,GAAA,EAAK,MAAM,MAAM,IAAA,CAAK,UAAW,CAAA,MAAM,CAAC,CAAA;AAAA;AACxE,EAEA,MAAM,KAAA,CACJ,GACA,EAAA,IAAA,EACA,MACA,EAAA;AACA,IAAO,OAAA,IAAA,CAAK,KAAK,KAAe,CAAA,GAAA,EAAK,MAAM,MAAM,IAAA,CAAK,UAAW,CAAA,MAAM,CAAC,CAAA;AAAA;AAC1E,EAEA,MAAM,MAA+C,CAAA,GAAA,EAAa,MAA2B,EAAA;AAC3F,IAAO,OAAA,IAAA,CAAK,KAAK,MAAgB,CAAA,GAAA,EAAK,MAAM,IAAK,CAAA,UAAA,CAAW,MAAM,CAAC,CAAA;AAAA;AACrE,EAEA,MAAM,QAAgD,MAA0B,EAAA;AAC9E,IAAA,OAAO,KAAK,IAAK,CAAA,OAAA,CAAiB,MAAM,IAAK,CAAA,UAAA,CAAW,MAAM,CAAC,CAAA;AAAA;AACjE;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,WAA0B,EAAA;AAC5B,IAAM,MAAA,EAAA,GAAK,EAAE,IAAK,CAAA,GAAA;AAClB,IAAA,IAAI,SAAgC,GAAA,MAAA;AACpC,IAAA,IAAI,UAAiC,GAAA,MAAA;AAErC,IAAA,IAAI,YAAY,OAAS,EAAA;AACvB,MAAY,SAAA,GAAA,IAAA,CAAK,IAAK,CAAA,YAAA,CAAa,OAAQ,CAAA,GAAA;AAAA;AAAA,QAEzC,CAAC,MAAW,KAAA;AACV,UAAA,OAAO,YAAY,OAAS,CAAA,EAAE,QAAQ,GAAK,EAAA,IAAA,CAAK,KAAK,CAAA;AAAA,SACvD;AAAA;AAAA,QAEA,CAAC,KAAe,KAAA;AACd,UAAI,IAAA,CAAC,WAAY,CAAA,KAAA,EAAc,OAAA,KAAA;AAC/B,UAAA,OAAO,YAAY,KAAM,CAAA,EAAE,OAAO,GAAK,EAAA,IAAA,CAAK,KAAK,CAAA;AAAA;AACnD,OACF;AAAA;AAGF,IAAA,IAAI,YAAY,QAAU,EAAA;AACxB,MAAa,UAAA,GAAA,IAAA,CAAK,IAAK,CAAA,YAAA,CAAa,QAAS,CAAA,GAAA;AAAA;AAAA,QAE3C,CAAC,GAAQ,KAAA;AACP,UAAA,OAAO,YAAY,QAAU,CAAA,EAAE,KAAK,GAAK,EAAA,IAAA,CAAK,KAAK,CAAA;AAAA,SACrD;AAAA;AAAA,QAEA,CAAC,KAAe,KAAA;AACd,UAAI,IAAA,CAAC,WAAY,CAAA,KAAA,EAAc,OAAA,KAAA;AAC/B,UAAA,OAAO,YAAY,KAAM,CAAA,EAAE,OAAO,GAAK,EAAA,IAAA,CAAK,KAAK,CAAA;AAAA;AACnD,OACF;AAAA;AAGF,IAAK,IAAA,CAAA,YAAA,CAAa,IAAI,EAAI,EAAA;AAAA,MACxB,SAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAO,OAAA,EAAA;AAAA;AACT;AAAA;AAAA;AAAA,EAKA,MAAM,EAAY,EAAA;AAChB,IAAA,MAAM,QAAW,GAAA,IAAA,CAAK,YAAa,CAAA,GAAA,CAAI,EAAE,CAAA;AAEzC,IAAA,IAAI,CAAC,QAAU,EAAA;AAEf,IAAA,IAAI,SAAS,SAAW,EAAA;AACtB,MAAA,IAAA,CAAK,IAAK,CAAA,YAAA,CAAa,OAAQ,CAAA,KAAA,CAAM,SAAS,SAAS,CAAA;AAAA;AAGzD,IAAA,IAAI,SAAS,UAAY,EAAA;AACvB,MAAA,IAAA,CAAK,IAAK,CAAA,YAAA,CAAa,QAAS,CAAA,KAAA,CAAM,SAAS,UAAU,CAAA;AAAA;AAG3D,IAAK,IAAA,CAAA,YAAA,CAAa,OAAO,EAAE,CAAA;AAAA;AAC7B;AAAA;AAAA;AAAA,EAKA,KAAQ,GAAA;AACN,IAAA,KAAA,MAAW,EAAM,IAAA,IAAA,CAAK,YAAa,CAAA,IAAA,EAAQ,EAAA;AACzC,MAAA,IAAA,CAAK,MAAM,EAAE,CAAA;AAAA;AACf;AACF;AAAA;AAAA;AAAA,EAKA,MAAM,OAAyB,EAAA;AAC7B,IAAA,OAAO,IAAI,MAAO,CAAA;AAAA,MAChB,GAAG,IAAK,CAAA,OAAA;AAAA,MACR,GAAG,OAAA;AAAA,MACH,OAAS,EAAA;AAAA,QACP,GAAG,KAAK,OAAQ,CAAA,OAAA;AAAA,QAChB,GAAG,OAAS,EAAA;AAAA,OACd;AAAA,MACA,YAAc,EAAA,CAAC,GAAG,KAAA,CAAM,KAAK,IAAK,CAAA,YAAA,CAAa,MAAO,EAAC,EAAE,GAAI,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,WAAW,CAAC;AAAA,KACnF,CAAA;AAAA;AACH,EAEA,MAAgB,UAAA,CAAW,MAAwB,GAAA,EAAI,EAAA;AACrD,IAAI,IAAA,KAAA,GAAQ,MAAO,CAAA,KAAA,IAAS,IAAK,CAAA,KAAA;AAEjC,IAAA,IAAI,OAAO,KAAO,EAAA;AAChB,MAAA,OAAO,MAAO,CAAA,KAAA;AAAA;AAGhB,IAAI,IAAA,IAAA,CAAK,QAAQ,OAAS,EAAA;AACxB,MAAI,IAAA,CAAC,OAAO,OAAS,EAAA;AACnB,QAAA,MAAA,CAAO,UAAU,EAAC;AAAA;AAGpB,MAAW,KAAA,MAAA,GAAA,IAAO,IAAK,CAAA,OAAA,CAAQ,OAAS,EAAA;AACtC,QAAA,MAAA,CAAO,QAAQ,GAAG,CAAA,GAAI,IAAK,CAAA,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAAA;AAChD;AAGF,IAAA,IAAI,KAAO,EAAA;AACT,MAAI,IAAA,CAAC,OAAO,OAAS,EAAA;AACnB,QAAA,MAAA,CAAO,UAAU,EAAC;AAAA;AAGpB,MAAI,IAAA,OAAO,UAAU,UAAY,EAAA;AAC/B,QAAQ,KAAA,GAAA,MAAM,MAAM,MAAM,CAAA;AAAA;AAG5B,MAAI,IAAA,KAAA,IAAS,OAAO,KAAA,KAAU,QAAU,EAAA;AACtC,QAAA,KAAA,GAAQ,MAAM,QAAS,EAAA;AAAA;AAGzB,MAAA,MAAA,CAAO,OAAQ,CAAA,eAAe,CAAI,GAAA,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA;AAAA;AAGnD,IAAO,OAAA,MAAA;AAAA;AAEX","file":"client.mjs","sourcesContent":["import axios, {\n AxiosInstance,\n AxiosResponse,\n AxiosRequestConfig,\n RawAxiosRequestHeaders,\n} from 'axios';\n\nimport { ConsoleLogger, ILogger } from '../logging';\n\nimport { Interceptor } from './interceptor';\nimport { Token } from './token';\n\nexport type ClientOptions = {\n /**\n * The client name\n */\n readonly name?: string;\n\n /**\n * The authorization token to use\n */\n readonly token?: Token;\n\n /**\n *: ILogger instance to use\n */\n readonly logger?: ILogger;\n\n /**\n * The baseUrl to prefix all client requests with\n */\n readonly baseUrl?: string;\n\n /**\n * Default request timeout (ms)\n */\n readonly timeout?: number;\n\n /**\n * Default headers\n */\n readonly headers?: RawAxiosRequestHeaders;\n\n /**\n * Default interceptors to register\n */\n readonly interceptors?: Array<Interceptor>;\n};\n\nexport type RequestConfig<D = any> = AxiosRequestConfig<D> & {\n /**\n * If provided, this token will be used instead of\n * the default token provided in the `ClientOptions`\n */\n token?: Token;\n};\n\ntype InterceptorRegistry = {\n readonly requestId?: number;\n readonly responseId?: number;\n readonly interceptor: Interceptor;\n};\n\nexport class Client {\n token?: Token;\n readonly name: string;\n\n protected options: ClientOptions;\n protected log: ILogger;\n protected http: AxiosInstance;\n protected seq: number = 0;\n protected interceptors: Map<number, InterceptorRegistry>;\n\n constructor(options: ClientOptions = {}) {\n this.options = options;\n this.name = options.name || 'http';\n this.token = options.token;\n this.log = options.logger || new ConsoleLogger(this.name);\n this.interceptors = new Map<number, InterceptorRegistry>();\n this.http = axios.create({\n baseURL: options.baseUrl,\n timeout: options.timeout,\n headers: options.headers,\n });\n\n for (const interceptor of options.interceptors || []) {\n this.use(interceptor);\n }\n }\n\n async get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: RequestConfig<D>) {\n return this.http.get<T, R, D>(url, await this.withConfig(config));\n }\n\n async post<T = any, R = AxiosResponse<T>, D = any>(\n url: string,\n data?: D,\n config?: RequestConfig<D>\n ) {\n return this.http.post<T, R, D>(url, data, await this.withConfig(config));\n }\n\n async put<T = any, R = AxiosResponse<T>, D = any>(\n url: string,\n data?: D,\n config?: RequestConfig<D>\n ) {\n return this.http.put<T, R, D>(url, data, await this.withConfig(config));\n }\n\n async patch<T = any, R = AxiosResponse<T>, D = any>(\n url: string,\n data?: D,\n config?: RequestConfig<D>\n ) {\n return this.http.patch<T, R, D>(url, data, await this.withConfig(config));\n }\n\n async delete<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: RequestConfig<D>) {\n return this.http.delete<T, R, D>(url, await this.withConfig(config));\n }\n\n async request<T = any, R = AxiosResponse<T>, D = any>(config: RequestConfig<D>) {\n return this.http.request<T, R, D>(await this.withConfig(config));\n }\n\n /**\n * Register an interceptor to use\n * as middleware for the request/response/error\n */\n use(interceptor: Interceptor) {\n const id = ++this.seq;\n let requestId: number | undefined = undefined;\n let responseId: number | undefined = undefined;\n\n if (interceptor.request) {\n requestId = this.http.interceptors.request.use(\n /* istanbul ignore next */\n (config) => {\n return interceptor.request!({ config, log: this.log });\n },\n /* istanbul ignore next */\n (error: any) => {\n if (!interceptor.error) return error;\n return interceptor.error({ error, log: this.log });\n }\n );\n }\n\n if (interceptor.response) {\n responseId = this.http.interceptors.response.use(\n /* istanbul ignore next */\n (res) => {\n return interceptor.response!({ res, log: this.log });\n },\n /* istanbul ignore next */\n (error: any) => {\n if (!interceptor.error) return error;\n return interceptor.error({ error, log: this.log });\n }\n );\n }\n\n this.interceptors.set(id, {\n requestId,\n responseId,\n interceptor,\n });\n\n return id;\n }\n\n /**\n * Eject an interceptor\n */\n eject(id: number) {\n const registry = this.interceptors.get(id);\n\n if (!registry) return;\n\n if (registry.requestId) {\n this.http.interceptors.request.eject(registry.requestId);\n }\n\n if (registry.responseId) {\n this.http.interceptors.response.eject(registry.responseId);\n }\n\n this.interceptors.delete(id);\n }\n\n /**\n * Clear (Eject) all interceptors\n */\n clear() {\n for (const id of this.interceptors.keys()) {\n this.eject(id);\n }\n }\n\n /**\n * Create a copy of the client\n */\n clone(options?: ClientOptions) {\n return new Client({\n ...this.options,\n ...options,\n headers: {\n ...this.options.headers,\n ...options?.headers,\n },\n interceptors: [...Array.from(this.interceptors.values()).map((i) => i.interceptor)],\n });\n }\n\n protected async withConfig(config: RequestConfig = {}) {\n let token = config.token || this.token;\n\n if (config.token) {\n delete config.token;\n }\n\n if (this.options.headers) {\n if (!config.headers) {\n config.headers = {};\n }\n\n for (const key in this.options.headers) {\n config.headers[key] = this.options.headers[key];\n }\n }\n\n if (token) {\n if (!config.headers) {\n config.headers = {};\n }\n\n if (typeof token === 'function') {\n token = await token(config);\n }\n\n if (token && typeof token === 'object') {\n token = token.toString();\n }\n\n config.headers['Authorization'] = `Bearer ${token}`;\n }\n\n return config;\n }\n}\n"]}