mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-07-16 04:02:54 -06:00
150 lines
4.2 KiB
TypeScript
150 lines
4.2 KiB
TypeScript
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,
|
|
];
|
|
}
|
|
}
|
|
}
|