skyeye-svc-common-utils 1.0.85 → 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.
@@ -16,6 +16,7 @@ const mail_1 = require("@sendgrid/mail");
16
16
  const client_1 = require("@sendgrid/client");
17
17
  const logger_1 = require("./../utils/logger/logger");
18
18
  const lodash_1 = require("lodash");
19
+ const appConst_1 = require("../utils/appConst");
19
20
  const moment_1 = __importDefault(require("moment"));
20
21
  /**
21
22
  * A SendGrid client class
@@ -76,28 +77,44 @@ class SendGridClient {
76
77
  // as the records are returned in DESC order of lastEventDate, keep update nextLastEventEndDate within the loop
77
78
  let nextLastEventEndDate = lastEventEndDate;
78
79
  let count = 0;
79
- do {
80
- request.qs = this.getQueryParams(batchSize, lastEventStartDate, nextLastEventEndDate, category, status);
81
- logger_1.logger.info(`Sending ${method} request to ${baseUrl + url} with body: ${JSON.stringify(request)}`);
82
- const [response, body] = yield this.officialClient.request(request);
83
- const statusCode = response.statusCode;
84
- if (statusCode == 200) {
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
85
92
  const messages = body.messages;
86
- count = messages.length;
87
- if (count > 0) {
88
- for (const msg of messages) {
89
- if (!map.has(msg.msg_id)) {
90
- map.set(msg.msg_id, msg);
91
- }
93
+ messages.forEach(msg => {
94
+ if (!map.has(msg.msg_id)) {
95
+ map.set(msg.msg_id, msg);
92
96
  }
93
- const lastItem = messages[messages.length - 1];
94
- nextLastEventEndDate = new Date(lastItem.last_event_time);
95
- }
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'];
96
105
  }
97
- else {
98
- break;
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
+ }
99
116
  }
100
- } while (count >= batchSize);
117
+ }
101
118
  return Array.from(map.values());
102
119
  });
103
120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sendGridClient.js","sourceRoot":"","sources":["../../src/lib/sendGridClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sendGridClient.js","sourceRoot":"","sources":["../../src/lib/sendGridClient.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,9 @@ export declare const commonAppConst: {
43
43
  setIfNotExist: string;
44
44
  };
45
45
  };
46
+ sendgrid: {
47
+ defaultRateLimitReset: number;
48
+ };
46
49
  blobStorage: {
47
50
  defaultExpirationTimeInSeconds: number;
48
51
  };
@@ -46,6 +46,9 @@ exports.commonAppConst = {
46
46
  setIfNotExist: 'nx'
47
47
  }
48
48
  },
49
+ sendgrid: {
50
+ defaultRateLimitReset: 30 // in second
51
+ },
49
52
  blobStorage: {
50
53
  defaultExpirationTimeInSeconds: 3600
51
54
  },
@@ -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.85",
3
+ "version": "1.0.86",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -3,7 +3,7 @@ import { Client as OfficialClient } from '@sendgrid/client';
3
3
  import helpers from '@sendgrid/helpers';
4
4
  import { logger } from './../utils/logger/logger';
5
5
  import { isNil } from 'lodash';
6
- import { SendGridEmailFeedStatus } from '../utils/appConst';
6
+ import { commonAppConst, SendGridEmailFeedStatus } from '../utils/appConst';
7
7
  import moment from 'moment';
8
8
 
9
9
  export interface ISgMessage {
@@ -121,29 +121,46 @@ export default class SendGridClient {
121
121
  // as the records are returned in DESC order of lastEventDate, keep update nextLastEventEndDate within the loop
122
122
  let nextLastEventEndDate = lastEventEndDate;
123
123
  let count = 0;
124
- do {
125
- request.qs = this.getQueryParams(batchSize, lastEventStartDate, nextLastEventEndDate, category, status);
126
- logger.info(`Sending ${method} request to ${baseUrl + url} with body: ${JSON.stringify(request)}`);
127
- const [ response, body ]: [helpers.classes.Response, any] = await this.officialClient.request(request);
128
- const statusCode = response.statusCode;
129
- if (statusCode == 200) {
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
130
136
  const messages: ISgMessage[] = body.messages;
131
- count = messages.length;
132
- if (count > 0) {
133
- for (const msg of messages) {
134
- if (!map.has(msg.msg_id)) {
135
- map.set(msg.msg_id, msg)
136
- }
137
+ messages.forEach(msg => {
138
+ if (!map.has(msg.msg_id)) {
139
+ map.set(msg.msg_id, msg)
137
140
  }
138
- const lastItem = messages[messages.length - 1];
139
- nextLastEventEndDate = new Date(lastItem.last_event_time);
140
- }
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'];
141
151
  }
142
- else {
143
- break;
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
+ }
144
162
  }
145
163
  }
146
- while (count >= batchSize);
147
164
 
148
165
  return Array.from(map.values());
149
166
  }
@@ -43,6 +43,9 @@ export const commonAppConst = {
43
43
  setIfNotExist: 'nx'
44
44
  }
45
45
  },
46
+ sendgrid: {
47
+ defaultRateLimitReset: 30 // in second
48
+ },
46
49
  blobStorage: {
47
50
  defaultExpirationTimeInSeconds: 3600
48
51
  },