@oficialapi/sdk 9.0.1 → 9.0.3
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/README.md +407 -147
- package/dist/index.d.mts +130 -32
- package/dist/index.d.ts +130 -32
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client/http-client.ts","../src/modules/auth.ts","../src/modules/channels.ts","../src/modules/integrations.ts","../src/modules/whatsapp.ts","../src/modules/telegram.ts","../src/modules/webchat.ts","../src/modules/facebook.ts","../src/modules/instagram.ts","../src/index.ts"],"names":["API_BASE_URL","HttpClient","config","axios","requestConfig","error","response","delay","resolve","data","message","errorDetails","formattedError","url","accessToken","file","fieldName","additionalData","formData","blob","key","value","AuthModule","httpClient","clientId","clientSecret","ChannelsModule","IntegrationsModule","params","WhatsAppModule","token","templateId","TelegramModule","WebChatModule","FacebookModule","InstagramModule","OficialAPISDK","index_default"],"mappings":"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","file":"index.mjs","sourcesContent":["import axios, { AxiosInstance, AxiosError, AxiosRequestConfig } from 'axios';\r\nimport { SDKConfig, ApiResponse } from '../types';\r\n\r\n/**\r\n * URL base da API OficialAPI (fixa)\r\n */\r\nconst API_BASE_URL = 'https://api.oficialapi.com.br';\r\n\r\n/**\r\n * Configuração estendida para requisições com token\r\n */\r\ninterface RequestConfigWithToken extends AxiosRequestConfig {\r\n accessToken?: string;\r\n}\r\n\r\n/**\r\n * Cliente HTTP robusto com retry automático e tratamento de erros\r\n * Cada requisição deve receber o accessToken como parâmetro\r\n */\r\nexport class HttpClient {\r\n private axiosInstance: AxiosInstance;\r\n private config: {\r\n clientId: string;\r\n clientSecret: string;\r\n timeout: number;\r\n maxRetries: number;\r\n retryDelay: number;\r\n headers: Record<string, string>;\r\n };\r\n\r\n constructor(config: SDKConfig) {\r\n this.config = {\r\n clientId: config.clientId,\r\n clientSecret: config.clientSecret,\r\n timeout: config.timeout || 30000,\r\n maxRetries: config.maxRetries || 3,\r\n retryDelay: config.retryDelay || 1000,\r\n headers: config.headers || {},\r\n };\r\n\r\n this.axiosInstance = axios.create({\r\n baseURL: API_BASE_URL,\r\n timeout: this.config.timeout,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...this.config.headers,\r\n },\r\n });\r\n\r\n this.setupInterceptors();\r\n }\r\n\r\n private setupInterceptors() {\r\n // Request interceptor - adiciona token de autenticação se fornecido\r\n this.axiosInstance.interceptors.request.use(\r\n (config) => {\r\n // Não adiciona token para endpoint de autenticação\r\n if (config.url?.includes('/auth/token')) {\r\n return config;\r\n }\r\n\r\n // Adiciona token se foi fornecido na configuração da requisição\r\n const requestConfig = config as RequestConfigWithToken;\r\n if (requestConfig.accessToken && config.headers) {\r\n config.headers.Authorization = `Bearer ${requestConfig.accessToken}`;\r\n }\r\n\r\n return config;\r\n },\r\n (error) => Promise.reject(error)\r\n );\r\n\r\n // Response interceptor - trata erros e retry\r\n this.axiosInstance.interceptors.response.use(\r\n (response) => response,\r\n async (error: AxiosError) => {\r\n const config = error.config as AxiosRequestConfig & { _retry?: boolean; _retryCount?: number };\r\n\r\n // Se não tiver config, não faz retry\r\n if (!config) {\r\n return Promise.reject(this.formatError(error));\r\n }\r\n\r\n // Retry para erros de rede ou 5xx\r\n const shouldRetry =\r\n (!error.response || (error.response.status >= 500 && error.response.status < 600)) &&\r\n (!config._retryCount || config._retryCount < this.config.maxRetries);\r\n\r\n if (shouldRetry) {\r\n config._retryCount = (config._retryCount || 0) + 1;\r\n const delay = this.config.retryDelay * config._retryCount;\r\n\r\n await new Promise((resolve) => setTimeout(resolve, delay));\r\n return this.axiosInstance(config);\r\n }\r\n\r\n return Promise.reject(this.formatError(error));\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Formata erros da API\r\n */\r\n private formatError(error: AxiosError): Error {\r\n if (error.response) {\r\n const data = error.response.data as ApiResponse;\r\n const message = data?.error?.message || data?.message || error.message;\r\n const errorDetails = data?.error?.details || [];\r\n\r\n const formattedError = new Error(message);\r\n (formattedError as any).status = error.response.status;\r\n (formattedError as any).data = error.response.data;\r\n (formattedError as any).details = errorDetails;\r\n\r\n return formattedError;\r\n }\r\n\r\n if (error.request) {\r\n return new Error('Erro de conexão com a API. Verifique sua conexão com a internet.');\r\n }\r\n\r\n return error;\r\n }\r\n\r\n /**\r\n * Faz uma requisição GET\r\n * @param accessToken Token de acesso (obrigatório para endpoints autenticados)\r\n */\r\n async get<T = any>(url: string, accessToken?: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>> {\r\n const requestConfig: RequestConfigWithToken = {\r\n ...config,\r\n accessToken,\r\n };\r\n const response = await this.axiosInstance.get<ApiResponse<T>>(url, requestConfig);\r\n return response.data;\r\n }\r\n\r\n /**\r\n * Faz uma requisição POST\r\n * @param accessToken Token de acesso (obrigatório para endpoints autenticados)\r\n */\r\n async post<T = any>(url: string, data?: any, accessToken?: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>> {\r\n const requestConfig: RequestConfigWithToken = {\r\n ...config,\r\n accessToken,\r\n };\r\n const response = await this.axiosInstance.post<ApiResponse<T>>(url, data, requestConfig);\r\n return response.data;\r\n }\r\n\r\n /**\r\n * Faz uma requisição PUT\r\n * @param accessToken Token de acesso (obrigatório para endpoints autenticados)\r\n */\r\n async put<T = any>(url: string, data?: any, accessToken?: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>> {\r\n const requestConfig: RequestConfigWithToken = {\r\n ...config,\r\n accessToken,\r\n };\r\n const response = await this.axiosInstance.put<ApiResponse<T>>(url, data, requestConfig);\r\n return response.data;\r\n }\r\n\r\n /**\r\n * Faz uma requisição DELETE\r\n * @param accessToken Token de acesso (obrigatório para endpoints autenticados)\r\n * @param data Dados a serem enviados no body (opcional)\r\n */\r\n async delete<T = any>(url: string, accessToken?: string, data?: any, config?: AxiosRequestConfig): Promise<ApiResponse<T>> {\r\n const requestConfig: RequestConfigWithToken = {\r\n ...config,\r\n accessToken,\r\n data, // Axios aceita data em DELETE através do config\r\n };\r\n const response = await this.axiosInstance.delete<ApiResponse<T>>(url, requestConfig);\r\n return response.data;\r\n }\r\n\r\n /**\r\n * Faz upload de arquivo\r\n * @param accessToken Token de acesso (obrigatório para endpoints autenticados)\r\n */\r\n async upload<T = any>(\r\n url: string,\r\n file: File | Blob | Buffer,\r\n accessToken?: string,\r\n fieldName: string = 'file',\r\n additionalData?: Record<string, any>\r\n ): Promise<ApiResponse<T>> {\r\n const formData = new FormData();\r\n\r\n if (file instanceof Buffer) {\r\n const blob = new Blob([file]);\r\n formData.append(fieldName, blob);\r\n } else {\r\n formData.append(fieldName, file);\r\n }\r\n\r\n if (additionalData) {\r\n Object.entries(additionalData).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n formData.append(key, typeof value === 'string' ? value : JSON.stringify(value));\r\n }\r\n });\r\n }\r\n\r\n const requestConfig: RequestConfigWithToken = {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n accessToken,\r\n };\r\n\r\n const response = await this.axiosInstance.post<ApiResponse<T>>(url, formData, requestConfig);\r\n\r\n return response.data;\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\r\nimport { TokenResponse } from '../types';\r\n\r\n/**\r\n * Módulo de Autenticação\r\n */\r\nexport class AuthModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Gera um novo token de acesso\r\n */\r\n async getToken(clientId: string, clientSecret: string): Promise<TokenResponse> {\r\n const response = await this.httpClient.post<TokenResponse>('/api/v1/auth/token', {\r\n client_id: clientId,\r\n client_secret: clientSecret,\r\n });\r\n\r\n if (!response.success || !response.data) {\r\n throw new Error(response.error?.message || 'Falha ao obter token');\r\n }\r\n\r\n return response.data;\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\r\nimport { Channel } from '../types';\r\n\r\n/**\r\n * Módulo de Canais\r\n */\r\nexport class ChannelsModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Lista todos os canais do usuário\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async list(accessToken: string): Promise<Channel[]> {\r\n const response = await this.httpClient.get<Channel[]>('/api/v1/channels', accessToken);\r\n\r\n if (!response.success || !response.data) {\r\n throw new Error(response.error?.message || 'Falha ao listar canais');\r\n }\r\n\r\n return Array.isArray(response.data) ? response.data : [response.data];\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\r\nimport { CreateWebhookParams, Webhook } from '../types';\r\n\r\n/**\r\n * Módulo de Integrações\r\n */\r\nexport class IntegrationsModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Cria um novo webhook\r\n * @param params Parâmetros do webhook\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async createWebhook(params: CreateWebhookParams, accessToken: string): Promise<Webhook> {\r\n const response = await this.httpClient.post<Webhook>(\r\n '/api/v1/integrations',\r\n {\r\n url: params.url,\r\n expiresInDays: params.expiresInDays,\r\n },\r\n accessToken\r\n );\r\n\r\n if (!response.success || !response.data) {\r\n throw new Error(response.error?.message || 'Falha ao criar webhook');\r\n }\r\n\r\n return response.data;\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\r\nimport {\r\n SendWhatsAppTextParams,\r\n SendWhatsAppMediaParams,\r\n SendWhatsAppTemplateParams,\r\n SendWhatsAppButtonsParams,\r\n SendWhatsAppListParams,\r\n ReplyWhatsAppParams,\r\n ReactWhatsAppParams,\r\n CreateTemplateParams,\r\n UploadMediaParams,\r\n SendOrderDetailsParams,\r\n SendOrderStatusParams,\r\n SendWhatsAppAudioParams,\r\n SendWhatsAppStickerParams,\r\n SendWhatsAppVideoParams,\r\n SendWhatsAppDocumentParams,\r\n SendWhatsAppContactParams,\r\n SendWhatsAppLocationParams,\r\n SendWhatsAppLocationRequestParams,\r\n SendWhatsAppCtaUrlParams,\r\n SendWhatsAppMediaCarouselParams,\r\n DownloadWhatsAppMediaParams,\r\n} from '../types';\r\n\r\n/**\r\n * Módulo WhatsApp - Envio de mensagens e gerenciamento de templates\r\n */\r\nexport class WhatsAppModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Envia mensagem de texto\r\n * @param params Parâmetros da mensagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendText(params: SendWhatsAppTextParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-message', {\r\n token: params.token,\r\n sender: params.sender,\r\n messageText: params.messageText,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mídia (imagem, vídeo, áudio, documento)\r\n * @param params Parâmetros da mídia\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendMedia(params: SendWhatsAppMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-media', {\r\n token: params.token,\r\n sender: params.sender,\r\n fileUrl: params.fileUrl,\r\n type: params.type,\r\n caption: params.caption,\r\n ...(params.fileName && { fileName: params.fileName }),\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia template\r\n * @param params Parâmetros do template\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendTemplate(params: SendWhatsAppTemplateParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-template', {\r\n token: params.token,\r\n sender: params.sender,\r\n templateName: params.templateName,\r\n languageCode: params.languageCode,\r\n components: params.components,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mensagem com botões\r\n * @param params Parâmetros dos botões\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendButtons(params: SendWhatsAppButtonsParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-buttons', {\r\n token: params.token,\r\n sender: params.sender,\r\n text: params.text,\r\n buttons: params.buttons,\r\n ...(params.media && { media: params.media }),\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia lista interativa\r\n * @param params Parâmetros da lista\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendList(params: SendWhatsAppListParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-list', {\r\n token: params.token,\r\n sender: params.sender,\r\n headerText: params.headerText,\r\n bodyText: params.bodyText,\r\n buttonText: params.buttonText,\r\n sections: params.sections,\r\n ...(params.footerText && { footerText: params.footerText }),\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Responde a uma mensagem\r\n * @param params Parâmetros da resposta\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async replyMessage(params: ReplyWhatsAppParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/reply-message', {\r\n token: params.token,\r\n sender: params.sender,\r\n messageText: params.messageText,\r\n ...(params.replyMessageId && { replyMessageId: params.replyMessageId }),\r\n ...(params.preview_url !== undefined && { preview_url: params.preview_url }),\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Reage a uma mensagem\r\n * @param params Parâmetros da reação\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async reactMessage(params: ReactWhatsAppParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/react-message', {\r\n token: params.token,\r\n sender: params.sender,\r\n emoji: params.emoji,\r\n ...(params.message_id && { message_id: params.message_id }),\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Cria um template\r\n * @param params Parâmetros do template\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async createTemplate(params: CreateTemplateParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/create-template', {\r\n token: params.token,\r\n name: params.name,\r\n language: params.language,\r\n category: params.category,\r\n components: params.components,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Lista templates\r\n * @param token Token do canal\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async listTemplates(token: string, accessToken: string) {\r\n return this.httpClient.get(`/api/v1/whatsapp/templates?token=${encodeURIComponent(token)}`, accessToken);\r\n }\r\n\r\n /**\r\n * Obtém detalhes de um template\r\n * @param token Token do canal\r\n * @param templateId ID do template\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async getTemplate(token: string, templateId: string, accessToken: string) {\r\n return this.httpClient.get(`/api/v1/whatsapp/templates/${templateId}?token=${encodeURIComponent(token)}`, accessToken);\r\n }\r\n\r\n /**\r\n * Faz upload de mídia para templates\r\n * @param params Parâmetros do upload\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async uploadMedia(params: UploadMediaParams, accessToken: string) {\r\n return this.httpClient.upload('/api/v1/whatsapp/upload-media', params.file, accessToken, 'file', {\r\n token: params.token,\r\n ...(params.filename && { filename: params.filename }),\r\n });\r\n }\r\n\r\n /**\r\n * Envia detalhes do pedido com opções de pagamento\r\n * @param params Parâmetros do pedido\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendOrderDetails(params: SendOrderDetailsParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-order-details', {\r\n token: params.token,\r\n sender: params.sender,\r\n ...(params.headerText && { headerText: params.headerText }),\r\n bodyText: params.bodyText,\r\n ...(params.footerText && { footerText: params.footerText }),\r\n reference_id: params.reference_id,\r\n type: params.type,\r\n currency: params.currency,\r\n total_amount: params.total_amount,\r\n order: params.order,\r\n ...(params.payment_settings && { payment_settings: params.payment_settings }),\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Atualiza status do pedido\r\n * @param params Parâmetros do status\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendOrderStatus(params: SendOrderStatusParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-order-status', {\r\n token: params.token,\r\n sender: params.sender,\r\n bodyText: params.bodyText,\r\n ...(params.footerText && { footerText: params.footerText }),\r\n reference_id: params.reference_id,\r\n order_status: params.order_status,\r\n ...(params.status_description && { status_description: params.status_description }),\r\n ...(params.payment_status && { payment_status: params.payment_status }),\r\n ...(params.payment_timestamp !== undefined && { payment_timestamp: params.payment_timestamp }),\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia áudio\r\n * @param params Parâmetros do áudio\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendAudio(params: SendWhatsAppAudioParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-audio', {\r\n token: params.token,\r\n sender: params.sender,\r\n mediaId: params.mediaId,\r\n ...(params.voice !== undefined && { voice: params.voice }),\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia sticker\r\n * @param params Parâmetros do sticker\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendSticker(params: SendWhatsAppStickerParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-sticker', {\r\n token: params.token,\r\n sender: params.sender,\r\n mediaId: params.mediaId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia vídeo\r\n * @param params Parâmetros do vídeo\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendVideo(params: SendWhatsAppVideoParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-video', {\r\n token: params.token,\r\n sender: params.sender,\r\n mediaId: params.mediaId,\r\n ...(params.caption && { caption: params.caption }),\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia documento\r\n * @param params Parâmetros do documento\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendDocument(params: SendWhatsAppDocumentParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-document', {\r\n token: params.token,\r\n sender: params.sender,\r\n mediaId: params.mediaId,\r\n ...(params.filename && { filename: params.filename }),\r\n ...(params.caption && { caption: params.caption }),\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia contato\r\n * @param params Parâmetros do contato\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendContact(params: SendWhatsAppContactParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-contact', {\r\n token: params.token,\r\n sender: params.sender,\r\n contacts: params.contacts,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia localização\r\n * @param params Parâmetros da localização\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendLocation(params: SendWhatsAppLocationParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-location', {\r\n token: params.token,\r\n sender: params.sender,\r\n latitude: params.latitude,\r\n longitude: params.longitude,\r\n name: params.name,\r\n address: params.address,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Solicita localização\r\n * @param params Parâmetros da solicitação\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendLocationRequest(params: SendWhatsAppLocationRequestParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-location-request', {\r\n token: params.token,\r\n sender: params.sender,\r\n bodyText: params.bodyText,\r\n ...(params.headerText && { headerText: params.headerText }),\r\n ...(params.footerText && { footerText: params.footerText }),\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mensagem com botão CTA URL\r\n * @param params Parâmetros do CTA\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendCtaUrl(params: SendWhatsAppCtaUrlParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-cta-url', {\r\n token: params.token,\r\n sender: params.sender,\r\n bodyText: params.bodyText,\r\n buttonText: params.buttonText,\r\n url: params.url,\r\n ...(params.header && { header: params.header }),\r\n ...(params.footerText && { footerText: params.footerText }),\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia carrossel de mídia\r\n * @param params Parâmetros do carrossel\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendMediaCarousel(params: SendWhatsAppMediaCarouselParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/send-media-carousel', {\r\n token: params.token,\r\n sender: params.sender,\r\n bodyText: params.bodyText,\r\n cards: params.cards,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Baixa uma mídia descriptografada do WhatsApp usando a URL\r\n * @param params Parâmetros do download\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async downloadMedia(params: DownloadWhatsAppMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/whatsapp/download-media', {\r\n token: params.token,\r\n url: params.url,\r\n }, accessToken);\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\r\nimport {\r\n SendTelegramTextParams,\r\n SendTelegramMediaParams,\r\n SendTelegramButtonsParams,\r\n SendTelegramLocationParams,\r\n SendTelegramContactParams,\r\n SendTelegramPollParams,\r\n SendTelegramVenueParams,\r\n SendTelegramDiceParams,\r\n SendTelegramStickerParams,\r\n SendTelegramVoiceParams,\r\n SendTelegramVideoNoteParams,\r\n SendTelegramMediaGroupParams,\r\n SendTelegramReplyKeyboardParams,\r\n EditTelegramMessageParams,\r\n DeleteTelegramMessageParams,\r\n DownloadTelegramMediaParams,\r\n} from '../types';\r\n\r\n/**\r\n * Módulo Telegram - Envio de mensagens e gerenciamento\r\n */\r\nexport class TelegramModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Envia mensagem de texto\r\n * @param params Parâmetros da mensagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendMessage(params: SendTelegramTextParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-message', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n text: params.text,\r\n parseMode: params.parseMode,\r\n replyToMessageId: params.replyToMessageId,\r\n disableNotification: params.disableNotification,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mídia\r\n * @param params Parâmetros da mídia\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendMedia(params: SendTelegramMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-media', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n fileUrl: params.fileUrl,\r\n type: params.type,\r\n caption: params.caption,\r\n parseMode: params.parseMode,\r\n replyToMessageId: params.replyToMessageId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mensagem com botões\r\n * @param params Parâmetros dos botões\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendButtons(params: SendTelegramButtonsParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-buttons', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n text: params.text,\r\n buttons: params.buttons,\r\n parseMode: params.parseMode,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia localização\r\n * @param params Parâmetros da localização\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendLocation(params: SendTelegramLocationParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-location', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n latitude: params.latitude,\r\n longitude: params.longitude,\r\n livePeriod: params.livePeriod,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia contato\r\n * @param params Parâmetros do contato\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendContact(params: SendTelegramContactParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-contact', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n phoneNumber: params.phoneNumber,\r\n firstName: params.firstName,\r\n lastName: params.lastName,\r\n vcard: params.vcard,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia enquete\r\n * @param params Parâmetros da enquete\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendPoll(params: SendTelegramPollParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-poll', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n question: params.question,\r\n options: params.options,\r\n isAnonymous: params.isAnonymous,\r\n type: params.type,\r\n correctOptionId: params.correctOptionId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia venue (local)\r\n * @param params Parâmetros do venue\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendVenue(params: SendTelegramVenueParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-venue', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n latitude: params.latitude,\r\n longitude: params.longitude,\r\n title: params.title,\r\n address: params.address,\r\n foursquareId: params.foursquareId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia dado/emoji animado\r\n * @param params Parâmetros do dado\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendDice(params: SendTelegramDiceParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-dice', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n emoji: params.emoji,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia sticker\r\n * @param params Parâmetros do sticker\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendSticker(params: SendTelegramStickerParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-sticker', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n stickerUrl: params.stickerUrl,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mensagem de voz\r\n * @param params Parâmetros da voz\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendVoice(params: SendTelegramVoiceParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-voice', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n voiceUrl: params.voiceUrl,\r\n caption: params.caption,\r\n duration: params.duration,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia video note\r\n * @param params Parâmetros do video note\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendVideoNote(params: SendTelegramVideoNoteParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-video-note', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n videoNoteUrl: params.videoNoteUrl,\r\n duration: params.duration,\r\n length: params.length,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia grupo de mídia\r\n * @param params Parâmetros do grupo de mídia\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendMediaGroup(params: SendTelegramMediaGroupParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-media-group', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n media: params.media,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia teclado de resposta\r\n * @param params Parâmetros do teclado\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendReplyKeyboard(params: SendTelegramReplyKeyboardParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-reply-keyboard', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n text: params.text,\r\n keyboard: params.keyboard,\r\n resizeKeyboard: params.resizeKeyboard,\r\n oneTimeKeyboard: params.oneTimeKeyboard,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Edita mensagem\r\n * @param params Parâmetros da edição\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async editMessage(params: EditTelegramMessageParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/edit-message', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n messageId: params.messageId,\r\n text: params.text,\r\n parseMode: params.parseMode,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Deleta mensagem\r\n * @param params Parâmetros da deleção\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async deleteMessage(params: DeleteTelegramMessageParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/delete-message', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n messageId: params.messageId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Baixa uma mídia descriptografada do Telegram usando o file_id\r\n * @param params Parâmetros do download\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async downloadMedia(params: DownloadTelegramMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/download-media', {\r\n token: params.token,\r\n fileId: params.fileId,\r\n }, accessToken);\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\r\nimport {\r\n SendWebChatTextParams,\r\n SendWebChatMediaParams,\r\n SendWebChatCarouselParams,\r\n SendWebChatFormParams,\r\n SendWebChatQuickRepliesParams,\r\n SendWebChatCardParams,\r\n SendWebChatButtonsParams,\r\n} from '../types';\r\n\r\n/**\r\n * Módulo WebChat - Envio de mensagens via WebChat\r\n */\r\nexport class WebChatModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Envia mensagem de texto\r\n * @param params Parâmetros da mensagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendText(params: SendWebChatTextParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/webchat/send-text', {\r\n token: params.token,\r\n sender: params.sender,\r\n messageText: params.messageText,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mídia\r\n * @param params Parâmetros da mídia\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendMedia(params: SendWebChatMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/webchat/send-media', {\r\n token: params.token,\r\n sender: params.sender,\r\n fileUrl: params.fileUrl,\r\n type: params.type,\r\n caption: params.caption,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia carousel\r\n * @param params Parâmetros do carousel\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendCarousel(params: SendWebChatCarouselParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/webchat/send-carousel', {\r\n token: params.token,\r\n sender: params.sender,\r\n cards: params.cards,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia formulário\r\n * @param params Parâmetros do formulário\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendForm(params: SendWebChatFormParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/webchat/send-form', {\r\n token: params.token,\r\n sender: params.sender,\r\n title: params.title,\r\n fields: params.fields,\r\n submitButtonText: params.submitButtonText,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia quick replies\r\n * @param params Parâmetros dos quick replies\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendQuickReplies(params: SendWebChatQuickRepliesParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/webchat/send-quick-replies', {\r\n token: params.token,\r\n sender: params.sender,\r\n messageText: params.messageText,\r\n quickReplies: params.quickReplies,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia card\r\n * @param params Parâmetros do card\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendCard(params: SendWebChatCardParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/webchat/send-card', {\r\n token: params.token,\r\n sender: params.sender,\r\n title: params.title,\r\n description: params.description,\r\n imageUrl: params.imageUrl,\r\n buttons: params.buttons,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia botões\r\n * @param params Parâmetros dos botões\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendButtons(params: SendWebChatButtonsParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/webchat/send-buttons', {\r\n token: params.token,\r\n sender: params.sender,\r\n messageText: params.messageText,\r\n buttons: params.buttons,\r\n }, accessToken);\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\r\nimport {\r\n ListPostsParams,\r\n ListCommentsParams,\r\n CreatePostParams,\r\n ReplyCommentParams,\r\n DeleteCommentParams,\r\n SendFacebookTextParams,\r\n SendFacebookMediaParams,\r\n SendFacebookButtonsParams,\r\n SendFacebookStickerParams,\r\n ReplyFacebookMessageParams,\r\n ReplyFacebookMediaParams,\r\n SharePostParams,\r\n GetFacebookUserProfileParams,\r\n GetFacebookPageProfileParams,\r\n DownloadFacebookMediaParams,\r\n} from '../types';\r\n\r\n/**\r\n * Módulo Facebook - Gerenciamento de posts e mensagens\r\n */\r\nexport class FacebookModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Lista posts de uma página\r\n * @param params Parâmetros da listagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async listPosts(params: ListPostsParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/list-posts', {\r\n token: params.token,\r\n pageId: params.pageId,\r\n limit: params.limit,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Lista comentários de um post\r\n * @param params Parâmetros da listagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async listComments(params: ListCommentsParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/list-comments', {\r\n token: params.token,\r\n postId: params.postId,\r\n limit: params.limit,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Cria um post\r\n * @param params Parâmetros do post\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async createPost(params: CreatePostParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/create-post', {\r\n token: params.token,\r\n pageId: params.pageId,\r\n message: params.message,\r\n link: params.link,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Responde um comentário\r\n * @param params Parâmetros da resposta\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async replyComment(params: ReplyCommentParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/reply-comment', {\r\n token: params.token,\r\n commentId: params.commentId,\r\n message: params.message,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Deleta um comentário\r\n * @param params Parâmetros da deleção\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async deleteComment(params: DeleteCommentParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/delete-comment', {\r\n token: params.token,\r\n commentId: params.commentId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mensagem de texto\r\n * @param params Parâmetros da mensagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendText(params: SendFacebookTextParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/send-text', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n message: params.message,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mídia\r\n * @param params Parâmetros da mídia\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendMedia(params: SendFacebookMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/send-media', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n fileUrl: params.fileUrl,\r\n type: params.type,\r\n caption: params.caption,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mensagem com botões\r\n * @param params Parâmetros dos botões\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendButtons(params: SendFacebookButtonsParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/send-buttons', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n message: params.message,\r\n buttons: params.buttons,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia sticker\r\n * @param params Parâmetros do sticker\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendSticker(params: SendFacebookStickerParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/send-sticker', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n stickerId: params.stickerId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Responde uma mensagem\r\n * @param params Parâmetros da resposta\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async replyMessage(params: ReplyFacebookMessageParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/reply-message', {\r\n token: params.token,\r\n messageId: params.messageId,\r\n message: params.message,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Responde com mídia\r\n * @param params Parâmetros da resposta\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async replyMedia(params: ReplyFacebookMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/reply-media', {\r\n token: params.token,\r\n messageId: params.messageId,\r\n fileUrl: params.fileUrl,\r\n type: params.type,\r\n caption: params.caption,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Compartilha um post do Instagram\r\n * @param params Parâmetros do compartilhamento\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sharePost(params: SharePostParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/share-post', {\r\n token: params.token,\r\n mediaId: params.mediaId,\r\n recipientId: params.recipientId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Obtém perfil de um usuário do Facebook\r\n * @param params Parâmetros do perfil\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async getUserProfile(params: GetFacebookUserProfileParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/user-profile', {\r\n token: params.token,\r\n userId: params.userId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Obtém informações de uma página do Facebook\r\n * @param params Parâmetros da página\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async getPageProfile(params: GetFacebookPageProfileParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/page-profile', {\r\n token: params.token,\r\n pageId: params.pageId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Baixa uma mídia descriptografada do Facebook/Instagram usando a URL\r\n * @param params Parâmetros do download\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async downloadMedia(params: DownloadFacebookMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/download-media', {\r\n token: params.token,\r\n url: params.url,\r\n }, accessToken);\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\r\nimport {\r\n SendInstagramPrivateReplyParams,\r\n SendInstagramTextParams,\r\n SendInstagramMediaParams,\r\n SendInstagramImagesParams,\r\n SendInstagramStickerParams,\r\n ReactInstagramMessageParams,\r\n RemoveInstagramReactionParams,\r\n SendInstagramQuickRepliesParams,\r\n SendInstagramGenericTemplateParams,\r\n SendInstagramButtonTemplateParams,\r\n SendInstagramSenderActionParams,\r\n GetInstagramUserProfileParams,\r\n GetInstagramBusinessProfileParams,\r\n ListInstagramPostsParams,\r\n DownloadInstagramMediaParams,\r\n} from '../types';\r\n\r\n/**\r\n * Módulo Instagram - Envio de mensagens e gerenciamento\r\n */\r\nexport class InstagramModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Envia resposta privada a comentário\r\n * @param params Parâmetros da resposta\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendPrivateReply(params: SendInstagramPrivateReplyParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/private-reply', {\r\n token: params.token,\r\n commentId: params.commentId,\r\n message: params.message,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mensagem de texto\r\n * @param params Parâmetros da mensagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendText(params: SendInstagramTextParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/text', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n message: params.message,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mídia\r\n * @param params Parâmetros da mídia\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendMedia(params: SendInstagramMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/media', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n fileUrl: params.fileUrl,\r\n type: params.type,\r\n caption: params.caption,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia múltiplas imagens (carrossel)\r\n * @param params Parâmetros das imagens\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendImages(params: SendInstagramImagesParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/images', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n images: params.images,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia sticker (like/heart)\r\n * @param params Parâmetros do sticker\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendSticker(params: SendInstagramStickerParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/sticker', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n stickerType: params.stickerType,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Reage a uma mensagem\r\n * @param params Parâmetros da reação\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async reactMessage(params: ReactInstagramMessageParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/reaction', {\r\n token: params.token,\r\n messageId: params.messageId,\r\n reactionType: params.reactionType,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Remove reação de uma mensagem\r\n * @param params Parâmetros da remoção\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async removeReaction(params: RemoveInstagramReactionParams, accessToken: string) {\r\n return this.httpClient.delete('/api/v1/instagram/messages/reaction', accessToken, {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n messageId: params.messageId,\r\n });\r\n }\r\n\r\n /**\r\n * Envia quick replies\r\n * @param params Parâmetros dos quick replies\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendQuickReplies(params: SendInstagramQuickRepliesParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/quick-replies', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n message: params.message,\r\n quickReplies: params.quickReplies,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia template genérico (carrossel)\r\n * @param params Parâmetros do template\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendGenericTemplate(params: SendInstagramGenericTemplateParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/generic-template', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n elements: params.elements,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia template de botões\r\n * @param params Parâmetros do template\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendButtonTemplate(params: SendInstagramButtonTemplateParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/button-template', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n text: params.text,\r\n buttons: params.buttons,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia ação do remetente (typing, seen)\r\n * @param params Parâmetros da ação\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendSenderAction(params: SendInstagramSenderActionParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/sender-action', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n action: params.action,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Obtém perfil de um usuário do Instagram\r\n * \r\n * Obtém informações de perfil de um usuário do Instagram.\r\n * \r\n * Campos retornados:\r\n * - id: ID do usuário\r\n * - name: Nome do usuário (pode ser nulo)\r\n * - username: Nome de usuário do Instagram\r\n * \r\n * ⚠️ Nota: A API do Instagram Graph API para usuários regulares (tipo User) \r\n * retorna apenas campos básicos. Campos como foto de perfil, número de seguidores \r\n * e status de verificação não estão disponíveis para usuários regulares.\r\n * \r\n * ⚠️ O usuário deve ter enviado mensagem direta para sua conta. \r\n * Não é possível obter perfil de quem apenas comentou.\r\n * \r\n * @param params Parâmetros do perfil\r\n * @param params.token Token do canal\r\n * @param params.userId ID do usuário (IGSID)\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async getUserProfile(params: GetInstagramUserProfileParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/user-profile', {\r\n token: params.token,\r\n userId: params.userId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Lista publicações do Instagram\r\n * @param params Parâmetros da listagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async listPosts(params: ListInstagramPostsParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/posts', {\r\n token: params.token,\r\n userId: params.userId,\r\n limit: params.limit,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Obtém perfil da conta comercial do Instagram\r\n * @param params Parâmetros do perfil\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async getBusinessProfile(params: GetInstagramBusinessProfileParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/business-profile', {\r\n token: params.token,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Baixa uma mídia descriptografada do Instagram usando a URL\r\n * @param params Parâmetros do download\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async downloadMedia(params: DownloadInstagramMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/download-media', {\r\n token: params.token,\r\n url: params.url,\r\n }, accessToken);\r\n }\r\n}\r\n","import { HttpClient } from './client/http-client';\r\nimport { AuthModule } from './modules/auth';\r\nimport { ChannelsModule } from './modules/channels';\r\nimport { IntegrationsModule } from './modules/integrations';\r\nimport { WhatsAppModule } from './modules/whatsapp';\r\nimport { TelegramModule } from './modules/telegram';\r\nimport { WebChatModule } from './modules/webchat';\r\nimport { FacebookModule } from './modules/facebook';\r\nimport { InstagramModule } from './modules/instagram';\r\nimport { SDKConfig } from './types';\r\n\r\n/**\r\n * SDK OficialAPI - Cliente principal\r\n * \r\n * @example\r\n * ```typescript\r\n * import { OficialAPISDK } from '@oficialapi/sdk';\r\n * \r\n * const sdk = new OficialAPISDK({\r\n * clientId: 'your-client-id',\r\n * clientSecret: 'your-client-secret'\r\n * });\r\n * \r\n * // Enviar mensagem WhatsApp\r\n * const result = await sdk.whatsapp.sendText({\r\n * token: 'sk_live_...',\r\n * sender: '5511999999999',\r\n * messageText: 'Olá!'\r\n * });\r\n * ```\r\n */\r\nexport class OficialAPISDK {\r\n private httpClient: HttpClient;\r\n\r\n public readonly auth: AuthModule;\r\n public readonly channels: ChannelsModule;\r\n public readonly integrations: IntegrationsModule;\r\n public readonly whatsapp: WhatsAppModule;\r\n public readonly telegram: TelegramModule;\r\n public readonly webchat: WebChatModule;\r\n public readonly facebook: FacebookModule;\r\n public readonly instagram: InstagramModule;\r\n\r\n constructor(config: SDKConfig) {\r\n this.httpClient = new HttpClient(config);\r\n\r\n // Inicializa módulos\r\n this.auth = new AuthModule(this.httpClient);\r\n this.channels = new ChannelsModule(this.httpClient);\r\n this.integrations = new IntegrationsModule(this.httpClient);\r\n this.whatsapp = new WhatsAppModule(this.httpClient);\r\n this.telegram = new TelegramModule(this.httpClient);\r\n this.webchat = new WebChatModule(this.httpClient);\r\n this.facebook = new FacebookModule(this.httpClient);\r\n this.instagram = new InstagramModule(this.httpClient);\r\n }\r\n\r\n}\r\n\r\n// Exporta tipos\r\nexport * from './types';\r\n\r\n// Exporta também como default para compatibilidade\r\nexport default OficialAPISDK;\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/client/http-client.ts","../src/modules/auth.ts","../src/modules/channels.ts","../src/modules/integrations.ts","../src/modules/whatsapp.ts","../src/modules/telegram.ts","../src/modules/webchat.ts","../src/modules/facebook.ts","../src/modules/instagram.ts","../src/index.ts"],"names":["API_BASE_URL","HttpClient","config","axios","requestConfig","error","response","delay","resolve","data","message","errorDetails","formattedError","url","accessToken","file","fieldName","additionalData","formData","blob","key","value","AuthModule","httpClient","clientId","clientSecret","ChannelsModule","IntegrationsModule","params","WhatsAppModule","token","templateId","TelegramModule","WebChatModule","card","btn","field","qr","FacebookModule","InstagramModule","OficialAPISDK","index_default"],"mappings":"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","file":"index.mjs","sourcesContent":["import axios, { AxiosInstance, AxiosError, AxiosRequestConfig } from 'axios';\r\nimport { SDKConfig, ApiResponse } from '../types';\r\n\r\n/**\r\n * URL base da API OficialAPI (fixa)\r\n */\r\nconst API_BASE_URL = 'https://api.oficialapi.com.br';\r\n\r\n/**\r\n * Configuração estendida para requisições com token\r\n */\r\ninterface RequestConfigWithToken extends AxiosRequestConfig {\r\n accessToken?: string;\r\n}\r\n\r\n/**\r\n * Cliente HTTP robusto com retry automático e tratamento de erros\r\n * Cada requisição deve receber o accessToken como parâmetro\r\n */\r\nexport class HttpClient {\r\n private axiosInstance: AxiosInstance;\r\n private config: {\r\n clientId: string;\r\n clientSecret: string;\r\n timeout: number;\r\n maxRetries: number;\r\n retryDelay: number;\r\n headers: Record<string, string>;\r\n };\r\n\r\n constructor(config: SDKConfig) {\r\n this.config = {\r\n clientId: config.clientId,\r\n clientSecret: config.clientSecret,\r\n timeout: config.timeout || 30000,\r\n maxRetries: config.maxRetries || 3,\r\n retryDelay: config.retryDelay || 1000,\r\n headers: config.headers || {},\r\n };\r\n\r\n this.axiosInstance = axios.create({\r\n baseURL: API_BASE_URL,\r\n timeout: this.config.timeout,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...this.config.headers,\r\n },\r\n });\r\n\r\n this.setupInterceptors();\r\n }\r\n\r\n private setupInterceptors() {\r\n // Request interceptor - adiciona token de autenticação se fornecido\r\n this.axiosInstance.interceptors.request.use(\r\n (config) => {\r\n // Não adiciona token para endpoint de autenticação\r\n if (config.url?.includes('/auth/token')) {\r\n return config;\r\n }\r\n\r\n // Adiciona token se foi fornecido na configuração da requisição\r\n const requestConfig = config as RequestConfigWithToken;\r\n if (requestConfig.accessToken && config.headers) {\r\n config.headers.Authorization = `Bearer ${requestConfig.accessToken}`;\r\n }\r\n\r\n return config;\r\n },\r\n (error) => Promise.reject(error)\r\n );\r\n\r\n // Response interceptor - trata erros e retry\r\n this.axiosInstance.interceptors.response.use(\r\n (response) => response,\r\n async (error: AxiosError) => {\r\n const config = error.config as AxiosRequestConfig & { _retry?: boolean; _retryCount?: number };\r\n\r\n // Se não tiver config, não faz retry\r\n if (!config) {\r\n return Promise.reject(this.formatError(error));\r\n }\r\n\r\n // Retry para erros de rede ou 5xx\r\n const shouldRetry =\r\n (!error.response || (error.response.status >= 500 && error.response.status < 600)) &&\r\n (!config._retryCount || config._retryCount < this.config.maxRetries);\r\n\r\n if (shouldRetry) {\r\n config._retryCount = (config._retryCount || 0) + 1;\r\n const delay = this.config.retryDelay * config._retryCount;\r\n\r\n await new Promise((resolve) => setTimeout(resolve, delay));\r\n return this.axiosInstance(config);\r\n }\r\n\r\n return Promise.reject(this.formatError(error));\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Formata erros da API\r\n */\r\n private formatError(error: AxiosError): Error {\r\n if (error.response) {\r\n const data = error.response.data as ApiResponse;\r\n const message = data?.error?.message || data?.message || error.message;\r\n const errorDetails = data?.error?.details || [];\r\n\r\n const formattedError = new Error(message);\r\n (formattedError as any).status = error.response.status;\r\n (formattedError as any).data = error.response.data;\r\n (formattedError as any).details = errorDetails;\r\n\r\n return formattedError;\r\n }\r\n\r\n if (error.request) {\r\n return new Error('Erro de conexão com a API. Verifique sua conexão com a internet.');\r\n }\r\n\r\n return error;\r\n }\r\n\r\n /**\r\n * Faz uma requisição GET\r\n * @param accessToken Token de acesso (obrigatório para endpoints autenticados)\r\n */\r\n async get<T = any>(url: string, accessToken?: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>> {\r\n const requestConfig: RequestConfigWithToken = {\r\n ...config,\r\n accessToken,\r\n };\r\n const response = await this.axiosInstance.get<ApiResponse<T>>(url, requestConfig);\r\n return response.data;\r\n }\r\n\r\n /**\r\n * Faz uma requisição POST\r\n * @param accessToken Token de acesso (obrigatório para endpoints autenticados)\r\n */\r\n async post<T = any>(url: string, data?: any, accessToken?: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>> {\r\n const requestConfig: RequestConfigWithToken = {\r\n ...config,\r\n accessToken,\r\n };\r\n const response = await this.axiosInstance.post<ApiResponse<T>>(url, data, requestConfig);\r\n return response.data;\r\n }\r\n\r\n /**\r\n * Faz uma requisição PUT\r\n * @param accessToken Token de acesso (obrigatório para endpoints autenticados)\r\n */\r\n async put<T = any>(url: string, data?: any, accessToken?: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>> {\r\n const requestConfig: RequestConfigWithToken = {\r\n ...config,\r\n accessToken,\r\n };\r\n const response = await this.axiosInstance.put<ApiResponse<T>>(url, data, requestConfig);\r\n return response.data;\r\n }\r\n\r\n /**\r\n * Faz uma requisição DELETE\r\n * @param accessToken Token de acesso (obrigatório para endpoints autenticados)\r\n * @param data Dados a serem enviados no body (opcional)\r\n */\r\n async delete<T = any>(url: string, accessToken?: string, data?: any, config?: AxiosRequestConfig): Promise<ApiResponse<T>> {\r\n const requestConfig: RequestConfigWithToken = {\r\n ...config,\r\n accessToken,\r\n data, // Axios aceita data em DELETE através do config\r\n };\r\n const response = await this.axiosInstance.delete<ApiResponse<T>>(url, requestConfig);\r\n return response.data;\r\n }\r\n\r\n /**\r\n * Faz upload de arquivo\r\n * @param accessToken Token de acesso (obrigatório para endpoints autenticados)\r\n */\r\n async upload<T = any>(\r\n url: string,\r\n file: File | Blob | Buffer,\r\n accessToken?: string,\r\n fieldName: string = 'file',\r\n additionalData?: Record<string, any>\r\n ): Promise<ApiResponse<T>> {\r\n const formData = new FormData();\r\n\r\n if (file instanceof Buffer) {\r\n const blob = new Blob([file]);\r\n formData.append(fieldName, blob);\r\n } else {\r\n formData.append(fieldName, file);\r\n }\r\n\r\n if (additionalData) {\r\n Object.entries(additionalData).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n formData.append(key, typeof value === 'string' ? value : JSON.stringify(value));\r\n }\r\n });\r\n }\r\n\r\n const requestConfig: RequestConfigWithToken = {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n accessToken,\r\n };\r\n\r\n const response = await this.axiosInstance.post<ApiResponse<T>>(url, formData, requestConfig);\r\n\r\n return response.data;\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\r\nimport { TokenResponse } from '../types';\r\n\r\n/**\r\n * Módulo de Autenticação\r\n */\r\nexport class AuthModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Gera um novo token de acesso\r\n */\r\n async getToken(clientId: string, clientSecret: string): Promise<TokenResponse> {\r\n const response = await this.httpClient.post<TokenResponse>('/api/v1/auth/token', {\r\n client_id: clientId,\r\n client_secret: clientSecret,\r\n });\r\n\r\n if (!response.success || !response.data) {\r\n throw new Error(response.error?.message || 'Falha ao obter token');\r\n }\r\n\r\n return response.data;\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\r\nimport { Channel } from '../types';\r\n\r\n/**\r\n * Módulo de Canais\r\n */\r\nexport class ChannelsModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Lista todos os canais do usuário\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async list(accessToken: string): Promise<Channel[]> {\r\n const response = await this.httpClient.get<Channel[]>('/api/v1/channels', accessToken);\r\n\r\n if (!response.success || !response.data) {\r\n throw new Error(response.error?.message || 'Falha ao listar canais');\r\n }\r\n\r\n return Array.isArray(response.data) ? response.data : [response.data];\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\r\nimport { CreateWebhookParams, Webhook } from '../types';\r\n\r\n/**\r\n * Módulo de Integrações\r\n */\r\nexport class IntegrationsModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Cria um novo webhook\r\n * @param params Parâmetros do webhook\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async createWebhook(params: CreateWebhookParams, accessToken: string): Promise<Webhook> {\r\n const response = await this.httpClient.post<Webhook>(\r\n '/api/v1/integrations',\r\n {\r\n url: params.url,\r\n expiresInDays: params.expiresInDays,\r\n },\r\n accessToken\r\n );\r\n\r\n if (!response.success || !response.data) {\r\n throw new Error(response.error?.message || 'Falha ao criar webhook');\r\n }\r\n\r\n return response.data;\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\nimport {\n SendWhatsAppTextParams,\n SendWhatsAppMediaParams,\n SendWhatsAppTemplateParams,\n SendWhatsAppButtonsParams,\n SendWhatsAppListParams,\n ReplyWhatsAppParams,\n ReactWhatsAppParams,\n CreateTemplateParams,\n UploadMediaParams,\n SendOrderDetailsParams,\n SendOrderStatusParams,\n SendWhatsAppAudioParams,\n SendWhatsAppStickerParams,\n SendWhatsAppVideoParams,\n SendWhatsAppDocumentParams,\n SendWhatsAppContactParams,\n SendWhatsAppLocationParams,\n SendWhatsAppLocationRequestParams,\n SendWhatsAppCtaUrlParams,\n SendWhatsAppMediaCarouselParams,\n DownloadWhatsAppMediaParams,\n} from '../types';\n\n/**\n * Módulo WhatsApp - Envio de mensagens e gerenciamento de templates\n */\nexport class WhatsAppModule {\n constructor(private httpClient: HttpClient) {}\n\n /**\n * Envia mensagem de texto\n * @param params Parâmetros da mensagem\n * @param accessToken Token de acesso do usuário\n */\n async sendText(params: SendWhatsAppTextParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-message', {\n token: params.token,\n sender: params.sender,\n messageText: params.messageText,\n }, accessToken);\n }\n\n /**\n * Envia mídia (imagem, vídeo, áudio, documento)\n * @param params Parâmetros da mídia\n * @param accessToken Token de acesso do usuário\n */\n async sendMedia(params: SendWhatsAppMediaParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-media', {\n token: params.token,\n sender: params.sender,\n fileUrl: params.fileUrl,\n type: params.type,\n caption: params.caption,\n ...(params.fileName && { fileName: params.fileName }),\n }, accessToken);\n }\n\n /**\n * Envia template\n * @param params Parâmetros do template\n * @param accessToken Token de acesso do usuário\n */\n async sendTemplate(params: SendWhatsAppTemplateParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-template', {\n token: params.token,\n sender: params.sender,\n templateName: params.templateName,\n languageCode: params.languageCode,\n components: params.components,\n }, accessToken);\n }\n\n /**\n * Envia mensagem com botões\n * @param params Parâmetros dos botões\n * @param accessToken Token de acesso do usuário\n */\n async sendButtons(params: SendWhatsAppButtonsParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-buttons', {\n token: params.token,\n sender: params.sender,\n text: params.text,\n buttons: params.buttons,\n ...(params.media && { media: params.media }),\n }, accessToken);\n }\n\n /**\n * Envia lista interativa\n * @param params Parâmetros da lista\n * @param accessToken Token de acesso do usuário\n */\n async sendList(params: SendWhatsAppListParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-list', {\n token: params.token,\n sender: params.sender,\n headerText: params.headerText,\n bodyText: params.bodyText,\n buttonText: params.buttonText,\n sections: params.sections,\n ...(params.footerText && { footerText: params.footerText }),\n }, accessToken);\n }\n\n /**\n * Responde a uma mensagem\n * @param params Parâmetros da resposta\n * @param accessToken Token de acesso do usuário\n */\n async replyMessage(params: ReplyWhatsAppParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/reply-message', {\n token: params.token,\n sender: params.sender,\n messageText: params.messageText,\n ...(params.replyMessageId && { replyMessageId: params.replyMessageId }),\n ...(params.preview_url !== undefined && { preview_url: params.preview_url }),\n }, accessToken);\n }\n\n /**\n * Reage a uma mensagem\n * @param params Parâmetros da reação\n * @param accessToken Token de acesso do usuário\n */\n async reactMessage(params: ReactWhatsAppParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/react-message', {\n token: params.token,\n sender: params.sender,\n emoji: params.emoji,\n ...(params.message_id && { message_id: params.message_id }),\n }, accessToken);\n }\n\n /**\n * Cria um template\n * @param params Parâmetros do template\n * @param accessToken Token de acesso do usuário\n */\n async createTemplate(params: CreateTemplateParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/create-template', {\n token: params.token,\n name: params.name,\n language: params.language,\n category: params.category,\n components: params.components,\n }, accessToken);\n }\n\n /**\n * Lista templates\n * @param token Token do canal\n * @param accessToken Token de acesso do usuário\n */\n async listTemplates(token: string, accessToken: string) {\n return this.httpClient.get(`/api/v1/whatsapp/templates?token=${encodeURIComponent(token)}`, accessToken);\n }\n\n /**\n * Obtém detalhes de um template\n * @param token Token do canal\n * @param templateId ID do template\n * @param accessToken Token de acesso do usuário\n */\n async getTemplate(token: string, templateId: string, accessToken: string) {\n return this.httpClient.get(`/api/v1/whatsapp/templates/${templateId}?token=${encodeURIComponent(token)}`, accessToken);\n }\n\n /**\n * Faz upload de mídia para templates\n * @param params Parâmetros do upload\n * @param accessToken Token de acesso do usuário\n */\n async uploadMedia(params: UploadMediaParams, accessToken: string) {\n return this.httpClient.upload('/api/v1/whatsapp/upload-media', params.file, accessToken, 'file', {\n token: params.token,\n mediaType: params.mediaType,\n ...(params.filename && { filename: params.filename }),\n });\n }\n\n /**\n * Envia detalhes do pedido com opções de pagamento\n * @param params Parâmetros do pedido\n * @param accessToken Token de acesso do usuário\n */\n async sendOrderDetails(params: SendOrderDetailsParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-order-details', {\n token: params.token,\n sender: params.sender,\n ...(params.headerText && { headerText: params.headerText }),\n bodyText: params.bodyText,\n ...(params.footerText && { footerText: params.footerText }),\n reference_id: params.reference_id,\n type: params.type,\n currency: params.currency,\n total_amount: params.total_amount,\n order: params.order,\n ...(params.payment_settings && { payment_settings: params.payment_settings }),\n }, accessToken);\n }\n\n /**\n * Atualiza status do pedido\n * @param params Parâmetros do status\n * @param accessToken Token de acesso do usuário\n */\n async sendOrderStatus(params: SendOrderStatusParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-order-status', {\n token: params.token,\n sender: params.sender,\n bodyText: params.bodyText,\n ...(params.footerText && { footerText: params.footerText }),\n reference_id: params.reference_id,\n order_status: params.order_status,\n ...(params.status_description && { status_description: params.status_description }),\n ...(params.payment_status && { payment_status: params.payment_status }),\n ...(params.payment_timestamp !== undefined && { payment_timestamp: params.payment_timestamp }),\n }, accessToken);\n }\n\n /**\n * Envia áudio\n * @param params Parâmetros do áudio\n * @param accessToken Token de acesso do usuário\n */\n async sendAudio(params: SendWhatsAppAudioParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-audio', {\n token: params.token,\n sender: params.sender,\n mediaId: params.mediaId,\n ...(params.voice !== undefined && { voice: params.voice }),\n }, accessToken);\n }\n\n /**\n * Envia sticker\n * @param params Parâmetros do sticker\n * @param accessToken Token de acesso do usuário\n */\n async sendSticker(params: SendWhatsAppStickerParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-sticker', {\n token: params.token,\n sender: params.sender,\n mediaId: params.mediaId,\n }, accessToken);\n }\n\n /**\n * Envia vídeo\n * @param params Parâmetros do vídeo\n * @param accessToken Token de acesso do usuário\n */\n async sendVideo(params: SendWhatsAppVideoParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-video', {\n token: params.token,\n sender: params.sender,\n mediaId: params.mediaId,\n ...(params.caption && { caption: params.caption }),\n }, accessToken);\n }\n\n /**\n * Envia documento\n * @param params Parâmetros do documento\n * @param accessToken Token de acesso do usuário\n */\n async sendDocument(params: SendWhatsAppDocumentParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-document', {\n token: params.token,\n sender: params.sender,\n mediaId: params.mediaId,\n ...(params.filename && { filename: params.filename }),\n ...(params.caption && { caption: params.caption }),\n }, accessToken);\n }\n\n /**\n * Envia contato\n * @param params Parâmetros do contato\n * @param accessToken Token de acesso do usuário\n */\n async sendContact(params: SendWhatsAppContactParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-contact', {\n token: params.token,\n sender: params.sender,\n contacts: params.contacts,\n }, accessToken);\n }\n\n /**\n * Envia localização\n * @param params Parâmetros da localização\n * @param accessToken Token de acesso do usuário\n */\n async sendLocation(params: SendWhatsAppLocationParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-location', {\n token: params.token,\n sender: params.sender,\n latitude: params.latitude,\n longitude: params.longitude,\n name: params.name,\n address: params.address,\n }, accessToken);\n }\n\n /**\n * Solicita localização\n * @param params Parâmetros da solicitação\n * @param accessToken Token de acesso do usuário\n */\n async sendLocationRequest(params: SendWhatsAppLocationRequestParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-location-request', {\n token: params.token,\n sender: params.sender,\n bodyText: params.bodyText,\n ...(params.headerText && { headerText: params.headerText }),\n ...(params.footerText && { footerText: params.footerText }),\n }, accessToken);\n }\n\n /**\n * Envia mensagem com botão CTA URL\n * @param params Parâmetros do CTA\n * @param accessToken Token de acesso do usuário\n */\n async sendCtaUrl(params: SendWhatsAppCtaUrlParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-cta-url', {\n token: params.token,\n sender: params.sender,\n bodyText: params.bodyText,\n buttonText: params.buttonText,\n url: params.url,\n ...(params.header && { header: params.header }),\n ...(params.footerText && { footerText: params.footerText }),\n }, accessToken);\n }\n\n /**\n * Envia carrossel de mídia\n * @param params Parâmetros do carrossel\n * @param accessToken Token de acesso do usuário\n */\n async sendMediaCarousel(params: SendWhatsAppMediaCarouselParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/send-media-carousel', {\n token: params.token,\n sender: params.sender,\n bodyText: params.bodyText,\n cards: params.cards,\n }, accessToken);\n }\n\n /**\n * Baixa uma mídia descriptografada do WhatsApp usando a URL\n * @param params Parâmetros do download\n * @param accessToken Token de acesso do usuário\n */\n async downloadMedia(params: DownloadWhatsAppMediaParams, accessToken: string) {\n return this.httpClient.post('/api/v1/whatsapp/download-media', {\n token: params.token,\n url: params.url,\n }, accessToken);\n }\n}\n","import { HttpClient } from '../client/http-client';\r\nimport {\r\n SendTelegramTextParams,\r\n SendTelegramMediaParams,\r\n SendTelegramButtonsParams,\r\n SendTelegramLocationParams,\r\n SendTelegramContactParams,\r\n SendTelegramPollParams,\r\n SendTelegramVenueParams,\r\n SendTelegramDiceParams,\r\n SendTelegramStickerParams,\r\n SendTelegramVoiceParams,\r\n SendTelegramVideoNoteParams,\r\n SendTelegramMediaGroupParams,\r\n SendTelegramReplyKeyboardParams,\r\n EditTelegramMessageParams,\r\n DeleteTelegramMessageParams,\r\n DownloadTelegramMediaParams,\r\n} from '../types';\r\n\r\n/**\r\n * Módulo Telegram - Envio de mensagens e gerenciamento\r\n */\r\nexport class TelegramModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Envia mensagem de texto\r\n * @param params Parâmetros da mensagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendMessage(params: SendTelegramTextParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-message', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n text: params.text,\r\n parseMode: params.parseMode,\r\n replyToMessageId: params.replyToMessageId,\r\n disableNotification: params.disableNotification,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mídia\r\n * @param params Parâmetros da mídia\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendMedia(params: SendTelegramMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-media', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n fileUrl: params.fileUrl,\r\n type: params.type,\r\n caption: params.caption,\r\n parseMode: params.parseMode,\r\n replyToMessageId: params.replyToMessageId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mensagem com botões\r\n * @param params Parâmetros dos botões\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendButtons(params: SendTelegramButtonsParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-buttons', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n text: params.text,\r\n buttons: params.buttons,\r\n parseMode: params.parseMode,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia localização\r\n * @param params Parâmetros da localização\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendLocation(params: SendTelegramLocationParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-location', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n latitude: params.latitude,\r\n longitude: params.longitude,\r\n livePeriod: params.livePeriod,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia contato\r\n * @param params Parâmetros do contato\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendContact(params: SendTelegramContactParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-contact', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n phoneNumber: params.phoneNumber,\r\n firstName: params.firstName,\r\n lastName: params.lastName,\r\n vcard: params.vcard,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia enquete\r\n * @param params Parâmetros da enquete\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendPoll(params: SendTelegramPollParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-poll', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n question: params.question,\r\n options: params.options,\r\n isAnonymous: params.isAnonymous,\r\n type: params.type,\r\n correctOptionId: params.correctOptionId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia venue (local)\r\n * @param params Parâmetros do venue\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendVenue(params: SendTelegramVenueParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-venue', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n latitude: params.latitude,\r\n longitude: params.longitude,\r\n title: params.title,\r\n address: params.address,\r\n foursquareId: params.foursquareId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia dado/emoji animado\r\n * @param params Parâmetros do dado\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendDice(params: SendTelegramDiceParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-dice', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n emoji: params.emoji,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia sticker\r\n * @param params Parâmetros do sticker\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendSticker(params: SendTelegramStickerParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-sticker', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n stickerUrl: params.stickerUrl,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mensagem de voz\r\n * @param params Parâmetros da voz\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendVoice(params: SendTelegramVoiceParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-voice', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n voiceUrl: params.voiceUrl,\r\n caption: params.caption,\r\n duration: params.duration,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia video note\r\n * @param params Parâmetros do video note\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendVideoNote(params: SendTelegramVideoNoteParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-video-note', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n videoNoteUrl: params.videoNoteUrl,\r\n duration: params.duration,\r\n length: params.length,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia grupo de mídia\r\n * @param params Parâmetros do grupo de mídia\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendMediaGroup(params: SendTelegramMediaGroupParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-media-group', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n media: params.media,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia teclado de resposta\r\n * @param params Parâmetros do teclado\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendReplyKeyboard(params: SendTelegramReplyKeyboardParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/send-reply-keyboard', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n text: params.text,\r\n keyboard: params.keyboard,\r\n resizeKeyboard: params.resizeKeyboard,\r\n oneTimeKeyboard: params.oneTimeKeyboard,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Edita mensagem\r\n * @param params Parâmetros da edição\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async editMessage(params: EditTelegramMessageParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/edit-message', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n messageId: params.messageId,\r\n text: params.text,\r\n parseMode: params.parseMode,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Deleta mensagem\r\n * @param params Parâmetros da deleção\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async deleteMessage(params: DeleteTelegramMessageParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/delete-message', {\r\n token: params.token,\r\n chatId: params.chatId,\r\n messageId: params.messageId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Baixa uma mídia descriptografada do Telegram usando o file_id\r\n * @param params Parâmetros do download\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async downloadMedia(params: DownloadTelegramMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/telegram/download-media', {\r\n token: params.token,\r\n fileId: params.fileId,\r\n }, accessToken);\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\r\nimport {\r\n SendWebChatTextParams,\r\n SendWebChatMediaParams,\r\n SendWebChatCarouselParams,\r\n SendWebChatFormParams,\r\n SendWebChatQuickRepliesParams,\r\n SendWebChatCardParams,\r\n SendWebChatButtonsParams,\r\n} from '../types';\r\n\r\n/**\r\n * Módulo WebChat - Envio de mensagens via WebChat\r\n */\r\nexport class WebChatModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Envia mensagem de texto\r\n * @param params Parâmetros da mensagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendText(params: SendWebChatTextParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/webchat/send-text', {\r\n channelToken: params.channelToken,\r\n chatId: params.chatId,\r\n type: 'text',\r\n content: {\r\n text: params.messageText,\r\n typingTime: params.typingTime,\r\n },\r\n typing: params.typing,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mídia\r\n * @param params Parâmetros da mídia\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendMedia(params: SendWebChatMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/webchat/send-media', {\r\n channelToken: params.channelToken,\r\n chatId: params.chatId,\r\n type: params.type,\r\n content: {\r\n url: params.fileUrl,\r\n caption: params.caption,\r\n typingTime: params.typingTime,\r\n },\r\n typing: params.typing,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia carousel\r\n * @param params Parâmetros do carousel\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendCarousel(params: SendWebChatCarouselParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/webchat/send-carousel', {\r\n channelToken: params.channelToken,\r\n chatId: params.chatId,\r\n type: 'carousel',\r\n content: {\r\n cards: params.cards.map(card => ({\r\n title: card.title,\r\n subtitle: card.subtitle,\r\n imageUrl: card.imageUrl,\r\n buttons: card.buttons?.map(btn => ({\r\n id: btn.id || `btn_${Date.now()}_${Math.random()}`,\r\n text: btn.text,\r\n type: btn.type,\r\n value: btn.value,\r\n url: btn.url,\r\n })),\r\n })),\r\n typingTime: params.typingTime,\r\n },\r\n typing: params.typing,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia formulário\r\n * @param params Parâmetros do formulário\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendForm(params: SendWebChatFormParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/webchat/send-form', {\r\n channelToken: params.channelToken,\r\n chatId: params.chatId,\r\n type: 'form',\r\n content: {\r\n id: params.id,\r\n title: params.title,\r\n submitText: params.submitButtonText,\r\n fields: params.fields.map(field => ({\r\n id: field.id || field.name,\r\n type: field.type,\r\n label: field.label,\r\n placeholder: field.placeholder,\r\n required: field.required,\r\n options: field.options,\r\n })),\r\n typingTime: params.typingTime,\r\n },\r\n typing: params.typing,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia quick replies\r\n * @param params Parâmetros dos quick replies\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendQuickReplies(params: SendWebChatQuickRepliesParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/webchat/send-quick-replies', {\r\n channelToken: params.channelToken,\r\n chatId: params.chatId,\r\n type: 'quickReplies',\r\n content: {\r\n text: params.messageText,\r\n quickReplies: params.quickReplies.map(qr => ({\r\n id: qr.id || `qr_${Date.now()}_${Math.random()}`,\r\n text: qr.text,\r\n value: qr.value,\r\n })),\r\n typingTime: params.typingTime,\r\n },\r\n typing: params.typing,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia card\r\n * @param params Parâmetros do card\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendCard(params: SendWebChatCardParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/webchat/send-card', {\r\n channelToken: params.channelToken,\r\n chatId: params.chatId,\r\n type: 'card',\r\n content: {\r\n title: params.title,\r\n subtitle: params.description,\r\n imageUrl: params.imageUrl,\r\n buttons: params.buttons?.map(btn => ({\r\n id: btn.id || `btn_${Date.now()}_${Math.random()}`,\r\n text: btn.text,\r\n type: btn.type,\r\n value: btn.value,\r\n url: btn.url,\r\n })),\r\n typingTime: params.typingTime,\r\n },\r\n typing: params.typing,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia botões\r\n * @param params Parâmetros dos botões\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendButtons(params: SendWebChatButtonsParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/webchat/send-buttons', {\r\n channelToken: params.channelToken,\r\n chatId: params.chatId,\r\n type: 'buttons',\r\n content: {\r\n text: params.messageText,\r\n buttons: params.buttons.map(btn => ({\r\n id: btn.id || `btn_${Date.now()}_${Math.random()}`,\r\n text: btn.text,\r\n type: btn.type,\r\n value: btn.value,\r\n url: btn.url,\r\n })),\r\n typingTime: params.typingTime,\r\n },\r\n typing: params.typing,\r\n }, accessToken);\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\r\nimport {\r\n ListPostsParams,\r\n ListCommentsParams,\r\n CreatePostParams,\r\n ReplyCommentParams,\r\n DeleteCommentParams,\r\n SendFacebookTextParams,\r\n SendFacebookMediaParams,\r\n SendFacebookButtonsParams,\r\n SendFacebookStickerParams,\r\n ReplyFacebookMessageParams,\r\n ReplyFacebookMediaParams,\r\n SharePostParams,\r\n GetFacebookUserProfileParams,\r\n GetFacebookPageProfileParams,\r\n DownloadFacebookMediaParams,\r\n} from '../types';\r\n\r\n/**\r\n * Módulo Facebook - Gerenciamento de posts e mensagens\r\n */\r\nexport class FacebookModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Lista posts de uma página\r\n * @param params Parâmetros da listagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async listPosts(params: ListPostsParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/list-posts', {\r\n token: params.token,\r\n pageId: params.pageId,\r\n limit: params.limit,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Lista comentários de um post\r\n * @param params Parâmetros da listagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async listComments(params: ListCommentsParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/list-comments', {\r\n token: params.token,\r\n postId: params.postId,\r\n limit: params.limit,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Cria um post\r\n * @param params Parâmetros do post\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async createPost(params: CreatePostParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/create-post', {\r\n token: params.token,\r\n pageId: params.pageId,\r\n message: params.message,\r\n link: params.link,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Responde um comentário\r\n * @param params Parâmetros da resposta\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async replyComment(params: ReplyCommentParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/reply-comment', {\r\n token: params.token,\r\n commentId: params.commentId,\r\n message: params.message,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Deleta um comentário\r\n * @param params Parâmetros da deleção\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async deleteComment(params: DeleteCommentParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/delete-comment', {\r\n token: params.token,\r\n commentId: params.commentId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mensagem de texto\r\n * @param params Parâmetros da mensagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendText(params: SendFacebookTextParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/send-text', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n message: params.message,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mídia\r\n * @param params Parâmetros da mídia\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendMedia(params: SendFacebookMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/send-media', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n fileUrl: params.fileUrl,\r\n type: params.type,\r\n caption: params.caption,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mensagem com botões\r\n * @param params Parâmetros dos botões\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendButtons(params: SendFacebookButtonsParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/send-buttons', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n message: params.message,\r\n buttons: params.buttons,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia sticker\r\n * @param params Parâmetros do sticker\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendSticker(params: SendFacebookStickerParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/send-sticker', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n stickerId: params.stickerId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Responde uma mensagem\r\n * @param params Parâmetros da resposta\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async replyMessage(params: ReplyFacebookMessageParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/reply-message', {\r\n token: params.token,\r\n messageId: params.messageId,\r\n message: params.message,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Responde com mídia\r\n * @param params Parâmetros da resposta\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async replyMedia(params: ReplyFacebookMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/reply-media', {\r\n token: params.token,\r\n messageId: params.messageId,\r\n fileUrl: params.fileUrl,\r\n type: params.type,\r\n caption: params.caption,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Compartilha um post do Instagram\r\n * @param params Parâmetros do compartilhamento\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sharePost(params: SharePostParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/share-post', {\r\n token: params.token,\r\n mediaId: params.mediaId,\r\n recipientId: params.recipientId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Obtém perfil de um usuário do Facebook\r\n * @param params Parâmetros do perfil\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async getUserProfile(params: GetFacebookUserProfileParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/user-profile', {\r\n token: params.token,\r\n userId: params.userId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Obtém informações de uma página do Facebook\r\n * @param params Parâmetros da página\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async getPageProfile(params: GetFacebookPageProfileParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/page-profile', {\r\n token: params.token,\r\n pageId: params.pageId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Baixa uma mídia descriptografada do Facebook/Instagram usando a URL\r\n * @param params Parâmetros do download\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async downloadMedia(params: DownloadFacebookMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/facebook/download-media', {\r\n token: params.token,\r\n url: params.url,\r\n }, accessToken);\r\n }\r\n}\r\n","import { HttpClient } from '../client/http-client';\r\nimport {\r\n SendInstagramPrivateReplyParams,\r\n SendInstagramTextParams,\r\n SendInstagramMediaParams,\r\n SendInstagramImagesParams,\r\n SendInstagramStickerParams,\r\n ReactInstagramMessageParams,\r\n RemoveInstagramReactionParams,\r\n SendInstagramQuickRepliesParams,\r\n SendInstagramGenericTemplateParams,\r\n SendInstagramButtonTemplateParams,\r\n SendInstagramSenderActionParams,\r\n GetInstagramUserProfileParams,\r\n GetInstagramBusinessProfileParams,\r\n ListInstagramPostsParams,\r\n DownloadInstagramMediaParams,\r\n CreateInstagramMediaContainerParams,\r\n PublishInstagramMediaParams,\r\n GetInstagramContainerStatusParams,\r\n GetInstagramPublishingLimitParams,\r\n UploadInstagramVideoParams,\r\n} from '../types';\r\n\r\n/**\r\n * Módulo Instagram - Envio de mensagens e gerenciamento\r\n */\r\nexport class InstagramModule {\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n /**\r\n * Envia resposta privada a comentário\r\n * @param params Parâmetros da resposta\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendPrivateReply(params: SendInstagramPrivateReplyParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/private-reply', {\r\n token: params.token,\r\n commentId: params.commentId,\r\n message: params.message,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mensagem de texto\r\n * @param params Parâmetros da mensagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendText(params: SendInstagramTextParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/text', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n message: params.message,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia mídia\r\n * @param params Parâmetros da mídia\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendMedia(params: SendInstagramMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/media', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n fileUrl: params.fileUrl,\r\n type: params.type,\r\n caption: params.caption,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia múltiplas imagens (carrossel)\r\n * @param params Parâmetros das imagens\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendImages(params: SendInstagramImagesParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/images', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n images: params.images,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia sticker (like/heart)\r\n * @param params Parâmetros do sticker\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendSticker(params: SendInstagramStickerParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/sticker', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n stickerType: params.stickerType,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Reage a uma mensagem\r\n * @param params Parâmetros da reação\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async reactMessage(params: ReactInstagramMessageParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/reaction', {\r\n token: params.token,\r\n messageId: params.messageId,\r\n reactionType: params.reactionType,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Remove reação de uma mensagem\r\n * @param params Parâmetros da remoção\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async removeReaction(params: RemoveInstagramReactionParams, accessToken: string) {\r\n return this.httpClient.delete('/api/v1/instagram/messages/reaction', accessToken, {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n messageId: params.messageId,\r\n });\r\n }\r\n\r\n /**\r\n * Envia quick replies\r\n * @param params Parâmetros dos quick replies\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendQuickReplies(params: SendInstagramQuickRepliesParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/quick-replies', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n message: params.message,\r\n quickReplies: params.quickReplies,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia template genérico (carrossel)\r\n * @param params Parâmetros do template\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendGenericTemplate(params: SendInstagramGenericTemplateParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/generic-template', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n elements: params.elements,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia template de botões\r\n * @param params Parâmetros do template\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendButtonTemplate(params: SendInstagramButtonTemplateParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/button-template', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n text: params.text,\r\n buttons: params.buttons,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Envia ação do remetente (typing, seen)\r\n * @param params Parâmetros da ação\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async sendSenderAction(params: SendInstagramSenderActionParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/messages/sender-action', {\r\n token: params.token,\r\n recipientId: params.recipientId,\r\n action: params.action,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Obtém perfil de um usuário do Instagram\r\n * \r\n * Obtém informações de perfil de um usuário do Instagram.\r\n * \r\n * Campos retornados:\r\n * - id: ID do usuário\r\n * - name: Nome do usuário (pode ser nulo)\r\n * - username: Nome de usuário do Instagram\r\n * \r\n * ⚠️ Nota: A API do Instagram Graph API para usuários regulares (tipo User) \r\n * retorna apenas campos básicos. Campos como foto de perfil, número de seguidores \r\n * e status de verificação não estão disponíveis para usuários regulares.\r\n * \r\n * ⚠️ O usuário deve ter enviado mensagem direta para sua conta. \r\n * Não é possível obter perfil de quem apenas comentou.\r\n * \r\n * @param params Parâmetros do perfil\r\n * @param params.token Token do canal\r\n * @param params.userId ID do usuário (IGSID)\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async getUserProfile(params: GetInstagramUserProfileParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/user-profile', {\r\n token: params.token,\r\n userId: params.userId,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Lista publicações do Instagram\r\n * @param params Parâmetros da listagem\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async listPosts(params: ListInstagramPostsParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/posts', {\r\n token: params.token,\r\n userId: params.userId,\r\n limit: params.limit,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Obtém perfil da conta comercial do Instagram\r\n * @param params Parâmetros do perfil\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async getBusinessProfile(params: GetInstagramBusinessProfileParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/business-profile', {\r\n token: params.token,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Baixa uma mídia descriptografada do Instagram usando a URL\r\n * @param params Parâmetros do download\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async downloadMedia(params: DownloadInstagramMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/download-media', {\r\n token: params.token,\r\n url: params.url,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Cria um contêiner de mídia para publicação no Instagram\r\n * @param params Parâmetros do contêiner\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async createMediaContainer(params: CreateInstagramMediaContainerParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/media', {\r\n token: params.token,\r\n image_url: params.image_url,\r\n video_url: params.video_url,\r\n media_type: params.media_type,\r\n caption: params.caption,\r\n is_carousel_item: params.is_carousel_item,\r\n children: params.children,\r\n upload_type: params.upload_type,\r\n trial_params: params.trial_params,\r\n alt_text: params.alt_text,\r\n location_id: params.location_id,\r\n product_tags: params.product_tags,\r\n user_tags: params.user_tags,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Publica uma mídia no Instagram usando o ID do contêiner\r\n * @param params Parâmetros da publicação\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async publishMedia(params: PublishInstagramMediaParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/media_publish', {\r\n token: params.token,\r\n creation_id: params.creation_id,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Verifica o status de um contêiner de mídia\r\n * @param params Parâmetros da verificação\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async getContainerStatus(params: GetInstagramContainerStatusParams, accessToken: string) {\r\n return this.httpClient.post(`/api/v1/instagram/media/${params.container_id}/status`, {\r\n token: params.token,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Verifica o limite de publicação atual\r\n * @param params Parâmetros da verificação\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async getPublishingLimit(params: GetInstagramPublishingLimitParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/content_publishing_limit', {\r\n token: params.token,\r\n }, accessToken);\r\n }\r\n\r\n /**\r\n * Faz upload de vídeo para sessão retomável\r\n * @param params Parâmetros do upload\r\n * @param accessToken Token de acesso do usuário\r\n */\r\n async uploadVideo(params: UploadInstagramVideoParams, accessToken: string) {\r\n return this.httpClient.post('/api/v1/instagram/upload', {\r\n token: params.token,\r\n container_id: params.container_id,\r\n file_url: params.file_url,\r\n offset: params.offset,\r\n file_size: params.file_size,\r\n }, accessToken);\r\n }\r\n}\r\n","import { HttpClient } from './client/http-client';\r\nimport { AuthModule } from './modules/auth';\r\nimport { ChannelsModule } from './modules/channels';\r\nimport { IntegrationsModule } from './modules/integrations';\r\nimport { WhatsAppModule } from './modules/whatsapp';\r\nimport { TelegramModule } from './modules/telegram';\r\nimport { WebChatModule } from './modules/webchat';\r\nimport { FacebookModule } from './modules/facebook';\r\nimport { InstagramModule } from './modules/instagram';\r\nimport { SDKConfig } from './types';\r\n\r\n/**\r\n * SDK OficialAPI - Cliente principal\r\n * \r\n * @example\r\n * ```typescript\r\n * import { OficialAPISDK } from '@oficialapi/sdk';\r\n * \r\n * const sdk = new OficialAPISDK({\r\n * clientId: 'your-client-id',\r\n * clientSecret: 'your-client-secret'\r\n * });\r\n * \r\n * // Enviar mensagem WhatsApp\r\n * const result = await sdk.whatsapp.sendText({\r\n * token: 'sk_live_...',\r\n * sender: '5511999999999',\r\n * messageText: 'Olá!'\r\n * });\r\n * ```\r\n */\r\nexport class OficialAPISDK {\r\n private httpClient: HttpClient;\r\n\r\n public readonly auth: AuthModule;\r\n public readonly channels: ChannelsModule;\r\n public readonly integrations: IntegrationsModule;\r\n public readonly whatsapp: WhatsAppModule;\r\n public readonly telegram: TelegramModule;\r\n public readonly webchat: WebChatModule;\r\n public readonly facebook: FacebookModule;\r\n public readonly instagram: InstagramModule;\r\n\r\n constructor(config: SDKConfig) {\r\n this.httpClient = new HttpClient(config);\r\n\r\n // Inicializa módulos\r\n this.auth = new AuthModule(this.httpClient);\r\n this.channels = new ChannelsModule(this.httpClient);\r\n this.integrations = new IntegrationsModule(this.httpClient);\r\n this.whatsapp = new WhatsAppModule(this.httpClient);\r\n this.telegram = new TelegramModule(this.httpClient);\r\n this.webchat = new WebChatModule(this.httpClient);\r\n this.facebook = new FacebookModule(this.httpClient);\r\n this.instagram = new InstagramModule(this.httpClient);\r\n }\r\n\r\n}\r\n\r\n// Exporta tipos\r\nexport * from './types';\r\n\r\n// Exporta também como default para compatibilidade\r\nexport default OficialAPISDK;\r\n"]}
|
package/package.json
CHANGED