Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"license": "BUSL-1.1",
"dependencies": {
"@aws-sdk/client-s3": "^3.637.0",
"@aws-sdk/client-ses": "^3.1054.0",
"@aws-sdk/client-textract": "^3.873.0",
"@aws-sdk/s3-request-presigner": "^3.828.0",
"@elasticemail/elasticemail-client": "^4.0.23",
Expand Down
7 changes: 7 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,9 @@ export * from './services/scheduled-jobs/scheduler.service';
export * from './jobs/rabbitmq/api-email-publisher.service'
export * from './jobs/rabbitmq/api-email-queue-options'
export * from './jobs/rabbitmq/api-email-subscriber.service'
export * from './jobs/rabbitmq/amazon-ses-email-publisher.service'
export * from './jobs/rabbitmq/amazon-ses-email-queue-options'
export * from './jobs/rabbitmq/amazon-ses-email-subscriber.service'
export { SmtpEmailQueuePublisherRabbitmq, SmtpEmailQueuePublisherRabbitmq as EmailQueuePublisher } from './jobs/rabbitmq/smtp-email-publisher.service' // alias for backward compatibility
export * from './jobs/rabbitmq/smtp-email-queue-options'
export { SmtpEmailQueueSubscriberRabbitmq, SmtpEmailQueueSubscriberRabbitmq as EmailQueueSubscriber } from './jobs/rabbitmq/smtp-email-subscriber.service' // alias for backward compatibility
Expand All @@ -224,6 +227,9 @@ export * from './jobs/rabbitmq/msg91-whatsapp-subscriber.service'
export * from './jobs/redis/api-email-publisher-redis.service'
export * from './jobs/redis/api-email-queue-options-redis'
export * from './jobs/redis/api-email-subscriber-redis.service'
export * from './jobs/redis/amazon-ses-email-publisher-redis.service'
export * from './jobs/redis/amazon-ses-email-queue-options-redis'
export * from './jobs/redis/amazon-ses-email-subscriber-redis.service'
export * from './jobs/redis/chatter-queue-publisher-redis.service'
export * from './jobs/redis/chatter-queue-options-redis'
export * from './jobs/redis/chatter-queue-subscriber-redis.service'
Expand Down Expand Up @@ -284,6 +290,7 @@ export * from './services/textract.service'
export * from './services/hashing.service'
export * from './services/list-of-values.service'
export * from './services/mail/elastic-email.service'
export * from './services/mail/amazon-ses.service'
export * from './services/mail/smtp-email.service'
export * from './services/media-storage-provider-metadata.service'
export * from './services/media.service'
Expand Down
22 changes: 22 additions & 0 deletions src/jobs/database/amazon-ses-email-publisher-database.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { Injectable } from "@nestjs/common";
import { QueuesModuleOptions } from "src/interfaces";
import { MqMessageQueueService } from "src/services/mq-message-queue.service";
import { MqMessageService } from "src/services/mq-message.service";
import { DatabasePublisher } from "src/services/queues/database-publisher.service";
import mailQueueOptions from "./amazon-ses-email-queue-options-database";

@Injectable()
export class AmazonSesEmailQueuePublisherDatabase extends DatabasePublisher<any> {
constructor(
protected readonly mqMessageService: MqMessageService,
protected readonly mqMessageQueueService: MqMessageQueueService,
) {
super(mqMessageService, mqMessageQueueService);
}

options(): QueuesModuleOptions {
return {
...mailQueueOptions,
};
}
}
9 changes: 9 additions & 0 deletions src/jobs/database/amazon-ses-email-queue-options-database.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { BrokerType } from "src/interfaces";

const MAIL_QUEUE_NAME = "solid_amazon_ses_email_db_queue_v1";

export default {
name: MAIL_QUEUE_NAME,
type: BrokerType.Database,
queueName: MAIL_QUEUE_NAME,
};
31 changes: 31 additions & 0 deletions src/jobs/database/amazon-ses-email-subscriber-database.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { Injectable } from "@nestjs/common";
import { QueuesModuleOptions } from "src/interfaces";
import { QueueMessage } from "src/interfaces/mq";
import { AmazonSESService } from "src/services/mail/amazon-ses.service";
import { MqMessageQueueService } from "src/services/mq-message-queue.service";
import { MqMessageService } from "src/services/mq-message.service";
import { PollerService } from "src/services/poller.service";
import { DatabaseSubscriber } from "src/services/queues/database-subscriber.service";
import mailQueueOptions from "./amazon-ses-email-queue-options-database";

@Injectable()
export class AmazonSesEmailQueueSubscriberDatabase extends DatabaseSubscriber<any> {
constructor(
private readonly emailService: AmazonSESService,
readonly mqMessageService: MqMessageService,
readonly mqMessageQueueService: MqMessageQueueService,
readonly poller: PollerService,
) {
super(mqMessageService, mqMessageQueueService, poller);
}

options(): QueuesModuleOptions {
return {
...mailQueueOptions,
};
}

subscribe(message: QueueMessage<any>) {
return this.emailService.sendEmailSynchronously(message);
}
}
22 changes: 22 additions & 0 deletions src/jobs/rabbitmq/amazon-ses-email-publisher.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { Injectable } from "@nestjs/common";
import { MqMessageQueueService } from "src/services/mq-message-queue.service";
import { MqMessageService } from "src/services/mq-message.service";
import { RabbitMqPublisher } from "src/services/queues/rabbitmq-publisher.service";
import { QueuesModuleOptions } from "src/interfaces";
import mailQueueOptions from "./amazon-ses-email-queue-options";

@Injectable()
export class AmazonSesEmailQueuePublisherRabbitmq extends RabbitMqPublisher<any> {
constructor(
protected readonly mqMessageService: MqMessageService,
protected readonly mqMessageQueueService: MqMessageQueueService,
) {
super(mqMessageService, mqMessageQueueService);
}

options(): QueuesModuleOptions {
return {
...mailQueueOptions,
};
}
}
9 changes: 9 additions & 0 deletions src/jobs/rabbitmq/amazon-ses-email-queue-options.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { BrokerType } from "../../interfaces";

const MAIL_QUEUE_NAME = "solid_amazon_ses_email_queue_v1";

export default {
name: MAIL_QUEUE_NAME,
type: BrokerType.RabbitMQ,
queueName: MAIL_QUEUE_NAME,
};
29 changes: 29 additions & 0 deletions src/jobs/rabbitmq/amazon-ses-email-subscriber.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { Injectable } from "@nestjs/common";
import { QueueMessage } from "src/interfaces/mq";
import { MqMessageQueueService } from "src/services/mq-message-queue.service";
import { MqMessageService } from "src/services/mq-message.service";
import { RabbitMqSubscriber } from "src/services/queues/rabbitmq-subscriber.service";
import { QueuesModuleOptions } from "src/interfaces";
import { AmazonSESService } from "src/services/mail/amazon-ses.service";
import mailQueueOptions from "./amazon-ses-email-queue-options";

@Injectable()
export class AmazonSesEmailQueueSubscriberRabbitmq extends RabbitMqSubscriber<any> {
constructor(
private readonly emailService: AmazonSESService,
readonly mqMessageService: MqMessageService,
readonly mqMessageQueueService: MqMessageQueueService,
) {
super(mqMessageService, mqMessageQueueService);
}

options(): QueuesModuleOptions {
return {
...mailQueueOptions,
};
}

subscribe(message: QueueMessage<any>) {
return this.emailService.sendEmailSynchronously(message);
}
}
22 changes: 22 additions & 0 deletions src/jobs/redis/amazon-ses-email-publisher-redis.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { Injectable } from "@nestjs/common";
import { QueuesModuleOptions } from "src/interfaces";
import { MqMessageQueueService } from "src/services/mq-message-queue.service";
import { MqMessageService } from "src/services/mq-message.service";
import { RedisPublisher } from "src/services/queues/redis-publisher.service";
import mailQueueOptions from "./amazon-ses-email-queue-options-redis";

@Injectable()
export class AmazonSesEmailQueuePublisherRedis extends RedisPublisher<any> {
constructor(
protected readonly mqMessageService: MqMessageService,
protected readonly mqMessageQueueService: MqMessageQueueService,
) {
super(mqMessageService, mqMessageQueueService);
}

options(): QueuesModuleOptions {
return {
...mailQueueOptions,
};
}
}
9 changes: 9 additions & 0 deletions src/jobs/redis/amazon-ses-email-queue-options-redis.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { BrokerType } from "../../interfaces";

const QUEUE_NAME = "solid_amazon_ses_email_queue_redis_v1";

export default {
name: QUEUE_NAME,
type: BrokerType.Redis,
queueName: QUEUE_NAME,
};
29 changes: 29 additions & 0 deletions src/jobs/redis/amazon-ses-email-subscriber-redis.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { Injectable } from "@nestjs/common";
import { QueuesModuleOptions } from "src/interfaces";
import { QueueMessage } from "src/interfaces/mq";
import { AmazonSESService } from "src/services/mail/amazon-ses.service";
import { MqMessageQueueService } from "src/services/mq-message-queue.service";
import { MqMessageService } from "src/services/mq-message.service";
import { RedisSubscriber } from "src/services/queues/redis-subscriber.service";
import mailQueueOptions from "./amazon-ses-email-queue-options-redis";

@Injectable()
export class AmazonSesEmailQueueSubscriberRedis extends RedisSubscriber<any> {
constructor(
private readonly emailService: AmazonSESService,
readonly mqMessageService: MqMessageService,
readonly mqMessageQueueService: MqMessageQueueService,
) {
super(mqMessageService, mqMessageQueueService);
}

options(): QueuesModuleOptions {
return {
...mailQueueOptions,
};
}

subscribe(message: QueueMessage<any>) {
return this.emailService.sendEmailSynchronously(message);
}
}
Loading