@envive-ai/react-hooks 0.3.32 → 0.3.33

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 (170) hide show
  1. package/dist/application/commerce-api.d.cts +1 -1
  2. package/dist/application/commerce-api.d.ts +1 -1
  3. package/dist/atoms/app/index.d.cts +9 -9
  4. package/dist/atoms/app/index.d.ts +9 -9
  5. package/dist/atoms/app/variant.d.cts +8 -8
  6. package/dist/atoms/app/variant.d.ts +8 -8
  7. package/dist/atoms/chat/chatState.d.cts +20 -20
  8. package/dist/atoms/chat/chatState.d.ts +20 -20
  9. package/dist/atoms/chat/form.d.cts +2 -2
  10. package/dist/atoms/chat/form.d.ts +2 -2
  11. package/dist/atoms/chat/index.cjs +1 -1
  12. package/dist/atoms/chat/index.d.cts +3 -3
  13. package/dist/atoms/chat/index.d.ts +2 -2
  14. package/dist/atoms/chat/index.js +1 -1
  15. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  16. package/dist/atoms/chat/messageQueue.d.cts +6 -6
  17. package/dist/atoms/chat/messageQueue.d.ts +6 -6
  18. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  19. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  20. package/dist/atoms/chat/renderedWidgetRefs.d.ts +3 -3
  21. package/dist/atoms/chat/replies.d.ts +3 -3
  22. package/dist/atoms/chat/suggestions.d.cts +2 -2
  23. package/dist/atoms/chat/suggestions.d.ts +2 -2
  24. package/dist/atoms/envive/enviveConfig.d.cts +13 -13
  25. package/dist/atoms/envive/enviveConfig.d.ts +13 -13
  26. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  27. package/dist/atoms/globalSearch/globalSearch.d.ts +6 -6
  28. package/dist/atoms/org/customerService.d.cts +6 -6
  29. package/dist/atoms/org/customerService.d.ts +6 -6
  30. package/dist/atoms/org/graphqlConfig.d.cts +5 -5
  31. package/dist/atoms/org/graphqlConfig.d.ts +5 -5
  32. package/dist/atoms/org/index.cjs +2 -3
  33. package/dist/atoms/org/index.d.cts +2 -2
  34. package/dist/atoms/org/index.d.ts +2 -2
  35. package/dist/atoms/org/index.js +3 -3
  36. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  37. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  38. package/dist/atoms/org/orgAnalyticsConfig.cjs +1 -3
  39. package/dist/atoms/org/orgAnalyticsConfig.d.cts +7 -8
  40. package/dist/atoms/org/orgAnalyticsConfig.d.ts +7 -8
  41. package/dist/atoms/org/orgAnalyticsConfig.js +2 -3
  42. package/dist/atoms/search/chatSearch.cjs +1 -1
  43. package/dist/atoms/search/chatSearch.d.cts +17 -17
  44. package/dist/atoms/search/chatSearch.d.ts +17 -17
  45. package/dist/atoms/search/chatSearch.js +1 -1
  46. package/dist/atoms/search/searchAPI.cjs +1 -1
  47. package/dist/atoms/search/searchAPI.d.cts +13 -13
  48. package/dist/atoms/search/searchAPI.d.ts +13 -13
  49. package/dist/atoms/search/searchAPI.js +1 -1
  50. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  51. package/dist/contexts/amplitudeContext/amplitudeContext.cjs +1 -5
  52. package/dist/contexts/amplitudeContext/amplitudeContext.js +1 -5
  53. package/dist/contexts/enviveConfigContext/enviveConfigContext.cjs +18 -23
  54. package/dist/contexts/enviveConfigContext/enviveConfigContext.d.cts +10 -12
  55. package/dist/contexts/enviveConfigContext/enviveConfigContext.d.ts +10 -12
  56. package/dist/contexts/enviveConfigContext/enviveConfigContext.js +18 -23
  57. package/dist/contexts/enviveContext/enviveContext.cjs +41 -74
  58. package/dist/contexts/enviveContext/enviveContext.d.cts +15 -32
  59. package/dist/contexts/enviveContext/enviveContext.d.ts +15 -32
  60. package/dist/contexts/enviveContext/enviveContext.js +41 -74
  61. package/dist/contexts/enviveContext/index.d.cts +2 -2
  62. package/dist/contexts/enviveContext/index.d.ts +2 -2
  63. package/dist/contexts/enviveCssContext/enviveCssContext.cjs +31 -16
  64. package/dist/contexts/enviveCssContext/enviveCssContext.js +31 -16
  65. package/dist/contexts/graphqlContext/graphqlContext.cjs +3 -212
  66. package/dist/contexts/graphqlContext/graphqlContext.d.cts +2 -10
  67. package/dist/contexts/graphqlContext/graphqlContext.d.ts +2 -10
  68. package/dist/contexts/graphqlContext/graphqlContext.js +3 -212
  69. package/dist/contexts/graphqlContext/mockV3Config.cjs +31 -16
  70. package/dist/contexts/graphqlContext/mockV3Config.js +31 -16
  71. package/dist/contexts/hardcopyContext/hardcopyContext.cjs +9 -238
  72. package/dist/contexts/hardcopyContext/hardcopyContext.d.cts +5 -17
  73. package/dist/contexts/hardcopyContext/hardcopyContext.d.ts +5 -17
  74. package/dist/contexts/hardcopyContext/hardcopyContext.js +9 -238
  75. package/dist/contexts/hardcopyContext/index.d.cts +3 -2
  76. package/dist/contexts/hardcopyContext/index.d.ts +3 -2
  77. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.cjs +10 -32
  78. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.d.cts +2 -2
  79. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.d.ts +2 -2
  80. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.js +12 -34
  81. package/dist/contexts/pageContext/mapping.d.cts +1 -1
  82. package/dist/contexts/pageContext/mapping.d.ts +1 -1
  83. package/dist/contexts/pageContext/types.d.cts +1 -1
  84. package/dist/contexts/salesAgentContext/chatAPI.cjs +2 -2
  85. package/dist/contexts/salesAgentContext/chatAPI.js +2 -2
  86. package/dist/contexts/salesAgentContext/salesAgentService.cjs +1 -1
  87. package/dist/contexts/salesAgentContext/salesAgentService.js +1 -1
  88. package/dist/contexts/searchContext/searchContext.cjs +1 -1
  89. package/dist/contexts/searchContext/searchContext.js +1 -1
  90. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
  91. package/dist/contexts/types.d.cts +2 -2
  92. package/dist/contexts/types.d.ts +2 -2
  93. package/dist/contexts/typesV3.cjs +31 -16
  94. package/dist/contexts/typesV3.d.cts +62 -31
  95. package/dist/contexts/typesV3.d.ts +62 -31
  96. package/dist/contexts/typesV3.js +31 -16
  97. package/dist/contexts/userIdentityContext/userIdentityContext.cjs +1 -1
  98. package/dist/contexts/userIdentityContext/userIdentityContext.d.cts +3 -3
  99. package/dist/contexts/userIdentityContext/userIdentityContext.d.ts +3 -3
  100. package/dist/contexts/userIdentityContext/userIdentityContext.js +1 -1
  101. package/dist/hooks/ChatToggle/useChatToggle.cjs +1 -1
  102. package/dist/hooks/ChatToggle/useChatToggle.js +1 -1
  103. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
  104. package/dist/hooks/GraphQLConfig/index.cjs +0 -1
  105. package/dist/hooks/GraphQLConfig/index.d.cts +2 -2
  106. package/dist/hooks/GraphQLConfig/index.d.ts +2 -2
  107. package/dist/hooks/GraphQLConfig/index.js +2 -2
  108. package/dist/hooks/GraphQLConfig/useGraphQLConfig.cjs +7 -66
  109. package/dist/hooks/GraphQLConfig/useGraphQLConfig.d.cts +5 -13
  110. package/dist/hooks/GraphQLConfig/useGraphQLConfig.d.ts +5 -13
  111. package/dist/hooks/GraphQLConfig/useGraphQLConfig.js +8 -66
  112. package/dist/hooks/Search/useSearch.cjs +3 -3
  113. package/dist/hooks/Search/useSearch.js +3 -3
  114. package/dist/services/amplitudeService/amplitudeService.cjs +4 -3
  115. package/dist/services/amplitudeService/amplitudeService.d.cts +1 -2
  116. package/dist/services/amplitudeService/amplitudeService.d.ts +1 -2
  117. package/dist/services/amplitudeService/amplitudeService.js +4 -3
  118. package/dist/services/enviveConfigService/enviveConfigService.cjs +25 -5
  119. package/dist/services/enviveConfigService/enviveConfigService.d.cts +24 -5
  120. package/dist/services/enviveConfigService/enviveConfigService.d.ts +24 -5
  121. package/dist/services/enviveConfigService/enviveConfigService.js +25 -6
  122. package/dist/services/enviveConfigService/fetchGraphQLConfig.cjs +181 -0
  123. package/dist/services/enviveConfigService/fetchGraphQLConfig.js +180 -0
  124. package/dist/services/enviveConfigService/index.cjs +2 -1
  125. package/dist/services/enviveConfigService/index.d.cts +2 -2
  126. package/dist/services/enviveConfigService/index.d.ts +2 -2
  127. package/dist/services/enviveConfigService/index.js +2 -2
  128. package/dist/services/hardcopyService/hardcopyService.cjs +232 -0
  129. package/dist/services/hardcopyService/hardcopyService.d.cts +39 -0
  130. package/dist/services/hardcopyService/hardcopyService.d.ts +39 -0
  131. package/dist/services/hardcopyService/hardcopyService.js +229 -0
  132. package/dist/services/hardcopyService/index.cjs +5 -0
  133. package/dist/services/hardcopyService/index.d.cts +2 -0
  134. package/dist/services/hardcopyService/index.d.ts +2 -0
  135. package/dist/services/hardcopyService/index.js +3 -0
  136. package/dist/services/userIdentityService/index.cjs +1 -0
  137. package/dist/services/userIdentityService/index.d.cts +2 -2
  138. package/dist/services/userIdentityService/index.d.ts +2 -2
  139. package/dist/services/userIdentityService/index.js +2 -2
  140. package/dist/services/userIdentityService/userIdentityService.cjs +13 -1
  141. package/dist/services/userIdentityService/userIdentityService.d.cts +12 -2
  142. package/dist/services/userIdentityService/userIdentityService.d.ts +12 -2
  143. package/dist/services/userIdentityService/userIdentityService.js +13 -2
  144. package/dist/types/enviveConfig.d.cts +1 -1
  145. package/dist/types/enviveConfig.d.ts +1 -1
  146. package/package.json +5 -1
  147. package/src/atoms/org/orgAnalyticsConfig.ts +0 -5
  148. package/src/contexts/amplitudeContext/amplitudeContext.tsx +0 -4
  149. package/src/contexts/enviveConfigContext/enviveConfigContext.tsx +37 -49
  150. package/src/contexts/enviveContext/enviveContext.tsx +72 -134
  151. package/src/contexts/enviveCssContext/enviveCssContext.tsx +32 -17
  152. package/src/contexts/graphqlContext/__tests__/graphqlContext.test.tsx +3 -36
  153. package/src/contexts/graphqlContext/graphqlContext.tsx +4 -304
  154. package/src/contexts/graphqlContext/mockV3Config.ts +30 -15
  155. package/src/contexts/hardcopyContext/hardcopyContext.tsx +12 -270
  156. package/src/contexts/newOrgConfigContext/__tests__/newOrgConfigContext.test.tsx +54 -478
  157. package/src/contexts/newOrgConfigContext/newOrgConfigContext.tsx +9 -26
  158. package/src/contexts/typesV3.ts +61 -30
  159. package/src/contexts/userIdentityContext/userIdentityContext.tsx +2 -2
  160. package/src/hooks/GraphQLConfig/useGraphQLConfig.ts +2 -62
  161. package/src/hooks/Search/__tests__/useSearch.test.tsx +2 -2
  162. package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +3 -5
  163. package/src/services/amplitudeService/amplitudeService.ts +5 -3
  164. package/src/services/enviveConfigService/__tests__/fetchGraphQLConfig.test.ts +425 -0
  165. package/src/services/enviveConfigService/enviveConfigService.ts +41 -13
  166. package/src/services/enviveConfigService/fetchGraphQLConfig.ts +225 -0
  167. package/src/services/hardcopyService/__tests__/hardcopyService.test.ts +367 -0
  168. package/src/services/hardcopyService/hardcopyService.ts +271 -0
  169. package/src/services/hardcopyService/index.ts +1 -0
  170. package/src/services/userIdentityService/userIdentityService.ts +18 -0
