@m4l/testing 0.0.23 → 1.0.1

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 (211) hide show
  1. package/README.md +679 -0
  2. package/chunks/reactLeaflet-Cffkauof.js +1846 -0
  3. package/chunks/render-CsuV8xqo.js +17 -0
  4. package/chunks/userPreferences-BmOgRaIX.js +493 -0
  5. package/index.js +76 -25
  6. package/mocks/index.js +41 -0
  7. package/package.json +85 -102
  8. package/playwright/index.js +2041 -0
  9. package/rtl/index.js +180 -0
  10. package/types/libs/observability/mf/src/browserRuntimeHandles.d.ts +112 -0
  11. package/types/libs/observability/mf/src/diagnosticLogging.d.ts +2 -0
  12. package/types/libs/observability/mf/src/diagnosticPolicies/catalog.d.ts +267 -0
  13. package/types/libs/observability/mf/src/diagnosticPolicies/contracts.d.ts +64 -0
  14. package/types/libs/observability/mf/src/diagnosticPolicies/host.d.ts +139 -0
  15. package/types/libs/observability/mf/src/diagnosticPolicies/index.d.ts +6 -0
  16. package/types/libs/observability/mf/src/diagnosticPolicies/operativeMyGpsDevices.d.ts +104 -0
  17. package/types/libs/observability/mf/src/diagnosticPolicies/sharedReportsList.d.ts +44 -0
  18. package/types/libs/observability/mf/src/diagnosticPolicyKeys.d.ts +34 -0
  19. package/types/libs/observability/mf/src/index.d.ts +14 -0
  20. package/types/libs/observability/mf/src/runtimeSmoke.d.ts +13 -0
  21. package/types/libs/observability/mf/src/telemetry.d.ts +2 -0
  22. package/types/libs/observability/shared/src/diagnosticLogging.d.ts +97 -0
  23. package/types/libs/observability/shared/src/index.d.ts +6 -0
  24. package/types/libs/observability/shared/src/runtimeHandles.d.ts +27 -0
  25. package/types/libs/observability/shared/src/telemetry.d.ts +179 -0
  26. package/types/packages/testing/mocks/src/constants.d.ts +10 -0
  27. package/types/packages/testing/mocks/src/fixtures.d.ts +258 -0
  28. package/types/packages/testing/mocks/src/helpers/environment.d.ts +44 -0
  29. package/types/packages/testing/mocks/src/helpers/hostTools.d.ts +10 -0
  30. package/types/packages/testing/mocks/src/helpers/index.d.ts +5 -0
  31. package/types/packages/testing/mocks/src/helpers/moduleDictionary.d.ts +9 -0
  32. package/types/packages/testing/mocks/src/helpers/toaster.d.ts +9 -0
  33. package/types/packages/testing/mocks/src/helpers/userPreferences.d.ts +17 -0
  34. package/types/packages/testing/mocks/src/index.d.ts +4 -0
  35. package/types/packages/testing/mocks/src/types.d.ts +233 -0
  36. package/types/packages/testing/playwright/src/fixtures/createHostAreaFixture.d.ts +5 -0
  37. package/types/packages/testing/playwright/src/fixtures/createHostAuthenticatedMfMenuFixture.d.ts +5 -0
  38. package/types/packages/testing/playwright/src/fixtures/createHostAuthenticatedMfModuleDictionaryFixture.d.ts +5 -0
  39. package/types/packages/testing/playwright/src/fixtures/createHostAuthenticatedSessionFixture.d.ts +6 -0
  40. package/types/packages/testing/playwright/src/fixtures/createHostCookieFixture.d.ts +5 -0
  41. package/types/packages/testing/playwright/src/fixtures/createHostGuestSessionFixture.d.ts +5 -0
  42. package/types/packages/testing/playwright/src/fixtures/createHostLocaleFixture.d.ts +5 -0
  43. package/types/packages/testing/playwright/src/fixtures/createHostMfPreviewDynamicParamsFixture.d.ts +5 -0
  44. package/types/packages/testing/playwright/src/fixtures/createHostModuleDictionaryFixture.d.ts +11 -0
  45. package/types/packages/testing/playwright/src/fixtures/createHostUiConfigFixture.d.ts +7 -0
  46. package/types/packages/testing/playwright/src/fixtures/createHostUserPreferencesFixture.d.ts +6 -0
  47. package/types/packages/testing/playwright/src/fixtures/createListResponseFixture.d.ts +6 -0
  48. package/types/packages/testing/playwright/src/fixtures/index.d.ts +12 -0
  49. package/types/packages/testing/playwright/src/helpers/attachJson.d.ts +9 -0
  50. package/types/packages/testing/playwright/src/helpers/formAccess.d.ts +53 -0
  51. package/types/packages/testing/playwright/src/helpers/formSelect.d.ts +51 -0
  52. package/types/packages/testing/playwright/src/helpers/formatFailedChecks.d.ts +18 -0
  53. package/types/packages/testing/playwright/src/helpers/index.d.ts +16 -0
  54. package/types/packages/testing/playwright/src/helpers/listDatagrid.d.ts +219 -0
  55. package/types/packages/testing/playwright/src/helpers/listDetail.d.ts +65 -0
  56. package/types/packages/testing/playwright/src/helpers/listFilter.d.ts +27 -0
  57. package/types/packages/testing/playwright/src/helpers/listSort.d.ts +19 -0
  58. package/types/packages/testing/playwright/src/helpers/listStatePersistence.d.ts +15 -0
  59. package/types/packages/testing/playwright/src/helpers/openHostAccountMenuModule.d.ts +10 -0
  60. package/types/packages/testing/playwright/src/helpers/openHostAuthenticatedMfPreviewModule.d.ts +5 -0
  61. package/types/packages/testing/playwright/src/helpers/openHostMobileSidebarModule.d.ts +15 -0
  62. package/types/packages/testing/playwright/src/helpers/openHostSidebarModule.d.ts +5 -0
  63. package/types/packages/testing/playwright/src/helpers/realtimePerformanceBrowser.d.ts +144 -0
  64. package/types/packages/testing/playwright/src/helpers/viewModeDataGrid.d.ts +67 -0
  65. package/types/packages/testing/playwright/src/helpers/waitForBrowserCondition.d.ts +38 -0
  66. package/types/packages/testing/playwright/src/index.d.ts +11 -0
  67. package/types/packages/testing/playwright/src/installers/index.d.ts +20 -0
  68. package/types/packages/testing/playwright/src/installers/installHostAlarmsCountRoute.d.ts +5 -0
  69. package/types/packages/testing/playwright/src/installers/installHostAreasRoute.d.ts +5 -0
  70. package/types/packages/testing/playwright/src/installers/installHostAuthenticatedBootstrapRoutes.d.ts +6 -0
  71. package/types/packages/testing/playwright/src/installers/installHostAuthenticatedMfModuleDictionaryRoute.d.ts +5 -0
  72. package/types/packages/testing/playwright/src/installers/installHostAuthenticatedMfPreviewBootstrap.d.ts +11 -0
  73. package/types/packages/testing/playwright/src/installers/installHostAuthenticatedSessionRoute.d.ts +6 -0
  74. package/types/packages/testing/playwright/src/installers/installHostCookiesRoute.d.ts +8 -0
  75. package/types/packages/testing/playwright/src/installers/installHostGuestBootstrapRoutes.d.ts +7 -0
  76. package/types/packages/testing/playwright/src/installers/installHostGuestSessionRoute.d.ts +7 -0
  77. package/types/packages/testing/playwright/src/installers/installHostLocaleRoute.d.ts +5 -0
  78. package/types/packages/testing/playwright/src/installers/installHostMenusRoute.d.ts +11 -0
  79. package/types/packages/testing/playwright/src/installers/installHostModuleDictionaryRoute.d.ts +6 -0
  80. package/types/packages/testing/playwright/src/installers/installHostPasswordNewRoute.d.ts +6 -0
  81. package/types/packages/testing/playwright/src/installers/installHostPasswordResetRoute.d.ts +6 -0
  82. package/types/packages/testing/playwright/src/installers/installHostUiConfigAssetRoutes.d.ts +9 -0
  83. package/types/packages/testing/playwright/src/installers/installHostUiConfigRoute.d.ts +7 -0
  84. package/types/packages/testing/playwright/src/installers/installHostUserPreferencesRoute.d.ts +6 -0
  85. package/types/packages/testing/playwright/src/installers/installListEndpointRoute.d.ts +7 -0
  86. package/types/packages/testing/playwright/src/installers/installMicrofrontendRenderStub.d.ts +9 -0
  87. package/types/packages/testing/playwright/src/installers/installModulePrivilegesRoute.d.ts +11 -0
  88. package/types/packages/testing/playwright/src/types.d.ts +598 -0
  89. package/types/packages/testing/rtl/src/index.d.ts +4 -0
  90. package/types/packages/testing/rtl/src/matchMedia.d.ts +10 -0
  91. package/types/packages/testing/rtl/src/render.d.ts +17 -0
  92. package/types/packages/testing/rtl/src/resizeObserver.d.ts +33 -0
  93. package/types/packages/testing/rtl/src/storage.d.ts +10 -0
  94. package/types/packages/testing/src/index.d.ts +6 -0
  95. package/types/packages/testing/vitest/src/constants.d.ts +24 -0
  96. package/types/packages/testing/vitest/src/factories/app/index.d.ts +5 -0
  97. package/types/packages/testing/vitest/src/factories/app/m4lAppBase.d.ts +9 -0
  98. package/types/packages/testing/vitest/src/factories/app/m4lAppComponents.d.ts +20 -0
  99. package/types/packages/testing/vitest/src/factories/app/m4lAppCore.d.ts +12 -0
  100. package/types/packages/testing/vitest/src/factories/app/m4lAppGraphics.d.ts +10 -0
  101. package/types/packages/testing/vitest/src/factories/app/m4lAppLayouts.d.ts +18 -0
  102. package/types/packages/testing/vitest/src/factories/base/index.d.ts +1 -0
  103. package/types/packages/testing/vitest/src/factories/base/m4lBaseComponents.d.ts +13 -0
  104. package/types/packages/testing/vitest/src/factories/index.d.ts +7 -0
  105. package/types/packages/testing/vitest/src/factories/leaflet.d.ts +10 -0
  106. package/types/packages/testing/vitest/src/factories/packages/index.d.ts +7 -0
  107. package/types/packages/testing/vitest/src/factories/packages/m4lPackageBase.d.ts +11 -0
  108. package/types/packages/testing/vitest/src/factories/packages/m4lPackageComponents.d.ts +11 -0
  109. package/types/packages/testing/vitest/src/factories/packages/m4lPackageCore.d.ts +11 -0
  110. package/types/packages/testing/vitest/src/factories/packages/m4lPackageGclick.d.ts +10 -0
  111. package/types/packages/testing/vitest/src/factories/packages/m4lPackageGclickRealtime.d.ts +6 -0
  112. package/types/packages/testing/vitest/src/factories/packages/m4lPackageGraphics.d.ts +9 -0
  113. package/types/packages/testing/vitest/src/factories/packages/m4lPackageLayouts.d.ts +10 -0
  114. package/types/packages/testing/vitest/src/factories/reResizable.d.ts +6 -0
  115. package/types/packages/testing/vitest/src/factories/reactHookForm.d.ts +10 -0
  116. package/types/packages/testing/vitest/src/factories/reactLeaflet.d.ts +10 -0
  117. package/types/packages/testing/vitest/src/fixtures.d.ts +71 -0
  118. package/types/packages/testing/vitest/src/helpers/columnConfigs.d.ts +184 -0
  119. package/types/packages/testing/vitest/src/helpers/elementMocks.d.ts +166 -0
  120. package/types/packages/testing/vitest/src/helpers/filterFields.d.ts +37 -0
  121. package/types/packages/testing/vitest/src/helpers/index.d.ts +9 -0
  122. package/types/packages/testing/vitest/src/helpers/mapStore.d.ts +9 -0
  123. package/types/packages/testing/vitest/src/helpers/moduleContract.d.ts +15 -0
  124. package/types/packages/testing/vitest/src/helpers/rhf.d.ts +8 -0
  125. package/types/packages/testing/vitest/src/helpers/serialization.d.ts +7 -0
  126. package/types/packages/testing/vitest/src/helpers/sortFields.d.ts +28 -0
  127. package/types/packages/testing/vitest/src/helpers/windowSizes.d.ts +1 -0
  128. package/types/packages/testing/vitest/src/index.d.ts +6 -0
  129. package/types/packages/testing/vitest/src/installers/consoleError.d.ts +9 -0
  130. package/types/packages/testing/vitest/src/installers/index.d.ts +2 -0
  131. package/types/packages/testing/vitest/src/installers/rhfSubmit.d.ts +9 -0
  132. package/types/packages/testing/vitest/src/types.d.ts +116 -0
  133. package/vitest/index.js +55 -0
  134. package/e2e/commands/components/Accordions/commands.d.ts +0 -4
  135. package/e2e/commands/components/Accordions/commands.js +0 -19
  136. package/e2e/commands/components/Accordions/types.d.ts +0 -63
  137. package/e2e/commands/components/CommonActions/commands.d.ts +0 -4
  138. package/e2e/commands/components/CommonActions/commands.js +0 -11
  139. package/e2e/commands/components/CommonActions/types.d.ts +0 -20
  140. package/e2e/commands/components/DataGrid/commands.d.ts +0 -4
  141. package/e2e/commands/components/DataGrid/commands.js +0 -42
  142. package/e2e/commands/components/DataGrid/types.d.ts +0 -140
  143. package/e2e/commands/components/DynamicFilter/commands.d.ts +0 -4
  144. package/e2e/commands/components/DynamicFilter/commands.js +0 -12
  145. package/e2e/commands/components/DynamicFilter/types.d.ts +0 -27
  146. package/e2e/commands/components/DynamicSort/commands.d.ts +0 -4
  147. package/e2e/commands/components/DynamicSort/commands.js +0 -10
  148. package/e2e/commands/components/DynamicSort/types.d.ts +0 -26
  149. package/e2e/commands/components/Filters/commands.d.ts +0 -4
  150. package/e2e/commands/components/Filters/commands.js +0 -24
  151. package/e2e/commands/components/Filters/types.d.ts +0 -91
  152. package/e2e/commands/components/MenuActions/commands.d.ts +0 -4
  153. package/e2e/commands/components/MenuActions/commands.js +0 -8
  154. package/e2e/commands/components/MenuActions/types.d.ts +0 -24
  155. package/e2e/commands/components/Popover/commands.d.ts +0 -4
  156. package/e2e/commands/components/Popover/commands.js +0 -8
  157. package/e2e/commands/components/Popover/types.d.ts +0 -15
  158. package/e2e/commands/components/PropertyValue/commands.d.ts +0 -4
  159. package/e2e/commands/components/PropertyValue/commands.js +0 -8
  160. package/e2e/commands/components/PropertyValue/types.d.ts +0 -19
  161. package/e2e/commands/components/Tab/commands.d.ts +0 -4
  162. package/e2e/commands/components/Tab/commands.js +0 -9
  163. package/e2e/commands/components/Tab/types.d.ts +0 -29
  164. package/e2e/commands/components/WindowBase/commands.d.ts +0 -4
  165. package/e2e/commands/components/WindowBase/commands.js +0 -20
  166. package/e2e/commands/components/WindowBase/types.d.ts +0 -84
  167. package/e2e/commands/components/index.d.ts +0 -11
  168. package/e2e/commands/components/index.js +0 -1
  169. package/e2e/commands/index.d.ts +0 -4
  170. package/e2e/commands/index.js +0 -1
  171. package/e2e/commands/intercepts/index.d.ts +0 -2
  172. package/e2e/commands/intercepts/index.js +0 -1
  173. package/e2e/commands/intercepts/noPrivileges/interceptCommands.d.ts +0 -5
  174. package/e2e/commands/intercepts/noPrivileges/interceptCommands.js +0 -15
  175. package/e2e/commands/intercepts/noPrivileges/types.d.ts +0 -8
  176. package/e2e/commands/intercepts/noPrivileges/types.js +0 -1
  177. package/e2e/commands/register.d.ts +0 -4
  178. package/e2e/commands/register.js +0 -18
  179. package/e2e/cypress.d.js +0 -1
  180. package/e2e/cypress.d.ts +0 -23
  181. package/e2e/index.d.ts +0 -1
  182. package/e2e/types.d.ts +0 -4
  183. package/index.d.ts +0 -4
  184. package/index.test.d.ts +0 -1
  185. package/testComponents/DataGrid/helpers.d.ts +0 -5
  186. package/testComponents/DataGrid/helpers.js +0 -95
  187. package/testComponents/DataGrid/index.d.ts +0 -2
  188. package/testComponents/DataGrid/index.js +0 -1
  189. package/testComponents/DataGrid/types.d.ts +0 -54
  190. package/testComponents/DataGrid/types.js +0 -1
  191. package/testComponents/DynamicFilter/helpers.d.ts +0 -5
  192. package/testComponents/DynamicFilter/helpers.js +0 -18
  193. package/testComponents/DynamicFilter/index.d.ts +0 -1
  194. package/testComponents/DynamicFilter/index.js +0 -1
  195. package/testComponents/DynamicFilter/types.d.ts +0 -0
  196. package/testComponents/DynamicSort/helpers.d.ts +0 -5
  197. package/testComponents/DynamicSort/helpers.js +0 -16
  198. package/testComponents/DynamicSort/index.d.ts +0 -1
  199. package/testComponents/DynamicSort/index.js +0 -1
  200. package/testComponents/index.d.ts +0 -3
  201. package/testComponents/index.js +0 -1
  202. package/testTools/constants.d.ts +0 -0
  203. package/testTools/index.d.ts +0 -1
  204. package/testTools/index.js +0 -1
  205. package/testTools/mocks.d.ts +0 -0
  206. package/testTools/setup.d.ts +0 -0
  207. package/testTools/setup.js +0 -1
  208. package/testTools/types.d.ts +0 -0
  209. package/testTools/utils.d.ts +0 -11
  210. package/testTools/utils.js +0 -23
  211. package/vite-env.d.ts +0 -5
