@onairos/react-native 3.0.71 → 3.0.73

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 (65) hide show
  1. package/lib/commonjs/components/Onairos.js +294 -155
  2. package/lib/commonjs/components/Onairos.js.map +1 -1
  3. package/lib/commonjs/components/OnairosButton.js +1 -1
  4. package/lib/commonjs/components/OnairosButton.js.map +1 -1
  5. package/lib/commonjs/components/UniversalOnboarding.js +6 -6
  6. package/lib/commonjs/components/UniversalOnboarding.js.map +1 -1
  7. package/lib/commonjs/components/onboarding/OAuthWebView.js +188 -52
  8. package/lib/commonjs/components/onboarding/OAuthWebView.js.map +1 -1
  9. package/lib/commonjs/index.js +25 -440
  10. package/lib/commonjs/index.js.map +1 -1
  11. package/lib/commonjs/services/apiKeyService.js +404 -0
  12. package/lib/commonjs/services/apiKeyService.js.map +1 -0
  13. package/lib/commonjs/services/platformAuthService.js +318 -113
  14. package/lib/commonjs/services/platformAuthService.js.map +1 -1
  15. package/lib/commonjs/types/index.js +4 -0
  16. package/lib/commonjs/types.js +12 -0
  17. package/lib/commonjs/types.js.map +1 -1
  18. package/lib/commonjs/utils/programmaticFlow.js +117 -0
  19. package/lib/commonjs/utils/programmaticFlow.js.map +1 -0
  20. package/lib/module/components/Onairos.js +297 -158
  21. package/lib/module/components/Onairos.js.map +1 -1
  22. package/lib/module/components/OnairosButton.js +1 -1
  23. package/lib/module/components/OnairosButton.js.map +1 -1
  24. package/lib/module/components/UniversalOnboarding.js +6 -6
  25. package/lib/module/components/UniversalOnboarding.js.map +1 -1
  26. package/lib/module/components/onboarding/OAuthWebView.js +188 -52
  27. package/lib/module/components/onboarding/OAuthWebView.js.map +1 -1
  28. package/lib/module/index.js +17 -61
  29. package/lib/module/index.js.map +1 -1
  30. package/lib/module/services/apiKeyService.js +389 -0
  31. package/lib/module/services/apiKeyService.js.map +1 -0
  32. package/lib/module/services/platformAuthService.js +311 -111
  33. package/lib/module/services/platformAuthService.js.map +1 -1
  34. package/lib/module/types/index.js +1 -1
  35. package/lib/module/types.js +8 -0
  36. package/lib/module/types.js.map +1 -1
  37. package/lib/module/utils/programmaticFlow.js +111 -0
  38. package/lib/module/utils/programmaticFlow.js.map +1 -0
  39. package/lib/typescript/components/Onairos.d.ts +2 -29
  40. package/lib/typescript/components/Onairos.d.ts.map +1 -1
  41. package/lib/typescript/components/onboarding/OAuthWebView.d.ts.map +1 -1
  42. package/lib/typescript/index.d.ts +10 -39
  43. package/lib/typescript/index.d.ts.map +1 -1
  44. package/lib/typescript/services/apiKeyService.d.ts +66 -0
  45. package/lib/typescript/services/apiKeyService.d.ts.map +1 -0
  46. package/lib/typescript/services/platformAuthService.d.ts +26 -0
  47. package/lib/typescript/services/platformAuthService.d.ts.map +1 -1
  48. package/lib/typescript/types/index.d.ts +144 -78
  49. package/lib/typescript/types/index.d.ts.map +1 -1
  50. package/lib/typescript/types.d.ts +92 -3
  51. package/lib/typescript/types.d.ts.map +1 -1
  52. package/lib/typescript/utils/programmaticFlow.d.ts +23 -0
  53. package/lib/typescript/utils/programmaticFlow.d.ts.map +1 -0
  54. package/package.json +1 -1
  55. package/src/components/Onairos.tsx +330 -207
  56. package/src/components/OnairosButton.tsx +1 -1
  57. package/src/components/UniversalOnboarding.tsx +6 -6
  58. package/src/components/onboarding/OAuthWebView.tsx +236 -71
  59. package/src/index.ts +25 -115
  60. package/src/services/apiKeyService.ts +401 -0
  61. package/src/services/platformAuthService.ts +363 -126
  62. package/src/types/index.d.ts +110 -0
  63. package/src/types/index.ts +148 -74
  64. package/src/types.ts +99 -3
  65. package/src/utils/programmaticFlow.ts +113 -0
