core-services-sdk 1.3.1 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -2,9 +2,33 @@ import aws from 'aws-sdk'
|
|
|
2
2
|
import nodemailer from 'nodemailer'
|
|
3
3
|
import sgTransport from 'nodemailer-sendgrid-transport'
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Factory for creating Nodemailer transporters based on configuration.
|
|
7
|
+
*/
|
|
5
8
|
export class TransportFactory {
|
|
6
9
|
/**
|
|
7
|
-
*
|
|
10
|
+
* Create a Nodemailer transporter
|
|
11
|
+
*
|
|
12
|
+
* @param {object} config - Transport configuration object
|
|
13
|
+
* @param {'smtp' | 'gmail' | 'sendgrid' | 'ses'} config.type - Type of email transport
|
|
14
|
+
*
|
|
15
|
+
* For type 'smtp':
|
|
16
|
+
* @param {string} config.host - SMTP server host
|
|
17
|
+
* @param {number} config.port - SMTP server port
|
|
18
|
+
* @param {boolean} config.secure - Use TLS
|
|
19
|
+
* @param {{ user: string, pass: string }} config.auth - SMTP auth credentials
|
|
20
|
+
*
|
|
21
|
+
* For type 'gmail':
|
|
22
|
+
* @param {{ user: string, pass: string }} config.auth - Gmail credentials
|
|
23
|
+
*
|
|
24
|
+
* For type 'sendgrid':
|
|
25
|
+
* @param {string} config.apiKey - SendGrid API key
|
|
26
|
+
*
|
|
27
|
+
* For type 'ses':
|
|
28
|
+
* @param {string} config.accessKeyId - AWS access key
|
|
29
|
+
* @param {string} config.secretAccessKey - AWS secret
|
|
30
|
+
* @param {string} config.region - AWS region
|
|
31
|
+
*
|
|
8
32
|
* @returns {import('nodemailer').Transporter}
|
|
9
33
|
*/
|
|
10
34
|
static create(config) {
|
package/src/rabbit-mq/index.js
CHANGED
|
@@ -47,25 +47,30 @@ const parseMessage = (msgInfo) => {
|
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
49
|
* Subscribes to a queue to receive messages.
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* }
|
|
50
|
+
*
|
|
51
|
+
* @param {Object} options
|
|
52
|
+
* @param {import('amqplib').Channel} options.channel - RabbitMQ channel
|
|
53
|
+
* @param {string} options.queue - Queue name to subscribe to
|
|
54
|
+
* @param {(data: any) => Promise<void>} options.onReceive - Async handler for incoming message
|
|
55
|
+
* @param {Log} options.log - Logging utility
|
|
56
|
+
* @param {boolean} [options.nackOnError=false] - Whether to nack the message on error (default: false)
|
|
57
|
+
* @param {number} [options.prefetch=1] - Max unacked messages per consumer (default: 1)
|
|
58
|
+
*
|
|
57
59
|
* @returns {Promise<void>}
|
|
58
60
|
*/
|
|
59
61
|
export const subscribeToQueue = async ({
|
|
60
62
|
log,
|
|
61
63
|
queue,
|
|
62
64
|
channel,
|
|
65
|
+
prefetch = 1,
|
|
63
66
|
onReceive,
|
|
64
67
|
nackOnError = false,
|
|
65
68
|
}) => {
|
|
66
69
|
try {
|
|
67
70
|
await channel.assertQueue(queue, { durable: true })
|
|
68
71
|
|
|
72
|
+
!!prefetch && (await channel.prefetch(prefetch))
|
|
73
|
+
|
|
69
74
|
channel.consume(queue, async (msgInfo) => {
|
|
70
75
|
if (!msgInfo) return
|
|
71
76
|
|
|
@@ -4,29 +4,36 @@ import { describe, it, expect, vi } from 'vitest'
|
|
|
4
4
|
import sgTransport from 'nodemailer-sendgrid-transport'
|
|
5
5
|
|
|
6
6
|
vi.mock('nodemailer', () => {
|
|
7
|
+
const createTransport = vi.fn((options) => ({
|
|
8
|
+
type: 'mock-transport',
|
|
9
|
+
options,
|
|
10
|
+
}))
|
|
7
11
|
return {
|
|
12
|
+
__esModule: true,
|
|
13
|
+
default: { createTransport },
|
|
14
|
+
createTransport,
|
|
15
|
+
}
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
vi.mock('aws-sdk', () => {
|
|
19
|
+
return {
|
|
20
|
+
__esModule: true,
|
|
8
21
|
default: {
|
|
9
|
-
|
|
22
|
+
SES: vi.fn(() => 'mocked-ses'),
|
|
10
23
|
},
|
|
11
24
|
}
|
|
12
25
|
})
|
|
13
26
|
|
|
14
|
-
vi.mock('
|
|
15
|
-
const actual = await vi.importActual('aws-sdk')
|
|
27
|
+
vi.mock('nodemailer-sendgrid-transport', () => {
|
|
16
28
|
return {
|
|
17
|
-
|
|
18
|
-
|
|
29
|
+
__esModule: true,
|
|
30
|
+
default: vi.fn((opts) => ({
|
|
31
|
+
sendgrid: true,
|
|
32
|
+
options: opts,
|
|
33
|
+
})),
|
|
19
34
|
}
|
|
20
35
|
})
|
|
21
36
|
|
|
22
|
-
vi.mock('nodemailer-sendgrid-transport', () => ({
|
|
23
|
-
__esModule: true,
|
|
24
|
-
default: vi.fn().mockImplementation((opts) => {
|
|
25
|
-
const transport = { sendgrid: true, options: opts }
|
|
26
|
-
return transport
|
|
27
|
-
}),
|
|
28
|
-
}))
|
|
29
|
-
|
|
30
37
|
import { TransportFactory } from '../src/mailer/transport.factory.js'
|
|
31
38
|
describe('TransportFactory', () => {
|
|
32
39
|
it('should create smtp transport', () => {
|
|
@@ -69,8 +76,27 @@ describe('TransportFactory', () => {
|
|
|
69
76
|
}
|
|
70
77
|
|
|
71
78
|
const transport = TransportFactory.create(config)
|
|
72
|
-
|
|
73
|
-
expect(
|
|
79
|
+
|
|
80
|
+
expect(nodemailer.createTransport).toHaveBeenCalled()
|
|
81
|
+
|
|
82
|
+
const args = nodemailer.createTransport.mock.calls[0][0]
|
|
83
|
+
|
|
84
|
+
expect(args).toEqual({
|
|
85
|
+
sendgrid: true,
|
|
86
|
+
options: {
|
|
87
|
+
auth: { api_key: config.apiKey },
|
|
88
|
+
},
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
expect(transport).toEqual({
|
|
92
|
+
type: 'mock-transport',
|
|
93
|
+
options: {
|
|
94
|
+
sendgrid: true,
|
|
95
|
+
options: {
|
|
96
|
+
auth: { api_key: config.apiKey },
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
})
|
|
74
100
|
})
|
|
75
101
|
|
|
76
102
|
it('should create ses transport', () => {
|
|
@@ -81,12 +107,17 @@ describe('TransportFactory', () => {
|
|
|
81
107
|
region: 'us-west-2',
|
|
82
108
|
}
|
|
83
109
|
|
|
84
|
-
|
|
110
|
+
TransportFactory.create(config)
|
|
111
|
+
|
|
85
112
|
expect(nodemailer.createTransport).toHaveBeenCalled()
|
|
113
|
+
const args = nodemailer.createTransport.mock.calls[0][0]
|
|
86
114
|
|
|
87
|
-
expect(
|
|
88
|
-
|
|
89
|
-
|
|
115
|
+
expect(args).toEqual({
|
|
116
|
+
SES: {
|
|
117
|
+
ses: 'mocked-ses',
|
|
118
|
+
aws: expect.anything(),
|
|
119
|
+
},
|
|
120
|
+
})
|
|
90
121
|
})
|
|
91
122
|
|
|
92
123
|
it('should throw error for unsupported type', () => {
|