kommo-aiatende-api 1.0.0
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.d.mts +2695 -0
- package/dist/index.d.ts +2695 -0
- package/dist/index.js +1476 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1413 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../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/errors.ts","../src/resources/pipelines/types.ts","../src/resources/events/types.ts","../src/resources/tags/types.ts","../src/resources/webhooks/types.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios';\nimport qs from 'qs';\nimport { KommoConfig } from './types';\nimport { AuthManager } from './auth';\nimport { LeadsResource } from './resources/leads';\nimport { ContactsResource } from './resources/contacts';\nimport { TasksResource } from './resources/tasks';\nimport { NotesResource } from './resources/notes';\nimport { CustomFieldsResource, CustomFieldGroupsResource } from './resources/custom-fields';\nimport { UnsortedResource } from './resources/unsorted';\nimport { PipelinesResource } from './resources/pipelines';\nimport { CompaniesResource } from './resources/companies';\nimport { CatalogsResource } from './resources/catalogs';\nimport { UsersResource, RolesResource } from './resources/users';\nimport { EventsResource } from './resources/events';\nimport { TagsResource } from './resources/tags';\nimport { LinksResource } from './resources/links';\nimport { SalesbotsResource } from './resources/salesbots';\nimport { SourcesResource, WebsiteButtonsResource } from './resources/sources';\nimport { ChatTemplatesResource } from './resources/chat-templates';\nimport { WebhooksResource } from './resources/webhooks';\nimport { KommoApiError } from './errors';\n\nexport class KommoClient {\n public config: KommoConfig;\n public auth: AuthManager;\n public httpClient: AxiosInstance;\n\n public leads: LeadsResource;\n public contacts: ContactsResource;\n public tasks: TasksResource;\n public notes: NotesResource;\n public customFields: CustomFieldsResource;\n public customFieldGroups: CustomFieldGroupsResource;\n public unsorted: UnsortedResource;\n public pipelines: PipelinesResource;\n public companies: CompaniesResource;\n public catalogs: CatalogsResource;\n public users: UsersResource;\n public roles: RolesResource;\n public events: EventsResource;\n public tags: TagsResource;\n public links: LinksResource;\n public salesbots: SalesbotsResource;\n public sources: SourcesResource;\n public websiteButtons: WebsiteButtonsResource;\n public chatTemplates: ChatTemplatesResource;\n public webhooks: WebhooksResource;\n\n constructor(config: KommoConfig) {\n this.config = config;\n \n this.auth = new AuthManager(\n config.domain,\n config.clientId,\n config.clientSecret,\n config.redirectUri\n );\n\n const baseURL = `https://${config.domain}.kommo.com`;\n\n this.httpClient = axios.create({\n baseURL,\n headers: {\n 'Content-Type': 'application/json',\n },\n paramsSerializer: (params) => {\n return qs.stringify(params, { arrayFormat: 'brackets' });\n }\n });\n\n this.httpClient.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response) {\n const errData = error.response.data;\n throw new KommoApiError(errData?.title || 'Kommo API Error', {\n status: error.response.status,\n title: errData?.title,\n detail: errData?.detail,\n type: errData?.type,\n raw: errData\n });\n }\n throw error;\n }\n );\n\n if (config.accessToken) {\n this.httpClient.defaults.headers.common['Authorization'] = `Bearer ${config.accessToken}`;\n }\n\n // Inicializa Módulos\n this.leads = new LeadsResource(this.httpClient);\n this.contacts = new ContactsResource(this.httpClient);\n this.tasks = new TasksResource(this.httpClient);\n this.notes = new NotesResource(this.httpClient);\n this.customFields = new CustomFieldsResource(this.httpClient);\n this.customFieldGroups = new CustomFieldGroupsResource(this.httpClient);\n this.unsorted = new UnsortedResource(this.httpClient);\n this.pipelines = new PipelinesResource(this.httpClient);\n this.companies = new CompaniesResource(this.httpClient);\n this.catalogs = new CatalogsResource(this.httpClient);\n this.users = new UsersResource(this.httpClient);\n this.roles = new RolesResource(this.httpClient);\n this.events = new EventsResource(this.httpClient);\n this.tags = new TagsResource(this.httpClient);\n this.links = new LinksResource(this.httpClient);\n this.salesbots = new SalesbotsResource(this.httpClient);\n this.sources = new SourcesResource(this.httpClient);\n this.websiteButtons = new WebsiteButtonsResource(this.httpClient);\n this.chatTemplates = new ChatTemplatesResource(this.httpClient);\n this.webhooks = new WebhooksResource(this.httpClient);\n }\n\n public setAccessToken(token: string) {\n this.config.accessToken = token;\n this.httpClient.defaults.headers.common['Authorization'] = `Bearer ${token}`;\n }\n}\n","import axios from 'axios';\nimport { AccessTokenResponse } from './types';\n\nexport class AuthManager {\n private domain: string;\n private clientId?: string;\n private clientSecret?: string;\n private redirectUri?: string;\n\n constructor(domain: string, clientId?: string, clientSecret?: string, redirectUri?: string) {\n this.domain = domain;\n this.clientId = clientId;\n this.clientSecret = clientSecret;\n this.redirectUri = redirectUri;\n }\n\n async exchangeCodeForToken(code: string): Promise<AccessTokenResponse> {\n const url = `https://${this.domain}.kommo.com/oauth2/access_token`;\n const response = await axios.post<AccessTokenResponse>(url, {\n client_id: this.clientId,\n client_secret: this.clientSecret,\n grant_type: 'authorization_code',\n code,\n redirect_uri: this.redirectUri,\n });\n return response.data;\n }\n\n async refreshToken(refreshToken: string): Promise<AccessTokenResponse> {\n const url = `https://${this.domain}.kommo.com/oauth2/access_token`;\n const response = await axios.post<AccessTokenResponse>(url, {\n client_id: this.clientId,\n client_secret: this.clientSecret,\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n });\n return response.data;\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n ListLeadsParams,\n ListLeadsResponse,\n Lead,\n LeadWithParam,\n CreateLeadInput,\n CreateLeadsResponse,\n UpdateLeadInput,\n UpdateLeadsResponse,\n UpdateSingleLeadInput,\n CreateComplexLeadInput,\n CreateComplexLeadsResponse,\n LossReason,\n ListLossReasonsResponse,\n} from './types';\n\nexport class LeadsResource extends BaseResource {\n \n async list(params?: ListLeadsParams): Promise<ListLeadsResponse> {\n const queryParams: any = {};\n\n if (params) {\n if (params.with) {\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\n }\n if (params.page) queryParams.page = params.page;\n if (params.limit) queryParams.limit = params.limit;\n if (params.query) queryParams.query = params.query;\n\n // Filtros\n const filter: any = {};\n \n const arrayFilters = ['id', 'name', 'created_by', 'updated_by', 'responsible_user_id', 'pipeline_id'] as const;\n arrayFilters.forEach(k => {\n const key = `filter_${k}` as keyof ListLeadsParams;\n if (params[key] !== undefined) filter[k] = params[key];\n });\n\n if (params.filter_price !== undefined) filter.price = params.filter_price;\n\n // Range Filters (from/to)\n const rangeFilters = ['created_at', 'updated_at', 'closed_at', 'closest_task_at'];\n rangeFilters.forEach(k => {\n const fromKey = `filter_${k}_from` as keyof ListLeadsParams;\n const toKey = `filter_${k}_to` as keyof ListLeadsParams;\n \n if (params[fromKey] !== undefined || params[toKey] !== undefined) {\n filter[k] = {};\n if (params[fromKey] !== undefined) filter[k].from = params[fromKey];\n if (params[toKey] !== undefined) filter[k].to = params[toKey];\n }\n });\n\n if (params.filter_statuses && params.filter_statuses.length > 0) {\n filter.statuses = params.filter_statuses;\n }\n\n if (Object.keys(filter).length > 0) {\n queryParams.filter = filter;\n }\n\n // Ordenação\n const order: any = {};\n if (params.order_created_at) order.created_at = params.order_created_at;\n if (params.order_updated_at) order.updated_at = params.order_updated_at;\n if (params.order_id) order.id = params.order_id;\n \n if (Object.keys(order).length > 0) {\n queryParams.order = order;\n }\n }\n\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n\n const response = await this.client.get<ListLeadsResponse>(`/api/v4/leads${qsStr}`);\n return response.data;\n }\n\n async getById(id: number, params?: { with?: LeadWithParam[] | string }): Promise<Lead | null> {\n try {\n const queryParams: any = {};\n if (params?.with) {\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\n }\n \n const query = qs.stringify(queryParams, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n\n const response = await this.client.get<Lead>(`/api/v4/leads/${id}${qsStr}`);\n if (response.status === 204 || !response.data || (response.data as unknown) === '') {\n return null; // AAPI resolve como NO CONTENT corretamente via interceptador caso seja vazio\n }\n return response.data;\n } catch (error: any) {\n if (error.response && error.response.status === 204) {\n return null;\n }\n throw error;\n }\n }\n\n async create(items: CreateLeadInput | CreateLeadInput[]): Promise<CreateLeadsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<CreateLeadsResponse>('/api/v4/leads', payload);\n return response.data;\n }\n\n async update(items: UpdateLeadInput | UpdateLeadInput[]): Promise<UpdateLeadsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.patch<UpdateLeadsResponse>('/api/v4/leads', payload);\n return response.data;\n }\n\n async updateOne(id: number, payload: UpdateSingleLeadInput): Promise<UpdateLeadsResponse | Lead> {\n const response = await this.client.patch<UpdateLeadsResponse | Lead>(`/api/v4/leads/${id}`, payload);\n return response.data;\n }\n\n async createComplex(items: CreateComplexLeadInput | CreateComplexLeadInput[]): Promise<CreateComplexLeadsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<CreateComplexLeadsResponse>('/api/v4/leads/complex', payload);\n return response.data;\n }\n\n async listLossReasons(): Promise<ListLossReasonsResponse> {\n const response = await this.client.get<ListLossReasonsResponse>('/api/v4/leads/loss_reasons');\n return response.data;\n }\n\n async getLossReasonById(id: number): Promise<LossReason> {\n const response = await this.client.get<LossReason>(`/api/v4/leads/loss_reasons/${id}`);\n return response.data;\n }\n}\n","import { AxiosInstance } from 'axios';\n\nexport abstract class BaseResource {\n protected client: AxiosInstance;\n\n constructor(client: AxiosInstance) {\n this.client = client;\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n ListContactsParams,\n ListContactsResponse,\n Contact,\n ContactWithParam,\n CreateContactInput,\n CreateContactsResponse,\n UpdateContactInput,\n UpdateContactsResponse,\n UpdateSingleContactInput,\n} from './types';\n\nexport class ContactsResource extends BaseResource {\n \n async list(params?: ListContactsParams): Promise<ListContactsResponse> {\n const queryParams: any = {};\n\n if (params) {\n if (params.with) {\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\n }\n if (params.page) queryParams.page = params.page;\n if (params.limit) queryParams.limit = params.limit;\n if (params.query) queryParams.query = params.query;\n\n // Filtros\n const filter: any = {};\n \n const arrayFilters = ['id', 'name', 'created_by', 'updated_by', 'responsible_user_id'] as const;\n arrayFilters.forEach(k => {\n const key = `filter_${k}` as keyof ListContactsParams;\n if (params[key] !== undefined) filter[k] = params[key];\n });\n\n // Range Filters (from/to)\n const rangeFilters = ['created_at', 'updated_at', 'closest_task_at'];\n rangeFilters.forEach(k => {\n const fromKey = `filter_${k}_from` as keyof ListContactsParams;\n const toKey = `filter_${k}_to` as keyof ListContactsParams;\n \n if (params[fromKey] !== undefined || params[toKey] !== undefined) {\n filter[k] = {};\n if (params[fromKey] !== undefined) filter[k].from = params[fromKey];\n if (params[toKey] !== undefined) filter[k].to = params[toKey];\n }\n });\n\n if (Object.keys(filter).length > 0) {\n queryParams.filter = filter;\n }\n\n // Ordenação\n const order: any = {};\n if (params.order_updated_at) order.updated_at = params.order_updated_at;\n if (params.order_id) order.id = params.order_id;\n \n if (Object.keys(order).length > 0) {\n queryParams.order = order;\n }\n }\n\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n\n const response = await this.client.get<ListContactsResponse>(`/api/v4/contacts${qsStr}`);\n return response.data;\n }\n\n async getById(\n id: number,\n params?: { with?: ContactWithParam[] | string }\n ): Promise<Contact | null> {\n try {\n const queryParams: any = {};\n if (params?.with) {\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\n }\n \n const query = qs.stringify(queryParams, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n\n const response = await this.client.get<Contact>(`/api/v4/contacts/${id}${qsStr}`);\n if (response.status === 204 || !response.data || (response.data as unknown) === '') {\n return null;\n }\n return response.data;\n } catch (error: any) {\n if (error.response && error.response.status === 204) {\n return null;\n }\n throw error;\n }\n }\n\n async create(items: CreateContactInput | CreateContactInput[]): Promise<CreateContactsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<CreateContactsResponse>('/api/v4/contacts', payload);\n return response.data;\n }\n\n async update(items: UpdateContactInput | UpdateContactInput[]): Promise<UpdateContactsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.patch<UpdateContactsResponse>('/api/v4/contacts', payload);\n return response.data;\n }\n\n async updateOne(id: number, payload: UpdateSingleContactInput): Promise<UpdateContactsResponse> {\n const response = await this.client.patch<UpdateContactsResponse>(`/api/v4/contacts/${id}`, payload);\n return response.data;\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n ListTasksParams,\n ListTasksResponse,\n Task,\n CreateTaskInput,\n CreateTasksResponse,\n UpdateTaskInput,\n UpdateTasksResponse,\n UpdateSingleTaskInput\n} from './types';\n\nexport class TasksResource extends BaseResource {\n \n async list(params?: ListTasksParams): Promise<ListTasksResponse> {\n const queryParams: any = {};\n\n if (params) {\n if (params.page) queryParams.page = params.page;\n if (params.limit) queryParams.limit = params.limit;\n\n const filter: any = {};\n if (params.filter_responsible_user_id !== undefined) filter.responsible_user_id = params.filter_responsible_user_id;\n if (params.filter_is_completed !== undefined) filter.is_completed = params.filter_is_completed;\n if (params.filter_task_type !== undefined) filter.task_type = params.filter_task_type;\n if (params.filter_entity_type !== undefined) filter.entity_type = params.filter_entity_type;\n if (params.filter_entity_id !== undefined) filter.entity_id = params.filter_entity_id;\n if (params.filter_id !== undefined) filter.id = params.filter_id;\n if (params.filter_updated_at_from !== undefined || params.filter_updated_at_to !== undefined) {\n filter.updated_at = {};\n if (params.filter_updated_at_from !== undefined) filter.updated_at.from = params.filter_updated_at_from;\n if (params.filter_updated_at_to !== undefined) filter.updated_at.to = params.filter_updated_at_to;\n }\n if (Object.keys(filter).length > 0) {\n queryParams.filter = filter;\n }\n\n const order: any = {};\n if (params.order_complete_till !== undefined) order.complete_till = params.order_complete_till;\n if (params.order_created_at !== undefined) order.created_at = params.order_created_at;\n if (params.order_id !== undefined) order.id = params.order_id;\n if (Object.keys(order).length > 0) {\n queryParams.order = order;\n }\n }\n\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListTasksResponse>(`/api/v4/tasks${qsStr}`);\n return response.data;\n }\n\n async getById(id: number): Promise<Task> {\n const response = await this.client.get<Task>(`/api/v4/tasks/${id}`);\n return response.data;\n }\n\n async create(items: CreateTaskInput | CreateTaskInput[]): Promise<CreateTasksResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<CreateTasksResponse>('/api/v4/tasks', payload);\n return response.data;\n }\n\n async update(items: UpdateTaskInput | UpdateTaskInput[]): Promise<UpdateTasksResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.patch<UpdateTasksResponse>('/api/v4/tasks', payload);\n return response.data;\n }\n\n async updateOne(id: number, payload: UpdateSingleTaskInput): Promise<UpdateTasksResponse> {\n const response = await this.client.patch<UpdateTasksResponse>(`/api/v4/tasks/${id}`, payload);\n return response.data;\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n NoteEntityType,\n ListEntityNotesParams,\n ListNotesResponse,\n Note,\n CreateNoteInput,\n CreateNotesResponse,\n UpdateNoteInput,\n UpdateSingleNoteInput,\n UpdateNotesResponse,\n} from './types';\n\nexport class NotesResource extends BaseResource {\n \n private normalizeEntityType(type: NoteEntityType): string {\n if (type === 'contatos') return 'contacts';\n if (type === 'empresas') return 'companies';\n return type;\n }\n\n async listByEntity(entityType: NoteEntityType, entityId: number, params?: ListEntityNotesParams): Promise<ListNotesResponse> {\n const normalType = this.normalizeEntityType(entityType);\n const queryParams: any = {};\n\n if (params) {\n if (params.page) queryParams.page = params.page;\n if (params.limit) queryParams.limit = params.limit;\n\n const filter: any = {};\n if (params.filter_id !== undefined) filter.id = params.filter_id;\n if (params.filter_note_type !== undefined) filter.note_type = params.filter_note_type;\n \n if (params.filter_updated_at_from !== undefined || params.filter_updated_at_to !== undefined) {\n filter.updated_at = {};\n if (params.filter_updated_at_from !== undefined) filter.updated_at.from = params.filter_updated_at_from;\n if (params.filter_updated_at_to !== undefined) filter.updated_at.to = params.filter_updated_at_to;\n }\n \n if (Object.keys(filter).length > 0) {\n queryParams.filter = filter;\n }\n\n const order: any = {};\n if (params.order_updated_at !== undefined) order.updated_at = params.order_updated_at;\n if (params.order_id !== undefined) order.id = params.order_id;\n \n if (Object.keys(order).length > 0) {\n queryParams.order = order;\n }\n }\n\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListNotesResponse>(`/api/v4/${normalType}/${entityId}/notes${qsStr}`);\n return response.data;\n }\n\n async listByEntityType(entityType: NoteEntityType, params?: ListEntityNotesParams): Promise<ListNotesResponse> {\n const normalType = this.normalizeEntityType(entityType);\n const queryParams: any = {};\n\n if (params) {\n if (params.page) queryParams.page = params.page;\n if (params.limit) queryParams.limit = params.limit;\n\n const filter: any = {};\n if (params.filter_id !== undefined) filter.id = params.filter_id;\n if (params.filter_note_type !== undefined) filter.note_type = params.filter_note_type;\n \n if (params.filter_updated_at_from !== undefined || params.filter_updated_at_to !== undefined) {\n filter.updated_at = {};\n if (params.filter_updated_at_from !== undefined) filter.updated_at.from = params.filter_updated_at_from;\n if (params.filter_updated_at_to !== undefined) filter.updated_at.to = params.filter_updated_at_to;\n }\n \n if (Object.keys(filter).length > 0) {\n queryParams.filter = filter;\n }\n\n const order: any = {};\n if (params.order_updated_at !== undefined) order.updated_at = params.order_updated_at;\n if (params.order_id !== undefined) order.id = params.order_id;\n \n if (Object.keys(order).length > 0) {\n queryParams.order = order;\n }\n }\n\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListNotesResponse>(`/api/v4/${normalType}/notes${qsStr}`);\n return response.data;\n }\n\n async getById(entityType: NoteEntityType, id: number): Promise<Note> {\n const normalType = this.normalizeEntityType(entityType);\n const response = await this.client.get<Note>(`/api/v4/${normalType}/notes/${id}`);\n return response.data;\n }\n\n async create(entityType: NoteEntityType, items: CreateNoteInput | CreateNoteInput[]): Promise<CreateNotesResponse> {\n const normalType = this.normalizeEntityType(entityType);\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<CreateNotesResponse>(`/api/v4/${normalType}/notes`, payload);\n return response.data;\n }\n\n async update(entityType: NoteEntityType, items: UpdateNoteInput | UpdateNoteInput[]): Promise<UpdateNotesResponse> {\n const normalType = this.normalizeEntityType(entityType);\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.patch<UpdateNotesResponse>(`/api/v4/${normalType}/notes`, payload);\n return response.data;\n }\n\n async updateOne(entityType: NoteEntityType, id: number | string, payload: UpdateSingleNoteInput): Promise<UpdateNotesResponse> {\n const normalType = this.normalizeEntityType(entityType);\n const response = await this.client.patch<UpdateNotesResponse>(`/api/v4/${normalType}/notes/${id}`, payload);\n return response.data;\n }\n\n async pin(entityType: NoteEntityType, id: number): Promise<void> {\n const normalType = this.normalizeEntityType(entityType);\n await this.client.post(`/api/v4/${normalType}/notes/${id}/pin`);\n }\n\n async unpin(entityType: NoteEntityType, id: number): Promise<void> {\n const normalType = this.normalizeEntityType(entityType);\n await this.client.post(`/api/v4/${normalType}/notes/${id}/unpin`);\n }\n}\n","import { BaseResource } from '../../base';\nimport {\n EntityType,\n ListEntityCustomFieldsResponse,\n EntityCustomField,\n CreateEntityCustomFieldInput,\n UpdateEntityCustomFieldInput,\n UpdateSingleEntityCustomFieldInput,\n ListListCustomFieldsResponse,\n ListCustomField,\n CreateListCustomFieldInput,\n UpdateListCustomFieldInput,\n UpdateSingleListCustomFieldInput,\n ListCustomFieldGroupsResponse,\n CustomFieldGroup,\n CreateCustomFieldGroupInput,\n UpdateCustomFieldGroupInput\n} from './types';\n\nexport class CustomFieldsResource extends BaseResource {\n\n // ==== CAMPOS DE ENTIDADES ====\n\n async listEntity(entityType: EntityType): Promise<ListEntityCustomFieldsResponse> {\n const response = await this.client.get<ListEntityCustomFieldsResponse>(`/api/v4/${entityType}/custom_fields`);\n return response.data;\n }\n\n async getEntityById(entityType: EntityType, id: number): Promise<EntityCustomField> {\n const response = await this.client.get<EntityCustomField>(`/api/v4/${entityType}/custom_fields/${id}`);\n return response.data;\n }\n\n async createEntity(entityType: EntityType, items: CreateEntityCustomFieldInput | CreateEntityCustomFieldInput[]): Promise<ListEntityCustomFieldsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<ListEntityCustomFieldsResponse>(`/api/v4/${entityType}/custom_fields`, payload);\n return response.data;\n }\n\n async updateEntity(entityType: EntityType, items: UpdateEntityCustomFieldInput | UpdateEntityCustomFieldInput[]): Promise<ListEntityCustomFieldsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.patch<ListEntityCustomFieldsResponse>(`/api/v4/${entityType}/custom_fields`, payload);\n return response.data;\n }\n\n async updateEntityById(entityType: EntityType, id: number, payload: UpdateSingleEntityCustomFieldInput): Promise<EntityCustomField> {\n const response = await this.client.patch<EntityCustomField>(`/api/v4/${entityType}/custom_fields/${id}`, payload);\n return response.data;\n }\n\n async deleteEntity(entityType: EntityType, id: number): Promise<void> {\n await this.client.delete(`/api/v4/${entityType}/custom_fields/${id}`);\n }\n\n // ==== CAMPOS DE LISTAS ====\n\n async listList(listId: number): Promise<ListListCustomFieldsResponse> {\n const response = await this.client.get<ListListCustomFieldsResponse>(`/api/v4/catalogs/${listId}/custom_fields`);\n return response.data;\n }\n\n async getListById(listId: number, customFieldId: number): Promise<ListCustomField | EntityCustomField> {\n const response = await this.client.get<ListCustomField | EntityCustomField>(`/api/v4/catalogs/${listId}/custom_fields/${customFieldId}`);\n return response.data;\n }\n\n async createList(listId: number, items: CreateListCustomFieldInput | CreateListCustomFieldInput[]): Promise<ListListCustomFieldsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<ListListCustomFieldsResponse>(`/api/v4/catalogs/${listId}/custom_fields`, payload);\n return response.data;\n }\n\n async updateList(listId: number, items: UpdateListCustomFieldInput | UpdateListCustomFieldInput[]): Promise<ListListCustomFieldsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.patch<ListListCustomFieldsResponse>(`/api/v4/catalogs/${listId}/custom_fields`, payload);\n return response.data;\n }\n\n async updateListById(listId: number, customFieldId: number, payload: UpdateSingleListCustomFieldInput): Promise<ListCustomField> {\n const response = await this.client.patch<ListCustomField>(`/api/v4/catalogs/${listId}/custom_fields/${customFieldId}`, payload);\n return response.data;\n }\n\n async deleteList(listId: number, id: number): Promise<void> {\n await this.client.delete(`/api/v4/catalogs/${listId}/custom_fields/${id}`);\n }\n}\n\nexport class CustomFieldGroupsResource extends BaseResource {\n\n async list(entityType: EntityType): Promise<ListCustomFieldGroupsResponse> {\n const response = await this.client.get<ListCustomFieldGroupsResponse>(`/api/v4/${entityType}/custom_fields/groups`);\n return response.data;\n }\n\n async getById(entityType: EntityType, id: number): Promise<CustomFieldGroup> {\n const response = await this.client.get<CustomFieldGroup>(`/api/v4/${entityType}/custom_fields/groups/${id}`);\n return response.data;\n }\n\n async create(entityType: EntityType, items: CreateCustomFieldGroupInput | CreateCustomFieldGroupInput[]): Promise<ListCustomFieldGroupsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<ListCustomFieldGroupsResponse>(`/api/v4/${entityType}/custom_fields/groups`, payload);\n return response.data;\n }\n\n async update(entityType: EntityType, id: number, payload: UpdateCustomFieldGroupInput): Promise<CustomFieldGroup> {\n const response = await this.client.patch<CustomFieldGroup>(`/api/v4/${entityType}/custom_fields/groups/${id}`, payload);\n return response.data;\n }\n\n async delete(entityType: EntityType, id: number): Promise<void> {\n await this.client.delete(`/api/v4/${entityType}/custom_fields/groups/${id}`);\n }\n\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n ListUnsortedLeadsParams,\n ListUnsortedLeadsResponse,\n UnsortedLead,\n CreateSipUnsortedLeadInput,\n CreateFormUnsortedLeadInput,\n CreateUnsortedLeadsResponse,\n UnsortedDecisionResponse,\n LinkUnsortedLeadResponse,\n UnsortedSummaryParams,\n UnsortedSummaryResponse,\n} from './types';\n\nexport class UnsortedResource extends BaseResource {\n \n async list(params?: ListUnsortedLeadsParams): Promise<ListUnsortedLeadsResponse> {\n const query = qs.stringify(\n {\n page: params?.page,\n limit: params?.limit,\n filter: {\n uid: params?.uid,\n category: params?.category,\n pipeline_id: params?.pipeline_id,\n },\n order: {\n created_at: params?.order_created_at,\n },\n },\n { skipNulls: true, arrayFormat: 'brackets' }\n );\n\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListUnsortedLeadsResponse>(`/api/v4/leads/unsorted${qsStr}`);\n return response.data;\n }\n\n async getByUid(uid: string): Promise<UnsortedLead> {\n const response = await this.client.get<UnsortedLead>(`/api/v4/leads/unsorted/${uid}`);\n return response.data;\n }\n\n async createSip(\n items: CreateSipUnsortedLeadInput | CreateSipUnsortedLeadInput[]\n ): Promise<CreateUnsortedLeadsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<CreateUnsortedLeadsResponse>(\n '/api/v4/leads/unsorted/sip',\n payload\n );\n return response.data;\n }\n\n async createForms(\n items: CreateFormUnsortedLeadInput | CreateFormUnsortedLeadInput[]\n ): Promise<CreateUnsortedLeadsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<CreateUnsortedLeadsResponse>(\n '/api/v4/leads/unsorted/forms',\n payload\n );\n return response.data;\n }\n\n async accept(\n uid: string,\n payload?: { user_id?: number; status_id?: number }\n ): Promise<UnsortedDecisionResponse> {\n const response = await this.client.post<UnsortedDecisionResponse>(\n `/api/v4/leads/unsorted/${uid}/accept`,\n payload || {}\n );\n return response.data;\n }\n\n async decline(\n uid: string,\n payload?: { user_id?: number }\n ): Promise<UnsortedDecisionResponse> {\n const config = payload ? { data: payload } : {};\n const response = await this.client.delete<UnsortedDecisionResponse>(\n `/api/v4/leads/unsorted/${uid}/decline`,\n config\n );\n return response.data;\n }\n\n async link(\n uid: string,\n payload: {\n link: {\n user_id?: string | number;\n entity_id: string | number;\n entity_type: 'leads' | string;\n metadata?: { contact_id?: number };\n };\n }\n ): Promise<LinkUnsortedLeadResponse> {\n const response = await this.client.post<LinkUnsortedLeadResponse>(\n `/api/v4/leads/unsorted/${uid}/link`,\n payload\n );\n return response.data;\n }\n\n async summary(params?: UnsortedSummaryParams): Promise<UnsortedSummaryResponse> {\n const queryParams: any = {};\n if (params?.uid) queryParams.uid = params.uid;\n if (params?.pipeline_id) queryParams.pipeline_id = params.pipeline_id;\n\n if (params?.created_at) {\n queryParams.created_at = params.created_at;\n } else if (params?.created_at_from || params?.created_at_to) {\n queryParams.created_at = {};\n if (params.created_at_from) queryParams.created_at.from = params.created_at_from;\n if (params.created_at_to) queryParams.created_at.to = params.created_at_to;\n }\n\n const query = qs.stringify(\n { filter: queryParams },\n { skipNulls: true, arrayFormat: 'brackets' }\n );\n\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<UnsortedSummaryResponse>(\n `/api/v4/leads/unsorted/summary${qsStr}`\n );\n return response.data;\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n Pipeline,\n PipelineStatus,\n ListPipelinesResponse,\n CreatePipelineInput,\n CreatePipelinesResponse,\n UpdatePipelineInput,\n ListPipelineStatusesResponse,\n CreateStatusInput,\n CreateStatusesResponse,\n UpdateStatusInput,\n StatusDescription,\n} from './types';\n\nexport class PipelinesResource extends BaseResource {\n \n // PIPELINES\n\n async list(): Promise<ListPipelinesResponse> {\n const response = await this.client.get<ListPipelinesResponse>('/api/v4/leads/pipelines');\n return response.data;\n }\n\n async getById(id: number): Promise<Pipeline> {\n const response = await this.client.get<Pipeline>(`/api/v4/leads/pipelines/${id}`);\n return response.data;\n }\n\n async create(items: CreatePipelineInput | CreatePipelineInput[]): Promise<CreatePipelinesResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<CreatePipelinesResponse>('/api/v4/leads/pipelines', payload);\n return response.data;\n }\n\n async update(id: number, payload: UpdatePipelineInput): Promise<Pipeline> {\n const response = await this.client.patch<Pipeline>(`/api/v4/leads/pipelines/${id}`, payload);\n return response.data;\n }\n\n async delete(id: number): Promise<void> {\n await this.client.delete(`/api/v4/leads/pipelines/${id}`);\n }\n\n // STATUSES (ETAPAS)\n\n async listStatuses(pipelineId: number, params?: { with?: 'descriptions' }): Promise<ListPipelineStatusesResponse> {\n const query = qs.stringify({ with: params?.with }, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListPipelineStatusesResponse>(`/api/v4/leads/pipelines/${pipelineId}/statuses${qsStr}`);\n return response.data;\n }\n\n async getStatusById(pipelineId: number, id: number | string, params?: { with?: 'descriptions' }): Promise<PipelineStatus> {\n const query = qs.stringify({ with: params?.with }, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<PipelineStatus>(`/api/v4/leads/pipelines/${pipelineId}/statuses/${id}${qsStr}`);\n return response.data;\n }\n\n async createStatuses(pipelineId: number, items: CreateStatusInput | CreateStatusInput[]): Promise<CreateStatusesResponse> {\n const payload = Array.isArray(items) ? items : [items];\n \n // Validate descriptions locally before sending payload\n payload.forEach(item => this.validateStatusDescriptions(item.descriptions));\n\n const response = await this.client.post<CreateStatusesResponse>(`/api/v4/leads/pipelines/${pipelineId}/statuses`, payload);\n return response.data;\n }\n\n async updateStatus(pipelineId: number, id: number | string, payload: UpdateStatusInput): Promise<PipelineStatus> {\n this.validateStatusDescriptions(payload.descriptions);\n\n const response = await this.client.patch<PipelineStatus>(`/api/v4/leads/pipelines/${pipelineId}/statuses/${id}`, payload);\n return response.data;\n }\n\n async deleteStatus(pipelineId: number, id: number | string): Promise<void> {\n await this.client.delete(`/api/v4/leads/pipelines/${pipelineId}/statuses/${id}`);\n }\n\n private validateStatusDescriptions(descriptions?: StatusDescription[]) {\n if (!descriptions) return;\n\n if (descriptions.length > 3) {\n throw new Error('A etapa aceita no máximo 3 descrições.');\n }\n\n const levels = descriptions.map((d) => d.level);\n const uniqueLevels = new Set(levels);\n\n if (levels.length !== uniqueLevels.size) {\n throw new Error('Não é permitido repetir level em descriptions.');\n }\n\n for (const item of descriptions) {\n if (item.description.length > 1000) {\n throw new Error('A descrição da etapa pode ter no máximo 1000 caracteres.');\n }\n }\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n ListCompaniesParams,\n ListCompaniesResponse,\n Company,\n CompanyWithParam,\n CreateCompanyInput,\n CreateCompaniesResponse,\n UpdateCompanyInput,\n UpdateCompaniesResponse,\n UpdateSingleCompanyInput,\n} from './types';\n\nexport class CompaniesResource extends BaseResource {\n \n async list(params?: ListCompaniesParams): Promise<ListCompaniesResponse> {\n const queryParams: any = {};\n\n if (params) {\n if (params.with) {\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\n }\n if (params.page) queryParams.page = params.page;\n if (params.limit) queryParams.limit = params.limit;\n if (params.query) queryParams.query = params.query;\n\n // Filtros\n const filter: any = {};\n \n const arrayFilters = ['id', 'name', 'created_by', 'updated_by', 'responsible_user_id'] as const;\n arrayFilters.forEach(k => {\n const key = `filter_${k}` as keyof ListCompaniesParams;\n if (params[key] !== undefined) filter[k] = params[key];\n });\n\n // Range Filters (from/to)\n const rangeFilters = ['created_at', 'updated_at', 'closest_task_at'];\n rangeFilters.forEach(k => {\n const fromKey = `filter_${k}_from` as keyof ListCompaniesParams;\n const toKey = `filter_${k}_to` as keyof ListCompaniesParams;\n \n if (params[fromKey] !== undefined || params[toKey] !== undefined) {\n filter[k] = {};\n if (params[fromKey] !== undefined) filter[k].from = params[fromKey];\n if (params[toKey] !== undefined) filter[k].to = params[toKey];\n }\n });\n\n if (Object.keys(filter).length > 0) {\n queryParams.filter = filter;\n }\n\n // Ordenação\n const order: any = {};\n if (params.order_updated_at) order.updated_at = params.order_updated_at;\n if (params.order_id) order.id = params.order_id;\n \n if (Object.keys(order).length > 0) {\n queryParams.order = order;\n }\n }\n\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n\n const response = await this.client.get<ListCompaniesResponse>(`/api/v4/companies${qsStr}`);\n return response.data;\n }\n\n async getById(\n id: number,\n params?: { with?: CompanyWithParam[] | string }\n ): Promise<Company | null> {\n try {\n const queryParams: any = {};\n if (params?.with) {\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\n }\n \n const query = qs.stringify(queryParams, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n\n const response = await this.client.get<Company>(`/api/v4/companies/${id}${qsStr}`);\n if (response.status === 204 || !response.data || (response.data as unknown) === '') {\n return null;\n }\n return response.data;\n } catch (error: any) {\n if (error.response && error.response.status === 204) {\n return null;\n }\n throw error;\n }\n }\n\n async create(items: CreateCompanyInput | CreateCompanyInput[]): Promise<CreateCompaniesResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<CreateCompaniesResponse>('/api/v4/companies', payload);\n return response.data;\n }\n\n async update(items: UpdateCompanyInput | UpdateCompanyInput[]): Promise<UpdateCompaniesResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.patch<UpdateCompaniesResponse>('/api/v4/companies', payload);\n return response.data;\n }\n\n async updateOne(id: number, payload: UpdateSingleCompanyInput): Promise<UpdateCompaniesResponse> {\n const response = await this.client.patch<UpdateCompaniesResponse>(`/api/v4/companies/${id}`, payload);\n return response.data;\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n ListCatalogsParams,\n ListCatalogsResponse,\n Catalog,\n CreateCatalogInput,\n CreateCatalogsResponse,\n UpdateCatalogInput,\n UpdateCatalogsResponse,\n UpdateSingleCatalogInput,\n ListCatalogElementsParams,\n ListCatalogElementsResponse,\n CatalogElement,\n CreateCatalogElementInput,\n CreateCatalogElementsResponse,\n UpdateCatalogElementInput,\n UpdateCatalogElementsResponse,\n UpdateSingleCatalogElementInput,\n} from './types';\n\nexport class CatalogsResource extends BaseResource {\n \n // ================= CATÁLOGOS (LISTAS) =================\n \n async list(params?: ListCatalogsParams): Promise<ListCatalogsResponse> {\n const query = qs.stringify({ page: params?.page, limit: params?.limit }, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListCatalogsResponse>(`/api/v4/catalogs${qsStr}`);\n return response.data;\n }\n\n async getById(id: number): Promise<Catalog> {\n const response = await this.client.get<Catalog>(`/api/v4/catalogs/${id}`);\n return response.data;\n }\n\n async create(items: CreateCatalogInput | CreateCatalogInput[]): Promise<CreateCatalogsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<CreateCatalogsResponse>('/api/v4/catalogs', payload);\n return response.data;\n }\n\n async update(items: UpdateCatalogInput | UpdateCatalogInput[]): Promise<UpdateCatalogsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.patch<UpdateCatalogsResponse>('/api/v4/catalogs', payload);\n return response.data;\n }\n\n async updateOne(id: number, payload: UpdateSingleCatalogInput): Promise<Catalog> {\n const response = await this.client.patch<Catalog>(`/api/v4/catalogs/${id}`, payload);\n return response.data;\n }\n\n // ================= ELEMENTOS DO CATÁLOGO =================\n\n async listElements(listId: number, params?: ListCatalogElementsParams): Promise<ListCatalogElementsResponse> {\n const queryParams: any = {};\n\n if (params) {\n if (params.page) queryParams.page = params.page;\n if (params.limit) queryParams.limit = params.limit;\n if (params.query) queryParams.query = params.query;\n \n const filter: any = {};\n if (params.filter_id !== undefined) filter.id = params.filter_id;\n\n if (Object.keys(filter).length > 0) {\n queryParams.filter = filter;\n }\n }\n\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListCatalogElementsResponse>(`/api/v4/catalogs/${listId}/elements${qsStr}`);\n return response.data;\n }\n\n async getElementById(listId: number, elementId: number): Promise<CatalogElement> {\n const response = await this.client.get<CatalogElement>(`/api/v4/catalogs/${listId}/elements/${elementId}`);\n return response.data;\n }\n\n async createElements(listId: number, items: CreateCatalogElementInput | CreateCatalogElementInput[]): Promise<CreateCatalogElementsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<CreateCatalogElementsResponse>(`/api/v4/catalogs/${listId}/elements`, payload);\n return response.data;\n }\n\n async updateElements(listId: number, items: UpdateCatalogElementInput | UpdateCatalogElementInput[]): Promise<UpdateCatalogElementsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.patch<UpdateCatalogElementsResponse>(`/api/v4/catalogs/${listId}/elements`, payload);\n return response.data;\n }\n\n async updateElementById(listId: number, elementId: number, payload: UpdateSingleCatalogElementInput): Promise<CatalogElement> {\n const response = await this.client.patch<CatalogElement>(`/api/v4/catalogs/${listId}/elements/${elementId}`, payload);\n return response.data;\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n ListUsersParams,\n ListUsersResponse,\n User,\n CreateUserInput,\n ListRolesParams,\n ListRolesResponse,\n Role,\n CreateRoleInput,\n UpdateRoleInput,\n} from './types';\n\nexport class UsersResource extends BaseResource {\n \n async list(params?: ListUsersParams): Promise<ListUsersResponse> {\n const queryParams: any = {};\n if (params) {\n if (params.with) queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\n if (params.page) queryParams.page = params.page;\n if (params.limit) queryParams.limit = params.limit;\n }\n const query = qs.stringify(queryParams, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListUsersResponse>(`/api/v4/users${qsStr}`);\n return response.data;\n }\n\n async getById(id: number, params?: { with?: import('./types').UserWithParam[] | string }): Promise<User> {\n const queryParams: any = {};\n if (params?.with) {\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\n }\n const query = qs.stringify(queryParams, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<User>(`/api/v4/users/${id}${qsStr}`);\n return response.data;\n }\n\n async create(items: CreateUserInput | CreateUserInput[]): Promise<ListUsersResponse> {\n const payload = Array.isArray(items) ? items : [items];\n if (payload.length > 10) {\n throw new Error('A API da Kommo permite criar no máximo 10 usuários por requisição.');\n }\n const response = await this.client.post<ListUsersResponse>('/api/v4/users', payload);\n return response.data;\n }\n}\n\nexport class RolesResource extends BaseResource {\n \n async list(params?: ListRolesParams): Promise<ListRolesResponse> {\n const queryParams: any = {};\n if (params?.with) {\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\n }\n const query = qs.stringify(queryParams, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListRolesResponse>(`/api/v4/roles${qsStr}`);\n return response.data;\n }\n\n async getById(id: number, params?: { with?: import('./types').RoleWithParam[] | string }): Promise<Role> {\n const queryParams: any = {};\n if (params?.with) {\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\n }\n const query = qs.stringify(queryParams, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<Role>(`/api/v4/roles/${id}${qsStr}`);\n return response.data;\n }\n\n async create(items: CreateRoleInput | CreateRoleInput[]): Promise<ListRolesResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<ListRolesResponse>('/api/v4/roles', payload);\n return response.data;\n }\n\n async update(items: UpdateRoleInput | UpdateRoleInput[]): Promise<ListRolesResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.patch<ListRolesResponse>('/api/v4/roles', payload);\n return response.data;\n }\n\n async delete(id: number): Promise<void> {\n await this.client.delete(`/api/v4/roles/${id}`);\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n ListEventsParams,\n ListEventsResponse,\n Event,\n ListEventTypesParams,\n ListEventTypesResponse,\n} from './types';\n\nexport class EventsResource extends BaseResource {\n \n async list(params?: ListEventsParams): Promise<ListEventsResponse> {\n const queryParams: any = {};\n\n if (params) {\n if (params.page) queryParams.page = params.page;\n if (params.limit) queryParams.limit = params.limit;\n if (params.with) queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\n\n const filter: any = {};\n if (params.filter_id !== undefined) filter.id = params.filter_id;\n if (params.filter_created_by !== undefined) filter.created_by = params.filter_created_by;\n if (params.filter_entity !== undefined) filter.entity = params.filter_entity;\n \n // Validação local: entity_id só pode ser usado se entity for único\n if (params.filter_entity_id !== undefined) {\n if (!params.filter_entity || (Array.isArray(params.filter_entity) && params.filter_entity.length !== 1)) {\n throw new Error(\"O filtro de 'entity_id' só pode ser passado quando houver uma única 'entity' informada.\");\n }\n filter.entity_id = params.filter_entity_id;\n }\n \n if (params.filter_type !== undefined) filter.type = params.filter_type;\n\n if (params.filter_created_at_from !== undefined || params.filter_created_at_to !== undefined) {\n filter.created_at = {};\n if (params.filter_created_at_from !== undefined) filter.created_at.from = params.filter_created_at_from;\n if (params.filter_created_at_to !== undefined) filter.created_at.to = params.filter_created_at_to;\n }\n\n if (params.filter_value_before !== undefined) filter.value_before = params.filter_value_before;\n if (params.filter_value_after !== undefined) filter.value_after = params.filter_value_after;\n\n if (Object.keys(filter).length > 0) {\n queryParams.filter = filter;\n }\n }\n\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListEventsResponse>(`/api/v4/events${qsStr}`);\n return response.data;\n }\n\n async getById(id: string, params?: { with?: import('./types').EventWithParam[] | string }): Promise<Event> {\n const queryParams: any = {};\n if (params?.with) {\n queryParams.with = Array.isArray(params.with) ? params.with.join(',') : params.with;\n }\n const query = qs.stringify(queryParams, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<Event>(`/api/v4/events/${id}${qsStr}`);\n return response.data;\n }\n\n async listTypes(params?: ListEventTypesParams): Promise<ListEventTypesResponse> {\n const queryParams: any = {};\n if (params?.language_code) {\n queryParams.language_code = params.language_code;\n }\n const query = qs.stringify(queryParams, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListEventTypesResponse>(`/api/v4/events/types${qsStr}`);\n return response.data;\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n TagEntityType,\n ListTagsParams,\n ListTagsResponse,\n CreateTagInput,\n CreateTagsResponse,\n UpdateEntityTagsInput,\n UpdateEntityTagsBatchResponse,\n UpdateSingleEntityTagsInput,\n UpdateEntityTagsSingleResponse\n} from './types';\n\nexport class TagsResource extends BaseResource {\n async list(entityType: TagEntityType, params?: ListTagsParams): Promise<ListTagsResponse> {\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.query !== undefined) queryParams.query = params.query;\n \n const filter: any = {};\n if (params.filter_id !== undefined) filter.id = params.filter_id;\n if (params.filter_name !== undefined) filter.name = params.filter_name;\n \n if (Object.keys(filter).length > 0) {\n queryParams.filter = filter;\n }\n }\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListTagsResponse>(`/api/v4/${entityType}/tags${qsStr}`);\n \n // Tratando o 204\n if (response.status === 204 || !response.data) {\n return { _page: 1, _embedded: { tags: [] } };\n }\n return response.data;\n }\n\n async create(entityType: TagEntityType, items: CreateTagInput | CreateTagInput[]): Promise<CreateTagsResponse> {\n const payload = Array.isArray(items) ? items : [items];\n \n // Validate that only leads support colors\n if (entityType !== 'leads') {\n const hasColor = payload.some(p => p.color !== undefined);\n if (hasColor) {\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.`);\n }\n }\n\n const response = await this.client.post<CreateTagsResponse>(`/api/v4/${entityType}/tags`, payload);\n return response.data;\n }\n\n async updateForMany(entityType: TagEntityType, items: UpdateEntityTagsInput | UpdateEntityTagsInput[]): Promise<UpdateEntityTagsBatchResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.patch<UpdateEntityTagsBatchResponse>(`/api/v4/${entityType}`, payload);\n return response.data;\n }\n\n async updateForOne(entityType: TagEntityType, id: number, payload: UpdateSingleEntityTagsInput): Promise<UpdateEntityTagsSingleResponse> {\n const response = await this.client.patch<UpdateEntityTagsSingleResponse>(`/api/v4/${entityType}/${id}`, payload);\n return response.data;\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n LinkSourceEntityType,\n ListEntityLinksParams,\n ListEntityLinksResponse,\n CreateEntityLinkInput,\n CreateEntityLinksResponse,\n DeleteEntityLinkInput\n} from './types';\n\nexport class LinksResource extends BaseResource {\n async list(entity: LinkSourceEntityType, entityId: number, params?: ListEntityLinksParams): Promise<ListEntityLinksResponse> {\n const queryParams: any = {};\n if (params) {\n const filter: any = {};\n \n // Validação combinada: filter_to_entity_id e filter_to_entity_type devem ser usados juntos\n const hasEntityId = params.filter_to_entity_id !== undefined;\n const hasEntityType = params.filter_to_entity_type !== undefined;\n\n if (hasEntityId !== hasEntityType) {\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.\");\n }\n\n if (hasEntityId) filter.to_entity_id = params.filter_to_entity_id;\n if (hasEntityType) filter.to_entity_type = params.filter_to_entity_type;\n \n if (params.filter_to_catalog_id !== undefined) filter.to_catalog_id = params.filter_to_catalog_id;\n\n if (Object.keys(filter).length > 0) {\n queryParams.filter = filter;\n }\n }\n\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListEntityLinksResponse>(`/api/v4/${entity}/${entityId}/links${qsStr}`);\n \n return response.data;\n }\n\n async link(entity: LinkSourceEntityType, entityId: number, items: CreateEntityLinkInput | CreateEntityLinkInput[]): Promise<CreateEntityLinksResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<CreateEntityLinksResponse>(`/api/v4/${entity}/${entityId}/link`, payload);\n return response.data;\n }\n\n async unlink(entity: LinkSourceEntityType, entityId: number, items: DeleteEntityLinkInput | DeleteEntityLinkInput[]): Promise<void> {\n const payload = Array.isArray(items) ? items : [items];\n await this.client.post(`/api/v4/${entity}/${entityId}/unlink`, payload);\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n ListSalesbotsParams,\n ListSalesbotsResponse,\n RunSalesbotInput,\n RunManySalesbotsItem,\n StopSalesbotInput,\n SalesbotContinueBotType,\n SalesbotContinueInput,\n} from './types';\n\nexport class SalesbotsResource extends BaseResource {\n async list(params?: ListSalesbotsParams): Promise<ListSalesbotsResponse> {\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.with !== undefined) queryParams.with = params.with;\n \n const filter: any = {};\n if (params.filter_id !== undefined) filter.id = params.filter_id;\n if (params.filter_type_functionality !== undefined) filter.type_functionality = params.filter_type_functionality;\n \n if (Object.keys(filter).length > 0) {\n queryParams.filter = filter;\n }\n }\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListSalesbotsResponse>(`/api/v4/bots${qsStr}`);\n \n if (response.status === 204 || !response.data) {\n return { _embedded: { items: [] } };\n }\n return response.data;\n }\n\n async run(botId: number | string, payload: RunSalesbotInput): Promise<void> {\n await this.client.post(`/api/v4/bots/${botId}/run`, payload);\n }\n\n async runMany(items: RunManySalesbotsItem | RunManySalesbotsItem[]): Promise<void> {\n const payload = Array.isArray(items) ? items : [items];\n if (payload.length > 100) {\n throw new Error(`A API da Kommo limita o 'runMany' a no máximo 100 salesbots por requisição. Você enviou ${payload.length}.`);\n }\n await this.client.post(`/api/v4/bots/run`, payload);\n }\n\n async stop(botId: number, payload: StopSalesbotInput): Promise<void> {\n await this.client.post(`/api/v4/bots/${botId}/stop`, payload);\n }\n\n async continueWidgetExecution(bot: SalesbotContinueBotType, botId: number, continueId: number, payload: SalesbotContinueInput): Promise<void> {\n if (payload.execute_handlers) {\n if (payload.execute_handlers.length > 10) {\n throw new Error(`A API da Kommo limita 'execute_handlers' a no máximo 10 itens. Você enviou ${payload.execute_handlers.length}.`);\n }\n\n for (const handler of payload.execute_handlers) {\n if (handler.handler === 'show') {\n if (handler.params.value && handler.params.value.length > 80) {\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.`);\n }\n if ('buttons' in handler.params && handler.params.buttons && handler.params.buttons.length > 25) {\n throw new Error(`A API da Kommo não permite mais do que 25 botões. Você tentou enviar ${handler.params.buttons.length}.`);\n }\n }\n }\n }\n\n await this.client.post(`/api/v4/${bot}/${botId}/continue/${continueId}`, payload);\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n ListSourcesResponse,\n Source,\n CreateSourceInput,\n CreateSourcesResponse,\n UpdateSourceInput,\n UpdateSourceBatchInput,\n UpdateSourcesResponse,\n DeleteSourceBatchInput,\n ListWebsiteButtonsParams,\n ListWebsiteButtonsResponse,\n WebsiteButton,\n CreateWebsiteButtonInput,\n CreateWebsiteButtonResponse,\n UpdateWebsiteButtonInput,\n} from './types';\n\nexport class SourcesResource extends BaseResource {\n async list(): Promise<ListSourcesResponse> {\n const response = await this.client.get<ListSourcesResponse>('/api/v4/sources');\n return response.data;\n }\n\n async getById(id: number): Promise<Source> {\n const response = await this.client.get<Source>(`/api/v4/sources/${id}`);\n return response.data;\n }\n\n async create(items: CreateSourceInput | CreateSourceInput[]): Promise<CreateSourcesResponse> {\n const payload = Array.isArray(items) ? items : [items];\n if (payload.length > 100) {\n throw new Error(`A API da Kommo limita a criação a no máximo 100 fontes por vez.`);\n }\n const response = await this.client.post<CreateSourcesResponse>('/api/v4/sources', payload);\n return response.data;\n }\n\n async updateOne(id: number, payload: UpdateSourceInput): Promise<Source> {\n const response = await this.client.patch<Source>(`/api/v4/sources/${id}`, payload);\n return response.data;\n }\n\n async update(items: UpdateSourceBatchInput | UpdateSourceBatchInput[]): Promise<UpdateSourcesResponse> {\n const payload = Array.isArray(items) ? items : [items];\n if (payload.length > 100) {\n throw new Error(`A API da Kommo limita a atualização a no máximo 100 fontes por vez.`);\n }\n const response = await this.client.patch<UpdateSourcesResponse>('/api/v4/sources', payload);\n return response.data;\n }\n\n async deleteOne(id: number): Promise<void> {\n await this.client.delete(`/api/v4/sources/${id}`);\n }\n\n async delete(items: DeleteSourceBatchInput | DeleteSourceBatchInput[]): Promise<void> {\n const payload = Array.isArray(items) ? items : [items];\n // OpenAPI documentation specifies to send array of objects for bulk delete\n await this.client.delete('/api/v4/sources', { data: payload });\n }\n}\n\nexport class WebsiteButtonsResource extends BaseResource {\n async list(params?: ListWebsiteButtonsParams): Promise<ListWebsiteButtonsResponse> {\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.with !== undefined) queryParams.with = params.with;\n }\n const query = qs.stringify(queryParams, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListWebsiteButtonsResponse>(`/api/v4/website_buttons${qsStr}`);\n return response.data;\n }\n\n async getBySourceId(sourceId: number, params?: { with?: 'scripts' | string }): Promise<WebsiteButton> {\n const queryParams: any = {};\n if (params && params.with !== undefined) {\n queryParams.with = params.with;\n }\n const query = qs.stringify(queryParams, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<WebsiteButton>(`/api/v4/website_buttons/${sourceId}${qsStr}`);\n return response.data;\n }\n\n async create(payload: CreateWebsiteButtonInput): Promise<CreateWebsiteButtonResponse> {\n if ((!payload.trusted_websites || payload.trusted_websites.length === 0) && !payload.is_used_in_app) {\n console.warn(`[WebsiteButtonsResource] A Kommo indica que se não enviar 'trusted_websites', é preciso enviar 'is_used_in_app' como true.`);\n }\n const response = await this.client.post<CreateWebsiteButtonResponse>('/api/v4/website_buttons', payload);\n return response.data;\n }\n\n async connectOnlineChat(sourceId: number | string): Promise<void> {\n await this.client.post(`/api/v4/website_buttons/${sourceId}/online_chat`);\n }\n\n async update(sourceId: number, payload: UpdateWebsiteButtonInput): Promise<WebsiteButton> {\n const response = await this.client.patch<WebsiteButton>(`/api/v4/website_buttons/${sourceId}`, payload);\n return response.data;\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n ListChatTemplatesParams,\n ListChatTemplatesResponse,\n ChatTemplate,\n CreateChatTemplateInput,\n CreateChatTemplatesResponse,\n UpdateChatTemplateInput,\n UpdateChatTemplatesResponse,\n SubmitWhatsAppTemplateReviewResponse,\n UpdateWhatsAppTemplateReviewStatusInput,\n UpdateWhatsAppTemplateReviewStatusResponse,\n DeleteChatTemplateInput\n} from './types';\n\nexport class ChatTemplatesResource extends BaseResource {\n async list(params?: ListChatTemplatesParams): Promise<ListChatTemplatesResponse> {\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.with !== undefined) queryParams.with = params.with;\n\n const filter: any = {};\n if (params.filter_external_id !== undefined) filter.external_id = params.filter_external_id;\n\n if (Object.keys(filter).length > 0) {\n queryParams.filter = filter;\n }\n }\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListChatTemplatesResponse>(`/api/v4/chats/templates${qsStr}`);\n \n if (response.status === 204 || !response.data) {\n return { _page: 1, _embedded: { chat_templates: [] } };\n }\n \n return response.data;\n }\n\n async getById(id: number, params?: { with?: 'reviews' | string }): Promise<ChatTemplate> {\n const queryParams: any = {};\n if (params && params.with !== undefined) {\n queryParams.with = params.with;\n }\n const query = qs.stringify(queryParams, { skipNulls: true });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ChatTemplate>(`/api/v4/chats/templates/${id}${qsStr}`);\n return response.data;\n }\n\n async create(items: CreateChatTemplateInput | CreateChatTemplateInput[]): Promise<CreateChatTemplatesResponse> {\n const payload = Array.isArray(items) ? items : [items];\n const response = await this.client.post<CreateChatTemplatesResponse>('/api/v4/chats/templates', payload);\n return response.data;\n }\n\n async update(items: UpdateChatTemplateInput | UpdateChatTemplateInput[]): Promise<UpdateChatTemplatesResponse> {\n const payload = Array.isArray(items) ? items : [items];\n // Validação de segurança local para evitar erro HTTP opaco se o desenvolvedor tentar editar um Waba já aprovado.\n // Como a API não retorna o state no payload de input obrigatoriamente, enviamos um aviso (warning).\n const isWaba = payload.some(item => item.type === 'waba');\n if (isWaba) {\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.`);\n }\n\n const response = await this.client.patch<UpdateChatTemplatesResponse>('/api/v4/chats/templates', payload);\n return response.data;\n }\n\n async submitForReview(id: number): Promise<SubmitWhatsAppTemplateReviewResponse> {\n const response = await this.client.post<SubmitWhatsAppTemplateReviewResponse>(`/api/v4/chats/templates/${id}/review`);\n return response.data;\n }\n\n async updateReviewStatus(id: number, reviewId: number, payload: UpdateWhatsAppTemplateReviewStatusInput): Promise<UpdateWhatsAppTemplateReviewStatusResponse> {\n const response = await this.client.post<UpdateWhatsAppTemplateReviewStatusResponse>(`/api/v4/chats/templates/${id}/review/${reviewId}`, payload);\n return response.data;\n }\n\n async delete(items: DeleteChatTemplateInput | DeleteChatTemplateInput[]): Promise<void> {\n const payload = Array.isArray(items) ? items : [items];\n await this.client.delete('/api/v4/chats/templates', { data: payload });\n }\n\n async deleteOne(id: number): Promise<void> {\n await this.client.delete(`/api/v4/chats/templates/${id}`);\n }\n}\n","import qs from 'qs';\nimport { BaseResource } from '../../base';\nimport {\n ListWebhooksParams,\n ListWebhooksResponse,\n Webhook,\n CreateWebhookInput,\n DeleteWebhookInput\n} from './types';\n\nexport class WebhooksResource extends BaseResource {\n async list(params?: ListWebhooksParams): Promise<ListWebhooksResponse> {\n const queryParams: any = {};\n if (params) {\n const filter: any = {};\n if (params.filter_destination !== undefined) filter.destination = params.filter_destination;\n \n if (Object.keys(filter).length > 0) {\n queryParams.filter = filter;\n }\n }\n const query = qs.stringify(queryParams, { skipNulls: true, arrayFormat: 'brackets' });\n const qsStr = query ? `?${query}` : '';\n const response = await this.client.get<ListWebhooksResponse>(`/api/v4/webhooks${qsStr}`);\n \n if (response.status === 204 || !response.data) {\n return { _total_items: 0, _embedded: { webhooks: [] } };\n }\n return response.data;\n }\n\n async create(payload: CreateWebhookInput): Promise<Webhook> {\n const response = await this.client.post<Webhook>('/api/v4/webhooks', payload);\n return response.data;\n }\n\n async delete(payload: DeleteWebhookInput): Promise<void> {\n const data = { destination: payload.destination };\n await this.client.delete('/api/v4/webhooks', { data });\n }\n}\n","export class KommoApiError extends Error {\n status?: number;\n title?: string;\n detail?: string;\n type?: string;\n raw?: unknown;\n\n constructor(message: string, info?: Partial<KommoApiError>) {\n super(message);\n this.name = 'KommoApiError';\n \n if (info) {\n this.status = info.status;\n this.title = info.title;\n this.detail = info.detail;\n this.type = info.type;\n this.raw = info.raw;\n }\n }\n}\n","export const KOMMO_PIPELINE_STAGE_COLORS = [\n '#fffeb2',\n '#fffd7f',\n '#fff000',\n '#ffeab2',\n '#ffdc7f',\n '#ffce5a',\n '#ffdbdb',\n '#ffc8c8',\n '#ff8f92',\n '#d6eaff',\n '#c1e0ff',\n '#98cbff',\n '#ebffb1',\n '#deff81',\n '#87f2c0',\n '#f9deff',\n '#f3beff',\n '#ccc8f9',\n '#eb93ff',\n '#f2f3f4',\n '#e6e8ea',\n] as const;\n\nexport type KommoPipelineStageColor = typeof KOMMO_PIPELINE_STAGE_COLORS[number];\n\nexport interface StatusDescription {\n level: 'newbie' | 'candidate' | 'master';\n description: string;\n}\n\nexport interface PipelineStatus {\n id: number;\n name: string;\n sort: number;\n is_editable: boolean;\n pipeline_id: number;\n color: string;\n type: 0 | 1 | number;\n account_id: number;\n request_id?: string;\n descriptions?: StatusDescription[];\n _links?: {\n self?: { href: string };\n };\n}\n\nexport interface Pipeline {\n id: number;\n name: string;\n sort: number;\n is_main: boolean;\n is_unsorted_on: boolean;\n is_archive: boolean;\n account_id: number | string;\n request_id?: string;\n _links?: {\n self?: { href: string };\n };\n _embedded?: {\n statuses?: PipelineStatus[];\n };\n}\n\nexport interface ListPipelinesResponse {\n _total_items?: number;\n _links?: {\n self?: { href: string };\n };\n _embedded?: {\n pipelines?: Pipeline[];\n };\n}\n\nexport interface CreatePipelineStatusInput {\n id?: number;\n name?: string;\n sort?: number;\n color?: KommoPipelineStageColor | string;\n request_id?: string;\n descriptions?: StatusDescription[];\n}\n\nexport interface CreatePipelineInput {\n name: string;\n sort?: number;\n is_main?: boolean;\n is_unsorted_on?: boolean;\n request_id?: string;\n _embedded?: {\n statuses?: CreatePipelineStatusInput[];\n };\n}\n\nexport interface CreatePipelinesResponse {\n _total_items?: number;\n _links?: {\n self?: { href: string };\n };\n _embedded?: {\n pipelines?: Pipeline[];\n };\n}\n\nexport interface UpdatePipelineInput {\n name?: string;\n sort?: number;\n is_main?: boolean;\n is_unsorted_on?: boolean;\n}\n\nexport interface ListPipelineStatusesResponse {\n _total_items?: number;\n _embedded?: {\n statuses?: PipelineStatus[];\n };\n}\n\nexport interface CreateStatusInput {\n name: string;\n sort: number;\n color?: KommoPipelineStageColor | string;\n request_id?: string;\n descriptions?: StatusDescription[];\n}\n\nexport interface CreateStatusesResponse {\n _total_items?: number;\n _embedded?: {\n statuses?: PipelineStatus[];\n };\n}\n\nexport interface UpdateStatusInput {\n name?: string;\n sort?: number;\n color?: KommoPipelineStageColor | string;\n descriptions?: StatusDescription[];\n}\n","export type EventWithParam =\n | 'contact_name'\n | 'lead_name'\n | 'company_name'\n | 'catalog_name'\n | 'catalog_element_name';\n\nexport type EventValueChange =\n | Record<string, unknown>\n | {\n task?: { text?: string };\n helpbot?: { id?: number };\n transaction?: { id?: number };\n note?: { id?: number };\n nps?: { rate?: number };\n message?: { id?: string };\n tag?: { name?: string };\n lead_status?: { id?: number; pipeline_id?: number };\n responsible_user?: { id?: number };\n task_deadline?: { timestamp?: number };\n task_type?: { id?: number };\n custom_field_value?: {\n field_id?: number;\n field_type?: number;\n enum_id?: number | null;\n text?: string;\n };\n link?: {\n entity?: {\n type?: string;\n id?: number;\n };\n };\n unlink?: {\n entity?: {\n type?: string;\n id?: number;\n };\n };\n };\n\nexport interface Event {\n id: string;\n type: string;\n entity_id: number;\n entity_type: string;\n created_by: number;\n created_at: number;\n value_after: EventValueChange[];\n value_before: EventValueChange[];\n account_id: number;\n\n _links?: {\n self?: {\n href: string;\n };\n };\n\n _embedded?: {\n entity?: {\n id: number;\n name?: string;\n _links?: {\n self?: {\n href: string;\n };\n };\n };\n };\n}\n\nexport type KnownEventType =\n | 'lead_added'\n | 'lead_deleted'\n | 'lead_restored'\n | 'lead_status_changed'\n | 'lead_linked'\n | 'lead_unlinked'\n | 'contact_added'\n | 'contact_deleted'\n | 'contact_restored'\n | 'contact_linked'\n | 'contact_unlinked'\n | 'company_added'\n | 'company_deleted'\n | 'company_restored'\n | 'company_linked'\n | 'company_unlinked'\n | 'task_added'\n | 'task_deleted'\n | 'task_completed'\n | 'task_type_changed'\n | 'task_text_changed'\n | 'task_deadline_changed'\n | 'task_result_added'\n | 'incoming_call'\n | 'outgoing_call'\n | 'incoming_mail'\n | 'outgoing_mail'\n | 'incoming_chat_message'\n | 'outgoing_chat_message'\n | 'entity_direct_message'\n | 'incoming_sms'\n | 'outgoing_sms'\n | 'entity_tag_added'\n | 'entity_tag_deleted'\n | 'entity_linked'\n | 'entity_unlinked'\n | 'sale_field_changed'\n | 'name_field_changed'\n | 'ltv_field_changed'\n | 'custom_field_value_changed'\n | 'entity_responsible_changed'\n | 'robot_replied'\n | 'intent_identified'\n | 'nps_rate_added'\n | 'link_followed'\n | 'common_note_added'\n | 'common_note_deleted'\n | 'attachment_note_added'\n | 'targeting_in_note_added'\n | 'targeting_out_note_added'\n | 'geo_note_added'\n | 'service_note_added'\n | 'site_visit_note_added'\n | 'entity_merged'\n | 'video_opened'\n | 'video_closed'\n | 'picture_opened'\n | 'picture_closed'\n | 'zoom_conference'\n | 'key_action_completed'\n | 'ai_result'\n | 'talk_created'\n | 'talk_closed'\n | 'conversation_answered'\n | 'meta_chat_subscription_added'\n | 'meta_chat_subscription_removed'\n | 'talk_missed_event'\n | 'page_mention'\n | 'dropbox_attachment'\n | `custom_field_${number}_value_changed`\n | string;\n\nexport interface EventValueFilters {\n leads_statuses?: Array<{\n pipeline_id: number;\n status_id: number;\n }>;\n responsible_user_id?: number[] | string;\n custom_field_values?: number[] | string;\n value?: string | number;\n}\n\nexport interface ListEventsParams {\n with?: EventWithParam[] | string;\n page?: number;\n limit?: number; // máximo 250\n\n filter_id?: string | string[];\n\n filter_created_at_from?: number;\n filter_created_at_to?: number;\n\n filter_created_by?: number[]; // até 10 IDs\n filter_entity?: Array<\n 'lead' | 'contact' | 'company' | 'task' | `catalog_${number}`\n > | string;\n\n filter_entity_id?: number[]; // usar com um único filter_entity\n filter_type?: KnownEventType[] | KnownEventType;\n\n filter_value_before?: EventValueFilters;\n filter_value_after?: EventValueFilters;\n}\n\nexport interface ListEventsResponse {\n _page: number;\n _links?: {\n self?: { href: string };\n next?: { href: string };\n };\n _embedded?: {\n events?: Event[];\n };\n}\n\nexport interface EventTypeDefinition {\n key: string;\n type: number;\n lang: string;\n}\n\nexport interface ListEventTypesParams {\n language_code?: 'en' | 'es' | 'pt' | string;\n}\n\nexport interface ListEventTypesResponse {\n _total_items?: number;\n _links?: {\n self?: { href: string };\n };\n _embedded?: {\n events_types?: EventTypeDefinition[];\n };\n}\n\n// Utilitários de Eventos\nexport const eventUtils = {\n isLeadStatusChanged: (event: Event) => event.type === 'lead_status_changed',\n isCustomFieldChanged: (event: Event) =>\n event.type === 'custom_field_value_changed' ||\n /^custom_field_\\d+_value_changed$/.test(event.type),\n};\n","export const KOMMO_TAG_COLORS = [\n 'EBEBEB',\n 'D0D0D0',\n 'F2DDF7',\n 'D1A4DC',\n 'FF8F92',\n 'FFC8C8',\n 'C7DB8C',\n 'DDEBB5',\n '8699DA',\n 'AABDFF',\n 'FFCE5A',\n 'FFE193',\n '90CDB0',\n 'C6F4DE',\n 'A9A5D7',\n 'D8D5FF',\n '86C0FC',\n '832161',\n '6A0F49',\n '0C7C59',\n '10599D',\n '9D2B32',\n '247BA0',\n] as const;\n\nexport type TagColor = typeof KOMMO_TAG_COLORS[number];\nexport type TagEntityType = 'leads' | 'contacts' | 'companies' | string;\n\nexport interface Tag {\n id: number;\n name: string;\n color?: TagColor | string;\n request_id?: string;\n}\n\nexport interface ListTagsParams {\n page?: number;\n limit?: number; // máximo 250\n query?: string;\n filter_id?: number[];\n filter_name?: string;\n}\n\nexport interface ListTagsResponse {\n _page: number;\n _links?: {\n self?: { href: string };\n next?: { href: string };\n };\n _embedded?: {\n tags?: Tag[];\n };\n}\n\nexport interface CreateTagInput {\n name: string;\n color?: TagColor | string; // apenas para leads\n request_id?: string;\n}\n\nexport interface CreateTagsResponse {\n _total_items?: number;\n _embedded?: {\n tags?: Array<{\n id: number;\n name: string;\n request_id?: string;\n }>;\n };\n}\n\nexport interface TagRefInput {\n id?: number;\n name?: string;\n}\n\nexport interface UpdateEntityTagsInput {\n id: number;\n _embedded: {\n tags: TagRefInput[] | null;\n };\n}\n\nexport interface EntityUpdateResult {\n id: number;\n updated_at: number;\n _links?: {\n self?: { href: string };\n };\n}\n\nexport interface UpdateEntityTagsBatchResponse {\n _links?: {\n self?: { href: string };\n };\n _embedded?: {\n leads?: Array<EntityUpdateResult>;\n contacts?: Array<EntityUpdateResult>;\n companies?: Array<EntityUpdateResult>;\n };\n}\n\nexport interface UpdateSingleEntityTagsInput {\n _embedded: {\n tags: TagRefInput[] | null;\n };\n}\n\nexport interface UpdateEntityTagsSingleResponse {\n _links?: {\n self?: { href: string };\n };\n _embedded?: {\n leads?: Array<EntityUpdateResult>;\n contacts?: Array<EntityUpdateResult>;\n companies?: Array<EntityUpdateResult>;\n };\n}\n","export const KNOWN_WEBHOOK_EVENTS = [\n 'add_lead',\n 'update_lead',\n 'delete_lead',\n 'restore_lead',\n 'add_contact',\n 'update_contact',\n 'delete_contact',\n 'restore_contact',\n 'add_company',\n 'update_company',\n 'delete_company',\n 'restore_company',\n 'add_task',\n 'update_task',\n 'delete_task',\n] as const;\n\nexport type WebhookEvent = typeof KNOWN_WEBHOOK_EVENTS[number] | string;\n\nexport interface Webhook {\n id: number;\n destination: string;\n created_at: number;\n updated_at: number;\n account_id: number;\n created_by: number;\n sort: number;\n disabled: boolean;\n settings: WebhookEvent[];\n}\n\nexport interface ListWebhooksParams {\n filter_destination?: string;\n}\n\nexport interface ListWebhooksResponse {\n _total_items?: number;\n _embedded?: {\n webhooks?: Webhook[];\n };\n}\n\nexport interface CreateWebhookInput {\n destination: string;\n settings: WebhookEvent[];\n sort?: number;\n}\n\nexport interface DeleteWebhookInput {\n destination: string;\n}\n"],"mappings":"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","names":["axios","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","qs","axios","qs"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "kommo-aiatende-api",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "SDK não oficial em TypeScript para integração com a API da Kommo CRM.",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsup",
|
|
13
|
+
"dev": "tsup --watch",
|
|
14
|
+
"test": "vitest run"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"kommo",
|
|
18
|
+
"crm",
|
|
19
|
+
"api",
|
|
20
|
+
"sdk",
|
|
21
|
+
"typescript"
|
|
22
|
+
],
|
|
23
|
+
"author": "Douglas",
|
|
24
|
+
"license": "ISC",
|
|
25
|
+
"type": "commonjs",
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"axios": "^1.15.2",
|
|
28
|
+
"qs": "^6.15.1"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "^25.6.0",
|
|
32
|
+
"@types/qs": "^6.15.0",
|
|
33
|
+
"tsup": "^8.5.1",
|
|
34
|
+
"typescript": "^6.0.3",
|
|
35
|
+
"vitest": "^4.1.5"
|
|
36
|
+
}
|
|
37
|
+
}
|