@envive-ai/react-hooks 0.2.6-alpha-arthur-1 → 0.2.6-alpha.11

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 (676) hide show
  1. package/dist/{NewOrgConfig-CUQGpmw9.js → NewOrgConfig-BZCP9E7v.js} +2 -2
  2. package/dist/{NewOrgConfig-DD0oloeK.cjs → NewOrgConfig-DWLMI1ga.cjs} +2 -2
  3. package/dist/SystemSettingsContext-CO5c1L62.cjs +20 -0
  4. package/dist/SystemSettingsContext-CXmUlH8i.js +13 -0
  5. package/dist/TrackComponentVisibleEvent-BJgNOypY.js +52 -0
  6. package/dist/TrackComponentVisibleEvent-BRC2FTp-.cjs +59 -0
  7. package/dist/amplitudeContext-CCVyp5RU.d.cts +52 -0
  8. package/dist/amplitudeContext-DFYBDc0h.d.ts +52 -0
  9. package/dist/api-BWSsazAG.js +166 -0
  10. package/dist/api-DeW6rHj3.cjs +239 -0
  11. package/dist/application/models/graphql/index.cjs +3 -3
  12. package/dist/application/models/graphql/index.d.cts +2 -2
  13. package/dist/application/models/graphql/index.d.ts +2 -2
  14. package/dist/application/models/graphql/index.js +3 -2
  15. package/dist/application/models/guards/api/index.cjs +3 -3
  16. package/dist/application/models/guards/api/index.d.cts +2 -2
  17. package/dist/application/models/guards/api/index.d.ts +2 -2
  18. package/dist/application/models/guards/api/index.js +3 -3
  19. package/dist/application/models/guards/utils.cjs +1 -1
  20. package/dist/application/models/guards/utils.d.ts +1 -1
  21. package/dist/application/models/guards/utils.js +1 -1
  22. package/dist/application/models/index.cjs +23 -7
  23. package/dist/application/models/index.d.cts +12 -167
  24. package/dist/application/models/index.d.ts +13 -168
  25. package/dist/application/models/index.js +11 -7
  26. package/dist/application/models/utilityTypes/index.cjs +1 -0
  27. package/dist/application/models/utilityTypes/index.d.cts +2 -0
  28. package/dist/application/models/utilityTypes/index.d.ts +2 -0
  29. package/dist/application/models/utilityTypes/index.js +3 -0
  30. package/dist/application/models/variantInfo/index.cjs +3 -0
  31. package/dist/application/models/variantInfo/index.d.cts +2 -0
  32. package/dist/application/models/variantInfo/index.d.ts +2 -0
  33. package/dist/application/models/variantInfo/index.js +3 -0
  34. package/dist/application/utils/index.cjs +19 -10
  35. package/dist/application/utils/index.d.cts +64 -13
  36. package/dist/application/utils/index.d.ts +64 -13
  37. package/dist/application/utils/index.js +19 -10
  38. package/dist/{atomStore-CZKe3itM.cjs → atomStore-DNji91Im.cjs} +1 -1
  39. package/dist/{atomStore-BuopbV9k.js → atomStore-DXTVqiKc.js} +1 -1
  40. package/dist/atoms/app/index.cjs +24 -22
  41. package/dist/atoms/app/index.d.cts +21 -9
  42. package/dist/atoms/app/index.d.ts +20 -8
  43. package/dist/atoms/app/index.js +19 -17
  44. package/dist/atoms/atomStore/index.cjs +1 -1
  45. package/dist/atoms/atomStore/index.d.ts +1 -1
  46. package/dist/atoms/atomStore/index.js +1 -1
  47. package/dist/atoms/chat/index.cjs +21 -20
  48. package/dist/atoms/chat/index.d.cts +46 -36
  49. package/dist/atoms/chat/index.d.ts +44 -34
  50. package/dist/atoms/chat/index.js +21 -20
  51. package/dist/atoms/globalSearch/index.cjs +2 -1
  52. package/dist/atoms/globalSearch/index.d.cts +6 -6
  53. package/dist/atoms/globalSearch/index.d.ts +6 -6
  54. package/dist/atoms/globalSearch/index.js +2 -1
  55. package/dist/atoms/org/index.cjs +11 -10
  56. package/dist/atoms/org/index.d.cts +32 -19
  57. package/dist/atoms/org/index.d.ts +32 -19
  58. package/dist/atoms/org/index.js +3 -2
  59. package/dist/atoms/search/index.cjs +47 -7
  60. package/dist/atoms/search/index.d.cts +15 -76
  61. package/dist/atoms/search/index.d.ts +15 -76
  62. package/dist/atoms/search/index.js +29 -7
  63. package/dist/atoms/search/types.cjs +5 -0
  64. package/dist/atoms/search/types.d.cts +2 -0
  65. package/dist/atoms/search/types.d.ts +2 -0
  66. package/dist/atoms/search/types.js +3 -0
  67. package/dist/atoms/search/utils.cjs +1 -1
  68. package/dist/atoms/search/utils.d.cts +1 -1
  69. package/dist/atoms/search/utils.d.ts +1 -1
  70. package/dist/atoms/search/utils.js +1 -1
  71. package/dist/cdnContext-BnqmnEvR.js +38 -0
  72. package/dist/cdnContext-CnYcBOr9.cjs +53 -0
  73. package/dist/chat-CqPuT9_V.cjs +393 -0
  74. package/dist/chat-DH70QqJp.js +257 -0
  75. package/dist/chatElementDisplayLocation-CpgV2wR1.d.ts +25 -0
  76. package/dist/chatElementDisplayLocation-DWmfNX_u.d.cts +25 -0
  77. package/dist/chatSearch-ChyGuHbu.js +295 -0
  78. package/dist/chatSearch-DpnpRWAW.cjs +418 -0
  79. package/dist/chatState-CcFtSqJT.cjs +120 -0
  80. package/dist/chatState-DKnNHmwe.js +34 -0
  81. package/dist/config/index.d.cts +4 -4
  82. package/dist/config/index.d.ts +4 -4
  83. package/dist/config/locators/components/chat/index.d.cts +1 -1
  84. package/dist/config/locators/components/chat/index.d.ts +1 -1
  85. package/dist/config/locators/components/chat/variants/index.d.cts +1 -1
  86. package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
  87. package/dist/config/locators/components/common/index.d.cts +1 -1
  88. package/dist/config/locators/components/common/index.d.ts +1 -1
  89. package/dist/config/locators/components/index.d.cts +1 -1
  90. package/dist/config/locators/components/index.d.ts +1 -1
  91. package/dist/config/locators/components/search/index.d.cts +1 -1
  92. package/dist/config/locators/components/search/index.d.ts +1 -1
  93. package/dist/config/locators/index.d.cts +4 -4
  94. package/dist/config/locators/index.d.ts +4 -4
  95. package/dist/contexts/amplitudeContext/index.cjs +22 -23
  96. package/dist/contexts/amplitudeContext/index.d.cts +2 -11
  97. package/dist/contexts/amplitudeContext/index.d.ts +2 -11
  98. package/dist/contexts/amplitudeContext/index.js +20 -22
  99. package/dist/contexts/cdnContext/index.cjs +4 -4
  100. package/dist/contexts/cdnContext/index.d.cts +6 -2
  101. package/dist/contexts/cdnContext/index.d.ts +6 -2
  102. package/dist/contexts/cdnContext/index.js +4 -4
  103. package/dist/contexts/chatContext/index.cjs +326 -0
  104. package/dist/contexts/chatContext/index.d.cts +15 -0
  105. package/dist/contexts/chatContext/index.d.ts +15 -0
  106. package/dist/contexts/chatContext/index.js +319 -0
  107. package/dist/contexts/enviveConfigContext/index.cjs +4 -4
  108. package/dist/contexts/enviveConfigContext/index.d.cts +25 -3
  109. package/dist/contexts/enviveConfigContext/index.d.ts +25 -3
  110. package/dist/contexts/enviveConfigContext/index.js +4 -4
  111. package/dist/contexts/enviveCssContext/index.cjs +19 -15
  112. package/dist/contexts/enviveCssContext/index.d.cts +5 -3
  113. package/dist/contexts/enviveCssContext/index.d.ts +5 -3
  114. package/dist/contexts/enviveCssContext/index.js +19 -15
  115. package/dist/contexts/featureFlagContext/index.cjs +10 -9
  116. package/dist/contexts/featureFlagContext/index.d.cts +12 -3
  117. package/dist/contexts/featureFlagContext/index.d.ts +12 -3
  118. package/dist/contexts/featureFlagContext/index.js +7 -6
  119. package/dist/contexts/featureFlagServiceContext/index.cjs +3 -4
  120. package/dist/contexts/featureFlagServiceContext/index.d.cts +5 -1
  121. package/dist/contexts/featureFlagServiceContext/index.d.ts +5 -1
  122. package/dist/contexts/featureFlagServiceContext/index.js +3 -4
  123. package/dist/contexts/graphqlContext/index.cjs +13 -8
  124. package/dist/contexts/graphqlContext/index.d.cts +15 -11
  125. package/dist/contexts/graphqlContext/index.d.ts +15 -11
  126. package/dist/contexts/graphqlContext/index.js +13 -8
  127. package/dist/contexts/localStorageContext/index.cjs +3 -3
  128. package/dist/contexts/localStorageContext/index.d.cts +22 -3
  129. package/dist/contexts/localStorageContext/index.d.ts +22 -3
  130. package/dist/contexts/localStorageContext/index.js +3 -4
  131. package/dist/contexts/newOrgConfigContext/index.cjs +17 -13
  132. package/dist/contexts/newOrgConfigContext/index.d.cts +16 -12
  133. package/dist/contexts/newOrgConfigContext/index.d.ts +16 -12
  134. package/dist/contexts/newOrgConfigContext/index.js +17 -13
  135. package/dist/contexts/searchContext/index.cjs +24 -23
  136. package/dist/contexts/searchContext/index.d.cts +7 -2
  137. package/dist/contexts/searchContext/index.d.ts +7 -2
  138. package/dist/contexts/searchContext/index.js +24 -23
  139. package/dist/contexts/sessionStorageContext/index.cjs +2 -2
  140. package/dist/contexts/sessionStorageContext/index.d.cts +6 -2
  141. package/dist/contexts/sessionStorageContext/index.d.ts +6 -2
  142. package/dist/contexts/sessionStorageContext/index.js +2 -2
  143. package/dist/contexts/shopifyUrlContext/index.cjs +2 -2
  144. package/dist/contexts/shopifyUrlContext/index.d.cts +12 -2
  145. package/dist/contexts/shopifyUrlContext/index.d.ts +12 -2
  146. package/dist/contexts/shopifyUrlContext/index.js +2 -2
  147. package/dist/contexts/systemSettingsContext/index.cjs +4 -4
  148. package/dist/contexts/systemSettingsContext/index.d.cts +15 -4
  149. package/dist/contexts/systemSettingsContext/index.d.ts +17 -6
  150. package/dist/contexts/systemSettingsContext/index.js +4 -4
  151. package/dist/contexts/types.cjs +7 -0
  152. package/dist/contexts/types.d.cts +5 -0
  153. package/dist/contexts/types.d.ts +5 -0
  154. package/dist/contexts/types.js +3 -0
  155. package/dist/contexts/userIdentityContext/index.cjs +21 -19
  156. package/dist/contexts/userIdentityContext/index.d.cts +2 -11
  157. package/dist/contexts/userIdentityContext/index.d.ts +2 -11
  158. package/dist/contexts/userIdentityContext/index.js +19 -17
  159. package/dist/custservice-types-CcPnAJ5k.d.ts +29 -0
  160. package/dist/custservice-types-_Dnz4sMy.d.cts +29 -0
  161. package/dist/domObserver-Bqf3ooj8.cjs +304 -0
  162. package/dist/{domObserver-LCBj1xw4.cjs → domObserver-v9ODTyfT.js} +4 -23
  163. package/dist/enviveConfig-DZBohDpc.js +62 -0
  164. package/dist/enviveConfig-Dv9-esGV.cjs +130 -0
  165. package/dist/enviveConfigContext-D2OELZDR.cjs +60 -0
  166. package/dist/enviveConfigContext-DrDjCems.js +45 -0
  167. package/dist/events/index.cjs +3 -2
  168. package/dist/events/index.d.cts +15 -2
  169. package/dist/events/index.d.ts +15 -2
  170. package/dist/events/index.js +2 -2
  171. package/dist/events-DYY4l817.cjs +90 -0
  172. package/dist/events-DyUix-Bn.js +78 -0
  173. package/dist/featureFlagServiceContext-B01ZkIwj.d.cts +23 -0
  174. package/dist/featureFlagServiceContext-CJyYItqu.cjs +62 -0
  175. package/dist/featureFlagServiceContext-FBM6DdMJ.js +42 -0
  176. package/dist/featureFlagServiceContext-jZzoym5C.d.ts +23 -0
  177. package/dist/featureGates-KEwAL8p_.js +26 -0
  178. package/dist/featureGates-qU_ulhpC.cjs +32 -0
  179. package/dist/frontendConfig-BIq8r6nC.d.cts +858 -0
  180. package/dist/frontendConfig-CixANNjw.d.ts +858 -0
  181. package/dist/{globalSearch-Cpc8egsM.cjs → globalSearch-Ba342VVG.cjs} +1 -1
  182. package/dist/globalSearch-DQCMamhv.js +1 -0
  183. package/dist/globalSearch-DYxPE02f.cjs +0 -0
  184. package/dist/{globalSearch-nmrfGLOn.js → globalSearch-eGx-9JQz.js} +1 -1
  185. package/dist/graphql-3PxNRFOc.js +36 -0
  186. package/dist/graphql-DGYfelZp.cjs +53 -0
  187. package/dist/graphqlConfig-GHZ1UgCw.cjs +73 -0
  188. package/dist/graphqlConfig-mDg6J44N.js +24 -0
  189. package/dist/graphqlContext-B4twVCqw.d.ts +28 -0
  190. package/dist/graphqlContext-BZPEAFSR.cjs +111 -0
  191. package/dist/graphqlContext-W6iEyEkv.d.cts +28 -0
  192. package/dist/graphqlContext-eaZPxgRE.js +96 -0
  193. package/dist/hooks/AmplitudeOperations/index.cjs +22 -23
  194. package/dist/hooks/AmplitudeOperations/index.d.cts +2 -2
  195. package/dist/hooks/AmplitudeOperations/index.d.ts +2 -2
  196. package/dist/hooks/AmplitudeOperations/index.js +21 -22
  197. package/dist/hooks/AppDetails/index.cjs +22 -20
  198. package/dist/hooks/AppDetails/index.d.cts +24 -3
  199. package/dist/hooks/AppDetails/index.d.ts +24 -3
  200. package/dist/hooks/AppDetails/index.js +22 -20
  201. package/dist/hooks/CdnOperations/index.cjs +4 -4
  202. package/dist/hooks/CdnOperations/index.js +4 -4
  203. package/dist/hooks/ChatToggle/index.cjs +25 -28
  204. package/dist/hooks/ChatToggle/index.d.cts +2 -2
  205. package/dist/hooks/ChatToggle/index.d.ts +2 -2
  206. package/dist/hooks/ChatToggle/index.js +22 -25
  207. package/dist/hooks/ChatToggleAnalytics/index.cjs +24 -25
  208. package/dist/hooks/ChatToggleAnalytics/index.d.cts +2 -2
  209. package/dist/hooks/ChatToggleAnalytics/index.d.ts +2 -2
  210. package/dist/hooks/ChatToggleAnalytics/index.js +23 -24
  211. package/dist/hooks/CustomerSupportHandoff/index.cjs +2 -2
  212. package/dist/hooks/CustomerSupportHandoff/index.d.cts +1 -1
  213. package/dist/hooks/CustomerSupportHandoff/index.js +2 -2
  214. package/dist/hooks/Debounce/index.cjs +2 -20
  215. package/dist/hooks/Debounce/index.d.cts +1 -1
  216. package/dist/hooks/Debounce/index.d.ts +1 -1
  217. package/dist/hooks/Debounce/index.js +2 -18
  218. package/dist/hooks/ElementObserver/index.cjs +6 -4
  219. package/dist/hooks/ElementObserver/index.d.cts +25 -4
  220. package/dist/hooks/ElementObserver/index.d.ts +25 -4
  221. package/dist/hooks/ElementObserver/index.js +6 -4
  222. package/dist/hooks/FloatingButtonVisibility/index.cjs +73 -0
  223. package/dist/hooks/FloatingButtonVisibility/index.d.cts +7 -0
  224. package/dist/hooks/FloatingButtonVisibility/index.d.ts +7 -0
  225. package/dist/hooks/FloatingButtonVisibility/index.js +69 -0
  226. package/dist/hooks/GrabAndScroll/index.cjs +1 -1
  227. package/dist/hooks/GrabAndScroll/index.d.ts +2 -2
  228. package/dist/hooks/GrabAndScroll/index.js +1 -1
  229. package/dist/hooks/GraphQLConfig/index.cjs +14 -9
  230. package/dist/hooks/GraphQLConfig/index.d.cts +14 -2
  231. package/dist/hooks/GraphQLConfig/index.d.ts +14 -2
  232. package/dist/hooks/GraphQLConfig/index.js +14 -9
  233. package/dist/hooks/IdentifyUser/index.cjs +21 -19
  234. package/dist/hooks/IdentifyUser/index.js +20 -18
  235. package/dist/hooks/ImageResolver/index.cjs +29 -20
  236. package/dist/hooks/ImageResolver/index.d.ts +1 -1
  237. package/dist/hooks/ImageResolver/index.js +29 -20
  238. package/dist/hooks/Intersection/index.cjs +1 -1
  239. package/dist/hooks/Intersection/index.js +1 -1
  240. package/dist/hooks/LastInteraction/index.cjs +34 -0
  241. package/dist/hooks/LastInteraction/index.d.cts +7 -0
  242. package/dist/hooks/LastInteraction/index.d.ts +7 -0
  243. package/dist/hooks/LastInteraction/index.js +32 -0
  244. package/dist/hooks/LocalStorageOperations/index.cjs +7 -8
  245. package/dist/hooks/LocalStorageOperations/index.js +3 -4
  246. package/dist/hooks/MessageFilter/index.cjs +12 -3
  247. package/dist/hooks/MessageFilter/index.d.cts +18 -2
  248. package/dist/hooks/MessageFilter/index.d.ts +18 -2
  249. package/dist/hooks/MessageFilter/index.js +11 -2
  250. package/dist/hooks/NewOrgConfig/index.cjs +18 -14
  251. package/dist/hooks/NewOrgConfig/index.d.cts +17 -3
  252. package/dist/hooks/NewOrgConfig/index.d.ts +17 -3
  253. package/dist/hooks/NewOrgConfig/index.js +18 -14
  254. package/dist/hooks/Search/index.cjs +173 -314
  255. package/dist/hooks/Search/index.d.cts +58 -3
  256. package/dist/hooks/Search/index.d.ts +58 -3
  257. package/dist/hooks/Search/index.js +162 -302
  258. package/dist/hooks/SearchOperations/index.cjs +25 -24
  259. package/dist/hooks/SearchOperations/index.d.cts +3 -2
  260. package/dist/hooks/SearchOperations/index.d.ts +3 -2
  261. package/dist/hooks/SearchOperations/index.js +25 -24
  262. package/dist/hooks/SessionStorageOperations/index.cjs +2 -2
  263. package/dist/hooks/SessionStorageOperations/index.js +2 -2
  264. package/dist/hooks/ShopifyUrlOperations/index.cjs +3 -3
  265. package/dist/hooks/ShopifyUrlOperations/index.d.cts +5 -2
  266. package/dist/hooks/ShopifyUrlOperations/index.d.ts +5 -2
  267. package/dist/hooks/ShopifyUrlOperations/index.js +3 -3
  268. package/dist/hooks/SnapCalculator/index.cjs +1 -1
  269. package/dist/hooks/SnapCalculator/index.d.cts +3 -4
  270. package/dist/hooks/SnapCalculator/index.d.ts +3 -4
  271. package/dist/hooks/SnapCalculator/index.js +1 -1
  272. package/dist/hooks/SystemSettingsContext/index.cjs +6 -17
  273. package/dist/hooks/SystemSettingsContext/index.d.cts +16 -5
  274. package/dist/hooks/SystemSettingsContext/index.d.ts +15 -4
  275. package/dist/hooks/SystemSettingsContext/index.js +6 -15
  276. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +21 -23
  277. package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +3 -2
  278. package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +3 -2
  279. package/dist/hooks/TrackComponentVisibleEvent/index.js +21 -23
  280. package/dist/hooks/UpdateAnalyticsProps/index.cjs +24 -26
  281. package/dist/hooks/UpdateAnalyticsProps/index.js +20 -22
  282. package/dist/hooks/utils.cjs +1 -1
  283. package/dist/hooks/utils.d.cts +14 -20
  284. package/dist/hooks/utils.d.ts +14 -20
  285. package/dist/hooks/utils.js +1 -1
  286. package/dist/index-9oqgeOVC.d.cts +186 -0
  287. package/dist/index-A0HvA68Y.d.cts +1 -0
  288. package/dist/index-BC93l5Th.d.ts +1 -0
  289. package/dist/index-BEzmil_W.d.ts +44 -0
  290. package/dist/{index-DtzPIcQp.d.ts → index-BdjH4aRG.d.ts} +1 -1
  291. package/dist/{index-CsmO1rDH.d.ts → index-BfM7zKRO.d.ts} +1 -1
  292. package/dist/index-Bmub8e38.d.cts +98 -0
  293. package/dist/{index-mv7KvWDq.d.ts → index-CA1Eo7DA.d.ts} +1 -1
  294. package/dist/index-CCa4tZuO.d.ts +184 -0
  295. package/dist/{index-ChiZg0yw.d.cts → index-CCboEuTO.d.cts} +1 -1
  296. package/dist/index-CESxqFso.d.cts +228 -0
  297. package/dist/{index-BbqT4BQv.d.cts → index-COXkY78t.d.cts} +1 -1
  298. package/dist/index-CboygwjO.d.ts +676 -0
  299. package/dist/index-CiWEYzXl.d.cts +184 -0
  300. package/dist/{index-jFQefHda.d.ts → index-Cw9oYJnq.d.ts} +1 -1
  301. package/dist/index-D5lw0cMx.d.ts +186 -0
  302. package/dist/{index-CAJq_8bO.d.cts → index-DZtnHhlr.d.cts} +1 -1
  303. package/dist/index-Dfwnna1j.d.ts +228 -0
  304. package/dist/index-Dt_C-I-2.d.cts +676 -0
  305. package/dist/index-OkKEOL6H.d.cts +44 -0
  306. package/dist/index-bjMvkcBF.d.ts +98 -0
  307. package/dist/{index-npqPeJ1g.d.cts → index-hAqp0oYb.d.cts} +1 -1
  308. package/dist/interceptors/index.cjs +3 -28
  309. package/dist/interceptors/index.d.cts +16 -4
  310. package/dist/interceptors/index.d.ts +16 -4
  311. package/dist/interceptors/index.js +3 -25
  312. package/dist/interceptors/types.cjs +1 -0
  313. package/dist/interceptors/types.d.cts +14 -0
  314. package/dist/interceptors/types.d.ts +14 -0
  315. package/dist/interceptors/types.js +3 -0
  316. package/dist/localStorageContext-BPZ82q-G.js +95 -0
  317. package/dist/localStorageContext-NRP-CdmF.cjs +115 -0
  318. package/dist/{logger-BqHq67zN.cjs → logger-TBIl4uIH.cjs} +1 -1
  319. package/dist/{logger-BMVdhQOV.js → logger-W3lqg-4b.js} +1 -1
  320. package/dist/models-D-4db7XW.cjs +1537 -0
  321. package/dist/models-c86hYW-F.js +1296 -0
  322. package/dist/{newOrgConfigAtom-CDttTiuu.cjs → newOrgConfigAtom-D6R-7HCk.cjs} +1 -1
  323. package/dist/newOrgConfigAtom-bn1lnljf.js +8 -0
  324. package/dist/newOrgConfigContext-BC79qoiV.d.ts +16 -0
  325. package/dist/newOrgConfigContext-BqZwD8-B.cjs +68 -0
  326. package/dist/newOrgConfigContext-DbcDClwd.js +53 -0
  327. package/dist/newOrgConfigContext-eS4ZLo58.d.cts +16 -0
  328. package/dist/nodeSelector-DybpVr-i.d.ts +31 -0
  329. package/dist/nodeSelector-vKB44CDB.d.cts +31 -0
  330. package/dist/org-CIhjzxWr.cjs +43 -0
  331. package/dist/org-CeWXnpwF.js +12 -0
  332. package/dist/search-6RrxBXD6.d.cts +20 -0
  333. package/dist/search-BBu5YeQa.js +126 -0
  334. package/dist/search-D23INSNg.cjs +205 -0
  335. package/dist/search-filter-types-BItKtezf.d.cts +102 -0
  336. package/dist/search-filter-types-fZf91Pdw.d.ts +102 -0
  337. package/dist/search-nuWWnRRV.d.ts +20 -0
  338. package/dist/searchContext-BPT44uk-.js +129 -0
  339. package/dist/searchContext-CwRRiXQ3.cjs +145 -0
  340. package/dist/searchServiceAdapter-DEv1tTn0.cjs +34 -0
  341. package/dist/searchServiceAdapter-WyCU55NV.js +16 -0
  342. package/dist/sessionStorageContext-1Ks_d4Z0.cjs +66 -0
  343. package/dist/sessionStorageContext-CDcl7NVl.js +52 -0
  344. package/dist/shopifyUrlContext-CejRZfj7.js +61 -0
  345. package/dist/shopifyUrlContext-lnHoAOEf.cjs +75 -0
  346. package/dist/spiffyWidgets-CdxRcXhW.d.ts +20 -0
  347. package/dist/spiffyWidgets-eNbU1gMc.d.cts +20 -0
  348. package/dist/systemSettingsContext-Ba-wi2NZ.cjs +60 -0
  349. package/dist/systemSettingsContext-DumUaV0m.js +39 -0
  350. package/dist/test-types-B3YQpECG.d.cts +13 -0
  351. package/dist/test-types-C8NHqaUS.d.ts +13 -0
  352. package/dist/types/index.cjs +48 -3
  353. package/dist/types/index.d.cts +18 -2
  354. package/dist/types/index.d.ts +18 -2
  355. package/dist/types/index.js +44 -2
  356. package/dist/types-BGqrvAsw.d.ts +10 -0
  357. package/dist/types-CKPddlfS.cjs +0 -0
  358. package/dist/types-CS0Hrzja.js +30 -0
  359. package/dist/types-CtUb63bt.js +76 -0
  360. package/dist/types-CxObxLKs.cjs +48 -0
  361. package/dist/types-DIiH_5gL.d.cts +10 -0
  362. package/dist/types-Dc6hx6ei.js +1 -0
  363. package/dist/types-UUvB6h05.cjs +106 -0
  364. package/dist/types-aQTzSrH1.d.cts +51 -0
  365. package/dist/types-kAjmR2du.d.ts +51 -0
  366. package/dist/types.cjs +0 -0
  367. package/dist/types.d.cts +16 -0
  368. package/dist/types.d.ts +16 -0
  369. package/dist/types.js +1 -0
  370. package/dist/urlsParser-COzMdJaX.cjs +78 -0
  371. package/dist/urlsParser-DxjoLj98.js +42 -0
  372. package/dist/useAmplitudeOperations-Cv0fi3uj.cjs +41 -0
  373. package/dist/useAmplitudeOperations-Ti6phPPq.js +34 -0
  374. package/dist/useAppDetails-CsXHPAh1.cjs +38 -0
  375. package/dist/useAppDetails-PUfYwCjK.js +30 -0
  376. package/dist/useDebounce-DZ8Cgiwc.cjs +26 -0
  377. package/dist/useDebounce-v9cezyjn.js +19 -0
  378. package/dist/useGraphQLConfig-BizpCw23.cjs +76 -0
  379. package/dist/useGraphQLConfig-DFWl9Z89.js +63 -0
  380. package/dist/{useIntersection-BkMkuJcZ.js → useIntersection-Cncgxdmy.js} +1 -1
  381. package/dist/{useIntersection-BcBCa890.cjs → useIntersection-m4PEpvG7.cjs} +1 -1
  382. package/dist/useMessageInterceptor-BjGP_uXm.js +25 -0
  383. package/dist/useMessageInterceptor-arAqUq1Q.cjs +33 -0
  384. package/dist/userIdentityContext-W1OWF3cG.d.ts +20 -0
  385. package/dist/userIdentityContext-kU1PIo8K.d.cts +20 -0
  386. package/dist/utilityTypes-B2KuRn37.js +1 -0
  387. package/dist/utilityTypes-BGbL2WTP.cjs +0 -0
  388. package/dist/{utils-Buo4KU5l.cjs → utils-2SWrJ12w.cjs} +1 -1
  389. package/dist/utils-BewguHW0.d.cts +22 -0
  390. package/dist/{utils-CiJLDPjY.cjs → utils-CDw74BCO.cjs} +1 -1
  391. package/dist/utils-CLGXsOwE.cjs +1591 -0
  392. package/dist/{utils-BRNaQkCK.js → utils-CqBxIpEV.js} +1 -1
  393. package/dist/{utils-B1LVzQYK.js → utils-DIvMgPe8.js} +1 -1
  394. package/dist/utils-D_kATUj6.js +92 -0
  395. package/dist/{utils-BitIIghf.d.ts → utils-DpneNSJf.d.ts} +1 -1
  396. package/dist/utils-hKYwSBo9.d.ts +22 -0
  397. package/dist/utils-hYTjy7hJ.cjs +130 -0
  398. package/dist/utils-jYtD3hmA.js +1385 -0
  399. package/dist/variantInfo-BfKlkaWU.js +11 -0
  400. package/dist/variantInfo-DpLn4nHz.cjs +17 -0
  401. package/package.json +36 -9
  402. package/src/application/commerce-api.ts +37 -40
  403. package/src/application/models/api/context.ts +4 -0
  404. package/src/application/models/api/generationParams.ts +4 -0
  405. package/src/application/models/api/nextMessageRequest.ts +11 -0
  406. package/src/application/models/api/orgAnalyticsConfig.ts +19 -0
  407. package/src/application/models/api/orgConfigResults.ts +44 -0
  408. package/src/application/models/api/organizationConfig.ts +12 -0
  409. package/src/{types/ApiResponse.ts → application/models/api/response.ts} +29 -35
  410. package/src/application/models/api/responseGenerics.ts +67 -0
  411. package/src/application/models/api/search.ts +26 -0
  412. package/src/application/models/api/suggestion.ts +4 -0
  413. package/src/application/models/api/supportedEventRequest.ts +8 -0
  414. package/src/application/models/api/userEvent.ts +101 -0
  415. package/src/application/models/cachedValue.ts +8 -0
  416. package/src/application/models/chatElementDisplayLocation.ts +22 -0
  417. package/src/application/models/clientDetails.ts +18 -0
  418. package/src/application/models/colorsConfig.ts +28 -0
  419. package/src/application/models/conversationalSearchIds.ts +5 -0
  420. package/src/application/models/dataLayer.ts +45 -0
  421. package/src/application/models/events.ts +5 -0
  422. package/src/application/models/featureGates.ts +21 -0
  423. package/src/application/models/frontendConfig.ts +14 -0
  424. package/src/application/models/googleAnalyticsEvents.ts +8 -0
  425. package/src/application/models/graphql/index.ts +0 -1
  426. package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +23 -1
  427. package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +89 -1
  428. package/src/application/models/guards/api/isApiFormResponse.ts +4 -4
  429. package/src/application/models/guards/api/isApiFormSubmittedResponseAttributes.ts +2 -2
  430. package/src/application/models/guards/api/isApiOrderResponseAttributes.ts +20 -2
  431. package/src/application/models/guards/api/isApiOrgConfigResults.ts +9 -3
  432. package/src/application/models/guards/api/isApiOrganizationConfig.ts +32 -8
  433. package/src/application/models/guards/api/isApiPDPEventAttributes.ts +5 -8
  434. package/src/application/models/guards/api/isApiPLPEventAttributes.ts +10 -14
  435. package/src/application/models/guards/api/isApiPageResponseAttributes.ts +1 -1
  436. package/src/application/models/guards/api/isApiProductResponseAttributes.ts +4 -2
  437. package/src/application/models/guards/api/isApiProductSearchAttributes.ts +6 -9
  438. package/src/application/models/guards/api/isApiProductSearchFilterAttributes.ts +4 -7
  439. package/src/application/models/guards/api/isApiQueryTypedEventAttributes.ts +3 -8
  440. package/src/application/models/guards/api/isApiResponse.ts +15 -22
  441. package/src/application/models/guards/api/isApiReviewResponseAttributes.ts +1 -1
  442. package/src/application/models/guards/api/isApiReviewRichInformation.ts +1 -1
  443. package/src/application/models/guards/api/isApiTextResponseAttributes.ts +1 -1
  444. package/src/application/models/guards/graphQL/isGraphQLColorsConfig.ts +1 -1
  445. package/src/application/models/guards/isBaseEcommerceEvent.ts +2 -1
  446. package/src/application/models/guards/isGA4EcommerceEvent.ts +1 -1
  447. package/src/application/models/guards/isLegacyUAEcommerceEvent.ts +1 -1
  448. package/src/application/models/guards/isMobilePLPChatPlacementParameter.ts +3 -1
  449. package/src/application/models/guards/isSpanxTakeAQuizCtaParameter.ts +3 -5
  450. package/src/application/models/guards/isVariantInfo.ts +1 -6
  451. package/src/application/models/index.ts +95 -30
  452. package/src/application/models/localStorageEventListener.ts +4 -0
  453. package/src/{types/Message.ts → application/models/message.ts} +34 -38
  454. package/src/application/models/mobilePLPChatPlacementParameter.ts +3 -0
  455. package/src/application/models/orgsEnum.ts +36 -0
  456. package/src/application/models/productExperiment.ts +5 -0
  457. package/src/application/models/spanxTakeAQuizCtaParameter.ts +4 -0
  458. package/src/application/models/spiffyWidgets.ts +16 -0
  459. package/src/application/models/utilityTypes/camelCase.ts +87 -0
  460. package/src/application/models/utilityTypes/camelCasedPropertiesDeep.ts +80 -0
  461. package/src/application/models/utilityTypes/delimiterCase.ts +121 -0
  462. package/src/application/models/utilityTypes/delimiterCasedPropertiesDeep.ts +98 -0
  463. package/src/application/models/utilityTypes/index.ts +1 -0
  464. package/src/application/models/utilityTypes/internal.ts +93 -0
  465. package/src/application/models/utilityTypes/primitive.ts +8 -0
  466. package/src/application/models/utilityTypes/snakeCasedPropertiesDeep.ts +49 -0
  467. package/src/application/models/utilityTypes/splitWords.ts +76 -0
  468. package/src/application/models/utilityTypes/trim.ts +28 -0
  469. package/src/application/models/utilityTypes/unknownArray.ts +25 -0
  470. package/src/application/models/utils/snakeToCamelTransformer.ts +8 -8
  471. package/src/application/models/validators/validateGraphQLColorsConfig.ts +2 -6
  472. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +6 -6
  473. package/src/application/models/validators/validateMobilePLPChatPlacementParameter.ts +3 -5
  474. package/src/application/models/validators/validateOrgConfigResults.ts +5 -6
  475. package/src/application/models/validators/validateOrganizationConfig.ts +8 -11
  476. package/src/application/models/validators/validateResponse.ts +44 -66
  477. package/src/application/models/validators/validateSuggestion.ts +1 -1
  478. package/src/application/models/validators/validateUserEvent.ts +12 -23
  479. package/src/application/models/variantInfo/index.ts +1 -0
  480. package/src/application/models/variantInfo/pageVisitInfo.ts +6 -0
  481. package/src/application/models/variantInfo/plpInfo.ts +3 -0
  482. package/src/application/models/variantInfo/productInfo.ts +5 -0
  483. package/src/application/models/variantInfo/variantInfo.ts +29 -0
  484. package/src/application/utils/__tests__/divideArrays.test.ts +14 -0
  485. package/src/application/utils/analyticsUtils.ts +8 -1
  486. package/src/application/utils/cdnUtils.ts +11 -0
  487. package/src/application/utils/coreContextToApiContext.ts +1 -3
  488. package/src/application/utils/coreUserEventToApiUserEvent.ts +2 -2
  489. package/src/application/utils/elementObserver.ts +1 -1
  490. package/src/application/utils/imageFilter.ts +2 -5
  491. package/src/application/utils/index.ts +21 -20
  492. package/src/application/utils/messageFromFormSubmittedEvent.ts +1 -1
  493. package/src/application/utils/messageFromQueryEvent.ts +1 -1
  494. package/src/application/utils/messageFromResponse.ts +10 -14
  495. package/src/application/utils/messageFromSuggestionEvent.ts +4 -6
  496. package/src/application/utils/mouseEventTypes.ts +1 -1
  497. package/src/application/utils/nextMessageRequestToApiRequest.ts +1 -1
  498. package/src/application/utils/overrides.ts +49 -1
  499. package/src/application/utils/supportedEventRequestToApiRequest.ts +1 -3
  500. package/src/application/utils/urlsParser.ts +7 -1
  501. package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +1 -1
  502. package/src/atoms/app/index.ts +25 -15
  503. package/src/atoms/app/variant.ts +1 -1
  504. package/src/atoms/chat/chatState.ts +4 -4
  505. package/src/atoms/chat/form.ts +1 -1
  506. package/src/atoms/chat/messageQueue.ts +50 -25
  507. package/src/atoms/chat/replies.ts +2 -1
  508. package/src/atoms/chat/suggestions.ts +29 -34
  509. package/src/atoms/envive/enviveConfig.ts +20 -14
  510. package/src/atoms/org/customerService.ts +8 -4
  511. package/src/atoms/org/graphqlConfig.ts +15 -7
  512. package/src/atoms/org/index.ts +6 -4
  513. package/src/atoms/org/newOrgConfigAtom.ts +2 -2
  514. package/src/atoms/org/orgAnalyticsConfig.ts +1 -1
  515. package/src/atoms/search/chatSearch.ts +317 -0
  516. package/src/atoms/search/index.ts +1 -0
  517. package/src/atoms/search/productFilters.ts +52 -72
  518. package/src/atoms/search/productSorter.ts +2 -2
  519. package/src/atoms/search/searchAPI.ts +60 -42
  520. package/src/atoms/search/searchServiceAdapter.ts +1 -1
  521. package/src/atoms/search/types.ts +55 -0
  522. package/src/config/divIds.ts +27 -0
  523. package/src/config/socialProofClasses.ts +17 -0
  524. package/src/contexts/amplitudeContext/amplitudeContext.tsx +57 -16
  525. package/src/contexts/cdnContext/cdnContext.tsx +6 -1
  526. package/src/contexts/chatContext/chatContext.tsx +509 -0
  527. package/src/contexts/chatContext/index.ts +1 -0
  528. package/src/contexts/enviveConfigContext/enviveConfigContext.tsx +26 -12
  529. package/src/contexts/enviveCssContext/enviveCssContext.tsx +12 -5
  530. package/src/contexts/featureFlagContext/featureFlagContext.tsx +48 -27
  531. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +3 -11
  532. package/src/contexts/graphqlContext/graphqlContext.tsx +95 -40
  533. package/src/contexts/localStorageContext/localStorageContext.tsx +60 -26
  534. package/src/contexts/newOrgConfigContext/newOrgConfigContext.tsx +22 -10
  535. package/src/contexts/searchContext/searchContext.tsx +49 -29
  536. package/src/contexts/sessionStorageContext/sessionStorageContext.tsx +33 -12
  537. package/src/contexts/shopifyUrlContext/shopifyUrlContext.tsx +37 -20
  538. package/src/contexts/systemSettingsContext/systemSettingsContext.tsx +21 -8
  539. package/src/contexts/types.ts +1067 -0
  540. package/src/contexts/userIdentityContext/userIdentityContext.tsx +77 -33
  541. package/src/events/event-types.ts +11 -0
  542. package/src/events/index.ts +5 -8
  543. package/src/events/registerAnalyticsListeners.ts +13 -10
  544. package/src/hooks/AmplitudeOperations/useAmplitudeOperations.ts +11 -6
  545. package/src/hooks/AppDetails/useAppDetails.ts +24 -10
  546. package/src/hooks/ChatToggle/useChatToggle.ts +19 -7
  547. package/src/hooks/ChatToggleAnalytics/useChatToggleAnalytics.ts +4 -4
  548. package/src/hooks/CustomerSupportHandoff/useCustomerSupportHandoff.ts +1 -1
  549. package/src/hooks/ElementObserver/useElementObserver.ts +32 -14
  550. package/src/hooks/FloatingButtonVisibility/index.ts +1 -0
  551. package/src/hooks/FloatingButtonVisibility/useFloatingButtonVisibility.ts +99 -0
  552. package/src/hooks/GrabAndScroll/useGrabAndScroll.ts +124 -125
  553. package/src/hooks/GraphQLConfig/useGraphQLConfig.ts +7 -5
  554. package/src/hooks/ImageResolver/useImageResolver.ts +31 -24
  555. package/src/hooks/LastInteraction/index.ts +1 -0
  556. package/src/hooks/LastInteraction/useLastInteraction.ts +42 -0
  557. package/src/hooks/LocalStorageOperations/useLocalStorageOperations.ts +19 -12
  558. package/src/hooks/MessageFilter/useMessageFilter.ts +7 -1
  559. package/src/hooks/Search/useSearch.tsx +217 -87
  560. package/src/hooks/SearchOperations/useSearchOperations.ts +12 -8
  561. package/src/hooks/ShopifyUrlOperations/useShopifyUrlOperations.ts +14 -8
  562. package/src/hooks/SnapCalculator/useSnapCalculator.ts +2 -1
  563. package/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts +11 -8
  564. package/src/hooks/UpdateAnalyticsProps/useUpdateAnalyticsProps.ts +25 -11
  565. package/src/hooks/utils.ts +29 -19
  566. package/src/interceptors/index.ts +2 -1
  567. package/src/interceptors/types.ts +6 -0
  568. package/src/interceptors/useMessageInterceptor.ts +6 -10
  569. package/src/merchants/domInsertion.ts +30 -0
  570. package/src/merchants/gridInsertion.ts +19 -0
  571. package/src/types/config-versions.ts +6 -0
  572. package/src/types/customerService.ts +31 -0
  573. package/src/types/custservice-types.ts +28 -0
  574. package/src/{exceptions → types/exceptions}/unsupportedProductExceptions.ts +2 -2
  575. package/src/types/floatingbuttonoverrides-types.ts +10 -0
  576. package/src/types/index.ts +5 -4
  577. package/src/types/search-filter-types.ts +111 -0
  578. package/src/types/suggestionBarV2-types.ts +4 -0
  579. package/src/types/test-types.ts +3 -0
  580. package/src/types.ts +11 -0
  581. package/dist/AmplitudeOperations-CXU93q_4.js +0 -34
  582. package/dist/AmplitudeOperations-_uIb5QED.cjs +0 -41
  583. package/dist/TrackComponentVisibleEvent-D-hN3owz.cjs +0 -60
  584. package/dist/TrackComponentVisibleEvent-D-pvNVOP.js +0 -53
  585. package/dist/amplitudeContext-DFXeRauX.js +0 -233
  586. package/dist/amplitudeContext-DrFGH7Q7.cjs +0 -249
  587. package/dist/amplitudeTrackEventAtom-D66l5oFp.js +0 -8
  588. package/dist/amplitudeTrackEventAtom-f22P2U0u.cjs +0 -15
  589. package/dist/api-D4HaU2Gf.js +0 -166
  590. package/dist/api-D4Xoibs9.cjs +0 -239
  591. package/dist/app-BT3g-mDp.js +0 -515
  592. package/dist/app-DxwdFQlv.cjs +0 -570
  593. package/dist/cdnContext-D-qi0lub.js +0 -38
  594. package/dist/cdnContext-DIVgBnsl.cjs +0 -53
  595. package/dist/chat-ZaY3KY-R.js +0 -226
  596. package/dist/chat-rhEjVfrd.cjs +0 -326
  597. package/dist/chatState-BbI93m6r.js +0 -33
  598. package/dist/chatState-DlJpHAsW.cjs +0 -119
  599. package/dist/dist-C38adNK1.js +0 -5923
  600. package/dist/dist-VxRI6eQv.cjs +0 -6019
  601. package/dist/domObserver-CVhsCSkS.js +0 -285
  602. package/dist/enviveConfig-CQ_8mT-g.cjs +0 -130
  603. package/dist/enviveConfig-Cwlp7-Qz.js +0 -62
  604. package/dist/enviveConfigContext-CIavPzcm.js +0 -47
  605. package/dist/enviveConfigContext-DHEs077z.cjs +0 -62
  606. package/dist/events-CgFGtanE.cjs +0 -69
  607. package/dist/events-WOOrnUAx.js +0 -63
  608. package/dist/exceptions/index.cjs +0 -4
  609. package/dist/exceptions/index.d.cts +0 -12
  610. package/dist/exceptions/index.d.ts +0 -12
  611. package/dist/exceptions/index.js +0 -3
  612. package/dist/exceptions-BjDgLzGi.cjs +0 -32
  613. package/dist/exceptions-CUGY31Ua.js +0 -20
  614. package/dist/featureFlagServiceContext-ClnlCJV5.d.cts +0 -24
  615. package/dist/featureFlagServiceContext-CyPGEe2d.d.ts +0 -24
  616. package/dist/featureFlagServiceContext-Dr8Cw23n.js +0 -46
  617. package/dist/featureFlagServiceContext-rxZhpdEj.cjs +0 -66
  618. package/dist/graphql-CvAHWmel.js +0 -46
  619. package/dist/graphql-JaGqsToc.cjs +0 -70
  620. package/dist/graphqlContext-B8wuRZcp.cjs +0 -111
  621. package/dist/graphqlContext-CpHMbKoX.js +0 -96
  622. package/dist/index-5li6ZMDu.d.ts +0 -11
  623. package/dist/index-BVZbvpx_.d.cts +0 -11
  624. package/dist/index-CMZcE7pk.d.cts +0 -224
  625. package/dist/index-CuihhoIF.d.ts +0 -42
  626. package/dist/index-bEjLKG_Q.d.ts +0 -224
  627. package/dist/index-qOBU4GEh.d.cts +0 -42
  628. package/dist/localStorageContext-BFwvuEcf.js +0 -90
  629. package/dist/localStorageContext-CWc5xJ6U.cjs +0 -104
  630. package/dist/models-Cw0QcbQv.js +0 -1118
  631. package/dist/models-Dl0_Ujgj.cjs +0 -1305
  632. package/dist/newOrgConfigAtom-C8h3w_Ji.js +0 -8
  633. package/dist/newOrgConfigContext-BdzDnzUM.js +0 -53
  634. package/dist/newOrgConfigContext-cWeJAT6E.cjs +0 -68
  635. package/dist/nodeSelector-BAKg1h_y.d.ts +0 -28
  636. package/dist/nodeSelector-BYEAyrsj.d.cts +0 -28
  637. package/dist/org-BNs_maoW.cjs +0 -111
  638. package/dist/org-CScQqL4k.js +0 -32
  639. package/dist/search-CsXXamht.js +0 -233
  640. package/dist/search-DHhDpeQU.cjs +0 -312
  641. package/dist/searchContext-B5ZNLtvd.js +0 -129
  642. package/dist/searchContext-SFvF_Y8J.cjs +0 -145
  643. package/dist/searchServiceAdapter-BkvDIhV8.js +0 -16
  644. package/dist/searchServiceAdapter-C4zzBUl0.cjs +0 -34
  645. package/dist/sessionStorageContext-BuWrJQwc.cjs +0 -66
  646. package/dist/sessionStorageContext-DvFHbk81.js +0 -52
  647. package/dist/shopifyUrlContext-COc1eDR_.cjs +0 -75
  648. package/dist/shopifyUrlContext-CToAt_98.js +0 -61
  649. package/dist/systemSettingsContext-D9iNGz5v.js +0 -39
  650. package/dist/systemSettingsContext-DdV7Yte8.cjs +0 -60
  651. package/dist/types-1iJ_FnQQ.cjs +0 -39
  652. package/dist/types-D5du68Vp.js +0 -27
  653. package/dist/urlsParser-Dax4iVNC.cjs +0 -78
  654. package/dist/urlsParser-NAp2LwWP.js +0 -42
  655. package/dist/useAppDetails-D3T6kJY_.cjs +0 -38
  656. package/dist/useAppDetails-xPVs6fW7.js +0 -30
  657. package/dist/useGraphQLConfig-B1DaVvFx.cjs +0 -76
  658. package/dist/useGraphQLConfig-BtPxjtxw.js +0 -63
  659. package/dist/utils-BZT_oZ3n.js +0 -92
  660. package/dist/utils-D3MjNkd3.cjs +0 -716
  661. package/dist/utils-DMwh3QbT.js +0 -607
  662. package/dist/utils-qtHPLFby.cjs +0 -130
  663. package/src/atoms/search/productRetrievalAPI.ts +0 -72
  664. package/src/atoms/search/productRetrievalAdapter.ts +0 -28
  665. package/src/exceptions/index.ts +0 -2
  666. package/src/global.d.ts +0 -8
  667. package/src/hooks/Search/useRecommendedProducts.ts +0 -50
  668. package/src/hooks/Search/useSearchInput.ts +0 -237
  669. package/src/types/FilterAttribute.ts +0 -35
  670. package/src/types/Suggestion.ts +0 -6
  671. package/src/util/colorVar.ts +0 -4
  672. package/src/util/configVersion.ts +0 -4
  673. package/src/util/domInsertion.ts +0 -17
  674. /package/dist/{featureFlagServiceContext-Csgo-MUv.cjs → AmplitudeOperations-DxQnurSG.cjs} +0 -0
  675. /package/dist/{featureFlagServiceContext-CISyb90N.js → AmplitudeOperations-ni7wVevx.js} +0 -0
  676. /package/src/{exceptions → types/exceptions}/sessionExceptions.ts +0 -0
