@envive-ai/react-hooks 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/application/models/featureGates.ts +18 -20
- package/src/application/models/variantInfo/variantInfo.ts +9 -3
- package/src/atoms/app/index.ts +3 -2
- package/src/atoms/app/variant.ts +27 -89
- package/src/contexts/amplitudeContext/amplitudeContext.tsx +12 -45
- package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +1 -1
- package/dist/AmplitudeOperations-CNyxbBY6.cjs +0 -0
- package/dist/AmplitudeOperations-Oa2efWtF.js +0 -1
- package/dist/NewOrgConfig-CbqBTHzG.js +0 -10
- package/dist/NewOrgConfig-sLsJcSn8.cjs +0 -15
- package/dist/SystemSettingsContext-BHi2YaQp.cjs +0 -20
- package/dist/SystemSettingsContext-BLRfTbCC.js +0 -13
- package/dist/TrackComponentVisibleEvent-CftWp8QR.js +0 -52
- package/dist/TrackComponentVisibleEvent-Dag8vFhb.cjs +0 -59
- package/dist/amplitudeContext-B73xamNe.d.cts +0 -52
- package/dist/amplitudeContext-BhhYPJSL.d.ts +0 -52
- package/dist/amplitudeContext-CwPtBPhg.js +0 -287
- package/dist/amplitudeContext-DTC6maR0.cjs +0 -309
- package/dist/api-Bc3_julZ.cjs +0 -239
- package/dist/api-D9gmGNAV.js +0 -166
- package/dist/app-CoQ1nC-j.js +0 -132
- package/dist/app-DN72spgQ.cjs +0 -178
- package/dist/application/models/graphql/index.cjs +0 -5
- package/dist/application/models/graphql/index.d.cts +0 -2
- package/dist/application/models/graphql/index.d.ts +0 -2
- package/dist/application/models/graphql/index.js +0 -4
- package/dist/application/models/guards/api/index.cjs +0 -16
- package/dist/application/models/guards/api/index.d.cts +0 -3
- package/dist/application/models/guards/api/index.d.ts +0 -3
- package/dist/application/models/guards/api/index.js +0 -5
- package/dist/application/models/guards/utils.cjs +0 -3
- package/dist/application/models/guards/utils.d.cts +0 -2
- package/dist/application/models/guards/utils.d.ts +0 -2
- package/dist/application/models/guards/utils.js +0 -3
- package/dist/application/models/index.cjs +0 -69
- package/dist/application/models/index.d.cts +0 -12
- package/dist/application/models/index.d.ts +0 -12
- package/dist/application/models/index.js +0 -12
- package/dist/application/models/utilityTypes/index.cjs +0 -1
- package/dist/application/models/utilityTypes/index.d.cts +0 -2
- package/dist/application/models/utilityTypes/index.d.ts +0 -2
- package/dist/application/models/utilityTypes/index.js +0 -3
- package/dist/application/models/variantInfo/index.cjs +0 -1
- package/dist/application/models/variantInfo/index.d.cts +0 -2
- package/dist/application/models/variantInfo/index.d.ts +0 -2
- package/dist/application/models/variantInfo/index.js +0 -3
- package/dist/application/utils/index.cjs +0 -48
- package/dist/application/utils/index.d.cts +0 -263
- package/dist/application/utils/index.d.ts +0 -263
- package/dist/application/utils/index.js +0 -22
- package/dist/atomStore-BuopbV9k.js +0 -32
- package/dist/atomStore-CZKe3itM.cjs +0 -58
- package/dist/atomStore-CdFkEC8s.cjs +0 -0
- package/dist/atomStore-DKlaDbMx.js +0 -1
- package/dist/atoms/app/index.cjs +0 -20
- package/dist/atoms/app/index.d.cts +0 -39
- package/dist/atoms/app/index.d.ts +0 -39
- package/dist/atoms/app/index.js +0 -16
- package/dist/atoms/atomStore/index.cjs +0 -7
- package/dist/atoms/atomStore/index.d.cts +0 -24
- package/dist/atoms/atomStore/index.d.ts +0 -24
- package/dist/atoms/atomStore/index.js +0 -4
- package/dist/atoms/chat/index.cjs +0 -52
- package/dist/atoms/chat/index.d.cts +0 -163
- package/dist/atoms/chat/index.d.ts +0 -163
- package/dist/atoms/chat/index.js +0 -23
- package/dist/atoms/globalSearch/index.cjs +0 -6
- package/dist/atoms/globalSearch/index.d.cts +0 -24
- package/dist/atoms/globalSearch/index.d.ts +0 -24
- package/dist/atoms/globalSearch/index.js +0 -3
- package/dist/atoms/org/index.cjs +0 -19
- package/dist/atoms/org/index.d.cts +0 -59
- package/dist/atoms/org/index.d.ts +0 -59
- package/dist/atoms/org/index.js +0 -6
- package/dist/atoms/search/index.cjs +0 -60
- package/dist/atoms/search/index.d.cts +0 -14
- package/dist/atoms/search/index.d.ts +0 -14
- package/dist/atoms/search/index.js +0 -30
- package/dist/atoms/search/types.cjs +0 -5
- package/dist/atoms/search/types.d.cts +0 -2
- package/dist/atoms/search/types.d.ts +0 -2
- package/dist/atoms/search/types.js +0 -3
- package/dist/atoms/search/utils.cjs +0 -3
- package/dist/atoms/search/utils.d.cts +0 -5
- package/dist/atoms/search/utils.d.ts +0 -5
- package/dist/atoms/search/utils.js +0 -3
- package/dist/cdnContext-ShKWLgKA.cjs +0 -53
- package/dist/cdnContext-pfrZ6lfu.js +0 -38
- package/dist/chat-BubCW1as.cjs +0 -152
- package/dist/chat-CV6MXeID.js +0 -26
- package/dist/chat-DQq8RR5E.js +0 -258
- package/dist/chat-KkJYXdfZ.cjs +0 -394
- package/dist/chatElementDisplayLocation-BwiXrkN7.d.ts +0 -25
- package/dist/chatElementDisplayLocation-DWmfNX_u.d.cts +0 -25
- package/dist/chatSearch-OgBQtu3u.cjs +0 -418
- package/dist/chatSearch-xO4HYEBI.js +0 -295
- package/dist/chatState-CTwPHEJG.cjs +0 -120
- package/dist/chatState-CkMgQSse.js +0 -34
- package/dist/chunk-CUT6urMc.cjs +0 -30
- package/dist/commerce-api-BVy49Qk8.js +0 -311
- package/dist/commerce-api-Pclc9ZBQ.cjs +0 -318
- package/dist/components-B4T3Uzth.js +0 -11
- package/dist/components-Cw9WjA6g.cjs +0 -29
- package/dist/config/locators/components/chat/index.cjs +0 -23
- package/dist/config/locators/components/chat/index.d.cts +0 -2
- package/dist/config/locators/components/chat/index.d.ts +0 -2
- package/dist/config/locators/components/chat/index.js +0 -3
- package/dist/config/locators/components/chat/variants/index.cjs +0 -29
- package/dist/config/locators/components/chat/variants/index.d.cts +0 -16
- package/dist/config/locators/components/chat/variants/index.d.ts +0 -16
- package/dist/config/locators/components/chat/variants/index.js +0 -17
- package/dist/config/locators/components/index.cjs +0 -5
- package/dist/config/locators/components/index.d.cts +0 -2
- package/dist/config/locators/components/index.d.ts +0 -2
- package/dist/config/locators/components/index.js +0 -3
- package/dist/config/locators/components/search/index.cjs +0 -13
- package/dist/config/locators/components/search/index.d.cts +0 -8
- package/dist/config/locators/components/search/index.d.ts +0 -8
- package/dist/config/locators/components/search/index.js +0 -9
- package/dist/config/locators/index.cjs +0 -67
- package/dist/config/locators/index.d.cts +0 -25
- package/dist/config/locators/index.d.ts +0 -25
- package/dist/config/locators/index.js +0 -26
- package/dist/contexts/amplitudeContext/index.cjs +0 -22
- package/dist/contexts/amplitudeContext/index.d.cts +0 -2
- package/dist/contexts/amplitudeContext/index.d.ts +0 -2
- package/dist/contexts/amplitudeContext/index.js +0 -20
- package/dist/contexts/cdnContext/index.cjs +0 -7
- package/dist/contexts/cdnContext/index.d.cts +0 -15
- package/dist/contexts/cdnContext/index.d.ts +0 -15
- package/dist/contexts/cdnContext/index.js +0 -6
- package/dist/contexts/chatContext/index.cjs +0 -331
- package/dist/contexts/chatContext/index.d.cts +0 -15
- package/dist/contexts/chatContext/index.d.ts +0 -15
- package/dist/contexts/chatContext/index.js +0 -324
- package/dist/contexts/enviveConfigContext/index.cjs +0 -7
- package/dist/contexts/enviveConfigContext/index.d.cts +0 -30
- package/dist/contexts/enviveConfigContext/index.d.ts +0 -30
- package/dist/contexts/enviveConfigContext/index.js +0 -6
- package/dist/contexts/enviveCssContext/index.cjs +0 -66
- package/dist/contexts/enviveCssContext/index.d.cts +0 -10
- package/dist/contexts/enviveCssContext/index.d.ts +0 -10
- package/dist/contexts/enviveCssContext/index.js +0 -63
- package/dist/contexts/featureFlagContext/index.cjs +0 -107
- package/dist/contexts/featureFlagContext/index.d.cts +0 -20
- package/dist/contexts/featureFlagContext/index.d.ts +0 -20
- package/dist/contexts/featureFlagContext/index.js +0 -103
- package/dist/contexts/featureFlagServiceContext/index.cjs +0 -6
- package/dist/contexts/featureFlagServiceContext/index.d.cts +0 -5
- package/dist/contexts/featureFlagServiceContext/index.d.ts +0 -5
- package/dist/contexts/featureFlagServiceContext/index.js +0 -5
- package/dist/contexts/graphqlContext/index.cjs +0 -16
- package/dist/contexts/graphqlContext/index.d.cts +0 -14
- package/dist/contexts/graphqlContext/index.d.ts +0 -14
- package/dist/contexts/graphqlContext/index.js +0 -15
- package/dist/contexts/localStorageContext/index.cjs +0 -6
- package/dist/contexts/localStorageContext/index.d.cts +0 -30
- package/dist/contexts/localStorageContext/index.d.ts +0 -30
- package/dist/contexts/localStorageContext/index.js +0 -4
- package/dist/contexts/newOrgConfigContext/index.cjs +0 -20
- package/dist/contexts/newOrgConfigContext/index.d.cts +0 -15
- package/dist/contexts/newOrgConfigContext/index.d.ts +0 -15
- package/dist/contexts/newOrgConfigContext/index.js +0 -19
- package/dist/contexts/searchContext/index.cjs +0 -24
- package/dist/contexts/searchContext/index.d.cts +0 -16
- package/dist/contexts/searchContext/index.d.ts +0 -16
- package/dist/contexts/searchContext/index.js +0 -23
- package/dist/contexts/sessionStorageContext/index.cjs +0 -5
- package/dist/contexts/sessionStorageContext/index.d.cts +0 -15
- package/dist/contexts/sessionStorageContext/index.d.ts +0 -15
- package/dist/contexts/sessionStorageContext/index.js +0 -4
- package/dist/contexts/shopifyUrlContext/index.cjs +0 -5
- package/dist/contexts/shopifyUrlContext/index.d.cts +0 -20
- package/dist/contexts/shopifyUrlContext/index.d.ts +0 -20
- package/dist/contexts/shopifyUrlContext/index.js +0 -4
- package/dist/contexts/systemSettingsContext/index.cjs +0 -8
- package/dist/contexts/systemSettingsContext/index.d.cts +0 -37
- package/dist/contexts/systemSettingsContext/index.d.ts +0 -37
- package/dist/contexts/systemSettingsContext/index.js +0 -6
- package/dist/contexts/types.cjs +0 -7
- package/dist/contexts/types.d.cts +0 -4
- package/dist/contexts/types.d.ts +0 -4
- package/dist/contexts/types.js +0 -3
- package/dist/contexts/userIdentityContext/index.cjs +0 -27
- package/dist/contexts/userIdentityContext/index.d.cts +0 -2
- package/dist/contexts/userIdentityContext/index.d.ts +0 -2
- package/dist/contexts/userIdentityContext/index.js +0 -26
- package/dist/domObserver-B19-69gW.js +0 -285
- package/dist/domObserver-CwieVNgj.cjs +0 -304
- package/dist/enviveConfig-BSfyz_pm.js +0 -62
- package/dist/enviveConfig-D8vcVPWD.cjs +0 -130
- package/dist/enviveConfigContext-C8cCcdKU.cjs +0 -60
- package/dist/enviveConfigContext-CJqpRSKu.js +0 -45
- package/dist/events/index.cjs +0 -4
- package/dist/events/index.d.cts +0 -46
- package/dist/events/index.d.ts +0 -46
- package/dist/events/index.js +0 -3
- package/dist/events-BHJJjPDN.js +0 -78
- package/dist/events-B_fJZf9E.cjs +0 -90
- package/dist/featureFlagServiceContext-CUBoBV2i.cjs +0 -56
- package/dist/featureFlagServiceContext-Cpw8omUr.d.ts +0 -23
- package/dist/featureFlagServiceContext-Cvn6fcdB.d.cts +0 -23
- package/dist/featureFlagServiceContext-Dg8okVk1.js +0 -42
- package/dist/featureGates-Blx10fwB.js +0 -27
- package/dist/featureGates-DcZNrUma.cjs +0 -33
- package/dist/frontendConfig-DnMZfvcA.d.cts +0 -857
- package/dist/frontendConfig-Dqxbqo8G.d.ts +0 -857
- package/dist/globalSearch-B8jHLScz.js +0 -14
- package/dist/globalSearch-JJI1Fijh.cjs +0 -39
- package/dist/graphql-B9HhDXYt.cjs +0 -53
- package/dist/graphql-W7GMIHUu.js +0 -36
- package/dist/graphqlConfig-BWqLgZ6v.cjs +0 -39
- package/dist/graphqlConfig-Dn-hO_SQ.js +0 -14
- package/dist/graphqlContext-8kw4aLRc.js +0 -96
- package/dist/graphqlContext-ChRuFVxO.d.cts +0 -28
- package/dist/graphqlContext-EhYZM1v_.d.ts +0 -28
- package/dist/graphqlContext-Fwc6Upvh.cjs +0 -111
- package/dist/hooks/AmplitudeOperations/index.cjs +0 -22
- package/dist/hooks/AmplitudeOperations/index.d.cts +0 -12
- package/dist/hooks/AmplitudeOperations/index.d.ts +0 -12
- package/dist/hooks/AmplitudeOperations/index.js +0 -22
- package/dist/hooks/AppDetails/index.cjs +0 -19
- package/dist/hooks/AppDetails/index.d.cts +0 -27
- package/dist/hooks/AppDetails/index.d.ts +0 -27
- package/dist/hooks/AppDetails/index.js +0 -19
- package/dist/hooks/BlockBackButton/index.cjs +0 -29
- package/dist/hooks/BlockBackButton/index.d.cts +0 -5
- package/dist/hooks/BlockBackButton/index.d.ts +0 -5
- package/dist/hooks/BlockBackButton/index.js +0 -27
- package/dist/hooks/CdnOperations/index.cjs +0 -24
- package/dist/hooks/CdnOperations/index.d.cts +0 -7
- package/dist/hooks/CdnOperations/index.d.ts +0 -7
- package/dist/hooks/CdnOperations/index.js +0 -22
- package/dist/hooks/ChatToggle/index.cjs +0 -64
- package/dist/hooks/ChatToggle/index.d.cts +0 -12
- package/dist/hooks/ChatToggle/index.d.ts +0 -12
- package/dist/hooks/ChatToggle/index.js +0 -62
- package/dist/hooks/ChatToggleAnalytics/index.cjs +0 -38
- package/dist/hooks/ChatToggleAnalytics/index.d.cts +0 -9
- package/dist/hooks/ChatToggleAnalytics/index.d.ts +0 -9
- package/dist/hooks/ChatToggleAnalytics/index.js +0 -36
- package/dist/hooks/CustomerSupportHandoff/index.cjs +0 -36
- package/dist/hooks/CustomerSupportHandoff/index.d.cts +0 -16
- package/dist/hooks/CustomerSupportHandoff/index.d.ts +0 -16
- package/dist/hooks/CustomerSupportHandoff/index.js +0 -34
- package/dist/hooks/Debounce/index.cjs +0 -3
- package/dist/hooks/Debounce/index.d.cts +0 -5
- package/dist/hooks/Debounce/index.d.ts +0 -5
- package/dist/hooks/Debounce/index.js +0 -3
- package/dist/hooks/ElementObserver/index.cjs +0 -179
- package/dist/hooks/ElementObserver/index.d.cts +0 -29
- package/dist/hooks/ElementObserver/index.d.ts +0 -29
- package/dist/hooks/ElementObserver/index.js +0 -177
- package/dist/hooks/GrabAndScroll/index.cjs +0 -99
- package/dist/hooks/GrabAndScroll/index.d.cts +0 -14
- package/dist/hooks/GrabAndScroll/index.d.ts +0 -14
- package/dist/hooks/GrabAndScroll/index.js +0 -97
- package/dist/hooks/GraphQLConfig/index.cjs +0 -17
- package/dist/hooks/GraphQLConfig/index.d.cts +0 -28
- package/dist/hooks/GraphQLConfig/index.d.ts +0 -28
- package/dist/hooks/GraphQLConfig/index.js +0 -16
- package/dist/hooks/IdentifyUser/index.cjs +0 -60
- package/dist/hooks/IdentifyUser/index.d.cts +0 -10
- package/dist/hooks/IdentifyUser/index.d.ts +0 -10
- package/dist/hooks/IdentifyUser/index.js +0 -58
- package/dist/hooks/ImageResolver/index.cjs +0 -55
- package/dist/hooks/ImageResolver/index.d.cts +0 -7
- package/dist/hooks/ImageResolver/index.d.ts +0 -7
- package/dist/hooks/ImageResolver/index.js +0 -53
- package/dist/hooks/Intersection/index.cjs +0 -3
- package/dist/hooks/Intersection/index.d.cts +0 -7
- package/dist/hooks/Intersection/index.d.ts +0 -7
- package/dist/hooks/Intersection/index.js +0 -3
- package/dist/hooks/IsSmallScreen/index.cjs +0 -22
- package/dist/hooks/IsSmallScreen/index.d.cts +0 -5
- package/dist/hooks/IsSmallScreen/index.d.ts +0 -5
- package/dist/hooks/IsSmallScreen/index.js +0 -20
- package/dist/hooks/LocalStorageOperations/index.cjs +0 -79
- package/dist/hooks/LocalStorageOperations/index.d.cts +0 -17
- package/dist/hooks/LocalStorageOperations/index.d.ts +0 -17
- package/dist/hooks/LocalStorageOperations/index.js +0 -74
- package/dist/hooks/MessageFilter/index.cjs +0 -54
- package/dist/hooks/MessageFilter/index.d.cts +0 -30
- package/dist/hooks/MessageFilter/index.d.ts +0 -30
- package/dist/hooks/MessageFilter/index.js +0 -54
- package/dist/hooks/MessageScrollObserver/index.cjs +0 -36
- package/dist/hooks/MessageScrollObserver/index.d.cts +0 -5
- package/dist/hooks/MessageScrollObserver/index.d.ts +0 -5
- package/dist/hooks/MessageScrollObserver/index.js +0 -34
- package/dist/hooks/NewOrgConfig/index.cjs +0 -20
- package/dist/hooks/NewOrgConfig/index.d.cts +0 -20
- package/dist/hooks/NewOrgConfig/index.d.ts +0 -20
- package/dist/hooks/NewOrgConfig/index.js +0 -20
- package/dist/hooks/Search/index.cjs +0 -326
- package/dist/hooks/Search/index.d.cts +0 -61
- package/dist/hooks/Search/index.d.ts +0 -61
- package/dist/hooks/Search/index.js +0 -323
- package/dist/hooks/SearchOperations/index.cjs +0 -102
- package/dist/hooks/SearchOperations/index.d.cts +0 -22
- package/dist/hooks/SearchOperations/index.d.ts +0 -22
- package/dist/hooks/SearchOperations/index.js +0 -99
- package/dist/hooks/SessionStorageOperations/index.cjs +0 -30
- package/dist/hooks/SessionStorageOperations/index.d.cts +0 -8
- package/dist/hooks/SessionStorageOperations/index.d.ts +0 -8
- package/dist/hooks/SessionStorageOperations/index.js +0 -28
- package/dist/hooks/ShopifyUrlOperations/index.cjs +0 -53
- package/dist/hooks/ShopifyUrlOperations/index.d.cts +0 -23
- package/dist/hooks/ShopifyUrlOperations/index.d.ts +0 -23
- package/dist/hooks/ShopifyUrlOperations/index.js +0 -49
- package/dist/hooks/SnapCalculator/index.cjs +0 -29
- package/dist/hooks/SnapCalculator/index.d.cts +0 -12
- package/dist/hooks/SnapCalculator/index.d.ts +0 -12
- package/dist/hooks/SnapCalculator/index.js +0 -27
- package/dist/hooks/SystemSettingsContext/index.cjs +0 -7
- package/dist/hooks/SystemSettingsContext/index.d.cts +0 -23
- package/dist/hooks/SystemSettingsContext/index.d.ts +0 -23
- package/dist/hooks/SystemSettingsContext/index.js +0 -7
- package/dist/hooks/TrackComponentVisibleEvent/index.cjs +0 -22
- package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +0 -18
- package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +0 -18
- package/dist/hooks/TrackComponentVisibleEvent/index.js +0 -22
- package/dist/hooks/UpdateAnalyticsProps/index.cjs +0 -62
- package/dist/hooks/UpdateAnalyticsProps/index.d.cts +0 -9
- package/dist/hooks/UpdateAnalyticsProps/index.d.ts +0 -9
- package/dist/hooks/UpdateAnalyticsProps/index.js +0 -59
- package/dist/hooks/utils.cjs +0 -8
- package/dist/hooks/utils.d.cts +0 -13
- package/dist/hooks/utils.d.ts +0 -13
- package/dist/hooks/utils.js +0 -3
- package/dist/index-B5qslMv7.d.cts +0 -186
- package/dist/index-BN-3ctk_.d.ts +0 -184
- package/dist/index-BPxqQmpF.d.ts +0 -1
- package/dist/index-Bmub8e38.d.cts +0 -98
- package/dist/index-BoYC9XLW.d.ts +0 -39
- package/dist/index-C12-NmS7.d.cts +0 -25
- package/dist/index-C4_vohah.d.ts +0 -186
- package/dist/index-C6KdON7d.d.ts +0 -25
- package/dist/index-CESxqFso.d.cts +0 -228
- package/dist/index-CK_J3QMY.d.ts +0 -676
- package/dist/index-CVa3DeXJ.d.cts +0 -9
- package/dist/index-C_MIfxF0.d.cts +0 -676
- package/dist/index-CiWEYzXl.d.cts +0 -184
- package/dist/index-DOii3C6b.d.ts +0 -9
- package/dist/index-Dr_c2DDq.d.ts +0 -98
- package/dist/index-DsiilEj-.d.ts +0 -228
- package/dist/index-RcVcRKH7.d.cts +0 -1
- package/dist/index-hdbCEjYy.d.cts +0 -39
- package/dist/interceptors/index.cjs +0 -4
- package/dist/interceptors/index.d.cts +0 -20
- package/dist/interceptors/index.d.ts +0 -20
- package/dist/interceptors/index.js +0 -4
- package/dist/interceptors/types.cjs +0 -1
- package/dist/interceptors/types.d.cts +0 -13
- package/dist/interceptors/types.d.ts +0 -13
- package/dist/interceptors/types.js +0 -3
- package/dist/localStorageContext-Dwgto93_.js +0 -95
- package/dist/localStorageContext-cnMYDllE.cjs +0 -115
- package/dist/logger-Cp7J4YJT.cjs +0 -26
- package/dist/logger-oAgZx2-m.js +0 -20
- package/dist/models-B1P-dSCW.cjs +0 -1537
- package/dist/models-CgvSM2fW.js +0 -1296
- package/dist/newOrgConfigAtom-DxILMn2I.cjs +0 -15
- package/dist/newOrgConfigAtom-sqve6LZU.js +0 -8
- package/dist/newOrgConfigContext-BzIpdpd6.js +0 -53
- package/dist/newOrgConfigContext-CiwteVzM.d.cts +0 -16
- package/dist/newOrgConfigContext-D9PpVqyW.d.ts +0 -16
- package/dist/newOrgConfigContext-wTQVvOaX.cjs +0 -68
- package/dist/nodeSelector-B3bPtEjX.d.cts +0 -31
- package/dist/nodeSelector-D5gjDWZ3.d.ts +0 -31
- package/dist/org-DlAesvQ_.cjs +0 -43
- package/dist/org-vi0njpBh.js +0 -12
- package/dist/orgAnalyticsConfig-BC4_sEmn.js +0 -14
- package/dist/orgAnalyticsConfig-DsGbyFhO.cjs +0 -39
- package/dist/search-0-pfy0cc.js +0 -126
- package/dist/search-BLShhjvR.d.ts +0 -20
- package/dist/search-BQn1pW2M.cjs +0 -205
- package/dist/search-filter-types-BBIjvwJV.d.cts +0 -102
- package/dist/search-filter-types-BlmWOnlA.d.ts +0 -102
- package/dist/search-y-ioX5Mz.d.cts +0 -20
- package/dist/searchContext-5qTU8CbH.js +0 -129
- package/dist/searchContext-DmXo2rpU.cjs +0 -145
- package/dist/searchServiceAdapter-DEv1tTn0.cjs +0 -34
- package/dist/searchServiceAdapter-WyCU55NV.js +0 -16
- package/dist/sessionStorageContext-B-UFXyJR.cjs +0 -66
- package/dist/sessionStorageContext-DnuKi3Gk.js +0 -52
- package/dist/shopifyUrlContext-Lm-Xcut2.cjs +0 -75
- package/dist/shopifyUrlContext-jLW63VLY.js +0 -61
- package/dist/spiffyWidgets-BuS00VaQ.d.cts +0 -20
- package/dist/spiffyWidgets-GILaqHv6.d.ts +0 -20
- package/dist/systemSettingsContext--LcXOVJz.js +0 -39
- package/dist/systemSettingsContext-CafaP6Zh.cjs +0 -60
- package/dist/test-types-EzMFw_U3.d.ts +0 -40
- package/dist/test-types-ThQiO_cc.d.cts +0 -40
- package/dist/types/index.cjs +0 -34
- package/dist/types/index.d.cts +0 -3
- package/dist/types/index.d.ts +0 -3
- package/dist/types/index.js +0 -31
- package/dist/types-6siNDmGv.d.ts +0 -10
- package/dist/types-BN2z0HcL.d.ts +0 -51
- package/dist/types-BwNrLPSZ.cjs +0 -106
- package/dist/types-CKMMb_gX.d.cts +0 -51
- package/dist/types-CS0Hrzja.js +0 -30
- package/dist/types-CxObxLKs.cjs +0 -48
- package/dist/types-D3uOF0Oy.js +0 -76
- package/dist/types-D4aa7_7x.d.cts +0 -10
- package/dist/types-DQoXDiso.js +0 -1
- package/dist/types-o3zWarRp.cjs +0 -0
- package/dist/types.cjs +0 -0
- package/dist/types.d.cts +0 -15
- package/dist/types.d.ts +0 -15
- package/dist/types.js +0 -1
- package/dist/unsupportedProductExceptions-CKiri_vO.cjs +0 -32
- package/dist/unsupportedProductExceptions-ClxlJ6cU.js +0 -20
- package/dist/urlsParser-BV5yF8sa.cjs +0 -78
- package/dist/urlsParser-DUgV_Qy9.js +0 -42
- package/dist/useAmplitudeOperations-aGOqxc4V.cjs +0 -41
- package/dist/useAmplitudeOperations-wQnkMaDm.js +0 -34
- package/dist/useAppDetails-9WXEc3mg.cjs +0 -38
- package/dist/useAppDetails-mNC2PBqH.js +0 -30
- package/dist/useDebounce-BaIp-A1W.cjs +0 -26
- package/dist/useDebounce-CxPj9WmE.js +0 -19
- package/dist/useGraphQLConfig-CTsRsKd2.js +0 -63
- package/dist/useGraphQLConfig-D7naV2RD.cjs +0 -76
- package/dist/useIntersection-B4J9UhaG.js +0 -21
- package/dist/useIntersection-DKWc5MY6.cjs +0 -28
- package/dist/useMessageInterceptor-C9p9No1n.cjs +0 -33
- package/dist/useMessageInterceptor-tntd2rvB.js +0 -25
- package/dist/userIdentityContext-BWzqWXPI.cjs +0 -125
- package/dist/userIdentityContext-BoNYqrTf.js +0 -109
- package/dist/userIdentityContext-D2oFVFzo.d.cts +0 -20
- package/dist/userIdentityContext-wYRpgkaJ.d.ts +0 -20
- package/dist/utilityTypes-DynzxjK3.js +0 -1
- package/dist/utilityTypes-xb8SjKSV.cjs +0 -0
- package/dist/utils-2SWrJ12w.cjs +0 -29
- package/dist/utils-ARmpTh1O.js +0 -27
- package/dist/utils-B1xLx9S8.d.ts +0 -15
- package/dist/utils-B3x_9JTY.d.cts +0 -15
- package/dist/utils-BSYichA7.d.cts +0 -22
- package/dist/utils-BgMcvG6l.js +0 -606
- package/dist/utils-C8vYQhLV.cjs +0 -130
- package/dist/utils-Cavu4XiM.cjs +0 -33
- package/dist/utils-CqBxIpEV.js +0 -23
- package/dist/utils-D_aOvxMg.cjs +0 -715
- package/dist/utils-FU_r-pTj.d.ts +0 -22
- package/dist/utils-_97oEqyL.js +0 -92
- package/dist/variantInfo-B7IwRpCg.cjs +0 -0
- package/dist/variantInfo-BtOYUGWa.js +0 -1
|
@@ -1,311 +0,0 @@
|
|
|
1
|
-
import { ProductExperiment, validateOrgConfigResults, validateResponse, validateSuggestion, validateUserEvent } from "./models-CgvSM2fW.js";
|
|
2
|
-
import { logger_default } from "./logger-oAgZx2-m.js";
|
|
3
|
-
import { baseUrlAtom, contextSourceAtom, envAtom, orgShortNameAtom, reactAppNameAtom } from "./enviveConfig-BSfyz_pm.js";
|
|
4
|
-
import { getAtomStore } from "./atomStore-BuopbV9k.js";
|
|
5
|
-
import { chatIdAtom, userIdAtom } from "./app-CoQ1nC-j.js";
|
|
6
|
-
import { coreSupportedEventRequestToApiRequest, messageFromFormSubmittedEvent, messageFromQueryEvent, messageFromResponse, messageFromSuggestionEvent, messageRequestToCommerceMessageRequest } from "./utils-BgMcvG6l.js";
|
|
7
|
-
import { featureFlagServiceAtom, orgIdAtom } from "./graphqlConfig-Dn-hO_SQ.js";
|
|
8
|
-
import { SessionRestartRequired, UnsupportedProductException } from "./unsupportedProductExceptions-ClxlJ6cU.js";
|
|
9
|
-
import { Configuration, ContextEnvEnum, ContextSourceEnum, CustomerServiceApi, DefaultApi, FormType, InferenceApi, ResponseCategory, ResponseError, UserEventCategory, V1OrgConfigGetSourceEnum } from "@spiffy-ai/commerce-api-client";
|
|
10
|
-
|
|
11
|
-
//#region src/application/commerce-api.ts
|
|
12
|
-
async function errorResponseBody(error) {
|
|
13
|
-
try {
|
|
14
|
-
return await error.response.json();
|
|
15
|
-
} catch {
|
|
16
|
-
return {};
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
async function throwSessionRestartRequiredIf(errorMsg, error) {
|
|
20
|
-
if (!(error instanceof ResponseError)) {
|
|
21
|
-
logger_default.logInfo(errorMsg, error);
|
|
22
|
-
throw error;
|
|
23
|
-
}
|
|
24
|
-
const errorResponse = await errorResponseBody(error);
|
|
25
|
-
if (errorResponse?.message?.toLowerCase() === "unsupported product" || errorResponse?.app_code?.toUpperCase() === "PRODUCT_NOT_FOUND") throw new UnsupportedProductException();
|
|
26
|
-
else if (errorResponse?.app_code?.toUpperCase() === "RESTART_SESSION" || errorResponse?.sub_code?.toUpperCase() === "NOT_FOUND") {
|
|
27
|
-
logger_default.logInfo("Session does not exist. Re-start session", error, error.response, errorResponse);
|
|
28
|
-
throw new SessionRestartRequired();
|
|
29
|
-
}
|
|
30
|
-
logger_default.logInfo(errorMsg, error);
|
|
31
|
-
throw error;
|
|
32
|
-
}
|
|
33
|
-
var CommerceApiClient = class CommerceApiClient {
|
|
34
|
-
static {
|
|
35
|
-
this.getInstance = () => {
|
|
36
|
-
if (!CommerceApiClient.instance) CommerceApiClient.instance = new CommerceApiClient();
|
|
37
|
-
return CommerceApiClient.instance;
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
constructor(basePath) {
|
|
41
|
-
this.suggestionsAbortController = new AbortController();
|
|
42
|
-
this.responsesAbortController = new AbortController();
|
|
43
|
-
const baseUrl = getAtomStore().get(baseUrlAtom);
|
|
44
|
-
const config = new Configuration({
|
|
45
|
-
basePath: basePath || baseUrl,
|
|
46
|
-
headers: {
|
|
47
|
-
"Content-Type": "application/json",
|
|
48
|
-
Accept: "application/json"
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
this.defaultApi = new DefaultApi(config);
|
|
52
|
-
this.inferenceApi = new InferenceApi(config);
|
|
53
|
-
this.customerServiceApi = new CustomerServiceApi(config);
|
|
54
|
-
}
|
|
55
|
-
static {
|
|
56
|
-
this.resolveUrl = async (url) => {
|
|
57
|
-
const atomStore = getAtomStore();
|
|
58
|
-
const orgShortName = atomStore.get(orgShortNameAtom);
|
|
59
|
-
const orgId = atomStore.get(orgIdAtom);
|
|
60
|
-
const userId = atomStore.get(userIdAtom);
|
|
61
|
-
const chatId = atomStore.get(chatIdAtom);
|
|
62
|
-
const source = atomStore.get(contextSourceAtom);
|
|
63
|
-
const env = atomStore.get(envAtom);
|
|
64
|
-
const featureFlagService = atomStore.get(featureFlagServiceAtom);
|
|
65
|
-
const context = {
|
|
66
|
-
user_id: userId ?? "",
|
|
67
|
-
org_id: orgId ?? "",
|
|
68
|
-
org_short_name: orgShortName ?? "",
|
|
69
|
-
chat_id: chatId ?? "",
|
|
70
|
-
source: source ?? ContextSourceEnum.App,
|
|
71
|
-
env: env ?? ContextEnvEnum.Dev
|
|
72
|
-
};
|
|
73
|
-
const featureGates = featureFlagService?.featureFlagService?.getFeatureFlags() || {};
|
|
74
|
-
const urlResolvingRequest = {
|
|
75
|
-
url,
|
|
76
|
-
context,
|
|
77
|
-
feature_gates: featureGates
|
|
78
|
-
};
|
|
79
|
-
return await (await CommerceApiClient.getInstance().inferenceApi.v1UrlResolvingPostRaw({ UrlResolvingRequest: urlResolvingRequest })).raw.json();
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
static {
|
|
83
|
-
this.reportSession = async (reportRequest) => {
|
|
84
|
-
await CommerceApiClient.getInstance().defaultApi.v1ChatsReportSessionIdPost({ ReportSessionRequest: reportRequest });
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
static {
|
|
88
|
-
this.getNextResponses = async (payload) => {
|
|
89
|
-
try {
|
|
90
|
-
return (await CommerceApiClient.getInstance().inferenceApi.v1NextResponsesPost({ NextMessageRequest: messageRequestToCommerceMessageRequest(payload) })).map((resp) => validateResponse(resp)).map((resp) => messageFromResponse(resp)).filter((m) => m != null);
|
|
91
|
-
} catch (err) {
|
|
92
|
-
logger_default.logInfo("Failed to get next responses", err, {
|
|
93
|
-
payloadContext: payload?.context,
|
|
94
|
-
userEvents: payload?.userEvents
|
|
95
|
-
});
|
|
96
|
-
await throwSessionRestartRequiredIf("Failed to get next responses", err);
|
|
97
|
-
return [];
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
static {
|
|
102
|
-
this.getNextResponseStreaming = (payload) => {
|
|
103
|
-
async function* generate(inferenceApi, abortController) {
|
|
104
|
-
try {
|
|
105
|
-
const response = await inferenceApi.v1NextResponsesPostRaw({ NextMessageRequest: messageRequestToCommerceMessageRequest(payload) }, { signal: abortController.signal });
|
|
106
|
-
if (!response.raw.body) {
|
|
107
|
-
logger_default.logError("[spiffy-ai] No body in the streamed response", void 0, { response: response.raw });
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
const reader = response.raw.body.getReader();
|
|
111
|
-
const decoder = new TextDecoder("utf-8");
|
|
112
|
-
let partial = "";
|
|
113
|
-
const safeParse = (line) => {
|
|
114
|
-
try {
|
|
115
|
-
return JSON.parse(line);
|
|
116
|
-
} catch (err) {
|
|
117
|
-
logger_default.logError("[spiffy-ai] Error parsing streamed line", err, {
|
|
118
|
-
line,
|
|
119
|
-
partial
|
|
120
|
-
});
|
|
121
|
-
partial = line;
|
|
122
|
-
return partial;
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
const processChunk = (chunk) => {
|
|
126
|
-
return `${partial}${chunk}`.split("\n").map((line) => line.replace(/^data: /, "").trim()).filter((line) => line !== "" && line !== "[DONE]").map(safeParse).filter((v) => v);
|
|
127
|
-
};
|
|
128
|
-
while (true) {
|
|
129
|
-
const { done, value } = await reader.read();
|
|
130
|
-
if (done) break;
|
|
131
|
-
const chunk = decoder.decode(value);
|
|
132
|
-
const parsedLines = processChunk(chunk);
|
|
133
|
-
for (const parsedLine of parsedLines) {
|
|
134
|
-
const validatedResponse = validateResponse(parsedLine);
|
|
135
|
-
if (validatedResponse) yield validatedResponse;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
} catch (error) {
|
|
139
|
-
logger_default.logError("[spiffy-ai] Failed to get next streaming responses", error, {
|
|
140
|
-
payloadContext: payload?.context,
|
|
141
|
-
userEvents: payload?.userEvents
|
|
142
|
-
});
|
|
143
|
-
await throwSessionRestartRequiredIf("Failed to get next streaming responses", error);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
CommerceApiClient.getInstance().responsesAbortController.abort();
|
|
147
|
-
CommerceApiClient.getInstance().responsesAbortController = new AbortController();
|
|
148
|
-
return generate(CommerceApiClient.getInstance().inferenceApi, CommerceApiClient.getInstance().responsesAbortController);
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
static {
|
|
152
|
-
this.getNextSuggestions = async (payload) => {
|
|
153
|
-
try {
|
|
154
|
-
CommerceApiClient.getInstance().suggestionsAbortController.abort();
|
|
155
|
-
CommerceApiClient.getInstance().suggestionsAbortController = new AbortController();
|
|
156
|
-
return (await CommerceApiClient.getInstance().inferenceApi.v1NextSuggestionsPost({ NextMessageRequest: messageRequestToCommerceMessageRequest(payload) }, { signal: CommerceApiClient.getInstance().suggestionsAbortController.signal })).map((resp) => validateSuggestion(resp)).filter((suggestion) => suggestion != null);
|
|
157
|
-
} catch (error) {
|
|
158
|
-
logger_default.logInfo("Failed to get suggestions", error, {
|
|
159
|
-
payloadContext: payload?.context,
|
|
160
|
-
userEvents: payload?.userEvents
|
|
161
|
-
});
|
|
162
|
-
await throwSessionRestartRequiredIf("Failed to get suggestions", error);
|
|
163
|
-
return [];
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
static {
|
|
168
|
-
this.getResponses = async (orgId, chatId, userId) => {
|
|
169
|
-
let data = {
|
|
170
|
-
responses: [],
|
|
171
|
-
suggestions: [],
|
|
172
|
-
user_events: []
|
|
173
|
-
};
|
|
174
|
-
const request = {
|
|
175
|
-
org_id: orgId,
|
|
176
|
-
chat_id: chatId,
|
|
177
|
-
user_id: userId
|
|
178
|
-
};
|
|
179
|
-
try {
|
|
180
|
-
data = await CommerceApiClient.getInstance().defaultApi.v1GetSessionMessages(request);
|
|
181
|
-
} catch (error) {
|
|
182
|
-
await throwSessionRestartRequiredIf("Failed to get chat responses", error);
|
|
183
|
-
}
|
|
184
|
-
const responses = data?.responses?.map((turn) => turn.map((response) => validateResponse(response)).filter((response) => response != null));
|
|
185
|
-
const suggestions = data?.suggestions.map((suggestion) => validateSuggestion(suggestion)).filter((suggestion) => suggestion != null);
|
|
186
|
-
const userEvents = data?.user_events.map((event) => validateUserEvent(event)).filter((event) => event != null);
|
|
187
|
-
const formSubmittedUserEventsFormIds = userEvents.filter((event) => event.category === UserEventCategory.FormSubmitted).map((event) => event.attributes.formResponseId);
|
|
188
|
-
const assistantMessages = responses.map((turn) => turn.filter((response) => !(response.category === ResponseCategory.Form && formSubmittedUserEventsFormIds.includes(response.id))).map((response) => messageFromResponse(response)).filter((message) => message != null)).filter((turn) => turn.length > 0);
|
|
189
|
-
const userMessages = userEvents.map((event) => {
|
|
190
|
-
if ([UserEventCategory.QueryTyped, UserEventCategory.Search].includes(event.category)) return [messageFromQueryEvent(event)];
|
|
191
|
-
if (event.category === UserEventCategory.SuggestionClicked) return [messageFromSuggestionEvent(event, suggestions)];
|
|
192
|
-
if (event.category === UserEventCategory.FormSubmitted) {
|
|
193
|
-
const formResponse = responses.flat().find((response) => response.id === event.attributes.formResponseId && event.attributes.formType !== FormType.Escalation);
|
|
194
|
-
if (formResponse && formResponse.category === ResponseCategory.Form) return [messageFromFormSubmittedEvent(event, formResponse.attributes)];
|
|
195
|
-
}
|
|
196
|
-
return [];
|
|
197
|
-
}).filter((message) => message.length > 0);
|
|
198
|
-
const sortedMessages = [...assistantMessages, ...userMessages].sort((a, b) => new Date(a[0].createdAt).getTime() - new Date(b[0].createdAt).getTime());
|
|
199
|
-
return {
|
|
200
|
-
responses,
|
|
201
|
-
userEvents,
|
|
202
|
-
suggestions,
|
|
203
|
-
messages: sortedMessages
|
|
204
|
-
};
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
static {
|
|
208
|
-
this.isSupportedEvent = async (payload) => {
|
|
209
|
-
try {
|
|
210
|
-
const httpResponseText = await (await CommerceApiClient.getInstance().inferenceApi.v1SupportedEventPostRaw({ SupportedEventRequest: coreSupportedEventRequestToApiRequest(payload) })).raw.text();
|
|
211
|
-
const httpResponseJson = JSON.parse(httpResponseText);
|
|
212
|
-
return {
|
|
213
|
-
...httpResponseJson,
|
|
214
|
-
numberOfReviews: httpResponseJson.num_of_reviews,
|
|
215
|
-
merchant_tags: httpResponseJson.merchant_tags || []
|
|
216
|
-
};
|
|
217
|
-
} catch (err) {
|
|
218
|
-
logger_default.logError("Failed to get response for v1SupportedEventPost", { err });
|
|
219
|
-
return {
|
|
220
|
-
supported: false,
|
|
221
|
-
ready: false,
|
|
222
|
-
category: void 0,
|
|
223
|
-
collections: [],
|
|
224
|
-
numberOfReviews: void 0,
|
|
225
|
-
top_category: void 0,
|
|
226
|
-
merchant_tags: []
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
};
|
|
230
|
-
}
|
|
231
|
-
static {
|
|
232
|
-
this.identifyUser = async (spiffyUserId, merchantUserId, uaDetails) => {
|
|
233
|
-
try {
|
|
234
|
-
await CommerceApiClient.getInstance().defaultApi.v1AnalyticsIdentifyPost({ AnalyticsIdentifyRequest: {
|
|
235
|
-
user_id: spiffyUserId,
|
|
236
|
-
os_name: uaDetails.os,
|
|
237
|
-
os_version: uaDetails.osVersion,
|
|
238
|
-
platform: uaDetails.os,
|
|
239
|
-
device_id: uaDetails.deviceModel,
|
|
240
|
-
device_brand: uaDetails.deviceBrand,
|
|
241
|
-
device_manufacturer: uaDetails.deviceManufacturer,
|
|
242
|
-
device_model: uaDetails.deviceModel,
|
|
243
|
-
user_properties: {
|
|
244
|
-
cdp_user_id: merchantUserId,
|
|
245
|
-
browser: uaDetails.browser,
|
|
246
|
-
browser_version: uaDetails.browserVersion,
|
|
247
|
-
user_agent: uaDetails.userAgent
|
|
248
|
-
}
|
|
249
|
-
} });
|
|
250
|
-
} catch (err) {
|
|
251
|
-
logger_default.logError("Failed to identify user", err);
|
|
252
|
-
}
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
static {
|
|
256
|
-
this.mapContextSourceToV1OrgConfigGetSource = (source) => {
|
|
257
|
-
if (source === void 0) return void 0;
|
|
258
|
-
switch (source) {
|
|
259
|
-
case ContextSourceEnum.Fork: return V1OrgConfigGetSourceEnum.Fork;
|
|
260
|
-
case ContextSourceEnum.Playground: return V1OrgConfigGetSourceEnum.Playground;
|
|
261
|
-
case ContextSourceEnum.App: return V1OrgConfigGetSourceEnum.App;
|
|
262
|
-
case ContextSourceEnum.Test: return V1OrgConfigGetSourceEnum.Test;
|
|
263
|
-
default: return source;
|
|
264
|
-
}
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
static {
|
|
268
|
-
this.getOrgConfig = async (user_id) => {
|
|
269
|
-
try {
|
|
270
|
-
const atomStore = getAtomStore();
|
|
271
|
-
const reactAppName = atomStore.get(reactAppNameAtom);
|
|
272
|
-
const contextSource = atomStore.get(contextSourceAtom);
|
|
273
|
-
const featureFlagService = atomStore.get(featureFlagServiceAtom);
|
|
274
|
-
const request = {
|
|
275
|
-
namespace: reactAppName,
|
|
276
|
-
user_id,
|
|
277
|
-
source: this.mapContextSourceToV1OrgConfigGetSource(contextSource),
|
|
278
|
-
include_experiments: Object.values(ProductExperiment),
|
|
279
|
-
include_feature_gates: Object.entries(featureFlagService?.featureFlagService?.getFeatureFlags() || {}).filter(([, isEnabled]) => isEnabled).map(([featureGateName]) => featureGateName)
|
|
280
|
-
};
|
|
281
|
-
const response = await CommerceApiClient.getInstance().defaultApi.v1OrgConfigGet(request);
|
|
282
|
-
return validateOrgConfigResults(response);
|
|
283
|
-
} catch (err) {
|
|
284
|
-
logger_default.logError(`Failed to get org config`, err, { err });
|
|
285
|
-
return;
|
|
286
|
-
}
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
static {
|
|
290
|
-
this.addNoteToLatestConversation = async (spiffyUserId, email, customerServiceProvider) => {
|
|
291
|
-
logger_default.logInfo(`addNoteToLatestConversation - user_id=${spiffyUserId} email=${email} customer_service_provider=${customerServiceProvider}`);
|
|
292
|
-
try {
|
|
293
|
-
await CommerceApiClient.getInstance().customerServiceApi.v1CustserviceAddNoteToLatestConversationPost({ AddNoteToLatestConversationRequest: {
|
|
294
|
-
spiffy_user_id: spiffyUserId,
|
|
295
|
-
email,
|
|
296
|
-
customer_service_provider: customerServiceProvider
|
|
297
|
-
} });
|
|
298
|
-
} catch (err) {
|
|
299
|
-
logger_default.logError("Failed to add note to latest conversation", { err });
|
|
300
|
-
}
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
static {
|
|
304
|
-
this.getCustomerServiceApi = () => CommerceApiClient.getInstance().customerServiceApi;
|
|
305
|
-
}
|
|
306
|
-
};
|
|
307
|
-
var commerce_api_default = CommerceApiClient;
|
|
308
|
-
|
|
309
|
-
//#endregion
|
|
310
|
-
export { commerce_api_default };
|
|
311
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVyY2UtYXBpLUJWeTQ5UWs4LmpzIiwibmFtZXMiOlsiY29uZmlnOiBDb25maWd1cmF0aW9uIiwiY29udGV4dDogQ29udGV4dCIsImVycjogdW5rbm93biIsImVycm9yOiB1bmtub3duIiwiZGF0YTogVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSIsInJlc3BvbnNlczogUmVzcG9uc2VbXVtdIiwic3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXSIsInVzZXJFdmVudHM6IFVzZXJFdmVudFtdIiwiYXNzaXN0YW50TWVzc2FnZXM6IE1lc3NhZ2VbXVtdIiwidXNlck1lc3NhZ2VzOiBNZXNzYWdlW11bXSIsInJlcXVlc3Q6IFYxT3JnQ29uZmlnR2V0UmVxdWVzdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyXCI7XG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uLFxuICBDdXN0b21lclNlcnZpY2VBcGksXG4gIERlZmF1bHRBcGksXG4gIEluZmVyZW5jZUFwaSxcbiAgUmVwb3J0U2Vzc2lvblJlcXVlc3QsXG4gIFJlc3BvbnNlRXJyb3IsXG4gIFVzZXJFdmVudENhdGVnb3J5LFxuICBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlLFxuICBWMU9yZ0NvbmZpZ0dldFJlcXVlc3QsXG4gIENvbnRleHRTb3VyY2VFbnVtLFxuICBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0sXG4gIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyLFxuICBSZXNwb25zZUNhdGVnb3J5LFxuICBGb3JtVHlwZSxcbn0gZnJvbSBcIkBzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudFwiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdWdnZXN0aW9uIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVN1Z2dlc3Rpb25cIjtcbmltcG9ydCB7IHZhbGlkYXRlVXNlckV2ZW50IH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVVzZXJFdmVudFwiO1xuaW1wb3J0IHtcbiAgbWVzc2FnZUZyb21RdWVyeUV2ZW50LFxuICBtZXNzYWdlRnJvbVJlc3BvbnNlLFxuICBtZXNzYWdlRnJvbVN1Z2dlc3Rpb25FdmVudCxcbn0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgTWVzc2FnZSxcbiAgTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuICBSZXNwb25zZSxcbiAgU3VnZ2VzdGlvbixcbiAgU3VwcG9ydGVkRXZlbnRSZXF1ZXN0LFxuICBVc2VyRXZlbnQsXG59IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzXCI7XG5pbXBvcnQgeyBtZXNzYWdlUmVxdWVzdFRvQ29tbWVyY2VNZXNzYWdlUmVxdWVzdCB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vdXRpbHMvbmV4dE1lc3NhZ2VSZXF1ZXN0VG9BcGlSZXF1ZXN0XCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVJlc3BvbnNlIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBjb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0IH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi91dGlscy9zdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0FwaVJlcXVlc3RcIjtcbmltcG9ydCB7IFNlc3Npb25SZXN0YXJ0UmVxdWlyZWQgfSBmcm9tIFwic3JjL3R5cGVzL2V4Y2VwdGlvbnMvc2Vzc2lvbkV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IFVuc3VwcG9ydGVkUHJvZHVjdEV4Y2VwdGlvbiB9IGZyb20gXCJzcmMvdHlwZXMvZXhjZXB0aW9ucy91bnN1cHBvcnRlZFByb2R1Y3RFeGNlcHRpb25zXCI7XG5pbXBvcnQgeyBDbGllbnREZXRhaWxzIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY2xpZW50RGV0YWlsc1wiO1xuaW1wb3J0IHsgZ2V0QXRvbVN0b3JlIH0gZnJvbSBcInNyYy9hdG9tcy9hdG9tU3RvcmUvYXRvbVN0b3JlXCI7XG5pbXBvcnQgeyBQcm9kdWN0RXhwZXJpbWVudCB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL3Byb2R1Y3RFeHBlcmltZW50XCI7XG5pbXBvcnQgeyBGZWF0dXJlR2F0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9mZWF0dXJlR2F0ZXNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0cyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVPcmdDb25maWdSZXN1bHRzXCI7XG5pbXBvcnQgeyBPcmdDb25maWcgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnQ29uZmlnUmVzdWx0c1wiO1xuaW1wb3J0IHsgU3VwcG9ydGVkRXZlbnQgfSBmcm9tIFwic3JjL2F0b21zL2FwcC92YXJpYW50XCI7XG5pbXBvcnQgeyBtZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudCB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dCB9IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ29udGV4dFwiO1xuaW1wb3J0IHsgQ29udGV4dEVudkVudW0gfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7IC8vIEltcG9ydCBDb250ZXh0RW52RW51bVxuaW1wb3J0IHtcbiAgYmFzZVVybEF0b20sXG4gIHJlYWN0QXBwTmFtZUF0b20sXG4gIGNvbnRleHRTb3VyY2VBdG9tLFxuICBvcmdTaG9ydE5hbWVBdG9tLFxuICBlbnZBdG9tLCAvLyBJbXBvcnQgZW52QXRvbVxufSBmcm9tIFwic3JjL2F0b21zL2Vudml2ZS9lbnZpdmVDb25maWdcIjtcbmltcG9ydCB7IHVzZXJJZEF0b20sIGNoYXRJZEF0b20gfSBmcm9tIFwic3JjL2F0b21zL2FwcFwiOyAvLyBJbXBvcnQgdXNlcklkQXRvbSBhbmQgY2hhdElkQXRvbVxuaW1wb3J0IHsgb3JnSWRBdG9tLCBmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tIH0gZnJvbSBcInNyYy9hdG9tcy9vcmcvZ3JhcGhxbENvbmZpZ1wiOyAvLyBJbXBvcnQgbmV3IG9yZ0lkQXRvbSBhbmQgZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbVxuXG5hc3luYyBmdW5jdGlvbiBlcnJvclJlc3BvbnNlQm9keShlcnJvcjogUmVzcG9uc2VFcnJvcikge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlcnJvci5yZXNwb25zZS5qc29uKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZihlcnJvck1zZzogc3RyaW5nLCBlcnJvcjogdW5rbm93bikge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJlc3BvbnNlRXJyb3IpKSB7XG4gICAgTG9nZ2VyLmxvZ0luZm8oZXJyb3JNc2csIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBhd2FpdCBlcnJvclJlc3BvbnNlQm9keShlcnJvcik7XG4gIGlmIChcbiAgICBlcnJvclJlc3BvbnNlPy5tZXNzYWdlPy50b0xvd2VyQ2FzZSgpID09PSBcInVuc3VwcG9ydGVkIHByb2R1Y3RcIiB8fCAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gbmV3ZXIgdmVyc2lvbnMgb2YgdGhlIEFQSSByZXR1cm4gc3ViX2NvZGUgaW5zdGVhZCBvZiBtZXNzYWdlXG4gICAgZXJyb3JSZXNwb25zZT8uYXBwX2NvZGU/LnRvVXBwZXJDYXNlKCkgPT09IFwiUFJPRFVDVF9OT1RfRk9VTkRcIlxuICApIHtcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRQcm9kdWN0RXhjZXB0aW9uKCk7XG4gIH0gZWxzZSBpZiAoXG4gICAgZXJyb3JSZXNwb25zZT8uYXBwX2NvZGU/LnRvVXBwZXJDYXNlKCkgPT09IFwiUkVTVEFSVF9TRVNTSU9OXCIgfHxcbiAgICBlcnJvclJlc3BvbnNlPy5zdWJfY29kZT8udG9VcHBlckNhc2UoKSA9PT0gXCJOT1RfRk9VTkRcIiAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gbmV3IEFQSSByZXNwb25zZXMgd2lsbCBjb250YWluIFwiYXBwX2NvZGVcIlxuICApIHtcbiAgICBMb2dnZXIubG9nSW5mbyhcbiAgICAgIFwiU2Vzc2lvbiBkb2VzIG5vdCBleGlzdC4gUmUtc3RhcnQgc2Vzc2lvblwiLFxuICAgICAgZXJyb3IsXG4gICAgICBlcnJvci5yZXNwb25zZSxcbiAgICAgIGVycm9yUmVzcG9uc2VcbiAgICApO1xuICAgIHRocm93IG5ldyBTZXNzaW9uUmVzdGFydFJlcXVpcmVkKCk7XG4gIH1cblxuICBMb2dnZXIubG9nSW5mbyhlcnJvck1zZywgZXJyb3IpO1xuICB0aHJvdyBlcnJvcjtcbn1cblxuY2xhc3MgQ29tbWVyY2VBcGlDbGllbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRBcGk6IERlZmF1bHRBcGk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjdXN0b21lclNlcnZpY2VBcGk6IEN1c3RvbWVyU2VydmljZUFwaTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGluZmVyZW5jZUFwaTogSW5mZXJlbmNlQXBpO1xuXG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBDb21tZXJjZUFwaUNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIHByaXZhdGUgcmVzcG9uc2VzQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIHByaXZhdGUgc3RhdGljIGdldEluc3RhbmNlID0gKCk6IENvbW1lcmNlQXBpQ2xpZW50ID0+IHtcbiAgICBpZiAoIUNvbW1lcmNlQXBpQ2xpZW50Lmluc3RhbmNlKSB7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5pbnN0YW5jZSA9IG5ldyBDb21tZXJjZUFwaUNsaWVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBDb21tZXJjZUFwaUNsaWVudC5pbnN0YW5jZTtcbiAgfTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGJhc2VQYXRoPzogc3RyaW5nKSB7XG4gICAgY29uc3QgYXRvbVN0b3JlID0gZ2V0QXRvbVN0b3JlKCk7XG4gICAgY29uc3QgYmFzZVVybCA9IGF0b21TdG9yZS5nZXQoYmFzZVVybEF0b20pO1xuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aCB8fCBiYXNlVXJsO1xuICAgIC8vIEFQSSBLZXkgaXMgbm93IGhhbmRsZWQgYXQgdGhlIEVudml2ZUNvbmZpZ1Byb3ZpZGVyIGxldmVsXG4gICAgY29uc3QgY29uZmlnOiBDb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oe1xuICAgICAgYmFzZVBhdGg6IHBhdGgsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLmRlZmF1bHRBcGkgPSBuZXcgRGVmYXVsdEFwaShjb25maWcpO1xuICAgIHRoaXMuaW5mZXJlbmNlQXBpID0gbmV3IEluZmVyZW5jZUFwaShjb25maWcpO1xuICAgIHRoaXMuY3VzdG9tZXJTZXJ2aWNlQXBpID0gbmV3IEN1c3RvbWVyU2VydmljZUFwaShjb25maWcpO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmVVcmwgPSBhc3luYyAodXJsOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBhdG9tU3RvcmUgPSBnZXRBdG9tU3RvcmUoKTtcbiAgICBjb25zdCBvcmdTaG9ydE5hbWUgPSBhdG9tU3RvcmUuZ2V0KG9yZ1Nob3J0TmFtZUF0b20pO1xuICAgIGNvbnN0IG9yZ0lkID0gYXRvbVN0b3JlLmdldChvcmdJZEF0b20pO1xuICAgIGNvbnN0IHVzZXJJZCA9IGF0b21TdG9yZS5nZXQodXNlcklkQXRvbSk7XG4gICAgY29uc3QgY2hhdElkID0gYXRvbVN0b3JlLmdldChjaGF0SWRBdG9tKTtcbiAgICBjb25zdCBzb3VyY2UgPSBhdG9tU3RvcmUuZ2V0KGNvbnRleHRTb3VyY2VBdG9tKTtcbiAgICBjb25zdCBlbnYgPSBhdG9tU3RvcmUuZ2V0KGVudkF0b20pO1xuXG4gICAgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlID0gYXRvbVN0b3JlLmdldChmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tKTtcblxuICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSB7XG4gICAgICB1c2VyX2lkOiB1c2VySWQgPz8gXCJcIixcbiAgICAgIG9yZ19pZDogb3JnSWQgPz8gXCJcIixcbiAgICAgIG9yZ19zaG9ydF9uYW1lOiBvcmdTaG9ydE5hbWUgPz8gXCJcIixcbiAgICAgIGNoYXRfaWQ6IGNoYXRJZCA/PyBcIlwiLFxuICAgICAgc291cmNlOiBzb3VyY2UgPz8gQ29udGV4dFNvdXJjZUVudW0uQXBwLFxuICAgICAgZW52OiAoZW52IGFzIENvbnRleHRFbnZFbnVtKSA/PyBDb250ZXh0RW52RW51bS5EZXYsIC8vIENhc3QgZW52IHRvIENvbnRleHRFbnZFbnVtXG4gICAgfTtcblxuICAgIGNvbnN0IGZlYXR1cmVHYXRlcyA9XG4gICAgICBmZWF0dXJlRmxhZ1NlcnZpY2U/LmZlYXR1cmVGbGFnU2VydmljZT8uZ2V0RmVhdHVyZUZsYWdzKCkgfHwge307XG4gICAgY29uc3QgdXJsUmVzb2x2aW5nUmVxdWVzdCA9IHtcbiAgICAgIHVybCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmZWF0dXJlX2dhdGVzOiBmZWF0dXJlR2F0ZXMsXG4gICAgfTtcblxuICAgIGNvbnN0IHJhd1Jlc3BvbnNlID1cbiAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLnYxVXJsUmVzb2x2aW5nUG9zdFJhdyh7XG4gICAgICAgIFVybFJlc29sdmluZ1JlcXVlc3Q6IHVybFJlc29sdmluZ1JlcXVlc3QsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGF3YWl0IHJhd1Jlc3BvbnNlLnJhdy5qc29uKCk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2VCb2R5O1xuICB9O1xuXG4gIHN0YXRpYyByZXBvcnRTZXNzaW9uID0gYXN5bmMgKFxuICAgIHJlcG9ydFJlcXVlc3Q6IFJlcG9ydFNlc3Npb25SZXF1ZXN0XG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuZGVmYXVsdEFwaS52MUNoYXRzUmVwb3J0U2Vzc2lvbklkUG9zdChcbiAgICAgIHtcbiAgICAgICAgUmVwb3J0U2Vzc2lvblJlcXVlc3Q6IHJlcG9ydFJlcXVlc3QsXG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0TmV4dFJlc3BvbnNlcyA9IGFzeW5jIChcbiAgICBwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3RcbiAgKTogUHJvbWlzZTxNZXNzYWdlW10+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPVxuICAgICAgICBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaS52MU5leHRSZXNwb25zZXNQb3N0KHtcbiAgICAgICAgICBOZXh0TWVzc2FnZVJlcXVlc3Q6IG1lc3NhZ2VSZXF1ZXN0VG9Db21tZXJjZU1lc3NhZ2VSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gcmVzcG9uc2VcbiAgICAgICAgLm1hcCgocmVzcCkgPT4gdmFsaWRhdGVSZXNwb25zZShyZXNwKSlcbiAgICAgICAgLm1hcCgocmVzcCkgPT4gbWVzc2FnZUZyb21SZXNwb25zZShyZXNwKSk7XG5cbiAgICAgIHJldHVybiBtZXNzYWdlcy5maWx0ZXIoKG0pOiBtIGlzIE1lc3NhZ2UgPT4gbSAhPSBudWxsKTtcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIExvZ2dlci5sb2dJbmZvKFwiRmFpbGVkIHRvIGdldCBuZXh0IHJlc3BvbnNlc1wiLCBlcnIsIHtcbiAgICAgICAgcGF5bG9hZENvbnRleHQ6IHBheWxvYWQ/LmNvbnRleHQsXG4gICAgICAgIHVzZXJFdmVudHM6IHBheWxvYWQ/LnVzZXJFdmVudHMsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRocm93U2Vzc2lvblJlc3RhcnRSZXF1aXJlZElmKFwiRmFpbGVkIHRvIGdldCBuZXh0IHJlc3BvbnNlc1wiLCBlcnIpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfTtcblxuICBzdGF0aWMgZ2V0TmV4dFJlc3BvbnNlU3RyZWFtaW5nID0gKFxuICAgIHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdFxuICApOiBBc3luY0dlbmVyYXRvcjxSZXNwb25zZSwgdm9pZCwgdW5rbm93bj4gPT4ge1xuICAgIGFzeW5jIGZ1bmN0aW9uKiBnZW5lcmF0ZShcbiAgICAgIGluZmVyZW5jZUFwaTogSW5mZXJlbmNlQXBpLFxuICAgICAgYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXJcbiAgICApIHtcbiAgICAgIC8vIG1ha2Ugc3VyZSBzdHJlYW1pbmcgaXMgZW5hYmxlZFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpbmZlcmVuY2VBcGkudjFOZXh0UmVzcG9uc2VzUG9zdFJhdyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBOZXh0TWVzc2FnZVJlcXVlc3Q6IG1lc3NhZ2VSZXF1ZXN0VG9Db21tZXJjZU1lc3NhZ2VSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwgfVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJlYWQgdGhlIHJlc3BvbnNlIGFzIGEgc3RyZWFtIG9mIGRhdGFcbiAgICAgICAgaWYgKCFyZXNwb25zZS5yYXcuYm9keSkge1xuICAgICAgICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICAgICAgIFwiW3NwaWZmeS1haV0gTm8gYm9keSBpbiB0aGUgc3RyZWFtZWQgcmVzcG9uc2VcIixcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLnJhdyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLnJhdy5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKFwidXRmLThcIik7XG5cbiAgICAgICAgbGV0IHBhcnRpYWwgPSBcIlwiO1xuICAgICAgICAvLyBUT0RPIHRoaXMgZnVuY3Rpb24gaXMgcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgbmV3IGRhdGEgY29tZXMgZnJvbSB0aGUgc3RyZWFtIC0gZGVmaW5lIGl0IG91dHNpZGUgb2YgdGhlIGdlbmVyYXRvclxuICAgICAgICBjb25zdCBzYWZlUGFyc2UgPSAobGluZTogc3RyaW5nKTogdW5rbm93biA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxpbmUpOyAvLyBQYXJzZSB0aGUgSlNPTiBzdHJpbmdcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIExvZ2dlci5sb2dFcnJvcihcIltzcGlmZnktYWldIEVycm9yIHBhcnNpbmcgc3RyZWFtZWQgbGluZVwiLCBlcnIsIHtcbiAgICAgICAgICAgICAgbGluZSxcbiAgICAgICAgICAgICAgcGFydGlhbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gc3dhbGxvdyB0aGUgZXJyb3IgYW5kIHNldCB0aGUgcGFydGlhbCB0byBvdXIgY3VycmVudCBjaHVua1xuICAgICAgICAgICAgcGFydGlhbCA9IGxpbmU7XG4gICAgICAgICAgICByZXR1cm4gcGFydGlhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gVE9ETyB0aGlzIGZ1bmN0aW9uIGlzIHJlY3JlYXRlZCBldmVyeSB0aW1lIG5ldyBkYXRhIGNvbWVzIGZyb20gdGhlIHN0cmVhbSAtIGRlZmluZSBpdCBvdXRzaWRlIG9mIHRoZSBnZW5lcmF0b3JcbiAgICAgICAgY29uc3QgcHJvY2Vzc0NodW5rID0gKGNodW5rOiBzdHJpbmcpOiB1bmtub3duW10gPT4ge1xuICAgICAgICAgIC8vIG1lcmdlIHRoZSBwYXJ0aWFsIHdpdGggdGhlIGluY29taW5nIGNodW5rXG4gICAgICAgICAgY29uc3QgbGluZXMgPSBgJHtwYXJ0aWFsfSR7Y2h1bmt9YC5zcGxpdChcIlxcblwiKTtcblxuICAgICAgICAgIGNvbnN0IHBhcnNlZExpbmVzID0gbGluZXNcbiAgICAgICAgICAgIC5tYXAoKGxpbmUpID0+IGxpbmUucmVwbGFjZSgvXmRhdGE6IC8sIFwiXCIpLnRyaW0oKSkgLy8gUmVtb3ZlIHRoZSBcImRhdGE6IFwiIHByZWZpeFxuICAgICAgICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZSAhPT0gXCJcIiAmJiBsaW5lICE9PSBcIltET05FXVwiKSAvLyBSZW1vdmUgZW1wdHkgbGluZXMgYW5kIFwiW0RPTkVdXCJcbiAgICAgICAgICAgIC5tYXAoc2FmZVBhcnNlKVxuICAgICAgICAgICAgLmZpbHRlcigodikgPT4gdik7IC8vIGFuZCBmaWx0ZXIgb3V0IHRoZSB1bmRlZmluZWQgdmFsdWVzXG4gICAgICAgICAgcmV0dXJuIHBhcnNlZExpbmVzO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuXG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE1hc3NhZ2UgYW5kIHBhcnNlIHRoZSBjaHVuayBvZiBkYXRhXG4gICAgICAgICAgY29uc3QgY2h1bmsgPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSk7XG4gICAgICAgICAgY29uc3QgcGFyc2VkTGluZXMgPSBwcm9jZXNzQ2h1bmsoY2h1bmspO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBwYXJzZWRMaW5lIG9mIHBhcnNlZExpbmVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRSZXNwb25zZSA9IHZhbGlkYXRlUmVzcG9uc2UocGFyc2VkTGluZSk7XG5cbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZWRSZXNwb25zZSkge1xuICAgICAgICAgICAgICB5aWVsZCB2YWxpZGF0ZWRSZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICAgICBcIltzcGlmZnktYWldIEZhaWxlZCB0byBnZXQgbmV4dCBzdHJlYW1pbmcgcmVzcG9uc2VzXCIsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGF5bG9hZENvbnRleHQ6IHBheWxvYWQ/LmNvbnRleHQsXG4gICAgICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkPy51c2VyRXZlbnRzLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhyb3dTZXNzaW9uUmVzdGFydFJlcXVpcmVkSWYoXG4gICAgICAgICAgXCJGYWlsZWQgdG8gZ2V0IG5leHQgc3RyZWFtaW5nIHJlc3BvbnNlc1wiLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5yZXNwb25zZXNBYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnJlc3BvbnNlc0Fib3J0Q29udHJvbGxlciA9XG4gICAgICBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdGUoXG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaSxcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkucmVzcG9uc2VzQWJvcnRDb250cm9sbGVyXG4gICAgKTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0TmV4dFN1Z2dlc3Rpb25zID0gYXN5bmMgKFxuICAgIHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdFxuICApOiBQcm9taXNlPFN1Z2dlc3Rpb25bXT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyID1cbiAgICAgICAgbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9XG4gICAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLnYxTmV4dFN1Z2dlc3Rpb25zUG9zdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBOZXh0TWVzc2FnZVJlcXVlc3Q6IG1lc3NhZ2VSZXF1ZXN0VG9Db21tZXJjZU1lc3NhZ2VSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2lnbmFsOlxuICAgICAgICAgICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gcmVzcG9uc2VcbiAgICAgICAgLm1hcCgocmVzcCkgPT4gdmFsaWRhdGVTdWdnZXN0aW9uKHJlc3ApKVxuICAgICAgICAuZmlsdGVyKChzdWdnZXN0aW9uKTogc3VnZ2VzdGlvbiBpcyBTdWdnZXN0aW9uID0+IHN1Z2dlc3Rpb24gIT0gbnVsbCk7XG5cbiAgICAgIHJldHVybiBzdWdnZXN0aW9ucztcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgTG9nZ2VyLmxvZ0luZm8oXCJGYWlsZWQgdG8gZ2V0IHN1Z2dlc3Rpb25zXCIsIGVycm9yLCB7XG4gICAgICAgIHBheWxvYWRDb250ZXh0OiBwYXlsb2FkPy5jb250ZXh0LFxuICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkPy51c2VyRXZlbnRzLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRocm93U2Vzc2lvblJlc3RhcnRSZXF1aXJlZElmKFwiRmFpbGVkIHRvIGdldCBzdWdnZXN0aW9uc1wiLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBleGlzdGluZyBjaGF0IGRhdGEgZm9yIGEgZ2l2ZW4gc2Vzc2lvbiBhbmQgdHJhbnNmb3JtcyB0aGVtIHRvIHJlY29uc3RydWN0IHRoZSBjaGF0IGhpc3RvcnkuXG4gICAqXG4gICAqIEBwYXJhbSBvcmdJZCBUaGUgb3JnYW5pemF0aW9uIElkXG4gICAqIEBwYXJhbSBjaGF0SWQgVGhlIGV4aXN0aW5nIGNoYXQgSWRcbiAgICogQHBhcmFtIHVzZXJJZCBUaGUgdXNlciBJZFxuICAgKlxuICAgKiBAcmV0dXJucyBBIGxpc3Qgb2YgbWVzc2FnZXMgdGhhdCB3ZXJlIGV4Y2hhbmdlZCBpbiB0aGUgY2hhdCwgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBjaGF0IHNlc3Npb24gaGFzIGV4cGlyZWQuXG4gICAqL1xuICBzdGF0aWMgZ2V0UmVzcG9uc2VzID0gYXN5bmMgKFxuICAgIG9yZ0lkOiBzdHJpbmcsXG4gICAgY2hhdElkOiBzdHJpbmcsXG4gICAgdXNlcklkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7XG4gICAgcmVzcG9uc2VzOiBSZXNwb25zZVtdW107XG4gICAgdXNlckV2ZW50czogVXNlckV2ZW50W107XG4gICAgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXTtcbiAgICBtZXNzYWdlczogTWVzc2FnZVtdW107XG4gIH0+ID0+IHtcbiAgICBsZXQgZGF0YTogVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSA9IHtcbiAgICAgIHJlc3BvbnNlczogW10sXG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICB1c2VyX2V2ZW50czogW10sXG4gICAgfTtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgb3JnX2lkOiBvcmdJZCxcbiAgICAgIGNoYXRfaWQ6IGNoYXRJZCxcbiAgICAgIHVzZXJfaWQ6IHVzZXJJZCxcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBkYXRhID1cbiAgICAgICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5kZWZhdWx0QXBpLnYxR2V0U2Vzc2lvbk1lc3NhZ2VzKFxuICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgYXdhaXQgdGhyb3dTZXNzaW9uUmVzdGFydFJlcXVpcmVkSWYoXG4gICAgICAgIFwiRmFpbGVkIHRvIGdldCBjaGF0IHJlc3BvbnNlc1wiLFxuICAgICAgICBlcnJvclxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZXM6IFJlc3BvbnNlW11bXSA9IGRhdGE/LnJlc3BvbnNlcz8ubWFwKCh0dXJuKSA9PlxuICAgICAgdHVyblxuICAgICAgICAubWFwKChyZXNwb25zZSkgPT4gdmFsaWRhdGVSZXNwb25zZShyZXNwb25zZSkpXG4gICAgICAgIC5maWx0ZXIoKHJlc3BvbnNlKTogcmVzcG9uc2UgaXMgUmVzcG9uc2UgPT4gcmVzcG9uc2UgIT0gbnVsbClcbiAgICApO1xuXG4gICAgY29uc3Qgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXSA9IGRhdGE/LnN1Z2dlc3Rpb25zXG4gICAgICAubWFwKChzdWdnZXN0aW9uKSA9PiB2YWxpZGF0ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbikpXG4gICAgICAuZmlsdGVyKChzdWdnZXN0aW9uKTogc3VnZ2VzdGlvbiBpcyBTdWdnZXN0aW9uID0+IHN1Z2dlc3Rpb24gIT0gbnVsbCk7XG5cbiAgICBjb25zdCB1c2VyRXZlbnRzOiBVc2VyRXZlbnRbXSA9IGRhdGE/LnVzZXJfZXZlbnRzXG4gICAgICAubWFwKChldmVudCkgPT4gdmFsaWRhdGVVc2VyRXZlbnQoZXZlbnQpKVxuICAgICAgLmZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBVc2VyRXZlbnQgPT4gZXZlbnQgIT0gbnVsbCk7XG5cbiAgICAvLyBpZiBhIGZvcm0gaGFzIGFscmVhZHkgYmVlbiBzdWJtaXR0ZWQsIGRvbid0IHNob3cgaXQgaW4gdGhlIGNoYXQgaGlzdG9yeVxuICAgIGNvbnN0IGZvcm1TdWJtaXR0ZWRVc2VyRXZlbnRzRm9ybUlkcyA9IHVzZXJFdmVudHNcbiAgICAgIC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZClcbiAgICAgIC5tYXAoKGV2ZW50KSA9PiBldmVudC5hdHRyaWJ1dGVzLmZvcm1SZXNwb25zZUlkKTtcblxuICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VzOiBNZXNzYWdlW11bXSA9IHJlc3BvbnNlc1xuICAgICAgLm1hcCgodHVybikgPT5cbiAgICAgICAgdHVyblxuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAocmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuRm9ybSAmJlxuICAgICAgICAgICAgICAgIGZvcm1TdWJtaXR0ZWRVc2VyRXZlbnRzRm9ybUlkcy5pbmNsdWRlcyhyZXNwb25zZS5pZClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKChyZXNwb25zZSkgPT4gbWVzc2FnZUZyb21SZXNwb25zZShyZXNwb25zZSkpXG4gICAgICAgICAgLmZpbHRlcigobWVzc2FnZSk6IG1lc3NhZ2UgaXMgTWVzc2FnZSA9PiBtZXNzYWdlICE9IG51bGwpXG4gICAgICApXG4gICAgICAuZmlsdGVyKCh0dXJuKSA9PiB0dXJuLmxlbmd0aCA+IDApO1xuXG4gICAgY29uc3QgdXNlck1lc3NhZ2VzOiBNZXNzYWdlW11bXSA9IHVzZXJFdmVudHNcbiAgICAgIC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBbVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCwgVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoXS5pbmNsdWRlcyhcbiAgICAgICAgICAgIGV2ZW50LmNhdGVnb3J5XG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gW21lc3NhZ2VGcm9tUXVlcnlFdmVudChldmVudCldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TdWdnZXN0aW9uQ2xpY2tlZCkge1xuICAgICAgICAgIHJldHVybiBbbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQoZXZlbnQsIHN1Z2dlc3Rpb25zKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQpIHtcbiAgICAgICAgICBjb25zdCBmb3JtUmVzcG9uc2UgPSByZXNwb25zZXNcbiAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgIC5maW5kKFxuICAgICAgICAgICAgICAocmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuaWQgPT09IGV2ZW50LmF0dHJpYnV0ZXMuZm9ybVJlc3BvbnNlSWQgJiZcbiAgICAgICAgICAgICAgICBldmVudC5hdHRyaWJ1dGVzLmZvcm1UeXBlICE9PSBGb3JtVHlwZS5Fc2NhbGF0aW9uXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGZvcm1SZXNwb25zZSAmJiBmb3JtUmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuRm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQoZXZlbnQsIGZvcm1SZXNwb25zZS5hdHRyaWJ1dGVzKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpOiBtZXNzYWdlIGlzIE1lc3NhZ2VbXSA9PiBtZXNzYWdlLmxlbmd0aCA+IDApO1xuXG4gICAgLy8gU29ydCB0aGUgbWVzc2FnZXMgY2hyb25vbG9naWNhbGx5IHRvIHJlY29uc3RydWN0IHRoZSBjaGF0IGhpc3RvcnlcbiAgICBjb25zdCBzb3J0ZWRNZXNzYWdlcyA9IFsuLi5hc3Npc3RhbnRNZXNzYWdlcywgLi4udXNlck1lc3NhZ2VzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+XG4gICAgICAgIG5ldyBEYXRlKGFbMF0uY3JlYXRlZEF0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShiWzBdLmNyZWF0ZWRBdCkuZ2V0VGltZSgpXG4gICAgKTtcblxuICAgIHJldHVybiB7IHJlc3BvbnNlcywgdXNlckV2ZW50cywgc3VnZ2VzdGlvbnMsIG1lc3NhZ2VzOiBzb3J0ZWRNZXNzYWdlcyB9O1xuICB9O1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcGF5bG9hZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGlzU3VwcG9ydGVkRXZlbnQgPSBhc3luYyAoXG4gICAgcGF5bG9hZDogU3VwcG9ydGVkRXZlbnRSZXF1ZXN0XG4gICk6IFByb21pc2U8U3VwcG9ydGVkRXZlbnQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3UmVzcG9uc2UgPVxuICAgICAgICBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaS52MVN1cHBvcnRlZEV2ZW50UG9zdFJhdyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTdXBwb3J0ZWRFdmVudFJlcXVlc3Q6XG4gICAgICAgICAgICAgIGNvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0FwaVJlcXVlc3QocGF5bG9hZCksXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAvLyBHZXQgdGhlIGFjdHVhbCBIVFRQIHJlc3BvbnNlIEpTT05cbiAgICAgIGNvbnN0IGh0dHBSZXNwb25zZVRleHQgPSBhd2FpdCByYXdSZXNwb25zZS5yYXcudGV4dCgpO1xuICAgICAgY29uc3QgaHR0cFJlc3BvbnNlSnNvbiA9IEpTT04ucGFyc2UoaHR0cFJlc3BvbnNlVGV4dCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmh0dHBSZXNwb25zZUpzb24sXG4gICAgICAgIG51bWJlck9mUmV2aWV3czogaHR0cFJlc3BvbnNlSnNvbi5udW1fb2ZfcmV2aWV3cyxcbiAgICAgICAgbWVyY2hhbnRfdGFnczogaHR0cFJlc3BvbnNlSnNvbi5tZXJjaGFudF90YWdzIHx8IFtdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcIkZhaWxlZCB0byBnZXQgcmVzcG9uc2UgZm9yIHYxU3VwcG9ydGVkRXZlbnRQb3N0XCIsIHtcbiAgICAgICAgZXJyLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdXBwb3J0ZWQ6IGZhbHNlLFxuICAgICAgICByZWFkeTogZmFsc2UsXG4gICAgICAgIGNhdGVnb3J5OiB1bmRlZmluZWQsXG4gICAgICAgIGNvbGxlY3Rpb25zOiBbXSxcbiAgICAgICAgbnVtYmVyT2ZSZXZpZXdzOiB1bmRlZmluZWQsXG4gICAgICAgIHRvcF9jYXRlZ29yeTogdW5kZWZpbmVkLFxuICAgICAgICBtZXJjaGFudF90YWdzOiBbXSxcbiAgICAgIH07XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyBpZGVudGlmeVVzZXIgPSBhc3luYyAoXG4gICAgc3BpZmZ5VXNlcklkOiBzdHJpbmcsXG4gICAgbWVyY2hhbnRVc2VySWQ6IHN0cmluZyxcbiAgICB1YURldGFpbHM6IENsaWVudERldGFpbHNcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuZGVmYXVsdEFwaS52MUFuYWx5dGljc0lkZW50aWZ5UG9zdCh7XG4gICAgICAgIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdDoge1xuICAgICAgICAgIHVzZXJfaWQ6IHNwaWZmeVVzZXJJZCxcbiAgICAgICAgICBvc19uYW1lOiB1YURldGFpbHMub3MsXG4gICAgICAgICAgb3NfdmVyc2lvbjogdWFEZXRhaWxzLm9zVmVyc2lvbixcbiAgICAgICAgICBwbGF0Zm9ybTogdWFEZXRhaWxzLm9zLFxuICAgICAgICAgIGRldmljZV9pZDogdWFEZXRhaWxzLmRldmljZU1vZGVsLFxuICAgICAgICAgIGRldmljZV9icmFuZDogdWFEZXRhaWxzLmRldmljZUJyYW5kLFxuICAgICAgICAgIGRldmljZV9tYW51ZmFjdHVyZXI6IHVhRGV0YWlscy5kZXZpY2VNYW51ZmFjdHVyZXIsXG4gICAgICAgICAgZGV2aWNlX21vZGVsOiB1YURldGFpbHMuZGV2aWNlTW9kZWwsXG4gICAgICAgICAgdXNlcl9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjZHBfdXNlcl9pZDogbWVyY2hhbnRVc2VySWQsXG4gICAgICAgICAgICBicm93c2VyOiB1YURldGFpbHMuYnJvd3NlcixcbiAgICAgICAgICAgIGJyb3dzZXJfdmVyc2lvbjogdWFEZXRhaWxzLmJyb3dzZXJWZXJzaW9uLFxuICAgICAgICAgICAgdXNlcl9hZ2VudDogdWFEZXRhaWxzLnVzZXJBZ2VudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoXCJGYWlsZWQgdG8gaWRlbnRpZnkgdXNlclwiLCBlcnIpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyBtYXBDb250ZXh0U291cmNlVG9WMU9yZ0NvbmZpZ0dldFNvdXJjZSA9IChcbiAgICBzb3VyY2U6IENvbnRleHRTb3VyY2VFbnVtIHwgdW5kZWZpbmVkXG4gICk6IFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHNvdXJjZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN3aXRjaCAoc291cmNlKSB7XG4gICAgICBjYXNlIENvbnRleHRTb3VyY2VFbnVtLkZvcms6XG4gICAgICAgIHJldHVybiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0uRm9yaztcbiAgICAgIGNhc2UgQ29udGV4dFNvdXJjZUVudW0uUGxheWdyb3VuZDpcbiAgICAgICAgcmV0dXJuIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bS5QbGF5Z3JvdW5kO1xuICAgICAgY2FzZSBDb250ZXh0U291cmNlRW51bS5BcHA6XG4gICAgICAgIHJldHVybiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0uQXBwO1xuICAgICAgY2FzZSBDb250ZXh0U291cmNlRW51bS5UZXN0OlxuICAgICAgICByZXR1cm4gVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtLlRlc3Q7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGlmIG5ldyB2YWx1ZXMgYXJlIGFkZGVkIHRvIENvbnRleHRTb3VyY2VFbnVtLCB3ZSBjYXRjaCBpdFxuICAgICAgICBjb25zdCBleGhhdXN0aXZlQ2hlY2s6IG5ldmVyID0gc291cmNlO1xuICAgICAgICByZXR1cm4gZXhoYXVzdGl2ZUNoZWNrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBzdGF0aWMgZ2V0T3JnQ29uZmlnID0gYXN5bmMgKFxuICAgIHVzZXJfaWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPE9yZ0NvbmZpZyB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhdG9tU3RvcmUgPSBnZXRBdG9tU3RvcmUoKTtcbiAgICAgIGNvbnN0IHJlYWN0QXBwTmFtZSA9IGF0b21TdG9yZS5nZXQocmVhY3RBcHBOYW1lQXRvbSk7XG4gICAgICBjb25zdCBjb250ZXh0U291cmNlID0gYXRvbVN0b3JlLmdldChjb250ZXh0U291cmNlQXRvbSk7XG4gICAgICBjb25zdCBmZWF0dXJlRmxhZ1NlcnZpY2UgPSBhdG9tU3RvcmUuZ2V0KGZlYXR1cmVGbGFnU2VydmljZUF0b20pOyAvLyBHZXQgZmVhdHVyZUZsYWdTZXJ2aWNlXG4gICAgICBjb25zdCByZXF1ZXN0OiBWMU9yZ0NvbmZpZ0dldFJlcXVlc3QgPSB7XG4gICAgICAgIG5hbWVzcGFjZTogcmVhY3RBcHBOYW1lLFxuICAgICAgICB1c2VyX2lkLFxuICAgICAgICBzb3VyY2U6IHRoaXMubWFwQ29udGV4dFNvdXJjZVRvVjFPcmdDb25maWdHZXRTb3VyY2UoY29udGV4dFNvdXJjZSksXG4gICAgICAgIGluY2x1ZGVfZXhwZXJpbWVudHM6IE9iamVjdC52YWx1ZXMoUHJvZHVjdEV4cGVyaW1lbnQpLFxuICAgICAgICBpbmNsdWRlX2ZlYXR1cmVfZ2F0ZXM6IE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgIGZlYXR1cmVGbGFnU2VydmljZT8uZmVhdHVyZUZsYWdTZXJ2aWNlPy5nZXRGZWF0dXJlRmxhZ3MoKSB8fCB7fVxuICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcigoWywgaXNFbmFibGVkXSkgPT4gaXNFbmFibGVkKVxuICAgICAgICAgIC5tYXAoKFtmZWF0dXJlR2F0ZU5hbWVdKSA9PiBmZWF0dXJlR2F0ZU5hbWUpLCAvLyBVc2UgZmVhdHVyZUZsYWdTZXJ2aWNlXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPVxuICAgICAgICBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmRlZmF1bHRBcGkudjFPcmdDb25maWdHZXQoXG4gICAgICAgICAgcmVxdWVzdFxuICAgICAgICApO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVPcmdDb25maWdSZXN1bHRzKHJlc3BvbnNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihgRmFpbGVkIHRvIGdldCBvcmcgY29uZmlnYCwgZXJyLCB7IGVyciB9KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyBhZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb24gPSBhc3luYyAoXG4gICAgc3BpZmZ5VXNlcklkOiBzdHJpbmcsXG4gICAgZW1haWw6IHN0cmluZyxcbiAgICBjdXN0b21lclNlcnZpY2VQcm92aWRlcjogQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJcbiAgKSA9PiB7XG4gICAgTG9nZ2VyLmxvZ0luZm8oXG4gICAgICBgYWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uIC0gdXNlcl9pZD0ke3NwaWZmeVVzZXJJZH0gZW1haWw9JHtlbWFpbH0gY3VzdG9tZXJfc2VydmljZV9wcm92aWRlcj0ke2N1c3RvbWVyU2VydmljZVByb3ZpZGVyfWBcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmN1c3RvbWVyU2VydmljZUFwaS52MUN1c3RzZXJ2aWNlQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUG9zdChcbiAgICAgICAge1xuICAgICAgICAgIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3Q6IHtcbiAgICAgICAgICAgIHNwaWZmeV91c2VyX2lkOiBzcGlmZnlVc2VySWQsXG4gICAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICAgIGN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXI6IGN1c3RvbWVyU2VydmljZVByb3ZpZGVyLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoXCJGYWlsZWQgdG8gYWRkIG5vdGUgdG8gbGF0ZXN0IGNvbnZlcnNhdGlvblwiLCB7IGVyciB9KTtcbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGdldEN1c3RvbWVyU2VydmljZUFwaSA9ICgpID0+XG4gICAgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5jdXN0b21lclNlcnZpY2VBcGk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1lcmNlQXBpQ2xpZW50O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQXlEQSxlQUFlLGtCQUFrQixPQUFzQjtBQUNyRCxLQUFJO0FBQ0YsU0FBTyxNQUFNLE1BQU0sU0FBUyxNQUFNO1NBQzVCO0FBQ04sU0FBTyxFQUFFOzs7QUFJYixlQUFlLDhCQUE4QixVQUFrQixPQUFnQjtBQUM3RSxLQUFJLEVBQUUsaUJBQWlCLGdCQUFnQjtBQUNyQyxpQkFBTyxRQUFRLFVBQVUsTUFBTTtBQUMvQixRQUFNOztDQUdSLE1BQU0sZ0JBQWdCLE1BQU0sa0JB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
|