@aifabrix/miso-client 3.8.2 → 4.0.0
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/CHANGELOG.md +1116 -1007
- package/dist/api/encryption.api.d.ts +31 -0
- package/dist/api/encryption.api.d.ts.map +1 -0
- package/dist/api/encryption.api.js +61 -0
- package/dist/api/encryption.api.js.map +1 -0
- package/dist/api/index.d.ts +5 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/types/encryption.types.d.ts +43 -0
- package/dist/api/types/encryption.types.d.ts.map +1 -0
- package/dist/api/types/encryption.types.js +7 -0
- package/dist/api/types/encryption.types.js.map +1 -0
- package/dist/express/index.d.ts +0 -1
- package/dist/express/index.d.ts.map +1 -1
- package/dist/express/index.js +1 -4
- package/dist/express/index.js.map +1 -1
- package/dist/index.d.ts +43 -158
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -167
- package/dist/index.js.map +1 -1
- package/dist/services/auth-error-handler.d.ts +21 -0
- package/dist/services/auth-error-handler.d.ts.map +1 -0
- package/dist/services/auth-error-handler.js +68 -0
- package/dist/services/auth-error-handler.js.map +1 -0
- package/dist/services/auth.service.d.ts +0 -1
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +31 -298
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/encryption.service.d.ts +47 -0
- package/dist/services/encryption.service.d.ts.map +1 -0
- package/dist/services/encryption.service.js +64 -0
- package/dist/services/encryption.service.js.map +1 -0
- package/dist/services/logger/logger.service.d.ts +8 -80
- package/dist/services/logger/logger.service.d.ts.map +1 -1
- package/dist/services/logger/logger.service.js +8 -80
- package/dist/services/logger/logger.service.js.map +1 -1
- package/dist/services/permission.service.d.ts +0 -4
- package/dist/services/permission.service.d.ts.map +1 -1
- package/dist/services/permission.service.js +2 -23
- package/dist/services/permission.service.js.map +1 -1
- package/dist/services/role.service.d.ts +0 -4
- package/dist/services/role.service.d.ts.map +1 -1
- package/dist/services/role.service.js +2 -23
- package/dist/services/role.service.js.map +1 -1
- package/dist/types/config.types.d.ts +0 -1
- package/dist/types/config.types.d.ts.map +1 -1
- package/dist/types/config.types.js.map +1 -1
- package/dist/types/filter-schema.types.d.ts +104 -0
- package/dist/types/filter-schema.types.d.ts.map +1 -0
- package/dist/types/filter-schema.types.js +40 -0
- package/dist/types/filter-schema.types.js.map +1 -0
- package/dist/types/filter.types.d.ts +1 -1
- package/dist/types/filter.types.d.ts.map +1 -1
- package/dist/types/filter.types.js.map +1 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +0 -4
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/data-client-auth.d.ts +5 -37
- package/dist/utils/data-client-auth.d.ts.map +1 -1
- package/dist/utils/data-client-auth.js +98 -377
- package/dist/utils/data-client-auth.js.map +1 -1
- package/dist/utils/data-client-init.d.ts +46 -0
- package/dist/utils/data-client-init.d.ts.map +1 -0
- package/dist/utils/data-client-init.js +128 -0
- package/dist/utils/data-client-init.js.map +1 -0
- package/dist/utils/data-client-oauth.d.ts +20 -0
- package/dist/utils/data-client-oauth.d.ts.map +1 -0
- package/dist/utils/data-client-oauth.js +138 -0
- package/dist/utils/data-client-oauth.js.map +1 -0
- package/dist/utils/data-client-permissions.d.ts +63 -0
- package/dist/utils/data-client-permissions.d.ts.map +1 -0
- package/dist/utils/data-client-permissions.js +123 -0
- package/dist/utils/data-client-permissions.js.map +1 -0
- package/dist/utils/data-client-request.d.ts +1 -1
- package/dist/utils/data-client-request.d.ts.map +1 -1
- package/dist/utils/data-client-request.js +35 -235
- package/dist/utils/data-client-request.js.map +1 -1
- package/dist/utils/data-client-response.d.ts +40 -0
- package/dist/utils/data-client-response.d.ts.map +1 -0
- package/dist/utils/data-client-response.js +144 -0
- package/dist/utils/data-client-response.js.map +1 -0
- package/dist/utils/data-client-roles.d.ts +63 -0
- package/dist/utils/data-client-roles.d.ts.map +1 -0
- package/dist/utils/data-client-roles.js +123 -0
- package/dist/utils/data-client-roles.js.map +1 -0
- package/dist/utils/data-client.d.ts +0 -185
- package/dist/utils/data-client.d.ts.map +1 -1
- package/dist/utils/data-client.js +66 -505
- package/dist/utils/data-client.js.map +1 -1
- package/dist/utils/encryption-error.d.ts +24 -0
- package/dist/utils/encryption-error.d.ts.map +1 -0
- package/dist/utils/encryption-error.js +31 -0
- package/dist/utils/encryption-error.js.map +1 -0
- package/dist/utils/filter-colon.utils.d.ts +26 -0
- package/dist/utils/filter-colon.utils.d.ts.map +1 -0
- package/dist/utils/filter-colon.utils.js +112 -0
- package/dist/utils/filter-colon.utils.js.map +1 -0
- package/dist/utils/filter-schema.utils.d.ts +84 -0
- package/dist/utils/filter-schema.utils.d.ts.map +1 -0
- package/dist/utils/filter-schema.utils.js +381 -0
- package/dist/utils/filter-schema.utils.js.map +1 -0
- package/dist/utils/filter.utils.d.ts +9 -85
- package/dist/utils/filter.utils.d.ts.map +1 -1
- package/dist/utils/filter.utils.js +79 -138
- package/dist/utils/filter.utils.js.map +1 -1
- package/dist/utils/http-error-handler.d.ts +22 -0
- package/dist/utils/http-error-handler.d.ts.map +1 -0
- package/dist/utils/http-error-handler.js +84 -0
- package/dist/utils/http-error-handler.js.map +1 -0
- package/dist/utils/http-response-validator.d.ts +15 -0
- package/dist/utils/http-response-validator.d.ts.map +1 -0
- package/dist/utils/http-response-validator.js +42 -0
- package/dist/utils/http-response-validator.js.map +1 -0
- package/dist/utils/internal-http-client.d.ts +4 -22
- package/dist/utils/internal-http-client.d.ts.map +1 -1
- package/dist/utils/internal-http-client.js +53 -337
- package/dist/utils/internal-http-client.js.map +1 -1
- package/dist/utils/token-utils.d.ts.map +1 -1
- package/dist/utils/token-utils.js +1 -29
- package/dist/utils/token-utils.js.map +1 -1
- package/package.json +84 -84
- package/dist/express/encryption.d.ts +0 -29
- package/dist/express/encryption.d.ts.map +0 -1
- package/dist/express/encryption.js +0 -95
- package/dist/express/encryption.js.map +0 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DataClient initialization helpers - extracted for code organization
|
|
3
|
+
* Handles MisoClient and service initialization
|
|
4
|
+
*/
|
|
5
|
+
import { MisoClient } from "../index";
|
|
6
|
+
import { DataClientConfig } from "../types/data-client.types";
|
|
7
|
+
import { MisoClientConfig } from "../types/config.types";
|
|
8
|
+
import { BrowserPermissionService } from "../services/browser-permission.service";
|
|
9
|
+
import { BrowserRoleService } from "../services/browser-role.service";
|
|
10
|
+
/**
|
|
11
|
+
* Result of DataClient initialization
|
|
12
|
+
*/
|
|
13
|
+
export interface DataClientInitResult {
|
|
14
|
+
misoClient: MisoClient | null;
|
|
15
|
+
permissionService: BrowserPermissionService | null;
|
|
16
|
+
roleService: BrowserRoleService | null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create MisoClient config with auto-bridged token refresh
|
|
20
|
+
* @param config - DataClient configuration
|
|
21
|
+
* @param getEnvironmentTokenFn - Function to get environment token
|
|
22
|
+
* @returns MisoClient configuration with token refresh callback
|
|
23
|
+
*/
|
|
24
|
+
export declare function createMisoConfigWithRefresh(config: DataClientConfig, getEnvironmentTokenFn: () => Promise<string>): MisoClientConfig | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Initialize browser services (permission and role services)
|
|
27
|
+
* @param misoClient - MisoClient instance
|
|
28
|
+
* @param misoConfig - MisoClient configuration
|
|
29
|
+
* @returns Permission and role services
|
|
30
|
+
*/
|
|
31
|
+
export declare function initializeBrowserServices(misoClient: MisoClient | null, misoConfig: MisoClientConfig | undefined): {
|
|
32
|
+
permissionService: BrowserPermissionService | null;
|
|
33
|
+
roleService: BrowserRoleService | null;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Log security warning if clientSecret is in browser environment
|
|
37
|
+
* @param config - DataClient configuration
|
|
38
|
+
*/
|
|
39
|
+
export declare function warnIfClientSecretInBrowser(config: DataClientConfig): void;
|
|
40
|
+
/**
|
|
41
|
+
* Create default DataClient configuration with merged user config
|
|
42
|
+
* @param config - User-provided configuration
|
|
43
|
+
* @returns Complete configuration with defaults
|
|
44
|
+
*/
|
|
45
|
+
export declare function createDefaultConfig(config: DataClientConfig): DataClientConfig;
|
|
46
|
+
//# sourceMappingURL=data-client-init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-client-init.d.ts","sourceRoot":"","sources":["../../src/utils/data-client-init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAStE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACnD,WAAW,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACxC;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,gBAAgB,EACxB,qBAAqB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAC3C,gBAAgB,GAAG,SAAS,CA2B9B;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,UAAU,EAAE,gBAAgB,GAAG,SAAS,GACvC;IAAE,iBAAiB,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAAE,CA0ChG;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAS1E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CA0B9E"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DataClient initialization helpers - extracted for code organization
|
|
4
|
+
* Handles MisoClient and service initialization
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createMisoConfigWithRefresh = createMisoConfigWithRefresh;
|
|
8
|
+
exports.initializeBrowserServices = initializeBrowserServices;
|
|
9
|
+
exports.warnIfClientSecretInBrowser = warnIfClientSecretInBrowser;
|
|
10
|
+
exports.createDefaultConfig = createDefaultConfig;
|
|
11
|
+
const browser_permission_service_1 = require("../services/browser-permission.service");
|
|
12
|
+
const browser_role_service_1 = require("../services/browser-role.service");
|
|
13
|
+
const cache_service_1 = require("../services/cache.service");
|
|
14
|
+
const http_client_1 = require("./http-client");
|
|
15
|
+
const internal_http_client_1 = require("./internal-http-client");
|
|
16
|
+
const api_1 = require("../api");
|
|
17
|
+
const logger_1 = require("../services/logger");
|
|
18
|
+
const redis_service_1 = require("../services/redis.service");
|
|
19
|
+
const data_client_utils_1 = require("./data-client-utils");
|
|
20
|
+
/**
|
|
21
|
+
* Create MisoClient config with auto-bridged token refresh
|
|
22
|
+
* @param config - DataClient configuration
|
|
23
|
+
* @param getEnvironmentTokenFn - Function to get environment token
|
|
24
|
+
* @returns MisoClient configuration with token refresh callback
|
|
25
|
+
*/
|
|
26
|
+
function createMisoConfigWithRefresh(config, getEnvironmentTokenFn) {
|
|
27
|
+
if (!config.misoConfig) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
...config.misoConfig,
|
|
32
|
+
onClientTokenRefresh: config.misoConfig.onClientTokenRefresh ||
|
|
33
|
+
((0, data_client_utils_1.isBrowser)() && !config.misoConfig.clientSecret
|
|
34
|
+
? async () => {
|
|
35
|
+
const token = await getEnvironmentTokenFn();
|
|
36
|
+
if (!token) {
|
|
37
|
+
throw new Error("Failed to get client token");
|
|
38
|
+
}
|
|
39
|
+
const expiresAtStr = (0, data_client_utils_1.getLocalStorage)("miso:client-token-expires-at");
|
|
40
|
+
const expiresAt = expiresAtStr
|
|
41
|
+
? parseInt(expiresAtStr, 10)
|
|
42
|
+
: Date.now() + 3600000;
|
|
43
|
+
const expiresIn = Math.floor((expiresAt - Date.now()) / 1000);
|
|
44
|
+
return {
|
|
45
|
+
token,
|
|
46
|
+
expiresIn: expiresIn > 0 ? expiresIn : 3600,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
: undefined),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Initialize browser services (permission and role services)
|
|
54
|
+
* @param misoClient - MisoClient instance
|
|
55
|
+
* @param misoConfig - MisoClient configuration
|
|
56
|
+
* @returns Permission and role services
|
|
57
|
+
*/
|
|
58
|
+
function initializeBrowserServices(misoClient, misoConfig) {
|
|
59
|
+
if (!misoClient || !misoConfig) {
|
|
60
|
+
return { permissionService: null, roleService: null };
|
|
61
|
+
}
|
|
62
|
+
// Create InternalHttpClient first (base HTTP functionality)
|
|
63
|
+
const internalClient = new internal_http_client_1.InternalHttpClient(misoConfig);
|
|
64
|
+
// Create Redis service (will be undefined for browser, but needed for LoggerService)
|
|
65
|
+
const redis = new redis_service_1.RedisService(misoConfig.redis);
|
|
66
|
+
// Create LoggerService with InternalHttpClient
|
|
67
|
+
const logger = new logger_1.LoggerService(internalClient, redis);
|
|
68
|
+
// Create HttpClient that wraps InternalHttpClient with logger
|
|
69
|
+
const httpClient = new http_client_1.HttpClient(misoConfig, logger);
|
|
70
|
+
// Update LoggerService to use the new HttpClient
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
72
|
+
logger.httpClient = httpClient;
|
|
73
|
+
// Create ApiClient that wraps HttpClient
|
|
74
|
+
const apiClient = new api_1.ApiClient(httpClient);
|
|
75
|
+
// Set ApiClient in LoggerService (resolves circular dependency)
|
|
76
|
+
logger.setApiClient(apiClient);
|
|
77
|
+
// Create CacheService without Redis (in-memory only for browser)
|
|
78
|
+
const cacheService = new cache_service_1.CacheService(undefined);
|
|
79
|
+
// Create browser-compatible services
|
|
80
|
+
const permissionService = new browser_permission_service_1.BrowserPermissionService(httpClient, apiClient, cacheService);
|
|
81
|
+
const roleService = new browser_role_service_1.BrowserRoleService(httpClient, apiClient, cacheService);
|
|
82
|
+
return { permissionService, roleService };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Log security warning if clientSecret is in browser environment
|
|
86
|
+
* @param config - DataClient configuration
|
|
87
|
+
*/
|
|
88
|
+
function warnIfClientSecretInBrowser(config) {
|
|
89
|
+
if ((0, data_client_utils_1.isBrowser)() && config.misoConfig?.clientSecret) {
|
|
90
|
+
console.warn("⚠️ SECURITY WARNING: clientSecret detected in browser environment. " +
|
|
91
|
+
"Client secrets should NEVER be exposed in client-side code. " +
|
|
92
|
+
"Use the client token pattern instead (clientToken + onClientTokenRefresh). " +
|
|
93
|
+
"See documentation for browser-safe configuration.");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Create default DataClient configuration with merged user config
|
|
98
|
+
* @param config - User-provided configuration
|
|
99
|
+
* @returns Complete configuration with defaults
|
|
100
|
+
*/
|
|
101
|
+
function createDefaultConfig(config) {
|
|
102
|
+
return {
|
|
103
|
+
tokenKeys: ["token", "accessToken", "authToken"],
|
|
104
|
+
loginUrl: "/login",
|
|
105
|
+
timeout: 30000,
|
|
106
|
+
cache: {
|
|
107
|
+
enabled: true,
|
|
108
|
+
defaultTTL: 300,
|
|
109
|
+
maxSize: 100,
|
|
110
|
+
},
|
|
111
|
+
retry: {
|
|
112
|
+
enabled: true,
|
|
113
|
+
maxRetries: 3,
|
|
114
|
+
baseDelay: 1000,
|
|
115
|
+
maxDelay: 10000,
|
|
116
|
+
},
|
|
117
|
+
audit: {
|
|
118
|
+
enabled: true,
|
|
119
|
+
level: "standard",
|
|
120
|
+
batchSize: 10,
|
|
121
|
+
maxResponseSize: 10000,
|
|
122
|
+
maxMaskingSize: 50000,
|
|
123
|
+
skipEndpoints: [],
|
|
124
|
+
},
|
|
125
|
+
...config,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=data-client-init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-client-init.js","sourceRoot":"","sources":["../../src/utils/data-client-init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DataClient OAuth callback handling utilities
|
|
3
|
+
* Handles OAuth token extraction from URL hash fragments with ISO 27001 compliance
|
|
4
|
+
*/
|
|
5
|
+
import { DataClientConfig } from "../types/data-client.types";
|
|
6
|
+
/**
|
|
7
|
+
* Handle OAuth callback with ISO 27001 compliant security
|
|
8
|
+
* Extracts token from URL hash fragment and stores securely
|
|
9
|
+
*
|
|
10
|
+
* Security features:
|
|
11
|
+
* - Immediate hash cleanup (< 100ms)
|
|
12
|
+
* - Token format validation
|
|
13
|
+
* - HTTPS enforcement check
|
|
14
|
+
* - Secure error handling
|
|
15
|
+
*
|
|
16
|
+
* @param config - DataClient configuration
|
|
17
|
+
* @returns Extracted token or null if not found/invalid
|
|
18
|
+
*/
|
|
19
|
+
export declare function handleOAuthCallback(config: DataClientConfig): string | null;
|
|
20
|
+
//# sourceMappingURL=data-client-oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-client-oauth.d.ts","sourceRoot":"","sources":["../../src/utils/data-client-oauth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAkD9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAkF3E"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DataClient OAuth callback handling utilities
|
|
4
|
+
* Handles OAuth token extraction from URL hash fragments with ISO 27001 compliance
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.handleOAuthCallback = handleOAuthCallback;
|
|
8
|
+
const data_client_utils_1 = require("./data-client-utils");
|
|
9
|
+
const error_extractor_1 = require("./error-extractor");
|
|
10
|
+
const console_logger_1 = require("./console-logger");
|
|
11
|
+
/**
|
|
12
|
+
* Clean up hash fragment from URL (security measure)
|
|
13
|
+
*/
|
|
14
|
+
function cleanupHash() {
|
|
15
|
+
try {
|
|
16
|
+
const window = globalThis;
|
|
17
|
+
if (!window.window?.location || !window.window.history) {
|
|
18
|
+
console.warn("[handleOAuthCallback] window not available for hash cleanup");
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const cleanUrl = window.window.location.pathname + window.window.location.search;
|
|
22
|
+
window.window.history.replaceState(null, "", cleanUrl);
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
console.warn("[handleOAuthCallback] Failed to clean up hash:", e);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Validate token format (basic validation - non-empty string with reasonable length)
|
|
30
|
+
*/
|
|
31
|
+
function isValidTokenFormat(token) {
|
|
32
|
+
if (!token || typeof token !== "string")
|
|
33
|
+
return false;
|
|
34
|
+
const trimmed = token.trim();
|
|
35
|
+
return trimmed.length >= 5;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if hostname is localhost or local network
|
|
39
|
+
*/
|
|
40
|
+
function isLocalhost(hostname) {
|
|
41
|
+
return (hostname === "localhost" ||
|
|
42
|
+
hostname === "127.0.0.1" ||
|
|
43
|
+
hostname === "[::1]" ||
|
|
44
|
+
hostname.startsWith("192.168.") ||
|
|
45
|
+
hostname.startsWith("10.") ||
|
|
46
|
+
/^172\.(1[6-9]|2[0-9]|3[0-1])\./.test(hostname));
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Handle OAuth callback with ISO 27001 compliant security
|
|
50
|
+
* Extracts token from URL hash fragment and stores securely
|
|
51
|
+
*
|
|
52
|
+
* Security features:
|
|
53
|
+
* - Immediate hash cleanup (< 100ms)
|
|
54
|
+
* - Token format validation
|
|
55
|
+
* - HTTPS enforcement check
|
|
56
|
+
* - Secure error handling
|
|
57
|
+
*
|
|
58
|
+
* @param config - DataClient configuration
|
|
59
|
+
* @returns Extracted token or null if not found/invalid
|
|
60
|
+
*/
|
|
61
|
+
function handleOAuthCallback(config) {
|
|
62
|
+
if (!(0, data_client_utils_1.isBrowser)())
|
|
63
|
+
return null;
|
|
64
|
+
const window = globalThis;
|
|
65
|
+
if (!window.window?.location)
|
|
66
|
+
return null;
|
|
67
|
+
const hash = window.window.location.hash;
|
|
68
|
+
if (!hash || hash.length <= 1)
|
|
69
|
+
return null;
|
|
70
|
+
// Parse hash synchronously
|
|
71
|
+
const hashString = hash.substring(1);
|
|
72
|
+
let hashParams;
|
|
73
|
+
try {
|
|
74
|
+
hashParams = new URLSearchParams(hashString);
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
console.warn("[handleOAuthCallback] Failed to parse hash:", e);
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
// Extract token from various possible parameter names
|
|
81
|
+
const token = hashParams.get("token") || hashParams.get("access_token") || hashParams.get("accessToken");
|
|
82
|
+
if (!token)
|
|
83
|
+
return null;
|
|
84
|
+
// Validate token format
|
|
85
|
+
if (!isValidTokenFormat(token)) {
|
|
86
|
+
const tokenLength = token ? token.length : 0;
|
|
87
|
+
console.error("[handleOAuthCallback] Invalid token format - token rejected", {
|
|
88
|
+
tokenLength,
|
|
89
|
+
isEmpty: !token || token.trim().length === 0,
|
|
90
|
+
tooShort: tokenLength > 0 && tokenLength < 5,
|
|
91
|
+
expectedFormat: "Non-empty string with at least 5 characters",
|
|
92
|
+
});
|
|
93
|
+
cleanupHash();
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
// HTTPS enforcement in production (except localhost)
|
|
97
|
+
if (config.misoConfig?.logLevel === "debug" || process.env.NODE_ENV === "production") {
|
|
98
|
+
const isHttps = window.window.location.protocol === "https:";
|
|
99
|
+
const hostname = window.window.location.hostname || "";
|
|
100
|
+
if (!isHttps && process.env.NODE_ENV === "production" && !isLocalhost(hostname)) {
|
|
101
|
+
console.error("[handleOAuthCallback] SECURITY WARNING: Token received over HTTP in production");
|
|
102
|
+
cleanupHash();
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Clean up hash immediately
|
|
107
|
+
cleanupHash();
|
|
108
|
+
// Store token in localStorage
|
|
109
|
+
const tokenKeys = config.tokenKeys || ["token", "accessToken", "authToken"];
|
|
110
|
+
try {
|
|
111
|
+
tokenKeys.forEach((key) => {
|
|
112
|
+
try {
|
|
113
|
+
(0, data_client_utils_1.setLocalStorage)(key, token);
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
console.warn(`[handleOAuthCallback] Failed to store token in key ${key}:`, e);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
// Debug logging
|
|
120
|
+
if (config.misoConfig?.logLevel === "debug") {
|
|
121
|
+
console.log("[handleOAuthCallback] OAuth token extracted and stored securely", {
|
|
122
|
+
tokenLength: token.length,
|
|
123
|
+
tokenKeys: tokenKeys,
|
|
124
|
+
storedInKeys: tokenKeys.length,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
return token;
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
131
|
+
const pathname = window.window.location.pathname || "/";
|
|
132
|
+
const errorInfo = (0, error_extractor_1.extractErrorInfo)(error, { endpoint: pathname, method: "GET" });
|
|
133
|
+
(0, console_logger_1.logErrorWithContext)(errorInfo, "[DataClient] [AUTH] [OAuthCallback]");
|
|
134
|
+
console.error("[handleOAuthCallback] Failed to store token:", e);
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=data-client-oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-client-oauth.js","sourceRoot":"","sources":["../../src/utils/data-client-oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DataClient permission methods - extracted for code organization
|
|
3
|
+
* These methods wrap BrowserPermissionService for the DataClient facade
|
|
4
|
+
*/
|
|
5
|
+
import { BrowserPermissionService } from "../services/browser-permission.service";
|
|
6
|
+
import { MisoClient } from "../index";
|
|
7
|
+
/**
|
|
8
|
+
* Get user permissions (uses token from localStorage if not provided)
|
|
9
|
+
* @param permissionService - Browser permission service instance
|
|
10
|
+
* @param misoClient - MisoClient instance (for availability check)
|
|
11
|
+
* @param getTokenFn - Function to get user token
|
|
12
|
+
* @param token - Optional user authentication token
|
|
13
|
+
* @returns Array of permission strings
|
|
14
|
+
*/
|
|
15
|
+
export declare function getPermissions(permissionService: BrowserPermissionService | null, misoClient: MisoClient | null, getTokenFn: () => string | null, token?: string): Promise<string[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Check if user has specific permission
|
|
18
|
+
* @param permissionService - Browser permission service instance
|
|
19
|
+
* @param misoClient - MisoClient instance (for availability check)
|
|
20
|
+
* @param getTokenFn - Function to get user token
|
|
21
|
+
* @param permission - Permission to check
|
|
22
|
+
* @param token - Optional user authentication token
|
|
23
|
+
* @returns True if user has the permission
|
|
24
|
+
*/
|
|
25
|
+
export declare function hasPermission(permissionService: BrowserPermissionService | null, misoClient: MisoClient | null, getTokenFn: () => string | null, permission: string, token?: string): Promise<boolean>;
|
|
26
|
+
/**
|
|
27
|
+
* Check if user has any of the specified permissions
|
|
28
|
+
* @param permissionService - Browser permission service instance
|
|
29
|
+
* @param misoClient - MisoClient instance (for availability check)
|
|
30
|
+
* @param getTokenFn - Function to get user token
|
|
31
|
+
* @param permissions - Permissions to check
|
|
32
|
+
* @param token - Optional user authentication token
|
|
33
|
+
* @returns True if user has any of the permissions
|
|
34
|
+
*/
|
|
35
|
+
export declare function hasAnyPermission(permissionService: BrowserPermissionService | null, misoClient: MisoClient | null, getTokenFn: () => string | null, permissions: string[], token?: string): Promise<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* Check if user has all of the specified permissions
|
|
38
|
+
* @param permissionService - Browser permission service instance
|
|
39
|
+
* @param misoClient - MisoClient instance (for availability check)
|
|
40
|
+
* @param getTokenFn - Function to get user token
|
|
41
|
+
* @param permissions - Permissions to check
|
|
42
|
+
* @param token - Optional user authentication token
|
|
43
|
+
* @returns True if user has all of the permissions
|
|
44
|
+
*/
|
|
45
|
+
export declare function hasAllPermissions(permissionService: BrowserPermissionService | null, misoClient: MisoClient | null, getTokenFn: () => string | null, permissions: string[], token?: string): Promise<boolean>;
|
|
46
|
+
/**
|
|
47
|
+
* Force refresh permissions from controller (bypass cache)
|
|
48
|
+
* @param permissionService - Browser permission service instance
|
|
49
|
+
* @param misoClient - MisoClient instance (for availability check)
|
|
50
|
+
* @param getTokenFn - Function to get user token
|
|
51
|
+
* @param token - Optional user authentication token
|
|
52
|
+
* @returns Array of permission strings
|
|
53
|
+
*/
|
|
54
|
+
export declare function refreshPermissions(permissionService: BrowserPermissionService | null, misoClient: MisoClient | null, getTokenFn: () => string | null, token?: string): Promise<string[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Clear cached permissions for a user
|
|
57
|
+
* @param permissionService - Browser permission service instance
|
|
58
|
+
* @param misoClient - MisoClient instance (for availability check)
|
|
59
|
+
* @param getTokenFn - Function to get user token
|
|
60
|
+
* @param token - Optional user authentication token
|
|
61
|
+
*/
|
|
62
|
+
export declare function clearPermissionsCache(permissionService: BrowserPermissionService | null, misoClient: MisoClient | null, getTokenFn: () => string | null, token?: string): Promise<void>;
|
|
63
|
+
//# sourceMappingURL=data-client-permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-client-permissions.d.ts","sourceRoot":"","sources":["../../src/utils/data-client-permissions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,iBAAiB,EAAE,wBAAwB,GAAG,IAAI,EAClD,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,UAAU,EAAE,MAAM,MAAM,GAAG,IAAI,EAC/B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,iBAAiB,EAAE,wBAAwB,GAAG,IAAI,EAClD,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,UAAU,EAAE,MAAM,MAAM,GAAG,IAAI,EAC/B,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CASlB;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,iBAAiB,EAAE,wBAAwB,GAAG,IAAI,EAClD,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,UAAU,EAAE,MAAM,MAAM,GAAG,IAAI,EAC/B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CASlB;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,iBAAiB,EAAE,wBAAwB,GAAG,IAAI,EAClD,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,UAAU,EAAE,MAAM,MAAM,GAAG,IAAI,EAC/B,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CASlB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,iBAAiB,EAAE,wBAAwB,GAAG,IAAI,EAClD,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,UAAU,EAAE,MAAM,MAAM,GAAG,IAAI,EAC/B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,iBAAiB,EAAE,wBAAwB,GAAG,IAAI,EAClD,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,UAAU,EAAE,MAAM,MAAM,GAAG,IAAI,EAC/B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CASf"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DataClient permission methods - extracted for code organization
|
|
4
|
+
* These methods wrap BrowserPermissionService for the DataClient facade
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getPermissions = getPermissions;
|
|
8
|
+
exports.hasPermission = hasPermission;
|
|
9
|
+
exports.hasAnyPermission = hasAnyPermission;
|
|
10
|
+
exports.hasAllPermissions = hasAllPermissions;
|
|
11
|
+
exports.refreshPermissions = refreshPermissions;
|
|
12
|
+
exports.clearPermissionsCache = clearPermissionsCache;
|
|
13
|
+
/**
|
|
14
|
+
* Get user permissions (uses token from localStorage if not provided)
|
|
15
|
+
* @param permissionService - Browser permission service instance
|
|
16
|
+
* @param misoClient - MisoClient instance (for availability check)
|
|
17
|
+
* @param getTokenFn - Function to get user token
|
|
18
|
+
* @param token - Optional user authentication token
|
|
19
|
+
* @returns Array of permission strings
|
|
20
|
+
*/
|
|
21
|
+
async function getPermissions(permissionService, misoClient, getTokenFn, token) {
|
|
22
|
+
if (!misoClient || !permissionService) {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
const userToken = token || getTokenFn();
|
|
26
|
+
if (!userToken) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
return permissionService.getPermissions(userToken);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if user has specific permission
|
|
33
|
+
* @param permissionService - Browser permission service instance
|
|
34
|
+
* @param misoClient - MisoClient instance (for availability check)
|
|
35
|
+
* @param getTokenFn - Function to get user token
|
|
36
|
+
* @param permission - Permission to check
|
|
37
|
+
* @param token - Optional user authentication token
|
|
38
|
+
* @returns True if user has the permission
|
|
39
|
+
*/
|
|
40
|
+
async function hasPermission(permissionService, misoClient, getTokenFn, permission, token) {
|
|
41
|
+
if (!misoClient || !permissionService) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const userToken = token || getTokenFn();
|
|
45
|
+
if (!userToken) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
return permissionService.hasPermission(userToken, permission);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check if user has any of the specified permissions
|
|
52
|
+
* @param permissionService - Browser permission service instance
|
|
53
|
+
* @param misoClient - MisoClient instance (for availability check)
|
|
54
|
+
* @param getTokenFn - Function to get user token
|
|
55
|
+
* @param permissions - Permissions to check
|
|
56
|
+
* @param token - Optional user authentication token
|
|
57
|
+
* @returns True if user has any of the permissions
|
|
58
|
+
*/
|
|
59
|
+
async function hasAnyPermission(permissionService, misoClient, getTokenFn, permissions, token) {
|
|
60
|
+
if (!misoClient || !permissionService) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
const userToken = token || getTokenFn();
|
|
64
|
+
if (!userToken) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return permissionService.hasAnyPermission(userToken, permissions);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check if user has all of the specified permissions
|
|
71
|
+
* @param permissionService - Browser permission service instance
|
|
72
|
+
* @param misoClient - MisoClient instance (for availability check)
|
|
73
|
+
* @param getTokenFn - Function to get user token
|
|
74
|
+
* @param permissions - Permissions to check
|
|
75
|
+
* @param token - Optional user authentication token
|
|
76
|
+
* @returns True if user has all of the permissions
|
|
77
|
+
*/
|
|
78
|
+
async function hasAllPermissions(permissionService, misoClient, getTokenFn, permissions, token) {
|
|
79
|
+
if (!misoClient || !permissionService) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
const userToken = token || getTokenFn();
|
|
83
|
+
if (!userToken) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
return permissionService.hasAllPermissions(userToken, permissions);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Force refresh permissions from controller (bypass cache)
|
|
90
|
+
* @param permissionService - Browser permission service instance
|
|
91
|
+
* @param misoClient - MisoClient instance (for availability check)
|
|
92
|
+
* @param getTokenFn - Function to get user token
|
|
93
|
+
* @param token - Optional user authentication token
|
|
94
|
+
* @returns Array of permission strings
|
|
95
|
+
*/
|
|
96
|
+
async function refreshPermissions(permissionService, misoClient, getTokenFn, token) {
|
|
97
|
+
if (!misoClient || !permissionService) {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
const userToken = token || getTokenFn();
|
|
101
|
+
if (!userToken) {
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
return permissionService.refreshPermissions(userToken);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Clear cached permissions for a user
|
|
108
|
+
* @param permissionService - Browser permission service instance
|
|
109
|
+
* @param misoClient - MisoClient instance (for availability check)
|
|
110
|
+
* @param getTokenFn - Function to get user token
|
|
111
|
+
* @param token - Optional user authentication token
|
|
112
|
+
*/
|
|
113
|
+
async function clearPermissionsCache(permissionService, misoClient, getTokenFn, token) {
|
|
114
|
+
if (!misoClient || !permissionService) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const userToken = token || getTokenFn();
|
|
118
|
+
if (!userToken) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
return permissionService.clearPermissionsCache(userToken);
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=data-client-permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-client-permissions.js","sourceRoot":"","sources":["../../src/utils/data-client-permissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Handles HTTP request execution, retry logic, fetch handling, and response parsing
|
|
4
4
|
*/
|
|
5
5
|
import { ApiRequestOptions, DataClientConfig, InterceptorConfig, CacheEntry } from "../types/data-client.types";
|
|
6
|
-
import { HasAnyTokenFn, GetTokenFn } from "./data-client-audit";
|
|
7
6
|
import { MisoClient } from "../index";
|
|
7
|
+
import { HasAnyTokenFn, GetTokenFn } from "./data-client-audit";
|
|
8
8
|
/**
|
|
9
9
|
* Token refresh callback function type
|
|
10
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-client-request.d.ts","sourceRoot":"","sources":["../../src/utils/data-client-request.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAKhB,iBAAiB,EACjB,UAAU,EACX,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"data-client-request.d.ts","sourceRoot":"","sources":["../../src/utils/data-client-request.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAKhB,iBAAiB,EACjB,UAAU,EACX,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAQhE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAAC;AAE5F;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,GACnG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAiBpC;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CASrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,WAAW,CAcpF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,UAAU,EACpB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,QAAQ,CAAC,CAyCnB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,WAAW,EAAE,aAAa,EAC1B,QAAQ,EAAE,UAAU,EACpB,eAAe,EAAE,MAAM,IAAI,EAC3B,gBAAgB,EAAE,kBAAkB,EACpC,YAAY,EAAE,iBAAiB,EAC/B,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,EAClF,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,CAAC,CAiIZ"}
|