@envive-ai/react-hooks 0.1.6 → 0.1.7

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 (667) hide show
  1. package/dist/NewOrgConfig-C5YL4Y62.cjs +20 -0
  2. package/dist/NewOrgConfig-CRyIfb_l.js +15 -0
  3. package/dist/SystemSettingsContext-Cb9YHln8.cjs +20 -0
  4. package/dist/SystemSettingsContext-D3mmGGcv.js +13 -0
  5. package/dist/TrackComponentVisibleEvent-C7c_rHFW.cjs +59 -0
  6. package/dist/TrackComponentVisibleEvent-DXTEBjGM.js +52 -0
  7. package/dist/amplitudeContext-CB_F-nJY.d.cts +52 -0
  8. package/dist/amplitudeContext-Cak6ijMq.js +287 -0
  9. package/dist/amplitudeContext-DFYBDc0h.d.ts +52 -0
  10. package/dist/amplitudeContext-sTEsPaVG.cjs +309 -0
  11. package/dist/api-DSFlctlc.cjs +269 -0
  12. package/dist/api-JTNjuOfc.js +190 -0
  13. package/dist/{app-CjsQ2_n-.js → app-D_upYeqF.js} +6 -6
  14. package/dist/{app-CnKRZ9RW.cjs → app-KXTMPa4s.cjs} +8 -8
  15. package/dist/application/models/graphql/index.cjs +2 -1
  16. package/dist/application/models/graphql/index.d.ts +1 -1
  17. package/dist/application/models/graphql/index.js +2 -1
  18. package/dist/application/models/guards/api/index.cjs +2 -1
  19. package/dist/application/models/guards/api/index.d.ts +2 -2
  20. package/dist/application/models/guards/api/index.js +2 -1
  21. package/dist/application/models/index.cjs +11 -9
  22. package/dist/application/models/index.d.cts +8 -4
  23. package/dist/application/models/index.d.ts +11 -7
  24. package/dist/application/models/index.js +10 -7
  25. package/dist/application/models/utilityTypes/index.cjs +1 -1
  26. package/dist/application/models/utilityTypes/index.d.ts +1 -1
  27. package/dist/application/models/utilityTypes/index.js +1 -1
  28. package/dist/application/models/variantInfo/index.cjs +1 -1
  29. package/dist/application/models/variantInfo/index.d.cts +1 -1
  30. package/dist/application/models/variantInfo/index.d.ts +1 -1
  31. package/dist/application/models/variantInfo/index.js +1 -1
  32. package/dist/application/utils/index.cjs +28 -22
  33. package/dist/application/utils/index.d.cts +12 -8
  34. package/dist/application/utils/index.d.ts +16 -12
  35. package/dist/application/utils/index.js +19 -13
  36. package/dist/{atomStore-B4jIaDPd.cjs → atomStore-DEZyFCNz.cjs} +1 -1
  37. package/dist/{atomStore-D8pjE1vL.js → atomStore-DnPEioF4.js} +1 -1
  38. package/dist/atoms/app/index.cjs +13 -9
  39. package/dist/atoms/app/index.d.cts +15 -11
  40. package/dist/atoms/app/index.d.ts +18 -14
  41. package/dist/atoms/app/index.js +13 -9
  42. package/dist/atoms/atomStore/index.cjs +2 -2
  43. package/dist/atoms/atomStore/index.d.cts +1 -1
  44. package/dist/atoms/atomStore/index.js +2 -2
  45. package/dist/atoms/chat/index.cjs +34 -28
  46. package/dist/atoms/chat/index.d.cts +35 -31
  47. package/dist/atoms/chat/index.d.ts +38 -34
  48. package/dist/atoms/chat/index.js +20 -14
  49. package/dist/atoms/globalSearch/index.cjs +1 -1
  50. package/dist/atoms/globalSearch/index.d.cts +5 -5
  51. package/dist/atoms/globalSearch/index.d.ts +5 -5
  52. package/dist/atoms/globalSearch/index.js +1 -1
  53. package/dist/atoms/org/index.cjs +6 -14
  54. package/dist/atoms/org/index.d.cts +27 -32
  55. package/dist/atoms/org/index.d.ts +30 -35
  56. package/dist/atoms/org/index.js +5 -11
  57. package/dist/atoms/search/index.cjs +44 -34
  58. package/dist/atoms/search/index.d.cts +9 -4
  59. package/dist/atoms/search/index.d.ts +12 -7
  60. package/dist/atoms/search/index.js +26 -16
  61. package/dist/atoms/search/types.cjs +5 -0
  62. package/dist/atoms/search/types.d.cts +2 -0
  63. package/dist/atoms/search/types.d.ts +2 -0
  64. package/dist/atoms/search/types.js +3 -0
  65. package/dist/cdnContext-BMjVfBft.cjs +53 -0
  66. package/dist/cdnContext-DgsJ00Tb.js +38 -0
  67. package/dist/{chat-CV6MXeID.js → chat-B4lkFIxz.js} +1 -1
  68. package/dist/chat-D1Eat8Ih.cjs +394 -0
  69. package/dist/chat-DPJGdUkz.js +258 -0
  70. package/dist/{chat-BubCW1as.cjs → chat-zA-K4tR_.cjs} +1 -1
  71. package/dist/chatElementDisplayLocation-9SW40Dd3.d.cts +25 -0
  72. package/dist/chatElementDisplayLocation-C1tRM5OD.d.ts +25 -0
  73. package/dist/chatSearch-B5jMnCYX.js +315 -0
  74. package/dist/chatSearch-DWMiyWN0.cjs +444 -0
  75. package/dist/chatState-BisPJd5g.cjs +120 -0
  76. package/dist/chatState-BrmBYY8l.js +34 -0
  77. package/dist/commerce-api-CxDIfeME.cjs +318 -0
  78. package/dist/commerce-api-DagLj3D_.js +311 -0
  79. package/dist/{components-B4T3Uzth.js → components-B1edduHz.js} +1 -1
  80. package/dist/{components-Cw9WjA6g.cjs → components-g0G58Kat.cjs} +1 -1
  81. package/dist/config/locators/components/chat/index.cjs +1 -1
  82. package/dist/config/locators/components/chat/index.d.cts +1 -1
  83. package/dist/config/locators/components/chat/index.d.ts +1 -1
  84. package/dist/config/locators/components/chat/index.js +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/index.cjs +1 -1
  88. package/dist/config/locators/components/index.d.cts +1 -1
  89. package/dist/config/locators/components/index.d.ts +1 -1
  90. package/dist/config/locators/components/index.js +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.cjs +42 -22
  94. package/dist/config/locators/index.d.cts +2 -2
  95. package/dist/config/locators/index.d.ts +3 -3
  96. package/dist/config/locators/index.js +25 -5
  97. package/dist/contexts/amplitudeContext/index.cjs +21 -0
  98. package/dist/contexts/amplitudeContext/index.d.cts +2 -0
  99. package/dist/contexts/amplitudeContext/index.d.ts +2 -0
  100. package/dist/contexts/amplitudeContext/index.js +19 -0
  101. package/dist/contexts/cdnContext/index.cjs +7 -0
  102. package/dist/contexts/cdnContext/index.d.cts +15 -0
  103. package/dist/contexts/cdnContext/index.d.ts +15 -0
  104. package/dist/contexts/cdnContext/index.js +6 -0
  105. package/dist/contexts/chatContext/index.cjs +329 -0
  106. package/dist/contexts/chatContext/index.d.cts +15 -0
  107. package/dist/contexts/chatContext/index.d.ts +15 -0
  108. package/dist/contexts/chatContext/index.js +322 -0
  109. package/dist/contexts/enviveConfigContext/index.cjs +7 -0
  110. package/dist/contexts/enviveConfigContext/index.d.cts +30 -0
  111. package/dist/contexts/enviveConfigContext/index.d.ts +30 -0
  112. package/dist/contexts/enviveConfigContext/index.js +6 -0
  113. package/dist/contexts/enviveCssContext/index.cjs +65 -0
  114. package/dist/contexts/enviveCssContext/index.d.cts +10 -0
  115. package/dist/contexts/enviveCssContext/index.d.ts +10 -0
  116. package/dist/contexts/enviveCssContext/index.js +62 -0
  117. package/dist/contexts/featureFlagContext/index.cjs +107 -0
  118. package/dist/contexts/featureFlagContext/index.d.cts +20 -0
  119. package/dist/contexts/featureFlagContext/index.d.ts +20 -0
  120. package/dist/contexts/featureFlagContext/index.js +103 -0
  121. package/dist/contexts/featureFlagServiceContext/index.cjs +6 -0
  122. package/dist/contexts/featureFlagServiceContext/index.d.cts +5 -0
  123. package/dist/contexts/featureFlagServiceContext/index.d.ts +5 -0
  124. package/dist/contexts/featureFlagServiceContext/index.js +5 -0
  125. package/dist/contexts/graphqlContext/index.cjs +15 -0
  126. package/dist/contexts/graphqlContext/index.d.cts +12 -0
  127. package/dist/contexts/graphqlContext/index.d.ts +12 -0
  128. package/dist/contexts/graphqlContext/index.js +14 -0
  129. package/dist/contexts/localStorageContext/index.cjs +6 -0
  130. package/dist/contexts/localStorageContext/index.d.cts +30 -0
  131. package/dist/contexts/localStorageContext/index.d.ts +30 -0
  132. package/dist/contexts/localStorageContext/index.js +4 -0
  133. package/dist/contexts/newOrgConfigContext/index.cjs +19 -0
  134. package/dist/contexts/newOrgConfigContext/index.d.cts +30 -0
  135. package/dist/contexts/newOrgConfigContext/index.d.ts +30 -0
  136. package/dist/contexts/newOrgConfigContext/index.js +18 -0
  137. package/dist/contexts/searchContext/index.cjs +23 -0
  138. package/dist/contexts/searchContext/index.d.cts +16 -0
  139. package/dist/contexts/searchContext/index.d.ts +16 -0
  140. package/dist/contexts/searchContext/index.js +22 -0
  141. package/dist/contexts/sessionStorageContext/index.cjs +5 -0
  142. package/dist/contexts/sessionStorageContext/index.d.cts +15 -0
  143. package/dist/contexts/sessionStorageContext/index.d.ts +15 -0
  144. package/dist/contexts/sessionStorageContext/index.js +4 -0
  145. package/dist/contexts/shopifyUrlContext/index.cjs +5 -0
  146. package/dist/contexts/shopifyUrlContext/index.d.cts +20 -0
  147. package/dist/contexts/shopifyUrlContext/index.d.ts +20 -0
  148. package/dist/contexts/shopifyUrlContext/index.js +4 -0
  149. package/dist/contexts/systemSettingsContext/index.cjs +8 -0
  150. package/dist/contexts/systemSettingsContext/index.d.cts +36 -0
  151. package/dist/contexts/systemSettingsContext/index.d.ts +36 -0
  152. package/dist/contexts/systemSettingsContext/index.js +6 -0
  153. package/dist/contexts/types.cjs +7 -0
  154. package/dist/contexts/types.d.cts +4 -0
  155. package/dist/contexts/types.d.ts +4 -0
  156. package/dist/contexts/types.js +3 -0
  157. package/dist/contexts/userIdentityContext/index.cjs +26 -0
  158. package/dist/contexts/userIdentityContext/index.d.cts +2 -0
  159. package/dist/contexts/userIdentityContext/index.d.ts +2 -0
  160. package/dist/contexts/userIdentityContext/index.js +25 -0
  161. package/dist/domObserver-B6cRGTny.js +285 -0
  162. package/dist/domObserver-DQZwhPrc.cjs +304 -0
  163. package/dist/enviveConfig-BJZ4zTJo.js +62 -0
  164. package/dist/enviveConfig-DdBrcGSQ.cjs +130 -0
  165. package/dist/enviveConfigContext-78orE_uH.cjs +60 -0
  166. package/dist/enviveConfigContext-jBCCWQH9.js +45 -0
  167. package/dist/events/index.cjs +1 -1
  168. package/dist/events/index.d.ts +1 -1
  169. package/dist/events/index.js +1 -1
  170. package/dist/{events-BrLpaNxh.js → events-BHJJjPDN.js} +1 -1
  171. package/dist/{events-DwT6cEwI.cjs → events-B_fJZf9E.cjs} +1 -1
  172. package/dist/featureFlagServiceContext-ChL7DJ53.cjs +56 -0
  173. package/dist/featureFlagServiceContext-D1PzHsEs.d.ts +23 -0
  174. package/dist/featureFlagServiceContext-DQwlCTde.d.cts +23 -0
  175. package/dist/featureFlagServiceContext-DzFfmb1Z.js +42 -0
  176. package/dist/featureGates-Blx10fwB.js +27 -0
  177. package/dist/featureGates-DcZNrUma.cjs +33 -0
  178. package/dist/frontendConfig-DrvrQSm8.d.ts +857 -0
  179. package/dist/frontendConfig-wg41mBok.d.cts +857 -0
  180. package/dist/{globalSearch-BFvEg53C.cjs → globalSearch-Bnjlxtr5.cjs} +1 -1
  181. package/dist/{globalSearch-B6THR7Jx.js → globalSearch-CRWUqnjq.js} +1 -1
  182. package/dist/graphql-B9HhDXYt.cjs +53 -0
  183. package/dist/graphql-W7GMIHUu.js +36 -0
  184. package/dist/graphqlConfig-Bn-HLHsh.cjs +39 -0
  185. package/dist/graphqlConfig-DtZm_YaH.js +14 -0
  186. package/dist/graphqlContext-BJg7B--J.js +96 -0
  187. package/dist/graphqlContext-DI-_VRmb.cjs +111 -0
  188. package/dist/hooks/AmplitudeOperations/index.cjs +21 -0
  189. package/dist/hooks/AmplitudeOperations/index.d.cts +12 -0
  190. package/dist/hooks/AmplitudeOperations/index.d.ts +12 -0
  191. package/dist/hooks/AmplitudeOperations/index.js +21 -0
  192. package/dist/hooks/AppDetails/index.cjs +18 -0
  193. package/dist/hooks/AppDetails/index.d.cts +26 -0
  194. package/dist/hooks/AppDetails/index.d.ts +26 -0
  195. package/dist/hooks/AppDetails/index.js +18 -0
  196. package/dist/hooks/BlockBackButton/index.cjs +29 -0
  197. package/dist/hooks/BlockBackButton/index.d.cts +5 -0
  198. package/dist/hooks/BlockBackButton/index.d.ts +5 -0
  199. package/dist/hooks/BlockBackButton/index.js +27 -0
  200. package/dist/hooks/CdnOperations/index.cjs +24 -0
  201. package/dist/hooks/CdnOperations/index.d.cts +7 -0
  202. package/dist/hooks/CdnOperations/index.d.ts +7 -0
  203. package/dist/hooks/CdnOperations/index.js +22 -0
  204. package/dist/hooks/ChatToggle/index.cjs +63 -0
  205. package/dist/hooks/ChatToggle/index.d.cts +12 -0
  206. package/dist/hooks/ChatToggle/index.d.ts +12 -0
  207. package/dist/hooks/ChatToggle/index.js +61 -0
  208. package/dist/hooks/ChatToggleAnalytics/index.cjs +37 -0
  209. package/dist/hooks/ChatToggleAnalytics/index.d.cts +9 -0
  210. package/dist/hooks/ChatToggleAnalytics/index.d.ts +9 -0
  211. package/dist/hooks/ChatToggleAnalytics/index.js +35 -0
  212. package/dist/hooks/CustomerSupportHandoff/index.cjs +36 -0
  213. package/dist/hooks/CustomerSupportHandoff/index.d.cts +16 -0
  214. package/dist/hooks/CustomerSupportHandoff/index.d.ts +16 -0
  215. package/dist/hooks/CustomerSupportHandoff/index.js +34 -0
  216. package/dist/hooks/Debounce/index.cjs +3 -0
  217. package/dist/hooks/Debounce/index.d.cts +5 -0
  218. package/dist/hooks/Debounce/index.d.ts +5 -0
  219. package/dist/hooks/Debounce/index.js +3 -0
  220. package/dist/hooks/ElementObserver/index.cjs +179 -0
  221. package/dist/hooks/ElementObserver/index.d.cts +29 -0
  222. package/dist/hooks/ElementObserver/index.d.ts +29 -0
  223. package/dist/hooks/ElementObserver/index.js +177 -0
  224. package/dist/hooks/GrabAndScroll/index.cjs +99 -0
  225. package/dist/hooks/GrabAndScroll/index.d.cts +14 -0
  226. package/dist/hooks/GrabAndScroll/index.d.ts +14 -0
  227. package/dist/hooks/GrabAndScroll/index.js +97 -0
  228. package/dist/hooks/GraphQLConfig/index.cjs +16 -0
  229. package/dist/hooks/GraphQLConfig/index.d.cts +15 -0
  230. package/dist/hooks/GraphQLConfig/index.d.ts +15 -0
  231. package/dist/hooks/GraphQLConfig/index.js +15 -0
  232. package/dist/hooks/IdentifyUser/index.cjs +59 -0
  233. package/dist/hooks/IdentifyUser/index.d.cts +10 -0
  234. package/dist/hooks/IdentifyUser/index.d.ts +10 -0
  235. package/dist/hooks/IdentifyUser/index.js +57 -0
  236. package/dist/hooks/ImageResolver/index.cjs +54 -0
  237. package/dist/hooks/ImageResolver/index.d.cts +7 -0
  238. package/dist/hooks/ImageResolver/index.d.ts +7 -0
  239. package/dist/hooks/ImageResolver/index.js +52 -0
  240. package/dist/hooks/Intersection/index.cjs +3 -0
  241. package/dist/hooks/Intersection/index.d.cts +7 -0
  242. package/dist/hooks/Intersection/index.d.ts +7 -0
  243. package/dist/hooks/Intersection/index.js +3 -0
  244. package/dist/hooks/IsSmallScreen/index.cjs +22 -0
  245. package/dist/hooks/IsSmallScreen/index.d.cts +5 -0
  246. package/dist/hooks/IsSmallScreen/index.d.ts +5 -0
  247. package/dist/hooks/IsSmallScreen/index.js +20 -0
  248. package/dist/hooks/LocalStorageOperations/index.cjs +79 -0
  249. package/dist/hooks/LocalStorageOperations/index.d.cts +17 -0
  250. package/dist/hooks/LocalStorageOperations/index.d.ts +17 -0
  251. package/dist/hooks/LocalStorageOperations/index.js +74 -0
  252. package/dist/hooks/MessageFilter/index.cjs +53 -0
  253. package/dist/hooks/MessageFilter/index.d.cts +29 -0
  254. package/dist/hooks/MessageFilter/index.d.ts +29 -0
  255. package/dist/hooks/MessageFilter/index.js +53 -0
  256. package/dist/hooks/MessageScrollObserver/index.cjs +36 -0
  257. package/dist/hooks/MessageScrollObserver/index.d.cts +5 -0
  258. package/dist/hooks/MessageScrollObserver/index.d.ts +5 -0
  259. package/dist/hooks/MessageScrollObserver/index.js +34 -0
  260. package/dist/hooks/NewOrgConfig/index.cjs +19 -0
  261. package/dist/hooks/NewOrgConfig/index.d.cts +22 -0
  262. package/dist/hooks/NewOrgConfig/index.d.ts +22 -0
  263. package/dist/hooks/NewOrgConfig/index.js +19 -0
  264. package/dist/hooks/Search/index.cjs +324 -0
  265. package/dist/hooks/Search/index.d.cts +66 -0
  266. package/dist/hooks/Search/index.d.ts +66 -0
  267. package/dist/hooks/Search/index.js +321 -0
  268. package/dist/hooks/SearchOperations/index.cjs +101 -0
  269. package/dist/hooks/SearchOperations/index.d.cts +22 -0
  270. package/dist/hooks/SearchOperations/index.d.ts +22 -0
  271. package/dist/hooks/SearchOperations/index.js +98 -0
  272. package/dist/hooks/SessionStorageOperations/index.cjs +30 -0
  273. package/dist/hooks/SessionStorageOperations/index.d.cts +8 -0
  274. package/dist/hooks/SessionStorageOperations/index.d.ts +8 -0
  275. package/dist/hooks/SessionStorageOperations/index.js +28 -0
  276. package/dist/hooks/ShopifyUrlOperations/index.cjs +53 -0
  277. package/dist/hooks/ShopifyUrlOperations/index.d.cts +23 -0
  278. package/dist/hooks/ShopifyUrlOperations/index.d.ts +23 -0
  279. package/dist/hooks/ShopifyUrlOperations/index.js +49 -0
  280. package/dist/hooks/SnapCalculator/index.cjs +29 -0
  281. package/dist/hooks/SnapCalculator/index.d.cts +12 -0
  282. package/dist/hooks/SnapCalculator/index.d.ts +12 -0
  283. package/dist/hooks/SnapCalculator/index.js +27 -0
  284. package/dist/hooks/SystemSettingsContext/index.cjs +7 -0
  285. package/dist/hooks/SystemSettingsContext/index.d.cts +22 -0
  286. package/dist/hooks/SystemSettingsContext/index.d.ts +22 -0
  287. package/dist/hooks/SystemSettingsContext/index.js +7 -0
  288. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +21 -0
  289. package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +18 -0
  290. package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +18 -0
  291. package/dist/hooks/TrackComponentVisibleEvent/index.js +21 -0
  292. package/dist/hooks/UpdateAnalyticsProps/index.cjs +61 -0
  293. package/dist/hooks/UpdateAnalyticsProps/index.d.cts +9 -0
  294. package/dist/hooks/UpdateAnalyticsProps/index.d.ts +9 -0
  295. package/dist/hooks/UpdateAnalyticsProps/index.js +58 -0
  296. package/dist/index-BCLaqnc2.d.cts +689 -0
  297. package/dist/{index-ylUiJvnr.d.ts → index-BS7-_CW4.d.ts} +1 -1
  298. package/dist/index-Bmub8e38.d.cts +1 -1
  299. package/dist/index-Bs0QtkSu.d.ts +689 -0
  300. package/dist/index-CESxqFso.d.cts +1 -1
  301. package/dist/index-CKeS9dud.d.ts +28 -0
  302. package/dist/index-CiWEYzXl.d.cts +1 -1
  303. package/dist/index-CyXULMyI.d.cts +186 -0
  304. package/dist/index-Cz10TYQA.d.cts +28 -0
  305. package/dist/{index-B0NW9KTj.d.cts → index-D46Rd0io.d.cts} +1 -1
  306. package/dist/{index-C6KdON7d.d.ts → index-D8ThXrqI.d.ts} +1 -1
  307. package/dist/{index-PGF8BvxQ.d.ts → index-D9VegTU-.d.ts} +1 -1
  308. package/dist/{index-DOii3C6b.d.ts → index-DBqgBV9N.d.ts} +1 -1
  309. package/dist/{index-Cqg6ltII.d.ts → index-DNUKSg6R.d.ts} +1 -1
  310. package/dist/{index-BDPWBU3h.d.cts → index-DO0s5KNA.d.cts} +1 -1
  311. package/dist/{index-CcIG01PJ.d.ts → index-DuyZQOE1.d.ts} +2 -2
  312. package/dist/{index-Byb45OPg.d.cts → index-REhT-Pls.d.cts} +1 -1
  313. package/dist/index-fKJB9EFb.d.ts +186 -0
  314. package/dist/interceptors/index.cjs +2 -1
  315. package/dist/interceptors/index.d.cts +9 -10
  316. package/dist/interceptors/index.d.ts +12 -13
  317. package/dist/interceptors/index.js +2 -1
  318. package/dist/interceptors/types.cjs +1 -0
  319. package/dist/interceptors/types.d.cts +12 -0
  320. package/dist/interceptors/types.d.ts +12 -0
  321. package/dist/interceptors/types.js +3 -0
  322. package/dist/localStorageContext-6OrGDFid.js +95 -0
  323. package/dist/localStorageContext-Bld0OWmG.cjs +115 -0
  324. package/dist/logger-CSL2jqI9.cjs +26 -0
  325. package/dist/logger-D5MFf3nW.js +20 -0
  326. package/dist/{models-BkXg5eIP.cjs → models-Dn8Emdzc.js} +219 -458
  327. package/dist/models-ZpQcRZQK.cjs +1536 -0
  328. package/dist/newOrgConfigAtom--tewb_G0.js +8 -0
  329. package/dist/newOrgConfigAtom-DkSi45_Q.cjs +15 -0
  330. package/dist/newOrgConfigContext-B3aeblfE.cjs +68 -0
  331. package/dist/newOrgConfigContext-B5mzHKTG.js +53 -0
  332. package/dist/{nodeSelector-BxrS2S_k.d.ts → nodeSelector-DybpVr-i.d.ts} +1 -1
  333. package/dist/{nodeSelector-Dm4S-10n.d.cts → nodeSelector-XsUa5vNH.d.cts} +1 -1
  334. package/dist/org-B2uRkPt3.js +12 -0
  335. package/dist/org-ClUxpHPZ.cjs +43 -0
  336. package/dist/{orgAnalyticsConfig-BJ2A1RZ-.cjs → orgAnalyticsConfig-CuWXijsr.cjs} +1 -1
  337. package/dist/{orgAnalyticsConfig-ClrFy2qH.js → orgAnalyticsConfig-DOceTdNp.js} +1 -1
  338. package/dist/search-BIomqYy6.d.ts +20 -0
  339. package/dist/search-B_Hg-Es2.d.cts +20 -0
  340. package/dist/search-Bn4x-3TG.js +126 -0
  341. package/dist/search-DsQm_pAi.cjs +205 -0
  342. package/dist/{search-filter-types-fZf91Pdw.d.ts → search-filter-types-B5xcaEit.d.ts} +1 -1
  343. package/dist/{search-filter-types-DosbseF3.d.cts → search-filter-types-Byd0lEUa.d.cts} +1 -1
  344. package/dist/searchContext-Cn-pCoDy.cjs +145 -0
  345. package/dist/searchContext-fQDGSvUF.js +129 -0
  346. package/dist/searchServiceAdapter-BSPZOg1r.js +16 -0
  347. package/dist/searchServiceAdapter-DrjFCiw8.cjs +34 -0
  348. package/dist/sessionStorageContext-C5MUl2zf.js +52 -0
  349. package/dist/sessionStorageContext-CXE7iHtP.cjs +66 -0
  350. package/dist/shopifyUrlContext-7ppKx1jJ.cjs +75 -0
  351. package/dist/shopifyUrlContext-BSYWsoX9.js +61 -0
  352. package/dist/spiffyWidgets-CdxRcXhW.d.ts +20 -0
  353. package/dist/spiffyWidgets-DxGuuuCG.d.cts +20 -0
  354. package/dist/systemSettingsContext-BdAe_3Ll.cjs +60 -0
  355. package/dist/systemSettingsContext-Cjyo2o3N.js +39 -0
  356. package/dist/{test-types-CgVJtwUr.d.cts → test-types-DQB1JqOf.d.cts} +1 -1
  357. package/dist/{test-types-C9b_OdfO.d.ts → test-types-ZuRAYwox.d.ts} +1 -1
  358. package/dist/types/index.cjs +33 -5
  359. package/dist/types/index.d.cts +2 -2
  360. package/dist/types/index.d.ts +2 -2
  361. package/dist/types/index.js +30 -3
  362. package/dist/types-BCz-hOvv.d.ts +51 -0
  363. package/dist/types-BwNrLPSZ.cjs +106 -0
  364. package/dist/types-D3uOF0Oy.js +76 -0
  365. package/dist/types-DIk0FLwd.js +30 -0
  366. package/dist/types-DNLkuGWZ.cjs +48 -0
  367. package/dist/types-DzwBmZHy.d.cts +10 -0
  368. package/dist/types-Eip78dWv.d.cts +51 -0
  369. package/dist/types-YvACLe2e.d.ts +10 -0
  370. package/dist/types.d.cts +15 -0
  371. package/dist/types.d.ts +15 -0
  372. package/dist/unsupportedProductExceptions--t7AQFou.js +20 -0
  373. package/dist/unsupportedProductExceptions-Dak4AD-t.cjs +32 -0
  374. package/dist/urlsParser-BV5yF8sa.cjs +78 -0
  375. package/dist/urlsParser-DUgV_Qy9.js +42 -0
  376. package/dist/useAmplitudeOperations-C6Osqkso.js +34 -0
  377. package/dist/useAmplitudeOperations-Cco_B3A5.cjs +41 -0
  378. package/dist/useAppDetails-CGqtN6sJ.cjs +38 -0
  379. package/dist/useAppDetails-DwX2Rhed.js +30 -0
  380. package/dist/useDebounce-BJqnCBcl.cjs +26 -0
  381. package/dist/useDebounce-Ce31ph7m.js +19 -0
  382. package/dist/useGraphQLConfig-ByOZb3oZ.js +63 -0
  383. package/dist/useGraphQLConfig-DItL4BgM.cjs +76 -0
  384. package/dist/useIntersection-Czeo04jt.js +21 -0
  385. package/dist/useIntersection-DnZNLcnu.cjs +28 -0
  386. package/dist/{useMessageInterceptor-B87e3yu3.cjs → useMessageInterceptor-C9p9No1n.cjs} +3 -3
  387. package/dist/{useMessageInterceptor-Bb7YRaWk.js → useMessageInterceptor-tntd2rvB.js} +2 -2
  388. package/dist/userIdentityContext-C1HzZFb2.cjs +125 -0
  389. package/dist/userIdentityContext-CDfosvOO.js +109 -0
  390. package/dist/userIdentityContext-DBXoLrFu.d.cts +20 -0
  391. package/dist/userIdentityContext-W1OWF3cG.d.ts +20 -0
  392. package/dist/utilityTypes-CWJZb9BZ.js +1 -0
  393. package/dist/utilityTypes-YGiMSyV7.cjs +0 -0
  394. package/dist/utils-BA5HXmkL.cjs +74 -0
  395. package/dist/utils-BTDw2aMx.cjs +715 -0
  396. package/dist/utils-C7S9YiFp.js +54 -0
  397. package/dist/utils-CF13DfA1.js +606 -0
  398. package/dist/variantInfo-58JLeDJb.js +1 -0
  399. package/dist/variantInfo-DRFLcGc7.cjs +0 -0
  400. package/package.json +179 -7
  401. package/src/application/models/index.ts +0 -1
  402. package/src/application/utils/analyticsUtils.ts +1 -1
  403. package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +1 -1
  404. package/src/atoms/app/index.ts +1 -1
  405. package/src/atoms/chat/chatState.ts +1 -1
  406. package/src/atoms/chat/replies.ts +1 -1
  407. package/src/atoms/org/graphqlConfig.ts +1 -39
  408. package/src/atoms/org/index.ts +0 -1
  409. package/src/atoms/org/newOrgConfigAtom.ts +2 -6
  410. package/src/contexts/{amplitudeContext.tsx → amplitudeContext/amplitudeContext.tsx} +1 -2
  411. package/src/contexts/amplitudeContext/index.ts +1 -0
  412. package/src/contexts/{cdnContext.tsx → cdnContext/cdnContext.tsx} +1 -1
  413. package/src/contexts/cdnContext/index.ts +1 -0
  414. package/src/contexts/{chatContext.tsx → chatContext/chatContext.tsx} +3 -3
  415. package/src/contexts/chatContext/index.ts +1 -0
  416. package/src/contexts/{enviveConfigContext.tsx → enviveConfigContext/enviveConfigContext.tsx} +1 -1
  417. package/src/contexts/enviveConfigContext/index.ts +1 -0
  418. package/src/contexts/{enviveCssContext.tsx → enviveCssContext/enviveCssContext.tsx} +1 -1
  419. package/src/contexts/enviveCssContext/index.ts +1 -0
  420. package/src/contexts/{featureFlagContext.tsx → featureFlagContext/featureFlagContext.tsx} +1 -1
  421. package/src/contexts/featureFlagContext/index.ts +1 -0
  422. package/src/contexts/featureFlagServiceContext/index.ts +1 -0
  423. package/src/contexts/graphqlContext/index.ts +1 -0
  424. package/src/contexts/localStorageContext/index.ts +1 -0
  425. package/src/contexts/{localStorageContext.tsx → localStorageContext/localStorageContext.tsx} +2 -2
  426. package/src/contexts/newOrgConfigContext/index.ts +1 -0
  427. package/src/contexts/newOrgConfigContext/newOrgConfigContext.tsx +70 -0
  428. package/src/contexts/searchContext/index.ts +1 -0
  429. package/src/contexts/{searchContext.tsx → searchContext/searchContext.tsx} +5 -5
  430. package/src/contexts/sessionStorageContext/index.ts +1 -0
  431. package/src/contexts/{sessionStorageContext.tsx → sessionStorageContext/sessionStorageContext.tsx} +1 -1
  432. package/src/contexts/shopifyUrlContext/index.ts +1 -0
  433. package/src/contexts/systemSettingsContext/index.ts +1 -0
  434. package/src/contexts/userIdentityContext/index.ts +1 -0
  435. package/src/events/registerAnalyticsListeners.ts +2 -2
  436. package/src/favicon.ico +0 -0
  437. package/src/hooks/AmplitudeOperations/index.ts +1 -0
  438. package/src/hooks/{useAmplitudeOperations.ts → AmplitudeOperations/useAmplitudeOperations.ts} +1 -1
  439. package/src/hooks/AppDetails/index.ts +1 -0
  440. package/src/hooks/{useAppDetails.ts → AppDetails/useAppDetails.ts} +1 -3
  441. package/src/hooks/BlockBackButton/index.ts +1 -0
  442. package/src/hooks/CdnOperations/index.ts +1 -0
  443. package/src/hooks/{useCdnOperations.ts → CdnOperations/useCdnOperations.ts} +1 -1
  444. package/src/hooks/ChatToggle/index.ts +1 -0
  445. package/src/hooks/{useChatToggle.ts → ChatToggle/useChatToggle.ts} +1 -1
  446. package/src/hooks/ChatToggleAnalytics/index.ts +1 -0
  447. package/src/hooks/{useChatToggleAnalytics.ts → ChatToggleAnalytics/useChatToggleAnalytics.ts} +1 -1
  448. package/src/hooks/CustomerSupportHandoff/index.ts +1 -0
  449. package/src/hooks/Debounce/index.ts +1 -0
  450. package/src/hooks/ElementObserver/index.ts +1 -0
  451. package/src/hooks/GrabAndScroll/index.ts +1 -0
  452. package/src/hooks/GraphQLConfig/index.ts +1 -0
  453. package/src/hooks/{useGraphQLConfig.ts → GraphQLConfig/useGraphQLConfig.ts} +1 -1
  454. package/src/hooks/IdentifyUser/index.ts +1 -0
  455. package/src/hooks/{useIdentifyUser.ts → IdentifyUser/useIdentifyUser.ts} +1 -1
  456. package/src/hooks/ImageResolver/index.ts +1 -0
  457. package/src/hooks/Intersection/index.ts +1 -0
  458. package/src/hooks/IsSmallScreen/index.ts +1 -0
  459. package/src/hooks/LocalStorageOperations/index.ts +1 -0
  460. package/src/hooks/{useLocalStorageOperations.ts → LocalStorageOperations/useLocalStorageOperations.ts} +2 -2
  461. package/src/hooks/MessageFilter/index.ts +1 -0
  462. package/src/hooks/MessageScrollObserver/index.ts +1 -0
  463. package/src/hooks/NewOrgConfig/index.ts +1 -0
  464. package/src/hooks/{useNewOrgConfig.ts → NewOrgConfig/useNewOrgConfig.ts} +1 -1
  465. package/src/hooks/Search/index.ts +1 -0
  466. package/src/hooks/{useSearch.tsx → Search/useSearch.tsx} +5 -4
  467. package/src/hooks/SearchOperations/index.ts +1 -0
  468. package/src/hooks/SessionStorageOperations/index.ts +1 -0
  469. package/src/hooks/{useSessionStorageOperations.ts → SessionStorageOperations/useSessionStorageOperations.ts} +1 -1
  470. package/src/hooks/ShopifyUrlOperations/index.ts +1 -0
  471. package/src/hooks/{useShopifyUrlOperations.ts → ShopifyUrlOperations/useShopifyUrlOperations.ts} +1 -1
  472. package/src/hooks/SnapCalculator/index.ts +1 -0
  473. package/src/hooks/SystemSettingsContext/index.ts +1 -0
  474. package/src/hooks/SystemSettingsContext/useSystemSettingsContext.ts +14 -0
  475. package/src/hooks/TrackComponentVisibleEvent/index.ts +1 -0
  476. package/src/hooks/{useTrackComponentVisibleEvent.ts → TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts} +2 -2
  477. package/src/hooks/UpdateAnalyticsProps/index.ts +1 -0
  478. package/src/hooks/{useUpdateAnalyticsProps.ts → UpdateAnalyticsProps/useUpdateAnalyticsProps.ts} +1 -1
  479. package/dist/amplitudeContext-CHzas7Cf.d.cts +0 -52
  480. package/dist/amplitudeContext-D-7fmVh1.cjs +0 -356
  481. package/dist/amplitudeContext-hY3caPC6.js +0 -322
  482. package/dist/amplitudeContext-tJ4y-SzX.d.ts +0 -52
  483. package/dist/api-DjeZXxl_.js +0 -207
  484. package/dist/api-_JaUnIUj.cjs +0 -292
  485. package/dist/bandolier-DYEz4-8C.js +0 -1229
  486. package/dist/bandolier-o_-xrbOV.cjs +0 -1229
  487. package/dist/carpe-CsG5jCcl.cjs +0 -607
  488. package/dist/carpe-DONk00bZ.js +0 -605
  489. package/dist/cdnUtils-32v8bDX9.cjs +0 -16
  490. package/dist/cdnUtils-E4tLBt2g.js +0 -11
  491. package/dist/chat-CO7cRkaq.cjs +0 -506
  492. package/dist/chat-hcRc4RRd.js +0 -285
  493. package/dist/contexts/index.cjs +0 -57
  494. package/dist/contexts/index.d.cts +0 -10
  495. package/dist/contexts/index.d.ts +0 -10
  496. package/dist/contexts/index.js +0 -23
  497. package/dist/contexts-B4ihTBsV.cjs +0 -2980
  498. package/dist/contexts-DGlr7M1o.js +0 -2596
  499. package/dist/coterie-CKB93qfz.cjs +0 -239
  500. package/dist/coterie-DHcj2fRE.js +0 -239
  501. package/dist/custservice-types-Dy0kc9TW.cjs +0 -35
  502. package/dist/custservice-types-mnIunabv.js +0 -23
  503. package/dist/default-BnB4p0Se.cjs +0 -234
  504. package/dist/default-D6f5Dyt7.js +0 -199
  505. package/dist/default-ZKkE5zT4.cjs +0 -4
  506. package/dist/default-legGZJwI.js +0 -4
  507. package/dist/divIds-2dJlU3z8.cjs +0 -117
  508. package/dist/divIds-BUrN2vY-.js +0 -21
  509. package/dist/dreamlandBaby-BiRYYFav.js +0 -346
  510. package/dist/dreamlandBaby-zuvmfzfD.cjs +0 -346
  511. package/dist/embedded-BJLWIriJ.js +0 -23
  512. package/dist/embedded-Dl79TJLC.cjs +0 -131
  513. package/dist/entrypoints-Bs3pn6EV.js +0 -7
  514. package/dist/entrypoints-Dqi5pzWH.cjs +0 -19
  515. package/dist/enviveConfig-BccuzS2a.cjs +0 -240
  516. package/dist/enviveConfig-CzhTz8Aa.js +0 -152
  517. package/dist/fiveCbd-DwTTwC2j.cjs +0 -613
  518. package/dist/fiveCbd-Dz2NouOF.js +0 -613
  519. package/dist/forLoveAndLemons-DqSdyD6S.js +0 -665
  520. package/dist/forLoveAndLemons-Ud6mPrV3.cjs +0 -667
  521. package/dist/graphql-BNW60InJ.cjs +0 -128
  522. package/dist/graphql-CjB8wHzm.js +0 -74
  523. package/dist/graphqlConfig-CYt6tWII.js +0 -30
  524. package/dist/graphqlConfig-DicykC-o.cjs +0 -61
  525. package/dist/greenpan-B_EbPkSP.js +0 -397
  526. package/dist/greenpan-kPE4fJgd.cjs +0 -397
  527. package/dist/grooveLife-Ckuir319.js +0 -342
  528. package/dist/grooveLife-DKSEQp1F.cjs +0 -342
  529. package/dist/homegrownCannabis-BVPa2pqe.js +0 -410
  530. package/dist/homegrownCannabis-BwIAkxuA.cjs +0 -410
  531. package/dist/hooks/index.cjs +0 -63
  532. package/dist/hooks/index.d.cts +0 -314
  533. package/dist/hooks/index.d.ts +0 -314
  534. package/dist/hooks/index.js +0 -23
  535. package/dist/index-BMPtlgac.d.ts +0 -191
  536. package/dist/index-C7pGDl1A.d.ts +0 -1609
  537. package/dist/index-C9lgsCWp.d.cts +0 -203
  538. package/dist/index-Cc-wBCn6.d.ts +0 -203
  539. package/dist/index-DTu2X-YS.d.cts +0 -1609
  540. package/dist/index-OEifcBsm.d.cts +0 -191
  541. package/dist/jackArcher-B39OEIj6.cjs +0 -727
  542. package/dist/jackArcher-BwkWGybC.js +0 -727
  543. package/dist/jordanCraig-CxRH_jLi.js +0 -1786
  544. package/dist/jordanCraig-RwmWw-jM.cjs +0 -1786
  545. package/dist/kindredBravely-D78VwL20.cjs +0 -490
  546. package/dist/kindredBravely-DQDpAzdl.js +0 -490
  547. package/dist/kutFromTheKloth-TcXQkIti.js +0 -369
  548. package/dist/kutFromTheKloth-dXRrNti0.cjs +0 -369
  549. package/dist/larryAndSerges-Bh5XEXsZ.js +0 -262
  550. package/dist/larryAndSerges-COdBzOzu.cjs +0 -262
  551. package/dist/leapsAndRebounds-BbXnqkl5.cjs +0 -360
  552. package/dist/leapsAndRebounds-mjCaH1k-.js +0 -360
  553. package/dist/longevityrx-DdV3v26F.cjs +0 -320
  554. package/dist/longevityrx-DfPDfvAt.js +0 -320
  555. package/dist/lookOptic-DgXFGBPP.cjs +0 -282
  556. package/dist/lookOptic-FgVW1afF.js +0 -282
  557. package/dist/mantraBrand-C5gVm3rk.cjs +0 -750
  558. package/dist/mantraBrand-uV8HCDR8.js +0 -750
  559. package/dist/medterra-BtDpr1Hw.cjs +0 -583
  560. package/dist/medterra-DgzE7-mj.js +0 -583
  561. package/dist/modells-CJjsxOIR.js +0 -484
  562. package/dist/modells-Ck5KbRFj.cjs +0 -484
  563. package/dist/models-UZ6HszfZ.js +0 -1281
  564. package/dist/org-C2RrBVQR.cjs +0 -81
  565. package/dist/org-xMytX--e.js +0 -38
  566. package/dist/pressedFloral-Bteoboms.js +0 -661
  567. package/dist/pressedFloral-CexgV-xy.cjs +0 -661
  568. package/dist/search-BMOAmrmY.js +0 -459
  569. package/dist/search-Df0Ifneg.cjs +0 -672
  570. package/dist/skinPerfection-BGzq9lq-.cjs +0 -334
  571. package/dist/skinPerfection-BlvcEcUE.js +0 -334
  572. package/dist/snapSupplements-CbbGzAgO.cjs +0 -285
  573. package/dist/snapSupplements-kcsPAOm9.js +0 -285
  574. package/dist/socialProofClasses-Db8gzsfi.cjs +0 -40
  575. package/dist/socialProofClasses-kwDvwLOZ.js +0 -10
  576. package/dist/spanx-B4WFA_rI.js +0 -661
  577. package/dist/spanx-BWoE4F8b.cjs +0 -663
  578. package/dist/spanxStaging-BOrOjhXn.js +0 -845
  579. package/dist/spanxStaging-BfdfIug4.cjs +0 -848
  580. package/dist/suggestionBarV2-types-IMMOmCir.js +0 -10
  581. package/dist/suggestionBarV2-types-nnGNgFvR.cjs +0 -16
  582. package/dist/supergoop-22dd5_BS.js +0 -323
  583. package/dist/supergoop-B-a4cku2.cjs +0 -323
  584. package/dist/types--pr1GQQx.js +0 -154
  585. package/dist/types-BVSyY3Hk.cjs +0 -196
  586. package/dist/uniqueVintage-CJXiNNe7.js +0 -1211
  587. package/dist/uniqueVintage-D0jzJWlo.cjs +0 -1213
  588. package/dist/userIdentityContext-BPqvVIg0.d.cts +0 -20
  589. package/dist/userIdentityContext-wbCRmlzp.d.ts +0 -20
  590. package/dist/utils-C9ZSCx12.js +0 -888
  591. package/dist/utils-D5HO61hG.cjs +0 -1016
  592. package/dist/venaCbd-Bhhu_qUf.cjs +0 -365
  593. package/dist/venaCbd-CanovPS_.js +0 -365
  594. package/dist/westonJonBoucher-BC0x1ktI.cjs +0 -422
  595. package/dist/westonJonBoucher-BUu1_wP1.js +0 -422
  596. package/dist/wineEnthusiast-BlCryfil.cjs +0 -940
  597. package/dist/wineEnthusiast-Ck1x5iJq.js +0 -940
  598. package/dist/wolfMattress-D9Mjq-HP.js +0 -372
  599. package/dist/wolfMattress-JssghhC-.cjs +0 -372
  600. package/dist/wolfTactical-C6exYhL7.cjs +0 -349
  601. package/dist/wolfTactical-CnV3KQdI.js +0 -349
  602. package/src/application/models/supportedOrgs.ts +0 -161
  603. package/src/atoms/org/orgPageConfig.ts +0 -42
  604. package/src/contexts/index.ts +0 -16
  605. package/src/contexts/newOrgConfigContext.tsx +0 -104
  606. package/src/contexts/orgConfigContext.tsx +0 -106
  607. package/src/hooks/index.ts +0 -27
  608. package/src/hooks/useSystemSettingsContext.ts +0 -12
  609. package/src/merchants/bandolier/bandolier.ts +0 -1371
  610. package/src/merchants/carpe/carpe.ts +0 -653
  611. package/src/merchants/coterie/coterie.ts +0 -277
  612. package/src/merchants/default.ts +0 -196
  613. package/src/merchants/dreamlandBaby/dreamlandBaby.ts +0 -381
  614. package/src/merchants/fiveCbd/fiveCbd.ts +0 -691
  615. package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +0 -751
  616. package/src/merchants/greenpan/greenpan.ts +0 -434
  617. package/src/merchants/grooveLife/grooveLife.ts +0 -392
  618. package/src/merchants/homegrownCannabis/homegrownCannabis.ts +0 -474
  619. package/src/merchants/init-merchant.sh +0 -53
  620. package/src/merchants/jackArcher/jackArcher.ts +0 -989
  621. package/src/merchants/jordanCraig/jordanCraig.ts +0 -1927
  622. package/src/merchants/kindredBravely/kindredBravely.ts +0 -538
  623. package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +0 -421
  624. package/src/merchants/larryAndSerges/larryAndSerges.ts +0 -318
  625. package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +0 -424
  626. package/src/merchants/longevityrx/longevityrx.ts +0 -374
  627. package/src/merchants/lookOptic/lookOptic.ts +0 -323
  628. package/src/merchants/mantraBrand/mantraBrand.ts +0 -844
  629. package/src/merchants/medterra/medterra.ts +0 -673
  630. package/src/merchants/modells/modells.ts +0 -543
  631. package/src/merchants/pressedFloral/pressedFloral.ts +0 -728
  632. package/src/merchants/skinPerfection/skinPerfection.ts +0 -385
  633. package/src/merchants/snapSupplements/snapSupplements.ts +0 -328
  634. package/src/merchants/spanx/spanx.ts +0 -810
  635. package/src/merchants/spanx/spanxStaging.ts +0 -936
  636. package/src/merchants/supergoop/supergoop.ts +0 -375
  637. package/src/merchants/uniqueVintage/uniqueVintage.ts +0 -1314
  638. package/src/merchants/venaCbd/venaCbd.ts +0 -407
  639. package/src/merchants/westonJonBoucher/westonJonBoucher.ts +0 -473
  640. package/src/merchants/wineEnthusiast/wineEnthusiast.ts +0 -990
  641. package/src/merchants/wolfMattress/wolfMattress.ts +0 -411
  642. package/src/merchants/wolfTactical/wolfTactical.ts +0 -383
  643. /package/dist/{atomStore-KSoFS3Jj.cjs → AmplitudeOperations-CgIVPUlr.cjs} +0 -0
  644. /package/dist/{atomStore-CZnUUsrr.js → AmplitudeOperations-YpyaR7Mp.js} +0 -0
  645. /package/dist/{locators-fBXS_pxP.js → atomStore-C2OI76yN.js} +0 -0
  646. /package/dist/{locators-0YYZu9n4.cjs → atomStore-DWmT1six.cjs} +0 -0
  647. /package/dist/{utilityTypes-8sETsYPk.js → types-DQoXDiso.js} +0 -0
  648. /package/dist/{utilityTypes-COShxVir.cjs → types-o3zWarRp.cjs} +0 -0
  649. /package/dist/{variantInfo-orXoPBCU.cjs → types.cjs} +0 -0
  650. /package/dist/{variantInfo-DbVxA1yE.js → types.js} +0 -0
  651. /package/src/contexts/{featureFlagServiceContext.tsx → featureFlagServiceContext/featureFlagServiceContext.tsx} +0 -0
  652. /package/src/contexts/{graphqlContext.tsx → graphqlContext/graphqlContext.tsx} +0 -0
  653. /package/src/contexts/{shopifyUrlContext.tsx → shopifyUrlContext/shopifyUrlContext.tsx} +0 -0
  654. /package/src/contexts/{systemSettingsContext.tsx → systemSettingsContext/systemSettingsContext.tsx} +0 -0
  655. /package/src/contexts/{userIdentityContext.tsx → userIdentityContext/userIdentityContext.tsx} +0 -0
  656. /package/src/hooks/{useBlockBackButton.ts → BlockBackButton/useBlockBackButton.ts} +0 -0
  657. /package/src/hooks/{useCustomerSupportHandoff.ts → CustomerSupportHandoff/useCustomerSupportHandoff.ts} +0 -0
  658. /package/src/hooks/{useDebounce.ts → Debounce/useDebounce.ts} +0 -0
  659. /package/src/hooks/{useElementObserver.ts → ElementObserver/useElementObserver.ts} +0 -0
  660. /package/src/hooks/{useGrabAndScroll.ts → GrabAndScroll/useGrabAndScroll.ts} +0 -0
  661. /package/src/hooks/{useImageResolver.ts → ImageResolver/useImageResolver.ts} +0 -0
  662. /package/src/hooks/{useIntersection.ts → Intersection/useIntersection.ts} +0 -0
  663. /package/src/hooks/{useIsSmallScreen.ts → IsSmallScreen/useIsSmallScreen.ts} +0 -0
  664. /package/src/hooks/{useMessageFilter.ts → MessageFilter/useMessageFilter.ts} +0 -0
  665. /package/src/hooks/{useMessageScrollObserver.ts → MessageScrollObserver/useMessageScrollObserver.ts} +0 -0
  666. /package/src/hooks/{useSearchOperations.ts → SearchOperations/useSearchOperations.ts} +0 -0
  667. /package/src/hooks/{useSnapCalculator.ts → SnapCalculator/useSnapCalculator.ts} +0 -0
