@sheerid/jslib 2.216.0 → 2.217.0

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.
Files changed (183) hide show
  1. package/_mysheerid-preview.css +4 -4
  2. package/_mysheerid-preview.js +6 -6
  3. package/chunk/ActiveDutyStartDateComponent-8ed93MIc.js +4 -4
  4. package/chunk/ActiveDutyStartDateComponent-BfkF0ser.js +4 -4
  5. package/chunk/AddressComponent-AiyIPiCz.js +4 -4
  6. package/chunk/AddressComponent-DV2Wsw6k.js +4 -4
  7. package/chunk/CaptchaComponent-CSCvSY8Y.js +4 -4
  8. package/chunk/CaptchaComponent-DcxyBvrf.js +4 -4
  9. package/chunk/ChangeLocaleComponent-Cu2DR-Q3.js +4 -4
  10. package/chunk/ChangeLocaleComponent-DUnfgQuX.js +4 -4
  11. package/chunk/City-BmrJpnS6.js +4 -4
  12. package/chunk/City-yVVnZQTP.js +4 -4
  13. package/chunk/CollegeNameComponent-DaTimEqC.js +4 -4
  14. package/chunk/CollegeNameComponent-DtKPZHb-.js +4 -4
  15. package/chunk/CopyToClipboardComponent-9hyfSMC0.js +4 -4
  16. package/chunk/CopyToClipboardComponent-H3bJGcOM.js +4 -4
  17. package/chunk/CountryComponentWrapper--2UQ7mXP.js +4 -4
  18. package/chunk/CountryComponentWrapper-Ceq-eink.js +4 -4
  19. package/chunk/DriverLicenseNumberComponent-D9cakdvU.js +4 -4
  20. package/chunk/DriverLicenseNumberComponent-ziLNYB8e.js +4 -4
  21. package/chunk/EBTCardNumberComponent-B1kv4R4G.js +4 -4
  22. package/chunk/EBTCardNumberComponent-oYQJ_tP7.js +4 -4
  23. package/chunk/EmailLoopPending-In0FH-Ap.js +4 -4
  24. package/chunk/EmailLoopPending-lxRF0bx8.js +4 -4
  25. package/chunk/FirstResponderOrganizationComponent-Bru1a0U7.js +4 -4
  26. package/chunk/FirstResponderOrganizationComponent-fPxZFdpO.js +4 -4
  27. package/chunk/FormFieldInputSelect-CjWY_ush.js +4 -4
  28. package/chunk/FormFieldInputSelect-o7QZaYhS.js +4 -4
  29. package/chunk/FormFieldLayout-DDEEmlGC.js +4 -4
  30. package/chunk/FormFieldLayout-DEVPpEyA.js +4 -4
  31. package/chunk/FormFieldText-CJ-GVpZE.js +4 -4
  32. package/chunk/FormFieldText-CaWtYVur.js +4 -4
  33. package/chunk/FormFieldTypeahead-C6eS7yJg.js +4 -4
  34. package/chunk/FormFieldTypeahead-CyKKVK89.js +4 -4
  35. package/chunk/FormSelectChoice-BahCx4wG.js +4 -4
  36. package/chunk/FormSelectChoice-C-rIlDKl.js +4 -4
  37. package/chunk/InputText-CCNbZmMe.js +4 -4
  38. package/chunk/InputText-PEiatRRJ.js +4 -4
  39. package/chunk/LicensedProfessionalOrganizationComponent-C5pc7hVJ.js +4 -4
  40. package/chunk/LicensedProfessionalOrganizationComponent-CnR_qF3r.js +4 -4
  41. package/chunk/MedicalProfessionalOrganizationComponent-CXHX25GN.js +4 -4
  42. package/chunk/MedicalProfessionalOrganizationComponent-DBf6V49M.js +4 -4
  43. package/chunk/MemberIdComponent-C8mVSo9m.js +4 -4
  44. package/chunk/MemberIdComponent-oanWSvQh.js +4 -4
  45. package/chunk/MembershipOrganizationComponent-CN6_d_Fk.js +4 -4
  46. package/chunk/MembershipOrganizationComponent-yu-UNXIK.js +4 -4
  47. package/chunk/Onfido-BG8cDEVW.js +4 -4
  48. package/chunk/PersonalInfoStepSubmitButton-j44RdZDq.js +4 -4
  49. package/chunk/PersonalInfoStepSubmitButton-v_kWLmEw.js +4 -4
  50. package/chunk/PersonalInfoStepWrapper-BOBNCgik.js +4 -4
  51. package/chunk/PersonalInfoStepWrapper-PV06WMKL.js +4 -4
  52. package/chunk/PostalCodeComponent-DrCcV90W.js +4 -4
  53. package/chunk/PostalCodeComponent-KXVfZkLx.js +4 -4
  54. package/chunk/SSN-B_z2R4Bx.js +4 -4
  55. package/chunk/SSN-Hb1lTx8A.js +4 -4
  56. package/chunk/StateSelectComponent-CChSqKXz.js +4 -4
  57. package/chunk/StateSelectComponent-CIpB-Rh1.js +4 -4
  58. package/chunk/StatusComponent-C6J1B7Tl.js +4 -4
  59. package/chunk/StatusComponent-pmuIhuXi.js +4 -4
  60. package/chunk/StepCard-CIfaQVu-.js +4 -4
  61. package/chunk/StepCard-dcwCtPrW.js +4 -4
  62. package/chunk/StepCollectMilitaryStatusComponent-C02BKffq.js +4 -4
  63. package/chunk/StepCollectMilitaryStatusComponent-CaP-tPJA.js +4 -4
  64. package/chunk/StepDriverLicensePersonalInfoComponent-C4QRbgMC.js +4 -4
  65. package/chunk/StepDriverLicensePersonalInfoComponent-I3LNN4GB.js +4 -4
  66. package/chunk/StepGeneralIdentityPersonalInfoComponent-Bw6WDrOP.js +4 -4
  67. package/chunk/StepGeneralIdentityPersonalInfoComponent-CGIiAyvk.js +4 -4
  68. package/chunk/StepHybridIdentityPersonalInfoComponent-BAe_HzjN.js +4 -4
  69. package/chunk/StepHybridIdentityPersonalInfoComponent-kE7xVuag.js +4 -4
  70. package/chunk/StepIDCheckLoopOnfido-Sg4a19wV.js +4 -4
  71. package/chunk/StepIDCheckLoopOnfido-djTS20UT.js +4 -4
  72. package/chunk/StepIDCheckLoopRegula-B5I-ojjy.js +4 -4
  73. package/chunk/StepIDCheckLoopRegula-DZA5G1Z6.js +4 -4
  74. package/chunk/StepInactiveMilitaryPersonalInfoComponent-BBsJj3Sm.js +4 -4
  75. package/chunk/StepInactiveMilitaryPersonalInfoComponent-DDwAnwM5.js +4 -4
  76. package/chunk/TeacherSchoolComponent-BSHPjiwQ.js +4 -4
  77. package/chunk/TeacherSchoolComponent-Bf3ZhJ_c.js +4 -4
  78. package/chunk/ar-uNi-5jZs.js +4 -4
  79. package/chunk/bg-BSs2zI8g.js +4 -4
  80. package/chunk/bn-IN-DgKTANOE.js +4 -4
  81. package/chunk/cs-ZQhsI2gf.js +4 -4
  82. package/chunk/da-Ca6-P-fb.js +4 -4
  83. package/chunk/de-qTizo3k0.js +4 -4
  84. package/chunk/downshift.esm-CtrbqQGL.js +4 -4
  85. package/chunk/downshift.esm-huKBwB2d.js +4 -4
  86. package/chunk/el-Ci0_i7um.js +4 -4
  87. package/chunk/en-GB-BMFtN6kg.js +4 -4
  88. package/chunk/es-10I2Uwx1.js +4 -4
  89. package/chunk/es-ES-BEtGV8ZY.js +4 -4
  90. package/chunk/fi-VAIle52X.js +4 -4
  91. package/chunk/fr-CA-YGnUj1Cd.js +4 -4
  92. package/chunk/fr-CmkojiS4.js +4 -4
  93. package/chunk/ga-CTdDfi4f.js +4 -4
  94. package/chunk/hi-IN-mBG2SFX6.js +4 -4
  95. package/chunk/hr-D8voB0hC.js +4 -4
  96. package/chunk/hu-DzN9Oup5.js +4 -4
  97. package/chunk/id-ZqMlj7_U.js +4 -4
  98. package/chunk/index-B0SBEWOf.js +4 -4
  99. package/chunk/index-BA3bE-f-.js +4 -4
  100. package/chunk/index-BKJ-EAbL.js +4 -4
  101. package/chunk/{index-DhehscKj.js → index-BNlngnBD.js} +4 -4
  102. package/chunk/{index-DhehscKj.js.map → index-BNlngnBD.js.map} +1 -1
  103. package/chunk/index-BSzMX8zb.js +4 -4
  104. package/chunk/index-BZ1nv-sB.js +4 -4
  105. package/chunk/index-BbDuLZm0.js +4 -4
  106. package/chunk/index-BbOCWcRK.js +4 -4
  107. package/chunk/index-Bn00xQJF.js +4 -4
  108. package/chunk/index-Brpm5gN6.js +4 -4
  109. package/chunk/index-C6CmnxtU.js +4 -4
  110. package/chunk/index-CARFmnRY.js +4 -4
  111. package/chunk/index-CBoeMu9i.js +4 -4
  112. package/chunk/index-CHDBBfsg.js +4 -4
  113. package/chunk/index-CR19uOwz.js +4 -4
  114. package/chunk/index-CTGY1a4m.js +4 -4
  115. package/chunk/index-CYi-EOgq.js +4 -4
  116. package/chunk/index-CaBrLsal.js +4 -4
  117. package/chunk/index-Ck4Jg3xo.js +4 -4
  118. package/chunk/index-CrPc1exn.js +4 -4
  119. package/chunk/index-CzRLvvKQ.js +4 -4
  120. package/chunk/index-D2d6x5LN.js +4 -4
  121. package/chunk/index-D2nA_06X.js +4 -4
  122. package/chunk/index-D2nA_06X.js.map +1 -1
  123. package/chunk/index-D7Mqx5na.js +4 -4
  124. package/chunk/index-DD5n87cJ.js +4 -4
  125. package/chunk/index-DE_o4TXi.js +4 -4
  126. package/chunk/index-DFoMYB8K.js +4 -4
  127. package/chunk/index-DIkWpujR.js +4 -4
  128. package/chunk/index-DWjm3Bvf.js +4 -4
  129. package/chunk/index-DbVmFTqT.js +4 -4
  130. package/chunk/index-DdxRfsSh.js +4 -4
  131. package/chunk/index-DeW_gAIO.js +4 -4
  132. package/chunk/index-Dekegp07.js +4 -4
  133. package/chunk/index-EUJqfdiJ.js +4 -4
  134. package/chunk/index-MB6FRj7G.js +4 -4
  135. package/chunk/index-W05VUuom.js +4 -4
  136. package/chunk/index-Xq2oC7I1.js +4 -4
  137. package/chunk/index-dTu4ORna.js +4 -4
  138. package/chunk/index-dWqQPCim.js +4 -4
  139. package/chunk/index-jeII5suL.js +4 -4
  140. package/chunk/index-zyCRCimF.js +4 -4
  141. package/chunk/is-OeoxCvCJ.js +4 -4
  142. package/chunk/it-C8ZVZXAZ.js +4 -4
  143. package/chunk/iw-BlNWQ44s.js +4 -4
  144. package/chunk/ja-ByZsq6B3.js +4 -4
  145. package/chunk/ko-CJtRHc1k.js +4 -4
  146. package/chunk/lo-DG5_kBxI.js +4 -4
  147. package/chunk/lt-CPMjVK0l.js +4 -4
  148. package/chunk/militaryStepHelpers-BAkdVJwA.js +4 -4
  149. package/chunk/militaryStepHelpers-BBHrfNCB.js +4 -4
  150. package/chunk/mocks-CeAm-JFs.js +4 -4
  151. package/chunk/mocks-ClJ0M6QH.js +4 -4
  152. package/chunk/ms-kW4-QxcQ.js +4 -4
  153. package/chunk/nl-BE-B50g9ESZ.js +4 -4
  154. package/chunk/nl-CqhguuWs.js +4 -4
  155. package/chunk/no-oDvd5Pbh.js +4 -4
  156. package/chunk/pl-CmJTwwaK.js +4 -4
  157. package/chunk/pt-BR-Bn7yzXgL.js +4 -4
  158. package/chunk/pt-CO5wB188.js +4 -4
  159. package/chunk/ro-sj1FJM-g.js +4 -4
  160. package/chunk/ru-8IiNvgy2.js +4 -4
  161. package/chunk/sk-aGVgcFKm.js +4 -4
  162. package/chunk/sl-BhNdkTbu.js +4 -4
  163. package/chunk/sr-BMFHnZm-.js +4 -4
  164. package/chunk/sv-B_eq88ce.js +4 -4
  165. package/chunk/sw-DbdFPGF8.js +4 -4
  166. package/chunk/th-BYY2tGFz.js +4 -4
  167. package/chunk/tr-d4Yjkvpu.js +4 -4
  168. package/chunk/uk-Cm64Vc92.js +4 -4
  169. package/chunk/ur-DFf2LHi5.js +4 -4
  170. package/chunk/useCollectFieldsEndpoint-Cd6d_u47.js +4 -4
  171. package/chunk/useCollectFieldsEndpoint-DqTjyVEr.js +4 -4
  172. package/chunk/useMetrics-D2fG6cgw.js +4 -4
  173. package/chunk/useMetrics-wq7yrL0b.js +4 -4
  174. package/chunk/vi-DDgpUcog.js +4 -4
  175. package/chunk/zh-BoejQGiZ.js +4 -4
  176. package/chunk/zh-HK-Bwd8sr9B.js +4 -4
  177. package/chunk/zu-BKlg24xX.js +4 -4
  178. package/package.json +1 -1
  179. package/sheerid-install.css +4 -4
  180. package/sheerid-install.js +65 -94
  181. package/sheerid-install.js.map +1 -1
  182. package/sheerid.css +5 -5
  183. package/sheerid.js +7 -7
