@envive-ai/react-hooks 0.3.63 → 0.3.65

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 (112) hide show
  1. package/dist/application/models/featureGates.cjs +2 -2
  2. package/dist/application/models/featureGates.d.cts +2 -2
  3. package/dist/application/models/featureGates.d.ts +2 -2
  4. package/dist/application/models/featureGates.js +2 -2
  5. package/dist/application/utils/elementObserver.d.cts +2 -2
  6. package/dist/atoms/app/index.d.cts +7 -7
  7. package/dist/atoms/app/index.d.ts +1 -1
  8. package/dist/atoms/app/variant.d.ts +6 -6
  9. package/dist/atoms/chat/chatState.d.cts +19 -19
  10. package/dist/atoms/chat/chatState.d.ts +19 -19
  11. package/dist/atoms/chat/form.d.cts +2 -2
  12. package/dist/atoms/chat/form.d.ts +3 -3
  13. package/dist/atoms/chat/index.d.ts +3 -3
  14. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  15. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  16. package/dist/atoms/chat/messageQueue.d.ts +7 -7
  17. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  18. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  19. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  20. package/dist/atoms/chat/renderedWidgetRefs.d.ts +3 -3
  21. package/dist/atoms/chat/replies.d.cts +3 -3
  22. package/dist/atoms/chat/suggestions.d.ts +3 -3
  23. package/dist/atoms/envive/enviveConfig.d.cts +14 -14
  24. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  25. package/dist/atoms/org/customerService.d.cts +6 -6
  26. package/dist/atoms/org/customerService.d.ts +6 -6
  27. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  28. package/dist/atoms/org/graphqlConfig.d.ts +4 -4
  29. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  30. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  31. package/dist/atoms/org/orgAnalyticsConfig.d.cts +4 -4
  32. package/dist/atoms/org/orgAnalyticsConfig.d.ts +4 -4
  33. package/dist/atoms/search/types.d.cts +1 -1
  34. package/dist/atoms/search/utils.d.cts +1 -1
  35. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  36. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  37. package/dist/contexts/pageContext/pageContext.cjs +12 -24
  38. package/dist/contexts/pageContext/pageContext.js +12 -24
  39. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
  40. package/dist/contexts/types.d.cts +1 -1
  41. package/dist/contexts/types.d.ts +1 -1
  42. package/dist/contexts/typesV3.cjs +8 -1
  43. package/dist/contexts/typesV3.d.cts +23 -6
  44. package/dist/contexts/typesV3.d.ts +23 -6
  45. package/dist/contexts/typesV3.js +8 -2
  46. package/dist/hooks/Intersection/useIntersection.cjs +9 -2
  47. package/dist/hooks/Intersection/useIntersection.d.cts +2 -2
  48. package/dist/hooks/Intersection/useIntersection.d.ts +2 -2
  49. package/dist/hooks/Intersection/useIntersection.js +9 -2
  50. package/dist/hooks/SystemSettingsContext/useSystemSettingsContext.d.cts +2 -2
  51. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.cjs +12 -3
  52. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.cts +2 -1
  53. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.d.ts +2 -1
  54. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +13 -4
  55. package/dist/hooks/WidgetLoadDiagnostics/index.cjs +4 -0
  56. package/dist/hooks/WidgetLoadDiagnostics/index.d.cts +2 -0
  57. package/dist/hooks/WidgetLoadDiagnostics/index.d.ts +2 -0
  58. package/dist/hooks/WidgetLoadDiagnostics/index.js +3 -0
  59. package/dist/hooks/WidgetLoadDiagnostics/useWidgetLoadDiagnostics.cjs +122 -0
  60. package/dist/hooks/WidgetLoadDiagnostics/useWidgetLoadDiagnostics.d.cts +48 -0
  61. package/dist/hooks/WidgetLoadDiagnostics/useWidgetLoadDiagnostics.d.ts +48 -0
  62. package/dist/hooks/WidgetLoadDiagnostics/useWidgetLoadDiagnostics.js +120 -0
  63. package/dist/hooks/utils.d.cts +1 -1
  64. package/dist/hooks/utils.d.ts +1 -1
  65. package/dist/services/amplitudeService/eventNames.cjs +2 -1
  66. package/dist/services/amplitudeService/eventNames.d.cts +2 -1
  67. package/dist/services/amplitudeService/eventNames.d.ts +2 -1
  68. package/dist/services/amplitudeService/eventNames.js +2 -1
  69. package/dist/services/enviveConfigService/enviveConfigService.cjs +21 -35
  70. package/dist/services/enviveConfigService/enviveConfigService.d.cts +1 -2
  71. package/dist/services/enviveConfigService/enviveConfigService.d.ts +1 -2
  72. package/dist/services/enviveConfigService/enviveConfigService.js +21 -35
  73. package/dist/services/enviveConfigService/fetchBootstrapConfig.cjs +15 -16
  74. package/dist/services/enviveConfigService/fetchBootstrapConfig.js +15 -16
  75. package/dist/services/enviveConfigService/fetchGraphQLConfig.cjs +1 -69
  76. package/dist/services/enviveConfigService/fetchGraphQLConfig.js +2 -69
  77. package/dist/services/featureFlagService/index.cjs +7 -5
  78. package/dist/services/featureFlagService/index.d.cts +2 -1
  79. package/dist/services/featureFlagService/index.d.ts +2 -1
  80. package/dist/services/featureFlagService/index.js +7 -5
  81. package/dist/services/ga4ProjectionService/ga4EventSchema.cjs +3 -2
  82. package/dist/services/ga4ProjectionService/ga4EventSchema.js +3 -2
  83. package/dist/services/hardcopyService/hardcopyService.cjs +12 -3
  84. package/dist/services/hardcopyService/hardcopyService.d.cts +3 -1
  85. package/dist/services/hardcopyService/hardcopyService.d.ts +3 -1
  86. package/dist/services/hardcopyService/hardcopyService.js +12 -3
  87. package/package.json +5 -1
  88. package/src/application/models/featureGates.ts +11 -8
  89. package/src/contexts/pageContext/__tests__/pageContext.test.tsx +4 -59
  90. package/src/contexts/pageContext/pageContext.tsx +20 -41
  91. package/src/contexts/typesV3.ts +22 -4
  92. package/src/hooks/Intersection/useIntersection.ts +11 -0
  93. package/src/hooks/TrackComponentVisibleEvent/__tests__/useTrackComponentVisibleEvent.test.tsx +64 -0
  94. package/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts +23 -4
  95. package/src/hooks/WidgetLoadDiagnostics/__tests__/useWidgetLoadDiagnostics.test.ts +161 -0
  96. package/src/hooks/WidgetLoadDiagnostics/index.ts +5 -0
  97. package/src/hooks/WidgetLoadDiagnostics/useWidgetLoadDiagnostics.ts +178 -0
  98. package/src/services/amplitudeService/eventNames.ts +4 -0
  99. package/src/services/enviveConfigService/__tests__/enviveConfigService.test.ts +72 -158
  100. package/src/services/enviveConfigService/__tests__/fetchBootstrapConfig.test.ts +111 -13
  101. package/src/services/enviveConfigService/__tests__/fetchGraphQLConfig.test.ts +161 -490
  102. package/src/services/enviveConfigService/enviveConfigService.ts +51 -87
  103. package/src/services/enviveConfigService/fetchBootstrapConfig.ts +74 -66
  104. package/src/services/enviveConfigService/fetchGraphQLConfig.ts +0 -120
  105. package/src/services/featureFlagService/__tests__/getFeatureFlagOverrides.test.ts +54 -0
  106. package/src/services/featureFlagService/index.ts +19 -6
  107. package/src/services/ga4ProjectionService/ga4EventSchema.ts +5 -0
  108. package/src/services/hardcopyService/__tests__/hardcopyService.test.ts +16 -5
  109. package/src/services/hardcopyService/hardcopyService.ts +10 -2
  110. package/dist/application/models/graphql/queries/getWidgetConfigQuery.cjs +0 -42
  111. package/dist/application/models/graphql/queries/getWidgetConfigQuery.js +0 -41
  112. package/src/application/models/graphql/queries/getWidgetConfigQuery.ts +0 -55
