skyeye-svc-common-utils 1.0.84 → 1.0.86
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/dist/lib/sendGridClient.js +42 -19
- package/dist/lib/sendGridClient.js.map +1 -1
- package/dist/utils/appConst.d.ts +3 -0
- package/dist/utils/appConst.js +3 -0
- package/dist/utils/appConst.js.map +1 -1
- package/package.json +2 -2
- package/src/lib/sendGridClient.ts +41 -21
- package/src/utils/appConst.ts +3 -0
|
@@ -8,11 +8,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
15
|
const mail_1 = require("@sendgrid/mail");
|
|
13
16
|
const client_1 = require("@sendgrid/client");
|
|
14
17
|
const logger_1 = require("./../utils/logger/logger");
|
|
15
18
|
const lodash_1 = require("lodash");
|
|
19
|
+
const appConst_1 = require("../utils/appConst");
|
|
20
|
+
const moment_1 = __importDefault(require("moment"));
|
|
16
21
|
/**
|
|
17
22
|
* A SendGrid client class
|
|
18
23
|
*/
|
|
@@ -72,28 +77,44 @@ class SendGridClient {
|
|
|
72
77
|
// as the records are returned in DESC order of lastEventDate, keep update nextLastEventEndDate within the loop
|
|
73
78
|
let nextLastEventEndDate = lastEventEndDate;
|
|
74
79
|
let count = 0;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
let response, body, rateLimitReset = appConst_1.commonAppConst.sendgrid.defaultRateLimitReset;
|
|
81
|
+
while (true) {
|
|
82
|
+
try {
|
|
83
|
+
request.qs = this.getQueryParams(batchSize, lastEventStartDate, nextLastEventEndDate, category, status);
|
|
84
|
+
logger_1.logger.info(`Sending ${method} request to ${baseUrl + url} with body: ${JSON.stringify(request)}`);
|
|
85
|
+
[response, body] = yield this.officialClient.request(request);
|
|
86
|
+
// Check for status code
|
|
87
|
+
if (response.statusCode != 200) {
|
|
88
|
+
throw new Error(`SendGrid request with error, status code: ${response.statusCode}`);
|
|
89
|
+
}
|
|
90
|
+
;
|
|
91
|
+
// Insert into map if not alr exists
|
|
81
92
|
const messages = body.messages;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if (!map.has(msg.msg_id)) {
|
|
86
|
-
map.set(msg.msg_id, msg);
|
|
87
|
-
}
|
|
93
|
+
messages.forEach(msg => {
|
|
94
|
+
if (!map.has(msg.msg_id)) {
|
|
95
|
+
map.set(msg.msg_id, msg);
|
|
88
96
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
97
|
+
});
|
|
98
|
+
// Should not continue requesting if the returned data is not >= what we requested
|
|
99
|
+
if (count < batchSize)
|
|
100
|
+
break;
|
|
101
|
+
// The next batch lastEventEndDate should be the last item in the current batch because data returned is sorted in descending order of last_event_time
|
|
102
|
+
nextLastEventEndDate = new Date(messages[messages.length - 1].last_event_time);
|
|
103
|
+
// Update rateLimitReset
|
|
104
|
+
rateLimitReset = response.headers['x-ratelimit-reset'];
|
|
92
105
|
}
|
|
93
|
-
|
|
94
|
-
|
|
106
|
+
catch (error) {
|
|
107
|
+
const sendGridError = error;
|
|
108
|
+
if (sendGridError.code === 429) {
|
|
109
|
+
// if no more quota, wait for next refresh before making new request, to avoid Error 429
|
|
110
|
+
logger_1.logger.info(`Rate limit reached. Waiting for ${rateLimitReset} seconds...`);
|
|
111
|
+
yield new Promise((resolve) => setTimeout(resolve, rateLimitReset * 1000));
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
throw new Error(sendGridError.message);
|
|
115
|
+
}
|
|
95
116
|
}
|
|
96
|
-
}
|
|
117
|
+
}
|
|
97
118
|
return Array.from(map.values());
|
|
98
119
|
});
|
|
99
120
|
}
|
|
@@ -104,7 +125,9 @@ class SendGridClient {
|
|
|
104
125
|
getQueryParams(batchSize, lastEventStartDate, lastEventEndDate, category, status) {
|
|
105
126
|
let query = '';
|
|
106
127
|
if (!((0, lodash_1.isNil)(lastEventStartDate) && (0, lodash_1.isNil)(lastEventEndDate))) {
|
|
107
|
-
|
|
128
|
+
const formattedStartDate = (0, moment_1.default)(lastEventStartDate).format('YYYY-MM-DDTHH:mm:ss.SSSZ');
|
|
129
|
+
const formattedEndDate = (0, moment_1.default)(lastEventEndDate).format('YYYY-MM-DDTHH:mm:ss.SSSZ');
|
|
130
|
+
query = `(last_event_time BETWEEN TIMESTAMP "${formattedStartDate}" AND TIMESTAMP "${formattedEndDate}")`;
|
|
108
131
|
}
|
|
109
132
|
if (!(0, lodash_1.isNil)(category)) {
|
|
110
133
|
query += ` AND (Contains(categories,"${category}"))`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendGridClient.js","sourceRoot":"","sources":["../../src/lib/sendGridClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sendGridClient.js","sourceRoot":"","sources":["../../src/lib/sendGridClient.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/appConst.d.ts
CHANGED
package/dist/utils/appConst.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appConst.js","sourceRoot":"","sources":["../../src/utils/appConst.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"appConst.js","sourceRoot":"","sources":["../../src/utils/appConst.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skyeye-svc-common-utils",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.86",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"node-fetch": "^2.6.0",
|
|
59
59
|
"nyc": "^15.1.0",
|
|
60
60
|
"rotating-file-stream": "^1.4.6",
|
|
61
|
-
"skyeye-common-const": "1.0.
|
|
61
|
+
"skyeye-common-const": "1.0.53",
|
|
62
62
|
"swagger-jsdoc": "^3.5.0",
|
|
63
63
|
"swagger-ui-express": "^4.1.3",
|
|
64
64
|
"ts-node": "^9.0.0",
|
|
@@ -2,8 +2,9 @@ import { MailService, MailDataRequired, ClientResponse } from '@sendgrid/mail';
|
|
|
2
2
|
import { Client as OfficialClient } from '@sendgrid/client';
|
|
3
3
|
import helpers from '@sendgrid/helpers';
|
|
4
4
|
import { logger } from './../utils/logger/logger';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { isNil } from 'lodash';
|
|
6
|
+
import { commonAppConst, SendGridEmailFeedStatus } from '../utils/appConst';
|
|
7
|
+
import moment from 'moment';
|
|
7
8
|
|
|
8
9
|
export interface ISgMessage {
|
|
9
10
|
from_email: string;
|
|
@@ -120,29 +121,46 @@ export default class SendGridClient {
|
|
|
120
121
|
// as the records are returned in DESC order of lastEventDate, keep update nextLastEventEndDate within the loop
|
|
121
122
|
let nextLastEventEndDate = lastEventEndDate;
|
|
122
123
|
let count = 0;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
124
|
+
let response: helpers.classes.Response, body: any, rateLimitReset: number = commonAppConst.sendgrid.defaultRateLimitReset;
|
|
125
|
+
while(true) {
|
|
126
|
+
try {
|
|
127
|
+
request.qs = this.getQueryParams(batchSize, lastEventStartDate, nextLastEventEndDate, category, status);
|
|
128
|
+
logger.info(`Sending ${method} request to ${baseUrl + url} with body: ${JSON.stringify(request)}`);
|
|
129
|
+
[ response, body ] = await this.officialClient.request(request);
|
|
130
|
+
// Check for status code
|
|
131
|
+
if (response.statusCode != 200) {
|
|
132
|
+
throw new Error(`SendGrid request with error, status code: ${response.statusCode}`);
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// Insert into map if not alr exists
|
|
129
136
|
const messages: ISgMessage[] = body.messages;
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
if (!map.has(msg.msg_id)) {
|
|
134
|
-
map.set(msg.msg_id, msg)
|
|
135
|
-
}
|
|
137
|
+
messages.forEach(msg => {
|
|
138
|
+
if (!map.has(msg.msg_id)) {
|
|
139
|
+
map.set(msg.msg_id, msg)
|
|
136
140
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
// Should not continue requesting if the returned data is not >= what we requested
|
|
144
|
+
if (count < batchSize) break;
|
|
145
|
+
|
|
146
|
+
// The next batch lastEventEndDate should be the last item in the current batch because data returned is sorted in descending order of last_event_time
|
|
147
|
+
nextLastEventEndDate = new Date(messages[messages.length - 1].last_event_time);
|
|
148
|
+
|
|
149
|
+
// Update rateLimitReset
|
|
150
|
+
rateLimitReset = response.headers['x-ratelimit-reset'];
|
|
140
151
|
}
|
|
141
|
-
|
|
142
|
-
|
|
152
|
+
catch(error) {
|
|
153
|
+
const sendGridError = error as helpers.classes.ResponseError;
|
|
154
|
+
if (sendGridError.code === 429) {
|
|
155
|
+
// if no more quota, wait for next refresh before making new request, to avoid Error 429
|
|
156
|
+
logger.info(`Rate limit reached. Waiting for ${rateLimitReset} seconds...`);
|
|
157
|
+
await new Promise((resolve) => setTimeout(resolve, rateLimitReset * 1000));
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
throw new Error(sendGridError.message);
|
|
161
|
+
}
|
|
143
162
|
}
|
|
144
163
|
}
|
|
145
|
-
while (count >= batchSize);
|
|
146
164
|
|
|
147
165
|
return Array.from(map.values());
|
|
148
166
|
}
|
|
@@ -160,7 +178,9 @@ export default class SendGridClient {
|
|
|
160
178
|
) {
|
|
161
179
|
let query = '';
|
|
162
180
|
if (!(isNil(lastEventStartDate) && isNil(lastEventEndDate))) {
|
|
163
|
-
|
|
181
|
+
const formattedStartDate = moment(lastEventStartDate).format('YYYY-MM-DDTHH:mm:ss.SSSZ');
|
|
182
|
+
const formattedEndDate = moment(lastEventEndDate).format('YYYY-MM-DDTHH:mm:ss.SSSZ');
|
|
183
|
+
query = `(last_event_time BETWEEN TIMESTAMP "${formattedStartDate}" AND TIMESTAMP "${formattedEndDate}")`;
|
|
164
184
|
}
|
|
165
185
|
if (!isNil(category)) {
|
|
166
186
|
query += ` AND (Contains(categories,"${category}"))`;
|