kommo-aiatende-api 1.2.2 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/client.ts","../src/auth.ts","../src/resources/leads/index.ts","../src/base.ts","../src/resources/contacts/index.ts","../src/resources/tasks/index.ts","../src/resources/notes/index.ts","../src/resources/custom-fields/index.ts","../src/resources/unsorted/index.ts","../src/resources/pipelines/index.ts","../src/resources/companies/index.ts","../src/resources/catalogs/index.ts","../src/resources/users/index.ts","../src/resources/events/index.ts","../src/resources/tags/index.ts","../src/resources/links/index.ts","../src/resources/salesbots/index.ts","../src/resources/sources/index.ts","../src/resources/chat-templates/index.ts","../src/resources/webhooks/index.ts","../src/resources/files/index.ts","../src/resources/account/index.ts","../src/resources/talks/index.ts","../src/errors.ts","../src/resources/pipelines/types.ts","../src/resources/events/types.ts","../src/resources/tags/types.ts","../src/resources/webhooks/types.ts"],"sourcesContent":["export * from './client';\r\nexport * from './types';\r\nexport * from './auth';\r\nexport * from './errors';\r\nexport * from './resources/leads';\r\nexport * from './resources/leads/types';\r\nexport * from './resources/contacts';\r\nexport * from './resources/contacts/types';\r\nexport * from './resources/tasks';\r\nexport * from './resources/tasks/types';\r\nexport * from './resources/notes';\r\nexport * from './resources/notes/types';\r\nexport * from './resources/custom-fields';\r\nexport * from './resources/custom-fields/types';\r\nexport * from './resources/unsorted';\r\nexport * from './resources/unsorted/types';\r\nexport * from './resources/pipelines';\r\nexport * from './resources/pipelines/types';\r\nexport * from './resources/companies';\r\nexport * from './resources/companies/types';\r\nexport * from './resources/catalogs';\r\nexport * from './resources/catalogs/types';\r\nexport * from './resources/users';\r\nexport * from './resources/users/types';\r\nexport * from './resources/events';\r\nexport * from './resources/events/types';\r\nexport * from './resources/tags';\r\nexport * from './resources/tags/types';\r\nexport * from './resources/links';\r\nexport * from './resources/links/types';\r\nexport * from './resources/salesbots';\r\nexport * from './resources/salesbots/types';\r\nexport * from './resources/sources';\r\nexport * from './resources/sources/types';\r\nexport * from './resources/chat-templates';\r\nexport * from './resources/chat-templates/types';\r\nexport * from './resources/webhooks';\r\nexport * from './resources/webhooks/types';\r\nexport * from './resources/files';\r\nexport * from './resources/files/types';\r\nexport * from './resources/account';\r\nexport * from './resources/account/types';\r\nexport * from './resources/talks';\r\nexport * from './resources/talks/types';\r\n","import axios, { AxiosInstance } from 'axios';\r\nimport qs from 'qs';\r\nimport { KommoConfig } from './types';\r\nimport { AuthManager } from './auth';\r\nimport { LeadsResource } from './resources/leads';\r\nimport { ContactsResource } from './resources/contacts';\r\nimport { TasksResource } from './resources/tasks';\r\nimport { NotesResource } from './resources/notes';\r\nimport { CustomFieldsResource, CustomFieldGroupsResource } from './resources/custom-fields';\r\nimport { UnsortedResource } from './resources/unsorted';\r\nimport { PipelinesResource } from './resources/pipelines';\r\nimport { CompaniesResource } from './resources/companies';\r\nimport { CatalogsResource } from './resources/catalogs';\r\nimport { UsersResource, RolesResource } from './resources/users';\r\nimport { EventsResource } from './resources/events';\r\nimport { TagsResource } from './resources/tags';\r\nimport { LinksResource } from './resources/links';\r\nimport { SalesbotsResource } from './resources/salesbots';\r\nimport { SourcesResource, WebsiteButtonsResource } from './resources/sources';\r\nimport { ChatTemplatesResource } from './resources/chat-templates';\r\nimport { WebhooksResource } from './resources/webhooks';\r\nimport { FilesResource } from './resources/files';\r\nimport { AccountResource } from './resources/account';\r\nimport { TalksResource } from './resources/talks';\r\nimport { KommoApiError } from './errors';\r\n\r\nexport class KommoClient {\r\n public config: KommoConfig;\r\n public auth: AuthManager;\r\n public httpClient: AxiosInstance;\r\n\r\n public leads: LeadsResource;\r\n public contacts: ContactsResource;\r\n public tasks: TasksResource;\r\n public notes: NotesResource;\r\n public customFields: CustomFieldsResource;\r\n public customFieldGroups: CustomFieldGroupsResource;\r\n public unsorted: UnsortedResource;\r\n public pipelines: PipelinesResource;\r\n public companies: CompaniesResource;\r\n public catalogs: CatalogsResource;\r\n public users: UsersResource;\r\n public roles: RolesResource;\r\n public events: EventsResource;\r\n public tags: TagsResource;\r\n public links: LinksResource;\r\n public salesbots: SalesbotsResource;\r\n public sources: SourcesResource;\r\n public websiteButtons: WebsiteButtonsResource;\r\n public chatTemplates: ChatTemplatesResource;\r\n public webhooks: WebhooksResource;\r\n public files: FilesResource;\r\n public account: AccountResource;\r\n public talks: TalksResource;\r\n\r\n constructor(config: KommoConfig) {\r\n this.config = config;\r\n \r\n this.auth = new AuthManager(\r\n config.domain,\r\n config.clientId,\r\n config.clientSecret,\r\n config.redirectUri\r\n );\r\n\r\n const baseURL = `https://${config.domain}.kommo.com`;\r\n\r\n this.httpClient = axios.create({\r\n baseURL,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n paramsSerializer: (params) => {\r\n return qs.stringify(params, { arrayFormat: 'brackets' });\r\n }\r\n });\r\n\r\n this.httpClient.interceptors.response.use(\r\n (response) => response,\r\n (error) => {\r\n if (error.response) {\r\n const errData = error.response.data;\r\n throw new KommoApiError(errData?.title || 'Kommo API Error', {\r\n status: error.response.status,\r\n title: errData?.title,\r\n detail: errData?.detail,\r\n type: errData?.type,\r\n raw: errData\r\n });\r\n }\r\n throw error;\r\n }\r\n );\r\n\r\n if (config.accessToken) {\r\n this.httpClient.defaults.headers.common['Authorization'] = `Bearer ${config.accessToken}`;\r\n }\r\n\r\n // Inicializa Módulos\r\n this.leads = new LeadsResource(this.httpClient);\r\n this.contacts = new ContactsResource(this.httpClient);\r\n this.tasks = new TasksResource(this.httpClient);\r\n this.notes = new NotesResource(this.httpClient);\r\n this.customFields = new CustomFieldsResource(this.httpClient);\r\n this.customFieldGroups = new CustomFieldGroupsResource(this.httpClient);\r\n this.unsorted = new UnsortedResource(this.httpClient);\r\n this.pipelines = new PipelinesResource(this.httpClient);\r\n this.companies = new CompaniesResource(this.httpClient);\r\n this.catalogs = new CatalogsResource(this.httpClient);\r\n this.users = new UsersResource(this.httpClient);\r\n this.roles = new RolesResource(this.httpClient);\r\n this.events = new EventsResource(this.httpClient);\r\n this.tags = new TagsResource(this.httpClient);\r\n this.links = new LinksResource(this.httpClient);\r\n this.salesbots = new SalesbotsResource(this.httpClient);\r\n this.sources = new SourcesResource(this.httpClient);\r\n this.websiteButtons = new WebsiteButtonsResource(this.httpClient);\r\n this.chatTemplates = new ChatTemplatesResource(this.httpClient);\r\n this.webhooks = new WebhooksResource(this.httpClient);\r\n this.files = new FilesResource(this.httpClient);\r\n this.account = new AccountResource(this.httpClient);\r\n this.talks = new TalksResource(this.httpClient);\r\n }\r\n\r\n public setAccessToken(token: string) {\r\n this.config.accessToken = token;\r\n this.httpClient.defaults.headers.common['Authorization'] = `Bearer ${token}`;\r\n }\r\n}\r\n","import axios from 'axios';\r\nimport { AccessTokenResponse } from './types';\r\n\r\nexport class AuthManager {\r\n private domain: string;\r\n private clientId?: string;\r\n private clientSecret?: string;\r\n private redirectUri?: string;\r\n\r\n constructor(domain: string, clientId?: string, clientSecret?: string, redirectUri?: string) {\r\n this.domain = domain;\r\n this.clientId = clientId;\r\n this.clientSecret = clientSecret;\r\n this.redirectUri = redirectUri;\r\n }\r\n\r\n async exchangeCodeForToken(code: string): Promise<AccessTokenResponse> {\r\n const url = `https://${this.domain}.kommo.com/oauth2/access_token`;\r\n const response = await axios.post<AccessTokenResponse>(url, {\r\n client_id: this.clientId,\r\n client_secret: this.clientSecret,\r\n grant_type: 'authorization_code',\r\n code,\r\n redirect_uri: this.redirectUri,\r\n });\r\n return response.data;\r\n }\r\n\r\n async refreshToken(refreshToken: string): Promise<AccessTokenResponse> {\r\n const url = `https://${this.domain}.kommo.com/oauth2/access_token`;\r\n const response = await axios.post<AccessTokenResponse>(url, {\r\n client_id: this.clientId,\r\n client_secret: this.clientSecret,\r\n grant_type: 'refresh_token',\r\n refresh_token: refreshToken,\r\n });\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListLeadsParams,\r\n ListLeadsResponse,\r\n Lead,\r\n LeadWithParam,\r\n CreateLeadInput,\r\n CreateLeadsResponse,\r\n UpdateLeadInput,\r\n UpdateLeadsResponse,\r\n UpdateSingleLeadInput,\r\n CreateComplexLeadInput,\r\n CreateComplexLeadsResponse,\r\n LossReason,\r\n ListLossReasonsResponse,\r\n} from './types';\r\n\r\nexport class LeadsResource extends BaseResource {\r\n \r\n async list(params?: ListLeadsParams): Promise<ListLeadsResponse> {\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n if (params.query) queryParams.query = params.query;\r\n\r\n // Filtros\r\n const filter: any = {};\r\n \r\n const arrayFilters = ['id', 'name', 'created_by', 'updated_by', 'responsible_user_id', 'pipeline_id'] as const;\r\n arrayFilters.forEach(k => {\r\n const key = `filter_${k}` as keyof ListLeadsParams;\r\n if (params[key] !== undefined) filter[k] = params[key];\r\n });\r\n\r\n if (params.filter_price !== undefined) filter.price = params.filter_price;\r\n\r\n // Range Filters (from/to)\r\n const rangeFilters = ['created_at', 'updated_at', 'closed_at', 'closest_task_at'];\r\n rangeFilters.forEach(k => {\r\n const fromKey = `filter_${k}_from` as keyof ListLeadsParams;\r\n const toKey = `filter_${k}_to` as keyof ListLeadsParams;\r\n \r\n if (params[fromKey] !== undefined || params[toKey] !== undefined) {\r\n filter[k] = {};\r\n if (params[fromKey] !== undefined) filter[k].from = params[fromKey];\r\n if (params[toKey] !== undefined) filter[k].to = params[toKey];\r\n }\r\n });\r\n\r\n if (params.filter_statuses && params.filter_statuses.length > 0) {\r\n filter.statuses = params.filter_statuses;\r\n }\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n\r\n // Ordenação\r\n const order: any = {};\r\n if (params.order_created_at) order.created_at = params.order_created_at;\r\n if (params.order_updated_at) order.updated_at = params.order_updated_at;\r\n if (params.order_id) order.id = params.order_id;\r\n \r\n if (Object.keys(order).length > 0) {\r\n queryParams.order = order;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n\r\n const response = await this.client.get<ListLeadsResponse>(`/api/v4/leads${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(id: number, params?: { with?: LeadWithParam[] | string }): Promise<Lead | null> {\r\n try {\r\n const queryParams: any = {};\r\n if (params?.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n \r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n\r\n const response = await this.client.get<Lead>(`/api/v4/leads/${id}${qsStr}`);\r\n if (response.status === 204 || !response.data || (response.data as unknown) === '') {\r\n return null; // AAPI resolve como NO CONTENT corretamente via interceptador caso seja vazio\r\n }\r\n return response.data;\r\n } catch (error: any) {\r\n if (error.response && error.response.status === 204) {\r\n return null;\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n async create(items: CreateLeadInput | CreateLeadInput[]): Promise<CreateLeadsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateLeadsResponse>('/api/v4/leads', payload);\r\n return response.data;\r\n }\r\n\r\n async update(items: UpdateLeadInput | UpdateLeadInput[]): Promise<UpdateLeadsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateLeadsResponse>('/api/v4/leads', payload);\r\n return response.data;\r\n }\r\n\r\n async updateOne(id: number, payload: UpdateSingleLeadInput): Promise<UpdateLeadsResponse | Lead> {\r\n const response = await this.client.patch<UpdateLeadsResponse | Lead>(`/api/v4/leads/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n async createComplex(items: CreateComplexLeadInput | CreateComplexLeadInput[]): Promise<CreateComplexLeadsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateComplexLeadsResponse>('/api/v4/leads/complex', payload);\r\n return response.data;\r\n }\r\n\r\n async listLossReasons(): Promise<ListLossReasonsResponse> {\r\n const response = await this.client.get<ListLossReasonsResponse>('/api/v4/leads/loss_reasons');\r\n return response.data;\r\n }\r\n\r\n async getLossReasonById(id: number): Promise<LossReason> {\r\n const response = await this.client.get<LossReason>(`/api/v4/leads/loss_reasons/${id}`);\r\n return response.data;\r\n }\r\n}\r\n","import { AxiosInstance } from 'axios';\r\n\r\nexport abstract class BaseResource {\r\n protected client: AxiosInstance;\r\n\r\n constructor(client: AxiosInstance) {\r\n this.client = client;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListContactsParams,\r\n ListContactsResponse,\r\n Contact,\r\n ContactWithParam,\r\n CreateContactInput,\r\n CreateContactsResponse,\r\n UpdateContactInput,\r\n UpdateContactsResponse,\r\n UpdateSingleContactInput,\r\n} from './types';\r\n\r\nexport class ContactsResource extends BaseResource {\r\n \r\n async list(params?: ListContactsParams): Promise<ListContactsResponse> {\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n if (params.query) queryParams.query = params.query;\r\n\r\n // Filtros\r\n const filter: any = {};\r\n \r\n const arrayFilters = ['id', 'name', 'created_by', 'updated_by', 'responsible_user_id'] as const;\r\n arrayFilters.forEach(k => {\r\n const key = `filter_${k}` as keyof ListContactsParams;\r\n if (params[key] !== undefined) filter[k] = params[key];\r\n });\r\n\r\n // Range Filters (from/to)\r\n const rangeFilters = ['created_at', 'updated_at', 'closest_task_at'];\r\n rangeFilters.forEach(k => {\r\n const fromKey = `filter_${k}_from` as keyof ListContactsParams;\r\n const toKey = `filter_${k}_to` as keyof ListContactsParams;\r\n \r\n if (params[fromKey] !== undefined || params[toKey] !== undefined) {\r\n filter[k] = {};\r\n if (params[fromKey] !== undefined) filter[k].from = params[fromKey];\r\n if (params[toKey] !== undefined) filter[k].to = params[toKey];\r\n }\r\n });\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n\r\n // Ordenação\r\n const order: any = {};\r\n if (params.order_updated_at) order.updated_at = params.order_updated_at;\r\n if (params.order_id) order.id = params.order_id;\r\n \r\n if (Object.keys(order).length > 0) {\r\n queryParams.order = order;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n\r\n const response = await this.client.get<ListContactsResponse>(`/api/v4/contacts${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(\r\n id: number,\r\n params?: { with?: ContactWithParam[] | string }\r\n ): Promise<Contact | null> {\r\n try {\r\n const queryParams: any = {};\r\n if (params?.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n \r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n\r\n const response = await this.client.get<Contact>(`/api/v4/contacts/${id}${qsStr}`);\r\n if (response.status === 204 || !response.data || (response.data as unknown) === '') {\r\n return null;\r\n }\r\n return response.data;\r\n } catch (error: any) {\r\n if (error.response && error.response.status === 204) {\r\n return null;\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n async create(items: CreateContactInput | CreateContactInput[]): Promise<CreateContactsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateContactsResponse>('/api/v4/contacts', payload);\r\n return response.data;\r\n }\r\n\r\n async update(items: UpdateContactInput | UpdateContactInput[]): Promise<UpdateContactsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateContactsResponse>('/api/v4/contacts', payload);\r\n return response.data;\r\n }\r\n\r\n async updateOne(id: number, payload: UpdateSingleContactInput): Promise<UpdateContactsResponse> {\r\n const response = await this.client.patch<UpdateContactsResponse>(`/api/v4/contacts/${id}`, payload);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListTasksParams,\r\n ListTasksResponse,\r\n Task,\r\n CreateTaskInput,\r\n CreateTasksResponse,\r\n UpdateTaskInput,\r\n UpdateTasksResponse,\r\n UpdateSingleTaskInput\r\n} from './types';\r\n\r\nexport class TasksResource extends BaseResource {\r\n \r\n async list(params?: ListTasksParams): Promise<ListTasksResponse> {\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n\r\n const filter: any = {};\r\n if (params.filter_responsible_user_id !== undefined) filter.responsible_user_id = params.filter_responsible_user_id;\r\n if (params.filter_is_completed !== undefined) filter.is_completed = params.filter_is_completed;\r\n if (params.filter_task_type !== undefined) filter.task_type = params.filter_task_type;\r\n if (params.filter_entity_type !== undefined) filter.entity_type = params.filter_entity_type;\r\n if (params.filter_entity_id !== undefined) filter.entity_id = params.filter_entity_id;\r\n if (params.filter_id !== undefined) filter.id = params.filter_id;\r\n if (params.filter_updated_at_from !== undefined || params.filter_updated_at_to !== undefined) {\r\n filter.updated_at = {};\r\n if (params.filter_updated_at_from !== undefined) filter.updated_at.from = params.filter_updated_at_from;\r\n if (params.filter_updated_at_to !== undefined) filter.updated_at.to = params.filter_updated_at_to;\r\n }\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n\r\n const order: any = {};\r\n if (params.order_complete_till !== undefined) order.complete_till = params.order_complete_till;\r\n if (params.order_created_at !== undefined) order.created_at = params.order_created_at;\r\n if (params.order_id !== undefined) order.id = params.order_id;\r\n if (Object.keys(order).length > 0) {\r\n queryParams.order = order;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListTasksResponse>(`/api/v4/tasks${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(id: number): Promise<Task> {\r\n const response = await this.client.get<Task>(`/api/v4/tasks/${id}`);\r\n return response.data;\r\n }\r\n\r\n async create(items: CreateTaskInput | CreateTaskInput[]): Promise<CreateTasksResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateTasksResponse>('/api/v4/tasks', payload);\r\n return response.data;\r\n }\r\n\r\n async update(items: UpdateTaskInput | UpdateTaskInput[]): Promise<UpdateTasksResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateTasksResponse>('/api/v4/tasks', payload);\r\n return response.data;\r\n }\r\n\r\n async updateOne(id: number, payload: UpdateSingleTaskInput): Promise<UpdateTasksResponse> {\r\n const response = await this.client.patch<UpdateTasksResponse>(`/api/v4/tasks/${id}`, payload);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n NoteEntityType,\r\n ListEntityNotesParams,\r\n ListNotesResponse,\r\n Note,\r\n CreateNoteInput,\r\n CreateNotesResponse,\r\n UpdateNoteInput,\r\n UpdateSingleNoteInput,\r\n UpdateNotesResponse,\r\n} from './types';\r\n\r\nexport class NotesResource extends BaseResource {\r\n \r\n private normalizeEntityType(type: NoteEntityType): string {\r\n if (type === 'contatos') return 'contacts';\r\n if (type === 'empresas') return 'companies';\r\n return type;\r\n }\r\n\r\n async listByEntity(entityType: NoteEntityType, entityId: number, params?: ListEntityNotesParams): Promise<ListNotesResponse> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n\r\n const filter: any = {};\r\n if (params.filter_id !== undefined) filter.id = params.filter_id;\r\n if (params.filter_note_type !== undefined) filter.note_type = params.filter_note_type;\r\n \r\n if (params.filter_updated_at_from !== undefined || params.filter_updated_at_to !== undefined) {\r\n filter.updated_at = {};\r\n if (params.filter_updated_at_from !== undefined) filter.updated_at.from = params.filter_updated_at_from;\r\n if (params.filter_updated_at_to !== undefined) filter.updated_at.to = params.filter_updated_at_to;\r\n }\r\n \r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n\r\n const order: any = {};\r\n if (params.order_updated_at !== undefined) order.updated_at = params.order_updated_at;\r\n if (params.order_id !== undefined) order.id = params.order_id;\r\n \r\n if (Object.keys(order).length > 0) {\r\n queryParams.order = order;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListNotesResponse>(`/api/v4/${normalType}/${entityId}/notes${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async listByEntityType(entityType: NoteEntityType, params?: ListEntityNotesParams): Promise<ListNotesResponse> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n\r\n const filter: any = {};\r\n if (params.filter_id !== undefined) filter.id = params.filter_id;\r\n if (params.filter_note_type !== undefined) filter.note_type = params.filter_note_type;\r\n \r\n if (params.filter_updated_at_from !== undefined || params.filter_updated_at_to !== undefined) {\r\n filter.updated_at = {};\r\n if (params.filter_updated_at_from !== undefined) filter.updated_at.from = params.filter_updated_at_from;\r\n if (params.filter_updated_at_to !== undefined) filter.updated_at.to = params.filter_updated_at_to;\r\n }\r\n \r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n\r\n const order: any = {};\r\n if (params.order_updated_at !== undefined) order.updated_at = params.order_updated_at;\r\n if (params.order_id !== undefined) order.id = params.order_id;\r\n \r\n if (Object.keys(order).length > 0) {\r\n queryParams.order = order;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListNotesResponse>(`/api/v4/${normalType}/notes${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(entityType: NoteEntityType, id: number): Promise<Note> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n const response = await this.client.get<Note>(`/api/v4/${normalType}/notes/${id}`);\r\n return response.data;\r\n }\r\n\r\n async create(entityType: NoteEntityType, items: CreateNoteInput | CreateNoteInput[]): Promise<CreateNotesResponse> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateNotesResponse>(`/api/v4/${normalType}/notes`, payload);\r\n return response.data;\r\n }\r\n\r\n async update(entityType: NoteEntityType, items: UpdateNoteInput | UpdateNoteInput[]): Promise<UpdateNotesResponse> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateNotesResponse>(`/api/v4/${normalType}/notes`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateOne(entityType: NoteEntityType, id: number | string, payload: UpdateSingleNoteInput): Promise<UpdateNotesResponse> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n const response = await this.client.patch<UpdateNotesResponse>(`/api/v4/${normalType}/notes/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n async pin(entityType: NoteEntityType, id: number): Promise<void> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n await this.client.post(`/api/v4/${normalType}/notes/${id}/pin`);\r\n }\r\n\r\n async unpin(entityType: NoteEntityType, id: number): Promise<void> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n await this.client.post(`/api/v4/${normalType}/notes/${id}/unpin`);\r\n }\r\n}\r\n","import { BaseResource } from '../../base';\r\nimport {\r\n EntityType,\r\n ListEntityCustomFieldsResponse,\r\n EntityCustomField,\r\n CreateEntityCustomFieldInput,\r\n UpdateEntityCustomFieldInput,\r\n UpdateSingleEntityCustomFieldInput,\r\n ListListCustomFieldsResponse,\r\n ListCustomField,\r\n CreateListCustomFieldInput,\r\n UpdateListCustomFieldInput,\r\n UpdateSingleListCustomFieldInput,\r\n ListCustomFieldGroupsResponse,\r\n CustomFieldGroup,\r\n CreateCustomFieldGroupInput,\r\n UpdateCustomFieldGroupInput\r\n} from './types';\r\n\r\nexport class CustomFieldsResource extends BaseResource {\r\n\r\n // ==== CAMPOS DE ENTIDADES ====\r\n\r\n async listEntity(entityType: EntityType): Promise<ListEntityCustomFieldsResponse> {\r\n const response = await this.client.get<ListEntityCustomFieldsResponse>(`/api/v4/${entityType}/custom_fields`);\r\n return response.data;\r\n }\r\n\r\n async getEntityById(entityType: EntityType, id: number): Promise<EntityCustomField> {\r\n const response = await this.client.get<EntityCustomField>(`/api/v4/${entityType}/custom_fields/${id}`);\r\n return response.data;\r\n }\r\n\r\n async createEntity(entityType: EntityType, items: CreateEntityCustomFieldInput | CreateEntityCustomFieldInput[]): Promise<ListEntityCustomFieldsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<ListEntityCustomFieldsResponse>(`/api/v4/${entityType}/custom_fields`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateEntity(entityType: EntityType, items: UpdateEntityCustomFieldInput | UpdateEntityCustomFieldInput[]): Promise<ListEntityCustomFieldsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<ListEntityCustomFieldsResponse>(`/api/v4/${entityType}/custom_fields`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateEntityById(entityType: EntityType, id: number, payload: UpdateSingleEntityCustomFieldInput): Promise<EntityCustomField> {\r\n const response = await this.client.patch<EntityCustomField>(`/api/v4/${entityType}/custom_fields/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n async deleteEntity(entityType: EntityType, id: number): Promise<void> {\r\n await this.client.delete(`/api/v4/${entityType}/custom_fields/${id}`);\r\n }\r\n\r\n // ==== CAMPOS DE LISTAS ====\r\n\r\n async listList(listId: number): Promise<ListListCustomFieldsResponse> {\r\n const response = await this.client.get<ListListCustomFieldsResponse>(`/api/v4/catalogs/${listId}/custom_fields`);\r\n return response.data;\r\n }\r\n\r\n async getListById(listId: number, customFieldId: number): Promise<ListCustomField | EntityCustomField> {\r\n const response = await this.client.get<ListCustomField | EntityCustomField>(`/api/v4/catalogs/${listId}/custom_fields/${customFieldId}`);\r\n return response.data;\r\n }\r\n\r\n async createList(listId: number, items: CreateListCustomFieldInput | CreateListCustomFieldInput[]): Promise<ListListCustomFieldsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<ListListCustomFieldsResponse>(`/api/v4/catalogs/${listId}/custom_fields`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateList(listId: number, items: UpdateListCustomFieldInput | UpdateListCustomFieldInput[]): Promise<ListListCustomFieldsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<ListListCustomFieldsResponse>(`/api/v4/catalogs/${listId}/custom_fields`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateListById(listId: number, customFieldId: number, payload: UpdateSingleListCustomFieldInput): Promise<ListCustomField> {\r\n const response = await this.client.patch<ListCustomField>(`/api/v4/catalogs/${listId}/custom_fields/${customFieldId}`, payload);\r\n return response.data;\r\n }\r\n\r\n async deleteList(listId: number, id: number): Promise<void> {\r\n await this.client.delete(`/api/v4/catalogs/${listId}/custom_fields/${id}`);\r\n }\r\n}\r\n\r\nexport class CustomFieldGroupsResource extends BaseResource {\r\n\r\n async list(entityType: EntityType): Promise<ListCustomFieldGroupsResponse> {\r\n const response = await this.client.get<ListCustomFieldGroupsResponse>(`/api/v4/${entityType}/custom_fields/groups`);\r\n return response.data;\r\n }\r\n\r\n async getById(entityType: EntityType, id: number): Promise<CustomFieldGroup> {\r\n const response = await this.client.get<CustomFieldGroup>(`/api/v4/${entityType}/custom_fields/groups/${id}`);\r\n return response.data;\r\n }\r\n\r\n async create(entityType: EntityType, items: CreateCustomFieldGroupInput | CreateCustomFieldGroupInput[]): Promise<ListCustomFieldGroupsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<ListCustomFieldGroupsResponse>(`/api/v4/${entityType}/custom_fields/groups`, payload);\r\n return response.data;\r\n }\r\n\r\n async update(entityType: EntityType, id: number, payload: UpdateCustomFieldGroupInput): Promise<CustomFieldGroup> {\r\n const response = await this.client.patch<CustomFieldGroup>(`/api/v4/${entityType}/custom_fields/groups/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n async delete(entityType: EntityType, id: number): Promise<void> {\r\n await this.client.delete(`/api/v4/${entityType}/custom_fields/groups/${id}`);\r\n }\r\n\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListUnsortedLeadsParams,\r\n ListUnsortedLeadsResponse,\r\n UnsortedLead,\r\n CreateSipUnsortedLeadInput,\r\n CreateFormUnsortedLeadInput,\r\n CreateUnsortedLeadsResponse,\r\n UnsortedDecisionResponse,\r\n LinkUnsortedLeadResponse,\r\n UnsortedSummaryParams,\r\n UnsortedSummaryResponse,\r\n} from './types';\r\n\r\nexport class UnsortedResource extends BaseResource {\r\n \r\n async list(params?: ListUnsortedLeadsParams): Promise<ListUnsortedLeadsResponse> {\r\n const query = qs.stringify(\r\n {\r\n page: params?.page,\r\n limit: params?.limit,\r\n filter: {\r\n uid: params?.uid,\r\n category: params?.category,\r\n pipeline_id: params?.pipeline_id,\r\n },\r\n order: {\r\n created_at: params?.order_created_at,\r\n },\r\n },\r\n { skipNulls: true, arrayFormat: 'brackets' }\r\n );\r\n\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListUnsortedLeadsResponse>(`/api/v4/leads/unsorted${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getByUid(uid: string): Promise<UnsortedLead> {\r\n const response = await this.client.get<UnsortedLead>(`/api/v4/leads/unsorted/${uid}`);\r\n return response.data;\r\n }\r\n\r\n async createSip(\r\n items: CreateSipUnsortedLeadInput | CreateSipUnsortedLeadInput[]\r\n ): Promise<CreateUnsortedLeadsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateUnsortedLeadsResponse>(\r\n '/api/v4/leads/unsorted/sip',\r\n payload\r\n );\r\n return response.data;\r\n }\r\n\r\n async createForms(\r\n items: CreateFormUnsortedLeadInput | CreateFormUnsortedLeadInput[]\r\n ): Promise<CreateUnsortedLeadsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateUnsortedLeadsResponse>(\r\n '/api/v4/leads/unsorted/forms',\r\n payload\r\n );\r\n return response.data;\r\n }\r\n\r\n async accept(\r\n uid: string,\r\n payload?: { user_id?: number; status_id?: number }\r\n ): Promise<UnsortedDecisionResponse> {\r\n const response = await this.client.post<UnsortedDecisionResponse>(\r\n `/api/v4/leads/unsorted/${uid}/accept`,\r\n payload || {}\r\n );\r\n return response.data;\r\n }\r\n\r\n async decline(\r\n uid: string,\r\n payload?: { user_id?: number }\r\n ): Promise<UnsortedDecisionResponse> {\r\n const config = payload ? { data: payload } : {};\r\n const response = await this.client.delete<UnsortedDecisionResponse>(\r\n `/api/v4/leads/unsorted/${uid}/decline`,\r\n config\r\n );\r\n return response.data;\r\n }\r\n\r\n async link(\r\n uid: string,\r\n payload: {\r\n link: {\r\n user_id?: string | number;\r\n entity_id: string | number;\r\n entity_type: 'leads' | string;\r\n metadata?: { contact_id?: number };\r\n };\r\n }\r\n ): Promise<LinkUnsortedLeadResponse> {\r\n const response = await this.client.post<LinkUnsortedLeadResponse>(\r\n `/api/v4/leads/unsorted/${uid}/link`,\r\n payload\r\n );\r\n return response.data;\r\n }\r\n\r\n async summary(params?: UnsortedSummaryParams): Promise<UnsortedSummaryResponse> {\r\n const queryParams: any = {};\r\n if (params?.uid) queryParams.uid = params.uid;\r\n if (params?.pipeline_id) queryParams.pipeline_id = params.pipeline_id;\r\n\r\n if (params?.created_at) {\r\n queryParams.created_at = params.created_at;\r\n } else if (params?.created_at_from || params?.created_at_to) {\r\n queryParams.created_at = {};\r\n if (params.created_at_from) queryParams.created_at.from = params.created_at_from;\r\n if (params.created_at_to) queryParams.created_at.to = params.created_at_to;\r\n }\r\n\r\n const query = qs.stringify(\r\n { filter: queryParams },\r\n { skipNulls: true, arrayFormat: 'brackets' }\r\n );\r\n\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<UnsortedSummaryResponse>(\r\n `/api/v4/leads/unsorted/summary${qsStr}`\r\n );\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n Pipeline,\r\n PipelineStatus,\r\n ListPipelinesResponse,\r\n CreatePipelineInput,\r\n CreatePipelinesResponse,\r\n UpdatePipelineInput,\r\n ListPipelineStatusesResponse,\r\n CreateStatusInput,\r\n CreateStatusesResponse,\r\n UpdateStatusInput,\r\n StatusDescription,\r\n} from './types';\r\n\r\nexport class PipelinesResource extends BaseResource {\r\n \r\n // PIPELINES\r\n\r\n async list(): Promise<ListPipelinesResponse> {\r\n const response = await this.client.get<ListPipelinesResponse>('/api/v4/leads/pipelines');\r\n return response.data;\r\n }\r\n\r\n async getById(id: number): Promise<Pipeline> {\r\n const response = await this.client.get<Pipeline>(`/api/v4/leads/pipelines/${id}`);\r\n return response.data;\r\n }\r\n\r\n async create(items: CreatePipelineInput | CreatePipelineInput[]): Promise<CreatePipelinesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreatePipelinesResponse>('/api/v4/leads/pipelines', payload);\r\n return response.data;\r\n }\r\n\r\n async update(id: number, payload: UpdatePipelineInput): Promise<Pipeline> {\r\n const response = await this.client.patch<Pipeline>(`/api/v4/leads/pipelines/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n async delete(id: number): Promise<void> {\r\n await this.client.delete(`/api/v4/leads/pipelines/${id}`);\r\n }\r\n\r\n // STATUSES (ETAPAS)\r\n\r\n async listStatuses(pipelineId: number, params?: { with?: 'descriptions' }): Promise<ListPipelineStatusesResponse> {\r\n const query = qs.stringify({ with: params?.with }, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListPipelineStatusesResponse>(`/api/v4/leads/pipelines/${pipelineId}/statuses${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getStatusById(pipelineId: number, id: number | string, params?: { with?: 'descriptions' }): Promise<PipelineStatus> {\r\n const query = qs.stringify({ with: params?.with }, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<PipelineStatus>(`/api/v4/leads/pipelines/${pipelineId}/statuses/${id}${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async createStatuses(pipelineId: number, items: CreateStatusInput | CreateStatusInput[]): Promise<CreateStatusesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n \r\n // Validate descriptions locally before sending payload\r\n payload.forEach(item => this.validateStatusDescriptions(item.descriptions));\r\n\r\n const response = await this.client.post<CreateStatusesResponse>(`/api/v4/leads/pipelines/${pipelineId}/statuses`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateStatus(pipelineId: number, id: number | string, payload: UpdateStatusInput): Promise<PipelineStatus> {\r\n this.validateStatusDescriptions(payload.descriptions);\r\n\r\n const response = await this.client.patch<PipelineStatus>(`/api/v4/leads/pipelines/${pipelineId}/statuses/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n async deleteStatus(pipelineId: number, id: number | string): Promise<void> {\r\n await this.client.delete(`/api/v4/leads/pipelines/${pipelineId}/statuses/${id}`);\r\n }\r\n\r\n private validateStatusDescriptions(descriptions?: StatusDescription[]) {\r\n if (!descriptions) return;\r\n\r\n if (descriptions.length > 3) {\r\n throw new Error('A etapa aceita no máximo 3 descrições.');\r\n }\r\n\r\n const levels = descriptions.map((d) => d.level);\r\n const uniqueLevels = new Set(levels);\r\n\r\n if (levels.length !== uniqueLevels.size) {\r\n throw new Error('Não é permitido repetir level em descriptions.');\r\n }\r\n\r\n for (const item of descriptions) {\r\n if (item.description.length > 1000) {\r\n throw new Error('A descrição da etapa pode ter no máximo 1000 caracteres.');\r\n }\r\n }\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListCompaniesParams,\r\n ListCompaniesResponse,\r\n Company,\r\n CompanyWithParam,\r\n CreateCompanyInput,\r\n CreateCompaniesResponse,\r\n UpdateCompanyInput,\r\n UpdateCompaniesResponse,\r\n UpdateSingleCompanyInput,\r\n} from './types';\r\n\r\nexport class CompaniesResource extends BaseResource {\r\n \r\n async list(params?: ListCompaniesParams): Promise<ListCompaniesResponse> {\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n if (params.query) queryParams.query = params.query;\r\n\r\n // Filtros\r\n const filter: any = {};\r\n \r\n const arrayFilters = ['id', 'name', 'created_by', 'updated_by', 'responsible_user_id'] as const;\r\n arrayFilters.forEach(k => {\r\n const key = `filter_${k}` as keyof ListCompaniesParams;\r\n if (params[key] !== undefined) filter[k] = params[key];\r\n });\r\n\r\n // Range Filters (from/to)\r\n const rangeFilters = ['created_at', 'updated_at', 'closest_task_at'];\r\n rangeFilters.forEach(k => {\r\n const fromKey = `filter_${k}_from` as keyof ListCompaniesParams;\r\n const toKey = `filter_${k}_to` as keyof ListCompaniesParams;\r\n \r\n if (params[fromKey] !== undefined || params[toKey] !== undefined) {\r\n filter[k] = {};\r\n if (params[fromKey] !== undefined) filter[k].from = params[fromKey];\r\n if (params[toKey] !== undefined) filter[k].to = params[toKey];\r\n }\r\n });\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n\r\n // Ordenação\r\n const order: any = {};\r\n if (params.order_updated_at) order.updated_at = params.order_updated_at;\r\n if (params.order_id) order.id = params.order_id;\r\n \r\n if (Object.keys(order).length > 0) {\r\n queryParams.order = order;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n\r\n const response = await this.client.get<ListCompaniesResponse>(`/api/v4/companies${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(\r\n id: number,\r\n params?: { with?: CompanyWithParam[] | string }\r\n ): Promise<Company | null> {\r\n try {\r\n const queryParams: any = {};\r\n if (params?.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n \r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n\r\n const response = await this.client.get<Company>(`/api/v4/companies/${id}${qsStr}`);\r\n if (response.status === 204 || !response.data || (response.data as unknown) === '') {\r\n return null;\r\n }\r\n return response.data;\r\n } catch (error: any) {\r\n if (error.response && error.response.status === 204) {\r\n return null;\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n async create(items: CreateCompanyInput | CreateCompanyInput[]): Promise<CreateCompaniesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateCompaniesResponse>('/api/v4/companies', payload);\r\n return response.data;\r\n }\r\n\r\n async update(items: UpdateCompanyInput | UpdateCompanyInput[]): Promise<UpdateCompaniesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateCompaniesResponse>('/api/v4/companies', payload);\r\n return response.data;\r\n }\r\n\r\n async updateOne(id: number, payload: UpdateSingleCompanyInput): Promise<UpdateCompaniesResponse> {\r\n const response = await this.client.patch<UpdateCompaniesResponse>(`/api/v4/companies/${id}`, payload);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListCatalogsParams,\r\n ListCatalogsResponse,\r\n Catalog,\r\n CreateCatalogInput,\r\n CreateCatalogsResponse,\r\n UpdateCatalogInput,\r\n UpdateCatalogsResponse,\r\n UpdateSingleCatalogInput,\r\n ListCatalogElementsParams,\r\n ListCatalogElementsResponse,\r\n CatalogElement,\r\n CreateCatalogElementInput,\r\n CreateCatalogElementsResponse,\r\n UpdateCatalogElementInput,\r\n UpdateCatalogElementsResponse,\r\n UpdateSingleCatalogElementInput,\r\n} from './types';\r\n\r\nexport class CatalogsResource extends BaseResource {\r\n \r\n // ================= CATÁLOGOS (LISTAS) =================\r\n \r\n async list(params?: ListCatalogsParams): Promise<ListCatalogsResponse> {\r\n const query = qs.stringify({ page: params?.page, limit: params?.limit }, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListCatalogsResponse>(`/api/v4/catalogs${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(id: number): Promise<Catalog> {\r\n const response = await this.client.get<Catalog>(`/api/v4/catalogs/${id}`);\r\n return response.data;\r\n }\r\n\r\n async create(items: CreateCatalogInput | CreateCatalogInput[]): Promise<CreateCatalogsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateCatalogsResponse>('/api/v4/catalogs', payload);\r\n return response.data;\r\n }\r\n\r\n async update(items: UpdateCatalogInput | UpdateCatalogInput[]): Promise<UpdateCatalogsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateCatalogsResponse>('/api/v4/catalogs', payload);\r\n return response.data;\r\n }\r\n\r\n async updateOne(id: number, payload: UpdateSingleCatalogInput): Promise<Catalog> {\r\n const response = await this.client.patch<Catalog>(`/api/v4/catalogs/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n // ================= ELEMENTOS DO CATÁLOGO =================\r\n\r\n async listElements(listId: number, params?: ListCatalogElementsParams): Promise<ListCatalogElementsResponse> {\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n if (params.query) queryParams.query = params.query;\r\n \r\n const filter: any = {};\r\n if (params.filter_id !== undefined) filter.id = params.filter_id;\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListCatalogElementsResponse>(`/api/v4/catalogs/${listId}/elements${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getElementById(listId: number, elementId: number): Promise<CatalogElement> {\r\n const response = await this.client.get<CatalogElement>(`/api/v4/catalogs/${listId}/elements/${elementId}`);\r\n return response.data;\r\n }\r\n\r\n async createElements(listId: number, items: CreateCatalogElementInput | CreateCatalogElementInput[]): Promise<CreateCatalogElementsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateCatalogElementsResponse>(`/api/v4/catalogs/${listId}/elements`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateElements(listId: number, items: UpdateCatalogElementInput | UpdateCatalogElementInput[]): Promise<UpdateCatalogElementsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateCatalogElementsResponse>(`/api/v4/catalogs/${listId}/elements`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateElementById(listId: number, elementId: number, payload: UpdateSingleCatalogElementInput): Promise<CatalogElement> {\r\n const response = await this.client.patch<CatalogElement>(`/api/v4/catalogs/${listId}/elements/${elementId}`, payload);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListUsersParams,\r\n ListUsersResponse,\r\n User,\r\n CreateUserInput,\r\n ListRolesParams,\r\n ListRolesResponse,\r\n Role,\r\n CreateRoleInput,\r\n UpdateRoleInput,\r\n} from './types';\r\n\r\nexport class UsersResource extends BaseResource {\r\n \r\n async list(params?: ListUsersParams): Promise<ListUsersResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n if (params.with) queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListUsersResponse>(`/api/v4/users${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(id: number, params?: { with?: import('./types').UserWithParam[] | string }): Promise<User> {\r\n const queryParams: any = {};\r\n if (params?.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<User>(`/api/v4/users/${id}${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async create(items: CreateUserInput | CreateUserInput[]): Promise<ListUsersResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n if (payload.length > 10) {\r\n throw new Error('A API da Kommo permite criar no máximo 10 usuários por requisição.');\r\n }\r\n const response = await this.client.post<ListUsersResponse>('/api/v4/users', payload);\r\n return response.data;\r\n }\r\n}\r\n\r\nexport class RolesResource extends BaseResource {\r\n \r\n async list(params?: ListRolesParams): Promise<ListRolesResponse> {\r\n const queryParams: any = {};\r\n if (params?.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListRolesResponse>(`/api/v4/roles${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(id: number, params?: { with?: import('./types').RoleWithParam[] | string }): Promise<Role> {\r\n const queryParams: any = {};\r\n if (params?.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<Role>(`/api/v4/roles/${id}${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async create(items: CreateRoleInput | CreateRoleInput[]): Promise<ListRolesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<ListRolesResponse>('/api/v4/roles', payload);\r\n return response.data;\r\n }\r\n\r\n async update(items: UpdateRoleInput | UpdateRoleInput[]): Promise<ListRolesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<ListRolesResponse>('/api/v4/roles', payload);\r\n return response.data;\r\n }\r\n\r\n async delete(id: number): Promise<void> {\r\n await this.client.delete(`/api/v4/roles/${id}`);\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListEventsParams,\r\n ListEventsResponse,\r\n Event,\r\n ListEventTypesParams,\r\n ListEventTypesResponse,\r\n} from './types';\r\n\r\nexport class EventsResource extends BaseResource {\r\n \r\n async list(params?: ListEventsParams): Promise<ListEventsResponse> {\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n if (params.with) queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n\r\n const filter: any = {};\r\n if (params.filter_id !== undefined) filter.id = params.filter_id;\r\n if (params.filter_created_by !== undefined) filter.created_by = params.filter_created_by;\r\n if (params.filter_entity !== undefined) filter.entity = params.filter_entity;\r\n \r\n // Validação local: entity_id só pode ser usado se entity for único\r\n if (params.filter_entity_id !== undefined) {\r\n if (!params.filter_entity || (Array.isArray(params.filter_entity) && params.filter_entity.length !== 1)) {\r\n throw new Error(\"O filtro de 'entity_id' só pode ser passado quando houver uma única 'entity' informada.\");\r\n }\r\n filter.entity_id = params.filter_entity_id;\r\n }\r\n \r\n if (params.filter_type !== undefined) filter.type = params.filter_type;\r\n\r\n if (params.filter_created_at_from !== undefined || params.filter_created_at_to !== undefined) {\r\n filter.created_at = {};\r\n if (params.filter_created_at_from !== undefined) filter.created_at.from = params.filter_created_at_from;\r\n if (params.filter_created_at_to !== undefined) filter.created_at.to = params.filter_created_at_to;\r\n }\r\n\r\n if (params.filter_value_before !== undefined) filter.value_before = params.filter_value_before;\r\n if (params.filter_value_after !== undefined) filter.value_after = params.filter_value_after;\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListEventsResponse>(`/api/v4/events${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(id: string, params?: { with?: import('./types').EventWithParam[] | string }): Promise<Event> {\r\n const queryParams: any = {};\r\n if (params?.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<Event>(`/api/v4/events/${id}${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async listTypes(params?: ListEventTypesParams): Promise<ListEventTypesResponse> {\r\n const queryParams: any = {};\r\n if (params?.language_code) {\r\n queryParams.language_code = params.language_code;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListEventTypesResponse>(`/api/v4/events/types${qsStr}`);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n TagEntityType,\r\n ListTagsParams,\r\n ListTagsResponse,\r\n CreateTagInput,\r\n CreateTagsResponse,\r\n UpdateEntityTagsInput,\r\n UpdateEntityTagsBatchResponse,\r\n UpdateSingleEntityTagsInput,\r\n UpdateEntityTagsSingleResponse\r\n} from './types';\r\n\r\nexport class TagsResource extends BaseResource {\r\n async list(entityType: TagEntityType, params?: ListTagsParams): Promise<ListTagsResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n if (params.page !== undefined) queryParams.page = params.page;\r\n if (params.limit !== undefined) queryParams.limit = params.limit;\r\n if (params.query !== undefined) queryParams.query = params.query;\r\n \r\n const filter: any = {};\r\n if (params.filter_id !== undefined) filter.id = params.filter_id;\r\n if (params.filter_name !== undefined) filter.name = params.filter_name;\r\n \r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListTagsResponse>(`/api/v4/${entityType}/tags${qsStr}`);\r\n \r\n // Tratando o 204\r\n if (response.status === 204 || !response.data) {\r\n return { _page: 1, _embedded: { tags: [] } };\r\n }\r\n return response.data;\r\n }\r\n\r\n async create(entityType: TagEntityType, items: CreateTagInput | CreateTagInput[]): Promise<CreateTagsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n \r\n // Validate that only leads support colors\r\n if (entityType !== 'leads') {\r\n const hasColor = payload.some(p => p.color !== undefined);\r\n if (hasColor) {\r\n console.warn(`[TagsResource] A documentação indica que propriedades de cor na tag só são aceitas para a entidade 'leads'. Sua requisição foi feita para '${entityType}' com cor.`);\r\n }\r\n }\r\n\r\n const response = await this.client.post<CreateTagsResponse>(`/api/v4/${entityType}/tags`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateForMany(entityType: TagEntityType, items: UpdateEntityTagsInput | UpdateEntityTagsInput[]): Promise<UpdateEntityTagsBatchResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateEntityTagsBatchResponse>(`/api/v4/${entityType}`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateForOne(entityType: TagEntityType, id: number, payload: UpdateSingleEntityTagsInput): Promise<UpdateEntityTagsSingleResponse> {\r\n const response = await this.client.patch<UpdateEntityTagsSingleResponse>(`/api/v4/${entityType}/${id}`, payload);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n LinkSourceEntityType,\r\n ListEntityLinksParams,\r\n ListEntityLinksResponse,\r\n CreateEntityLinkInput,\r\n CreateEntityLinksResponse,\r\n DeleteEntityLinkInput\r\n} from './types';\r\n\r\nexport class LinksResource extends BaseResource {\r\n async list(entity: LinkSourceEntityType, entityId: number, params?: ListEntityLinksParams): Promise<ListEntityLinksResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n const filter: any = {};\r\n \r\n // Validação combinada: filter_to_entity_id e filter_to_entity_type devem ser usados juntos\r\n const hasEntityId = params.filter_to_entity_id !== undefined;\r\n const hasEntityType = params.filter_to_entity_type !== undefined;\r\n\r\n if (hasEntityId !== hasEntityType) {\r\n throw new Error(\"A API exige que 'filter_to_entity_id' e 'filter_to_entity_type' sejam fornecidos juntos no filtro de vínculos.\");\r\n }\r\n\r\n if (hasEntityId) filter.to_entity_id = params.filter_to_entity_id;\r\n if (hasEntityType) filter.to_entity_type = params.filter_to_entity_type;\r\n \r\n if (params.filter_to_catalog_id !== undefined) filter.to_catalog_id = params.filter_to_catalog_id;\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListEntityLinksResponse>(`/api/v4/${entity}/${entityId}/links${qsStr}`);\r\n \r\n return response.data;\r\n }\r\n\r\n async link(entity: LinkSourceEntityType, entityId: number, items: CreateEntityLinkInput | CreateEntityLinkInput[]): Promise<CreateEntityLinksResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateEntityLinksResponse>(`/api/v4/${entity}/${entityId}/link`, payload);\r\n return response.data;\r\n }\r\n\r\n async unlink(entity: LinkSourceEntityType, entityId: number, items: DeleteEntityLinkInput | DeleteEntityLinkInput[]): Promise<void> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n await this.client.post(`/api/v4/${entity}/${entityId}/unlink`, payload);\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListSalesbotsParams,\r\n ListSalesbotsResponse,\r\n RunSalesbotInput,\r\n RunManySalesbotsItem,\r\n StopSalesbotInput,\r\n SalesbotContinueBotType,\r\n SalesbotContinueInput,\r\n} from './types';\r\n\r\nexport class SalesbotsResource extends BaseResource {\r\n async list(params?: ListSalesbotsParams): Promise<ListSalesbotsResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n if (params.page !== undefined) queryParams.page = params.page;\r\n if (params.limit !== undefined) queryParams.limit = params.limit;\r\n if (params.with !== undefined) queryParams.with = params.with;\r\n \r\n const filter: any = {};\r\n if (params.filter_id !== undefined) filter.id = params.filter_id;\r\n if (params.filter_type_functionality !== undefined) filter.type_functionality = params.filter_type_functionality;\r\n \r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListSalesbotsResponse>(`/api/v4/bots${qsStr}`);\r\n \r\n if (response.status === 204 || !response.data) {\r\n return { _embedded: { items: [] } };\r\n }\r\n return response.data;\r\n }\r\n\r\n async run(botId: number | string, payload: RunSalesbotInput): Promise<void> {\r\n await this.client.post(`/api/v4/bots/${botId}/run`, payload);\r\n }\r\n\r\n async runMany(items: RunManySalesbotsItem | RunManySalesbotsItem[]): Promise<void> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n if (payload.length > 100) {\r\n throw new Error(`A API da Kommo limita o 'runMany' a no máximo 100 salesbots por requisição. Você enviou ${payload.length}.`);\r\n }\r\n await this.client.post(`/api/v4/bots/run`, payload);\r\n }\r\n\r\n async stop(botId: number, payload: StopSalesbotInput): Promise<void> {\r\n await this.client.post(`/api/v4/bots/${botId}/stop`, payload);\r\n }\r\n\r\n async continueWidgetExecution(bot: SalesbotContinueBotType, botId: number, continueId: number, payload: SalesbotContinueInput): Promise<void> {\r\n if (payload.execute_handlers) {\r\n if (payload.execute_handlers.length > 10) {\r\n throw new Error(`A API da Kommo limita 'execute_handlers' a no máximo 10 itens. Você enviou ${payload.execute_handlers.length}.`);\r\n }\r\n\r\n for (const handler of payload.execute_handlers) {\r\n if (handler.handler === 'show') {\r\n if (handler.params.value && handler.params.value.length > 80) {\r\n console.warn(`[SalesbotResource] O campo 'value' em um handler 'show' tem ${handler.params.value.length} caracteres. A documentação aconselha no máximo 80.`);\r\n }\r\n if ('buttons' in handler.params && handler.params.buttons && handler.params.buttons.length > 25) {\r\n throw new Error(`A API da Kommo não permite mais do que 25 botões. Você tentou enviar ${handler.params.buttons.length}.`);\r\n }\r\n }\r\n }\r\n }\r\n\r\n await this.client.post(`/api/v4/${bot}/${botId}/continue/${continueId}`, payload);\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListSourcesResponse,\r\n Source,\r\n CreateSourceInput,\r\n CreateSourcesResponse,\r\n UpdateSourceInput,\r\n UpdateSourceBatchInput,\r\n UpdateSourcesResponse,\r\n DeleteSourceBatchInput,\r\n ListWebsiteButtonsParams,\r\n ListWebsiteButtonsResponse,\r\n WebsiteButton,\r\n CreateWebsiteButtonInput,\r\n CreateWebsiteButtonResponse,\r\n UpdateWebsiteButtonInput,\r\n} from './types';\r\n\r\nexport class SourcesResource extends BaseResource {\r\n async list(): Promise<ListSourcesResponse> {\r\n const response = await this.client.get<ListSourcesResponse>('/api/v4/sources');\r\n return response.data;\r\n }\r\n\r\n async getById(id: number): Promise<Source> {\r\n const response = await this.client.get<Source>(`/api/v4/sources/${id}`);\r\n return response.data;\r\n }\r\n\r\n async create(items: CreateSourceInput | CreateSourceInput[]): Promise<CreateSourcesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n if (payload.length > 100) {\r\n throw new Error(`A API da Kommo limita a criação a no máximo 100 fontes por vez.`);\r\n }\r\n const response = await this.client.post<CreateSourcesResponse>('/api/v4/sources', payload);\r\n return response.data;\r\n }\r\n\r\n async updateOne(id: number, payload: UpdateSourceInput): Promise<Source> {\r\n const response = await this.client.patch<Source>(`/api/v4/sources/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n async update(items: UpdateSourceBatchInput | UpdateSourceBatchInput[]): Promise<UpdateSourcesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n if (payload.length > 100) {\r\n throw new Error(`A API da Kommo limita a atualização a no máximo 100 fontes por vez.`);\r\n }\r\n const response = await this.client.patch<UpdateSourcesResponse>('/api/v4/sources', payload);\r\n return response.data;\r\n }\r\n\r\n async deleteOne(id: number): Promise<void> {\r\n await this.client.delete(`/api/v4/sources/${id}`);\r\n }\r\n\r\n async delete(items: DeleteSourceBatchInput | DeleteSourceBatchInput[]): Promise<void> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n // OpenAPI documentation specifies to send array of objects for bulk delete\r\n await this.client.delete('/api/v4/sources', { data: payload });\r\n }\r\n}\r\n\r\nexport class WebsiteButtonsResource extends BaseResource {\r\n async list(params?: ListWebsiteButtonsParams): Promise<ListWebsiteButtonsResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n if (params.page !== undefined) queryParams.page = params.page;\r\n if (params.limit !== undefined) queryParams.limit = params.limit;\r\n if (params.with !== undefined) queryParams.with = params.with;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListWebsiteButtonsResponse>(`/api/v4/website_buttons${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getBySourceId(sourceId: number, params?: { with?: 'scripts' | string }): Promise<WebsiteButton> {\r\n const queryParams: any = {};\r\n if (params && params.with !== undefined) {\r\n queryParams.with = params.with;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<WebsiteButton>(`/api/v4/website_buttons/${sourceId}${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async create(payload: CreateWebsiteButtonInput): Promise<CreateWebsiteButtonResponse> {\r\n if ((!payload.trusted_websites || payload.trusted_websites.length === 0) && !payload.is_used_in_app) {\r\n console.warn(`[WebsiteButtonsResource] A Kommo indica que se não enviar 'trusted_websites', é preciso enviar 'is_used_in_app' como true.`);\r\n }\r\n const response = await this.client.post<CreateWebsiteButtonResponse>('/api/v4/website_buttons', payload);\r\n return response.data;\r\n }\r\n\r\n async connectOnlineChat(sourceId: number | string): Promise<void> {\r\n await this.client.post(`/api/v4/website_buttons/${sourceId}/online_chat`);\r\n }\r\n\r\n async update(sourceId: number, payload: UpdateWebsiteButtonInput): Promise<WebsiteButton> {\r\n const response = await this.client.patch<WebsiteButton>(`/api/v4/website_buttons/${sourceId}`, payload);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListChatTemplatesParams,\r\n ListChatTemplatesResponse,\r\n ChatTemplate,\r\n CreateChatTemplateInput,\r\n CreateChatTemplatesResponse,\r\n UpdateChatTemplateInput,\r\n UpdateChatTemplatesResponse,\r\n SubmitWhatsAppTemplateReviewResponse,\r\n UpdateWhatsAppTemplateReviewStatusInput,\r\n UpdateWhatsAppTemplateReviewStatusResponse,\r\n DeleteChatTemplateInput\r\n} from './types';\r\n\r\nexport class ChatTemplatesResource extends BaseResource {\r\n async list(params?: ListChatTemplatesParams): Promise<ListChatTemplatesResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n if (params.page !== undefined) queryParams.page = params.page;\r\n if (params.limit !== undefined) queryParams.limit = params.limit;\r\n if (params.with !== undefined) queryParams.with = params.with;\r\n\r\n const filter: any = {};\r\n if (params.filter_external_id !== undefined) filter.external_id = params.filter_external_id;\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListChatTemplatesResponse>(`/api/v4/chats/templates${qsStr}`);\r\n \r\n if (response.status === 204 || !response.data) {\r\n return { _page: 1, _embedded: { chat_templates: [] } };\r\n }\r\n \r\n return response.data;\r\n }\r\n\r\n async getById(id: number, params?: { with?: 'reviews' | string }): Promise<ChatTemplate> {\r\n const queryParams: any = {};\r\n if (params && params.with !== undefined) {\r\n queryParams.with = params.with;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ChatTemplate>(`/api/v4/chats/templates/${id}${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async create(items: CreateChatTemplateInput | CreateChatTemplateInput[]): Promise<CreateChatTemplatesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateChatTemplatesResponse>('/api/v4/chats/templates', payload);\r\n return response.data;\r\n }\r\n\r\n async update(items: UpdateChatTemplateInput | UpdateChatTemplateInput[]): Promise<UpdateChatTemplatesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n // Validação de segurança local para evitar erro HTTP opaco se o desenvolvedor tentar editar um Waba já aprovado.\r\n // Como a API não retorna o state no payload de input obrigatoriamente, enviamos um aviso (warning).\r\n const isWaba = payload.some(item => item.type === 'waba');\r\n if (isWaba) {\r\n console.warn(`[ChatTemplatesResource] Modelos do WhatsApp ('waba') só podem ser editados se o status for 'draft'. Modificar um template em 'review' ou 'approved' causará erro na API.`);\r\n }\r\n\r\n const response = await this.client.patch<UpdateChatTemplatesResponse>('/api/v4/chats/templates', payload);\r\n return response.data;\r\n }\r\n\r\n async submitForReview(id: number): Promise<SubmitWhatsAppTemplateReviewResponse> {\r\n const response = await this.client.post<SubmitWhatsAppTemplateReviewResponse>(`/api/v4/chats/templates/${id}/review`);\r\n return response.data;\r\n }\r\n\r\n async updateReviewStatus(id: number, reviewId: number, payload: UpdateWhatsAppTemplateReviewStatusInput): Promise<UpdateWhatsAppTemplateReviewStatusResponse> {\r\n const response = await this.client.post<UpdateWhatsAppTemplateReviewStatusResponse>(`/api/v4/chats/templates/${id}/review/${reviewId}`, payload);\r\n return response.data;\r\n }\r\n\r\n async delete(items: DeleteChatTemplateInput | DeleteChatTemplateInput[]): Promise<void> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n await this.client.delete('/api/v4/chats/templates', { data: payload });\r\n }\r\n\r\n async deleteOne(id: number): Promise<void> {\r\n await this.client.delete(`/api/v4/chats/templates/${id}`);\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListWebhooksParams,\r\n ListWebhooksResponse,\r\n Webhook,\r\n CreateWebhookInput,\r\n DeleteWebhookInput\r\n} from './types';\r\n\r\n// Kommo's webhooks API only exposes GET/POST/DELETE (no PATCH), so there is\r\n// no update() here by design — changing a webhook's events means delete + create.\r\nexport class WebhooksResource extends BaseResource {\r\n async list(params?: ListWebhooksParams): Promise<ListWebhooksResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n const filter: any = {};\r\n if (params.filter_destination !== undefined) filter.destination = params.filter_destination;\r\n \r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListWebhooksResponse>(`/api/v4/webhooks${qsStr}`);\r\n \r\n if (response.status === 204 || !response.data) {\r\n return { _total_items: 0, _embedded: { webhooks: [] } };\r\n }\r\n return response.data;\r\n }\r\n\r\n async create(payload: CreateWebhookInput): Promise<Webhook> {\r\n const response = await this.client.post<Webhook>('/api/v4/webhooks', payload);\r\n return response.data;\r\n }\r\n\r\n async delete(payload: DeleteWebhookInput): Promise<void> {\r\n const data = { destination: payload.destination };\r\n await this.client.delete('/api/v4/webhooks', { data });\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n FileRecord,\r\n ListFilesParams,\r\n ListFilesResponse,\r\n CreateFileUploadSessionInput,\r\n UploadSessionResponse,\r\n UploadFilePartInput,\r\n UploadFilePartResponse,\r\n UpdateFileInput,\r\n DeleteFilesItem,\r\n RestoreFilesItem,\r\n ListFileVersionsResponse,\r\n FileAttachEntityType,\r\n ListEntityAttachedFilesParams,\r\n ListEntityAttachedFilesResponse,\r\n AttachFilesToEntityItem,\r\n DetachFilesFromEntityItem,\r\n ListFileLinkedEntitiesResponse,\r\n} from './types';\r\n\r\n// Organizando sub-módulos dentro de FilesResource para refletir a divisão semântica da API\r\n\r\nexport class FilesServiceResource extends BaseResource {\r\n async getByUuid(fileUuid: string): Promise<FileRecord | null> {\r\n const response = await this.client.get(`/v1.0/files/${fileUuid}`);\r\n if (response.status === 204) {\r\n return null;\r\n }\r\n return response.data;\r\n }\r\n\r\n async list(params?: ListFilesParams): Promise<ListFilesResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n const filter: any = {};\r\n \r\n const paramKeys = Object.keys(params) as Array<keyof ListFilesParams>;\r\n for (const key of paramKeys) {\r\n if (params[key] !== undefined) {\r\n const filterKey = key.replace('filter_', '');\r\n \r\n if (filterKey.startsWith('size_') || filterKey.startsWith('date_')) {\r\n const [prefix, sub] = filterKey.split('_'); // size_unit -> size.unit\r\n if (!filter[prefix]) filter[prefix] = {};\r\n // Trata o campo do prefixo \"date\" e \"size\" com chaves aninhadas (ex: filter[size][unit])\r\n \r\n // Mas precisamos injetar os subníveis da forma certa:\r\n if (key === 'filter_size_unit') filter.size = { ...filter.size, unit: params[key]};\r\n else if (key === 'filter_size_from') filter.size = { ...filter.size, from: params[key]};\r\n else if (key === 'filter_size_to') filter.size = { ...filter.size, to: params[key]};\r\n else if (key === 'filter_date_type') filter.date = { ...filter.date, type: params[key]};\r\n else if (key === 'filter_date_preset') filter.date = { ...filter.date, date_preset: params[key]};\r\n else if (key === 'filter_date_from') filter.date = { ...filter.date, from: params[key]};\r\n else if (key === 'filter_date_to') filter.date = { ...filter.date, to: params[key]};\r\n } else {\r\n filter[filterKey] = params[key];\r\n }\r\n }\r\n }\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get(`/v1.0/files${qsStr}`);\r\n \r\n // Tratando 204 sem itens.\r\n if (response.status === 204 || !response.data) {\r\n return { items: [], raw: response.data };\r\n }\r\n \r\n // A documentação foi opaca. Para garantir retorno robusto, mapeamos os items com fallback flexível\r\n return {\r\n // Se houver um array nativo\r\n items: Array.isArray(response.data) ? response.data : response.data?._embedded?.files || response.data?.items,\r\n raw: response.data\r\n };\r\n }\r\n\r\n async createUploadSession(payload: CreateFileUploadSessionInput): Promise<UploadSessionResponse> {\r\n const response = await this.client.post<UploadSessionResponse>('/v1.0/sessions', payload);\r\n return response.data;\r\n }\r\n\r\n async uploadPart(sessionToken: string, filePart: UploadFilePartInput): Promise<UploadFilePartResponse> {\r\n // Para Binários o content type varia via Adapter, manteremos o raw body pass-through:\r\n const response = await this.client.post<UploadFilePartResponse>(`/v1.0/sessions/upload/${sessionToken}`, filePart, {\r\n headers: {\r\n 'Content-Type': 'application/octet-stream'\r\n }\r\n });\r\n return response.data;\r\n }\r\n\r\n async update(fileUuid: string, payload: UpdateFileInput): Promise<FileRecord> {\r\n if (payload.name !== undefined && payload.version_uuid !== undefined) {\r\n throw new Error(\"A Files API não permite alterar 'name' e definir 'version_uuid' na mesma requisição.\");\r\n }\r\n const response = await this.client.patch<FileRecord>(`/v1.0/files/${fileUuid}`, payload);\r\n return response.data;\r\n }\r\n\r\n async delete(items: DeleteFilesItem | DeleteFilesItem[]): Promise<Record<string, unknown>> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.delete(`/v1.0/files`, { data: payload });\r\n return response.data || {};\r\n }\r\n\r\n async restore(items: RestoreFilesItem | RestoreFilesItem[]): Promise<Record<string, unknown>> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post(`/v1.0/files/restore`, payload);\r\n return response.data;\r\n }\r\n\r\n async listVersions(fileUuid: string): Promise<ListFileVersionsResponse> {\r\n const response = await this.client.get(`/v1.0/files/${fileUuid}/versions`);\r\n return {\r\n items: Array.isArray(response.data) ? response.data : response.data?._embedded?.versions || response.data?.items,\r\n raw: response.data\r\n };\r\n }\r\n}\r\n\r\n\r\nexport class EntityFilesResource extends BaseResource {\r\n private normalizeEntity(entity: FileAttachEntityType): string {\r\n if (entity === 'contatos') return 'contacts';\r\n if (entity === 'empresas') return 'companies';\r\n return entity;\r\n }\r\n\r\n async listAttachedToEntity(entity: FileAttachEntityType, entityId: number, params?: ListEntityAttachedFilesParams): Promise<ListEntityAttachedFilesResponse> {\r\n const normalEntity = this.normalizeEntity(entity);\r\n const query = qs.stringify(params, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n \r\n const response = await this.client.get(`/api/v4/${normalEntity}/${entityId}/files${qsStr}`);\r\n if (response.status === 204) {\r\n return { items: [], raw: null };\r\n }\r\n \r\n return {\r\n items: Array.isArray(response.data) ? response.data : response.data?._embedded?.files || response.data?.items,\r\n raw: response.data\r\n };\r\n }\r\n\r\n async attachToEntity(entity: FileAttachEntityType, entityId: number, items: AttachFilesToEntityItem | AttachFilesToEntityItem[]): Promise<Record<string, unknown>> {\r\n const normalEntity = this.normalizeEntity(entity);\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.put(`/api/v4/${normalEntity}/${entityId}/files`, payload);\r\n return response.data;\r\n }\r\n\r\n async detachFromEntity(entity: FileAttachEntityType, entityId: number, items: DetachFilesFromEntityItem | DetachFilesFromEntityItem[]): Promise<void> {\r\n const normalEntity = this.normalizeEntity(entity);\r\n const payload = Array.isArray(items) ? items : [items];\r\n await this.client.delete(`/api/v4/${normalEntity}/${entityId}/files`, { data: payload });\r\n }\r\n}\r\n\r\nexport class FileLinksResource extends BaseResource {\r\n async listLinkedEntities(fileUuid: string): Promise<ListFileLinkedEntitiesResponse> {\r\n const response = await this.client.get(`/api/v4/files/${fileUuid}/links`);\r\n return {\r\n items: Array.isArray(response.data) ? response.data : response.data?._embedded?.links || response.data?.items,\r\n raw: response.data\r\n };\r\n }\r\n}\r\n\r\n// Wrapper Principal para empacotar os 3 submódulos\r\nexport class FilesResource extends BaseResource {\r\n public service: FilesServiceResource;\r\n public entities: EntityFilesResource;\r\n public links: FileLinksResource;\r\n\r\n constructor(httpClient: any) {\r\n super(httpClient);\r\n this.service = new FilesServiceResource(httpClient);\r\n this.entities = new EntityFilesResource(httpClient);\r\n this.links = new FileLinksResource(httpClient);\r\n }\r\n}\r\n","import { BaseResource } from '../../base';\r\nimport { Account, GetAccountParams } from './types';\r\n\r\nexport class AccountResource extends BaseResource {\r\n async get(params?: GetAccountParams): Promise<Account> {\r\n let withParam: string | undefined;\r\n\r\n if (params?.with) {\r\n withParam = Array.isArray(params.with)\r\n ? params.with.join(',')\r\n : params.with;\r\n }\r\n\r\n const qsStr = withParam ? `?with=${encodeURIComponent(withParam)}` : '';\r\n const response = await this.client.get<Account>(`/api/v4/account${qsStr}`);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport { ListTalksParams, ListTalksResponse, CloseTalkParams } from './types';\n\nexport class TalksResource extends BaseResource {\n async list(params?: ListTalksParams): Promise<ListTalksResponse> {\n const queryParams: any = {};\n if (params) {\n if (params.page !== undefined) queryParams.page = params.page;\n if (params.limit !== undefined) queryParams.limit = params.limit;\n if (params.filter_talk_id !== undefined) queryParams.filter = { ...queryParams.filter, talk_id: params.filter_talk_id };\n if (params.filter_contact_id !== undefined) queryParams.filter = { ...queryParams.filter, contact_id: params.filter_contact_id };\n if (params.filter_entity_id !== undefined) queryParams.filter = { ...queryParams.filter, entity_id: params.filter_entity_id };\n if (params.filter_entity_type !== undefined) queryParams.filter = { ...queryParams.filter, entity_type: params.filter_entity_type };\n if (params.filter_only_in_work) queryParams.filter = { ...queryParams.filter, only_in_work: '' };\n }\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListTalksResponse>(`/api/v4/talks${qsStr}`);\n if (response.status === 204 || !response.data) {\n return { _page: 1, _embedded: { talks: [] } };\n }\n return response.data;\n }\n\n async close(id: number, params?: CloseTalkParams): Promise<void> {\n await this.client.post(`/api/v4/talks/${id}/close`, params ?? {});\n }\n}\n","export class KommoApiError extends Error {\r\n status?: number;\r\n title?: string;\r\n detail?: string;\r\n type?: string;\r\n raw?: unknown;\r\n\r\n constructor(message: string, info?: Partial<KommoApiError>) {\r\n super(message);\r\n this.name = 'KommoApiError';\r\n \r\n if (info) {\r\n this.status = info.status;\r\n this.title = info.title;\r\n this.detail = info.detail;\r\n this.type = info.type;\r\n this.raw = info.raw;\r\n }\r\n }\r\n}\r\n","export const KOMMO_PIPELINE_STAGE_COLORS = [\r\n '#fffeb2',\r\n '#fffd7f',\r\n '#fff000',\r\n '#ffeab2',\r\n '#ffdc7f',\r\n '#ffce5a',\r\n '#ffdbdb',\r\n '#ffc8c8',\r\n '#ff8f92',\r\n '#d6eaff',\r\n '#c1e0ff',\r\n '#98cbff',\r\n '#ebffb1',\r\n '#deff81',\r\n '#87f2c0',\r\n '#f9deff',\r\n '#f3beff',\r\n '#ccc8f9',\r\n '#eb93ff',\r\n '#f2f3f4',\r\n '#e6e8ea',\r\n] as const;\r\n\r\nexport type KommoPipelineStageColor = typeof KOMMO_PIPELINE_STAGE_COLORS[number];\r\n\r\nexport interface StatusDescription {\r\n level: 'newbie' | 'candidate' | 'master';\r\n description: string;\r\n}\r\n\r\nexport interface PipelineStatus {\r\n id: number;\r\n name: string;\r\n sort: number;\r\n is_editable: boolean;\r\n pipeline_id: number;\r\n color: string;\r\n type: 0 | 1 | number;\r\n account_id: number;\r\n request_id?: string;\r\n descriptions?: StatusDescription[];\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n}\r\n\r\nexport interface Pipeline {\r\n id: number;\r\n name: string;\r\n sort: number;\r\n is_main: boolean;\r\n is_unsorted_on: boolean;\r\n is_archive: boolean;\r\n account_id: number | string;\r\n request_id?: string;\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n _embedded?: {\r\n statuses?: PipelineStatus[];\r\n };\r\n}\r\n\r\nexport interface ListPipelinesResponse {\r\n _total_items?: number;\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n _embedded?: {\r\n pipelines?: Pipeline[];\r\n };\r\n}\r\n\r\nexport interface CreatePipelineStatusInput {\r\n id?: number;\r\n name?: string;\r\n sort?: number;\r\n color?: KommoPipelineStageColor | string;\r\n request_id?: string;\r\n descriptions?: StatusDescription[];\r\n}\r\n\r\nexport interface CreatePipelineInput {\r\n name: string;\r\n sort?: number;\r\n is_main?: boolean;\r\n is_unsorted_on?: boolean;\r\n request_id?: string;\r\n _embedded?: {\r\n statuses?: CreatePipelineStatusInput[];\r\n };\r\n}\r\n\r\nexport interface CreatePipelinesResponse {\r\n _total_items?: number;\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n _embedded?: {\r\n pipelines?: Pipeline[];\r\n };\r\n}\r\n\r\nexport interface UpdatePipelineInput {\r\n name?: string;\r\n sort?: number;\r\n is_main?: boolean;\r\n is_unsorted_on?: boolean;\r\n}\r\n\r\nexport interface ListPipelineStatusesResponse {\r\n _total_items?: number;\r\n _embedded?: {\r\n statuses?: PipelineStatus[];\r\n };\r\n}\r\n\r\nexport interface CreateStatusInput {\r\n name: string;\r\n sort: number;\r\n color?: KommoPipelineStageColor | string;\r\n request_id?: string;\r\n descriptions?: StatusDescription[];\r\n}\r\n\r\nexport interface CreateStatusesResponse {\r\n _total_items?: number;\r\n _embedded?: {\r\n statuses?: PipelineStatus[];\r\n };\r\n}\r\n\r\nexport interface UpdateStatusInput {\r\n name?: string;\r\n sort?: number;\r\n color?: KommoPipelineStageColor | string;\r\n descriptions?: StatusDescription[];\r\n}\r\n","export type EventWithParam =\r\n | 'contact_name'\r\n | 'lead_name'\r\n | 'company_name'\r\n | 'catalog_name'\r\n | 'catalog_element_name';\r\n\r\nexport type EventValueChange =\r\n | Record<string, unknown>\r\n | {\r\n task?: { text?: string };\r\n helpbot?: { id?: number };\r\n transaction?: { id?: number };\r\n note?: { id?: number };\r\n nps?: { rate?: number };\r\n message?: { id?: string };\r\n tag?: { name?: string };\r\n lead_status?: { id?: number; pipeline_id?: number };\r\n responsible_user?: { id?: number };\r\n task_deadline?: { timestamp?: number };\r\n task_type?: { id?: number };\r\n custom_field_value?: {\r\n field_id?: number;\r\n field_type?: number;\r\n enum_id?: number | null;\r\n text?: string;\r\n };\r\n link?: {\r\n entity?: {\r\n type?: string;\r\n id?: number;\r\n };\r\n };\r\n unlink?: {\r\n entity?: {\r\n type?: string;\r\n id?: number;\r\n };\r\n };\r\n };\r\n\r\nexport interface Event {\r\n id: string;\r\n type: string;\r\n entity_id: number;\r\n entity_type: string;\r\n created_by: number;\r\n created_at: number;\r\n value_after: EventValueChange[];\r\n value_before: EventValueChange[];\r\n account_id: number;\r\n\r\n _links?: {\r\n self?: {\r\n href: string;\r\n };\r\n };\r\n\r\n _embedded?: {\r\n entity?: {\r\n id: number;\r\n name?: string;\r\n _links?: {\r\n self?: {\r\n href: string;\r\n };\r\n };\r\n };\r\n };\r\n}\r\n\r\nexport type KnownEventType =\r\n | 'lead_added'\r\n | 'lead_deleted'\r\n | 'lead_restored'\r\n | 'lead_status_changed'\r\n | 'lead_linked'\r\n | 'lead_unlinked'\r\n | 'contact_added'\r\n | 'contact_deleted'\r\n | 'contact_restored'\r\n | 'contact_linked'\r\n | 'contact_unlinked'\r\n | 'company_added'\r\n | 'company_deleted'\r\n | 'company_restored'\r\n | 'company_linked'\r\n | 'company_unlinked'\r\n | 'task_added'\r\n | 'task_deleted'\r\n | 'task_completed'\r\n | 'task_type_changed'\r\n | 'task_text_changed'\r\n | 'task_deadline_changed'\r\n | 'task_result_added'\r\n | 'incoming_call'\r\n | 'outgoing_call'\r\n | 'incoming_mail'\r\n | 'outgoing_mail'\r\n | 'incoming_chat_message'\r\n | 'outgoing_chat_message'\r\n | 'entity_direct_message'\r\n | 'incoming_sms'\r\n | 'outgoing_sms'\r\n | 'entity_tag_added'\r\n | 'entity_tag_deleted'\r\n | 'entity_linked'\r\n | 'entity_unlinked'\r\n | 'sale_field_changed'\r\n | 'name_field_changed'\r\n | 'ltv_field_changed'\r\n | 'custom_field_value_changed'\r\n | 'entity_responsible_changed'\r\n | 'robot_replied'\r\n | 'intent_identified'\r\n | 'nps_rate_added'\r\n | 'link_followed'\r\n | 'common_note_added'\r\n | 'common_note_deleted'\r\n | 'attachment_note_added'\r\n | 'targeting_in_note_added'\r\n | 'targeting_out_note_added'\r\n | 'geo_note_added'\r\n | 'service_note_added'\r\n | 'site_visit_note_added'\r\n | 'entity_merged'\r\n | 'video_opened'\r\n | 'video_closed'\r\n | 'picture_opened'\r\n | 'picture_closed'\r\n | 'zoom_conference'\r\n | 'key_action_completed'\r\n | 'ai_result'\r\n | 'talk_created'\r\n | 'talk_closed'\r\n | 'conversation_answered'\r\n | 'meta_chat_subscription_added'\r\n | 'meta_chat_subscription_removed'\r\n | 'talk_missed_event'\r\n | 'page_mention'\r\n | 'dropbox_attachment'\r\n | `custom_field_${number}_value_changed`\r\n | string;\r\n\r\nexport interface EventValueFilters {\r\n leads_statuses?: Array<{\r\n pipeline_id: number;\r\n status_id: number;\r\n }>;\r\n responsible_user_id?: number[] | string;\r\n custom_field_values?: number[] | string;\r\n value?: string | number;\r\n}\r\n\r\nexport interface ListEventsParams {\r\n with?: EventWithParam[] | string;\r\n page?: number;\r\n limit?: number; // máximo 250\r\n\r\n filter_id?: string | string[];\r\n\r\n filter_created_at_from?: number;\r\n filter_created_at_to?: number;\r\n\r\n filter_created_by?: number[]; // até 10 IDs\r\n filter_entity?: Array<\r\n 'lead' | 'contact' | 'company' | 'task' | `catalog_${number}`\r\n > | string;\r\n\r\n filter_entity_id?: number[]; // usar com um único filter_entity\r\n filter_type?: KnownEventType[] | KnownEventType;\r\n\r\n filter_value_before?: EventValueFilters;\r\n filter_value_after?: EventValueFilters;\r\n}\r\n\r\nexport interface ListEventsResponse {\r\n _page: number;\r\n _links?: {\r\n self?: { href: string };\r\n next?: { href: string };\r\n };\r\n _embedded?: {\r\n events?: Event[];\r\n };\r\n}\r\n\r\nexport interface EventTypeDefinition {\r\n key: string;\r\n type: number;\r\n lang: string;\r\n}\r\n\r\nexport interface ListEventTypesParams {\r\n language_code?: 'en' | 'es' | 'pt' | string;\r\n}\r\n\r\nexport interface ListEventTypesResponse {\r\n _total_items?: number;\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n _embedded?: {\r\n events_types?: EventTypeDefinition[];\r\n };\r\n}\r\n\r\n// Utilitários de Eventos\r\nexport const eventUtils = {\r\n isLeadStatusChanged: (event: Event) => event.type === 'lead_status_changed',\r\n isCustomFieldChanged: (event: Event) =>\r\n event.type === 'custom_field_value_changed' ||\r\n /^custom_field_\\d+_value_changed$/.test(event.type),\r\n};\r\n","export const KOMMO_TAG_COLORS = [\r\n 'EBEBEB',\r\n 'D0D0D0',\r\n 'F2DDF7',\r\n 'D1A4DC',\r\n 'FF8F92',\r\n 'FFC8C8',\r\n 'C7DB8C',\r\n 'DDEBB5',\r\n '8699DA',\r\n 'AABDFF',\r\n 'FFCE5A',\r\n 'FFE193',\r\n '90CDB0',\r\n 'C6F4DE',\r\n 'A9A5D7',\r\n 'D8D5FF',\r\n '86C0FC',\r\n '832161',\r\n '6A0F49',\r\n '0C7C59',\r\n '10599D',\r\n '9D2B32',\r\n '247BA0',\r\n] as const;\r\n\r\nexport type TagColor = typeof KOMMO_TAG_COLORS[number];\r\nexport type TagEntityType = 'leads' | 'contacts' | 'companies' | string;\r\n\r\nexport interface Tag {\r\n id: number;\r\n name: string;\r\n color?: TagColor | string;\r\n request_id?: string;\r\n}\r\n\r\nexport interface ListTagsParams {\r\n page?: number;\r\n limit?: number; // máximo 250\r\n query?: string;\r\n filter_id?: number[];\r\n filter_name?: string;\r\n}\r\n\r\nexport interface ListTagsResponse {\r\n _page: number;\r\n _links?: {\r\n self?: { href: string };\r\n next?: { href: string };\r\n };\r\n _embedded?: {\r\n tags?: Tag[];\r\n };\r\n}\r\n\r\nexport interface CreateTagInput {\r\n name: string;\r\n color?: TagColor | string; // apenas para leads\r\n request_id?: string;\r\n}\r\n\r\nexport interface CreateTagsResponse {\r\n _total_items?: number;\r\n _embedded?: {\r\n tags?: Array<{\r\n id: number;\r\n name: string;\r\n request_id?: string;\r\n }>;\r\n };\r\n}\r\n\r\nexport interface TagRefInput {\r\n id?: number;\r\n name?: string;\r\n}\r\n\r\nexport interface UpdateEntityTagsInput {\r\n id: number;\r\n _embedded: {\r\n tags: TagRefInput[] | null;\r\n };\r\n}\r\n\r\nexport interface EntityUpdateResult {\r\n id: number;\r\n updated_at: number;\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n}\r\n\r\nexport interface UpdateEntityTagsBatchResponse {\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n _embedded?: {\r\n leads?: Array<EntityUpdateResult>;\r\n contacts?: Array<EntityUpdateResult>;\r\n companies?: Array<EntityUpdateResult>;\r\n };\r\n}\r\n\r\nexport interface UpdateSingleEntityTagsInput {\r\n _embedded: {\r\n tags: TagRefInput[] | null;\r\n };\r\n}\r\n\r\nexport interface UpdateEntityTagsSingleResponse {\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n _embedded?: {\r\n leads?: Array<EntityUpdateResult>;\r\n contacts?: Array<EntityUpdateResult>;\r\n companies?: Array<EntityUpdateResult>;\r\n };\r\n}\r\n","export const KNOWN_WEBHOOK_EVENTS = [\r\n // Lead\r\n 'add_lead',\r\n 'update_lead',\r\n 'delete_lead',\r\n 'restore_lead',\r\n 'status_lead',\r\n 'responsible_lead',\r\n 'note_lead',\r\n // Contact\r\n 'add_contact',\r\n 'update_contact',\r\n 'delete_contact',\r\n 'restore_contact',\r\n 'responsible_contact',\r\n 'note_contact',\r\n // Company\r\n 'add_company',\r\n 'update_company',\r\n 'delete_company',\r\n 'restore_company',\r\n 'responsible_company',\r\n 'note_company',\r\n // Task\r\n 'add_task',\r\n 'update_task',\r\n 'delete_task',\r\n 'responsible_task',\r\n // Chat / Talk\r\n 'add_talk',\r\n 'add_message',\r\n 'add_outgoing_message',\r\n 'add_chat_template_review',\r\n] as const;\r\n\r\nexport type WebhookEvent = typeof KNOWN_WEBHOOK_EVENTS[number] | string;\r\n\r\nexport interface Webhook {\r\n id: number;\r\n destination: string;\r\n created_at: number;\r\n updated_at: number;\r\n account_id: number;\r\n created_by: number;\r\n sort: number;\r\n disabled: boolean;\r\n settings: WebhookEvent[];\r\n}\r\n\r\nexport interface ListWebhooksParams {\r\n filter_destination?: string;\r\n}\r\n\r\nexport interface ListWebhooksResponse {\r\n _total_items?: number;\r\n _embedded?: {\r\n webhooks?: Webhook[];\r\n };\r\n}\r\n\r\nexport interface CreateWebhookInput {\r\n destination: string;\r\n settings: WebhookEvent[];\r\n sort?: number;\r\n}\r\n\r\nexport interface DeleteWebhookInput {\r\n destination: string;\r\n}\r\n"],"mappings":"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","names":["import_axios","import_qs","axios","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","axios","qs"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/client.ts","../src/auth.ts","../src/resources/leads/index.ts","../src/utils/idempotency.ts","../src/base.ts","../src/resources/contacts/index.ts","../src/resources/tasks/index.ts","../src/resources/notes/index.ts","../src/resources/custom-fields/index.ts","../src/resources/unsorted/index.ts","../src/resources/pipelines/index.ts","../src/resources/companies/index.ts","../src/resources/catalogs/index.ts","../src/resources/users/index.ts","../src/resources/events/index.ts","../src/resources/tags/index.ts","../src/resources/links/index.ts","../src/resources/salesbots/index.ts","../src/resources/sources/index.ts","../src/resources/chat-templates/index.ts","../src/resources/webhooks/index.ts","../src/resources/files/index.ts","../src/resources/account/index.ts","../src/resources/talks/index.ts","../src/errors.ts","../src/http/retry.ts","../src/resources/pipelines/types.ts","../src/resources/events/types.ts","../src/resources/tags/types.ts","../src/resources/webhooks/types.ts"],"sourcesContent":["export * from './client';\r\nexport * from './types';\r\nexport * from './auth';\r\nexport * from './errors';\r\nexport * from './resources/leads';\r\nexport * from './resources/leads/types';\r\nexport * from './resources/contacts';\r\nexport * from './resources/contacts/types';\r\nexport * from './resources/tasks';\r\nexport * from './resources/tasks/types';\r\nexport * from './resources/notes';\r\nexport * from './resources/notes/types';\r\nexport * from './resources/custom-fields';\r\nexport * from './resources/custom-fields/types';\r\nexport * from './resources/unsorted';\r\nexport * from './resources/unsorted/types';\r\nexport * from './resources/pipelines';\r\nexport * from './resources/pipelines/types';\r\nexport * from './resources/companies';\r\nexport * from './resources/companies/types';\r\nexport * from './resources/catalogs';\r\nexport * from './resources/catalogs/types';\r\nexport * from './resources/users';\r\nexport * from './resources/users/types';\r\nexport * from './resources/events';\r\nexport * from './resources/events/types';\r\nexport * from './resources/tags';\r\nexport * from './resources/tags/types';\r\nexport * from './resources/links';\r\nexport * from './resources/links/types';\r\nexport * from './resources/salesbots';\r\nexport * from './resources/salesbots/types';\r\nexport * from './resources/sources';\r\nexport * from './resources/sources/types';\r\nexport * from './resources/chat-templates';\r\nexport * from './resources/chat-templates/types';\r\nexport * from './resources/webhooks';\r\nexport * from './resources/webhooks/types';\r\nexport * from './resources/files';\r\nexport * from './resources/files/types';\r\nexport * from './resources/account';\r\nexport * from './resources/account/types';\r\nexport * from './resources/talks';\r\nexport * from './resources/talks/types';\r\n","import axios, { AxiosInstance } from 'axios';\r\nimport qs from 'qs';\r\nimport { KommoConfig } from './types';\r\nimport { AuthManager } from './auth';\r\nimport { LeadsResource } from './resources/leads';\r\nimport { ContactsResource } from './resources/contacts';\r\nimport { TasksResource } from './resources/tasks';\r\nimport { NotesResource } from './resources/notes';\r\nimport { CustomFieldsResource, CustomFieldGroupsResource } from './resources/custom-fields';\r\nimport { UnsortedResource } from './resources/unsorted';\r\nimport { PipelinesResource } from './resources/pipelines';\r\nimport { CompaniesResource } from './resources/companies';\r\nimport { CatalogsResource } from './resources/catalogs';\r\nimport { UsersResource, RolesResource } from './resources/users';\r\nimport { EventsResource } from './resources/events';\r\nimport { TagsResource } from './resources/tags';\r\nimport { LinksResource } from './resources/links';\r\nimport { SalesbotsResource } from './resources/salesbots';\r\nimport { SourcesResource, WebsiteButtonsResource } from './resources/sources';\r\nimport { ChatTemplatesResource } from './resources/chat-templates';\r\nimport { WebhooksResource } from './resources/webhooks';\r\nimport { FilesResource } from './resources/files';\r\nimport { AccountResource } from './resources/account';\r\nimport { TalksResource } from './resources/talks';\r\nimport { KommoApiError } from './errors';\r\nimport { attachRetryInterceptor } from './http/retry';\r\n\r\nexport class KommoClient {\r\n public config: KommoConfig;\r\n public auth: AuthManager;\r\n public httpClient: AxiosInstance;\r\n\r\n public leads: LeadsResource;\r\n public contacts: ContactsResource;\r\n public tasks: TasksResource;\r\n public notes: NotesResource;\r\n public customFields: CustomFieldsResource;\r\n public customFieldGroups: CustomFieldGroupsResource;\r\n public unsorted: UnsortedResource;\r\n public pipelines: PipelinesResource;\r\n public companies: CompaniesResource;\r\n public catalogs: CatalogsResource;\r\n public users: UsersResource;\r\n public roles: RolesResource;\r\n public events: EventsResource;\r\n public tags: TagsResource;\r\n public links: LinksResource;\r\n public salesbots: SalesbotsResource;\r\n public sources: SourcesResource;\r\n public websiteButtons: WebsiteButtonsResource;\r\n public chatTemplates: ChatTemplatesResource;\r\n public webhooks: WebhooksResource;\r\n public files: FilesResource;\r\n public account: AccountResource;\r\n public talks: TalksResource;\r\n\r\n constructor(config: KommoConfig) {\r\n this.config = config;\r\n \r\n this.auth = new AuthManager(\r\n config.domain,\r\n config.clientId,\r\n config.clientSecret,\r\n config.redirectUri\r\n );\r\n\r\n const baseURL = `https://${config.domain}.kommo.com`;\r\n\r\n this.httpClient = axios.create({\r\n baseURL,\r\n timeout: config.timeout ?? 30000,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n paramsSerializer: (params) => {\r\n return qs.stringify(params, { arrayFormat: 'brackets' });\r\n }\r\n });\r\n\r\n if (config.retry !== false) {\r\n attachRetryInterceptor(this.httpClient, config.retry || {});\r\n }\r\n\r\n this.httpClient.interceptors.response.use(\r\n (response) => response,\r\n (error) => {\r\n if (error.response) {\r\n const errData = error.response.data;\r\n throw new KommoApiError(errData?.title || 'Kommo API Error', {\r\n status: error.response.status,\r\n title: errData?.title,\r\n detail: errData?.detail,\r\n type: errData?.type,\r\n raw: errData\r\n });\r\n }\r\n throw error;\r\n }\r\n );\r\n\r\n if (config.accessToken) {\r\n this.httpClient.defaults.headers.common['Authorization'] = `Bearer ${config.accessToken}`;\r\n }\r\n\r\n // Inicializa Módulos\r\n this.leads = new LeadsResource(this.httpClient);\r\n this.contacts = new ContactsResource(this.httpClient);\r\n this.tasks = new TasksResource(this.httpClient);\r\n this.notes = new NotesResource(this.httpClient);\r\n this.customFields = new CustomFieldsResource(this.httpClient);\r\n this.customFieldGroups = new CustomFieldGroupsResource(this.httpClient);\r\n this.unsorted = new UnsortedResource(this.httpClient);\r\n this.pipelines = new PipelinesResource(this.httpClient);\r\n this.companies = new CompaniesResource(this.httpClient);\r\n this.catalogs = new CatalogsResource(this.httpClient);\r\n this.users = new UsersResource(this.httpClient);\r\n this.roles = new RolesResource(this.httpClient);\r\n this.events = new EventsResource(this.httpClient);\r\n this.tags = new TagsResource(this.httpClient);\r\n this.links = new LinksResource(this.httpClient);\r\n this.salesbots = new SalesbotsResource(this.httpClient);\r\n this.sources = new SourcesResource(this.httpClient);\r\n this.websiteButtons = new WebsiteButtonsResource(this.httpClient);\r\n this.chatTemplates = new ChatTemplatesResource(this.httpClient);\r\n this.webhooks = new WebhooksResource(this.httpClient);\r\n this.files = new FilesResource(this.httpClient);\r\n this.account = new AccountResource(this.httpClient);\r\n this.talks = new TalksResource(this.httpClient);\r\n }\r\n\r\n public setAccessToken(token: string) {\r\n this.config.accessToken = token;\r\n this.httpClient.defaults.headers.common['Authorization'] = `Bearer ${token}`;\r\n }\r\n}\r\n","import axios from 'axios';\r\nimport { AccessTokenResponse } from './types';\r\n\r\nexport class AuthManager {\r\n private domain: string;\r\n private clientId?: string;\r\n private clientSecret?: string;\r\n private redirectUri?: string;\r\n\r\n constructor(domain: string, clientId?: string, clientSecret?: string, redirectUri?: string) {\r\n this.domain = domain;\r\n this.clientId = clientId;\r\n this.clientSecret = clientSecret;\r\n this.redirectUri = redirectUri;\r\n }\r\n\r\n async exchangeCodeForToken(code: string): Promise<AccessTokenResponse> {\r\n const url = `https://${this.domain}.kommo.com/oauth2/access_token`;\r\n const response = await axios.post<AccessTokenResponse>(url, {\r\n client_id: this.clientId,\r\n client_secret: this.clientSecret,\r\n grant_type: 'authorization_code',\r\n code,\r\n redirect_uri: this.redirectUri,\r\n });\r\n return response.data;\r\n }\r\n\r\n async refreshToken(refreshToken: string): Promise<AccessTokenResponse> {\r\n const url = `https://${this.domain}.kommo.com/oauth2/access_token`;\r\n const response = await axios.post<AccessTokenResponse>(url, {\r\n client_id: this.clientId,\r\n client_secret: this.clientSecret,\r\n grant_type: 'refresh_token',\r\n refresh_token: refreshToken,\r\n });\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListLeadsParams,\r\n ListLeadsResponse,\r\n Lead,\r\n LeadWithParam,\r\n CreateLeadInput,\r\n CreateLeadsResponse,\r\n UpdateLeadInput,\r\n UpdateLeadsResponse,\r\n UpdateSingleLeadInput,\r\n CreateComplexLeadInput,\r\n CreateComplexLeadsResponse,\r\n LossReason,\r\n ListLossReasonsResponse,\r\n} from './types';\r\n\r\nexport class LeadsResource extends BaseResource {\r\n \r\n async list(params?: ListLeadsParams): Promise<ListLeadsResponse> {\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n if (params.query) queryParams.query = params.query;\r\n\r\n // Filtros\r\n const filter: any = {};\r\n \r\n const arrayFilters = ['id', 'name', 'created_by', 'updated_by', 'responsible_user_id', 'pipeline_id'] as const;\r\n arrayFilters.forEach(k => {\r\n const key = `filter_${k}` as keyof ListLeadsParams;\r\n if (params[key] !== undefined) filter[k] = params[key];\r\n });\r\n\r\n if (params.filter_price !== undefined) filter.price = params.filter_price;\r\n\r\n // Range Filters (from/to)\r\n const rangeFilters = ['created_at', 'updated_at', 'closed_at', 'closest_task_at'];\r\n rangeFilters.forEach(k => {\r\n const fromKey = `filter_${k}_from` as keyof ListLeadsParams;\r\n const toKey = `filter_${k}_to` as keyof ListLeadsParams;\r\n \r\n if (params[fromKey] !== undefined || params[toKey] !== undefined) {\r\n filter[k] = {};\r\n if (params[fromKey] !== undefined) filter[k].from = params[fromKey];\r\n if (params[toKey] !== undefined) filter[k].to = params[toKey];\r\n }\r\n });\r\n\r\n if (params.filter_statuses && params.filter_statuses.length > 0) {\r\n filter.statuses = params.filter_statuses;\r\n }\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n\r\n // Ordenação\r\n const order: any = {};\r\n if (params.order_created_at) order.created_at = params.order_created_at;\r\n if (params.order_updated_at) order.updated_at = params.order_updated_at;\r\n if (params.order_id) order.id = params.order_id;\r\n \r\n if (Object.keys(order).length > 0) {\r\n queryParams.order = order;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n\r\n const response = await this.client.get<ListLeadsResponse>(`/api/v4/leads${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(id: number, params?: { with?: LeadWithParam[] | string }): Promise<Lead | null> {\r\n try {\r\n const queryParams: any = {};\r\n if (params?.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n \r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n\r\n const response = await this.client.get<Lead>(`/api/v4/leads/${id}${qsStr}`);\r\n if (response.status === 204 || !response.data || (response.data as unknown) === '') {\r\n return null; // AAPI resolve como NO CONTENT corretamente via interceptador caso seja vazio\r\n }\r\n return response.data;\r\n } catch (error: any) {\r\n if (error.response && error.response.status === 204) {\r\n return null;\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n async create(items: CreateLeadInput | CreateLeadInput[]): Promise<CreateLeadsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n return this.postIdempotent<CreateLeadsResponse, CreateLeadInput>('/api/v4/leads', payload);\r\n }\r\n\r\n async update(items: UpdateLeadInput | UpdateLeadInput[]): Promise<UpdateLeadsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateLeadsResponse>('/api/v4/leads', payload);\r\n return response.data;\r\n }\r\n\r\n async updateOne(id: number, payload: UpdateSingleLeadInput): Promise<UpdateLeadsResponse | Lead> {\r\n const response = await this.client.patch<UpdateLeadsResponse | Lead>(`/api/v4/leads/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n async createComplex(items: CreateComplexLeadInput | CreateComplexLeadInput[]): Promise<CreateComplexLeadsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n return this.postIdempotent<CreateComplexLeadsResponse, CreateComplexLeadInput>('/api/v4/leads/complex', payload);\r\n }\r\n\r\n async listLossReasons(): Promise<ListLossReasonsResponse> {\r\n const response = await this.client.get<ListLossReasonsResponse>('/api/v4/leads/loss_reasons');\r\n return response.data;\r\n }\r\n\r\n async getLossReasonById(id: number): Promise<LossReason> {\r\n const response = await this.client.get<LossReason>(`/api/v4/leads/loss_reasons/${id}`);\r\n return response.data;\r\n }\r\n}\r\n","import { randomUUID } from 'crypto';\r\n\r\n/**\r\n * Garante um request_id no item, gerando um se ausente.\r\n * A Kommo usa request_id para deduplicar reenvios (ex.: em /leads/complex, retorna `merged: true`),\r\n * o que torna seguro reexecutar a mesma criação após uma falha de rede (ex.: \"socket hang up\").\r\n */\r\nexport function ensureRequestId<T extends { request_id?: string }>(item: T): T {\r\n if (item.request_id) return item;\r\n return { ...item, request_id: randomUUID() };\r\n}\r\n","import { AxiosInstance } from 'axios';\r\nimport { RetryableAxiosRequestConfig } from './http/retry';\r\nimport { ensureRequestId } from './utils/idempotency';\r\n\r\nexport abstract class BaseResource {\r\n protected client: AxiosInstance;\r\n\r\n constructor(client: AxiosInstance) {\r\n this.client = client;\r\n }\r\n\r\n /**\r\n * POST de criação em lote marcado como seguro para retry: cada item recebe um\r\n * request_id (se ainda não tiver um) para que a Kommo deduplique reenvios após\r\n * falhas transitórias de rede, e a requisição fica elegível ao retry automático.\r\n */\r\n protected async postIdempotent<TResponse, TItem extends { request_id?: string }>(\r\n url: string,\r\n items: TItem[]\r\n ): Promise<TResponse> {\r\n const payload = items.map(ensureRequestId);\r\n const config: RetryableAxiosRequestConfig = { _idempotentRetry: true };\r\n const response = await this.client.post<TResponse>(url, payload, config);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListContactsParams,\r\n ListContactsResponse,\r\n Contact,\r\n ContactWithParam,\r\n CreateContactInput,\r\n CreateContactsResponse,\r\n UpdateContactInput,\r\n UpdateContactsResponse,\r\n UpdateSingleContactInput,\r\n} from './types';\r\n\r\nexport class ContactsResource extends BaseResource {\r\n \r\n async list(params?: ListContactsParams): Promise<ListContactsResponse> {\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n if (params.query) queryParams.query = params.query;\r\n\r\n // Filtros\r\n const filter: any = {};\r\n \r\n const arrayFilters = ['id', 'name', 'created_by', 'updated_by', 'responsible_user_id'] as const;\r\n arrayFilters.forEach(k => {\r\n const key = `filter_${k}` as keyof ListContactsParams;\r\n if (params[key] !== undefined) filter[k] = params[key];\r\n });\r\n\r\n // Range Filters (from/to)\r\n const rangeFilters = ['created_at', 'updated_at', 'closest_task_at'];\r\n rangeFilters.forEach(k => {\r\n const fromKey = `filter_${k}_from` as keyof ListContactsParams;\r\n const toKey = `filter_${k}_to` as keyof ListContactsParams;\r\n \r\n if (params[fromKey] !== undefined || params[toKey] !== undefined) {\r\n filter[k] = {};\r\n if (params[fromKey] !== undefined) filter[k].from = params[fromKey];\r\n if (params[toKey] !== undefined) filter[k].to = params[toKey];\r\n }\r\n });\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n\r\n // Ordenação\r\n const order: any = {};\r\n if (params.order_updated_at) order.updated_at = params.order_updated_at;\r\n if (params.order_id) order.id = params.order_id;\r\n \r\n if (Object.keys(order).length > 0) {\r\n queryParams.order = order;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n\r\n const response = await this.client.get<ListContactsResponse>(`/api/v4/contacts${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(\r\n id: number,\r\n params?: { with?: ContactWithParam[] | string }\r\n ): Promise<Contact | null> {\r\n try {\r\n const queryParams: any = {};\r\n if (params?.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n \r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n\r\n const response = await this.client.get<Contact>(`/api/v4/contacts/${id}${qsStr}`);\r\n if (response.status === 204 || !response.data || (response.data as unknown) === '') {\r\n return null;\r\n }\r\n return response.data;\r\n } catch (error: any) {\r\n if (error.response && error.response.status === 204) {\r\n return null;\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n async create(items: CreateContactInput | CreateContactInput[]): Promise<CreateContactsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n return this.postIdempotent<CreateContactsResponse, CreateContactInput>('/api/v4/contacts', payload);\r\n }\r\n\r\n async update(items: UpdateContactInput | UpdateContactInput[]): Promise<UpdateContactsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateContactsResponse>('/api/v4/contacts', payload);\r\n return response.data;\r\n }\r\n\r\n async updateOne(id: number, payload: UpdateSingleContactInput): Promise<UpdateContactsResponse> {\r\n const response = await this.client.patch<UpdateContactsResponse>(`/api/v4/contacts/${id}`, payload);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListTasksParams,\r\n ListTasksResponse,\r\n Task,\r\n CreateTaskInput,\r\n CreateTasksResponse,\r\n UpdateTaskInput,\r\n UpdateTasksResponse,\r\n UpdateSingleTaskInput\r\n} from './types';\r\n\r\nexport class TasksResource extends BaseResource {\r\n \r\n async list(params?: ListTasksParams): Promise<ListTasksResponse> {\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n\r\n const filter: any = {};\r\n if (params.filter_responsible_user_id !== undefined) filter.responsible_user_id = params.filter_responsible_user_id;\r\n if (params.filter_is_completed !== undefined) filter.is_completed = params.filter_is_completed;\r\n if (params.filter_task_type !== undefined) filter.task_type = params.filter_task_type;\r\n if (params.filter_entity_type !== undefined) filter.entity_type = params.filter_entity_type;\r\n if (params.filter_entity_id !== undefined) filter.entity_id = params.filter_entity_id;\r\n if (params.filter_id !== undefined) filter.id = params.filter_id;\r\n if (params.filter_updated_at_from !== undefined || params.filter_updated_at_to !== undefined) {\r\n filter.updated_at = {};\r\n if (params.filter_updated_at_from !== undefined) filter.updated_at.from = params.filter_updated_at_from;\r\n if (params.filter_updated_at_to !== undefined) filter.updated_at.to = params.filter_updated_at_to;\r\n }\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n\r\n const order: any = {};\r\n if (params.order_complete_till !== undefined) order.complete_till = params.order_complete_till;\r\n if (params.order_created_at !== undefined) order.created_at = params.order_created_at;\r\n if (params.order_id !== undefined) order.id = params.order_id;\r\n if (Object.keys(order).length > 0) {\r\n queryParams.order = order;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListTasksResponse>(`/api/v4/tasks${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(id: number): Promise<Task> {\r\n const response = await this.client.get<Task>(`/api/v4/tasks/${id}`);\r\n return response.data;\r\n }\r\n\r\n async create(items: CreateTaskInput | CreateTaskInput[]): Promise<CreateTasksResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateTasksResponse>('/api/v4/tasks', payload);\r\n return response.data;\r\n }\r\n\r\n async update(items: UpdateTaskInput | UpdateTaskInput[]): Promise<UpdateTasksResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateTasksResponse>('/api/v4/tasks', payload);\r\n return response.data;\r\n }\r\n\r\n async updateOne(id: number, payload: UpdateSingleTaskInput): Promise<UpdateTasksResponse> {\r\n const response = await this.client.patch<UpdateTasksResponse>(`/api/v4/tasks/${id}`, payload);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n NoteEntityType,\r\n ListEntityNotesParams,\r\n ListNotesResponse,\r\n Note,\r\n CreateNoteInput,\r\n CreateNotesResponse,\r\n UpdateNoteInput,\r\n UpdateSingleNoteInput,\r\n UpdateNotesResponse,\r\n} from './types';\r\n\r\nexport class NotesResource extends BaseResource {\r\n \r\n private normalizeEntityType(type: NoteEntityType): string {\r\n if (type === 'contatos') return 'contacts';\r\n if (type === 'empresas') return 'companies';\r\n return type;\r\n }\r\n\r\n async listByEntity(entityType: NoteEntityType, entityId: number, params?: ListEntityNotesParams): Promise<ListNotesResponse> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n\r\n const filter: any = {};\r\n if (params.filter_id !== undefined) filter.id = params.filter_id;\r\n if (params.filter_note_type !== undefined) filter.note_type = params.filter_note_type;\r\n \r\n if (params.filter_updated_at_from !== undefined || params.filter_updated_at_to !== undefined) {\r\n filter.updated_at = {};\r\n if (params.filter_updated_at_from !== undefined) filter.updated_at.from = params.filter_updated_at_from;\r\n if (params.filter_updated_at_to !== undefined) filter.updated_at.to = params.filter_updated_at_to;\r\n }\r\n \r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n\r\n const order: any = {};\r\n if (params.order_updated_at !== undefined) order.updated_at = params.order_updated_at;\r\n if (params.order_id !== undefined) order.id = params.order_id;\r\n \r\n if (Object.keys(order).length > 0) {\r\n queryParams.order = order;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListNotesResponse>(`/api/v4/${normalType}/${entityId}/notes${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async listByEntityType(entityType: NoteEntityType, params?: ListEntityNotesParams): Promise<ListNotesResponse> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n\r\n const filter: any = {};\r\n if (params.filter_id !== undefined) filter.id = params.filter_id;\r\n if (params.filter_note_type !== undefined) filter.note_type = params.filter_note_type;\r\n \r\n if (params.filter_updated_at_from !== undefined || params.filter_updated_at_to !== undefined) {\r\n filter.updated_at = {};\r\n if (params.filter_updated_at_from !== undefined) filter.updated_at.from = params.filter_updated_at_from;\r\n if (params.filter_updated_at_to !== undefined) filter.updated_at.to = params.filter_updated_at_to;\r\n }\r\n \r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n\r\n const order: any = {};\r\n if (params.order_updated_at !== undefined) order.updated_at = params.order_updated_at;\r\n if (params.order_id !== undefined) order.id = params.order_id;\r\n \r\n if (Object.keys(order).length > 0) {\r\n queryParams.order = order;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListNotesResponse>(`/api/v4/${normalType}/notes${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(entityType: NoteEntityType, id: number): Promise<Note> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n const response = await this.client.get<Note>(`/api/v4/${normalType}/notes/${id}`);\r\n return response.data;\r\n }\r\n\r\n async create(entityType: NoteEntityType, items: CreateNoteInput | CreateNoteInput[]): Promise<CreateNotesResponse> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateNotesResponse>(`/api/v4/${normalType}/notes`, payload);\r\n return response.data;\r\n }\r\n\r\n async update(entityType: NoteEntityType, items: UpdateNoteInput | UpdateNoteInput[]): Promise<UpdateNotesResponse> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateNotesResponse>(`/api/v4/${normalType}/notes`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateOne(entityType: NoteEntityType, id: number | string, payload: UpdateSingleNoteInput): Promise<UpdateNotesResponse> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n const response = await this.client.patch<UpdateNotesResponse>(`/api/v4/${normalType}/notes/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n async pin(entityType: NoteEntityType, id: number): Promise<void> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n await this.client.post(`/api/v4/${normalType}/notes/${id}/pin`);\r\n }\r\n\r\n async unpin(entityType: NoteEntityType, id: number): Promise<void> {\r\n const normalType = this.normalizeEntityType(entityType);\r\n await this.client.post(`/api/v4/${normalType}/notes/${id}/unpin`);\r\n }\r\n}\r\n","import { BaseResource } from '../../base';\r\nimport {\r\n EntityType,\r\n ListEntityCustomFieldsResponse,\r\n EntityCustomField,\r\n CreateEntityCustomFieldInput,\r\n UpdateEntityCustomFieldInput,\r\n UpdateSingleEntityCustomFieldInput,\r\n ListListCustomFieldsResponse,\r\n ListCustomField,\r\n CreateListCustomFieldInput,\r\n UpdateListCustomFieldInput,\r\n UpdateSingleListCustomFieldInput,\r\n ListCustomFieldGroupsResponse,\r\n CustomFieldGroup,\r\n CreateCustomFieldGroupInput,\r\n UpdateCustomFieldGroupInput\r\n} from './types';\r\n\r\nexport class CustomFieldsResource extends BaseResource {\r\n\r\n // ==== CAMPOS DE ENTIDADES ====\r\n\r\n async listEntity(entityType: EntityType): Promise<ListEntityCustomFieldsResponse> {\r\n const response = await this.client.get<ListEntityCustomFieldsResponse>(`/api/v4/${entityType}/custom_fields`);\r\n return response.data;\r\n }\r\n\r\n async getEntityById(entityType: EntityType, id: number): Promise<EntityCustomField> {\r\n const response = await this.client.get<EntityCustomField>(`/api/v4/${entityType}/custom_fields/${id}`);\r\n return response.data;\r\n }\r\n\r\n async createEntity(entityType: EntityType, items: CreateEntityCustomFieldInput | CreateEntityCustomFieldInput[]): Promise<ListEntityCustomFieldsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<ListEntityCustomFieldsResponse>(`/api/v4/${entityType}/custom_fields`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateEntity(entityType: EntityType, items: UpdateEntityCustomFieldInput | UpdateEntityCustomFieldInput[]): Promise<ListEntityCustomFieldsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<ListEntityCustomFieldsResponse>(`/api/v4/${entityType}/custom_fields`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateEntityById(entityType: EntityType, id: number, payload: UpdateSingleEntityCustomFieldInput): Promise<EntityCustomField> {\r\n const response = await this.client.patch<EntityCustomField>(`/api/v4/${entityType}/custom_fields/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n async deleteEntity(entityType: EntityType, id: number): Promise<void> {\r\n await this.client.delete(`/api/v4/${entityType}/custom_fields/${id}`);\r\n }\r\n\r\n // ==== CAMPOS DE LISTAS ====\r\n\r\n async listList(listId: number): Promise<ListListCustomFieldsResponse> {\r\n const response = await this.client.get<ListListCustomFieldsResponse>(`/api/v4/catalogs/${listId}/custom_fields`);\r\n return response.data;\r\n }\r\n\r\n async getListById(listId: number, customFieldId: number): Promise<ListCustomField | EntityCustomField> {\r\n const response = await this.client.get<ListCustomField | EntityCustomField>(`/api/v4/catalogs/${listId}/custom_fields/${customFieldId}`);\r\n return response.data;\r\n }\r\n\r\n async createList(listId: number, items: CreateListCustomFieldInput | CreateListCustomFieldInput[]): Promise<ListListCustomFieldsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<ListListCustomFieldsResponse>(`/api/v4/catalogs/${listId}/custom_fields`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateList(listId: number, items: UpdateListCustomFieldInput | UpdateListCustomFieldInput[]): Promise<ListListCustomFieldsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<ListListCustomFieldsResponse>(`/api/v4/catalogs/${listId}/custom_fields`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateListById(listId: number, customFieldId: number, payload: UpdateSingleListCustomFieldInput): Promise<ListCustomField> {\r\n const response = await this.client.patch<ListCustomField>(`/api/v4/catalogs/${listId}/custom_fields/${customFieldId}`, payload);\r\n return response.data;\r\n }\r\n\r\n async deleteList(listId: number, id: number): Promise<void> {\r\n await this.client.delete(`/api/v4/catalogs/${listId}/custom_fields/${id}`);\r\n }\r\n}\r\n\r\nexport class CustomFieldGroupsResource extends BaseResource {\r\n\r\n async list(entityType: EntityType): Promise<ListCustomFieldGroupsResponse> {\r\n const response = await this.client.get<ListCustomFieldGroupsResponse>(`/api/v4/${entityType}/custom_fields/groups`);\r\n return response.data;\r\n }\r\n\r\n async getById(entityType: EntityType, id: number): Promise<CustomFieldGroup> {\r\n const response = await this.client.get<CustomFieldGroup>(`/api/v4/${entityType}/custom_fields/groups/${id}`);\r\n return response.data;\r\n }\r\n\r\n async create(entityType: EntityType, items: CreateCustomFieldGroupInput | CreateCustomFieldGroupInput[]): Promise<ListCustomFieldGroupsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<ListCustomFieldGroupsResponse>(`/api/v4/${entityType}/custom_fields/groups`, payload);\r\n return response.data;\r\n }\r\n\r\n async update(entityType: EntityType, id: number, payload: UpdateCustomFieldGroupInput): Promise<CustomFieldGroup> {\r\n const response = await this.client.patch<CustomFieldGroup>(`/api/v4/${entityType}/custom_fields/groups/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n async delete(entityType: EntityType, id: number): Promise<void> {\r\n await this.client.delete(`/api/v4/${entityType}/custom_fields/groups/${id}`);\r\n }\r\n\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListUnsortedLeadsParams,\r\n ListUnsortedLeadsResponse,\r\n UnsortedLead,\r\n CreateSipUnsortedLeadInput,\r\n CreateFormUnsortedLeadInput,\r\n CreateUnsortedLeadsResponse,\r\n UnsortedDecisionResponse,\r\n LinkUnsortedLeadResponse,\r\n UnsortedSummaryParams,\r\n UnsortedSummaryResponse,\r\n} from './types';\r\n\r\nexport class UnsortedResource extends BaseResource {\r\n \r\n async list(params?: ListUnsortedLeadsParams): Promise<ListUnsortedLeadsResponse> {\r\n const query = qs.stringify(\r\n {\r\n page: params?.page,\r\n limit: params?.limit,\r\n filter: {\r\n uid: params?.uid,\r\n category: params?.category,\r\n pipeline_id: params?.pipeline_id,\r\n },\r\n order: {\r\n created_at: params?.order_created_at,\r\n },\r\n },\r\n { skipNulls: true, arrayFormat: 'brackets' }\r\n );\r\n\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListUnsortedLeadsResponse>(`/api/v4/leads/unsorted${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getByUid(uid: string): Promise<UnsortedLead> {\r\n const response = await this.client.get<UnsortedLead>(`/api/v4/leads/unsorted/${uid}`);\r\n return response.data;\r\n }\r\n\r\n async createSip(\r\n items: CreateSipUnsortedLeadInput | CreateSipUnsortedLeadInput[]\r\n ): Promise<CreateUnsortedLeadsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateUnsortedLeadsResponse>(\r\n '/api/v4/leads/unsorted/sip',\r\n payload\r\n );\r\n return response.data;\r\n }\r\n\r\n async createForms(\r\n items: CreateFormUnsortedLeadInput | CreateFormUnsortedLeadInput[]\r\n ): Promise<CreateUnsortedLeadsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateUnsortedLeadsResponse>(\r\n '/api/v4/leads/unsorted/forms',\r\n payload\r\n );\r\n return response.data;\r\n }\r\n\r\n async accept(\r\n uid: string,\r\n payload?: { user_id?: number; status_id?: number }\r\n ): Promise<UnsortedDecisionResponse> {\r\n const response = await this.client.post<UnsortedDecisionResponse>(\r\n `/api/v4/leads/unsorted/${uid}/accept`,\r\n payload || {}\r\n );\r\n return response.data;\r\n }\r\n\r\n async decline(\r\n uid: string,\r\n payload?: { user_id?: number }\r\n ): Promise<UnsortedDecisionResponse> {\r\n const config = payload ? { data: payload } : {};\r\n const response = await this.client.delete<UnsortedDecisionResponse>(\r\n `/api/v4/leads/unsorted/${uid}/decline`,\r\n config\r\n );\r\n return response.data;\r\n }\r\n\r\n async link(\r\n uid: string,\r\n payload: {\r\n link: {\r\n user_id?: string | number;\r\n entity_id: string | number;\r\n entity_type: 'leads' | string;\r\n metadata?: { contact_id?: number };\r\n };\r\n }\r\n ): Promise<LinkUnsortedLeadResponse> {\r\n const response = await this.client.post<LinkUnsortedLeadResponse>(\r\n `/api/v4/leads/unsorted/${uid}/link`,\r\n payload\r\n );\r\n return response.data;\r\n }\r\n\r\n async summary(params?: UnsortedSummaryParams): Promise<UnsortedSummaryResponse> {\r\n const queryParams: any = {};\r\n if (params?.uid) queryParams.uid = params.uid;\r\n if (params?.pipeline_id) queryParams.pipeline_id = params.pipeline_id;\r\n\r\n if (params?.created_at) {\r\n queryParams.created_at = params.created_at;\r\n } else if (params?.created_at_from || params?.created_at_to) {\r\n queryParams.created_at = {};\r\n if (params.created_at_from) queryParams.created_at.from = params.created_at_from;\r\n if (params.created_at_to) queryParams.created_at.to = params.created_at_to;\r\n }\r\n\r\n const query = qs.stringify(\r\n { filter: queryParams },\r\n { skipNulls: true, arrayFormat: 'brackets' }\r\n );\r\n\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<UnsortedSummaryResponse>(\r\n `/api/v4/leads/unsorted/summary${qsStr}`\r\n );\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n Pipeline,\r\n PipelineStatus,\r\n ListPipelinesResponse,\r\n CreatePipelineInput,\r\n CreatePipelinesResponse,\r\n UpdatePipelineInput,\r\n ListPipelineStatusesResponse,\r\n CreateStatusInput,\r\n CreateStatusesResponse,\r\n UpdateStatusInput,\r\n StatusDescription,\r\n} from './types';\r\n\r\nexport class PipelinesResource extends BaseResource {\r\n \r\n // PIPELINES\r\n\r\n async list(): Promise<ListPipelinesResponse> {\r\n const response = await this.client.get<ListPipelinesResponse>('/api/v4/leads/pipelines');\r\n return response.data;\r\n }\r\n\r\n async getById(id: number): Promise<Pipeline> {\r\n const response = await this.client.get<Pipeline>(`/api/v4/leads/pipelines/${id}`);\r\n return response.data;\r\n }\r\n\r\n async create(items: CreatePipelineInput | CreatePipelineInput[]): Promise<CreatePipelinesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreatePipelinesResponse>('/api/v4/leads/pipelines', payload);\r\n return response.data;\r\n }\r\n\r\n async update(id: number, payload: UpdatePipelineInput): Promise<Pipeline> {\r\n const response = await this.client.patch<Pipeline>(`/api/v4/leads/pipelines/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n async delete(id: number): Promise<void> {\r\n await this.client.delete(`/api/v4/leads/pipelines/${id}`);\r\n }\r\n\r\n // STATUSES (ETAPAS)\r\n\r\n async listStatuses(pipelineId: number, params?: { with?: 'descriptions' }): Promise<ListPipelineStatusesResponse> {\r\n const query = qs.stringify({ with: params?.with }, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListPipelineStatusesResponse>(`/api/v4/leads/pipelines/${pipelineId}/statuses${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getStatusById(pipelineId: number, id: number | string, params?: { with?: 'descriptions' }): Promise<PipelineStatus> {\r\n const query = qs.stringify({ with: params?.with }, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<PipelineStatus>(`/api/v4/leads/pipelines/${pipelineId}/statuses/${id}${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async createStatuses(pipelineId: number, items: CreateStatusInput | CreateStatusInput[]): Promise<CreateStatusesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n \r\n // Validate descriptions locally before sending payload\r\n payload.forEach(item => this.validateStatusDescriptions(item.descriptions));\r\n\r\n const response = await this.client.post<CreateStatusesResponse>(`/api/v4/leads/pipelines/${pipelineId}/statuses`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateStatus(pipelineId: number, id: number | string, payload: UpdateStatusInput): Promise<PipelineStatus> {\r\n this.validateStatusDescriptions(payload.descriptions);\r\n\r\n const response = await this.client.patch<PipelineStatus>(`/api/v4/leads/pipelines/${pipelineId}/statuses/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n async deleteStatus(pipelineId: number, id: number | string): Promise<void> {\r\n await this.client.delete(`/api/v4/leads/pipelines/${pipelineId}/statuses/${id}`);\r\n }\r\n\r\n private validateStatusDescriptions(descriptions?: StatusDescription[]) {\r\n if (!descriptions) return;\r\n\r\n if (descriptions.length > 3) {\r\n throw new Error('A etapa aceita no máximo 3 descrições.');\r\n }\r\n\r\n const levels = descriptions.map((d) => d.level);\r\n const uniqueLevels = new Set(levels);\r\n\r\n if (levels.length !== uniqueLevels.size) {\r\n throw new Error('Não é permitido repetir level em descriptions.');\r\n }\r\n\r\n for (const item of descriptions) {\r\n if (item.description.length > 1000) {\r\n throw new Error('A descrição da etapa pode ter no máximo 1000 caracteres.');\r\n }\r\n }\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListCompaniesParams,\r\n ListCompaniesResponse,\r\n Company,\r\n CompanyWithParam,\r\n CreateCompanyInput,\r\n CreateCompaniesResponse,\r\n UpdateCompanyInput,\r\n UpdateCompaniesResponse,\r\n UpdateSingleCompanyInput,\r\n} from './types';\r\n\r\nexport class CompaniesResource extends BaseResource {\r\n \r\n async list(params?: ListCompaniesParams): Promise<ListCompaniesResponse> {\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n if (params.query) queryParams.query = params.query;\r\n\r\n // Filtros\r\n const filter: any = {};\r\n \r\n const arrayFilters = ['id', 'name', 'created_by', 'updated_by', 'responsible_user_id'] as const;\r\n arrayFilters.forEach(k => {\r\n const key = `filter_${k}` as keyof ListCompaniesParams;\r\n if (params[key] !== undefined) filter[k] = params[key];\r\n });\r\n\r\n // Range Filters (from/to)\r\n const rangeFilters = ['created_at', 'updated_at', 'closest_task_at'];\r\n rangeFilters.forEach(k => {\r\n const fromKey = `filter_${k}_from` as keyof ListCompaniesParams;\r\n const toKey = `filter_${k}_to` as keyof ListCompaniesParams;\r\n \r\n if (params[fromKey] !== undefined || params[toKey] !== undefined) {\r\n filter[k] = {};\r\n if (params[fromKey] !== undefined) filter[k].from = params[fromKey];\r\n if (params[toKey] !== undefined) filter[k].to = params[toKey];\r\n }\r\n });\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n\r\n // Ordenação\r\n const order: any = {};\r\n if (params.order_updated_at) order.updated_at = params.order_updated_at;\r\n if (params.order_id) order.id = params.order_id;\r\n \r\n if (Object.keys(order).length > 0) {\r\n queryParams.order = order;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n\r\n const response = await this.client.get<ListCompaniesResponse>(`/api/v4/companies${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(\r\n id: number,\r\n params?: { with?: CompanyWithParam[] | string }\r\n ): Promise<Company | null> {\r\n try {\r\n const queryParams: any = {};\r\n if (params?.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n \r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n\r\n const response = await this.client.get<Company>(`/api/v4/companies/${id}${qsStr}`);\r\n if (response.status === 204 || !response.data || (response.data as unknown) === '') {\r\n return null;\r\n }\r\n return response.data;\r\n } catch (error: any) {\r\n if (error.response && error.response.status === 204) {\r\n return null;\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n async create(items: CreateCompanyInput | CreateCompanyInput[]): Promise<CreateCompaniesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n return this.postIdempotent<CreateCompaniesResponse, CreateCompanyInput>('/api/v4/companies', payload);\r\n }\r\n\r\n async update(items: UpdateCompanyInput | UpdateCompanyInput[]): Promise<UpdateCompaniesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateCompaniesResponse>('/api/v4/companies', payload);\r\n return response.data;\r\n }\r\n\r\n async updateOne(id: number, payload: UpdateSingleCompanyInput): Promise<UpdateCompaniesResponse> {\r\n const response = await this.client.patch<UpdateCompaniesResponse>(`/api/v4/companies/${id}`, payload);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListCatalogsParams,\r\n ListCatalogsResponse,\r\n Catalog,\r\n CreateCatalogInput,\r\n CreateCatalogsResponse,\r\n UpdateCatalogInput,\r\n UpdateCatalogsResponse,\r\n UpdateSingleCatalogInput,\r\n ListCatalogElementsParams,\r\n ListCatalogElementsResponse,\r\n CatalogElement,\r\n CreateCatalogElementInput,\r\n CreateCatalogElementsResponse,\r\n UpdateCatalogElementInput,\r\n UpdateCatalogElementsResponse,\r\n UpdateSingleCatalogElementInput,\r\n} from './types';\r\n\r\nexport class CatalogsResource extends BaseResource {\r\n \r\n // ================= CATÁLOGOS (LISTAS) =================\r\n \r\n async list(params?: ListCatalogsParams): Promise<ListCatalogsResponse> {\r\n const query = qs.stringify({ page: params?.page, limit: params?.limit }, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListCatalogsResponse>(`/api/v4/catalogs${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(id: number): Promise<Catalog> {\r\n const response = await this.client.get<Catalog>(`/api/v4/catalogs/${id}`);\r\n return response.data;\r\n }\r\n\r\n async create(items: CreateCatalogInput | CreateCatalogInput[]): Promise<CreateCatalogsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateCatalogsResponse>('/api/v4/catalogs', payload);\r\n return response.data;\r\n }\r\n\r\n async update(items: UpdateCatalogInput | UpdateCatalogInput[]): Promise<UpdateCatalogsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateCatalogsResponse>('/api/v4/catalogs', payload);\r\n return response.data;\r\n }\r\n\r\n async updateOne(id: number, payload: UpdateSingleCatalogInput): Promise<Catalog> {\r\n const response = await this.client.patch<Catalog>(`/api/v4/catalogs/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n // ================= ELEMENTOS DO CATÁLOGO =================\r\n\r\n async listElements(listId: number, params?: ListCatalogElementsParams): Promise<ListCatalogElementsResponse> {\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n if (params.query) queryParams.query = params.query;\r\n \r\n const filter: any = {};\r\n if (params.filter_id !== undefined) filter.id = params.filter_id;\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListCatalogElementsResponse>(`/api/v4/catalogs/${listId}/elements${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getElementById(listId: number, elementId: number): Promise<CatalogElement> {\r\n const response = await this.client.get<CatalogElement>(`/api/v4/catalogs/${listId}/elements/${elementId}`);\r\n return response.data;\r\n }\r\n\r\n async createElements(listId: number, items: CreateCatalogElementInput | CreateCatalogElementInput[]): Promise<CreateCatalogElementsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateCatalogElementsResponse>(`/api/v4/catalogs/${listId}/elements`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateElements(listId: number, items: UpdateCatalogElementInput | UpdateCatalogElementInput[]): Promise<UpdateCatalogElementsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateCatalogElementsResponse>(`/api/v4/catalogs/${listId}/elements`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateElementById(listId: number, elementId: number, payload: UpdateSingleCatalogElementInput): Promise<CatalogElement> {\r\n const response = await this.client.patch<CatalogElement>(`/api/v4/catalogs/${listId}/elements/${elementId}`, payload);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListUsersParams,\r\n ListUsersResponse,\r\n User,\r\n CreateUserInput,\r\n ListRolesParams,\r\n ListRolesResponse,\r\n Role,\r\n CreateRoleInput,\r\n UpdateRoleInput,\r\n} from './types';\r\n\r\nexport class UsersResource extends BaseResource {\r\n \r\n async list(params?: ListUsersParams): Promise<ListUsersResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n if (params.with) queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListUsersResponse>(`/api/v4/users${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(id: number, params?: { with?: import('./types').UserWithParam[] | string }): Promise<User> {\r\n const queryParams: any = {};\r\n if (params?.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<User>(`/api/v4/users/${id}${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async create(items: CreateUserInput | CreateUserInput[]): Promise<ListUsersResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n if (payload.length > 10) {\r\n throw new Error('A API da Kommo permite criar no máximo 10 usuários por requisição.');\r\n }\r\n const response = await this.client.post<ListUsersResponse>('/api/v4/users', payload);\r\n return response.data;\r\n }\r\n}\r\n\r\nexport class RolesResource extends BaseResource {\r\n \r\n async list(params?: ListRolesParams): Promise<ListRolesResponse> {\r\n const queryParams: any = {};\r\n if (params?.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListRolesResponse>(`/api/v4/roles${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(id: number, params?: { with?: import('./types').RoleWithParam[] | string }): Promise<Role> {\r\n const queryParams: any = {};\r\n if (params?.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<Role>(`/api/v4/roles/${id}${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async create(items: CreateRoleInput | CreateRoleInput[]): Promise<ListRolesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<ListRolesResponse>('/api/v4/roles', payload);\r\n return response.data;\r\n }\r\n\r\n async update(items: UpdateRoleInput | UpdateRoleInput[]): Promise<ListRolesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<ListRolesResponse>('/api/v4/roles', payload);\r\n return response.data;\r\n }\r\n\r\n async delete(id: number): Promise<void> {\r\n await this.client.delete(`/api/v4/roles/${id}`);\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListEventsParams,\r\n ListEventsResponse,\r\n Event,\r\n ListEventTypesParams,\r\n ListEventTypesResponse,\r\n} from './types';\r\n\r\nexport class EventsResource extends BaseResource {\r\n \r\n async list(params?: ListEventsParams): Promise<ListEventsResponse> {\r\n const queryParams: any = {};\r\n\r\n if (params) {\r\n if (params.page) queryParams.page = params.page;\r\n if (params.limit) queryParams.limit = params.limit;\r\n if (params.with) queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n\r\n const filter: any = {};\r\n if (params.filter_id !== undefined) filter.id = params.filter_id;\r\n if (params.filter_created_by !== undefined) filter.created_by = params.filter_created_by;\r\n if (params.filter_entity !== undefined) filter.entity = params.filter_entity;\r\n \r\n // Validação local: entity_id só pode ser usado se entity for único\r\n if (params.filter_entity_id !== undefined) {\r\n if (!params.filter_entity || (Array.isArray(params.filter_entity) && params.filter_entity.length !== 1)) {\r\n throw new Error(\"O filtro de 'entity_id' só pode ser passado quando houver uma única 'entity' informada.\");\r\n }\r\n filter.entity_id = params.filter_entity_id;\r\n }\r\n \r\n if (params.filter_type !== undefined) filter.type = params.filter_type;\r\n\r\n if (params.filter_created_at_from !== undefined || params.filter_created_at_to !== undefined) {\r\n filter.created_at = {};\r\n if (params.filter_created_at_from !== undefined) filter.created_at.from = params.filter_created_at_from;\r\n if (params.filter_created_at_to !== undefined) filter.created_at.to = params.filter_created_at_to;\r\n }\r\n\r\n if (params.filter_value_before !== undefined) filter.value_before = params.filter_value_before;\r\n if (params.filter_value_after !== undefined) filter.value_after = params.filter_value_after;\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListEventsResponse>(`/api/v4/events${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getById(id: string, params?: { with?: import('./types').EventWithParam[] | string }): Promise<Event> {\r\n const queryParams: any = {};\r\n if (params?.with) {\r\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<Event>(`/api/v4/events/${id}${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async listTypes(params?: ListEventTypesParams): Promise<ListEventTypesResponse> {\r\n const queryParams: any = {};\r\n if (params?.language_code) {\r\n queryParams.language_code = params.language_code;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListEventTypesResponse>(`/api/v4/events/types${qsStr}`);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n TagEntityType,\r\n ListTagsParams,\r\n ListTagsResponse,\r\n CreateTagInput,\r\n CreateTagsResponse,\r\n UpdateEntityTagsInput,\r\n UpdateEntityTagsBatchResponse,\r\n UpdateSingleEntityTagsInput,\r\n UpdateEntityTagsSingleResponse\r\n} from './types';\r\n\r\nexport class TagsResource extends BaseResource {\r\n async list(entityType: TagEntityType, params?: ListTagsParams): Promise<ListTagsResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n if (params.page !== undefined) queryParams.page = params.page;\r\n if (params.limit !== undefined) queryParams.limit = params.limit;\r\n if (params.query !== undefined) queryParams.query = params.query;\r\n \r\n const filter: any = {};\r\n if (params.filter_id !== undefined) filter.id = params.filter_id;\r\n if (params.filter_name !== undefined) filter.name = params.filter_name;\r\n \r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListTagsResponse>(`/api/v4/${entityType}/tags${qsStr}`);\r\n \r\n // Tratando o 204\r\n if (response.status === 204 || !response.data) {\r\n return { _page: 1, _embedded: { tags: [] } };\r\n }\r\n return response.data;\r\n }\r\n\r\n async create(entityType: TagEntityType, items: CreateTagInput | CreateTagInput[]): Promise<CreateTagsResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n \r\n // Validate that only leads support colors\r\n if (entityType !== 'leads') {\r\n const hasColor = payload.some(p => p.color !== undefined);\r\n if (hasColor) {\r\n console.warn(`[TagsResource] A documentação indica que propriedades de cor na tag só são aceitas para a entidade 'leads'. Sua requisição foi feita para '${entityType}' com cor.`);\r\n }\r\n }\r\n\r\n const response = await this.client.post<CreateTagsResponse>(`/api/v4/${entityType}/tags`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateForMany(entityType: TagEntityType, items: UpdateEntityTagsInput | UpdateEntityTagsInput[]): Promise<UpdateEntityTagsBatchResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.patch<UpdateEntityTagsBatchResponse>(`/api/v4/${entityType}`, payload);\r\n return response.data;\r\n }\r\n\r\n async updateForOne(entityType: TagEntityType, id: number, payload: UpdateSingleEntityTagsInput): Promise<UpdateEntityTagsSingleResponse> {\r\n const response = await this.client.patch<UpdateEntityTagsSingleResponse>(`/api/v4/${entityType}/${id}`, payload);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n LinkSourceEntityType,\r\n ListEntityLinksParams,\r\n ListEntityLinksResponse,\r\n CreateEntityLinkInput,\r\n CreateEntityLinksResponse,\r\n DeleteEntityLinkInput\r\n} from './types';\r\n\r\nexport class LinksResource extends BaseResource {\r\n async list(entity: LinkSourceEntityType, entityId: number, params?: ListEntityLinksParams): Promise<ListEntityLinksResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n const filter: any = {};\r\n \r\n // Validação combinada: filter_to_entity_id e filter_to_entity_type devem ser usados juntos\r\n const hasEntityId = params.filter_to_entity_id !== undefined;\r\n const hasEntityType = params.filter_to_entity_type !== undefined;\r\n\r\n if (hasEntityId !== hasEntityType) {\r\n throw new Error(\"A API exige que 'filter_to_entity_id' e 'filter_to_entity_type' sejam fornecidos juntos no filtro de vínculos.\");\r\n }\r\n\r\n if (hasEntityId) filter.to_entity_id = params.filter_to_entity_id;\r\n if (hasEntityType) filter.to_entity_type = params.filter_to_entity_type;\r\n \r\n if (params.filter_to_catalog_id !== undefined) filter.to_catalog_id = params.filter_to_catalog_id;\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListEntityLinksResponse>(`/api/v4/${entity}/${entityId}/links${qsStr}`);\r\n \r\n return response.data;\r\n }\r\n\r\n async link(entity: LinkSourceEntityType, entityId: number, items: CreateEntityLinkInput | CreateEntityLinkInput[]): Promise<CreateEntityLinksResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateEntityLinksResponse>(`/api/v4/${entity}/${entityId}/link`, payload);\r\n return response.data;\r\n }\r\n\r\n async unlink(entity: LinkSourceEntityType, entityId: number, items: DeleteEntityLinkInput | DeleteEntityLinkInput[]): Promise<void> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n await this.client.post(`/api/v4/${entity}/${entityId}/unlink`, payload);\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListSalesbotsParams,\r\n ListSalesbotsResponse,\r\n RunSalesbotInput,\r\n RunManySalesbotsItem,\r\n StopSalesbotInput,\r\n SalesbotContinueBotType,\r\n SalesbotContinueInput,\r\n} from './types';\r\n\r\nexport class SalesbotsResource extends BaseResource {\r\n async list(params?: ListSalesbotsParams): Promise<ListSalesbotsResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n if (params.page !== undefined) queryParams.page = params.page;\r\n if (params.limit !== undefined) queryParams.limit = params.limit;\r\n if (params.with !== undefined) queryParams.with = params.with;\r\n \r\n const filter: any = {};\r\n if (params.filter_id !== undefined) filter.id = params.filter_id;\r\n if (params.filter_type_functionality !== undefined) filter.type_functionality = params.filter_type_functionality;\r\n \r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListSalesbotsResponse>(`/api/v4/bots${qsStr}`);\r\n \r\n if (response.status === 204 || !response.data) {\r\n return { _embedded: { items: [] } };\r\n }\r\n return response.data;\r\n }\r\n\r\n async run(botId: number | string, payload: RunSalesbotInput): Promise<void> {\r\n await this.client.post(`/api/v4/bots/${botId}/run`, payload);\r\n }\r\n\r\n async runMany(items: RunManySalesbotsItem | RunManySalesbotsItem[]): Promise<void> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n if (payload.length > 100) {\r\n throw new Error(`A API da Kommo limita o 'runMany' a no máximo 100 salesbots por requisição. Você enviou ${payload.length}.`);\r\n }\r\n await this.client.post(`/api/v4/bots/run`, payload);\r\n }\r\n\r\n async stop(botId: number, payload: StopSalesbotInput): Promise<void> {\r\n await this.client.post(`/api/v4/bots/${botId}/stop`, payload);\r\n }\r\n\r\n async continueWidgetExecution(bot: SalesbotContinueBotType, botId: number, continueId: number, payload: SalesbotContinueInput): Promise<void> {\r\n if (payload.execute_handlers) {\r\n if (payload.execute_handlers.length > 10) {\r\n throw new Error(`A API da Kommo limita 'execute_handlers' a no máximo 10 itens. Você enviou ${payload.execute_handlers.length}.`);\r\n }\r\n\r\n for (const handler of payload.execute_handlers) {\r\n if (handler.handler === 'show') {\r\n if (handler.params.value && handler.params.value.length > 80) {\r\n console.warn(`[SalesbotResource] O campo 'value' em um handler 'show' tem ${handler.params.value.length} caracteres. A documentação aconselha no máximo 80.`);\r\n }\r\n if ('buttons' in handler.params && handler.params.buttons && handler.params.buttons.length > 25) {\r\n throw new Error(`A API da Kommo não permite mais do que 25 botões. Você tentou enviar ${handler.params.buttons.length}.`);\r\n }\r\n }\r\n }\r\n }\r\n\r\n await this.client.post(`/api/v4/${bot}/${botId}/continue/${continueId}`, payload);\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListSourcesResponse,\r\n Source,\r\n CreateSourceInput,\r\n CreateSourcesResponse,\r\n UpdateSourceInput,\r\n UpdateSourceBatchInput,\r\n UpdateSourcesResponse,\r\n DeleteSourceBatchInput,\r\n ListWebsiteButtonsParams,\r\n ListWebsiteButtonsResponse,\r\n WebsiteButton,\r\n CreateWebsiteButtonInput,\r\n CreateWebsiteButtonResponse,\r\n UpdateWebsiteButtonInput,\r\n} from './types';\r\n\r\nexport class SourcesResource extends BaseResource {\r\n async list(): Promise<ListSourcesResponse> {\r\n const response = await this.client.get<ListSourcesResponse>('/api/v4/sources');\r\n return response.data;\r\n }\r\n\r\n async getById(id: number): Promise<Source> {\r\n const response = await this.client.get<Source>(`/api/v4/sources/${id}`);\r\n return response.data;\r\n }\r\n\r\n async create(items: CreateSourceInput | CreateSourceInput[]): Promise<CreateSourcesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n if (payload.length > 100) {\r\n throw new Error(`A API da Kommo limita a criação a no máximo 100 fontes por vez.`);\r\n }\r\n const response = await this.client.post<CreateSourcesResponse>('/api/v4/sources', payload);\r\n return response.data;\r\n }\r\n\r\n async updateOne(id: number, payload: UpdateSourceInput): Promise<Source> {\r\n const response = await this.client.patch<Source>(`/api/v4/sources/${id}`, payload);\r\n return response.data;\r\n }\r\n\r\n async update(items: UpdateSourceBatchInput | UpdateSourceBatchInput[]): Promise<UpdateSourcesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n if (payload.length > 100) {\r\n throw new Error(`A API da Kommo limita a atualização a no máximo 100 fontes por vez.`);\r\n }\r\n const response = await this.client.patch<UpdateSourcesResponse>('/api/v4/sources', payload);\r\n return response.data;\r\n }\r\n\r\n async deleteOne(id: number): Promise<void> {\r\n await this.client.delete(`/api/v4/sources/${id}`);\r\n }\r\n\r\n async delete(items: DeleteSourceBatchInput | DeleteSourceBatchInput[]): Promise<void> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n // OpenAPI documentation specifies to send array of objects for bulk delete\r\n await this.client.delete('/api/v4/sources', { data: payload });\r\n }\r\n}\r\n\r\nexport class WebsiteButtonsResource extends BaseResource {\r\n async list(params?: ListWebsiteButtonsParams): Promise<ListWebsiteButtonsResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n if (params.page !== undefined) queryParams.page = params.page;\r\n if (params.limit !== undefined) queryParams.limit = params.limit;\r\n if (params.with !== undefined) queryParams.with = params.with;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListWebsiteButtonsResponse>(`/api/v4/website_buttons${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async getBySourceId(sourceId: number, params?: { with?: 'scripts' | string }): Promise<WebsiteButton> {\r\n const queryParams: any = {};\r\n if (params && params.with !== undefined) {\r\n queryParams.with = params.with;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<WebsiteButton>(`/api/v4/website_buttons/${sourceId}${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async create(payload: CreateWebsiteButtonInput): Promise<CreateWebsiteButtonResponse> {\r\n if ((!payload.trusted_websites || payload.trusted_websites.length === 0) && !payload.is_used_in_app) {\r\n console.warn(`[WebsiteButtonsResource] A Kommo indica que se não enviar 'trusted_websites', é preciso enviar 'is_used_in_app' como true.`);\r\n }\r\n const response = await this.client.post<CreateWebsiteButtonResponse>('/api/v4/website_buttons', payload);\r\n return response.data;\r\n }\r\n\r\n async connectOnlineChat(sourceId: number | string): Promise<void> {\r\n await this.client.post(`/api/v4/website_buttons/${sourceId}/online_chat`);\r\n }\r\n\r\n async update(sourceId: number, payload: UpdateWebsiteButtonInput): Promise<WebsiteButton> {\r\n const response = await this.client.patch<WebsiteButton>(`/api/v4/website_buttons/${sourceId}`, payload);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListChatTemplatesParams,\r\n ListChatTemplatesResponse,\r\n ChatTemplate,\r\n CreateChatTemplateInput,\r\n CreateChatTemplatesResponse,\r\n UpdateChatTemplateInput,\r\n UpdateChatTemplatesResponse,\r\n SubmitWhatsAppTemplateReviewResponse,\r\n UpdateWhatsAppTemplateReviewStatusInput,\r\n UpdateWhatsAppTemplateReviewStatusResponse,\r\n DeleteChatTemplateInput\r\n} from './types';\r\n\r\nexport class ChatTemplatesResource extends BaseResource {\r\n async list(params?: ListChatTemplatesParams): Promise<ListChatTemplatesResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n if (params.page !== undefined) queryParams.page = params.page;\r\n if (params.limit !== undefined) queryParams.limit = params.limit;\r\n if (params.with !== undefined) queryParams.with = params.with;\r\n\r\n const filter: any = {};\r\n if (params.filter_external_id !== undefined) filter.external_id = params.filter_external_id;\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListChatTemplatesResponse>(`/api/v4/chats/templates${qsStr}`);\r\n \r\n if (response.status === 204 || !response.data) {\r\n return { _page: 1, _embedded: { chat_templates: [] } };\r\n }\r\n \r\n return response.data;\r\n }\r\n\r\n async getById(id: number, params?: { with?: 'reviews' | string }): Promise<ChatTemplate> {\r\n const queryParams: any = {};\r\n if (params && params.with !== undefined) {\r\n queryParams.with = params.with;\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ChatTemplate>(`/api/v4/chats/templates/${id}${qsStr}`);\r\n return response.data;\r\n }\r\n\r\n async create(items: CreateChatTemplateInput | CreateChatTemplateInput[]): Promise<CreateChatTemplatesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post<CreateChatTemplatesResponse>('/api/v4/chats/templates', payload);\r\n return response.data;\r\n }\r\n\r\n async update(items: UpdateChatTemplateInput | UpdateChatTemplateInput[]): Promise<UpdateChatTemplatesResponse> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n // Validação de segurança local para evitar erro HTTP opaco se o desenvolvedor tentar editar um Waba já aprovado.\r\n // Como a API não retorna o state no payload de input obrigatoriamente, enviamos um aviso (warning).\r\n const isWaba = payload.some(item => item.type === 'waba');\r\n if (isWaba) {\r\n console.warn(`[ChatTemplatesResource] Modelos do WhatsApp ('waba') só podem ser editados se o status for 'draft'. Modificar um template em 'review' ou 'approved' causará erro na API.`);\r\n }\r\n\r\n const response = await this.client.patch<UpdateChatTemplatesResponse>('/api/v4/chats/templates', payload);\r\n return response.data;\r\n }\r\n\r\n async submitForReview(id: number): Promise<SubmitWhatsAppTemplateReviewResponse> {\r\n const response = await this.client.post<SubmitWhatsAppTemplateReviewResponse>(`/api/v4/chats/templates/${id}/review`);\r\n return response.data;\r\n }\r\n\r\n async updateReviewStatus(id: number, reviewId: number, payload: UpdateWhatsAppTemplateReviewStatusInput): Promise<UpdateWhatsAppTemplateReviewStatusResponse> {\r\n const response = await this.client.post<UpdateWhatsAppTemplateReviewStatusResponse>(`/api/v4/chats/templates/${id}/review/${reviewId}`, payload);\r\n return response.data;\r\n }\r\n\r\n async delete(items: DeleteChatTemplateInput | DeleteChatTemplateInput[]): Promise<void> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n await this.client.delete('/api/v4/chats/templates', { data: payload });\r\n }\r\n\r\n async deleteOne(id: number): Promise<void> {\r\n await this.client.delete(`/api/v4/chats/templates/${id}`);\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n ListWebhooksParams,\r\n ListWebhooksResponse,\r\n Webhook,\r\n CreateWebhookInput,\r\n DeleteWebhookInput\r\n} from './types';\r\n\r\n// Kommo's webhooks API only exposes GET/POST/DELETE (no PATCH), so there is\r\n// no update() here by design — changing a webhook's events means delete + create.\r\nexport class WebhooksResource extends BaseResource {\r\n async list(params?: ListWebhooksParams): Promise<ListWebhooksResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n const filter: any = {};\r\n if (params.filter_destination !== undefined) filter.destination = params.filter_destination;\r\n \r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get<ListWebhooksResponse>(`/api/v4/webhooks${qsStr}`);\r\n \r\n if (response.status === 204 || !response.data) {\r\n return { _total_items: 0, _embedded: { webhooks: [] } };\r\n }\r\n return response.data;\r\n }\r\n\r\n async create(payload: CreateWebhookInput): Promise<Webhook> {\r\n const response = await this.client.post<Webhook>('/api/v4/webhooks', payload);\r\n return response.data;\r\n }\r\n\r\n async delete(payload: DeleteWebhookInput): Promise<void> {\r\n const data = { destination: payload.destination };\r\n await this.client.delete('/api/v4/webhooks', { data });\r\n }\r\n}\r\n","import qs from 'qs';\r\nimport { BaseResource } from '../../base';\r\nimport {\r\n FileRecord,\r\n ListFilesParams,\r\n ListFilesResponse,\r\n CreateFileUploadSessionInput,\r\n UploadSessionResponse,\r\n UploadFilePartInput,\r\n UploadFilePartResponse,\r\n UpdateFileInput,\r\n DeleteFilesItem,\r\n RestoreFilesItem,\r\n ListFileVersionsResponse,\r\n FileAttachEntityType,\r\n ListEntityAttachedFilesParams,\r\n ListEntityAttachedFilesResponse,\r\n AttachFilesToEntityItem,\r\n DetachFilesFromEntityItem,\r\n ListFileLinkedEntitiesResponse,\r\n} from './types';\r\n\r\n// Organizando sub-módulos dentro de FilesResource para refletir a divisão semântica da API\r\n\r\nexport class FilesServiceResource extends BaseResource {\r\n async getByUuid(fileUuid: string): Promise<FileRecord | null> {\r\n const response = await this.client.get(`/v1.0/files/${fileUuid}`);\r\n if (response.status === 204) {\r\n return null;\r\n }\r\n return response.data;\r\n }\r\n\r\n async list(params?: ListFilesParams): Promise<ListFilesResponse> {\r\n const queryParams: any = {};\r\n if (params) {\r\n const filter: any = {};\r\n \r\n const paramKeys = Object.keys(params) as Array<keyof ListFilesParams>;\r\n for (const key of paramKeys) {\r\n if (params[key] !== undefined) {\r\n const filterKey = key.replace('filter_', '');\r\n \r\n if (filterKey.startsWith('size_') || filterKey.startsWith('date_')) {\r\n const [prefix, sub] = filterKey.split('_'); // size_unit -> size.unit\r\n if (!filter[prefix]) filter[prefix] = {};\r\n // Trata o campo do prefixo \"date\" e \"size\" com chaves aninhadas (ex: filter[size][unit])\r\n \r\n // Mas precisamos injetar os subníveis da forma certa:\r\n if (key === 'filter_size_unit') filter.size = { ...filter.size, unit: params[key]};\r\n else if (key === 'filter_size_from') filter.size = { ...filter.size, from: params[key]};\r\n else if (key === 'filter_size_to') filter.size = { ...filter.size, to: params[key]};\r\n else if (key === 'filter_date_type') filter.date = { ...filter.date, type: params[key]};\r\n else if (key === 'filter_date_preset') filter.date = { ...filter.date, date_preset: params[key]};\r\n else if (key === 'filter_date_from') filter.date = { ...filter.date, from: params[key]};\r\n else if (key === 'filter_date_to') filter.date = { ...filter.date, to: params[key]};\r\n } else {\r\n filter[filterKey] = params[key];\r\n }\r\n }\r\n }\r\n\r\n if (Object.keys(filter).length > 0) {\r\n queryParams.filter = filter;\r\n }\r\n }\r\n\r\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\r\n const qsStr = query ? `?${query}` : '';\r\n const response = await this.client.get(`/v1.0/files${qsStr}`);\r\n \r\n // Tratando 204 sem itens.\r\n if (response.status === 204 || !response.data) {\r\n return { items: [], raw: response.data };\r\n }\r\n \r\n // A documentação foi opaca. Para garantir retorno robusto, mapeamos os items com fallback flexível\r\n return {\r\n // Se houver um array nativo\r\n items: Array.isArray(response.data) ? response.data : response.data?._embedded?.files || response.data?.items,\r\n raw: response.data\r\n };\r\n }\r\n\r\n async createUploadSession(payload: CreateFileUploadSessionInput): Promise<UploadSessionResponse> {\r\n const response = await this.client.post<UploadSessionResponse>('/v1.0/sessions', payload);\r\n return response.data;\r\n }\r\n\r\n async uploadPart(sessionToken: string, filePart: UploadFilePartInput): Promise<UploadFilePartResponse> {\r\n // Para Binários o content type varia via Adapter, manteremos o raw body pass-through:\r\n const response = await this.client.post<UploadFilePartResponse>(`/v1.0/sessions/upload/${sessionToken}`, filePart, {\r\n headers: {\r\n 'Content-Type': 'application/octet-stream'\r\n }\r\n });\r\n return response.data;\r\n }\r\n\r\n async update(fileUuid: string, payload: UpdateFileInput): Promise<FileRecord> {\r\n if (payload.name !== undefined && payload.version_uuid !== undefined) {\r\n throw new Error(\"A Files API não permite alterar 'name' e definir 'version_uuid' na mesma requisição.\");\r\n }\r\n const response = await this.client.patch<FileRecord>(`/v1.0/files/${fileUuid}`, payload);\r\n return response.data;\r\n }\r\n\r\n async delete(items: DeleteFilesItem | DeleteFilesItem[]): Promise<Record<string, unknown>> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.delete(`/v1.0/files`, { data: payload });\r\n return response.data || {};\r\n }\r\n\r\n async restore(items: RestoreFilesItem | RestoreFilesItem[]): Promise<Record<string, unknown>> {\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.post(`/v1.0/files/restore`, payload);\r\n return response.data;\r\n }\r\n\r\n async listVersions(fileUuid: string): Promise<ListFileVersionsResponse> {\r\n const response = await this.client.get(`/v1.0/files/${fileUuid}/versions`);\r\n return {\r\n items: Array.isArray(response.data) ? response.data : response.data?._embedded?.versions || response.data?.items,\r\n raw: response.data\r\n };\r\n }\r\n}\r\n\r\n\r\nexport class EntityFilesResource extends BaseResource {\r\n private normalizeEntity(entity: FileAttachEntityType): string {\r\n if (entity === 'contatos') return 'contacts';\r\n if (entity === 'empresas') return 'companies';\r\n return entity;\r\n }\r\n\r\n async listAttachedToEntity(entity: FileAttachEntityType, entityId: number, params?: ListEntityAttachedFilesParams): Promise<ListEntityAttachedFilesResponse> {\r\n const normalEntity = this.normalizeEntity(entity);\r\n const query = qs.stringify(params, { skipNulls: true });\r\n const qsStr = query ? `?${query}` : '';\r\n \r\n const response = await this.client.get(`/api/v4/${normalEntity}/${entityId}/files${qsStr}`);\r\n if (response.status === 204) {\r\n return { items: [], raw: null };\r\n }\r\n \r\n return {\r\n items: Array.isArray(response.data) ? response.data : response.data?._embedded?.files || response.data?.items,\r\n raw: response.data\r\n };\r\n }\r\n\r\n async attachToEntity(entity: FileAttachEntityType, entityId: number, items: AttachFilesToEntityItem | AttachFilesToEntityItem[]): Promise<Record<string, unknown>> {\r\n const normalEntity = this.normalizeEntity(entity);\r\n const payload = Array.isArray(items) ? items : [items];\r\n const response = await this.client.put(`/api/v4/${normalEntity}/${entityId}/files`, payload);\r\n return response.data;\r\n }\r\n\r\n async detachFromEntity(entity: FileAttachEntityType, entityId: number, items: DetachFilesFromEntityItem | DetachFilesFromEntityItem[]): Promise<void> {\r\n const normalEntity = this.normalizeEntity(entity);\r\n const payload = Array.isArray(items) ? items : [items];\r\n await this.client.delete(`/api/v4/${normalEntity}/${entityId}/files`, { data: payload });\r\n }\r\n}\r\n\r\nexport class FileLinksResource extends BaseResource {\r\n async listLinkedEntities(fileUuid: string): Promise<ListFileLinkedEntitiesResponse> {\r\n const response = await this.client.get(`/api/v4/files/${fileUuid}/links`);\r\n return {\r\n items: Array.isArray(response.data) ? response.data : response.data?._embedded?.links || response.data?.items,\r\n raw: response.data\r\n };\r\n }\r\n}\r\n\r\n// Wrapper Principal para empacotar os 3 submódulos\r\nexport class FilesResource extends BaseResource {\r\n public service: FilesServiceResource;\r\n public entities: EntityFilesResource;\r\n public links: FileLinksResource;\r\n\r\n constructor(httpClient: any) {\r\n super(httpClient);\r\n this.service = new FilesServiceResource(httpClient);\r\n this.entities = new EntityFilesResource(httpClient);\r\n this.links = new FileLinksResource(httpClient);\r\n }\r\n}\r\n","import { BaseResource } from '../../base';\r\nimport { Account, GetAccountParams } from './types';\r\n\r\nexport class AccountResource extends BaseResource {\r\n async get(params?: GetAccountParams): Promise<Account> {\r\n let withParam: string | undefined;\r\n\r\n if (params?.with) {\r\n withParam = Array.isArray(params.with)\r\n ? params.with.join(',')\r\n : params.with;\r\n }\r\n\r\n const qsStr = withParam ? `?with=${encodeURIComponent(withParam)}` : '';\r\n const response = await this.client.get<Account>(`/api/v4/account${qsStr}`);\r\n return response.data;\r\n }\r\n}\r\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport { ListTalksParams, ListTalksResponse, CloseTalkParams } from './types';\n\nexport class TalksResource extends BaseResource {\n async list(params?: ListTalksParams): Promise<ListTalksResponse> {\n const queryParams: any = {};\n if (params) {\n if (params.page !== undefined) queryParams.page = params.page;\n if (params.limit !== undefined) queryParams.limit = params.limit;\n if (params.filter_talk_id !== undefined) queryParams.filter = { ...queryParams.filter, talk_id: params.filter_talk_id };\n if (params.filter_contact_id !== undefined) queryParams.filter = { ...queryParams.filter, contact_id: params.filter_contact_id };\n if (params.filter_entity_id !== undefined) queryParams.filter = { ...queryParams.filter, entity_id: params.filter_entity_id };\n if (params.filter_entity_type !== undefined) queryParams.filter = { ...queryParams.filter, entity_type: params.filter_entity_type };\n if (params.filter_only_in_work) queryParams.filter = { ...queryParams.filter, only_in_work: '' };\n }\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListTalksResponse>(`/api/v4/talks${qsStr}`);\n if (response.status === 204 || !response.data) {\n return { _page: 1, _embedded: { talks: [] } };\n }\n return response.data;\n }\n\n async close(id: number, params?: CloseTalkParams): Promise<void> {\n await this.client.post(`/api/v4/talks/${id}/close`, params ?? {});\n }\n}\n","export class KommoApiError extends Error {\r\n status?: number;\r\n title?: string;\r\n detail?: string;\r\n type?: string;\r\n raw?: unknown;\r\n\r\n constructor(message: string, info?: Partial<KommoApiError>) {\r\n super(message);\r\n this.name = 'KommoApiError';\r\n \r\n if (info) {\r\n this.status = info.status;\r\n this.title = info.title;\r\n this.detail = info.detail;\r\n this.type = info.type;\r\n this.raw = info.raw;\r\n }\r\n }\r\n}\r\n","import { AxiosError, AxiosInstance, AxiosRequestConfig } from 'axios';\r\nimport { RetryConfig } from '../types';\r\n\r\n// Métodos idempotentes por definição HTTP: repeti-los não muda o resultado final.\r\nconst IDEMPOTENT_METHODS = new Set(['get', 'delete', 'patch', 'put', 'head', 'options']);\r\n\r\n// Códigos de erro de nível de socket/conexão (nunca chegaram a uma resposta HTTP).\r\nconst TRANSIENT_ERROR_CODES = new Set([\r\n 'ECONNRESET',\r\n 'ECONNABORTED',\r\n 'ETIMEDOUT',\r\n 'EAI_AGAIN',\r\n 'EPIPE',\r\n]);\r\n\r\nexport interface RetryableAxiosRequestConfig extends AxiosRequestConfig {\r\n /** Marca POSTs que são seguros para retry (payload já carrega request_id para dedupe na Kommo). */\r\n _idempotentRetry?: boolean;\r\n _retryCount?: number;\r\n}\r\n\r\nfunction isTransientNetworkError(error: AxiosError): boolean {\r\n // Se houve resposta HTTP (mesmo 4xx/5xx), a requisição chegou ao servidor: não é falha de socket.\r\n if (error.response) return false;\r\n\r\n if (error.code && TRANSIENT_ERROR_CODES.has(error.code)) return true;\r\n\r\n return /socket hang up|network error/i.test(error.message || '');\r\n}\r\n\r\nfunction isRetryableRequest(config: RetryableAxiosRequestConfig): boolean {\r\n const method = (config.method || 'get').toLowerCase();\r\n if (IDEMPOTENT_METHODS.has(method)) return true;\r\n return method === 'post' && config._idempotentRetry === true;\r\n}\r\n\r\n// 429 significa que a Kommo rejeitou a requisição por limite de taxa (~7 req/s por conta) SEM\r\n// processá-la — diferente de erro de rede/socket, aqui não há risco de duplicar efeito colateral,\r\n// então é seguro repetir em qualquer método, mesmo POST não marcado como idempotente.\r\nfunction isRateLimited(error: AxiosError): boolean {\r\n return error.response?.status === 429;\r\n}\r\n\r\n// A Kommo manda Retry-After em segundos (às vezes como data HTTP) quando limita a taxa — usar\r\n// isso é mais preciso que o backoff exponencial genérico, que não sabe quando a janela reabre.\r\nfunction retryAfterMs(error: AxiosError): number | null {\r\n const header = error.response?.headers?.['retry-after'];\r\n if (!header) return null;\r\n\r\n const seconds = Number(header);\r\n if (!Number.isNaN(seconds)) return seconds * 1000;\r\n\r\n const dateMs = Date.parse(header);\r\n if (!Number.isNaN(dateMs)) return Math.max(0, dateMs - Date.now());\r\n\r\n return null;\r\n}\r\n\r\nfunction wait(ms: number): Promise<void> {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n\r\n/**\r\n * Instala retry com backoff exponencial para erros transitórios de rede (ex.: \"socket\r\n * hang up\"/ECONNRESET), restrito a requisições idempotentes, e para respostas 429 (rate limit da\r\n * Kommo), sempre — honrando o header Retry-After quando presente.\r\n */\r\nexport function attachRetryInterceptor(client: AxiosInstance, retryConfig: RetryConfig = {}): void {\r\n const { retries = 2, baseDelayMs = 300, maxDelayMs = 3000 } = retryConfig;\r\n\r\n client.interceptors.response.use(undefined, async (error: AxiosError) => {\r\n const config = error.config as RetryableAxiosRequestConfig | undefined;\r\n const rateLimited = isRateLimited(error);\r\n\r\n if (\r\n !config ||\r\n retries <= 0 ||\r\n (!rateLimited && (!isTransientNetworkError(error) || !isRetryableRequest(config)))\r\n ) {\r\n throw error;\r\n }\r\n\r\n const attempt = config._retryCount ?? 0;\r\n if (attempt >= retries) {\r\n throw error;\r\n }\r\n\r\n config._retryCount = attempt + 1;\r\n\r\n const exponential = Math.min(maxDelayMs, baseDelayMs * 2 ** attempt);\r\n const backoff = rateLimited ? (retryAfterMs(error) ?? exponential) : exponential;\r\n const jitter = backoff * 0.3 * Math.random();\r\n await wait(backoff + jitter);\r\n\r\n return client.request(config);\r\n });\r\n}\r\n","export const KOMMO_PIPELINE_STAGE_COLORS = [\r\n '#fffeb2',\r\n '#fffd7f',\r\n '#fff000',\r\n '#ffeab2',\r\n '#ffdc7f',\r\n '#ffce5a',\r\n '#ffdbdb',\r\n '#ffc8c8',\r\n '#ff8f92',\r\n '#d6eaff',\r\n '#c1e0ff',\r\n '#98cbff',\r\n '#ebffb1',\r\n '#deff81',\r\n '#87f2c0',\r\n '#f9deff',\r\n '#f3beff',\r\n '#ccc8f9',\r\n '#eb93ff',\r\n '#f2f3f4',\r\n '#e6e8ea',\r\n] as const;\r\n\r\nexport type KommoPipelineStageColor = typeof KOMMO_PIPELINE_STAGE_COLORS[number];\r\n\r\nexport interface StatusDescription {\r\n level: 'newbie' | 'candidate' | 'master';\r\n description: string;\r\n}\r\n\r\nexport interface PipelineStatus {\r\n id: number;\r\n name: string;\r\n sort: number;\r\n is_editable: boolean;\r\n pipeline_id: number;\r\n color: string;\r\n type: 0 | 1 | number;\r\n account_id: number;\r\n request_id?: string;\r\n descriptions?: StatusDescription[];\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n}\r\n\r\nexport interface Pipeline {\r\n id: number;\r\n name: string;\r\n sort: number;\r\n is_main: boolean;\r\n is_unsorted_on: boolean;\r\n is_archive: boolean;\r\n account_id: number | string;\r\n request_id?: string;\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n _embedded?: {\r\n statuses?: PipelineStatus[];\r\n };\r\n}\r\n\r\nexport interface ListPipelinesResponse {\r\n _total_items?: number;\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n _embedded?: {\r\n pipelines?: Pipeline[];\r\n };\r\n}\r\n\r\nexport interface CreatePipelineStatusInput {\r\n id?: number;\r\n name?: string;\r\n sort?: number;\r\n color?: KommoPipelineStageColor | string;\r\n request_id?: string;\r\n descriptions?: StatusDescription[];\r\n}\r\n\r\nexport interface CreatePipelineInput {\r\n name: string;\r\n sort?: number;\r\n is_main?: boolean;\r\n is_unsorted_on?: boolean;\r\n request_id?: string;\r\n _embedded?: {\r\n statuses?: CreatePipelineStatusInput[];\r\n };\r\n}\r\n\r\nexport interface CreatePipelinesResponse {\r\n _total_items?: number;\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n _embedded?: {\r\n pipelines?: Pipeline[];\r\n };\r\n}\r\n\r\nexport interface UpdatePipelineInput {\r\n name?: string;\r\n sort?: number;\r\n is_main?: boolean;\r\n is_unsorted_on?: boolean;\r\n}\r\n\r\nexport interface ListPipelineStatusesResponse {\r\n _total_items?: number;\r\n _embedded?: {\r\n statuses?: PipelineStatus[];\r\n };\r\n}\r\n\r\nexport interface CreateStatusInput {\r\n name: string;\r\n sort: number;\r\n color?: KommoPipelineStageColor | string;\r\n request_id?: string;\r\n descriptions?: StatusDescription[];\r\n}\r\n\r\nexport interface CreateStatusesResponse {\r\n _total_items?: number;\r\n _embedded?: {\r\n statuses?: PipelineStatus[];\r\n };\r\n}\r\n\r\nexport interface UpdateStatusInput {\r\n name?: string;\r\n sort?: number;\r\n color?: KommoPipelineStageColor | string;\r\n descriptions?: StatusDescription[];\r\n}\r\n","export type EventWithParam =\r\n | 'contact_name'\r\n | 'lead_name'\r\n | 'company_name'\r\n | 'catalog_name'\r\n | 'catalog_element_name';\r\n\r\nexport type EventValueChange =\r\n | Record<string, unknown>\r\n | {\r\n task?: { text?: string };\r\n helpbot?: { id?: number };\r\n transaction?: { id?: number };\r\n note?: { id?: number };\r\n nps?: { rate?: number };\r\n message?: { id?: string };\r\n tag?: { name?: string };\r\n lead_status?: { id?: number; pipeline_id?: number };\r\n responsible_user?: { id?: number };\r\n task_deadline?: { timestamp?: number };\r\n task_type?: { id?: number };\r\n custom_field_value?: {\r\n field_id?: number;\r\n field_type?: number;\r\n enum_id?: number | null;\r\n text?: string;\r\n };\r\n link?: {\r\n entity?: {\r\n type?: string;\r\n id?: number;\r\n };\r\n };\r\n unlink?: {\r\n entity?: {\r\n type?: string;\r\n id?: number;\r\n };\r\n };\r\n };\r\n\r\nexport interface Event {\r\n id: string;\r\n type: string;\r\n entity_id: number;\r\n entity_type: string;\r\n created_by: number;\r\n created_at: number;\r\n value_after: EventValueChange[];\r\n value_before: EventValueChange[];\r\n account_id: number;\r\n\r\n _links?: {\r\n self?: {\r\n href: string;\r\n };\r\n };\r\n\r\n _embedded?: {\r\n entity?: {\r\n id: number;\r\n name?: string;\r\n _links?: {\r\n self?: {\r\n href: string;\r\n };\r\n };\r\n };\r\n };\r\n}\r\n\r\nexport type KnownEventType =\r\n | 'lead_added'\r\n | 'lead_deleted'\r\n | 'lead_restored'\r\n | 'lead_status_changed'\r\n | 'lead_linked'\r\n | 'lead_unlinked'\r\n | 'contact_added'\r\n | 'contact_deleted'\r\n | 'contact_restored'\r\n | 'contact_linked'\r\n | 'contact_unlinked'\r\n | 'company_added'\r\n | 'company_deleted'\r\n | 'company_restored'\r\n | 'company_linked'\r\n | 'company_unlinked'\r\n | 'task_added'\r\n | 'task_deleted'\r\n | 'task_completed'\r\n | 'task_type_changed'\r\n | 'task_text_changed'\r\n | 'task_deadline_changed'\r\n | 'task_result_added'\r\n | 'incoming_call'\r\n | 'outgoing_call'\r\n | 'incoming_mail'\r\n | 'outgoing_mail'\r\n | 'incoming_chat_message'\r\n | 'outgoing_chat_message'\r\n | 'entity_direct_message'\r\n | 'incoming_sms'\r\n | 'outgoing_sms'\r\n | 'entity_tag_added'\r\n | 'entity_tag_deleted'\r\n | 'entity_linked'\r\n | 'entity_unlinked'\r\n | 'sale_field_changed'\r\n | 'name_field_changed'\r\n | 'ltv_field_changed'\r\n | 'custom_field_value_changed'\r\n | 'entity_responsible_changed'\r\n | 'robot_replied'\r\n | 'intent_identified'\r\n | 'nps_rate_added'\r\n | 'link_followed'\r\n | 'common_note_added'\r\n | 'common_note_deleted'\r\n | 'attachment_note_added'\r\n | 'targeting_in_note_added'\r\n | 'targeting_out_note_added'\r\n | 'geo_note_added'\r\n | 'service_note_added'\r\n | 'site_visit_note_added'\r\n | 'entity_merged'\r\n | 'video_opened'\r\n | 'video_closed'\r\n | 'picture_opened'\r\n | 'picture_closed'\r\n | 'zoom_conference'\r\n | 'key_action_completed'\r\n | 'ai_result'\r\n | 'talk_created'\r\n | 'talk_closed'\r\n | 'conversation_answered'\r\n | 'meta_chat_subscription_added'\r\n | 'meta_chat_subscription_removed'\r\n | 'talk_missed_event'\r\n | 'page_mention'\r\n | 'dropbox_attachment'\r\n | `custom_field_${number}_value_changed`\r\n | string;\r\n\r\nexport interface EventValueFilters {\r\n leads_statuses?: Array<{\r\n pipeline_id: number;\r\n status_id: number;\r\n }>;\r\n responsible_user_id?: number[] | string;\r\n custom_field_values?: number[] | string;\r\n value?: string | number;\r\n}\r\n\r\nexport interface ListEventsParams {\r\n with?: EventWithParam[] | string;\r\n page?: number;\r\n limit?: number; // máximo 250\r\n\r\n filter_id?: string | string[];\r\n\r\n filter_created_at_from?: number;\r\n filter_created_at_to?: number;\r\n\r\n filter_created_by?: number[]; // até 10 IDs\r\n filter_entity?: Array<\r\n 'lead' | 'contact' | 'company' | 'task' | `catalog_${number}`\r\n > | string;\r\n\r\n filter_entity_id?: number[]; // usar com um único filter_entity\r\n filter_type?: KnownEventType[] | KnownEventType;\r\n\r\n filter_value_before?: EventValueFilters;\r\n filter_value_after?: EventValueFilters;\r\n}\r\n\r\nexport interface ListEventsResponse {\r\n _page: number;\r\n _links?: {\r\n self?: { href: string };\r\n next?: { href: string };\r\n };\r\n _embedded?: {\r\n events?: Event[];\r\n };\r\n}\r\n\r\nexport interface EventTypeDefinition {\r\n key: string;\r\n type: number;\r\n lang: string;\r\n}\r\n\r\nexport interface ListEventTypesParams {\r\n language_code?: 'en' | 'es' | 'pt' | string;\r\n}\r\n\r\nexport interface ListEventTypesResponse {\r\n _total_items?: number;\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n _embedded?: {\r\n events_types?: EventTypeDefinition[];\r\n };\r\n}\r\n\r\n// Utilitários de Eventos\r\nexport const eventUtils = {\r\n isLeadStatusChanged: (event: Event) => event.type === 'lead_status_changed',\r\n isCustomFieldChanged: (event: Event) =>\r\n event.type === 'custom_field_value_changed' ||\r\n /^custom_field_\\d+_value_changed$/.test(event.type),\r\n};\r\n","export const KOMMO_TAG_COLORS = [\r\n 'EBEBEB',\r\n 'D0D0D0',\r\n 'F2DDF7',\r\n 'D1A4DC',\r\n 'FF8F92',\r\n 'FFC8C8',\r\n 'C7DB8C',\r\n 'DDEBB5',\r\n '8699DA',\r\n 'AABDFF',\r\n 'FFCE5A',\r\n 'FFE193',\r\n '90CDB0',\r\n 'C6F4DE',\r\n 'A9A5D7',\r\n 'D8D5FF',\r\n '86C0FC',\r\n '832161',\r\n '6A0F49',\r\n '0C7C59',\r\n '10599D',\r\n '9D2B32',\r\n '247BA0',\r\n] as const;\r\n\r\nexport type TagColor = typeof KOMMO_TAG_COLORS[number];\r\nexport type TagEntityType = 'leads' | 'contacts' | 'companies' | string;\r\n\r\nexport interface Tag {\r\n id: number;\r\n name: string;\r\n color?: TagColor | string;\r\n request_id?: string;\r\n}\r\n\r\nexport interface ListTagsParams {\r\n page?: number;\r\n limit?: number; // máximo 250\r\n query?: string;\r\n filter_id?: number[];\r\n filter_name?: string;\r\n}\r\n\r\nexport interface ListTagsResponse {\r\n _page: number;\r\n _links?: {\r\n self?: { href: string };\r\n next?: { href: string };\r\n };\r\n _embedded?: {\r\n tags?: Tag[];\r\n };\r\n}\r\n\r\nexport interface CreateTagInput {\r\n name: string;\r\n color?: TagColor | string; // apenas para leads\r\n request_id?: string;\r\n}\r\n\r\nexport interface CreateTagsResponse {\r\n _total_items?: number;\r\n _embedded?: {\r\n tags?: Array<{\r\n id: number;\r\n name: string;\r\n request_id?: string;\r\n }>;\r\n };\r\n}\r\n\r\nexport interface TagRefInput {\r\n id?: number;\r\n name?: string;\r\n}\r\n\r\nexport interface UpdateEntityTagsInput {\r\n id: number;\r\n _embedded: {\r\n tags: TagRefInput[] | null;\r\n };\r\n}\r\n\r\nexport interface EntityUpdateResult {\r\n id: number;\r\n updated_at: number;\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n}\r\n\r\nexport interface UpdateEntityTagsBatchResponse {\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n _embedded?: {\r\n leads?: Array<EntityUpdateResult>;\r\n contacts?: Array<EntityUpdateResult>;\r\n companies?: Array<EntityUpdateResult>;\r\n };\r\n}\r\n\r\nexport interface UpdateSingleEntityTagsInput {\r\n _embedded: {\r\n tags: TagRefInput[] | null;\r\n };\r\n}\r\n\r\nexport interface UpdateEntityTagsSingleResponse {\r\n _links?: {\r\n self?: { href: string };\r\n };\r\n _embedded?: {\r\n leads?: Array<EntityUpdateResult>;\r\n contacts?: Array<EntityUpdateResult>;\r\n companies?: Array<EntityUpdateResult>;\r\n };\r\n}\r\n","export const KNOWN_WEBHOOK_EVENTS = [\r\n // Lead\r\n 'add_lead',\r\n 'update_lead',\r\n 'delete_lead',\r\n 'restore_lead',\r\n 'status_lead',\r\n 'responsible_lead',\r\n 'note_lead',\r\n // Contact\r\n 'add_contact',\r\n 'update_contact',\r\n 'delete_contact',\r\n 'restore_contact',\r\n 'responsible_contact',\r\n 'note_contact',\r\n // Company\r\n 'add_company',\r\n 'update_company',\r\n 'delete_company',\r\n 'restore_company',\r\n 'responsible_company',\r\n 'note_company',\r\n // Task\r\n 'add_task',\r\n 'update_task',\r\n 'delete_task',\r\n 'responsible_task',\r\n // Chat / Talk\r\n 'add_talk',\r\n 'add_message',\r\n 'add_outgoing_message',\r\n 'add_chat_template_review',\r\n] as const;\r\n\r\nexport type WebhookEvent = typeof KNOWN_WEBHOOK_EVENTS[number] | string;\r\n\r\nexport interface Webhook {\r\n id: number;\r\n destination: string;\r\n created_at: number;\r\n updated_at: number;\r\n account_id: number;\r\n created_by: number;\r\n sort: number;\r\n disabled: boolean;\r\n settings: WebhookEvent[];\r\n}\r\n\r\nexport interface ListWebhooksParams {\r\n filter_destination?: string;\r\n}\r\n\r\nexport interface ListWebhooksResponse {\r\n _total_items?: number;\r\n _embedded?: {\r\n webhooks?: Webhook[];\r\n };\r\n}\r\n\r\nexport interface CreateWebhookInput {\r\n destination: string;\r\n settings: WebhookEvent[];\r\n sort?: number;\r\n}\r\n\r\nexport interface DeleteWebhookInput {\r\n destination: string;\r\n}\r\n"],"mappings":"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","names":["import_axios","import_qs","axios","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","import_qs","qs","axios","qs"]}