@@ -0,0 +1,2041 @@
1
+ import { expect as T } from "@playwright/test";
2
+ const ie = {
3
+ id: "area_testing_1",
4
+ name: "Workspace 1"
5
+ };
6
+ function K(e = {}) {
7
+ return {
8
+ ...ie,
9
+ ...e
10
+ };
11
+ }
12
+ function re(e) {
13
+ const { data: t, pagerPage: o = 0, total: a = t.length } = e;
14
+ return {
15
+ data: t,
16
+ pager: { page: o, total: a }
17
+ };
18
+ }
19
+ const U = {
20
+ data: {
21
+ module_name: "Shared Host Module",
22
+ module_description: "Deterministic host-shell test dictionary"
23
+ }
24
+ };
25
+ function C(e = {}) {
26
+ const { data: t = {}, sections: o = {} } = e;
27
+ return {
28
+ ...U,
29
+ ...o,
30
+ data: {
31
+ ...U.data,
32
+ ...t
33
+ }
34
+ };
35
+ }
36
+ const se = "Deterministic authenticated host-preview module dictionary.";
37
+ function ne(e) {
38
+ const {
39
+ moduleName: t,
40
+ moduleDescription: o = se,
41
+ data: a = {},
42
+ sections: i = {}
43
+ } = e;
44
+ return C({
45
+ data: {
46
+ module_name: t,
47
+ module_description: o,
48
+ ...a
49
+ },
50
+ sections: i
51
+ });
52
+ }
53
+ const ce = "Operations";
54
+ function le(e) {
55
+ const {
56
+ moduleId: t,
57
+ title: o,
58
+ debugPort: a,
59
+ iconUrl: i,
60
+ dynamicParams: r,
61
+ sectionTitle: s = ce
62
+ } = e;
63
+ return [
64
+ {
65
+ title: s,
66
+ children: [
67
+ {
68
+ title: o,
69
+ moduleId: t,
70
+ debugPort: a,
71
+ ...i ? { iconUrl: i } : {},
72
+ ...r ? { dynamicParams: r } : {}
73
+ }
74
+ ]
75
+ }
76
+ ];
77
+ }
78
+ const x = {
79
+ user: {
80
+ email: "taylor.system@example.test",
81
+ id: 42,
82
+ firstName: "Taylor",
83
+ lastName: "System",
84
+ accountId: 7,
85
+ domainCountry: {
86
+ currency: "USD",
87
+ currencyDecimalDigits: 2,
88
+ decimalSymbol: ".",
89
+ thousandsSymbol: ","
90
+ },
91
+ avatarUrl: "https://example.test/testing/assets/avatar.png",
92
+ sessionId: "session-testing-1",
93
+ dbType: "dt_operative"
94
+ }
95
+ };
96
+ function de(e = {}) {
97
+ return {
98
+ user: {
99
+ ...x.user,
100
+ ...e,
101
+ domainCountry: {
102
+ ...x.user.domainCountry,
103
+ ...e.domainCountry
104
+ }
105
+ }
106
+ };
107
+ }
108
+ const ue = {
109
+ id: "admin",
110
+ container_id: "areas",
111
+ value: JSON.stringify({ selectedAreaId: K().id })
112
+ };
113
+ function pe(e = {}) {
114
+ return {
115
+ ...ue,
116
+ ...e
117
+ };
118
+ }
119
+ const N = {
120
+ error: {
121
+ code: 401,
122
+ message: "Unauthorized"
123
+ }
124
+ };
125
+ function me(e = {}) {
126
+ return {
127
+ ...N,
128
+ ...e,
129
+ error: {
130
+ ...N.error,
131
+ ...e.error
132
+ }
133
+ };
134
+ }
135
+ const ge = {
136
+ lang: "en",
137
+ region: "US",
138
+ urlIcon: "frontend/commons/assets/icons/langs/lang_en.svg",
139
+ name: "English US"
140
+ };
141
+ function ye(e = {}) {
142
+ return {
143
+ ...ge,
144
+ ...e
145
+ };
146
+ }
147
+ function Ut(e = {}) {
148
+ const {
149
+ disableSelectionAutofocus: t,
150
+ dummyPresetId: o,
151
+ testCondition: a,
152
+ ...i
153
+ } = e;
154
+ return {
155
+ ...i,
156
+ ...t !== void 0 ? { disableSelectionAutofocus: t } : {},
157
+ ...o ? { dummyPresetId: o } : {},
158
+ ...a ? { testCondition: a } : {}
159
+ };
160
+ }
161
+ const fe = {
162
+ privacyPolicyLink: "https://example.test/privacy-policy",
163
+ useTerms: "https://example.test/terms-of-service",
164
+ assetLogoUrl: "testing/assets/company-logo.svg",
165
+ assetUserInterfaceLogoUrl: "testing/assets/platform-logo.svg",
166
+ assetDocumentsLogoUrl: "testing/assets/documents-logo.svg",
167
+ assetNotificationsLogoUrl: "testing/assets/notifications-logo.svg",
168
+ assetLoginBackgroundUrl: "testing/assets/login-background.jpg",
169
+ assetFaviconUrl: "testing/assets/favicon.svg",
170
+ assetLogoMobileUrl: "testing/assets/company-logo-mobile.svg",
171
+ browserName: "GClick Test Host",
172
+ bottomTitle: "GClick Platform",
173
+ dbType: "dt_operative"
174
+ };
175
+ function W(e = {}) {
176
+ return {
177
+ ...fe,
178
+ ...e
179
+ };
180
+ }
181
+ const h = {
182
+ locale: {
183
+ id: "en-US",
184
+ name: "English (United States)"
185
+ },
186
+ time_zone: {
187
+ id: 1,
188
+ name: "America/Bogota",
189
+ title: "America/Bogota",
190
+ base_offset: -5,
191
+ dst_offset: 0,
192
+ country_code: "CO"
193
+ },
194
+ date_format: {
195
+ id: 1,
196
+ name: "date",
197
+ description: "date",
198
+ format: "yyyy-MM-dd"
199
+ },
200
+ time_format: {
201
+ id: 1,
202
+ name: "time",
203
+ description: "time",
204
+ format: "HH:mm:ss"
205
+ },
206
+ decimal_symbol: ".",
207
+ thousands_symbol: ",",
208
+ currency: "USD",
209
+ currency_decimal_digits: 2
210
+ };
211
+ function be(e = {}) {
212
+ const t = e.locale ? { ...h.locale, ...e.locale } : h.locale, o = e.time_zone ? { ...h.time_zone, ...e.time_zone } : h.time_zone, a = e.date_format ? { ...h.date_format, ...e.date_format } : h.date_format, i = e.time_format ? { ...h.time_format, ...e.time_format } : h.time_format;
213
+ return {
214
+ ...h,
215
+ ...e,
216
+ locale: t,
217
+ time_zone: o,
218
+ date_format: a,
219
+ time_format: i
220
+ };
221
+ }
222
+ async function xt(e, t, o) {
223
+ await e.attach(t, {
224
+ body: JSON.stringify(o, null, 2),
225
+ contentType: "application/json"
226
+ });
227
+ }
228
+ function we(e) {
229
+ return e.getByRole("region", { name: "formContainer" });
230
+ }
231
+ function z(e, t) {
232
+ return we(e).locator(`[name="${t}"]`);
233
+ }
234
+ function he(e) {
235
+ return e.getByRole("group", { name: "actionsContainer" });
236
+ }
237
+ function Nt(e, t) {
238
+ return e.getByRole("alert").filter({ hasText: t });
239
+ }
240
+ function Gt(e) {
241
+ return e.getByRole("dialog");
242
+ }
243
+ function jt(e, t) {
244
+ return he(e).getByRole("button", { name: t });
245
+ }
246
+ async function $t(e) {
247
+ const { page: t, name: o, endpointPattern: a, search: i } = e, r = z(t, o), s = t.waitForRequest(
248
+ (n) => n.method() === "GET" && a.test(n.url())
249
+ );
250
+ return await r.click(), i && await r.fill(i), s;
251
+ }
252
+ function Vt(e) {
253
+ return e.getByRole("listbox").getByRole("option");
254
+ }
255
+ async function qt(e) {
256
+ const { page: t, name: o, optionLabel: a, search: i } = e, r = z(t, o);
257
+ await r.click(), i && await r.fill(i);
258
+ const s = t.getByRole("listbox"), n = a ? s.getByRole("option", { name: a }).first() : s.getByRole("option").first();
259
+ await n.waitFor({ state: "visible" }), await n.click();
260
+ }
261
+ function Yt(e) {
262
+ return e.length === 0 ? "All checks passed." : e.map((t) => {
263
+ const o = t.actual === null ? "null" : String(t.actual);
264
+ return `${t.key}: expected ${String(t.threshold)}, received ${o}`;
265
+ }).join(`
266
+ `);
267
+ }
268
+ function k(e) {
269
+ return e.getByRole("grid");
270
+ }
271
+ function J(e) {
272
+ return k(e).locator(
273
+ '[role="row"]:has([role="gridcell"])'
274
+ );
275
+ }
276
+ function Kt(e, t) {
277
+ return k(e).getByRole("gridcell", {
278
+ name: t,
279
+ exact: !0
280
+ });
281
+ }
282
+ function I(e, t = 0) {
283
+ return J(e).nth(t);
284
+ }
285
+ async function Wt(e, t = 0) {
286
+ await I(e, t).getByRole("button", { name: "menu-actions" }).click();
287
+ }
288
+ async function zt(e, t = 0) {
289
+ await I(e, t).getByRole("gridcell").nth(1).dblclick();
290
+ }
291
+ async function Jt(e, t = 0) {
292
+ await I(e, t).getByRole("gridcell").nth(1).click();
293
+ }
294
+ async function Xt(e) {
295
+ const t = k(e).locator(
296
+ '[role="gridcell"][aria-selected="true"]'
297
+ );
298
+ return await t.waitFor({ state: "visible" }), t.evaluate((o) => ({
299
+ rowIndex: Number(
300
+ o.closest('[role="row"]')?.getAttribute("aria-rowindex") ?? Number.NaN
301
+ ),
302
+ columnIndex: Number(o.getAttribute("aria-colindex") ?? Number.NaN)
303
+ }));
304
+ }
305
+ function X(e) {
306
+ return k(e).getByRole("button", {
307
+ name: /^header-column-button-/
308
+ });
309
+ }
310
+ const Qt = [
311
+ "toggle-freeze",
312
+ "hide-column"
313
+ ];
314
+ function M(e) {
315
+ return ("mouse" in e ? e : e.page()).locator('[data-testid="PopoverRoot"]');
316
+ }
317
+ async function Zt(e, t) {
318
+ await k(e).getByRole("button", {
319
+ name: `header-column-button-${t}`,
320
+ exact: !0
321
+ }).click(), await M(e).waitFor({ state: "visible" });
322
+ }
323
+ async function eo(e) {
324
+ const t = M(e).getByRole("menuitem");
325
+ return await t.first().waitFor({ state: "visible" }), t.evaluateAll(
326
+ (o) => o.map((a) => ({
327
+ action: a.getAttribute("aria-label") ?? "",
328
+ disabled: a.getAttribute("aria-disabled") === "true"
329
+ }))
330
+ );
331
+ }
332
+ async function to(e, t) {
333
+ await M(e).getByRole("menuitem", { name: t, exact: !0 }).click();
334
+ }
335
+ async function oo(e) {
336
+ await M(e).locator(".MuiBackdrop-root").click({ force: !0, position: { x: 5, y: 5 } }), await M(e).waitFor({ state: "detached" });
337
+ }
338
+ function Q(e, t) {
339
+ return k(e).locator(
340
+ `[role="columnheader"]:has([aria-label="header-column-button-${t}"])`
341
+ );
342
+ }
343
+ async function ve(e, t) {
344
+ const o = Q(e, t);
345
+ await o.waitFor({ state: "visible" });
346
+ const a = await o.boundingBox();
347
+ if (!a)
348
+ throw new Error(`Column "${t}" has no rendered box to measure.`);
349
+ return Math.round(a.width);
350
+ }
351
+ async function ao(e, t, o) {
352
+ const a = "mouse" in e ? e : e.page(), i = Q(e, t);
353
+ await i.waitFor({ state: "visible" });
354
+ const r = await i.boundingBox();
355
+ if (!r)
356
+ throw new Error(`Column "${t}" has no rendered box to resize.`);
357
+ const s = r.x + r.width - 3, n = r.y + r.height / 2;
358
+ return await a.mouse.move(s, n), await a.mouse.down(), await a.mouse.move(s + o, n, { steps: 12 }), await a.mouse.up(), ve(e, t);
359
+ }
360
+ async function _e(e) {
361
+ const t = X(e);
362
+ return await t.first().waitFor({ state: "visible" }), (await t.evaluateAll(
363
+ (a) => a.map((i) => i.getAttribute("aria-label") ?? "")
364
+ )).map((a) => a.replace("header-column-button-", ""));
365
+ }
366
+ async function io(e) {
367
+ const t = k(e);
368
+ await t.waitFor({ state: "visible" });
369
+ const o = X(e);
370
+ await o.first().waitFor({ state: "visible" }), await t.evaluate(async (i) => {
371
+ i.scrollTo({ left: 0, behavior: "instant" }), await new Promise((r) => {
372
+ requestAnimationFrame(() => r(null));
373
+ });
374
+ });
375
+ const a = {};
376
+ for (; ; ) {
377
+ const i = await o.evaluateAll(
378
+ (s) => s.map((n) => ({
379
+ key: (n.getAttribute("aria-label") ?? "").replace(
380
+ "header-column-button-",
381
+ ""
382
+ ),
383
+ align: /rdg-cell-align-(left|center|right)/.exec(
384
+ n.closest('[role="columnheader"]')?.className ?? ""
385
+ )?.[1] ?? ""
386
+ }))
387
+ );
388
+ for (const { key: s, align: n } of i)
389
+ s && !(s in a) && (a[s] = n);
390
+ if (await t.evaluate(async (s) => {
391
+ const n = s.scrollLeft, l = n + Math.max(s.clientWidth - 120, 120);
392
+ return s.scrollTo({ left: l, behavior: "instant" }), await new Promise((p) => {
393
+ requestAnimationFrame(() => p(null));
394
+ }), s.scrollLeft === n;
395
+ }))
396
+ break;
397
+ }
398
+ return await t.evaluate((i) => {
399
+ i.scrollTo({ left: 0, behavior: "instant" });
400
+ }), a;
401
+ }
402
+ async function ro(e) {
403
+ const t = k(e);
404
+ await t.waitFor({ state: "visible" });
405
+ const o = [];
406
+ for (; ; ) {
407
+ for (const i of await _e(e))
408
+ o.includes(i) || o.push(i);
409
+ if (await t.evaluate(async (i) => {
410
+ const r = i.scrollLeft, s = r + Math.max(i.clientWidth - 120, 120);
411
+ return i.scrollTo({ left: s, behavior: "instant" }), await new Promise((n) => {
412
+ requestAnimationFrame(() => n(null));
413
+ }), i.scrollLeft === r;
414
+ }))
415
+ break;
416
+ }
417
+ return await t.evaluate((a) => {
418
+ a.scrollTo({ left: 0, behavior: "instant" });
419
+ }), o;
420
+ }
421
+ async function so(e, t = 0) {
422
+ const o = e.locator('[data-testid="data-grid-card"], [data-testid="list-row"]').nth(t);
423
+ return await o.waitFor({ state: "attached" }), (await o.locator('[data-testid^="datagrid-field-"]').evaluateAll(
424
+ (r) => r.map((s) => s.getAttribute("data-testid") ?? "")
425
+ )).map((r) => r.replace("datagrid-field-", ""));
426
+ }
427
+ function no(e) {
428
+ return e.getByRole("alert", { name: "NoItemSelected" });
429
+ }
430
+ function co(e, t) {
431
+ return e.getByRole("listitem").filter({ hasText: t }).last();
432
+ }
433
+ function ke(e, t) {
434
+ return e.getByRole("heading", { name: t });
435
+ }
436
+ async function lo(e, t) {
437
+ await ke(e, t).click();
438
+ }
439
+ function Re(e) {
440
+ return e.getByRole("region");
441
+ }
442
+ async function uo(e) {
443
+ const t = Re(e);
444
+ await t.first().waitFor({ state: "visible" });
445
+ const o = t.getByRole("listitem");
446
+ return await o.first().waitFor({ state: "visible" }), (await o.allInnerTexts()).map((a) => a.split(`
447
+ `)[0].trim());
448
+ }
449
+ async function po(e) {
450
+ const { page: t, logsTabName: o, logsEndpointPattern: a } = e;
451
+ await t.getByRole("tab", { name: o }).click();
452
+ const i = t.waitForRequest(
453
+ (r) => a.test(r.url())
454
+ );
455
+ return await t.getByRole("button", { name: "refresh", exact: !0 }).last().click(), i;
456
+ }
457
+ async function G(e, t = 1) {
458
+ await e.click();
459
+ for (let o = 0; o < t; o += 1)
460
+ await e.press("ArrowDown");
461
+ await e.press("Enter");
462
+ }
463
+ async function Ee(e, t) {
464
+ switch (t.type) {
465
+ case "string":
466
+ case "number": {
467
+ const o = e.getByRole("textbox", { name: "M4LLabel" }).last();
468
+ await o.fill(t.value ?? ""), await o.press("Enter");
469
+ return;
470
+ }
471
+ case "datetime": {
472
+ const o = e.locator('input[placeholder="YYYY-MM-DD hh:mm:ss"]');
473
+ await o.first().waitFor({ state: "visible" }), await o.nth(0).fill(t.value ?? ""), await o.nth(1).fill(t.valueTo ?? t.value ?? ""), await e.getByRole("button", { name: "applyFilter" }).click();
474
+ return;
475
+ }
476
+ case "boolean": {
477
+ await G(
478
+ e.locator('input[role="combobox"]').last(),
479
+ t.value === "false" ? 2 : 1
480
+ );
481
+ return;
482
+ }
483
+ case "selectAsync": {
484
+ const o = e.locator('input[role="combobox"]').last();
485
+ await o.fill(t.value ?? ""), await o.press("ArrowDown"), await o.press("Enter");
486
+ return;
487
+ }
488
+ case "select": {
489
+ await G(
490
+ e.locator('input[role="combobox"]').last()
491
+ );
492
+ return;
493
+ }
494
+ }
495
+ }
496
+ async function Se(e) {
497
+ const { page: t, scenario: o, endpointPattern: a } = e;
498
+ await t.getByRole("button", { name: "searchbox" }).first().click(), await t.getByRole("menuitem", { name: o.fieldLabel, exact: !0 }).click(), await Ee(t, o);
499
+ const i = t.waitForRequest(
500
+ (r) => a.test(r.url()) && /f\[\d+\]\[n\]=/.test(decodeURIComponent(r.url()))
501
+ );
502
+ return await t.getByRole("button", { name: "refresh", exact: !0 }).click(), i;
503
+ }
504
+ async function mo(e) {
505
+ const { page: t, scenarios: o, endpointPattern: a } = e;
506
+ let i;
507
+ for (const r of o)
508
+ i = await Se({
509
+ page: t,
510
+ scenario: r,
511
+ endpointPattern: a
512
+ });
513
+ if (!i)
514
+ throw new Error(
515
+ "applyListFiltersAndCaptureRequest requires at least one scenario"
516
+ );
517
+ return i;
518
+ }
519
+ function go(e) {
520
+ return [...decodeURIComponent(e.url()).matchAll(/f\[\d+\]\[n\]=([^&]+)/g)].map((o) => o[1]);
521
+ }
522
+ const yo = "master_applied_filters", fo = "master_applied_sorts";
523
+ function bo(e, t) {
524
+ return e.waitForRequest(
525
+ (o) => o.method() === "PUT" && new RegExp(`/cookies/.*${t}`).test(o.url())
526
+ );
527
+ }
528
+ async function wo(e) {
529
+ const { page: t, scenario: o, endpointPattern: a } = e;
530
+ await t.getByRole("button", { name: `header-column-button-${o.columnKey}` }).click();
531
+ const i = t.waitForRequest(
532
+ (r) => a.test(r.url()) && /s\[\d+\]\[n\]=/.test(decodeURIComponent(r.url()))
533
+ );
534
+ return await t.getByRole("menuitem", { name: "sort-descending" }).click(), i;
535
+ }
536
+ function ho(e) {
537
+ return [...decodeURIComponent(e.url()).matchAll(/s\[\d+\]\[n\]=([^&]+)/g)].map((o) => o[1]);
538
+ }
539
+ const j = "datagrid-view-";
540
+ async function Te(e) {
541
+ const t = e.locator(`[aria-label^="${j}"]`);
542
+ await t.first().waitFor({ state: "attached" });
543
+ const o = await t.first().getAttribute("aria-label"), a = o?.slice(j.length);
544
+ if (a !== "table" && a !== "cards" && a !== "list")
545
+ throw new Error(
546
+ `Unrecognized datagrid view mode from aria-label "${o}". Expected one of datagrid-view-table | datagrid-view-cards | datagrid-view-list.`
547
+ );
548
+ return a;
549
+ }
550
+ async function Ae(e, t) {
551
+ T(await Te(e)).toBe(t);
552
+ }
553
+ async function Z(e) {
554
+ await e.getByRole("button", { name: "view-mode" }).click();
555
+ }
556
+ async function vo(e) {
557
+ await Z(e);
558
+ const t = "keyboard" in e ? e : e.page(), o = [];
559
+ for (const a of ["table", "cards", "list"])
560
+ await t.locator(`[data-testid="toggle-button-${a}"]`).isVisible() && o.push(a);
561
+ return await Pe(e), o;
562
+ }
563
+ async function Pe(e) {
564
+ const t = "keyboard" in e ? e : e.page();
565
+ await t.keyboard.press("Escape"), await T(
566
+ t.locator('[data-testid="toggle-button-table"]')
567
+ ).toBeHidden();
568
+ }
569
+ async function _o(e, t) {
570
+ await Z(e), await ("keyboard" in e ? e : e.page()).locator(`[data-testid="toggle-button-${t}"]`).click(), await Ae(e, t);
571
+ }
572
+ async function Me(e) {
573
+ const t = "keyboard" in e ? e : e.page();
574
+ await e.locator('[data-testid="settings-button"]').click(), await T(
575
+ t.locator('[data-testid="data-grid-settings-intro"]')
576
+ ).toBeVisible();
577
+ }
578
+ async function ko(e) {
579
+ const t = "keyboard" in e ? e : e.page();
580
+ await Me(e), await t.getByRole("button", { name: "un check all" }).click(), await t.locator('[data-testid="data-grid-settings-intro"]').click(), await T(
581
+ t.locator('[data-testid="data-grid-settings-intro"]')
582
+ ).toBeHidden();
583
+ }
584
+ function Ro(e, t) {
585
+ return t === "table" ? J(e) : e.locator(
586
+ t === "cards" ? '[data-testid="data-grid-card"]' : '[data-testid="list-row"]'
587
+ );
588
+ }
589
+ const De = "User avatar";
590
+ async function Eo(e) {
591
+ const {
592
+ page: t,
593
+ moduleTitle: o,
594
+ accountButtonName: a = De
595
+ } = e;
596
+ await t.getByRole("button", { name: a }).click();
597
+ const i = t.getByRole("menuitem", { name: o, exact: !0 });
598
+ await T(i).toBeVisible(), await i.click();
599
+ }
600
+ const Le = "N_D:[appbar.tooltip_toogle_menu]";
601
+ async function So(e, t) {
602
+ await e.getByRole("button", { name: Le }).click(), await e.getByRole("menuitem", { name: t, exact: !0 }).click();
603
+ }
604
+ const Oe = '[role="anchored-button"]', Ce = 100, $ = 15e3;
605
+ function Ie(e, t, o) {
606
+ const a = e.getByRole("menuitem", { name: t, exact: o }).first(), i = o ? e.getByRole("menuitem", { name: t }).first() : a, r = e.getByText(t, { exact: o }).first();
607
+ return o ? [a, i, r] : [a, r];
608
+ }
609
+ async function V(e, t, o, a) {
610
+ const i = Date.now(), r = Ie(e, t, o);
611
+ for (; Date.now() - i < a; ) {
612
+ for (const s of r)
613
+ try {
614
+ if (await s.isVisible())
615
+ return s;
616
+ } catch {
617
+ }
618
+ await e.waitForTimeout(Ce);
619
+ }
620
+ return null;
621
+ }
622
+ async function Fe(e, t, o, a) {
623
+ const i = await V(
624
+ e,
625
+ t,
626
+ o,
627
+ $
628
+ );
629
+ if (i)
630
+ return {
631
+ moduleMenuItem: i,
632
+ toggleUsed: !1
633
+ };
634
+ const r = e.locator(a), s = await r.count();
635
+ s > 0 && (await T(r).toBeVisible(), await r.click());
636
+ const n = await V(
637
+ e,
638
+ t,
639
+ o,
640
+ $
641
+ );
642
+ if (!n)
643
+ throw new Error(`Expected the host sidebar module "${t}" to become visible.`);
644
+ return {
645
+ moduleMenuItem: n,
646
+ toggleUsed: s > 0
647
+ };
648
+ }
649
+ async function He(e) {
650
+ const {
651
+ page: t,
652
+ moduleTitle: o,
653
+ exact: a = !0,
654
+ toggleSelector: i = Oe,
655
+ waitForModuleOpen: r,
656
+ maxClickAttempts: s = r ? 2 : 1
657
+ } = e, n = performance.now(), l = performance.now(), { moduleMenuItem: p, toggleUsed: y } = await Fe(
658
+ t,
659
+ o,
660
+ a,
661
+ i
662
+ );
663
+ let f = 0, m = null;
664
+ for (let d = 1; d <= s; d += 1) {
665
+ if (await T(p).toBeVisible(), await p.click({
666
+ force: y || d > 1,
667
+ timeout: 1e3
668
+ }), d === 1 && (f = performance.now() - l), !r)
669
+ return {
670
+ clickAttempts: d,
671
+ directClickMs: f,
672
+ toggleUsed: y,
673
+ totalMs: performance.now() - n
674
+ };
675
+ try {
676
+ return await r(t, d), {
677
+ clickAttempts: d,
678
+ directClickMs: f,
679
+ toggleUsed: y,
680
+ totalMs: performance.now() - n
681
+ };
682
+ } catch (u) {
683
+ m = u;
684
+ }
685
+ }
686
+ throw m instanceof Error ? m : new Error(`Expected the host sidebar module "${o}" to open after ${s} click attempt(s).`);
687
+ }
688
+ async function Be(e) {
689
+ return He(e);
690
+ }
691
+ async function Ue(e) {
692
+ const { page: t, count: o = 0 } = e;
693
+ await t.route("**/alarms/count**", async (a) => {
694
+ if (a.request().method() !== "GET") {
695
+ await a.fallback();
696
+ return;
697
+ }
698
+ await a.fulfill({
699
+ status: 200,
700
+ contentType: "application/json",
701
+ body: JSON.stringify({
702
+ data: {
703
+ count: o
704
+ }
705
+ })
706
+ });
707
+ });
708
+ }
709
+ async function xe(e) {
710
+ const { page: t, areas: o = [K()] } = e;
711
+ await t.route("**/api/v1/**/areas", async (a) => {
712
+ if (a.request().method() !== "GET") {
713
+ await a.fallback();
714
+ return;
715
+ }
716
+ await a.fulfill({
717
+ status: 200,
718
+ contentType: "application/json",
719
+ body: JSON.stringify({ data: o })
720
+ });
721
+ });
722
+ }
723
+ async function Ne(e) {
724
+ const { page: t, session: o, status: a = 200, delayMs: i = 0 } = e, r = de(o);
725
+ await t.route("**/api/v1/**/auth/login**", async (s) => {
726
+ if (s.request().method() !== "GET") {
727
+ await s.fallback();
728
+ return;
729
+ }
730
+ i > 0 && await new Promise((n) => setTimeout(n, i)), await s.fulfill({
731
+ status: a,
732
+ contentType: "application/json",
733
+ body: JSON.stringify(r)
734
+ });
735
+ });
736
+ }
737
+ function q(e) {
738
+ return `${e.container_id}::${e.id}`;
739
+ }
740
+ function Ge(e) {
741
+ const o = new URL(e).pathname.split("/cookies/")[1];
742
+ if (!o)
743
+ return null;
744
+ const [a, i] = o.split("/");
745
+ return !a || !i ? null : { containerId: a, cookieId: i };
746
+ }
747
+ async function je(e) {
748
+ const { page: t, cookies: o = [pe()] } = e, a = new Map(
749
+ o.map((i) => [q(i), { ...i }])
750
+ );
751
+ await t.route("**/api/v1/**/cookies**", async (i) => {
752
+ const r = i.request().method();
753
+ if (r === "GET") {
754
+ await i.fulfill({
755
+ status: 200,
756
+ contentType: "application/json",
757
+ body: JSON.stringify({ data: Array.from(a.values()) })
758
+ });
759
+ return;
760
+ }
761
+ if (r === "PUT" || r === "POST" || r === "PATCH") {
762
+ const s = Ge(i.request().url()), n = i.request().postDataJSON();
763
+ s && typeof n?.value == "string" && a.set(
764
+ q({
765
+ container_id: s.containerId,
766
+ id: s.cookieId
767
+ }),
768
+ {
769
+ container_id: s.containerId,
770
+ id: s.cookieId,
771
+ value: n.value
772
+ }
773
+ ), await i.fulfill({
774
+ status: 200,
775
+ contentType: "application/json",
776
+ body: JSON.stringify({ data: {} })
777
+ });
778
+ return;
779
+ }
780
+ if (r === "DELETE") {
781
+ await i.fulfill({
782
+ status: 200,
783
+ contentType: "application/json",
784
+ body: JSON.stringify({ data: {} })
785
+ });
786
+ return;
787
+ }
788
+ await i.fallback();
789
+ });
790
+ }
791
+ async function ee(e) {
792
+ const { page: t, locale: o } = e, a = {
793
+ data: ye(o)
794
+ };
795
+ await t.route("**/api/v1/**/na/locales", async (i) => {
796
+ if (i.request().method() !== "POST") {
797
+ await i.fallback();
798
+ return;
799
+ }
800
+ await i.fulfill({
801
+ status: 200,
802
+ contentType: "application/json",
803
+ body: JSON.stringify(a)
804
+ });
805
+ });
806
+ }
807
+ const $e = "1";
808
+ async function Ve(e) {
809
+ const { page: t, menuData: o = [], accountMenuData: a } = e;
810
+ await t.route("**/api/v1/**/menus**", async (i) => {
811
+ const r = i.request();
812
+ if (r.method() !== "GET") {
813
+ await i.fallback();
814
+ return;
815
+ }
816
+ const s = new URL(r.url()).searchParams.get("position"), n = a !== void 0 && s === $e;
817
+ await i.fulfill({
818
+ status: 200,
819
+ contentType: "application/json",
820
+ body: JSON.stringify({ data: n ? a : o })
821
+ });
822
+ });
823
+ }
824
+ async function F(e) {
825
+ const { page: t, moduleId: o, moduleDictionary: a, isAuth: i = !1 } = e, r = C({
826
+ data: a?.data,
827
+ sections: Object.fromEntries(
828
+ Object.entries(a ?? {}).filter(([n]) => n !== "data")
829
+ )
830
+ }), s = i ? "dictionaries" : "na/dictionaries";
831
+ await t.route(`**/api/v1/**/${s}/${o}**`, async (n) => {
832
+ if (n.request().method() !== "GET") {
833
+ await n.fallback();
834
+ return;
835
+ }
836
+ await n.fulfill({
837
+ status: 200,
838
+ contentType: "application/json",
839
+ body: JSON.stringify(r)
840
+ });
841
+ });
842
+ }
843
+ async function qe(e) {
844
+ const { page: t, userPreferences: o, status: a = 200, delayMs: i = 0 } = e, r = {
845
+ data: be(o)
846
+ };
847
+ await t.route("**/api/v1/**/users/me/preferences**", async (s) => {
848
+ if (s.request().method() !== "GET") {
849
+ await s.fallback();
850
+ return;
851
+ }
852
+ i > 0 && await new Promise((n) => setTimeout(n, i)), await s.fulfill({
853
+ status: a,
854
+ contentType: "application/json",
855
+ body: JSON.stringify(r)
856
+ });
857
+ });
858
+ }
859
+ const Ye = `
860
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
861
+ <rect width="16" height="16" fill="#10233e" />
862
+ <circle cx="8" cy="8" r="4" fill="#f5f7fa" />
863
+ </svg>`, Ke = Buffer.from(
864
+ "R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",
865
+ "base64"
866
+ );
867
+ function We(e) {
868
+ return [
869
+ e.assetLogoUrl,
870
+ e.assetUserInterfaceLogoUrl,
871
+ e.assetDocumentsLogoUrl,
872
+ e.assetNotificationsLogoUrl,
873
+ e.assetLoginBackgroundUrl,
874
+ e.assetFaviconUrl,
875
+ e.assetLogoMobileUrl
876
+ ].filter(Boolean);
877
+ }
878
+ async function te(e) {
879
+ const { page: t, uiConfig: o } = e, a = W(o);
880
+ await Promise.all(
881
+ We(a).map(async (i) => {
882
+ await t.route(`**/api/v1/main/na/${i}`, async (r) => {
883
+ const s = i.endsWith(".svg");
884
+ await r.fulfill({
885
+ status: 200,
886
+ contentType: s ? "image/svg+xml" : "image/gif",
887
+ body: s ? Ye : Ke
888
+ });
889
+ });
890
+ })
891
+ );
892
+ }
893
+ async function oe(e) {
894
+ const { page: t, uiConfig: o, status: a = 200, delayMs: i = 0, responseGate: r } = e, s = "**/api/v1/main/na/ui-config/**", n = {
895
+ data: W(o)
896
+ };
897
+ await t.unroute(s), await t.route(s, async (l) => {
898
+ if (l.request().method() !== "GET") {
899
+ await l.fallback();
900
+ return;
901
+ }
902
+ r && await r, i > 0 && await new Promise((p) => setTimeout(p, i)), await l.fulfill({
903
+ status: a,
904
+ contentType: "application/json",
905
+ body: JSON.stringify(a >= 400 ? { error: { code: a, message: "UI config error" } } : n)
906
+ });
907
+ });
908
+ }
909
+ async function ze(e) {
910
+ const {
911
+ page: t,
912
+ moduleId: o,
913
+ accountMenuData: a,
914
+ areas: i,
915
+ cookies: r,
916
+ locale: s,
917
+ menuData: n,
918
+ moduleDictionary: l,
919
+ session: p,
920
+ uiConfig: y,
921
+ uiConfigRouteOptions: f,
922
+ userPreferences: m
923
+ } = e;
924
+ await oe({
925
+ page: t,
926
+ uiConfig: y,
927
+ ...f
928
+ }), await te({
929
+ page: t,
930
+ uiConfig: y
931
+ }), await Ne({
932
+ page: t,
933
+ session: p
934
+ }), await ee({
935
+ page: t,
936
+ locale: s
937
+ }), await qe({
938
+ page: t,
939
+ userPreferences: m
940
+ }), await F({
941
+ page: t,
942
+ moduleId: o,
943
+ moduleDictionary: l,
944
+ isAuth: !0
945
+ }), await xe({
946
+ page: t,
947
+ areas: i
948
+ }), await je({
949
+ page: t,
950
+ cookies: r
951
+ }), await Ve({
952
+ page: t,
953
+ menuData: n,
954
+ ...a === void 0 ? {} : { accountMenuData: a }
955
+ });
956
+ }
957
+ const Je = "platform", Xe = C({
958
+ data: {
959
+ module_name: "Platform Shell",
960
+ module_description: "Authenticated host shell baseline",
961
+ label_db_type_main: "Main DB",
962
+ label_db_type_admin: "Admin DB",
963
+ label_db_type_operative: "Operative DB"
964
+ }
965
+ });
966
+ async function Qe(e) {
967
+ const {
968
+ page: t,
969
+ moduleId: o,
970
+ title: a,
971
+ debugPort: i,
972
+ iconUrl: r,
973
+ dynamicParams: s,
974
+ uiConfig: n,
975
+ locale: l,
976
+ session: p,
977
+ userPreferences: y,
978
+ moduleDictionary: f,
979
+ areas: m,
980
+ cookies: d,
981
+ hostModuleId: u = Je,
982
+ alarmCount: R,
983
+ menuPosition: A = "sidebar"
984
+ } = e, c = le({
985
+ moduleId: o,
986
+ title: a,
987
+ debugPort: i,
988
+ ...r ? { iconUrl: r } : {},
989
+ ...s ? { dynamicParams: s } : {}
990
+ }), b = c.flatMap((w) => w.children ?? []), E = A === "account";
991
+ await ze({
992
+ page: t,
993
+ moduleId: u,
994
+ uiConfig: n,
995
+ locale: l,
996
+ session: p,
997
+ userPreferences: y,
998
+ moduleDictionary: f ?? Xe,
999
+ areas: m,
1000
+ cookies: d,
1001
+ menuData: E ? [] : c,
1002
+ ...E ? { accountMenuData: b } : {}
1003
+ }), await Ue({
1004
+ page: t,
1005
+ ...R === void 0 ? {} : { count: R }
1006
+ });
1007
+ }
1008
+ const Ze = "hostRuntimeDummyPresetId", et = "hostRuntimeMode";
1009
+ function tt(e, t) {
1010
+ const o = typeof t?.dummyPresetId == "string" ? t.dummyPresetId.trim() : "";
1011
+ if (!o)
1012
+ return e;
1013
+ const a = new URL(e, "https://host-preview.local");
1014
+ return o && (a.searchParams.set(et, "dummy"), a.searchParams.set(Ze, o)), `${a.pathname}${a.search}${a.hash}`;
1015
+ }
1016
+ const ot = 6e4, at = 2e3, it = 250;
1017
+ async function rt(e) {
1018
+ const { debugPort: t, page: o } = e, a = `https://localhost:${t}/`, i = Date.now();
1019
+ let r = null;
1020
+ for (; Date.now() - i < ot; ) {
1021
+ try {
1022
+ const s = await o.request.get(a, {
1023
+ failOnStatusCode: !1,
1024
+ timeout: at
1025
+ });
1026
+ if (s.status() < 500)
1027
+ return;
1028
+ r = new Error(
1029
+ `Preview debug port ${t} responded with status ${s.status()}.`
1030
+ );
1031
+ } catch (s) {
1032
+ r = s;
1033
+ }
1034
+ await o.waitForTimeout(it);
1035
+ }
1036
+ throw new Error(
1037
+ `Timed out waiting for preview debug port ${t} at ${a} to become ready.${r instanceof Error ? ` Last error: ${r.message}` : ""}`
1038
+ );
1039
+ }
1040
+ async function To(e) {
1041
+ const {
1042
+ page: t,
1043
+ moduleId: o,
1044
+ title: a,
1045
+ debugPort: i,
1046
+ iconUrl: r,
1047
+ dynamicParams: s,
1048
+ initialPath: n = "/",
1049
+ exact: l,
1050
+ toggleSelector: p,
1051
+ installPostMountRoutes: y,
1052
+ waitForModuleOpen: f,
1053
+ maxSidebarClickAttempts: m,
1054
+ skipDebugPortReadyWait: d = !1,
1055
+ ...u
1056
+ } = e, R = tt(n, s), A = performance.now(), c = performance.now();
1057
+ await Qe({
1058
+ page: t,
1059
+ moduleId: o,
1060
+ title: a,
1061
+ debugPort: i,
1062
+ ...r ? { iconUrl: r } : {},
1063
+ ...s ? { dynamicParams: s } : {},
1064
+ ...u
1065
+ });
1066
+ const b = performance.now() - c, E = performance.now();
1067
+ await y?.(t);
1068
+ const w = performance.now() - E;
1069
+ d || await rt({ debugPort: i, page: t });
1070
+ const D = performance.now();
1071
+ await t.goto(R);
1072
+ const L = performance.now() - D, O = await Be({
1073
+ page: t,
1074
+ moduleTitle: a,
1075
+ exact: l,
1076
+ maxClickAttempts: m,
1077
+ toggleSelector: p,
1078
+ waitForModuleOpen: f
1079
+ });
1080
+ return {
1081
+ gotoMs: L,
1082
+ installBootstrapMs: b,
1083
+ installPostMountRoutesMs: w,
1084
+ sidebarClickAttempts: O.clickAttempts,
1085
+ sidebarOpenMs: O.totalMs,
1086
+ sidebarToggleUsed: O.toggleUsed,
1087
+ totalMs: performance.now() - A
1088
+ };
1089
+ }
1090
+ function st(e) {
1091
+ return Object.freeze({
1092
+ ...e,
1093
+ carrier: "symbol",
1094
+ key: `Symbol.for('${e.symbolId}')`,
1095
+ symbol: Symbol.for(e.symbolId)
1096
+ });
1097
+ }
1098
+ function g(e) {
1099
+ return Object.freeze({
1100
+ ...e,
1101
+ carrier: "globalThis",
1102
+ key: `globalThis.${e.property}`
1103
+ });
1104
+ }
1105
+ function H(e) {
1106
+ return Object.freeze({
1107
+ ...e,
1108
+ carrier: "window",
1109
+ key: `window.${e.property}`
1110
+ });
1111
+ }
1112
+ const nt = st({
1113
+ active: !0,
1114
+ cleanup: "none",
1115
+ codeRefs: [
1116
+ "packages/layouts/src/utils/mfRuntimeErrors.ts"
1117
+ ],
1118
+ docsPath: "docs/frontend/observability/FRONTEND_OBSERVABILITY_ARCHITECTURE.md",
1119
+ id: "layouts.mf-runtime-errors",
1120
+ introducedOn: "2026-05-06",
1121
+ kind: "symbol-bridge",
1122
+ lifecycle: "production",
1123
+ namingStatus: "canonical",
1124
+ objective: "Preserve MF runtime-boundary crash forwarding even when the host shell and the MF ship different bundled copies of @m4l/layouts.",
1125
+ ownerProject: "@m4l/layouts",
1126
+ purpose: "Share one host-owned MF runtime error bridge across separately built bundles.",
1127
+ stability: "internal",
1128
+ symbolId: "m4l.layouts.mfRuntimeErrors"
1129
+ }), ct = g({
1130
+ active: !0,
1131
+ cleanup: "none",
1132
+ codeRefs: [
1133
+ "packages/realtime-runtime/src/engine/runtimeRegistry.ts"
1134
+ ],
1135
+ docsPath: "packages/realtime-runtime/README.md",
1136
+ id: "realtime.runtime-registry",
1137
+ introducedOn: "2026-04-27",
1138
+ kind: "global-registry",
1139
+ lifecycle: "production",
1140
+ namingStatus: "canonical",
1141
+ objective: "Reuse one host-owned realtime runtime instance per runtime key instead of re-creating overlapping transports and stores.",
1142
+ ownerProject: "@m4l/realtime-runtime",
1143
+ property: "__M4L_REALTIME_RUNTIMES__",
1144
+ purpose: "Store the shared realtime runtime registry for the current browser session.",
1145
+ stability: "internal"
1146
+ }), ae = g({
1147
+ active: !0,
1148
+ cleanup: "none",
1149
+ codeRefs: [
1150
+ "packages/gclick-realtime/src/shared/performanceMetrics.ts",
1151
+ "packages/gclick-realtime/src/web/diagnostics/performanceMetrics.ts",
1152
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/App/features/map-shell/observability/realtimePerformanceDebug.ts"
1153
+ ],
1154
+ docsPath: "packages/gclick/README.md",
1155
+ id: "realtime.performance-debug",
1156
+ introducedOn: "2026-05-06",
1157
+ kind: "global-registry",
1158
+ lifecycle: "preview-dev",
1159
+ namingStatus: "canonical",
1160
+ objective: "Expose one browser-readable performance bag so realtime rendering, queue pressure, and interpolation diagnostics can be inspected without instrumenting every consumer separately.",
1161
+ ownerProject: "@m4l/gclick-realtime",
1162
+ property: "__M4L_REALTIME_PERFORMANCE__",
1163
+ purpose: "Publish shared realtime performance counters and motion metrics for browser inspection.",
1164
+ stability: "internal"
1165
+ }), lt = g({
1166
+ active: !0,
1167
+ cleanup: "none",
1168
+ codeRefs: [
1169
+ "apps/gclick/gclick_host/src/observability/host/realtime.ts",
1170
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/app_entries/ByIsolation/observability/realtime.ts"
1171
+ ],
1172
+ docsPath: "packages/realtime-runtime/README.md",
1173
+ id: "realtime.transport-debug",
1174
+ introducedOn: "2026-08-20",
1175
+ kind: "global-registry",
1176
+ lifecycle: "production",
1177
+ namingStatus: "canonical",
1178
+ objective: "Keep a bounded browser-readable Atmosphere lifecycle buffer only while a remote diagnostic policy is active.",
1179
+ ownerProject: "@m4l/gclick-realtime",
1180
+ property: "__M4L_REALTIME_TRANSPORT_DEBUG__",
1181
+ purpose: "Expose recent Atmosphere lifecycle breadcrumbs for support debugging in host and isolation browser sessions.",
1182
+ stability: "operator-facing"
1183
+ }), dt = H({
1184
+ active: !0,
1185
+ cleanup: "none",
1186
+ codeRefs: [
1187
+ "apps/gclick/gclick_host/src/observability/dev/smoke.ts",
1188
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/app_entries/ByIsolation/observability/smoke.ts"
1189
+ ],
1190
+ docsPath: "apps/gclick/gclick_host/README.md",
1191
+ id: "observability.smoke-tools",
1192
+ introducedOn: "2026-05-06",
1193
+ kind: "window-tool",
1194
+ lifecycle: "preview-dev",
1195
+ namingStatus: "canonical",
1196
+ objective: "Give browser operators one predictable console namespace that can emit synthetic telemetry and, when needed in preview or local diagnostics, request one intentional host-loaded MF boundary crash.",
1197
+ ownerProject: "@m4l/gclick_host",
1198
+ property: "__m4lObservabilitySmoke",
1199
+ purpose: "Expose browser-console observability smoke helpers for host, preview, and isolation validation.",
1200
+ stability: "operator-facing"
1201
+ }), ut = H({
1202
+ active: !0,
1203
+ cleanup: "on-unmount",
1204
+ codeRefs: [
1205
+ "apps/gclick/gclick_host/src/layouts/PlatformLayout/dev/installHostRealtimeAlarmSmokeTools.ts"
1206
+ ],
1207
+ docsPath: "apps/gclick/gclick_host/README.md",
1208
+ id: "host.alarm-smoke-tools",
1209
+ introducedOn: "2026-06-17",
1210
+ kind: "window-tool",
1211
+ lifecycle: "preview-dev",
1212
+ namingStatus: "canonical",
1213
+ objective: "Provide one operator-facing bridge for emitting synthetic rt_alarms traffic while keeping the cleanup contract tied to the host shell lifecycle.",
1214
+ ownerProject: "@m4l/gclick_host",
1215
+ property: "__m4lHostAlarmSmoke",
1216
+ purpose: "Publish host alarm smoke helpers for manual badge and websocket validation.",
1217
+ stability: "operator-facing"
1218
+ }), pt = g({
1219
+ active: !0,
1220
+ cleanup: "none",
1221
+ codeRefs: [
1222
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/App/features/map-surface/clusterPolicy/DeviceClusterPolicyController/helpers.ts"
1223
+ ],
1224
+ id: "gps-devices.cluster-policy-debug",
1225
+ introducedOn: "2026-05-04",
1226
+ kind: "global-registry",
1227
+ lifecycle: "preview-dev",
1228
+ namingStatus: "canonical",
1229
+ objective: "Explain the effective clustering mode from the live browser session without reverse-engineering the viewport heuristics after the fact.",
1230
+ ownerProject: "@m4l/operative_my_gps_devices",
1231
+ property: "__M4L_GPS_DEVICES_CLUSTER_POLICY__",
1232
+ purpose: "Publish the latest device-cluster policy snapshot for browser debugging and probes.",
1233
+ stability: "internal"
1234
+ }), mt = g({
1235
+ active: !0,
1236
+ cleanup: "manual",
1237
+ codeRefs: [
1238
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/App/features/map-surface/MapContent/helpers/viewportTrace.ts"
1239
+ ],
1240
+ docsPath: "apps/gclick/mfs/operative/operative_my_gps_devices/docs/07-observability-and-debugging.md",
1241
+ id: "gps-devices.viewport-trace",
1242
+ introducedOn: "2026-05-20",
1243
+ kind: "global-registry",
1244
+ lifecycle: "preview-dev",
1245
+ namingStatus: "canonical",
1246
+ objective: "Keep one bounded browser-readable trace buffer so viewport follow decisions can be inspected after the interaction that produced them.",
1247
+ ownerProject: "@m4l/operative_my_gps_devices",
1248
+ property: "__M4L_GPS_DEVICES_VIEWPORT_TRACE__",
1249
+ purpose: "Store the current viewport trace buffer for manual debugging and browser probes.",
1250
+ stability: "internal"
1251
+ }), gt = g({
1252
+ active: !0,
1253
+ cleanup: "manual",
1254
+ codeRefs: [
1255
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/App/features/map-surface/MapContent/helpers/viewportTrace.ts"
1256
+ ],
1257
+ docsPath: "apps/gclick/mfs/operative/operative_my_gps_devices/docs/07-observability-and-debugging.md",
1258
+ id: "gps-devices.viewport-trace-enabled",
1259
+ introducedOn: "2026-05-20",
1260
+ kind: "global-registry",
1261
+ lifecycle: "preview-dev",
1262
+ namingStatus: "canonical",
1263
+ objective: "Allow narrow browser sessions to opt into viewport-trace publication without paying the cost or noise in every runtime by default.",
1264
+ ownerProject: "@m4l/operative_my_gps_devices",
1265
+ property: "__M4L_GPS_DEVICES_VIEWPORT_TRACE_ENABLED__",
1266
+ purpose: "Toggle viewport trace publication for the current browser session.",
1267
+ stability: "internal"
1268
+ }), yt = g({
1269
+ active: !0,
1270
+ cleanup: "manual",
1271
+ codeRefs: [
1272
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/App/features/device-panel/hydration/testDriver.ts"
1273
+ ],
1274
+ id: "gps-devices.device-panel-hydration-driver",
1275
+ introducedOn: "2026-05-28",
1276
+ kind: "test-driver",
1277
+ lifecycle: "test-only",
1278
+ namingStatus: "canonical",
1279
+ objective: "Let deterministic browser contracts force hydration edge cases without mutating the production store or backend contracts.",
1280
+ ownerProject: "@m4l/operative_my_gps_devices",
1281
+ property: "__M4L_TEST_DEVICE_PANEL_HYDRATION_DRIVER__",
1282
+ purpose: "Expose the device-panel hydration test driver for deterministic browser tests.",
1283
+ stability: "test-only"
1284
+ }), ft = g({
1285
+ active: !0,
1286
+ cleanup: "manual",
1287
+ codeRefs: [
1288
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/App/features/markers/DeviceMarker/helpers/browserVisibilityLifecycle.helpers.ts"
1289
+ ],
1290
+ id: "gps-devices.document-visibility-driver",
1291
+ introducedOn: "2026-04-29",
1292
+ kind: "test-driver",
1293
+ lifecycle: "test-only",
1294
+ namingStatus: "canonical",
1295
+ objective: "Drive hidden-tab resume behavior deterministically in browser probes where headless Chromium cannot guarantee the real background-tab lifecycle.",
1296
+ ownerProject: "@m4l/operative_my_gps_devices",
1297
+ property: "__M4L_TEST_DOCUMENT_VISIBILITY_DRIVER__",
1298
+ purpose: "Expose the document-visibility test driver for deterministic lifecycle tests.",
1299
+ stability: "test-only"
1300
+ }), bt = g({
1301
+ active: !0,
1302
+ cleanup: "manual",
1303
+ codeRefs: [
1304
+ "apps/gclick/mfs/operative/operative_my_gps_devices-e2e/src/realtimeProbe/hiddenTabResume/collectHiddenTabResumeProbeReport.ts"
1305
+ ],
1306
+ docsPath: "apps/gclick/mfs/operative/operative_my_gps_devices-e2e/README.md",
1307
+ id: "gps-devices.hidden-tab-visibility-shim",
1308
+ introducedOn: "2026-05-01",
1309
+ kind: "test-driver",
1310
+ lifecycle: "test-only",
1311
+ namingStatus: "canonical",
1312
+ objective: "Wrap the product-owned document visibility driver behind one stable probe-local shim so hidden-tab resume probes can drive lifecycle transitions without duplicating browser-specific logic in every step.",
1313
+ ownerProject: "@m4l/operative_my_gps_devices-e2e",
1314
+ property: "__M4L_TEST_VISIBILITY_SHIM__",
1315
+ purpose: "Expose the hidden-tab resume visibility shim for deterministic Playwright probes.",
1316
+ stability: "test-only"
1317
+ }), wt = g({
1318
+ active: !0,
1319
+ cleanup: "manual",
1320
+ codeRefs: [
1321
+ "apps/gclick/mfs/operative/operative_my_gps_devices-e2e/src/realtimeProbe/hiddenTabResume/collectHiddenTabResumeProbeReport.ts"
1322
+ ],
1323
+ docsPath: "apps/gclick/mfs/operative/operative_my_gps_devices-e2e/README.md",
1324
+ id: "gps-devices.hidden-tab-dummy-playback-shim",
1325
+ introducedOn: "2026-05-01",
1326
+ kind: "test-driver",
1327
+ lifecycle: "test-only",
1328
+ namingStatus: "canonical",
1329
+ objective: "Wrap the shared dummy playback driver behind one probe-local seam so hidden-tab resume contracts can pause and resume emissions without coupling every probe step to the underlying runtime implementation.",
1330
+ ownerProject: "@m4l/operative_my_gps_devices-e2e",
1331
+ property: "__M4L_TEST_DUMMY_PLAYBACK_SHIM__",
1332
+ purpose: "Expose the hidden-tab resume dummy playback shim for deterministic Playwright probes.",
1333
+ stability: "test-only"
1334
+ }), ht = g({
1335
+ active: !0,
1336
+ cleanup: "manual",
1337
+ codeRefs: [
1338
+ "apps/gclick/mfs/operative/operative_my_gps_devices-e2e/src/realtimeProbe/nonSelectedViewportGate/runNonSelectedViewportGateProbe.ts"
1339
+ ],
1340
+ docsPath: "apps/gclick/mfs/operative/operative_my_gps_devices-e2e/README.md",
1341
+ id: "gps-devices.non-selected-viewport-gate-zoom-settle",
1342
+ introducedOn: "2026-05-01",
1343
+ kind: "global-registry",
1344
+ lifecycle: "test-only",
1345
+ namingStatus: "canonical",
1346
+ objective: "Persist the short-lived zoom-settlement clock across repeated browser polling calls so the deep viewport-gate probe can prove a stable ring transition after standalone bootstrap normalization.",
1347
+ ownerProject: "@m4l/operative_my_gps_devices-e2e",
1348
+ property: "__M4L_NON_SELECTED_VIEWPORT_GATE_ZOOM_SETTLE__",
1349
+ purpose: "Store the non-selected viewport-gate probe zoom settlement state for the current browser session.",
1350
+ stability: "test-only"
1351
+ }), vt = g({
1352
+ active: !0,
1353
+ cleanup: "manual",
1354
+ codeRefs: [
1355
+ "apps/gclick/mfs/operative/operative_my_gps_devices-e2e/src/realtimeProbe/sparseRotation/collectSparseRotationProbeReport.ts"
1356
+ ],
1357
+ docsPath: "apps/gclick/mfs/operative/operative_my_gps_devices-e2e/README.md",
1358
+ id: "gps-devices.sparse-rotation-stationary-wait",
1359
+ introducedOn: "2026-05-16",
1360
+ kind: "global-registry",
1361
+ lifecycle: "test-only",
1362
+ namingStatus: "canonical",
1363
+ objective: "Persist the stationary-window sampling state across browser polling cycles so the sparse-rotation probe can detect the deterministic pause window without leaking that bookkeeping into product runtime code.",
1364
+ ownerProject: "@m4l/operative_my_gps_devices-e2e",
1365
+ property: "__M4L_SPARSE_ROTATION_STATIONARY_WAIT__",
1366
+ purpose: "Store the sparse-rotation stationary wait state for the current browser session.",
1367
+ stability: "test-only"
1368
+ }), _t = g({
1369
+ active: !0,
1370
+ cleanup: "manual",
1371
+ codeRefs: [
1372
+ "packages/gclick-realtime/src/dummy/runtime/dummy.ts"
1373
+ ],
1374
+ id: "gclick-realtime.dummy-playback-driver",
1375
+ introducedOn: "2026-02-19",
1376
+ kind: "test-driver",
1377
+ lifecycle: "test-only",
1378
+ namingStatus: "canonical",
1379
+ objective: "Provide a deterministic browser-global seam for pausing and resuming dummy playback while leaving the runtime implementation itself bundle-local.",
1380
+ ownerProject: "@m4l/gclick-realtime",
1381
+ property: "__M4L_TEST_DUMMY_PLAYBACK_DRIVER__",
1382
+ purpose: "Expose the dummy realtime playback driver for deterministic browser probes and tests.",
1383
+ stability: "test-only"
1384
+ }), kt = H({
1385
+ active: !0,
1386
+ cleanup: "none",
1387
+ codeRefs: [
1388
+ "packages/gclick/src/components/maps/components/GpsMap/subcomponents/TileLayers/subcomponents/TileLayerGoogle/googleMapsLoader.ts"
1389
+ ],
1390
+ id: "gclick.google-maps-loader-state",
1391
+ introducedOn: "2026-05-15",
1392
+ kind: "global-registry",
1393
+ lifecycle: "production",
1394
+ namingException: "Legacy Google Maps loader state predates the canonical global-registry naming shape and still uses one lower-camel window key for backwards compatibility.",
1395
+ namingStatus: "legacy-exception",
1396
+ objective: "Coordinate one in-page Google Maps JavaScript loader promise across bundles so repeated map mounts do not race or reload the SDK.",
1397
+ ownerProject: "@m4l/gclick",
1398
+ property: "__m4lGoogleMapsLoaderState__",
1399
+ purpose: "Store the shared Google Maps loader state for the current browser window.",
1400
+ stability: "internal"
1401
+ }), B = [
1402
+ nt,
1403
+ ct,
1404
+ ae,
1405
+ lt,
1406
+ dt,
1407
+ ut,
1408
+ pt,
1409
+ mt,
1410
+ gt,
1411
+ yt,
1412
+ ft,
1413
+ bt,
1414
+ wt,
1415
+ ht,
1416
+ vt,
1417
+ _t,
1418
+ kt
1419
+ ];
1420
+ function Rt(e) {
1421
+ const t = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Set();
1422
+ for (const a of e) {
1423
+ if (t.has(a.id))
1424
+ throw new Error(`Duplicate browser runtime handle id "${a.id}".`);
1425
+ if (t.add(a.id), o.has(a.key))
1426
+ throw new Error(`Duplicate browser runtime handle key "${a.key}".`);
1427
+ o.add(a.key);
1428
+ }
1429
+ }
1430
+ Rt(B);
1431
+ Object.freeze(
1432
+ Object.fromEntries(
1433
+ B.map((e) => [e.id, e])
1434
+ )
1435
+ );
1436
+ Object.freeze(
1437
+ Object.fromEntries(
1438
+ B.map((e) => [e.key, e])
1439
+ )
1440
+ );
1441
+ const v = "gclick-frontend-diagnostic-policies", _ = [
1442
+ "moduleDefault",
1443
+ "accountOverride"
1444
+ ], S = {
1445
+ app: "gclick_host",
1446
+ runtime: "web",
1447
+ surface: "host"
1448
+ }, Et = {
1449
+ diagnosticSmoke: {
1450
+ active: !0,
1451
+ codePaths: [
1452
+ "apps/gclick/gclick_host/src/observability/dev/smoke.ts"
1453
+ ],
1454
+ controlPlane: "remote-policy",
1455
+ createdAt: "2026-06-05",
1456
+ id: "gclickHostDiagnosticSmoke",
1457
+ key: "gclick_host.observability.diagnostic-smoke",
1458
+ notes: [
1459
+ "This family is primarily exercised through the browser smoke helper and support overrides."
1460
+ ],
1461
+ owner: S,
1462
+ purpose: "Provide one deterministic browser-log smoke signal before support investigates a live issue.",
1463
+ summary: "Manual host smoke proof for browser diagnostic-log delivery.",
1464
+ remoteRule: {
1465
+ featureKey: v,
1466
+ payloadKey: "gclick_host.observability.diagnostic-smoke",
1467
+ provider: "growthbook",
1468
+ supportedLayers: _
1469
+ }
1470
+ },
1471
+ realtimeConnectionRecovery: {
1472
+ active: !0,
1473
+ codePaths: [
1474
+ "apps/gclick/gclick_host/src/observability/host/realtime.ts"
1475
+ ],
1476
+ controlPlane: "remote-policy",
1477
+ createdAt: "2026-06-05",
1478
+ id: "gclickHostRealtimeConnectionRecovery",
1479
+ key: "gclick_host.realtime.connection-recovery",
1480
+ owner: S,
1481
+ purpose: "Capture host websocket transport recovery evidence without waiting for a broader outage investigation.",
1482
+ summary: "Host realtime reconnect recovery breadcrumbs.",
1483
+ remoteRule: {
1484
+ featureKey: v,
1485
+ payloadKey: "gclick_host.realtime.connection-recovery",
1486
+ provider: "growthbook",
1487
+ supportedLayers: _
1488
+ }
1489
+ },
1490
+ realtimeTransportLifecycle: {
1491
+ active: !0,
1492
+ codePaths: [
1493
+ "apps/gclick/gclick_host/src/observability/host/realtime.ts",
1494
+ "apps/gclick/gclick_host/src/layouts/PlatformLayout/helpers/createAtmosphereHostRealtimeRuntime.ts",
1495
+ "packages/realtime-runtime/src/transport/atmosphere/web/SourceDataAtmosphereWeb.ts"
1496
+ ],
1497
+ controlPlane: "remote-policy",
1498
+ createdAt: "2026-08-20",
1499
+ id: "gclickHostRealtimeTransportLifecycle",
1500
+ key: "gclick_host.realtime.transport-lifecycle",
1501
+ owner: S,
1502
+ purpose: "Capture host Atmosphere lifecycle breadcrumbs during temporary support investigations of reconnect storms and browser sleep recovery.",
1503
+ summary: "Host Atmosphere transport lifecycle breadcrumbs.",
1504
+ remoteRule: {
1505
+ featureKey: v,
1506
+ payloadKey: "gclick_host.realtime.transport-lifecycle",
1507
+ provider: "growthbook",
1508
+ supportedLayers: _
1509
+ }
1510
+ },
1511
+ remoteDiagnosticProviderHealth: {
1512
+ active: !0,
1513
+ codePaths: [
1514
+ "apps/gclick/gclick_host/src/observability/diagnostic/diagnosticFeatureFlags.ts"
1515
+ ],
1516
+ controlPlane: "always-on",
1517
+ createdAt: "2026-06-08",
1518
+ id: "gclickHostRemoteDiagnosticProviderHealth",
1519
+ key: "gclick_host.feature-flags.remote-diagnostic-provider-health",
1520
+ notes: [
1521
+ "This family is intentionally always-on because provider outages are recoverable anomalies, not optional debug breadcrumbs."
1522
+ ],
1523
+ owner: S,
1524
+ purpose: "Report the first failure in a remote diagnostic-provider outage streak even when no support capture is active.",
1525
+ summary: "Host remote diagnostic-provider outage anomaly."
1526
+ },
1527
+ tracesRelayDisabled: {
1528
+ active: !0,
1529
+ codePaths: [
1530
+ "apps/gclick/gclick_host/src/observability/otlp/client.ts",
1531
+ "apps/gclick/gclick_host/src/observability/otlp/relayDiagnostics.ts",
1532
+ "libs/observability/web/src/browserOtlp.ts"
1533
+ ],
1534
+ controlPlane: "always-on",
1535
+ createdAt: "2026-06-16",
1536
+ id: "gclickHostTracesRelayDisabled",
1537
+ key: "gclick_host.observability.traces-relay-disabled",
1538
+ notes: [
1539
+ "This family is intentionally always-on because once the browser traces relay disables itself, trace traffic becomes silent and support needs one surviving breadcrumb in Grafana logs."
1540
+ ],
1541
+ owner: S,
1542
+ purpose: "Report the first permanent browser traces-relay shutdown together with the failure metadata that caused the relay to stop exporting.",
1543
+ summary: "Host browser traces-relay shutdown anomaly."
1544
+ },
1545
+ runtimeBoundaryCrash: {
1546
+ active: !0,
1547
+ codePaths: [
1548
+ "apps/gclick/gclick_host/src/observability/host/runtimeErrors.ts",
1549
+ "packages/layouts/src/components/MFHostApp/MFHostAppErrorBoundary.tsx",
1550
+ "packages/layouts/src/components/MFRuntimeErrorWrapper/MFRuntimeErrorWrapper.tsx",
1551
+ "apps/gclick/gclick_host/src/components/HostShellErrorBoundary/HostShellErrorBoundary.tsx"
1552
+ ],
1553
+ controlPlane: "always-on",
1554
+ createdAt: "2026-06-14",
1555
+ id: "gclickHostRuntimeBoundaryCrash",
1556
+ key: "gclick_host.runtime-errors.boundary-crash",
1557
+ notes: [
1558
+ "This family is intentionally always-on because React boundary crashes are rare fatal degradations that should remain countable in Grafana logs, not only in traces.",
1559
+ "Host-loaded MF wrapper boundaries reuse this family with `runtime.boundary_scope=wrapper` and a stable `runtime.wrapper_id` so support can group contained subtree crashes without a separate policy."
1560
+ ],
1561
+ owner: S,
1562
+ purpose: "Report contained host-shell and host-loaded MF boundary crashes as structured always-on diagnostic logs for dashboarding and alerting.",
1563
+ summary: "Host boundary crash anomaly for host shell and host-loaded MFs."
1564
+ },
1565
+ refreshDebug: {
1566
+ active: !0,
1567
+ codePaths: [
1568
+ "apps/gclick/gclick_host/src/observability/diagnostic/diagnosticFeatureFlags.ts"
1569
+ ],
1570
+ controlPlane: "remote-policy",
1571
+ createdAt: "2026-06-11",
1572
+ id: "gclickHostRefreshDebug",
1573
+ key: "gclick_host.feature-flags.refresh-debug",
1574
+ notes: [
1575
+ "Use this family when support needs to understand why the browser refreshed, queued, or applied one remote diagnostic payload."
1576
+ ],
1577
+ owner: S,
1578
+ purpose: "Expose host-owned GrowthBook refresh breadcrumbs such as bootstrap, context, focus, visibility, poll, and queued refreshes.",
1579
+ summary: "Host remote diagnostic-provider refresh debug breadcrumbs.",
1580
+ remoteRule: {
1581
+ featureKey: v,
1582
+ payloadKey: "gclick_host.feature-flags.refresh-debug",
1583
+ provider: "growthbook",
1584
+ supportedLayers: _
1585
+ }
1586
+ }
1587
+ }, P = {
1588
+ app: "operative_my_gps_devices",
1589
+ moduleId: "operative_my_gps_devices",
1590
+ runtime: "web",
1591
+ surface: "mf"
1592
+ }, St = {
1593
+ deviceSelectionMissingPosition: {
1594
+ active: !0,
1595
+ codePaths: [
1596
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/App/subcomponents/ModuleMap/subcomponents/MapContent/subcomponents/DevicesPanel/subcomponents/DevicesPanelBody/subcomponents/DeviceCard/DeviceCard.tsx"
1597
+ ],
1598
+ controlPlane: "remote-policy",
1599
+ createdAt: "2026-06-05",
1600
+ id: "operativeMyGpsDevicesDeviceSelectionMissingPosition",
1601
+ key: "operative_my_gps_devices.device-selection.missing-position",
1602
+ owner: P,
1603
+ purpose: "Capture the user-visible branch where one selected device has no finite GNSS position and the map must skip focus safely.",
1604
+ summary: "MF selection branch for devices without finite GNSS position.",
1605
+ remoteRule: {
1606
+ featureKey: v,
1607
+ payloadKey: "operative_my_gps_devices.device-selection.missing-position",
1608
+ provider: "growthbook",
1609
+ supportedLayers: _
1610
+ }
1611
+ },
1612
+ motionCapture: {
1613
+ active: !0,
1614
+ codePaths: [
1615
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/App/subcomponents/ModuleMap/subcomponents/MapContent/subcomponents/DeviceMarker/helpers/motionCapture.ts",
1616
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/app_entries/ByIsolation/observability/smoke.ts"
1617
+ ],
1618
+ controlPlane: "remote-policy",
1619
+ createdAt: "2026-06-06",
1620
+ id: "operativeMyGpsDevicesMotionCapture",
1621
+ key: "operative_my_gps_devices.motion.capture",
1622
+ notes: [
1623
+ "The closing session summary is treated as the final record of a policy-authorized capture session, not as a separate always-on anomaly lane."
1624
+ ],
1625
+ owner: P,
1626
+ purpose: "Capture selected-device realtime ingress, motion-segment, and camera-follow evidence for support investigations.",
1627
+ summary: "MF targeted motion-capture diagnostic family.",
1628
+ remoteRule: {
1629
+ featureKey: v,
1630
+ payloadKey: "operative_my_gps_devices.motion.capture",
1631
+ provider: "growthbook",
1632
+ supportedLayers: _
1633
+ }
1634
+ },
1635
+ realtimeTransportLifecycle: {
1636
+ active: !0,
1637
+ codePaths: [
1638
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/app_entries/ByIsolation/helpers/createIsolationHostRuntime.ts",
1639
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/app_entries/ByIsolation/observability/realtime.ts",
1640
+ "packages/realtime-runtime/src/transport/atmosphere/web/SourceDataAtmosphereWeb.ts"
1641
+ ],
1642
+ controlPlane: "remote-policy",
1643
+ createdAt: "2026-08-20",
1644
+ id: "operativeMyGpsDevicesRealtimeTransportLifecycle",
1645
+ key: "operative_my_gps_devices.realtime.transport-lifecycle",
1646
+ owner: P,
1647
+ purpose: "Capture isolation Atmosphere lifecycle breadcrumbs during temporary support investigations of reconnect storms and browser sleep recovery.",
1648
+ summary: "My GPS Devices isolation Atmosphere transport lifecycle breadcrumbs.",
1649
+ remoteRule: {
1650
+ featureKey: v,
1651
+ payloadKey: "operative_my_gps_devices.realtime.transport-lifecycle",
1652
+ provider: "growthbook",
1653
+ supportedLayers: _
1654
+ }
1655
+ },
1656
+ recoverableLeafletRuntime: {
1657
+ active: !0,
1658
+ codePaths: [
1659
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/App/subcomponents/ModuleMap/subcomponents/MapContent/subcomponents/DeviceMarker/helpers/reportLeafletRuntimeError.ts"
1660
+ ],
1661
+ controlPlane: "always-on",
1662
+ createdAt: "2026-06-05",
1663
+ id: "operativeMyGpsDevicesRecoverableLeafletRuntime",
1664
+ key: "operative_my_gps_devices.recoverable.leaflet-runtime",
1665
+ owner: P,
1666
+ purpose: "Expose recovered Leaflet runtime anomalies that should never stay silent even without one active support capture.",
1667
+ summary: "MF always-on recovered Leaflet runtime anomaly."
1668
+ },
1669
+ remoteDiagnosticProviderHealth: {
1670
+ active: !0,
1671
+ codePaths: [
1672
+ "apps/gclick/mfs/operative/operative_my_gps_devices/src/components/app_entries/ByIsolation/observability/diagnosticFeatureFlags.ts"
1673
+ ],
1674
+ controlPlane: "always-on",
1675
+ createdAt: "2026-06-08",
1676
+ id: "operativeMyGpsDevicesRemoteDiagnosticProviderHealth",
1677
+ key: "operative_my_gps_devices.feature-flags.remote-diagnostic-provider-health",
1678
+ owner: P,
1679
+ purpose: "Report isolation remote diagnostic-provider outages even when the active session has no support policy enabled.",
1680
+ summary: "MF isolation remote diagnostic-provider outage anomaly."
1681
+ }
1682
+ }, Y = {
1683
+ app: "shared_reports_list",
1684
+ moduleId: "shared_reports_list",
1685
+ runtime: "web",
1686
+ surface: "mf"
1687
+ }, Tt = {
1688
+ reportsDebug: {
1689
+ active: !0,
1690
+ codePaths: [
1691
+ "apps/gclick/mfs/shared/shared_reports_list/src/components/App/context/ReportContext"
1692
+ ],
1693
+ controlPlane: "remote-policy",
1694
+ createdAt: "2026-08-22",
1695
+ id: "sharedReportsListReportsDebug",
1696
+ key: "shared_reports_list.feature-flags.reports-debug",
1697
+ notes: [
1698
+ "Fallback product gate hosted in observability only because a dedicated product feature-flag library was not approved.",
1699
+ "This policy must not be used to emit diagnostic logs; shared_reports_list reads only isEnabled(key).",
1700
+ "Migrate to a product feature-flag library when that boundary becomes available."
1701
+ ],
1702
+ owner: Y,
1703
+ purpose: "Allow support-enabled sessions to remove the reports/types test-worker exclusion filter.",
1704
+ summary: "Fallback product gate for the shared reports test report type.",
1705
+ remoteRule: {
1706
+ featureKey: v,
1707
+ payloadKey: "shared_reports_list.feature-flags.reports-debug",
1708
+ provider: "growthbook",
1709
+ supportedLayers: _
1710
+ }
1711
+ },
1712
+ remoteDiagnosticProviderHealth: {
1713
+ active: !0,
1714
+ codePaths: [
1715
+ "apps/gclick/mfs/shared/shared_reports_list/src/components/appEntries/ByIsolation/observability/diagnosticFeatureFlags.ts"
1716
+ ],
1717
+ controlPlane: "always-on",
1718
+ createdAt: "2026-08-24",
1719
+ id: "sharedReportsListRemoteDiagnosticProviderHealth",
1720
+ key: "shared_reports_list.feature-flags.remote-diagnostic-provider-health",
1721
+ owner: Y,
1722
+ purpose: "Report isolation remote diagnostic-provider outages even when report debug is disabled.",
1723
+ summary: "MF isolation remote diagnostic-provider outage anomaly."
1724
+ }
1725
+ }, At = [
1726
+ ...Object.values(Et),
1727
+ ...Object.values(St),
1728
+ ...Object.values(Tt)
1729
+ ];
1730
+ Object.fromEntries(
1731
+ At.map((e) => [e.key, e])
1732
+ );
1733
+ const Ao = ae.property;
1734
+ function Po(e) {
1735
+ return globalThis[e.realtimePerformanceProperty]?.motionMetrics?.motionAuthority ?? null;
1736
+ }
1737
+ function Mo(e) {
1738
+ const a = globalThis[e.realtimePerformanceProperty]?.motionMetrics?.motionAuthority?.markerContexts ?? {};
1739
+ return e.deviceIds.every((i) => !!a[i]);
1740
+ }
1741
+ function Do(e) {
1742
+ const t = globalThis, a = t[e.realtimePerformanceProperty]?.motionMetrics?.motionAuthority?.markerContexts?.[e.deviceId] ?? null, i = String(t.document?.body?.innerText ?? "");
1743
+ return a?.selected === !0 || i.includes("Last Report");
1744
+ }
1745
+ function Lo(e) {
1746
+ return (globalThis[e.realtimePerformanceProperty]?.motionMetrics?.motionAuthority?.markerContexts?.[e.deviceId] ?? null)?.selected === !0;
1747
+ }
1748
+ async function Pt(e, t) {
1749
+ const { arg: o, pageFunction: a, timeoutMs: i } = t;
1750
+ return e.waitForFunction.bind(e)(a, o, { timeout: i }).then(() => !0).catch(() => !1);
1751
+ }
1752
+ async function Oo(e, t) {
1753
+ const { timeoutMessage: o, ...a } = t;
1754
+ if (!await Pt(e, a))
1755
+ throw new Error(o);
1756
+ }
1757
+ async function Co(e) {
1758
+ const { page: t, moduleId: o, ...a } = e;
1759
+ await F({
1760
+ page: t,
1761
+ moduleId: o,
1762
+ isAuth: !0,
1763
+ moduleDictionary: ne(a)
1764
+ });
1765
+ }
1766
+ async function Mt(e) {
1767
+ const { page: t, responseBody: o, status: a = 401 } = e, i = me(o);
1768
+ await t.route("**/api/v1/**/auth/login**", async (r) => {
1769
+ if (r.request().method() !== "GET") {
1770
+ await r.fallback();
1771
+ return;
1772
+ }
1773
+ await r.fulfill({
1774
+ status: a,
1775
+ contentType: "application/json",
1776
+ body: JSON.stringify(i)
1777
+ });
1778
+ });
1779
+ }
1780
+ async function Io(e) {
1781
+ const { page: t, moduleId: o, moduleDictionary: a, locale: i, uiConfig: r, uiConfigRouteOptions: s } = e;
1782
+ await oe({
1783
+ page: t,
1784
+ uiConfig: r,
1785
+ ...s
1786
+ }), await te({
1787
+ page: t,
1788
+ uiConfig: r
1789
+ }), await Mt({
1790
+ page: t
1791
+ }), await ee({
1792
+ page: t,
1793
+ locale: i
1794
+ }), await F({
1795
+ page: t,
1796
+ moduleId: o,
1797
+ moduleDictionary: a
1798
+ });
1799
+ }
1800
+ const Dt = {
1801
+ data: "ok"
1802
+ }, Lt = {
1803
+ error: {
1804
+ code: 4200,
1805
+ message: "Password update failed"
1806
+ }
1807
+ };
1808
+ function Ot(e, t) {
1809
+ return t || (e >= 400 ? Lt : Dt);
1810
+ }
1811
+ async function Fo(e) {
1812
+ const { page: t, responseBody: o, status: a = 201, delayMs: i = 0 } = e;
1813
+ await t.route("**/api/v1/*/auth/password/new", async (r) => {
1814
+ i > 0 && await new Promise((s) => setTimeout(s, i)), await r.fulfill({
1815
+ status: a,
1816
+ contentType: "application/json",
1817
+ body: JSON.stringify(Ot(a, o))
1818
+ });
1819
+ });
1820
+ }
1821
+ const Ct = {
1822
+ message: "Password reset email sent"
1823
+ }, It = {
1824
+ error: {
1825
+ code: 4100,
1826
+ message: "Password reset failed"
1827
+ }
1828
+ };
1829
+ function Ft(e, t) {
1830
+ return t || (e >= 400 ? It : Ct);
1831
+ }
1832
+ async function Ho(e) {
1833
+ const { page: t, responseBody: o, status: a = 200, delayMs: i = 0 } = e;
1834
+ await t.route("**/api/v1/*/auth/password/reset", async (r) => {
1835
+ i > 0 && await new Promise((s) => setTimeout(s, i)), await r.fulfill({
1836
+ status: a,
1837
+ contentType: "application/json",
1838
+ body: JSON.stringify(Ft(a, o))
1839
+ });
1840
+ });
1841
+ }
1842
+ async function Bo(e) {
1843
+ const {
1844
+ page: t,
1845
+ endpointPattern: o,
1846
+ data: a,
1847
+ pagerPage: i = 0,
1848
+ total: r = a.length,
1849
+ status: s = 200
1850
+ } = e;
1851
+ await t.route(o, async (n) => {
1852
+ await n.fulfill({
1853
+ status: s,
1854
+ contentType: "application/json",
1855
+ body: JSON.stringify(re({ data: a, pagerPage: i, total: r }))
1856
+ });
1857
+ });
1858
+ }
1859
+ async function Uo(e) {
1860
+ const { page: t, privileges: o, status: a = 200 } = e, i = Object.fromEntries(
1861
+ o.map((r) => [r, !0])
1862
+ );
1863
+ await t.route(/\/auth\/login\?[^#]*privileges/, async (r) => {
1864
+ if (r.request().method() !== "GET") {
1865
+ await r.fallback();
1866
+ return;
1867
+ }
1868
+ await r.fulfill({
1869
+ status: a,
1870
+ contentType: "application/json",
1871
+ body: JSON.stringify({ data: i })
1872
+ });
1873
+ });
1874
+ }
1875
+ const Ht = "__m4lMicrofrontendRenderStubState";
1876
+ async function xo(e) {
1877
+ const {
1878
+ page: t,
1879
+ moduleId: o,
1880
+ prefix: a,
1881
+ renderedText: i = `${o} microfrontend stub rendered.`,
1882
+ renderedTestId: r = `mf-stub-${o}`,
1883
+ stateKey: s = Ht
1884
+ } = e;
1885
+ await t.addInitScript(
1886
+ ({ moduleId: n, prefix: l, renderedText: p, renderedTestId: y, stateKey: f }) => {
1887
+ const m = window, d = m[f], u = d && typeof d == "object" ? d : {
1888
+ mountCalls: [],
1889
+ mountFailures: [],
1890
+ renderCalls: [],
1891
+ unmountCalls: []
1892
+ };
1893
+ m[f] = u, Array.isArray(u.mountCalls) || (u.mountCalls = []), Array.isArray(u.mountFailures) || (u.mountFailures = []);
1894
+ function R(c, b = window.performance.now() + 15e3) {
1895
+ const E = document.getElementById(c);
1896
+ if (!E) {
1897
+ if (window.performance.now() >= b) {
1898
+ u.mountFailures.push({
1899
+ containerId: c,
1900
+ moduleId: n
1901
+ });
1902
+ return;
1903
+ }
1904
+ window.setTimeout(() => {
1905
+ R(c, b);
1906
+ }, 50);
1907
+ return;
1908
+ }
1909
+ const w = document.createElement("section"), D = document.createElement("h2"), L = document.createElement("p");
1910
+ w.setAttribute("data-mf-module-id", n), w.setAttribute("data-mf-stub-root", n), w.setAttribute("data-testid", y), D.textContent = p, L.textContent = `Stub render contract satisfied for ${n}.`, w.replaceChildren(D, L), E.replaceChildren(w), u.mountCalls.push({
1911
+ containerId: c,
1912
+ moduleId: n
1913
+ });
1914
+ }
1915
+ const A = (c) => {
1916
+ const b = typeof c.containerId == "string" ? c.containerId : "";
1917
+ u.renderCalls.push({
1918
+ containerId: b,
1919
+ moduleId: n,
1920
+ debugPort: c.environment?.mfProps?.debugPort ?? null,
1921
+ currentLocale: typeof c.currentLocale == "string" ? c.currentLocale : c.currentLocale?.localeString ?? null,
1922
+ emergeType: c.emergeType ?? null,
1923
+ dynamicParams: c.dynamicMFStore?.getState?.().dynamicMFParameters ?? null
1924
+ }), b && R(b);
1925
+ };
1926
+ m[`render_v2_${l}_${n}`] = A, m[`unmount_${l}_${n}`] = (c) => {
1927
+ u.unmountCalls.push(c), document.getElementById(c)?.replaceChildren();
1928
+ };
1929
+ },
1930
+ {
1931
+ moduleId: o,
1932
+ prefix: a,
1933
+ renderedText: i,
1934
+ renderedTestId: r,
1935
+ stateKey: s
1936
+ }
1937
+ );
1938
+ }
1939
+ export {
1940
+ Le as HOST_MOBILE_NAV_TOGGLE_NAME,
1941
+ yo as LIST_FILTERS_STATE_COOKIE,
1942
+ Qt as LIST_HEADER_POPOVER_BASE_ACTIONS,
1943
+ fo as LIST_SORTS_STATE_COOKIE,
1944
+ Se as applyListFilterAndCaptureRequest,
1945
+ mo as applyListFiltersAndCaptureRequest,
1946
+ wo as applyListSortAndCaptureRequest,
1947
+ xt as attachJson,
1948
+ to as clickListHeaderPopoverAction,
1949
+ oo as closeListHeaderPopover,
1950
+ Pe as closeViewModeSwitcherDataGrid,
1951
+ K as createHostAreaFixture,
1952
+ le as createHostAuthenticatedMfMenuFixture,
1953
+ ne as createHostAuthenticatedMfModuleDictionaryFixture,
1954
+ de as createHostAuthenticatedSessionFixture,
1955
+ pe as createHostCookieFixture,
1956
+ me as createHostGuestSessionFixture,
1957
+ ye as createHostLocaleFixture,
1958
+ Ut as createHostMfPreviewDynamicParamsFixture,
1959
+ C as createHostModuleDictionaryFixture,
1960
+ W as createHostUiConfigFixture,
1961
+ be as createHostUserPreferencesFixture,
1962
+ re as createListResponseFixture,
1963
+ zt as doubleClickListRow,
1964
+ Ae as expectViewModeDataGrid,
1965
+ Yt as formatFailedChecks,
1966
+ io as getAllColumnAlignmentsViewTableDataGrid,
1967
+ ro as getAllColumnKeysViewTableDataGrid,
1968
+ so as getAllFieldKeysViewCardsOrListDataGrid,
1969
+ vo as getAvailableViewModesDataGrid,
1970
+ Xt as getFocusedCellPositionListDataGrid,
1971
+ jt as getFormActionButton,
1972
+ he as getFormActionsContainer,
1973
+ Gt as getFormConfirmDialog,
1974
+ we as getFormContainer,
1975
+ z as getFormField,
1976
+ Vt as getFormSelectOptions,
1977
+ Kt as getListCell,
1978
+ Q as getListColumnHeader,
1979
+ X as getListColumnHeaderButtons,
1980
+ _e as getListColumnKeys,
1981
+ ve as getListColumnWidth,
1982
+ k as getListDataGrid,
1983
+ J as getListDataRows,
1984
+ ke as getListDetailAccordion,
1985
+ Re as getListDetailAccordionRegions,
1986
+ no as getListDetailEmptyState,
1987
+ co as getListDetailField,
1988
+ uo as getListDetailFieldLabels,
1989
+ go as getListFilterFieldNames,
1990
+ M as getListHeaderPopover,
1991
+ eo as getListHeaderPopoverActions,
1992
+ I as getListRow,
1993
+ ho as getListSortFieldNames,
1994
+ Ro as getRenderedRecordsDataGrid,
1995
+ Nt as getToast,
1996
+ Te as getViewModeDataGrid,
1997
+ Mo as hasRealtimeMarkerContexts,
1998
+ ko as hideAllColumnsDataGrid,
1999
+ Ue as installHostAlarmsCountRoute,
2000
+ xe as installHostAreasRoute,
2001
+ ze as installHostAuthenticatedBootstrapRoutes,
2002
+ Co as installHostAuthenticatedMfModuleDictionaryRoute,
2003
+ Qe as installHostAuthenticatedMfPreviewBootstrap,
2004
+ Ne as installHostAuthenticatedSessionRoute,
2005
+ je as installHostCookiesRoute,
2006
+ Io as installHostGuestBootstrapRoutes,
2007
+ Mt as installHostGuestSessionRoute,
2008
+ ee as installHostLocaleRoute,
2009
+ Ve as installHostMenusRoute,
2010
+ F as installHostModuleDictionaryRoute,
2011
+ Fo as installHostPasswordNewRoute,
2012
+ Ho as installHostPasswordResetRoute,
2013
+ te as installHostUiConfigAssetRoutes,
2014
+ oe as installHostUiConfigRoute,
2015
+ qe as installHostUserPreferencesRoute,
2016
+ Bo as installListEndpointRoute,
2017
+ xo as installMicrofrontendRenderStub,
2018
+ Uo as installModulePrivilegesRoute,
2019
+ Lo as isRealtimeDeviceSelected,
2020
+ Do as isRealtimeDeviceSelectedOrDebugPanelVisible,
2021
+ po as loadListDetailLogsAndCaptureRequest,
2022
+ Me as openColumnSettingsDataGrid,
2023
+ $t as openFormSelectAndCaptureRequest,
2024
+ Eo as openHostAccountMenuModule,
2025
+ To as openHostAuthenticatedMfPreviewModule,
2026
+ So as openHostMobileSidebarModule,
2027
+ Be as openHostSidebarModule,
2028
+ Zt as openListHeaderPopover,
2029
+ Wt as openListRowActionsMenu,
2030
+ Z as openViewModeSwitcherDataGrid,
2031
+ Po as readRealtimeMotionAuthorityState,
2032
+ Ao as realtimePerformanceDebugHandleProperty,
2033
+ ao as resizeListColumn,
2034
+ qt as selectFormOption,
2035
+ Jt as selectListRow,
2036
+ _o as switchViewModeDataGrid,
2037
+ lo as toggleListDetailAccordion,
2038
+ Pt as tryWaitForBrowserCondition,
2039
+ Oo as waitForBrowserCondition,
2040
+ bo as waitForListStatePersistence
2041
+ };