@oficialapi/sdk 9.0.1 → 9.0.2

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 CHANGED
@@ -37,15 +37,6 @@ const accessToken = tokenResponse.access_token;
37
37
 
38
38
  ## 📚 Exemplos de Uso
39
39
 
40
- ### WhatsApp
41
-
42
- > **⚠️ Nota Importante:** Alguns métodos requerem upload prévio da mídia para obter o `mediaId` antes de enviar. Isso se aplica a:
43
- > - `sendAudio` - Use `uploadMedia` primeiro para obter o `mediaId`
44
- > - `sendVideo` - Use `uploadMedia` primeiro para obter o `mediaId`
45
- > - `sendDocument` - Use `uploadMedia` primeiro para obter o `mediaId`
46
- > - `sendSticker` - Use `uploadMedia` primeiro para obter o `mediaId`
47
- >
48
- > O método `sendMedia` ainda aceita `fileUrl` diretamente para imagens e outros tipos de mídia.
49
40
 
50
41
  #### Enviar Mensagem de Texto
51
42
 
@@ -781,7 +772,8 @@ import fs from 'fs';
781
772
  const fileBuffer = fs.readFileSync('./imagem.jpg');
782
773
  const uploadResult = await sdk.whatsapp.uploadMedia({
783
774
  token: 'sk_live_...',
784
- file: fileBuffer
775
+ file: fileBuffer,
776
+ mediaType: 'image'
785
777
  // filename é opcional
786
778
  }, accessToken);
787
779
 
@@ -798,6 +790,7 @@ const fileBuffer = fs.readFileSync('./imagem.jpg');
798
790
  const uploadResult = await sdk.whatsapp.uploadMedia({
799
791
  token: 'sk_live_...',
800
792
  file: fileBuffer,
793
+ mediaType: 'image',
801
794
  filename: 'minha_imagem.jpg'
802
795
  }, accessToken);
803
796
 
@@ -813,6 +806,7 @@ const videoBuffer = fs.readFileSync('./video.mp4');
813
806
  const uploadResult = await sdk.whatsapp.uploadMedia({
814
807
  token: 'sk_live_...',
815
808
  file: videoBuffer,
809
+ mediaType: 'video',
816
810
  filename: 'meu_video.mp4'
817
811
  }, accessToken);
818
812
 
