@ibdop/platform-kit 1.0.10 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks/index.d.ts +2 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useApi.d.ts +10 -7
- package/dist/hooks/useApi.d.ts.map +1 -1
- package/dist/hooks/useFeatures.d.ts +98 -0
- package/dist/hooks/useFeatures.d.ts.map +1 -0
- package/dist/hooks/useShellAuth.d.ts +2 -5
- package/dist/hooks/useShellAuth.d.ts.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.mjs +957 -709
- package/dist/index.umd.js +10 -10
- package/dist/services/api.d.ts +2 -0
- package/dist/services/api.d.ts.map +1 -1
- package/dist/types/index.d.ts +88 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/shellAuth.d.ts +43 -0
- package/dist/utils/shellAuth.d.ts.map +1 -0
- package/package.json +3 -5
- package/src/hooks/index.ts +7 -1
- package/src/hooks/useApi.ts +76 -17
- package/src/hooks/useFeatures.ts +445 -0
- package/src/hooks/useShellAuth.ts +6 -26
- package/src/services/api.ts +43 -43
- package/src/types/index.ts +99 -0
- package/src/utils/index.ts +10 -0
- package/src/utils/shellAuth.ts +106 -0
package/dist/hooks/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Hooks barrel export
|
|
3
3
|
*/
|
|
4
|
-
export { useShellAuth,
|
|
4
|
+
export { useShellAuth, getShellAuth } from './useShellAuth';
|
|
5
5
|
export { useInfoData } from './useInfoData';
|
|
6
6
|
export { useV1Config } from './useV1Config';
|
|
7
7
|
export { useApi } from './useApi';
|
|
8
8
|
export { usePermissions } from './usePermissions';
|
|
9
|
+
export { useFeatures, useFeatureAdmin, useMicrofrontendsFeatures, } from './useFeatures';
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EACL,WAAW,EACX,eAAe,EACf,yBAAyB,GAC1B,MAAM,eAAe,CAAA"}
|
package/dist/hooks/useApi.d.ts
CHANGED
|
@@ -17,6 +17,8 @@ export interface UseApiConfig<T = never> {
|
|
|
17
17
|
errorContext?: string;
|
|
18
18
|
onSuccess?: (data: T) => void;
|
|
19
19
|
onError?: (error: ApiError) => void;
|
|
20
|
+
/** Auto-execute on mount (default: false) */
|
|
21
|
+
immediate?: boolean;
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
22
24
|
* Interface для результата useApi
|
|
@@ -29,6 +31,7 @@ export interface UseApiResult<T> {
|
|
|
29
31
|
isSuccess: boolean;
|
|
30
32
|
execute: () => Promise<T | null>;
|
|
31
33
|
reset: () => void;
|
|
34
|
+
abort: () => void;
|
|
32
35
|
}
|
|
33
36
|
/**
|
|
34
37
|
* Централизованный хук для API запросов
|
|
@@ -39,27 +42,27 @@ export interface UseApiResult<T> {
|
|
|
39
42
|
*
|
|
40
43
|
* @example
|
|
41
44
|
* ```tsx
|
|
42
|
-
* const { data, isLoading, isError, execute } = useApi<User[]>(
|
|
43
|
-
* () => fetch('/api/users').then(r => r.json()),
|
|
45
|
+
* const { data, isLoading, isError, execute, abort } = useApi<User[]>(
|
|
46
|
+
* (signal) => fetch('/api/users', { signal }).then(r => r.json()),
|
|
44
47
|
* { notifyOnError: true, errorContext: 'загрузка пользователей' }
|
|
45
48
|
* )
|
|
46
49
|
* ```
|
|
47
50
|
*/
|
|
48
|
-
export declare function useApi<T>(request: () => Promise<ApiResponse<T>>, config?: UseApiConfig<T>): UseApiResult<T>;
|
|
51
|
+
export declare function useApi<T>(request: (signal?: AbortSignal) => Promise<ApiResponse<T>>, config?: UseApiConfig<T>): UseApiResult<T>;
|
|
49
52
|
/**
|
|
50
|
-
* GET запрос
|
|
53
|
+
* GET запрос с AbortController
|
|
51
54
|
*/
|
|
52
55
|
export declare function useGet<T>(url: string, params?: Record<string, unknown>, config?: UseApiConfig<T>): UseApiResult<T>;
|
|
53
56
|
/**
|
|
54
|
-
* POST запрос
|
|
57
|
+
* POST запрос с AbortController
|
|
55
58
|
*/
|
|
56
59
|
export declare function usePost<T>(url: string, data?: unknown, config?: UseApiConfig<T>): UseApiResult<T>;
|
|
57
60
|
/**
|
|
58
|
-
* PUT запрос
|
|
61
|
+
* PUT запрос с AbortController
|
|
59
62
|
*/
|
|
60
63
|
export declare function usePut<T>(url: string, data?: unknown, config?: UseApiConfig<T>): UseApiResult<T>;
|
|
61
64
|
/**
|
|
62
|
-
* DELETE запрос
|
|
65
|
+
* DELETE запрос с AbortController
|
|
63
66
|
*/
|
|
64
67
|
export declare function useDel<T>(url: string, config?: UseApiConfig<T>): UseApiResult<T>;
|
|
65
68
|
//# sourceMappingURL=useApi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useApi.d.ts","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAsB1E;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,SAAS,CAAC,GAAG,IAAI,CAiB3G;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAuCjF;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,KAAK;IACrC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"useApi.d.ts","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAsB1E;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,SAAS,CAAC,GAAG,IAAI,CAiB3G;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAuCjF;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,KAAK;IACrC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;IACnC,6CAA6C;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;IACd,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAA;IACtB,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAChC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AASD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,CAAC,EACtB,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAC1D,MAAM,GAAE,YAAY,CAAC,CAAC,CAAM,GAC3B,YAAY,CAAC,CAAC,CAAC,CAmIjB;AAID;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EACtB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,GAAE,YAAY,CAAC,CAAC,CAAM,GAC3B,YAAY,CAAC,CAAC,CAAC,CAajB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,GAAE,YAAY,CAAC,CAAC,CAAM,GAC3B,YAAY,CAAC,CAAC,CAAC,CAcjB;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EACtB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,GAAE,YAAY,CAAC,CAAC,CAAM,GAC3B,YAAY,CAAC,CAAC,CAAC,CAcjB;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EACtB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,YAAY,CAAC,CAAC,CAAM,GAC3B,YAAY,CAAC,CAAC,CAAC,CAajB"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { FeatureToggleInfo, FeatureToggleAdmin, FeatureCreateRequest, FeatureUpdateRequest, MicrofrontendWithFeatures } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Result of useFeatures hook
|
|
4
|
+
*/
|
|
5
|
+
export interface UseFeaturesResult {
|
|
6
|
+
features: FeatureToggleInfo[];
|
|
7
|
+
totalCount: number;
|
|
8
|
+
userRoles: string[];
|
|
9
|
+
isLoading: boolean;
|
|
10
|
+
error: string | null;
|
|
11
|
+
refetch: () => Promise<void>;
|
|
12
|
+
isFeatureEnabled: (featureName: string) => boolean;
|
|
13
|
+
getFeaturesByMf: (mfName: string) => FeatureToggleInfo[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Hook to get feature toggles for the current user
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { useFeatures } from '@ib-dop/platform-kit'
|
|
21
|
+
*
|
|
22
|
+
* function FeatureFlagComponent() {
|
|
23
|
+
* const { features, isFeatureEnabled, isLoading } = useFeatures()
|
|
24
|
+
*
|
|
25
|
+
* if (isLoading) return <Spinner />
|
|
26
|
+
*
|
|
27
|
+
* return (
|
|
28
|
+
* <div>
|
|
29
|
+
* {isFeatureEnabled('new-dashboard') && <NewDashboard />}
|
|
30
|
+
* {!isFeatureEnabled('new-dashboard') && <OldDashboard />}
|
|
31
|
+
* </div>
|
|
32
|
+
* )
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function useFeatures(): UseFeaturesResult;
|
|
37
|
+
/**
|
|
38
|
+
* Result of useFeatureAdmin hook
|
|
39
|
+
*/
|
|
40
|
+
export interface UseFeatureAdminResult {
|
|
41
|
+
features: FeatureToggleAdmin[];
|
|
42
|
+
microfrontends: string[];
|
|
43
|
+
isAdmin: boolean;
|
|
44
|
+
isLoading: boolean;
|
|
45
|
+
error: string | null;
|
|
46
|
+
refetch: () => Promise<void>;
|
|
47
|
+
createFeature: (feature: FeatureCreateRequest) => Promise<boolean>;
|
|
48
|
+
updateFeature: (name: string, feature: FeatureUpdateRequest) => Promise<boolean>;
|
|
49
|
+
toggleFeature: (name: string, enabled: boolean) => Promise<boolean>;
|
|
50
|
+
deleteFeature: (name: string) => Promise<boolean>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Hook for admin operations with feature toggles
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* import { useFeatureAdmin } from '@ib-dop/platform-kit'
|
|
58
|
+
*
|
|
59
|
+
* function AdminPanel() {
|
|
60
|
+
* const {
|
|
61
|
+
* features,
|
|
62
|
+
* isAdmin,
|
|
63
|
+
* isLoading,
|
|
64
|
+
* toggleFeature
|
|
65
|
+
* } = useFeatureAdmin()
|
|
66
|
+
*
|
|
67
|
+
* if (isLoading) return <Spinner />
|
|
68
|
+
* if (!isAdmin) return <AccessDenied />
|
|
69
|
+
*
|
|
70
|
+
* return (
|
|
71
|
+
* <table>
|
|
72
|
+
* {features.map(f => (
|
|
73
|
+
* <tr key={f.name}>
|
|
74
|
+
* <td>{f.name}</td>
|
|
75
|
+
* <td>{f.enabled ? 'ON' : 'OFF'}</td>
|
|
76
|
+
* <button onClick={() => toggleFeature(f.name, !f.enabled)}>
|
|
77
|
+
* Toggle
|
|
78
|
+
* </button>
|
|
79
|
+
* </tr>
|
|
80
|
+
* ))}
|
|
81
|
+
* </table>
|
|
82
|
+
* )
|
|
83
|
+
* }
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
export declare function useFeatureAdmin(): UseFeatureAdminResult;
|
|
87
|
+
/**
|
|
88
|
+
* Hook to get microfrontends with their features
|
|
89
|
+
*/
|
|
90
|
+
export interface UseMicrofrontendsFeaturesResult {
|
|
91
|
+
microfrontends: MicrofrontendWithFeatures[];
|
|
92
|
+
totalCount: number;
|
|
93
|
+
isLoading: boolean;
|
|
94
|
+
error: string | null;
|
|
95
|
+
refetch: () => Promise<void>;
|
|
96
|
+
}
|
|
97
|
+
export declare function useMicrofrontendsFeatures(): UseMicrofrontendsFeaturesResult;
|
|
98
|
+
//# sourceMappingURL=useFeatures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFeatures.d.ts","sourceRoot":"","sources":["../../src/hooks/useFeatures.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,iBAAiB,EAEjB,kBAAkB,EAElB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EAE1B,MAAM,UAAU,CAAA;AAEjB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,iBAAiB,EAAE,CAAA;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAA;IAClD,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,iBAAiB,EAAE,CAAA;CACzD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,WAAW,IAAI,iBAAiB,CA6E/C;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,aAAa,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAClE,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAChF,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACnE,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAClD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,eAAe,IAAI,qBAAqB,CAqMvD;AAED;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,cAAc,EAAE,yBAAyB,EAAE,CAAA;IAC3C,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B;AAED,wBAAgB,yBAAyB,IAAI,+BAA+B,CAqD3E"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { ShellAuth } from '../types';
|
|
2
|
-
|
|
3
|
-
* Получить auth из window globals
|
|
4
|
-
*/
|
|
5
|
-
declare function getAuth(): ShellAuth | null;
|
|
2
|
+
import { getShellAuth } from '../utils/shellAuth';
|
|
6
3
|
/**
|
|
7
4
|
* Централизованный хук для получения состояния авторизации из shell
|
|
8
5
|
*
|
|
@@ -19,5 +16,5 @@ declare function getAuth(): ShellAuth | null;
|
|
|
19
16
|
* ```
|
|
20
17
|
*/
|
|
21
18
|
export declare function useShellAuth(): ShellAuth;
|
|
22
|
-
export {
|
|
19
|
+
export { getShellAuth };
|
|
23
20
|
//# sourceMappingURL=useShellAuth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useShellAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useShellAuth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"useShellAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useShellAuth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAiBjD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAgFxC;AAGD,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("react"),Ft=require("axios"),Ve={log:(...t)=>{},warn:(...t)=>{}};function Q(){if(typeof window>"u")return null;const t=window;if(t.__SHELL_AUTH_INSTANCE__)return t.__SHELL_AUTH_INSTANCE__;const r=window;return r.__SHELL_AUTH__?.authInstance?r.__SHELL_AUTH__.authInstance:null}function ze(){const[t,r]=m.useState(null),[o,u]=m.useState(!0),s=m.useRef(0),f=20,i=m.useCallback(()=>Q(),[]);m.useEffect(()=>{const y=i();if(y){r(y),u(!1);return}const g=l=>{r(l.detail),u(!1)},S=setInterval(()=>{s.current++;const l=i();l?(Ve.log("Auth found via polling, attempts:",s.current),r(l),u(!1),clearInterval(S)):s.current>=f&&(u(!1),clearInterval(S))},500);return window.addEventListener("shell-auth-ready",g),()=>{clearInterval(S),window.removeEventListener("shell-auth-ready",g)}},[i]);const p=t||{user:null,isAuthenticated:!1,isLoading:o,signinRedirect:async()=>{const y=Q();y?.signinRedirect?await y.signinRedirect():typeof window<"u"&&(window.location.href="/")},removeUser:async()=>{const y=Q();y?.removeUser&&await y.removeUser()}};return Ve.log("Auth result:",{isAuthenticated:p.isAuthenticated,isLoading:p.isLoading}),p}const Lt={log:(...t)=>{},warn:(...t)=>{},error:(...t)=>{console.error("[useInfoData]",...t)}};function $t(t){if(t)return t;if(typeof window<"u"){const r=window;if(r.__MF_NAME__)return r.__MF_NAME__}return"unknown-mfe"}function Ye(t){const[r,o]=m.useState(null),[u,s]=m.useState(!0),[f,i]=m.useState(null),b=m.useCallback(()=>{const y=$t(t?.mfeName).replace("@ib-dop/","");s(!0),i(null),fetch(`/svc/${y}/info.json`).then(g=>{if(!g.ok)throw new Error(`HTTP ${g.status}: ${g.statusText}`);return g.json()}).then(g=>{o(g)}).catch(g=>{Lt.error("Failed to load info:",g),i(g instanceof Error?g.message:String(g))}).finally(()=>{s(!1)})},[t?.mfeName]);return m.useEffect(()=>{b()},[b]),{data:r,isLoading:u,error:f,refetch:b}}const ce={log:(...t)=>{},warn:(...t)=>{},error:(...t)=>{console.error("[useV1Config]",...t)}},X={authority:"",client_id:"",environment:"development"};function Ut(){const[t,r]=m.useState(null),[o,u]=m.useState(!0),[s,f]=m.useState(null);return m.useEffect(()=>{(()=>{if(typeof sessionStorage>"u"){f("sessionStorage not available"),r(X),u(!1);return}try{const b=sessionStorage.getItem("config");if(b){const p=JSON.parse(b);r({...X,...p}),f(null),ce.log("Config loaded successfully")}else r(X),f("Config not found in sessionStorage"),ce.warn("Config not found in sessionStorage")}catch(b){ce.error("Error parsing config:",b),r(X),f("Error parsing config")}finally{u(!1)}})()},[]),{data:t,isLoading:o,error:s}}function Je(t){if(typeof window>"u")return;const r=window.__MF_NAME__||"unknown",o={...t,mfeName:r,timestamp:Date.now()};window.dispatchEvent(new CustomEvent("mfe-notification",{detail:o,bubbles:!0}))}function We(t,r){const o={network:{title:"Нет подключения",message:"Сервер недоступен. Проверьте подключение к интернету."},unauthorized:{title:"Требуется вход",message:"Ваша сессия истекла. Войдите в систему снова."},forbidden:{title:"Доступ запрещён",message:"У вас нет прав для выполнения этого действия."},not_found:{title:"Не найдено",message:"Запрошенный ресурс не найден."},server:{title:"Ошибка сервера",message:"Произошла ошибка на сервере. Попробуйте позже."},client:{title:"Ошибка",message:t.message||"Произошла ошибка при выполнении запроса."},unknown:{title:"Неизвестная ошибка",message:t.message||"Произошла неизвестная ошибка."}},u=o[t.type]||o.unknown;Je({type:t.type==="network"?"warning":"error",title:u.title,message:r?`${u.message} (${r})`:u.message})}function Vt(t,r={}){const{notifyOnError:o=!0,notifyOnSuccess:u=!1,successMessage:s,errorContext:f,onSuccess:i,onError:b}=r,[p,y]=m.useState(null),[g,S]=m.useState(null),[l,v]=m.useState(!1),C=g!==null,k=p!==null&&!l&&!C,te=m.useCallback(async()=>{v(!0),S(null);try{const x=await t();if(x.ok)return y(x.data),u&&s&&Je({type:"success",title:"Успешно",message:s}),i?.(x.data),x.data;{const O={message:x.data||"Request failed",status:x.status,type:"client",timestamp:Date.now()};return S(O),o&&We(O,f),b?.(O),null}}catch(x){const O=x;return S(O),o&&We(O,f),b?.(O),null}finally{v(!1)}},[t,o,u,s,f,i,b]),j=m.useCallback(()=>{y(null),S(null),v(!1)},[]);return{data:p,error:g,isLoading:l,isError:C,isSuccess:k,execute:te,reset:j}}const Wt={canView:["all"],canEdit:["ibdop-user","ibdop-admin","ibdop-devops"],canDelete:["ibdop-admin","ibdop-devops"],canAdmin:["ibdop-admin"],canViewSensitiveData:["ibdop-admin","ibdop-devops"],canExportData:["ibdop-user"],canManageUsers:["ibdop-admin"]};function Bt(t={}){const r=ze(),o=m.useMemo(()=>({...Wt,...t}),[t]),u=m.useMemo(()=>{const f=r.user?.profile?.realm_roles||r.user?.profile?.roles||[];return Array.isArray(f)?f:[f]},[r.user]),s=f=>f.includes("all")?!0:f.some(i=>u.includes(i));return{canView:s(o.canView),canEdit:s(o.canEdit),canDelete:s(o.canDelete),canAdmin:s(o.canAdmin),canViewSensitiveData:s(o.canViewSensitiveData),canExportData:s(o.canExportData),canManageUsers:s(o.canManageUsers)}}var Z={exports:{}},W={};var Be;function Ht(){if(Be)return W;Be=1;var t=m,r=Symbol.for("react.element"),o=Symbol.for("react.fragment"),u=Object.prototype.hasOwnProperty,s=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,f={key:!0,ref:!0,__self:!0,__source:!0};function i(b,p,y){var g,S={},l=null,v=null;y!==void 0&&(l=""+y),p.key!==void 0&&(l=""+p.key),p.ref!==void 0&&(v=p.ref);for(g in p)u.call(p,g)&&!f.hasOwnProperty(g)&&(S[g]=p[g]);if(b&&b.defaultProps)for(g in p=b.defaultProps,p)S[g]===void 0&&(S[g]=p[g]);return{$$typeof:r,type:b,key:l,ref:v,props:S,_owner:s.current}}return W.Fragment=o,W.jsx=i,W.jsxs=i,W}var B={};var He;function Gt(){return He||(He=1,process.env.NODE_ENV!=="production"&&(function(){var t=m,r=Symbol.for("react.element"),o=Symbol.for("react.portal"),u=Symbol.for("react.fragment"),s=Symbol.for("react.strict_mode"),f=Symbol.for("react.profiler"),i=Symbol.for("react.provider"),b=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),y=Symbol.for("react.suspense"),g=Symbol.for("react.suspense_list"),S=Symbol.for("react.memo"),l=Symbol.for("react.lazy"),v=Symbol.for("react.offscreen"),C=Symbol.iterator,k="@@iterator";function te(e){if(e===null||typeof e!="object")return null;var n=C&&e[C]||e[k];return typeof n=="function"?n:null}var j=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function x(e){{for(var n=arguments.length,a=new Array(n>1?n-1:0),c=1;c<n;c++)a[c-1]=arguments[c];O("error",e,a)}}function O(e,n,a){{var c=j.ReactDebugCurrentFrame,E=c.getStackAddendum();E!==""&&(n+="%s",a=a.concat([E]));var w=a.map(function(_){return String(_)});w.unshift("Warning: "+n),Function.prototype.apply.call(console[e],console,w)}}var nt=!1,ot=!1,at=!1,it=!1,st=!1,he;he=Symbol.for("react.module.reference");function ut(e){return!!(typeof e=="string"||typeof e=="function"||e===u||e===f||st||e===s||e===y||e===g||it||e===v||nt||ot||at||typeof e=="object"&&e!==null&&(e.$$typeof===l||e.$$typeof===S||e.$$typeof===i||e.$$typeof===b||e.$$typeof===p||e.$$typeof===he||e.getModuleId!==void 0))}function lt(e,n,a){var c=e.displayName;if(c)return c;var E=n.displayName||n.name||"";return E!==""?a+"("+E+")":a}function _e(e){return e.displayName||"Context"}function P(e){if(e==null)return null;if(typeof e.tag=="number"&&x("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case u:return"Fragment";case o:return"Portal";case f:return"Profiler";case s:return"StrictMode";case y:return"Suspense";case g:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case b:var n=e;return _e(n)+".Consumer";case i:var a=e;return _e(a._context)+".Provider";case p:return lt(e,e.render,"ForwardRef");case S:var c=e.displayName||null;return c!==null?c:P(e.type)||"Memo";case l:{var E=e,w=E._payload,_=E._init;try{return P(_(w))}catch{return null}}}return null}var D=Object.assign,U=0,ve,Ee,ye,we,be,xe,Se;function Re(){}Re.__reactDisabledLog=!0;function ct(){{if(U===0){ve=console.log,Ee=console.info,ye=console.warn,we=console.error,be=console.group,xe=console.groupCollapsed,Se=console.groupEnd;var e={configurable:!0,enumerable:!0,value:Re,writable:!0};Object.defineProperties(console,{info:e,log:e,warn:e,error:e,group:e,groupCollapsed:e,groupEnd:e})}U++}}function ft(){{if(U--,U===0){var e={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:D({},e,{value:ve}),info:D({},e,{value:Ee}),warn:D({},e,{value:ye}),error:D({},e,{value:we}),group:D({},e,{value:be}),groupCollapsed:D({},e,{value:xe}),groupEnd:D({},e,{value:Se})})}U<0&&x("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var re=j.ReactCurrentDispatcher,ne;function Y(e,n,a){{if(ne===void 0)try{throw Error()}catch(E){var c=E.stack.trim().match(/\n( *(at )?)/);ne=c&&c[1]||""}return`
|
|
2
|
-
`+
|
|
3
|
-
`),
|
|
4
|
-
`),
|
|
5
|
-
`+
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react"),Lt=require("axios");function L(){if(typeof window>"u")return null;const t=window;if(t.__SHELL_AUTH_INSTANCE__)return t.__SHELL_AUTH_INSTANCE__;const r=window;return r.__SHELL_AUTH__?.authInstance?r.__SHELL_AUTH__.authInstance:null}function Ke(){const t=L();return t?{isAuthenticated:t.isAuthenticated,user:t.user??void 0}:{isAuthenticated:!1}}function Ut(){const t=L();return t?.isAuthenticated?t.user?.profile?.access_token??null:null}function Vt(){return L()?.isAuthenticated??!1}async function Xe(){const t=L();t?.signinRedirect?await t.signinRedirect():typeof window<"u"&&(window.location.href="/")}async function Bt(){const t=L();t?.removeUser&&await t.removeUser()}const He={log:(...t)=>{},warn:(...t)=>{}};function q(){const[t,r]=i.useState(null),[o,u]=i.useState(!0),l=i.useRef(0),g=20,n=i.useCallback(()=>L(),[]);i.useEffect(()=>{const y=n();if(y){r(y),u(!1);return}const d=c=>{r(c.detail),u(!1)},h=setInterval(()=>{l.current++;const c=n();c?(He.log("Auth found via polling, attempts:",l.current),r(c),u(!1),clearInterval(h)):l.current>=g&&(u(!1),clearInterval(h))},500);return window.addEventListener("shell-auth-ready",d),()=>{clearInterval(h),window.removeEventListener("shell-auth-ready",d)}},[n]);const f=t||{user:null,isAuthenticated:!1,isLoading:o,signinRedirect:async()=>{const y=L();y?.signinRedirect?await y.signinRedirect():typeof window<"u"&&(window.location.href="/")},removeUser:async()=>{const y=L();y?.removeUser&&await y.removeUser()}};return He.log("Auth result:",{isAuthenticated:f.isAuthenticated,isLoading:f.isLoading}),f}const Wt={log:(...t)=>{},warn:(...t)=>{},error:(...t)=>{console.error("[useInfoData]",...t)}};function zt(t){if(t)return t;if(typeof window<"u"){const r=window;if(r.__MF_NAME__)return r.__MF_NAME__}return"unknown-mfe"}function Ze(t){const[r,o]=i.useState(null),[u,l]=i.useState(!0),[g,n]=i.useState(null),_=i.useCallback(()=>{const y=zt(t?.mfeName).replace("@ib-dop/","");l(!0),n(null),fetch(`/svc/${y}/info.json`).then(d=>{if(!d.ok)throw new Error(`HTTP ${d.status}: ${d.statusText}`);return d.json()}).then(d=>{o(d)}).catch(d=>{Wt.error("Failed to load info:",d),n(d instanceof Error?d.message:String(d))}).finally(()=>{l(!1)})},[t?.mfeName]);return i.useEffect(()=>{_()},[_]),{data:r,isLoading:u,error:g,refetch:_}}const ge={log:(...t)=>{},warn:(...t)=>{},error:(...t)=>{console.error("[useV1Config]",...t)}},re={authority:"",client_id:"",environment:"development"};function Ht(){const[t,r]=i.useState(null),[o,u]=i.useState(!0),[l,g]=i.useState(null);return i.useEffect(()=>{(()=>{if(typeof sessionStorage>"u"){g("sessionStorage not available"),r(re),u(!1);return}try{const _=sessionStorage.getItem("config");if(_){const f=JSON.parse(_);r({...re,...f}),g(null),ge.log("Config loaded successfully")}else r(re),g("Config not found in sessionStorage"),ge.warn("Config not found in sessionStorage")}catch(_){ge.error("Error parsing config:",_),r(re),g("Error parsing config")}finally{u(!1)}})()},[]),{data:t,isLoading:o,error:l}}function Qe(t){if(typeof window>"u")return;const r=window.__MF_NAME__||"unknown",o={...t,mfeName:r,timestamp:Date.now()};window.dispatchEvent(new CustomEvent("mfe-notification",{detail:o,bubbles:!0}))}function Ge(t,r){const o={network:{title:"Нет подключения",message:"Сервер недоступен. Проверьте подключение к интернету."},unauthorized:{title:"Требуется вход",message:"Ваша сессия истекла. Войдите в систему снова."},forbidden:{title:"Доступ запрещён",message:"У вас нет прав для выполнения этого действия."},not_found:{title:"Не найдено",message:"Запрошенный ресурс не найден."},server:{title:"Ошибка сервера",message:"Произошла ошибка на сервере. Попробуйте позже."},client:{title:"Ошибка",message:t.message||"Произошла ошибка при выполнении запроса."},unknown:{title:"Неизвестная ошибка",message:t.message||"Произошла неизвестная ошибка."}},u=o[t.type]||o.unknown;Qe({type:t.type==="network"?"warning":"error",title:u.title,message:r?`${u.message} (${r})`:u.message})}function Gt(t){return t instanceof Error&&t.name==="AbortError"}function Yt(t,r={}){const{notifyOnError:o=!0,notifyOnSuccess:u=!1,successMessage:l,errorContext:g,onSuccess:n,onError:_}=r,[f,y]=i.useState(null),[d,h]=i.useState(null),[c,w]=i.useState(!1),E=i.useRef(null),I=d!==null,k=f!==null&&!c&&!I;i.useEffect(()=>()=>{E.current&&E.current.abort()},[]);const S=i.useCallback(()=>{E.current&&(E.current.abort(),E.current=null,w(!1))},[]),v=i.useCallback(async()=>{E.current&&E.current.abort(),E.current=new AbortController;const N=E.current.signal;w(!0),h(null);try{const j=await t(N);if(N.aborted)return null;if(j.ok)return y(j.data),u&&l&&Qe({type:"success",title:"Успешно",message:l}),n?.(j.data),j.data;{const $={message:j.data||"Request failed",status:j.status,type:"client",timestamp:Date.now()};return h($),o&&Ge($,g),_?.($),null}}catch(j){if(Gt(j))return null;const $=j;return h($),o&&Ge($,g),_?.($),null}finally{N.aborted||w(!1),E.current=null}},[t,o,u,l,g,n,_]),R=i.useCallback(()=>{y(null),h(null),w(!1)},[]);return{data:f,error:d,isLoading:c,isError:I,isSuccess:k,execute:v,reset:R,abort:S}}const Jt={canView:["all"],canEdit:["ibdop-user","ibdop-admin","ibdop-devops"],canDelete:["ibdop-admin","ibdop-devops"],canAdmin:["ibdop-admin"],canViewSensitiveData:["ibdop-admin","ibdop-devops"],canExportData:["ibdop-user"],canManageUsers:["ibdop-admin"]};function qt(t={}){const r=q(),o=i.useMemo(()=>({...Jt,...t}),[t]),u=i.useMemo(()=>{const g=r.user?.profile?.realm_roles||r.user?.profile?.roles||[];return Array.isArray(g)?g:[g]},[r.user]),l=g=>g.includes("all")?!0:g.some(n=>u.includes(n));return{canView:l(o.canView),canEdit:l(o.canEdit),canDelete:l(o.canDelete),canAdmin:l(o.canAdmin),canViewSensitiveData:l(o.canViewSensitiveData),canExportData:l(o.canExportData),canManageUsers:l(o.canManageUsers)}}function Kt(){const t=q(),[r,o]=i.useState([]),[u,l]=i.useState(0),[g,n]=i.useState([]),[_,f]=i.useState(!0),[y,d]=i.useState(null),h=i.useCallback(async()=>{if(!t.isAuthenticated){console.debug("[useFeatures] Not authenticated"),f(!1);return}f(!0),d(null);try{const E={"Content-Type":"application/json"},I=t.user?.access_token;I&&(E.Authorization=`Bearer ${I}`);const k=await fetch("/api/features",{headers:E});if(!k.ok)throw new Error(`HTTP ${k.status}: ${k.statusText}`);const S=await k.json();o(S.features||[]),l(S.totalCount||0),n(S.userRoles||[])}catch(E){console.debug("Features fetch error:",E),d(E instanceof Error?E.message:String(E)),o([]),n([])}finally{f(!1)}},[t.isAuthenticated,t.user?.access_token]);i.useEffect(()=>{h()},[h]);const c=i.useCallback(E=>r.find(k=>k.name===E)?.userEnabled??!1,[r]),w=i.useCallback(E=>r.filter(I=>I.mfDependencies?.includes(E)),[r]);return{features:r,totalCount:u,userRoles:g,isLoading:_,error:y,refetch:h,isFeatureEnabled:c,getFeaturesByMf:w}}function Xt(){const t=q(),[r,o]=i.useState([]),[u,l]=i.useState([]),[g,n]=i.useState(!1),[_,f]=i.useState(!0),[y,d]=i.useState(null),h=i.useCallback(async()=>{if(!t.isAuthenticated){console.debug("[useFeatureAdmin] Not authenticated"),f(!1);return}f(!0),d(null);try{const k={"Content-Type":"application/json"},S=t.user?.access_token;S&&(k.Authorization=`Bearer ${S}`);const v=await fetch("/api/features/admin",{headers:k});if(!v.ok){if(v.status===403){console.warn("[useFeatureAdmin] 403 Forbidden - checking if token has admin role"),n(!1),o([]),l([]),f(!1);return}throw new Error(`HTTP ${v.status}: ${v.statusText}`)}const R=await v.json();o(R.featureToggles||[]),l(R.microfrontends||[]),n(R.isAdmin||!1)}catch(k){console.debug("FeatureAdmin fetch error:",k),o([]),l([]),n(!1)}finally{f(!1)}},[t.isAuthenticated,t.user?.access_token]),c=i.useCallback(async k=>{try{const S={"Content-Type":"application/json"},v=t.user?.access_token;v&&(S.Authorization=`Bearer ${v}`);const R=await fetch("/api/features/admin",{method:"POST",headers:S,body:JSON.stringify(k)});if(!R.ok){const N=await R.json().catch(()=>({}));throw new Error(N.error||`HTTP ${R.status}`)}return await h(),!0}catch(S){return d(S instanceof Error?S.message:String(S)),!1}},[h]),w=i.useCallback(async(k,S)=>{try{const v={"Content-Type":"application/json"},R=t.user?.access_token;R&&(v.Authorization=`Bearer ${R}`);const N=await fetch(`/api/features/admin/${encodeURIComponent(k)}`,{method:"PUT",headers:v,body:JSON.stringify(S)});if(!N.ok){const j=await N.json().catch(()=>({}));throw new Error(j.error||`HTTP ${N.status}`)}return await h(),!0}catch(v){return d(v instanceof Error?v.message:String(v)),!1}},[h]),E=i.useCallback(async(k,S)=>{try{const v={},R=t.user?.access_token;R&&(v.Authorization=`Bearer ${R}`);const N=await fetch(`/api/features/admin/${encodeURIComponent(k)}/toggle?enabled=${S}`,{method:"POST",headers:v});if(!N.ok){const j=await N.json().catch(()=>({}));throw new Error(j.error||`HTTP ${N.status}`)}return await h(),!0}catch(v){return d(v instanceof Error?v.message:String(v)),!1}},[h]),I=i.useCallback(async k=>{try{const S={},v=t.user?.access_token;v&&(S.Authorization=`Bearer ${v}`);const R=await fetch(`/api/features/admin/${encodeURIComponent(k)}`,{method:"DELETE",headers:S});if(!R.ok){const N=await R.json().catch(()=>({}));throw new Error(N.error||`HTTP ${R.status}`)}return await h(),!0}catch(S){return d(S instanceof Error?S.message:String(S)),!1}},[h]);return i.useEffect(()=>{h()},[h]),{features:r,microfrontends:u,isAdmin:g,isLoading:_,error:y,refetch:h,createFeature:c,updateFeature:w,toggleFeature:E,deleteFeature:I}}function Zt(){const t=q(),[r,o]=i.useState([]),[u,l]=i.useState(0),[g,n]=i.useState(!0),[_,f]=i.useState(null),y=i.useCallback(async()=>{if(!t.isAuthenticated){n(!1);return}n(!0),f(null);try{const d={"Content-Type":"application/json"},h=t.user?.access_token;h&&(d.Authorization=`Bearer ${h}`);const c=await fetch("/api/features/microfrontends",{headers:d});if(!c.ok)throw new Error(`HTTP ${c.status}: ${c.statusText}`);const w=await c.json();o(w.microfrontends||[]),l(w.totalCount||0)}catch(d){f(d instanceof Error?d.message:String(d))}finally{n(!1)}},[t.isAuthenticated,t.user?.access_token]);return i.useEffect(()=>{y()},[y]),{microfrontends:r,totalCount:u,isLoading:g,error:_,refetch:y}}var ne={exports:{}},Y={};var Ye;function Qt(){if(Ye)return Y;Ye=1;var t=i,r=Symbol.for("react.element"),o=Symbol.for("react.fragment"),u=Object.prototype.hasOwnProperty,l=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,g={key:!0,ref:!0,__self:!0,__source:!0};function n(_,f,y){var d,h={},c=null,w=null;y!==void 0&&(c=""+y),f.key!==void 0&&(c=""+f.key),f.ref!==void 0&&(w=f.ref);for(d in f)u.call(f,d)&&!g.hasOwnProperty(d)&&(h[d]=f[d]);if(_&&_.defaultProps)for(d in f=_.defaultProps,f)h[d]===void 0&&(h[d]=f[d]);return{$$typeof:r,type:_,key:c,ref:w,props:h,_owner:l.current}}return Y.Fragment=o,Y.jsx=n,Y.jsxs=n,Y}var J={};var Je;function er(){return Je||(Je=1,process.env.NODE_ENV!=="production"&&(function(){var t=i,r=Symbol.for("react.element"),o=Symbol.for("react.portal"),u=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),g=Symbol.for("react.profiler"),n=Symbol.for("react.provider"),_=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),y=Symbol.for("react.suspense"),d=Symbol.for("react.suspense_list"),h=Symbol.for("react.memo"),c=Symbol.for("react.lazy"),w=Symbol.for("react.offscreen"),E=Symbol.iterator,I="@@iterator";function k(e){if(e===null||typeof e!="object")return null;var s=E&&e[E]||e[I];return typeof s=="function"?s:null}var S=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function v(e){{for(var s=arguments.length,a=new Array(s>1?s-1:0),p=1;p<s;p++)a[p-1]=arguments[p];R("error",e,a)}}function R(e,s,a){{var p=S.ReactDebugCurrentFrame,C=p.getStackAddendum();C!==""&&(s+="%s",a=a.concat([C]));var A=a.map(function(x){return String(x)});A.unshift("Warning: "+s),Function.prototype.apply.call(console[e],console,A)}}var N=!1,j=!1,$=!1,ut=!1,ct=!1,ye;ye=Symbol.for("react.module.reference");function lt(e){return!!(typeof e=="string"||typeof e=="function"||e===u||e===g||ct||e===l||e===y||e===d||ut||e===w||N||j||$||typeof e=="object"&&e!==null&&(e.$$typeof===c||e.$$typeof===h||e.$$typeof===n||e.$$typeof===_||e.$$typeof===f||e.$$typeof===ye||e.getModuleId!==void 0))}function ft(e,s,a){var p=e.displayName;if(p)return p;var C=s.displayName||s.name||"";return C!==""?a+"("+C+")":a}function we(e){return e.displayName||"Context"}function U(e){if(e==null)return null;if(typeof e.tag=="number"&&v("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case u:return"Fragment";case o:return"Portal";case g:return"Profiler";case l:return"StrictMode";case y:return"Suspense";case d:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case _:var s=e;return we(s)+".Consumer";case n:var a=e;return we(a._context)+".Provider";case f:return ft(e,e.render,"ForwardRef");case h:var p=e.displayName||null;return p!==null?p:U(e.type)||"Memo";case c:{var C=e,A=C._payload,x=C._init;try{return U(x(A))}catch{return null}}}return null}var V=Object.assign,H=0,be,xe,Se,Ce,Ae,ke,Re;function Te(){}Te.__reactDisabledLog=!0;function dt(){{if(H===0){be=console.log,xe=console.info,Se=console.warn,Ce=console.error,Ae=console.group,ke=console.groupCollapsed,Re=console.groupEnd;var e={configurable:!0,enumerable:!0,value:Te,writable:!0};Object.defineProperties(console,{info:e,log:e,warn:e,error:e,group:e,groupCollapsed:e,groupEnd:e})}H++}}function pt(){{if(H--,H===0){var e={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:V({},e,{value:be}),info:V({},e,{value:xe}),warn:V({},e,{value:Se}),error:V({},e,{value:Ce}),group:V({},e,{value:Ae}),groupCollapsed:V({},e,{value:ke}),groupEnd:V({},e,{value:Re})})}H<0&&v("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var ae=S.ReactCurrentDispatcher,ie;function Z(e,s,a){{if(ie===void 0)try{throw Error()}catch(C){var p=C.stack.trim().match(/\n( *(at )?)/);ie=p&&p[1]||""}return`
|
|
2
|
+
`+ie+e}}var ue=!1,Q;{var gt=typeof WeakMap=="function"?WeakMap:Map;Q=new gt}function Me(e,s){if(!e||ue)return"";{var a=Q.get(e);if(a!==void 0)return a}var p;ue=!0;var C=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var A;A=ae.current,ae.current=null,dt();try{if(s){var x=function(){throw Error()};if(Object.defineProperty(x.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(x,[])}catch(O){p=O}Reflect.construct(e,[],x)}else{try{x.call()}catch(O){p=O}e.call(x.prototype)}}else{try{throw Error()}catch(O){p=O}e()}}catch(O){if(O&&p&&typeof O.stack=="string"){for(var b=O.stack.split(`
|
|
3
|
+
`),P=p.stack.split(`
|
|
4
|
+
`),T=b.length-1,M=P.length-1;T>=1&&M>=0&&b[T]!==P[M];)M--;for(;T>=1&&M>=0;T--,M--)if(b[T]!==P[M]){if(T!==1||M!==1)do if(T--,M--,M<0||b[T]!==P[M]){var F=`
|
|
5
|
+
`+b[T].replace(" at new "," at ");return e.displayName&&F.includes("<anonymous>")&&(F=F.replace("<anonymous>",e.displayName)),typeof e=="function"&&Q.set(e,F),F}while(T>=1&&M>=0);break}}}finally{ue=!1,ae.current=A,pt(),Error.prepareStackTrace=C}var z=e?e.displayName||e.name:"",B=z?Z(z):"";return typeof e=="function"&&Q.set(e,B),B}function ht(e,s,a){return Me(e,!1)}function mt(e){var s=e.prototype;return!!(s&&s.isReactComponent)}function ee(e,s,a){if(e==null)return"";if(typeof e=="function")return Me(e,mt(e));if(typeof e=="string")return Z(e);switch(e){case y:return Z("Suspense");case d:return Z("SuspenseList")}if(typeof e=="object")switch(e.$$typeof){case f:return ht(e.render);case h:return ee(e.type,s,a);case c:{var p=e,C=p._payload,A=p._init;try{return ee(A(C),s,a)}catch{}}}return""}var G=Object.prototype.hasOwnProperty,Ie={},Ne=S.ReactDebugCurrentFrame;function te(e){if(e){var s=e._owner,a=ee(e.type,e._source,s?s.type:null);Ne.setExtraStackFrame(a)}else Ne.setExtraStackFrame(null)}function _t(e,s,a,p,C){{var A=Function.call.bind(G);for(var x in e)if(A(e,x)){var b=void 0;try{if(typeof e[x]!="function"){var P=Error((p||"React class")+": "+a+" type `"+x+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof e[x]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw P.name="Invariant Violation",P}b=e[x](s,x,p,a,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(T){b=T}b&&!(b instanceof Error)&&(te(C),v("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",p||"React class",a,x,typeof b),te(null)),b instanceof Error&&!(b.message in Ie)&&(Ie[b.message]=!0,te(C),v("Failed %s type: %s",a,b.message),te(null))}}}var vt=Array.isArray;function ce(e){return vt(e)}function Et(e){{var s=typeof Symbol=="function"&&Symbol.toStringTag,a=s&&e[Symbol.toStringTag]||e.constructor.name||"Object";return a}}function yt(e){try{return je(e),!1}catch{return!0}}function je(e){return""+e}function Pe(e){if(yt(e))return v("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",Et(e)),je(e)}var Oe=S.ReactCurrentOwner,wt={key:!0,ref:!0,__self:!0,__source:!0},Fe,De;function bt(e){if(G.call(e,"ref")){var s=Object.getOwnPropertyDescriptor(e,"ref").get;if(s&&s.isReactWarning)return!1}return e.ref!==void 0}function xt(e){if(G.call(e,"key")){var s=Object.getOwnPropertyDescriptor(e,"key").get;if(s&&s.isReactWarning)return!1}return e.key!==void 0}function St(e,s){typeof e.ref=="string"&&Oe.current}function Ct(e,s){{var a=function(){Fe||(Fe=!0,v("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",s))};a.isReactWarning=!0,Object.defineProperty(e,"key",{get:a,configurable:!0})}}function At(e,s){{var a=function(){De||(De=!0,v("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",s))};a.isReactWarning=!0,Object.defineProperty(e,"ref",{get:a,configurable:!0})}}var kt=function(e,s,a,p,C,A,x){var b={$$typeof:r,type:e,key:s,ref:a,props:x,_owner:A};return b._store={},Object.defineProperty(b._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(b,"_self",{configurable:!1,enumerable:!1,writable:!1,value:p}),Object.defineProperty(b,"_source",{configurable:!1,enumerable:!1,writable:!1,value:C}),Object.freeze&&(Object.freeze(b.props),Object.freeze(b)),b};function Rt(e,s,a,p,C){{var A,x={},b=null,P=null;a!==void 0&&(Pe(a),b=""+a),xt(s)&&(Pe(s.key),b=""+s.key),bt(s)&&(P=s.ref,St(s,C));for(A in s)G.call(s,A)&&!wt.hasOwnProperty(A)&&(x[A]=s[A]);if(e&&e.defaultProps){var T=e.defaultProps;for(A in T)x[A]===void 0&&(x[A]=T[A])}if(b||P){var M=typeof e=="function"?e.displayName||e.name||"Unknown":e;b&&Ct(x,M),P&&At(x,M)}return kt(e,b,P,C,p,Oe.current,x)}}var le=S.ReactCurrentOwner,$e=S.ReactDebugCurrentFrame;function W(e){if(e){var s=e._owner,a=ee(e.type,e._source,s?s.type:null);$e.setExtraStackFrame(a)}else $e.setExtraStackFrame(null)}var fe;fe=!1;function de(e){return typeof e=="object"&&e!==null&&e.$$typeof===r}function Le(){{if(le.current){var e=U(le.current.type);if(e)return`
|
|
6
6
|
|
|
7
|
-
Check the render method of \``+e+"`."}return""}}function
|
|
7
|
+
Check the render method of \``+e+"`."}return""}}function Tt(e){return""}var Ue={};function Mt(e){{var s=Le();if(!s){var a=typeof e=="string"?e:e.displayName||e.name;a&&(s=`
|
|
8
8
|
|
|
9
|
-
Check the top-level render call using <`+a+">.")}return
|
|
9
|
+
Check the top-level render call using <`+a+">.")}return s}}function Ve(e,s){{if(!e._store||e._store.validated||e.key!=null)return;e._store.validated=!0;var a=Mt(s);if(Ue[a])return;Ue[a]=!0;var p="";e&&e._owner&&e._owner!==le.current&&(p=" It was passed a child from "+U(e._owner.type)+"."),W(e),v('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',a,p),W(null)}}function Be(e,s){{if(typeof e!="object")return;if(ce(e))for(var a=0;a<e.length;a++){var p=e[a];de(p)&&Ve(p,s)}else if(de(e))e._store&&(e._store.validated=!0);else if(e){var C=k(e);if(typeof C=="function"&&C!==e.entries)for(var A=C.call(e),x;!(x=A.next()).done;)de(x.value)&&Ve(x.value,s)}}}function It(e){{var s=e.type;if(s==null||typeof s=="string")return;var a;if(typeof s=="function")a=s.propTypes;else if(typeof s=="object"&&(s.$$typeof===f||s.$$typeof===h))a=s.propTypes;else return;if(a){var p=U(s);_t(a,e.props,"prop",p,e)}else if(s.PropTypes!==void 0&&!fe){fe=!0;var C=U(s);v("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",C||"Unknown")}typeof s.getDefaultProps=="function"&&!s.getDefaultProps.isReactClassApproved&&v("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}function Nt(e){{for(var s=Object.keys(e.props),a=0;a<s.length;a++){var p=s[a];if(p!=="children"&&p!=="key"){W(e),v("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",p),W(null);break}}e.ref!==null&&(W(e),v("Invalid attribute `ref` supplied to `React.Fragment`."),W(null))}}var We={};function ze(e,s,a,p,C,A){{var x=lt(e);if(!x){var b="";(e===void 0||typeof e=="object"&&e!==null&&Object.keys(e).length===0)&&(b+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var P=Tt();P?b+=P:b+=Le();var T;e===null?T="null":ce(e)?T="array":e!==void 0&&e.$$typeof===r?(T="<"+(U(e.type)||"Unknown")+" />",b=" Did you accidentally export a JSX literal instead of a component?"):T=typeof e,v("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",T,b)}var M=Rt(e,s,a,C,A);if(M==null)return M;if(x){var F=s.children;if(F!==void 0)if(p)if(ce(F)){for(var z=0;z<F.length;z++)Be(F[z],e);Object.freeze&&Object.freeze(F)}else v("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else Be(F,e)}if(G.call(s,"key")){var B=U(e),O=Object.keys(s).filter(function($t){return $t!=="key"}),pe=O.length>0?"{key: someKey, "+O.join(": ..., ")+": ...}":"{key: someKey}";if(!We[B+pe]){var Dt=O.length>0?"{"+O.join(": ..., ")+": ...}":"{}";v(`A props object containing a "key" prop is being spread into JSX:
|
|
10
10
|
let props = %s;
|
|
11
11
|
<%s {...props} />
|
|
12
12
|
React keys must be passed directly to JSX without using spread:
|
|
13
13
|
let props = %s;
|
|
14
|
-
<%s key={someKey} {...props} />`,
|
|
14
|
+
<%s key={someKey} {...props} />`,pe,B,Dt,B),We[B+pe]=!0}}return e===u?Nt(M):It(M),M}}function jt(e,s,a){return ze(e,s,a,!0)}function Pt(e,s,a){return ze(e,s,a,!1)}var Ot=Pt,Ft=jt;J.Fragment=u,J.jsx=Ot,J.jsxs=Ft})()),J}var qe;function tr(){return qe||(qe=1,process.env.NODE_ENV==="production"?ne.exports=Qt():ne.exports=er()),ne.exports}var m=tr();const et="platform-kit",rr=!1,he={log:(...t)=>{},warn:(...t)=>{},error:(...t)=>{console.error(`[${et}]`,...t)}};class nr extends i.Component{hasDispatched=!1;constructor(r){super(r),this.state={hasError:!1}}getMfeName(){if(this.props.mfeName)return this.props.mfeName;if(typeof window<"u"){const r=window;if(r.__MF_NAME__)return r.__MF_NAME__}return et}shouldShowDetails(){if(this.props.showDetails!==void 0)return this.props.showDetails;if(typeof sessionStorage<"u")try{const r=sessionStorage.getItem("config");if(r){const o=JSON.parse(r);if(o.showErrorDetails!==void 0)return o.showErrorDetails}}catch{}return rr}dispatchError(r,o){if(this.hasDispatched||typeof window>"u")return;this.hasDispatched=!0;const u=this.getMfeName();he.error("ErrorBoundary caught:",r);try{window.dispatchEvent(new CustomEvent("mfe-error",{detail:{mfeName:u,error:r.message||String(r),stack:r.stack,componentStack:o?.componentStack,timestamp:Date.now()},bubbles:!0}))}catch(l){he.error("Failed to dispatch mfe-error event:",l)}}static getDerivedStateFromError(r){return{hasError:!0,error:r}}componentDidCatch(r,o){this.dispatchError(r,o),he.error("Error info:",o.componentStack)}handleCopy=()=>{const r=`Error in ${this.getMfeName()}:
|
|
15
15
|
${this.state.error?.message}
|
|
16
|
-
${this.state.error?.stack}`;typeof navigator<"u"&&navigator.clipboard&&navigator.clipboard.writeText(r).then(()=>{alert("Ошибка скопирована в буфер обмена")}).catch(()=>{prompt("Скопируйте ошибку:",r)})};handleRetry=()=>{this.setState({hasError:!1,error:void 0}),this.hasDispatched=!1,typeof window<"u"&&window.location.reload()};handleGoHome=()=>{typeof window<"u"&&(window.location.href="/")};render(){if(this.state.hasError){const r=this.state.error?.message||"Unknown error",o=this.state.error?.stack||"",u=this.shouldShowDetails(),
|
|
16
|
+
${this.state.error?.stack}`;typeof navigator<"u"&&navigator.clipboard&&navigator.clipboard.writeText(r).then(()=>{alert("Ошибка скопирована в буфер обмена")}).catch(()=>{prompt("Скопируйте ошибку:",r)})};handleRetry=()=>{this.setState({hasError:!1,error:void 0}),this.hasDispatched=!1,typeof window<"u"&&window.location.reload()};handleGoHome=()=>{typeof window<"u"&&(window.location.href="/")};render(){if(this.state.hasError){const r=this.state.error?.message||"Unknown error",o=this.state.error?.stack||"",u=this.shouldShowDetails(),l=this.getMfeName();return m.jsxs("div",{style:{padding:"20px",textAlign:"center",color:"#d32f2f",fontFamily:"monospace",background:"#ffebee",border:"1px solid #ef5350",borderRadius:"4px",margin:"10px"},children:[m.jsxs("h2",{style:{fontSize:"16px",margin:"0 0 8px 0"},children:["⚠️ Ошибка в ",l]}),m.jsx("p",{style:{fontSize:"12px",margin:0},children:"Произошла ошибка в микрофронтенде. Сообщение отправлено в shell."}),u&&m.jsxs("details",{style:{whiteSpace:"pre-wrap",textAlign:"left",marginTop:"10px",background:"#fff",padding:"8px",borderRadius:"4px"},children:[m.jsx("summary",{style:{cursor:"pointer",fontWeight:"bold"},children:"Детали ошибки"}),m.jsxs("pre",{style:{fontSize:"11px",overflow:"auto",maxHeight:"150px",margin:"8px 0 0 0",padding:"8px",background:"#f5f5f5",borderRadius:"4px"},children:[r,o&&`
|
|
17
17
|
|
|
18
|
-
${o}`]})]}),d.jsxs("div",{style:{marginTop:"12px",display:"flex",gap:"8px",justifyContent:"center"},children:[d.jsx("button",{onClick:this.handleCopy,style:{padding:"8px 12px",background:"#666",color:"white",border:"none",borderRadius:"4px",cursor:"pointer"},children:"📋 Копировать"}),d.jsx("button",{onClick:this.handleRetry,style:{padding:"8px 12px",background:"#d32f2f",color:"white",border:"none",borderRadius:"4px",cursor:"pointer"},children:"🔄 Обновить"}),d.jsx("button",{onClick:this.handleGoHome,style:{padding:"8px 12px",background:"#1976d2",color:"white",border:"none",borderRadius:"4px",cursor:"pointer"},children:"🏠 На главную"})]})]})}return this.props.children==null?null:this.props.children}}const T={info:"ℹ️",code:"💻",link:"🔗",user:"👤",clock:"🕐",apps:"📦",storage:"💾",tags:"🏷️",spreadsheet:"📊"};function qt({mfeName:t}){const{data:r,isLoading:o,error:u}=Ye({mfeName:t}),[s,f]=m.useState(!1);if(o)return d.jsxs("span",{className:"text-muted small me-2",children:[d.jsx("span",{className:"me-1",children:"⏳"}),"Загрузка..."]});if(u||!r)return d.jsxs("span",{className:"text-muted small me-2",title:`Ошибка: ${u||"нет данных"}`,children:[d.jsx("span",{className:"me-1",children:"ℹ️"}),"N/A"]});const i=r,b=i.BUILD_VERSION||i.IMAGE_VERSION||i.APP_NAME||"N/A",p=[];return i.APP_NAME&&p.push({key:"APP_NAME",value:i.APP_NAME,label:"Приложение",icon:T.apps}),i.BUILD_VERSION&&p.push({key:"BUILD_VERSION",value:i.BUILD_VERSION,label:"Версия",icon:T.tags}),i.IMAGE_VERSION&&p.push({key:"IMAGE_VERSION",value:i.IMAGE_VERSION,label:"Образ",icon:T.storage}),i.GIT_COMMIT&&p.push({key:"GIT_COMMIT",value:i.GIT_COMMIT,label:"Commit",icon:T.spreadsheet}),i.GIT_BRANCH&&p.push({key:"GIT_BRANCH",value:i.GIT_BRANCH,label:"Ветка",icon:T.spreadsheet}),i.CI_COMMIT_AUTHOR&&p.push({key:"CI_COMMIT_AUTHOR",value:i.CI_COMMIT_AUTHOR,label:"Автор",icon:T.user}),i.CI_COMMIT_TIMESTAMP&&p.push({key:"CI_COMMIT_TIMESTAMP",value:i.CI_COMMIT_TIMESTAMP,label:"Дата",icon:T.clock}),i.CI_JOB_URL&&p.push({key:"CI_JOB_URL",value:i.CI_JOB_URL,label:"CI Job",icon:T.link}),i.CI_PIPELINE_URL&&p.push({key:"CI_PIPELINE_URL",value:i.CI_PIPELINE_URL,label:"Pipeline",icon:T.link}),i.CI_COMMIT_MESSAGE&&(i.CI_COMMIT_MESSAGE.length>60?i.CI_COMMIT_MESSAGE.substring(0,57)+"":i.CI_COMMIT_MESSAGE,p.push({key:"CI_COMMIT_MESSAGE",value:i.CI_COMMIT_MESSAGE,label:"Сообщение",icon:T.code})),d.jsxs("div",{style:{display:"inline-block",position:"relative"},children:[d.jsxs("button",{onClick:()=>f(!s),style:{background:"transparent",border:"none",cursor:"pointer",padding:"4px 8px",fontSize:"14px",display:"inline-flex",alignItems:"center"},title:"Информация о версии",children:[d.jsx("span",{className:"me-1",children:T.info}),d.jsx("span",{className:"text-dark",children:b})]}),s&&d.jsxs("div",{style:{position:"absolute",top:"100%",right:0,zIndex:1e3,minWidth:"300px",background:"white",border:"1px solid #dee2e6",borderRadius:"8px",boxShadow:"0 4px 12px rgba(0,0,0,0.15)",padding:"16px",marginTop:"4px"},children:[d.jsxs("div",{style:{marginBottom:"12px",paddingBottom:"8px",borderBottom:"1px solid #dee2e6",display:"flex",alignItems:"center"},children:[d.jsx("span",{className:"me-2",children:T.apps}),d.jsx("strong",{children:i.APP_NAME||t})]}),d.jsxs("div",{style:{marginBottom:"12px"},children:[d.jsx("span",{className:"text-muted",children:"Версия: "}),d.jsx("strong",{children:b})]}),p.length>0&&d.jsx("div",{style:{fontSize:"13px"},children:p.map(({key:y,value:g,label:S,icon:l})=>{const v=g.length>40&&(y.includes("URL")||y.includes("MESSAGE"))?`${g.substring(0,37)}...`:g;return d.jsxs("div",{style:{marginBottom:"8px",display:"flex",alignItems:"flex-start"},children:[d.jsx("span",{className:"me-2",style:{flexShrink:0},children:l}),d.jsxs("div",{style:{flex:1,minWidth:0},children:[d.jsx("div",{className:"small text-muted",children:S}),d.jsx("div",{className:"font-monospace small text-truncate",style:{maxWidth:"100%"},title:g,children:y.includes("URL")?d.jsx("a",{href:g,target:"_blank",rel:"noopener noreferrer",style:{color:"#007bff"},children:v}):v})]})]},y)})}),p.length===0&&d.jsx("div",{className:"text-center text-muted py-2 small",children:"Нет информации о версии"}),d.jsx("div",{style:{marginTop:"12px",paddingTop:"8px",borderTop:"1px solid #dee2e6",textAlign:"center",fontSize:"12px",color:"#6c757d"},children:"IngoBank DevOps Platform"}),d.jsx("button",{onClick:()=>f(!1),style:{position:"absolute",top:"8px",right:"8px",background:"transparent",border:"none",cursor:"pointer",fontSize:"16px",color:"#6c757d"},children:"×"})]}),s&&d.jsx("div",{onClick:()=>f(!1),style:{position:"fixed",top:0,left:0,right:0,bottom:0,zIndex:999}})]})}const de="platform-kit",Ke=m.createContext(null);function Kt({children:t}){const[r,o]=m.useState([]),u=typeof window<"u"&&window.__MF_NAME__||de,s=m.useCallback((l,v,C,k)=>({id:`${Date.now()}-${Math.random().toString(36).substr(2,9)}`,type:l,title:v,message:C,mfeName:u,timestamp:Date.now(),duration:k}),[u]),f=m.useCallback(l=>{o(C=>[...C,l].slice(0,5));const v=l.duration||5e3;v>0&&setTimeout(()=>{o(C=>C.filter(k=>k.id!==l.id))},v)},[]),i=m.useCallback(l=>{const v=s(l.type,l.title,l.message,l.duration);f(v),typeof window<"u"&&window.dispatchEvent(new CustomEvent("mfe-notification",{detail:v,bubbles:!0}))},[s,f]),b=m.useCallback((l,v="Успешно")=>{i({type:"success",title:v,message:l})},[i]),p=m.useCallback((l,v="Ошибка")=>{i({type:"error",title:v,message:l})},[i]),y=m.useCallback((l,v="Предупреждение")=>{i({type:"warning",title:v,message:l})},[i]),g=m.useCallback((l,v="Информация")=>{i({type:"info",title:v,message:l})},[i]),S=m.useCallback(l=>{o(v=>v.filter(C=>C.id!==l))},[]);return m.useEffect(()=>{if(typeof window>"u")return;const l=v=>{const C=v.detail;if(C&&C.type&&C.title&&C.message){const k={...C,id:`${Date.now()}-${Math.random().toString(36).substr(2,9)}`};f(k)}};return window.addEventListener("mfe-notification",l),()=>{window.removeEventListener("mfe-notification",l)}},[f]),d.jsxs(Ke.Provider,{value:{notify:i,notifySuccess:b,notifyError:p,notifyWarning:y,notifyInfo:g,removeNotification:S},children:[t,r.length>0&&d.jsx("div",{style:{position:"fixed",top:"80px",right:"20px",zIndex:9998,maxWidth:"400px",width:"100%",display:"flex",flexDirection:"column",gap:"8px",pointerEvents:"none"},children:r.map(l=>d.jsxs("div",{className:`notification notification-${l.type}`,style:{pointerEvents:"auto",padding:"12px 16px",borderRadius:"8px",background:l.type==="success"?"#d4edda":l.type==="error"?"#f8d7da":l.type==="warning"?"#fff3cd":"#d1ecf1",color:l.type==="success"?"#155724":l.type==="error"?"#721c24":l.type==="warning"?"#856404":"#0c5460",boxShadow:"0 4px 12px rgba(0,0,0,0.15)",display:"flex",alignItems:"flex-start",gap:"12px"},children:[d.jsxs("div",{style:{flex:1},children:[d.jsx("strong",{style:{display:"block",marginBottom:"4px"},children:l.title}),d.jsx("p",{style:{margin:0,fontSize:"14px"},children:l.message}),d.jsx("small",{style:{opacity:.7,fontSize:"12px"},children:l.mfeName})]}),d.jsx("button",{onClick:()=>S(l.id),style:{background:"transparent",border:"none",cursor:"pointer",fontSize:"18px",lineHeight:1,opacity:.5},children:"×"})]},l.id))})]})}function Xt(){const t=m.useContext(Ke);return t||{notify:()=>{},notifySuccess:()=>{},notifyError:()=>{},notifyWarning:()=>{},notifyInfo:()=>{},removeNotification:()=>{}}}function Zt(t){if(typeof window>"u")return;const r=window.__MF_NAME__||de,o={...t,mfeName:r,timestamp:Date.now()};window.dispatchEvent(new CustomEvent("mfe-notification",{detail:o,bubbles:!0}))}const Xe="platform-kit",H={log:(...t)=>{},warn:(...t)=>{},error:(...t)=>{console.error(`[${Xe}]`,...t)},info:(...t)=>{}};function Qt(){if(typeof window>"u")return{isAuthenticated:!1};const t=window.__SHELL_AUTH_INSTANCE__;if(t)return t;const r=window.__SHELL_AUTH__;return r?.authInstance?r.authInstance:{isAuthenticated:!1}}function er(){if(typeof window>"u")return;const t=window.__SHELL_AUTH_INSTANCE__;t?.signinRedirect?t.signinRedirect().catch(r=>{H.error("Failed to redirect to login:",r)}):window.location.href="/"}function tr(t){const r=t.response;let o="unknown";return r?r.status===401?o="unauthorized":r.status===403?o="forbidden":r.status===404?o="not_found":r.status>=500&&(o="server"):o="network",{message:r?.data?.message??t.message??"Unknown error",code:r?.data?.code,status:r?.status,type:o,timestamp:Date.now(),url:t.config?.url}}function Ze(t={}){const r=t.name||Xe,o={log:(...s)=>H.log(`[API:${r}]`,...s),warn:(...s)=>H.warn(`[API:${r}]`,...s),error:(...s)=>H.error(`[API:${r}]`,...s),info:(...s)=>H.info(`[API:${r}]`,...s)},u=Ft.create({timeout:t.timeout??1e4,baseURL:t.baseURL??"",headers:{"Content-Type":"application/json"}});return u.interceptors.request.use(s=>{const f=Qt();if(f?.isAuthenticated){const i=f.user?.profile?.access_token;i&&s.headers&&(s.headers.Authorization=`Bearer ${i}`,o.info("Auth token attached"))}else o.info("User not authenticated - request without token");return o.log(`${s.method?.toUpperCase()} ${s.url}`),s},s=>(o.error("Request interceptor error:",s.message),Promise.reject(s))),u.interceptors.response.use(s=>(o.log(`Response ${s.status}:`,s.config.url),s),s=>{const f=s.response?.status,i=s.config?.url;return f===401?(o.warn("401 Unauthorized - triggering re-auth"),er()):f===403?o.warn("403 Forbidden - insufficient permissions"):f===404?o.warn("404 Not found:",i):f===429?o.warn("429 Rate limited"):f===500?o.error("500 Server error:",i):s.response?o.warn(`Error ${f}:`,s.message):o.error("Network error - backend may be unavailable:",i),Promise.reject(tr(s))}),u}const G=Ze();async function rr(t,r,o=G){const u=await o.get(t,{params:r});return{data:u.data,status:u.status,ok:u.status>=200&&u.status<300}}async function nr(t,r,o=G){const u=await o.post(t,r);return{data:u.data,status:u.status,ok:u.status>=200&&u.status<300}}async function or(t,r,o=G){const u=await o.put(t,r);return{data:u.data,status:u.status,ok:u.status>=200&&u.status<300}}async function ar(t,r=G){const o=await r.delete(t);return{data:o.data,status:o.status,ok:o.status>=200&&o.status<300}}function z(t,r){const o=r?.prefix?`[${r.prefix}]`:`[${t}]`;return{log:(...u)=>{},warn:(...u)=>{},error:(...u)=>{console.error(o,...u)},info:(...u)=>{}}}const ir=z("platform-kit",{prefix:"AUTH"}),sr=z("platform-kit",{prefix:"API"}),ur=z("platform-kit",{prefix:"ERROR"}),lr=z("platform-kit",{prefix:"INFO"}),cr={},fr={log:(...t)=>{},warn:(...t)=>{},error:(...t)=>{console.error("[getMfeName]",...t)}};function ge(t){return t?t.mfeName?t.mfeName:t.name?t.name.replace("@ib-dop/",""):null:null}function Qe(){if(typeof window>"u")return null;const t=window;return t.__MF_NAME__?t.__MF_NAME__:null}function et(){if(typeof window>"u")return null;try{const t=sessionStorage.getItem("mf-config");if(t){const r=JSON.parse(t);if(r.mfeName)return r.mfeName;if(r.name)return r.name;if(r.appName)return r.appName}}catch{}return null}function me(){const t=cr;return t.VITE_MFE_NAME?String(t.VITE_MFE_NAME):t.MFE_NAME?String(t.MFE_NAME):null}let ee=null,pe=!1;function tt(t,r){const o=ge(t);if(o)return o;if(pe&&ee)return ee;const u=[{source:"window.__MF_NAME__",value:Qe()},{source:"sessionStorage.mf-config",value:et()},{source:"import.meta.env.VITE_MFE_NAME",value:me()}];for(const{source:f,value:i}of u)if(i)return ee=i,pe=!0,i;if(r)return r;const s="Cannot determine MFE name. Please pass mfeName in props, set window.__MF_NAME__, sessionStorage.mf-config, or VITE_MFE_NAME";throw fr.error(s),new Error(s)}function dr(t){return tt(t)}function rt(t){return ge(t)?"props.mfeName":Qe()?"window.__MF_NAME__":et()?"sessionStorage.mf-config":me()?"import.meta.env.VITE_MFE_NAME":null}function pr(t){return rt(t)!==null}function gr(){ee=null,pe=!1}function mr(t){const r=[];return ge(t)&&r.push("props.mfeName"),typeof window<"u"&&(window.__MF_NAME__&&r.push("window.__MF_NAME__"),sessionStorage.getItem("mf-config")&&r.push("sessionStorage.mf-config")),me()&&r.push("import.meta.env.VITE_MFE_NAME"),r}exports.ErrorBoundary=Jt;exports.NotificationProvider=Kt;exports.VersionInfo=qt;exports.api=G;exports.apiLogger=sr;exports.authLogger=ir;exports.createApiClient=Ze;exports.createMfLogger=z;exports.del=ar;exports.dispatchNotification=Zt;exports.errorLogger=ur;exports.get=rr;exports.getAllMfeNameSources=mr;exports.getAuth=Q;exports.getMfeName=tt;exports.getMfeNameSource=rt;exports.hasMfeName=pr;exports.infoLogger=lr;exports.post=nr;exports.put=or;exports.requireMfeName=dr;exports.resetMfeNameCache=gr;exports.useApi=Vt;exports.useInfoData=Ye;exports.useNotification=Xt;exports.usePermissions=Bt;exports.useShellAuth=ze;exports.useV1Config=Ut;
|
|
18
|
+
${o}`]})]}),m.jsxs("div",{style:{marginTop:"12px",display:"flex",gap:"8px",justifyContent:"center"},children:[m.jsx("button",{onClick:this.handleCopy,style:{padding:"8px 12px",background:"#666",color:"white",border:"none",borderRadius:"4px",cursor:"pointer"},children:"📋 Копировать"}),m.jsx("button",{onClick:this.handleRetry,style:{padding:"8px 12px",background:"#d32f2f",color:"white",border:"none",borderRadius:"4px",cursor:"pointer"},children:"🔄 Обновить"}),m.jsx("button",{onClick:this.handleGoHome,style:{padding:"8px 12px",background:"#1976d2",color:"white",border:"none",borderRadius:"4px",cursor:"pointer"},children:"🏠 На главную"})]})]})}return this.props.children==null?null:this.props.children}}const D={info:"ℹ️",code:"💻",link:"🔗",user:"👤",clock:"🕐",apps:"📦",storage:"💾",tags:"🏷️",spreadsheet:"📊"};function sr({mfeName:t}){const{data:r,isLoading:o,error:u}=Ze({mfeName:t}),[l,g]=i.useState(!1);if(o)return m.jsxs("span",{className:"text-muted small me-2",children:[m.jsx("span",{className:"me-1",children:"⏳"}),"Загрузка..."]});if(u||!r)return m.jsxs("span",{className:"text-muted small me-2",title:`Ошибка: ${u||"нет данных"}`,children:[m.jsx("span",{className:"me-1",children:"ℹ️"}),"N/A"]});const n=r,_=n.BUILD_VERSION||n.IMAGE_VERSION||n.APP_NAME||"N/A",f=[];return n.APP_NAME&&f.push({key:"APP_NAME",value:n.APP_NAME,label:"Приложение",icon:D.apps}),n.BUILD_VERSION&&f.push({key:"BUILD_VERSION",value:n.BUILD_VERSION,label:"Версия",icon:D.tags}),n.IMAGE_VERSION&&f.push({key:"IMAGE_VERSION",value:n.IMAGE_VERSION,label:"Образ",icon:D.storage}),n.GIT_COMMIT&&f.push({key:"GIT_COMMIT",value:n.GIT_COMMIT,label:"Commit",icon:D.spreadsheet}),n.GIT_BRANCH&&f.push({key:"GIT_BRANCH",value:n.GIT_BRANCH,label:"Ветка",icon:D.spreadsheet}),n.CI_COMMIT_AUTHOR&&f.push({key:"CI_COMMIT_AUTHOR",value:n.CI_COMMIT_AUTHOR,label:"Автор",icon:D.user}),n.CI_COMMIT_TIMESTAMP&&f.push({key:"CI_COMMIT_TIMESTAMP",value:n.CI_COMMIT_TIMESTAMP,label:"Дата",icon:D.clock}),n.CI_JOB_URL&&f.push({key:"CI_JOB_URL",value:n.CI_JOB_URL,label:"CI Job",icon:D.link}),n.CI_PIPELINE_URL&&f.push({key:"CI_PIPELINE_URL",value:n.CI_PIPELINE_URL,label:"Pipeline",icon:D.link}),n.CI_COMMIT_MESSAGE&&(n.CI_COMMIT_MESSAGE.length>60?n.CI_COMMIT_MESSAGE.substring(0,57)+"":n.CI_COMMIT_MESSAGE,f.push({key:"CI_COMMIT_MESSAGE",value:n.CI_COMMIT_MESSAGE,label:"Сообщение",icon:D.code})),m.jsxs("div",{style:{display:"inline-block",position:"relative"},children:[m.jsxs("button",{onClick:()=>g(!l),style:{background:"transparent",border:"none",cursor:"pointer",padding:"4px 8px",fontSize:"14px",display:"inline-flex",alignItems:"center"},title:"Информация о версии",children:[m.jsx("span",{className:"me-1",children:D.info}),m.jsx("span",{className:"text-dark",children:_})]}),l&&m.jsxs("div",{style:{position:"absolute",top:"100%",right:0,zIndex:1e3,minWidth:"300px",background:"white",border:"1px solid #dee2e6",borderRadius:"8px",boxShadow:"0 4px 12px rgba(0,0,0,0.15)",padding:"16px",marginTop:"4px"},children:[m.jsxs("div",{style:{marginBottom:"12px",paddingBottom:"8px",borderBottom:"1px solid #dee2e6",display:"flex",alignItems:"center"},children:[m.jsx("span",{className:"me-2",children:D.apps}),m.jsx("strong",{children:n.APP_NAME||t})]}),m.jsxs("div",{style:{marginBottom:"12px"},children:[m.jsx("span",{className:"text-muted",children:"Версия: "}),m.jsx("strong",{children:_})]}),f.length>0&&m.jsx("div",{style:{fontSize:"13px"},children:f.map(({key:y,value:d,label:h,icon:c})=>{const w=d.length>40&&(y.includes("URL")||y.includes("MESSAGE"))?`${d.substring(0,37)}...`:d;return m.jsxs("div",{style:{marginBottom:"8px",display:"flex",alignItems:"flex-start"},children:[m.jsx("span",{className:"me-2",style:{flexShrink:0},children:c}),m.jsxs("div",{style:{flex:1,minWidth:0},children:[m.jsx("div",{className:"small text-muted",children:h}),m.jsx("div",{className:"font-monospace small text-truncate",style:{maxWidth:"100%"},title:d,children:y.includes("URL")?m.jsx("a",{href:d,target:"_blank",rel:"noopener noreferrer",style:{color:"#007bff"},children:w}):w})]})]},y)})}),f.length===0&&m.jsx("div",{className:"text-center text-muted py-2 small",children:"Нет информации о версии"}),m.jsx("div",{style:{marginTop:"12px",paddingTop:"8px",borderTop:"1px solid #dee2e6",textAlign:"center",fontSize:"12px",color:"#6c757d"},children:"IngoBank DevOps Platform"}),m.jsx("button",{onClick:()=>g(!1),style:{position:"absolute",top:"8px",right:"8px",background:"transparent",border:"none",cursor:"pointer",fontSize:"16px",color:"#6c757d"},children:"×"})]}),l&&m.jsx("div",{onClick:()=>g(!1),style:{position:"fixed",top:0,left:0,right:0,bottom:0,zIndex:999}})]})}const me="platform-kit",tt=i.createContext(null);function or({children:t}){const[r,o]=i.useState([]),u=typeof window<"u"&&window.__MF_NAME__||me,l=i.useCallback((c,w,E,I)=>({id:`${Date.now()}-${Math.random().toString(36).substr(2,9)}`,type:c,title:w,message:E,mfeName:u,timestamp:Date.now(),duration:I}),[u]),g=i.useCallback(c=>{o(E=>[...E,c].slice(0,5));const w=c.duration||5e3;w>0&&setTimeout(()=>{o(E=>E.filter(I=>I.id!==c.id))},w)},[]),n=i.useCallback(c=>{const w=l(c.type,c.title,c.message,c.duration);g(w),typeof window<"u"&&window.dispatchEvent(new CustomEvent("mfe-notification",{detail:w,bubbles:!0}))},[l,g]),_=i.useCallback((c,w="Успешно")=>{n({type:"success",title:w,message:c})},[n]),f=i.useCallback((c,w="Ошибка")=>{n({type:"error",title:w,message:c})},[n]),y=i.useCallback((c,w="Предупреждение")=>{n({type:"warning",title:w,message:c})},[n]),d=i.useCallback((c,w="Информация")=>{n({type:"info",title:w,message:c})},[n]),h=i.useCallback(c=>{o(w=>w.filter(E=>E.id!==c))},[]);return i.useEffect(()=>{if(typeof window>"u")return;const c=w=>{const E=w.detail;if(E&&E.type&&E.title&&E.message){const I={...E,id:`${Date.now()}-${Math.random().toString(36).substr(2,9)}`};g(I)}};return window.addEventListener("mfe-notification",c),()=>{window.removeEventListener("mfe-notification",c)}},[g]),m.jsxs(tt.Provider,{value:{notify:n,notifySuccess:_,notifyError:f,notifyWarning:y,notifyInfo:d,removeNotification:h},children:[t,r.length>0&&m.jsx("div",{style:{position:"fixed",top:"80px",right:"20px",zIndex:9998,maxWidth:"400px",width:"100%",display:"flex",flexDirection:"column",gap:"8px",pointerEvents:"none"},children:r.map(c=>m.jsxs("div",{className:`notification notification-${c.type}`,style:{pointerEvents:"auto",padding:"12px 16px",borderRadius:"8px",background:c.type==="success"?"#d4edda":c.type==="error"?"#f8d7da":c.type==="warning"?"#fff3cd":"#d1ecf1",color:c.type==="success"?"#155724":c.type==="error"?"#721c24":c.type==="warning"?"#856404":"#0c5460",boxShadow:"0 4px 12px rgba(0,0,0,0.15)",display:"flex",alignItems:"flex-start",gap:"12px"},children:[m.jsxs("div",{style:{flex:1},children:[m.jsx("strong",{style:{display:"block",marginBottom:"4px"},children:c.title}),m.jsx("p",{style:{margin:0,fontSize:"14px"},children:c.message}),m.jsx("small",{style:{opacity:.7,fontSize:"12px"},children:c.mfeName})]}),m.jsx("button",{onClick:()=>h(c.id),style:{background:"transparent",border:"none",cursor:"pointer",fontSize:"18px",lineHeight:1,opacity:.5},children:"×"})]},c.id))})]})}function ar(){const t=i.useContext(tt);return t||{notify:()=>{},notifySuccess:()=>{},notifyError:()=>{},notifyWarning:()=>{},notifyInfo:()=>{},removeNotification:()=>{}}}function ir(t){if(typeof window>"u")return;const r=window.__MF_NAME__||me,o={...t,mfeName:r,timestamp:Date.now()};window.dispatchEvent(new CustomEvent("mfe-notification",{detail:o,bubbles:!0}))}const rt="platform-kit",se={log:(...t)=>{},warn:(...t)=>{},error:(...t)=>{console.error(`[${rt}]`,...t)},info:(...t)=>{}};function ur(t){const r=t.response;let o="unknown";return r?r.status===401?o="unauthorized":r.status===403?o="forbidden":r.status===404?o="not_found":r.status>=500&&(o="server"):o="network",{message:r?.data?.message??t.message??"Unknown error",code:r?.data?.code,status:r?.status,type:o,timestamp:Date.now(),url:t.config?.url}}const cr=3,lr=1e3;function fr(t){return!t||t>=500||t===429}function dr(t){return new Promise(r=>setTimeout(r,t))}function nt(t={}){const r=t.name||rt,o=t.retries??cr,u=t.retryDelay??lr,l={log:(...n)=>se.log(`[API:${r}]`,...n),warn:(...n)=>se.warn(`[API:${r}]`,...n),error:(...n)=>se.error(`[API:${r}]`,...n),info:(...n)=>se.info(`[API:${r}]`,...n)},g=Lt.create({timeout:t.timeout??1e4,baseURL:t.baseURL??"",headers:{"Content-Type":"application/json"}});return g.interceptors.request.use(n=>{const _=Ke();if(_?.isAuthenticated){const f=_.user?.profile?.access_token;f&&n.headers&&(n.headers.Authorization=`Bearer ${f}`,l.info("Auth token attached"))}else l.info("User not authenticated - request without token");return l.log(`${n.method?.toUpperCase()} ${n.url}`),n},n=>(l.error("Request interceptor error:",n.message),Promise.reject(n))),g.interceptors.response.use(n=>(l.log(`Response ${n.status}:`,n.config.url),n),async n=>{const _=n.response?.status,f=n.config?.url,y=n.config?._retryCount??0;if(fr(_)&&y<o){const d=n.config;d._retryCount=y+1;const h=u*Math.pow(2,y);return l.warn(`Retrying (${d._retryCount}/${o}) after ${h}ms:`,f),await dr(h),g.request(d)}return _===401?(l.warn("401 Unauthorized - triggering re-auth"),Xe()):_===403?l.warn("403 Forbidden - insufficient permissions"):_===404?l.warn("404 Not found:",f):_===429?l.warn("429 Rate limited"):_===500?l.error("500 Server error:",f):n.response?l.warn(`Error ${_}:`,n.message):l.error("Network error - backend may be unavailable:",f),Promise.reject(ur(n))}),g}const K=nt();async function pr(t,r,o=K){const u=await o.get(t,{params:r});return{data:u.data,status:u.status,ok:u.status>=200&&u.status<300}}async function gr(t,r,o=K){const u=await o.post(t,r);return{data:u.data,status:u.status,ok:u.status>=200&&u.status<300}}async function hr(t,r,o=K){const u=await o.put(t,r);return{data:u.data,status:u.status,ok:u.status>=200&&u.status<300}}async function mr(t,r=K){const o=await r.delete(t);return{data:o.data,status:o.status,ok:o.status>=200&&o.status<300}}function X(t,r){const o=r?.prefix?`[${r.prefix}]`:`[${t}]`;return{log:(...u)=>{},warn:(...u)=>{},error:(...u)=>{console.error(o,...u)},info:(...u)=>{}}}const _r=X("platform-kit",{prefix:"AUTH"}),vr=X("platform-kit",{prefix:"API"}),Er=X("platform-kit",{prefix:"ERROR"}),yr=X("platform-kit",{prefix:"INFO"}),wr={},br={log:(...t)=>{},warn:(...t)=>{},error:(...t)=>{console.error("[getMfeName]",...t)}};function ve(t){return t?t.mfeName?t.mfeName:t.name?t.name.replace("@ib-dop/",""):null:null}function st(){if(typeof window>"u")return null;const t=window;return t.__MF_NAME__?t.__MF_NAME__:null}function ot(){if(typeof window>"u")return null;try{const t=sessionStorage.getItem("mf-config");if(t){const r=JSON.parse(t);if(r.mfeName)return r.mfeName;if(r.name)return r.name;if(r.appName)return r.appName}}catch{}return null}function Ee(){const t=wr;return t.VITE_MFE_NAME?String(t.VITE_MFE_NAME):t.MFE_NAME?String(t.MFE_NAME):null}let oe=null,_e=!1;function at(t,r){const o=ve(t);if(o)return o;if(_e&&oe)return oe;const u=[{source:"window.__MF_NAME__",value:st()},{source:"sessionStorage.mf-config",value:ot()},{source:"import.meta.env.VITE_MFE_NAME",value:Ee()}];for(const{source:g,value:n}of u)if(n)return oe=n,_e=!0,n;if(r)return r;const l="Cannot determine MFE name. Please pass mfeName in props, set window.__MF_NAME__, sessionStorage.mf-config, or VITE_MFE_NAME";throw br.error(l),new Error(l)}function xr(t){return at(t)}function it(t){return ve(t)?"props.mfeName":st()?"window.__MF_NAME__":ot()?"sessionStorage.mf-config":Ee()?"import.meta.env.VITE_MFE_NAME":null}function Sr(t){return it(t)!==null}function Cr(){oe=null,_e=!1}function Ar(t){const r=[];return ve(t)&&r.push("props.mfeName"),typeof window<"u"&&(window.__MF_NAME__&&r.push("window.__MF_NAME__"),sessionStorage.getItem("mf-config")&&r.push("sessionStorage.mf-config")),Ee()&&r.push("import.meta.env.VITE_MFE_NAME"),r}exports.ErrorBoundary=nr;exports.NotificationProvider=or;exports.VersionInfo=sr;exports.api=K;exports.apiLogger=vr;exports.authLogger=_r;exports.createApiClient=nt;exports.createMfLogger=X;exports.del=mr;exports.dispatchNotification=ir;exports.errorLogger=Er;exports.get=pr;exports.getAccessToken=Ut;exports.getAllMfeNameSources=Ar;exports.getAuthState=Ke;exports.getMfeName=at;exports.getMfeNameSource=it;exports.getShellAuth=L;exports.hasMfeName=Sr;exports.infoLogger=yr;exports.isAuthenticated=Vt;exports.logout=Bt;exports.post=gr;exports.put=hr;exports.redirectToLogin=Xe;exports.requireMfeName=xr;exports.resetMfeNameCache=Cr;exports.useApi=Yt;exports.useFeatureAdmin=Xt;exports.useFeatures=Kt;exports.useInfoData=Ze;exports.useMicrofrontendsFeatures=Zt;exports.useNotification=ar;exports.usePermissions=qt;exports.useShellAuth=q;exports.useV1Config=Ht;
|