@@ -92,6 +92,7 @@ describe('HardcopyService', () => {
92
92
  titleLabel: 'Hello World',
93
93
  promptButtonTexts: ['Prompt 1', 'Prompt 2'],
94
94
  },
95
+ servedFrom: 'api',
95
96
  });
96
97
  });
97
98
 
@@ -383,7 +384,11 @@ describe('HardcopyService', () => {
383
384
  userEvent: {} as any,
384
385
  });
385
386
 
386
- expect(result).toBe(MOCK_HARDCOPY_RESPONSE[WidgetTypeV3.PromptCarouselV3]);
387
+ expect(result).toEqual({
388
+ ...MOCK_HARDCOPY_RESPONSE[WidgetTypeV3.PromptCarouselV3],
389
+ servedFrom: 'static',
390
+ fallbackReason: 'error',
391
+ });
387
392
  });
388
393
 
389
394
  it('returns the MOCK_HARDCOPY_RESPONSE entry when the API returns falsy', async () => {
@@ -394,7 +399,11 @@ describe('HardcopyService', () => {
394
399
  userEvent: {} as any,
395
400
  });
396
401
 
397
- expect(result).toBe(MOCK_HARDCOPY_RESPONSE[WidgetTypeV3.SocialProofV3]);
402
+ expect(result).toEqual({
403
+ ...MOCK_HARDCOPY_RESPONSE[WidgetTypeV3.SocialProofV3],
404
+ servedFrom: 'static',
405
+ fallbackReason: 'error',
406
+ });
398
407
  });
