@oficialapi/sdk 9.0.0 → 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,8 +772,9 @@ 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
785
- // filename é opcional - não será enviado se não fornecido
775
+ file: fileBuffer,
776
+ mediaType: 'image'
777
+ // filename é opcional
786
778
  }, accessToken);
787
779
 
788
780
  const mediaId = uploadResult.data.handle; // "4::aW1hZ2UtMTIzNDU2Nzg5MGCE..."
@@ -791,14 +783,15 @@ const mediaId = uploadResult.data.handle; // "4::aW1hZ2UtMTIzNDU2Nzg5MGCE..."
791
783
  **Exemplo 2: Upload de imagem com filename**
792
784
 
793
785
  ```typescript
794
- // Em ambiente Node.js
786
+
795
787
  import fs from 'fs';
796
788
 
797
789
  const fileBuffer = fs.readFileSync('./imagem.jpg');
798
790
  const uploadResult = await sdk.whatsapp.uploadMedia({
799
791
  token: 'sk_live_...',
800
792
  file: fileBuffer,
801
- filename: 'minha_imagem.jpg' // Opcional: nome do arquivo
793
+ mediaType: 'image',
794
+ filename: 'minha_imagem.jpg'
802
795
  }, accessToken);
803
796
 
804
797
  const mediaId = uploadResult.data.handle;
@@ -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
 
@@ -824,20 +818,14 @@ await sdk.whatsapp.sendVideo({
824
818
  caption: 'Confira este vídeo!'
825
819
  }, accessToken);
826
820
  ```
827
-
828
- **Exemplo 4: Upload de documento PDF (Node.js)**
821
+
829
822
 
830
823
  ```typescript
831
824
  import fs from 'fs';
832
825
 
833
- const pdfBuffer = fs.readFileSync('./documento.pdf');
834
- const uploadResult = await sdk.whatsapp.uploadMedia({
835
- token: 'sk_live_...',
836
- file: pdfBuffer,
837
- filename: 'documento_importante.pdf'
838
- }, accessToken);
839
826
 
840
- // Use o mediaId para enviar o documento
827
+
828
+
841
829
  await sdk.whatsapp.sendDocument({
842
830
  token: 'sk_live_...',
843
831
  sender: '5511999999999',
@@ -846,27 +834,8 @@ await sdk.whatsapp.sendDocument({
846
834
  caption: 'Aqui está o documento solicitado'
847
835
  }, accessToken);
848
836
  ```
837
+
849
838
 
850
- **Exemplo 5: Upload de áudio (Node.js)**
851
-
852
- ```typescript
853
- import fs from 'fs';
854
-
855
- const audioBuffer = fs.readFileSync('./audio.ogg');
856
- const uploadResult = await sdk.whatsapp.uploadMedia({
857
- token: 'sk_live_...',
858
- file: audioBuffer,
859
- filename: 'mensagem_audio.ogg'
860
- }, accessToken);
861
-
862
- // Use o mediaId para enviar o áudio
863
- await sdk.whatsapp.sendAudio({
864
- token: 'sk_live_...',
865
- sender: '5511999999999',
866
- mediaId: uploadResult.data.handle,
867
- voice: true // true para mensagem de voz
868
- }, accessToken);
869
- ```
870
839
 
871
840
  **Exemplo 6: Upload de sticker (Node.js)**
872
841
 
@@ -877,6 +846,7 @@ const stickerBuffer = fs.readFileSync('./sticker.webp');
877
846
  const uploadResult = await sdk.whatsapp.uploadMedia({
878
847
  token: 'sk_live_...',
879
848
  file: stickerBuffer,
849
+ mediaType: 'image', // Stickers são tratados como imagem
880
850
  filename: 'sticker.webp'
881
851
  }, accessToken);
882
852
 
@@ -895,9 +865,17 @@ await sdk.whatsapp.sendSticker({
895
865
  const fileInput = document.querySelector('input[type="file"]');
896
866
  const file = fileInput.files[0];
897
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
+
898
875
  const uploadResult = await sdk.whatsapp.uploadMedia({
899
876
  token: 'sk_live_...',
900
877
  file: file,
878
+ mediaType: getMediaType(file),
901
879
  filename: file.name // Opcional
902
880
  }, accessToken);
903
881
 
@@ -913,6 +891,7 @@ const blob = new Blob(['conteúdo do arquivo'], { type: 'text/plain' });
913
891
  const uploadResult = await sdk.whatsapp.uploadMedia({
914
892
  token: 'sk_live_...',
915
893
  file: blob,
894
+ mediaType: 'document',
916
895
  filename: 'arquivo.txt'
917
896
  }, accessToken);
918
897
 
@@ -928,7 +907,8 @@ import fs from 'fs';
928
907
  const imageBuffer = fs.readFileSync('./logo.jpg');
929
908
  const uploadResult = await sdk.whatsapp.uploadMedia({
930
909
  token: 'sk_live_...',
931
- file: imageBuffer
910
+ file: imageBuffer,
911
+ mediaType: 'image'
932
912
  // filename não é necessário para templates
933
913
  }, accessToken);
934
914
 
@@ -955,15 +935,16 @@ await sdk.whatsapp.createTemplate({
955
935
  ```
956
936
 
957
937
  **Notas importantes:**
938
+ - O parâmetro `mediaType` é **obrigatório** e deve ser um dos valores: `'image'`, `'video'` ou `'document'`.
958
939
  - O parâmetro `filename` é **opcional**. Se não fornecido, não será enviado ao servidor (a API da OficialAPI rejeita campos vazios).
959
940
  - O `mediaId` retornado está no formato `"4::aW1hZ2UtMTIzNDU2Nzg5MGCE..."` e deve ser usado diretamente nos métodos `sendAudio`, `sendVideo`, `sendDocument` ou `sendSticker`.
960
941
  - Para templates, use o `handle` retornado no campo `header_handle` ou `example.header_handle`.
961
942
  - Formatos suportados:
962
- - **Imagens**: JPG, PNG, GIF, WEBP
963
- - **Vídeos**: MP4, 3GP
964
- - **Áudios**: OGG (codec OPUS para voz), MP3, M4A
965
- - **Documentos**: PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX
966
- - **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)
967
948
  ```
968
949
 
969
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":"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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 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.0",
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",