nestjs-sqs
nestjs-sqs copied to clipboard
feat: add globalOptions support in SqsService with sqs endpoint property
Context
Related issue: Issue #78.
Problem
Currently, we're unable to set the SQS endpoint when the module is registered. As mentioned in the issue, when using an emulator, we receive warnings because the queueUrl is composed from AWS credentials in the environment, which differs from local URLs such as those used by LocalStack.
QueueUrl=https://localhost.localstack.cloud:4566/000000000000/iam_sync-user-queue differs from SQSClient resolved endpoint=https://sqs.us-east-1.amazonaws.com/, using QueueUrl host as endpoint.
Set [endpoint=string] or [useQueueUrlAsEndpoint=false] on the SQSClient
The error message suggests using the useQueueUrlAsEndpoint property, but I couldn't find that in the SQSClient options. However, setting the endpoint directly resolves the issue.
To provide more background, when running SQS locally using LocalStack, I set the SQS endpoint to http://localhost:4566.
Solution
I added an optional globalOptions object property with an endpoint field to allow setting the endpoint directly on the SQSClient. The condition ensures that if the consumer/producer options have an sqs property, it won't be overwritten by the global one. I decided that consumer/producer options should take priority.
This solution was tested locally and works as expected.
Other Thoughts
We can discuss adding more properties to the globalOptions. I'm open to suggestions, but for now, I wasn't sure if anything else would be necessary.
Thanks for addressing the issue with this PR. All the changes seem LGTM. However I think it would be helpful to write some docs for this change so that new users of this library will know how to use this option. Could you please add some docs for this?
Do we know what state this is in? It would be great to stop seeing the warning message in the terminal.
I can help with this pull request or generate the documentación myself, It thats all thats missing to add It.