Team Ai
Apppublic

oex2003/evolution-api

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
sessions.ts150 linesDownload Raw Back to provider
1import { Auth, ConfigService, ProviderSession } from '@config/env.config';2import { Logger } from '@config/logger.config';3import axios from 'axios';4import { execFileSync } from 'child_process';5 6type ResponseSuccess = { status: number; data?: any };7type ResponseProvider = Promise<[ResponseSuccess?, Error?]>;8 9export class ProviderFiles {10  constructor(private readonly configService: ConfigService) {11    this.baseUrl = `http://${this.config.HOST}:${this.config.PORT}/session/${this.config.PREFIX}`;12    this.globalApiToken = this.configService.get<Auth>('AUTHENTICATION').API_KEY.KEY;13  }14 15  private readonly logger = new Logger('ProviderFiles');16 17  private baseUrl: string;18  private globalApiToken: string;19 20  private readonly config = Object.freeze(this.configService.get<ProviderSession>('PROVIDER'));21 22  get isEnabled() {23    return !!this.config?.ENABLED;24  }25 26  public async onModuleInit() {27    if (this.config.ENABLED) {28      const url = `http://${this.config.HOST}:${this.config.PORT}`;29      try {30        const response = await axios.options(url + '/ping');31        if (response?.data != 'pong') {32          throw new Error('Offline file provider.');33        }34 35        await axios.post(`${url}/session`, { group: this.config.PREFIX }, { headers: { apikey: this.globalApiToken } });36      } catch (error) {37        this.logger.error(['Failed to connect to the file server', error?.message, error?.stack]);38        const pid = process.pid;39        execFileSync('kill', ['-9', `${pid}`]);40      }41    }42  }43 44  public async onModuleDestroy() {45    //46  }47 48  public async create(instance: string): ResponseProvider {49    try {50      const response = await axios.post(51        `${this.baseUrl}`,52        {53          instance,54        },55        { headers: { apikey: this.globalApiToken } },56      );57      return [{ status: response.status, data: response?.data }];58    } catch (error) {59      return [60        {61          status: error?.response?.status,62          data: error?.response?.data,63        },64        error,65      ];66    }67  }68 69  public async write(instance: string, key: string, data: any): ResponseProvider {70    try {71      const response = await axios.post(`${this.baseUrl}/${instance}/${key}`, data, {72        headers: { apikey: this.globalApiToken },73      });74      return [{ status: response.status, data: response?.data }];75    } catch (error) {76      return [77        {78          status: error?.response?.status,79          data: error?.response?.data,80        },81        error,82      ];83    }84  }85 86  public async read(instance: string, key: string): ResponseProvider {87    try {88      const response = await axios.get(`${this.baseUrl}/${instance}/${key}`, {89        headers: { apikey: this.globalApiToken },90      });91      return [{ status: response.status, data: response?.data }];92    } catch (error) {93      return [94        {95          status: error?.response?.status,96          data: error?.response?.data,97        },98        error,99      ];100    }101  }102 103  public async delete(instance: string, key: string): ResponseProvider {104    try {105      const response = await axios.delete(`${this.baseUrl}/${instance}/${key}`, {106        headers: { apikey: this.globalApiToken },107      });108      return [{ status: response.status, data: response?.data }];109    } catch (error) {110      return [111        {112          status: error?.response?.status,113          data: error?.response?.data,114        },115        error,116      ];117    }118  }119 120  public async allInstances(): ResponseProvider {121    try {122      const response = await axios.get(`${this.baseUrl}/list-instances`, { headers: { apikey: this.globalApiToken } });123      return [{ status: response.status, data: response?.data as string[] }];124    } catch (error) {125      return [126        {127          status: error?.response?.status,128          data: error?.response?.data,129        },130        error,131      ];132    }133  }134 135  public async removeSession(instance: string): ResponseProvider {136    try {137      const response = await axios.delete(`${this.baseUrl}/${instance}`, { headers: { apikey: this.globalApiToken } });138      return [{ status: response.status, data: response?.data }];139    } catch (error) {140      return [141        {142          status: error?.response?.status,143          data: error?.response?.data,144        },145        error,146      ];147    }148  }149}150