Spaces:
Runtime error
Runtime error
| import { Auth, ConfigService, ProviderSession } from '@config/env.config'; | |
| import { Logger } from '@config/logger.config'; | |
| import axios from 'axios'; | |
| import { execFileSync } from 'child_process'; | |
| type ResponseSuccess = { status: number; data?: any }; | |
| type ResponseProvider = Promise<[ResponseSuccess?, Error?]>; | |
| export class ProviderFiles { | |
| constructor(private readonly configService: ConfigService) { | |
| this.baseUrl = `http://${this.config.HOST}:${this.config.PORT}/session/${this.config.PREFIX}`; | |
| this.globalApiToken = this.configService.get<Auth>('AUTHENTICATION').API_KEY.KEY; | |
| } | |
| private readonly logger = new Logger('ProviderFiles'); | |
| private baseUrl: string; | |
| private globalApiToken: string; | |
| private readonly config = Object.freeze(this.configService.get<ProviderSession>('PROVIDER')); | |
| get isEnabled() { | |
| return !!this.config?.ENABLED; | |
| } | |
| public async onModuleInit() { | |
| if (this.config.ENABLED) { | |
| const url = `http://${this.config.HOST}:${this.config.PORT}`; | |
| try { | |
| const response = await axios.options(url + '/ping'); | |
| if (response?.data != 'pong') { | |
| throw new Error('Offline file provider.'); | |
| } | |
| await axios.post(`${url}/session`, { group: this.config.PREFIX }, { headers: { apikey: this.globalApiToken } }); | |
| } catch (error) { | |
| this.logger.error(['Failed to connect to the file server', error?.message, error?.stack]); | |
| const pid = process.pid; | |
| execFileSync('kill', ['-9', `${pid}`]); | |
| } | |
| } | |
| } | |
| public async onModuleDestroy() { | |
| // | |
| } | |
| public async create(instance: string): ResponseProvider { | |
| try { | |
| const response = await axios.post( | |
| `${this.baseUrl}`, | |
| { | |
| instance, | |
| }, | |
| { headers: { apikey: this.globalApiToken } }, | |
| ); | |
| return [{ status: response.status, data: response?.data }]; | |
| } catch (error) { | |
| return [ | |
| { | |
| status: error?.response?.status, | |
| data: error?.response?.data, | |
| }, | |
| error, | |
| ]; | |
| } | |
| } | |
| public async write(instance: string, key: string, data: any): ResponseProvider { | |
| try { | |
| const response = await axios.post(`${this.baseUrl}/${instance}/${key}`, data, { | |
| headers: { apikey: this.globalApiToken }, | |
| }); | |
| return [{ status: response.status, data: response?.data }]; | |
| } catch (error) { | |
| return [ | |
| { | |
| status: error?.response?.status, | |
| data: error?.response?.data, | |
| }, | |
| error, | |
| ]; | |
| } | |
| } | |
| public async read(instance: string, key: string): ResponseProvider { | |
| try { | |
| const response = await axios.get(`${this.baseUrl}/${instance}/${key}`, { | |
| headers: { apikey: this.globalApiToken }, | |
| }); | |
| return [{ status: response.status, data: response?.data }]; | |
| } catch (error) { | |
| return [ | |
| { | |
| status: error?.response?.status, | |
| data: error?.response?.data, | |
| }, | |
| error, | |
| ]; | |
| } | |
| } | |
| public async delete(instance: string, key: string): ResponseProvider { | |
| try { | |
| const response = await axios.delete(`${this.baseUrl}/${instance}/${key}`, { | |
| headers: { apikey: this.globalApiToken }, | |
| }); | |
| return [{ status: response.status, data: response?.data }]; | |
| } catch (error) { | |
| return [ | |
| { | |
| status: error?.response?.status, | |
| data: error?.response?.data, | |
| }, | |
| error, | |
| ]; | |
| } | |
| } | |
| public async allInstances(): ResponseProvider { | |
| try { | |
| const response = await axios.get(`${this.baseUrl}/list-instances`, { headers: { apikey: this.globalApiToken } }); | |
| return [{ status: response.status, data: response?.data as string[] }]; | |
| } catch (error) { | |
| return [ | |
| { | |
| status: error?.response?.status, | |
| data: error?.response?.data, | |
| }, | |
| error, | |
| ]; | |
| } | |
| } | |
| public async removeSession(instance: string): ResponseProvider { | |
| try { | |
| const response = await axios.delete(`${this.baseUrl}/${instance}`, { headers: { apikey: this.globalApiToken } }); | |
| return [{ status: response.status, data: response?.data }]; | |
| } catch (error) { | |
| return [ | |
| { | |
| status: error?.response?.status, | |
| data: error?.response?.data, | |
| }, | |
| error, | |
| ]; | |
| } | |
| } | |
| } | |