@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.
Files changed (108) hide show
  1. package/dist/application/commerce-api.cjs +1 -1
  2. package/dist/application/commerce-api.js +1 -1
  3. package/dist/application/models/graphql/index.cjs +0 -4
  4. package/dist/application/models/graphql/index.d.cts +2 -3
  5. package/dist/application/models/graphql/index.d.ts +2 -3
  6. package/dist/application/models/graphql/index.js +1 -3
  7. package/dist/application/models/graphql/queries/getMerchantColorsQuery.d.cts +2 -3
  8. package/dist/application/models/graphql/queries/getMerchantColorsQuery.d.ts +2 -3
  9. package/dist/application/models/graphql/queries/getWidgetConfigQuery.cjs +22 -3
  10. package/dist/application/models/graphql/queries/getWidgetConfigQuery.js +22 -3
  11. package/dist/application/models/index.cjs +0 -4
  12. package/dist/application/models/index.d.cts +2 -3
  13. package/dist/application/models/index.d.ts +2 -3
  14. package/dist/application/models/index.js +1 -3
  15. package/dist/application/utils/elementObserver.d.cts +2 -2
  16. package/dist/application/utils/index.cjs +1 -1
  17. package/dist/application/utils/index.js +1 -1
  18. package/dist/atoms/app/index.d.cts +7 -7
  19. package/dist/atoms/app/index.d.ts +7 -7
  20. package/dist/atoms/app/variant.d.cts +6 -6
  21. package/dist/atoms/chat/chatState.d.cts +19 -19
  22. package/dist/atoms/chat/chatState.d.ts +19 -19
  23. package/dist/atoms/chat/form.d.cts +2 -2
  24. package/dist/atoms/chat/form.d.ts +2 -2
  25. package/dist/atoms/chat/index.d.cts +2 -2
  26. package/dist/atoms/chat/index.d.ts +2 -2
  27. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  28. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  29. package/dist/atoms/chat/messageQueue.d.cts +6 -6
  30. package/dist/atoms/chat/messageQueue.d.ts +6 -6
  31. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  32. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  33. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  34. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  35. package/dist/atoms/chat/replies.d.cts +3 -3
  36. package/dist/atoms/chat/replies.d.ts +3 -3
  37. package/dist/atoms/chat/suggestions.d.cts +2 -2
  38. package/dist/atoms/chat/suggestions.d.ts +2 -2
  39. package/dist/atoms/envive/enviveConfig.d.cts +14 -14
  40. package/dist/atoms/envive/enviveConfig.d.ts +13 -13
  41. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  42. package/dist/atoms/org/customerService.d.cts +6 -6
  43. package/dist/atoms/org/customerService.d.ts +6 -6
  44. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  45. package/dist/atoms/org/graphqlConfig.d.ts +4 -4
  46. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  47. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  48. package/dist/atoms/org/orgAnalyticsConfig.d.cts +4 -4
  49. package/dist/atoms/org/orgAnalyticsConfig.d.ts +4 -4
  50. package/dist/atoms/search/chatSearch.d.cts +17 -17
  51. package/dist/atoms/search/chatSearch.d.ts +17 -17
  52. package/dist/atoms/search/searchAPI.d.cts +13 -13
  53. package/dist/atoms/search/searchAPI.d.ts +13 -13
  54. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  55. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  56. package/dist/contexts/pageContext/pageContext.cjs +1 -1
  57. package/dist/contexts/pageContext/pageContext.js +1 -1
  58. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
  59. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.ts +2 -2
  60. package/dist/contexts/types.d.cts +1 -1
  61. package/dist/contexts/types.d.ts +1 -1
  62. package/dist/contexts/typesV3.d.cts +1 -1
  63. package/dist/contexts/typesV3.d.ts +1 -1
  64. package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +22 -31
  65. package/dist/contexts/widgetConfigContext/widgetConfigContext.js +22 -31
  66. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
  67. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.ts +2 -2
  68. package/dist/hooks/Intersection/useIntersection.cjs +14 -3
  69. package/dist/hooks/Intersection/useIntersection.js +14 -3
  70. package/dist/hooks/PageViewedEvent/usePageViewedEvent.cjs +1 -1
  71. package/dist/hooks/PageViewedEvent/usePageViewedEvent.js +1 -1
  72. package/dist/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.cts +2 -2
  73. package/dist/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.ts +2 -2
  74. package/dist/hooks/SystemSettingsContext/useSystemSettingsContext.d.cts +2 -2
  75. package/dist/hooks/utils.d.ts +1 -1
  76. package/dist/services/enviveConfigService/enviveConfigService.cjs +3 -24
  77. package/dist/services/enviveConfigService/enviveConfigService.js +4 -25
  78. package/dist/services/enviveConfigService/fetchGraphQLConfig.cjs +59 -54
  79. package/dist/services/enviveConfigService/fetchGraphQLConfig.js +60 -54
  80. package/dist/services/hardcopyService/hardcopyService.cjs +1 -1
  81. package/dist/services/hardcopyService/hardcopyService.js +1 -1
  82. package/dist/types/config-versions.cjs +1 -3
  83. package/dist/types/config-versions.js +2 -3
  84. package/package.json +1 -1
  85. package/src/application/models/graphql/index.ts +0 -1
  86. package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +4 -15
  87. package/src/application/models/graphql/queries/getWidgetConfigQuery.ts +35 -14
  88. package/src/application/models/index.ts +0 -1
  89. package/src/contexts/pageContext/__tests__/pageContext.test.tsx +1 -2
  90. package/src/contexts/pageContext/pageContext.tsx +1 -2
  91. package/src/contexts/widgetConfigContext/__tests__/widgetConfigContext.test.tsx +52 -0
  92. package/src/contexts/widgetConfigContext/widgetConfigContext.tsx +39 -36
  93. package/src/hooks/Intersection/__tests__/useIntersection.test.ts +134 -0
  94. package/src/hooks/Intersection/useIntersection.ts +20 -4
  95. package/src/services/enviveConfigService/__tests__/enviveConfigService.test.ts +51 -75
  96. package/src/services/enviveConfigService/__tests__/fetchGraphQLConfig.test.ts +242 -90
  97. package/src/services/enviveConfigService/enviveConfigService.ts +15 -41
  98. package/src/services/enviveConfigService/fetchGraphQLConfig.ts +106 -68
  99. package/dist/application/models/graphql/queries/getColorsAndFrontendQuery.cjs +0 -18
  100. package/dist/application/models/graphql/queries/getColorsAndFrontendQuery.js +0 -18
  101. package/dist/application/models/graphql/queries/getMerchantColorsQuery.cjs +0 -18
  102. package/dist/application/models/graphql/queries/getMerchantColorsQuery.js +0 -18
  103. package/dist/application/models/graphql/queries/getMerchantFrontendConfigQuery.cjs +0 -18
  104. package/dist/application/models/graphql/queries/getMerchantFrontendConfigQuery.d.cts +0 -75
  105. package/dist/application/models/graphql/queries/getMerchantFrontendConfigQuery.d.ts +0 -75
  106. package/dist/application/models/graphql/queries/getMerchantFrontendConfigQuery.js +0 -18
  107. package/src/application/models/graphql/queries/getColorsAndFrontendQuery.ts +0 -13
  108. 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 { getColorsAndFrontendQuery } from "../../application/models/graphql/queries/getColorsAndFrontendQuery.js";
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 fetchGraphQLConfig = async (baseUrl, apiKey) => {
171
- try {
172
- const query = getColorsAndFrontendQuery();
173
- const response = await fetch(`${baseUrl}/v1/graphql`, {
174
- method: "POST",
175
- headers: {
176
- "Content-Type": "application/json",
177
- Authorization: `Bearer ${apiKey}`
178
- },
179
- body: JSON.stringify({ query })
180
- });
181
- if (!response.ok) throw new Error(`GraphQL request failed: ${response.statusText}`);
182
- const result = await response.json();
183
- if (result.errors) throw new Error(`GraphQL errors: ${JSON.stringify(result.errors)}`);
184
- logger.logDebug("fetchGraphQLConfig | Returning v3 config");
185
- return transformV3ProductsConfig(result.data.me.getProductsConfigByVersion);
186
- } catch (err) {
187
- logger.logError("fetchGraphQLConfig | Error fetching GraphQL config", err);
188
- return {
189
- colorsConfig: void 0,
190
- frontendConfig: void 0
191
- };
192
- }
193
- };
194
- const fetchUnifiedGraphQLConfig = async (baseUrl, apiKey, userId) => {
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
- const query = getWidgetConfigQuery();
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: widgetConfig?.resolution
205
+ resolution
219
206
  };