@@ -0,0 +1,444 @@
1
+ const require_chunk = require('./chunk-CUT6urMc.cjs');
2
+ const require_models = require('./models-ZpQcRZQK.cjs');
3
+ const require_chatState = require('./chatState-BisPJd5g.cjs');
4
+ const require_chat = require('./chat-D1Eat8Ih.cjs');
5
+ const require_newOrgConfigAtom = require('./newOrgConfigAtom-DkSi45_Q.cjs');
6
+ const require_types = require('./types-DNLkuGWZ.cjs');
7
+ let __spiffy_ai_commerce_api_client = require("@spiffy-ai/commerce-api-client");
8
+ __spiffy_ai_commerce_api_client = require_chunk.__toESM(__spiffy_ai_commerce_api_client);
9
+ let jotai = require("jotai");
10
+ jotai = require_chunk.__toESM(jotai);
11
+ let uuid = require("uuid");
12
+ uuid = require_chunk.__toESM(uuid);
13
+
14
+ //#region src/atoms/search/utils.ts
15
+ const formatFilterDisplayName = (displayName) => {
16
+ const sizes = [
17
+ "xxxs",
18
+ "xxs",
19
+ "xs",
20
+ "s",
21
+ "m",
22
+ "l",
23
+ "xl",
24
+ "xxl",
25
+ "xxxl",
26
+ "xxxxl"
27
+ ];
28
+ return displayName.toLowerCase().split(" ").map((word) => {
29
+ if (sizes.includes(word)) return word.toUpperCase();
30
+ return word.charAt(0).toUpperCase() + word.slice(1);
31
+ }).join(" ").replace(/Iphone/g, "iPhone");
32
+ };
33
+
34
+ //#endregion
35
+ //#region src/atoms/search/productFilters.ts
36
+ const getPriceBucket = (price, bucketSize) => {
37
+ return Math.floor(price / bucketSize) * bucketSize;
38
+ };
39
+ const isStringArray = (value) => {
40
+ if (!Array.isArray(value)) return false;
41
+ return value.every((item) => typeof item === "string");
42
+ };
43
+ const sortFilter = (filterConfig) => {
44
+ if (filterConfig.type === "price") return (a, b) => Number(a.filterItemId) - Number(b.filterItemId);
45
+ if (filterConfig.type === "dynamic") {
46
+ if (filterConfig.sorting.type === "alphabetic") return (a, b) => a.displayName.localeCompare(b.displayName);
47
+ if (filterConfig.sorting.type === "productCount") return (a, b) => a.productCount === b.productCount ? a.displayName.localeCompare(b.displayName) : b.productCount - a.productCount;
48
+ if (filterConfig.sorting.type === "custom") {
49
+ const sortedKeys = filterConfig.sorting.map;
50
+ return (a, b) => {
51
+ if (sortedKeys[a.displayName] && sortedKeys[b.displayName]) return sortedKeys[a.displayName] - sortedKeys[b.displayName];
52
+ if (sortedKeys[a.displayName]) return -1;
53
+ if (sortedKeys[b.displayName]) return 1;
54
+ return b.productCount - a.productCount;
55
+ };
56
+ }
57
+ }
58
+ throw new Error("Invaalid search filter configuration");
59
+ };
60
+ var ProductFilters = class {
61
+ static getFiltersForProducts(products, filterConfigs, selectedFilterOptions) {
62
+ if (!products || products.length === 0) return [];
63
+ return [...filterConfigs.map((filterConfig) => products.reduce((acc, product) => {
64
+ if (filterConfig.type === "price") {
65
+ const priceBucket = getPriceBucket(product.salePrice ?? product.originalPrice ?? 0, filterConfig.bucketSize);
66
+ const current = acc.map[priceBucket] ?? {
67
+ filterItemId: priceBucket,
68
+ displayName: `$${priceBucket}-$${priceBucket + filterConfig.bucketSize}`,
69
+ productCount: 0
70
+ };
71
+ acc.map[priceBucket] = {
72
+ ...current,
73
+ productCount: current.productCount + 1
74
+ };
75
+ return acc;
76
+ }
77
+ const attributeValues = (product.filters && product.filters?.[filterConfig.attribute]) ?? [];
78
+ if (isStringArray(attributeValues)) attributeValues.forEach((val) => {
79
+ const normalizedVal = val.toLowerCase();
80
+ const current = acc.map[normalizedVal] ?? {
81
+ filterItemId: normalizedVal,
82
+ displayName: formatFilterDisplayName(val),
83
+ productCount: 0
84
+ };
85
+ acc.map[normalizedVal] = {
86
+ ...current,
87
+ productCount: current.productCount + 1
88
+ };
89
+ });
90
+ return acc;
91
+ }, {
92
+ filterConfig,
93
+ map: {}
94
+ })).map(({ filterConfig, map }) => ({
95
+ filterId: filterConfig.filterId,
96
+ displayName: filterConfig.displayName,
97
+ items: Object.values(map).map((filter) => ({
98
+ filterItemId: filter.filterItemId,
99
+ displayName: filter.displayName,
100
+ productCount: filter.productCount,
101
+ isSelected: selectedFilterOptions.some((option) => option.id === `${filterConfig.filterId}:${filter.filterItemId}`) ?? false
102
+ })).sort(sortFilter(filterConfig))
103
+ }))];
104
+ }
105
+ static filterProducts(products, filterConfigs, selectedFilterOptions, additiveDynamicFilters = false) {
106
+ const selectedFilters = filterConfigs.map((filterConfig) => ({
107
+ filterConfig,
108
+ hasSelectedOptions: selectedFilterOptions.some((option) => option.filterId === filterConfig.filterId)
109
+ })).filter(({ hasSelectedOptions }) => hasSelectedOptions);
110
+ return selectedFilterOptions.length === 0 ? products : products.filter((product) => selectedFilters.reduce((acc, selectedFilter) => {
111
+ if (!acc) return acc;
112
+ if (selectedFilter.filterConfig.type === "price") {
113
+ const priceBucket = getPriceBucket(product.salePrice ?? product.originalPrice ?? 0, selectedFilter.filterConfig.bucketSize);
114
+ if (!selectedFilterOptions.some((option) => option.id === `price:${priceBucket}`)) return false;
115
+ }
116
+ if (selectedFilter.filterConfig.type === "dynamic") {
117
+ const { filterId, attribute } = selectedFilter.filterConfig;
118
+ const attributeValues = product.filters?.[attribute];
119
+ if (!isStringArray(attributeValues)) return false;
120
+ if (selectedFilter.filterConfig.attribute === "dynamic" && !additiveDynamicFilters) {
121
+ if (!selectedFilterOptions.filter((option) => option.filterId === filterId).map((option) => option.filterItemId.toLowerCase()).every((selectedValue) => attributeValues.some((val) => val.toLowerCase() === selectedValue))) return false;
122
+ } else if (!attributeValues.some((val) => selectedFilterOptions.some((option) => option.id === `${filterId}:${val.toLowerCase()}`))) return false;
123
+ }
124
+ return true;
125
+ }, true));
126
+ }
127
+ };
128
+
129
+ //#endregion
130
+ //#region src/atoms/search/productSorter.ts
131
+ var ProductSorter = class {
132
+ static sort(products, sorting) {
133
+ switch (sorting) {
134
+ case require_types.ProductSorting.PRICE_ASC: return [...products].sort((p1, p2) => (p1.salePrice ?? p1.originalPrice ?? 0) - (p2.salePrice ?? p2.originalPrice ?? 0));
135
+ case require_types.ProductSorting.PRICE_DESC: return [...products].sort((p1, p2) => (p2.salePrice ?? p2.originalPrice ?? 0) - (p1.salePrice ?? p1.originalPrice ?? 0));
136
+ default: return products;
137
+ }
138
+ }
139
+ };
140
+
141
+ //#endregion
142
+ //#region src/atoms/search/chatSearch.ts
143
+ const chatSearchStateAtom = (0, jotai.atom)("entrypoint");
144
+ const chatSearchHasProductsAtom = (0, jotai.atom)(false);
145
+ const chatSearchProductSortingAtom = (0, jotai.atom)(require_types.ProductSorting.FEATURED);
146
+ const filterProductList = (message) => message.type === require_models.MessageType.Product && message.metadata.isForGrid === true;
147
+ const filterFilterList = (message) => message.type === require_models.MessageType.ProductSearchFilter;
148
+ const chatSearchIsLoadingAtom = (0, jotai.atom)(false);
149
+ const buildChatSearchTurn = (messages) => {
150
+ const queryMessage = messages.find((message) => message.type === require_models.MessageType.ProductSearch);
151
+ if (!queryMessage) return null;
152
+ const { generatedQuery, productCount } = queryMessage.metadata ?? {};
153
+ const productList = messages.filter(filterProductList).map((message) => message.metadata);
154
+ const filterList = messages.filter(filterFilterList).map((message) => message.metadata.filterName);
155
+ return [queryMessage.id, {
156
+ id: queryMessage.id,
157
+ generatedQuery,
158
+ productCount: productCount || productList.length,
159
+ productList,
160
+ filterList,
161
+ messages
162
+ }];
163
+ };
164
+ const chatSearchFilterConfigAtom = (0, jotai.atom)((get) => {
165
+ return get(require_newOrgConfigAtom.newOrgConfigAtom)?.frontendConfig?.uiConfigs?.searchConfig?.searchFilterConfig || [];
166
+ });
167
+ const searchMapAtom = (0, jotai.atom)((get) => {
168
+ const messages = get(require_chatState.messagesAtom);
169
+ return Object.fromEntries(messages.map(buildChatSearchTurn).filter((v) => v !== null));
170
+ });
171
+ const internalChatSearchParamsAtom = (0, jotai.atom)({
172
+ id: null,
173
+ query: null
174
+ });
175
+ const selectedFilterOptionsAtom = (0, jotai.atom)([]);
176
+ const additiveDynamicFiltersAtom = (0, jotai.atom)((get) => {
177
+ return get(require_newOrgConfigAtom.newOrgConfigAtom)?.frontendConfig?.uiConfigs?.searchConfig?.additiveDynamicFilters ?? false;
178
+ });
179
+ const createChatSearchFilterOption = (filterId, filterItemId, displayName) => ({
180
+ id: `${filterId}:${filterItemId}`,
181
+ displayName,
182
+ filterId,
183
+ filterItemId
184
+ });
185
+ const handleSearchAtom = (0, jotai.atom)(null, (get, set, message) => {
186
+ if (message.type !== require_models.MessageType.Search) return;
187
+ const querySearch = message.metadata.searchTerm;
188
+ set(require_chatState.replyEventCategoryAtom, __spiffy_ai_commerce_api_client.UserEventCategory.Search);
189
+ set(require_chatState.userQueryAtom, querySearch);
190
+ set(require_chatState.messagesAtom, [...get(require_chatState.messagesAtom), [message]]);
191
+ set(require_chatState.userHasRepliedAtom, true);
192
+ set(require_chat.queueUserEventAtom, {
193
+ eventId: message.id,
194
+ category: __spiffy_ai_commerce_api_client.UserEventCategory.Search,
195
+ createdAt: message.createdAt,
196
+ attributes: {
197
+ searchTerm: message.metadata.searchTerm,
198
+ selectedFilters: message.metadata.selectedFilters
199
+ }
200
+ });
201
+ });
202
+ const chatSearchParamsAtom = (0, jotai.atom)((get) => get(internalChatSearchParamsAtom), (_, set, value) => {
203
+ set(internalChatSearchParamsAtom, value);
204
+ });
205
+ const chatSearchQueryAtom = (0, jotai.atom)((get) => get(chatSearchParamsAtom)?.query ?? null, (get, set, value) => {
206
+ const searchParams = get(chatSearchParamsAtom);
207
+ set(chatSearchParamsAtom, {
208
+ id: searchParams.id,
209
+ query: value
210
+ });
211
+ });
212
+ const chatSearchIdAtom = (0, jotai.atom)((get) => get(chatSearchParamsAtom)?.id ?? null, (get, set, value) => {
213
+ const searchParams = get(chatSearchParamsAtom);
214
+ set(chatSearchParamsAtom, {
215
+ id: value,
216
+ query: searchParams.query
217
+ });
218
+ });
219
+ const ChatSearchTurnAtom = (0, jotai.atom)((get) => {
220
+ const searchFilterConfig = get(chatSearchFilterConfigAtom);
221
+ const searchMap = get(searchMapAtom);
222
+ const chatSearchId = get(chatSearchIdAtom);
223
+ if (!chatSearchId) return null;
224
+ const ChatSearchTurn = searchMap[chatSearchId];
225
+ if (!ChatSearchTurn) return null;
226
+ const productSorting = get(chatSearchProductSortingAtom);
227
+ const selectedFilterOptions = get(selectedFilterOptionsAtom);
228
+ const additiveDynamicFilters = get(additiveDynamicFiltersAtom);
229
+ const filteredProducts = ProductFilters.filterProducts(ChatSearchTurn.productList, searchFilterConfig, selectedFilterOptions, additiveDynamicFilters);
230
+ const filteredAndSortedProducts = ProductSorter.sort(filteredProducts, productSorting);
231
+ return {
232
+ ...searchMap[chatSearchId],
233
+ productList: filteredAndSortedProducts,
234
+ productCount: filteredAndSortedProducts.length
235
+ };
236
+ });
237
+ const chatSearchProducts = (0, jotai.atom)((get) => {
238
+ return get(ChatSearchTurnAtom)?.productList ?? [];
239
+ });
240
+ const chatSearchFiltersAtom = (0, jotai.atom)((get) => {
241
+ const searchFilterConfig = get(chatSearchFilterConfigAtom);
242
+ const searchMap = get(searchMapAtom);
243
+ const chatSearchId = get(chatSearchIdAtom);
244
+ if (chatSearchId && searchMap[chatSearchId]) {
245
+ const products = searchMap[chatSearchId].productList;
246
+ const selectedFilterOptions = get(selectedFilterOptionsAtom);
247
+ return ProductFilters.getFiltersForProducts(products, searchFilterConfig, selectedFilterOptions);
248
+ }
249
+ return [];
250
+ });
251
+ const setSearchParams = (query) => {
252
+ const url = new URL(window.location.href);
253
+ url.searchParams.set("es", "true");
254
+ url.searchParams.set("esq", query);
255
+ window.history.pushState({}, "", url);
256
+ };
257
+ const getSearchParamsAtom = (0, jotai.atom)(() => {
258
+ const params = new URLSearchParams(window.location.search);
259
+ return {
260
+ es: params.get("es"),
261
+ esq: params.get("esq")
262
+ };
263
+ });
264
+ const initiateChatSearchAtom = (0, jotai.atom)(null, (_, set, query) => {
265
+ set(chatSearchIsLoadingAtom, true);
266
+ const url = new URL(window.location.href);
267
+ url.searchParams.set("es", "true");
268
+ url.searchParams.set("esq", query);
269
+ window.history.pushState({}, "", url);
270
+ window.dispatchEvent(new PopStateEvent("popstate", { state: {} }));
271
+ set(chatSearchParamsAtom, {
272
+ id: null,
273
+ query
274
+ });
275
+ set(handleSearchAtom, {
276
+ id: (0, uuid.v4)(),
277
+ role: require_models.MessageRole.User,
278
+ type: require_models.MessageType.Search,
279
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
280
+ metadata: {
281
+ searchTerm: query,
282
+ selectedFilters: []
283
+ }
284
+ });
285
+ });
286
+ const handleSearchResultsAtom = (0, jotai.atom)(null, (get, set, message) => {
287
+ if (!message || message.type !== require_models.MessageType.ProductSearch) return;
288
+ const { productCount, generatedQuery } = message.metadata;
289
+ if (productCount !== 0) {
290
+ set(selectedFilterOptionsAtom, []);
291
+ set(chatSearchStateAtom, "product-page");
292
+ const currentSearchParams = get(chatSearchParamsAtom);
293
+ const url = new URL(window.location.href);
294
+ url.searchParams.set("es", "true");
295
+ url.searchParams.set("esq", generatedQuery);
296
+ url.searchParams.set("esi", message.id);
297
+ window.history.pushState({}, "", url);
298
+ if (currentSearchParams.id === null) window.history.replaceState(null, "", url);
299
+ else window.history.pushState(null, "", url);
300
+ set(chatSearchParamsAtom, {
301
+ id: message.id,
302
+ query: generatedQuery
303
+ });
304
+ }
305
+ });
306
+ const setChatSearchParamsAtom = (0, jotai.atom)(null, (_, set, query) => {
307
+ const url = new URL(window.location.href);
308
+ url.searchParams.set("es", "true");
309
+ url.searchParams.set("esq", query);
310
+ window.history.pushState({}, "", url);
311
+ set(chatSearchParamsAtom, {
312
+ id: null,
313
+ query
314
+ });
315
+ });
316
+
317
+ //#endregion
318
+ Object.defineProperty(exports, 'ChatSearchTurnAtom', {
319
+ enumerable: true,
320
+ get: function () {
321
+ return ChatSearchTurnAtom;
322
+ }
323
+ });
324
+ Object.defineProperty(exports, 'ProductFilters', {
325
+ enumerable: true,
326
+ get: function () {
327
+ return ProductFilters;
328
+ }
329
+ });
330
+ Object.defineProperty(exports, 'ProductSorter', {
331
+ enumerable: true,
332
+ get: function () {
333
+ return ProductSorter;
334
+ }
335
+ });
336
+ Object.defineProperty(exports, 'additiveDynamicFiltersAtom', {
337
+ enumerable: true,
338
+ get: function () {
339
+ return additiveDynamicFiltersAtom;
340
+ }
341
+ });
342
+ Object.defineProperty(exports, 'chatSearchFiltersAtom', {
343
+ enumerable: true,
344
+ get: function () {
345
+ return chatSearchFiltersAtom;
346
+ }
347
+ });
348
+ Object.defineProperty(exports, 'chatSearchHasProductsAtom', {
349
+ enumerable: true,
350
+ get: function () {
351
+ return chatSearchHasProductsAtom;
352
+ }
353
+ });
354
+ Object.defineProperty(exports, 'chatSearchIdAtom', {
355
+ enumerable: true,
356
+ get: function () {
357
+ return chatSearchIdAtom;
358
+ }
359
+ });
360
+ Object.defineProperty(exports, 'chatSearchIsLoadingAtom', {
361
+ enumerable: true,
362
+ get: function () {
363
+ return chatSearchIsLoadingAtom;
364
+ }
365
+ });
366
+ Object.defineProperty(exports, 'chatSearchParamsAtom', {
367
+ enumerable: true,
368
+ get: function () {
369
+ return chatSearchParamsAtom;
370
+ }
371
+ });
372
+ Object.defineProperty(exports, 'chatSearchProductSortingAtom', {
373
+ enumerable: true,
374
+ get: function () {
375
+ return chatSearchProductSortingAtom;
376
+ }
377
+ });
378
+ Object.defineProperty(exports, 'chatSearchProducts', {
379
+ enumerable: true,
380
+ get: function () {
381
+ return chatSearchProducts;
382
+ }
383
+ });
384
+ Object.defineProperty(exports, 'chatSearchQueryAtom', {
385
+ enumerable: true,
386
+ get: function () {
387
+ return chatSearchQueryAtom;
388
+ }
389
+ });
390
+ Object.defineProperty(exports, 'chatSearchStateAtom', {
391
+ enumerable: true,
392
+ get: function () {
393
+ return chatSearchStateAtom;
394
+ }
395
+ });
396
+ Object.defineProperty(exports, 'createChatSearchFilterOption', {
397
+ enumerable: true,
398
+ get: function () {
399
+ return createChatSearchFilterOption;
400
+ }
401
+ });
402
+ Object.defineProperty(exports, 'formatFilterDisplayName', {
403
+ enumerable: true,
404
+ get: function () {
405
+ return formatFilterDisplayName;
406
+ }
407
+ });
408
+ Object.defineProperty(exports, 'getSearchParamsAtom', {
409
+ enumerable: true,
410
+ get: function () {
411
+ return getSearchParamsAtom;
412
+ }
413
+ });
414
+ Object.defineProperty(exports, 'handleSearchResultsAtom', {
415
+ enumerable: true,
416
+ get: function () {
417
+ return handleSearchResultsAtom;
418
+ }
419
+ });
420
+ Object.defineProperty(exports, 'initiateChatSearchAtom', {
421
+ enumerable: true,
422
+ get: function () {
423
+ return initiateChatSearchAtom;
424
+ }
425
+ });
426
+ Object.defineProperty(exports, 'selectedFilterOptionsAtom', {
427
+ enumerable: true,
428
+ get: function () {
429
+ return selectedFilterOptionsAtom;
430
+ }
431
+ });
432
+ Object.defineProperty(exports, 'setChatSearchParamsAtom', {
433
+ enumerable: true,
434
+ get: function () {
435
+ return setChatSearchParamsAtom;
436
+ }
437
+ });
438
+ Object.defineProperty(exports, 'setSearchParams', {
439
+ enumerable: true,
440
+ get: function () {
441
+ return setSearchParams;
442
+ }
443
+ });
444
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFNlYXJjaC1EV01peVdOMC5janMiLCJuYW1lcyI6WyJQcm9kdWN0U29ydGluZyIsIlByb2R1Y3RTb3J0aW5nIiwiTWVzc2FnZVR5cGUiLCJuZXdPcmdDb25maWdBdG9tIiwibWVzc2FnZXNBdG9tIiwicmVwbHlFdmVudENhdGVnb3J5QXRvbSIsIlVzZXJFdmVudENhdGVnb3J5IiwidXNlclF1ZXJ5QXRvbSIsInVzZXJIYXNSZXBsaWVkQXRvbSIsInF1ZXVlVXNlckV2ZW50QXRvbSIsIk1lc3NhZ2VSb2xlIl0sInNvdXJjZXMiOlsiLi4vc3JjL2F0b21zL3NlYXJjaC91dGlscy50cyIsIi4uL3NyYy9hdG9tcy9zZWFyY2gvcHJvZHVjdEZpbHRlcnMudHMiLCIuLi9zcmMvYXRvbXMvc2VhcmNoL3Byb2R1Y3RTb3J0ZXIudHMiLCIuLi9zcmMvYXRvbXMvc2VhcmNoL2NoYXRTZWFyY2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGZvcm1hdEZpbHRlckRpc3BsYXlOYW1lID0gKGRpc3BsYXlOYW1lOiBzdHJpbmcpID0+IHtcbiAgY29uc3Qgc2l6ZXMgPSBbJ3h4eHMnLCAneHhzJywgJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCcsICd4eHhsJywgJ3h4eHhsJ107XG5cbiAgY29uc3QgcHJvY2Vzc2VkV29yZHMgPSBkaXNwbGF5TmFtZVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnNwbGl0KCcgJylcbiAgICAubWFwKCh3b3JkKSA9PiB7XG4gICAgICBpZiAoc2l6ZXMuaW5jbHVkZXMod29yZCkpIHtcbiAgICAgICAgcmV0dXJuIHdvcmQudG9VcHBlckNhc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKTtcbiAgICB9KTtcblxuICBjb25zdCB0aXRsZUNhc2VkTmFtZSA9IHByb2Nlc3NlZFdvcmRzLmpvaW4oJyAnKTtcblxuICAvLyBGaW5hbCByZXBsYWNlbWVudHMgZm9yIHNwZWNpYWwgY2FzZXNcbiAgcmV0dXJuIHRpdGxlQ2FzZWROYW1lLnJlcGxhY2UoL0lwaG9uZS9nLCAnaVBob25lJyk7XG59O1xuIiwiaW1wb3J0IHsgUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgRmlsdGVyQXR0cmlidXRlIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzJztcbmltcG9ydCB7IFNlbGVjdGVkRmlsdGVyT3B0aW9uIH0gZnJvbSAnc3JjL2F0b21zL3NlYXJjaC9zZWFyY2hBUEknO1xuaW1wb3J0IHsgQ2hhdFNlYXJjaEZpbHRlciwgQ2hhdFNlYXJjaEZpbHRlckl0ZW0gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGZvcm1hdEZpbHRlckRpc3BsYXlOYW1lIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IGdldFByaWNlQnVja2V0ID0gKHByaWNlOiBudW1iZXIsIGJ1Y2tldFNpemU6IG51bWJlcikgPT4ge1xuICBjb25zdCBidWNrZXQgPSBNYXRoLmZsb29yKHByaWNlIC8gYnVja2V0U2l6ZSk7XG4gIHJldHVybiBidWNrZXQgKiBidWNrZXRTaXplO1xufTtcblxuY29uc3QgaXNTdHJpbmdBcnJheSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHN0cmluZ1tdID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUuZXZlcnkoKGl0ZW0pID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyk7XG59O1xuXG50eXBlIEZpbHRlclNvcnRGdW5jdGlvbiA9IChhOiBDaGF0U2VhcmNoRmlsdGVySXRlbSwgYjogQ2hhdFNlYXJjaEZpbHRlckl0ZW0pID0+IG51bWJlcjtcblxuY29uc3Qgc29ydEZpbHRlciA9IChmaWx0ZXJDb25maWc6IEZpbHRlckF0dHJpYnV0ZSk6IEZpbHRlclNvcnRGdW5jdGlvbiA9PiB7XG4gIGlmIChmaWx0ZXJDb25maWcudHlwZSA9PT0gJ3ByaWNlJykge1xuICAgIHJldHVybiAoYSwgYikgPT4gTnVtYmVyKGEuZmlsdGVySXRlbUlkKSAtIE51bWJlcihiLmZpbHRlckl0ZW1JZCk7XG4gIH1cbiAgaWYgKGZpbHRlckNvbmZpZy50eXBlID09PSAnZHluYW1pYycpIHtcbiAgICBpZiAoZmlsdGVyQ29uZmlnLnNvcnRpbmcudHlwZSA9PT0gJ2FscGhhYmV0aWMnKSB7XG4gICAgICByZXR1cm4gKGEsIGIpID0+IGEuZGlzcGxheU5hbWUubG9jYWxlQ29tcGFyZShiLmRpc3BsYXlOYW1lKTtcbiAgICB9XG4gICAgLy8gU29ydCBieSB0aGUgbnVtYmVyIG9mIHByb2R1Y3RzLCBpZiB0aGV5IG1hdGNoLCBzb3J0IGJ5IGFscGhhYmV0aWNhbFxuICAgIGlmIChmaWx0ZXJDb25maWcuc29ydGluZy50eXBlID09PSAncHJvZHVjdENvdW50Jykge1xuICAgICAgcmV0dXJuIChhLCBiKSA9PlxuICAgICAgICBhLnByb2R1Y3RDb3VudCA9PT0gYi5wcm9kdWN0Q291bnRcbiAgICAgICAgICA/IGEuZGlzcGxheU5hbWUubG9jYWxlQ29tcGFyZShiLmRpc3BsYXlOYW1lKVxuICAgICAgICAgIDogYi5wcm9kdWN0Q291bnQgLSBhLnByb2R1Y3RDb3VudDtcbiAgICB9XG4gICAgaWYgKGZpbHRlckNvbmZpZy5zb3J0aW5nLnR5cGUgPT09ICdjdXN0b20nKSB7XG4gICAgICBjb25zdCBzb3J0ZWRLZXlzID0gZmlsdGVyQ29uZmlnLnNvcnRpbmcubWFwO1xuICAgICAgcmV0dXJuIChhLCBiKSA9PiB7XG4gICAgICAgIGlmIChzb3J0ZWRLZXlzW2EuZGlzcGxheU5hbWVdICYmIHNvcnRlZEtleXNbYi5kaXNwbGF5TmFtZV0pIHtcbiAgICAgICAgICAvLyBJZiBib3RoIGFyZSBpbiB0aGUgc29ydGVkS2V5cywgc29ydCBieSB0aGUgaW5kZXhcbiAgICAgICAgICByZXR1cm4gc29ydGVkS2V5c1thLmRpc3BsYXlOYW1lXSAtIHNvcnRlZEtleXNbYi5kaXNwbGF5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgb25seSAnYScgaXMgaW4gdGhlIHNvcnRlZEtleXMsIHB1dCBpdCBiZWZvcmUgdGhlIG90aGVyXG4gICAgICAgIGlmIChzb3J0ZWRLZXlzW2EuZGlzcGxheU5hbWVdKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG9ubHkgJ2InIGlzIGluIHRoZSBzb3J0ZWRLZXlzLCBwdXQgaXQgYmVmb3JlIHRoZSBvdGhlclxuICAgICAgICBpZiAoc29ydGVkS2V5c1tiLmRpc3BsYXlOYW1lXSkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG5laXRoZXIgYXJlIGluIHRoZSBzb3J0ZWRLZXlzLCBzb3J0IGJ5IHByb2R1Y3RDb3VudFxuICAgICAgICByZXR1cm4gYi5wcm9kdWN0Q291bnQgLSBhLnByb2R1Y3RDb3VudDtcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcignSW52YWFsaWQgc2VhcmNoIGZpbHRlciBjb25maWd1cmF0aW9uJyk7XG59O1xuXG5leHBvcnQgY2xhc3MgUHJvZHVjdEZpbHRlcnMge1xuICBzdGF0aWMgZ2V0RmlsdGVyc0ZvclByb2R1Y3RzKFxuICAgIHByb2R1Y3RzOiBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ11bXSxcbiAgICBmaWx0ZXJDb25maWdzOiBGaWx0ZXJBdHRyaWJ1dGVbXSxcbiAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnM6IFNlbGVjdGVkRmlsdGVyT3B0aW9uW10sXG4gICk6IENoYXRTZWFyY2hGaWx0ZXJbXSB7XG4gICAgaWYgKCFwcm9kdWN0cyB8fCBwcm9kdWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJzID0gZmlsdGVyQ29uZmlncy5tYXAoKGZpbHRlckNvbmZpZykgPT5cbiAgICAgIHByb2R1Y3RzLnJlZHVjZShcbiAgICAgICAgKGFjYywgcHJvZHVjdCkgPT4ge1xuICAgICAgICAgIC8vIFByaWNlIGhhcyBzcGVjaWFsIGhhbmRsaW5nIGZvciB0aGUgZmlsdGVyc1xuICAgICAgICAgIGlmIChmaWx0ZXJDb25maWcudHlwZSA9PT0gJ3ByaWNlJykge1xuICAgICAgICAgICAgY29uc3QgcHJpY2VCdWNrZXQgPSBnZXRQcmljZUJ1Y2tldChcbiAgICAgICAgICAgICAgcHJvZHVjdC5zYWxlUHJpY2UgPz8gcHJvZHVjdC5vcmlnaW5hbFByaWNlID8/IDAsXG4gICAgICAgICAgICAgIGZpbHRlckNvbmZpZy5idWNrZXRTaXplLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhY2MubWFwW3ByaWNlQnVja2V0XSA/PyB7XG4gICAgICAgICAgICAgIGZpbHRlckl0ZW1JZDogcHJpY2VCdWNrZXQsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBgJCR7cHJpY2VCdWNrZXR9LSQke3ByaWNlQnVja2V0ICsgZmlsdGVyQ29uZmlnLmJ1Y2tldFNpemV9YCxcbiAgICAgICAgICAgICAgcHJvZHVjdENvdW50OiAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFjYy5tYXBbcHJpY2VCdWNrZXRdID0geyAuLi5jdXJyZW50LCBwcm9kdWN0Q291bnQ6IGN1cnJlbnQucHJvZHVjdENvdW50ICsgMSB9O1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBBc3N1bWUgdGhhdCB0aGUgXCJhdHRyaWJ1dGVcIiBpcyBhbiBhcnJheSBvZiB2YWx1ZXNcbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZXMgPVxuICAgICAgICAgICAgKHByb2R1Y3QuZmlsdGVycyAmJiBwcm9kdWN0LmZpbHRlcnM/LltmaWx0ZXJDb25maWcuYXR0cmlidXRlXSkgPz8gW107XG4gICAgICAgICAgaWYgKGlzU3RyaW5nQXJyYXkoYXR0cmlidXRlVmFsdWVzKSkge1xuICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzLmZvckVhY2goKHZhbCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsID0gdmFsLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhY2MubWFwW25vcm1hbGl6ZWRWYWxdID8/IHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJJdGVtSWQ6IG5vcm1hbGl6ZWRWYWwsXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IGZvcm1hdEZpbHRlckRpc3BsYXlOYW1lKHZhbCksIC8vIEtlZXAgb3JpZ2luYWwgY2FzZSBmb3IgZGlzcGxheVxuICAgICAgICAgICAgICAgIHByb2R1Y3RDb3VudDogMCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgYWNjLm1hcFtub3JtYWxpemVkVmFsXSA9IHsgLi4uY3VycmVudCwgcHJvZHVjdENvdW50OiBjdXJyZW50LnByb2R1Y3RDb3VudCArIDEgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmaWx0ZXJDb25maWcsXG4gICAgICAgICAgbWFwOiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBDaGF0U2VhcmNoRmlsdGVySXRlbT4sXG4gICAgICAgIH0sXG4gICAgICApLFxuICAgICk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZEZpbHRlcnM6IENoYXRTZWFyY2hGaWx0ZXJbXSA9IGZpbHRlcnMubWFwKCh7IGZpbHRlckNvbmZpZywgbWFwIH0pID0+ICh7XG4gICAgICBmaWx0ZXJJZDogZmlsdGVyQ29uZmlnLmZpbHRlcklkLFxuICAgICAgZGlzcGxheU5hbWU6IGZpbHRlckNvbmZpZy5kaXNwbGF5TmFtZSxcbiAgICAgIGl0ZW1zOiBPYmplY3QudmFsdWVzKG1hcClcbiAgICAgICAgLm1hcCgoZmlsdGVyKSA9PiAoe1xuICAgICAgICAgIGZpbHRlckl0ZW1JZDogZmlsdGVyLmZpbHRlckl0ZW1JZCxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogZmlsdGVyLmRpc3BsYXlOYW1lLFxuICAgICAgICAgIHByb2R1Y3RDb3VudDogZmlsdGVyLnByb2R1Y3RDb3VudCxcbiAgICAgICAgICBpc1NlbGVjdGVkOlxuICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLnNvbWUoXG4gICAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gYCR7ZmlsdGVyQ29uZmlnLmZpbHRlcklkfToke2ZpbHRlci5maWx0ZXJJdGVtSWR9YCxcbiAgICAgICAgICAgICkgPz8gZmFsc2UsXG4gICAgICAgIH0pKVxuICAgICAgICAuc29ydChzb3J0RmlsdGVyKGZpbHRlckNvbmZpZykpLFxuICAgIH0pKTtcblxuICAgIHJldHVybiBbLi4udHJhbnNmb3JtZWRGaWx0ZXJzXTtcbiAgfVxuXG4gIHN0YXRpYyBmaWx0ZXJQcm9kdWN0cyhcbiAgICBwcm9kdWN0czogUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddW10sXG4gICAgZmlsdGVyQ29uZmlnczogRmlsdGVyQXR0cmlidXRlW10sXG4gICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zOiBTZWxlY3RlZEZpbHRlck9wdGlvbltdLFxuICAgIGFkZGl0aXZlRHluYW1pY0ZpbHRlcnMgPSBmYWxzZSwgLy8gU2V0IHRoaXMgdG8gdHJ1ZSB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBiZWhhdmlvciB3aGVyZSBzdGFja2luZyBmaWx0ZXJzIGhhcyBPUiBsb2dpYy5cbiAgKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXJzID0gZmlsdGVyQ29uZmlnc1xuICAgICAgLm1hcCgoZmlsdGVyQ29uZmlnKSA9PiAoe1xuICAgICAgICBmaWx0ZXJDb25maWcsXG4gICAgICAgIGhhc1NlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLnNvbWUoXG4gICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmZpbHRlcklkID09PSBmaWx0ZXJDb25maWcuZmlsdGVySWQsXG4gICAgICAgICksXG4gICAgICB9KSlcbiAgICAgIC5maWx0ZXIoKHsgaGFzU2VsZWN0ZWRPcHRpb25zIH0pID0+IGhhc1NlbGVjdGVkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHNlbGVjdGVkRmlsdGVyT3B0aW9ucy5sZW5ndGggPT09IDBcbiAgICAgID8gcHJvZHVjdHNcbiAgICAgIDogcHJvZHVjdHMuZmlsdGVyKChwcm9kdWN0KSA9PlxuICAgICAgICAgIHNlbGVjdGVkRmlsdGVycy5yZWR1Y2UoKGFjYywgc2VsZWN0ZWRGaWx0ZXIpID0+IHtcbiAgICAgICAgICAgIC8vIEZpbmRpbmcgb25lIGZhbHNlIHJlbW92ZXMgdGhlIHByb2R1Y3RcbiAgICAgICAgICAgIGlmICghYWNjKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBQcmljZSBpcyBzcGVjaWFsXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRGaWx0ZXIuZmlsdGVyQ29uZmlnLnR5cGUgPT09ICdwcmljZScpIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJpY2VCdWNrZXQgPSBnZXRQcmljZUJ1Y2tldChcbiAgICAgICAgICAgICAgICBwcm9kdWN0LnNhbGVQcmljZSA/PyBwcm9kdWN0Lm9yaWdpbmFsUHJpY2UgPz8gMCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEZpbHRlci5maWx0ZXJDb25maWcuYnVja2V0U2l6ZSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlc1ByaWNlRmlsdGVyID0gc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLnNvbWUoXG4gICAgICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmlkID09PSBgcHJpY2U6JHtwcmljZUJ1Y2tldH1gLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoIW1hdGNoZXNQcmljZUZpbHRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRGaWx0ZXIuZmlsdGVyQ29uZmlnLnR5cGUgPT09ICdkeW5hbWljJykge1xuICAgICAgICAgICAgICAvLyBkeW5hbWljIGlzIG1pc2xlYWRpbmcgaGVyZS4gSXRzIG5vdCBqdXN0IGR5bmFtaWMgZmlsdGVycywgYnV0IHN0YXRpYyBmaWx0ZXJzIGJlY2F1c2UgdGhlIGNvbmZpZyBjb3VudHMgc3RhdGljIGZpbHRlcnMgYXMgdHlwZTogZHluYW1pYy5cbiAgICAgICAgICAgICAgY29uc3QgeyBmaWx0ZXJJZCwgYXR0cmlidXRlIH0gPSBzZWxlY3RlZEZpbHRlci5maWx0ZXJDb25maWc7XG4gICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlcyA9IHByb2R1Y3QuZmlsdGVycz8uW2F0dHJpYnV0ZV07XG5cbiAgICAgICAgICAgICAgaWYgKCFpc1N0cmluZ0FycmF5KGF0dHJpYnV0ZVZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBpc0R5bmFtaWNGaWx0ZXIgPSBzZWxlY3RlZEZpbHRlci5maWx0ZXJDb25maWcuYXR0cmlidXRlID09PSAnZHluYW1pYyc7IC8vIFRydWUgZHluYW1pYyBmaWx0ZXJzICh0aGUgb25lcyB0aGF0IGFwcGVhciBiZW5lYXRoIHRoZSBzZWFyY2ggaW5wdXQpXG4gICAgICAgICAgICAgIGNvbnN0IGlzU3VidHJhY3RpdmVMb2dpYyA9IGlzRHluYW1pY0ZpbHRlciAmJiAhYWRkaXRpdmVEeW5hbWljRmlsdGVycztcblxuICAgICAgICAgICAgICBpZiAoaXNTdWJ0cmFjdGl2ZUxvZ2ljKSB7XG4gICAgICAgICAgICAgICAgLy8gQU5EIGxvZ2ljIGZvciBzdWJ0cmFjdGl2ZSBkeW5hbWljIGZpbHRlcnMgYW5kIGJldHdlZW4gc3RhdGljIGZpbHRlciBjYXRlZ29yaWVzXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zRm9yVGhpc0ZpbHRlciA9IHNlbGVjdGVkRmlsdGVyT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24uZmlsdGVySWQgPT09IGZpbHRlcklkKVxuICAgICAgICAgICAgICAgICAgLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uZmlsdGVySXRlbUlkLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzQWxsU2VsZWN0ZWRWYWx1ZXMgPSBzZWxlY3RlZE9wdGlvbnNGb3JUaGlzRmlsdGVyLmV2ZXJ5KChzZWxlY3RlZFZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWVzLnNvbWUoKHZhbCkgPT4gdmFsLnRvTG93ZXJDYXNlKCkgPT09IHNlbGVjdGVkVmFsdWUpLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWhhc0FsbFNlbGVjdGVkVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE9SIGxvZ2ljIGZvciBzdGF0aWMgZmlsdGVycyBpbiB0aGUgc2lkZWJhciB3aXRoaW4gYSBjYXRlZ29yeS5cbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gYXR0cmlidXRlVmFsdWVzLnNvbWUoKHZhbCkgPT5cbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9ucy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09IGAke2ZpbHRlcklkfToke3ZhbC50b0xvd2VyQ2FzZSgpfWAsXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9LCB0cnVlKSxcbiAgICAgICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgUHJvZHVjdFNvcnRpbmcgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFByb2R1Y3RTb3J0ZXIge1xuICBzdGF0aWMgc29ydChwcm9kdWN0czogUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddW10sIHNvcnRpbmc6IFByb2R1Y3RTb3J0aW5nKSB7XG4gICAgc3dpdGNoIChzb3J0aW5nKSB7XG4gICAgICBjYXNlIFByb2R1Y3RTb3J0aW5nLlBSSUNFX0FTQzpcbiAgICAgICAgcmV0dXJuIFsuLi5wcm9kdWN0c10uc29ydChcbiAgICAgICAgICAocDEsIHAyKSA9PlxuICAgICAgICAgICAgKHAxLnNhbGVQcmljZSA/PyBwMS5vcmlnaW5hbFByaWNlID8/IDApIC0gKHAyLnNhbGVQcmljZSA/PyBwMi5vcmlnaW5hbFByaWNlID8/IDApLFxuICAgICAgICApO1xuXG4gICAgICBjYXNlIFByb2R1Y3RTb3J0aW5nLlBSSUNFX0RFU0M6XG4gICAgICAgIHJldHVybiBbLi4ucHJvZHVjdHNdLnNvcnQoXG4gICAgICAgICAgKHAxLCBwMikgPT5cbiAgICAgICAgICAgIChwMi5zYWxlUHJpY2UgPz8gcDIub3JpZ2luYWxQcmljZSA/PyAwKSAtIChwMS5zYWxlUHJpY2UgPz8gcDEub3JpZ2luYWxQcmljZSA/PyAwKSxcbiAgICAgICAgKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHByb2R1Y3RzO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IGF0b20gfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7XG4gIE1lc3NhZ2UsXG4gIE1lc3NhZ2VSb2xlLFxuICBNZXNzYWdlVHlwZSxcbiAgUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyxcbn0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHNcIjtcbmltcG9ydCB7XG4gIG1lc3NhZ2VzQXRvbSxcbiAgcmVwbHlFdmVudENhdGVnb3J5QXRvbSxcbiAgdXNlckhhc1JlcGxpZWRBdG9tLFxuICB1c2VyUXVlcnlBdG9tLFxufSBmcm9tIFwic3JjL2F0b21zL2NoYXRcIjtcbmltcG9ydCB7IHF1ZXVlVXNlckV2ZW50QXRvbSB9IGZyb20gXCIuLi9jaGF0L21lc3NhZ2VRdWV1ZVwiO1xuaW1wb3J0IHsgbmV3T3JnQ29uZmlnQXRvbSB9IGZyb20gXCIuLi9vcmdcIjtcbmltcG9ydCB7IFByb2R1Y3RGaWx0ZXJzIH0gZnJvbSBcIi4vcHJvZHVjdEZpbHRlcnNcIjtcbmltcG9ydCB7IFByb2R1Y3RTb3J0ZXIgfSBmcm9tIFwiLi9wcm9kdWN0U29ydGVyXCI7XG5pbXBvcnQgeyBDaGF0U2VhcmNoU3RhdGVUeXBlLCBQcm9kdWN0U29ydGluZyB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIE5PVEU6XG4vLyBUaGlzIGlzIGEgbGVnYWN5IHZlcnNpb24gb2Ygc2VhcmNoIHRoYXQgbmVlZHMgdG8gYmUgZGVjb3VwbGVkIGFuZCByZW1vdmVkLlxuLy8gdGhlIG5ldyBzZWFyY2gudHMgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeSBpcyBsaWtlbHkgd2hhdCB5b3UncmUgbG9va2luZyBmb3IuXG5cbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoU3RhdGVBdG9tID0gYXRvbTxDaGF0U2VhcmNoU3RhdGVUeXBlPihcImVudHJ5cG9pbnRcIik7XG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaEhhc1Byb2R1Y3RzQXRvbSA9IGF0b208Ym9vbGVhbj4oZmFsc2UpO1xuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hQcm9kdWN0U29ydGluZ0F0b20gPSBhdG9tPFByb2R1Y3RTb3J0aW5nPihcbiAgUHJvZHVjdFNvcnRpbmcuRkVBVFVSRURcbik7XG5cbmNvbnN0IGZpbHRlclByb2R1Y3RMaXN0ID0gKG1lc3NhZ2U6IE1lc3NhZ2UpID0+XG4gIG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUHJvZHVjdCAmJiBtZXNzYWdlLm1ldGFkYXRhLmlzRm9yR3JpZCA9PT0gdHJ1ZTtcbmNvbnN0IGZpbHRlckZpbHRlckxpc3QgPSAobWVzc2FnZTogTWVzc2FnZSkgPT5cbiAgbWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5Qcm9kdWN0U2VhcmNoRmlsdGVyO1xuXG5leHBvcnQgdHlwZSBDaGF0U2VhcmNoVHVybiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgZ2VuZXJhdGVkUXVlcnk/OiBzdHJpbmc7XG4gIHByb2R1Y3RDb3VudDogbnVtYmVyO1xuICBwcm9kdWN0TGlzdDogUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlc1tcImF0dHJpYnV0ZXNcIl1bXTtcbiAgZmlsdGVyTGlzdDogc3RyaW5nW107XG4gIG1lc3NhZ2VzOiBNZXNzYWdlW107XG59O1xuXG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaElzTG9hZGluZ0F0b20gPSBhdG9tKGZhbHNlKTtcblxuY29uc3QgYnVpbGRDaGF0U2VhcmNoVHVybiA9IChcbiAgbWVzc2FnZXM6IE1lc3NhZ2VbXVxuKTogW3N0cmluZywgQ2hhdFNlYXJjaFR1cm5dIHwgbnVsbCA9PiB7XG4gIGNvbnN0IHF1ZXJ5TWVzc2FnZSA9IG1lc3NhZ2VzLmZpbmQoXG4gICAgKG1lc3NhZ2UpID0+IG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaFxuICApO1xuICBpZiAoIXF1ZXJ5TWVzc2FnZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHsgZ2VuZXJhdGVkUXVlcnksIHByb2R1Y3RDb3VudCB9ID0gcXVlcnlNZXNzYWdlLm1ldGFkYXRhID8/IHt9O1xuICBjb25zdCBwcm9kdWN0TGlzdCA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihmaWx0ZXJQcm9kdWN0TGlzdClcbiAgICAubWFwKChtZXNzYWdlKSA9PiAobWVzc2FnZSBhcyBhbnkpLm1ldGFkYXRhKTtcbiAgY29uc3QgZmlsdGVyTGlzdCA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihmaWx0ZXJGaWx0ZXJMaXN0KVxuICAgIC5tYXAoKG1lc3NhZ2UpID0+IG1lc3NhZ2UubWV0YWRhdGEuZmlsdGVyTmFtZSk7XG4gIHJldHVybiBbXG4gICAgcXVlcnlNZXNzYWdlLmlkLFxuICAgIHtcbiAgICAgIGlkOiBxdWVyeU1lc3NhZ2UuaWQsXG4gICAgICBnZW5lcmF0ZWRRdWVyeSxcbiAgICAgIHByb2R1Y3RDb3VudDogcHJvZHVjdENvdW50IHx8IHByb2R1Y3RMaXN0Lmxlbmd0aCxcbiAgICAgIHByb2R1Y3RMaXN0LFxuICAgICAgZmlsdGVyTGlzdCxcbiAgICAgIG1lc3NhZ2VzLFxuICAgIH0sXG4gIF07XG59O1xuXG5jb25zdCBjaGF0U2VhcmNoRmlsdGVyQ29uZmlnQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICBjb25zdCBuZXdPcmdDb25maWcgPSBnZXQobmV3T3JnQ29uZmlnQXRvbSk7XG4gIHJldHVybiAoXG4gICAgbmV3T3JnQ29uZmlnPy5mcm9udGVuZENvbmZpZz8udWlDb25maWdzPy5zZWFyY2hDb25maWc/LnNlYXJjaEZpbHRlckNvbmZpZyB8fFxuICAgIFtdXG4gICk7XG59KTtcblxuY29uc3Qgc2VhcmNoTWFwQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICBjb25zdCBtZXNzYWdlcyA9IGdldChtZXNzYWdlc0F0b20pO1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIG1lc3NhZ2VzLm1hcChidWlsZENoYXRTZWFyY2hUdXJuKS5maWx0ZXIoKHYpID0+IHYgIT09IG51bGwpXG4gICk7XG59KTtcblxuY29uc3QgaW50ZXJuYWxDaGF0U2VhcmNoUGFyYW1zQXRvbSA9IGF0b208e1xuICBpZDogc3RyaW5nIHwgbnVsbDtcbiAgcXVlcnk6IHN0cmluZyB8IG51bGw7XG59Pih7XG4gIGlkOiBudWxsLFxuICBxdWVyeTogbnVsbCxcbn0pO1xuXG4vLyBTZWxlY3RlZCBmaWx0ZXIgb3B0aW9ucyB3aXRoIGNvbXBvdW5kIG9iamVjdHMgZm9yIGJldHRlciB0eXBlIHNhZmV0eSBhbmQgZGlzcGxheVxuZXhwb3J0IHR5cGUgU2VsZWN0ZWRDaGF0U2VhcmNoRmlsdGVyT3B0aW9uID0ge1xuICBpZDogc3RyaW5nOyAvLyBcImZpbHRlcklkOmZpbHRlckl0ZW1JZFwiIC0gbWFpbnRhaW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIGNvbXBhcmlzb25zXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGZpbHRlcklkOiBzdHJpbmc7IC8vIEZpbHRlciBjYXRlZ29yeVxuICBmaWx0ZXJJdGVtSWQ6IHN0cmluZzsgLy8gRmlsdGVyIHZhbHVlXG59O1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zQXRvbSA9IGF0b208U2VsZWN0ZWRDaGF0U2VhcmNoRmlsdGVyT3B0aW9uW10+KFxuICBbXVxuKTtcblxuZXhwb3J0IGNvbnN0IGFkZGl0aXZlRHluYW1pY0ZpbHRlcnNBdG9tID0gYXRvbSgoZ2V0KSA9PiB7XG4gIGNvbnN0IG5ld09yZ0NvbmZpZyA9IGdldChuZXdPcmdDb25maWdBdG9tKTtcbiAgcmV0dXJuIChcbiAgICBuZXdPcmdDb25maWc/LmZyb250ZW5kQ29uZmlnPy51aUNvbmZpZ3M/LnNlYXJjaENvbmZpZ1xuICAgICAgPy5hZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzID8/IGZhbHNlXG4gICk7XG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNoYXRTZWFyY2hGaWx0ZXJPcHRpb24gPSAoXG4gIGZpbHRlcklkOiBzdHJpbmcsXG4gIGZpbHRlckl0ZW1JZDogc3RyaW5nLFxuICBkaXNwbGF5TmFtZTogc3RyaW5nXG4pOiBTZWxlY3RlZENoYXRTZWFyY2hGaWx0ZXJPcHRpb24gPT4gKHtcbiAgaWQ6IGAke2ZpbHRlcklkfToke2ZpbHRlckl0ZW1JZH1gLFxuICBkaXNwbGF5TmFtZSxcbiAgZmlsdGVySWQsXG4gIGZpbHRlckl0ZW1JZCxcbn0pO1xuXG5jb25zdCBoYW5kbGVTZWFyY2hBdG9tID0gYXRvbShudWxsLCAoZ2V0LCBzZXQsIG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcbiAgaWYgKG1lc3NhZ2UudHlwZSAhPT0gTWVzc2FnZVR5cGUuU2VhcmNoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcXVlcnlTZWFyY2ggPSBtZXNzYWdlLm1ldGFkYXRhLnNlYXJjaFRlcm07XG5cbiAgc2V0KHJlcGx5RXZlbnRDYXRlZ29yeUF0b20sIFVzZXJFdmVudENhdGVnb3J5LlNlYXJjaCk7XG4gIHNldCh1c2VyUXVlcnlBdG9tLCBxdWVyeVNlYXJjaCk7XG4gIHNldChtZXNzYWdlc0F0b20sIFsuLi5nZXQobWVzc2FnZXNBdG9tKSwgW21lc3NhZ2VdXSk7XG4gIHNldCh1c2VySGFzUmVwbGllZEF0b20sIHRydWUpO1xuXG4gIHNldChxdWV1ZVVzZXJFdmVudEF0b20sIHtcbiAgICBldmVudElkOiBtZXNzYWdlLmlkLFxuICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2gsXG4gICAgY3JlYXRlZEF0OiBtZXNzYWdlLmNyZWF0ZWRBdCxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICBzZWFyY2hUZXJtOiBtZXNzYWdlLm1ldGFkYXRhLnNlYXJjaFRlcm0sXG4gICAgICBzZWxlY3RlZEZpbHRlcnM6IG1lc3NhZ2UubWV0YWRhdGEuc2VsZWN0ZWRGaWx0ZXJzLFxuICAgIH0sXG4gIH0pO1xufSk7XG5cbi8vIFRoaXMgaW50ZXJuYWwgYXRvbSBpcyB1c2VkIHRvIHN0b3JlIHRoZSBzZWFyY2ggcGFyYW1zXG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaFBhcmFtc0F0b20gPSBhdG9tKFxuICAoZ2V0KSA9PiBnZXQoaW50ZXJuYWxDaGF0U2VhcmNoUGFyYW1zQXRvbSksXG4gIChfLCBzZXQsIHZhbHVlOiB7IGlkOiBzdHJpbmcgfCBudWxsOyBxdWVyeTogc3RyaW5nIHwgbnVsbCB9KSA9PiB7XG4gICAgc2V0KGludGVybmFsQ2hhdFNlYXJjaFBhcmFtc0F0b20sIHZhbHVlKTtcbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hRdWVyeUF0b20gPSBhdG9tKFxuICAoZ2V0KSA9PiBnZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20pPy5xdWVyeSA/PyBudWxsLFxuICAoZ2V0LCBzZXQsIHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tKTtcbiAgICBzZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20sIHsgaWQ6IHNlYXJjaFBhcmFtcy5pZCwgcXVlcnk6IHZhbHVlIH0pO1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaElkQXRvbSA9IGF0b20oXG4gIChnZXQpID0+IGdldChjaGF0U2VhcmNoUGFyYW1zQXRvbSk/LmlkID8/IG51bGwsXG4gIChnZXQsIHNldCwgdmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20pO1xuICAgIHNldChjaGF0U2VhcmNoUGFyYW1zQXRvbSwgeyBpZDogdmFsdWUsIHF1ZXJ5OiBzZWFyY2hQYXJhbXMucXVlcnkgfSk7XG4gIH1cbik7XG5cbmV4cG9ydCBjb25zdCBDaGF0U2VhcmNoVHVybkF0b20gPSBhdG9tKChnZXQpID0+IHtcbiAgY29uc3Qgc2VhcmNoRmlsdGVyQ29uZmlnID0gZ2V0KGNoYXRTZWFyY2hGaWx0ZXJDb25maWdBdG9tKTtcbiAgY29uc3Qgc2VhcmNoTWFwID0gZ2V0KHNlYXJjaE1hcEF0b20pO1xuICBjb25zdCBjaGF0U2VhcmNoSWQgPSBnZXQoY2hhdFNlYXJjaElkQXRvbSk7XG4gIGlmICghY2hhdFNlYXJjaElkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgQ2hhdFNlYXJjaFR1cm4gPSBzZWFyY2hNYXBbY2hhdFNlYXJjaElkXTtcbiAgaWYgKCFDaGF0U2VhcmNoVHVybikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHByb2R1Y3RTb3J0aW5nID0gZ2V0KGNoYXRTZWFyY2hQcm9kdWN0U29ydGluZ0F0b20pO1xuICBjb25zdCBzZWxlY3RlZEZpbHRlck9wdGlvbnMgPSBnZXQoc2VsZWN0ZWRGaWx0ZXJPcHRpb25zQXRvbSk7XG4gIGNvbnN0IGFkZGl0aXZlRHluYW1pY0ZpbHRlcnMgPSBnZXQoYWRkaXRpdmVEeW5hbWljRmlsdGVyc0F0b20pO1xuICBjb25zdCBmaWx0ZXJlZFByb2R1Y3RzID0gUHJvZHVjdEZpbHRlcnMuZmlsdGVyUHJvZHVjdHMoXG4gICAgQ2hhdFNlYXJjaFR1cm4ucHJvZHVjdExpc3QsXG4gICAgc2VhcmNoRmlsdGVyQ29uZmlnLFxuICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9ucyxcbiAgICBhZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzXG4gICk7XG5cbiAgY29uc3QgZmlsdGVyZWRBbmRTb3J0ZWRQcm9kdWN0cyA9IFByb2R1Y3RTb3J0ZXIuc29ydChcbiAgICBmaWx0ZXJlZFByb2R1Y3RzLFxuICAgIHByb2R1Y3RTb3J0aW5nXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zZWFyY2hNYXBbY2hhdFNlYXJjaElkXSxcbiAgICBwcm9kdWN0TGlzdDogZmlsdGVyZWRBbmRTb3J0ZWRQcm9kdWN0cyxcbiAgICBwcm9kdWN0Q291bnQ6IGZpbHRlcmVkQW5kU29ydGVkUHJvZHVjdHMubGVuZ3RoLFxuICB9O1xufSk7XG5cbi8vIFRPRE86IFdvcmsgb24gZGVwcmVjYXRpbmcgdGhpcyBhdG9tIGluIGZhdm9yIG9mIHVzaW5nIENoYXRTZWFyY2hUdXJuQXRvbSBkaXJlY3RseVxuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hQcm9kdWN0cyA9IGF0b20oKGdldCkgPT4ge1xuICBjb25zdCBDaGF0U2VhcmNoVHVybiA9IGdldChDaGF0U2VhcmNoVHVybkF0b20pO1xuICByZXR1cm4gQ2hhdFNlYXJjaFR1cm4/LnByb2R1Y3RMaXN0ID8/IFtdO1xufSk7XG5cbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoRmlsdGVyc0F0b20gPSBhdG9tKChnZXQpID0+IHtcbiAgY29uc3Qgc2VhcmNoRmlsdGVyQ29uZmlnID0gZ2V0KGNoYXRTZWFyY2hGaWx0ZXJDb25maWdBdG9tKTtcbiAgY29uc3Qgc2VhcmNoTWFwID0gZ2V0KHNlYXJjaE1hcEF0b20pO1xuICBjb25zdCBjaGF0U2VhcmNoSWQgPSBnZXQoY2hhdFNlYXJjaElkQXRvbSk7XG5cbiAgaWYgKGNoYXRTZWFyY2hJZCAmJiBzZWFyY2hNYXBbY2hhdFNlYXJjaElkXSkge1xuICAgIGNvbnN0IHByb2R1Y3RzID0gc2VhcmNoTWFwW2NoYXRTZWFyY2hJZF0ucHJvZHVjdExpc3Q7XG4gICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zID0gZ2V0KHNlbGVjdGVkRmlsdGVyT3B0aW9uc0F0b20pO1xuICAgIHJldHVybiBQcm9kdWN0RmlsdGVycy5nZXRGaWx0ZXJzRm9yUHJvZHVjdHMoXG4gICAgICBwcm9kdWN0cyxcbiAgICAgIHNlYXJjaEZpbHRlckNvbmZpZyxcbiAgICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9uc1xuICAgICk7XG4gIH1cbiAgcmV0dXJuIFtdO1xufSk7XG5cbi8vIEZvciBzZWFyY2ggd2UgdXNlIHRoZSBmb2xsb3dpbmcgcXVlcnkgcGFyYW1zOlxuLy8gZXM6IHRydWUgLSB0aGlzIGluZGljYXRlcyB0aGF0IHdlIGFyZSBpbiBhIHNlYXJjaCBzdGF0ZVxuLy8gZXNxOiBxdWVyeSAtIHRoaXMgaXMgdGhlIGN1cnJlbnQgc2VhcmNoIHF1ZXJ5XG4vLyBlc2k6IHNlYXJjaCBpZCAtIHRoaXMgaXMgdGhlIHVuaXF1ZSBpZCBmb3IgdGhlIHNlYXJjaCByZXN1bHRzIHRoYXQgd2UgYXJlIGRpc3BsYXlpbmcuIEl0IGlzIHB1bGxlZCBmcm9tIHRoZSBtZXNzYWdlIGlkIGZyb20gdGhlIHR1cm4gdGhhdCBpbmNsdWRlcyB0aGUgc2VhcmNoIHJlc3VsdHNcblxuZXhwb3J0IGNvbnN0IHNldFNlYXJjaFBhcmFtcyA9IChxdWVyeTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzXCIsIFwidHJ1ZVwiKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc3FcIiwgcXVlcnkpO1xuICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sIFwiXCIsIHVybCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VhcmNoUGFyYW1zQXRvbSA9IGF0b20oKCkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICByZXR1cm4ge1xuICAgIGVzOiBwYXJhbXMuZ2V0KFwiZXNcIiksXG4gICAgZXNxOiBwYXJhbXMuZ2V0KFwiZXNxXCIpLFxuICB9O1xufSk7XG5cbmV4cG9ydCBjb25zdCBpbml0aWF0ZUNoYXRTZWFyY2hBdG9tID0gYXRvbShudWxsLCAoXywgc2V0LCBxdWVyeTogc3RyaW5nKSA9PiB7XG4gIHNldChjaGF0U2VhcmNoSXNMb2FkaW5nQXRvbSwgdHJ1ZSk7XG4gIC8vIFVwZGF0ZSBVUkwgYW5kIG1hbnVhbGx5IHRyaWdnZXIgc3RhdGUgY2hhbmdlIChzaW5jZSBwdXNoU3RhdGUgZG9lc24ndCB0cmlnZ2VyIHBvcHN0YXRlKVxuICBjb25zdCB1cmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc1wiLCBcInRydWVcIik7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNxXCIsIHF1ZXJ5KTtcbiAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt9LCBcIlwiLCB1cmwpO1xuXG4gIC8vIE1hbnVhbGx5IHRyaWdnZXIgcGFnZSB2YXJpYW50IHJlLWV2YWx1YXRpb24gYnkgZGlzcGF0Y2hpbmcgYSBwb3BzdGF0ZSBldmVudFxuICAvLyBUaGlzIGVuc3VyZXMgdGhlIHBhZ2UgdmFyaWFudCBzeXN0ZW0gZGV0ZWN0cyB0aGUgVVJMIGNoYW5nZSBhbmQgbW91bnRzIHNlYXJjaCByZXN1bHRzXG4gIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBQb3BTdGF0ZUV2ZW50KFwicG9wc3RhdGVcIiwgeyBzdGF0ZToge30gfSkpO1xuXG4gIHNldChjaGF0U2VhcmNoUGFyYW1zQXRvbSwgeyBpZDogbnVsbCwgcXVlcnkgfSk7XG4gIHNldChoYW5kbGVTZWFyY2hBdG9tLCB7XG4gICAgaWQ6IHV1aWQoKSxcbiAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlNlYXJjaCxcbiAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgc2VhcmNoVGVybTogcXVlcnksXG4gICAgICAvLyBFbmFibGluZyB0aGlzIHdpbGwgZW5hYmxlIHRoZSBuZXcgYmFja2VuZCBzZWFyY2hcbiAgICAgIHNlbGVjdGVkRmlsdGVyczogW10sXG4gICAgfSxcbiAgfSk7XG59KTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZVNlYXJjaFJlc3VsdHNBdG9tID0gYXRvbShcbiAgbnVsbCxcbiAgKGdldCwgc2V0LCBtZXNzYWdlOiBNZXNzYWdlIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlIHx8IG1lc3NhZ2UudHlwZSAhPT0gTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcHJvZHVjdENvdW50LCBnZW5lcmF0ZWRRdWVyeSB9ID0gbWVzc2FnZS5tZXRhZGF0YTtcbiAgICBpZiAocHJvZHVjdENvdW50ICE9PSAwKSB7XG4gICAgICAvLyBDbGVhciB0aGUgZmlsdGVyIG9wdGlvbnMgd2hlbiB3ZSBnZXQgbmV3IHByb2R1Y3RzXG4gICAgICBzZXQoc2VsZWN0ZWRGaWx0ZXJPcHRpb25zQXRvbSwgW10pO1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIHN0aWxsIGRvIGFueSBvZiB0aGVzZSB0aGluZ3M/XG4gICAgICBzZXQoY2hhdFNlYXJjaFN0YXRlQXRvbSwgXCJwcm9kdWN0LXBhZ2VcIik7XG4gICAgICBjb25zdCBjdXJyZW50U2VhcmNoUGFyYW1zID0gZ2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tKTtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc1wiLCBcInRydWVcIik7XG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzcVwiLCBnZW5lcmF0ZWRRdWVyeSk7XG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzaVwiLCBtZXNzYWdlLmlkKTtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7fSwgXCJcIiwgdXJsKTtcbiAgICAgIGlmIChjdXJyZW50U2VhcmNoUGFyYW1zLmlkID09PSBudWxsKSB7XG4gICAgICAgIC8vIElmIHRoZSBpZCBpcyBudWxsLCB3ZSBuZWVkIHRvIHJlcGxhY2UgdGhlIHN0YXRlXG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBcIlwiLCB1cmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgdGhlIHF1ZXJ5IGlzIGRpZmZlcmVudCwgd2UgbmVlZCB0byBwdXNoIGEgbmV3IHN0YXRlXG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBcIlwiLCB1cmwpO1xuICAgICAgfVxuICAgICAgc2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tLCB7IGlkOiBtZXNzYWdlLmlkLCBxdWVyeTogZ2VuZXJhdGVkUXVlcnkgfSk7XG4gICAgfVxuICB9XG4pO1xuXG5leHBvcnQgY29uc3Qgc2V0Q2hhdFNlYXJjaFBhcmFtc0F0b20gPSBhdG9tKG51bGwsIChfLCBzZXQsIHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNcIiwgXCJ0cnVlXCIpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzcVwiLCBxdWVyeSk7XG4gIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7fSwgXCJcIiwgdXJsKTtcbiAgc2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tLCB7IGlkOiBudWxsLCBxdWVyeSB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLE1BQWEsMkJBQTJCLGdCQUF3QjtDQUM5RCxNQUFNLFFBQVE7RUFBQztFQUFRO0VBQU87RUFBTTtFQUFLO0VBQUs7RUFBSztFQUFNO0VBQU87RUFBUTtFQUFRO0FBZWhGLFFBYnVCLFlBQ3BCLGFBQWEsQ0FDYixNQUFNLElBQUksQ0FDVixLQUFLLFNBQVM7QUFDYixNQUFJLE1BQU0sU0FBUyxLQUFLLENBQ3RCLFFBQU8sS0FBSyxhQUFhO0FBRTNCLFNBQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQyxhQUFhLEdBQUcsS0FBSyxNQUFNLEVBQUU7R0FDbkQsQ0FFa0MsS0FBSyxJQUFJLENBR3pCLFFBQVEsV0FBVyxTQUFTOzs7OztBQ1ZwRCxNQUFNLGtCQUFrQixPQUFlLGVBQXVCO0FBRTVELFFBRGUsS0FBSyxNQUFNLFFBQVEsV0FBVyxHQUM3Qjs7QUFHbEIsTUFBTSxpQkFBaUIsVUFB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
@@ -0,0 +1,120 @@
1
+ const require_chunk = require('./chunk-CUT6urMc.cjs');
2
+ const require_models = require('./models-ZpQcRZQK.cjs');
3
+ const require_amplitudeContext = require('./amplitudeContext-sTEsPaVG.cjs');
4
+ let jotai = require("jotai");
5
+ jotai = require_chunk.__toESM(jotai);
6
+ let __spiffy_ai_commerce_api_client_dist_models_UserEventCategory = require("@spiffy-ai/commerce-api-client/dist/models/UserEventCategory");
7
+ __spiffy_ai_commerce_api_client_dist_models_UserEventCategory = require_chunk.__toESM(__spiffy_ai_commerce_api_client_dist_models_UserEventCategory);
8
+
9
+ //#region src/atoms/chat/chatState.ts
10
+ const userHasRepliedAtom = (0, jotai.atom)(false);
11
+ const replyEventCategoryAtom = (0, jotai.atom)(__spiffy_ai_commerce_api_client_dist_models_UserEventCategory.UserEventCategory.AppLoaded);
12
+ const userQueryAtom = (0, jotai.atom)();
13
+ const suggestionAtom = (0, jotai.atom)(void 0);
14
+ const askQuestionBtnClickedAtom = (0, jotai.atom)(false);
15
+ const messagesAtom = (0, jotai.atom)([]);
16
+ const userEventsAtom = (0, jotai.atom)([]);
17
+ const suggestionsAtom = (0, jotai.atom)([]);
18
+ const suggestionsLoadingAtom = (0, jotai.atom)(false);
19
+ const responseStreamingAtom = (0, jotai.atom)(false);
20
+ const chatIsOpenAtom = (0, jotai.atom)(false);
21
+ const requestFailureAtom = (0, jotai.atom)(false);
22
+ const formSubmitAtom = (0, jotai.atom)();
23
+ const chatOnToggleAtom = (0, jotai.atom)(null, (get, set, triggerLocation, track) => {
24
+ const isOpen = get(chatIsOpenAtom);
25
+ set(chatIsOpenAtom, !isOpen);
26
+ if (!isOpen) {
27
+ window.dispatchEvent(new CustomEvent(require_models.SpiffyEventName.WidgetOpen));
28
+ track?.(require_amplitudeContext.SpiffyMetricsEventName.ChatComponentExpanded, { message_metadata: { trigger_location: triggerLocation } });
29
+ } else {
30
+ window.dispatchEvent(new CustomEvent(require_models.SpiffyEventName.WidgetClose));
31
+ track?.(require_amplitudeContext.SpiffyMetricsEventName.ChatComponentCollapsed);
32
+ }
33
+ });
34
+
35
+ //#endregion
36
+ Object.defineProperty(exports, 'askQuestionBtnClickedAtom', {
37
+ enumerable: true,
38
+ get: function () {
39
+ return askQuestionBtnClickedAtom;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, 'chatIsOpenAtom', {
43
+ enumerable: true,
44
+ get: function () {
45
+ return chatIsOpenAtom;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, 'chatOnToggleAtom', {
49
+ enumerable: true,
50
+ get: function () {
51
+ return chatOnToggleAtom;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, 'formSubmitAtom', {
55
+ enumerable: true,
56
+ get: function () {
57
+ return formSubmitAtom;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, 'messagesAtom', {
61
+ enumerable: true,
62
+ get: function () {
63
+ return messagesAtom;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, 'replyEventCategoryAtom', {
67
+ enumerable: true,
68
+ get: function () {
69
+ return replyEventCategoryAtom;
70
+ }
71
+ });
72
+ Object.defineProperty(exports, 'requestFailureAtom', {
73
+ enumerable: true,
74
+ get: function () {
75
+ return requestFailureAtom;
76
+ }
77
+ });
78
+ Object.defineProperty(exports, 'responseStreamingAtom', {
79
+ enumerable: true,
80
+ get: function () {
81
+ return responseStreamingAtom;
82
+ }
83
+ });
84
+ Object.defineProperty(exports, 'suggestionAtom', {
85
+ enumerable: true,
86
+ get: function () {
87
+ return suggestionAtom;
88
+ }
89
+ });
90
+ Object.defineProperty(exports, 'suggestionsAtom', {
91
+ enumerable: true,
92
+ get: function () {
93
+ return suggestionsAtom;
94
+ }
95
+ });
96
+ Object.defineProperty(exports, 'suggestionsLoadingAtom', {
97
+ enumerable: true,
98
+ get: function () {
99
+ return suggestionsLoadingAtom;
100
+ }
101
+ });
102
+ Object.defineProperty(exports, 'userEventsAtom', {
103
+ enumerable: true,
104
+ get: function () {
105
+ return userEventsAtom;
106
+ }
107
+ });
108
+ Object.defineProperty(exports, 'userHasRepliedAtom', {
109
+ enumerable: true,
110
+ get: function () {
111
+ return userHasRepliedAtom;
112
+ }
113
+ });
114
+ Object.defineProperty(exports, 'userQueryAtom', {
115
+ enumerable: true,
116
+ get: function () {
117
+ return userQueryAtom;
118
+ }
119
+ });
120
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFN0YXRlLUJpc1BKZDVnLmNqcyIsIm5hbWVzIjpbIlVzZXJFdmVudENhdGVnb3J5IiwiU3BpZmZ5RXZlbnROYW1lIiwiU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9hdG9tcy9jaGF0L2NoYXRTdGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXNlckV2ZW50Q2F0ZWdvcnlcIjtcbmltcG9ydCB7IGF0b20gfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfSBmcm9tIFwic3JjL2NvbnRleHRzL2FtcGxpdHVkZUNvbnRleHQvYW1wbGl0dWRlQ29udGV4dFwiO1xuaW1wb3J0IHtcbiAgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMsXG4gIE1lc3NhZ2UsXG4gIFN1Z2dlc3Rpb24sXG4gIFVzZXJFdmVudCxcbn0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHNcIjtcbmltcG9ydCB7IENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25cIjtcbmltcG9ydCB7IFNwaWZmeUV2ZW50TmFtZSB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2V2ZW50c1wiO1xuXG5leHBvcnQgY29uc3QgdXNlckhhc1JlcGxpZWRBdG9tID0gYXRvbTxib29sZWFuPihmYWxzZSk7XG5leHBvcnQgY29uc3QgcmVwbHlFdmVudENhdGVnb3J5QXRvbSA9IGF0b208VXNlckV2ZW50Q2F0ZWdvcnk+KFxuICBVc2VyRXZlbnRDYXRlZ29yeS5BcHBMb2FkZWRcbik7XG5leHBvcnQgY29uc3QgdXNlclF1ZXJ5QXRvbSA9IGF0b208c3RyaW5nPigpO1xuZXhwb3J0IGNvbnN0IHN1Z2dlc3Rpb25BdG9tID0gYXRvbTxTdWdnZXN0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuZXhwb3J0IGNvbnN0IGFza1F1ZXN0aW9uQnRuQ2xpY2tlZEF0b20gPSBhdG9tPGJvb2xlYW4+KGZhbHNlKTtcbmV4cG9ydCBjb25zdCBtZXNzYWdlc0F0b20gPSBhdG9tPE1lc3NhZ2VbXVtdPihbXSk7XG5leHBvcnQgY29uc3QgdXNlckV2ZW50c0F0b20gPSBhdG9tPFVzZXJFdmVudFtdPihbXSk7XG5leHBvcnQgY29uc3Qgc3VnZ2VzdGlvbnNBdG9tID0gYXRvbTxTdWdnZXN0aW9uW10+KFtdKTtcbmV4cG9ydCBjb25zdCBzdWdnZXN0aW9uc0xvYWRpbmdBdG9tID0gYXRvbTxib29sZWFuPihmYWxzZSk7XG5leHBvcnQgY29uc3QgcmVzcG9uc2VTdHJlYW1pbmdBdG9tID0gYXRvbTxib29sZWFuPihmYWxzZSk7XG5leHBvcnQgY29uc3QgY2hhdElzT3BlbkF0b20gPSBhdG9tPGJvb2xlYW4+KGZhbHNlKTtcbmV4cG9ydCBjb25zdCByZXF1ZXN0RmFpbHVyZUF0b20gPSBhdG9tPGJvb2xlYW4+KGZhbHNlKTtcbmV4cG9ydCBjb25zdCBmb3JtU3VibWl0QXRvbSA9IGF0b208Rm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXM+KCk7XG5leHBvcnQgY29uc3QgY2hhdE9uVG9nZ2xlQXRvbSA9IGF0b20oXG4gIG51bGwsXG4gIChcbiAgICBnZXQsXG4gICAgc2V0LFxuICAgIHRyaWdnZXJMb2NhdGlvbj86IENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uLFxuICAgIHRyYWNrPzogKFxuICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICAgICAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgKSA9PiB2b2lkXG4gICkgPT4ge1xuICAgIGNvbnN0IGlzT3BlbiA9IGdldChjaGF0SXNPcGVuQXRvbSk7XG4gICAgc2V0KGNoYXRJc09wZW5BdG9tLCAhaXNPcGVuKTtcblxuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoU3BpZmZ5RXZlbnROYW1lLldpZGdldE9wZW4pKTtcbiAgICAgIHRyYWNrPy4oU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50RXhwYW5kZWQsIHtcbiAgICAgICAgbWVzc2FnZV9tZXRhZGF0YToge1xuICAgICAgICAgIHRyaWdnZXJfbG9jYXRpb246IHRyaWdnZXJMb2NhdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoU3BpZmZ5RXZlbnROYW1lLldpZGdldENsb3NlKSk7XG4gICAgICB0cmFjaz8uKFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQ2hhdENvbXBvbmVudENvbGxhcHNlZCk7XG4gICAgfVxuICB9XG4pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQSxNQUFhLHFDQUFtQyxNQUFNO0FBQ3RELE1BQWEseUNBQ1hBLGdGQUFrQixVQUNuQjtBQUNELE1BQWEsaUNBQThCO0FBQzNDLE1BQWEsaUNBQThDLE9BQVU7QUFDckUsTUFBYSw0Q0FBMEMsTUFBTTtBQUM3RCxNQUFhLCtCQUFpQyxFQUFFLENBQUM7QUFDakQsTUFBYSxpQ0FBbUMsRUFBRSxDQUFDO0FBQ25ELE1BQWEsa0NBQXFDLEVBQUUsQ0FBQztBQUNyRCxNQUFhLHlDQUF1QyxNQUFNO0FBQzFELE1BQWEsd0NBQXNDLE1BQU07QUFDekQsTUFBYSxpQ0FBK0IsTUFBTTtBQUNsRCxNQUFhLHFDQUFtQyxNQUFNO0FBQ3RELE1BQWEsa0NBQWdEO0FBQzdELE1BQWEsbUNBQ1gsT0FFRSxLQUNBLEtBQ0EsaUJBQ0EsVUFJRztDQUNILE1BQU0sU0FBUyxJQUFJLGVBQWU7QUFDbEMsS0FBSSxnQkFBZ0IsQ0FBQyxPQUFPO0FBRTVCLEtBQUksQ0FBQyxRQUFRO0FBQ1gsU0FBTyxjQUFjLElBQUksWUFBWUMsK0JBQWdCLFdBQVcsQ0FBQztBQUNqRSxVQUFRQyxnREFBdUIsdUJBQXVCLEVBQ3BELGtCQUFrQixFQUNoQixrQkFBa0IsaUJBQ25CLEVBQ0YsQ0FBQztRQUNHO0FBQ0wsU0FBTyxjQUFjLElBQUksWUFBWUQsK0JBQWdCLFlBQVksQ0FBQztBQUNsRSxVQUFRQyxnREFBdUIsdUJBQXVCOztFQUczRCJ9