@@ -1,607 +0,0 @@
1
- import { MessageRole as MessageRole$1, MessageType as MessageType$1, SpiffyMetricsEventName } from "./dist-C38adNK1.js";
2
- import { MessageRole, MessageType } from "./types-D5du68Vp.js";
3
- import { isBaseEcommerceEvent, isGA4EcommerceEvent, isLegacyUAEcommerceEvent } from "./models-Cw0QcbQv.js";
4
- import { logger_default } from "./logger-BMVdhQOV.js";
5
- import { PLPAttributeCategory, ResponseCategory, UserEventCategory } from "@spiffy-ai/commerce-api-client";
6
-
7
- //#region src/application/utils/analyticsUtils.ts
8
- const NORMALIZED_ADD_TO_CART_EVENT_NAMES = ["addtocart", "addedtocart"];
9
- const CHECK_DATA_LAYER_INTERVAL_MS = 500;
10
- const CHECK_DATA_LAYER_MAX_ATTEMPTS = 10;
11
- /**
12
- * Checks if a Google Analytics event is an add_to_cart event.
13
- *
14
- * @param event The event name to check.
15
- *
16
- * @returns True if the event is an add_to_cart event, false otherwise.
17
- */
18
- const isAddToCartEvent = (event) => {
19
- const normalizedEvent = event.replace(/[-_]/g, "").toLowerCase();
20
- return NORMALIZED_ADD_TO_CART_EVENT_NAMES.some((name) => normalizedEvent.includes(name));
21
- };
22
- /**
23
- * Tracks an add_to_cart event in Amplitude.
24
- *
25
- * @param event The event to track.
26
- */
27
- const handleAddToCartEvent = (event, track) => {
28
- let eventProps;
29
- if (isLegacyUAEcommerceEvent(event)) eventProps = {
30
- items: event.ecommerce.add.products.map((product) => ({
31
- item_name: product.name,
32
- item_category: product.category,
33
- price: product.price,
34
- quantity: product.quantity
35
- })),
36
- currency: event.ecommerce.add.currencyCode,
37
- event_format_version: "legacy_universal_analytics"
38
- };
39
- else if (isGA4EcommerceEvent(event)) eventProps = {
40
- items: event.ecommerce.items.map((item) => ({
41
- item_name: item.item_name,
42
- item_category: item.item_category,
43
- price: item.price,
44
- quantity: item.quantity
45
- })),
46
- currency: event.ecommerce.currency,
47
- event_format_version: "google_analytics_4"
48
- };
49
- else eventProps = {
50
- event_properties: { ...event },
51
- event_format_version: "unknown"
52
- };
53
- track(SpiffyMetricsEventName.AddToCartClicked, { eventProps });
54
- };
55
- /**
56
- * Wraps the window.dataLayer.push method to intercept add_to_cart events and send them to Amplitude.
57
- * This function runs on an interval until the dataLayer is available.
58
- */
59
- const initDataLayerWrapper = (track) => {
60
- let attempts = 0;
61
- const checkAndInitialize = () => {
62
- if (!window.dataLayer || !window.dataLayer.push) {
63
- attempts += 1;
64
- if (attempts >= CHECK_DATA_LAYER_MAX_ATTEMPTS) {
65
- logger_default.logDebug(`[spiffy-ai] dataLayer not available after ${CHECK_DATA_LAYER_MAX_ATTEMPTS} attempts`);
66
- return;
67
- }
68
- setTimeout(checkAndInitialize, CHECK_DATA_LAYER_INTERVAL_MS);
69
- return;
70
- }
71
- logger_default.logDebug("[spiffy-ai] dataLayer is available, wrapping push function...");
72
- const originalPush = window.dataLayer.push;
73
- window.dataLayer.push = (...args) => {
74
- if (isBaseEcommerceEvent(args[0]) && isAddToCartEvent(args[0].event)) handleAddToCartEvent(args[0], track);
75
- return originalPush.apply(window.dataLayer, args);
76
- };
77
- };
78
- checkAndInitialize();
79
- };
80
- const initAmplitude = (track) => {
81
- track(SpiffyMetricsEventName.BundleLoaded);
82
- };
83
-
84
- //#endregion
85
- //#region src/application/utils/coreContextToApiContext.ts
86
- const coreContextToApiContext = (context) => ({
87
- chat_id: context.chatId,
88
- org_id: context.orgId,
89
- user_id: context.userId,
90
- org_short_name: context.orgShortName,
91
- source: context.source,
92
- env: context.env
93
- });
94
-
95
- //#endregion
96
- //#region src/application/utils/coreUserEventToApiUserEvent.ts
97
- const coreUserEventToApiUserEvent = (data) => {
98
- if (data.category === UserEventCategory.PdpVisit || data.category === UserEventCategory.AddToCart) return {
99
- event_id: data.eventId,
100
- created_at: data.createdAt,
101
- category: data.category,
102
- attributes: {
103
- product_id: data.attributes.productId,
104
- parent_product_id: data.attributes.parentProductId,
105
- url: data.attributes.url
106
- }
107
- };
108
- if (data.category === UserEventCategory.PlpVisit) return {
109
- event_id: data.eventId,
110
- created_at: data.createdAt,
111
- category: data.category,
112
- attributes: {
113
- category: PLPAttributeCategory.Id,
114
- attributes: { id: data.attributes.attributes.id }
115
- }
116
- };
117
- if (data.category === UserEventCategory.QueryTyped) return {
118
- event_id: data.eventId,
119
- created_at: data.createdAt,
120
- category: data.category,
121
- attributes: { query: data.attributes.query }
122
- };
123
- if (data.category === UserEventCategory.Search) return {
124
- event_id: data.eventId,
125
- created_at: data.createdAt,
126
- category: data.category,
127
- attributes: {
128
- search_term: data.attributes.searchTerm,
129
- selected_filters: data.attributes.selectedFilters
130
- }
131
- };
132
- if (data.category === UserEventCategory.SuggestionClicked) return {
133
- event_id: data.eventId,
134
- created_at: data.createdAt,
135
- category: data.category,
136
- attributes: { suggestion_id: data.attributes.suggestionId }
137
- };
138
- if (data.category === UserEventCategory.PageVisit) return {
139
- event_id: data.eventId,
140
- created_at: data.createdAt,
141
- category: data.category,
142
- attributes: {
143
- url: data.attributes.url,
144
- page_visit_category: data.attributes.pageVisitCategory
145
- }
146
- };
147
- if (data.category === UserEventCategory.FormSubmitted) return {
148
- event_id: data.eventId,
149
- created_at: data.createdAt,
150
- category: data.category,
151
- attributes: {
152
- filled_schema: { ...data.attributes.filledSchema },
153
- form_response_id: data.attributes.formResponseId,
154
- form_type: data.attributes.formType
155
- }
156
- };
157
- return {
158
- event_id: data.eventId,
159
- created_at: data.createdAt,
160
- category: data.category
161
- };
162
- };
163
-
164
- //#endregion
165
- //#region src/application/utils/divideArray.ts
166
- const divideArray = (array, size) => {
167
- const rows = [];
168
- for (let i = 0; i < size; i += 1) rows.push(array.filter((_, index) => index % size === i));
169
- return rows;
170
- };
171
-
172
- //#endregion
173
- //#region src/application/utils/imageFilter.ts
174
- const getRecentProductImageUrls = (lastMessages, currentProductId) => {
175
- const productMessages = lastMessages.filter((message) => message.type === MessageType$1.Product && message.metadata?.imageUrl).map((m) => m);
176
- return [...productMessages.filter((m) => m.metadata?.id === currentProductId), ...productMessages.filter((m) => m.metadata?.id !== currentProductId)].map((m) => m.metadata.imageUrl);
177
- };
178
-
179
- //#endregion
180
- //#region src/application/utils/merchantUtils.ts
181
- const prepareMerchantPage = () => {
182
- let metaViewport = document.querySelector("meta[name='viewport']");
183
- if (metaViewport) {
184
- const content = metaViewport.getAttribute("content");
185
- if (!content?.includes("maximum-scale=1")) metaViewport.setAttribute("content", `${content}, maximum-scale=1`);
186
- return;
187
- }
188
- metaViewport = document.createElement("meta");
189
- metaViewport.setAttribute("name", "viewport");
190
- metaViewport.setAttribute("content", "width=device-width, initial-scale=1, maximum-scale=1");
191
- document.head.appendChild(metaViewport);
192
- };
193
-
194
- //#endregion
195
- //#region src/application/utils/messageFromFormSubmittedEvent.ts
196
- const messageFromFormSubmittedEvent = (event, formResponseAttributes) => {
197
- if (event.category !== UserEventCategory.FormSubmitted) return;
198
- const formStringContents = Object.entries(formResponseAttributes.schema.properties).map(([key, value]) => `${value.title}: ${event.attributes.filledSchema[key]}`).join("\n");
199
- return {
200
- id: event.eventId,
201
- role: MessageRole$1.User,
202
- type: MessageType$1.QueryTyped,
203
- createdAt: event.createdAt,
204
- metadata: { content: formStringContents }
205
- };
206
- };
207
-
208
- //#endregion
209
- //#region src/application/utils/messageFromQueryEvent.ts
210
- /**
211
- * Transforms a query UserEvent object into a Message object for presentation.
212
- *
213
- * @param event The user event object received from the server
214
- *
215
- * @returns A Message if the event is a query event, otherwise undefined
216
- */
217
- const messageFromQueryEvent = (event) => {
218
- if (event.category === UserEventCategory.QueryTyped) return {
219
- id: event.eventId,
220
- role: MessageRole$1.User,
221
- type: MessageType$1.QueryTyped,
222
- createdAt: event.createdAt,
223
- metadata: { content: event.attributes.query }
224
- };
225
- if (event.category === UserEventCategory.Search) return {
226
- id: event.eventId,
227
- role: MessageRole$1.User,
228
- type: MessageType$1.Search,
229
- createdAt: event.createdAt,
230
- metadata: {
231
- searchTerm: event.attributes.searchTerm || "",
232
- selectedFilters: event.attributes.selectedFilters || []
233
- }
234
- };
235
- };
236
-
237
- //#endregion
238
- //#region src/application/utils/messageFromResponse.ts
239
- /**
240
- * Transforms a server Response object into a Message object for presentation.
241
- *
242
- * @param response The response object received from the server containing model generated content
243
- *
244
- * @returns A Message if the response contains known attributes, undefined otherwise
245
- */
246
- const messageFromResponse = (response) => {
247
- if (response == null) return;
248
- if (response.category === ResponseCategory.Text) return {
249
- id: response.id,
250
- createdAt: response.createdAt,
251
- type: MessageType.Text,
252
- role: MessageRole.Assistant,
253
- metadata: { content: response.attributes.content }
254
- };
255
- if (response.category === ResponseCategory.Product) return {
256
- id: response.id,
257
- createdAt: response.createdAt,
258
- role: MessageRole.Assistant,
259
- type: MessageType.Product,
260
- metadata: { ...response.attributes }
261
- };
262
- if (response.category === ResponseCategory.Review) return {
263
- id: response.id,
264
- createdAt: response.createdAt,
265
- type: MessageType.Review,
266
- role: MessageRole.Assistant,
267
- metadata: {
268
- review: response.attributes.review,
269
- reviewer: response.attributes.reviewer,
270
- stars: response.attributes.stars,
271
- title: response.attributes.title,
272
- richInformation: response.attributes.richInformation
273
- }
274
- };
275
- if (response.category === ResponseCategory.Separator) return {
276
- id: response.id,
277
- createdAt: response.createdAt,
278
- type: MessageType.Separator,
279
- role: MessageRole.Assistant
280
- };
281
- if (response.category === ResponseCategory.Page) return {
282
- id: response.id,
283
- createdAt: response.createdAt,
284
- role: MessageRole.Assistant,
285
- type: MessageType.Page,
286
- metadata: { ...response.attributes }
287
- };
288
- if (response.category === ResponseCategory.ProductSearch) return {
289
- id: response.id,
290
- createdAt: response.createdAt,
291
- role: MessageRole.Assistant,
292
- type: MessageType.ProductSearch,
293
- metadata: { ...response.attributes }
294
- };
295
- if (response.category === ResponseCategory.ProductSearchFilter) return {
296
- id: response.id,
297
- createdAt: response.createdAt,
298
- role: MessageRole.Assistant,
299
- type: MessageType.ProductSearchFilter,
300
- metadata: { ...response.attributes }
301
- };
302
- if (response.category === ResponseCategory.Form) return {
303
- id: response.id,
304
- createdAt: response.createdAt,
305
- role: MessageRole.Assistant,
306
- type: MessageType.Form,
307
- metadata: {
308
- formType: response.attributes.formCategory?.formType,
309
- fields: Object.entries(response.attributes.schema.properties).map(([key, value]) => ({
310
- key,
311
- title: value.title,
312
- type: value.type,
313
- format: value.format,
314
- required: response.attributes.schema.required.includes(key)
315
- }))
316
- }
317
- };
318
- if (response.category === ResponseCategory.Order) return {
319
- id: response.id,
320
- createdAt: response.createdAt,
321
- role: MessageRole.Assistant,
322
- type: MessageType.Order,
323
- metadata: { ...response.attributes }
324
- };
325
- };
326
-
327
- //#endregion
328
- //#region src/application/utils/messageFromSuggestionEvent.ts
329
- /**
330
- * Transforms a UserEvent object into a Message object for presentation.
331
- *
332
- * @param event The UserEvent object received from the server
333
- * @param suggestions A list of generated suggestions to match the event to
334
- *
335
- * @returns A Message if the event is a suggestion click event, undefined otherwise
336
- */
337
- const messageFromSuggestionEvent = (event, suggestions) => {
338
- if (event.category === UserEventCategory.SuggestionClicked) {
339
- const { suggestionId } = event.attributes;
340
- return {
341
- id: event.eventId,
342
- role: MessageRole.User,
343
- type: MessageType.SuggestionClicked,
344
- createdAt: event.createdAt,
345
- metadata: {
346
- suggestionId,
347
- suggestionContent: suggestions.find((s) => s.id === suggestionId)?.content ?? ""
348
- }
349
- };
350
- }
351
- };
352
-
353
- //#endregion
354
- //#region src/application/utils/nextMessageRequestToApiRequest.ts
355
- const messageRequestToCommerceMessageRequest = (data) => ({
356
- context: {
357
- chat_id: data.context.chatId,
358
- org_id: data.context.orgId,
359
- org_short_name: data.context.orgShortName,
360
- user_id: data.context.userId,
361
- source: data.context.source,
362
- env: data.context.env
363
- },
364
- id: data.id,
365
- feature_flags: data.featureFlags,
366
- user_events: data.userEvents?.map((userEvent) => coreUserEventToApiUserEvent(userEvent)),
367
- generation_params: {
368
- model: data.generationParams?.model,
369
- max_tokens: data.generationParams?.maxTokens,
370
- stop: data.generationParams?.stop,
371
- stream: data.generationParams?.stream,
372
- temperature: data.generationParams?.temperature,
373
- top_p: data.generationParams?.topP,
374
- num_suggestions: data.generationParams?.numSuggestions,
375
- response_system_prompt: data.generationParams?.responseSystemPrompt,
376
- suggestion_system_prompt: data.generationParams?.suggestionSystemPrompt,
377
- response_caching: data.generationParams?.responseCaching
378
- }
379
- });
380
-
381
- //#endregion
382
- //#region src/application/utils/nodeSelector.ts
383
- var NodeSelector = class {
384
- constructor(pattern) {
385
- this.pattern = pattern;
386
- this.root = document;
387
- }
388
- getPattern() {
389
- return this.pattern;
390
- }
391
- setRoot(root) {
392
- this.root = root;
393
- }
394
- getRoot() {
395
- return this.root;
396
- }
397
- };
398
- var QuerySelector = class extends NodeSelector {
399
- parse() {
400
- return this.getRoot().querySelector(this.getPattern());
401
- }
402
- };
403
- var IDSelector = class extends NodeSelector {
404
- parse() {
405
- return this.getRoot().getElementById(this.getPattern());
406
- }
407
- };
408
- var XpathSelector = class extends NodeSelector {
409
- parse() {
410
- return this.getRoot()?.evaluate(this.getPattern(), this.getRoot(), null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)?.singleNodeValue;
411
- }
412
- };
413
- var ChainSelector = class extends NodeSelector {
414
- parse() {
415
- let selectorIndex = 0;
416
- const selectors = this.getPattern().split("@");
417
- const lastIndex = selectors.length - 1;
418
- const parseChain = (pattern, prevNode) => {
419
- const selector = SelectorFactory.parse(pattern);
420
- if (prevNode) selector.setRoot(prevNode);
421
- const currentNode = selector.parse();
422
- if (selectorIndex === lastIndex) return currentNode;
423
- let node = currentNode || document;
424
- if (currentNode?.shadowRoot) node = currentNode.shadowRoot;
425
- if (currentNode?.contentWindow) node = currentNode.contentWindow?.document;
426
- return parseChain(selectors[++selectorIndex].trim(), node);
427
- };
428
- return parseChain(selectors[selectorIndex].trim());
429
- }
430
- };
431
- var Empty = class extends NodeSelector {
432
- constructor() {
433
- super("");
434
- }
435
- parse() {
436
- return null;
437
- }
438
- };
439
- var SelectorFactory = class {
440
- static parse(composedSelector) {
441
- if (!composedSelector) return new Empty();
442
- const split = composedSelector.split("|");
443
- const type = split[0];
444
- const selector = split[1];
445
- switch (type) {
446
- case "id": return this.id(selector);
447
- case "query": return this.query(selector);
448
- case "xpath": return this.xpath(selector);
449
- default: return new Empty();
450
- }
451
- }
452
- static check(selector) {
453
- return selector ?? new Empty();
454
- }
455
- static chain(pattern) {
456
- return pattern ? new ChainSelector(pattern) : new Empty();
457
- }
458
- static id(pattern) {
459
- return pattern ? new IDSelector(pattern) : new Empty();
460
- }
461
- static query(pattern) {
462
- return pattern ? new QuerySelector(pattern) : new Empty();
463
- }
464
- static xpath(pattern) {
465
- return pattern ? new XpathSelector(pattern) : new Empty();
466
- }
467
- };
468
-
469
- //#endregion
470
- //#region src/application/utils/overrides.ts
471
- function isPlainObject(x) {
472
- return !!x && typeof x === "object" && !Array.isArray(x) && !(x instanceof Date) && !(x instanceof RegExp);
473
- }
474
- function isReplace(x) {
475
- return !!x && typeof x === "object" && "$replace" in x;
476
- }
477
- function isDelete(x) {
478
- return !!x && typeof x === "object" && x.$delete === true;
479
- }
480
- function isPrimitiveValue(x) {
481
- const t = typeof x;
482
- return x === null || t === "string" || t === "number" || t === "boolean" || t === "bigint" || t === "symbol" || t === "undefined";
483
- }
484
- function isArrayOfPrimitives(arr) {
485
- if (arr.length === 0) return false;
486
- for (let i = 0; i < arr.length; i += 1) {
487
- const v = arr[i];
488
- if (v !== void 0 && !isPrimitiveValue(v)) return false;
489
- }
490
- return true;
491
- }
492
- function mergeAny(baseAny, patchAny, opts) {
493
- if (isReplace(patchAny)) return patchAny.$replace;
494
- if (isDelete(patchAny)) return void 0;
495
- if (Array.isArray(baseAny)) {
496
- if (Array.isArray(patchAny)) {
497
- const baseArr = baseAny;
498
- const patchArr = patchAny;
499
- if (opts.arrayStrategy === "replace" || isArrayOfPrimitives(baseArr) || isArrayOfPrimitives(patchArr)) return patchAny;
500
- const out = baseArr.slice();
501
- const max = Math.max(out.length, patchArr.length);
502
- for (let i = 0; i < max; i += 1) {
503
- const pVal = patchArr[i];
504
- if (pVal !== void 0) out[i] = mergeAny(out[i], pVal, opts);
505
- }
506
- return out;
507
- }
508
- return baseAny;
509
- }
510
- if (isPlainObject(baseAny) && isPlainObject(patchAny)) {
511
- const baseObj = baseAny;
512
- const patchObj = patchAny;
513
- const out = { ...baseObj };
514
- for (const key of Object.keys(patchObj)) {
515
- const pVal = patchObj[key];
516
- if (pVal === void 0) {} else if (opts.nullDeletes && pVal === null) delete out[key];
517
- else if (isReplace(pVal)) out[key] = pVal.$replace;
518
- else if (isDelete(pVal)) delete out[key];
519
- else out[key] = mergeAny(baseObj?.[key], pVal, opts);
520
- }
521
- return out;
522
- }
523
- return patchAny ?? baseAny;
524
- }
525
- function applyOverrides(base, patch, opts = {}) {
526
- const { arrayStrategy = "mergeByIndex", nullDeletes = false } = opts;
527
- if (isReplace(patch)) return patch.$replace;
528
- if (isDelete(patch)) return void 0;
529
- if (Array.isArray(base)) {
530
- if (isReplace(patch)) return patch.$replace;
531
- if (Array.isArray(patch)) {
532
- if (arrayStrategy === "replace") return patch;
533
- const out = base.slice();
534
- const max = Math.max(out.length, patch.length);
535
- for (let i = 0; i < max; i += 1) {
536
- const pVal = patch[i];
537
- if (pVal !== void 0) out[i] = mergeAny(out[i], pVal, opts);
538
- }
539
- return out;
540
- }
541
- return base;
542
- }
543
- if (isPlainObject(base) && isPlainObject(patch)) {
544
- const out = { ...base };
545
- const patchObj = patch;
546
- for (const key of Object.keys(patchObj)) {
547
- const pVal = patchObj[key];
548
- if (pVal === void 0) {} else if (nullDeletes && pVal === null) delete out[key];
549
- else if (isReplace(pVal)) out[key] = pVal.$replace;
550
- else if (isDelete(pVal)) delete out[key];
551
- else {
552
- const bVal = base[key];
553
- out[key] = mergeAny(bVal, pVal, opts);
554
- }
555
- }
556
- return out;
557
- }
558
- return patch ?? base;
559
- }
560
-
561
- //#endregion
562
- //#region src/application/utils/stringUtils.ts
563
- var StringUtils = class StringUtils {
564
- static isNullOrEmpty(value) {
565
- const valueTrimmed = value?.trim();
566
- return value === void 0 || valueTrimmed === "";
567
- }
568
- static trimToNull(value) {
569
- const valueTrimmed = value?.trim();
570
- return StringUtils.isNullOrEmpty(valueTrimmed) ? void 0 : valueTrimmed;
571
- }
572
- static capitalize(type) {
573
- if (type === void 0) return "";
574
- return type.charAt(0).toUpperCase() + type.substring(1);
575
- }
576
- /**
577
- * Finds the first pattern in an array that matches a given URL.
578
- * Patterns can include a single wildcard '*' which matches any sequence of characters.
579
- *
580
- * @param patterns
581
- * @param urlToTest
582
- * @returns
583
- */
584
- static findMatchingPattern(patterns, urlToTest) {
585
- if (!urlToTest) return;
586
- for (const pattern of patterns) if (urlToTest.pathname !== "/") {
587
- const regexPattern = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
588
- if ((/* @__PURE__ */ new RegExp(`^${regexPattern}$`)).test(urlToTest.pathname)) return pattern;
589
- } else if (pattern.startsWith(urlToTest.hostname)) return pattern;
590
- }
591
- };
592
-
593
- //#endregion
594
- //#region src/application/utils/supportedEventRequestToApiRequest.ts
595
- const coreSupportedEventRequestToApiRequest = (coreSupportedEventRequest) => ({
596
- id: coreSupportedEventRequest.id,
597
- user_event: coreUserEventToApiUserEvent(coreSupportedEventRequest.userEvent),
598
- context: coreContextToApiContext(coreSupportedEventRequest.context)
599
- });
600
-
601
- //#endregion
602
- //#region src/application/utils/validation.ts
603
- const validateEmail = (value) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
604
-
605
- //#endregion
606
- export { NodeSelector, SelectorFactory, StringUtils, applyOverrides, coreContextToApiContext, coreSupportedEventRequestToApiRequest, coreUserEventToApiUserEvent, divideArray, getRecentProductImageUrls, initAmplitude, initDataLayerWrapper, messageFromFormSubmittedEvent, messageFromQueryEvent, messageFromResponse, messageFromSuggestionEvent, messageRequestToCommerceMessageRequest, prepareMerchantPage, validateEmail };
607
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtRE13aDNRYlQuanMiLCJuYW1lcyI6WyJldmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsIk1lc3NhZ2VUeXBlIiwiTWVzc2FnZVJvbGUiLCJNZXNzYWdlVHlwZSIsIk1lc3NhZ2VSb2xlIiwiTWVzc2FnZVR5cGUiLCJub2RlOiBOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCIsIm91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iXSwic291cmNlcyI6WyIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvYW5hbHl0aWNzVXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvY29yZUNvbnRleHRUb0FwaUNvbnRleHQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL2RpdmlkZUFycmF5LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL2ltYWdlRmlsdGVyLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL21lcmNoYW50VXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21RdWVyeUV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL21lc3NhZ2VGcm9tUmVzcG9uc2UudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbmV4dE1lc3NhZ2VSZXF1ZXN0VG9BcGlSZXF1ZXN0LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL25vZGVTZWxlY3Rvci50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9vdmVycmlkZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvc3RyaW5nVXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvc3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL3ZhbGlkYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyXCI7XG5pbXBvcnQge1xuICBpc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQsXG4gIGlzR0E0RWNvbW1lcmNlRXZlbnQsXG4gIGlzQmFzZUVjb21tZXJjZUV2ZW50LFxufSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVsc1wiO1xuaW1wb3J0IHsgQmFzZUVjb21tZXJjZUV2ZW50LCBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSBcIkBlbnZpdmUtYWkvdHlwZXNcIjtcblxuY29uc3QgTk9STUFMSVpFRF9BRERfVE9fQ0FSVF9FVkVOVF9OQU1FUyA9IFtcImFkZHRvY2FydFwiLCBcImFkZGVkdG9jYXJ0XCJdO1xuY29uc3QgQ0hFQ0tfREFUQV9MQVlFUl9JTlRFUlZBTF9NUyA9IDUwMDtcbmNvbnN0IENIRUNLX0RBVEFfTEFZRVJfTUFYX0FUVEVNUFRTID0gMTA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgR29vZ2xlIEFuYWx5dGljcyBldmVudCBpcyBhbiBhZGRfdG9fY2FydCBldmVudC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IG5hbWUgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgYW4gYWRkX3RvX2NhcnQgZXZlbnQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuY29uc3QgaXNBZGRUb0NhcnRFdmVudCA9IChldmVudDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFdmVudCA9IGV2ZW50LnJlcGxhY2UoL1stX10vZywgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIE5PUk1BTElaRURfQUREX1RPX0NBUlRfRVZFTlRfTkFNRVMuc29tZSgobmFtZSkgPT5cbiAgICBub3JtYWxpemVkRXZlbnQuaW5jbHVkZXMobmFtZSlcbiAgKTtcbn07XG5cbi8qKlxuICogVHJhY2tzIGFuIGFkZF90b19jYXJ0IGV2ZW50IGluIEFtcGxpdHVkZS5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIHRyYWNrLlxuICovXG5jb25zdCBoYW5kbGVBZGRUb0NhcnRFdmVudCA9IChcbiAgZXZlbnQ6IEJhc2VFY29tbWVyY2VFdmVudCxcbiAgdHJhY2s6IChcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkgPT4gdm9pZFxuKSA9PiB7XG4gIGxldCBldmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBpZiAoaXNMZWdhY3lVQUVjb21tZXJjZUV2ZW50KGV2ZW50KSkge1xuICAgIGV2ZW50UHJvcHMgPSB7XG4gICAgICBpdGVtczogZXZlbnQuZWNvbW1lcmNlLmFkZC5wcm9kdWN0cy5tYXAoKHByb2R1Y3QpID0+ICh7XG4gICAgICAgIGl0ZW1fbmFtZTogcHJvZHVjdC5uYW1lLFxuICAgICAgICBpdGVtX2NhdGVnb3J5OiBwcm9kdWN0LmNhdGVnb3J5LFxuICAgICAgICBwcmljZTogcHJvZHVjdC5wcmljZSxcbiAgICAgICAgcXVhbnRpdHk6IHByb2R1Y3QucXVhbnRpdHksXG4gICAgICB9KSksXG4gICAgICBjdXJyZW5jeTogZXZlbnQuZWNvbW1lcmNlLmFkZC5jdXJyZW5jeUNvZGUsXG4gICAgICBldmVudF9mb3JtYXRfdmVyc2lvbjogXCJsZWdhY3lfdW5pdmVyc2FsX2FuYWx5dGljc1wiLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNHQTRFY29tbWVyY2VFdmVudChldmVudCkpIHtcbiAgICBldmVudFByb3BzID0ge1xuICAgICAgaXRlbXM6IGV2ZW50LmVjb21tZXJjZS5pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGl0ZW1fbmFtZTogaXRlbS5pdGVtX25hbWUsXG4gICAgICAgIGl0ZW1fY2F0ZWdvcnk6IGl0ZW0uaXRlbV9jYXRlZ29yeSxcbiAgICAgICAgcHJpY2U6IGl0ZW0ucHJpY2UsXG4gICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxuICAgICAgfSkpLFxuICAgICAgY3VycmVuY3k6IGV2ZW50LmVjb21tZXJjZS5jdXJyZW5jeSxcbiAgICAgIGV2ZW50X2Zvcm1hdF92ZXJzaW9uOiBcImdvb2dsZV9hbmFseXRpY3NfNFwiLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZXZlbnRQcm9wcyA9IHtcbiAgICAgIGV2ZW50X3Byb3BlcnRpZXM6IHsgLi4uZXZlbnQgfSxcbiAgICAgIGV2ZW50X2Zvcm1hdF92ZXJzaW9uOiBcInVua25vd25cIixcbiAgICB9O1xuICB9XG5cbiAgdHJhY2soU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5BZGRUb0NhcnRDbGlja2VkLCB7XG4gICAgZXZlbnRQcm9wcyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFdyYXBzIHRoZSB3aW5kb3cuZGF0YUxheWVyLnB1c2ggbWV0aG9kIHRvIGludGVyY2VwdCBhZGRfdG9fY2FydCBldmVudHMgYW5kIHNlbmQgdGhlbSB0byBBbXBsaXR1ZGUuXG4gKiBUaGlzIGZ1bmN0aW9uIHJ1bnMgb24gYW4gaW50ZXJ2YWwgdW50aWwgdGhlIGRhdGFMYXllciBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0RGF0YUxheWVyV3JhcHBlciA9IChcbiAgdHJhY2s6IChcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkgPT4gdm9pZFxuKSA9PiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG5cbiAgLy8gY3VycmVudGx5LCBvdXIgYnVuZGxlIGlzIGFsd2F5cyBsb2FkZWQgYWZ0ZXIgR1RNIGhhcyBpbml0aWFsaXplZCBHQS9kYXRhTGF5ZXJcbiAgLy8gd2UnbGwgbmVlZCB0aGlzIGNoZWNrIGhlcmUgaWYvd2hlbiB3ZSBsb2FkIHNwaWZmeSBiZWZvcmUvb3V0c2lkZSBvZiBHVE1cbiAgY29uc3QgY2hlY2tBbmRJbml0aWFsaXplID0gKCkgPT4ge1xuICAgIGlmICghd2luZG93LmRhdGFMYXllciB8fCAhKHdpbmRvdy5kYXRhTGF5ZXIgYXMgYW55KS5wdXNoKSB7XG4gICAgICBhdHRlbXB0cyArPSAxO1xuXG4gICAgICBpZiAoYXR0ZW1wdHMgPj0gQ0hFQ0tfREFUQV9MQVlFUl9NQVhfQVRURU1QVFMpIHtcbiAgICAgICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICAgIGBbc3BpZmZ5LWFpXSBkYXRhTGF5ZXIgbm90IGF2YWlsYWJsZSBhZnRlciAke0NIRUNLX0RBVEFfTEFZRVJfTUFYX0FUVEVNUFRTfSBhdHRlbXB0c2BcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KGNoZWNrQW5kSW5pdGlhbGl6ZSwgQ0hFQ0tfREFUQV9MQVlFUl9JTlRFUlZBTF9NUyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgXCJbc3BpZmZ5LWFpXSBkYXRhTGF5ZXIgaXMgYXZhaWxhYmxlLCB3cmFwcGluZyBwdXNoIGZ1bmN0aW9uLi4uXCJcbiAgICApO1xuICAgIGNvbnN0IG9yaWdpbmFsUHVzaCA9IHdpbmRvdy5kYXRhTGF5ZXIucHVzaDtcbiAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2ggPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzQmFzZUVjb21tZXJjZUV2ZW50KGFyZ3NbMF0pICYmXG4gICAgICAgIGlzQWRkVG9DYXJ0RXZlbnQoKGFyZ3NbMF0gYXMgYW55KS5ldmVudClcbiAgICAgICkge1xuICAgICAgICBoYW5kbGVBZGRUb0NhcnRFdmVudChhcmdzWzBdIGFzIEJhc2VFY29tbWVyY2VFdmVudCwgdHJhY2spO1xuICAgICAgfVxuXG4gICAgICAvLyBJTVBPUlRBTlQ6IGNhbGwgdGhlIG9yaWdpbmFsIHB1c2ggbWV0aG9kIHNvIHRoYXQgdGhlIGV2ZW50IGlzIHN0aWxsIGxvZ2dlZCB0byBHQVxuICAgICAgcmV0dXJuIG9yaWdpbmFsUHVzaC5hcHBseSh3aW5kb3cuZGF0YUxheWVyLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG4gIGNoZWNrQW5kSW5pdGlhbGl6ZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluaXRBbXBsaXR1ZGUgPSAoXG4gIHRyYWNrOiAoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApID0+IHZvaWRcbikgPT4ge1xuICAvLyBUaGlzIGZ1bmN0aW9uIG1pZ2h0IG5vdCBiZSBuZWVkZWQgYW55bW9yZSBpZiBBbXBsaXR1ZGUgaXMgaW5pdGlhbGl6ZWQgdmlhIGNvbnRleHQuXG4gIC8vIEZvciBub3csIHdlJ2xsIGtlZXAgaXQgYW5kIHBhc3MgdGhlIHRyYWNrIGZ1bmN0aW9uLlxuICAvLyBJZiBpdCdzIHRydWx5IHJlZHVuZGFudCwgaXQgY2FuIGJlIHJlbW92ZWQgbGF0ZXIuXG4gIHRyYWNrKFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQnVuZGxlTG9hZGVkKTsgLy8gRXhhbXBsZSB1c2FnZSwgYWRqdXN0IGFzIG5lZWRlZFxufTtcbiIsImltcG9ydCB7IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuaW1wb3J0IHsgQ29udGV4dCBhcyBBcGlDb250ZXh0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcblxuaW50ZXJmYWNlIENvcmVDb250ZXh0IGV4dGVuZHMgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaUNvbnRleHQ+IHt9XG5cbmV4cG9ydCBjb25zdCBjb3JlQ29udGV4dFRvQXBpQ29udGV4dCA9IChjb250ZXh0OiBDb3JlQ29udGV4dCk6IEFwaUNvbnRleHQgPT4gKHtcbiAgY2hhdF9pZDogY29udGV4dC5jaGF0SWQsXG4gIG9yZ19pZDogY29udGV4dC5vcmdJZCxcbiAgdXNlcl9pZDogY29udGV4dC51c2VySWQsXG4gIG9yZ19zaG9ydF9uYW1lOiBjb250ZXh0Lm9yZ1Nob3J0TmFtZSxcbiAgc291cmNlOiBjb250ZXh0LnNvdXJjZSxcbiAgZW52OiBjb250ZXh0LmVudixcbn0pO1xuIiwiaW1wb3J0IHsgVXNlckV2ZW50IH0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5pbXBvcnQge1xuICBVc2VyRXZlbnQgYXMgQXBpVXNlckV2ZW50LFxuICBQTFBBdHRyaWJ1dGVDYXRlZ29yeSxcbiAgUExQSWRBdHRyaWJ1dGVzLFxuICBVc2VyRXZlbnRDYXRlZ29yeSxcbn0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcblxuZXhwb3J0IGNvbnN0IGNvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCA9IChkYXRhOiBVc2VyRXZlbnQpOiBBcGlVc2VyRXZlbnQgPT4ge1xuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGRwVmlzaXQgfHxcbiAgICBkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5BZGRUb0NhcnRcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBwcm9kdWN0X2lkOiBkYXRhLmF0dHJpYnV0ZXMucHJvZHVjdElkLFxuICAgICAgICBwYXJlbnRfcHJvZHVjdF9pZDogZGF0YS5hdHRyaWJ1dGVzLnBhcmVudFByb2R1Y3RJZCxcbiAgICAgICAgdXJsOiBkYXRhLmF0dHJpYnV0ZXMudXJsLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBscFZpc2l0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjYXRlZ29yeTogUExQQXR0cmlidXRlQ2F0ZWdvcnkuSWQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAvLyB3ZSdyZSBvbmx5IGhhbmRsaW5nIGlkIGF0dHJpYnV0ZXMgZm9yIG5vd1xuICAgICAgICAgIGlkOiAoZGF0YS5hdHRyaWJ1dGVzLmF0dHJpYnV0ZXMgYXMgUExQSWRBdHRyaWJ1dGVzKS5pZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBxdWVyeTogZGF0YS5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlNlYXJjaCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgc2VhcmNoX3Rlcm06IGRhdGEuYXR0cmlidXRlcy5zZWFyY2hUZXJtLFxuICAgICAgICBzZWxlY3RlZF9maWx0ZXJzOiBkYXRhLmF0dHJpYnV0ZXMuc2VsZWN0ZWRGaWx0ZXJzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBzdWdnZXN0aW9uX2lkOiBkYXRhLmF0dHJpYnV0ZXMuc3VnZ2VzdGlvbklkLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBhZ2VWaXNpdCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgdXJsOiBkYXRhLmF0dHJpYnV0ZXMudXJsLFxuICAgICAgICBwYWdlX3Zpc2l0X2NhdGVnb3J5OiBkYXRhLmF0dHJpYnV0ZXMucGFnZVZpc2l0Q2F0ZWdvcnksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZmlsbGVkX3NjaGVtYTogeyAuLi5kYXRhLmF0dHJpYnV0ZXMuZmlsbGVkU2NoZW1hIH0sXG4gICAgICAgIGZvcm1fcmVzcG9uc2VfaWQ6IGRhdGEuYXR0cmlidXRlcy5mb3JtUmVzcG9uc2VJZCxcbiAgICAgICAgZm9ybV90eXBlOiBkYXRhLmF0dHJpYnV0ZXMuZm9ybVR5cGUsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyBUaGlzIGlzIHRoZSBkZWZhdWx0IGFwcF9sb2FkZWQgZXZlbnQsIHdoZW4gd2Ugc3RhcnQgdG8gdXNlIGFwcF91bmxvYWRlZCB3ZSBuZWVkIHRvIGhhbmRsZSBpdCBoZXJlXG4gIHJldHVybiB7XG4gICAgZXZlbnRfaWQ6IGRhdGEuZXZlbnRJZCxcbiAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgfTtcbn07XG4iLCJleHBvcnQgY29uc3QgZGl2aWRlQXJyYXkgPSA8VD4oYXJyYXk6IFRbXSwgc2l6ZTogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IHJvd3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpICs9IDEpIHtcbiAgICByb3dzLnB1c2goYXJyYXkuZmlsdGVyKChfOiBULCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCAlIHNpemUgPT09IGkpKTtcbiAgfVxuICByZXR1cm4gcm93cztcbn07XG4iLCJpbXBvcnQgeyBNZXNzYWdlLCBNZXNzYWdlVHlwZSwgUHJvZHVjdE1lc3NhZ2VNZXRhZGF0YSB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgZ2V0UmVjZW50UHJvZHVjdEltYWdlVXJscyA9IChcbiAgbGFzdE1lc3NhZ2VzOiBNZXNzYWdlW10sXG4gIGN1cnJlbnRQcm9kdWN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbikgPT4ge1xuICBjb25zdCBwcm9kdWN0TWVzc2FnZXMgPSBsYXN0TWVzc2FnZXNcbiAgICAuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3QgJiYgbWVzc2FnZS5tZXRhZGF0YT8uaW1hZ2VVcmwpXG4gICAgLm1hcCgobSkgPT4gbSBhcyBQcm9kdWN0TWVzc2FnZU1ldGFkYXRhKTtcbiAgLy8gcHV0IGFkZGVkIHByb2R1Y3QgaW1hZ2UgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdFxuICByZXR1cm4gW1xuICAgIC4uLnByb2R1Y3RNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0ubWV0YWRhdGE/LmlkID09PSBjdXJyZW50UHJvZHVjdElkKSxcbiAgICAuLi5wcm9kdWN0TWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLm1ldGFkYXRhPy5pZCAhPT0gY3VycmVudFByb2R1Y3RJZCksXG4gIF0ubWFwKChtKSA9PiBtLm1ldGFkYXRhIS5pbWFnZVVybCEpO1xufTtcbiIsImV4cG9ydCBjb25zdCBwcmVwYXJlTWVyY2hhbnRQYWdlID0gKCkgPT4ge1xuICBsZXQgbWV0YVZpZXdwb3J0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0ndmlld3BvcnQnXVwiKTtcbiAgaWYgKG1ldGFWaWV3cG9ydCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBtZXRhVmlld3BvcnQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxuICAgIGNvbnN0IGhhc01heGltdW1TY2FsZSA9IGNvbnRlbnQ/LmluY2x1ZGVzKFwibWF4aW11bS1zY2FsZT0xXCIpXG4gICAgaWYgKCFoYXNNYXhpbXVtU2NhbGUpIHtcbiAgICAgIG1ldGFWaWV3cG9ydC5zZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIsIGAke2NvbnRlbnR9LCBtYXhpbXVtLXNjYWxlPTFgKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIG1ldGFWaWV3cG9ydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJtZXRhXCIpO1xuICBtZXRhVmlld3BvcnQuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcInZpZXdwb3J0XCIpXG4gIG1ldGFWaWV3cG9ydC5zZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIsIFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIG1heGltdW0tc2NhbGU9MVwiKVxuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1ldGFWaWV3cG9ydCk7XG59XG4iLCJpbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQge1xuICBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzLFxuICBNZXNzYWdlLFxuICBNZXNzYWdlUm9sZSxcbiAgTWVzc2FnZVR5cGUsXG4gIFVzZXJFdmVudCxcbn0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBtZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudCA9IChcbiAgZXZlbnQ6IFVzZXJFdmVudCxcbiAgZm9ybVJlc3BvbnNlQXR0cmlidXRlczogRm9ybVJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddLFxuKTogTWVzc2FnZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChldmVudC5jYXRlZ29yeSAhPT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBmb3JtU3RyaW5nQ29udGVudHMgPSBPYmplY3QuZW50cmllcyhmb3JtUmVzcG9uc2VBdHRyaWJ1dGVzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7dmFsdWUudGl0bGV9OiAke2V2ZW50LmF0dHJpYnV0ZXMuZmlsbGVkU2NoZW1hW2tleV19YClcbiAgICAuam9pbignXFxuJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogZXZlbnQuZXZlbnRJZCxcbiAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlF1ZXJ5VHlwZWQsXG4gICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIGNvbnRlbnQ6IGZvcm1TdHJpbmdDb250ZW50cyxcbiAgICB9LFxuICB9O1xufTtcbiIsImltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VSb2xlLCBNZXNzYWdlVHlwZSwgVXNlckV2ZW50IH0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5pbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhIHF1ZXJ5IFVzZXJFdmVudCBvYmplY3QgaW50byBhIE1lc3NhZ2Ugb2JqZWN0IGZvciBwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGV2ZW50IFRoZSB1c2VyIGV2ZW50IG9iamVjdCByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXJcbiAqXG4gKiBAcmV0dXJucyBBIE1lc3NhZ2UgaWYgdGhlIGV2ZW50IGlzIGEgcXVlcnkgZXZlbnQsIG90aGVyd2lzZSB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGNvbnN0IG1lc3NhZ2VGcm9tUXVlcnlFdmVudCA9IChldmVudDogVXNlckV2ZW50KTogTWVzc2FnZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZXZlbnQuZXZlbnRJZCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkLFxuICAgICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBjb250ZW50OiBldmVudC5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGV2ZW50LmV2ZW50SWQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuU2VhcmNoLFxuICAgICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBzZWFyY2hUZXJtOiBldmVudC5hdHRyaWJ1dGVzLnNlYXJjaFRlcm0gfHwgJycsXG4gICAgICAgIHNlbGVjdGVkRmlsdGVyczogZXZlbnQuYXR0cmlidXRlcy5zZWxlY3RlZEZpbHRlcnMgfHwgW10sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsImltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlUm9sZSwgQXBpUmVzcG9uc2UgfSBmcm9tIFwic3JjL3R5cGVzXCI7XG5pbXBvcnQgeyBSZXNwb25zZUNhdGVnb3J5IH0gZnJvbSBcIkBzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudFwiO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYSBzZXJ2ZXIgUmVzcG9uc2Ugb2JqZWN0IGludG8gYSBNZXNzYWdlIG9iamVjdCBmb3IgcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0IHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBjb250YWluaW5nIG1vZGVsIGdlbmVyYXRlZCBjb250ZW50XG4gKlxuICogQHJldHVybnMgQSBNZXNzYWdlIGlmIHRoZSByZXNwb25zZSBjb250YWlucyBrbm93biBhdHRyaWJ1dGVzLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBtZXNzYWdlRnJvbVJlc3BvbnNlID0gKFxuICByZXNwb25zZT86IEFwaVJlc3BvbnNlXG4pOiBNZXNzYWdlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5UZXh0LFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgY29udGVudDogcmVzcG9uc2UuYXR0cmlidXRlcy5jb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5Qcm9kdWN0LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgLi4ucmVzcG9uc2UuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5SZXZpZXcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5SZXZpZXcsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICByZXZpZXc6IHJlc3BvbnNlLmF0dHJpYnV0ZXMucmV2aWV3LFxuICAgICAgICByZXZpZXdlcjogcmVzcG9uc2UuYXR0cmlidXRlcy5yZXZpZXdlcixcbiAgICAgICAgc3RhcnM6IHJlc3BvbnNlLmF0dHJpYnV0ZXMuc3RhcnMsXG4gICAgICAgIHRpdGxlOiByZXNwb25zZS5hdHRyaWJ1dGVzLnRpdGxlLFxuICAgICAgICByaWNoSW5mb3JtYXRpb246IHJlc3BvbnNlLmF0dHJpYnV0ZXMucmljaEluZm9ybWF0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlNlcGFyYXRvcikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcmVzcG9uc2UuaWQsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRBdCxcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlNlcGFyYXRvcixcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlBhZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5QYWdlLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgLi4ucmVzcG9uc2UuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0U2VhcmNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiByZXNwb25zZS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogcmVzcG9uc2UuY3JlYXRlZEF0LFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaCxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIC4uLnJlc3BvbnNlLmF0dHJpYnV0ZXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAocmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaEZpbHRlcikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcmVzcG9uc2UuaWQsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRBdCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2hGaWx0ZXIsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICAuLi5yZXNwb25zZS5hdHRyaWJ1dGVzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LkZvcm0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5Gb3JtLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgZm9ybVR5cGU6IHJlc3BvbnNlLmF0dHJpYnV0ZXMuZm9ybUNhdGVnb3J5Py5mb3JtVHlwZSxcbiAgICAgICAgZmllbGRzOiBPYmplY3QuZW50cmllcyhyZXNwb25zZS5hdHRyaWJ1dGVzLnNjaGVtYS5wcm9wZXJ0aWVzKS5tYXAoXG4gICAgICAgICAgKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHRpdGxlOiB2YWx1ZS50aXRsZSxcbiAgICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICBmb3JtYXQ6IHZhbHVlLmZvcm1hdCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiByZXNwb25zZS5hdHRyaWJ1dGVzLnNjaGVtYS5yZXF1aXJlZC5pbmNsdWRlcyhrZXkpLFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAocmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuT3JkZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5PcmRlcixcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIC4uLnJlc3BvbnNlLmF0dHJpYnV0ZXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsImltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VSb2xlLCBNZXNzYWdlVHlwZSwgU3VnZ2VzdGlvbiB9IGZyb20gXCJzcmMvdHlwZXNcIjtcbmltcG9ydCB7IFVzZXJFdmVudCB9IGZyb20gXCJAZW52aXZlLWFpL3R5cGVzXCI7XG5pbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnRcIjtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGEgVXNlckV2ZW50IG9iamVjdCBpbnRvIGEgTWVzc2FnZSBvYmplY3QgZm9yIHByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIFVzZXJFdmVudCBvYmplY3QgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyXG4gKiBAcGFyYW0gc3VnZ2VzdGlvbnMgQSBsaXN0IG9mIGdlbmVyYXRlZCBzdWdnZXN0aW9ucyB0byBtYXRjaCB0aGUgZXZlbnQgdG9cbiAqXG4gKiBAcmV0dXJucyBBIE1lc3NhZ2UgaWYgdGhlIGV2ZW50IGlzIGEgc3VnZ2VzdGlvbiBjbGljayBldmVudCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQgPSAoXG4gIGV2ZW50OiBVc2VyRXZlbnQsXG4gIHN1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uW11cbik6IE1lc3NhZ2UgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgY29uc3QgeyBzdWdnZXN0aW9uSWQgfSA9IGV2ZW50LmF0dHJpYnV0ZXM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGV2ZW50LmV2ZW50SWQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuU3VnZ2VzdGlvbkNsaWNrZWQsXG4gICAgICBjcmVhdGVkQXQ6IGV2ZW50LmNyZWF0ZWRBdCxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHN1Z2dlc3Rpb25JZCxcbiAgICAgICAgc3VnZ2VzdGlvbkNvbnRlbnQ6XG4gICAgICAgICAgc3VnZ2VzdGlvbnMuZmluZCgocykgPT4gcy5pZCA9PT0gc3VnZ2VzdGlvbklkKT8uY29udGVudCA/PyBcIlwiLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQgeyBOZXh0TWVzc2FnZVJlcXVlc3QgYXMgQXBpTmV4dE1lc3NhZ2VSZXF1ZXN0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IGNvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCB9IGZyb20gJy4vY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50JztcbmltcG9ydCB7IE5leHRNZXNzYWdlUmVxdWVzdCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgbWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QgPSAoXG4gIGRhdGE6IE5leHRNZXNzYWdlUmVxdWVzdCxcbik6IEFwaU5leHRNZXNzYWdlUmVxdWVzdCA9PiAoe1xuICBjb250ZXh0OiB7XG4gICAgY2hhdF9pZDogZGF0YS5jb250ZXh0LmNoYXRJZCxcbiAgICBvcmdfaWQ6IGRhdGEuY29udGV4dC5vcmdJZCxcbiAgICBvcmdfc2hvcnRfbmFtZTogZGF0YS5jb250ZXh0Lm9yZ1Nob3J0TmFtZSxcbiAgICB1c2VyX2lkOiBkYXRhLmNvbnRleHQudXNlcklkLFxuICAgIHNvdXJjZTogZGF0YS5jb250ZXh0LnNvdXJjZSxcbiAgICBlbnY6IGRhdGEuY29udGV4dC5lbnYsXG4gIH0sXG4gIGlkOiBkYXRhLmlkLFxuICBmZWF0dXJlX2ZsYWdzOiBkYXRhLmZlYXR1cmVGbGFncyxcbiAgdXNlcl9ldmVudHM6IGRhdGEudXNlckV2ZW50cz8ubWFwKCh1c2VyRXZlbnQpID0+IGNvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCh1c2VyRXZlbnQpKSxcbiAgZ2VuZXJhdGlvbl9wYXJhbXM6IHtcbiAgICBtb2RlbDogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy5tb2RlbCxcbiAgICBtYXhfdG9rZW5zOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/Lm1heFRva2VucyxcbiAgICBzdG9wOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnN0b3AsXG4gICAgc3RyZWFtOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnN0cmVhbSxcbiAgICB0ZW1wZXJhdHVyZTogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy50ZW1wZXJhdHVyZSxcbiAgICB0b3BfcDogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy50b3BQLFxuICAgIG51bV9zdWdnZXN0aW9uczogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy5udW1TdWdnZXN0aW9ucyxcbiAgICByZXNwb25zZV9zeXN0ZW1fcHJvbXB0OiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnJlc3BvbnNlU3lzdGVtUHJvbXB0LFxuICAgIHN1Z2dlc3Rpb25fc3lzdGVtX3Byb21wdDogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy5zdWdnZXN0aW9uU3lzdGVtUHJvbXB0LFxuICAgIHJlc3BvbnNlX2NhY2hpbmc6IGRhdGEuZ2VuZXJhdGlvblBhcmFtcz8ucmVzcG9uc2VDYWNoaW5nLFxuICB9LFxufSk7XG4iLCJleHBvcnQgYWJzdHJhY3QgY2xhc3MgTm9kZVNlbGVjdG9yIHtcbiAgcHJpdmF0ZSBwYXR0ZXJuOiBzdHJpbmc7XG4gIHByaXZhdGUgcm9vdDogRG9jdW1lbnQ7XG5cbiAgY29uc3RydWN0b3IocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybjtcbiAgICB0aGlzLnJvb3QgPSBkb2N1bWVudDtcbiAgfVxuXG4gIGdldFBhdHRlcm4oKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0dGVybjtcbiAgfVxuXG4gIHNldFJvb3Qocm9vdDogRG9jdW1lbnQpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICB9XG5cbiAgZ2V0Um9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5yb290O1xuICB9XG5cbiAgYWJzdHJhY3QgcGFyc2UoKTogTm9kZSB8IG51bGw7XG59XG5cbmNsYXNzIFF1ZXJ5U2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um9vdCgpLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRQYXR0ZXJuKCkpO1xuICB9XG59XG5cbmNsYXNzIElEU2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um9vdCgpLmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0UGF0dGVybigpKSBhcyBOb2RlO1xuICB9XG59XG5cbmNsYXNzIFhwYXRoU2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um9vdCgpPy5ldmFsdWF0ZShcbiAgICAgIHRoaXMuZ2V0UGF0dGVybigpLFxuICAgICAgdGhpcy5nZXRSb290KCksXG4gICAgICBudWxsLFxuICAgICAgWFBhdGhSZXN1bHQuRklSU1RfT1JERVJFRF9OT0RFX1RZUEUsXG4gICAgICBudWxsLFxuICAgICk/LnNpbmdsZU5vZGVWYWx1ZSBhcyBOb2RlO1xuICB9XG59XG5cbmNsYXNzIENoYWluU2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgbGV0IHNlbGVjdG9ySW5kZXggPSAwO1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHRoaXMuZ2V0UGF0dGVybigpLnNwbGl0KCdAJyk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gc2VsZWN0b3JzLmxlbmd0aCAtIDE7XG5cbiAgICBjb25zdCBwYXJzZUNoYWluID0gKHBhdHRlcm46IHN0cmluZywgcHJldk5vZGU/OiBOb2RlIHwgbnVsbCk6IE5vZGUgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gU2VsZWN0b3JGYWN0b3J5LnBhcnNlKHBhdHRlcm4pO1xuXG4gICAgICBpZiAocHJldk5vZGUpIHtcbiAgICAgICAgc2VsZWN0b3Iuc2V0Um9vdChwcmV2Tm9kZSBhcyBEb2N1bWVudCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gc2VsZWN0b3IucGFyc2UoKTtcbiAgICAgIGlmIChzZWxlY3RvckluZGV4ID09PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgICAgfVxuXG4gICAgICBsZXQgbm9kZTogTm9kZSB8IG51bGwgfCB1bmRlZmluZWQgPSBjdXJyZW50Tm9kZSB8fCBkb2N1bWVudDtcbiAgICAgIGlmICgoY3VycmVudE5vZGUgYXMgSFRNTEVsZW1lbnQpPy5zaGFkb3dSb290KSB7XG4gICAgICAgIG5vZGUgPSAoY3VycmVudE5vZGUgYXMgSFRNTEVsZW1lbnQpLnNoYWRvd1Jvb3Q7XG4gICAgICB9XG5cbiAgICAgIGlmICgoY3VycmVudE5vZGUgYXMgSFRNTElGcmFtZUVsZW1lbnQpPy5jb250ZW50V2luZG93KSB7XG4gICAgICAgIG5vZGUgPSAoY3VycmVudE5vZGUgYXMgSFRNTElGcmFtZUVsZW1lbnQpLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VDaGFpbihzZWxlY3RvcnNbKytzZWxlY3RvckluZGV4XS50cmltKCksIG5vZGUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcGFyc2VDaGFpbihzZWxlY3RvcnNbc2VsZWN0b3JJbmRleF0udHJpbSgpKTtcbiAgfVxufVxuXG5jbGFzcyBFbXB0eSBleHRlbmRzIE5vZGVTZWxlY3RvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCcnKTtcbiAgfVxuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yRmFjdG9yeSB7XG4gIHN0YXRpYyBwYXJzZShjb21wb3NlZFNlbGVjdG9yPzogc3RyaW5nKSB7XG4gICAgaWYgKCFjb21wb3NlZFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gbmV3IEVtcHR5KCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BsaXQgPSBjb21wb3NlZFNlbGVjdG9yLnNwbGl0KCd8Jyk7XG4gICAgY29uc3QgdHlwZSA9IHNwbGl0WzBdO1xuICAgIGNvbnN0IHNlbGVjdG9yID0gc3BsaXRbMV07XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2lkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQoc2VsZWN0b3IpO1xuICAgICAgY2FzZSAncXVlcnknOlxuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeShzZWxlY3Rvcik7XG4gICAgICBjYXNlICd4cGF0aCc6XG4gICAgICAgIHJldHVybiB0aGlzLnhwYXRoKHNlbGVjdG9yKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZXcgRW1wdHkoKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY2hlY2soc2VsZWN0b3I/OiBOb2RlU2VsZWN0b3IpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IgPz8gbmV3IEVtcHR5KCk7XG4gIH1cblxuICBzdGF0aWMgY2hhaW4ocGF0dGVybj86IHN0cmluZykge1xuICAgIHJldHVybiBwYXR0ZXJuID8gbmV3IENoYWluU2VsZWN0b3IocGF0dGVybikgOiBuZXcgRW1wdHkoKTtcbiAgfVxuXG4gIHN0YXRpYyBpZChwYXR0ZXJuPzogc3RyaW5nKTogTm9kZVNlbGVjdG9yIHtcbiAgICByZXR1cm4gcGF0dGVybiA/IG5ldyBJRFNlbGVjdG9yKHBhdHRlcm4pIDogbmV3IEVtcHR5KCk7XG4gIH1cblxuICBzdGF0aWMgcXVlcnkocGF0dGVybj86IHN0cmluZyk6IE5vZGVTZWxlY3RvciB7XG4gICAgcmV0dXJuIHBhdHRlcm4gPyBuZXcgUXVlcnlTZWxlY3RvcihwYXR0ZXJuKSA6IG5ldyBFbXB0eSgpO1xuICB9XG5cbiAgc3RhdGljIHhwYXRoKHBhdHRlcm4/OiBzdHJpbmcpOiBOb2RlU2VsZWN0b3Ige1xuICAgIHJldHVybiBwYXR0ZXJuID8gbmV3IFhwYXRoU2VsZWN0b3IocGF0dGVybikgOiBuZXcgRW1wdHkoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRGVsZXRlT3AsIE1lcmdlT3B0aW9ucywgTm9JbmZlciwgT3ZlcnJpZGUsIFJlcGxhY2VPcCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHg6IHVua25vd24pOiB4IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIChcbiAgICAhIXggJiZcbiAgICB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiZcbiAgICAhQXJyYXkuaXNBcnJheSh4KSAmJlxuICAgICEoeCBpbnN0YW5jZW9mIERhdGUpICYmXG4gICAgISh4IGluc3RhbmNlb2YgUmVnRXhwKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc1JlcGxhY2UoeDogdW5rbm93bik6IHggaXMgUmVwbGFjZU9wPHVua25vd24+IHtcbiAgcmV0dXJuICEheCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgJyRyZXBsYWNlJyBpbiAoeCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG59XG5mdW5jdGlvbiBpc0RlbGV0ZSh4OiB1bmtub3duKTogeCBpcyBEZWxldGVPcCB7XG4gIHJldHVybiAhIXggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmICh4IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS4kZGVsZXRlID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZVZhbHVlKHg6IHVua25vd24pOiBib29sZWFuIHtcbiAgY29uc3QgdCA9IHR5cGVvZiB4O1xuICByZXR1cm4gKFxuICAgIHggPT09IG51bGwgfHxcbiAgICB0ID09PSAnc3RyaW5nJyB8fFxuICAgIHQgPT09ICdudW1iZXInIHx8XG4gICAgdCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgdCA9PT0gJ2JpZ2ludCcgfHxcbiAgICB0ID09PSAnc3ltYm9sJyB8fFxuICAgIHQgPT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlPZlByaW1pdGl2ZXMoYXJyOiB1bmtub3duW10pOiBib29sZWFuIHtcbiAgaWYgKGFyci5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTsgLy8gYW1iaWd1b3VzLCBkZWZhdWx0IHRvIG1lcmdlLWJ5LWluZGV4IG9uIGVtcHR5XG4gIC8vIElmIGV2ZXJ5IGRlZmluZWQgZWxlbWVudCBpcyBwcmltaXRpdmUsIHRyZWF0IGFzIHByaW1pdGl2ZXNcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCB2ID0gYXJyW2ldO1xuICAgIGlmICh2ICE9PSB1bmRlZmluZWQgJiYgIWlzUHJpbWl0aXZlVmFsdWUodikpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VBbnkoYmFzZUFueTogdW5rbm93biwgcGF0Y2hBbnk6IHVua25vd24sIG9wdHM6IE1lcmdlT3B0aW9ucyk6IHVua25vd24ge1xuICBpZiAoaXNSZXBsYWNlKHBhdGNoQW55KSkgcmV0dXJuIHBhdGNoQW55LiRyZXBsYWNlIGFzIHVua25vd247XG4gIGlmIChpc0RlbGV0ZShwYXRjaEFueSkpIHJldHVybiB1bmRlZmluZWQ7IC8vIGNhbGxlciBkZWxldGVzIHRoZSBrZXlcblxuICBpZiAoQXJyYXkuaXNBcnJheShiYXNlQW55KSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGNoQW55KSkge1xuICAgICAgY29uc3QgYmFzZUFyciA9IGJhc2VBbnkgYXMgdW5rbm93bltdO1xuICAgICAgY29uc3QgcGF0Y2hBcnIgPSBwYXRjaEFueSBhcyB1bmtub3duW107XG4gICAgICBjb25zdCBzaG91bGRSZXBsYWNlID1cbiAgICAgICAgb3B0cy5hcnJheVN0cmF0ZWd5ID09PSAncmVwbGFjZScgfHxcbiAgICAgICAgaXNBcnJheU9mUHJpbWl0aXZlcyhiYXNlQXJyKSB8fFxuICAgICAgICBpc0FycmF5T2ZQcmltaXRpdmVzKHBhdGNoQXJyKTtcbiAgICAgIGlmIChzaG91bGRSZXBsYWNlKSByZXR1cm4gcGF0Y2hBbnkgYXMgdW5rbm93bjtcbiAgICAgIGNvbnN0IG91dCA9IGJhc2VBcnIuc2xpY2UoKTtcbiAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KG91dC5sZW5ndGgsIHBhdGNoQXJyLmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heDsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IHBWYWwgPSBwYXRjaEFycltpXTtcbiAgICAgICAgaWYgKHBWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG91dFtpXSA9IG1lcmdlQW55KG91dFtpXSwgcFZhbCwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQgYXMgdW5rbm93bjtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2VBbnkgYXMgdW5rbm93bjtcbiAgfVxuXG4gIGlmIChpc1BsYWluT2JqZWN0KGJhc2VBbnkpICYmIGlzUGxhaW5PYmplY3QocGF0Y2hBbnkpKSB7XG4gICAgY29uc3QgYmFzZU9iaiA9IGJhc2VBbnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgcGF0Y2hPYmogPSBwYXRjaEFueSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyAuLi5iYXNlT2JqIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGF0Y2hPYmopKSB7XG4gICAgICBjb25zdCBwVmFsID0gcGF0Y2hPYmpba2V5XTtcbiAgICAgIGlmIChwVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gbGVhdmUgYXMtaXNcbiAgICAgIH0gZWxzZSBpZiAob3B0cy5udWxsRGVsZXRlcyAmJiBwVmFsID09PSBudWxsKSB7XG4gICAgICAgIGRlbGV0ZSBvdXRba2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZXBsYWNlKHBWYWwpKSB7XG4gICAgICAgIG91dFtrZXldID0gcFZhbC4kcmVwbGFjZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNEZWxldGUocFZhbCkpIHtcbiAgICAgICAgZGVsZXRlIG91dFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0W2tleV0gPSBtZXJnZUFueShiYXNlT2JqPy5ba2V5XSwgcFZhbCwgb3B0cyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQgYXMgdW5rbm93bjtcbiAgfVxuXG4gIHJldHVybiAocGF0Y2hBbnkgYXMgdW5rbm93bikgPz8gYmFzZUFueTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5T3ZlcnJpZGVzPFQ+KFxuICBiYXNlOiBULFxuICBwYXRjaDogT3ZlcnJpZGU8Tm9JbmZlcjxUPj4sXG4gIG9wdHM6IE1lcmdlT3B0aW9ucyA9IHt9LFxuKTogVCB7XG4gIGNvbnN0IHsgYXJyYXlTdHJhdGVneSA9ICdtZXJnZUJ5SW5kZXgnLCBudWxsRGVsZXRlcyA9IGZhbHNlIH0gPSBvcHRzO1xuXG4gIC8vIEhhbmRsZSB3aG9sZS1ub2RlIGNvbnRyb2wgb3BlcmF0b3JzIG9uIHBhdGNoIGl0c2VsZlxuICBpZiAoaXNSZXBsYWNlKHBhdGNoKSkgcmV0dXJuIHBhdGNoLiRyZXBsYWNlIGFzIFQ7XG4gIGlmIChpc0RlbGV0ZShwYXRjaCkpIHJldHVybiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBUO1xuXG4gIC8vIEFycmF5c1xuICBpZiAoQXJyYXkuaXNBcnJheShiYXNlKSkge1xuICAgIGlmIChpc1JlcGxhY2UocGF0Y2gpKSByZXR1cm4gcGF0Y2guJHJlcGxhY2UgYXMgVDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICAgIGlmIChhcnJheVN0cmF0ZWd5ID09PSAncmVwbGFjZScpIHJldHVybiBwYXRjaCBhcyB1bmtub3duIGFzIFQ7XG4gICAgICAvLyBtZXJnZSBieSBpbmRleFxuICAgICAgY29uc3Qgb3V0ID0gKGJhc2UgYXMgdW5rbm93bltdKS5zbGljZSgpO1xuICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgob3V0Lmxlbmd0aCwgcGF0Y2gubGVuZ3RoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4OyBpICs9IDEpIHtcbiAgICAgICAgY29uc3QgcFZhbCA9IChwYXRjaCBhcyB1bmtub3duW10pW2ldO1xuICAgICAgICBpZiAocFZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3V0W2ldID0gbWVyZ2VBbnkob3V0W2ldLCBwVmFsLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG91dCBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIC8vIGludmFsaWQgcGF0Y2ggdHlwZSBmb3IgYW4gYXJyYXkg4oaSIGlnbm9yZSBhbmQgcmV0dXJuIGJhc2VcbiAgICByZXR1cm4gYmFzZSBhcyBUO1xuICB9XG5cbiAgLy8gUGxhaW4gb2JqZWN0c1xuICBpZiAoaXNQbGFpbk9iamVjdChiYXNlKSAmJiBpc1BsYWluT2JqZWN0KHBhdGNoKSkge1xuICAgIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLihiYXNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB9O1xuICAgIGNvbnN0IHBhdGNoT2JqID0gcGF0Y2ggYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGF0Y2hPYmopKSB7XG4gICAgICBjb25zdCBwVmFsID0gcGF0Y2hPYmpba2V5XTtcbiAgICAgIGlmIChwVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gbGVhdmUgZXhpc3RpbmcgdmFsdWVcbiAgICAgIH0gZWxzZSBpZiAobnVsbERlbGV0ZXMgJiYgcFZhbCA9PT0gbnVsbCkge1xuICAgICAgICBkZWxldGUgb3V0W2tleV07XG4gICAgICB9IGVsc2UgaWYgKGlzUmVwbGFjZShwVmFsKSkge1xuICAgICAgICBvdXRba2V5XSA9IHBWYWwuJHJlcGxhY2U7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVsZXRlKHBWYWwpKSB7XG4gICAgICAgIGRlbGV0ZSBvdXRba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJWYWwgPSAoYmFzZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcbiAgICAgICAgb3V0W2tleV0gPSBtZXJnZUFueShiVmFsLCBwVmFsLCBvcHRzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dCBhcyB1bmtub3duIGFzIFQ7XG4gIH1cblxuICAvLyBGb3IgcHJpbWl0aXZlcyBvciB3aGVuIHBhdGNoIGlzIHByaW1pdGl2ZSwgcGF0Y2ggd2lucyBpZiBkZWZpbmVkXG4gIHJldHVybiAoKHBhdGNoIGFzIHVua25vd24pID8/IGJhc2UpIGFzIFQ7XG59XG4iLCJcbmNsYXNzIFN0cmluZ1V0aWxzIHtcbiAgc3RhdGljIGlzTnVsbE9yRW1wdHkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlVHJpbW1lZCA9IHZhbHVlPy50cmltKCk7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWVUcmltbWVkID09PSAnJztcbiAgfVxuXG4gIHN0YXRpYyB0cmltVG9OdWxsKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZhbHVlVHJpbW1lZCA9IHZhbHVlPy50cmltKCk7XG4gICAgcmV0dXJuIFN0cmluZ1V0aWxzLmlzTnVsbE9yRW1wdHkodmFsdWVUcmltbWVkKSA/IHVuZGVmaW5lZCA6IHZhbHVlVHJpbW1lZDtcbiAgfVxuXG4gIHN0YXRpYyBjYXBpdGFsaXplKHR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnN1YnN0cmluZygxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgZmlyc3QgcGF0dGVybiBpbiBhbiBhcnJheSB0aGF0IG1hdGNoZXMgYSBnaXZlbiBVUkwuXG4gICAqIFBhdHRlcm5zIGNhbiBpbmNsdWRlIGEgc2luZ2xlIHdpbGRjYXJkICcqJyB3aGljaCBtYXRjaGVzIGFueSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0dGVybnNcbiAgICogQHBhcmFtIHVybFRvVGVzdFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGZpbmRNYXRjaGluZ1BhdHRlcm4ocGF0dGVybnM6IHN0cmluZ1tdLCB1cmxUb1Rlc3Q6IExvY2F0aW9uKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXVybFRvVGVzdCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgIC8vIFRlc3Qgb25seSBpZiBhIHBhdGhuYW1lIGlzIHByZXNlbnQuXG4gICAgICBpZiAodXJsVG9UZXN0LnBhdGhuYW1lICE9PSAnLycpIHtcbiAgICAgICAgLy8gRXNjYXBlIHNwZWNpYWwgcmVnZXggY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVyblxuICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBjaGFyYWN0ZXJzIGxpa2UgJy4nLCAnKycsICc/JywgJygnLCBldGMuLCBpbiB0aGUgcGF0dGVybiBhcmUgdHJlYXRlZCBsaXRlcmFsbHkuXG4gICAgICAgIGNvbnN0IGVzY2FwZWRQYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC9bLis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG5cbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgd2lsZGNhcmQgJyonIHdpdGggaXRzIHJlZ2V4IGVxdWl2YWxlbnQgJy4qJyAobWF0Y2hlcyBhbnkgY2hhcmFjdGVyIHplcm8gb3IgbW9yZSB0aW1lcylcbiAgICAgICAgY29uc3QgcmVnZXhQYXR0ZXJuID0gZXNjYXBlZFBhdHRlcm4ucmVwbGFjZSgvXFwqL2csICcuKicpO1xuXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7cmVnZXhQYXR0ZXJufSRgKTtcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QodXJsVG9UZXN0LnBhdGhuYW1lKSkge1xuICAgICAgICAgIHJldHVybiBwYXR0ZXJuO1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5zdGFydHNXaXRoKHVybFRvVGVzdC5ob3N0bmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IFN0cmluZ1V0aWxzIH07XG4iLCJpbXBvcnQgeyBTdXBwb3J0ZWRFdmVudFJlcXVlc3QgYXMgQXBpU3VwcG9ydGVkRXZlbnRSZXF1ZXN0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IFN1cHBvcnRlZEV2ZW50UmVxdWVzdCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuaW1wb3J0IHsgY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50IH0gZnJvbSAnLi9jb3JlVXNlckV2ZW50VG9BcGlVc2VyRXZlbnQnO1xuaW1wb3J0IHsgY29yZUNvbnRleHRUb0FwaUNvbnRleHQgfSBmcm9tICcuL2NvcmVDb250ZXh0VG9BcGlDb250ZXh0JztcblxudHlwZSBDb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0ID0gU3VwcG9ydGVkRXZlbnRSZXF1ZXN0O1xuXG5leHBvcnQgY29uc3QgY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvQXBpUmVxdWVzdCA9IChcbiAgY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdDogQ29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdCxcbik6IEFwaVN1cHBvcnRlZEV2ZW50UmVxdWVzdCA9PiAoe1xuICBpZDogY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdC5pZCxcbiAgdXNlcl9ldmVudDogY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50KGNvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3QudXNlckV2ZW50KSxcbiAgY29udGV4dDogY29yZUNvbnRleHRUb0FwaUNvbnRleHQoY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdC5jb250ZXh0KSxcbn0pO1xuIiwiLy8gVGhpcyBlbWFpbCB2YWxpZGF0ZXMgdGhhdCB0aGVyZSBhcmUgb25lIG9yIG1vcmUgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGBAYCBzeW1ib2wsXG4vLyBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlIGBAYCBzeW1ib2wgYW5kIHRoZSBgLmAgc3ltYm9sLFxuLy8gYW5kIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGAuYCBzeW1ib2xcbi8vIEl0IGRvZXMgTk9UIHZhbGlkYXRlIGFsbCBwb3NzaWJsZSBlbWFpbCBmb3JtYXRzLCBidXQgaXQgaXMgYSBkZWNlbnQgcGxhY2UgdG8gc3RhcnQuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVFbWFpbCA9ICh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiA9PiAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLy50ZXN0KHZhbHVlKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVFBLE1BQU0scUNBQXFDLENBQUMsYUFBYSxjQUFjO0FBQ3ZFLE1BQU0sK0JBQStCO0FBQ3JDLE1BQU0sZ0NBQWdDOzs7Ozs7OztBQVN0QyxNQUFNLG9CQUFvQixVQUEyQjtDQUNuRCxNQUFNLGtCQUFrQixNQUFNLFFBQVEsU0FBUyxHQUFHLENBQUMsYUFBYTtBQUNoRSxRQUFPLG1DQUFtQyxNQUFNLFNBQzlDLGdCQUFnQixTQUFTLEtBQUssQ0FDL0I7Ozs7Ozs7QUFRSCxNQUFNLHdCQUNKLE9BQ0EsVUFJRztDQUNILElBQUlBO0FBRUosS0FBSSx5QkFBeUIsTUFBTSxDQUNqQyxjQUFhO0VBQ1gsT0FBTyxNQUFNLFVBQVUsSUFBSSxTQUFTLEtBQUssYUFBYTtHQUNwRCxXQUFXLFFBQVE7R0FDbkIsZUFBZSxRQUFRO0dBQ3ZCLE9BQU8sUUFBUTtHQUNmLFVBQVUsUUFBUTtHQUNuQixFQUFFO0VBQ0gsVUFBVSxNQUFNLFVBQVUsSUFBSTtFQUM5QixzQkFBc0I7RUFDdkI7VUFDUSxvQkFBb0IsTUFBTSxDQUNuQyxjQUFhO0VBQ1gsT0FBTyxNQUFNLFVBQVUsTUFBTSxLQUFLLFVBQVU7R0FDMUMsV0FBVyxLQUFLO0dBQ2hCLGVBQWUsS0FBSztHQUNwQixPQUFPLEtBQUs7R0FDWixVQUFVLEtBQUs7R0FDaEIsRUFBRTtFQUNILFVBQVUsTUFBTSxV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