@4site/engrid-scripts 0.22.18 → 0.22.19

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.
@@ -22,6 +22,7 @@ export interface Options {
22
22
  NeverBounceDateField?: string | null;
23
23
  NeverBounceDateFormat?: string;
24
24
  NeverBounceStatusField?: string | null;
25
+ NeverBounceTimeout?: number | null;
25
26
  FreshAddress?: false | {
26
27
  dateField?: string;
27
28
  dateFieldFormat?: string;
@@ -21,6 +21,7 @@ export const OptionsDefaults = {
21
21
  NeverBounceDateField: null,
22
22
  NeverBounceStatusField: null,
23
23
  NeverBounceDateFormat: "MM/DD/YYYY",
24
+ NeverBounceTimeout: 10000,
24
25
  FreshAddress: false,
25
26
  ProgressBar: false,
26
27
  AutoYear: false,
@@ -13,6 +13,8 @@ export declare class NeverBounce {
13
13
  private shouldRun;
14
14
  private nbLoaded;
15
15
  private bypassEmails;
16
+ private neverBounceTimeout;
17
+ private neverBounceTimeoutFunc;
16
18
  constructor(apiKey: string, dateField: string | null, statusField: string | null, dateFormat: string | undefined);
17
19
  private init;
18
20
  private clearStatus;
@@ -22,4 +24,9 @@ export declare class NeverBounce {
22
24
  private wrap;
23
25
  private isBypassEmail;
24
26
  private validate;
27
+ /**
28
+ * Clears the backup timeout function if it exists.
29
+ * @private
30
+ */
31
+ private clearTimeout;
25
32
  }
@@ -17,6 +17,8 @@ export class NeverBounce {
17
17
  this.bypassEmails = [
18
18
  "noaddress.ea",
19
19
  ];
20
+ this.neverBounceTimeout = ENGrid.getOption("NeverBounceTimeout") || 10000;
21
+ this.neverBounceTimeoutFunc = null;
20
22
  const searchParams = new URLSearchParams(window.location.search);
21
23
  if (searchParams.has("bypassemailvalidation")) {
22
24
  this.logger.log("Bypass Email Validation Enabled - not running NeverBounce");
@@ -32,6 +34,8 @@ export class NeverBounce {
32
34
  softRejectMessage: "Invalid email",
33
35
  acceptedMessage: "Email validated!",
34
36
  feedback: false,
37
+ // Set NB timeout 1 second than our timeout. Ensures NB response will always be before our timeout if there is not a server error.
38
+ timeout: Math.floor((this.neverBounceTimeout - 1000) / 1000),
35
39
  };
36
40
  ENGrid.loadJS("https://cdn.neverbounce.com/widget/dist/NeverBounce.js");
37
41
  if (this.emailField) {
@@ -94,9 +98,27 @@ export class NeverBounce {
94
98
  const field = document.querySelector('[data-nb-id="' + event.detail.id + '"]');
95
99
  field.addEventListener("nb:loading", function (e) {
96
100
  ENGrid.disableSubmit("Validating Your Email");
101
+ NBClass.setEmailStatus("loading");
102
+ NBClass.clearTimeout();
103
+ NBClass.neverBounceTimeoutFunc = setTimeout(() => {
104
+ NBClass.setEmailStatus("unknown");
105
+ if (NBClass.nbDate) {
106
+ NBClass.nbDate.value = ENGrid.formatDate(new Date(), NBClass.dateFormat);
107
+ }
108
+ if (NBClass.nbStatus) {
109
+ NBClass.nbStatus.value = "unknown";
110
+ }
111
+ ENGrid.enableSubmit();
112
+ window._nb.fields.unregisterListener(NBClass.emailField);
113
+ NBClass.nbLoaded = false;
114
+ NBClass.logger.log("NeverBounce Timeout Reached. Bypassing validation, setting unknown status and removing NB.");
115
+ }, NBClass.neverBounceTimeout);
97
116
  });
98
117
  // Never Bounce: Do work when input changes or when API responds with an error
99
118
  field.addEventListener("nb:clear", function (e) {
119
+ if (!NBClass.nbLoaded)
120
+ return;
121
+ NBClass.clearTimeout();
100
122
  NBClass.setEmailStatus("clear");
101
123
  ENGrid.enableSubmit();
102
124
  if (NBClass.nbDate)
@@ -106,6 +128,9 @@ export class NeverBounce {
106
128
  });
107
129
  // Never Bounce: Do work when results have an input that does not look like an email (i.e. missing @ or no .com/.net/etc...)
108
130
  field.addEventListener("nb:soft-result", function (e) {
131
+ if (!NBClass.nbLoaded)
132
+ return;
133
+ NBClass.clearTimeout();
109
134
  NBClass.setEmailStatus("soft-result");
110
135
  if (NBClass.nbDate)
111
136
  NBClass.nbDate.value = "";
@@ -115,6 +140,9 @@ export class NeverBounce {
115
140
  });
116
141
  // Never Bounce: When results have been received
117
142
  field.addEventListener("nb:result", function (e) {
143
+ if (!NBClass.nbLoaded)
144
+ return;
145
+ NBClass.clearTimeout();
118
146
  if (e.detail.result.is(window._nb.settings.getAcceptedStatusCodes())) {
119
147
  NBClass.setEmailStatus("valid");
120
148
  if (NBClass.nbDate)
@@ -263,4 +291,14 @@ export class NeverBounce {
263
291
  this.form.validate = false;
264
292
  }
265
293
  }
294
+ /**
295
+ * Clears the backup timeout function if it exists.
296
+ * @private
297
+ */
298
+ clearTimeout() {
299
+ if (this.neverBounceTimeoutFunc) {
300
+ clearTimeout(this.neverBounceTimeoutFunc);
301
+ this.neverBounceTimeoutFunc = null;
302
+ }
303
+ }
266
304
  }
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const AppVersion = "0.22.18";
1
+ export declare const AppVersion = "0.22.19";
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const AppVersion = "0.22.18";
1
+ export const AppVersion = "0.22.19";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@4site/engrid-scripts",
3
- "version": "0.22.18",
3
+ "version": "0.22.19",
4
4
  "description": "Scripts for the ENGRID Project",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -25,7 +25,7 @@
25
25
  "strongly-typed-events": "^2.0.9"
26
26
  },
27
27
  "homepage": "https://github.com/4site-interactive-studios/engrid#readme",
28
- "gitHead": "ae02b46d2b8cf00df293b08101b70c349c21c19c",
28
+ "gitHead": "e89f60c9d2dda8c1d2f42eb611a0a10c835f6e88",
29
29
  "devDependencies": {
30
30
  "nodemon": "^2.0.20"
31
31
  }