@@ -4,10 +4,10 @@
4
4
  * This file is not intended for use in other contexts and there are no guarantees about its behavior outside of MySheerID.
5
5
  */
6
6
  /**
7
- * VERSION: 2.216.0
8
- * BUILD_TIMESTAMP: 1776381511730
9
- * BUILD_DATE: Thu Apr 16 2026 23:18:31 GMT+0000 (Coordinated Universal Time)
10
- * BUILD_COMMIT: 50ddc20fa37c7ed5a295ebe023a56c87f1a977b4
7
+ * VERSION: 2.217.0
8
+ * BUILD_TIMESTAMP: 1776444739895
9
+ * BUILD_DATE: Fri Apr 17 2026 16:52:19 GMT+0000 (Coordinated Universal Time)
10
+ * BUILD_COMMIT: 9512019fe1f385a707b0474cd1b5fc2656ee9530
11
11
  */
12
12
  const e = {
13
13
  "defaultMessages.ACTIVE_DUTY": "Đang Tại Ngũ",
@@ -4,10 +4,10 @@
4
4
  * This file is not intended for use in other contexts and there are no guarantees about its behavior outside of MySheerID.
5
5
  */
6
6
  /**
7
- * VERSION: 2.216.0
8
- * BUILD_TIMESTAMP: 1776381511730
9
- * BUILD_DATE: Thu Apr 16 2026 23:18:31 GMT+0000 (Coordinated Universal Time)
10
- * BUILD_COMMIT: 50ddc20fa37c7ed5a295ebe023a56c87f1a977b4
7
+ * VERSION: 2.217.0
8
+ * BUILD_TIMESTAMP: 1776444739895
9
+ * BUILD_DATE: Fri Apr 17 2026 16:52:19 GMT+0000 (Coordinated Universal Time)
10
+ * BUILD_COMMIT: 9512019fe1f385a707b0474cd1b5fc2656ee9530
11
11
  */
12
12
  const e = {
13
13
  "defaultMessages.ACTIVE_DUTY": "现役",
@@ -4,10 +4,10 @@
4
4
  * This file is not intended for use in other contexts and there are no guarantees about its behavior outside of MySheerID.
5
5
  */
6
6
  /**
7
- * VERSION: 2.216.0
8
- * BUILD_TIMESTAMP: 1776381511730
9
- * BUILD_DATE: Thu Apr 16 2026 23:18:31 GMT+0000 (Coordinated Universal Time)
10
- * BUILD_COMMIT: 50ddc20fa37c7ed5a295ebe023a56c87f1a977b4
7
+ * VERSION: 2.217.0
8
+ * BUILD_TIMESTAMP: 1776444739895
9
+ * BUILD_DATE: Fri Apr 17 2026 16:52:19 GMT+0000 (Coordinated Universal Time)
10
+ * BUILD_COMMIT: 9512019fe1f385a707b0474cd1b5fc2656ee9530
11
11
  */
12
12
  const e = {
13
13
  "defaultMessages.ACTIVE_DUTY": "現役",
@@ -4,10 +4,10 @@
4
4
  * This file is not intended for use in other contexts and there are no guarantees about its behavior outside of MySheerID.
5
5
  */
6
6
  /**
7
- * VERSION: 2.216.0
8
- * BUILD_TIMESTAMP: 1776381511730
9
- * BUILD_DATE: Thu Apr 16 2026 23:18:31 GMT+0000 (Coordinated Universal Time)
10
- * BUILD_COMMIT: 50ddc20fa37c7ed5a295ebe023a56c87f1a977b4
7
+ * VERSION: 2.217.0
8
+ * BUILD_TIMESTAMP: 1776444739895
9
+ * BUILD_DATE: Fri Apr 17 2026 16:52:19 GMT+0000 (Coordinated Universal Time)
10
+ * BUILD_COMMIT: 9512019fe1f385a707b0474cd1b5fc2656ee9530
11
11
  */
12
12
  const e = {
13
13
  "defaultMessages.ACTIVE_DUTY": "Umsebenzi Engiwenzayo",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sheerid/jslib",
3
3
  "author": "SheerID",
4
- "version": "2.216.0",
4
+ "version": "2.217.0",
5
5
  "description": "SheerID JavaScript Library",
6
6
  "keywords": [
7
7
  "verify",
@@ -1,8 +1,8 @@
1
1
 
2
2
  /**
3
- * VERSION: 2.216.0
4
- * BUILD_TIMESTAMP: 1776381510280
5
- * BUILD_DATE: Thu Apr 16 2026 23:18:30 GMT+0000 (Coordinated Universal Time)
6
- * BUILD_COMMIT: 50ddc20fa37c7ed5a295ebe023a56c87f1a977b4
3
+ * VERSION: 2.217.0
4
+ * BUILD_TIMESTAMP: 1776444738395
5
+ * BUILD_DATE: Fri Apr 17 2026 16:52:18 GMT+0000 (Coordinated Universal Time)
6
+ * BUILD_COMMIT: 9512019fe1f385a707b0474cd1b5fc2656ee9530
7
7
  */
8
8
  .sid-inline-iframe{border:0;height:100%;min-width:32rem}.sid-modal__wrapper{background:#fff;border-radius:5px;box-shadow:#989898 10px 10px 15px;left:50%;max-height:calc(100% - 80px);opacity:0;outline:none;overflow-y:auto;position:fixed;top:50%;transform:translate(-50%,-50%);transition:opacity .3s linear;width:32rem;z-index:9998}.sid-modal__wrapper.fade-in{opacity:1}.sid-modal__iframe{border:0;display:block;height:100%;min-width:250px;width:100%}.sid-modal__close-button{align-items:center;background:none;border:none;color:inherit;cursor:pointer;display:flex;flex-direction:row;position:absolute;right:10px;text-decoration:none;top:10px;z-index:9999}.sid-modal__close-icon{background-image:url(https://services.sheerid.com/jsapi/img/btn1.png);background-repeat:no-repeat;filter:brightness(25%);height:20px;width:20px}.sid-modal__close-text{color:#000;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:var(--sheerid-font-size-body);margin-right:5px}.sid-modal__overlay{background-color:#b3b3b3;height:100%;left:0;opacity:0;position:fixed;top:0;transition:opacity .3s linear;width:100%;z-index:9997}.sid-modal__overlay.fade-in{opacity:.75}@media(max-width:620px){.sid-modal__wrapper{max-width:calc(100vw - 1rem)}}@media(max-width:32rem){.sid-inline-iframe{min-width:calc(100vw - 1rem);width:100%}}
@@ -1,13 +1,13 @@
1
1
 
2
2
  /**
3
- * VERSION: 2.216.0
4
- * BUILD_TIMESTAMP: 1776381510280
5
- * BUILD_DATE: Thu Apr 16 2026 23:18:30 GMT+0000 (Coordinated Universal Time)
6
- * BUILD_COMMIT: 50ddc20fa37c7ed5a295ebe023a56c87f1a977b4
3
+ * VERSION: 2.217.0
4
+ * BUILD_TIMESTAMP: 1776444738395
5
+ * BUILD_DATE: Fri Apr 17 2026 16:52:18 GMT+0000 (Coordinated Universal Time)
6
+ * BUILD_COMMIT: 9512019fe1f385a707b0474cd1b5fc2656ee9530
7
7
  */
8
- const b = {}, U = async () => b, _ = () => window.navigator.globalPrivacyControl, l = () => window.NREUM && !_();
8
+ const b = {}, g = async () => b, _ = () => window.navigator.globalPrivacyControl, c = () => window.NREUM && !_();
9
9
  let d = 4, r = "";
10
- const p = {
10
+ const u = {
11
11
  info: 1,
12
12
  log: 2,
13
13
  warn: 3,
@@ -20,68 +20,68 @@ const p = {
20
20
  error: "#e12046"
21
21
  }, f = "color: white; font-weight: bold; padding: 2px 10px;";
22
22
  let L = () => ({});
23
- const A = (i) => i && i.stack && i.message, m = (...i) => {
23
+ const T = (i) => i && i.stack && i.message, m = (...i) => {
24
24
  d <= 3 && console.warn(`%c${r} warn`, `background: ${h.warn};${f}`, ...i);
25
25
  }, M = (...i) => {
26
26
  d <= 2 && console.log(`%c${r} log`, `background: ${h.log};${f}`, ...i);
27
- }, T = (...i) => {
27
+ }, U = (...i) => {
28
28
  d <= 1 && console.log(`%c${r} info`, `background: ${h.info};${f}`, ...i);
29
- }, S = async (i, e = "unknown group", t = {}) => {
29
+ }, A = async (i, e = "unknown group", t = {}) => {
30
30
  if (d <= 4) {
31
31
  if (!i) {
32
32
  console.error(new Error("An error must be supplied"));
33
33
  return;
34
34
  }
35
35
  let s;
36
- typeof i == "string" && (s = new Error(i)), A(i) && (s = i), s || (s = new Error("Unknown error"));
37
- let n = { errorMessageGroup: e };
36
+ typeof i == "string" && (s = new Error(i)), T(i) && (s = i), s || (s = new Error("Unknown error"));
37
+ let o = { errorMessageGroup: e };
38
38
  try {
39
- n = {
40
- ...await U(),
41
- ...n
42
- }, delete n.jslibVersionActual;
43
- } catch (o) {
44
- l() ? window.NREUM.noticeError(s, n) : m("Unable to assemble GA error attributes", o);
39
+ o = {
40
+ ...await g(),
41
+ ...o
42
+ }, delete o.jslibVersionActual;
43
+ } catch (a) {
44
+ c() ? window.NREUM.noticeError(s, o) : m("Unable to assemble GA error attributes", a);
45
45
  }
46
46
  try {
47
- const o = L();
48
- n = {
49
- ...n,
47
+ const a = L();
48
+ o = {
50
49
  ...o,
50
+ ...a,
51
51
  ...t
52
52
  };
53
- } catch (o) {
54
- l() ? window.NREUM.noticeError(s, n) : m("Unable to assemble useful error attributes", o);
53
+ } catch (a) {
54
+ c() ? window.NREUM.noticeError(s, o) : m("Unable to assemble useful error attributes", a);
55
55
  }
56
- l() && window.NREUM.noticeError(s, n), console.error(
56
+ c() && window.NREUM.noticeError(s, o), console.error(
57
57
  `%c${r} error`,
58
58
  `background: ${h.error};${f}`,
59
59
  s,
60
- n
60
+ o
61
61
  );
62
62
  }
63
- }, y = (i, e = {}) => {
64
- l() && window.NREUM.addPageAction(i, e);
63
+ }, S = (i, e = {}) => {
64
+ c() && window.NREUM.addPageAction(i, e);
65
65
  }, O = (i, e) => {
66
- y("API-calls-timing", {
66
+ S("API-calls-timing", {
67
67
  api_call: i,
68
68
  api_response_time: e
69
69
  });
70
70
  }, E = {
71
- error: S,
71
+ error: A,
72
72
  warn: m,
73
73
  log: M,
74
- info: T,
74
+ info: U,
75
75
  /** @deprecated use newRelicPageAction() instead */
76
76
  logAPIResponseTime: O,
77
77
  setLogLevel: (i) => {
78
- if (!p.hasOwnProperty(i))
78
+ if (!u.hasOwnProperty(i))
79
79
  throw new Error(`Unknown logLevel '${i}'`);
80
- d = p[i], console.log(
80
+ d = u[i], console.log(
81
81
  `%c${r} log level set to ${i}`,
82
82
  // @ts-ignore
83
83
  `background: ${h[i]};${f}`
84
- ), l() || m("Offsite logging not enabled");
84
+ ), c() || m("Offsite logging not enabled");
85
85
  },
86
86
  setPrefix: (i) => {
87
87
  r = i;
@@ -89,8 +89,8 @@ const A = (i) => i && i.stack && i.message, m = (...i) => {
89
89
  init: (i) => {
90
90
  L = i;
91
91
  }
92
- }, N = "installPageUrl", P = "installType";
93
- class R {
92
+ }, y = "installPageUrl", N = "installType";
93
+ class P {
94
94
  subscribers = /* @__PURE__ */ new Set();
95
95
  sub(e) {
96
96
  return this.subscribers.add(e), () => this.subscribers.delete(e);
@@ -99,14 +99,14 @@ class R {
99
99
  this.subscribers.forEach((t) => t(e));
100
100
  }
101
101
  }
102
- class C {
102
+ class R {
103
103
  events = /* @__PURE__ */ new Map();
104
104
  /**
105
105
  * Registers a listener that will be called when the named event is emitted
106
106
  * @returns An unsubscribe function that will turn off this listener.
107
107
  */
108
108
  on(e, t) {
109
- return this.events.has(e) || this.events.set(e, new R()), this.events.get(e).sub(t);
109
+ return this.events.has(e) || this.events.set(e, new P()), this.events.get(e).sub(t);
110
110
  }
111
111
  /**
112
112
  * Registers a listener that will be called a single time when the named event
@@ -114,7 +114,7 @@ class C {
114
114
  * @returns An unsubscribe function that will turn off this listener.
115
115
  */
116
116
  once(e, t) {
117
- const s = this.on(e, (n) => (s(), t(n)));
117
+ const s = this.on(e, (o) => (s(), t(o)));
118
118
  return s;
119
119
  }
120
120
  /**
@@ -133,7 +133,7 @@ class C {
133
133
  this.events.has(e) && this.events.get(e).pub(t);
134
134
  }
135
135
  }
136
- const D = (i) => {
136
+ const C = (i) => {
137
137
  i.forEach((e) => {
138
138
  e.classList.add("fade-in");
139
139
  });
@@ -143,8 +143,8 @@ const D = (i) => {
143
143
  }, e);
144
144
  }, I = (i) => {
145
145
  const e = new URL(i);
146
- return new URL(window.location.href).searchParams.forEach((s, n) => {
147
- e.searchParams.has(n) || e.searchParams.set(n, s);
146
+ return new URL(window.location.href).searchParams.forEach((s, o) => {
147
+ e.searchParams.has(o) || e.searchParams.set(o, s);
148
148
  }), e.href;
149
149
  }, B = {
150
150
  INLINE_IFRAME_CONTENT: "sid-inline-iframe",
@@ -154,18 +154,18 @@ const D = (i) => {
154
154
  CLOSE_BUTTON: "sid-modal__close-button",
155
155
  CLOSE_TEXT: "sid-modal__close-text",
156
156
  CLOSE_ICON: "sid-modal__close-icon"
157
- }, v = "SheerID Verification Form", a = {
157
+ }, v = "SheerID Verification Form", n = {
158
158
  CLASS_NAMES: B,
159
159
  DEFAULT_MOBILE_THRESHOLD_WIDTH: 620,
160
160
  MODAL_OPACITY_TRANSITION_PERIOD: 300
161
- }, g = {
162
- className: a.CLASS_NAMES.INLINE_IFRAME_CONTENT,
161
+ }, x = {
162
+ className: n.CLASS_NAMES.INLINE_IFRAME_CONTENT,
163
163
  title: v
164
- }, x = (i) => {
164
+ }, D = (i) => {
165
165
  if (typeof i != "function")
166
166
  throw new Error(`Expected type "function", but received ${typeof i}`);
167
167
  };
168
- class c extends C {
168
+ class l extends R {
169
169
  containerElement;
170
170
  verificationUrl;
171
171
  isMobileDevice;
@@ -177,7 +177,7 @@ class c extends C {
177
177
  onCleanupEvents = [];
178
178
  installType = "cdn_inline_iframe";
179
179
  constructor(e, t) {
180
- super(), c.isValidHttpUrl(t) ? (this.containerElement = e, this.verificationUrl = new URL(I(t)), this.verificationIframeUid = c.createUniqueId()) : E.error("Invalid URL. Provide a proper URL: https://example.com/", "iframe url");
180
+ super(), l.isValidHttpUrl(t) ? (this.containerElement = e, this.verificationUrl = new URL(I(t)), this.verificationIframeUid = l.createUniqueId()) : E.error("Invalid URL. Provide a proper URL: https://example.com/", "iframe url");
181
181
  }
182
182
  cleanup() {
183
183
  this.onCleanupEvents.forEach((e) => e());
@@ -198,13 +198,13 @@ class c extends C {
198
198
  }
199
199
  getIframeUrl() {
200
200
  const e = new URL(this.verificationUrl);
201
- return e.searchParams.set("verificationIframeUid", this.verificationIframeUid), e.searchParams.set(N, window.location.href), e.searchParams.set(P, this.installType), this.locale && e.searchParams.set("locale", this.locale), e.toString();
201
+ return e.searchParams.set("verificationIframeUid", this.verificationIframeUid), e.searchParams.set(y, window.location.href), e.searchParams.set(N, this.installType), this.locale && e.searchParams.set("locale", this.locale), e.toString();
202
202
  }
203
203
  // If iFrame hasn't loaded yet, queue up the callback
204
204
  // otherwise call it immediately
205
205
  addOnLoadEvent(e) {
206
206
  try {
207
- x(e);
207
+ D(e);
208
208
  } catch {
209
209
  E.error("Invalid callback provided to iFrame.onLoad()", "iframe addOnLoadEvent");
210
210
  return;
@@ -257,34 +257,10 @@ class c extends C {
257
257
  this.installType = e;
258
258
  }
259
259
  init(e = !0) {
260
- e && this.createIframe(g), this.addActionListener(), this.containerElement.appendChild(this.iframe);
261
- }
262
- }
263
- class $ extends c {
264
- constructor(e, t) {
265
- super(e, t), this.verificationUrl = new URL(this.getAffinityUrlWithUID(t));
266
- }
267
- static createUniqueId() {
268
- return Math.random().toString(36).substr(2, 9);
269
- }
270
- getAffinityUrlWithUID(e) {
271
- const t = new URL(e);
272
- return t.searchParams.set("affinityIframeUid", this.verificationIframeUid), t.toString();
273
- }
274
- addWindowMessageListener(e) {
275
- const t = (s) => {
276
- this.verificationUrl.origin === s.origin && s.data.affinityIframeUid === this.verificationIframeUid && s.data.action && s.data.action.type && e(s.data.action);
277
- };
278
- window.addEventListener("message", t), this.onCleanupEvents.push(() => window.removeEventListener("message", t));
279
- }
280
- createIframe(e) {
281
- return this.iframe = document.createElement("iframe"), this.iframe.classList.add(e.className), this.iframe.title = e.title, this.iframe.src = this.verificationUrl.href, this.iframe.allow = "camera;microphone", this.iframe.onload = () => this.onLoad(), this.iframe;
282
- }
283
- init() {
284
- this.createIframe({ ...g, title: "SheerID Affinity Offers" }), this.addActionListener(), this.containerElement.appendChild(this.iframe);
260
+ e && this.createIframe(x), this.addActionListener(), this.containerElement.appendChild(this.iframe);
285
261
  }
286
262
  }
287
- class u {
263
+ class p {
288
264
  verificationUrl;
289
265
  redirectOnMobile;
290
266
  overlay;
@@ -297,33 +273,33 @@ class u {
297
273
  closeButton;
298
274
  stopPropagation;
299
275
  constructor(e, t) {
300
- const s = t.mobileThreshold ? t.mobileThreshold : a.DEFAULT_MOBILE_THRESHOLD_WIDTH;
301
- this.verificationUrl = I(e), this.redirectOnMobile = t.mobileRedirect || !1, this.isMobileDevice = window.document.body.clientWidth <= Number(s), this.closeButtonText = t.closeButtonText ? t.closeButtonText : "", this.closeButton = null, this.stopPropagation = t.stopPropagation || !1, this.overlay = u.createOverlay(), this.wrapper = this.createWrapper(), this.addFocusListener();
276
+ const s = t.mobileThreshold ? t.mobileThreshold : n.DEFAULT_MOBILE_THRESHOLD_WIDTH;
277
+ this.verificationUrl = I(e), this.redirectOnMobile = t.mobileRedirect || !1, this.isMobileDevice = window.document.body.clientWidth <= Number(s), this.closeButtonText = t.closeButtonText ? t.closeButtonText : "", this.closeButton = null, this.stopPropagation = t.stopPropagation || !1, this.overlay = p.createOverlay(), this.wrapper = this.createWrapper(), this.addFocusListener();
302
278
  }
303
279
  createCloseBtn() {
304
- if (this.closeButton = document.createElement("button"), this.closeButton.classList.add(a.CLASS_NAMES.CLOSE_BUTTON), this.closeButton.setAttribute("aria-label", "close"), this.closeButtonText) {
280
+ if (this.closeButton = document.createElement("button"), this.closeButton.classList.add(n.CLASS_NAMES.CLOSE_BUTTON), this.closeButton.setAttribute("aria-label", "close"), this.closeButtonText) {
305
281
  const t = document.createElement("div");
306
- t.classList.add(a.CLASS_NAMES.CLOSE_TEXT), t.innerHTML = this.closeButtonText, this.closeButton.appendChild(t);
282
+ t.classList.add(n.CLASS_NAMES.CLOSE_TEXT), t.innerHTML = this.closeButtonText, this.closeButton.appendChild(t);
307
283
  }
308
284
  const e = document.createElement("span");
309
- return e.classList.add(a.CLASS_NAMES.CLOSE_ICON), e.setAttribute("role", "img"), this.closeButton.appendChild(e), this.closeButton.addEventListener("click", (t) => {
285
+ return e.classList.add(n.CLASS_NAMES.CLOSE_ICON), e.setAttribute("role", "img"), this.closeButton.appendChild(e), this.closeButton.addEventListener("click", (t) => {
310
286
  t.preventDefault(), this.stopPropagation && t.stopPropagation(), this.closeModal();
311
287
  }), this.closeButton;
312
288
  }
313
289
  closeModal() {
314
290
  window.removeEventListener("popstate", this.popStateEventHandler);
315
- const e = a.MODAL_OPACITY_TRANSITION_PERIOD;
291
+ const e = n.MODAL_OPACITY_TRANSITION_PERIOD;
316
292
  w(this.overlay, e), w(this.wrapper, e), this.iframeInstance.cleanup();
317
293
  }
318
294
  static createOverlay() {
319
295
  const e = document.createElement("div");
320
- return e.classList.add(a.CLASS_NAMES.OVERLAY), e;
296
+ return e.classList.add(n.CLASS_NAMES.OVERLAY), e;
321
297
  }
322
298
  createWrapper() {
323
299
  const e = document.createElement("div");
324
- e.classList.add(a.CLASS_NAMES.MODAL_WRAPPER), e.tabIndex = -1, e.setAttribute("role", "dialog"), e.appendChild(this.createCloseBtn()), this.iframeInstance = new c(e, this.verificationUrl), this.iframeInstance.setInstallType("cdn_modal_iframe"), this.on = this.iframeInstance.on.bind(this.iframeInstance), this.once = this.iframeInstance.once.bind(this.iframeInstance);
300
+ e.classList.add(n.CLASS_NAMES.MODAL_WRAPPER), e.tabIndex = -1, e.setAttribute("role", "dialog"), e.appendChild(this.createCloseBtn()), this.iframeInstance = new l(e, this.verificationUrl), this.iframeInstance.setInstallType("cdn_modal_iframe"), this.on = this.iframeInstance.on.bind(this.iframeInstance), this.once = this.iframeInstance.once.bind(this.iframeInstance);
325
301
  const t = {
326
- className: a.CLASS_NAMES.MODAL_IFRAME,
302
+ className: n.CLASS_NAMES.MODAL_IFRAME,
327
303
  title: v
328
304
  };
329
305
  return this.iframeInstance.createIframe(t), e.appendChild(this.iframeInstance.iframe), e;
@@ -344,7 +320,7 @@ class u {
344
320
  }
345
321
  displayModal() {
346
322
  this.iframeInstance.iframe.addEventListener("load", () => {
347
- D([this.overlay, this.wrapper]), document.body.style.overflow = "hidden", this.isInLightboxPostMessage("true");
323
+ C([this.overlay, this.wrapper]), document.body.style.overflow = "hidden", this.isInLightboxPostMessage("true");
348
324
  }), document.body.appendChild(this.overlay), document.body.appendChild(this.wrapper), this.addPopStateListener();
349
325
  }
350
326
  init() {
@@ -357,22 +333,17 @@ class u {
357
333
  this.iframeInstance.setOptions(e);
358
334
  }
359
335
  }
360
- function W(i, e) {
361
- const t = new c(i, e);
336
+ function $(i, e) {
337
+ const t = new l(i, e);
362
338
  return t.init(), t;
363
339
  }
364
340
  function k(i, e = {}) {
365
- const t = new u(i, e);
366
- return t.init(), t;
367
- }
368
- function F(i, e) {
369
- const t = new $(i, e);
341
+ const t = new p(i, e);
370
342
  return t.init(), t;
371
343
  }
372
- const H = { loadInModal: k, loadInlineIframe: W };
344
+ const H = { loadInModal: k, loadInlineIframe: $ };
373
345
  export {
374
346
  H as default,
375
- F as loadAffinityIFrame,
376
347
  k as loadInModal,
377
- W as loadInlineIframe
348
+ $ as loadInlineIframe
378
349
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sheerid-install.js","sources":["../../packages/shared/src/utils/gaHelpers.ts","../../packages/shared/src/utils/logger/logger.ts","../src/constants.ts","../src/lib/hooks/eventEmitter.ts","../src/lib/installScript/utils.ts","../src/lib/installScript/constants.ts","../src/lib/installScript/iframe.ts","../src/lib/installScript/affinity.ts","../src/lib/installScript/modal.ts","../src/lib/installScript/index.ts"],"sourcesContent":["//\n// NOTE this file is high risk for circular dependencies! Avoid imports, or double check that they don't create circular deps\n//\n\nimport type { NavigatorBeta } from \"../types/runtimeTypes\";\n\n/**\n * A singleton to allow access to user properties that we've set on GA without\n * querying GA directly. This is primarily used to also send them to New Relic.\n */\nconst _attrCache: Record<string, unknown> = {};\n\nexport const setGaAttributes = (attrs: Record<string, unknown>): void =>\n Object.entries(attrs).forEach(([k, v]) => {\n _attrCache[k] = v;\n });\n\nexport const getGaAttributes = async (): Promise<object> => _attrCache;\n\nexport const doNotTrack = () => (window.navigator as NavigatorBeta).globalPrivacyControl;\n\nexport const isNewRelicAvailable = () => (window as any).NREUM && !doNotTrack();\n","/* eslint no-console:0 */\n// ~~~ This file and its tests are the only files that should disable \"no-console\" ~~~\n\nimport { getGaAttributes, isNewRelicAvailable } from \"../gaHelpers\";\n\nexport type LogLevel = \"info\" | \"log\" | \"warn\" | \"error\" | \"silent\";\n\nlet logLevel = 4; // default\nlet prefix = \"\";\nconst logLevels = {\n info: 1,\n log: 2,\n warn: 3,\n error: 4,\n silent: 5,\n};\n\nconst colors = {\n info: \"#26c1db\",\n log: \"#09f979\",\n warn: \"#f6b13f\",\n error: \"#e12046\",\n};\n\nconst standardStyles = \"color: white; font-weight: bold; padding: 2px 10px;\";\n\nlet getUsefulState: () => Record<string, any> = () => ({});\n\nconst isError = (e: any) => e && e.stack && e.message;\n\nconst warn = (...args: any[]) => {\n if (logLevel <= 3) {\n console.warn(`%c${prefix} warn`, `background: ${colors.warn};${standardStyles}`, ...args);\n }\n};\n\nconst log = (...args: any[]) => {\n if (logLevel <= 2) {\n console.log(`%c${prefix} log`, `background: ${colors.log};${standardStyles}`, ...args);\n }\n};\n\nconst info = (...args: any[]) => {\n if (logLevel <= 1) {\n console.log(`%c${prefix} info`, `background: ${colors.info};${standardStyles}`, ...args);\n }\n};\n\n/**\n * @param error Primary, details error message or full error object\n * @param errorMessageGroup Use this to group error messages together with a string that does not vary as frequently.\n * Do not pass programId, verificationId, etc\n */\nconst error = async (\n err: Error | string,\n errorMessageGroup: string = \"unknown group\",\n additionalUsefulAttributes: { [a: string]: string } = {},\n) => {\n if (logLevel <= 4) {\n if (!err) {\n console.error(new Error(\"An error must be supplied\"));\n return;\n }\n\n let errorObj: Error | undefined;\n if (typeof err === \"string\") errorObj = new Error(err);\n if (isError(err)) errorObj = err as Error;\n if (!errorObj) errorObj = new Error(\"Unknown error\");\n\n let usefulAttributes: object = { errorMessageGroup };\n\n // #region Google Analytics\n // Include everything we can from Google Analytics' data b/c that's useful:\n try {\n const gaAttributes = await getGaAttributes();\n\n usefulAttributes = {\n ...gaAttributes,\n ...usefulAttributes,\n };\n delete (usefulAttributes as any).jslibVersionActual; // used by GA not New Relic (duplicated)\n } catch (e) {\n if (isNewRelicAvailable()) {\n (window as any).NREUM.noticeError(errorObj, usefulAttributes);\n } else {\n // Some customers can't install New Relic so this is not an error:\n warn(\"Unable to assemble GA error attributes\", e);\n }\n }\n // #endregion Google Analytics\n\n // #region App State (formerly Redux)\n try {\n const stateAttributes = getUsefulState();\n usefulAttributes = {\n ...usefulAttributes,\n ...stateAttributes,\n ...additionalUsefulAttributes,\n };\n } catch (e) {\n if (isNewRelicAvailable()) {\n (window as any).NREUM.noticeError(errorObj, usefulAttributes);\n } else {\n // Some customers can't install New Relic so this is not an error:\n warn(\"Unable to assemble useful error attributes\", e);\n }\n }\n // #endregion App State\n\n if (isNewRelicAvailable()) {\n (window as any).NREUM.noticeError(errorObj, usefulAttributes);\n }\n\n console.error(\n `%c${prefix} error`,\n `background: ${colors.error};${standardStyles}`,\n errorObj,\n usefulAttributes,\n );\n }\n};\n\nexport const newRelicPageAction = (eventName: string, attributes = {}) => {\n if (isNewRelicAvailable()) {\n (window as any).NREUM.addPageAction(eventName, attributes);\n }\n};\n\n/**\n * @deprecated Use newRelicPageAction() instead\n */\nconst logAPIResponseTime = (url: string, time: number) => {\n newRelicPageAction(\"API-calls-timing\", {\n api_call: url,\n api_response_time: time,\n });\n};\n\nexport const logger = {\n error,\n warn,\n log,\n info,\n /** @deprecated use newRelicPageAction() instead */\n logAPIResponseTime,\n setLogLevel: (desiredLogLevel: LogLevel) => {\n // @ts-ignore\n if (!logLevels.hasOwnProperty(desiredLogLevel)) {\n throw new Error(`Unknown logLevel '${desiredLogLevel}'`);\n }\n\n // @ts-ignore\n logLevel = logLevels[desiredLogLevel];\n console.log(\n `%c${prefix} log level set to ${desiredLogLevel}`,\n // @ts-ignore\n `background: ${colors[desiredLogLevel]};${standardStyles}`,\n );\n\n // Some customers can't install New Relic so this is not an error:\n if (!isNewRelicAvailable()) {\n warn(\"Offsite logging not enabled\");\n }\n },\n setPrefix: (thisPrefix: string) => {\n prefix = thisPrefix;\n },\n init: (getStateFn: () => Record<string, any>) => {\n getUsefulState = getStateFn;\n },\n};\n","import { type FieldId, type Locale } from \"./lib/types/types\";\n\nexport const DEFAULT_LOCALE: Locale = \"en-US\";\n\nexport const ACCEPTED_DOC_MIME_TYPES: string[] = [\n \"image/png\",\n \"image/jpg\",\n \"image/jpeg\",\n \"application/pdf\",\n];\n\nexport const ACCEPTED_DOC_TYPES: string[] = [\".jpg\", \".jpeg\", \".png\", \".pdf\"];\nexport const MAX_DOC_UPLOAD_DOCS_ALLOWED: number = 3;\nexport const UPLOAD_FILE_PREFIX: string = \"file\";\n\nexport const QUERY_STRING_STEP_OVERRIDE: string = \"mockStep\";\nexport const QUERY_STRING_SEGMENT_OVERRIDE: string = \"mockSegment\";\nexport const QUERY_STRING_SUBSEGMENT_OVERRIDE: string = \"mockSubSegment\";\nexport const QUERY_STRING_ERRORID_OVERRIDE: string = \"mockErrorId\";\nexport const QUERY_STRING_ERRORDETAILID_OVERRIDE: string = \"mockErrorDetailId\";\nexport const QUERY_STRING_REWARD_CODE_OVERRIDE: string = \"mockRewardCode\";\nexport const QUERY_STRING_REDIRECT_URL_OVERRIDE: string = \"mockRedirectUrl\";\nexport const QUERY_STRING_REMEMBER_ME_OVERRIDE: string = \"mockConsumerInfoState\"; // ?mockConsumerInfoState=consumerFound | consumerNotFound\nexport const QUERY_STRING_ID_CHECK_LOOP_SERVICE_TYPE_OVERRIDE: string =\n \"mockIdCheckLoopServiceType\"; // ?mockIdCheckLoopServiceType=ID_CHECK | ID_CHECK_LIVENESS\nexport const QUERY_STRING_DOC_SELECTED: string = \"mockDocSelected\"; // mock the state where a consumer as already selected a file and is about to click the \"continue\" button on the docUpload step\nexport const QUERY_STRING_PREV_STEP_OVERRIDE: string = \"mockPreviousStep\";\nexport const QUERY_STRING_THIRD_PARTY_PROVIDER_OVERRIDE: string = \"thirdPartyLoopProvider\";\nexport const QUERY_STRING_SSO_METHOD: string = \"ssoMethod\";\nexport const QUERY_STRING_INSTALL_PAGE_URL: string = \"installPageUrl\";\nexport const QUERY_STRING_INSTALL_TYPE: string = \"installType\";\nexport const QUERY_STRING_LAYOUT: string = \"layout\"; // verify app's \"?layout=landing\"\nexport const QUERY_STRING_EXTERNAL_USER_ID: string = \"externalUserId\";\nexport const QUERY_STRING_CAPTCHA_ERROR_OVERRIDE: string = \"mockCaptchaError\";\n\nexport const SSN_STRING_LENGTH: number = 9;\nexport const DEFAULT_MINIMUM_ORG_SEARCH_VALUE_LENGTH: number = 1;\n\nexport const DEFAULT_PRIVACY_POLICY_HOST = \"www.sheerid.com\";\nexport const DEFAULT_PRIVACY_POLICY_URL = \"https://www.sheerid.com/privacy-policy/\";\nexport const SHEERID = \"SheerID\";\n\nexport const FEEDBACK_FORM_URL =\n \"https://verify.sheerid.com/verification-support/feedback.html?token=\";\nexport const SUPPORT_URL = \"https://support.sheerid.com\";\n\nexport const HTTP_REQUEST_TIMEOUT = 10000;\nexport const DEBOUNCE_TIMEOUT = 200;\n\nexport const inLightbox = \"inLightbox\";\n\nexport const AUTH_TOKEN_LENGTH = 6;\n\nexport const FIELD_IDS: FieldId[] = [\n \"firstName\",\n \"lastName\",\n \"memberId\",\n \"organization\",\n \"birthDate\",\n \"email\",\n \"phoneNumber\",\n \"postalCode\",\n \"address1\",\n \"city\",\n \"state\",\n \"dischargeDate\",\n \"activeDutyStartDate\",\n \"status\",\n \"statuses\",\n \"docUpload\",\n \"country\",\n \"smsCode\",\n \"socialSecurityNumber\",\n \"marketConsentValue\",\n \"carrierConsentValue\",\n \"driverLicenseNumber\",\n \"overrideCode\",\n \"ebtCardNumber\",\n \"organizationEmail\",\n \"authenticationCode\",\n];\n","/* eslint-disable max-classes-per-file */\nexport type Unsubscribe = () => void;\n\nclass PubSub<T = unknown, F extends Function = (data: T) => void> {\n private subscribers = new Set<F>();\n\n sub(fn: F): Unsubscribe {\n this.subscribers.add(fn);\n\n return () => this.subscribers.delete(fn);\n }\n\n pub(data: T) {\n this.subscribers.forEach((fn) => fn(data));\n }\n}\n\n/**\n * List of valid event args given `K`.\n */\nexport type EventArg<T, K extends keyof T> = T[K];\n\n/**\n * An event emitter class we can use to manage hooks or other emittable data.\n * Take a type argument of shape Record<eventName, callBackData>\n *\n * A classified version of the MIT licensed https://robinpokorny.github.io/dead-simple/\n * With some type safety inspiration from https://github.com/serviejs/events\n */\nexport class EventEmitter<T> {\n private events = new Map<keyof T, PubSub>();\n\n /**\n * Registers a listener that will be called when the named event is emitted\n * @returns An unsubscribe function that will turn off this listener.\n */\n on<K extends keyof T>(name: K, fn: (data: EventArg<T, K>) => void): Unsubscribe {\n if (!this.events.has(name)) this.events.set(name, new PubSub<EventArg<T, K>>());\n\n return this.events.get(name).sub(fn);\n }\n\n /**\n * Registers a listener that will be called a single time when the named event\n * is emitted\n * @returns An unsubscribe function that will turn off this listener.\n */\n once<K extends keyof T>(name: K, fn: (data: EventArg<T, K>) => void): Unsubscribe {\n const off = this.on(name, (data: EventArg<T, K>) => {\n off();\n return fn(data);\n });\n\n return off;\n }\n\n /**\n * Removes all event listeners for the given key\n * @returns void\n */\n off<K extends keyof T>(name: K) {\n this.events.delete(name);\n }\n\n /**\n * Used to emit events to all registered hook listeners\n *\n * @private\n */\n emit<K extends keyof T>(name: K, data: EventArg<T, K>) {\n if (this.events.has(name)) {\n this.events.get(name).pub(data);\n }\n }\n}\n","export const fadeInElements = (elements: HTMLElement[]) => {\n elements.forEach((element: HTMLElement) => {\n element.classList.add(\"fade-in\");\n });\n};\n\nexport const removeElement = (element: HTMLElement, transitionTimeout: number) => {\n element.classList.remove(\"fade-in\");\n window.setTimeout(() => {\n document.body.style.overflow = \"auto\";\n element.parentNode.removeChild(element);\n }, transitionTimeout);\n};\n\nexport const getVerificationUrl = (url: string): string => {\n const newUrl = new URL(url);\n const parentUrl = new URL(window.location.href);\n\n // Combine query parameters from parent window and provided url.\n // If duplicates, provided url parameters supercede.\n parentUrl.searchParams.forEach((value, key) => {\n if (!newUrl.searchParams.has(key)) {\n newUrl.searchParams.set(key, value);\n }\n });\n\n return newUrl.href;\n};\n","const iframeClassNames = {\n INLINE_IFRAME_CONTENT: \"sid-inline-iframe\",\n MODAL_WRAPPER: \"sid-modal__wrapper\",\n MODAL_IFRAME: \"sid-modal__iframe\",\n OVERLAY: \"sid-modal__overlay\",\n CLOSE_BUTTON: \"sid-modal__close-button\",\n CLOSE_TEXT: \"sid-modal__close-text\",\n CLOSE_ICON: \"sid-modal__close-icon\",\n};\n\nexport const iframeTitle = \"SheerID Verification Form\";\n\nexport const iframeConstants = {\n CLASS_NAMES: iframeClassNames,\n DEFAULT_MOBILE_THRESHOLD_WIDTH: 620,\n MODAL_OPACITY_TRANSITION_PERIOD: 300,\n};\n","import { logger } from \"@jslib/shared/utils/logger\";\n\nimport { QUERY_STRING_INSTALL_PAGE_URL, QUERY_STRING_INSTALL_TYPE } from \"../../constants\";\nimport { type InstallPageEvent } from \"../frames/frameMessages\";\nimport type { HookEvents, Options, PostMessageAction, ViewModel } from \"../types/types\";\nimport { EventEmitter } from \"../hooks/eventEmitter\";\n\nimport { getVerificationUrl } from \"./utils\";\nimport { iframeConstants as constants, iframeTitle } from \"./constants\";\n\nexport type IframeOptions = {\n className: string;\n title: string;\n};\n\nexport const DEFAULT_OPTIONS: IframeOptions = {\n className: constants.CLASS_NAMES.INLINE_IFRAME_CONTENT,\n title: iframeTitle,\n};\n\nexport const assertValidFunction = (candidate: Function) => {\n if (typeof candidate !== \"function\") {\n throw new Error(`Expected type \"function\", but received ${typeof candidate}`);\n }\n};\n\nclass Iframe extends EventEmitter<HookEvents> {\n containerElement: HTMLElement;\n\n verificationUrl: URL;\n\n isMobileDevice: boolean;\n\n iframe: HTMLIFrameElement;\n\n verificationIframeUid: string;\n\n locale: string;\n\n hasLoaded: boolean = false;\n\n onLoadEvents: Function[] = [];\n\n onCleanupEvents: (() => void)[] = [];\n\n installType = \"cdn_inline_iframe\";\n\n constructor(containerElement: HTMLElement, url: string) {\n super();\n\n if (Iframe.isValidHttpUrl(url)) {\n this.containerElement = containerElement;\n this.verificationUrl = new URL(getVerificationUrl(url));\n this.verificationIframeUid = Iframe.createUniqueId();\n } else {\n logger.error(\"Invalid URL. Provide a proper URL: https://example.com/\", \"iframe url\");\n }\n }\n\n cleanup(): void {\n this.onCleanupEvents.forEach((callback) => callback());\n }\n\n static createUniqueId(): string {\n return Math.random().toString(36).substr(2, 9);\n }\n\n static isValidHttpUrl(urlString: string): boolean {\n try {\n const url = new URL(urlString);\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n } catch {\n return false;\n }\n }\n\n createIframe(options: IframeOptions): HTMLIFrameElement {\n this.iframe = document.createElement(\"iframe\");\n this.iframe.classList.add(options.className);\n this.iframe.title = options.title;\n this.iframe.src = this.getIframeUrl();\n this.iframe.allow = \"camera *;microphone *;geolocation *;clipboard-read *;clipboard-write *\";\n this.iframe.onload = () => this.onLoad();\n return this.iframe;\n }\n\n getIframeUrl(): string {\n const url = new URL(this.verificationUrl);\n url.searchParams.set(\"verificationIframeUid\", this.verificationIframeUid);\n url.searchParams.set(QUERY_STRING_INSTALL_PAGE_URL, window.location.href);\n url.searchParams.set(QUERY_STRING_INSTALL_TYPE, this.installType);\n if (this.locale) {\n url.searchParams.set(\"locale\", this.locale);\n }\n return url.toString();\n }\n\n // If iFrame hasn't loaded yet, queue up the callback\n // otherwise call it immediately\n addOnLoadEvent(callback: Function) {\n try {\n assertValidFunction(callback);\n } catch (e) {\n logger.error(\"Invalid callback provided to iFrame.onLoad()\", \"iframe addOnLoadEvent\");\n return;\n }\n if (this.hasLoaded) {\n callback();\n } else {\n this.onLoadEvents.push(callback);\n }\n }\n\n onLoad() {\n this.hasLoaded = true;\n this.onLoadEvents.forEach((callback) => callback());\n }\n\n /**\n * Using this to add parent window message listeners gives us\n * - Event Cleanup for modals\n * - verification of origin, verificationIframeUid, and message data structure\n */\n addWindowMessageListener(actionCb: (action: PostMessageAction) => void): void {\n const listener = (ev: MessageEvent) => {\n if (this.verificationUrl.origin !== ev.origin) {\n return;\n }\n\n if (ev.data.verificationIframeUid !== this.verificationIframeUid) {\n return;\n }\n\n if (ev.data.action && ev.data.action.type) {\n actionCb(ev.data.action);\n } else if (ev.data.action && ev.data.height) {\n // Older versions of the jslib send the full action object as the message\n actionCb(ev.data);\n }\n };\n\n window.addEventListener(\"message\", listener);\n this.onCleanupEvents.push(() => window.removeEventListener(\"message\", listener));\n }\n\n addActionListener() {\n this.addWindowMessageListener((messageAction) => {\n if (messageAction.type === \"hook\") {\n this.emit(messageAction.hook.name, messageAction.hook.data);\n }\n\n if (\n (messageAction.action && messageAction.action === \"updateHeight\") ||\n messageAction.type === \"updateHeight\"\n ) {\n // UX-1129: If we are getting height updates, turn off scrolling for\n // the iframe. This prevents browsers (Safari in particular) from\n // re-wrapping because of different widths and constantly changing\n // it's own height. `scrolling = \"no\"` is deprecated, but supported in\n // all browsers and fixes the problem well.\n this.iframe.scrolling = \"no\";\n this.iframe.style.height = `${messageAction.height}px`;\n }\n });\n }\n\n setViewModel(viewModel: Partial<ViewModel> | ViewModel) {\n const message: InstallPageEvent = {\n action: \"setViewModel\",\n viewModel,\n };\n\n this.addOnLoadEvent(() => {\n this.iframe.contentWindow.postMessage(message, this.verificationUrl.origin);\n });\n }\n\n setOptions(options: Options) {\n const message: InstallPageEvent = {\n action: \"setOptions\",\n options,\n };\n\n // HC-1181: Special casing options.locale to set locale as as QSP if the frame hasn't fully loaded yet.\n // This causes a re-load, but in most cases would happen within milliseconds of the frame initialization.\n // It prevents the race conditions that were failing to set the locale properly on load.\n // If the associated playwright tests passes without this is can be removed.\n if (!this.hasLoaded && options.locale) {\n this.locale = options.locale;\n const newUrl = this.getIframeUrl();\n if (newUrl !== this.iframe.src) {\n this.iframe.src = newUrl;\n }\n }\n\n this.addOnLoadEvent(() => {\n this.iframe.contentWindow.postMessage(message, this.verificationUrl.origin);\n });\n }\n\n setInstallType(installType: string) {\n this.installType = installType;\n }\n\n init(createIframe: boolean = true): void {\n if (createIframe) {\n this.createIframe(DEFAULT_OPTIONS);\n }\n\n this.addActionListener();\n this.containerElement.appendChild(this.iframe);\n }\n}\n\nexport default Iframe;\n","import type { PostMessageAction } from \"../types/types\";\n\nimport Iframe, { DEFAULT_OPTIONS, type IframeOptions } from \"./iframe\";\n\nexport const assertValidFunction = (candidate: Function) => {\n if (typeof candidate !== \"function\") {\n throw new Error(`Expected type \"function\", but received ${typeof candidate}`);\n }\n};\n\nclass AffinityIFrame extends Iframe {\n constructor(containerElement: HTMLElement, url: string) {\n super(containerElement, url);\n this.verificationUrl = new URL(this.getAffinityUrlWithUID(url));\n }\n\n static createUniqueId() {\n return Math.random().toString(36).substr(2, 9);\n }\n\n getAffinityUrlWithUID(url: string): string {\n const urlObj = new URL(url);\n urlObj.searchParams.set(\"affinityIframeUid\", this.verificationIframeUid);\n return urlObj.toString();\n }\n\n override addWindowMessageListener(actionCb: (action: PostMessageAction) => void): void {\n const listener = (ev: MessageEvent) => {\n if (this.verificationUrl.origin !== ev.origin) {\n return;\n }\n\n if (ev.data.affinityIframeUid !== this.verificationIframeUid) {\n return;\n }\n\n if (ev.data.action && ev.data.action.type) {\n actionCb(ev.data.action);\n }\n };\n\n window.addEventListener(\"message\", listener);\n this.onCleanupEvents.push(() => window.removeEventListener(\"message\", listener));\n }\n\n override createIframe(options: IframeOptions): HTMLIFrameElement {\n this.iframe = document.createElement(\"iframe\");\n this.iframe.classList.add(options.className);\n this.iframe.title = options.title;\n this.iframe.src = this.verificationUrl.href;\n this.iframe.allow = \"camera;microphone\";\n this.iframe.onload = () => this.onLoad();\n return this.iframe;\n }\n\n override init() {\n this.createIframe({ ...DEFAULT_OPTIONS, title: \"SheerID Affinity Offers\" });\n this.addActionListener();\n this.containerElement.appendChild(this.iframe);\n }\n}\n\nexport default AffinityIFrame;\n","import { type IframeUserConfiguration, type Options, type ViewModel } from \"../types/types\";\n\nimport { iframeConstants as constants, iframeTitle } from \"./constants\";\nimport Iframe from \"./iframe\";\nimport { fadeInElements, removeElement, getVerificationUrl } from \"./utils\";\n\nclass Modal {\n verificationUrl: string;\n\n redirectOnMobile: boolean;\n\n overlay: HTMLElement;\n\n wrapper: HTMLElement;\n\n iframeInstance: Iframe;\n\n on: typeof this.iframeInstance.on;\n\n once: typeof this.iframeInstance.once;\n\n isMobileDevice: boolean;\n\n closeButtonText: string;\n\n closeButton: HTMLButtonElement;\n\n stopPropagation: boolean;\n\n constructor(url: string, userConfig: IframeUserConfiguration) {\n const thresholdConfig = userConfig.mobileThreshold\n ? userConfig.mobileThreshold\n : constants.DEFAULT_MOBILE_THRESHOLD_WIDTH;\n this.verificationUrl = getVerificationUrl(url);\n this.redirectOnMobile = userConfig.mobileRedirect || false;\n this.isMobileDevice = window.document.body.clientWidth <= Number(thresholdConfig);\n this.closeButtonText = userConfig.closeButtonText ? userConfig.closeButtonText : \"\";\n this.closeButton = null;\n this.stopPropagation = userConfig.stopPropagation || false;\n this.overlay = Modal.createOverlay();\n this.wrapper = this.createWrapper();\n this.addFocusListener();\n }\n\n createCloseBtn() {\n this.closeButton = document.createElement(\"button\");\n this.closeButton.classList.add(constants.CLASS_NAMES.CLOSE_BUTTON);\n this.closeButton.setAttribute(\"aria-label\", \"close\");\n\n if (this.closeButtonText) {\n const closeTxt = document.createElement(\"div\");\n closeTxt.classList.add(constants.CLASS_NAMES.CLOSE_TEXT);\n closeTxt.innerHTML = this.closeButtonText;\n this.closeButton.appendChild(closeTxt);\n }\n\n const closeIcon = document.createElement(\"span\");\n closeIcon.classList.add(constants.CLASS_NAMES.CLOSE_ICON);\n closeIcon.setAttribute(\"role\", \"img\");\n this.closeButton.appendChild(closeIcon);\n\n this.closeButton.addEventListener(\"click\", (e) => {\n e.preventDefault();\n if (this.stopPropagation) {\n e.stopPropagation();\n }\n this.closeModal();\n });\n return this.closeButton;\n }\n\n closeModal() {\n window.removeEventListener(\"popstate\", this.popStateEventHandler);\n const transitionTimeout = constants.MODAL_OPACITY_TRANSITION_PERIOD;\n removeElement(this.overlay, transitionTimeout);\n removeElement(this.wrapper, transitionTimeout);\n this.iframeInstance.cleanup();\n }\n\n static createOverlay(): HTMLElement {\n const overlay = document.createElement(\"div\");\n overlay.classList.add(constants.CLASS_NAMES.OVERLAY);\n return overlay;\n }\n\n createWrapper(): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.classList.add(constants.CLASS_NAMES.MODAL_WRAPPER);\n wrapper.tabIndex = -1;\n wrapper.setAttribute(\"role\", \"dialog\");\n wrapper.appendChild(this.createCloseBtn());\n\n this.iframeInstance = new Iframe(wrapper, this.verificationUrl);\n this.iframeInstance.setInstallType(\"cdn_modal_iframe\");\n\n // pass `on` & `once` through to the iframe instance to allow hook listeners.\n this.on = this.iframeInstance.on.bind(this.iframeInstance);\n this.once = this.iframeInstance.once.bind(this.iframeInstance);\n\n const options = {\n className: constants.CLASS_NAMES.MODAL_IFRAME,\n title: iframeTitle,\n };\n this.iframeInstance.createIframe(options);\n wrapper.appendChild(this.iframeInstance.iframe);\n return wrapper;\n }\n\n popStateEventHandler = () => this.closeModal();\n\n addPopStateListener() {\n window.addEventListener(\"popstate\", this.popStateEventHandler);\n }\n\n addFocusListener() {\n this.iframeInstance.addWindowMessageListener((action) => {\n if (action.type === \"focus\" && action.focusOn === \"firstElement\") {\n this.closeButton.focus();\n }\n });\n\n document.addEventListener(\"keydown\", (e) => {\n const isTabPressed: boolean = e.key === \"Tab\";\n if (!isTabPressed) {\n return;\n }\n if (e.shiftKey && document.activeElement === this.closeButton) {\n this.iframeInstance.iframe.contentWindow.postMessage({ focusOn: \"lastElement\" }, \"*\");\n e.preventDefault();\n }\n });\n }\n\n isInLightboxPostMessage(inLightbox: string) {\n this.iframeInstance.iframe.contentWindow.postMessage({ isInLightBox: inLightbox }, \"*\");\n }\n\n displayModal() {\n this.iframeInstance.iframe.addEventListener(\"load\", () => {\n fadeInElements([this.overlay, this.wrapper]);\n document.body.style.overflow = \"hidden\";\n this.isInLightboxPostMessage(\"true\");\n });\n\n document.body.appendChild(this.overlay);\n document.body.appendChild(this.wrapper);\n this.addPopStateListener();\n }\n\n init() {\n if (this.redirectOnMobile && this.isMobileDevice) {\n window.top.location.href = this.verificationUrl;\n } else {\n this.displayModal();\n this.iframeInstance.init(false); // false so we don't create iframe again, it's already created in createWrapper\n }\n }\n\n setViewModel(viewModel: Partial<ViewModel> | ViewModel) {\n this.iframeInstance.setViewModel(viewModel);\n }\n\n setOptions(options: Options) {\n this.iframeInstance.setOptions(options);\n }\n}\n\nexport default Modal;\n","import { type IframeUserConfiguration } from \"../types/types\";\n\nimport AffinityIFrame from \"./affinity\";\nimport Iframe from \"./iframe\";\nimport Modal from \"./modal\";\n\nimport \"../../scss/sheerid-iframe.scss\";\n\n// Called from the parent page to load the jslib within an iFrame NOT in a modal, but in the flow of a page. e.g. between two divs\nexport function loadInlineIframe(containerElement: HTMLElement, url: string): Iframe {\n const iframe = new Iframe(containerElement, url);\n iframe.init();\n return iframe;\n}\n\n// Called from the parent page to load the jslib within an iFrame in a modal\nexport function loadInModal(url: string, userConfig: IframeUserConfiguration = {}) {\n const modal = new Modal(url, userConfig);\n modal.init();\n return modal;\n}\n\nexport function loadAffinityIFrame(containerElement: HTMLElement, url: string): AffinityIFrame {\n const affinity = new AffinityIFrame(containerElement, url);\n affinity.init();\n return affinity;\n}\n\n// Explicitly excluding loadAffinityIFrame from the default export until it becomes GA\nexport default { loadInModal, loadInlineIframe };\n"],"names":["_attrCache","getGaAttributes","doNotTrack","isNewRelicAvailable","logLevel","prefix","logLevels","colors","standardStyles","getUsefulState","isError","e","warn","args","log","info","error","err","errorMessageGroup","additionalUsefulAttributes","errorObj","usefulAttributes","stateAttributes","newRelicPageAction","eventName","attributes","logAPIResponseTime","url","time","logger","desiredLogLevel","thisPrefix","getStateFn","QUERY_STRING_INSTALL_PAGE_URL","QUERY_STRING_INSTALL_TYPE","PubSub","fn","data","EventEmitter","name","off","fadeInElements","elements","element","removeElement","transitionTimeout","getVerificationUrl","newUrl","value","key","iframeClassNames","iframeTitle","iframeConstants","DEFAULT_OPTIONS","constants","assertValidFunction","candidate","Iframe","containerElement","callback","urlString","options","actionCb","listener","ev","messageAction","viewModel","message","installType","createIframe","AffinityIFrame","urlObj","Modal","userConfig","thresholdConfig","closeTxt","closeIcon","overlay","wrapper","action","inLightbox","loadInlineIframe","iframe","loadInModal","modal","loadAffinityIFrame","affinity","index"],"mappings":"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"}
1
+ {"version":3,"file":"sheerid-install.js","sources":["../../packages/shared/src/utils/gaHelpers.ts","../../packages/shared/src/utils/logger/logger.ts","../src/constants.ts","../src/lib/hooks/eventEmitter.ts","../src/lib/installScript/utils.ts","../src/lib/installScript/constants.ts","../src/lib/installScript/iframe.ts","../src/lib/installScript/modal.ts","../src/lib/installScript/index.ts"],"sourcesContent":["//\n// NOTE this file is high risk for circular dependencies! Avoid imports, or double check that they don't create circular deps\n//\n\nimport type { NavigatorBeta } from \"../types/runtimeTypes\";\n\n/**\n * A singleton to allow access to user properties that we've set on GA without\n * querying GA directly. This is primarily used to also send them to New Relic.\n */\nconst _attrCache: Record<string, unknown> = {};\n\nexport const setGaAttributes = (attrs: Record<string, unknown>): void =>\n Object.entries(attrs).forEach(([k, v]) => {\n _attrCache[k] = v;\n });\n\nexport const getGaAttributes = async (): Promise<object> => _attrCache;\n\nexport const doNotTrack = () => (window.navigator as NavigatorBeta).globalPrivacyControl;\n\nexport const isNewRelicAvailable = () => (window as any).NREUM && !doNotTrack();\n","/* eslint no-console:0 */\n// ~~~ This file and its tests are the only files that should disable \"no-console\" ~~~\n\nimport { getGaAttributes, isNewRelicAvailable } from \"../gaHelpers\";\n\nexport type LogLevel = \"info\" | \"log\" | \"warn\" | \"error\" | \"silent\";\n\nlet logLevel = 4; // default\nlet prefix = \"\";\nconst logLevels = {\n info: 1,\n log: 2,\n warn: 3,\n error: 4,\n silent: 5,\n};\n\nconst colors = {\n info: \"#26c1db\",\n log: \"#09f979\",\n warn: \"#f6b13f\",\n error: \"#e12046\",\n};\n\nconst standardStyles = \"color: white; font-weight: bold; padding: 2px 10px;\";\n\nlet getUsefulState: () => Record<string, any> = () => ({});\n\nconst isError = (e: any) => e && e.stack && e.message;\n\nconst warn = (...args: any[]) => {\n if (logLevel <= 3) {\n console.warn(`%c${prefix} warn`, `background: ${colors.warn};${standardStyles}`, ...args);\n }\n};\n\nconst log = (...args: any[]) => {\n if (logLevel <= 2) {\n console.log(`%c${prefix} log`, `background: ${colors.log};${standardStyles}`, ...args);\n }\n};\n\nconst info = (...args: any[]) => {\n if (logLevel <= 1) {\n console.log(`%c${prefix} info`, `background: ${colors.info};${standardStyles}`, ...args);\n }\n};\n\n/**\n * @param error Primary, details error message or full error object\n * @param errorMessageGroup Use this to group error messages together with a string that does not vary as frequently.\n * Do not pass programId, verificationId, etc\n */\nconst error = async (\n err: Error | string,\n errorMessageGroup: string = \"unknown group\",\n additionalUsefulAttributes: { [a: string]: string } = {},\n) => {\n if (logLevel <= 4) {\n if (!err) {\n console.error(new Error(\"An error must be supplied\"));\n return;\n }\n\n let errorObj: Error | undefined;\n if (typeof err === \"string\") errorObj = new Error(err);\n if (isError(err)) errorObj = err as Error;\n if (!errorObj) errorObj = new Error(\"Unknown error\");\n\n let usefulAttributes: object = { errorMessageGroup };\n\n // #region Google Analytics\n // Include everything we can from Google Analytics' data b/c that's useful:\n try {\n const gaAttributes = await getGaAttributes();\n\n usefulAttributes = {\n ...gaAttributes,\n ...usefulAttributes,\n };\n delete (usefulAttributes as any).jslibVersionActual; // used by GA not New Relic (duplicated)\n } catch (e) {\n if (isNewRelicAvailable()) {\n (window as any).NREUM.noticeError(errorObj, usefulAttributes);\n } else {\n // Some customers can't install New Relic so this is not an error:\n warn(\"Unable to assemble GA error attributes\", e);\n }\n }\n // #endregion Google Analytics\n\n // #region App State (formerly Redux)\n try {\n const stateAttributes = getUsefulState();\n usefulAttributes = {\n ...usefulAttributes,\n ...stateAttributes,\n ...additionalUsefulAttributes,\n };\n } catch (e) {\n if (isNewRelicAvailable()) {\n (window as any).NREUM.noticeError(errorObj, usefulAttributes);\n } else {\n // Some customers can't install New Relic so this is not an error:\n warn(\"Unable to assemble useful error attributes\", e);\n }\n }\n // #endregion App State\n\n if (isNewRelicAvailable()) {\n (window as any).NREUM.noticeError(errorObj, usefulAttributes);\n }\n\n console.error(\n `%c${prefix} error`,\n `background: ${colors.error};${standardStyles}`,\n errorObj,\n usefulAttributes,\n );\n }\n};\n\nexport const newRelicPageAction = (eventName: string, attributes = {}) => {\n if (isNewRelicAvailable()) {\n (window as any).NREUM.addPageAction(eventName, attributes);\n }\n};\n\n/**\n * @deprecated Use newRelicPageAction() instead\n */\nconst logAPIResponseTime = (url: string, time: number) => {\n newRelicPageAction(\"API-calls-timing\", {\n api_call: url,\n api_response_time: time,\n });\n};\n\nexport const logger = {\n error,\n warn,\n log,\n info,\n /** @deprecated use newRelicPageAction() instead */\n logAPIResponseTime,\n setLogLevel: (desiredLogLevel: LogLevel) => {\n // @ts-ignore\n if (!logLevels.hasOwnProperty(desiredLogLevel)) {\n throw new Error(`Unknown logLevel '${desiredLogLevel}'`);\n }\n\n // @ts-ignore\n logLevel = logLevels[desiredLogLevel];\n console.log(\n `%c${prefix} log level set to ${desiredLogLevel}`,\n // @ts-ignore\n `background: ${colors[desiredLogLevel]};${standardStyles}`,\n );\n\n // Some customers can't install New Relic so this is not an error:\n if (!isNewRelicAvailable()) {\n warn(\"Offsite logging not enabled\");\n }\n },\n setPrefix: (thisPrefix: string) => {\n prefix = thisPrefix;\n },\n init: (getStateFn: () => Record<string, any>) => {\n getUsefulState = getStateFn;\n },\n};\n","import { type FieldId, type Locale } from \"./lib/types/types\";\n\nexport const DEFAULT_LOCALE: Locale = \"en-US\";\n\nexport const ACCEPTED_DOC_MIME_TYPES: string[] = [\n \"image/png\",\n \"image/jpg\",\n \"image/jpeg\",\n \"application/pdf\",\n];\n\nexport const ACCEPTED_DOC_TYPES: string[] = [\".jpg\", \".jpeg\", \".png\", \".pdf\"];\nexport const MAX_DOC_UPLOAD_DOCS_ALLOWED: number = 3;\nexport const UPLOAD_FILE_PREFIX: string = \"file\";\n\nexport const QUERY_STRING_STEP_OVERRIDE: string = \"mockStep\";\nexport const QUERY_STRING_SEGMENT_OVERRIDE: string = \"mockSegment\";\nexport const QUERY_STRING_SUBSEGMENT_OVERRIDE: string = \"mockSubSegment\";\nexport const QUERY_STRING_ERRORID_OVERRIDE: string = \"mockErrorId\";\nexport const QUERY_STRING_ERRORDETAILID_OVERRIDE: string = \"mockErrorDetailId\";\nexport const QUERY_STRING_REWARD_CODE_OVERRIDE: string = \"mockRewardCode\";\nexport const QUERY_STRING_REDIRECT_URL_OVERRIDE: string = \"mockRedirectUrl\";\nexport const QUERY_STRING_REMEMBER_ME_OVERRIDE: string = \"mockConsumerInfoState\"; // ?mockConsumerInfoState=consumerFound | consumerNotFound\nexport const QUERY_STRING_ID_CHECK_LOOP_SERVICE_TYPE_OVERRIDE: string =\n \"mockIdCheckLoopServiceType\"; // ?mockIdCheckLoopServiceType=ID_CHECK | ID_CHECK_LIVENESS\nexport const QUERY_STRING_DOC_SELECTED: string = \"mockDocSelected\"; // mock the state where a consumer as already selected a file and is about to click the \"continue\" button on the docUpload step\nexport const QUERY_STRING_PREV_STEP_OVERRIDE: string = \"mockPreviousStep\";\nexport const QUERY_STRING_THIRD_PARTY_PROVIDER_OVERRIDE: string = \"thirdPartyLoopProvider\";\nexport const QUERY_STRING_SSO_METHOD: string = \"ssoMethod\";\nexport const QUERY_STRING_INSTALL_PAGE_URL: string = \"installPageUrl\";\nexport const QUERY_STRING_INSTALL_TYPE: string = \"installType\";\nexport const QUERY_STRING_LAYOUT: string = \"layout\"; // verify app's \"?layout=landing\"\nexport const QUERY_STRING_EXTERNAL_USER_ID: string = \"externalUserId\";\nexport const QUERY_STRING_CAPTCHA_ERROR_OVERRIDE: string = \"mockCaptchaError\";\n\nexport const SSN_STRING_LENGTH: number = 9;\nexport const DEFAULT_MINIMUM_ORG_SEARCH_VALUE_LENGTH: number = 1;\n\nexport const DEFAULT_PRIVACY_POLICY_HOST = \"www.sheerid.com\";\nexport const DEFAULT_PRIVACY_POLICY_URL = \"https://www.sheerid.com/privacy-policy/\";\nexport const SHEERID = \"SheerID\";\n\nexport const FEEDBACK_FORM_URL =\n \"https://verify.sheerid.com/verification-support/feedback.html?token=\";\nexport const SUPPORT_URL = \"https://support.sheerid.com\";\n\nexport const HTTP_REQUEST_TIMEOUT = 10000;\nexport const DEBOUNCE_TIMEOUT = 200;\n\nexport const inLightbox = \"inLightbox\";\n\nexport const AUTH_TOKEN_LENGTH = 6;\n\nexport const FIELD_IDS: FieldId[] = [\n \"firstName\",\n \"lastName\",\n \"memberId\",\n \"organization\",\n \"birthDate\",\n \"email\",\n \"phoneNumber\",\n \"postalCode\",\n \"address1\",\n \"city\",\n \"state\",\n \"dischargeDate\",\n \"activeDutyStartDate\",\n \"status\",\n \"statuses\",\n \"docUpload\",\n \"country\",\n \"smsCode\",\n \"socialSecurityNumber\",\n \"marketConsentValue\",\n \"carrierConsentValue\",\n \"driverLicenseNumber\",\n \"overrideCode\",\n \"ebtCardNumber\",\n \"organizationEmail\",\n \"authenticationCode\",\n];\n","/* eslint-disable max-classes-per-file */\nexport type Unsubscribe = () => void;\n\nclass PubSub<T = unknown, F extends Function = (data: T) => void> {\n private subscribers = new Set<F>();\n\n sub(fn: F): Unsubscribe {\n this.subscribers.add(fn);\n\n return () => this.subscribers.delete(fn);\n }\n\n pub(data: T) {\n this.subscribers.forEach((fn) => fn(data));\n }\n}\n\n/**\n * List of valid event args given `K`.\n */\nexport type EventArg<T, K extends keyof T> = T[K];\n\n/**\n * An event emitter class we can use to manage hooks or other emittable data.\n * Take a type argument of shape Record<eventName, callBackData>\n *\n * A classified version of the MIT licensed https://robinpokorny.github.io/dead-simple/\n * With some type safety inspiration from https://github.com/serviejs/events\n */\nexport class EventEmitter<T> {\n private events = new Map<keyof T, PubSub>();\n\n /**\n * Registers a listener that will be called when the named event is emitted\n * @returns An unsubscribe function that will turn off this listener.\n */\n on<K extends keyof T>(name: K, fn: (data: EventArg<T, K>) => void): Unsubscribe {\n if (!this.events.has(name)) this.events.set(name, new PubSub<EventArg<T, K>>());\n\n return this.events.get(name).sub(fn);\n }\n\n /**\n * Registers a listener that will be called a single time when the named event\n * is emitted\n * @returns An unsubscribe function that will turn off this listener.\n */\n once<K extends keyof T>(name: K, fn: (data: EventArg<T, K>) => void): Unsubscribe {\n const off = this.on(name, (data: EventArg<T, K>) => {\n off();\n return fn(data);\n });\n\n return off;\n }\n\n /**\n * Removes all event listeners for the given key\n * @returns void\n */\n off<K extends keyof T>(name: K) {\n this.events.delete(name);\n }\n\n /**\n * Used to emit events to all registered hook listeners\n *\n * @private\n */\n emit<K extends keyof T>(name: K, data: EventArg<T, K>) {\n if (this.events.has(name)) {\n this.events.get(name).pub(data);\n }\n }\n}\n","export const fadeInElements = (elements: HTMLElement[]) => {\n elements.forEach((element: HTMLElement) => {\n element.classList.add(\"fade-in\");\n });\n};\n\nexport const removeElement = (element: HTMLElement, transitionTimeout: number) => {\n element.classList.remove(\"fade-in\");\n window.setTimeout(() => {\n document.body.style.overflow = \"auto\";\n element.parentNode.removeChild(element);\n }, transitionTimeout);\n};\n\nexport const getVerificationUrl = (url: string): string => {\n const newUrl = new URL(url);\n const parentUrl = new URL(window.location.href);\n\n // Combine query parameters from parent window and provided url.\n // If duplicates, provided url parameters supercede.\n parentUrl.searchParams.forEach((value, key) => {\n if (!newUrl.searchParams.has(key)) {\n newUrl.searchParams.set(key, value);\n }\n });\n\n return newUrl.href;\n};\n","const iframeClassNames = {\n INLINE_IFRAME_CONTENT: \"sid-inline-iframe\",\n MODAL_WRAPPER: \"sid-modal__wrapper\",\n MODAL_IFRAME: \"sid-modal__iframe\",\n OVERLAY: \"sid-modal__overlay\",\n CLOSE_BUTTON: \"sid-modal__close-button\",\n CLOSE_TEXT: \"sid-modal__close-text\",\n CLOSE_ICON: \"sid-modal__close-icon\",\n};\n\nexport const iframeTitle = \"SheerID Verification Form\";\n\nexport const iframeConstants = {\n CLASS_NAMES: iframeClassNames,\n DEFAULT_MOBILE_THRESHOLD_WIDTH: 620,\n MODAL_OPACITY_TRANSITION_PERIOD: 300,\n};\n","import { logger } from \"@jslib/shared/utils/logger\";\n\nimport { QUERY_STRING_INSTALL_PAGE_URL, QUERY_STRING_INSTALL_TYPE } from \"../../constants\";\nimport { type InstallPageEvent } from \"../frames/frameMessages\";\nimport type { HookEvents, Options, PostMessageAction, ViewModel } from \"../types/types\";\nimport { EventEmitter } from \"../hooks/eventEmitter\";\n\nimport { getVerificationUrl } from \"./utils\";\nimport { iframeConstants as constants, iframeTitle } from \"./constants\";\n\nexport type IframeOptions = {\n className: string;\n title: string;\n};\n\nexport const DEFAULT_OPTIONS: IframeOptions = {\n className: constants.CLASS_NAMES.INLINE_IFRAME_CONTENT,\n title: iframeTitle,\n};\n\nexport const assertValidFunction = (candidate: Function) => {\n if (typeof candidate !== \"function\") {\n throw new Error(`Expected type \"function\", but received ${typeof candidate}`);\n }\n};\n\nclass Iframe extends EventEmitter<HookEvents> {\n containerElement: HTMLElement;\n\n verificationUrl: URL;\n\n isMobileDevice: boolean;\n\n iframe: HTMLIFrameElement;\n\n verificationIframeUid: string;\n\n locale: string;\n\n hasLoaded: boolean = false;\n\n onLoadEvents: Function[] = [];\n\n onCleanupEvents: (() => void)[] = [];\n\n installType = \"cdn_inline_iframe\";\n\n constructor(containerElement: HTMLElement, url: string) {\n super();\n\n if (Iframe.isValidHttpUrl(url)) {\n this.containerElement = containerElement;\n this.verificationUrl = new URL(getVerificationUrl(url));\n this.verificationIframeUid = Iframe.createUniqueId();\n } else {\n logger.error(\"Invalid URL. Provide a proper URL: https://example.com/\", \"iframe url\");\n }\n }\n\n cleanup(): void {\n this.onCleanupEvents.forEach((callback) => callback());\n }\n\n static createUniqueId(): string {\n return Math.random().toString(36).substr(2, 9);\n }\n\n static isValidHttpUrl(urlString: string): boolean {\n try {\n const url = new URL(urlString);\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n } catch {\n return false;\n }\n }\n\n createIframe(options: IframeOptions): HTMLIFrameElement {\n this.iframe = document.createElement(\"iframe\");\n this.iframe.classList.add(options.className);\n this.iframe.title = options.title;\n this.iframe.src = this.getIframeUrl();\n this.iframe.allow = \"camera *;microphone *;geolocation *;clipboard-read *;clipboard-write *\";\n this.iframe.onload = () => this.onLoad();\n return this.iframe;\n }\n\n getIframeUrl(): string {\n const url = new URL(this.verificationUrl);\n url.searchParams.set(\"verificationIframeUid\", this.verificationIframeUid);\n url.searchParams.set(QUERY_STRING_INSTALL_PAGE_URL, window.location.href);\n url.searchParams.set(QUERY_STRING_INSTALL_TYPE, this.installType);\n if (this.locale) {\n url.searchParams.set(\"locale\", this.locale);\n }\n return url.toString();\n }\n\n // If iFrame hasn't loaded yet, queue up the callback\n // otherwise call it immediately\n addOnLoadEvent(callback: Function) {\n try {\n assertValidFunction(callback);\n } catch (e) {\n logger.error(\"Invalid callback provided to iFrame.onLoad()\", \"iframe addOnLoadEvent\");\n return;\n }\n if (this.hasLoaded) {\n callback();\n } else {\n this.onLoadEvents.push(callback);\n }\n }\n\n onLoad() {\n this.hasLoaded = true;\n this.onLoadEvents.forEach((callback) => callback());\n }\n\n /**\n * Using this to add parent window message listeners gives us\n * - Event Cleanup for modals\n * - verification of origin, verificationIframeUid, and message data structure\n */\n addWindowMessageListener(actionCb: (action: PostMessageAction) => void): void {\n const listener = (ev: MessageEvent) => {\n if (this.verificationUrl.origin !== ev.origin) {\n return;\n }\n\n if (ev.data.verificationIframeUid !== this.verificationIframeUid) {\n return;\n }\n\n if (ev.data.action && ev.data.action.type) {\n actionCb(ev.data.action);\n } else if (ev.data.action && ev.data.height) {\n // Older versions of the jslib send the full action object as the message\n actionCb(ev.data);\n }\n };\n\n window.addEventListener(\"message\", listener);\n this.onCleanupEvents.push(() => window.removeEventListener(\"message\", listener));\n }\n\n addActionListener() {\n this.addWindowMessageListener((messageAction) => {\n if (messageAction.type === \"hook\") {\n this.emit(messageAction.hook.name, messageAction.hook.data);\n }\n\n if (\n (messageAction.action && messageAction.action === \"updateHeight\") ||\n messageAction.type === \"updateHeight\"\n ) {\n // UX-1129: If we are getting height updates, turn off scrolling for\n // the iframe. This prevents browsers (Safari in particular) from\n // re-wrapping because of different widths and constantly changing\n // it's own height. `scrolling = \"no\"` is deprecated, but supported in\n // all browsers and fixes the problem well.\n this.iframe.scrolling = \"no\";\n this.iframe.style.height = `${messageAction.height}px`;\n }\n });\n }\n\n setViewModel(viewModel: Partial<ViewModel> | ViewModel) {\n const message: InstallPageEvent = {\n action: \"setViewModel\",\n viewModel,\n };\n\n this.addOnLoadEvent(() => {\n this.iframe.contentWindow.postMessage(message, this.verificationUrl.origin);\n });\n }\n\n setOptions(options: Options) {\n const message: InstallPageEvent = {\n action: \"setOptions\",\n options,\n };\n\n // HC-1181: Special casing options.locale to set locale as as QSP if the frame hasn't fully loaded yet.\n // This causes a re-load, but in most cases would happen within milliseconds of the frame initialization.\n // It prevents the race conditions that were failing to set the locale properly on load.\n // If the associated playwright tests passes without this is can be removed.\n if (!this.hasLoaded && options.locale) {\n this.locale = options.locale;\n const newUrl = this.getIframeUrl();\n if (newUrl !== this.iframe.src) {\n this.iframe.src = newUrl;\n }\n }\n\n this.addOnLoadEvent(() => {\n this.iframe.contentWindow.postMessage(message, this.verificationUrl.origin);\n });\n }\n\n setInstallType(installType: string) {\n this.installType = installType;\n }\n\n init(createIframe: boolean = true): void {\n if (createIframe) {\n this.createIframe(DEFAULT_OPTIONS);\n }\n\n this.addActionListener();\n this.containerElement.appendChild(this.iframe);\n }\n}\n\nexport default Iframe;\n","import { type IframeUserConfiguration, type Options, type ViewModel } from \"../types/types\";\n\nimport { iframeConstants as constants, iframeTitle } from \"./constants\";\nimport Iframe from \"./iframe\";\nimport { fadeInElements, removeElement, getVerificationUrl } from \"./utils\";\n\nclass Modal {\n verificationUrl: string;\n\n redirectOnMobile: boolean;\n\n overlay: HTMLElement;\n\n wrapper: HTMLElement;\n\n iframeInstance: Iframe;\n\n on: typeof this.iframeInstance.on;\n\n once: typeof this.iframeInstance.once;\n\n isMobileDevice: boolean;\n\n closeButtonText: string;\n\n closeButton: HTMLButtonElement;\n\n stopPropagation: boolean;\n\n constructor(url: string, userConfig: IframeUserConfiguration) {\n const thresholdConfig = userConfig.mobileThreshold\n ? userConfig.mobileThreshold\n : constants.DEFAULT_MOBILE_THRESHOLD_WIDTH;\n this.verificationUrl = getVerificationUrl(url);\n this.redirectOnMobile = userConfig.mobileRedirect || false;\n this.isMobileDevice = window.document.body.clientWidth <= Number(thresholdConfig);\n this.closeButtonText = userConfig.closeButtonText ? userConfig.closeButtonText : \"\";\n this.closeButton = null;\n this.stopPropagation = userConfig.stopPropagation || false;\n this.overlay = Modal.createOverlay();\n this.wrapper = this.createWrapper();\n this.addFocusListener();\n }\n\n createCloseBtn() {\n this.closeButton = document.createElement(\"button\");\n this.closeButton.classList.add(constants.CLASS_NAMES.CLOSE_BUTTON);\n this.closeButton.setAttribute(\"aria-label\", \"close\");\n\n if (this.closeButtonText) {\n const closeTxt = document.createElement(\"div\");\n closeTxt.classList.add(constants.CLASS_NAMES.CLOSE_TEXT);\n closeTxt.innerHTML = this.closeButtonText;\n this.closeButton.appendChild(closeTxt);\n }\n\n const closeIcon = document.createElement(\"span\");\n closeIcon.classList.add(constants.CLASS_NAMES.CLOSE_ICON);\n closeIcon.setAttribute(\"role\", \"img\");\n this.closeButton.appendChild(closeIcon);\n\n this.closeButton.addEventListener(\"click\", (e) => {\n e.preventDefault();\n if (this.stopPropagation) {\n e.stopPropagation();\n }\n this.closeModal();\n });\n return this.closeButton;\n }\n\n closeModal() {\n window.removeEventListener(\"popstate\", this.popStateEventHandler);\n const transitionTimeout = constants.MODAL_OPACITY_TRANSITION_PERIOD;\n removeElement(this.overlay, transitionTimeout);\n removeElement(this.wrapper, transitionTimeout);\n this.iframeInstance.cleanup();\n }\n\n static createOverlay(): HTMLElement {\n const overlay = document.createElement(\"div\");\n overlay.classList.add(constants.CLASS_NAMES.OVERLAY);\n return overlay;\n }\n\n createWrapper(): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.classList.add(constants.CLASS_NAMES.MODAL_WRAPPER);\n wrapper.tabIndex = -1;\n wrapper.setAttribute(\"role\", \"dialog\");\n wrapper.appendChild(this.createCloseBtn());\n\n this.iframeInstance = new Iframe(wrapper, this.verificationUrl);\n this.iframeInstance.setInstallType(\"cdn_modal_iframe\");\n\n // pass `on` & `once` through to the iframe instance to allow hook listeners.\n this.on = this.iframeInstance.on.bind(this.iframeInstance);\n this.once = this.iframeInstance.once.bind(this.iframeInstance);\n\n const options = {\n className: constants.CLASS_NAMES.MODAL_IFRAME,\n title: iframeTitle,\n };\n this.iframeInstance.createIframe(options);\n wrapper.appendChild(this.iframeInstance.iframe);\n return wrapper;\n }\n\n popStateEventHandler = () => this.closeModal();\n\n addPopStateListener() {\n window.addEventListener(\"popstate\", this.popStateEventHandler);\n }\n\n addFocusListener() {\n this.iframeInstance.addWindowMessageListener((action) => {\n if (action.type === \"focus\" && action.focusOn === \"firstElement\") {\n this.closeButton.focus();\n }\n });\n\n document.addEventListener(\"keydown\", (e) => {\n const isTabPressed: boolean = e.key === \"Tab\";\n if (!isTabPressed) {\n return;\n }\n if (e.shiftKey && document.activeElement === this.closeButton) {\n this.iframeInstance.iframe.contentWindow.postMessage({ focusOn: \"lastElement\" }, \"*\");\n e.preventDefault();\n }\n });\n }\n\n isInLightboxPostMessage(inLightbox: string) {\n this.iframeInstance.iframe.contentWindow.postMessage({ isInLightBox: inLightbox }, \"*\");\n }\n\n displayModal() {\n this.iframeInstance.iframe.addEventListener(\"load\", () => {\n fadeInElements([this.overlay, this.wrapper]);\n document.body.style.overflow = \"hidden\";\n this.isInLightboxPostMessage(\"true\");\n });\n\n document.body.appendChild(this.overlay);\n document.body.appendChild(this.wrapper);\n this.addPopStateListener();\n }\n\n init() {\n if (this.redirectOnMobile && this.isMobileDevice) {\n window.top.location.href = this.verificationUrl;\n } else {\n this.displayModal();\n this.iframeInstance.init(false); // false so we don't create iframe again, it's already created in createWrapper\n }\n }\n\n setViewModel(viewModel: Partial<ViewModel> | ViewModel) {\n this.iframeInstance.setViewModel(viewModel);\n }\n\n setOptions(options: Options) {\n this.iframeInstance.setOptions(options);\n }\n}\n\nexport default Modal;\n","import { type IframeUserConfiguration } from \"../types/types\";\n\nimport Iframe from \"./iframe\";\nimport Modal from \"./modal\";\n\nimport \"../../scss/sheerid-iframe.scss\";\n\n// Called from the parent page to load the jslib within an iFrame NOT in a modal, but in the flow of a page. e.g. between two divs\nexport function loadInlineIframe(containerElement: HTMLElement, url: string): Iframe {\n const iframe = new Iframe(containerElement, url);\n iframe.init();\n return iframe;\n}\n\n// Called from the parent page to load the jslib within an iFrame in a modal\nexport function loadInModal(url: string, userConfig: IframeUserConfiguration = {}) {\n const modal = new Modal(url, userConfig);\n modal.init();\n return modal;\n}\n\nexport default { loadInModal, loadInlineIframe };\n"],"names":["_attrCache","getGaAttributes","doNotTrack","isNewRelicAvailable","logLevel","prefix","logLevels","colors","standardStyles","getUsefulState","isError","e","warn","args","log","info","error","err","errorMessageGroup","additionalUsefulAttributes","errorObj","usefulAttributes","stateAttributes","newRelicPageAction","eventName","attributes","logAPIResponseTime","url","time","logger","desiredLogLevel","thisPrefix","getStateFn","QUERY_STRING_INSTALL_PAGE_URL","QUERY_STRING_INSTALL_TYPE","PubSub","fn","data","EventEmitter","name","off","fadeInElements","elements","element","removeElement","transitionTimeout","getVerificationUrl","newUrl","value","key","iframeClassNames","iframeTitle","iframeConstants","DEFAULT_OPTIONS","constants","assertValidFunction","candidate","Iframe","containerElement","callback","urlString","options","actionCb","listener","ev","messageAction","viewModel","message","installType","createIframe","Modal","userConfig","thresholdConfig","closeTxt","closeIcon","overlay","wrapper","action","inLightbox","loadInlineIframe","iframe","loadInModal","modal","index"],"mappings":"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"}