@@ -829,12 +823,7 @@ await sdk.whatsapp.sendVideo({
829
823
  ```typescript
830
824
  import fs from 'fs';
831
825
 
832
- const pdfBuffer = fs.readFileSync('./documento.pdf');
833
- const uploadResult = await sdk.whatsapp.uploadMedia({
834
- token: 'sk_live_...',
835
- file: pdfBuffer,
836
- filename: 'documento_importante.pdf'
837
- }, accessToken);
826
+
838
827
 
839
828
 
840
829
  await sdk.whatsapp.sendDocument({
@@ -847,24 +836,6 @@ await sdk.whatsapp.sendDocument({
847
836
  ```
848
837
 
849
838
 
850
- ```typescript
851
- import fs from 'fs';
852
-
853
- const audioBuffer = fs.readFileSync('./audio.ogg');
854
- const uploadResult = await sdk.whatsapp.uploadMedia({
855
- token: 'sk_live_...',
856
- file: audioBuffer,
857
- filename: 'mensagem_audio.ogg'
858
- }, accessToken);
859
-
860
-
861
- await sdk.whatsapp.sendAudio({
862
- token: 'sk_live_...',
863
- sender: '5511999999999',
864
- mediaId: uploadResult.data.handle,
865
- voice: true // true para mensagem de voz
866
- }, accessToken);
867
- ```
868
839
 
869
840
  **Exemplo 6: Upload de sticker (Node.js)**
870
841
 
@@ -875,6 +846,7 @@ const stickerBuffer = fs.readFileSync('./sticker.webp');
875
846
  const uploadResult = await sdk.whatsapp.uploadMedia({
876
847
  token: 'sk_live_...',
877
848
  file: stickerBuffer,
849
+ mediaType: 'image', // Stickers são tratados como imagem
878
850
  filename: 'sticker.webp'
879
851
  }, accessToken);
880
852
 
@@ -893,9 +865,17 @@ await sdk.whatsapp.sendSticker({
893
865
  const fileInput = document.querySelector('input[type="file"]');
894
866
  const file = fileInput.files[0];
895
867
 
868
+ // Determine o mediaType baseado no tipo do arquivo
869
+ const getMediaType = (file: File): 'image' | 'video' | 'document' => {
870
+ if (file.type.startsWith('image/')) return 'image';
871
+ if (file.type.startsWith('video/')) return 'video';
872
+ return 'document';
873
+ };
874
+
896
875
  const uploadResult = await sdk.whatsapp.uploadMedia({
897
876
  token: 'sk_live_...',
898
877
  file: file,
878
+ mediaType: getMediaType(file),
899
879
  filename: file.name // Opcional
900
880
  }, accessToken);
901
881
 
@@ -911,6 +891,7 @@ const blob = new Blob(['conteúdo do arquivo'], { type: 'text/plain' });
911
891
  const uploadResult = await sdk.whatsapp.uploadMedia({
912
892
  token: 'sk_live_...',
913
893
  file: blob,
894
+ mediaType: 'document',
914
895
  filename: 'arquivo.txt'
915
896
  }, accessToken);
916
897
 
@@ -926,7 +907,8 @@ import fs from 'fs';
926
907
  const imageBuffer = fs.readFileSync('./logo.jpg');
927
908
  const uploadResult = await sdk.whatsapp.uploadMedia({
928
909
  token: 'sk_live_...',
929
- file: imageBuffer
910
+ file: imageBuffer,
911
+ mediaType: 'image'
930
912
  // filename não é necessário para templates
931
913
  }, accessToken);
932
914
 
@@ -953,15 +935,16 @@ await sdk.whatsapp.createTemplate({
953
935
  ```
954
936
 
955
937
  **Notas importantes:**
938
+ - O parâmetro `mediaType` é **obrigatório** e deve ser um dos valores: `'image'`, `'video'` ou `'document'`.
956
939
  - O parâmetro `filename` é **opcional**. Se não fornecido, não será enviado ao servidor (a API da OficialAPI rejeita campos vazios).
957
940
  - O `mediaId` retornado está no formato `"4::aW1hZ2UtMTIzNDU2Nzg5MGCE..."` e deve ser usado diretamente nos métodos `sendAudio`, `sendVideo`, `sendDocument` ou `sendSticker`.
958
941
  - Para templates, use o `handle` retornado no campo `header_handle` ou `example.header_handle`.
959
942
  - Formatos suportados:
960
- - **Imagens**: JPG, PNG, GIF, WEBP
961
- - **Vídeos**: MP4, 3GP
962
- - **Áudios**: OGG (codec OPUS para voz), MP3, M4A
963
- - **Documentos**: PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX
964
- - **Stickers**: WEBP (até 500KB para animado, 100KB para estático)
943
+ - **Imagens** (`mediaType: 'image'`): JPG, PNG, GIF, WEBP
944
+ - **Vídeos** (`mediaType: 'video'`): MP4, 3GP
945
+ - **Áudios**: Use `mediaType: 'video'` para áudios (OGG codec OPUS para voz, MP3, M4A)
946
+ - **Documentos** (`mediaType: 'document'`): PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX
947
+ - **Stickers**: Use `mediaType: 'image'` para stickers WEBP (até 500KB para animado, 100KB para estático)
965
948
  ```
966
949
 
967
950
  **Mais exemplos de templates:**
package/dist/index.d.mts CHANGED
@@ -158,6 +158,7 @@ interface CreateTemplateParams {
158
158
  interface UploadMediaParams {
159
159
  token: string;
160
160
  file: File | Blob | Buffer;
161
+ mediaType: 'image' | 'video' | 'document';
161
162
  filename?: string;
162
163
  }
163
164
  interface SendOrderDetailsParams {
package/dist/index.d.ts CHANGED
@@ -158,6 +158,7 @@ interface CreateTemplateParams {
158
158
  interface UploadMediaParams {
159
159
  token: string;
160
160
  file: File | Blob | Buffer;
161
+ mediaType: 'image' | 'video' | 'document';
161
162
  filename?: string;
162
163
  }
163
164
  interface SendOrderDetailsParams {
package/dist/index.js CHANGED
@@ -3,6 +3,6 @@
3
3
  * @version 1.0.0
4
4
  * @license MIT
5
5
  */
6
- var f="https://api.oficialapi.com.br",d=class{constructor(e){this.config={clientId:e.clientId,clientSecret:e.clientSecret,timeout:e.timeout||3e4,maxRetries:e.maxRetries||3,retryDelay:e.retryDelay||1e3,headers:e.headers||{}},this.axiosInstance=I__default.default.create({baseURL:f,timeout:this.config.timeout,headers:{"Content-Type":"application/json",...this.config.headers}}),this.setupInterceptors();}setupInterceptors(){this.axiosInstance.interceptors.request.use(e=>{if(e.url?.includes("/auth/token"))return e;let t=e;return t.accessToken&&e.headers&&(e.headers.Authorization=`Bearer ${t.accessToken}`),e},e=>Promise.reject(e)),this.axiosInstance.interceptors.response.use(e=>e,async e=>{let t=e.config;if(!t)return Promise.reject(this.formatError(e));if((!e.response||e.response.status>=500&&e.response.status<600)&&(!t._retryCount||t._retryCount<this.config.maxRetries)){t._retryCount=(t._retryCount||0)+1;let i=this.config.retryDelay*t._retryCount;return await new Promise(s=>setTimeout(s,i)),this.axiosInstance(t)}return Promise.reject(this.formatError(e))});}formatError(e){if(e.response){let t=e.response.data,n=t?.error?.message||t?.message||e.message,i=t?.error?.details||[],s=new Error(n);return s.status=e.response.status,s.data=e.response.data,s.details=i,s}return e.request?new Error("Erro de conex\xE3o com a API. Verifique sua conex\xE3o com a internet."):e}async get(e,t,n){let i={...n,accessToken:t};return (await this.axiosInstance.get(e,i)).data}async post(e,t,n,i){let s={...i,accessToken:n};return (await this.axiosInstance.post(e,t,s)).data}async put(e,t,n,i){let s={...i,accessToken:n};return (await this.axiosInstance.put(e,t,s)).data}async delete(e,t,n,i){let s={...i,accessToken:t,data:n};return (await this.axiosInstance.delete(e,s)).data}async upload(e,t,n,i="file",s){let r=new FormData;if(t instanceof Buffer){let y=new Blob([t]);r.append(i,y);}else r.append(i,t);s&&Object.entries(s).forEach(([y,a])=>{a!=null&&r.append(y,typeof a=="string"?a:JSON.stringify(a));});let P={headers:{"Content-Type":"multipart/form-data"},accessToken:n};return (await this.axiosInstance.post(e,r,P)).data}};var l=class{constructor(e){this.httpClient=e;}async getToken(e,t){let n=await this.httpClient.post("/api/v1/auth/token",{client_id:e,client_secret:t});if(!n.success||!n.data)throw new Error(n.error?.message||"Falha ao obter token");return n.data}};var c=class{constructor(e){this.httpClient=e;}async list(e){let t=await this.httpClient.get("/api/v1/channels",e);if(!t.success||!t.data)throw new Error(t.error?.message||"Falha ao listar canais");return Array.isArray(t.data)?t.data:[t.data]}};var p=class{constructor(e){this.httpClient=e;}async createWebhook(e,t){let n=await this.httpClient.post("/api/v1/integrations",{url:e.url,expiresInDays:e.expiresInDays},t);if(!n.success||!n.data)throw new Error(n.error?.message||"Falha ao criar webhook");return n.data}};var h=class{constructor(e){this.httpClient=e;}async sendText(e,t){return this.httpClient.post("/api/v1/whatsapp/send-message",{token:e.token,sender:e.sender,messageText:e.messageText},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/whatsapp/send-media",{token:e.token,sender:e.sender,fileUrl:e.fileUrl,type:e.type,caption:e.caption,...e.fileName&&{fileName:e.fileName}},t)}async sendTemplate(e,t){return this.httpClient.post("/api/v1/whatsapp/send-template",{token:e.token,sender:e.sender,templateName:e.templateName,languageCode:e.languageCode,components:e.components},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/whatsapp/send-buttons",{token:e.token,sender:e.sender,text:e.text,buttons:e.buttons,...e.media&&{media:e.media}},t)}async sendList(e,t){return this.httpClient.post("/api/v1/whatsapp/send-list",{token:e.token,sender:e.sender,headerText:e.headerText,bodyText:e.bodyText,buttonText:e.buttonText,sections:e.sections,...e.footerText&&{footerText:e.footerText}},t)}async replyMessage(e,t){return this.httpClient.post("/api/v1/whatsapp/reply-message",{token:e.token,sender:e.sender,messageText:e.messageText,...e.replyMessageId&&{replyMessageId:e.replyMessageId},...e.preview_url!==void 0&&{preview_url:e.preview_url}},t)}async reactMessage(e,t){return this.httpClient.post("/api/v1/whatsapp/react-message",{token:e.token,sender:e.sender,emoji:e.emoji,...e.message_id&&{message_id:e.message_id}},t)}async createTemplate(e,t){return this.httpClient.post("/api/v1/whatsapp/create-template",{token:e.token,name:e.name,language:e.language,category:e.category,components:e.components},t)}async listTemplates(e,t){return this.httpClient.get(`/api/v1/whatsapp/templates?token=${encodeURIComponent(e)}`,t)}async getTemplate(e,t,n){return this.httpClient.get(`/api/v1/whatsapp/templates/${t}?token=${encodeURIComponent(e)}`,n)}async uploadMedia(e,t){return this.httpClient.upload("/api/v1/whatsapp/upload-media",e.file,t,"file",{token:e.token,...e.filename&&{filename:e.filename}})}async sendOrderDetails(e,t){return this.httpClient.post("/api/v1/whatsapp/send-order-details",{token:e.token,sender:e.sender,...e.headerText&&{headerText:e.headerText},bodyText:e.bodyText,...e.footerText&&{footerText:e.footerText},reference_id:e.reference_id,type:e.type,currency:e.currency,total_amount:e.total_amount,order:e.order,...e.payment_settings&&{payment_settings:e.payment_settings}},t)}async sendOrderStatus(e,t){return this.httpClient.post("/api/v1/whatsapp/send-order-status",{token:e.token,sender:e.sender,bodyText:e.bodyText,...e.footerText&&{footerText:e.footerText},reference_id:e.reference_id,order_status:e.order_status,...e.status_description&&{status_description:e.status_description},...e.payment_status&&{payment_status:e.payment_status},...e.payment_timestamp!==void 0&&{payment_timestamp:e.payment_timestamp}},t)}async sendAudio(e,t){return this.httpClient.post("/api/v1/whatsapp/send-audio",{token:e.token,sender:e.sender,mediaId:e.mediaId,...e.voice!==void 0&&{voice:e.voice}},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/whatsapp/send-sticker",{token:e.token,sender:e.sender,mediaId:e.mediaId},t)}async sendVideo(e,t){return this.httpClient.post("/api/v1/whatsapp/send-video",{token:e.token,sender:e.sender,mediaId:e.mediaId,...e.caption&&{caption:e.caption}},t)}async sendDocument(e,t){return this.httpClient.post("/api/v1/whatsapp/send-document",{token:e.token,sender:e.sender,mediaId:e.mediaId,...e.filename&&{filename:e.filename},...e.caption&&{caption:e.caption}},t)}async sendContact(e,t){return this.httpClient.post("/api/v1/whatsapp/send-contact",{token:e.token,sender:e.sender,contacts:e.contacts},t)}async sendLocation(e,t){return this.httpClient.post("/api/v1/whatsapp/send-location",{token:e.token,sender:e.sender,latitude:e.latitude,longitude:e.longitude,name:e.name,address:e.address},t)}async sendLocationRequest(e,t){return this.httpClient.post("/api/v1/whatsapp/send-location-request",{token:e.token,sender:e.sender,bodyText:e.bodyText,...e.headerText&&{headerText:e.headerText},...e.footerText&&{footerText:e.footerText}},t)}async sendCtaUrl(e,t){return this.httpClient.post("/api/v1/whatsapp/send-cta-url",{token:e.token,sender:e.sender,bodyText:e.bodyText,buttonText:e.buttonText,url:e.url,...e.header&&{header:e.header},...e.footerText&&{footerText:e.footerText}},t)}async sendMediaCarousel(e,t){return this.httpClient.post("/api/v1/whatsapp/send-media-carousel",{token:e.token,sender:e.sender,bodyText:e.bodyText,cards:e.cards},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/whatsapp/download-media",{token:e.token,url:e.url},t)}};var g=class{constructor(e){this.httpClient=e;}async sendMessage(e,t){return this.httpClient.post("/api/v1/telegram/send-message",{token:e.token,chatId:e.chatId,text:e.text,parseMode:e.parseMode,replyToMessageId:e.replyToMessageId,disableNotification:e.disableNotification},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/telegram/send-media",{token:e.token,chatId:e.chatId,fileUrl:e.fileUrl,type:e.type,caption:e.caption,parseMode:e.parseMode,replyToMessageId:e.replyToMessageId},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/telegram/send-buttons",{token:e.token,chatId:e.chatId,text:e.text,buttons:e.buttons,parseMode:e.parseMode},t)}async sendLocation(e,t){return this.httpClient.post("/api/v1/telegram/send-location",{token:e.token,chatId:e.chatId,latitude:e.latitude,longitude:e.longitude,livePeriod:e.livePeriod},t)}async sendContact(e,t){return this.httpClient.post("/api/v1/telegram/send-contact",{token:e.token,chatId:e.chatId,phoneNumber:e.phoneNumber,firstName:e.firstName,lastName:e.lastName,vcard:e.vcard},t)}async sendPoll(e,t){return this.httpClient.post("/api/v1/telegram/send-poll",{token:e.token,chatId:e.chatId,question:e.question,options:e.options,isAnonymous:e.isAnonymous,type:e.type,correctOptionId:e.correctOptionId},t)}async sendVenue(e,t){return this.httpClient.post("/api/v1/telegram/send-venue",{token:e.token,chatId:e.chatId,latitude:e.latitude,longitude:e.longitude,title:e.title,address:e.address,foursquareId:e.foursquareId},t)}async sendDice(e,t){return this.httpClient.post("/api/v1/telegram/send-dice",{token:e.token,chatId:e.chatId,emoji:e.emoji},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/telegram/send-sticker",{token:e.token,chatId:e.chatId,stickerUrl:e.stickerUrl},t)}async sendVoice(e,t){return this.httpClient.post("/api/v1/telegram/send-voice",{token:e.token,chatId:e.chatId,voiceUrl:e.voiceUrl,caption:e.caption,duration:e.duration},t)}async sendVideoNote(e,t){return this.httpClient.post("/api/v1/telegram/send-video-note",{token:e.token,chatId:e.chatId,videoNoteUrl:e.videoNoteUrl,duration:e.duration,length:e.length},t)}async sendMediaGroup(e,t){return this.httpClient.post("/api/v1/telegram/send-media-group",{token:e.token,chatId:e.chatId,media:e.media},t)}async sendReplyKeyboard(e,t){return this.httpClient.post("/api/v1/telegram/send-reply-keyboard",{token:e.token,chatId:e.chatId,text:e.text,keyboard:e.keyboard,resizeKeyboard:e.resizeKeyboard,oneTimeKeyboard:e.oneTimeKeyboard},t)}async editMessage(e,t){return this.httpClient.post("/api/v1/telegram/edit-message",{token:e.token,chatId:e.chatId,messageId:e.messageId,text:e.text,parseMode:e.parseMode},t)}async deleteMessage(e,t){return this.httpClient.post("/api/v1/telegram/delete-message",{token:e.token,chatId:e.chatId,messageId:e.messageId},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/telegram/download-media",{token:e.token,fileId:e.fileId},t)}};var u=class{constructor(e){this.httpClient=e;}async sendText(e,t){return this.httpClient.post("/api/v1/webchat/send-text",{token:e.token,sender:e.sender,messageText:e.messageText},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/webchat/send-media",{token:e.token,sender:e.sender,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sendCarousel(e,t){return this.httpClient.post("/api/v1/webchat/send-carousel",{token:e.token,sender:e.sender,cards:e.cards},t)}async sendForm(e,t){return this.httpClient.post("/api/v1/webchat/send-form",{token:e.token,sender:e.sender,title:e.title,fields:e.fields,submitButtonText:e.submitButtonText},t)}async sendQuickReplies(e,t){return this.httpClient.post("/api/v1/webchat/send-quick-replies",{token:e.token,sender:e.sender,messageText:e.messageText,quickReplies:e.quickReplies},t)}async sendCard(e,t){return this.httpClient.post("/api/v1/webchat/send-card",{token:e.token,sender:e.sender,title:e.title,description:e.description,imageUrl:e.imageUrl,buttons:e.buttons},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/webchat/send-buttons",{token:e.token,sender:e.sender,messageText:e.messageText,buttons:e.buttons},t)}};var m=class{constructor(e){this.httpClient=e;}async listPosts(e,t){return this.httpClient.post("/api/v1/facebook/list-posts",{token:e.token,pageId:e.pageId,limit:e.limit},t)}async listComments(e,t){return this.httpClient.post("/api/v1/facebook/list-comments",{token:e.token,postId:e.postId,limit:e.limit},t)}async createPost(e,t){return this.httpClient.post("/api/v1/facebook/create-post",{token:e.token,pageId:e.pageId,message:e.message,link:e.link},t)}async replyComment(e,t){return this.httpClient.post("/api/v1/facebook/reply-comment",{token:e.token,commentId:e.commentId,message:e.message},t)}async deleteComment(e,t){return this.httpClient.post("/api/v1/facebook/delete-comment",{token:e.token,commentId:e.commentId},t)}async sendText(e,t){return this.httpClient.post("/api/v1/facebook/send-text",{token:e.token,recipientId:e.recipientId,message:e.message},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/facebook/send-media",{token:e.token,recipientId:e.recipientId,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/facebook/send-buttons",{token:e.token,recipientId:e.recipientId,message:e.message,buttons:e.buttons},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/facebook/send-sticker",{token:e.token,recipientId:e.recipientId,stickerId:e.stickerId},t)}async replyMessage(e,t){return this.httpClient.post("/api/v1/facebook/reply-message",{token:e.token,messageId:e.messageId,message:e.message},t)}async replyMedia(e,t){return this.httpClient.post("/api/v1/facebook/reply-media",{token:e.token,messageId:e.messageId,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sharePost(e,t){return this.httpClient.post("/api/v1/facebook/share-post",{token:e.token,mediaId:e.mediaId,recipientId:e.recipientId},t)}async getUserProfile(e,t){return this.httpClient.post("/api/v1/facebook/user-profile",{token:e.token,userId:e.userId},t)}async getPageProfile(e,t){return this.httpClient.post("/api/v1/facebook/page-profile",{token:e.token,pageId:e.pageId},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/facebook/download-media",{token:e.token,url:e.url},t)}};var k=class{constructor(e){this.httpClient=e;}async sendPrivateReply(e,t){return this.httpClient.post("/api/v1/instagram/private-reply",{token:e.token,commentId:e.commentId,message:e.message},t)}async sendText(e,t){return this.httpClient.post("/api/v1/instagram/messages/text",{token:e.token,recipientId:e.recipientId,message:e.message},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/instagram/messages/media",{token:e.token,recipientId:e.recipientId,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sendImages(e,t){return this.httpClient.post("/api/v1/instagram/messages/images",{token:e.token,recipientId:e.recipientId,images:e.images},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/instagram/messages/sticker",{token:e.token,recipientId:e.recipientId,stickerType:e.stickerType},t)}async reactMessage(e,t){return this.httpClient.post("/api/v1/instagram/messages/reaction",{token:e.token,messageId:e.messageId,reactionType:e.reactionType},t)}async removeReaction(e,t){return this.httpClient.delete("/api/v1/instagram/messages/reaction",t,{token:e.token,recipientId:e.recipientId,messageId:e.messageId})}async sendQuickReplies(e,t){return this.httpClient.post("/api/v1/instagram/messages/quick-replies",{token:e.token,recipientId:e.recipientId,message:e.message,quickReplies:e.quickReplies},t)}async sendGenericTemplate(e,t){return this.httpClient.post("/api/v1/instagram/messages/generic-template",{token:e.token,recipientId:e.recipientId,elements:e.elements},t)}async sendButtonTemplate(e,t){return this.httpClient.post("/api/v1/instagram/messages/button-template",{token:e.token,recipientId:e.recipientId,text:e.text,buttons:e.buttons},t)}async sendSenderAction(e,t){return this.httpClient.post("/api/v1/instagram/messages/sender-action",{token:e.token,recipientId:e.recipientId,action:e.action},t)}async getUserProfile(e,t){return this.httpClient.post("/api/v1/instagram/user-profile",{token:e.token,userId:e.userId},t)}async listPosts(e,t){return this.httpClient.post("/api/v1/instagram/posts",{token:e.token,userId:e.userId,limit:e.limit},t)}async getBusinessProfile(e,t){return this.httpClient.post("/api/v1/instagram/business-profile",{token:e.token},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/instagram/download-media",{token:e.token,url:e.url},t)}};var C=class{constructor(e){this.httpClient=new d(e),this.auth=new l(this.httpClient),this.channels=new c(this.httpClient),this.integrations=new p(this.httpClient),this.whatsapp=new h(this.httpClient),this.telegram=new g(this.httpClient),this.webchat=new u(this.httpClient),this.facebook=new m(this.httpClient),this.instagram=new k(this.httpClient);}},j=C;
6
+ var f="https://api.oficialapi.com.br",d=class{constructor(e){this.config={clientId:e.clientId,clientSecret:e.clientSecret,timeout:e.timeout||3e4,maxRetries:e.maxRetries||3,retryDelay:e.retryDelay||1e3,headers:e.headers||{}},this.axiosInstance=I__default.default.create({baseURL:f,timeout:this.config.timeout,headers:{"Content-Type":"application/json",...this.config.headers}}),this.setupInterceptors();}setupInterceptors(){this.axiosInstance.interceptors.request.use(e=>{if(e.url?.includes("/auth/token"))return e;let t=e;return t.accessToken&&e.headers&&(e.headers.Authorization=`Bearer ${t.accessToken}`),e},e=>Promise.reject(e)),this.axiosInstance.interceptors.response.use(e=>e,async e=>{let t=e.config;if(!t)return Promise.reject(this.formatError(e));if((!e.response||e.response.status>=500&&e.response.status<600)&&(!t._retryCount||t._retryCount<this.config.maxRetries)){t._retryCount=(t._retryCount||0)+1;let i=this.config.retryDelay*t._retryCount;return await new Promise(s=>setTimeout(s,i)),this.axiosInstance(t)}return Promise.reject(this.formatError(e))});}formatError(e){if(e.response){let t=e.response.data,n=t?.error?.message||t?.message||e.message,i=t?.error?.details||[],s=new Error(n);return s.status=e.response.status,s.data=e.response.data,s.details=i,s}return e.request?new Error("Erro de conex\xE3o com a API. Verifique sua conex\xE3o com a internet."):e}async get(e,t,n){let i={...n,accessToken:t};return (await this.axiosInstance.get(e,i)).data}async post(e,t,n,i){let s={...i,accessToken:n};return (await this.axiosInstance.post(e,t,s)).data}async put(e,t,n,i){let s={...i,accessToken:n};return (await this.axiosInstance.put(e,t,s)).data}async delete(e,t,n,i){let s={...i,accessToken:t,data:n};return (await this.axiosInstance.delete(e,s)).data}async upload(e,t,n,i="file",s){let r=new FormData;if(t instanceof Buffer){let y=new Blob([t]);r.append(i,y);}else r.append(i,t);s&&Object.entries(s).forEach(([y,a])=>{a!=null&&r.append(y,typeof a=="string"?a:JSON.stringify(a));});let P={headers:{"Content-Type":"multipart/form-data"},accessToken:n};return (await this.axiosInstance.post(e,r,P)).data}};var l=class{constructor(e){this.httpClient=e;}async getToken(e,t){let n=await this.httpClient.post("/api/v1/auth/token",{client_id:e,client_secret:t});if(!n.success||!n.data)throw new Error(n.error?.message||"Falha ao obter token");return n.data}};var c=class{constructor(e){this.httpClient=e;}async list(e){let t=await this.httpClient.get("/api/v1/channels",e);if(!t.success||!t.data)throw new Error(t.error?.message||"Falha ao listar canais");return Array.isArray(t.data)?t.data:[t.data]}};var p=class{constructor(e){this.httpClient=e;}async createWebhook(e,t){let n=await this.httpClient.post("/api/v1/integrations",{url:e.url,expiresInDays:e.expiresInDays},t);if(!n.success||!n.data)throw new Error(n.error?.message||"Falha ao criar webhook");return n.data}};var h=class{constructor(e){this.httpClient=e;}async sendText(e,t){return this.httpClient.post("/api/v1/whatsapp/send-message",{token:e.token,sender:e.sender,messageText:e.messageText},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/whatsapp/send-media",{token:e.token,sender:e.sender,fileUrl:e.fileUrl,type:e.type,caption:e.caption,...e.fileName&&{fileName:e.fileName}},t)}async sendTemplate(e,t){return this.httpClient.post("/api/v1/whatsapp/send-template",{token:e.token,sender:e.sender,templateName:e.templateName,languageCode:e.languageCode,components:e.components},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/whatsapp/send-buttons",{token:e.token,sender:e.sender,text:e.text,buttons:e.buttons,...e.media&&{media:e.media}},t)}async sendList(e,t){return this.httpClient.post("/api/v1/whatsapp/send-list",{token:e.token,sender:e.sender,headerText:e.headerText,bodyText:e.bodyText,buttonText:e.buttonText,sections:e.sections,...e.footerText&&{footerText:e.footerText}},t)}async replyMessage(e,t){return this.httpClient.post("/api/v1/whatsapp/reply-message",{token:e.token,sender:e.sender,messageText:e.messageText,...e.replyMessageId&&{replyMessageId:e.replyMessageId},...e.preview_url!==void 0&&{preview_url:e.preview_url}},t)}async reactMessage(e,t){return this.httpClient.post("/api/v1/whatsapp/react-message",{token:e.token,sender:e.sender,emoji:e.emoji,...e.message_id&&{message_id:e.message_id}},t)}async createTemplate(e,t){return this.httpClient.post("/api/v1/whatsapp/create-template",{token:e.token,name:e.name,language:e.language,category:e.category,components:e.components},t)}async listTemplates(e,t){return this.httpClient.get(`/api/v1/whatsapp/templates?token=${encodeURIComponent(e)}`,t)}async getTemplate(e,t,n){return this.httpClient.get(`/api/v1/whatsapp/templates/${t}?token=${encodeURIComponent(e)}`,n)}async uploadMedia(e,t){return this.httpClient.upload("/api/v1/whatsapp/upload-media",e.file,t,"file",{token:e.token,mediaType:e.mediaType,...e.filename&&{filename:e.filename}})}async sendOrderDetails(e,t){return this.httpClient.post("/api/v1/whatsapp/send-order-details",{token:e.token,sender:e.sender,...e.headerText&&{headerText:e.headerText},bodyText:e.bodyText,...e.footerText&&{footerText:e.footerText},reference_id:e.reference_id,type:e.type,currency:e.currency,total_amount:e.total_amount,order:e.order,...e.payment_settings&&{payment_settings:e.payment_settings}},t)}async sendOrderStatus(e,t){return this.httpClient.post("/api/v1/whatsapp/send-order-status",{token:e.token,sender:e.sender,bodyText:e.bodyText,...e.footerText&&{footerText:e.footerText},reference_id:e.reference_id,order_status:e.order_status,...e.status_description&&{status_description:e.status_description},...e.payment_status&&{payment_status:e.payment_status},...e.payment_timestamp!==void 0&&{payment_timestamp:e.payment_timestamp}},t)}async sendAudio(e,t){return this.httpClient.post("/api/v1/whatsapp/send-audio",{token:e.token,sender:e.sender,mediaId:e.mediaId,...e.voice!==void 0&&{voice:e.voice}},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/whatsapp/send-sticker",{token:e.token,sender:e.sender,mediaId:e.mediaId},t)}async sendVideo(e,t){return this.httpClient.post("/api/v1/whatsapp/send-video",{token:e.token,sender:e.sender,mediaId:e.mediaId,...e.caption&&{caption:e.caption}},t)}async sendDocument(e,t){return this.httpClient.post("/api/v1/whatsapp/send-document",{token:e.token,sender:e.sender,mediaId:e.mediaId,...e.filename&&{filename:e.filename},...e.caption&&{caption:e.caption}},t)}async sendContact(e,t){return this.httpClient.post("/api/v1/whatsapp/send-contact",{token:e.token,sender:e.sender,contacts:e.contacts},t)}async sendLocation(e,t){return this.httpClient.post("/api/v1/whatsapp/send-location",{token:e.token,sender:e.sender,latitude:e.latitude,longitude:e.longitude,name:e.name,address:e.address},t)}async sendLocationRequest(e,t){return this.httpClient.post("/api/v1/whatsapp/send-location-request",{token:e.token,sender:e.sender,bodyText:e.bodyText,...e.headerText&&{headerText:e.headerText},...e.footerText&&{footerText:e.footerText}},t)}async sendCtaUrl(e,t){return this.httpClient.post("/api/v1/whatsapp/send-cta-url",{token:e.token,sender:e.sender,bodyText:e.bodyText,buttonText:e.buttonText,url:e.url,...e.header&&{header:e.header},...e.footerText&&{footerText:e.footerText}},t)}async sendMediaCarousel(e,t){return this.httpClient.post("/api/v1/whatsapp/send-media-carousel",{token:e.token,sender:e.sender,bodyText:e.bodyText,cards:e.cards},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/whatsapp/download-media",{token:e.token,url:e.url},t)}};var g=class{constructor(e){this.httpClient=e;}async sendMessage(e,t){return this.httpClient.post("/api/v1/telegram/send-message",{token:e.token,chatId:e.chatId,text:e.text,parseMode:e.parseMode,replyToMessageId:e.replyToMessageId,disableNotification:e.disableNotification},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/telegram/send-media",{token:e.token,chatId:e.chatId,fileUrl:e.fileUrl,type:e.type,caption:e.caption,parseMode:e.parseMode,replyToMessageId:e.replyToMessageId},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/telegram/send-buttons",{token:e.token,chatId:e.chatId,text:e.text,buttons:e.buttons,parseMode:e.parseMode},t)}async sendLocation(e,t){return this.httpClient.post("/api/v1/telegram/send-location",{token:e.token,chatId:e.chatId,latitude:e.latitude,longitude:e.longitude,livePeriod:e.livePeriod},t)}async sendContact(e,t){return this.httpClient.post("/api/v1/telegram/send-contact",{token:e.token,chatId:e.chatId,phoneNumber:e.phoneNumber,firstName:e.firstName,lastName:e.lastName,vcard:e.vcard},t)}async sendPoll(e,t){return this.httpClient.post("/api/v1/telegram/send-poll",{token:e.token,chatId:e.chatId,question:e.question,options:e.options,isAnonymous:e.isAnonymous,type:e.type,correctOptionId:e.correctOptionId},t)}async sendVenue(e,t){return this.httpClient.post("/api/v1/telegram/send-venue",{token:e.token,chatId:e.chatId,latitude:e.latitude,longitude:e.longitude,title:e.title,address:e.address,foursquareId:e.foursquareId},t)}async sendDice(e,t){return this.httpClient.post("/api/v1/telegram/send-dice",{token:e.token,chatId:e.chatId,emoji:e.emoji},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/telegram/send-sticker",{token:e.token,chatId:e.chatId,stickerUrl:e.stickerUrl},t)}async sendVoice(e,t){return this.httpClient.post("/api/v1/telegram/send-voice",{token:e.token,chatId:e.chatId,voiceUrl:e.voiceUrl,caption:e.caption,duration:e.duration},t)}async sendVideoNote(e,t){return this.httpClient.post("/api/v1/telegram/send-video-note",{token:e.token,chatId:e.chatId,videoNoteUrl:e.videoNoteUrl,duration:e.duration,length:e.length},t)}async sendMediaGroup(e,t){return this.httpClient.post("/api/v1/telegram/send-media-group",{token:e.token,chatId:e.chatId,media:e.media},t)}async sendReplyKeyboard(e,t){return this.httpClient.post("/api/v1/telegram/send-reply-keyboard",{token:e.token,chatId:e.chatId,text:e.text,keyboard:e.keyboard,resizeKeyboard:e.resizeKeyboard,oneTimeKeyboard:e.oneTimeKeyboard},t)}async editMessage(e,t){return this.httpClient.post("/api/v1/telegram/edit-message",{token:e.token,chatId:e.chatId,messageId:e.messageId,text:e.text,parseMode:e.parseMode},t)}async deleteMessage(e,t){return this.httpClient.post("/api/v1/telegram/delete-message",{token:e.token,chatId:e.chatId,messageId:e.messageId},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/telegram/download-media",{token:e.token,fileId:e.fileId},t)}};var u=class{constructor(e){this.httpClient=e;}async sendText(e,t){return this.httpClient.post("/api/v1/webchat/send-text",{token:e.token,sender:e.sender,messageText:e.messageText},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/webchat/send-media",{token:e.token,sender:e.sender,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sendCarousel(e,t){return this.httpClient.post("/api/v1/webchat/send-carousel",{token:e.token,sender:e.sender,cards:e.cards},t)}async sendForm(e,t){return this.httpClient.post("/api/v1/webchat/send-form",{token:e.token,sender:e.sender,title:e.title,fields:e.fields,submitButtonText:e.submitButtonText},t)}async sendQuickReplies(e,t){return this.httpClient.post("/api/v1/webchat/send-quick-replies",{token:e.token,sender:e.sender,messageText:e.messageText,quickReplies:e.quickReplies},t)}async sendCard(e,t){return this.httpClient.post("/api/v1/webchat/send-card",{token:e.token,sender:e.sender,title:e.title,description:e.description,imageUrl:e.imageUrl,buttons:e.buttons},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/webchat/send-buttons",{token:e.token,sender:e.sender,messageText:e.messageText,buttons:e.buttons},t)}};var m=class{constructor(e){this.httpClient=e;}async listPosts(e,t){return this.httpClient.post("/api/v1/facebook/list-posts",{token:e.token,pageId:e.pageId,limit:e.limit},t)}async listComments(e,t){return this.httpClient.post("/api/v1/facebook/list-comments",{token:e.token,postId:e.postId,limit:e.limit},t)}async createPost(e,t){return this.httpClient.post("/api/v1/facebook/create-post",{token:e.token,pageId:e.pageId,message:e.message,link:e.link},t)}async replyComment(e,t){return this.httpClient.post("/api/v1/facebook/reply-comment",{token:e.token,commentId:e.commentId,message:e.message},t)}async deleteComment(e,t){return this.httpClient.post("/api/v1/facebook/delete-comment",{token:e.token,commentId:e.commentId},t)}async sendText(e,t){return this.httpClient.post("/api/v1/facebook/send-text",{token:e.token,recipientId:e.recipientId,message:e.message},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/facebook/send-media",{token:e.token,recipientId:e.recipientId,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/facebook/send-buttons",{token:e.token,recipientId:e.recipientId,message:e.message,buttons:e.buttons},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/facebook/send-sticker",{token:e.token,recipientId:e.recipientId,stickerId:e.stickerId},t)}async replyMessage(e,t){return this.httpClient.post("/api/v1/facebook/reply-message",{token:e.token,messageId:e.messageId,message:e.message},t)}async replyMedia(e,t){return this.httpClient.post("/api/v1/facebook/reply-media",{token:e.token,messageId:e.messageId,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sharePost(e,t){return this.httpClient.post("/api/v1/facebook/share-post",{token:e.token,mediaId:e.mediaId,recipientId:e.recipientId},t)}async getUserProfile(e,t){return this.httpClient.post("/api/v1/facebook/user-profile",{token:e.token,userId:e.userId},t)}async getPageProfile(e,t){return this.httpClient.post("/api/v1/facebook/page-profile",{token:e.token,pageId:e.pageId},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/facebook/download-media",{token:e.token,url:e.url},t)}};var k=class{constructor(e){this.httpClient=e;}async sendPrivateReply(e,t){return this.httpClient.post("/api/v1/instagram/private-reply",{token:e.token,commentId:e.commentId,message:e.message},t)}async sendText(e,t){return this.httpClient.post("/api/v1/instagram/messages/text",{token:e.token,recipientId:e.recipientId,message:e.message},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/instagram/messages/media",{token:e.token,recipientId:e.recipientId,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sendImages(e,t){return this.httpClient.post("/api/v1/instagram/messages/images",{token:e.token,recipientId:e.recipientId,images:e.images},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/instagram/messages/sticker",{token:e.token,recipientId:e.recipientId,stickerType:e.stickerType},t)}async reactMessage(e,t){return this.httpClient.post("/api/v1/instagram/messages/reaction",{token:e.token,messageId:e.messageId,reactionType:e.reactionType},t)}async removeReaction(e,t){return this.httpClient.delete("/api/v1/instagram/messages/reaction",t,{token:e.token,recipientId:e.recipientId,messageId:e.messageId})}async sendQuickReplies(e,t){return this.httpClient.post("/api/v1/instagram/messages/quick-replies",{token:e.token,recipientId:e.recipientId,message:e.message,quickReplies:e.quickReplies},t)}async sendGenericTemplate(e,t){return this.httpClient.post("/api/v1/instagram/messages/generic-template",{token:e.token,recipientId:e.recipientId,elements:e.elements},t)}async sendButtonTemplate(e,t){return this.httpClient.post("/api/v1/instagram/messages/button-template",{token:e.token,recipientId:e.recipientId,text:e.text,buttons:e.buttons},t)}async sendSenderAction(e,t){return this.httpClient.post("/api/v1/instagram/messages/sender-action",{token:e.token,recipientId:e.recipientId,action:e.action},t)}async getUserProfile(e,t){return this.httpClient.post("/api/v1/instagram/user-profile",{token:e.token,userId:e.userId},t)}async listPosts(e,t){return this.httpClient.post("/api/v1/instagram/posts",{token:e.token,userId:e.userId,limit:e.limit},t)}async getBusinessProfile(e,t){return this.httpClient.post("/api/v1/instagram/business-profile",{token:e.token},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/instagram/download-media",{token:e.token,url:e.url},t)}};var C=class{constructor(e){this.httpClient=new d(e),this.auth=new l(this.httpClient),this.channels=new c(this.httpClient),this.integrations=new p(this.httpClient),this.whatsapp=new h(this.httpClient),this.telegram=new g(this.httpClient),this.webchat=new u(this.httpClient),this.facebook=new m(this.httpClient),this.instagram=new k(this.httpClient);}},j=C;
7
7
  exports.OficialAPISDK=C;exports.default=j;//# sourceMappingURL=index.js.map
8
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.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.js","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","FacebookModule","InstagramModule","OficialAPISDK","index_default"],"mappings":";;;;;AAMA,IAAMA,EAAe,+BAAA,CAaRC,CAAAA,CAAN,KAAiB,CAWtB,WAAA,CAAYC,CAAAA,CAAmB,CAC7B,KAAK,MAAA,CAAS,CACZ,SAAUA,CAAAA,CAAO,QAAA,CACjB,aAAcA,CAAAA,CAAO,YAAA,CACrB,OAAA,CAASA,CAAAA,CAAO,SAAW,GAAA,CAC3B,UAAA,CAAYA,EAAO,UAAA,EAAc,CAAA,CACjC,WAAYA,CAAAA,CAAO,UAAA,EAAc,IACjC,OAAA,CAASA,CAAAA,CAAO,SAAW,EAC7B,EAEA,IAAA,CAAK,aAAA,CAAgBC,mBAAM,MAAA,CAAO,CAChC,OAAA,CAASH,CAAAA,CACT,QAAS,IAAA,CAAK,MAAA,CAAO,QACrB,OAAA,CAAS,CACP,eAAgB,kBAAA,CAChB,GAAG,IAAA,CAAK,MAAA,CAAO,OACjB,CACF,CAAC,EAED,IAAA,CAAK,iBAAA,GACP,CAEQ,iBAAA,EAAoB,CAE1B,IAAA,CAAK,cAAc,YAAA,CAAa,OAAA,CAAQ,IACrCE,CAAAA,EAAW,CAEV,GAAIA,CAAAA,CAAO,GAAA,EAAK,SAAS,aAAa,CAAA,CACpC,OAAOA,CAAAA,CAIT,IAAME,EAAgBF,CAAAA,CACtB,OAAIE,EAAc,WAAA,EAAeF,CAAAA,CAAO,OAAA,GACtCA,CAAAA,CAAO,QAAQ,aAAA,CAAgB,CAAA,OAAA,EAAUE,EAAc,WAAW,CAAA,CAAA,CAAA,CAG7DF,CACT,CAAA,CACCG,CAAAA,EAAU,OAAA,CAAQ,MAAA,CAAOA,CAAK,CACjC,CAAA,CAGA,KAAK,aAAA,CAAc,YAAA,CAAa,SAAS,GAAA,CACtCC,CAAAA,EAAaA,CAAAA,CACd,MAAOD,GAAsB,CAC3B,IAAMH,EAASG,CAAAA,CAAM,MAAA,CAGrB,GAAI,CAACH,CAAAA,CACH,OAAO,OAAA,CAAQ,MAAA,CAAO,KAAK,WAAA,CAAYG,CAAK,CAAC,CAAA,CAQ/C,GAAA,CAHG,CAACA,CAAAA,CAAM,QAAA,EAAaA,CAAAA,CAAM,QAAA,CAAS,QAAU,GAAA,EAAOA,CAAAA,CAAM,SAAS,MAAA,CAAS,GAAA,IAC5E,CAACH,CAAAA,CAAO,WAAA,EAAeA,EAAO,WAAA,CAAc,IAAA,CAAK,OAAO,UAAA,CAAA,CAE1C,CACfA,EAAO,WAAA,CAAA,CAAeA,CAAAA,CAAO,aAAe,CAAA,EAAK,CAAA,CACjD,IAAMK,CAAAA,CAAQ,KAAK,MAAA,CAAO,UAAA,CAAaL,EAAO,WAAA,CAE9C,OAAA,MAAM,IAAI,OAAA,CAASM,CAAAA,EAAY,WAAWA,CAAAA,CAASD,CAAK,CAAC,CAAA,CAClD,IAAA,CAAK,cAAcL,CAAM,CAClC,CAEA,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,YAAYG,CAAK,CAAC,CAC/C,CACF,EACF,CAKQ,WAAA,CAAYA,CAAAA,CAA0B,CAC5C,GAAIA,EAAM,QAAA,CAAU,CAClB,IAAMI,CAAAA,CAAOJ,CAAAA,CAAM,SAAS,IAAA,CACtBK,CAAAA,CAAUD,CAAAA,EAAM,KAAA,EAAO,SAAWA,CAAAA,EAAM,OAAA,EAAWJ,EAAM,OAAA,CACzDM,CAAAA,CAAeF,GAAM,KAAA,EAAO,OAAA,EAAW,EAAC,CAExCG,CAAAA,CAAiB,IAAI,KAAA,CAAMF,CAAO,EACxC,OAACE,CAAAA,CAAuB,OAASP,CAAAA,CAAM,QAAA,CAAS,MAAA,CAC/CO,CAAAA,CAAuB,KAAOP,CAAAA,CAAM,QAAA,CAAS,KAC7CO,CAAAA,CAAuB,OAAA,CAAUD,EAE3BC,CACT,CAEA,OAAIP,CAAAA,CAAM,QACD,IAAI,KAAA,CAAM,wEAAkE,CAAA,CAG9EA,CACT,CAMA,MAAM,GAAA,CAAaQ,CAAAA,CAAaC,CAAAA,CAAsBZ,EAAsD,CAC1G,IAAME,EAAwC,CAC5C,GAAGF,EACH,WAAA,CAAAY,CACF,EAEA,OAAA,CADiB,MAAM,KAAK,aAAA,CAAc,GAAA,CAAoBD,EAAKT,CAAa,CAAA,EAChE,IAClB,CAMA,MAAM,IAAA,CAAcS,CAAAA,CAAaJ,EAAYK,CAAAA,CAAsBZ,CAAAA,CAAsD,CACvH,IAAME,CAAAA,CAAwC,CAC5C,GAAGF,CAAAA,CACH,WAAA,CAAAY,CACF,EAEA,OAAA,CADiB,MAAM,KAAK,aAAA,CAAc,IAAA,CAAqBD,EAAKJ,CAAAA,CAAML,CAAa,CAAA,EACvE,IAClB,CAMA,MAAM,GAAA,CAAaS,EAAaJ,CAAAA,CAAYK,CAAAA,CAAsBZ,EAAsD,CACtH,IAAME,EAAwC,CAC5C,GAAGF,EACH,WAAA,CAAAY,CACF,EAEA,OAAA,CADiB,MAAM,KAAK,aAAA,CAAc,GAAA,CAAoBD,CAAAA,CAAKJ,CAAAA,CAAML,CAAa,CAAA,EACtE,IAClB,CAOA,MAAM,MAAA,CAAgBS,EAAaC,CAAAA,CAAsBL,CAAAA,CAAYP,EAAsD,CACzH,IAAME,EAAwC,CAC5C,GAAGF,EACH,WAAA,CAAAY,CAAAA,CACA,KAAAL,CACF,CAAA,CAEA,OAAA,CADiB,MAAM,KAAK,aAAA,CAAc,MAAA,CAAuBI,EAAKT,CAAa,CAAA,EACnE,IAClB,CAMA,MAAM,OACJS,CAAAA,CACAE,CAAAA,CACAD,EACAE,CAAAA,CAAoB,MAAA,CACpBC,EACyB,CACzB,IAAMC,EAAW,IAAI,QAAA,CAErB,GAAIH,CAAAA,YAAgB,OAAQ,CAC1B,IAAMI,EAAO,IAAI,IAAA,CAAK,CAACJ,CAAI,CAAC,CAAA,CAC5BG,CAAAA,CAAS,OAAOF,CAAAA,CAAWG,CAAI,EACjC,CAAA,KACED,CAAAA,CAAS,OAAOF,CAAAA,CAAWD,CAAI,CAAA,CAG7BE,CAAAA,EACF,OAAO,OAAA,CAAQA,CAAc,EAAE,OAAA,CAAQ,CAAC,CAACG,CAAAA,CAAKC,CAAK,IAAM,CAC5BA,CAAAA,EAAU,MACnCH,CAAAA,CAAS,MAAA,CAAOE,EAAK,OAAOC,CAAAA,EAAU,SAAWA,CAAAA,CAAQ,IAAA,CAAK,SAAA,CAAUA,CAAK,CAAC,EAElF,CAAC,EAGH,IAAMjB,CAAAA,CAAwC,CAC5C,OAAA,CAAS,CACP,cAAA,CAAgB,qBAClB,EACA,WAAA,CAAAU,CACF,EAIA,OAAA,CAFiB,MAAM,KAAK,aAAA,CAAc,IAAA,CAAqBD,CAAAA,CAAKK,CAAAA,CAAUd,CAAa,CAAA,EAE3E,IAClB,CACF,CAAA,CCpNO,IAAMkB,EAAN,KAAiB,CACtB,YAAoBC,CAAAA,CAAwB,CAAxB,gBAAAA,EAAyB,CAK7C,MAAM,QAAA,CAASC,CAAAA,CAAkBC,EAA8C,CAC7E,IAAMnB,CAAAA,CAAW,MAAM,KAAK,UAAA,CAAW,IAAA,CAAoB,qBAAsB,CAC/E,SAAA,CAAWkB,EACX,aAAA,CAAeC,CACjB,CAAC,CAAA,CAED,GAAI,CAACnB,CAAAA,CAAS,SAAW,CAACA,CAAAA,CAAS,KACjC,MAAM,IAAI,KAAA,CAAMA,CAAAA,CAAS,OAAO,OAAA,EAAW,sBAAsB,EAGnE,OAAOA,CAAAA,CAAS,IAClB,CACF,CAAA,CClBO,IAAMoB,CAAAA,CAAN,KAAqB,CAC1B,WAAA,CAAoBH,CAAAA,CAAwB,CAAxB,IAAA,CAAA,UAAA,CAAAA,EAAyB,CAM7C,MAAM,IAAA,CAAKT,CAAAA,CAAyC,CAClD,IAAMR,CAAAA,CAAW,MAAM,KAAK,UAAA,CAAW,GAAA,CAAe,mBAAoBQ,CAAW,CAAA,CAErF,GAAI,CAACR,CAAAA,CAAS,SAAW,CAACA,CAAAA,CAAS,KACjC,MAAM,IAAI,MAAMA,CAAAA,CAAS,KAAA,EAAO,OAAA,EAAW,wBAAwB,EAGrE,OAAO,KAAA,CAAM,QAAQA,CAAAA,CAAS,IAAI,EAAIA,CAAAA,CAAS,IAAA,CAAO,CAACA,CAAAA,CAAS,IAAI,CACtE,CACF,CAAA,CChBO,IAAMqB,CAAAA,CAAN,KAAyB,CAC9B,WAAA,CAAoBJ,CAAAA,CAAwB,CAAxB,IAAA,CAAA,UAAA,CAAAA,EAAyB,CAO7C,MAAM,cAAcK,CAAAA,CAA6Bd,CAAAA,CAAuC,CACtF,IAAMR,CAAAA,CAAW,MAAM,IAAA,CAAK,WAAW,IAAA,CACrC,sBAAA,CACA,CACE,GAAA,CAAKsB,CAAAA,CAAO,IACZ,aAAA,CAAeA,CAAAA,CAAO,aACxB,CAAA,CACAd,CACF,CAAA,CAEA,GAAI,CAACR,CAAAA,CAAS,OAAA,EAAW,CAACA,CAAAA,CAAS,IAAA,CACjC,MAAM,IAAI,KAAA,CAAMA,EAAS,KAAA,EAAO,OAAA,EAAW,wBAAwB,CAAA,CAGrE,OAAOA,EAAS,IAClB,CACF,CAAA,CCFO,IAAMuB,EAAN,KAAqB,CAC1B,YAAoBN,CAAAA,CAAwB,CAAxB,gBAAAA,EAAyB,CAO7C,MAAM,QAAA,CAASK,EAAgCd,CAAAA,CAAqB,CAClE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,+BAAA,CAAiC,CAC3D,KAAA,CAAOc,CAAAA,CAAO,MACd,MAAA,CAAQA,CAAAA,CAAO,OACf,WAAA,CAAaA,CAAAA,CAAO,WACtB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,UAAUc,CAAAA,CAAiCd,CAAAA,CAAqB,CACpE,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,6BAAA,CAA+B,CACzD,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,OAAA,CAASA,EAAO,OAAA,CAChB,IAAA,CAAMA,CAAAA,CAAO,IAAA,CACb,QAASA,CAAAA,CAAO,OAAA,CAChB,GAAIA,CAAAA,CAAO,QAAA,EAAY,CAAE,QAAA,CAAUA,CAAAA,CAAO,QAAS,CACrD,EAAGd,CAAW,CAChB,CAOA,MAAM,YAAA,CAAac,EAAoCd,CAAAA,CAAqB,CAC1E,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,gCAAA,CAAkC,CAC5D,MAAOc,CAAAA,CAAO,KAAA,CACd,OAAQA,CAAAA,CAAO,MAAA,CACf,YAAA,CAAcA,CAAAA,CAAO,aACrB,YAAA,CAAcA,CAAAA,CAAO,aACrB,UAAA,CAAYA,CAAAA,CAAO,UACrB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,YAAYc,CAAAA,CAAmCd,CAAAA,CAAqB,CACxE,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,+BAAA,CAAiC,CAC3D,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,IAAA,CAAMA,EAAO,IAAA,CACb,OAAA,CAASA,EAAO,OAAA,CAChB,GAAIA,EAAO,KAAA,EAAS,CAAE,MAAOA,CAAAA,CAAO,KAAM,CAC5C,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,QAAA,CAASc,CAAAA,CAAgCd,EAAqB,CAClE,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,4BAAA,CAA8B,CACxD,MAAOc,CAAAA,CAAO,KAAA,CACd,OAAQA,CAAAA,CAAO,MAAA,CACf,WAAYA,CAAAA,CAAO,UAAA,CACnB,QAAA,CAAUA,CAAAA,CAAO,SACjB,UAAA,CAAYA,CAAAA,CAAO,WACnB,QAAA,CAAUA,CAAAA,CAAO,SACjB,GAAIA,CAAAA,CAAO,YAAc,CAAE,UAAA,CAAYA,EAAO,UAAW,CAC3D,EAAGd,CAAW,CAChB,CAOA,MAAM,YAAA,CAAac,CAAAA,CAA6Bd,CAAAA,CAAqB,CACnE,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,gCAAA,CAAkC,CAC5D,KAAA,CAAOc,CAAAA,CAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,WAAA,CAAaA,EAAO,WAAA,CACpB,GAAIA,EAAO,cAAA,EAAkB,CAAE,cAAA,CAAgBA,CAAAA,CAAO,cAAe,CAAA,CACrE,GAAIA,EAAO,WAAA,GAAgB,MAAA,EAAa,CAAE,WAAA,CAAaA,CAAAA,CAAO,WAAY,CAC5E,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,YAAA,CAAac,CAAAA,CAA6Bd,EAAqB,CACnE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,gCAAA,CAAkC,CAC5D,MAAOc,CAAAA,CAAO,KAAA,CACd,OAAQA,CAAAA,CAAO,MAAA,CACf,KAAA,CAAOA,CAAAA,CAAO,MACd,GAAIA,CAAAA,CAAO,YAAc,CAAE,UAAA,CAAYA,EAAO,UAAW,CAC3D,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,eAAec,CAAAA,CAA8Bd,CAAAA,CAAqB,CACtE,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,kCAAA,CAAoC,CAC9D,KAAA,CAAOc,CAAAA,CAAO,MACd,IAAA,CAAMA,CAAAA,CAAO,KACb,QAAA,CAAUA,CAAAA,CAAO,QAAA,CACjB,QAAA,CAAUA,EAAO,QAAA,CACjB,UAAA,CAAYA,EAAO,UACrB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,aAAA,CAAcgB,CAAAA,CAAehB,EAAqB,CACtD,OAAO,KAAK,UAAA,CAAW,GAAA,CAAI,oCAAoC,kBAAA,CAAmBgB,CAAK,CAAC,CAAA,CAAA,CAAIhB,CAAW,CACzG,CAQA,MAAM,WAAA,CAAYgB,CAAAA,CAAeC,EAAoBjB,CAAAA,CAAqB,CACxE,OAAO,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,2BAAA,EAA8BiB,CAAU,UAAU,kBAAA,CAAmBD,CAAK,CAAC,CAAA,CAAA,CAAIhB,CAAW,CACvH,CAOA,MAAM,WAAA,CAAYc,CAAAA,CAA2Bd,EAAqB,CAChE,OAAO,KAAK,UAAA,CAAW,MAAA,CAAO,+BAAA,CAAiCc,CAAAA,CAAO,KAAMd,CAAAA,CAAa,MAAA,CAAQ,CAC/F,KAAA,CAAOc,CAAAA,CAAO,MACd,SAAA,CAAWA,CAAAA,CAAO,SAAA,CAClB,GAAIA,EAAO,QAAA,EAAY,CAAE,SAAUA,CAAAA,CAAO,QAAS,CACrD,CAAC,CACH,CAOA,MAAM,gBAAA,CAAiBA,EAAgCd,CAAAA,CAAqB,CAC1E,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,qCAAA,CAAuC,CACjE,KAAA,CAAOc,CAAAA,CAAO,MACd,MAAA,CAAQA,CAAAA,CAAO,OACf,GAAIA,CAAAA,CAAO,YAAc,CAAE,UAAA,CAAYA,CAAAA,CAAO,UAAW,EACzD,QAAA,CAAUA,CAAAA,CAAO,SACjB,GAAIA,CAAAA,CAAO,YAAc,CAAE,UAAA,CAAYA,CAAAA,CAAO,UAAW,EACzD,YAAA,CAAcA,CAAAA,CAAO,aACrB,IAAA,CAAMA,CAAAA,CAAO,KACb,QAAA,CAAUA,CAAAA,CAAO,SACjB,YAAA,CAAcA,CAAAA,CAAO,aACrB,KAAA,CAAOA,CAAAA,CAAO,MACd,GAAIA,CAAAA,CAAO,kBAAoB,CAAE,gBAAA,CAAkBA,CAAAA,CAAO,gBAAiB,CAC7E,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,gBAAgBc,CAAAA,CAA+Bd,CAAAA,CAAqB,CACxE,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,qCAAsC,CAChE,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,CAAAA,CAAO,MAAA,CACf,SAAUA,CAAAA,CAAO,QAAA,CACjB,GAAIA,CAAAA,CAAO,UAAA,EAAc,CAAE,UAAA,CAAYA,CAAAA,CAAO,UAAW,CAAA,CACzD,YAAA,CAAcA,EAAO,YAAA,CACrB,YAAA,CAAcA,EAAO,YAAA,CACrB,GAAIA,EAAO,kBAAA,EAAsB,CAAE,kBAAA,CAAoBA,CAAAA,CAAO,kBAAmB,CAAA,CACjF,GAAIA,EAAO,cAAA,EAAkB,CAAE,eAAgBA,CAAAA,CAAO,cAAe,EACrE,GAAIA,CAAAA,CAAO,oBAAsB,MAAA,EAAa,CAAE,kBAAmBA,CAAAA,CAAO,iBAAkB,CAC9F,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,SAAA,CAAUc,CAAAA,CAAiCd,EAAqB,CACpE,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,8BAA+B,CACzD,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,OAAA,CAASA,EAAO,OAAA,CAChB,GAAIA,CAAAA,CAAO,KAAA,GAAU,QAAa,CAAE,KAAA,CAAOA,EAAO,KAAM,CAC1D,EAAGd,CAAW,CAChB,CAOA,MAAM,YAAYc,CAAAA,CAAmCd,CAAAA,CAAqB,CACxE,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,+BAAA,CAAiC,CAC3D,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,OAAA,CAASA,EAAO,OAClB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,SAAA,CAAUc,CAAAA,CAAiCd,EAAqB,CACpE,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,6BAAA,CAA+B,CACzD,MAAOc,CAAAA,CAAO,KAAA,CACd,OAAQA,CAAAA,CAAO,MAAA,CACf,QAASA,CAAAA,CAAO,OAAA,CAChB,GAAIA,CAAAA,CAAO,SAAW,CAAE,OAAA,CAASA,EAAO,OAAQ,CAClD,EAAGd,CAAW,CAChB,CAOA,MAAM,aAAac,CAAAA,CAAoCd,CAAAA,CAAqB,CAC1E,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,gCAAA,CAAkC,CAC5D,KAAA,CAAOc,CAAAA,CAAO,MACd,MAAA,CAAQA,CAAAA,CAAO,OACf,OAAA,CAASA,CAAAA,CAAO,QAChB,GAAIA,CAAAA,CAAO,QAAA,EAAY,CAAE,SAAUA,CAAAA,CAAO,QAAS,EACnD,GAAIA,CAAAA,CAAO,SAAW,CAAE,OAAA,CAASA,CAAAA,CAAO,OAAQ,CAClD,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,YAAYc,CAAAA,CAAmCd,CAAAA,CAAqB,CACxE,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,gCAAiC,CAC3D,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,QAAA,CAAUA,EAAO,QACnB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,YAAA,CAAac,CAAAA,CAAoCd,CAAAA,CAAqB,CAC1E,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,gCAAA,CAAkC,CAC5D,MAAOc,CAAAA,CAAO,KAAA,CACd,OAAQA,CAAAA,CAAO,MAAA,CACf,SAAUA,CAAAA,CAAO,QAAA,CACjB,UAAWA,CAAAA,CAAO,SAAA,CAClB,KAAMA,CAAAA,CAAO,IAAA,CACb,OAAA,CAASA,CAAAA,CAAO,OAClB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,oBAAoBc,CAAAA,CAA2Cd,CAAAA,CAAqB,CACxF,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,wCAAA,CAA0C,CACpE,KAAA,CAAOc,CAAAA,CAAO,MACd,MAAA,CAAQA,CAAAA,CAAO,MAAA,CACf,QAAA,CAAUA,EAAO,QAAA,CACjB,GAAIA,EAAO,UAAA,EAAc,CAAE,WAAYA,CAAAA,CAAO,UAAW,CAAA,CACzD,GAAIA,EAAO,UAAA,EAAc,CAAE,WAAYA,CAAAA,CAAO,UAAW,CAC3D,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,UAAA,CAAWc,CAAAA,CAAkCd,EAAqB,CACtE,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,gCAAiC,CAC3D,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,QAAA,CAAUA,EAAO,QAAA,CACjB,UAAA,CAAYA,CAAAA,CAAO,UAAA,CACnB,IAAKA,CAAAA,CAAO,GAAA,CACZ,GAAIA,CAAAA,CAAO,MAAA,EAAU,CAAE,MAAA,CAAQA,CAAAA,CAAO,MAAO,CAAA,CAC7C,GAAIA,EAAO,UAAA,EAAc,CAAE,WAAYA,CAAAA,CAAO,UAAW,CAC3D,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,iBAAA,CAAkBc,CAAAA,CAAyCd,EAAqB,CACpF,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,uCAAwC,CAClE,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,QAAA,CAAUA,EAAO,QAAA,CACjB,KAAA,CAAOA,CAAAA,CAAO,KAChB,EAAGd,CAAW,CAChB,CAOA,MAAM,aAAA,CAAcc,EAAqCd,CAAAA,CAAqB,CAC5E,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,iCAAA,CAAmC,CAC7D,KAAA,CAAOc,CAAAA,CAAO,MACd,GAAA,CAAKA,CAAAA,CAAO,GACd,CAAA,CAAGd,CAAW,CAChB,CACF,ECtVO,IAAMkB,CAAAA,CAAN,KAAqB,CAC1B,WAAA,CAAoBT,EAAwB,CAAxB,IAAA,CAAA,UAAA,CAAAA,EAAyB,CAO7C,MAAM,YAAYK,CAAAA,CAAgCd,CAAAA,CAAqB,CACrE,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,gCAAiC,CAC3D,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,IAAA,CAAMA,EAAO,IAAA,CACb,SAAA,CAAWA,EAAO,SAAA,CAClB,gBAAA,CAAkBA,EAAO,gBAAA,CACzB,mBAAA,CAAqBA,EAAO,mBAC9B,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,SAAA,CAAUc,EAAiCd,CAAAA,CAAqB,CACpE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,6BAAA,CAA+B,CACzD,MAAOc,CAAAA,CAAO,KAAA,CACd,OAAQA,CAAAA,CAAO,MAAA,CACf,QAASA,CAAAA,CAAO,OAAA,CAChB,IAAA,CAAMA,CAAAA,CAAO,KACb,OAAA,CAASA,CAAAA,CAAO,QAChB,SAAA,CAAWA,CAAAA,CAAO,UAClB,gBAAA,CAAkBA,CAAAA,CAAO,gBAC3B,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,WAAA,CAAYc,CAAAA,CAAmCd,EAAqB,CACxE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,+BAAA,CAAiC,CAC3D,MAAOc,CAAAA,CAAO,KAAA,CACd,OAAQA,CAAAA,CAAO,MAAA,CACf,KAAMA,CAAAA,CAAO,IAAA,CACb,QAASA,CAAAA,CAAO,OAAA,CAChB,UAAWA,CAAAA,CAAO,SACpB,EAAGd,CAAW,CAChB,CAOA,MAAM,aAAac,CAAAA,CAAoCd,CAAAA,CAAqB,CAC1E,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,gCAAA,CAAkC,CAC5D,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,QAAA,CAAUA,EAAO,QAAA,CACjB,SAAA,CAAWA,CAAAA,CAAO,SAAA,CAClB,WAAYA,CAAAA,CAAO,UACrB,EAAGd,CAAW,CAChB,CAOA,MAAM,WAAA,CAAYc,EAAmCd,CAAAA,CAAqB,CACxE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,+BAAA,CAAiC,CAC3D,MAAOc,CAAAA,CAAO,KAAA,CACd,MAAA,CAAQA,CAAAA,CAAO,OACf,WAAA,CAAaA,CAAAA,CAAO,YACpB,SAAA,CAAWA,CAAAA,CAAO,UAClB,QAAA,CAAUA,CAAAA,CAAO,QAAA,CACjB,KAAA,CAAOA,EAAO,KAChB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,QAAA,CAASc,CAAAA,CAAgCd,CAAAA,CAAqB,CAClE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,4BAAA,CAA8B,CACxD,MAAOc,CAAAA,CAAO,KAAA,CACd,OAAQA,CAAAA,CAAO,MAAA,CACf,SAAUA,CAAAA,CAAO,QAAA,CACjB,QAASA,CAAAA,CAAO,OAAA,CAChB,YAAaA,CAAAA,CAAO,WAAA,CACpB,IAAA,CAAMA,CAAAA,CAAO,KACb,eAAA,CAAiBA,CAAAA,CAAO,eAC1B,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,UAAUc,CAAAA,CAAiCd,CAAAA,CAAqB,CACpE,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,6BAAA,CAA+B,CACzD,KAAA,CAAOc,CAAAA,CAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,QAAA,CAAUA,EAAO,QAAA,CACjB,SAAA,CAAWA,EAAO,SAAA,CAClB,KAAA,CAAOA,EAAO,KAAA,CACd,OAAA,CAASA,EAAO,OAAA,CAChB,YAAA,CAAcA,EAAO,YACvB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,QAAA,CAASc,EAAgCd,CAAAA,CAAqB,CAClE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,4BAAA,CAA8B,CACxD,KAAA,CAAOc,CAAAA,CAAO,MACd,MAAA,CAAQA,CAAAA,CAAO,OACf,KAAA,CAAOA,CAAAA,CAAO,KAChB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,WAAA,CAAYc,CAAAA,CAAmCd,EAAqB,CACxE,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,gCAAiC,CAC3D,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,UAAA,CAAYA,EAAO,UACrB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,SAAA,CAAUc,EAAiCd,CAAAA,CAAqB,CACpE,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,6BAAA,CAA+B,CACzD,KAAA,CAAOc,CAAAA,CAAO,MACd,MAAA,CAAQA,CAAAA,CAAO,OACf,QAAA,CAAUA,CAAAA,CAAO,QAAA,CACjB,OAAA,CAASA,EAAO,OAAA,CAChB,QAAA,CAAUA,EAAO,QACnB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,aAAA,CAAcc,CAAAA,CAAqCd,EAAqB,CAC5E,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,mCAAoC,CAC9D,KAAA,CAAOc,CAAAA,CAAO,KAAA,CACd,OAAQA,CAAAA,CAAO,MAAA,CACf,aAAcA,CAAAA,CAAO,YAAA,CACrB,SAAUA,CAAAA,CAAO,QAAA,CACjB,MAAA,CAAQA,CAAAA,CAAO,MACjB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,eAAec,CAAAA,CAAsCd,CAAAA,CAAqB,CAC9E,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,oCAAqC,CAC/D,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,KAAA,CAAOA,EAAO,KAChB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,iBAAA,CAAkBc,CAAAA,CAAyCd,CAAAA,CAAqB,CACpF,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,sCAAA,CAAwC,CAClE,MAAOc,CAAAA,CAAO,KAAA,CACd,OAAQA,CAAAA,CAAO,MAAA,CACf,KAAMA,CAAAA,CAAO,IAAA,CACb,SAAUA,CAAAA,CAAO,QAAA,CACjB,eAAgBA,CAAAA,CAAO,cAAA,CACvB,eAAA,CAAiBA,CAAAA,CAAO,eAC1B,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,YAAYc,CAAAA,CAAmCd,CAAAA,CAAqB,CACxE,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,+BAAA,CAAiC,CAC3D,KAAA,CAAOc,CAAAA,CAAO,MACd,MAAA,CAAQA,CAAAA,CAAO,MAAA,CACf,SAAA,CAAWA,EAAO,SAAA,CAClB,IAAA,CAAMA,EAAO,IAAA,CACb,SAAA,CAAWA,EAAO,SACpB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,aAAA,CAAcc,EAAqCd,CAAAA,CAAqB,CAC5E,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,iCAAA,CAAmC,CAC7D,KAAA,CAAOc,CAAAA,CAAO,MACd,MAAA,CAAQA,CAAAA,CAAO,OACf,SAAA,CAAWA,CAAAA,CAAO,SACpB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,cAAcc,CAAAA,CAAqCd,CAAAA,CAAqB,CAC5E,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,kCAAmC,CAC7D,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MACjB,CAAA,CAAGd,CAAW,CAChB,CACF,CAAA,CCzPO,IAAMmB,EAAN,KAAoB,CACzB,YAAoBV,CAAAA,CAAwB,CAAxB,IAAA,CAAA,UAAA,CAAAA,EAAyB,CAO7C,MAAM,QAAA,CAASK,EAA+Bd,CAAAA,CAAqB,CACjE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,2BAAA,CAA6B,CACvD,MAAOc,CAAAA,CAAO,KAAA,CACd,OAAQA,CAAAA,CAAO,MAAA,CACf,YAAaA,CAAAA,CAAO,WACtB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,UAAUc,CAAAA,CAAgCd,CAAAA,CAAqB,CACnE,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,6BAA8B,CACxD,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,OAAA,CAASA,CAAAA,CAAO,OAAA,CAChB,KAAMA,CAAAA,CAAO,IAAA,CACb,QAASA,CAAAA,CAAO,OAClB,EAAGd,CAAW,CAChB,CAOA,MAAM,YAAA,CAAac,EAAmCd,CAAAA,CAAqB,CACzE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,+BAAA,CAAiC,CAC3D,KAAA,CAAOc,CAAAA,CAAO,MACd,MAAA,CAAQA,CAAAA,CAAO,OACf,KAAA,CAAOA,CAAAA,CAAO,KAChB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,SAASc,CAAAA,CAA+Bd,CAAAA,CAAqB,CACjE,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,2BAAA,CAA6B,CACvD,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,KAAA,CAAOA,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,gBAAA,CAAkBA,EAAO,gBAC3B,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,gBAAA,CAAiBc,CAAAA,CAAuCd,CAAAA,CAAqB,CACjF,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,oCAAA,CAAsC,CAChE,MAAOc,CAAAA,CAAO,KAAA,CACd,MAAA,CAAQA,CAAAA,CAAO,OACf,WAAA,CAAaA,CAAAA,CAAO,YACpB,YAAA,CAAcA,CAAAA,CAAO,YACvB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,QAAA,CAASc,CAAAA,CAA+Bd,EAAqB,CACjE,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,4BAA6B,CACvD,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,KAAA,CAAOA,EAAO,KAAA,CACd,WAAA,CAAaA,CAAAA,CAAO,WAAA,CACpB,SAAUA,CAAAA,CAAO,QAAA,CACjB,QAASA,CAAAA,CAAO,OAClB,EAAGd,CAAW,CAChB,CAOA,MAAM,YAAYc,CAAAA,CAAkCd,CAAAA,CAAqB,CACvE,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,8BAAA,CAAgC,CAC1D,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MAAA,CACf,WAAA,CAAaA,EAAO,WAAA,CACpB,OAAA,CAASA,EAAO,OAClB,CAAA,CAAGd,CAAW,CAChB,CACF,EC9FO,IAAMoB,CAAAA,CAAN,KAAqB,CAC1B,WAAA,CAAoBX,CAAAA,CAAwB,CAAxB,gBAAAA,EAAyB,CAO7C,MAAM,SAAA,CAAUK,CAAAA,CAAyBd,EAAqB,CAC5D,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,6BAAA,CAA+B,CACzD,MAAOc,CAAAA,CAAO,KAAA,CACd,OAAQA,CAAAA,CAAO,MAAA,CACf,KAAA,CAAOA,CAAAA,CAAO,KAChB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,aAAac,CAAAA,CAA4Bd,CAAAA,CAAqB,CAClE,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,gCAAA,CAAkC,CAC5D,KAAA,CAAOc,CAAAA,CAAO,MACd,MAAA,CAAQA,CAAAA,CAAO,MAAA,CACf,KAAA,CAAOA,EAAO,KAChB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,UAAA,CAAWc,CAAAA,CAA0Bd,EAAqB,CAC9D,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,+BAAgC,CAC1D,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,CAAAA,CAAO,MAAA,CACf,QAASA,CAAAA,CAAO,OAAA,CAChB,KAAMA,CAAAA,CAAO,IACf,EAAGd,CAAW,CAChB,CAOA,MAAM,YAAA,CAAac,EAA4Bd,CAAAA,CAAqB,CAClE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,gCAAA,CAAkC,CAC5D,KAAA,CAAOc,CAAAA,CAAO,MACd,SAAA,CAAWA,CAAAA,CAAO,UAClB,OAAA,CAASA,CAAAA,CAAO,OAClB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,aAAA,CAAcc,CAAAA,CAA6Bd,EAAqB,CACpE,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,iCAAA,CAAmC,CAC7D,MAAOc,CAAAA,CAAO,KAAA,CACd,UAAWA,CAAAA,CAAO,SACpB,EAAGd,CAAW,CAChB,CAOA,MAAM,QAAA,CAASc,EAAgCd,CAAAA,CAAqB,CAClE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,4BAAA,CAA8B,CACxD,KAAA,CAAOc,CAAAA,CAAO,MACd,WAAA,CAAaA,CAAAA,CAAO,YACpB,OAAA,CAASA,CAAAA,CAAO,OAClB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,SAAA,CAAUc,CAAAA,CAAiCd,EAAqB,CACpE,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,6BAAA,CAA+B,CACzD,MAAOc,CAAAA,CAAO,KAAA,CACd,YAAaA,CAAAA,CAAO,WAAA,CACpB,QAASA,CAAAA,CAAO,OAAA,CAChB,KAAMA,CAAAA,CAAO,IAAA,CACb,QAASA,CAAAA,CAAO,OAClB,EAAGd,CAAW,CAChB,CAOA,MAAM,WAAA,CAAYc,CAAAA,CAAmCd,CAAAA,CAAqB,CACxE,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,+BAAA,CAAiC,CAC3D,KAAA,CAAOc,CAAAA,CAAO,KAAA,CACd,WAAA,CAAaA,EAAO,WAAA,CACpB,OAAA,CAASA,EAAO,OAAA,CAChB,OAAA,CAASA,EAAO,OAClB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,WAAA,CAAYc,EAAmCd,CAAAA,CAAqB,CACxE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,+BAAA,CAAiC,CAC3D,MAAOc,CAAAA,CAAO,KAAA,CACd,YAAaA,CAAAA,CAAO,WAAA,CACpB,UAAWA,CAAAA,CAAO,SACpB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,aAAac,CAAAA,CAAoCd,CAAAA,CAAqB,CAC1E,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,gCAAA,CAAkC,CAC5D,KAAA,CAAOc,CAAAA,CAAO,MACd,SAAA,CAAWA,CAAAA,CAAO,UAClB,OAAA,CAASA,CAAAA,CAAO,OAClB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,UAAA,CAAWc,CAAAA,CAAkCd,EAAqB,CACtE,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,+BAAgC,CAC1D,KAAA,CAAOc,EAAO,KAAA,CACd,SAAA,CAAWA,EAAO,SAAA,CAClB,OAAA,CAASA,CAAAA,CAAO,OAAA,CAChB,KAAMA,CAAAA,CAAO,IAAA,CACb,QAASA,CAAAA,CAAO,OAClB,EAAGd,CAAW,CAChB,CAOA,MAAM,UAAUc,CAAAA,CAAyBd,CAAAA,CAAqB,CAC5D,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,6BAAA,CAA+B,CACzD,KAAA,CAAOc,EAAO,KAAA,CACd,OAAA,CAASA,EAAO,OAAA,CAChB,WAAA,CAAaA,EAAO,WACtB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,cAAA,CAAec,CAAAA,CAAsCd,EAAqB,CAC9E,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,+BAAA,CAAiC,CAC3D,MAAOc,CAAAA,CAAO,KAAA,CACd,OAAQA,CAAAA,CAAO,MACjB,EAAGd,CAAW,CAChB,CAOA,MAAM,eAAec,CAAAA,CAAsCd,CAAAA,CAAqB,CAC9E,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,+BAAA,CAAiC,CAC3D,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MACjB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,aAAA,CAAcc,CAAAA,CAAqCd,EAAqB,CAC5E,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,kCAAmC,CAC7D,KAAA,CAAOc,CAAAA,CAAO,KAAA,CACd,IAAKA,CAAAA,CAAO,GACd,EAAGd,CAAW,CAChB,CACF,CAAA,CCvMO,IAAMqB,CAAAA,CAAN,KAAsB,CAC3B,WAAA,CAAoBZ,CAAAA,CAAwB,CAAxB,IAAA,CAAA,UAAA,CAAAA,EAAyB,CAO7C,MAAM,gBAAA,CAAiBK,CAAAA,CAAyCd,CAAAA,CAAqB,CACnF,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,iCAAA,CAAmC,CAC7D,KAAA,CAAOc,CAAAA,CAAO,MACd,SAAA,CAAWA,CAAAA,CAAO,UAClB,OAAA,CAASA,CAAAA,CAAO,OAClB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,QAAA,CAASc,CAAAA,CAAiCd,EAAqB,CACnE,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,kCAAmC,CAC7D,KAAA,CAAOc,EAAO,KAAA,CACd,WAAA,CAAaA,EAAO,WAAA,CACpB,OAAA,CAASA,EAAO,OAClB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,SAAA,CAAUc,EAAkCd,CAAAA,CAAqB,CACrE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,kCAAA,CAAoC,CAC9D,MAAOc,CAAAA,CAAO,KAAA,CACd,YAAaA,CAAAA,CAAO,WAAA,CACpB,QAASA,CAAAA,CAAO,OAAA,CAChB,KAAMA,CAAAA,CAAO,IAAA,CACb,OAAA,CAASA,CAAAA,CAAO,OAClB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,WAAWc,CAAAA,CAAmCd,CAAAA,CAAqB,CACvE,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,oCAAqC,CAC/D,KAAA,CAAOc,EAAO,KAAA,CACd,WAAA,CAAaA,CAAAA,CAAO,WAAA,CACpB,OAAQA,CAAAA,CAAO,MACjB,EAAGd,CAAW,CAChB,CAOA,MAAM,WAAA,CAAYc,EAAoCd,CAAAA,CAAqB,CACzE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,oCAAA,CAAsC,CAChE,MAAOc,CAAAA,CAAO,KAAA,CACd,WAAA,CAAaA,CAAAA,CAAO,YACpB,WAAA,CAAaA,CAAAA,CAAO,WACtB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,YAAA,CAAac,CAAAA,CAAqCd,EAAqB,CAC3E,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,sCAAuC,CACjE,KAAA,CAAOc,CAAAA,CAAO,KAAA,CACd,UAAWA,CAAAA,CAAO,SAAA,CAClB,aAAcA,CAAAA,CAAO,YACvB,EAAGd,CAAW,CAChB,CAOA,MAAM,cAAA,CAAec,EAAuCd,CAAAA,CAAqB,CAC/E,OAAO,IAAA,CAAK,UAAA,CAAW,OAAO,qCAAA,CAAuCA,CAAAA,CAAa,CAChF,KAAA,CAAOc,EAAO,KAAA,CACd,WAAA,CAAaA,EAAO,WAAA,CACpB,SAAA,CAAWA,EAAO,SACpB,CAAC,CACH,CAOA,MAAM,gBAAA,CAAiBA,CAAAA,CAAyCd,EAAqB,CACnF,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,0CAAA,CAA4C,CACtE,MAAOc,CAAAA,CAAO,KAAA,CACd,YAAaA,CAAAA,CAAO,WAAA,CACpB,QAASA,CAAAA,CAAO,OAAA,CAChB,aAAcA,CAAAA,CAAO,YACvB,EAAGd,CAAW,CAChB,CAOA,MAAM,mBAAA,CAAoBc,EAA4Cd,CAAAA,CAAqB,CACzF,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,6CAAA,CAA+C,CACzE,KAAA,CAAOc,CAAAA,CAAO,MACd,WAAA,CAAaA,CAAAA,CAAO,YACpB,QAAA,CAAUA,CAAAA,CAAO,QACnB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,mBAAmBc,CAAAA,CAA2Cd,CAAAA,CAAqB,CACvF,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,6CAA8C,CACxE,KAAA,CAAOc,EAAO,KAAA,CACd,WAAA,CAAaA,EAAO,WAAA,CACpB,IAAA,CAAMA,EAAO,IAAA,CACb,OAAA,CAASA,EAAO,OAClB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,gBAAA,CAAiBc,EAAyCd,CAAAA,CAAqB,CACnF,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,0CAAA,CAA4C,CACtE,KAAA,CAAOc,CAAAA,CAAO,MACd,WAAA,CAAaA,CAAAA,CAAO,YACpB,MAAA,CAAQA,CAAAA,CAAO,MACjB,CAAA,CAAGd,CAAW,CAChB,CAwBA,MAAM,cAAA,CAAec,CAAAA,CAAuCd,EAAqB,CAC/E,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,iCAAkC,CAC5D,KAAA,CAAOc,EAAO,KAAA,CACd,MAAA,CAAQA,EAAO,MACjB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,SAAA,CAAUc,EAAkCd,CAAAA,CAAqB,CACrE,OAAO,IAAA,CAAK,UAAA,CAAW,KAAK,yBAAA,CAA2B,CACrD,MAAOc,CAAAA,CAAO,KAAA,CACd,OAAQA,CAAAA,CAAO,MAAA,CACf,MAAOA,CAAAA,CAAO,KAChB,EAAGd,CAAW,CAChB,CAOA,MAAM,mBAAmBc,CAAAA,CAA2Cd,CAAAA,CAAqB,CACvF,OAAO,IAAA,CAAK,WAAW,IAAA,CAAK,oCAAA,CAAsC,CAChE,KAAA,CAAOc,CAAAA,CAAO,KAChB,CAAA,CAAGd,CAAW,CAChB,CAOA,MAAM,cAAcc,CAAAA,CAAsCd,CAAAA,CAAqB,CAC7E,OAAO,KAAK,UAAA,CAAW,IAAA,CAAK,mCAAoC,CAC9D,KAAA,CAAOc,EAAO,KAAA,CACd,GAAA,CAAKA,CAAAA,CAAO,GACd,EAAGd,CAAW,CAChB,CACF,CAAA,CC7MO,IAAMsB,EAAN,KAAoB,CAYzB,WAAA,CAAYlC,CAAAA,CAAmB,CAC7B,IAAA,CAAK,UAAA,CAAa,IAAID,CAAAA,CAAWC,CAAM,EAGvC,IAAA,CAAK,IAAA,CAAO,IAAIoB,CAAAA,CAAW,IAAA,CAAK,UAAU,CAAA,CAC1C,IAAA,CAAK,SAAW,IAAII,CAAAA,CAAe,KAAK,UAAU,CAAA,CAClD,IAAA,CAAK,YAAA,CAAe,IAAIC,CAAAA,CAAmB,IAAA,CAAK,UAAU,CAAA,CAC1D,IAAA,CAAK,SAAW,IAAIE,CAAAA,CAAe,KAAK,UAAU,CAAA,CAClD,KAAK,QAAA,CAAW,IAAIG,EAAe,IAAA,CAAK,UAAU,EAClD,IAAA,CAAK,OAAA,CAAU,IAAIC,CAAAA,CAAc,KAAK,UAAU,CAAA,CAChD,KAAK,QAAA,CAAW,IAAIC,EAAe,IAAA,CAAK,UAAU,EAClD,IAAA,CAAK,SAAA,CAAY,IAAIC,CAAAA,CAAgB,IAAA,CAAK,UAAU,EACtD,CAEF,EAMOE,CAAAA,CAAQD","file":"index.js","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 mediaType: params.mediaType,\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"]}
package/dist/index.mjs CHANGED
@@ -3,6 +3,6 @@ import I from'axios';/**
3
3
  * @version 1.0.0
4
4
  * @license MIT
5
5
  */
6
- var f="https://api.oficialapi.com.br",d=class{constructor(e){this.config={clientId:e.clientId,clientSecret:e.clientSecret,timeout:e.timeout||3e4,maxRetries:e.maxRetries||3,retryDelay:e.retryDelay||1e3,headers:e.headers||{}},this.axiosInstance=I.create({baseURL:f,timeout:this.config.timeout,headers:{"Content-Type":"application/json",...this.config.headers}}),this.setupInterceptors();}setupInterceptors(){this.axiosInstance.interceptors.request.use(e=>{if(e.url?.includes("/auth/token"))return e;let t=e;return t.accessToken&&e.headers&&(e.headers.Authorization=`Bearer ${t.accessToken}`),e},e=>Promise.reject(e)),this.axiosInstance.interceptors.response.use(e=>e,async e=>{let t=e.config;if(!t)return Promise.reject(this.formatError(e));if((!e.response||e.response.status>=500&&e.response.status<600)&&(!t._retryCount||t._retryCount<this.config.maxRetries)){t._retryCount=(t._retryCount||0)+1;let i=this.config.retryDelay*t._retryCount;return await new Promise(s=>setTimeout(s,i)),this.axiosInstance(t)}return Promise.reject(this.formatError(e))});}formatError(e){if(e.response){let t=e.response.data,n=t?.error?.message||t?.message||e.message,i=t?.error?.details||[],s=new Error(n);return s.status=e.response.status,s.data=e.response.data,s.details=i,s}return e.request?new Error("Erro de conex\xE3o com a API. Verifique sua conex\xE3o com a internet."):e}async get(e,t,n){let i={...n,accessToken:t};return (await this.axiosInstance.get(e,i)).data}async post(e,t,n,i){let s={...i,accessToken:n};return (await this.axiosInstance.post(e,t,s)).data}async put(e,t,n,i){let s={...i,accessToken:n};return (await this.axiosInstance.put(e,t,s)).data}async delete(e,t,n,i){let s={...i,accessToken:t,data:n};return (await this.axiosInstance.delete(e,s)).data}async upload(e,t,n,i="file",s){let r=new FormData;if(t instanceof Buffer){let y=new Blob([t]);r.append(i,y);}else r.append(i,t);s&&Object.entries(s).forEach(([y,a])=>{a!=null&&r.append(y,typeof a=="string"?a:JSON.stringify(a));});let P={headers:{"Content-Type":"multipart/form-data"},accessToken:n};return (await this.axiosInstance.post(e,r,P)).data}};var l=class{constructor(e){this.httpClient=e;}async getToken(e,t){let n=await this.httpClient.post("/api/v1/auth/token",{client_id:e,client_secret:t});if(!n.success||!n.data)throw new Error(n.error?.message||"Falha ao obter token");return n.data}};var c=class{constructor(e){this.httpClient=e;}async list(e){let t=await this.httpClient.get("/api/v1/channels",e);if(!t.success||!t.data)throw new Error(t.error?.message||"Falha ao listar canais");return Array.isArray(t.data)?t.data:[t.data]}};var p=class{constructor(e){this.httpClient=e;}async createWebhook(e,t){let n=await this.httpClient.post("/api/v1/integrations",{url:e.url,expiresInDays:e.expiresInDays},t);if(!n.success||!n.data)throw new Error(n.error?.message||"Falha ao criar webhook");return n.data}};var h=class{constructor(e){this.httpClient=e;}async sendText(e,t){return this.httpClient.post("/api/v1/whatsapp/send-message",{token:e.token,sender:e.sender,messageText:e.messageText},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/whatsapp/send-media",{token:e.token,sender:e.sender,fileUrl:e.fileUrl,type:e.type,caption:e.caption,...e.fileName&&{fileName:e.fileName}},t)}async sendTemplate(e,t){return this.httpClient.post("/api/v1/whatsapp/send-template",{token:e.token,sender:e.sender,templateName:e.templateName,languageCode:e.languageCode,components:e.components},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/whatsapp/send-buttons",{token:e.token,sender:e.sender,text:e.text,buttons:e.buttons,...e.media&&{media:e.media}},t)}async sendList(e,t){return this.httpClient.post("/api/v1/whatsapp/send-list",{token:e.token,sender:e.sender,headerText:e.headerText,bodyText:e.bodyText,buttonText:e.buttonText,sections:e.sections,...e.footerText&&{footerText:e.footerText}},t)}async replyMessage(e,t){return this.httpClient.post("/api/v1/whatsapp/reply-message",{token:e.token,sender:e.sender,messageText:e.messageText,...e.replyMessageId&&{replyMessageId:e.replyMessageId},...e.preview_url!==void 0&&{preview_url:e.preview_url}},t)}async reactMessage(e,t){return this.httpClient.post("/api/v1/whatsapp/react-message",{token:e.token,sender:e.sender,emoji:e.emoji,...e.message_id&&{message_id:e.message_id}},t)}async createTemplate(e,t){return this.httpClient.post("/api/v1/whatsapp/create-template",{token:e.token,name:e.name,language:e.language,category:e.category,components:e.components},t)}async listTemplates(e,t){return this.httpClient.get(`/api/v1/whatsapp/templates?token=${encodeURIComponent(e)}`,t)}async getTemplate(e,t,n){return this.httpClient.get(`/api/v1/whatsapp/templates/${t}?token=${encodeURIComponent(e)}`,n)}async uploadMedia(e,t){return this.httpClient.upload("/api/v1/whatsapp/upload-media",e.file,t,"file",{token:e.token,...e.filename&&{filename:e.filename}})}async sendOrderDetails(e,t){return this.httpClient.post("/api/v1/whatsapp/send-order-details",{token:e.token,sender:e.sender,...e.headerText&&{headerText:e.headerText},bodyText:e.bodyText,...e.footerText&&{footerText:e.footerText},reference_id:e.reference_id,type:e.type,currency:e.currency,total_amount:e.total_amount,order:e.order,...e.payment_settings&&{payment_settings:e.payment_settings}},t)}async sendOrderStatus(e,t){return this.httpClient.post("/api/v1/whatsapp/send-order-status",{token:e.token,sender:e.sender,bodyText:e.bodyText,...e.footerText&&{footerText:e.footerText},reference_id:e.reference_id,order_status:e.order_status,...e.status_description&&{status_description:e.status_description},...e.payment_status&&{payment_status:e.payment_status},...e.payment_timestamp!==void 0&&{payment_timestamp:e.payment_timestamp}},t)}async sendAudio(e,t){return this.httpClient.post("/api/v1/whatsapp/send-audio",{token:e.token,sender:e.sender,mediaId:e.mediaId,...e.voice!==void 0&&{voice:e.voice}},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/whatsapp/send-sticker",{token:e.token,sender:e.sender,mediaId:e.mediaId},t)}async sendVideo(e,t){return this.httpClient.post("/api/v1/whatsapp/send-video",{token:e.token,sender:e.sender,mediaId:e.mediaId,...e.caption&&{caption:e.caption}},t)}async sendDocument(e,t){return this.httpClient.post("/api/v1/whatsapp/send-document",{token:e.token,sender:e.sender,mediaId:e.mediaId,...e.filename&&{filename:e.filename},...e.caption&&{caption:e.caption}},t)}async sendContact(e,t){return this.httpClient.post("/api/v1/whatsapp/send-contact",{token:e.token,sender:e.sender,contacts:e.contacts},t)}async sendLocation(e,t){return this.httpClient.post("/api/v1/whatsapp/send-location",{token:e.token,sender:e.sender,latitude:e.latitude,longitude:e.longitude,name:e.name,address:e.address},t)}async sendLocationRequest(e,t){return this.httpClient.post("/api/v1/whatsapp/send-location-request",{token:e.token,sender:e.sender,bodyText:e.bodyText,...e.headerText&&{headerText:e.headerText},...e.footerText&&{footerText:e.footerText}},t)}async sendCtaUrl(e,t){return this.httpClient.post("/api/v1/whatsapp/send-cta-url",{token:e.token,sender:e.sender,bodyText:e.bodyText,buttonText:e.buttonText,url:e.url,...e.header&&{header:e.header},...e.footerText&&{footerText:e.footerText}},t)}async sendMediaCarousel(e,t){return this.httpClient.post("/api/v1/whatsapp/send-media-carousel",{token:e.token,sender:e.sender,bodyText:e.bodyText,cards:e.cards},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/whatsapp/download-media",{token:e.token,url:e.url},t)}};var g=class{constructor(e){this.httpClient=e;}async sendMessage(e,t){return this.httpClient.post("/api/v1/telegram/send-message",{token:e.token,chatId:e.chatId,text:e.text,parseMode:e.parseMode,replyToMessageId:e.replyToMessageId,disableNotification:e.disableNotification},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/telegram/send-media",{token:e.token,chatId:e.chatId,fileUrl:e.fileUrl,type:e.type,caption:e.caption,parseMode:e.parseMode,replyToMessageId:e.replyToMessageId},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/telegram/send-buttons",{token:e.token,chatId:e.chatId,text:e.text,buttons:e.buttons,parseMode:e.parseMode},t)}async sendLocation(e,t){return this.httpClient.post("/api/v1/telegram/send-location",{token:e.token,chatId:e.chatId,latitude:e.latitude,longitude:e.longitude,livePeriod:e.livePeriod},t)}async sendContact(e,t){return this.httpClient.post("/api/v1/telegram/send-contact",{token:e.token,chatId:e.chatId,phoneNumber:e.phoneNumber,firstName:e.firstName,lastName:e.lastName,vcard:e.vcard},t)}async sendPoll(e,t){return this.httpClient.post("/api/v1/telegram/send-poll",{token:e.token,chatId:e.chatId,question:e.question,options:e.options,isAnonymous:e.isAnonymous,type:e.type,correctOptionId:e.correctOptionId},t)}async sendVenue(e,t){return this.httpClient.post("/api/v1/telegram/send-venue",{token:e.token,chatId:e.chatId,latitude:e.latitude,longitude:e.longitude,title:e.title,address:e.address,foursquareId:e.foursquareId},t)}async sendDice(e,t){return this.httpClient.post("/api/v1/telegram/send-dice",{token:e.token,chatId:e.chatId,emoji:e.emoji},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/telegram/send-sticker",{token:e.token,chatId:e.chatId,stickerUrl:e.stickerUrl},t)}async sendVoice(e,t){return this.httpClient.post("/api/v1/telegram/send-voice",{token:e.token,chatId:e.chatId,voiceUrl:e.voiceUrl,caption:e.caption,duration:e.duration},t)}async sendVideoNote(e,t){return this.httpClient.post("/api/v1/telegram/send-video-note",{token:e.token,chatId:e.chatId,videoNoteUrl:e.videoNoteUrl,duration:e.duration,length:e.length},t)}async sendMediaGroup(e,t){return this.httpClient.post("/api/v1/telegram/send-media-group",{token:e.token,chatId:e.chatId,media:e.media},t)}async sendReplyKeyboard(e,t){return this.httpClient.post("/api/v1/telegram/send-reply-keyboard",{token:e.token,chatId:e.chatId,text:e.text,keyboard:e.keyboard,resizeKeyboard:e.resizeKeyboard,oneTimeKeyboard:e.oneTimeKeyboard},t)}async editMessage(e,t){return this.httpClient.post("/api/v1/telegram/edit-message",{token:e.token,chatId:e.chatId,messageId:e.messageId,text:e.text,parseMode:e.parseMode},t)}async deleteMessage(e,t){return this.httpClient.post("/api/v1/telegram/delete-message",{token:e.token,chatId:e.chatId,messageId:e.messageId},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/telegram/download-media",{token:e.token,fileId:e.fileId},t)}};var u=class{constructor(e){this.httpClient=e;}async sendText(e,t){return this.httpClient.post("/api/v1/webchat/send-text",{token:e.token,sender:e.sender,messageText:e.messageText},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/webchat/send-media",{token:e.token,sender:e.sender,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sendCarousel(e,t){return this.httpClient.post("/api/v1/webchat/send-carousel",{token:e.token,sender:e.sender,cards:e.cards},t)}async sendForm(e,t){return this.httpClient.post("/api/v1/webchat/send-form",{token:e.token,sender:e.sender,title:e.title,fields:e.fields,submitButtonText:e.submitButtonText},t)}async sendQuickReplies(e,t){return this.httpClient.post("/api/v1/webchat/send-quick-replies",{token:e.token,sender:e.sender,messageText:e.messageText,quickReplies:e.quickReplies},t)}async sendCard(e,t){return this.httpClient.post("/api/v1/webchat/send-card",{token:e.token,sender:e.sender,title:e.title,description:e.description,imageUrl:e.imageUrl,buttons:e.buttons},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/webchat/send-buttons",{token:e.token,sender:e.sender,messageText:e.messageText,buttons:e.buttons},t)}};var m=class{constructor(e){this.httpClient=e;}async listPosts(e,t){return this.httpClient.post("/api/v1/facebook/list-posts",{token:e.token,pageId:e.pageId,limit:e.limit},t)}async listComments(e,t){return this.httpClient.post("/api/v1/facebook/list-comments",{token:e.token,postId:e.postId,limit:e.limit},t)}async createPost(e,t){return this.httpClient.post("/api/v1/facebook/create-post",{token:e.token,pageId:e.pageId,message:e.message,link:e.link},t)}async replyComment(e,t){return this.httpClient.post("/api/v1/facebook/reply-comment",{token:e.token,commentId:e.commentId,message:e.message},t)}async deleteComment(e,t){return this.httpClient.post("/api/v1/facebook/delete-comment",{token:e.token,commentId:e.commentId},t)}async sendText(e,t){return this.httpClient.post("/api/v1/facebook/send-text",{token:e.token,recipientId:e.recipientId,message:e.message},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/facebook/send-media",{token:e.token,recipientId:e.recipientId,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/facebook/send-buttons",{token:e.token,recipientId:e.recipientId,message:e.message,buttons:e.buttons},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/facebook/send-sticker",{token:e.token,recipientId:e.recipientId,stickerId:e.stickerId},t)}async replyMessage(e,t){return this.httpClient.post("/api/v1/facebook/reply-message",{token:e.token,messageId:e.messageId,message:e.message},t)}async replyMedia(e,t){return this.httpClient.post("/api/v1/facebook/reply-media",{token:e.token,messageId:e.messageId,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sharePost(e,t){return this.httpClient.post("/api/v1/facebook/share-post",{token:e.token,mediaId:e.mediaId,recipientId:e.recipientId},t)}async getUserProfile(e,t){return this.httpClient.post("/api/v1/facebook/user-profile",{token:e.token,userId:e.userId},t)}async getPageProfile(e,t){return this.httpClient.post("/api/v1/facebook/page-profile",{token:e.token,pageId:e.pageId},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/facebook/download-media",{token:e.token,url:e.url},t)}};var k=class{constructor(e){this.httpClient=e;}async sendPrivateReply(e,t){return this.httpClient.post("/api/v1/instagram/private-reply",{token:e.token,commentId:e.commentId,message:e.message},t)}async sendText(e,t){return this.httpClient.post("/api/v1/instagram/messages/text",{token:e.token,recipientId:e.recipientId,message:e.message},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/instagram/messages/media",{token:e.token,recipientId:e.recipientId,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sendImages(e,t){return this.httpClient.post("/api/v1/instagram/messages/images",{token:e.token,recipientId:e.recipientId,images:e.images},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/instagram/messages/sticker",{token:e.token,recipientId:e.recipientId,stickerType:e.stickerType},t)}async reactMessage(e,t){return this.httpClient.post("/api/v1/instagram/messages/reaction",{token:e.token,messageId:e.messageId,reactionType:e.reactionType},t)}async removeReaction(e,t){return this.httpClient.delete("/api/v1/instagram/messages/reaction",t,{token:e.token,recipientId:e.recipientId,messageId:e.messageId})}async sendQuickReplies(e,t){return this.httpClient.post("/api/v1/instagram/messages/quick-replies",{token:e.token,recipientId:e.recipientId,message:e.message,quickReplies:e.quickReplies},t)}async sendGenericTemplate(e,t){return this.httpClient.post("/api/v1/instagram/messages/generic-template",{token:e.token,recipientId:e.recipientId,elements:e.elements},t)}async sendButtonTemplate(e,t){return this.httpClient.post("/api/v1/instagram/messages/button-template",{token:e.token,recipientId:e.recipientId,text:e.text,buttons:e.buttons},t)}async sendSenderAction(e,t){return this.httpClient.post("/api/v1/instagram/messages/sender-action",{token:e.token,recipientId:e.recipientId,action:e.action},t)}async getUserProfile(e,t){return this.httpClient.post("/api/v1/instagram/user-profile",{token:e.token,userId:e.userId},t)}async listPosts(e,t){return this.httpClient.post("/api/v1/instagram/posts",{token:e.token,userId:e.userId,limit:e.limit},t)}async getBusinessProfile(e,t){return this.httpClient.post("/api/v1/instagram/business-profile",{token:e.token},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/instagram/download-media",{token:e.token,url:e.url},t)}};var C=class{constructor(e){this.httpClient=new d(e),this.auth=new l(this.httpClient),this.channels=new c(this.httpClient),this.integrations=new p(this.httpClient),this.whatsapp=new h(this.httpClient),this.telegram=new g(this.httpClient),this.webchat=new u(this.httpClient),this.facebook=new m(this.httpClient),this.instagram=new k(this.httpClient);}},j=C;
6
+ var f="https://api.oficialapi.com.br",d=class{constructor(e){this.config={clientId:e.clientId,clientSecret:e.clientSecret,timeout:e.timeout||3e4,maxRetries:e.maxRetries||3,retryDelay:e.retryDelay||1e3,headers:e.headers||{}},this.axiosInstance=I.create({baseURL:f,timeout:this.config.timeout,headers:{"Content-Type":"application/json",...this.config.headers}}),this.setupInterceptors();}setupInterceptors(){this.axiosInstance.interceptors.request.use(e=>{if(e.url?.includes("/auth/token"))return e;let t=e;return t.accessToken&&e.headers&&(e.headers.Authorization=`Bearer ${t.accessToken}`),e},e=>Promise.reject(e)),this.axiosInstance.interceptors.response.use(e=>e,async e=>{let t=e.config;if(!t)return Promise.reject(this.formatError(e));if((!e.response||e.response.status>=500&&e.response.status<600)&&(!t._retryCount||t._retryCount<this.config.maxRetries)){t._retryCount=(t._retryCount||0)+1;let i=this.config.retryDelay*t._retryCount;return await new Promise(s=>setTimeout(s,i)),this.axiosInstance(t)}return Promise.reject(this.formatError(e))});}formatError(e){if(e.response){let t=e.response.data,n=t?.error?.message||t?.message||e.message,i=t?.error?.details||[],s=new Error(n);return s.status=e.response.status,s.data=e.response.data,s.details=i,s}return e.request?new Error("Erro de conex\xE3o com a API. Verifique sua conex\xE3o com a internet."):e}async get(e,t,n){let i={...n,accessToken:t};return (await this.axiosInstance.get(e,i)).data}async post(e,t,n,i){let s={...i,accessToken:n};return (await this.axiosInstance.post(e,t,s)).data}async put(e,t,n,i){let s={...i,accessToken:n};return (await this.axiosInstance.put(e,t,s)).data}async delete(e,t,n,i){let s={...i,accessToken:t,data:n};return (await this.axiosInstance.delete(e,s)).data}async upload(e,t,n,i="file",s){let r=new FormData;if(t instanceof Buffer){let y=new Blob([t]);r.append(i,y);}else r.append(i,t);s&&Object.entries(s).forEach(([y,a])=>{a!=null&&r.append(y,typeof a=="string"?a:JSON.stringify(a));});let P={headers:{"Content-Type":"multipart/form-data"},accessToken:n};return (await this.axiosInstance.post(e,r,P)).data}};var l=class{constructor(e){this.httpClient=e;}async getToken(e,t){let n=await this.httpClient.post("/api/v1/auth/token",{client_id:e,client_secret:t});if(!n.success||!n.data)throw new Error(n.error?.message||"Falha ao obter token");return n.data}};var c=class{constructor(e){this.httpClient=e;}async list(e){let t=await this.httpClient.get("/api/v1/channels",e);if(!t.success||!t.data)throw new Error(t.error?.message||"Falha ao listar canais");return Array.isArray(t.data)?t.data:[t.data]}};var p=class{constructor(e){this.httpClient=e;}async createWebhook(e,t){let n=await this.httpClient.post("/api/v1/integrations",{url:e.url,expiresInDays:e.expiresInDays},t);if(!n.success||!n.data)throw new Error(n.error?.message||"Falha ao criar webhook");return n.data}};var h=class{constructor(e){this.httpClient=e;}async sendText(e,t){return this.httpClient.post("/api/v1/whatsapp/send-message",{token:e.token,sender:e.sender,messageText:e.messageText},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/whatsapp/send-media",{token:e.token,sender:e.sender,fileUrl:e.fileUrl,type:e.type,caption:e.caption,...e.fileName&&{fileName:e.fileName}},t)}async sendTemplate(e,t){return this.httpClient.post("/api/v1/whatsapp/send-template",{token:e.token,sender:e.sender,templateName:e.templateName,languageCode:e.languageCode,components:e.components},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/whatsapp/send-buttons",{token:e.token,sender:e.sender,text:e.text,buttons:e.buttons,...e.media&&{media:e.media}},t)}async sendList(e,t){return this.httpClient.post("/api/v1/whatsapp/send-list",{token:e.token,sender:e.sender,headerText:e.headerText,bodyText:e.bodyText,buttonText:e.buttonText,sections:e.sections,...e.footerText&&{footerText:e.footerText}},t)}async replyMessage(e,t){return this.httpClient.post("/api/v1/whatsapp/reply-message",{token:e.token,sender:e.sender,messageText:e.messageText,...e.replyMessageId&&{replyMessageId:e.replyMessageId},...e.preview_url!==void 0&&{preview_url:e.preview_url}},t)}async reactMessage(e,t){return this.httpClient.post("/api/v1/whatsapp/react-message",{token:e.token,sender:e.sender,emoji:e.emoji,...e.message_id&&{message_id:e.message_id}},t)}async createTemplate(e,t){return this.httpClient.post("/api/v1/whatsapp/create-template",{token:e.token,name:e.name,language:e.language,category:e.category,components:e.components},t)}async listTemplates(e,t){return this.httpClient.get(`/api/v1/whatsapp/templates?token=${encodeURIComponent(e)}`,t)}async getTemplate(e,t,n){return this.httpClient.get(`/api/v1/whatsapp/templates/${t}?token=${encodeURIComponent(e)}`,n)}async uploadMedia(e,t){return this.httpClient.upload("/api/v1/whatsapp/upload-media",e.file,t,"file",{token:e.token,mediaType:e.mediaType,...e.filename&&{filename:e.filename}})}async sendOrderDetails(e,t){return this.httpClient.post("/api/v1/whatsapp/send-order-details",{token:e.token,sender:e.sender,...e.headerText&&{headerText:e.headerText},bodyText:e.bodyText,...e.footerText&&{footerText:e.footerText},reference_id:e.reference_id,type:e.type,currency:e.currency,total_amount:e.total_amount,order:e.order,...e.payment_settings&&{payment_settings:e.payment_settings}},t)}async sendOrderStatus(e,t){return this.httpClient.post("/api/v1/whatsapp/send-order-status",{token:e.token,sender:e.sender,bodyText:e.bodyText,...e.footerText&&{footerText:e.footerText},reference_id:e.reference_id,order_status:e.order_status,...e.status_description&&{status_description:e.status_description},...e.payment_status&&{payment_status:e.payment_status},...e.payment_timestamp!==void 0&&{payment_timestamp:e.payment_timestamp}},t)}async sendAudio(e,t){return this.httpClient.post("/api/v1/whatsapp/send-audio",{token:e.token,sender:e.sender,mediaId:e.mediaId,...e.voice!==void 0&&{voice:e.voice}},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/whatsapp/send-sticker",{token:e.token,sender:e.sender,mediaId:e.mediaId},t)}async sendVideo(e,t){return this.httpClient.post("/api/v1/whatsapp/send-video",{token:e.token,sender:e.sender,mediaId:e.mediaId,...e.caption&&{caption:e.caption}},t)}async sendDocument(e,t){return this.httpClient.post("/api/v1/whatsapp/send-document",{token:e.token,sender:e.sender,mediaId:e.mediaId,...e.filename&&{filename:e.filename},...e.caption&&{caption:e.caption}},t)}async sendContact(e,t){return this.httpClient.post("/api/v1/whatsapp/send-contact",{token:e.token,sender:e.sender,contacts:e.contacts},t)}async sendLocation(e,t){return this.httpClient.post("/api/v1/whatsapp/send-location",{token:e.token,sender:e.sender,latitude:e.latitude,longitude:e.longitude,name:e.name,address:e.address},t)}async sendLocationRequest(e,t){return this.httpClient.post("/api/v1/whatsapp/send-location-request",{token:e.token,sender:e.sender,bodyText:e.bodyText,...e.headerText&&{headerText:e.headerText},...e.footerText&&{footerText:e.footerText}},t)}async sendCtaUrl(e,t){return this.httpClient.post("/api/v1/whatsapp/send-cta-url",{token:e.token,sender:e.sender,bodyText:e.bodyText,buttonText:e.buttonText,url:e.url,...e.header&&{header:e.header},...e.footerText&&{footerText:e.footerText}},t)}async sendMediaCarousel(e,t){return this.httpClient.post("/api/v1/whatsapp/send-media-carousel",{token:e.token,sender:e.sender,bodyText:e.bodyText,cards:e.cards},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/whatsapp/download-media",{token:e.token,url:e.url},t)}};var g=class{constructor(e){this.httpClient=e;}async sendMessage(e,t){return this.httpClient.post("/api/v1/telegram/send-message",{token:e.token,chatId:e.chatId,text:e.text,parseMode:e.parseMode,replyToMessageId:e.replyToMessageId,disableNotification:e.disableNotification},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/telegram/send-media",{token:e.token,chatId:e.chatId,fileUrl:e.fileUrl,type:e.type,caption:e.caption,parseMode:e.parseMode,replyToMessageId:e.replyToMessageId},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/telegram/send-buttons",{token:e.token,chatId:e.chatId,text:e.text,buttons:e.buttons,parseMode:e.parseMode},t)}async sendLocation(e,t){return this.httpClient.post("/api/v1/telegram/send-location",{token:e.token,chatId:e.chatId,latitude:e.latitude,longitude:e.longitude,livePeriod:e.livePeriod},t)}async sendContact(e,t){return this.httpClient.post("/api/v1/telegram/send-contact",{token:e.token,chatId:e.chatId,phoneNumber:e.phoneNumber,firstName:e.firstName,lastName:e.lastName,vcard:e.vcard},t)}async sendPoll(e,t){return this.httpClient.post("/api/v1/telegram/send-poll",{token:e.token,chatId:e.chatId,question:e.question,options:e.options,isAnonymous:e.isAnonymous,type:e.type,correctOptionId:e.correctOptionId},t)}async sendVenue(e,t){return this.httpClient.post("/api/v1/telegram/send-venue",{token:e.token,chatId:e.chatId,latitude:e.latitude,longitude:e.longitude,title:e.title,address:e.address,foursquareId:e.foursquareId},t)}async sendDice(e,t){return this.httpClient.post("/api/v1/telegram/send-dice",{token:e.token,chatId:e.chatId,emoji:e.emoji},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/telegram/send-sticker",{token:e.token,chatId:e.chatId,stickerUrl:e.stickerUrl},t)}async sendVoice(e,t){return this.httpClient.post("/api/v1/telegram/send-voice",{token:e.token,chatId:e.chatId,voiceUrl:e.voiceUrl,caption:e.caption,duration:e.duration},t)}async sendVideoNote(e,t){return this.httpClient.post("/api/v1/telegram/send-video-note",{token:e.token,chatId:e.chatId,videoNoteUrl:e.videoNoteUrl,duration:e.duration,length:e.length},t)}async sendMediaGroup(e,t){return this.httpClient.post("/api/v1/telegram/send-media-group",{token:e.token,chatId:e.chatId,media:e.media},t)}async sendReplyKeyboard(e,t){return this.httpClient.post("/api/v1/telegram/send-reply-keyboard",{token:e.token,chatId:e.chatId,text:e.text,keyboard:e.keyboard,resizeKeyboard:e.resizeKeyboard,oneTimeKeyboard:e.oneTimeKeyboard},t)}async editMessage(e,t){return this.httpClient.post("/api/v1/telegram/edit-message",{token:e.token,chatId:e.chatId,messageId:e.messageId,text:e.text,parseMode:e.parseMode},t)}async deleteMessage(e,t){return this.httpClient.post("/api/v1/telegram/delete-message",{token:e.token,chatId:e.chatId,messageId:e.messageId},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/telegram/download-media",{token:e.token,fileId:e.fileId},t)}};var u=class{constructor(e){this.httpClient=e;}async sendText(e,t){return this.httpClient.post("/api/v1/webchat/send-text",{token:e.token,sender:e.sender,messageText:e.messageText},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/webchat/send-media",{token:e.token,sender:e.sender,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sendCarousel(e,t){return this.httpClient.post("/api/v1/webchat/send-carousel",{token:e.token,sender:e.sender,cards:e.cards},t)}async sendForm(e,t){return this.httpClient.post("/api/v1/webchat/send-form",{token:e.token,sender:e.sender,title:e.title,fields:e.fields,submitButtonText:e.submitButtonText},t)}async sendQuickReplies(e,t){return this.httpClient.post("/api/v1/webchat/send-quick-replies",{token:e.token,sender:e.sender,messageText:e.messageText,quickReplies:e.quickReplies},t)}async sendCard(e,t){return this.httpClient.post("/api/v1/webchat/send-card",{token:e.token,sender:e.sender,title:e.title,description:e.description,imageUrl:e.imageUrl,buttons:e.buttons},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/webchat/send-buttons",{token:e.token,sender:e.sender,messageText:e.messageText,buttons:e.buttons},t)}};var m=class{constructor(e){this.httpClient=e;}async listPosts(e,t){return this.httpClient.post("/api/v1/facebook/list-posts",{token:e.token,pageId:e.pageId,limit:e.limit},t)}async listComments(e,t){return this.httpClient.post("/api/v1/facebook/list-comments",{token:e.token,postId:e.postId,limit:e.limit},t)}async createPost(e,t){return this.httpClient.post("/api/v1/facebook/create-post",{token:e.token,pageId:e.pageId,message:e.message,link:e.link},t)}async replyComment(e,t){return this.httpClient.post("/api/v1/facebook/reply-comment",{token:e.token,commentId:e.commentId,message:e.message},t)}async deleteComment(e,t){return this.httpClient.post("/api/v1/facebook/delete-comment",{token:e.token,commentId:e.commentId},t)}async sendText(e,t){return this.httpClient.post("/api/v1/facebook/send-text",{token:e.token,recipientId:e.recipientId,message:e.message},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/facebook/send-media",{token:e.token,recipientId:e.recipientId,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sendButtons(e,t){return this.httpClient.post("/api/v1/facebook/send-buttons",{token:e.token,recipientId:e.recipientId,message:e.message,buttons:e.buttons},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/facebook/send-sticker",{token:e.token,recipientId:e.recipientId,stickerId:e.stickerId},t)}async replyMessage(e,t){return this.httpClient.post("/api/v1/facebook/reply-message",{token:e.token,messageId:e.messageId,message:e.message},t)}async replyMedia(e,t){return this.httpClient.post("/api/v1/facebook/reply-media",{token:e.token,messageId:e.messageId,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sharePost(e,t){return this.httpClient.post("/api/v1/facebook/share-post",{token:e.token,mediaId:e.mediaId,recipientId:e.recipientId},t)}async getUserProfile(e,t){return this.httpClient.post("/api/v1/facebook/user-profile",{token:e.token,userId:e.userId},t)}async getPageProfile(e,t){return this.httpClient.post("/api/v1/facebook/page-profile",{token:e.token,pageId:e.pageId},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/facebook/download-media",{token:e.token,url:e.url},t)}};var k=class{constructor(e){this.httpClient=e;}async sendPrivateReply(e,t){return this.httpClient.post("/api/v1/instagram/private-reply",{token:e.token,commentId:e.commentId,message:e.message},t)}async sendText(e,t){return this.httpClient.post("/api/v1/instagram/messages/text",{token:e.token,recipientId:e.recipientId,message:e.message},t)}async sendMedia(e,t){return this.httpClient.post("/api/v1/instagram/messages/media",{token:e.token,recipientId:e.recipientId,fileUrl:e.fileUrl,type:e.type,caption:e.caption},t)}async sendImages(e,t){return this.httpClient.post("/api/v1/instagram/messages/images",{token:e.token,recipientId:e.recipientId,images:e.images},t)}async sendSticker(e,t){return this.httpClient.post("/api/v1/instagram/messages/sticker",{token:e.token,recipientId:e.recipientId,stickerType:e.stickerType},t)}async reactMessage(e,t){return this.httpClient.post("/api/v1/instagram/messages/reaction",{token:e.token,messageId:e.messageId,reactionType:e.reactionType},t)}async removeReaction(e,t){return this.httpClient.delete("/api/v1/instagram/messages/reaction",t,{token:e.token,recipientId:e.recipientId,messageId:e.messageId})}async sendQuickReplies(e,t){return this.httpClient.post("/api/v1/instagram/messages/quick-replies",{token:e.token,recipientId:e.recipientId,message:e.message,quickReplies:e.quickReplies},t)}async sendGenericTemplate(e,t){return this.httpClient.post("/api/v1/instagram/messages/generic-template",{token:e.token,recipientId:e.recipientId,elements:e.elements},t)}async sendButtonTemplate(e,t){return this.httpClient.post("/api/v1/instagram/messages/button-template",{token:e.token,recipientId:e.recipientId,text:e.text,buttons:e.buttons},t)}async sendSenderAction(e,t){return this.httpClient.post("/api/v1/instagram/messages/sender-action",{token:e.token,recipientId:e.recipientId,action:e.action},t)}async getUserProfile(e,t){return this.httpClient.post("/api/v1/instagram/user-profile",{token:e.token,userId:e.userId},t)}async listPosts(e,t){return this.httpClient.post("/api/v1/instagram/posts",{token:e.token,userId:e.userId,limit:e.limit},t)}async getBusinessProfile(e,t){return this.httpClient.post("/api/v1/instagram/business-profile",{token:e.token},t)}async downloadMedia(e,t){return this.httpClient.post("/api/v1/instagram/download-media",{token:e.token,url:e.url},t)}};var C=class{constructor(e){this.httpClient=new d(e),this.auth=new l(this.httpClient),this.channels=new c(this.httpClient),this.integrations=new p(this.httpClient),this.whatsapp=new h(this.httpClient),this.telegram=new g(this.httpClient),this.webchat=new u(this.httpClient),this.facebook=new m(this.httpClient),this.instagram=new k(this.httpClient);}},j=C;
7
7
  export{C as OficialAPISDK,j as default};//# sourceMappingURL=index.mjs.map
8
8
  //# sourceMappingURL=index.mjs.map
@@ -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","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 mediaType: params.mediaType,\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oficialapi/sdk",
3
- "version": "9.0.1",
3
+ "version": "9.0.2",
4
4
  "description": "SDK oficial da OficialAPI - Integração completa com WhatsApp, Telegram, Facebook, Instagram e WebChat",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",