@postalsys/email-text-tools 1.4.0 → 1.4.1

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/.ncurc.js CHANGED
@@ -2,7 +2,6 @@ module.exports = {
2
2
  upgrade: true,
3
3
  reject: [
4
4
  // Block package upgrades that moved to ESM
5
- 'node-fetch',
6
5
  'nanoid'
7
6
  ]
8
7
  };
@@ -2,10 +2,10 @@
2
2
 
3
3
  const packageData = require('../package.json');
4
4
  const htmlToText = require('../lib/html-to-text');
5
- const nodeFetch = require('node-fetch');
6
5
  const GPT3Tokenizer = require('gpt3-tokenizer').default;
7
6
 
8
- const fetchCmd = global.fetch || nodeFetch;
7
+ const { fetch: fetchCmd, Agent } = require('undici');
8
+ const fetchAgent = new Agent({ connect: { timeout: 90 * 1000 } });
9
9
 
10
10
  const tokenizer = new GPT3Tokenizer({ type: 'gpt3' });
11
11
 
@@ -126,37 +126,50 @@ ${JSON.stringify(content)}`;
126
126
  ]
127
127
  };
128
128
 
129
- const reqStartTime = Date.now();
130
-
131
- let res = await fetchCmd(OPENAI_API_URL, {
132
- method: 'post',
133
- headers,
134
- body: JSON.stringify(payload)
135
- });
136
-
137
- const reqEndTime = Date.now();
129
+ let res;
130
+ let data;
131
+ let retries = 0;
132
+
133
+ let run = async () => {
134
+ res = await fetchCmd(OPENAI_API_URL, {
135
+ method: 'post',
136
+ headers,
137
+ body: JSON.stringify(payload),
138
+ dispatcher: fetchAgent
139
+ });
140
+
141
+ data = await res.json();
142
+
143
+ if (!res.ok) {
144
+ if (res.status === 429 && ++retries < 5) {
145
+ // try again
146
+ await new Promise(r => setTimeout(r, 1000));
147
+ return await run();
148
+ }
138
149
 
139
- let data = await res.json();
150
+ if (data && data.error) {
151
+ let error = new Error(data.error.message || data.error);
152
+ if (data.error.code) {
153
+ error.code = data.error.code;
154
+ }
140
155
 
141
- if (!res.ok) {
142
- if (data && data.error) {
143
- let error = new Error(data.error.message || data.error);
144
- if (data.error.code) {
145
- error.code = data.error.code;
156
+ error.statusCode = res.status;
157
+ throw error;
146
158
  }
147
159
 
160
+ let error = new Error('Failed to run API request');
148
161
  error.statusCode = res.status;
149
162
  throw error;
150
163
  }
151
164
 
152
- let error = new Error('Failed to run API request');
153
- error.statusCode = res.status;
154
- throw error;
155
- }
165
+ if (!data) {
166
+ throw new Error(`Failed to POST API request`);
167
+ }
168
+ };
156
169
 
157
- if (!data) {
158
- throw new Error(`Failed to POST API request`);
159
- }
170
+ const reqStartTime = Date.now();
171
+ await run();
172
+ const reqEndTime = Date.now();
160
173
 
161
174
  let values;
162
175
  const output =
@@ -176,6 +189,9 @@ ${JSON.stringify(content)}`;
176
189
  if (typeof values.shouldReply === 'string') {
177
190
  values.shouldReply = values.shouldReply === 'true';
178
191
  }
192
+ if (typeof values.shouldReply !== 'undefined' && typeof values.shouldReply !== 'boolean') {
193
+ delete values.shouldReply;
194
+ }
179
195
  } catch (err) {
180
196
  let error = new Error('Failed to parse output from OpenAI API');
181
197
  error.textContent = output;
@@ -2,10 +2,10 @@
2
2
 
3
3
  const packageData = require('../package.json');
4
4
  const htmlToText = require('../lib/html-to-text');
5
- const nodeFetch = require('node-fetch');
6
5
  const GPT3Tokenizer = require('gpt3-tokenizer').default;
7
6
 
8
- const fetchCmd = global.fetch || nodeFetch;
7
+ const { fetch: fetchCmd, Agent } = require('undici');
8
+ const fetchAgent = new Agent({ connect: { timeout: 90 * 1000 } });
9
9
 
10
10
  const tokenizer = new GPT3Tokenizer({ type: 'gpt3' });
11
11
 
@@ -157,37 +157,50 @@ ${JSON.stringify(content)}`;
157
157
  ]
158
158
  };
159
159
 
160
- const reqStartTime = Date.now();
161
-
162
- let res = await fetchCmd(OPENAI_API_URL, {
163
- method: 'post',
164
- headers,
165
- body: JSON.stringify(payload)
166
- });
167
-
168
- const reqEndTime = Date.now();
160
+ let res;
161
+ let data;
162
+ let retries = 0;
163
+
164
+ let run = async () => {
165
+ res = await fetchCmd(OPENAI_API_URL, {
166
+ method: 'post',
167
+ headers,
168
+ body: JSON.stringify(payload),
169
+ dispatcher: fetchAgent
170
+ });
171
+
172
+ data = await res.json();
173
+
174
+ if (!res.ok) {
175
+ if (res.status === 429 && ++retries < 5) {
176
+ // try again
177
+ await new Promise(r => setTimeout(r, 1000));
178
+ return await run();
179
+ }
169
180
 
170
- let data = await res.json();
181
+ if (data && data.error) {
182
+ let error = new Error(data.error.message || data.error);
183
+ if (data.error.code) {
184
+ error.code = data.error.code;
185
+ }
171
186
 
172
- if (!res.ok) {
173
- if (data && data.error) {
174
- let error = new Error(data.error.message || data.error);
175
- if (data.error.code) {
176
- error.code = data.error.code;
187
+ error.statusCode = res.status;
188
+ throw error;
177
189
  }
178
190
 
191
+ let error = new Error('Failed to run API request');
179
192
  error.statusCode = res.status;
180
193
  throw error;
181
194
  }
182
195
 
183
- let error = new Error('Failed to run API request');
184
- error.statusCode = res.status;
185
- throw error;
186
- }
196
+ if (!data) {
197
+ throw new Error(`Failed to POST API request`);
198
+ }
199
+ };
187
200
 
188
- if (!data) {
189
- throw new Error(`Failed to POST API request`);
190
- }
201
+ const reqStartTime = Date.now();
202
+ await run();
203
+ const reqEndTime = Date.now();
191
204
 
192
205
  let values;
193
206
  const output =
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@postalsys/email-text-tools",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "Email text tools",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -33,8 +33,8 @@
33
33
  "juice": "9.0.0",
34
34
  "linkify-it": "4.0.1",
35
35
  "moment-timezone": "0.5.43",
36
- "node-fetch": "2.6.7",
37
36
  "node-html-parser": "6.1.5",
38
- "tlds": "1.238.0"
37
+ "tlds": "1.238.0",
38
+ "undici": "5.22.0"
39
39
  }
40
40
  }