399
408
 
400
409
  it('does not fire WidgetTextResponse when falling back to mock', async () => {
@@ -437,9 +446,11 @@ describe('HardcopyService', () => {
437
446
 
438
447
  await vi.advanceTimersByTimeAsync(HARDCOPY_TIMEOUT_MS);
439
448
 
440
- await expect(resultPromise).resolves.toBe(
441
- MOCK_HARDCOPY_RESPONSE[WidgetTypeV3.PromptCarouselV3],
442
- );
449
+ await expect(resultPromise).resolves.toEqual({
450
+ ...MOCK_HARDCOPY_RESPONSE[WidgetTypeV3.PromptCarouselV3],
451
+ servedFrom: 'static',
452
+ fallbackReason: 'timeout',
453
+ });
443
454
  } finally {
444
455
  vi.useRealTimers();
445
456
  }
@@ -49,6 +49,10 @@ export type HardcopyResponse = {
49
49
  language: string;
50
50
  rawValues?: Record<string, WidgetString | WidgetString[]>;
51
51
  values: Record<string, string | string[]>;
52
+ // How the copy was served, for widget-load diagnostics: 'api' = live backend response,
53
+ // 'static' = fell back to the bundled MOCK_HARDCOPY_RESPONSE after a backend error or timeout.
54
+ servedFrom?: 'api' | 'static';
55
+ fallbackReason?: 'timeout' | 'error';
52
56
  };
53
57
 
54
58
  export interface IHardcopyService {
@@ -265,6 +269,8 @@ export class HardcopyService implements IHardcopyService {
265
269
  },
266
270
  });
267
271
 
272
+ // Reason the API path failed, surfaced on the static fallback for widget-load diagnostics.
273
+ let fallbackReason: 'timeout' | 'error' | undefined;
268
274
  try {
269
275
  const response = await withTimeout(
270
276
  CommerceApiClient.getHardcopy(widgetTextRequest),
@@ -287,16 +293,18 @@ export class HardcopyService implements IHardcopyService {
287
293
  : {}),
288
294
  },
289
295
  });
290
- return convertedResponse;
296
+ return { ...convertedResponse, servedFrom: 'api' };
291
297
  }
292
298
  } catch (error) {
293
299
  logger.logError('error getting hardcopy from backend', error);
300
+ fallbackReason =
301
+ error instanceof Error && error.message.includes('timed out') ? 'timeout' : 'error';
294
302
  }
295
303
 
296
304
  const mockResponse = MOCK_HARDCOPY_RESPONSE[request.widgetType];
