mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-12-19 03:42:23 -06:00
Merge branch 'EvolutionAPI:main' into fix/business_api
This commit is contained in:
@@ -53,15 +53,21 @@ export class ProxyController {
|
||||
httpsAgent: makeProxyAgent(proxy),
|
||||
});
|
||||
|
||||
return response?.data !== serverIp?.data;
|
||||
} catch (error) {
|
||||
if (axios.isAxiosError(error) && error.response?.data) {
|
||||
logger.error('testProxy error: ' + error.response.data);
|
||||
} else if (axios.isAxiosError(error)) {
|
||||
logger.error('testProxy error: ');
|
||||
const result = response?.data !== serverIp?.data;
|
||||
if (result) {
|
||||
logger.info('testProxy: proxy connection successful');
|
||||
} else {
|
||||
logger.error('testProxy error: ');
|
||||
logger.warn("testProxy: proxy connection doesn't change the origin IP");
|
||||
}
|
||||
|
||||
return result;
|
||||
} catch (error) {
|
||||
if (axios.isAxiosError(error)) {
|
||||
logger.error('testProxy error: axios error: ' + error.message);
|
||||
} else {
|
||||
logger.error('testProxy error: unexpected error: ' + error);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2448,9 +2448,43 @@ export class BaileysStartupService extends ChannelStartupService {
|
||||
try {
|
||||
const type = mediaMessage.mediatype === 'ptv' ? 'video' : mediaMessage.mediatype;
|
||||
|
||||
let mediaInput: any;
|
||||
if (mediaMessage.mediatype === 'image') {
|
||||
let imageBuffer: Buffer;
|
||||
if (isURL(mediaMessage.media)) {
|
||||
let config: any = { responseType: 'arraybuffer' };
|
||||
|
||||
if (this.localProxy?.enabled) {
|
||||
config = {
|
||||
...config,
|
||||
httpsAgent: makeProxyAgent({
|
||||
host: this.localProxy.host,
|
||||
port: this.localProxy.port,
|
||||
protocol: this.localProxy.protocol,
|
||||
username: this.localProxy.username,
|
||||
password: this.localProxy.password,
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
const response = await axios.get(mediaMessage.media, config);
|
||||
imageBuffer = Buffer.from(response.data, 'binary');
|
||||
} else {
|
||||
imageBuffer = Buffer.from(mediaMessage.media, 'base64');
|
||||
}
|
||||
|
||||
mediaInput = await sharp(imageBuffer).jpeg().toBuffer();
|
||||
mediaMessage.fileName ??= 'image.jpg';
|
||||
mediaMessage.mimetype = 'image/jpeg';
|
||||
} else {
|
||||
mediaInput = isURL(mediaMessage.media)
|
||||
? { url: mediaMessage.media }
|
||||
: Buffer.from(mediaMessage.media, 'base64');
|
||||
}
|
||||
|
||||
const prepareMedia = await prepareWAMessageMedia(
|
||||
{
|
||||
[type]: isURL(mediaMessage.media) ? { url: mediaMessage.media } : Buffer.from(mediaMessage.media, 'base64'),
|
||||
[type]: mediaInput,
|
||||
} as any,
|
||||
{ upload: this.client.waUploadToServer },
|
||||
);
|
||||
@@ -2464,7 +2498,7 @@ export class BaileysStartupService extends ChannelStartupService {
|
||||
}
|
||||
|
||||
if (mediaMessage.mediatype === 'image' && !mediaMessage.fileName) {
|
||||
mediaMessage.fileName = 'image.png';
|
||||
mediaMessage.fileName = 'image.jpg';
|
||||
}
|
||||
|
||||
if (mediaMessage.mediatype === 'video' && !mediaMessage.fileName) {
|
||||
|
||||
@@ -49,6 +49,7 @@ export class N8nService extends BaseChatbotService<N8n, N8nSetting> {
|
||||
sessionId: session.sessionId,
|
||||
remoteJid: remoteJid,
|
||||
pushName: pushName,
|
||||
keyId: msg?.key?.id,
|
||||
fromMe: msg?.key?.fromMe,
|
||||
instanceName: instance.instanceName,
|
||||
serverUrl: this.configService.get<HttpServer>('SERVER').URL,
|
||||
|
||||
@@ -45,7 +45,7 @@ export class RabbitmqController extends EventController implements EventControll
|
||||
heartbeat: 30, // Add heartbeat of 30 seconds
|
||||
};
|
||||
|
||||
amqp.connect(connectionOptions, (error, connection) => {
|
||||
amqp.connect(connectionOptions, (error: Error, connection: amqp.Connection) => {
|
||||
if (error) {
|
||||
this.logger.error({
|
||||
local: 'RabbitmqController.connect',
|
||||
@@ -57,7 +57,7 @@ export class RabbitmqController extends EventController implements EventControll
|
||||
}
|
||||
|
||||
// Connection event handlers
|
||||
connection.on('error', (err) => {
|
||||
connection.on('error', (err: Error) => {
|
||||
this.logger.error({
|
||||
local: 'RabbitmqController.connectionError',
|
||||
message: 'RabbitMQ connection error',
|
||||
@@ -71,7 +71,7 @@ export class RabbitmqController extends EventController implements EventControll
|
||||
this.handleConnectionLoss();
|
||||
});
|
||||
|
||||
connection.createChannel((channelError, channel) => {
|
||||
connection.createChannel((channelError: Error, channel: amqp.Channel) => {
|
||||
if (channelError) {
|
||||
this.logger.error({
|
||||
local: 'RabbitmqController.createChannel',
|
||||
@@ -83,7 +83,7 @@ export class RabbitmqController extends EventController implements EventControll
|
||||
}
|
||||
|
||||
// Channel event handlers
|
||||
channel.on('error', (err) => {
|
||||
channel.on('error', (err: Error) => {
|
||||
this.logger.error({
|
||||
local: 'RabbitmqController.channelError',
|
||||
message: 'RabbitMQ channel error',
|
||||
@@ -136,8 +136,7 @@ export class RabbitmqController extends EventController implements EventControll
|
||||
return; // Already attempting to reconnect
|
||||
}
|
||||
|
||||
this.amqpChannel = null;
|
||||
this.amqpConnection = null;
|
||||
this.cleanup();
|
||||
this.scheduleReconnect();
|
||||
}
|
||||
|
||||
@@ -406,4 +405,25 @@ export class RabbitmqController extends EventController implements EventControll
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async cleanup(): Promise<void> {
|
||||
try {
|
||||
if (this.amqpChannel) {
|
||||
await this.amqpChannel.close();
|
||||
this.amqpChannel = null;
|
||||
}
|
||||
if (this.amqpConnection) {
|
||||
await this.amqpConnection.close();
|
||||
this.amqpConnection = null;
|
||||
}
|
||||
} catch (error) {
|
||||
this.logger.warn({
|
||||
local: 'RabbitmqController.cleanup',
|
||||
message: 'Error during cleanup',
|
||||
error: error.message || error,
|
||||
});
|
||||
this.amqpChannel = null;
|
||||
this.amqpConnection = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,8 +30,12 @@ export class WebsocketController extends EventController implements EventControl
|
||||
const url = new URL(req.url || '', 'http://localhost');
|
||||
const params = new URLSearchParams(url.search);
|
||||
|
||||
const { remoteAddress } = req.socket;
|
||||
const isLocalhost =
|
||||
remoteAddress === '127.0.0.1' || remoteAddress === '::1' || remoteAddress === '::ffff:127.0.0.1';
|
||||
|
||||
// Permite conexões internas do Socket.IO (EIO=4 é o Engine.IO v4)
|
||||
if (params.has('EIO')) {
|
||||
if (params.has('EIO') && isLocalhost) {
|
||||
return callback(null, true);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user