diff --git a/src/api/integrations/event/sqs/sqs.controller.ts b/src/api/integrations/event/sqs/sqs.controller.ts index 2b0398ef2..12b3ce2d7 100644 --- a/src/api/integrations/event/sqs/sqs.controller.ts +++ b/src/api/integrations/event/sqs/sqs.controller.ts @@ -28,8 +28,8 @@ export class SqsController extends EventController implements EventControllerInt accessKeyId: awsConfig.ACCESS_KEY_ID, secretAccessKey: awsConfig.SECRET_ACCESS_KEY, }, - region: awsConfig.REGION, + endpoint: awsConfig.ENDPOINT, }); this.logger.info('SQS initialized'); @@ -126,7 +126,7 @@ export class SqsController extends EventController implements EventControllerInt ? 'singlequeue' : `${event.replace('.', '_').toLowerCase()}`; const queueName = `${prefixName}_${eventFormatted}.fifo`; - const sqsUrl = `https://sqs.${sqsConfig.REGION}.amazonaws.com/${sqsConfig.ACCOUNT_ID}/${queueName}`; + const sqsUrl = this.getQueueUrl(sqsConfig, queueName); const message = { ...(extra ?? {}), @@ -302,4 +302,15 @@ export class SqsController extends EventController implements EventControllerInt this.logger.error(`Error listing queues for ${prefixName}: ${err.message}`); } } + + private getQueueUrl(sqsConfig: Sqs, queueName: string): string { + if (sqsConfig.ENDPOINT) { + const endpoint = sqsConfig.ENDPOINT.replace(/\/+$/, ''); + if (endpoint.endsWith(sqsConfig.ACCOUNT_ID)) { + return `${endpoint}/${queueName}`; + } + return `${endpoint}/${sqsConfig.ACCOUNT_ID}/${queueName}`; + } + return `https://sqs.${sqsConfig.REGION}.amazonaws.com/${sqsConfig.ACCOUNT_ID}/${queueName}`; + } } diff --git a/src/config/env.config.ts b/src/config/env.config.ts index 7c4e382e7..f19c3640d 100644 --- a/src/config/env.config.ts +++ b/src/config/env.config.ts @@ -121,6 +121,7 @@ export type Sqs = { SECRET_ACCESS_KEY: string; ACCOUNT_ID: string; REGION: string; + ENDPOINT?: string; MAX_PAYLOAD_SIZE: number; EVENTS: { APPLICATION_STARTUP: boolean; @@ -585,6 +586,7 @@ export class ConfigService { SECRET_ACCESS_KEY: process.env.SQS_SECRET_ACCESS_KEY || '', ACCOUNT_ID: process.env.SQS_ACCOUNT_ID || '', REGION: process.env.SQS_REGION || '', + ENDPOINT: process.env.SQS_ENDPOINT || undefined, MAX_PAYLOAD_SIZE: Number.parseInt(process.env.SQS_MAX_PAYLOAD_SIZE ?? '1048576'), EVENTS: { APPLICATION_STARTUP: process.env?.SQS_GLOBAL_APPLICATION_STARTUP === 'true',