@@ -0,0 +1,232 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_logger = require('../../application/logging/logger.cjs');
3
+ const require_urlsParser = require('../../application/utils/urlsParser.cjs');
4
+ const require_snakeToCamelTransformer = require('../../application/models/utils/snakeToCamelTransformer.cjs');
5
+ const require_contexts_typesV3 = require('../../contexts/typesV3.cjs');
6
+ const require_eventNames = require('../amplitudeService/eventNames.cjs');
7
+ require('../../application/utils/index.cjs');
8
+ const require_application_commerce_api = require('../../application/commerce-api.cjs');
9
+ require('../amplitudeService/index.cjs');
10
+ let uuid = require("uuid");
11
+
12
+ //#region src/services/hardcopyService/hardcopyService.ts
13
+ const logger = new require_logger.default("hardcopyService");
14
+ const MOCK_HARDCOPY_RESPONSE = {
15
+ [require_contexts_typesV3.WidgetTypeV3.PromptCarouselV3]: {
16
+ responseId: (0, uuid.v4)(),
17
+ language: "en",
18
+ values: { promptButtonTexts: [
19
+ "What are your best sellers?",
20
+ "Show me summer dresses",
21
+ "Do you have free shipping?",
22
+ "What sizes are available?",
23
+ "Can I return items?"
24
+ ] }
25
+ },
26
+ [require_contexts_typesV3.WidgetTypeV3.TitledPromptCarouselV3]: {
27
+ responseId: "mock-response-id",
28
+ language: "en",
29
+ values: {
30
+ titleLabel: "Need some help?",
31
+ promptButtonTexts: [
32
+ "What are your best sellers?",
33
+ "Show me summer dresses",
34
+ "Do you have free shipping?",
35
+ "What sizes are available?",
36
+ "Can I return items?"
37
+ ]
38
+ }
39
+ },
40
+ [require_contexts_typesV3.WidgetTypeV3.SocialProofV3]: {
41
+ responseId: "mock-response-id",
42
+ language: "en",
43
+ values: {
44
+ titleLabel: "Shopping Assistant",
45
+ numberOfCustomersText: "123 customers",
46
+ customerQueryText: "found what they were looking for...",
47
+ primaryButtonText: "Start shopping",
48
+ secondaryButtonTitleText: "Popular searches",
49
+ secondaryButtonTexts: [
50
+ "Why should I buy from you?",
51
+ "How do I return an item?",
52
+ "New arrivals",
53
+ "Sale items",
54
+ "Popular items"
55
+ ],
56
+ textFieldPlaceholderText: "Ask me anything..."
57
+ }
58
+ },
59
+ [require_contexts_typesV3.WidgetTypeV3.TypingAnimationV3]: {
60
+ responseId: "mock-response-id",
61
+ language: "en",
62
+ values: {
63
+ titleLabel: "Shopping Assistant",
64
+ headlineText: "Need help finding",
65
+ animatedTextSequence: [
66
+ "the perfect gift for your loved ones?",
67
+ "something special for the holidays?",
68
+ "the ideal present for someone special?"
69
+ ],
70
+ hintText: "Ask me anything",
71
+ promptButtonTexts: [
72
+ "What are your best sellers?",
73
+ "Show me summer dresses",
74
+ "Do you have free shipping?",
75
+ "What sizes are available?"
76
+ ],
77
+ textFieldAriaLabel: "Ask me anything"
78
+ }
79
+ },
80
+ [require_contexts_typesV3.WidgetTypeV3.ChatPreviewComparisonV3]: {
81
+ responseId: "mock-response-id",
82
+ language: "en",
83
+ values: {
84
+ titleLabel: "Shopping Assistant",
85
+ headlineText: "Need help comparing?",
86
+ textFieldPlaceholderText: "Ask me anything..."
87
+ }
88
+ },
89
+ [require_contexts_typesV3.WidgetTypeV3.ChatPreviewLoadingV3]: {
90
+ responseId: "mock-response-id",
91
+ language: "en",
92
+ values: {
93
+ titleLabel: "Shopping Assistant",
94
+ textFieldPlaceholderText: "Ask me anything..."
95
+ }
96
+ },
97
+ [require_contexts_typesV3.WidgetTypeV3.ChatPreviewV3]: {
98
+ responseId: "mock-response-id",
99
+ language: "en",
100
+ values: {
101
+ titleLabel: "Shopping Assistant",
102
+ textFieldPlaceholderText: "Ask me anything..."
103
+ }
104
+ },
105
+ [require_contexts_typesV3.WidgetTypeV3.PromptButtonCarouselWithImageV3]: {
106
+ responseId: "mock-response-id",
107
+ language: "en",
108
+ values: {
109
+ titleLabel: "Need some help?",
110
+ promptButtonsTexts: [
111
+ "Help me find a product",
112
+ "What's on your mind?",
113
+ "Talk to a human"
114
+ ],
115
+ textFieldPlaceholderText: "Ask me anything..."
116
+ }
117
+ },
118
+ [require_contexts_typesV3.WidgetTypeV3.ProductCardV3]: {
119
+ responseId: "mock-response-id",
120
+ language: "en",
121
+ values: {
122
+ headline: "Discover Your Perfect Style",
123
+ animatedText: [
124
+ "the perfect outfit for any occasion",
125
+ "trending fashion that fits your lifestyle",
126
+ "quality pieces that last"
127
+ ],
128
+ prompts: [
129
+ "What are your best sellers?",
130
+ "Show me summer dresses",
131
+ "Do you have free shipping?",
132
+ "What sizes are available?",
133
+ "Can I return items?"
134
+ ],
135
+ placeholder: "Ask me anything..."
136
+ }
137
+ },
138
+ [require_contexts_typesV3.WidgetTypeV3.FloatingChatV3]: {
139
+ responseId: "mock-response-id",
140
+ language: "en",
141
+ values: {
142
+ welcomeMessageTitle: "Welcome to Envive AI",
143
+ welcomeMessageText: "Your personal shopper trained on the collective knowledge of thousands of real experts!",
144
+ chatFooterTextFieldPlaceholderText: "Ask me anything...",
145
+ disclaimerText: "This is a disclaimer...",
146
+ leftToggleLabel: "Shop with AI",
147
+ rightToggleLabel: "Live support"
148
+ }
149
+ },
150
+ [require_contexts_typesV3.WidgetTypeV3.FullPageSalesAgentV3]: {
151
+ responseId: "mock-response-id",
152
+ language: "en",
153
+ values: {
154
+ welcomeMessageTitle: "Welcome to Envive AI",
155
+ welcomeMessageText: "Your personal shopper trained on the collective knowledge of thousands of real experts!",
156
+ chatFooterTextFieldPlaceholderText: "Ask me anything...",
157
+ disclaimerText: "This is a disclaimer..."
158
+ }
159
+ }
160
+ };
161
+ const convertToHardcopyResponse = (response) => ({
162
+ responseId: response.responseId,
163
+ language: response.language,
164
+ rawValues: response.values,
165
+ values: Object.fromEntries(Object.entries(response.values).map(([key, value]) => [require_snakeToCamelTransformer.toCamelCase(key), value.length === 1 ? value[0].value : value.map((v) => v.value)]))
166
+ });
167
+ var HardcopyService = class {
168
+ constructor(config) {
169
+ this.config = config;
170
+ }
171
+ async getHardcopy(request) {
172
+ const overrideConfigVersion = require_urlsParser.getQueryParam("spiffy_config_version") || require_urlsParser.getQueryParam("envive_config_version") || void 0;
173
+ const widgetTextRequest = {
174
+ requestId: (0, uuid.v4)(),
175
+ widgetType: request.widgetType,
176
+ context: this.config.getAppDetails(),
177
+ featureFlags: this.config.getFeatureFlags(),
178
+ language: navigator.languages[0] || "en",
179
+ overrideConfigVersion,
180
+ url: window.location.href
181
+ };
182
+ this.config.trackEvent?.({
183
+ eventName: require_eventNames.EnviveMetricsEventName.WidgetTextRequest,
184
+ eventProps: {
185
+ widget_type: request.widgetType,
186
+ request_id: widgetTextRequest.requestId
187
+ }
188
+ });
189
+ try {
190
+ const response = await require_application_commerce_api.default.getHardcopy(widgetTextRequest);
191
+ if (response) {
192
+ const convertedResponse = convertToHardcopyResponse(response);
193
+ logger.logDebug("converted response", convertedResponse);
194
+ this.config.trackEvent?.({
195
+ eventName: require_eventNames.EnviveMetricsEventName.WidgetTextResponse,
196
+ eventProps: {
197
+ widget_type: request.widgetType,
198
+ response_id: response.responseId,
199
+ widget_text: response.values,
200
+ request_id: widgetTextRequest.requestId
201
+ }
202
+ });
203
+ return convertedResponse;
204
+ }
205
+ } catch (error) {
206
+ logger.logError("error getting hardcopy from backend", error);
207
+ }
208
+ const mockResponse = MOCK_HARDCOPY_RESPONSE[request.widgetType];
209
+ if (mockResponse) {
210
+ logger.logDebug("no real response, using mock", mockResponse);
211
+ return mockResponse;
212
+ }
213
+ throw new Error(`No hardcopy response found for widget type: ${request.widgetType}`);
214
+ }
215
+ };
216
+ var MockHardcopyService = class {
217
+ constructor(overrides = {}) {
218
+ this.overrides = overrides;
219
+ }
220
+ async getHardcopy(request) {
221
+ const fallbackWidgetType = request.widgetType === require_contexts_typesV3.WidgetTypeV3.ProductCardV3 ? require_contexts_typesV3.WidgetTypeV3.ImagePromptCardV3 : request.widgetType;
222
+ const response = this.overrides[request.widgetType] ?? this.overrides[fallbackWidgetType] ?? MOCK_HARDCOPY_RESPONSE[request.widgetType];
223
+ if (!response) throw new Error(`No hardcopy response found for widget type: ${request.widgetType}`);
224
+ return response;
225
+ }
226
+ };
227
+
228
+ //#endregion
229
+ exports.HardcopyService = HardcopyService;
230
+ exports.MOCK_HARDCOPY_RESPONSE = MOCK_HARDCOPY_RESPONSE;
231
+ exports.MockHardcopyService = MockHardcopyService;
232
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZGNvcHlTZXJ2aWNlLmNqcyIsIm5hbWVzIjpbIkxvZ2dlciIsIk1PQ0tfSEFSRENPUFlfUkVTUE9OU0U6IFBhcnRpYWw8UmVjb3JkPFdpZGdldFR5cGVWMywgSGFyZGNvcHlSZXNwb25zZT4+IiwiV2lkZ2V0VHlwZVYzIiwidG9DYW1lbENhc2UiLCJjb25maWc6IEhhcmRjb3B5U2VydmljZUNvbmZpZyIsImdldFF1ZXJ5UGFyYW0iLCJ3aWRnZXRUZXh0UmVxdWVzdDogV2lkZ2V0VGV4dFJlcXVlc3QiLCJFbnZpdmVNZXRyaWNzRXZlbnROYW1lIiwiQ29tbWVyY2VBcGlDbGllbnQiLCJvdmVycmlkZXM6IFBhcnRpYWw8UmVjb3JkPFdpZGdldFR5cGVWMywgSGFyZGNvcHlSZXNwb25zZT4+Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2hhcmRjb3B5U2VydmljZS9oYXJkY29weVNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGknO1xuaW1wb3J0IHsgV2lkZ2V0U3RyaW5nLCBXaWRnZXRUZXh0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvd2lkZ2V0VGV4dCc7XG5pbXBvcnQgeyBXaWRnZXRUZXh0UmVxdWVzdCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3dpZGdldFRleHRSZXF1ZXN0JztcbmltcG9ydCB7IHRvQ2FtZWxDYXNlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zbmFrZVRvQ2FtZWxUcmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBnZXRRdWVyeVBhcmFtIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL3V0aWxzJztcbmltcG9ydCB7IFVzZXJFdmVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgQXBwRGV0YWlscyB9IGZyb20gJ3NyYy9hdG9tcy9hcHAnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzVjMnO1xuaW1wb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgVHJhY2tFdmVudFBhcmFtcyB9IGZyb20gJy4uL2FtcGxpdHVkZVNlcnZpY2UnO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCdoYXJkY29weVNlcnZpY2UnKTtcblxuZXhwb3J0IGludGVyZmFjZSBIYXJkY29weVJlcXVlc3Qge1xuICB3aWRnZXRUeXBlOiBXaWRnZXRUeXBlVjM7XG4gIHVzZXJFdmVudDogVXNlckV2ZW50O1xufVxuXG5leHBvcnQgdHlwZSBIYXJkY29weVJlc3BvbnNlID0ge1xuICByZXNwb25zZUlkOiBzdHJpbmc7XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIHJhd1ZhbHVlcz86IFJlY29yZDxzdHJpbmcsIFdpZGdldFN0cmluZyB8IFdpZGdldFN0cmluZ1tdPjtcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElIYXJkY29weVNlcnZpY2Uge1xuICBnZXRIYXJkY29weShyZXF1ZXN0OiBIYXJkY29weVJlcXVlc3QpOiBQcm9taXNlPEhhcmRjb3B5UmVzcG9uc2U+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhhcmRjb3B5U2VydmljZUNvbmZpZyB7XG4gIGdldEFwcERldGFpbHM6ICgpID0+IEFwcERldGFpbHM7XG4gIGdldEZlYXR1cmVGbGFnczogKCkgPT4gUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gIHRyYWNrRXZlbnQ/OiAocGFyYW1zOiBUcmFja0V2ZW50UGFyYW1zKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vLyBTYW1wbGUgcmVzcG9uc2VzIHVzZWQgYm90aCBhcyBmYWxsYmFjayB3aGVuIHRoZSBiYWNrZW5kIGZhaWxzIGFuZCBieSBNb2NrSGFyZGNvcHlTZXJ2aWNlLlxuZXhwb3J0IGNvbnN0IE1PQ0tfSEFSRENPUFlfUkVTUE9OU0U6IFBhcnRpYWw8UmVjb3JkPFdpZGdldFR5cGVWMywgSGFyZGNvcHlSZXNwb25zZT4+ID0ge1xuICBbV2lkZ2V0VHlwZVYzLlByb21wdENhcm91c2VsVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogdXVpZCgpLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuVGl0bGVkUHJvbXB0Q2Fyb3VzZWxWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnTmVlZCBzb21lIGhlbHA/JyxcbiAgICAgIHByb21wdEJ1dHRvblRleHRzOiBbXG4gICAgICAgICdXaGF0IGFyZSB5b3VyIGJlc3Qgc2VsbGVycz8nLFxuICAgICAgICAnU2hvdyBtZSBzdW1tZXIgZHJlc3NlcycsXG4gICAgICAgICdEbyB5b3UgaGF2ZSBmcmVlIHNoaXBwaW5nPycsXG4gICAgICAgICdXaGF0IHNpemVzIGFyZSBhdmFpbGFibGU/JyxcbiAgICAgICAgJ0NhbiBJIHJldHVybiBpdGVtcz8nLFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlNvY2lhbFByb29mVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ1Nob3BwaW5nIEFzc2lzdGFudCcsXG4gICAgICBudW1iZXJPZkN1c3RvbWVyc1RleHQ6ICcxMjMgY3VzdG9tZXJzJyxcbiAgICAgIGN1c3RvbWVyUXVlcnlUZXh0OiAnZm91bmQgd2hhdCB0aGV5IHdlcmUgbG9va2luZyBmb3IuLi4nLFxuICAgICAgcHJpbWFyeUJ1dHRvblRleHQ6ICdTdGFydCBzaG9wcGluZycsXG4gICAgICBzZWNvbmRhcnlCdXR0b25UaXRsZVRleHQ6ICdQb3B1bGFyIHNlYXJjaGVzJyxcbiAgICAgIHNlY29uZGFyeUJ1dHRvblRleHRzOiBbXG4gICAgICAgICdXaHkgc2hvdWxkIEkgYnV5IGZyb20geW91PycsXG4gICAgICAgICdIb3cgZG8gSSByZXR1cm4gYW4gaXRlbT8nLFxuICAgICAgICAnTmV3IGFycml2YWxzJyxcbiAgICAgICAgJ1NhbGUgaXRlbXMnLFxuICAgICAgICAnUG9wdWxhciBpdGVtcycsXG4gICAgICBdLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlR5cGluZ0FuaW1hdGlvblYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdTaG9wcGluZyBBc3Npc3RhbnQnLFxuICAgICAgaGVhZGxpbmVUZXh0OiAnTmVlZCBoZWxwIGZpbmRpbmcnLFxuICAgICAgYW5pbWF0ZWRUZXh0U2VxdWVuY2U6IFtcbiAgICAgICAgJ3RoZSBwZXJmZWN0IGdpZnQgZm9yIHlvdXIgbG92ZWQgb25lcz8nLFxuICAgICAgICAnc29tZXRoaW5nIHNwZWNpYWwgZm9yIHRoZSBob2xpZGF5cz8nLFxuICAgICAgICAndGhlIGlkZWFsIHByZXNlbnQgZm9yIHNvbWVvbmUgc3BlY2lhbD8nLFxuICAgICAgXSxcbiAgICAgIGhpbnRUZXh0OiAnQXNrIG1lIGFueXRoaW5nJyxcbiAgICAgIHByb21wdEJ1dHRvblRleHRzOiBbXG4gICAgICAgICdXaGF0IGFyZSB5b3VyIGJlc3Qgc2VsbGVycz8nLFxuICAgICAgICAnU2hvdyBtZSBzdW1tZXIgZHJlc3NlcycsXG4gICAgICAgICdEbyB5b3UgaGF2ZSBmcmVlIHNoaXBwaW5nPycsXG4gICAgICAgICdXaGF0IHNpemVzIGFyZSBhdmFpbGFibGU/JyxcbiAgICAgIF0sXG4gICAgICB0ZXh0RmllbGRBcmlhTGFiZWw6ICdBc2sgbWUgYW55dGhpbmcnLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuQ2hhdFByZXZpZXdDb21wYXJpc29uVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ1Nob3BwaW5nIEFzc2lzdGFudCcsXG4gICAgICBoZWFkbGluZVRleHQ6ICdOZWVkIGhlbHAgY29tcGFyaW5nPycsXG4gICAgICB0ZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuQ2hhdFByZXZpZXdMb2FkaW5nVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ1Nob3BwaW5nIEFzc2lzdGFudCcsXG4gICAgICB0ZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuQ2hhdFByZXZpZXdWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5Qcm9tcHRCdXR0b25DYXJvdXNlbFdpdGhJbWFnZVYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdOZWVkIHNvbWUgaGVscD8nLFxuICAgICAgcHJvbXB0QnV0dG9uc1RleHRzOiBbJ0hlbHAgbWUgZmluZCBhIHByb2R1Y3QnLCBcIldoYXQncyBvbiB5b3VyIG1pbmQ/XCIsICdUYWxrIHRvIGEgaHVtYW4nXSxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5Qcm9kdWN0Q2FyZFYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIGhlYWRsaW5lOiAnRGlzY292ZXIgWW91ciBQZXJmZWN0IFN0eWxlJyxcbiAgICAgIGFuaW1hdGVkVGV4dDogW1xuICAgICAgICAndGhlIHBlcmZlY3Qgb3V0Zml0IGZvciBhbnkgb2NjYXNpb24nLFxuICAgICAgICAndHJlbmRpbmcgZmFzaGlvbiB0aGF0IGZpdHMgeW91ciBsaWZlc3R5bGUnLFxuICAgICAgICAncXVhbGl0eSBwaWVjZXMgdGhhdCBsYXN0JyxcbiAgICAgIF0sXG4gICAgICBwcm9tcHRzOiBbXG4gICAgICAgICdXaGF0IGFyZSB5b3VyIGJlc3Qgc2VsbGVycz8nLFxuICAgICAgICAnU2hvdyBtZSBzdW1tZXIgZHJlc3NlcycsXG4gICAgICAgICdEbyB5b3UgaGF2ZSBmcmVlIHNoaXBwaW5nPycsXG4gICAgICAgICdXaGF0IHNpemVzIGFyZSBhdmFpbGFibGU/JyxcbiAgICAgICAgJ0NhbiBJIHJldHVybiBpdGVtcz8nLFxuICAgICAgXSxcbiAgICAgIHBsYWNlaG9sZGVyOiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLkZsb2F0aW5nQ2hhdFYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGl0bGU6ICdXZWxjb21lIHRvIEVudml2ZSBBSScsXG4gICAgICB3ZWxjb21lTWVzc2FnZVRleHQ6XG4gICAgICAgICdZb3VyIHBlcnNvbmFsIHNob3BwZXIgdHJhaW5lZCBvbiB0aGUgY29sbGVjdGl2ZSBrbm93bGVkZ2Ugb2YgdGhvdXNhbmRzIG9mIHJlYWwgZXhwZXJ0cyEnLFxuICAgICAgY2hhdEZvb3RlclRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgICBkaXNjbGFpbWVyVGV4dDogJ1RoaXMgaXMgYSBkaXNjbGFpbWVyLi4uJyxcbiAgICAgIGxlZnRUb2dnbGVMYWJlbDogJ1Nob3Agd2l0aCBBSScsXG4gICAgICByaWdodFRvZ2dsZUxhYmVsOiAnTGl2ZSBzdXBwb3J0JyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLkZ1bGxQYWdlU2FsZXNBZ2VudFYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGl0bGU6ICdXZWxjb21lIHRvIEVudml2ZSBBSScsXG4gICAgICB3ZWxjb21lTWVzc2FnZVRleHQ6XG4gICAgICAgICdZb3VyIHBlcnNvbmFsIHNob3BwZXIgdHJhaW5lZCBvbiB0aGUgY29sbGVjdGl2ZSBrbm93bGVkZ2Ugb2YgdGhvdXNhbmRzIG9mIHJlYWwgZXhwZXJ0cyEnLFxuICAgICAgY2hhdEZvb3RlclRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgICBkaXNjbGFpbWVyVGV4dDogJ1RoaXMgaXMgYSBkaXNjbGFpbWVyLi4uJyxcbiAgICB9LFxuICB9LFxufTtcblxuY29uc3QgY29udmVydFRvSGFyZGNvcHlSZXNwb25zZSA9IChyZXNwb25zZTogV2lkZ2V0VGV4dCk6IEhhcmRjb3B5UmVzcG9uc2UgPT4gKHtcbiAgcmVzcG9uc2VJZDogcmVzcG9uc2UucmVzcG9uc2VJZCxcbiAgbGFuZ3VhZ2U6IHJlc3BvbnNlLmxhbmd1YWdlLFxuICByYXdWYWx1ZXM6IHJlc3BvbnNlLnZhbHVlcyxcbiAgdmFsdWVzOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UudmFsdWVzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAgdG9DYW1lbENhc2Uoa2V5KSxcbiAgICAgIHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdLnZhbHVlIDogdmFsdWUubWFwKHYgPT4gdi52YWx1ZSksXG4gICAgXSksXG4gICksXG59KTtcblxuZXhwb3J0IGNsYXNzIEhhcmRjb3B5U2VydmljZSBpbXBsZW1lbnRzIElIYXJkY29weVNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogSGFyZGNvcHlTZXJ2aWNlQ29uZmlnKSB7fVxuXG4gIGFzeW5jIGdldEhhcmRjb3B5KHJlcXVlc3Q6IEhhcmRjb3B5UmVxdWVzdCk6IFByb21pc2U8SGFyZGNvcHlSZXNwb25zZT4ge1xuICAgIGNvbnN0IG92ZXJyaWRlQ29uZmlnVmVyc2lvbiA9XG4gICAgICBnZXRRdWVyeVBhcmFtKCdzcGlmZnlfY29uZmlnX3ZlcnNpb24nKSB8fCBnZXRRdWVyeVBhcmFtKCdlbnZpdmVfY29uZmlnX3ZlcnNpb24nKSB8fCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB3aWRnZXRUZXh0UmVxdWVzdDogV2lkZ2V0VGV4dFJlcXVlc3QgPSB7XG4gICAgICByZXF1ZXN0SWQ6IHV1aWQoKSxcbiAgICAgIHdpZGdldFR5cGU6IHJlcXVlc3Qud2lkZ2V0VHlwZSxcbiAgICAgIGNvbnRleHQ6IHRoaXMuY29uZmlnLmdldEFwcERldGFpbHMoKSxcbiAgICAgIGZlYXR1cmVGbGFnczogdGhpcy5jb25maWcuZ2V0RmVhdHVyZUZsYWdzKCksXG4gICAgICBsYW5ndWFnZTogbmF2aWdhdG9yLmxhbmd1YWdlc1swXSB8fCAnZW4nLFxuICAgICAgb3ZlcnJpZGVDb25maWdWZXJzaW9uLFxuICAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICB9O1xuXG4gICAgdGhpcy5jb25maWcudHJhY2tFdmVudD8uKHtcbiAgICAgIGV2ZW50TmFtZTogRW52aXZlTWV0cmljc0V2ZW50TmFtZS5XaWRnZXRUZXh0UmVxdWVzdCxcbiAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgd2lkZ2V0X3R5cGU6IHJlcXVlc3Qud2lkZ2V0VHlwZSxcbiAgICAgICAgcmVxdWVzdF9pZDogd2lkZ2V0VGV4dFJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEhhcmRjb3B5KHdpZGdldFRleHRSZXF1ZXN0KTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSZXNwb25zZSA9IGNvbnZlcnRUb0hhcmRjb3B5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICBsb2dnZXIubG9nRGVidWcoJ2NvbnZlcnRlZCByZXNwb25zZScsIGNvbnZlcnRlZFJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5jb25maWcudHJhY2tFdmVudD8uKHtcbiAgICAgICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dFJlc3BvbnNlLFxuICAgICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICAgIHdpZGdldF90eXBlOiByZXF1ZXN0LndpZGdldFR5cGUsXG4gICAgICAgICAgICByZXNwb25zZV9pZDogcmVzcG9uc2UucmVzcG9uc2VJZCxcbiAgICAgICAgICAgIHdpZGdldF90ZXh0OiByZXNwb25zZS52YWx1ZXMsXG4gICAgICAgICAgICByZXF1ZXN0X2lkOiB3aWRnZXRUZXh0UmVxdWVzdC5yZXF1ZXN0SWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb252ZXJ0ZWRSZXNwb25zZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdlcnJvciBnZXR0aW5nIGhhcmRjb3B5IGZyb20gYmFja2VuZCcsIGVycm9yKTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2NrUmVzcG9uc2UgPSBNT0NLX0hBUkRDT1BZX1JFU1BPTlNFW3JlcXVlc3Qud2lkZ2V0VHlwZV07XG4gICAgaWYgKG1vY2tSZXNwb25zZSkge1xuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdubyByZWFsIHJlc3BvbnNlLCB1c2luZyBtb2NrJywgbW9ja1Jlc3BvbnNlKTtcbiAgICAgIHJldHVybiBtb2NrUmVzcG9uc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgTm8gaGFyZGNvcHkgcmVzcG9uc2UgZm91bmQgZm9yIHdpZGdldCB0eXBlOiAke3JlcXVlc3Qud2lkZ2V0VHlwZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW9ja0hhcmRjb3B5U2VydmljZSBpbXBsZW1lbnRzIElIYXJkY29weVNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG92ZXJyaWRlczogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4gPSB7fSkge31cblxuICBhc3luYyBnZXRIYXJkY29weShyZXF1ZXN0OiBIYXJkY29weVJlcXVlc3QpOiBQcm9taXNlPEhhcmRjb3B5UmVzcG9uc2U+IHtcbiAgICBjb25zdCBmYWxsYmFja1dpZGdldFR5cGUgPVxuICAgICAgcmVxdWVzdC53aWRnZXRUeXBlID09PSBXaWRnZXRUeXBlVjMuUHJvZHVjdENhcmRWM1xuICAgICAgICA/IFdpZGdldFR5cGVWMy5JbWFnZVByb21wdENhcmRWM1xuICAgICAgICA6IHJlcXVlc3Qud2lkZ2V0VHlwZTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID1cbiAgICAgIHRoaXMub3ZlcnJpZGVzW3JlcXVlc3Qud2lkZ2V0VHlwZV0gPz9cbiAgICAgIHRoaXMub3ZlcnJpZGVzW2ZhbGxiYWNrV2lkZ2V0VHlwZV0gPz9cbiAgICAgIE1PQ0tfSEFSRENPUFlfUkVTUE9OU0VbcmVxdWVzdC53aWRnZXRUeXBlXTtcblxuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gaGFyZGNvcHkgcmVzcG9uc2UgZm91bmQgZm9yIHdpZGdldCB0eXBlOiAke3JlcXVlc3Qud2lkZ2V0VHlwZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVlBLE1BQU0sU0FBUyxJQUFJQSx1QkFBTyxrQkFBa0I7QUF5QjVDLE1BQWFDLHlCQUEwRTtFQUNwRkMsc0NBQWEsbUJBQW1CO0VBQy9CLDBCQUFrQjtFQUNsQixVQUFVO0VBQ1YsUUFBUSxFQUNOLG1CQUFtQjtHQUNqQjtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0QsRUFDRjtFQUNGO0VBQ0FBLHNDQUFhLHlCQUF5QjtFQUNyQyxZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixZQUFZO0dBQ1osbUJBQW1CO0lBQ2pCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtHQUNGO0VBQ0Y7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
@@ -0,0 +1,39 @@
1
+ import { WidgetTypeV3 } from "../../contexts/typesV3.cjs";
2
+ import { WidgetString } from "../../application/models/api/widgetText.cjs";
3
+ import { AppDetails } from "../../atoms/app/index.cjs";
4
+ import { TrackEventParams } from "../amplitudeService/amplitudeService.cjs";
5
+ import { UserEvent } from "../../application/models/api/userEvent.cjs";
6
+
7
+ //#region src/services/hardcopyService/hardcopyService.d.ts
8
+ interface HardcopyRequest {
9
+ widgetType: WidgetTypeV3;
10
+ userEvent: UserEvent;
11
+ }
12
+ type HardcopyResponse = {
13
+ responseId: string;
14
+ language: string;
15
+ rawValues?: Record<string, WidgetString | WidgetString[]>;
16
+ values: Record<string, string | string[]>;
17
+ };
18
+ interface IHardcopyService {
19
+ getHardcopy(request: HardcopyRequest): Promise<HardcopyResponse>;
20
+ }
21
+ interface HardcopyServiceConfig {
22
+ getAppDetails: () => AppDetails;
23
+ getFeatureFlags: () => Record<string, boolean>;
24
+ trackEvent?: (params: TrackEventParams) => Promise<void>;
25
+ }
26
+ declare const MOCK_HARDCOPY_RESPONSE: Partial<Record<WidgetTypeV3, HardcopyResponse>>;
27
+ declare class HardcopyService implements IHardcopyService {
28
+ private config;
29
+ constructor(config: HardcopyServiceConfig);
30
+ getHardcopy(request: HardcopyRequest): Promise<HardcopyResponse>;
31
+ }
32
+ declare class MockHardcopyService implements IHardcopyService {
33
+ private overrides;
34
+ constructor(overrides?: Partial<Record<WidgetTypeV3, HardcopyResponse>>);
35
+ getHardcopy(request: HardcopyRequest): Promise<HardcopyResponse>;
36
+ }
37
+ //#endregion
38
+ export { HardcopyRequest, HardcopyResponse, HardcopyService, HardcopyServiceConfig, IHardcopyService, MOCK_HARDCOPY_RESPONSE, MockHardcopyService };
39
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZGNvcHlTZXJ2aWNlLmQuY3RzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9oYXJkY29weVNlcnZpY2UvaGFyZGNvcHlTZXJ2aWNlLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2lkZ2V0U3RyaW5nIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvd2lkZ2V0VGV4dCc7XG5pbXBvcnQgeyBVc2VyRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IEFwcERldGFpbHMgfSBmcm9tICdzcmMvYXRvbXMvYXBwJztcbmltcG9ydCB7IFdpZGdldFR5cGVWMyB9IGZyb20gJ3NyYy9jb250ZXh0cy90eXBlc1YzJztcbmltcG9ydCB7IFRyYWNrRXZlbnRQYXJhbXMgfSBmcm9tICcuLi9hbXBsaXR1ZGVTZXJ2aWNlJztcbmV4cG9ydCBpbnRlcmZhY2UgSGFyZGNvcHlSZXF1ZXN0IHtcbiAgICB3aWRnZXRUeXBlOiBXaWRnZXRUeXBlVjM7XG4gICAgdXNlckV2ZW50OiBVc2VyRXZlbnQ7XG59XG5leHBvcnQgdHlwZSBIYXJkY29weVJlc3BvbnNlID0ge1xuICAgIHJlc3BvbnNlSWQ6IHN0cmluZztcbiAgICBsYW5ndWFnZTogc3RyaW5nO1xuICAgIHJhd1ZhbHVlcz86IFJlY29yZDxzdHJpbmcsIFdpZGdldFN0cmluZyB8IFdpZGdldFN0cmluZ1tdPjtcbiAgICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPjtcbn07XG5leHBvcnQgaW50ZXJmYWNlIElIYXJkY29weVNlcnZpY2Uge1xuICAgIGdldEhhcmRjb3B5KHJlcXVlc3Q6IEhhcmRjb3B5UmVxdWVzdCk6IFByb21pc2U8SGFyZGNvcHlSZXNwb25zZT47XG59XG5leHBvcnQgaW50ZXJmYWNlIEhhcmRjb3B5U2VydmljZUNvbmZpZyB7XG4gICAgZ2V0QXBwRGV0YWlsczogKCkgPT4gQXBwRGV0YWlscztcbiAgICBnZXRGZWF0dXJlRmxhZ3M6ICgpID0+IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICAgIHRyYWNrRXZlbnQ/OiAocGFyYW1zOiBUcmFja0V2ZW50UGFyYW1zKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj47XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBIYXJkY29weVNlcnZpY2UgaW1wbGVtZW50cyBJSGFyZGNvcHlTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGNvbmZpZztcbiAgICBjb25zdHJ1Y3Rvcihjb25maWc6IEhhcmRjb3B5U2VydmljZUNvbmZpZyk7XG4gICAgZ2V0SGFyZGNvcHkocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPjtcbn1cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIE1vY2tIYXJkY29weVNlcnZpY2UgaW1wbGVtZW50cyBJSGFyZGNvcHlTZXJ2aWNlIHtcbiAgICBwcml2YXRlIG92ZXJyaWRlcztcbiAgICBjb25zdHJ1Y3RvcihvdmVycmlkZXM/OiBQYXJ0aWFsPFJlY29yZDxXaWRnZXRUeXBlVjMsIEhhcmRjb3B5UmVzcG9uc2U+Pik7XG4gICAgZ2V0SGFyZGNvcHkocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUtBLElBQVcsa0JBQWtCO0NBQUM7T0FBRztPQUFBO0NBQUE7QUFDakMsSUFBVyxtQkFBaUI7Q0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO0NBQUE7QUFDNUIsSUFBVyxtQkFBYTtDQUFBO09BQUE7T0FBQTtPQUFBO0NBQUE7QUFDeEIsSUFBQSx3QkFBQTtDQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQTtBQUNBLElBQVcseUJBQW9CO0NBQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtDQUFBO0FBQy9CLElBQVcsa0JBQVc7Q0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQTtBQUN0QixJQUFXLHNCQUFTO0NBQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO0NBQUEifQ==
@@ -0,0 +1,39 @@
1
+ import { WidgetTypeV3 } from "../../contexts/typesV3.js";
2
+ import { WidgetString } from "../../application/models/api/widgetText.js";
3
+ import { AppDetails } from "../../atoms/app/index.js";
4
+ import { TrackEventParams } from "../amplitudeService/amplitudeService.js";
5
+ import { UserEvent } from "../../application/models/api/userEvent.js";
6
+
7
+ //#region src/services/hardcopyService/hardcopyService.d.ts
8
+ interface HardcopyRequest {
9
+ widgetType: WidgetTypeV3;
10
+ userEvent: UserEvent;
11
+ }
12
+ type HardcopyResponse = {
13
+ responseId: string;
14
+ language: string;
15
+ rawValues?: Record<string, WidgetString | WidgetString[]>;
16
+ values: Record<string, string | string[]>;
17
+ };
18
+ interface IHardcopyService {
19
+ getHardcopy(request: HardcopyRequest): Promise<HardcopyResponse>;
20
+ }
21
+ interface HardcopyServiceConfig {
22
+ getAppDetails: () => AppDetails;
23
+ getFeatureFlags: () => Record<string, boolean>;
24
+ trackEvent?: (params: TrackEventParams) => Promise<void>;
25
+ }
26
+ declare const MOCK_HARDCOPY_RESPONSE: Partial<Record<WidgetTypeV3, HardcopyResponse>>;
27
+ declare class HardcopyService implements IHardcopyService {
28
+ private config;
29
+ constructor(config: HardcopyServiceConfig);
30
+ getHardcopy(request: HardcopyRequest): Promise<HardcopyResponse>;
31
+ }
32
+ declare class MockHardcopyService implements IHardcopyService {
33
+ private overrides;
34
+ constructor(overrides?: Partial<Record<WidgetTypeV3, HardcopyResponse>>);
35
+ getHardcopy(request: HardcopyRequest): Promise<HardcopyResponse>;
36
+ }
37
+ //#endregion
38
+ export { HardcopyRequest, HardcopyResponse, HardcopyService, HardcopyServiceConfig, IHardcopyService, MOCK_HARDCOPY_RESPONSE, MockHardcopyService };
39
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZGNvcHlTZXJ2aWNlLmQudHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2hhcmRjb3B5U2VydmljZS9oYXJkY29weVNlcnZpY2UuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXaWRnZXRTdHJpbmcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS93aWRnZXRUZXh0JztcbmltcG9ydCB7IFVzZXJFdmVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBwRGV0YWlscyB9IGZyb20gJ3NyYy9hdG9tcy9hcHAnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzVjMnO1xuaW1wb3J0IHsgVHJhY2tFdmVudFBhcmFtcyB9IGZyb20gJy4uL2FtcGxpdHVkZVNlcnZpY2UnO1xuZXhwb3J0IGludGVyZmFjZSBIYXJkY29weVJlcXVlc3Qge1xuICAgIHdpZGdldFR5cGU6IFdpZGdldFR5cGVWMztcbiAgICB1c2VyRXZlbnQ6IFVzZXJFdmVudDtcbn1cbmV4cG9ydCB0eXBlIEhhcmRjb3B5UmVzcG9uc2UgPSB7XG4gICAgcmVzcG9uc2VJZDogc3RyaW5nO1xuICAgIGxhbmd1YWdlOiBzdHJpbmc7XG4gICAgcmF3VmFsdWVzPzogUmVjb3JkPHN0cmluZywgV2lkZ2V0U3RyaW5nIHwgV2lkZ2V0U3RyaW5nW10+O1xuICAgIHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+O1xufTtcbmV4cG9ydCBpbnRlcmZhY2UgSUhhcmRjb3B5U2VydmljZSB7XG4gICAgZ2V0SGFyZGNvcHkocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSGFyZGNvcHlTZXJ2aWNlQ29uZmlnIHtcbiAgICBnZXRBcHBEZXRhaWxzOiAoKSA9PiBBcHBEZXRhaWxzO1xuICAgIGdldEZlYXR1cmVGbGFnczogKCkgPT4gUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gICAgdHJhY2tFdmVudD86IChwYXJhbXM6IFRyYWNrRXZlbnRQYXJhbXMpID0+IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBNT0NLX0hBUkRDT1BZX1JFU1BPTlNFOiBQYXJ0aWFsPFJlY29yZDxXaWRnZXRUeXBlVjMsIEhhcmRjb3B5UmVzcG9uc2U+PjtcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEhhcmRjb3B5U2VydmljZSBpbXBsZW1lbnRzIElIYXJkY29weVNlcnZpY2Uge1xuICAgIHByaXZhdGUgY29uZmlnO1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZzogSGFyZGNvcHlTZXJ2aWNlQ29uZmlnKTtcbiAgICBnZXRIYXJkY29weShyZXF1ZXN0OiBIYXJkY29weVJlcXVlc3QpOiBQcm9taXNlPEhhcmRjb3B5UmVzcG9uc2U+O1xufVxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgTW9ja0hhcmRjb3B5U2VydmljZSBpbXBsZW1lbnRzIElIYXJkY29weVNlcnZpY2Uge1xuICAgIHByaXZhdGUgb3ZlcnJpZGVzO1xuICAgIGNvbnN0cnVjdG9yKG92ZXJyaWRlcz86IFBhcnRpYWw8UmVjb3JkPFdpZGdldFR5cGVWMywgSGFyZGNvcHlSZXNwb25zZT4+KTtcbiAgICBnZXRIYXJkY29weShyZXF1ZXN0OiBIYXJkY29weVJlcXVlc3QpOiBQcm9taXNlPEhhcmRjb3B5UmVzcG9uc2U+O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBS0EsSUFBVyxrQkFBa0I7Q0FBQztPQUFHO09BQUE7Q0FBQTtBQUNqQyxJQUFXLG1CQUFpQjtDQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQTtBQUM1QixJQUFXLG1CQUFhO0NBQUE7T0FBQTtPQUFBO09BQUE7Q0FBQTtBQUN4QixJQUFBLHdCQUFBO0NBQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtDQUFBO0FBQ0EsSUFBVyx5QkFBb0I7Q0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO0NBQUE7QUFDL0IsSUFBVyxrQkFBVztDQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3RCLElBQVcsc0JBQVM7Q0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQSJ9
@@ -0,0 +1,229 @@
1
+ import logger_default from "../../application/logging/logger.js";
2
+ import { getQueryParam } from "../../application/utils/urlsParser.js";
3
+ import { toCamelCase } from "../../application/models/utils/snakeToCamelTransformer.js";
4
+ import { WidgetTypeV3 } from "../../contexts/typesV3.js";
5
+ import { EnviveMetricsEventName } from "../amplitudeService/eventNames.js";
6
+ import "../../application/utils/index.js";
7
+ import commerce_api_default from "../../application/commerce-api.js";
8
+ import "../amplitudeService/index.js";
9
+ import { v4 } from "uuid";
10
+
11
+ //#region src/services/hardcopyService/hardcopyService.ts
12
+ const logger = new logger_default("hardcopyService");
13
+ const MOCK_HARDCOPY_RESPONSE = {
14
+ [WidgetTypeV3.PromptCarouselV3]: {
15
+ responseId: v4(),
16
+ language: "en",
17
+ values: { promptButtonTexts: [
18
+ "What are your best sellers?",
19
+ "Show me summer dresses",
20
+ "Do you have free shipping?",
21
+ "What sizes are available?",
22
+ "Can I return items?"
23
+ ] }
24
+ },
25
+ [WidgetTypeV3.TitledPromptCarouselV3]: {
26
+ responseId: "mock-response-id",
27
+ language: "en",
28
+ values: {
29
+ titleLabel: "Need some help?",
30
+ promptButtonTexts: [
31
+ "What are your best sellers?",
32
+ "Show me summer dresses",
33
+ "Do you have free shipping?",
34
+ "What sizes are available?",
35
+ "Can I return items?"
36
+ ]
37
+ }
38
+ },
39
+ [WidgetTypeV3.SocialProofV3]: {
40
+ responseId: "mock-response-id",
41
+ language: "en",
42
+ values: {
43
+ titleLabel: "Shopping Assistant",
44
+ numberOfCustomersText: "123 customers",
45
+ customerQueryText: "found what they were looking for...",
46
+ primaryButtonText: "Start shopping",
47
+ secondaryButtonTitleText: "Popular searches",
48
+ secondaryButtonTexts: [
49
+ "Why should I buy from you?",
50
+ "How do I return an item?",
51
+ "New arrivals",
52
+ "Sale items",
53
+ "Popular items"
54
+ ],
55
+ textFieldPlaceholderText: "Ask me anything..."
56
+ }
57
+ },
58
+ [WidgetTypeV3.TypingAnimationV3]: {
59
+ responseId: "mock-response-id",
60
+ language: "en",
61
+ values: {
62
+ titleLabel: "Shopping Assistant",
63
+ headlineText: "Need help finding",
64
+ animatedTextSequence: [
65
+ "the perfect gift for your loved ones?",
66
+ "something special for the holidays?",
67
+ "the ideal present for someone special?"
68
+ ],
69
+ hintText: "Ask me anything",
70
+ promptButtonTexts: [
71
+ "What are your best sellers?",
72
+ "Show me summer dresses",
73
+ "Do you have free shipping?",
74
+ "What sizes are available?"
75
+ ],
76
+ textFieldAriaLabel: "Ask me anything"
77
+ }
78
+ },
79
+ [WidgetTypeV3.ChatPreviewComparisonV3]: {
80
+ responseId: "mock-response-id",
81
+ language: "en",
82
+ values: {
83
+ titleLabel: "Shopping Assistant",
84
+ headlineText: "Need help comparing?",
85
+ textFieldPlaceholderText: "Ask me anything..."
86
+ }
87
+ },
88
+ [WidgetTypeV3.ChatPreviewLoadingV3]: {
89
+ responseId: "mock-response-id",
90
+ language: "en",
91
+ values: {
92
+ titleLabel: "Shopping Assistant",
93
+ textFieldPlaceholderText: "Ask me anything..."
94
+ }
95
+ },
96
+ [WidgetTypeV3.ChatPreviewV3]: {
97
+ responseId: "mock-response-id",
98
+ language: "en",
99
+ values: {
100
+ titleLabel: "Shopping Assistant",
101
+ textFieldPlaceholderText: "Ask me anything..."
102
+ }
103
+ },
104
+ [WidgetTypeV3.PromptButtonCarouselWithImageV3]: {
105
+ responseId: "mock-response-id",
106
+ language: "en",
107
+ values: {
108
+ titleLabel: "Need some help?",
109
+ promptButtonsTexts: [
110
+ "Help me find a product",
111
+ "What's on your mind?",
112
+ "Talk to a human"
113
+ ],
114
+ textFieldPlaceholderText: "Ask me anything..."
115
+ }
116
+ },
117
+ [WidgetTypeV3.ProductCardV3]: {
118
+ responseId: "mock-response-id",
119
+ language: "en",
120
+ values: {
121
+ headline: "Discover Your Perfect Style",
122
+ animatedText: [
123
+ "the perfect outfit for any occasion",
124
+ "trending fashion that fits your lifestyle",
125
+ "quality pieces that last"
126
+ ],
127
+ prompts: [
128
+ "What are your best sellers?",
129
+ "Show me summer dresses",
130
+ "Do you have free shipping?",
131
+ "What sizes are available?",
132
+ "Can I return items?"
133
+ ],
134
+ placeholder: "Ask me anything..."
135
+ }
136
+ },
137
+ [WidgetTypeV3.FloatingChatV3]: {
138
+ responseId: "mock-response-id",
139
+ language: "en",
140
+ values: {
141
+ welcomeMessageTitle: "Welcome to Envive AI",
142
+ welcomeMessageText: "Your personal shopper trained on the collective knowledge of thousands of real experts!",
143
+ chatFooterTextFieldPlaceholderText: "Ask me anything...",
144
+ disclaimerText: "This is a disclaimer...",
145
+ leftToggleLabel: "Shop with AI",
146
+ rightToggleLabel: "Live support"
147
+ }
148
+ },
149
+ [WidgetTypeV3.FullPageSalesAgentV3]: {
150
+ responseId: "mock-response-id",
151
+ language: "en",
152
+ values: {
153
+ welcomeMessageTitle: "Welcome to Envive AI",
154
+ welcomeMessageText: "Your personal shopper trained on the collective knowledge of thousands of real experts!",
155
+ chatFooterTextFieldPlaceholderText: "Ask me anything...",
156
+ disclaimerText: "This is a disclaimer..."
157
+ }
158
+ }
159
+ };
160
+ const convertToHardcopyResponse = (response) => ({
161
+ responseId: response.responseId,
162
+ language: response.language,
163
+ rawValues: response.values,
164
+ values: Object.fromEntries(Object.entries(response.values).map(([key, value]) => [toCamelCase(key), value.length === 1 ? value[0].value : value.map((v) => v.value)]))
165
+ });
166
+ var HardcopyService = class {
167
+ constructor(config) {
168
+ this.config = config;
169
+ }
170
+ async getHardcopy(request) {
171
+ const overrideConfigVersion = getQueryParam("spiffy_config_version") || getQueryParam("envive_config_version") || void 0;
172
+ const widgetTextRequest = {
173
+ requestId: v4(),
174
+ widgetType: request.widgetType,
175
+ context: this.config.getAppDetails(),
176
+ featureFlags: this.config.getFeatureFlags(),
177
+ language: navigator.languages[0] || "en",
178
+ overrideConfigVersion,
179
+ url: window.location.href
180
+ };
181
+ this.config.trackEvent?.({
182
+ eventName: EnviveMetricsEventName.WidgetTextRequest,
183
+ eventProps: {
184
+ widget_type: request.widgetType,
185
+ request_id: widgetTextRequest.requestId
186
+ }
187
+ });
188
+ try {
189
+ const response = await commerce_api_default.getHardcopy(widgetTextRequest);
190
+ if (response) {
191
+ const convertedResponse = convertToHardcopyResponse(response);
192
+ logger.logDebug("converted response", convertedResponse);
193
+ this.config.trackEvent?.({
194
+ eventName: EnviveMetricsEventName.WidgetTextResponse,
195
+ eventProps: {
196
+ widget_type: request.widgetType,
197
+ response_id: response.responseId,
198
+ widget_text: response.values,
199
+ request_id: widgetTextRequest.requestId
200
+ }
201
+ });
202
+ return convertedResponse;
203
+ }
204
+ } catch (error) {
205
+ logger.logError("error getting hardcopy from backend", error);
206
+ }
207
+ const mockResponse = MOCK_HARDCOPY_RESPONSE[request.widgetType];
208
+ if (mockResponse) {
209
+ logger.logDebug("no real response, using mock", mockResponse);
210
+ return mockResponse;
211
+ }
212
+ throw new Error(`No hardcopy response found for widget type: ${request.widgetType}`);
213
+ }
214
+ };
215
+ var MockHardcopyService = class {
216
+ constructor(overrides = {}) {
217
+ this.overrides = overrides;
218
+ }
219
+ async getHardcopy(request) {
220
+ const fallbackWidgetType = request.widgetType === WidgetTypeV3.ProductCardV3 ? WidgetTypeV3.ImagePromptCardV3 : request.widgetType;
221
+ const response = this.overrides[request.widgetType] ?? this.overrides[fallbackWidgetType] ?? MOCK_HARDCOPY_RESPONSE[request.widgetType];
222
+ if (!response) throw new Error(`No hardcopy response found for widget type: ${request.widgetType}`);
223
+ return response;
224
+ }
225
+ };
226
+
227
+ //#endregion
228
+ export { HardcopyService, MOCK_HARDCOPY_RESPONSE, MockHardcopyService };
229
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZGNvcHlTZXJ2aWNlLmpzIiwibmFtZXMiOlsiTG9nZ2VyIiwiTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4iLCJ1dWlkIiwiY29uZmlnOiBIYXJkY29weVNlcnZpY2VDb25maWciLCJ3aWRnZXRUZXh0UmVxdWVzdDogV2lkZ2V0VGV4dFJlcXVlc3QiLCJDb21tZXJjZUFwaUNsaWVudCIsIm92ZXJyaWRlczogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvaGFyZGNvcHlTZXJ2aWNlL2hhcmRjb3B5U2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgQ29tbWVyY2VBcGlDbGllbnQgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaSc7XG5pbXBvcnQgeyBXaWRnZXRTdHJpbmcsIFdpZGdldFRleHQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS93aWRnZXRUZXh0JztcbmltcG9ydCB7IFdpZGdldFRleHRSZXF1ZXN0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvd2lkZ2V0VGV4dFJlcXVlc3QnO1xuaW1wb3J0IHsgdG9DYW1lbENhc2UgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxzL3NuYWtlVG9DYW1lbFRyYW5zZm9ybWVyJztcbmltcG9ydCB7IGdldFF1ZXJ5UGFyYW0gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMnO1xuaW1wb3J0IHsgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBBcHBEZXRhaWxzIH0gZnJvbSAnc3JjL2F0b21zL2FwcCc7XG5pbXBvcnQgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXNWMyc7XG5pbXBvcnQgeyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBUcmFja0V2ZW50UGFyYW1zIH0gZnJvbSAnLi4vYW1wbGl0dWRlU2VydmljZSc7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ2hhcmRjb3B5U2VydmljZScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhhcmRjb3B5UmVxdWVzdCB7XG4gIHdpZGdldFR5cGU6IFdpZGdldFR5cGVWMztcbiAgdXNlckV2ZW50OiBVc2VyRXZlbnQ7XG59XG5cbmV4cG9ydCB0eXBlIEhhcmRjb3B5UmVzcG9uc2UgPSB7XG4gIHJlc3BvbnNlSWQ6IHN0cmluZztcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgcmF3VmFsdWVzPzogUmVjb3JkPHN0cmluZywgV2lkZ2V0U3RyaW5nIHwgV2lkZ2V0U3RyaW5nW10+O1xuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUhhcmRjb3B5U2VydmljZSB7XG4gIGdldEhhcmRjb3B5KHJlcXVlc3Q6IEhhcmRjb3B5UmVxdWVzdCk6IFByb21pc2U8SGFyZGNvcHlSZXNwb25zZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFyZGNvcHlTZXJ2aWNlQ29uZmlnIHtcbiAgZ2V0QXBwRGV0YWlsczogKCkgPT4gQXBwRGV0YWlscztcbiAgZ2V0RmVhdHVyZUZsYWdzOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgdHJhY2tFdmVudD86IChwYXJhbXM6IFRyYWNrRXZlbnRQYXJhbXMpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8vIFNhbXBsZSByZXNwb25zZXMgdXNlZCBib3RoIGFzIGZhbGxiYWNrIHdoZW4gdGhlIGJhY2tlbmQgZmFpbHMgYW5kIGJ5IE1vY2tIYXJkY29weVNlcnZpY2UuXG5leHBvcnQgY29uc3QgTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4gPSB7XG4gIFtXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWM106IHtcbiAgICByZXNwb25zZUlkOiB1dWlkKCksXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICBwcm9tcHRCdXR0b25UZXh0czogW1xuICAgICAgICAnV2hhdCBhcmUgeW91ciBiZXN0IHNlbGxlcnM/JyxcbiAgICAgICAgJ1Nob3cgbWUgc3VtbWVyIGRyZXNzZXMnLFxuICAgICAgICAnRG8geW91IGhhdmUgZnJlZSBzaGlwcGluZz8nLFxuICAgICAgICAnV2hhdCBzaXplcyBhcmUgYXZhaWxhYmxlPycsXG4gICAgICAgICdDYW4gSSByZXR1cm4gaXRlbXM/JyxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5UaXRsZWRQcm9tcHRDYXJvdXNlbFYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdOZWVkIHNvbWUgaGVscD8nLFxuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuU29jaWFsUHJvb2ZWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIG51bWJlck9mQ3VzdG9tZXJzVGV4dDogJzEyMyBjdXN0b21lcnMnLFxuICAgICAgY3VzdG9tZXJRdWVyeVRleHQ6ICdmb3VuZCB3aGF0IHRoZXkgd2VyZSBsb29raW5nIGZvci4uLicsXG4gICAgICBwcmltYXJ5QnV0dG9uVGV4dDogJ1N0YXJ0IHNob3BwaW5nJyxcbiAgICAgIHNlY29uZGFyeUJ1dHRvblRpdGxlVGV4dDogJ1BvcHVsYXIgc2VhcmNoZXMnLFxuICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doeSBzaG91bGQgSSBidXkgZnJvbSB5b3U/JyxcbiAgICAgICAgJ0hvdyBkbyBJIHJldHVybiBhbiBpdGVtPycsXG4gICAgICAgICdOZXcgYXJyaXZhbHMnLFxuICAgICAgICAnU2FsZSBpdGVtcycsXG4gICAgICAgICdQb3B1bGFyIGl0ZW1zJyxcbiAgICAgIF0sXG4gICAgICB0ZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuVHlwaW5nQW5pbWF0aW9uVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ1Nob3BwaW5nIEFzc2lzdGFudCcsXG4gICAgICBoZWFkbGluZVRleHQ6ICdOZWVkIGhlbHAgZmluZGluZycsXG4gICAgICBhbmltYXRlZFRleHRTZXF1ZW5jZTogW1xuICAgICAgICAndGhlIHBlcmZlY3QgZ2lmdCBmb3IgeW91ciBsb3ZlZCBvbmVzPycsXG4gICAgICAgICdzb21ldGhpbmcgc3BlY2lhbCBmb3IgdGhlIGhvbGlkYXlzPycsXG4gICAgICAgICd0aGUgaWRlYWwgcHJlc2VudCBmb3Igc29tZW9uZSBzcGVjaWFsPycsXG4gICAgICBdLFxuICAgICAgaGludFRleHQ6ICdBc2sgbWUgYW55dGhpbmcnLFxuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgXSxcbiAgICAgIHRleHRGaWVsZEFyaWFMYWJlbDogJ0FzayBtZSBhbnl0aGluZycsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld0NvbXBhcmlzb25WM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIGhlYWRsaW5lVGV4dDogJ05lZWQgaGVscCBjb21wYXJpbmc/JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld0xvYWRpbmdWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld1YzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdTaG9wcGluZyBBc3Npc3RhbnQnLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlByb21wdEJ1dHRvbkNhcm91c2VsV2l0aEltYWdlVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ05lZWQgc29tZSBoZWxwPycsXG4gICAgICBwcm9tcHRCdXR0b25zVGV4dHM6IFsnSGVscCBtZSBmaW5kIGEgcHJvZHVjdCcsIFwiV2hhdCdzIG9uIHlvdXIgbWluZD9cIiwgJ1RhbGsgdG8gYSBodW1hbiddLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgaGVhZGxpbmU6ICdEaXNjb3ZlciBZb3VyIFBlcmZlY3QgU3R5bGUnLFxuICAgICAgYW5pbWF0ZWRUZXh0OiBbXG4gICAgICAgICd0aGUgcGVyZmVjdCBvdXRmaXQgZm9yIGFueSBvY2Nhc2lvbicsXG4gICAgICAgICd0cmVuZGluZyBmYXNoaW9uIHRoYXQgZml0cyB5b3VyIGxpZmVzdHlsZScsXG4gICAgICAgICdxdWFsaXR5IHBpZWNlcyB0aGF0IGxhc3QnLFxuICAgICAgXSxcbiAgICAgIHByb21wdHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgICAgcGxhY2Vob2xkZXI6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuRmxvYXRpbmdDaGF0VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogJ1dlbGNvbWUgdG8gRW52aXZlIEFJJyxcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGV4dDpcbiAgICAgICAgJ1lvdXIgcGVyc29uYWwgc2hvcHBlciB0cmFpbmVkIG9uIHRoZSBjb2xsZWN0aXZlIGtub3dsZWRnZSBvZiB0aG91c2FuZHMgb2YgcmVhbCBleHBlcnRzIScsXG4gICAgICBjaGF0Rm9vdGVyVGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICAgIGRpc2NsYWltZXJUZXh0OiAnVGhpcyBpcyBhIGRpc2NsYWltZXIuLi4nLFxuICAgICAgbGVmdFRvZ2dsZUxhYmVsOiAnU2hvcCB3aXRoIEFJJyxcbiAgICAgIHJpZ2h0VG9nZ2xlTGFiZWw6ICdMaXZlIHN1cHBvcnQnLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuRnVsbFBhZ2VTYWxlc0FnZW50VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogJ1dlbGNvbWUgdG8gRW52aXZlIEFJJyxcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGV4dDpcbiAgICAgICAgJ1lvdXIgcGVyc29uYWwgc2hvcHBlciB0cmFpbmVkIG9uIHRoZSBjb2xsZWN0aXZlIGtub3dsZWRnZSBvZiB0aG91c2FuZHMgb2YgcmVhbCBleHBlcnRzIScsXG4gICAgICBjaGF0Rm9vdGVyVGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICAgIGRpc2NsYWltZXJUZXh0OiAnVGhpcyBpcyBhIGRpc2NsYWltZXIuLi4nLFxuICAgIH0sXG4gIH0sXG59O1xuXG5jb25zdCBjb252ZXJ0VG9IYXJkY29weVJlc3BvbnNlID0gKHJlc3BvbnNlOiBXaWRnZXRUZXh0KTogSGFyZGNvcHlSZXNwb25zZSA9PiAoe1xuICByZXNwb25zZUlkOiByZXNwb25zZS5yZXNwb25zZUlkLFxuICBsYW5ndWFnZTogcmVzcG9uc2UubGFuZ3VhZ2UsXG4gIHJhd1ZhbHVlczogcmVzcG9uc2UudmFsdWVzLFxuICB2YWx1ZXM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyZXNwb25zZS52YWx1ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICB0b0NhbWVsQ2FzZShrZXkpLFxuICAgICAgdmFsdWUubGVuZ3RoID09PSAxID8gdmFsdWVbMF0udmFsdWUgOiB2YWx1ZS5tYXAodiA9PiB2LnZhbHVlKSxcbiAgICBdKSxcbiAgKSxcbn0pO1xuXG5leHBvcnQgY2xhc3MgSGFyZGNvcHlTZXJ2aWNlIGltcGxlbWVudHMgSUhhcmRjb3B5U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBIYXJkY29weVNlcnZpY2VDb25maWcpIHt9XG5cbiAgYXN5bmMgZ2V0SGFyZGNvcHkocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPiB7XG4gICAgY29uc3Qgb3ZlcnJpZGVDb25maWdWZXJzaW9uID1cbiAgICAgIGdldFF1ZXJ5UGFyYW0oJ3NwaWZmeV9jb25maWdfdmVyc2lvbicpIHx8IGdldFF1ZXJ5UGFyYW0oJ2Vudml2ZV9jb25maWdfdmVyc2lvbicpIHx8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHdpZGdldFRleHRSZXF1ZXN0OiBXaWRnZXRUZXh0UmVxdWVzdCA9IHtcbiAgICAgIHJlcXVlc3RJZDogdXVpZCgpLFxuICAgICAgd2lkZ2V0VHlwZTogcmVxdWVzdC53aWRnZXRUeXBlLFxuICAgICAgY29udGV4dDogdGhpcy5jb25maWcuZ2V0QXBwRGV0YWlscygpLFxuICAgICAgZmVhdHVyZUZsYWdzOiB0aGlzLmNvbmZpZy5nZXRGZWF0dXJlRmxhZ3MoKSxcbiAgICAgIGxhbmd1YWdlOiBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIHx8ICdlbicsXG4gICAgICBvdmVycmlkZUNvbmZpZ1ZlcnNpb24sXG4gICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgIH07XG5cbiAgICB0aGlzLmNvbmZpZy50cmFja0V2ZW50Py4oe1xuICAgICAgZXZlbnROYW1lOiBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLldpZGdldFRleHRSZXF1ZXN0LFxuICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICB3aWRnZXRfdHlwZTogcmVxdWVzdC53aWRnZXRUeXBlLFxuICAgICAgICByZXF1ZXN0X2lkOiB3aWRnZXRUZXh0UmVxdWVzdC5yZXF1ZXN0SWQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SGFyZGNvcHkod2lkZ2V0VGV4dFJlcXVlc3QpO1xuICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZFJlc3BvbnNlID0gY29udmVydFRvSGFyZGNvcHlSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgIGxvZ2dlci5sb2dEZWJ1ZygnY29udmVydGVkIHJlc3BvbnNlJywgY29udmVydGVkUmVzcG9uc2UpO1xuICAgICAgICB0aGlzLmNvbmZpZy50cmFja0V2ZW50Py4oe1xuICAgICAgICAgIGV2ZW50TmFtZTogRW52aXZlTWV0cmljc0V2ZW50TmFtZS5XaWRnZXRUZXh0UmVzcG9uc2UsXG4gICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgd2lkZ2V0X3R5cGU6IHJlcXVlc3Qud2lkZ2V0VHlwZSxcbiAgICAgICAgICAgIHJlc3BvbnNlX2lkOiByZXNwb25zZS5yZXNwb25zZUlkLFxuICAgICAgICAgICAgd2lkZ2V0X3RleHQ6IHJlc3BvbnNlLnZhbHVlcyxcbiAgICAgICAgICAgIHJlcXVlc3RfaWQ6IHdpZGdldFRleHRSZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFJlc3BvbnNlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIubG9nRXJyb3IoJ2Vycm9yIGdldHRpbmcgaGFyZGNvcHkgZnJvbSBiYWNrZW5kJywgZXJyb3IpO1xuICAgIH1cblxuICAgIGNvbnN0IG1vY2tSZXNwb25zZSA9IE1PQ0tfSEFSRENPUFlfUkVTUE9OU0VbcmVxdWVzdC53aWRnZXRUeXBlXTtcbiAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICBsb2dnZXIubG9nRGVidWcoJ25vIHJlYWwgcmVzcG9uc2UsIHVzaW5nIG1vY2snLCBtb2NrUmVzcG9uc2UpO1xuICAgICAgcmV0dXJuIG1vY2tSZXNwb25zZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBoYXJkY29weSByZXNwb25zZSBmb3VuZCBmb3Igd2lkZ2V0IHR5cGU6ICR7cmVxdWVzdC53aWRnZXRUeXBlfWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrSGFyZGNvcHlTZXJ2aWNlIGltcGxlbWVudHMgSUhhcmRjb3B5U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb3ZlcnJpZGVzOiBQYXJ0aWFsPFJlY29yZDxXaWRnZXRUeXBlVjMsIEhhcmRjb3B5UmVzcG9uc2U+PiA9IHt9KSB7fVxuXG4gIGFzeW5jIGdldEhhcmRjb3B5KHJlcXVlc3Q6IEhhcmRjb3B5UmVxdWVzdCk6IFByb21pc2U8SGFyZGNvcHlSZXNwb25zZT4ge1xuICAgIGNvbnN0IGZhbGxiYWNrV2lkZ2V0VHlwZSA9XG4gICAgICByZXF1ZXN0LndpZGdldFR5cGUgPT09IFdpZGdldFR5cGVWMy5Qcm9kdWN0Q2FyZFYzXG4gICAgICAgID8gV2lkZ2V0VHlwZVYzLkltYWdlUHJvbXB0Q2FyZFYzXG4gICAgICAgIDogcmVxdWVzdC53aWRnZXRUeXBlO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPVxuICAgICAgdGhpcy5vdmVycmlkZXNbcmVxdWVzdC53aWRnZXRUeXBlXSA/P1xuICAgICAgdGhpcy5vdmVycmlkZXNbZmFsbGJhY2tXaWRnZXRUeXBlXSA/P1xuICAgICAgTU9DS19IQVJEQ09QWV9SRVNQT05TRVtyZXF1ZXN0LndpZGdldFR5cGVdO1xuXG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBoYXJkY29weSByZXNwb25zZSBmb3VuZCBmb3Igd2lkZ2V0IHR5cGU6ICR7cmVxdWVzdC53aWRnZXRUeXBlfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFZQSxNQUFNLFNBQVMsSUFBSUEsZUFBTyxrQkFBa0I7QUF5QjVDLE1BQWFDLHlCQUEwRTtFQUNwRixhQUFhLG1CQUFtQjtFQUMvQixZQUFZQyxJQUFNO0VBQ2xCLFVBQVU7RUFDVixRQUFRLEVBQ04sbUJBQW1CO0dBQ2pCO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDRCxFQUNGO0VBQ0Y7RUFDQSxhQUFhLHlCQUF5QjtFQUNyQyxZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixZQUFZO0dBQ1osbUJBQW1CO0lBQ2pCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtHQUNGO0VBQ0Y7RUFDQSxhQUFhLGdCQUFnQjtFQUM1QixZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixZQUFZO0dBQ1osdUJB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
@@ -0,0 +1,5 @@
1
+ const require_hardcopyService = require('./hardcopyService.cjs');
2
+
3
+ exports.HardcopyService = require_hardcopyService.HardcopyService;
4
+ exports.MOCK_HARDCOPY_RESPONSE = require_hardcopyService.MOCK_HARDCOPY_RESPONSE;
5
+ exports.MockHardcopyService = require_hardcopyService.MockHardcopyService;
@@ -0,0 +1,2 @@
1
+ import { HardcopyRequest, HardcopyResponse, HardcopyService, HardcopyServiceConfig, IHardcopyService, MOCK_HARDCOPY_RESPONSE, MockHardcopyService } from "./hardcopyService.cjs";
2
+ export { HardcopyRequest, HardcopyResponse, HardcopyService, HardcopyServiceConfig, IHardcopyService, MOCK_HARDCOPY_RESPONSE, MockHardcopyService };
@@ -0,0 +1,2 @@
1
+ import { HardcopyRequest, HardcopyResponse, HardcopyService, HardcopyServiceConfig, IHardcopyService, MOCK_HARDCOPY_RESPONSE, MockHardcopyService } from "./hardcopyService.js";
2
+ export { HardcopyRequest, HardcopyResponse, HardcopyService, HardcopyServiceConfig, IHardcopyService, MOCK_HARDCOPY_RESPONSE, MockHardcopyService };
@@ -0,0 +1,3 @@
1
+ import { HardcopyService, MOCK_HARDCOPY_RESPONSE, MockHardcopyService } from "./hardcopyService.js";
2
+
3
+ export { HardcopyService, MOCK_HARDCOPY_RESPONSE, MockHardcopyService };
@@ -1,3 +1,4 @@
1
1
  const require_userIdentityService = require('./userIdentityService.cjs');
2
2
 
3
+ exports.MockUserIdentityService = require_userIdentityService.MockUserIdentityService;
3
4
  exports.UserIdentityService = require_userIdentityService.UserIdentityService;
@@ -1,2 +1,2 @@
1
- import { UserIdentityService } from "./userIdentityService.cjs";
2
- export { UserIdentityService };
1
+ import { IUserIdentityService, MockUserIdentityService, UserIdentityService } from "./userIdentityService.cjs";
2
+ export { IUserIdentityService, MockUserIdentityService, UserIdentityService };
@@ -1,2 +1,2 @@
1
- import { UserIdentityService } from "./userIdentityService.js";
2
- export { UserIdentityService };
1
+ import { IUserIdentityService, MockUserIdentityService, UserIdentityService } from "./userIdentityService.js";
2
+ export { IUserIdentityService, MockUserIdentityService, UserIdentityService };
@@ -1,3 +1,3 @@
1
- import { UserIdentityService } from "./userIdentityService.js";
1
+ import { MockUserIdentityService, UserIdentityService } from "./userIdentityService.js";
2
2
 
3
- export { UserIdentityService };
3
+ export { MockUserIdentityService, UserIdentityService };