@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.
Files changed (126) hide show
  1. package/CHANGELOG.md +1116 -1007
  2. package/dist/api/encryption.api.d.ts +31 -0
  3. package/dist/api/encryption.api.d.ts.map +1 -0
  4. package/dist/api/encryption.api.js +61 -0
  5. package/dist/api/encryption.api.js.map +1 -0
  6. package/dist/api/index.d.ts +5 -0
  7. package/dist/api/index.d.ts.map +1 -1
  8. package/dist/api/index.js +2 -0
  9. package/dist/api/index.js.map +1 -1
  10. package/dist/api/types/encryption.types.d.ts +43 -0
  11. package/dist/api/types/encryption.types.d.ts.map +1 -0
  12. package/dist/api/types/encryption.types.js +7 -0
  13. package/dist/api/types/encryption.types.js.map +1 -0
  14. package/dist/express/index.d.ts +0 -1
  15. package/dist/express/index.d.ts.map +1 -1
  16. package/dist/express/index.js +1 -4
  17. package/dist/express/index.js.map +1 -1
  18. package/dist/index.d.ts +43 -158
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +50 -167
  21. package/dist/index.js.map +1 -1
  22. package/dist/services/auth-error-handler.d.ts +21 -0
  23. package/dist/services/auth-error-handler.d.ts.map +1 -0
  24. package/dist/services/auth-error-handler.js +68 -0
  25. package/dist/services/auth-error-handler.js.map +1 -0
  26. package/dist/services/auth.service.d.ts +0 -1
  27. package/dist/services/auth.service.d.ts.map +1 -1
  28. package/dist/services/auth.service.js +31 -298
  29. package/dist/services/auth.service.js.map +1 -1
  30. package/dist/services/encryption.service.d.ts +47 -0
  31. package/dist/services/encryption.service.d.ts.map +1 -0
  32. package/dist/services/encryption.service.js +64 -0
  33. package/dist/services/encryption.service.js.map +1 -0
  34. package/dist/services/logger/logger.service.d.ts +8 -80
  35. package/dist/services/logger/logger.service.d.ts.map +1 -1
  36. package/dist/services/logger/logger.service.js +8 -80
  37. package/dist/services/logger/logger.service.js.map +1 -1
  38. package/dist/services/permission.service.d.ts +0 -4
  39. package/dist/services/permission.service.d.ts.map +1 -1
  40. package/dist/services/permission.service.js +2 -23
  41. package/dist/services/permission.service.js.map +1 -1
  42. package/dist/services/role.service.d.ts +0 -4
  43. package/dist/services/role.service.d.ts.map +1 -1
  44. package/dist/services/role.service.js +2 -23
  45. package/dist/services/role.service.js.map +1 -1
  46. package/dist/types/config.types.d.ts +0 -1
  47. package/dist/types/config.types.d.ts.map +1 -1
  48. package/dist/types/config.types.js.map +1 -1
  49. package/dist/types/filter-schema.types.d.ts +104 -0
  50. package/dist/types/filter-schema.types.d.ts.map +1 -0
  51. package/dist/types/filter-schema.types.js +40 -0
  52. package/dist/types/filter-schema.types.js.map +1 -0
  53. package/dist/types/filter.types.d.ts +1 -1
  54. package/dist/types/filter.types.d.ts.map +1 -1
  55. package/dist/types/filter.types.js.map +1 -1
  56. package/dist/utils/config-loader.d.ts.map +1 -1
  57. package/dist/utils/config-loader.js +0 -4
  58. package/dist/utils/config-loader.js.map +1 -1
  59. package/dist/utils/data-client-auth.d.ts +5 -37
  60. package/dist/utils/data-client-auth.d.ts.map +1 -1
  61. package/dist/utils/data-client-auth.js +98 -377
  62. package/dist/utils/data-client-auth.js.map +1 -1
  63. package/dist/utils/data-client-init.d.ts +46 -0
  64. package/dist/utils/data-client-init.d.ts.map +1 -0
  65. package/dist/utils/data-client-init.js +128 -0
  66. package/dist/utils/data-client-init.js.map +1 -0
  67. package/dist/utils/data-client-oauth.d.ts +20 -0
  68. package/dist/utils/data-client-oauth.d.ts.map +1 -0
  69. package/dist/utils/data-client-oauth.js +138 -0
  70. package/dist/utils/data-client-oauth.js.map +1 -0
  71. package/dist/utils/data-client-permissions.d.ts +63 -0
  72. package/dist/utils/data-client-permissions.d.ts.map +1 -0
  73. package/dist/utils/data-client-permissions.js +123 -0
  74. package/dist/utils/data-client-permissions.js.map +1 -0
  75. package/dist/utils/data-client-request.d.ts +1 -1
  76. package/dist/utils/data-client-request.d.ts.map +1 -1
  77. package/dist/utils/data-client-request.js +35 -235
  78. package/dist/utils/data-client-request.js.map +1 -1
  79. package/dist/utils/data-client-response.d.ts +40 -0
  80. package/dist/utils/data-client-response.d.ts.map +1 -0
  81. package/dist/utils/data-client-response.js +144 -0
  82. package/dist/utils/data-client-response.js.map +1 -0
  83. package/dist/utils/data-client-roles.d.ts +63 -0
  84. package/dist/utils/data-client-roles.d.ts.map +1 -0
  85. package/dist/utils/data-client-roles.js +123 -0
  86. package/dist/utils/data-client-roles.js.map +1 -0
  87. package/dist/utils/data-client.d.ts +0 -185
  88. package/dist/utils/data-client.d.ts.map +1 -1
  89. package/dist/utils/data-client.js +66 -505
  90. package/dist/utils/data-client.js.map +1 -1
  91. package/dist/utils/encryption-error.d.ts +24 -0
  92. package/dist/utils/encryption-error.d.ts.map +1 -0
  93. package/dist/utils/encryption-error.js +31 -0
  94. package/dist/utils/encryption-error.js.map +1 -0
  95. package/dist/utils/filter-colon.utils.d.ts +26 -0
  96. package/dist/utils/filter-colon.utils.d.ts.map +1 -0
  97. package/dist/utils/filter-colon.utils.js +112 -0
  98. package/dist/utils/filter-colon.utils.js.map +1 -0
  99. package/dist/utils/filter-schema.utils.d.ts +84 -0
  100. package/dist/utils/filter-schema.utils.d.ts.map +1 -0
  101. package/dist/utils/filter-schema.utils.js +381 -0
  102. package/dist/utils/filter-schema.utils.js.map +1 -0
  103. package/dist/utils/filter.utils.d.ts +9 -85
  104. package/dist/utils/filter.utils.d.ts.map +1 -1
  105. package/dist/utils/filter.utils.js +79 -138
  106. package/dist/utils/filter.utils.js.map +1 -1
  107. package/dist/utils/http-error-handler.d.ts +22 -0
  108. package/dist/utils/http-error-handler.d.ts.map +1 -0
  109. package/dist/utils/http-error-handler.js +84 -0
  110. package/dist/utils/http-error-handler.js.map +1 -0
  111. package/dist/utils/http-response-validator.d.ts +15 -0
  112. package/dist/utils/http-response-validator.d.ts.map +1 -0
  113. package/dist/utils/http-response-validator.js +42 -0
  114. package/dist/utils/http-response-validator.js.map +1 -0
  115. package/dist/utils/internal-http-client.d.ts +4 -22
  116. package/dist/utils/internal-http-client.d.ts.map +1 -1
  117. package/dist/utils/internal-http-client.js +53 -337
  118. package/dist/utils/internal-http-client.js.map +1 -1
  119. package/dist/utils/token-utils.d.ts.map +1 -1
  120. package/dist/utils/token-utils.js +1 -29
  121. package/dist/utils/token-utils.js.map +1 -1
  122. package/package.json +84 -84
  123. package/dist/express/encryption.d.ts +0 -29
  124. package/dist/express/encryption.d.ts.map +0 -1
  125. package/dist/express/encryption.js +0 -95
  126. 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":";AAAA;;;GAGG;;AAaH,wCAcC;AAWD,sCAeC;AAWD,4CAeC;AAWD,8CAeC;AAUD,gDAcC;AASD,sDAcC;AAnJD;;;;;;;GAOG;AACI,KAAK,UAAU,cAAc,CAClC,iBAAkD,EAClD,UAA6B,EAC7B,UAA+B,EAC/B,KAAc;IAEd,IAAI,CAAC,UAAU,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,IAAI,UAAU,EAAE,CAAC;IACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,iBAAiB,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,aAAa,CACjC,iBAAkD,EAClD,UAA6B,EAC7B,UAA+B,EAC/B,UAAkB,EAClB,KAAc;IAEd,IAAI,CAAC,UAAU,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,IAAI,UAAU,EAAE,CAAC;IACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,iBAAiB,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,gBAAgB,CACpC,iBAAkD,EAClD,UAA6B,EAC7B,UAA+B,EAC/B,WAAqB,EACrB,KAAc;IAEd,IAAI,CAAC,UAAU,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,IAAI,UAAU,EAAE,CAAC;IACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACpE,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,iBAAiB,CACrC,iBAAkD,EAClD,UAA6B,EAC7B,UAA+B,EAC/B,WAAqB,EACrB,KAAc;IAEd,IAAI,CAAC,UAAU,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,IAAI,UAAU,EAAE,CAAC;IACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,kBAAkB,CACtC,iBAAkD,EAClD,UAA6B,EAC7B,UAA+B,EAC/B,KAAc;IAEd,IAAI,CAAC,UAAU,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,IAAI,UAAU,EAAE,CAAC;IACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,iBAAiB,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,qBAAqB,CACzC,iBAAkD,EAClD,UAA6B,EAC7B,UAA+B,EAC/B,KAAc;IAEd,IAAI,CAAC,UAAU,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtC,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,IAAI,UAAU,EAAE,CAAC;IACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IACD,OAAO,iBAAiB,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAC5D,CAAC"}
@@ -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;AAOpC,OAAO,EAAsB,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAItC;;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,CAsBpC;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CASrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,WAAW,GACnB,WAAW,CAkBb;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,CAgEnB;AAsRD;;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;IACP,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,EACD,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,CAAC,CA8MZ"}
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"}