npm package: @lumston/sqs-sns-broker
Description: simple implementation of Amazon Simple Queue Service (SQS) and Amazon Simple Notification Service (SNS)
Author: jsalazar
Latest version: 0.14.3

<p align="center">
  <a href="" rel="noopener">
 <img width=200px height=200px src="assets/lumston_logo.jpeg" alt="Project logo"></a>
</p>

<h3 align="center">Lumston aws sns-sqs broker implementation</h3>


## Table of Contents

- [About](#about)
- [Getting Started](#getting_started)
- [Usage](#usage)
- [Sending Messages](#sending_messages)
- [Contributing](../CONTRIBUTING.md)

## About <a name = "about"></a>

Welcome to the specialized AWS SNS/SQS integration library for NestJS, designed to enhance message handling efficiency in microservices environments. This library, crafted with the NestJS ecosystem in mind, provides an additional layer of control for implementing Amazon Web Services (AWS) Simple Notification Service (SNS) and Simple Queue Service (SQS).

## Connection Managment


## Getting Started <a name = "getting_started"></a>

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.


### Installing

```sh
npm i @lumston/sqs-sns-broker
```
or 
```sh
yarn add @lumston/sqs-sns-broker
```


## Usage <a name = "usage"></a>


```typescript
//app.module.ts
import {BrokerModule} from '@lumston/sqs-sns-broker';

@Module({
  imports:[
    BrokerModule.forRoot({
      isGlobal: true,
      aws: {
        region: 'us-east-1',
        credentials: fromEnv(),
      },
    })
  ]
})
```

or 

```typescript
//app.module.ts
import {BrokerModule, IBrokerConnectionOptions} from '@lumston/sqs-sns-broker';

@Module({
  imports:[
    BrokerModule.forRootAsync({
      inject: [ConfigService],
      useFactory: async (configService: ConfigService) => {
        const local = configService.get<ILocal>(NAMESPACES.LOCAL);
        const connection: IBrokerConnectionOptions = {
          aws: {
            region: local.aws_default_region,
            credentials: fromEnv(),
          },
        };
        return connection;
      },
    }),
  ]
})
```



## Sending Messages to topic <a name = "sending_messages"></a>
The module exports the service `SNSService`, which provides us with the function called `publish` This function allows us to send messages to the selected topic.

```typescript
export enum PUBLISH_ACTIONS {
  UPDATE,
  DELETE,
  CREATE,
  GET,
}
interface IPublish<T> {
  //** Metadata about source of message **//
  Source: string;
  //** Action to perfom by message reciver **//
  Action: keyof typeof PUBLISH_ACTIONS | string;
  //** Message to send **// 
  Message: T;
  //** The topic arn**/
  TopicArn: string;
  //** Metadatada about object information **//
  UpdatedAttributes: string;
}

```

```typescript
import { SNSService } from '@lumston/sqs-sns-broker';

class MyPublisherService{
  constructor(private snsService: SNSService){}

  sendMessage(){

    await this.snsService.publish({
              Source: "USERS",
              Action: 'CREATE',
              Message: {
                name: 'Jhon Doe',
                age: 18,
              },
              TopicArn: 'arn:aws:sns:us-east-1:123456789012:MyTopic',
              UpdatedAttributes: ['name','age'],
            });
  }
}
```
## ⛏️ Construido usando <a name = "built_using"></a>

- [NESTJS](https://docs.nestjs.com/) - Framework

## ✍️ Autores <a name = "authors"></a>

- [jsalazar@lumston.com](https://github.com/javiersalazardev) - Idea y trabajo inicial
- [otorres@lumston.com](https://github.com/otorresls) - Idea e implementación 
- [olizarraga@lumston.com](https://github.com/olizarrarga-lumston) - Idea e implementación