@envive-ai/react-hooks 0.3.57 → 0.3.59
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/dist/application/commerce-api.cjs +1 -1
- package/dist/application/commerce-api.js +1 -1
- package/dist/application/models/graphql/index.cjs +0 -4
- package/dist/application/models/graphql/index.d.cts +2 -3
- package/dist/application/models/graphql/index.d.ts +2 -3
- package/dist/application/models/graphql/index.js +1 -3
- package/dist/application/models/graphql/queries/getMerchantColorsQuery.d.cts +2 -3
- package/dist/application/models/graphql/queries/getMerchantColorsQuery.d.ts +2 -3
- package/dist/application/models/graphql/queries/getWidgetConfigQuery.cjs +22 -3
- package/dist/application/models/graphql/queries/getWidgetConfigQuery.js +22 -3
- package/dist/application/models/index.cjs +0 -4
- package/dist/application/models/index.d.cts +2 -3
- package/dist/application/models/index.d.ts +2 -3
- package/dist/application/models/index.js +1 -3
- package/dist/application/utils/elementObserver.d.cts +2 -2
- package/dist/application/utils/index.cjs +1 -1
- package/dist/application/utils/index.js +1 -1
- package/dist/atoms/app/index.d.cts +7 -7
- package/dist/atoms/app/index.d.ts +7 -7
- package/dist/atoms/app/variant.d.cts +6 -6
- package/dist/atoms/chat/chatState.d.cts +19 -19
- package/dist/atoms/chat/chatState.d.ts +19 -19
- package/dist/atoms/chat/form.d.cts +2 -2
- package/dist/atoms/chat/form.d.ts +2 -2
- package/dist/atoms/chat/index.d.cts +2 -2
- package/dist/atoms/chat/index.d.ts +2 -2
- package/dist/atoms/chat/lastMessage.d.cts +2 -2
- package/dist/atoms/chat/lastMessage.d.ts +2 -2
- package/dist/atoms/chat/messageQueue.d.cts +6 -6
- package/dist/atoms/chat/messageQueue.d.ts +6 -6
- package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
- package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
- package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
- package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
- package/dist/atoms/chat/replies.d.cts +3 -3
- package/dist/atoms/chat/replies.d.ts +3 -3
- package/dist/atoms/chat/suggestions.d.cts +2 -2
- package/dist/atoms/chat/suggestions.d.ts +2 -2
- package/dist/atoms/envive/enviveConfig.d.cts +14 -14
- package/dist/atoms/envive/enviveConfig.d.ts +13 -13
- package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
- package/dist/atoms/org/customerService.d.cts +6 -6
- package/dist/atoms/org/customerService.d.ts +6 -6
- package/dist/atoms/org/graphqlConfig.d.cts +4 -4
- package/dist/atoms/org/graphqlConfig.d.ts +4 -4
- package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
- package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
- package/dist/atoms/org/orgAnalyticsConfig.d.cts +4 -4
- package/dist/atoms/org/orgAnalyticsConfig.d.ts +4 -4
- package/dist/atoms/search/chatSearch.d.cts +17 -17
- package/dist/atoms/search/chatSearch.d.ts +17 -17
- package/dist/atoms/search/searchAPI.d.cts +13 -13
- package/dist/atoms/search/searchAPI.d.ts +13 -13
- package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
- package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
- package/dist/contexts/pageContext/pageContext.cjs +1 -1
- package/dist/contexts/pageContext/pageContext.js +1 -1
- package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
- package/dist/contexts/systemSettingsContext/systemSettingsContext.d.ts +2 -2
- package/dist/contexts/types.d.cts +1 -1
- package/dist/contexts/types.d.ts +1 -1
- package/dist/contexts/typesV3.d.cts +1 -1
- package/dist/contexts/typesV3.d.ts +1 -1
- package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +22 -31
- package/dist/contexts/widgetConfigContext/widgetConfigContext.js +22 -31
- package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
- package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.ts +2 -2
- package/dist/hooks/Intersection/useIntersection.cjs +14 -3
- package/dist/hooks/Intersection/useIntersection.js +14 -3
- package/dist/hooks/PageViewedEvent/usePageViewedEvent.cjs +1 -1
- package/dist/hooks/PageViewedEvent/usePageViewedEvent.js +1 -1
- package/dist/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.cts +2 -2
- package/dist/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.ts +2 -2
- package/dist/hooks/SystemSettingsContext/useSystemSettingsContext.d.cts +2 -2
- package/dist/hooks/utils.d.ts +1 -1
- package/dist/services/enviveConfigService/enviveConfigService.cjs +3 -24
- package/dist/services/enviveConfigService/enviveConfigService.js +4 -25
- package/dist/services/enviveConfigService/fetchGraphQLConfig.cjs +59 -54
- package/dist/services/enviveConfigService/fetchGraphQLConfig.js +60 -54
- package/dist/services/hardcopyService/hardcopyService.cjs +1 -1
- package/dist/services/hardcopyService/hardcopyService.js +1 -1
- package/dist/types/config-versions.cjs +1 -3
- package/dist/types/config-versions.js +2 -3
- package/package.json +1 -1
- package/src/application/models/graphql/index.ts +0 -1
- package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +4 -15
- package/src/application/models/graphql/queries/getWidgetConfigQuery.ts +35 -14
- package/src/application/models/index.ts +0 -1
- package/src/contexts/pageContext/__tests__/pageContext.test.tsx +1 -2
- package/src/contexts/pageContext/pageContext.tsx +1 -2
- package/src/contexts/widgetConfigContext/__tests__/widgetConfigContext.test.tsx +52 -0
- package/src/contexts/widgetConfigContext/widgetConfigContext.tsx +39 -36
- package/src/hooks/Intersection/__tests__/useIntersection.test.ts +134 -0
- package/src/hooks/Intersection/useIntersection.ts +20 -4
- package/src/services/enviveConfigService/__tests__/enviveConfigService.test.ts +51 -75
- package/src/services/enviveConfigService/__tests__/fetchGraphQLConfig.test.ts +242 -90
- package/src/services/enviveConfigService/enviveConfigService.ts +15 -41
- package/src/services/enviveConfigService/fetchGraphQLConfig.ts +106 -68
- package/dist/application/models/graphql/queries/getColorsAndFrontendQuery.cjs +0 -18
- package/dist/application/models/graphql/queries/getColorsAndFrontendQuery.js +0 -18
- package/dist/application/models/graphql/queries/getMerchantColorsQuery.cjs +0 -18
- package/dist/application/models/graphql/queries/getMerchantColorsQuery.js +0 -18
- package/dist/application/models/graphql/queries/getMerchantFrontendConfigQuery.cjs +0 -18
- package/dist/application/models/graphql/queries/getMerchantFrontendConfigQuery.d.cts +0 -75
- package/dist/application/models/graphql/queries/getMerchantFrontendConfigQuery.d.ts +0 -75
- package/dist/application/models/graphql/queries/getMerchantFrontendConfigQuery.js +0 -18
- package/src/application/models/graphql/queries/getColorsAndFrontendQuery.ts +0 -13
- package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +0 -103
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import logger_default from "../../application/logging/logger.js";
|
|
2
|
-
import { configVersionOverride } from "../../types/config-versions.js";
|
|
3
2
|
import { transformSnakeToCamel } from "../../application/models/utils/snakeToCamelTransformer.js";
|
|
4
3
|
import { PageVariantTestType } from "../../contexts/types.js";
|
|
5
4
|
import { validateAndTransformMountingConfig, validateAndTransformPageVariants } from "../../application/models/validators/validateGraphQLFrontendConfig.js";
|
|
6
5
|
import "../../application/models/index.js";
|
|
7
|
-
import {
|
|
6
|
+
import { configVersionOverride } from "../../types/config-versions.js";
|
|
8
7
|
import { getWidgetConfigQuery } from "../../application/models/graphql/queries/getWidgetConfigQuery.js";
|
|
9
8
|
import { mockV3ColorsConfig, mockV3FrontendConfig } from "../../contexts/graphqlContext/mockV3Config.js";
|
|
10
9
|
|
|
@@ -167,65 +166,72 @@ const transformV3ProductsConfig = (productsConfig) => {
|
|
|
167
166
|
}
|
|
168
167
|
};
|
|
169
168
|
};
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
194
|
-
|
|
169
|
+
const toExperimentAssignments = (raw) => (raw ?? []).map((a) => ({
|
|
170
|
+
layer_name: a.layerName,
|
|
171
|
+
namespace: a.namespace,
|
|
172
|
+
allocated_experiment_name: a.allocatedExperimentName,
|
|
173
|
+
group_name: a.groupName
|
|
174
|
+
}));
|
|
175
|
+
const fetchUnifiedGraphQLConfig = async (baseUrl, apiKey, userId, gateNames, source) => {
|
|
176
|
+
const query = getWidgetConfigQuery();
|
|
177
|
+
const version = configVersionOverride();
|
|
178
|
+
const response = await fetch(`${baseUrl}/v1/graphql`, {
|
|
179
|
+
method: "POST",
|
|
180
|
+
headers: {
|
|
181
|
+
"Content-Type": "application/json",
|
|
182
|
+
Authorization: `Bearer ${apiKey}`
|
|
183
|
+
},
|
|
184
|
+
body: JSON.stringify({
|
|
185
|
+
query,
|
|
186
|
+
variables: {
|
|
187
|
+
userId,
|
|
188
|
+
version,
|
|
189
|
+
gateNames,
|
|
190
|
+
source
|
|
191
|
+
}
|
|
192
|
+
})
|
|
193
|
+
});
|
|
194
|
+
if (!response.ok) throw new Error(`Unified config request failed: ${response.statusText}`);
|
|
195
|
+
const result = await response.json();
|
|
196
|
+
if (result.errors) throw new Error(`Unified config GraphQL errors: ${JSON.stringify(result.errors)}`);
|
|
197
|
+
const me = result.data?.me;
|
|
198
|
+
const widgetConfig = me?.getWidgetConfig;
|
|
199
|
+
const org = me?.org;
|
|
200
|
+
const resolution = widgetConfig?.resolution;
|
|
201
|
+
let orgConfig;
|
|
195
202
|
try {
|
|
196
|
-
|
|
197
|
-
const version = configVersionOverride();
|
|
198
|
-
const response = await fetch(`${baseUrl}/v1/graphql`, {
|
|
199
|
-
method: "POST",
|
|
200
|
-
headers: {
|
|
201
|
-
"Content-Type": "application/json",
|
|
202
|
-
Authorization: `Bearer ${apiKey}`
|
|
203
|
-
},
|
|
204
|
-
body: JSON.stringify({
|
|
205
|
-
query,
|
|
206
|
-
variables: {
|
|
207
|
-
userId,
|
|
208
|
-
version
|
|
209
|
-
}
|
|
210
|
-
})
|
|
211
|
-
});
|
|
212
|
-
if (!response.ok) throw new Error(`GraphQL request failed: ${response.statusText}`);
|
|
213
|
-
const result = await response.json();
|
|
214
|
-
if (result.errors) throw new Error(`GraphQL errors: ${JSON.stringify(result.errors)}`);
|
|
215
|
-
const widgetConfig = result.data.me.getWidgetConfig;
|
|
216
|
-
return {
|
|
203
|
+
orgConfig = {
|
|
217
204
|
...transformV3ProductsConfig(widgetConfig?.productsConfig),
|
|
218
|
-
resolution
|
|
205
|
+
resolution
|
|
219
206
|
};
|
|
220
207
|
} catch (err) {
|
|
221
|
-
logger.logError("fetchUnifiedGraphQLConfig | Error
|
|
222
|
-
|
|
208
|
+
logger.logError("fetchUnifiedGraphQLConfig | Error transforming products config", err);
|
|
209
|
+
orgConfig = {
|
|
223
210
|
colorsConfig: void 0,
|
|
224
|
-
frontendConfig: void 0
|
|
211
|
+
frontendConfig: void 0,
|
|
212
|
+
resolution
|
|
225
213
|
};
|
|
226
214
|
}
|
|
215
|
+
return {
|
|
216
|
+
org: { org: {
|
|
217
|
+
id: org?.id ?? "",
|
|
218
|
+
short_name: org?.shortName ?? "",
|
|
219
|
+
display_name: org?.displayName ?? "",
|
|
220
|
+
domain: org?.domain ?? "",
|
|
221
|
+
status: "",
|
|
222
|
+
created_at: org?.createdAt ?? "",
|
|
223
|
+
updated_at: org?.updatedAt ?? ""
|
|
224
|
+
} },
|
|
225
|
+
gates: (widgetConfig?.gates ?? []).map((g) => ({
|
|
226
|
+
name: g.name,
|
|
227
|
+
value: g.value,
|
|
228
|
+
groupName: g.groupName
|
|
229
|
+
})),
|
|
230
|
+
experiment_assignments: toExperimentAssignments(widgetConfig?.experimentAssignments),
|
|
231
|
+
orgConfig
|
|
232
|
+
};
|
|
227
233
|
};
|
|
228
234
|
|
|
229
235
|
//#endregion
|
|
230
|
-
export {
|
|
231
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2hHcmFwaFFMQ29uZmlnLmpzIiwibmFtZXMiOlsiTG9nZ2VyIiwiREVGQVVMVF9QQUdFX1ZBUklBTlRTOiBQYWdlVmFyaWFudENvbmZpZ1tdIiwidjNwYWdlVmFyaWFudHM6IFBhZ2VWYXJpYW50Q29uZmlnW10iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZW52aXZlQ29uZmlnU2VydmljZS9mZXRjaEdyYXBoUUxDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHtcbiAgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwLFxuICB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwsXG4gIHZhbGlkYXRlQW5kVHJhbnNmb3JtTW91bnRpbmdDb25maWcsXG4gIHZhbGlkYXRlQW5kVHJhbnNmb3JtUGFnZVZhcmlhbnRzLFxufSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IEZyb250ZW5kQ29uZmlnVjMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnVjMnO1xuaW1wb3J0IHsgQ29sb3JNYXBwaW5nVjMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NvbG9yc0NvbmZpZ1YzJztcbi8vIFR5cGUtb25seTogYSB2YWx1ZSBpbXBvcnQgd291bGQgcHVsbCB0aGUgRmxvYXRpbmdCdXR0b24gY29tcG9uZW50IChhbmRcbi8vIFJlYWN0KSB0aHJvdWdoIHRoZSBwYWNrYWdlJ3MgY29tcG9uZW50IGluZGV4IGludG8gdGhlIGluamVjdGlvbiBidW5kbGUnc1xuLy8gcHJlLWNvbmZpZyBjaHVuay5cbmltcG9ydCB0eXBlIHsgRmxvYXRpbmdCdXR0b25Mb2NhdGlvbiB9IGZyb20gJ0BlbnZpdmUtYWkvcmVhY3QtdG9vbGtpdC12My9GbG9hdGluZ0J1dHRvbic7XG5pbXBvcnQgeyBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ncmFwaHFsL3F1ZXJpZXMvZ2V0Q29sb3JzQW5kRnJvbnRlbmRRdWVyeSc7XG5pbXBvcnQgeyBnZXRXaWRnZXRDb25maWdRdWVyeSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3JhcGhxbC9xdWVyaWVzL2dldFdpZGdldENvbmZpZ1F1ZXJ5JztcbmltcG9ydCB7IG1vY2tWM0NvbG9yc0NvbmZpZywgbW9ja1YzRnJvbnRlbmRDb25maWcgfSBmcm9tICdzcmMvY29udGV4dHMvZ3JhcGhxbENvbnRleHQvbW9ja1YzQ29uZmlnJztcbmltcG9ydCB7IFdpZGdldENvbmZpZ1YzIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzVjMnO1xuaW1wb3J0IHsgUGFnZVZhcmlhbnRDb25maWcsIFBhZ2VWYXJpYW50VGVzdFR5cGUsIFdpZGdldE1vdW50aW5nQ29uZmlnIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgR3JhcGhRbENvbmZpZ1ZhbHVlcyB9IGZyb20gJ3NyYy9jb250ZXh0cy9ncmFwaHFsQ29udGV4dCc7XG5pbXBvcnQgeyBjb25maWdWZXJzaW9uT3ZlcnJpZGUgfSBmcm9tICdzcmMvdHlwZXMvY29uZmlnLXZlcnNpb25zJztcbmltcG9ydCB7IEV4cGVyaW1lbnRDb25maWdSZXNvbHV0aW9uTWV0YWRhdGEgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdDb25maWdSZXN1bHRzJztcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcignZmV0Y2hHcmFwaFFMQ29uZmlnJyk7XG5cbnR5cGUgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlID0gQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEZyb250ZW5kQ29uZmlnVjM+O1xudHlwZSBDb2xvcnNDb25maWdWM1Jlc3BvbnNlID0gQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPENvbG9yTWFwcGluZ1YzPjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUEFHRV9WQVJJQU5UUzogUGFnZVZhcmlhbnRDb25maWdbXSA9IFtcbiAge1xuICAgIHZhcmlhbnRJZDogJ3BscCcsXG4gICAgdmFyaWFudFR5cGU6ICdwbHAnLFxuICAgIHBscElkRXh0cmFjdG9yOiAndXJsLXJlc29sdmVyLXBscC1pZCcsXG4gICAgd2lkZ2V0TW91bnRpbmc6IFtdLFxuICAgIHZhcmlhbnRUZXN0czogW3sgdGVzdFR5cGU6IFBhZ2VWYXJpYW50VGVzdFR5cGUuVXJsUmVzb2x2ZXIgfV0sXG4gIH0sXG4gIHtcbiAgICB2YXJpYW50SWQ6ICdwZHAnLFxuICAgIHZhcmlhbnRUeXBlOiAncGRwJyxcbiAgICBwcm9kdWN0SWRFeHRyYWN0b3I6ICd1cmwtcmVzb2x2ZXItcHJvZHVjdC1pZCcsXG4gICAgd2lkZ2V0TW91bnRpbmc6IFtdLFxuICAgIHZhcmlhbnRUZXN0czogW3sgdGVzdFR5cGU6IFBhZ2VWYXJpYW50VGVzdFR5cGUuVXJsUmVzb2x2ZXIgfV0sXG4gIH0sXG5dO1xuXG4vLyBTdHJpbmctbGl0ZXJhbCB2YWx1ZXMgb2YgdGhlIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24gZW51bTsga2VlcCBpbiBzeW5jXG4vLyB3aXRoIEBlbnZpdmUtYWkvcmVhY3QtdG9vbGtpdC12My9GbG9hdGluZ0J1dHRvbi90eXBlcy90eXBlcy50cy5cbmNvbnN0IEZMT0FUSU5HX0JVVFRPTl9QT1NJVElPTlMgPSBbXG4gICdib3R0b20tbGVmdCcsXG4gICdtaWRkbGUtbGVmdCcsXG4gICdtaWRkbGUtcmlnaHQnLFxuICAnYm90dG9tLXJpZ2h0Jyxcbl0gYXMgY29uc3Q7XG5cbmNvbnN0IG1hcFBvc2l0aW9uVG9DYW1lbENhc2UgPSAocG9zaXRpb246IHN0cmluZyk6IEZsb2F0aW5nQnV0dG9uTG9jYXRpb24gPT4ge1xuICBpZiAoKEZMT0FUSU5HX0JVVFRPTl9QT1NJVElPTlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHBvc2l0aW9uKSkge1xuICAgIHJldHVybiBwb3NpdGlvbiBhcyBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3NpdGlvbjogJHtwb3NpdGlvbn1gKTtcbn07XG5cbmNvbnN0IHYzRnJvbnRlbmRDb25maWdDbGVhbnVwID0gKFxuICB2M1Jvb3RDb25maWc6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbik6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9PiB7XG4gIGNvbnN0IHsgdWlDb25maWdzIH0gPSB2M1Jvb3RDb25maWc7XG4gIGlmICghdWlDb25maWdzKSByZXR1cm4gdjNSb290Q29uZmlnO1xuICBjb25zdCB7IGZsb2F0aW5nQnV0dG9uLCBsb29rQW5kRmVlbCB9ID0gdWlDb25maWdzIGFzIGFueTtcbiAgaWYgKCFmbG9hdGluZ0J1dHRvbiB8fCAhbG9va0FuZEZlZWwpIHJldHVybiB2M1Jvb3RDb25maWc7XG4gIGNvbnN0IHsgZm9udFNpemUsIGxpbmVIZWlnaHQsIGxldHRlclNwYWNpbmcgfSA9IGxvb2tBbmRGZWVsLnR5cG9ncmFwaHkgYXMgYW55O1xuICByZXR1cm4ge1xuICAgIC4uLnYzUm9vdENvbmZpZyxcbiAgICB1aUNvbmZpZ3M6IHtcbiAgICAgIC4uLnVpQ29uZmlncyxcbiAgICAgIGZsb2F0aW5nQnV0dG9uOiB7XG4gICAgICAgIC4uLmZsb2F0aW5nQnV0dG9uLFxuICAgICAgICBwb3NpdGlvbjogbWFwUG9zaXRpb25Ub0NhbWVsQ2FzZShcbiAgICAgICAgICB2M1Jvb3RDb25maWcudWlDb25maWdzPy5mbG9hdGluZ0J1dHRvbj8ucG9zaXRpb24gYXMgc3RyaW5nLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGxvb2tBbmRGZWVsOiB7XG4gICAgICAgIC4uLmxvb2tBbmRGZWVsLFxuICAgICAgICBjaGF0SGVhZGVyTG9nb0RhcmtTcmM6IGxvb2tBbmRGZWVsLmNoYXRIZWFkZXJMb2dvRGFya1NyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgY2hhdEhlYWRlckxvZ29MaWdodFNyYzogbG9va0FuZEZlZWwuY2hhdEhlYWRlckxvZ29MaWdodFNyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgdHlwb2dyYXBoeToge1xuICAgICAgICAgIC4uLmxvb2tBbmRGZWVsLnR5cG9ncmFwaHksXG4gICAgICAgICAgZm9udFNpemU6IHtcbiAgICAgICAgICAgIGIxOiBmb250U2l6ZT8uYjEgfHwgZm9udFNpemU/LmJfMSxcbiAgICAgICAgICAgIGIyOiBmb250U2l6ZT8uYjIgfHwgZm9udFNpemU/LmJfMixcbiAgICAgICAgICAgIGIzOiBmb250U2l6ZT8uYjMgfHwgZm9udFNpemU/LmJfMyxcbiAgICAgICAgICAgIGI0OiBmb250U2l6ZT8uYjQgfHwgZm9udFNpemU/LmJfNCxcbiAgICAgICAgICAgIGI1OiBmb250U2l6ZT8uYjUgfHwgZm9udFNpemU/LmJfNSxcbiAgICAgICAgICAgIGgxOiBmb250U2l6ZT8uaDEgfHwgZm9udFNpemU/LmhfMSxcbiAgICAgICAgICAgIGgyOiBmb250U2l6ZT8uaDIgfHwgZm9udFNpemU/LmhfMixcbiAgICAgICAgICAgIGgzOiBmb250U2l6ZT8uaDMgfHwgZm9udFNpemU/LmhfMyxcbiAgICAgICAgICAgIGwxOiBmb250U2l6ZT8ubDEgfHwgZm9udFNpemU/LmxfMSxcbiAgICAgICAgICAgIGwyOiBmb250U2l6ZT8ubDIgfHwgZm9udFNpemU/LmxfMixcbiAgICAgICAgICAgIHQxOiBmb250U2l6ZT8udDEgfHwgZm9udFNpemU/LnRfMSxcbiAgICAgICAgICAgIHQyOiBmb250U2l6ZT8udDIgfHwgZm9udFNpemU/LnRfMixcbiAgICAgICAgICAgIHQzOiBmb250U2l6ZT8udDMgfHwgZm9udFNpemU/LnRfMyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxldHRlclNwYWNpbmc6IHtcbiAgICAgICAgICAgIC4uLmxvb2tBbmRGZWVsLnR5cG9ncmFwaHkubGV0dGVyU3BhY2luZyxcbiAgICAgICAgICAgIGIxOiBsZXR0ZXJTcGFjaW5nPy5iMSB8fCBsZXR0ZXJTcGFjaW5nPy5iXzEsXG4gICAgICAgICAgICBiMjogbGV0dGVyU3BhY2luZz8uYjIgfHwgbGV0dGVyU3BhY2luZz8uYl8yLFxuICAgICAgICAgICAgYjM6IGxldHRlclNwYWNpbmc/LmIzIHx8IGxldHRlclNwYWNpbmc/LmJfMyxcbiAgICAgICAgICAgIGI0OiBsZXR0ZXJTcGFjaW5nPy5iNCB8fCBsZXR0ZXJTcGFjaW5nPy5iXzQsXG4gICAgICAgICAgICBiNTogbGV0dGVyU3BhY2luZz8uYjUgfHwgbGV0dGVyU3BhY2luZz8uYl81LFxuICAgICAgICAgICAgaDE6IGxldHRlclNwYWNpbmc/LmgxIHx8IGxldHRlclNwYWNpbmc/LmhfMSxcbiAgICAgICAgICAgIGgyOiBsZXR0ZXJTcGFjaW5nPy5oMiB8fCBsZXR0ZXJTcGFjaW5nPy5oXzIsXG4gICAgICAgICAgICBoMzogbGV0dGVyU3BhY2luZz8uaDMgfHwgbGV0dGVyU3BhY2luZz8uaF8zLFxuICAgICAgICAgICAgbDE6IGxldHRlclNwYWNpbmc/LmwxIHx8IGxldHRlclNwYWNpbmc/LmxfMSxcbiAgICAgICAgICAgIGwyOiBsZXR0ZXJTcGFjaW5nPy5sMiB8fCBsZXR0ZXJTcGFjaW5nPy5sXzIsXG4gICAgICAgICAgICB0MTogbGV0dGVyU3BhY2luZz8udDEgfHwgbGV0dGVyU3BhY2luZz8udF8xLFxuICAgICAgICAgICAgdDI6IGxldHRlclNwYWNpbmc/LnQyIHx8IGxldHRlclNwYWNpbmc/LnRfMixcbiAgICAgICAgICAgIHQzOiBsZXR0ZXJTcGFjaW5nPy50MyB8fCBsZXR0ZXJTcGFjaW5nPy50XzMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsaW5lSGVpZ2h0OiB7XG4gICAgICAgICAgICAuLi5sb29rQW5kRmVlbC50eXBvZ3JhcGh5LmxpbmVIZWlnaHQsXG4gICAgICAgICAgICAnMTE0JzogbGluZUhlaWdodD8ubGhfMTE0IHx8IGxpbmVIZWlnaHQ/LlsxMTRdLFxuICAgICAgICAgICAgJzExNic6IGxpbmVIZWlnaHQ/LmxoXzExNiB8fCBsaW5lSGVpZ2h0Py5bMTE2XSxcbiAgICAgICAgICAgICcxMTgnOiBsaW5lSGVpZ2h0Py5saF8xMTggfHwgbGluZUhlaWdodD8uWzExOF0sXG4gICAgICAgICAgICAnMTIwJzogbGluZUhlaWdodD8ubGhfMTIwIHx8IGxpbmVIZWlnaHQ/LlsxMjBdLFxuICAgICAgICAgICAgJzEyNCc6IGxpbmVIZWlnaHQ/LmxoXzEyNCB8fCBsaW5lSGVpZ2h0Py5bMTI0XSxcbiAgICAgICAgICAgICcxMjgnOiBsaW5lSGVpZ2h0Py5saF8xMjggfHwgbGluZUhlaWdodD8uWzEyOF0sXG4gICAgICAgICAgICAnMTMwJzogbGluZUhlaWdodD8ubGhfMTMwIHx8IGxpbmVIZWlnaHQ/LlsxMzBdLFxuICAgICAgICAgICAgJzEzMyc6IGxpbmVIZWlnaHQ/LmxoXzEzMyB8fCBsaW5lSGVpZ2h0Py5bMTMzXSxcbiAgICAgICAgICAgICcxNDAnOiBsaW5lSGVpZ2h0Py5saF8xNDAgfHwgbGluZUhlaWdodD8uWzE0MF0sXG4gICAgICAgICAgICAnMTQ4JzogbGluZUhlaWdodD8ubGhfMTQ4IHx8IGxpbmVIZWlnaHQ/LlsxNDhdLFxuICAgICAgICAgICAgYjE6IGxpbmVIZWlnaHQ/LmIxIHx8IGxpbmVIZWlnaHQ/LmJfMSxcbiAgICAgICAgICAgIGIyOiBsaW5lSGVpZ2h0Py5iMiB8fCBsaW5lSGVpZ2h0Py5iXzIsXG4gICAgICAgICAgICBiMzogbGluZUhlaWdodD8uYjMgfHwgbGluZUhlaWdodD8uYl8zLFxuICAgICAgICAgICAgYjQ6IGxpbmVIZWlnaHQ/LmI0IHx8IGxpbmVIZWlnaHQ/LmJfNCxcbiAgICAgICAgICAgIGI1OiBsaW5lSGVpZ2h0Py5iNSB8fCBsaW5lSGVpZ2h0Py5iXzUsXG4gICAgICAgICAgICBoMTogbGluZUhlaWdodD8uaDEgfHwgbGluZUhlaWdodD8uaF8xLFxuICAgICAgICAgICAgaDI6IGxpbmVIZWlnaHQ/LmgyIHx8IGxpbmVIZWlnaHQ/LmhfMixcbiAgICAgICAgICAgIGgzOiBsaW5lSGVpZ2h0Py5oMyB8fCBsaW5lSGVpZ2h0Py5oXzMsXG4gICAgICAgICAgICBsMTogbGluZUhlaWdodD8ubDEgfHwgbGluZUhlaWdodD8ubF8xLFxuICAgICAgICAgICAgbDI6IGxpbmVIZWlnaHQ/LmwyIHx8IGxpbmVIZWlnaHQ/LmxfMixcbiAgICAgICAgICAgIHQxOiBsaW5lSGVpZ2h0Py50MSB8fCBsaW5lSGVpZ2h0Py50XzEsXG4gICAgICAgICAgICB0MjogbGluZUhlaWdodD8udDIgfHwgbGluZUhlaWdodD8udF8yLFxuICAgICAgICAgICAgdDM6IGxpbmVIZWlnaHQ/LnQzIHx8IGxpbmVIZWlnaHQ/LnRfMyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufTtcblxuLy8gVHVybnMgYSByYXcgcHJvZHVjdHNDb25maWcgcGF5bG9hZCAoZnJvbSBnZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbiBvclxuLy8gZ2V0V2lkZ2V0Q29uZmlnKSBpbnRvIHRoZSBjYW1lbENhc2UgR3JhcGhRbENvbmZpZ1ZhbHVlcyBzaGFwZSB0aGUgcmVzdCBvZlxuLy8gdGhlIHRvb2xraXQgY29uc3VtZXMuIFJldHVybnMgbW9jayBjb25maWcgd2hlbiBjb2xvcnMgYXJlIGFic2VudC5cbmNvbnN0IHRyYW5zZm9ybVYzUHJvZHVjdHNDb25maWcgPSAoXG4gIHByb2R1Y3RzQ29uZmlnOlxuICAgIHwge1xuICAgICAgICBmcm9udGVuZD86IHsgdmFsdWVzPzogeyBtZXJjaGFudF9vdmVycmlkZV9jc3M/OiBzdHJpbmcgfSB9O1xuICAgICAgICB2X3RocmVlX2NvbmZpZz86IHsgdmFsdWVzPzogYW55IH07XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWQsXG4pOiBHcmFwaFFsQ29uZmlnVmFsdWVzID0+IHtcbiAgY29uc3QgdjNSb290Q29uZmlnID0gcHJvZHVjdHNDb25maWc/LnZfdGhyZWVfY29uZmlnPy52YWx1ZXM7XG4gIGNvbnN0IGZyb250ZW5kVmFsdWVzID0gcHJvZHVjdHNDb25maWc/LmZyb250ZW5kPy52YWx1ZXM7XG5cbiAgaWYgKCF2M1Jvb3RDb25maWc/LmNvbG9ycykge1xuICAgIGxvZ2dlci5sb2dEZWJ1ZygndHJhbnNmb3JtVjNQcm9kdWN0c0NvbmZpZyB8IE5vIGNvbG9ycyBmb3VuZCwgcmV0dXJuaW5nIG1vY2sgY29uZmlnJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yc0NvbmZpZzogbW9ja1YzQ29sb3JzQ29uZmlnLFxuICAgICAgZnJvbnRlbmRDb25maWc6IG1vY2tWM0Zyb250ZW5kQ29uZmlnIGFzIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgcGFnZVZhcmlhbnRzOiBERUZBVUxUX1BBR0VfVkFSSUFOVFMsXG4gICAgICAgIHdpZGdldENvbmZpZ3M6IHt9LFxuICAgICAgICBtb3VudGluZ0NvbmZpZ3M6IHt9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgdjNGcm9udGVuZENvbmZpZyA9IHYzRnJvbnRlbmRDb25maWdDbGVhbnVwKFxuICAgIHRyYW5zZm9ybVNuYWtlVG9DYW1lbCh2M1Jvb3RDb25maWcpIGFzIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbiAgKTtcblxuICBjb25zdCBtZXJjaGFudE92ZXJyaWRlQ3NzID1cbiAgICB2M0Zyb250ZW5kQ29uZmlnLnVpQ29uZmlncz8ubWVyY2hhbnRPdmVycmlkZUNzcyB8fCBmcm9udGVuZFZhbHVlcz8ubWVyY2hhbnRfb3ZlcnJpZGVfY3NzO1xuXG4gIGNvbnN0IHYzTW91bnRpbmdDb25maWdzQXJyYXkgPSAodHJhbnNmb3JtU25ha2VUb0NhbWVsKHYzUm9vdENvbmZpZz8ubW91bnRpbmdfY29uZmlncykgPz9cbiAgICBbXSkgYXMgdW5rbm93biBhcyB7IGtleTogc3RyaW5nOyBjb25maWc6IFdpZGdldE1vdW50aW5nQ29uZmlnIH1bXTtcbiAgY29uc3QgdjNNb3VudGluZ0NvbmZpZ3MgPSB2M01vdW50aW5nQ29uZmlnc0FycmF5LnJlZHVjZShcbiAgICAoYWNjLCB7IGtleSwgY29uZmlnIH0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjY1trZXldID0gdmFsaWRhdGVBbmRUcmFuc2Zvcm1Nb3VudGluZ0NvbmZpZyhjb25maWcsIGtleSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCBtb3VudGluZyBjb25maWcsIHNraXBwaW5nJywgZXJyb3IsIHsga2V5IH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIFdpZGdldE1vdW50aW5nQ29uZmlnPixcbiAgKTtcblxuICBjb25zdCB2M1dpZGdldENvbmZpZ3NBcnJheSA9ICh0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy53aWRnZXRfY29uZmlncykgPz9cbiAgICBbXSkgYXMgdW5rbm93biBhcyBXaWRnZXRDb25maWdWM1tdO1xuICBjb25zdCB2M1dpZGdldENvbmZpZ3MgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgdjNXaWRnZXRDb25maWdzQXJyYXk/Lm1hcCgoeyB3aWRnZXRDb25maWdJZCwgLi4ucmVzdCB9OiBXaWRnZXRDb25maWdWMykgPT4gW1xuICAgICAgd2lkZ2V0Q29uZmlnSWQsXG4gICAgICB7IHdpZGdldENvbmZpZ0lkLCAuLi5yZXN0IH0gYXMgV2lkZ2V0Q29uZmlnVjMsXG4gICAgXSksXG4gICkgYXMgUmVjb3JkPHN0cmluZywgV2lkZ2V0Q29uZmlnVjM+O1xuXG4gIGNvbnN0IHYzcGFnZVZhcmlhbnRzOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gQXJyYXkuaXNBcnJheSh2M1Jvb3RDb25maWc/LnBhZ2VfdmFyaWFudHMpXG4gICAgPyB2M1Jvb3RDb25maWcucGFnZV92YXJpYW50cy5yZWR1Y2UoKGFjYzogUGFnZVZhcmlhbnRDb25maWdbXSwgdmFyaWFudDogdW5rbm93bikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGFjYy5wdXNoKHZhbGlkYXRlQW5kVHJhbnNmb3JtUGFnZVZhcmlhbnRzKHZhcmlhbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCBwYWdlIHZhcmlhbnQsIHNraXBwaW5nJywgZXJyb3IsIHsgdmFyaWFudCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwgW10pXG4gICAgOiBERUZBVUxUX1BBR0VfVkFSSUFOVFM7XG5cbiAgY29uc3QgdjNDb2xvcnNDb25maWcgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy5jb2xvcnM/LnZhbHVlcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBjb2xvcnNDb25maWc6IHYzQ29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UsXG4gICAgZnJvbnRlbmRDb25maWc6IHtcbiAgICAgIC4uLih2M0Zyb250ZW5kQ29uZmlnIGFzIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSksXG4gICAgICBtZXJjaGFudE92ZXJyaWRlQ3NzLFxuICAgICAgd2lkZ2V0Q29uZmlnczogdjNXaWRnZXRDb25maWdzLFxuICAgIH0sXG4gICAgb3JnUGFnZUNvbmZpZzoge1xuICAgICAgcGFnZVZhcmlhbnRzOiB2M3BhZ2VWYXJpYW50cyxcbiAgICAgIHdpZGdldENvbmZpZ3M6IHYzV2lkZ2V0Q29uZmlncyxcbiAgICAgIG1vdW50aW5nQ29uZmlnczogdjNNb3VudGluZ0NvbmZpZ3MsXG4gICAgfSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaEdyYXBoUUxDb25maWcgPSBhc3luYyAoXG4gIGJhc2VVcmw6IHN0cmluZyxcbiAgYXBpS2V5OiBzdHJpbmcsXG4pOiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBxdWVyeSA9IGdldENvbG9yc0FuZEZyb250ZW5kUXVlcnkoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2Jhc2VVcmx9L3YxL2dyYXBocWxgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcXVlcnkgfSksXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEdyYXBoUUwgcmVxdWVzdCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgR3JhcGhRTCBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0LmVycm9ycyl9YCk7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmxvZ0RlYnVnKCdmZXRjaEdyYXBoUUxDb25maWcgfCBSZXR1cm5pbmcgdjMgY29uZmlnJyk7XG4gICAgcmV0dXJuIHRyYW5zZm9ybVYzUHJvZHVjdHNDb25maWcocmVzdWx0LmRhdGEubWUuZ2V0UHJvZHVjdHNDb25maWdCeVZlcnNpb24pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIubG9nRXJyb3IoJ2ZldGNoR3JhcGhRTENvbmZpZyB8IEVycm9yIGZldGNoaW5nIEdyYXBoUUwgY29uZmlnJywgZXJyKTtcbiAgICByZXR1cm4geyBjb2xvcnNDb25maWc6IHVuZGVmaW5lZCwgZnJvbnRlbmRDb25maWc6IHVuZGVmaW5lZCB9O1xuICB9XG59O1xuXG4vLyBTdGF0c2lnLWV4cGVyaW1lbnQtYXdhcmUgdW5pZmllZCBjb25maWcgcGF0aC4gQ2FsbGVkIHdoZW4gdGhlXG4vLyBgdXNlX3VuaWZpZWRfY29uZmlnYCBTdGF0c2lnIGdhdGUgaXMgb24uIFJldHVybnMgdGhlIHNhbWUgc2hhcGUgYXNcbi8vIGZldGNoR3JhcGhRTENvbmZpZyB3aXRoIHRoZSByZXNvbHV0aW9uIG1ldGFkYXRhIHB5bW9ubyB1c2VkIHRvIHBpY2sgdGhlXG4vLyB2ZXJzaW9uIGF0dGFjaGVkIOKAlCBjYWxsZXJzIHRocmVhZCBgcmVzb2x1dGlvbi5iYXNlVmVyc2lvbmAgaW50byBkb3duc3RyZWFtXG4vLyBpbmZlcmVuY2UgcmVxdWVzdHMgc28gaW5mZXJlbmNlIGlzIHNjb3BlZCB0byB0aGUgdmVyc2lvbiB0aGF0IHByb2R1Y2VkXG4vLyB0aGUgd2lkZ2V0cyB0aGUgdXNlciBpcyByZW5kZXJpbmcuIEEgYHNwaWZmeV9jb25maWdfdmVyc2lvbmAgL1xuLy8gYGVudml2ZV9jb25maWdfdmVyc2lvbmAgVVJMIHBhcmFtLCB3aGVuIHByZXNlbnQsIGlzIHRocmVhZGVkIHRocm91Z2ggYXNcbi8vIHRoZSBgdmVyc2lvbmAgdmFyaWFibGUgdG8gcGluIGEgc3BlY2lmaWMgY29uZmlnIHZlcnNpb24gKG1hdGNoZXMgdGhlXG4vLyBsZWdhY3kgcGF0aCdzIGRlYnVnL3JvbGxiYWNrIGFmZm9yZGFuY2UpLlxuZXhwb3J0IGNvbnN0IGZldGNoVW5pZmllZEdyYXBoUUxDb25maWcgPSBhc3luYyAoXG4gIGJhc2VVcmw6IHN0cmluZyxcbiAgYXBpS2V5OiBzdHJpbmcsXG4gIHVzZXJJZDogc3RyaW5nLFxuKTogUHJvbWlzZTxHcmFwaFFsQ29uZmlnVmFsdWVzPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcXVlcnkgPSBnZXRXaWRnZXRDb25maWdRdWVyeSgpO1xuICAgIGNvbnN0IHZlcnNpb24gPSBjb25maWdWZXJzaW9uT3ZlcnJpZGUoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2Jhc2VVcmx9L3YxL2dyYXBocWxgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcXVlcnksIHZhcmlhYmxlczogeyB1c2VySWQsIHZlcnNpb24gfSB9KSxcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgR3JhcGhRTCByZXF1ZXN0IGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICBpZiAocmVzdWx0LmVycm9ycykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaFFMIGVycm9yczogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQuZXJyb3JzKX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB3aWRnZXRDb25maWcgPSByZXN1bHQuZGF0YS5tZS5nZXRXaWRnZXRDb25maWc7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRyYW5zZm9ybVYzUHJvZHVjdHNDb25maWcod2lkZ2V0Q29uZmlnPy5wcm9kdWN0c0NvbmZpZyksXG4gICAgICByZXNvbHV0aW9uOiB3aWRnZXRDb25maWc/LnJlc29sdXRpb24gYXMgRXhwZXJpbWVudENvbmZpZ1Jlc29sdXRpb25NZXRhZGF0YSB8IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIubG9nRXJyb3IoJ2ZldGNoVW5pZmllZEdyYXBoUUxDb25maWcgfCBFcnJvciBmZXRjaGluZyB1bmlmaWVkIEdyYXBoUUwgY29uZmlnJywgZXJyKTtcbiAgICByZXR1cm4geyBjb2xvcnNDb25maWc6IHVuZGVmaW5lZCwgZnJvbnRlbmRDb25maWc6IHVuZGVmaW5lZCB9O1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQXNCQSxNQUFNLFNBQVMsSUFBSUEsZUFBTyxxQkFBcUI7QUFLL0MsTUFBYUMsd0JBQTZDLENBQ3hEO0NBQ0UsV0FBVztDQUNYLGFBQWE7Q0FDYixnQkFBZ0I7Q0FDaEIsZ0JBQWdCLEVBQUU7Q0FDbEIsY0FBYyxDQUFDLEVBQUUsVUFBVSxvQkFBb0IsYUFBYSxDQUFDO0NBQzlELEVBQ0Q7Q0FDRSxXQUFXO0NBQ1gsYUFBYTtDQUNiLG9CQUFvQjtDQUNwQixnQkFBZ0IsRUFBRTtDQUNsQixjQUFjLENBQUMsRUFBRSxVQUFVLG9CQUFvQixhQUFhLENBQUM7Q0FDOUQsQ0FDRjtBQUlELE1BQU0sNEJBQTRCO0NBQ2hDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0Q7QUFFRCxNQUFNLDBCQUEwQixhQUE2QztBQUMzRSxLQUFLLDBCQUFnRCxTQUFTLFNBQVMsQ0FDckUsUUFBTztBQUVULE9BQU0sSUFBSSxNQUFNLHFCQUFxQixXQUFXOztBQUdsRCxNQUFNLDJCQUNKLGlCQUM2QjtDQUM3QixNQUFNLEVBQUUsY0FBYztBQUN0QixLQUFJLENBQUMsVUFBVyxRQUFPO0NBQ3ZCLE1BQU0sRUFBRSxnQkFBZ0IsZ0JBQWdCO0FBQ3hDLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFhLFFBQU87Q0FDNUMsTUFBTSxFQUFFLFVBQVUsWUFBWSxrQkFBa0IsWUFBWTtBQUM1RCxRQUFPO0VBQ0wsR0FBRztFQUNILFdBQVc7R0FDVCxHQUFHO0dBQ0gsZ0JBQWdCO0lBQ2QsR0FBRztJQUNILFVBQVUsdUJBQ1IsYUFBYSxXQUFXLGdCQUFnQixTQUN6QztJQUNGO0dBQ0QsYUFBYTtJQUNYLEdBQUc7SUFDSCx1QkFBdUIsWUFBWSx5QkFBeUIsWUFBWTtJQUN4RSx3QkFBd0IsWUFBWSwwQkFBMEIsWUFBWTtJQUMxRSxZQUFZO0tBQ1Ys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
|
|
236
|
+
export { fetchUnifiedGraphQLConfig };
|
|
237
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2hHcmFwaFFMQ29uZmlnLmpzIiwibmFtZXMiOlsiTG9nZ2VyIiwiREVGQVVMVF9QQUdFX1ZBUklBTlRTOiBQYWdlVmFyaWFudENvbmZpZ1tdIiwidjNwYWdlVmFyaWFudHM6IFBhZ2VWYXJpYW50Q29uZmlnW10iLCJvcmdDb25maWc6IEdyYXBoUWxDb25maWdWYWx1ZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZW52aXZlQ29uZmlnU2VydmljZS9mZXRjaEdyYXBoUUxDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHtcbiAgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwLFxuICB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwsXG4gIHZhbGlkYXRlQW5kVHJhbnNmb3JtTW91bnRpbmdDb25maWcsXG4gIHZhbGlkYXRlQW5kVHJhbnNmb3JtUGFnZVZhcmlhbnRzLFxufSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IEZyb250ZW5kQ29uZmlnVjMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnVjMnO1xuaW1wb3J0IHsgQ29sb3JNYXBwaW5nVjMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NvbG9yc0NvbmZpZ1YzJztcbi8vIFR5cGUtb25seTogYSB2YWx1ZSBpbXBvcnQgd291bGQgcHVsbCB0aGUgRmxvYXRpbmdCdXR0b24gY29tcG9uZW50IChhbmRcbi8vIFJlYWN0KSB0aHJvdWdoIHRoZSBwYWNrYWdlJ3MgY29tcG9uZW50IGluZGV4IGludG8gdGhlIGluamVjdGlvbiBidW5kbGUnc1xuLy8gcHJlLWNvbmZpZyBjaHVuay5cbmltcG9ydCB0eXBlIHsgRmxvYXRpbmdCdXR0b25Mb2NhdGlvbiB9IGZyb20gJ0BlbnZpdmUtYWkvcmVhY3QtdG9vbGtpdC12My9GbG9hdGluZ0J1dHRvbic7XG5pbXBvcnQgeyBnZXRXaWRnZXRDb25maWdRdWVyeSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3JhcGhxbC9xdWVyaWVzL2dldFdpZGdldENvbmZpZ1F1ZXJ5JztcbmltcG9ydCB7IG1vY2tWM0NvbG9yc0NvbmZpZywgbW9ja1YzRnJvbnRlbmRDb25maWcgfSBmcm9tICdzcmMvY29udGV4dHMvZ3JhcGhxbENvbnRleHQvbW9ja1YzQ29uZmlnJztcbmltcG9ydCB7IFdpZGdldENvbmZpZ1YzIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzVjMnO1xuaW1wb3J0IHsgUGFnZVZhcmlhbnRDb25maWcsIFBhZ2VWYXJpYW50VGVzdFR5cGUsIFdpZGdldE1vdW50aW5nQ29uZmlnIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgR3JhcGhRbENvbmZpZ1ZhbHVlcyB9IGZyb20gJ3NyYy9jb250ZXh0cy9ncmFwaHFsQ29udGV4dCc7XG5pbXBvcnQgeyBjb25maWdWZXJzaW9uT3ZlcnJpZGUgfSBmcm9tICdzcmMvdHlwZXMvY29uZmlnLXZlcnNpb25zJztcbmltcG9ydCB7XG4gIEV4cGVyaW1lbnRDb25maWdSZXNvbHV0aW9uTWV0YWRhdGEsXG4gIE9yZ0NvbmZpZ0V4cGVyaW1lbnRBc3NpZ25tZW50LFxuICBPcmdDb25maWdGZWF0dXJlR2F0ZSxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnQ29uZmlnUmVzdWx0cyc7XG4vLyBUeXBlLW9ubHkgaW1wb3J0IOKAlCBlcmFzZWQgYXQgY29tcGlsZSB0aW1lLCBzbyB0aGlzIGRvZXMgbm90IGNyZWF0ZSBhIHJ1bnRpbWVcbi8vIGltcG9ydCBjeWNsZSB3aXRoIGVudml2ZUNvbmZpZ1NlcnZpY2UgKHdoaWNoIGltcG9ydHMgZmV0Y2hVbmlmaWVkR3JhcGhRTENvbmZpZykuXG5pbXBvcnQgdHlwZSB7IEVudml2ZVNlcnZpY2VDb25maWcgfSBmcm9tICcuL2Vudml2ZUNvbmZpZ1NlcnZpY2UnO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCdmZXRjaEdyYXBoUUxDb25maWcnKTtcblxudHlwZSBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UgPSBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8RnJvbnRlbmRDb25maWdWMz47XG50eXBlIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UgPSBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8Q29sb3JNYXBwaW5nVjM+O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9QQUdFX1ZBUklBTlRTOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gW1xuICB7XG4gICAgdmFyaWFudElkOiAncGxwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BscCcsXG4gICAgcGxwSWRFeHRyYWN0b3I6ICd1cmwtcmVzb2x2ZXItcGxwLWlkJyxcbiAgICB3aWRnZXRNb3VudGluZzogW10sXG4gICAgdmFyaWFudFRlc3RzOiBbeyB0ZXN0VHlwZTogUGFnZVZhcmlhbnRUZXN0VHlwZS5VcmxSZXNvbHZlciB9XSxcbiAgfSxcbiAge1xuICAgIHZhcmlhbnRJZDogJ3BkcCcsXG4gICAgdmFyaWFudFR5cGU6ICdwZHAnLFxuICAgIHByb2R1Y3RJZEV4dHJhY3RvcjogJ3VybC1yZXNvbHZlci1wcm9kdWN0LWlkJyxcbiAgICB3aWRnZXRNb3VudGluZzogW10sXG4gICAgdmFyaWFudFRlc3RzOiBbeyB0ZXN0VHlwZTogUGFnZVZhcmlhbnRUZXN0VHlwZS5VcmxSZXNvbHZlciB9XSxcbiAgfSxcbl07XG5cbi8vIFN0cmluZy1saXRlcmFsIHZhbHVlcyBvZiB0aGUgRmxvYXRpbmdCdXR0b25Mb2NhdGlvbiBlbnVtOyBrZWVwIGluIHN5bmNcbi8vIHdpdGggQGVudml2ZS1haS9yZWFjdC10b29sa2l0LXYzL0Zsb2F0aW5nQnV0dG9uL3R5cGVzL3R5cGVzLnRzLlxuY29uc3QgRkxPQVRJTkdfQlVUVE9OX1BPU0lUSU9OUyA9IFtcbiAgJ2JvdHRvbS1sZWZ0JyxcbiAgJ21pZGRsZS1sZWZ0JyxcbiAgJ21pZGRsZS1yaWdodCcsXG4gICdib3R0b20tcmlnaHQnLFxuXSBhcyBjb25zdDtcblxuY29uc3QgbWFwUG9zaXRpb25Ub0NhbWVsQ2FzZSA9IChwb3NpdGlvbjogc3RyaW5nKTogRmxvYXRpbmdCdXR0b25Mb2NhdGlvbiA9PiB7XG4gIGlmICgoRkxPQVRJTkdfQlVUVE9OX1BPU0lUSU9OUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMocG9zaXRpb24pKSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uIGFzIEZsb2F0aW5nQnV0dG9uTG9jYXRpb247XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBvc2l0aW9uOiAke3Bvc2l0aW9ufWApO1xufTtcblxuY29uc3QgdjNGcm9udGVuZENvbmZpZ0NsZWFudXAgPSAoXG4gIHYzUm9vdENvbmZpZzogRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuKTogRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlID0+IHtcbiAgY29uc3QgeyB1aUNvbmZpZ3MgfSA9IHYzUm9vdENvbmZpZztcbiAgaWYgKCF1aUNvbmZpZ3MpIHJldHVybiB2M1Jvb3RDb25maWc7XG4gIGNvbnN0IHsgZmxvYXRpbmdCdXR0b24sIGxvb2tBbmRGZWVsIH0gPSB1aUNvbmZpZ3MgYXMgYW55O1xuICBpZiAoIWZsb2F0aW5nQnV0dG9uIHx8ICFsb29rQW5kRmVlbCkgcmV0dXJuIHYzUm9vdENvbmZpZztcbiAgY29uc3QgeyBmb250U2l6ZSwgbGluZUhlaWdodCwgbGV0dGVyU3BhY2luZyB9ID0gbG9va0FuZEZlZWwudHlwb2dyYXBoeSBhcyBhbnk7XG4gIHJldHVybiB7XG4gICAgLi4udjNSb290Q29uZmlnLFxuICAgIHVpQ29uZmlnczoge1xuICAgICAgLi4udWlDb25maWdzLFxuICAgICAgZmxvYXRpbmdCdXR0b246IHtcbiAgICAgICAgLi4uZmxvYXRpbmdCdXR0b24sXG4gICAgICAgIHBvc2l0aW9uOiBtYXBQb3NpdGlvblRvQ2FtZWxDYXNlKFxuICAgICAgICAgIHYzUm9vdENvbmZpZy51aUNvbmZpZ3M/LmZsb2F0aW5nQnV0dG9uPy5wb3NpdGlvbiBhcyBzdHJpbmcsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgbG9va0FuZEZlZWw6IHtcbiAgICAgICAgLi4ubG9va0FuZEZlZWwsXG4gICAgICAgIGNoYXRIZWFkZXJMb2dvRGFya1NyYzogbG9va0FuZEZlZWwuY2hhdEhlYWRlckxvZ29EYXJrU3JjIHx8IGxvb2tBbmRGZWVsLmNoYXRIZWFkZXJMb2dvU3JjLFxuICAgICAgICBjaGF0SGVhZGVyTG9nb0xpZ2h0U3JjOiBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb0xpZ2h0U3JjIHx8IGxvb2tBbmRGZWVsLmNoYXRIZWFkZXJMb2dvU3JjLFxuICAgICAgICB0eXBvZ3JhcGh5OiB7XG4gICAgICAgICAgLi4ubG9va0FuZEZlZWwudHlwb2dyYXBoeSxcbiAgICAgICAgICBmb250U2l6ZToge1xuICAgICAgICAgICAgYjE6IGZvbnRTaXplPy5iMSB8fCBmb250U2l6ZT8uYl8xLFxuICAgICAgICAgICAgYjI6IGZvbnRTaXplPy5iMiB8fCBmb250U2l6ZT8uYl8yLFxuICAgICAgICAgICAgYjM6IGZvbnRTaXplPy5iMyB8fCBmb250U2l6ZT8uYl8zLFxuICAgICAgICAgICAgYjQ6IGZvbnRTaXplPy5iNCB8fCBmb250U2l6ZT8uYl80LFxuICAgICAgICAgICAgYjU6IGZvbnRTaXplPy5iNSB8fCBmb250U2l6ZT8uYl81LFxuICAgICAgICAgICAgaDE6IGZvbnRTaXplPy5oMSB8fCBmb250U2l6ZT8uaF8xLFxuICAgICAgICAgICAgaDI6IGZvbnRTaXplPy5oMiB8fCBmb250U2l6ZT8uaF8yLFxuICAgICAgICAgICAgaDM6IGZvbnRTaXplPy5oMyB8fCBmb250U2l6ZT8uaF8zLFxuICAgICAgICAgICAgbDE6IGZvbnRTaXplPy5sMSB8fCBmb250U2l6ZT8ubF8xLFxuICAgICAgICAgICAgbDI6IGZvbnRTaXplPy5sMiB8fCBmb250U2l6ZT8ubF8yLFxuICAgICAgICAgICAgdDE6IGZvbnRTaXplPy50MSB8fCBmb250U2l6ZT8udF8xLFxuICAgICAgICAgICAgdDI6IGZvbnRTaXplPy50MiB8fCBmb250U2l6ZT8udF8yLFxuICAgICAgICAgICAgdDM6IGZvbnRTaXplPy50MyB8fCBmb250U2l6ZT8udF8zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGV0dGVyU3BhY2luZzoge1xuICAgICAgICAgICAgLi4ubG9va0FuZEZlZWwudHlwb2dyYXBoeS5sZXR0ZXJTcGFjaW5nLFxuICAgICAgICAgICAgYjE6IGxldHRlclNwYWNpbmc/LmIxIHx8IGxldHRlclNwYWNpbmc/LmJfMSxcbiAgICAgICAgICAgIGIyOiBsZXR0ZXJTcGFjaW5nPy5iMiB8fCBsZXR0ZXJTcGFjaW5nPy5iXzIsXG4gICAgICAgICAgICBiMzogbGV0dGVyU3BhY2luZz8uYjMgfHwgbGV0dGVyU3BhY2luZz8uYl8zLFxuICAgICAgICAgICAgYjQ6IGxldHRlclNwYWNpbmc/LmI0IHx8IGxldHRlclNwYWNpbmc/LmJfNCxcbiAgICAgICAgICAgIGI1OiBsZXR0ZXJTcGFjaW5nPy5iNSB8fCBsZXR0ZXJTcGFjaW5nPy5iXzUsXG4gICAgICAgICAgICBoMTogbGV0dGVyU3BhY2luZz8uaDEgfHwgbGV0dGVyU3BhY2luZz8uaF8xLFxuICAgICAgICAgICAgaDI6IGxldHRlclNwYWNpbmc/LmgyIHx8IGxldHRlclNwYWNpbmc/LmhfMixcbiAgICAgICAgICAgIGgzOiBsZXR0ZXJTcGFjaW5nPy5oMyB8fCBsZXR0ZXJTcGFjaW5nPy5oXzMsXG4gICAgICAgICAgICBsMTogbGV0dGVyU3BhY2luZz8ubDEgfHwgbGV0dGVyU3BhY2luZz8ubF8xLFxuICAgICAgICAgICAgbDI6IGxldHRlclNwYWNpbmc/LmwyIHx8IGxldHRlclNwYWNpbmc/LmxfMixcbiAgICAgICAgICAgIHQxOiBsZXR0ZXJTcGFjaW5nPy50MSB8fCBsZXR0ZXJTcGFjaW5nPy50XzEsXG4gICAgICAgICAgICB0MjogbGV0dGVyU3BhY2luZz8udDIgfHwgbGV0dGVyU3BhY2luZz8udF8yLFxuICAgICAgICAgICAgdDM6IGxldHRlclNwYWNpbmc/LnQzIHx8IGxldHRlclNwYWNpbmc/LnRfMyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxpbmVIZWlnaHQ6IHtcbiAgICAgICAgICAgIC4uLmxvb2tBbmRGZWVsLnR5cG9ncmFwaHkubGluZUhlaWdodCxcbiAgICAgICAgICAgICcxMTQnOiBsaW5lSGVpZ2h0Py5saF8xMTQgfHwgbGluZUhlaWdodD8uWzExNF0sXG4gICAgICAgICAgICAnMTE2JzogbGluZUhlaWdodD8ubGhfMTE2IHx8IGxpbmVIZWlnaHQ/LlsxMTZdLFxuICAgICAgICAgICAgJzExOCc6IGxpbmVIZWlnaHQ/LmxoXzExOCB8fCBsaW5lSGVpZ2h0Py5bMTE4XSxcbiAgICAgICAgICAgICcxMjAnOiBsaW5lSGVpZ2h0Py5saF8xMjAgfHwgbGluZUhlaWdodD8uWzEyMF0sXG4gICAgICAgICAgICAnMTI0JzogbGluZUhlaWdodD8ubGhfMTI0IHx8IGxpbmVIZWlnaHQ/LlsxMjRdLFxuICAgICAgICAgICAgJzEyOCc6IGxpbmVIZWlnaHQ/LmxoXzEyOCB8fCBsaW5lSGVpZ2h0Py5bMTI4XSxcbiAgICAgICAgICAgICcxMzAnOiBsaW5lSGVpZ2h0Py5saF8xMzAgfHwgbGluZUhlaWdodD8uWzEzMF0sXG4gICAgICAgICAgICAnMTMzJzogbGluZUhlaWdodD8ubGhfMTMzIHx8IGxpbmVIZWlnaHQ/LlsxMzNdLFxuICAgICAgICAgICAgJzE0MCc6IGxpbmVIZWlnaHQ/LmxoXzE0MCB8fCBsaW5lSGVpZ2h0Py5bMTQwXSxcbiAgICAgICAgICAgICcxNDgnOiBsaW5lSGVpZ2h0Py5saF8xNDggfHwgbGluZUhlaWdodD8uWzE0OF0sXG4gICAgICAgICAgICBiMTogbGluZUhlaWdodD8uYjEgfHwgbGluZUhlaWdodD8uYl8xLFxuICAgICAgICAgICAgYjI6IGxpbmVIZWlnaHQ/LmIyIHx8IGxpbmVIZWlnaHQ/LmJfMixcbiAgICAgICAgICAgIGIzOiBsaW5lSGVpZ2h0Py5iMyB8fCBsaW5lSGVpZ2h0Py5iXzMsXG4gICAgICAgICAgICBiNDogbGluZUhlaWdodD8uYjQgfHwgbGluZUhlaWdodD8uYl80LFxuICAgICAgICAgICAgYjU6IGxpbmVIZWlnaHQ/LmI1IHx8IGxpbmVIZWlnaHQ/LmJfNSxcbiAgICAgICAgICAgIGgxOiBsaW5lSGVpZ2h0Py5oMSB8fCBsaW5lSGVpZ2h0Py5oXzEsXG4gICAgICAgICAgICBoMjogbGluZUhlaWdodD8uaDIgfHwgbGluZUhlaWdodD8uaF8yLFxuICAgICAgICAgICAgaDM6IGxpbmVIZWlnaHQ/LmgzIHx8IGxpbmVIZWlnaHQ/LmhfMyxcbiAgICAgICAgICAgIGwxOiBsaW5lSGVpZ2h0Py5sMSB8fCBsaW5lSGVpZ2h0Py5sXzEsXG4gICAgICAgICAgICBsMjogbGluZUhlaWdodD8ubDIgfHwgbGluZUhlaWdodD8ubF8yLFxuICAgICAgICAgICAgdDE6IGxpbmVIZWlnaHQ/LnQxIHx8IGxpbmVIZWlnaHQ/LnRfMSxcbiAgICAgICAgICAgIHQyOiBsaW5lSGVpZ2h0Py50MiB8fCBsaW5lSGVpZ2h0Py50XzIsXG4gICAgICAgICAgICB0MzogbGluZUhlaWdodD8udDMgfHwgbGluZUhlaWdodD8udF8zLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59O1xuXG4vLyBUdXJucyBhIHJhdyBwcm9kdWN0c0NvbmZpZyBwYXlsb2FkIChmcm9tIGdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uIG9yXG4vLyBnZXRXaWRnZXRDb25maWcpIGludG8gdGhlIGNhbWVsQ2FzZSBHcmFwaFFsQ29uZmlnVmFsdWVzIHNoYXBlIHRoZSByZXN0IG9mXG4vLyB0aGUgdG9vbGtpdCBjb25zdW1lcy4gUmV0dXJucyBtb2NrIGNvbmZpZyB3aGVuIGNvbG9ycyBhcmUgYWJzZW50LlxuY29uc3QgdHJhbnNmb3JtVjNQcm9kdWN0c0NvbmZpZyA9IChcbiAgcHJvZHVjdHNDb25maWc6XG4gICAgfCB7XG4gICAgICAgIGZyb250ZW5kPzogeyB2YWx1ZXM/OiB7IG1lcmNoYW50X292ZXJyaWRlX2Nzcz86IHN0cmluZyB9IH07XG4gICAgICAgIHZfdGhyZWVfY29uZmlnPzogeyB2YWx1ZXM/OiBhbnkgfTtcbiAgICAgIH1cbiAgICB8IHVuZGVmaW5lZCxcbik6IEdyYXBoUWxDb25maWdWYWx1ZXMgPT4ge1xuICBjb25zdCB2M1Jvb3RDb25maWcgPSBwcm9kdWN0c0NvbmZpZz8udl90aHJlZV9jb25maWc/LnZhbHVlcztcbiAgY29uc3QgZnJvbnRlbmRWYWx1ZXMgPSBwcm9kdWN0c0NvbmZpZz8uZnJvbnRlbmQ/LnZhbHVlcztcblxuICBpZiAoIXYzUm9vdENvbmZpZz8uY29sb3JzKSB7XG4gICAgbG9nZ2VyLmxvZ0RlYnVnKCd0cmFuc2Zvcm1WM1Byb2R1Y3RzQ29uZmlnIHwgTm8gY29sb3JzIGZvdW5kLCByZXR1cm5pbmcgbW9jayBjb25maWcnKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3JzQ29uZmlnOiBtb2NrVjNDb2xvcnNDb25maWcsXG4gICAgICBmcm9udGVuZENvbmZpZzogbW9ja1YzRnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgb3JnUGFnZUNvbmZpZzoge1xuICAgICAgICBwYWdlVmFyaWFudHM6IERFRkFVTFRfUEFHRV9WQVJJQU5UUyxcbiAgICAgICAgd2lkZ2V0Q29uZmlnczoge30sXG4gICAgICAgIG1vdW50aW5nQ29uZmlnczoge30sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBjb25zdCB2M0Zyb250ZW5kQ29uZmlnID0gdjNGcm9udGVuZENvbmZpZ0NsZWFudXAoXG4gICAgdHJhbnNmb3JtU25ha2VUb0NhbWVsKHYzUm9vdENvbmZpZykgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICApO1xuXG4gIGNvbnN0IG1lcmNoYW50T3ZlcnJpZGVDc3MgPVxuICAgIHYzRnJvbnRlbmRDb25maWcudWlDb25maWdzPy5tZXJjaGFudE92ZXJyaWRlQ3NzIHx8IGZyb250ZW5kVmFsdWVzPy5tZXJjaGFudF9vdmVycmlkZV9jc3M7XG5cbiAgY29uc3QgdjNNb3VudGluZ0NvbmZpZ3NBcnJheSA9ICh0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy5tb3VudGluZ19jb25maWdzKSA/P1xuICAgIFtdKSBhcyB1bmtub3duIGFzIHsga2V5OiBzdHJpbmc7IGNvbmZpZzogV2lkZ2V0TW91bnRpbmdDb25maWcgfVtdO1xuICBjb25zdCB2M01vdW50aW5nQ29uZmlncyA9IHYzTW91bnRpbmdDb25maWdzQXJyYXkucmVkdWNlKFxuICAgIChhY2MsIHsga2V5LCBjb25maWcgfSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWNjW2tleV0gPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnKGNvbmZpZywga2V5KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5sb2dXYXJuKCdJbnZhbGlkIG1vdW50aW5nIGNvbmZpZywgc2tpcHBpbmcnLCBlcnJvciwgeyBrZXkgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sXG4gICAge30gYXMgUmVjb3JkPHN0cmluZywgV2lkZ2V0TW91bnRpbmdDb25maWc+LFxuICApO1xuXG4gIGNvbnN0IHYzV2lkZ2V0Q29uZmlnc0FycmF5ID0gKHRyYW5zZm9ybVNuYWtlVG9DYW1lbCh2M1Jvb3RDb25maWc/LndpZGdldF9jb25maWdzKSA/P1xuICAgIFtdKSBhcyB1bmtub3duIGFzIFdpZGdldENvbmZpZ1YzW107XG4gIGNvbnN0IHYzV2lkZ2V0Q29uZmlncyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICB2M1dpZGdldENvbmZpZ3NBcnJheT8ubWFwKCh7IHdpZGdldENvbmZpZ0lkLCAuLi5yZXN0IH06IFdpZGdldENvbmZpZ1YzKSA9PiBbXG4gICAgICB3aWRnZXRDb25maWdJZCxcbiAgICAgIHsgd2lkZ2V0Q29uZmlnSWQsIC4uLnJlc3QgfSBhcyBXaWRnZXRDb25maWdWMyxcbiAgICBdKSxcbiAgKSBhcyBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRDb25maWdWMz47XG5cbiAgY29uc3QgdjNwYWdlVmFyaWFudHM6IFBhZ2VWYXJpYW50Q29uZmlnW10gPSBBcnJheS5pc0FycmF5KHYzUm9vdENvbmZpZz8ucGFnZV92YXJpYW50cylcbiAgICA/IHYzUm9vdENvbmZpZy5wYWdlX3ZhcmlhbnRzLnJlZHVjZSgoYWNjOiBQYWdlVmFyaWFudENvbmZpZ1tdLCB2YXJpYW50OiB1bmtub3duKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYWNjLnB1c2godmFsaWRhdGVBbmRUcmFuc2Zvcm1QYWdlVmFyaWFudHModmFyaWFudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5sb2dXYXJuKCdJbnZhbGlkIHBhZ2UgdmFyaWFudCwgc2tpcHBpbmcnLCBlcnJvciwgeyB2YXJpYW50IH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSlcbiAgICA6IERFRkFVTFRfUEFHRV9WQVJJQU5UUztcblxuICBjb25zdCB2M0NvbG9yc0NvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbCh2M1Jvb3RDb25maWc/LmNvbG9ycz8udmFsdWVzKTtcblxuICByZXR1cm4ge1xuICAgIGNvbG9yc0NvbmZpZzogdjNDb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSxcbiAgICBmcm9udGVuZENvbmZpZzoge1xuICAgICAgLi4uKHYzRnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlKSxcbiAgICAgIG1lcmNoYW50T3ZlcnJpZGVDc3MsXG4gICAgICB3aWRnZXRDb25maWdzOiB2M1dpZGdldENvbmZpZ3MsXG4gICAgfSxcbiAgICBvcmdQYWdlQ29uZmlnOiB7XG4gICAgICBwYWdlVmFyaWFudHM6IHYzcGFnZVZhcmlhbnRzLFxuICAgICAgd2lkZ2V0Q29uZmlnczogdjNXaWRnZXRDb25maWdzLFxuICAgICAgbW91bnRpbmdDb25maWdzOiB2M01vdW50aW5nQ29uZmlncyxcbiAgICB9LFxuICB9O1xufTtcblxuLy8gVGhlIGNhbWVsQ2FzZSBgZXhwZXJpbWVudEFzc2lnbm1lbnRzYCBHcmFwaFFMIHNoYXBlIOKGkiB0aGUgc25ha2VfY2FzZSB3aXJlXG4vLyBzaGFwZSBhbXBsaXR1ZGVTZXJ2aWNlIHJlYWRzIChpdCBwcmV2aW91c2x5IGFycml2ZWQgZnJvbSBSRVNUIC92MS9vcmcvY29uZmlnKS5cbmNvbnN0IHRvRXhwZXJpbWVudEFzc2lnbm1lbnRzID0gKFxuICByYXc6XG4gICAgfCBSZWFkb25seUFycmF5PHtcbiAgICAgICAgbGF5ZXJOYW1lPzogc3RyaW5nO1xuICAgICAgICBuYW1lc3BhY2U/OiBPcmdDb25maWdFeHBlcmltZW50QXNzaWdubWVudFsnbmFtZXNwYWNlJ107XG4gICAgICAgIGFsbG9jYXRlZEV4cGVyaW1lbnROYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgZ3JvdXBOYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIH0+XG4gICAgfCB1bmRlZmluZWQsXG4pOiBPcmdDb25maWdFeHBlcmltZW50QXNzaWdubWVudFtdID0+XG4gIChyYXcgPz8gW10pLm1hcChhID0+ICh7XG4gICAgbGF5ZXJfbmFtZTogYS5sYXllck5hbWUsXG4gICAgbmFtZXNwYWNlOiBhLm5hbWVzcGFjZSxcbiAgICBhbGxvY2F0ZWRfZXhwZXJpbWVudF9uYW1lOiBhLmFsbG9jYXRlZEV4cGVyaW1lbnROYW1lLFxuICAgIGdyb3VwX25hbWU6IGEuZ3JvdXBOYW1lLFxuICB9KSk7XG5cbi8vIFRoZSB1bmlmaWVkIGBnZXRXaWRnZXRDb25maWdgIGNvbmZpZyBwYXRoIOKAlCBub3cgdGhlIHNpbmdsZSBzb3VyY2Ugb2Ygc2Vzc2lvblxuLy8gY29uZmlnLiBSZXR1cm5zIGV2ZXJ5dGhpbmcgdGhlIGNsaWVudCBuZWVkcyBpbiBvbmUgY2FsbDogb3JnIGlkZW50aXR5LFxuLy8gZmVhdHVyZSBnYXRlcywgYW5kIGV4cGVyaW1lbnQgYXNzaWdubWVudHMgKHdoaWNoIHVzZWQgdG8gY29tZSBmcm9tIFJFU1Rcbi8vIGAvdjEvb3JnL2NvbmZpZ2ApLCBwbHVzIHRoZSBwcm9kdWN0c0NvbmZpZyBhbmQgdGhlIHJlc29sdXRpb24gbWV0YWRhdGEgcHltb25vXG4vLyB1c2VkIHRvIHBpY2sgdGhlIHZlcnNpb24gKGNhbGxlcnMgdGhyZWFkIGByZXNvbHV0aW9uLmJhc2VWZXJzaW9uYCBpbnRvXG4vLyBkb3duc3RyZWFtIGluZmVyZW5jZSBzbyBpdCdzIHNjb3BlZCB0byB0aGUgdmVyc2lvbiB0aGF0IHByb2R1Y2VkIHRoZSByZW5kZXJlZFxuLy8gd2lkZ2V0cykuIGBnYXRlTmFtZXNgIHNlbGVjdHMgd2hpY2ggZ2F0ZXMgdG8gZXZhbHVhdGU7IGBzb3VyY2VgIGZlZWRzIFN0YXRzaWdcbi8vIHVzZXIgcHJvcGVydGllcy4gQSBgc3BpZmZ5X2NvbmZpZ192ZXJzaW9uYCAvIGBlbnZpdmVfY29uZmlnX3ZlcnNpb25gIFVSTFxuLy8gcGFyYW0sIHdoZW4gcHJlc2VudCwgaXMgdGhyZWFkZWQgdGhyb3VnaCBhcyB0aGUgYHZlcnNpb25gIHZhcmlhYmxlIHRvIHBpbiBhXG4vLyBzcGVjaWZpYyB2ZXJzaW9uIChieXBhc3NlcyB0aGUgbWVyY2hhbnQgZXhwZXJpbWVudCDigJQgUUEgLyByb2xsYmFjaykuXG4vL1xuLy8gVGhyb3dzIG9uIG5ldHdvcmsvR3JhcGhRTCBmYWlsdXJlOiB3aXRoIG9yZyArIGdhdGVzIHNvdXJjZWQgaGVyZSwgdGhlcmUgaXMgbm9cbi8vIHBhcnRpYWwtcmVuZGVyIGZhbGxiYWNrIChpbmplY3QudHMgYWJvcnRzIGluamVjdGlvbiBvbiB0aGUgdGhyb3cpLCBtYXRjaGluZ1xuLy8gaG93IHRoZSBvbGQgL3YxL29yZy9jb25maWcgY2FsbCBiZWhhdmVkLlxuZXhwb3J0IGNvbnN0IGZldGNoVW5pZmllZEdyYXBoUUxDb25maWcgPSBhc3luYyAoXG4gIGJhc2VVcmw6IHN0cmluZyxcbiAgYXBpS2V5OiBzdHJpbmcsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBnYXRlTmFtZXM6IHN0cmluZ1tdLFxuICBzb3VyY2U6IHN0cmluZyxcbik6IFByb21pc2U8RW52aXZlU2VydmljZUNvbmZpZz4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGdldFdpZGdldENvbmZpZ1F1ZXJ5KCk7XG4gIGNvbnN0IHZlcnNpb24gPSBjb25maWdWZXJzaW9uT3ZlcnJpZGUoKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS92MS9ncmFwaHFsYCwge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YXBpS2V5fWAsXG4gICAgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHF1ZXJ5LCB2YXJpYWJsZXM6IHsgdXNlcklkLCB2ZXJzaW9uLCBnYXRlTmFtZXMsIHNvdXJjZSB9IH0pLFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmlmaWVkIGNvbmZpZyByZXF1ZXN0IGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICBpZiAocmVzdWx0LmVycm9ycykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5pZmllZCBjb25maWcgR3JhcGhRTCBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0LmVycm9ycyl9YCk7XG4gIH1cblxuICBjb25zdCBtZSA9IHJlc3VsdC5kYXRhPy5tZTtcbiAgY29uc3Qgd2lkZ2V0Q29uZmlnID0gbWU/LmdldFdpZGdldENvbmZpZztcbiAgY29uc3Qgb3JnID0gbWU/Lm9yZztcblxuICAvLyBBIG1hbGZvcm1lZCBwcm9kdWN0cyBjb25maWcgKGUuZy4gYW4gaW52YWxpZCBmbG9hdGluZy1idXR0b24gcG9zaXRpb24pXG4gIC8vIGRlZ3JhZGVzIHRvIG5vIGNvbmZpZyDigJQgd2lkZ2V0cyBmYWxsIGJhY2sgdG8gdGhlaXIgbW9jayBkZWZhdWx0cyDigJQgV0lUSE9VVFxuICAvLyBsb3NpbmcgdGhlIG9yZyAvIGdhdGVzIC8gZXhwZXJpbWVudHMgdGhhdCBjYW1lIGJhY2sgZmluZS4gVGhlIGZldGNoIGl0c2VsZlxuICAvLyBzdGlsbCB0aHJvd3MgYWJvdmU7IG9ubHkgdGhlIHByb2R1Y3RzLWNvbmZpZyB0cmFuc2Zvcm0gaXMgZ3VhcmRlZCBoZXJlLlxuICBjb25zdCByZXNvbHV0aW9uID0gd2lkZ2V0Q29uZmlnPy5yZXNvbHV0aW9uIGFzIEV4cGVyaW1lbnRDb25maWdSZXNvbHV0aW9uTWV0YWRhdGEgfCB1bmRlZmluZWQ7XG4gIGxldCBvcmdDb25maWc6IEdyYXBoUWxDb25maWdWYWx1ZXM7XG4gIHRyeSB7XG4gICAgb3JnQ29uZmlnID0geyAuLi50cmFuc2Zvcm1WM1Byb2R1Y3RzQ29uZmlnKHdpZGdldENvbmZpZz8ucHJvZHVjdHNDb25maWcpLCByZXNvbHV0aW9uIH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5sb2dFcnJvcignZmV0Y2hVbmlmaWVkR3JhcGhRTENvbmZpZyB8IEVycm9yIHRyYW5zZm9ybWluZyBwcm9kdWN0cyBjb25maWcnLCBlcnIpO1xuICAgIG9yZ0NvbmZpZyA9IHsgY29sb3JzQ29uZmlnOiB1bmRlZmluZWQsIGZyb250ZW5kQ29uZmlnOiB1bmRlZmluZWQsIHJlc29sdXRpb24gfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLy8gR3JhcGhRTCBPcmdhbml6YXRpb24gaXMgY2FtZWxDYXNlOyB0aGUgcmVzdCBvZiB0aGUgYXBwIHJlYWRzIHRoZVxuICAgIC8vIHNuYWtlX2Nhc2Ugc2hhcGUgL3YxL29yZy9jb25maWcgdXNlZCB0byByZXR1cm4uIGBzdGF0dXNgIGlzbid0IGV4cG9zZWQgYnlcbiAgICAvLyB0aGUgR3JhcGhRTCB0eXBlIChhbmQgaXNuJ3QgY29uc3VtZWQgZG93bnN0cmVhbSkg4oCUIGRlZmF1bHQgaXQuXG4gICAgb3JnOiB7XG4gICAgICBvcmc6IHtcbiAgICAgICAgaWQ6IG9yZz8uaWQgPz8gJycsXG4gICAgICAgIHNob3J0X25hbWU6IG9yZz8uc2hvcnROYW1lID8/ICcnLFxuICAgICAgICBkaXNwbGF5X25hbWU6IG9yZz8uZGlzcGxheU5hbWUgPz8gJycsXG4gICAgICAgIGRvbWFpbjogb3JnPy5kb21haW4gPz8gJycsXG4gICAgICAgIHN0YXR1czogJycsXG4gICAgICAgIGNyZWF0ZWRfYXQ6IG9yZz8uY3JlYXRlZEF0ID8/ICcnLFxuICAgICAgICB1cGRhdGVkX2F0OiBvcmc/LnVwZGF0ZWRBdCA/PyAnJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBnYXRlczogKFxuICAgICAgKHdpZGdldENvbmZpZz8uZ2F0ZXMgPz8gW10pIGFzIEFycmF5PHtcbiAgICAgICAgbmFtZT86IHN0cmluZztcbiAgICAgICAgdmFsdWU/OiBib29sZWFuO1xuICAgICAgICBncm91cE5hbWU/OiBzdHJpbmc7XG4gICAgICB9PlxuICAgICkubWFwKFxuICAgICAgKGcpOiBPcmdDb25maWdGZWF0dXJlR2F0ZSA9PiAoe1xuICAgICAgICBuYW1lOiBnLm5hbWUsXG4gICAgICAgIHZhbHVlOiBnLnZhbHVlLFxuICAgICAgICBncm91cE5hbWU6IGcuZ3JvdXBOYW1lLFxuICAgICAgfSksXG4gICAgKSxcbiAgICBleHBlcmltZW50X2Fzc2lnbm1lbnRzOiB0b0V4cGVyaW1lbnRBc3NpZ25tZW50cyh3aWRnZXRDb25maWc/LmV4cGVyaW1lbnRBc3NpZ25tZW50cyksXG4gICAgb3JnQ29uZmlnLFxuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQTRCQSxNQUFNLFNBQVMsSUFB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
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
2
2
|
const require_logger = require('../../application/logging/logger.cjs');
|
|
3
|
-
const require_urlsParser = require('../../application/utils/urlsParser.cjs');
|
|
4
3
|
const require_snakeToCamelTransformer = require('../../application/models/utils/snakeToCamelTransformer.cjs');
|
|
5
4
|
const require_contexts_typesV3 = require('../../contexts/typesV3.cjs');
|
|
6
5
|
const require_eventNames = require('../amplitudeService/eventNames.cjs');
|
|
6
|
+
const require_urlsParser = require('../../application/utils/urlsParser.cjs');
|
|
7
7
|
require('../../application/utils/index.cjs');
|
|
8
8
|
const require_atomStore = require('../../atoms/atomStore/atomStore.cjs');
|
|
9
9
|
const require_resolvedBaseConfigVersion = require('../../atoms/envive/resolvedBaseConfigVersion.cjs');
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import logger_default from "../../application/logging/logger.js";
|
|
2
|
-
import { getQueryParam } from "../../application/utils/urlsParser.js";
|
|
3
2
|
import { toCamelCase } from "../../application/models/utils/snakeToCamelTransformer.js";
|
|
4
3
|
import { WidgetTypeV3 } from "../../contexts/typesV3.js";
|
|
5
4
|
import { EnviveMetricsEventName } from "../amplitudeService/eventNames.js";
|
|
5
|
+
import { getQueryParam } from "../../application/utils/urlsParser.js";
|
|
6
6
|
import "../../application/utils/index.js";
|
|
7
7
|
import { getAtomStore } from "../../atoms/atomStore/atomStore.js";
|
|
8
8
|
import { resolvedBaseConfigVersionAtom } from "../../atoms/envive/resolvedBaseConfigVersion.js";
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
const require_urlsParser = require('../application/utils/urlsParser.cjs');
|
|
2
2
|
|
|
3
3
|
//#region src/types/config-versions.ts
|
|
4
|
-
const configVersion = () => require_urlsParser.getQueryParam("spiffy_config_version") || require_urlsParser.getQueryParam("envive_config_version") || "deployed";
|
|
5
4
|
const configVersionOverride = () => require_urlsParser.getQueryParam("spiffy_config_version") || require_urlsParser.getQueryParam("envive_config_version") || void 0;
|
|
6
5
|
|
|
7
6
|
//#endregion
|
|
8
|
-
exports.configVersion = configVersion;
|
|
9
7
|
exports.configVersionOverride = configVersionOverride;
|
|
10
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXZlcnNpb25zLmNqcyIsIm5hbWVzIjpbImdldFF1ZXJ5UGFyYW0iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvY29uZmlnLXZlcnNpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFF1ZXJ5UGFyYW0gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMvdXJsc1BhcnNlcic7XG5cbmV4cG9ydCBjb25zdCBjb25maWdWZXJzaW9uID0gKCkgPT5cbiAgZ2V0UXVlcnlQYXJhbSgnc3BpZmZ5X2NvbmZpZ192ZXJzaW9uJykgfHwgZ2V0UXVlcnlQYXJhbSgnZW52aXZlX2NvbmZpZ192ZXJzaW9uJykgfHwgJ2RlcGxveWVkJztcblxuLy8gVW5saWtlIGBjb25maWdWZXJzaW9uKClgLCB0aGlzIHJldHVybnMgdW5kZWZpbmVkIHdoZW4gbm8gb3ZlcnJpZGUgaXMgcHJlc2VudFxuLy8gc28gY2FsbGVycyBjYW4gcGFzcyBpdCB0aHJvdWdoIEdyYXBoUUwgYHZlcnNpb25gIGFyZ3VtZW50cyB3aGVyZSBvbWlzc2lvblxuLy8gbWVhbnMgXCJsZXQgdGhlIHJlc29sdmVyIHBpY2tcIiAoZS5nLiBTdGF0c2lnLWRyaXZlbiByZXNvbHV0aW9uIG9uIHRoZVxuLy8gdW5pZmllZCBnZXRXaWRnZXRDb25maWcgcGF0aCkuIFBhc3NpbmcgJ2RlcGxveWVkJyBoZXJlIHdvdWxkIGZvcmNlIGFcbi8vIHZlcnNpb24gb3ZlcnJpZGUgYW5kIGJ5cGFzcyBTdGF0c2lnIGJ1Y2tldGluZy5cbmV4cG9ydCBjb25zdCBjb25maWdWZXJzaW9uT3ZlcnJpZGUgPSAoKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+
|
|
8
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXZlcnNpb25zLmNqcyIsIm5hbWVzIjpbImdldFF1ZXJ5UGFyYW0iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvY29uZmlnLXZlcnNpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFF1ZXJ5UGFyYW0gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMvdXJsc1BhcnNlcic7XG5cbmV4cG9ydCBjb25zdCBjb25maWdWZXJzaW9uID0gKCkgPT5cbiAgZ2V0UXVlcnlQYXJhbSgnc3BpZmZ5X2NvbmZpZ192ZXJzaW9uJykgfHwgZ2V0UXVlcnlQYXJhbSgnZW52aXZlX2NvbmZpZ192ZXJzaW9uJykgfHwgJ2RlcGxveWVkJztcblxuLy8gVW5saWtlIGBjb25maWdWZXJzaW9uKClgLCB0aGlzIHJldHVybnMgdW5kZWZpbmVkIHdoZW4gbm8gb3ZlcnJpZGUgaXMgcHJlc2VudFxuLy8gc28gY2FsbGVycyBjYW4gcGFzcyBpdCB0aHJvdWdoIEdyYXBoUUwgYHZlcnNpb25gIGFyZ3VtZW50cyB3aGVyZSBvbWlzc2lvblxuLy8gbWVhbnMgXCJsZXQgdGhlIHJlc29sdmVyIHBpY2tcIiAoZS5nLiBTdGF0c2lnLWRyaXZlbiByZXNvbHV0aW9uIG9uIHRoZVxuLy8gdW5pZmllZCBnZXRXaWRnZXRDb25maWcgcGF0aCkuIFBhc3NpbmcgJ2RlcGxveWVkJyBoZXJlIHdvdWxkIGZvcmNlIGFcbi8vIHZlcnNpb24gb3ZlcnJpZGUgYW5kIGJ5cGFzcyBTdGF0c2lnIGJ1Y2tldGluZy5cbmV4cG9ydCBjb25zdCBjb25maWdWZXJzaW9uT3ZlcnJpZGUgPSAoKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+XG4gIGdldFF1ZXJ5UGFyYW0oJ3NwaWZmeV9jb25maWdfdmVyc2lvbicpIHx8IGdldFF1ZXJ5UGFyYW0oJ2Vudml2ZV9jb25maWdfdmVyc2lvbicpIHx8IHVuZGVmaW5lZDtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBVUEsTUFBYSw4QkFDWEEsaUNBQWMsd0JBQXdCLElBQUlBLGlDQUFjLHdCQUF3QixJQUFJIn0=
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { getQueryParam } from "../application/utils/urlsParser.js";
|
|
2
2
|
|
|
3
3
|
//#region src/types/config-versions.ts
|
|
4
|
-
const configVersion = () => getQueryParam("spiffy_config_version") || getQueryParam("envive_config_version") || "deployed";
|
|
5
4
|
const configVersionOverride = () => getQueryParam("spiffy_config_version") || getQueryParam("envive_config_version") || void 0;
|
|
6
5
|
|
|
7
6
|
//#endregion
|
|
8
|
-
export {
|
|
9
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
7
|
+
export { configVersionOverride };
|
|
8
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXZlcnNpb25zLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9jb25maWctdmVyc2lvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0UXVlcnlQYXJhbSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscy91cmxzUGFyc2VyJztcblxuZXhwb3J0IGNvbnN0IGNvbmZpZ1ZlcnNpb24gPSAoKSA9PlxuICBnZXRRdWVyeVBhcmFtKCdzcGlmZnlfY29uZmlnX3ZlcnNpb24nKSB8fCBnZXRRdWVyeVBhcmFtKCdlbnZpdmVfY29uZmlnX3ZlcnNpb24nKSB8fCAnZGVwbG95ZWQnO1xuXG4vLyBVbmxpa2UgYGNvbmZpZ1ZlcnNpb24oKWAsIHRoaXMgcmV0dXJucyB1bmRlZmluZWQgd2hlbiBubyBvdmVycmlkZSBpcyBwcmVzZW50XG4vLyBzbyBjYWxsZXJzIGNhbiBwYXNzIGl0IHRocm91Z2ggR3JhcGhRTCBgdmVyc2lvbmAgYXJndW1lbnRzIHdoZXJlIG9taXNzaW9uXG4vLyBtZWFucyBcImxldCB0aGUgcmVzb2x2ZXIgcGlja1wiIChlLmcuIFN0YXRzaWctZHJpdmVuIHJlc29sdXRpb24gb24gdGhlXG4vLyB1bmlmaWVkIGdldFdpZGdldENvbmZpZyBwYXRoKS4gUGFzc2luZyAnZGVwbG95ZWQnIGhlcmUgd291bGQgZm9yY2UgYVxuLy8gdmVyc2lvbiBvdmVycmlkZSBhbmQgYnlwYXNzIFN0YXRzaWcgYnVja2V0aW5nLlxuZXhwb3J0IGNvbnN0IGNvbmZpZ1ZlcnNpb25PdmVycmlkZSA9ICgpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT5cbiAgZ2V0UXVlcnlQYXJhbSgnc3BpZmZ5X2NvbmZpZ192ZXJzaW9uJykgfHwgZ2V0UXVlcnlQYXJhbSgnZW52aXZlX2NvbmZpZ192ZXJzaW9uJykgfHwgdW5kZWZpbmVkO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFVQSxNQUFhLDhCQUNYLGNBQWMsd0JBQXdCLElBQUksY0FBYyx3QkFBd0IsSUFBSSJ9
|
package/package.json
CHANGED
|
@@ -1,17 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
me {
|
|
6
|
-
getProductsConfigByVersion(version: $version) {
|
|
7
|
-
colors {
|
|
8
|
-
values
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
`;
|
|
14
|
-
|
|
1
|
+
// The getMerchantColorsQuery GraphQL query was removed with the legacy
|
|
2
|
+
// products-config path (getProductsConfigByVersion). This module now only
|
|
3
|
+
// exposes the GetMerchantColorsQueryData shape, still consumed by the
|
|
4
|
+
// isGraphQLColorsConfig type guard.
|
|
15
5
|
interface GetMerchantColorsQueryData {
|
|
16
6
|
accent_primary: string;
|
|
17
7
|
accent_secondary: string;
|
|
@@ -33,5 +23,4 @@ interface GetMerchantColorsQueryData {
|
|
|
33
23
|
text_secondary: string;
|
|
34
24
|
}
|
|
35
25
|
|
|
36
|
-
export { getMerchantColorsQuery };
|
|
37
26
|
export type { GetMerchantColorsQueryData };
|
|
@@ -1,29 +1,50 @@
|
|
|
1
|
-
// Statsig-experiment-aware unified config endpoint
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// before this query resolves. Once the migration completes this query
|
|
9
|
-
// will replace getColorsAndFrontendQuery entirely.
|
|
1
|
+
// Statsig-experiment-aware unified config endpoint — the single source of
|
|
2
|
+
// session config. Returns productsConfig, the resolution metadata pymono used
|
|
3
|
+
// to pick the version (the client threads `resolution.baseVersion` into
|
|
4
|
+
// downstream inference requests so they're scoped to the version that produced
|
|
5
|
+
// the rendered widgets), AND the org identity + feature gates + experiment
|
|
6
|
+
// assignments that used to come from REST `/v1/org/config`. Pulling all of it
|
|
7
|
+
// here lets the client drop the separate org/config call.
|
|
10
8
|
//
|
|
11
9
|
// userId is required by the schema (String!) and feeds Statsig layer
|
|
12
|
-
// resolution server-side.
|
|
10
|
+
// resolution server-side. source feeds Statsig user properties.
|
|
11
|
+
//
|
|
12
|
+
// gateNames selects which feature gates to evaluate and return — pass the same
|
|
13
|
+
// list the app checks (the `FeatureGates` enum values); the resolver returns an
|
|
14
|
+
// empty `gates` list when none are requested.
|
|
13
15
|
//
|
|
14
16
|
// version is optional; when omitted (no `spiffy_config_version` /
|
|
15
17
|
// `envive_config_version` URL param) the resolver uses Statsig bucketing.
|
|
16
|
-
// When set, it bypasses
|
|
17
|
-
//
|
|
18
|
+
// When set, it bypasses the merchant experiment and pins to that exact version
|
|
19
|
+
// (empty experimentAssignments) — the QA / rollback affordance.
|
|
18
20
|
export const getWidgetConfigQuery = () => `
|
|
19
|
-
query($userId: String!, $version: String) {
|
|
21
|
+
query($userId: String!, $version: String, $gateNames: [String!], $source: String) {
|
|
20
22
|
me {
|
|
21
|
-
|
|
23
|
+
org {
|
|
24
|
+
id
|
|
25
|
+
shortName
|
|
26
|
+
displayName
|
|
27
|
+
domain
|
|
28
|
+
createdAt
|
|
29
|
+
updatedAt
|
|
30
|
+
}
|
|
31
|
+
getWidgetConfig(userId: $userId, version: $version, gateNames: $gateNames, source: $source) {
|
|
22
32
|
productsConfig {
|
|
23
33
|
frontend { values }
|
|
24
34
|
colors { values }
|
|
25
35
|
v_three_config { values }
|
|
26
36
|
}
|
|
37
|
+
gates {
|
|
38
|
+
name
|
|
39
|
+
value
|
|
40
|
+
groupName
|
|
41
|
+
}
|
|
42
|
+
experimentAssignments {
|
|
43
|
+
layerName
|
|
44
|
+
namespace
|
|
45
|
+
allocatedExperimentName
|
|
46
|
+
groupName
|
|
47
|
+
}
|
|
27
48
|
resolution {
|
|
28
49
|
baseVersion
|
|
29
50
|
baseVersionSource
|
|
@@ -35,7 +35,6 @@ export * from './api/userEvent';
|
|
|
35
35
|
// graphql
|
|
36
36
|
export * from './graphql';
|
|
37
37
|
export * from './graphql/queries/getMerchantColorsQuery';
|
|
38
|
-
export * from './graphql/queries/getMerchantFrontendConfigQuery';
|
|
39
38
|
export * from './graphql/queries/getMerchantOrgIdQuery';
|
|
40
39
|
|
|
41
40
|
// type guards
|
|
@@ -4,14 +4,13 @@ import { Provider, useAtom } from 'jotai';
|
|
|
4
4
|
import React from 'react';
|
|
5
5
|
import CommerceApiClient from 'src/application/commerce-api';
|
|
6
6
|
import Logger from 'src/application/logging/logger';
|
|
7
|
-
import { VariantTypeEnum } from 'src/application/models';
|
|
7
|
+
import { FeatureGates, VariantTypeEnum } from 'src/application/models';
|
|
8
8
|
import {
|
|
9
9
|
UrlResolverResponse,
|
|
10
10
|
pageUserEventAtom,
|
|
11
11
|
pageVariantInfoAtom,
|
|
12
12
|
urlResolverAtom,
|
|
13
13
|
} from 'src/atoms/app/variant';
|
|
14
|
-
import { FeatureGates } from 'src/application/models';
|
|
15
14
|
import {
|
|
16
15
|
FeatureFlagService,
|
|
17
16
|
FeatureFlagServiceProvider,
|
|
@@ -17,12 +17,11 @@ import {
|
|
|
17
17
|
variantInfoAtom,
|
|
18
18
|
} from 'src/atoms/app/variant';
|
|
19
19
|
import { useAtom, useAtomValue } from 'jotai';
|
|
20
|
-
import { FeatureGates } from 'src/application/models';
|
|
20
|
+
import { FeatureGates, VariantTypeEnum } from 'src/application/models';
|
|
21
21
|
import { FeatureFlagServiceContext } from 'src/contexts/featureFlagServiceContext';
|
|
22
22
|
import CommerceApiClient from 'src/application/commerce-api';
|
|
23
23
|
import Logger from 'src/application/logging/logger';
|
|
24
24
|
import { PageVisitCategory, UserEventCategory } from '@spiffy-ai/commerce-api-client';
|
|
25
|
-
import { VariantTypeEnum } from 'src/application/models';
|
|
26
25
|
import { EnviveMetricsEventName, useAmplitude } from 'src/contexts/amplitudeContext';
|
|
27
26
|
import { mapApiUserEventToUserEvent, mapUrlResolverResponseToVariantInfo } from './mapping';
|
|
28
27
|
import { PageDetails } from './types';
|
|
@@ -315,6 +315,58 @@ describe('WidgetConfigProvider', () => {
|
|
|
315
315
|
});
|
|
316
316
|
|
|
317
317
|
describe('isLoading State', () => {
|
|
318
|
+
it('resets isLoading after the fake-widget-config-id path (FloatingChat sentinel)', async () => {
|
|
319
|
+
// FloatingChat calls getWidgetConfig with this sentinel id on every page. The early
|
|
320
|
+
// return used to skip resetting the shared loading flag, leaving every not-yet-settled
|
|
321
|
+
// widget on the page stuck in its loading state.
|
|
322
|
+
const TestComponent: React.FC = () => {
|
|
323
|
+
const { getWidgetConfig, isLoading } = useWidgetConfig();
|
|
324
|
+
const [done, setDone] = React.useState(false);
|
|
325
|
+
|
|
326
|
+
const handleGetConfig = async () => {
|
|
327
|
+
await getWidgetConfig({
|
|
328
|
+
widgetType: WidgetTypeV3.FloatingChatV3,
|
|
329
|
+
widgetConfigId: 'fake-widget-config-id',
|
|
330
|
+
});
|
|
331
|
+
setDone(true);
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
return (
|
|
335
|
+
<div>
|
|
336
|
+
<div data-testid="is-loading">{isLoading.toString()}</div>
|
|
337
|
+
<div data-testid="done">{done.toString()}</div>
|
|
338
|
+
<button
|
|
339
|
+
data-testid="get-config-btn"
|
|
340
|
+
type="button"
|
|
341
|
+
onClick={handleGetConfig}
|
|
342
|
+
>
|
|
343
|
+
Get Config
|
|
344
|
+
</button>
|
|
345
|
+
</div>
|
|
346
|
+
);
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
render(
|
|
350
|
+
<TestWrapper
|
|
351
|
+
mockNewOrgConfig={{
|
|
352
|
+
frontendConfig: { widgetConfigs: {} },
|
|
353
|
+
loading: false,
|
|
354
|
+
}}
|
|
355
|
+
>
|
|
356
|
+
<TestComponent />
|
|
357
|
+
</TestWrapper>,
|
|
358
|
+
);
|
|
359
|
+
|
|
360
|
+
await act(async () => {
|
|
361
|
+
screen.getByTestId('get-config-btn').click();
|
|
362
|
+
});
|
|
363
|
+
|
|
364
|
+
await waitFor(() => {
|
|
365
|
+
expect(screen.getByTestId('done')).toHaveTextContent('true');
|
|
366
|
+
expect(screen.getByTestId('is-loading')).toHaveTextContent('false');
|
|
367
|
+
});
|
|
368
|
+
});
|
|
369
|
+
|
|
318
370
|
it('should be true when frontend config is loading', async () => {
|
|
319
371
|
render(
|
|
320
372
|
<TestWrapper
|
|
@@ -23,53 +23,56 @@ export const WidgetConfigProvider: React.FC<{ children: ReactNode }> = ({ childr
|
|
|
23
23
|
|
|
24
24
|
const getWidgetConfig = useCallback(
|
|
25
25
|
async (request: WidgetConfigRequest): Promise<WidgetConfigV3> => {
|
|
26
|
+
// `isLoadingWidgetConfig` is provider-level state shared by every widget on the page,
|
|
27
|
+
// so it must be reset on EVERY exit path — the finally guarantees that. A leaked
|
|
28
|
+
// `true` (the fake-widget-config-id return used to skip the reset) kept all
|
|
29
|
+
// not-yet-settled widgets stuck rendering their loading state.
|
|
26
30
|
setIsLoadingWidgetConfig(true);
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
try {
|
|
32
|
+
logger.logDebug('retrieving widget config', {
|
|
33
|
+
widgetConfigId: request.widgetConfigId,
|
|
34
|
+
widgetType: request.widgetType,
|
|
35
|
+
});
|
|
36
|
+
if (isFrontendConfigLoading) {
|
|
37
|
+
throw new Error('Frontend config is loading');
|
|
38
|
+
}
|
|
35
39
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
40
|
+
const { widgetConfigId, widgetType } = request;
|
|
41
|
+
const response = frontendConfig?.widgetConfigs?.[widgetConfigId];
|
|
42
|
+
logger.logDebug('returning widget config response', response);
|
|
39
43
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
if (widgetConfigId === 'fake-widget-config-id') {
|
|
45
|
+
return {} as WidgetConfigV3;
|
|
46
|
+
}
|
|
43
47
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
48
|
+
if (
|
|
49
|
+
[
|
|
50
|
+
WidgetTypeV3.SocialProofV3,
|
|
51
|
+
WidgetTypeV3.ChatPreviewV3,
|
|
52
|
+
WidgetTypeV3.ChatPreviewComparisonV3,
|
|
53
|
+
WidgetTypeV3.ChatPreviewLoadingV3,
|
|
54
|
+
].includes(widgetType)
|
|
55
|
+
) {
|
|
56
|
+
if (response?.type !== WidgetTypeV3.SocialProofV3) {
|
|
57
|
+
throw new Error(
|
|
58
|
+
`Widget type: ${widgetType} does not match widget config type: ${response?.type}`,
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
} else if (response?.type !== widgetType) {
|
|
54
62
|
throw new Error(
|
|
55
63
|
`Widget type: ${widgetType} does not match widget config type: ${response?.type}`,
|
|
56
64
|
);
|
|
57
65
|
}
|
|
58
|
-
} else if (response?.type !== widgetType) {
|
|
59
|
-
setIsLoadingWidgetConfig(false);
|
|
60
|
-
throw new Error(
|
|
61
|
-
`Widget type: ${widgetType} does not match widget config type: ${response?.type}`,
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
66
|
|
|
65
|
-
|
|
67
|
+
if (!response) {
|
|
68
|
+
throw new Error(
|
|
69
|
+
`No widget config response found for widget type: ${request.widgetType} and widget config id: ${request.widgetConfigId}`,
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
return response;
|
|
73
|
+
} finally {
|
|
66
74
|
setIsLoadingWidgetConfig(false);
|
|
67
|
-
throw new Error(
|
|
68
|
-
`No widget config response found for widget type: ${request.widgetType} and widget config id: ${request.widgetConfigId}`,
|
|
69
|
-
);
|
|
70
75
|
}
|
|
71
|
-
setIsLoadingWidgetConfig(false);
|
|
72
|
-
return response;
|
|
73
76
|
},
|
|
74
77
|
[frontendConfig, isFrontendConfigLoading],
|
|
75
78
|
);
|