@@ -0,0 +1,404 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.validateApiKey = exports.resetApiKeyService = exports.makeAuthenticatedRequest = exports.isApiKeyInitialized = exports.isAdminKey = exports.initializeApiKey = exports.getAuthHeaders = exports.getApiKeyType = exports.getApiKey = exports.getApiConfig = exports.clearValidationCache = exports.ApiKeyType = exports.ADMIN_API_KEY = void 0;
7
+ // Admin key for backend validation
8
+ const ADMIN_API_KEY = exports.ADMIN_API_KEY = 'OnairosIsAUnicorn2025';
9
+
10
+ // API key types
11
+ let ApiKeyType = exports.ApiKeyType = /*#__PURE__*/function (ApiKeyType) {
12
+ ApiKeyType["DEVELOPER"] = "developer";
13
+ ApiKeyType["ADMIN"] = "admin";
14
+ ApiKeyType["INVALID"] = "invalid";
15
+ return ApiKeyType;
16
+ }({});
17
+ /**
18
+ * API Key Service for Onairos React Native SDK
19
+ *
20
+ * This service handles API key validation, management, and authentication
21
+ * following standard SDK patterns for secure API key handling.
22
+ *
23
+ * How it works:
24
+ * 1. Initialize with API key and configuration
25
+ * 2. Validate API key with the Onairos backend
26
+ * 3. Cache validation results for performance
27
+ * 4. Include API key in all authenticated requests
28
+ * 5. Handle API key errors gracefully with developer-friendly messages
29
+ *
30
+ * Backend Integration:
31
+ * - All API requests include: Authorization: Bearer {apiKey}
32
+ * - Backend should validate API keys on each request
33
+ * - Admin key "OnairosIsAUnicorn2025" has full permissions
34
+ * - Developer keys have limited permissions based on validation response
35
+ */
36
+ // Global configuration state
37
+ let globalConfig = null;
38
+ let validationCache = new Map();
39
+ let isInitialized = false;
40
+
41
+ // Cache duration (5 minutes)
42
+ const CACHE_DURATION = 5 * 60 * 1000;
43
+
44
+ // API endpoints for different environments
45
+ const API_ENDPOINTS = {
46
+ production: 'https://api2.onairos.uk',
47
+ staging: 'https://staging-api.onairos.uk',
48
+ development: 'https://dev-api.onairos.uk'
49
+ };
50
+
51
+ /**
52
+ * Initialize the SDK with API key and configuration
53
+ * @param config API configuration including API key
54
+ */
55
+ const initializeApiKey = async config => {
56
+ try {
57
+ console.log('🔑 Initializing Onairos SDK with API key...');
58
+ if (!config.apiKey) {
59
+ throw new Error('API key is required for SDK initialization');
60
+ }
61
+ if (config.apiKey.length < 32) {
62
+ throw new Error('Invalid API key format. API key must be at least 32 characters long.');
63
+ }
64
+
65
+ // Set global configuration
66
+ globalConfig = {
67
+ apiKey: config.apiKey,
68
+ environment: config.environment || 'production',
69
+ enableLogging: config.enableLogging !== false,
70
+ // Default to true
71
+ timeout: config.timeout || 30000,
72
+ retryAttempts: config.retryAttempts || 3
73
+ };
74
+ if (globalConfig.enableLogging) {
75
+ console.log('📝 SDK Configuration:', {
76
+ environment: globalConfig.environment,
77
+ timeout: globalConfig.timeout,
78
+ retryAttempts: globalConfig.retryAttempts,
79
+ apiKeyPrefix: config.apiKey.substring(0, 8) + '...',
80
+ enableLogging: globalConfig.enableLogging
81
+ });
82
+ }
83
+
84
+ // Validate the API key
85
+ const validation = await validateApiKey(config.apiKey);
86
+ if (!validation.isValid) {
87
+ throw new Error(`API key validation failed: ${validation.error}`);
88
+ }
89
+ isInitialized = true;
90
+ if (globalConfig.enableLogging) {
91
+ console.log('✅ Onairos SDK initialized successfully');
92
+ if (validation.permissions) {
93
+ console.log('🔐 API Key Permissions:', validation.permissions);
94
+ }
95
+ if (validation.rateLimits) {
96
+ console.log('⏱️ Rate Limits:', validation.rateLimits);
97
+ }
98
+ }
99
+ } catch (error) {
100
+ console.error('❌ Failed to initialize Onairos SDK:', error);
101
+ isInitialized = false;
102
+ throw error;
103
+ }
104
+ };
105
+
106
+ /**
107
+ * Determine API key type
108
+ * @param apiKey The API key to check
109
+ * @returns The type of API key
110
+ */
111
+ exports.initializeApiKey = initializeApiKey;
112
+ const getApiKeyType = apiKey => {
113
+ if (apiKey === ADMIN_API_KEY) {
114
+ return ApiKeyType.ADMIN;
115
+ }
116
+
117
+ // Developer keys should be at least 32 characters and start with specific prefix
118
+ if (apiKey.length >= 32 && (apiKey.startsWith('dev_') || apiKey.startsWith('pk_'))) {
119
+ return ApiKeyType.DEVELOPER;
120
+ }
121
+ return ApiKeyType.INVALID;
122
+ };
123
+
124
+ /**
125
+ * Check if API key is admin key
126
+ * @param apiKey The API key to check
127
+ * @returns True if admin key
128
+ */
129
+ exports.getApiKeyType = getApiKeyType;
130
+ const isAdminKey = apiKey => {
131
+ return apiKey === ADMIN_API_KEY;
132
+ };
133
+
134
+ /**
135
+ * Validate an API key with the Onairos backend
136
+ * @param apiKey The API key to validate
137
+ * @returns Validation result with permissions and rate limits
138
+ */
139
+ exports.isAdminKey = isAdminKey;
140
+ const validateApiKey = async apiKey => {
141
+ try {
142
+ var _globalConfig2, _globalConfig3;
143
+ console.log('🔍 Validating API key...');
144
+
145
+ // Check if it's an admin key
146
+ if (isAdminKey(apiKey)) {
147
+ console.log('🔑 Admin key detected - granting full permissions');
148
+ return {
149
+ isValid: true,
150
+ permissions: ['*'],
151
+ // Full permissions for admin
152
+ rateLimits: {
153
+ remaining: 999999,
154
+ resetTime: Date.now() + 24 * 60 * 60 * 1000 // 24 hours
155
+ },
156
+ keyType: ApiKeyType.ADMIN
157
+ };
158
+ }
159
+
160
+ // Check basic format for developer keys
161
+ const keyType = getApiKeyType(apiKey);
162
+ if (keyType === ApiKeyType.INVALID) {
163
+ return {
164
+ isValid: false,
165
+ error: 'Invalid API key format. Developer keys must be at least 32 characters and start with "dev_" or "pk_"',
166
+ keyType: ApiKeyType.INVALID
167
+ };
168
+ }
169
+
170
+ // Check cache first
171
+ const cached = validationCache.get(apiKey);
172
+ if (cached && Date.now() - cached.timestamp < CACHE_DURATION) {
173
+ var _globalConfig;
174
+ if ((_globalConfig = globalConfig) !== null && _globalConfig !== void 0 && _globalConfig.enableLogging) {
175
+ console.log('📋 Using cached API key validation result');
176
+ }
177
+ return cached.result;
178
+ }
179
+ const environment = ((_globalConfig2 = globalConfig) === null || _globalConfig2 === void 0 ? void 0 : _globalConfig2.environment) || 'production';
180
+ const baseUrl = API_ENDPOINTS[environment];
181
+ const timeout = ((_globalConfig3 = globalConfig) === null || _globalConfig3 === void 0 ? void 0 : _globalConfig3.timeout) || 30000;
182
+
183
+ // Create abort controller for timeout
184
+ const controller = new AbortController();
185
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
186
+ try {
187
+ const response = await fetch(`${baseUrl}/auth/validate-key`, {
188
+ method: 'POST',
189
+ headers: {
190
+ 'Content-Type': 'application/json',
191
+ 'Authorization': `Bearer ${apiKey}`,
192
+ 'User-Agent': 'OnairosReactNative/1.0',
193
+ 'X-API-Key-Type': keyType
194
+ },
195
+ body: JSON.stringify({
196
+ environment,
197
+ sdk_version: '3.0.72',
198
+ platform: 'react-native',
199
+ keyType,
200
+ timestamp: new Date().toISOString()
201
+ }),
202
+ signal: controller.signal
203
+ });
204
+ clearTimeout(timeoutId);
205
+ const data = await response.json();
206
+ if (response.ok && data.success) {
207
+ var _globalConfig4;
208
+ const result = {
209
+ isValid: true,
210
+ permissions: data.permissions || [],
211
+ rateLimits: data.rateLimits || null,
212
+ keyType: keyType
213
+ };
214
+
215
+ // Cache the successful result
216
+ validationCache.set(apiKey, {
217
+ result,
218
+ timestamp: Date.now()
219
+ });
220
+ if ((_globalConfig4 = globalConfig) !== null && _globalConfig4 !== void 0 && _globalConfig4.enableLogging) {
221
+ console.log('✅ API key validation successful');
222
+ }
223
+ return result;
224
+ } else {
225
+ var _globalConfig5;
226
+ const errorMessage = data.error || `HTTP ${response.status}: ${response.statusText}`;
227
+ const result = {
228
+ isValid: false,
229
+ error: errorMessage,
230
+ keyType: keyType
231
+ };
232
+
233
+ // Don't cache failed results
234
+ if ((_globalConfig5 = globalConfig) !== null && _globalConfig5 !== void 0 && _globalConfig5.enableLogging) {
235
+ console.error('❌ API key validation failed:', errorMessage);
236
+ }
237
+ return result;
238
+ }
239
+ } catch (fetchError) {
240
+ clearTimeout(timeoutId);
241
+ if (fetchError.name === 'AbortError') {
242
+ const errorMessage = 'API key validation timeout';
243
+ console.error('⏱️ API key validation timeout');
244
+ return {
245
+ isValid: false,
246
+ error: errorMessage,
247
+ keyType: keyType
248
+ };
249
+ }
250
+ const errorMessage = `Network error during API key validation: ${fetchError.message}`;
251
+ console.error('🌐 Network error during API key validation:', fetchError);
252
+ return {
253
+ isValid: false,
254
+ error: errorMessage,
255
+ keyType: keyType
256
+ };
257
+ }
258
+ } catch (error) {
259
+ const errorMessage = `API key validation error: ${error.message}`;
260
+ console.error('❌ API key validation error:', error);
261
+ return {
262
+ isValid: false,
263
+ error: errorMessage,
264
+ keyType: ApiKeyType.INVALID
265
+ };
266
+ }
267
+ };
268
+
269
+ /**
270
+ * Get the current API configuration
271
+ * @returns Current API configuration or null if not initialized
272
+ */
273
+ exports.validateApiKey = validateApiKey;
274
+ const getApiConfig = () => {
275
+ return globalConfig;
276
+ };
277
+
278
+ /**
279
+ * Get the current API key
280
+ * @returns Current API key or null if not initialized
281
+ */
282
+ exports.getApiConfig = getApiConfig;
283
+ const getApiKey = () => {
284
+ var _globalConfig6;
285
+ return ((_globalConfig6 = globalConfig) === null || _globalConfig6 === void 0 ? void 0 : _globalConfig6.apiKey) || null;
286
+ };
287
+
288
+ /**
289
+ * Check if the SDK is properly initialized
290
+ * @returns True if initialized with valid API key
291
+ */
292
+ exports.getApiKey = getApiKey;
293
+ const isApiKeyInitialized = () => {
294
+ return isInitialized && globalConfig !== null;
295
+ };
296
+
297
+ /**
298
+ * Get authenticated headers for API requests
299
+ * @returns Headers object with Authorization and other required headers
300
+ */
301
+ exports.isApiKeyInitialized = isApiKeyInitialized;
302
+ const getAuthHeaders = () => {
303
+ var _globalConfig7;
304
+ if (!((_globalConfig7 = globalConfig) !== null && _globalConfig7 !== void 0 && _globalConfig7.apiKey)) {
305
+ throw new Error('SDK not initialized. Call initializeApiKey() first.');
306
+ }
307
+ const keyType = getApiKeyType(globalConfig.apiKey);
308
+ return {
309
+ 'Content-Type': 'application/json',
310
+ 'Authorization': `Bearer ${globalConfig.apiKey}`,
311
+ 'User-Agent': 'OnairosReactNative/3.0.72',
312
+ 'X-SDK-Version': '3.0.72',
313
+ 'X-SDK-Environment': globalConfig.environment || 'production',
314
+ 'X-API-Key-Type': keyType,
315
+ 'X-Timestamp': new Date().toISOString()
316
+ };
317
+ };
318
+
319
+ /**
320
+ * Make an authenticated API request
321
+ * @param endpoint The API endpoint (relative to base URL)
322
+ * @param options Fetch options
323
+ * @returns Response promise
324
+ */
325
+ exports.getAuthHeaders = getAuthHeaders;
326
+ const makeAuthenticatedRequest = async (endpoint, options = {}) => {
327
+ if (!isApiKeyInitialized()) {
328
+ throw new Error('SDK not initialized. Call initializeApiKey() first.');
329
+ }
330
+ const config = getApiConfig();
331
+ const baseUrl = API_ENDPOINTS[config.environment || 'production'];
332
+ const url = `${baseUrl}${endpoint.startsWith('/') ? '' : '/'}${endpoint}`;
333
+
334
+ // Merge authentication headers
335
+ const headers = {
336
+ ...getAuthHeaders(),
337
+ ...(options.headers || {})
338
+ };
339
+
340
+ // Add timeout
341
+ const controller = new AbortController();
342
+ const timeoutId = setTimeout(() => controller.abort(), config.timeout || 30000);
343
+ try {
344
+ if (config.enableLogging) {
345
+ console.log(`🌐 Making authenticated request to: ${endpoint}`);
346
+ }
347
+ const response = await fetch(url, {
348
+ ...options,
349
+ headers,
350
+ signal: controller.signal
351
+ });
352
+ clearTimeout(timeoutId);
353
+ if (config.enableLogging) {
354
+ console.log(`📡 Response status: ${response.status} for ${endpoint}`);
355
+ }
356
+
357
+ // Handle API key errors
358
+ if (response.status === 401) {
359
+ console.error('❌ API key authentication failed. Please check your API key.');
360
+ throw new Error('Invalid or expired API key');
361
+ }
362
+ if (response.status === 403) {
363
+ console.error('❌ API key permissions insufficient for this operation.');
364
+ throw new Error('Insufficient API key permissions');
365
+ }
366
+ if (response.status === 429) {
367
+ console.error('❌ API rate limit exceeded. Please try again later.');
368
+ throw new Error('Rate limit exceeded');
369
+ }
370
+ return response;
371
+ } catch (error) {
372
+ clearTimeout(timeoutId);
373
+ if (error.name === 'AbortError') {
374
+ console.error('⏱️ Request timeout for:', endpoint);
375
+ throw new Error('Request timeout');
376
+ }
377
+ throw error;
378
+ }
379
+ };
380
+
381
+ /**
382
+ * Clear the API key validation cache
383
+ */
384
+ exports.makeAuthenticatedRequest = makeAuthenticatedRequest;
385
+ const clearValidationCache = () => {
386
+ var _globalConfig8;
387
+ validationCache.clear();
388
+ if ((_globalConfig8 = globalConfig) !== null && _globalConfig8 !== void 0 && _globalConfig8.enableLogging) {
389
+ console.log('🗑️ API key validation cache cleared');
390
+ }
391
+ };
392
+
393
+ /**
394
+ * Reset the SDK initialization state
395
+ */
396
+ exports.clearValidationCache = clearValidationCache;
397
+ const resetApiKeyService = () => {
398
+ globalConfig = null;
399
+ isInitialized = false;
400
+ clearValidationCache();
401
+ console.log('🔄 API key service reset');
402
+ };
403
+ exports.resetApiKeyService = resetApiKeyService;
404
+ //# sourceMappingURL=apiKeyService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ADMIN_API_KEY","exports","ApiKeyType","globalConfig","validationCache","Map","isInitialized","CACHE_DURATION","API_ENDPOINTS","production","staging","development","initializeApiKey","config","console","log","apiKey","Error","length","environment","enableLogging","timeout","retryAttempts","apiKeyPrefix","substring","validation","validateApiKey","isValid","error","permissions","rateLimits","getApiKeyType","ADMIN","startsWith","DEVELOPER","INVALID","isAdminKey","_globalConfig2","_globalConfig3","remaining","resetTime","Date","now","keyType","cached","get","timestamp","_globalConfig","result","baseUrl","controller","AbortController","timeoutId","setTimeout","abort","response","fetch","method","headers","body","JSON","stringify","sdk_version","platform","toISOString","signal","clearTimeout","data","json","ok","success","_globalConfig4","set","_globalConfig5","errorMessage","status","statusText","fetchError","name","message","getApiConfig","getApiKey","_globalConfig6","isApiKeyInitialized","getAuthHeaders","_globalConfig7","makeAuthenticatedRequest","endpoint","options","url","clearValidationCache","_globalConfig8","clear","resetApiKeyService"],"sourceRoot":"..\\..\\..\\src","sources":["services/apiKeyService.ts"],"mappings":";;;;;;AAEA;AACO,MAAMA,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG,uBAAuB;;AAEpD;AAAA,IACYE,UAAU,GAAAD,OAAA,CAAAC,UAAA,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAMtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA,IAAIC,YAAkC,GAAG,IAAI;AAC7C,IAAIC,eAAmF,GAAG,IAAIC,GAAG,CAAC,CAAC;AACnG,IAAIC,aAAa,GAAG,KAAK;;AAEzB;AACA,MAAMC,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;;AAEpC;AACA,MAAMC,aAAa,GAAG;EACpBC,UAAU,EAAE,yBAAyB;EACrCC,OAAO,EAAE,gCAAgC;EACzCC,WAAW,EAAE;AACf,CAAC;;AAED;AACA;AACA;AACA;AACO,MAAMC,gBAAgB,GAAG,MAAOC,MAAqB,IAAoB;EAC9E,IAAI;IACFC,OAAO,CAACC,GAAG,CAAC,6CAA6C,CAAC;IAE1D,IAAI,CAACF,MAAM,CAACG,MAAM,EAAE;MAClB,MAAM,IAAIC,KAAK,CAAC,4CAA4C,CAAC;IAC/D;IAEA,IAAIJ,MAAM,CAACG,MAAM,CAACE,MAAM,GAAG,EAAE,EAAE;MAC7B,MAAM,IAAID,KAAK,CAAC,sEAAsE,CAAC;IACzF;;IAEA;IACAd,YAAY,GAAG;MACba,MAAM,EAAEH,MAAM,CAACG,MAAM;MACrBG,WAAW,EAAEN,MAAM,CAACM,WAAW,IAAI,YAAY;MAC/CC,aAAa,EAAEP,MAAM,CAACO,aAAa,KAAK,KAAK;MAAE;MAC/CC,OAAO,EAAER,MAAM,CAACQ,OAAO,IAAI,KAAK;MAChCC,aAAa,EAAET,MAAM,CAACS,aAAa,IAAI;IACzC,CAAC;IAED,IAAInB,YAAY,CAACiB,aAAa,EAAE;MAC9BN,OAAO,CAACC,GAAG,CAAC,uBAAuB,EAAE;QACnCI,WAAW,EAAEhB,YAAY,CAACgB,WAAW;QACrCE,OAAO,EAAElB,YAAY,CAACkB,OAAO;QAC7BC,aAAa,EAAEnB,YAAY,CAACmB,aAAa;QACzCC,YAAY,EAAEV,MAAM,CAACG,MAAM,CAACQ,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;QACnDJ,aAAa,EAAEjB,YAAY,CAACiB;MAC9B,CAAC,CAAC;IACJ;;IAEA;IACA,MAAMK,UAAU,GAAG,MAAMC,cAAc,CAACb,MAAM,CAACG,MAAM,CAAC;IAEtD,IAAI,CAACS,UAAU,CAACE,OAAO,EAAE;MACvB,MAAM,IAAIV,KAAK,CAAC,8BAA8BQ,UAAU,CAACG,KAAK,EAAE,CAAC;IACnE;IAEAtB,aAAa,GAAG,IAAI;IAEpB,IAAIH,YAAY,CAACiB,aAAa,EAAE;MAC9BN,OAAO,CAACC,GAAG,CAAC,wCAAwC,CAAC;MACrD,IAAIU,UAAU,CAACI,WAAW,EAAE;QAC1Bf,OAAO,CAACC,GAAG,CAAC,yBAAyB,EAAEU,UAAU,CAACI,WAAW,CAAC;MAChE;MACA,IAAIJ,UAAU,CAACK,UAAU,EAAE;QACzBhB,OAAO,CAACC,GAAG,CAAC,iBAAiB,EAAEU,UAAU,CAACK,UAAU,CAAC;MACvD;IACF;EACF,CAAC,CAAC,OAAOF,KAAK,EAAE;IACdd,OAAO,CAACc,KAAK,CAAC,qCAAqC,EAAEA,KAAK,CAAC;IAC3DtB,aAAa,GAAG,KAAK;IACrB,MAAMsB,KAAK;EACb;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AAJA3B,OAAA,CAAAW,gBAAA,GAAAA,gBAAA;AAKO,MAAMmB,aAAa,GAAIf,MAAc,IAAiB;EAC3D,IAAIA,MAAM,KAAKhB,aAAa,EAAE;IAC5B,OAAOE,UAAU,CAAC8B,KAAK;EACzB;;EAEA;EACA,IAAIhB,MAAM,CAACE,MAAM,IAAI,EAAE,KAAKF,MAAM,CAACiB,UAAU,CAAC,MAAM,CAAC,IAAIjB,MAAM,CAACiB,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;IAClF,OAAO/B,UAAU,CAACgC,SAAS;EAC7B;EAEA,OAAOhC,UAAU,CAACiC,OAAO;AAC3B,CAAC;;AAED;AACA;AACA;AACA;AACA;AAJAlC,OAAA,CAAA8B,aAAA,GAAAA,aAAA;AAKO,MAAMK,UAAU,GAAIpB,MAAc,IAAc;EACrD,OAAOA,MAAM,KAAKhB,aAAa;AACjC,CAAC;;AAED;AACA;AACA;AACA;AACA;AAJAC,OAAA,CAAAmC,UAAA,GAAAA,UAAA;AAKO,MAAMV,cAAc,GAAG,MAAOV,MAAc,IAAsC;EACvF,IAAI;IAAA,IAAAqB,cAAA,EAAAC,cAAA;IACFxB,OAAO,CAACC,GAAG,CAAC,0BAA0B,CAAC;;IAEvC;IACA,IAAIqB,UAAU,CAACpB,MAAM,CAAC,EAAE;MACtBF,OAAO,CAACC,GAAG,CAAC,mDAAmD,CAAC;MAChE,OAAO;QACLY,OAAO,EAAE,IAAI;QACbE,WAAW,EAAE,CAAC,GAAG,CAAC;QAAE;QACpBC,UAAU,EAAE;UACVS,SAAS,EAAE,MAAM;UACjBC,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC9C,CAAC;QACDC,OAAO,EAAEzC,UAAU,CAAC8B;MACtB,CAAC;IACH;;IAEA;IACA,MAAMW,OAAO,GAAGZ,aAAa,CAACf,MAAM,CAAC;IACrC,IAAI2B,OAAO,KAAKzC,UAAU,CAACiC,OAAO,EAAE;MAClC,OAAO;QACLR,OAAO,EAAE,KAAK;QACdC,KAAK,EAAE,sGAAsG;QAC7Ge,OAAO,EAAEzC,UAAU,CAACiC;MACtB,CAAC;IACH;;IAEA;IACA,MAAMS,MAAM,GAAGxC,eAAe,CAACyC,GAAG,CAAC7B,MAAM,CAAC;IAC1C,IAAI4B,MAAM,IAAIH,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGE,MAAM,CAACE,SAAS,GAAGvC,cAAc,EAAE;MAAA,IAAAwC,aAAA;MAC5D,KAAAA,aAAA,GAAI5C,YAAY,cAAA4C,aAAA,eAAZA,aAAA,CAAc3B,aAAa,EAAE;QAC/BN,OAAO,CAACC,GAAG,CAAC,2CAA2C,CAAC;MAC1D;MACA,OAAO6B,MAAM,CAACI,MAAM;IACtB;IAEA,MAAM7B,WAAW,GAAG,EAAAkB,cAAA,GAAAlC,YAAY,cAAAkC,cAAA,uBAAZA,cAAA,CAAclB,WAAW,KAAI,YAAY;IAC7D,MAAM8B,OAAO,GAAGzC,aAAa,CAACW,WAAW,CAAC;IAC1C,MAAME,OAAO,GAAG,EAAAiB,cAAA,GAAAnC,YAAY,cAAAmC,cAAA,uBAAZA,cAAA,CAAcjB,OAAO,KAAI,KAAK;;IAE9C;IACA,MAAM6B,UAAU,GAAG,IAAIC,eAAe,CAAC,CAAC;IACxC,MAAMC,SAAS,GAAGC,UAAU,CAAC,MAAMH,UAAU,CAACI,KAAK,CAAC,CAAC,EAAEjC,OAAO,CAAC;IAE/D,IAAI;MACF,MAAMkC,QAAQ,GAAG,MAAMC,KAAK,CAAC,GAAGP,OAAO,oBAAoB,EAAE;QAC3DQ,MAAM,EAAE,MAAM;QACdC,OAAO,EAAE;UACP,cAAc,EAAE,kBAAkB;UAClC,eAAe,EAAE,UAAU1C,MAAM,EAAE;UACnC,YAAY,EAAE,wBAAwB;UACtC,gBAAgB,EAAE2B;QACpB,CAAC;QACDgB,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;UACnB1C,WAAW;UACX2C,WAAW,EAAE,QAAQ;UACrBC,QAAQ,EAAE,cAAc;UACxBpB,OAAO;UACPG,SAAS,EAAE,IAAIL,IAAI,CAAC,CAAC,CAACuB,WAAW,CAAC;QACpC,CAAC,CAAC;QACFC,MAAM,EAAEf,UAAU,CAACe;MACrB,CAAC,CAAC;MAEFC,YAAY,CAACd,SAAS,CAAC;MAEvB,MAAMe,IAAI,GAAG,MAAMZ,QAAQ,CAACa,IAAI,CAAC,CAAC;MAElC,IAAIb,QAAQ,CAACc,EAAE,IAAIF,IAAI,CAACG,OAAO,EAAE;QAAA,IAAAC,cAAA;QAC/B,MAAMvB,MAA8B,GAAG;UACrCrB,OAAO,EAAE,IAAI;UACbE,WAAW,EAAEsC,IAAI,CAACtC,WAAW,IAAI,EAAE;UACnCC,UAAU,EAAEqC,IAAI,CAACrC,UAAU,IAAI,IAAI;UACnCa,OAAO,EAAEA;QACX,CAAC;;QAED;QACAvC,eAAe,CAACoE,GAAG,CAACxD,MAAM,EAAE;UAC1BgC,MAAM;UACNF,SAAS,EAAEL,IAAI,CAACC,GAAG,CAAC;QACtB,CAAC,CAAC;QAEF,KAAA6B,cAAA,GAAIpE,YAAY,cAAAoE,cAAA,eAAZA,cAAA,CAAcnD,aAAa,EAAE;UAC/BN,OAAO,CAACC,GAAG,CAAC,iCAAiC,CAAC;QAChD;QAEA,OAAOiC,MAAM;MACf,CAAC,MAAM;QAAA,IAAAyB,cAAA;QACL,MAAMC,YAAY,GAAGP,IAAI,CAACvC,KAAK,IAAI,QAAQ2B,QAAQ,CAACoB,MAAM,KAAKpB,QAAQ,CAACqB,UAAU,EAAE;QAEpF,MAAM5B,MAA8B,GAAG;UACrCrB,OAAO,EAAE,KAAK;UACdC,KAAK,EAAE8C,YAAY;UACnB/B,OAAO,EAAEA;QACX,CAAC;;QAED;QACA,KAAA8B,cAAA,GAAItE,YAAY,cAAAsE,cAAA,eAAZA,cAAA,CAAcrD,aAAa,EAAE;UAC/BN,OAAO,CAACc,KAAK,CAAC,8BAA8B,EAAE8C,YAAY,CAAC;QAC7D;QAEA,OAAO1B,MAAM;MACf;IACF,CAAC,CAAC,OAAO6B,UAAe,EAAE;MACxBX,YAAY,CAACd,SAAS,CAAC;MAEvB,IAAIyB,UAAU,CAACC,IAAI,KAAK,YAAY,EAAE;QACpC,MAAMJ,YAAY,GAAG,4BAA4B;QACjD5D,OAAO,CAACc,KAAK,CAAC,+BAA+B,CAAC;QAC9C,OAAO;UAAED,OAAO,EAAE,KAAK;UAAEC,KAAK,EAAE8C,YAAY;UAAE/B,OAAO,EAAEA;QAAQ,CAAC;MAClE;MAEA,MAAM+B,YAAY,GAAG,4CAA4CG,UAAU,CAACE,OAAO,EAAE;MACrFjE,OAAO,CAACc,KAAK,CAAC,6CAA6C,EAAEiD,UAAU,CAAC;MACxE,OAAO;QAAElD,OAAO,EAAE,KAAK;QAAEC,KAAK,EAAE8C,YAAY;QAAE/B,OAAO,EAAEA;MAAQ,CAAC;IAClE;EACF,CAAC,CAAC,OAAOf,KAAU,EAAE;IACnB,MAAM8C,YAAY,GAAG,6BAA6B9C,KAAK,CAACmD,OAAO,EAAE;IACjEjE,OAAO,CAACc,KAAK,CAAC,6BAA6B,EAAEA,KAAK,CAAC;IACnD,OAAO;MAAED,OAAO,EAAE,KAAK;MAAEC,KAAK,EAAE8C,YAAY;MAAE/B,OAAO,EAAEzC,UAAU,CAACiC;IAAQ,CAAC;EAC7E;AACF,CAAC;;AAED;AACA;AACA;AACA;AAHAlC,OAAA,CAAAyB,cAAA,GAAAA,cAAA;AAIO,MAAMsD,YAAY,GAAGA,CAAA,KAA4B;EACtD,OAAO7E,YAAY;AACrB,CAAC;;AAED;AACA;AACA;AACA;AAHAF,OAAA,CAAA+E,YAAA,GAAAA,YAAA;AAIO,MAAMC,SAAS,GAAGA,CAAA,KAAqB;EAAA,IAAAC,cAAA;EAC5C,OAAO,EAAAA,cAAA,GAAA/E,YAAY,cAAA+E,cAAA,uBAAZA,cAAA,CAAclE,MAAM,KAAI,IAAI;AACrC,CAAC;;AAED;AACA;AACA;AACA;AAHAf,OAAA,CAAAgF,SAAA,GAAAA,SAAA;AAIO,MAAME,mBAAmB,GAAGA,CAAA,KAAe;EAChD,OAAO7E,aAAa,IAAIH,YAAY,KAAK,IAAI;AAC/C,CAAC;;AAED;AACA;AACA;AACA;AAHAF,OAAA,CAAAkF,mBAAA,GAAAA,mBAAA;AAIO,MAAMC,cAAc,GAAGA,CAAA,KAA8B;EAAA,IAAAC,cAAA;EAC1D,IAAI,GAAAA,cAAA,GAAClF,YAAY,cAAAkF,cAAA,eAAZA,cAAA,CAAcrE,MAAM,GAAE;IACzB,MAAM,IAAIC,KAAK,CAAC,qDAAqD,CAAC;EACxE;EAEA,MAAM0B,OAAO,GAAGZ,aAAa,CAAC5B,YAAY,CAACa,MAAM,CAAC;EAElD,OAAO;IACL,cAAc,EAAE,kBAAkB;IAClC,eAAe,EAAE,UAAUb,YAAY,CAACa,MAAM,EAAE;IAChD,YAAY,EAAE,2BAA2B;IACzC,eAAe,EAAE,QAAQ;IACzB,mBAAmB,EAAEb,YAAY,CAACgB,WAAW,IAAI,YAAY;IAC7D,gBAAgB,EAAEwB,OAAO;IACzB,aAAa,EAAE,IAAIF,IAAI,CAAC,CAAC,CAACuB,WAAW,CAAC;EACxC,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AALA/D,OAAA,CAAAmF,cAAA,GAAAA,cAAA;AAMO,MAAME,wBAAwB,GAAG,MAAAA,CACtCC,QAAgB,EAChBC,OAAoB,GAAG,CAAC,CAAC,KACH;EACtB,IAAI,CAACL,mBAAmB,CAAC,CAAC,EAAE;IAC1B,MAAM,IAAIlE,KAAK,CAAC,qDAAqD,CAAC;EACxE;EAEA,MAAMJ,MAAM,GAAGmE,YAAY,CAAC,CAAE;EAC9B,MAAM/B,OAAO,GAAGzC,aAAa,CAACK,MAAM,CAACM,WAAW,IAAI,YAAY,CAAC;EACjE,MAAMsE,GAAG,GAAG,GAAGxC,OAAO,GAAGsC,QAAQ,CAACtD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,GAAGsD,QAAQ,EAAE;;EAEzE;EACA,MAAM7B,OAAO,GAAG;IACd,GAAG0B,cAAc,CAAC,CAAC;IACnB,IAAII,OAAO,CAAC9B,OAAO,IAAI,CAAC,CAAC;EAC3B,CAAC;;EAED;EACA,MAAMR,UAAU,GAAG,IAAIC,eAAe,CAAC,CAAC;EACxC,MAAMC,SAAS,GAAGC,UAAU,CAAC,MAAMH,UAAU,CAACI,KAAK,CAAC,CAAC,EAAEzC,MAAM,CAACQ,OAAO,IAAI,KAAK,CAAC;EAE/E,IAAI;IACF,IAAIR,MAAM,CAACO,aAAa,EAAE;MACxBN,OAAO,CAACC,GAAG,CAAC,uCAAuCwE,QAAQ,EAAE,CAAC;IAChE;IAEA,MAAMhC,QAAQ,GAAG,MAAMC,KAAK,CAACiC,GAAG,EAAE;MAChC,GAAGD,OAAO;MACV9B,OAAO;MACPO,MAAM,EAAEf,UAAU,CAACe;IACrB,CAAC,CAAC;IAEFC,YAAY,CAACd,SAAS,CAAC;IAEvB,IAAIvC,MAAM,CAACO,aAAa,EAAE;MACxBN,OAAO,CAACC,GAAG,CAAC,uBAAuBwC,QAAQ,CAACoB,MAAM,QAAQY,QAAQ,EAAE,CAAC;IACvE;;IAEA;IACA,IAAIhC,QAAQ,CAACoB,MAAM,KAAK,GAAG,EAAE;MAC3B7D,OAAO,CAACc,KAAK,CAAC,6DAA6D,CAAC;MAC5E,MAAM,IAAIX,KAAK,CAAC,4BAA4B,CAAC;IAC/C;IAEA,IAAIsC,QAAQ,CAACoB,MAAM,KAAK,GAAG,EAAE;MAC3B7D,OAAO,CAACc,KAAK,CAAC,wDAAwD,CAAC;MACvE,MAAM,IAAIX,KAAK,CAAC,kCAAkC,CAAC;IACrD;IAEA,IAAIsC,QAAQ,CAACoB,MAAM,KAAK,GAAG,EAAE;MAC3B7D,OAAO,CAACc,KAAK,CAAC,oDAAoD,CAAC;MACnE,MAAM,IAAIX,KAAK,CAAC,qBAAqB,CAAC;IACxC;IAEA,OAAOsC,QAAQ;EACjB,CAAC,CAAC,OAAO3B,KAAK,EAAE;IACdsC,YAAY,CAACd,SAAS,CAAC;IAEvB,IAAIxB,KAAK,CAACkD,IAAI,KAAK,YAAY,EAAE;MAC/BhE,OAAO,CAACc,KAAK,CAAC,yBAAyB,EAAE2D,QAAQ,CAAC;MAClD,MAAM,IAAItE,KAAK,CAAC,iBAAiB,CAAC;IACpC;IAEA,MAAMW,KAAK;EACb;AACF,CAAC;;AAED;AACA;AACA;AAFA3B,OAAA,CAAAqF,wBAAA,GAAAA,wBAAA;AAGO,MAAMI,oBAAoB,GAAGA,CAAA,KAAY;EAAA,IAAAC,cAAA;EAC9CvF,eAAe,CAACwF,KAAK,CAAC,CAAC;EACvB,KAAAD,cAAA,GAAIxF,YAAY,cAAAwF,cAAA,eAAZA,cAAA,CAAcvE,aAAa,EAAE;IAC/BN,OAAO,CAACC,GAAG,CAAC,sCAAsC,CAAC;EACrD;AACF,CAAC;;AAED;AACA;AACA;AAFAd,OAAA,CAAAyF,oBAAA,GAAAA,oBAAA;AAGO,MAAMG,kBAAkB,GAAGA,CAAA,KAAY;EAC5C1F,YAAY,GAAG,IAAI;EACnBG,aAAa,GAAG,KAAK;EACrBoF,oBAAoB,CAAC,CAAC;EACtB5E,OAAO,CAACC,GAAG,CAAC,0BAA0B,CAAC;AACzC,CAAC;AAACd,OAAA,CAAA4F,kBAAA,GAAAA,kBAAA","ignoreList":[]}