220
207
  } catch (err) {
221
- logger.logError("fetchUnifiedGraphQLConfig | Error fetching unified GraphQL config", err);
222
- return {
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 { fetchGraphQLConfig, fetchUnifiedGraphQLConfig };
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/LmV4cGVyaW1lbnRBc3NpZ25tZW50cyksXG4gICAgb3JnQ29uZmlnLFxuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQTRCQSxNQUFNLFNBQVMsSUFBSUEsZUFBTyxxQkFBcUI7QUFLL0MsTUFBYUMsd0JBQTZDLENBQ3hEO0NBQ0UsV0FBVztDQUNYLGFBQWE7Q0FDYixnQkFBZ0I7Q0FDaEIsZ0JBQWdCLEVBQUU7Q0FDbEIsY0FBYyxDQUFDLEVBQUUsVUFBVSxvQkFBb0IsYUFBYSxDQUFDO0NBQzlELEVBQ0Q7Q0FDRSxXQUFXO0NBQ1gsYUFBYTtDQUNiLG9CQUFvQjtDQUNwQixnQkFBZ0IsRUFBRTtDQUNsQixjQUFjLENBQUMsRUFBRSxVQUFVLG9CQUFvQixhQUFhLENBQUM7Q0FDOUQsQ0FDRjtBQUlELE1BQU0sNEJBQTRCO0NBQ2hDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0Q7QUFFRCxNQUFNLDBCQUEwQixhQUE2QztBQUMzRSxLQUFLLDBCQUFnRCxTQUFTLFNBQVMsQ0FDckUsUUFBTztBQUVULE9BQU0sSUFBSSxNQUFNLHFCQUFxQixXQUFXOztBQUdsRCxNQUFNLDJCQUNKLGlCQUM2QjtDQUM3QixNQUFNLEVBQUUsY0FBYztBQUN0QixLQUFJLENBQUMsVUFBVyxRQUFPO0NBQ3ZCLE1BQU0sRUFBRSxnQkFBZ0IsZ0JBQWdCO0FBQ3hDLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFhLFFBQU87Q0FDNUMsTUFBTSxFQUFFLFVBQVUsWUFBWSxrQkFBa0IsWUFBWTtBQUM1RCxRQUFPO0VBQ0wsR0FBRztFQUNILFdBQVc7R0FDVCxHQUFHO0dBQ0gsZ0JBQWdCO0lBQ2QsR0FBRztJQUNILFVBQVUsdUJBQ1IsYUFBYSxXQUFXLGdCQUFnQixTQUN6QztJQUNGO0dBQ0QsYUFBYTtJQUNYLEdBQUc7SUFDSCx1QkFBdUIsWUFBWSx5QkFBeUIsWUFBWTtJQUN4RSx3QkFBd0IsWUFBWSwwQkFBMEIsWUFBWTtJQUMxRSxZQUFZO0tBQ1YsR0FBRyxZQUFZO0tBQ2YsVUFBVTtNQUNSLElBQUksVUFBVSxNQUFNLFVBQVU7TUFDOUIsSUFBSSxVQUFVLE1BQU0sVUFBVTtNQUM5QixJQUFJLFVBQVUsTUFBTSxVQUFVO01BQzlCLElBQUksVUFBVSxNQUFNLFVBQVU7TUFDOUIsSUFBSSxVQUFVLE1BQU0sVUFBVTtNQUM5QixJQUFJLFVBQVUsTUFBTSxVQUFVO01BQzlCLElBQUksVUFBVSxNQUFNLFVBQVU7TUFDOUIsSUFBSSxVQUFVLE1BQU0sVUFBVTtNQUM5QixJQUFJLFVBQVUsTUFBTSxVQUFVO01BQzlCLElBQUksVUFBVSxNQUFNLFVBQVU7TUFDOUIsSUFBSSxVQUFVLE1BQU0sVUFBVTtNQUM5QixJQUFJLFVBQVUsTUFBTSxVQUFVO01BQzlCLElBQUksVUFBVSxNQUFNLFVBQVU7TUFDL0I7S0FDRCxlQUFlO01BQ2IsR0FBRyxZQUFZLFdBQVc7TUFDMUIsSUFBSSxlQUFlLE1BQU0sZUFBZTtNQUN4QyxJQUFJLGVBQWUsTUFBTSxlQUFlO01BQ3hDLElBQUksZUFBZSxNQUFNLGVBQWU7TUFDeEMsSUFBSSxlQUFlLE1BQU0sZUFBZTtNQUN4QyxJQUFJLGVBQWUsTUFBTSxlQUFlO01BQ3hDLElBQUksZUFBZSxNQUFNLGVBQWU7TUFDeEMsSUFBSSxlQUFlLE1BQU0sZUFBZTtNQUN4QyxJQUFJLGVBQWUsTUFBTSxlQUFlO01BQ3hDLElBQUksZUFBZSxNQUFNLGVBQWU7TUFDeEMsSUFBSSxlQUFlLE1BQU0sZUFBZTtNQUN4QyxJQUFJLGVBQWUsTUFBTSxlQUFlO01BQ3hDLElBQUksZUFBZSxNQUFNLGVBQWU7TUFDeEMsSUFBSSxlQUFlLE1BQU0sZUFBZTtNQUN6QztLQUNELFlBQVk7TUFDVixHQUFHLFlBQVksV0FBVztNQUMxQixPQUFPLFlBQVksVUFBVSxhQUFhO01BQzFDLE9BQU8sWUFBWSxVQUFVLGFBQWE7TUFDMUMsT0FBTyxZQUFZLFVBQVUsYUFBYTtNQUMxQyxPQUFPLFlBQVksVUFBVSxhQUFhO01BQzFDLE9BQU8sWUFBWSxVQUFVLGFBQWE7TUFDMUMsT0FBTyxZQUFZLFVBQVUsYUFBYTtNQUMxQyxPQUFPLFlBQVksVUFBVSxhQUFhO01BQzFDLE9BQU8sWUFBWSxVQUFVLGFBQWE7TUFDMUMsT0FBTyxZQUFZLFVBQVUsYUFBYTtNQUMxQyxPQUFPLFlBQVksVUFBVSxhQUFhO01BQzFDLElBQUksWUFBWSxNQUFNLFlBQVk7TUFDbEMsSUFBSSxZQUFZLE1BQU0sWUFBWTtNQUNsQyxJQUFJLFlBQVksTUFBTSxZQUFZO01BQ2xDLElBQUksWUFBWSxNQUFNLFlBQVk7TUFDbEMsSUFBSSxZQUFZLE1BQU0sWUFBWTtNQUNsQyxJQUFJLFlBQVksTUFBTSxZQUFZO01BQ2xDLElBQUksWUFBWSxNQUFNLFlBQVk7TUFDbEMsSUFBSSxZQUFZLE1BQU0sWUFBWTtNQUNsQyxJQUFJLFlBQVksTUFBTSxZQUFZO01BQ2xDLElBQUksWUFBWSxNQUFNLFlBQVk7TUFDbEMsSUFBSSxZQUFZLE1BQU0sWUFBWTtNQUNsQyxJQUFJLFlBQVksTUFBTSxZQUFZO01BQ2xDLElBQUksWUFBWSxNQUFNLFlBQVk7TUFDbkM7S0FDRjtJQUNGO0dBQ0Y7RUFDRjs7QUFNSCxNQUFNLDZCQUNKLG1CQU13QjtDQUN4QixNQUFNLGVBQWUsZ0JBQWdCLGdCQUFnQjtDQUNyRCxNQUFNLGlCQUFpQixnQkFBZ0IsVUFBVTtBQUVqRCxLQUFJLENBQUMsY0FBYyxRQUFRO0FBQ3pCLFNBQU8sU0FBUyxxRUFBcUU7QUFDckYsU0FBTztHQUNMLGNBQWM7R0FDZCxnQkFBZ0I7R0FDaEIsZUFBZTtJQUNiLGNBQWM7SUFDZCxlQUFlLEVBQUU7SUFDakIsaUJBQWlCLEVBQUU7SUFDcEI7R0FDRjs7Q0FHSCxNQUFNLG1CQUFtQix3QkFDdkIsc0JBQXNCLGFBQWEsQ0FDcEM7Q0FFRCxNQUFNLHNCQUNKLGlCQUFpQixXQUFXLHVCQUF1QixnQkFBZ0I7Q0FJckUsTUFBTSxxQkFGMEIsc0JBQXNCLGNBQWMsaUJBQWlCLElBQ25GLEVBQUUsRUFDNkMsUUFDOUMsS0FBSyxFQUFFLEtBQUssYUFBYTtBQUN4QixNQUFJO0FBQ0YsT0FBSSxPQUFPLG1DQUFtQyxRQUFRLElBQUk7V0FDbkQsT0FBTztBQUNkLFVBQU8sUUFBUSxxQ0FBcUMsT0FBTyxFQUFFLEtBQUssQ0FBQzs7QUFFckUsU0FBTztJQUVULEVBQUUsQ0FDSDtDQUVELE1BQU0sdUJBQXdCLHNCQUFzQixjQUFjLGVBQWUsSUFDL0UsRUFBRTtDQUNKLE1BQU0sa0JBQWtCLE9BQU8sWUFDN0Isc0JBQXNCLEtBQUssRUFBRSxnQkFBZ0IsR0FBRyxXQUEyQixDQUN6RSxnQkFDQTtFQUFFO0VBQWdCLEdBQUc7RUFBTSxDQUM1QixDQUFDLENBQ0g7Q0FFRCxNQUFNQyxpQkFBc0MsTUFBTSxRQUFRLGNBQWMsY0FBYyxHQUNsRixhQUFhLGNBQWMsUUFBUSxLQUEwQixZQUFxQjtBQUNoRixNQUFJO0FBQ0YsT0FBSSxLQUFLLGlDQUFpQyxRQUFtQyxDQUFDO1dBQ3ZFLE9BQU87QUFDZCxVQUFPLFFBQVEsa0NBQWtDLE9BQU8sRUFBRSxTQUFTLENBQUM7O0FBRXRFLFNBQU87SUFDTixFQUFFLENBQUMsR0FDTjtBQUlKLFFBQU87RUFDTCxjQUhxQixzQkFBc0IsY0FBYyxRQUFRLE9BQU87RUFJeEUsZ0JBQWdCO0dBQ2QsR0FBSTtHQUNKO0dBQ0EsZUFBZTtHQUNoQjtFQUNELGVBQWU7R0FDYixjQUFjO0dBQ2QsZUFBZTtHQUNmLGlCQUFpQjtHQUNsQjtFQUNGOztBQUtILE1BQU0sMkJBQ0osU0FTQyxPQUFPLEVBQUUsRUFBRSxLQUFJLE9BQU07Q0FDcEIsWUFBWSxFQUFFO0NBQ2QsV0FBVyxFQUFFO0NBQ2IsMkJBQTJCLEVBQUU7Q0FDN0IsWUFBWSxFQUFFO0NBQ2YsRUFBRTtBQWdCTCxNQUFhLDRCQUE0QixPQUN2QyxTQUNBLFFBQ0EsUUFDQSxXQUNBLFdBQ2lDO0NBQ2pDLE1BQU0sUUFBUSxzQkFBc0I7Q0FDcEMsTUFBTSxVQUFVLHVCQUF1QjtDQUN2QyxNQUFNLFdBQVcsTUFBTSxNQUFNLEdBQUcsUUFBUSxjQUFjO0VBQ3BELFFBQVE7RUFDUixTQUFTO0dBQ1AsZ0JBQWdCO0dBQ2hCLGVBQWUsVUFBVTtHQUMxQjtFQUNELE1BQU0sS0FBSyxVQUFVO0dBQUU7R0FBTyxXQUFXO0lBQUU7SUFBUTtJQUFTO0lBQVc7SUFBUTtHQUFFLENBQUM7RUFDbkYsQ0FBQztBQUVGLEtBQUksQ0FBQyxTQUFTLEdBQ1osT0FBTSxJQUFJLE1BQU0sa0NBQWtDLFNBQVMsYUFBYTtDQUcxRSxNQUFNLFNBQVMsTUFBTSxTQUFTLE1BQU07QUFDcEMsS0FBSSxPQUFPLE9BQ1QsT0FBTSxJQUFJLE1BQU0sa0NBQWtDLEtBQUssVUFBVSxPQUFPLE9BQU8sR0FBRztDQUdwRixNQUFNLEtBQUssT0FBTyxNQUFNO0NBQ3hCLE1BQU0sZUFBZSxJQUFJO0NBQ3pCLE1BQU0sTUFBTSxJQUFJO0NBTWhCLE1BQU0sYUFBYSxjQUFjO0NBQ2pDLElBQUlDO0FBQ0osS0FBSTtBQUNGLGNBQVk7R0FBRSxHQUFHLDBCQUEwQixjQUFjLGVBQWU7R0FBRTtHQUFZO1VBQy9FLEtBQUs7QUFDWixTQUFPLFNBQVMsa0VBQWtFLElBQUk7QUFDdEYsY0FBWTtHQUFFLGNBQWM7R0FBVyxnQkFBZ0I7R0FBVztHQUFZOztBQUdoRixRQUFPO0VBSUwsS0FBSyxFQUNILEtBQUs7R0FDSCxJQUFJLEtBQUssTUFBTTtHQUNmLFlBQVksS0FBSyxhQUFhO0dBQzlCLGNBQWMsS0FBSyxlQUFlO0dBQ2xDLFFBQVEsS0FBSyxVQUFVO0dBQ3ZCLFFBQVE7R0FDUixZQUFZLEtBQUssYUFBYTtHQUM5QixZQUFZLEtBQUssYUFBYTtHQUMvQixFQUNGO0VBQ0QsUUFDRyxjQUFjLFNBQVMsRUFBRSxFQUsxQixLQUNDLE9BQTZCO0dBQzVCLE1BQU0sRUFBRTtHQUNSLE9BQU8sRUFBRTtHQUNULFdBQVcsRUFBRTtHQUNkLEVBQ0Y7RUFDRCx3QkFBd0Isd0JBQXdCLGNBQWMsc0JBQXNCO0VBQ3BGO0VBQ0QifQ==
@@ -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+XG4gIGdldFF1ZXJ5UGFyYW0oJ3NwaWZmeV9jb25maWdfdmVyc2lvbicpIHx8IGdldFF1ZXJ5UGFyYW0oJ2Vudml2ZV9jb25maWdfdmVyc2lvbicpIHx8IHVuZGVmaW5lZDtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsTUFBYSxzQkFDWEEsaUNBQWMsd0JBQXdCLElBQUlBLGlDQUFjLHdCQUF3QixJQUFJO0FBT3RGLE1BQWEsOEJBQ1hBLGlDQUFjLHdCQUF3QixJQUFJQSxpQ0FBYyx3QkFBd0IsSUFBSSJ9
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 { configVersion, configVersionOverride };
9
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXZlcnNpb25zLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9jb25maWctdmVyc2lvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0UXVlcnlQYXJhbSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscy91cmxzUGFyc2VyJztcblxuZXhwb3J0IGNvbnN0IGNvbmZpZ1ZlcnNpb24gPSAoKSA9PlxuICBnZXRRdWVyeVBhcmFtKCdzcGlmZnlfY29uZmlnX3ZlcnNpb24nKSB8fCBnZXRRdWVyeVBhcmFtKCdlbnZpdmVfY29uZmlnX3ZlcnNpb24nKSB8fCAnZGVwbG95ZWQnO1xuXG4vLyBVbmxpa2UgYGNvbmZpZ1ZlcnNpb24oKWAsIHRoaXMgcmV0dXJucyB1bmRlZmluZWQgd2hlbiBubyBvdmVycmlkZSBpcyBwcmVzZW50XG4vLyBzbyBjYWxsZXJzIGNhbiBwYXNzIGl0IHRocm91Z2ggR3JhcGhRTCBgdmVyc2lvbmAgYXJndW1lbnRzIHdoZXJlIG9taXNzaW9uXG4vLyBtZWFucyBcImxldCB0aGUgcmVzb2x2ZXIgcGlja1wiIChlLmcuIFN0YXRzaWctZHJpdmVuIHJlc29sdXRpb24gb24gdGhlXG4vLyB1bmlmaWVkIGdldFdpZGdldENvbmZpZyBwYXRoKS4gUGFzc2luZyAnZGVwbG95ZWQnIGhlcmUgd291bGQgZm9yY2UgYVxuLy8gdmVyc2lvbiBvdmVycmlkZSBhbmQgYnlwYXNzIFN0YXRzaWcgYnVja2V0aW5nLlxuZXhwb3J0IGNvbnN0IGNvbmZpZ1ZlcnNpb25PdmVycmlkZSA9ICgpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT5cbiAgZ2V0UXVlcnlQYXJhbSgnc3BpZmZ5X2NvbmZpZ192ZXJzaW9uJykgfHwgZ2V0UXVlcnlQYXJhbSgnZW52aXZlX2NvbmZpZ192ZXJzaW9uJykgfHwgdW5kZWZpbmVkO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFFQSxNQUFhLHNCQUNYLGNBQWMsd0JBQXdCLElBQUksY0FBYyx3QkFBd0IsSUFBSTtBQU90RixNQUFhLDhCQUNYLGNBQWMsd0JBQXdCLElBQUksY0FBYyx3QkFBd0IsSUFBSSJ9
7
+ export { configVersionOverride };
8
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXZlcnNpb25zLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9jb25maWctdmVyc2lvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0UXVlcnlQYXJhbSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscy91cmxzUGFyc2VyJztcblxuZXhwb3J0IGNvbnN0IGNvbmZpZ1ZlcnNpb24gPSAoKSA9PlxuICBnZXRRdWVyeVBhcmFtKCdzcGlmZnlfY29uZmlnX3ZlcnNpb24nKSB8fCBnZXRRdWVyeVBhcmFtKCdlbnZpdmVfY29uZmlnX3ZlcnNpb24nKSB8fCAnZGVwbG95ZWQnO1xuXG4vLyBVbmxpa2UgYGNvbmZpZ1ZlcnNpb24oKWAsIHRoaXMgcmV0dXJucyB1bmRlZmluZWQgd2hlbiBubyBvdmVycmlkZSBpcyBwcmVzZW50XG4vLyBzbyBjYWxsZXJzIGNhbiBwYXNzIGl0IHRocm91Z2ggR3JhcGhRTCBgdmVyc2lvbmAgYXJndW1lbnRzIHdoZXJlIG9taXNzaW9uXG4vLyBtZWFucyBcImxldCB0aGUgcmVzb2x2ZXIgcGlja1wiIChlLmcuIFN0YXRzaWctZHJpdmVuIHJlc29sdXRpb24gb24gdGhlXG4vLyB1bmlmaWVkIGdldFdpZGdldENvbmZpZyBwYXRoKS4gUGFzc2luZyAnZGVwbG95ZWQnIGhlcmUgd291bGQgZm9yY2UgYVxuLy8gdmVyc2lvbiBvdmVycmlkZSBhbmQgYnlwYXNzIFN0YXRzaWcgYnVja2V0aW5nLlxuZXhwb3J0IGNvbnN0IGNvbmZpZ1ZlcnNpb25PdmVycmlkZSA9ICgpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT5cbiAgZ2V0UXVlcnlQYXJhbSgnc3BpZmZ5X2NvbmZpZ192ZXJzaW9uJykgfHwgZ2V0UXVlcnlQYXJhbSgnZW52aXZlX2NvbmZpZ192ZXJzaW9uJykgfHwgdW5kZWZpbmVkO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFVQSxNQUFhLDhCQUNYLGNBQWMsd0JBQXdCLElBQUksY0FBYyx3QkFBd0IsSUFBSSJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@envive-ai/react-hooks",
3
- "version": "0.3.57",
3
+ "version": "0.3.59",
4
4
  "description": "React hooks for connecting to Envive AI services.",
5
5
  "keywords": [
6
6
  "react",
@@ -1,3 +1,2 @@
1
- export * from './queries/getMerchantFrontendConfigQuery';
2
1
  export * from './queries/getMerchantColorsQuery';
3
2
  export * from './queries/getMerchantOrgIdQuery';
@@ -1,17 +1,7 @@
1
- import { configVersion } from 'src/types/config-versions';
2
-
3
- const getMerchantColorsQuery = () => `
4
- query ($version: "${configVersion()}") {
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. Used when the
2
- // `use_unified_config` feature gate is on. Selects productsConfig plus
3
- // the resolution metadata pymono used to pick the version the client
4
- // threads `resolution.base_version` into downstream inference requests
5
- // so they're scoped to the same version that produced the widgets the
6
- // user is rendering. Gates and experiment assignments still come from
7
- // REST /v1/org/config so AmplitudeService can read them synchronously
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 Statsig and pins to that exact version — same
17
- // debug/rollback affordance the legacy getColorsAndFrontendQuery offered.
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
- getWidgetConfig(userId: $userId, version: $version) {
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
- logger.logDebug('retrieving widget config', {
28
- widgetConfigId: request.widgetConfigId,
29
- widgetType: request.widgetType,
30
- });
31
- if (isFrontendConfigLoading) {
32
- setIsLoadingWidgetConfig(false);
33
- throw new Error('Frontend config is loading');
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
- const { widgetConfigId, widgetType } = request;
37
- const response = frontendConfig?.widgetConfigs?.[widgetConfigId];
38
- logger.logDebug('returning widget config response', response);
40
+ const { widgetConfigId, widgetType } = request;
41
+ const response = frontendConfig?.widgetConfigs?.[widgetConfigId];
42
+ logger.logDebug('returning widget config response', response);
39
43
 
40
- if (widgetConfigId === 'fake-widget-config-id') {
41
- return {} as WidgetConfigV3;
42
- }
44
+ if (widgetConfigId === 'fake-widget-config-id') {
45
+ return {} as WidgetConfigV3;
46
+ }
43
47
 
44
- if (
45
- [
46
- WidgetTypeV3.SocialProofV3,
47
- WidgetTypeV3.ChatPreviewV3,
48
- WidgetTypeV3.ChatPreviewComparisonV3,
49
- WidgetTypeV3.ChatPreviewLoadingV3,
50
- ].includes(widgetType)
51
- ) {
52
- if (response?.type !== WidgetTypeV3.SocialProofV3) {
53
- setIsLoadingWidgetConfig(false);
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
- if (!response) {
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
  );