297
305
  if (mockResponse) {
298
306
  logger.logDebug('no real response, using mock', mockResponse);
299
- return mockResponse;
307
+ return { ...mockResponse, servedFrom: 'static', fallbackReason: fallbackReason ?? 'error' };
300
308
  }
301
309
  throw new Error(`No hardcopy response found for widget type: ${request.widgetType}`);
302
310
  }
@@ -1,42 +0,0 @@
1
-
2
- //#region src/application/models/graphql/queries/getWidgetConfigQuery.ts
3
- const getWidgetConfigQuery = () => `
4
- query($userId: String!, $version: String, $gateNames: [String!], $source: String) {
5
- me {
6
- org {
7
- id
8
- shortName
9
- displayName
10
- domain
11
- createdAt
12
- updatedAt
13
- }
14
- getWidgetConfig(userId: $userId, version: $version, gateNames: $gateNames, source: $source) {
15
- productsConfig {
16
- frontend { values }
17
- colors { values }
18
- v_three_config { values }
19
- }
20
- gates {
21
- name
22
- value
23
- groupName
24
- }
25
- experimentAssignments {
26
- layerName
27
- namespace
28
- allocatedExperimentName
29
- groupName
30
- }
31
- resolution {
32
- baseVersion
33
- baseVersionSource
34
- }
35
- }
36
- }
37
- }
38
- `;
39
-
40
- //#endregion
41
- exports.getWidgetConfigQuery = getWidgetConfigQuery;
42
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0V2lkZ2V0Q29uZmlnUXVlcnkuY2pzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3JhcGhxbC9xdWVyaWVzL2dldFdpZGdldENvbmZpZ1F1ZXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFN0YXRzaWctZXhwZXJpbWVudC1hd2FyZSB1bmlmaWVkIGNvbmZpZyBlbmRwb2ludCDigJQgdGhlIHNpbmdsZSBzb3VyY2Ugb2Zcbi8vIHNlc3Npb24gY29uZmlnLiBSZXR1cm5zIHByb2R1Y3RzQ29uZmlnLCB0aGUgcmVzb2x1dGlvbiBtZXRhZGF0YSBweW1vbm8gdXNlZFxuLy8gdG8gcGljayB0aGUgdmVyc2lvbiAodGhlIGNsaWVudCB0aHJlYWRzIGByZXNvbHV0aW9uLmJhc2VWZXJzaW9uYCBpbnRvXG4vLyBkb3duc3RyZWFtIGluZmVyZW5jZSByZXF1ZXN0cyBzbyB0aGV5J3JlIHNjb3BlZCB0byB0aGUgdmVyc2lvbiB0aGF0IHByb2R1Y2VkXG4vLyB0aGUgcmVuZGVyZWQgd2lkZ2V0cyksIEFORCB0aGUgb3JnIGlkZW50aXR5ICsgZmVhdHVyZSBnYXRlcyArIGV4cGVyaW1lbnRcbi8vIGFzc2lnbm1lbnRzIHRoYXQgdXNlZCB0byBjb21lIGZyb20gUkVTVCBgL3YxL29yZy9jb25maWdgLiBQdWxsaW5nIGFsbCBvZiBpdFxuLy8gaGVyZSBsZXRzIHRoZSBjbGllbnQgZHJvcCB0aGUgc2VwYXJhdGUgb3JnL2NvbmZpZyBjYWxsLlxuLy9cbi8vIHVzZXJJZCBpcyByZXF1aXJlZCBieSB0aGUgc2NoZW1hIChTdHJpbmchKSBhbmQgZmVlZHMgU3RhdHNpZyBsYXllclxuLy8gcmVzb2x1dGlvbiBzZXJ2ZXItc2lkZS4gc291cmNlIGZlZWRzIFN0YXRzaWcgdXNlciBwcm9wZXJ0aWVzLlxuLy9cbi8vIGdhdGVOYW1lcyBzZWxlY3RzIHdoaWNoIGZlYXR1cmUgZ2F0ZXMgdG8gZXZhbHVhdGUgYW5kIHJldHVybiDigJQgcGFzcyB0aGUgc2FtZVxuLy8gbGlzdCB0aGUgYXBwIGNoZWNrcyAodGhlIGBGZWF0dXJlR2F0ZXNgIGVudW0gdmFsdWVzKTsgdGhlIHJlc29sdmVyIHJldHVybnMgYW5cbi8vIGVtcHR5IGBnYXRlc2AgbGlzdCB3aGVuIG5vbmUgYXJlIHJlcXVlc3RlZC5cbi8vXG4vLyB2ZXJzaW9uIGlzIG9wdGlvbmFsOyB3aGVuIG9taXR0ZWQgKG5vIGBzcGlmZnlfY29uZmlnX3ZlcnNpb25gIC9cbi8vIGBlbnZpdmVfY29uZmlnX3ZlcnNpb25gIFVSTCBwYXJhbSkgdGhlIHJlc29sdmVyIHVzZXMgU3RhdHNpZyBidWNrZXRpbmcuXG4vLyBXaGVuIHNldCwgaXQgYnlwYXNzZXMgdGhlIG1lcmNoYW50IGV4cGVyaW1lbnQgYW5kIHBpbnMgdG8gdGhhdCBleGFjdCB2ZXJzaW9uXG4vLyAoZW1wdHkgZXhwZXJpbWVudEFzc2lnbm1lbnRzKSDigJQgdGhlIFFBIC8gcm9sbGJhY2sgYWZmb3JkYW5jZS5cbmV4cG9ydCBjb25zdCBnZXRXaWRnZXRDb25maWdRdWVyeSA9ICgpID0+IGBcbiAgcXVlcnkoJHVzZXJJZDogU3RyaW5nISwgJHZlcnNpb246IFN0cmluZywgJGdhdGVOYW1lczogW1N0cmluZyFdLCAkc291cmNlOiBTdHJpbmcpIHtcbiAgICBtZSB7XG4gICAgICBvcmcge1xuICAgICAgICBpZFxuICAgICAgICBzaG9ydE5hbWVcbiAgICAgICAgZGlzcGxheU5hbWVcbiAgICAgICAgZG9tYWluXG4gICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICB1cGRhdGVkQXRcbiAgICAgIH1cbiAgICAgIGdldFdpZGdldENvbmZpZyh1c2VySWQ6ICR1c2VySWQsIHZlcnNpb246ICR2ZXJzaW9uLCBnYXRlTmFtZXM6ICRnYXRlTmFtZXMsIHNvdXJjZTogJHNvdXJjZSkge1xuICAgICAgICBwcm9kdWN0c0NvbmZpZyB7XG4gICAgICAgICAgZnJvbnRlbmQgeyB2YWx1ZXMgfVxuICAgICAgICAgIGNvbG9ycyB7IHZhbHVlcyB9XG4gICAgICAgICAgdl90aHJlZV9jb25maWcgeyB2YWx1ZXMgfVxuICAgICAgICB9XG4gICAgICAgIGdhdGVzIHtcbiAgICAgICAgICBuYW1lXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgICBncm91cE5hbWVcbiAgICAgICAgfVxuICAgICAgICBleHBlcmltZW50QXNzaWdubWVudHMge1xuICAgICAgICAgIGxheWVyTmFtZVxuICAgICAgICAgIG5hbWVzcGFjZVxuICAgICAgICAgIGFsbG9jYXRlZEV4cGVyaW1lbnROYW1lXG4gICAgICAgICAgZ3JvdXBOYW1lXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x1dGlvbiB7XG4gICAgICAgICAgYmFzZVZlcnNpb25cbiAgICAgICAgICBiYXNlVmVyc2lvblNvdXJjZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuIl0sIm1hcHBpbmdzIjoiOztBQW1CQSxNQUFhLDZCQUE2QiJ9
@@ -1,41 +0,0 @@
1
- //#region src/application/models/graphql/queries/getWidgetConfigQuery.ts
2
- const getWidgetConfigQuery = () => `
3
- query($userId: String!, $version: String, $gateNames: [String!], $source: String) {
4
- me {
5
- org {
6
- id
7
- shortName
8
- displayName
9
- domain
10
- createdAt
11
- updatedAt
12
- }
13
- getWidgetConfig(userId: $userId, version: $version, gateNames: $gateNames, source: $source) {
14
- productsConfig {
15
- frontend { values }
16
- colors { values }
17
- v_three_config { values }
18
- }
19
- gates {
20
- name
21
- value
22
- groupName
23
- }
24
- experimentAssignments {
25
- layerName
26
- namespace
27
- allocatedExperimentName
28
- groupName
29
- }
30
- resolution {
31
- baseVersion
32
- baseVersionSource
33
- }
34
- }
35
- }
36
- }
37
- `;
38
-
39
- //#endregion
40
- export { getWidgetConfigQuery };
41
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0V2lkZ2V0Q29uZmlnUXVlcnkuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ncmFwaHFsL3F1ZXJpZXMvZ2V0V2lkZ2V0Q29uZmlnUXVlcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU3RhdHNpZy1leHBlcmltZW50LWF3YXJlIHVuaWZpZWQgY29uZmlnIGVuZHBvaW50IOKAlCB0aGUgc2luZ2xlIHNvdXJjZSBvZlxuLy8gc2Vzc2lvbiBjb25maWcuIFJldHVybnMgcHJvZHVjdHNDb25maWcsIHRoZSByZXNvbHV0aW9uIG1ldGFkYXRhIHB5bW9ubyB1c2VkXG4vLyB0byBwaWNrIHRoZSB2ZXJzaW9uICh0aGUgY2xpZW50IHRocmVhZHMgYHJlc29sdXRpb24uYmFzZVZlcnNpb25gIGludG9cbi8vIGRvd25zdHJlYW0gaW5mZXJlbmNlIHJlcXVlc3RzIHNvIHRoZXkncmUgc2NvcGVkIHRvIHRoZSB2ZXJzaW9uIHRoYXQgcHJvZHVjZWRcbi8vIHRoZSByZW5kZXJlZCB3aWRnZXRzKSwgQU5EIHRoZSBvcmcgaWRlbnRpdHkgKyBmZWF0dXJlIGdhdGVzICsgZXhwZXJpbWVudFxuLy8gYXNzaWdubWVudHMgdGhhdCB1c2VkIHRvIGNvbWUgZnJvbSBSRVNUIGAvdjEvb3JnL2NvbmZpZ2AuIFB1bGxpbmcgYWxsIG9mIGl0XG4vLyBoZXJlIGxldHMgdGhlIGNsaWVudCBkcm9wIHRoZSBzZXBhcmF0ZSBvcmcvY29uZmlnIGNhbGwuXG4vL1xuLy8gdXNlcklkIGlzIHJlcXVpcmVkIGJ5IHRoZSBzY2hlbWEgKFN0cmluZyEpIGFuZCBmZWVkcyBTdGF0c2lnIGxheWVyXG4vLyByZXNvbHV0aW9uIHNlcnZlci1zaWRlLiBzb3VyY2UgZmVlZHMgU3RhdHNpZyB1c2VyIHByb3BlcnRpZXMuXG4vL1xuLy8gZ2F0ZU5hbWVzIHNlbGVjdHMgd2hpY2ggZmVhdHVyZSBnYXRlcyB0byBldmFsdWF0ZSBhbmQgcmV0dXJuIOKAlCBwYXNzIHRoZSBzYW1lXG4vLyBsaXN0IHRoZSBhcHAgY2hlY2tzICh0aGUgYEZlYXR1cmVHYXRlc2AgZW51bSB2YWx1ZXMpOyB0aGUgcmVzb2x2ZXIgcmV0dXJucyBhblxuLy8gZW1wdHkgYGdhdGVzYCBsaXN0IHdoZW4gbm9uZSBhcmUgcmVxdWVzdGVkLlxuLy9cbi8vIHZlcnNpb24gaXMgb3B0aW9uYWw7IHdoZW4gb21pdHRlZCAobm8gYHNwaWZmeV9jb25maWdfdmVyc2lvbmAgL1xuLy8gYGVudml2ZV9jb25maWdfdmVyc2lvbmAgVVJMIHBhcmFtKSB0aGUgcmVzb2x2ZXIgdXNlcyBTdGF0c2lnIGJ1Y2tldGluZy5cbi8vIFdoZW4gc2V0LCBpdCBieXBhc3NlcyB0aGUgbWVyY2hhbnQgZXhwZXJpbWVudCBhbmQgcGlucyB0byB0aGF0IGV4YWN0IHZlcnNpb25cbi8vIChlbXB0eSBleHBlcmltZW50QXNzaWdubWVudHMpIOKAlCB0aGUgUUEgLyByb2xsYmFjayBhZmZvcmRhbmNlLlxuZXhwb3J0IGNvbnN0IGdldFdpZGdldENvbmZpZ1F1ZXJ5ID0gKCkgPT4gYFxuICBxdWVyeSgkdXNlcklkOiBTdHJpbmchLCAkdmVyc2lvbjogU3RyaW5nLCAkZ2F0ZU5hbWVzOiBbU3RyaW5nIV0sICRzb3VyY2U6IFN0cmluZykge1xuICAgIG1lIHtcbiAgICAgIG9yZyB7XG4gICAgICAgIGlkXG4gICAgICAgIHNob3J0TmFtZVxuICAgICAgICBkaXNwbGF5TmFtZVxuICAgICAgICBkb21haW5cbiAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgIHVwZGF0ZWRBdFxuICAgICAgfVxuICAgICAgZ2V0V2lkZ2V0Q29uZmlnKHVzZXJJZDogJHVzZXJJZCwgdmVyc2lvbjogJHZlcnNpb24sIGdhdGVOYW1lczogJGdhdGVOYW1lcywgc291cmNlOiAkc291cmNlKSB7XG4gICAgICAgIHByb2R1Y3RzQ29uZmlnIHtcbiAgICAgICAgICBmcm9udGVuZCB7IHZhbHVlcyB9XG4gICAgICAgICAgY29sb3JzIHsgdmFsdWVzIH1cbiAgICAgICAgICB2X3RocmVlX2NvbmZpZyB7IHZhbHVlcyB9XG4gICAgICAgIH1cbiAgICAgICAgZ2F0ZXMge1xuICAgICAgICAgIG5hbWVcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICAgIGdyb3VwTmFtZVxuICAgICAgICB9XG4gICAgICAgIGV4cGVyaW1lbnRBc3NpZ25tZW50cyB7XG4gICAgICAgICAgbGF5ZXJOYW1lXG4gICAgICAgICAgbmFtZXNwYWNlXG4gICAgICAgICAgYWxsb2NhdGVkRXhwZXJpbWVudE5hbWVcbiAgICAgICAgICBncm91cE5hbWVcbiAgICAgICAgfVxuICAgICAgICByZXNvbHV0aW9uIHtcbiAgICAgICAgICBiYXNlVmVyc2lvblxuICAgICAgICAgIGJhc2VWZXJzaW9uU291cmNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG4iXSwibWFwcGluZ3MiOiI7QUFtQkEsTUFBYSw2QkFBNkIifQ==
@@ -1,55 +0,0 @@
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.
8
- //
9
- // userId is required by the schema (String!) and feeds Statsig layer
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.
15
- //
16
- // version is optional; when omitted (no `spiffy_config_version` /
17
- // `envive_config_version` URL param) the resolver uses Statsig bucketing.
18
- // When set, it bypasses the merchant experiment and pins to that exact version
19
- // (empty experimentAssignments) — the QA / rollback affordance.
20
- export const getWidgetConfigQuery = () => `
21
- query($userId: String!, $version: String, $gateNames: [String!], $source: String) {
22
- me {
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) {
32
- productsConfig {
33
- frontend { values }
34
- colors { values }
35
- v_three_config { values }
36
- }
37
- gates {
38
- name
39
- value
40
- groupName
41
- }
42
- experimentAssignments {
43
- layerName
44
- namespace
45
- allocatedExperimentName
46
- groupName
47
- }
48
- resolution {
49
- baseVersion
50
- baseVersionSource
51
- }
52
- }
53
- }
54
- }
55
- `;