@mobileai/react-native 0.9.10 → 0.9.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/lib/module/components/AIAgent.js +635 -39
- package/lib/module/components/AIAgent.js.map +1 -1
- package/lib/module/components/AgentChatBar.js +309 -13
- package/lib/module/components/AgentChatBar.js.map +1 -1
- package/lib/module/config/endpoints.js +22 -0
- package/lib/module/config/endpoints.js.map +1 -0
- package/lib/module/core/systemPrompt.js +126 -100
- package/lib/module/core/systemPrompt.js.map +1 -1
- package/lib/module/services/AudioInputService.js +9 -0
- package/lib/module/services/AudioInputService.js.map +1 -1
- package/lib/module/services/flags/FlagService.js +1 -1
- package/lib/module/services/flags/FlagService.js.map +1 -1
- package/lib/module/services/telemetry/TelemetryService.js +44 -15
- package/lib/module/services/telemetry/TelemetryService.js.map +1 -1
- package/lib/module/services/telemetry/device.js +80 -10
- package/lib/module/services/telemetry/device.js.map +1 -1
- package/lib/module/services/telemetry/deviceMetadata.js +10 -0
- package/lib/module/services/telemetry/deviceMetadata.js.map +1 -0
- package/lib/module/support/EscalationEventSource.js +168 -0
- package/lib/module/support/EscalationEventSource.js.map +1 -0
- package/lib/module/support/EscalationSocket.js +46 -7
- package/lib/module/support/EscalationSocket.js.map +1 -1
- package/lib/module/support/SupportChatModal.js +544 -0
- package/lib/module/support/SupportChatModal.js.map +1 -0
- package/lib/module/support/TicketStore.js +93 -0
- package/lib/module/support/TicketStore.js.map +1 -0
- package/lib/module/support/escalateTool.js +45 -13
- package/lib/module/support/escalateTool.js.map +1 -1
- package/lib/module/support/index.js +2 -0
- package/lib/module/support/index.js.map +1 -1
- package/lib/typescript/src/components/AIAgent.d.ts +24 -1
- package/lib/typescript/src/components/AIAgent.d.ts.map +1 -1
- package/lib/typescript/src/components/AgentChatBar.d.ts +24 -2
- package/lib/typescript/src/components/AgentChatBar.d.ts.map +1 -1
- package/lib/typescript/src/config/endpoints.d.ts +18 -0
- package/lib/typescript/src/config/endpoints.d.ts.map +1 -0
- package/lib/typescript/src/core/systemPrompt.d.ts +4 -13
- package/lib/typescript/src/core/systemPrompt.d.ts.map +1 -1
- package/lib/typescript/src/core/types.d.ts +1 -1
- package/lib/typescript/src/core/types.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useAction.d.ts +2 -2
- package/lib/typescript/src/hooks/useAction.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/services/AudioInputService.d.ts.map +1 -1
- package/lib/typescript/src/services/telemetry/TelemetryService.d.ts +2 -1
- package/lib/typescript/src/services/telemetry/TelemetryService.d.ts.map +1 -1
- package/lib/typescript/src/services/telemetry/device.d.ts +15 -4
- package/lib/typescript/src/services/telemetry/device.d.ts.map +1 -1
- package/lib/typescript/src/services/telemetry/deviceMetadata.d.ts +6 -0
- package/lib/typescript/src/services/telemetry/deviceMetadata.d.ts.map +1 -0
- package/lib/typescript/src/support/EscalationEventSource.d.ts +38 -0
- package/lib/typescript/src/support/EscalationEventSource.d.ts.map +1 -0
- package/lib/typescript/src/support/EscalationSocket.d.ts +7 -1
- package/lib/typescript/src/support/EscalationSocket.d.ts.map +1 -1
- package/lib/typescript/src/support/SupportChatModal.d.ts +21 -0
- package/lib/typescript/src/support/SupportChatModal.d.ts.map +1 -0
- package/lib/typescript/src/support/TicketStore.d.ts +34 -0
- package/lib/typescript/src/support/TicketStore.d.ts.map +1 -0
- package/lib/typescript/src/support/escalateTool.d.ts +16 -1
- package/lib/typescript/src/support/escalateTool.d.ts.map +1 -1
- package/lib/typescript/src/support/index.d.ts +2 -1
- package/lib/typescript/src/support/index.d.ts.map +1 -1
- package/lib/typescript/src/support/types.d.ts +15 -0
- package/lib/typescript/src/support/types.d.ts.map +1 -1
- package/package.json +5 -1
- package/src/components/AIAgent.tsx +622 -38
- package/src/components/AgentChatBar.tsx +348 -9
- package/src/config/endpoints.ts +22 -0
- package/src/core/systemPrompt.ts +126 -100
- package/src/core/types.ts +1 -1
- package/src/hooks/useAction.ts +2 -2
- package/src/index.ts +1 -0
- package/src/services/AudioInputService.ts +9 -0
- package/src/services/flags/FlagService.ts +1 -1
- package/src/services/telemetry/TelemetryService.ts +46 -14
- package/src/services/telemetry/device.ts +88 -11
- package/src/services/telemetry/deviceMetadata.ts +13 -0
- package/src/support/EscalationEventSource.ts +190 -0
- package/src/support/EscalationSocket.ts +47 -8
- package/src/support/SupportChatModal.tsx +563 -0
- package/src/support/TicketStore.ts +100 -0
- package/src/support/escalateTool.ts +53 -13
- package/src/support/index.ts +2 -0
- package/src/support/types.ts +14 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["logger","getDeviceId","LOG_TAG","murmurhash3_32_gc","key","seed","remainder","bytes","h1","h1b","c1","c2","k1","i","length","charCodeAt","FlagService","assignments","fetched","constructor","hostUrl","fetch","analyticsKey","userId","res","ok","Error","status","data","json","flags","assignAll","info","err","warn","message","assignVariant","userIdentifier","flagKey","variants","rollout","hash","cumulative","identifier","newAssignments","flag","getFlag","defaultValue","debug","getAllFlags"],"sourceRoot":"../../../../src","sources":["services/flags/FlagService.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["logger","getDeviceId","LOG_TAG","murmurhash3_32_gc","key","seed","remainder","bytes","h1","h1b","c1","c2","k1","i","length","charCodeAt","FlagService","assignments","fetched","constructor","hostUrl","fetch","analyticsKey","userId","res","ok","Error","status","data","json","flags","assignAll","info","err","warn","message","assignVariant","userIdentifier","flagKey","variants","rollout","hash","cumulative","identifier","newAssignments","flag","getFlag","defaultValue","debug","getAllFlags"],"sourceRoot":"../../../../src","sources":["services/flags/FlagService.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -12,21 +12,45 @@
|
|
|
12
12
|
|
|
13
13
|
import { AppState, Platform } from 'react-native';
|
|
14
14
|
import { logger } from "../../utils/logger.js";
|
|
15
|
+
import { ENDPOINTS } from "../../config/endpoints.js";
|
|
15
16
|
import { scrubPII } from "./PiiScrubber.js";
|
|
16
17
|
import { FlagService } from "../flags/FlagService.js";
|
|
17
18
|
|
|
18
19
|
// Optional: AsyncStorage for offline event persistence
|
|
19
20
|
// SDK works without it — just loses crash recovery for queued events
|
|
20
|
-
let
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
let _asyncStorage = null;
|
|
22
|
+
let _asyncStorageLoaded = false;
|
|
23
|
+
function loadAsyncStorage() {
|
|
24
|
+
if (_asyncStorageLoaded) return _asyncStorage;
|
|
25
|
+
_asyncStorageLoaded = true;
|
|
26
|
+
try {
|
|
27
|
+
// Suppress the RN red box that AsyncStorage triggers when its native module
|
|
28
|
+
// isn't linked ("NativeModule: AsyncStorage is null").
|
|
29
|
+
const origError = console.error;
|
|
30
|
+
console.error = (...args) => {
|
|
31
|
+
const msg = args[0];
|
|
32
|
+
if (typeof msg === 'string' && msg.includes('AsyncStorage')) return;
|
|
33
|
+
origError.apply(console, args);
|
|
34
|
+
};
|
|
35
|
+
try {
|
|
36
|
+
const mod = require('@react-native-async-storage/async-storage');
|
|
37
|
+
_asyncStorage = mod.default ?? mod;
|
|
38
|
+
} finally {
|
|
39
|
+
console.error = origError;
|
|
40
|
+
}
|
|
41
|
+
// Verify the native module actually works by checking for the native bridge
|
|
42
|
+
if (!_asyncStorage || typeof _asyncStorage.getItem !== 'function') {
|
|
43
|
+
_asyncStorage = null;
|
|
44
|
+
}
|
|
45
|
+
} catch {
|
|
46
|
+
// Not installed — offline queue persistence disabled
|
|
47
|
+
}
|
|
48
|
+
return _asyncStorage;
|
|
25
49
|
}
|
|
26
50
|
|
|
27
51
|
// ─── Constants ─────────────────────────────────────────────────
|
|
28
52
|
|
|
29
|
-
const CLOUD_API_URL =
|
|
53
|
+
const CLOUD_API_URL = ENDPOINTS.telemetryIngest;
|
|
30
54
|
const STORAGE_KEY = '@mobileai/telemetry_queue';
|
|
31
55
|
const DEFAULT_FLUSH_INTERVAL_MS = 30_000;
|
|
32
56
|
const DEFAULT_MAX_BATCH_SIZE = 50;
|
|
@@ -45,14 +69,16 @@ import { getDeviceId } from "./device.js";
|
|
|
45
69
|
export class TelemetryService {
|
|
46
70
|
queue = [];
|
|
47
71
|
currentScreen = 'Unknown';
|
|
72
|
+
screenFlow = [];
|
|
48
73
|
flushTimer = null;
|
|
49
74
|
isFlushing = false;
|
|
50
75
|
appStateSubscription = null;
|
|
51
|
-
|
|
52
|
-
/** Public getter for the current screen, used by auto-capture utilities */
|
|
53
76
|
get screen() {
|
|
54
77
|
return this.currentScreen;
|
|
55
78
|
}
|
|
79
|
+
getScreenFlow() {
|
|
80
|
+
return [...this.screenFlow];
|
|
81
|
+
}
|
|
56
82
|
|
|
57
83
|
/**
|
|
58
84
|
* True while the AI agent is executing a tool (tap, type, navigate, etc.).
|
|
@@ -69,7 +95,7 @@ export class TelemetryService {
|
|
|
69
95
|
this.sessionId = generateSessionId();
|
|
70
96
|
|
|
71
97
|
// Extract base URL for flags API (e.g. drop /v1/events)
|
|
72
|
-
let baseUrl =
|
|
98
|
+
let baseUrl = new URL(ENDPOINTS.escalation).origin;
|
|
73
99
|
try {
|
|
74
100
|
if (config.analyticsProxyUrl) {
|
|
75
101
|
baseUrl = new URL(config.analyticsProxyUrl).origin;
|
|
@@ -174,6 +200,7 @@ export class TelemetryService {
|
|
|
174
200
|
if (this.currentScreen !== screenName) {
|
|
175
201
|
const prevScreen = this.currentScreen;
|
|
176
202
|
this.currentScreen = screenName;
|
|
203
|
+
this.screenFlow.push(screenName);
|
|
177
204
|
this.track('screen_view', {
|
|
178
205
|
screen: screenName,
|
|
179
206
|
prev_screen: prevScreen
|
|
@@ -199,7 +226,7 @@ export class TelemetryService {
|
|
|
199
226
|
analyticsKey: this.config.analyticsKey ?? '',
|
|
200
227
|
appId: Platform.OS,
|
|
201
228
|
// Consumer can override via config later
|
|
202
|
-
deviceId: getDeviceId(),
|
|
229
|
+
deviceId: getDeviceId() ?? 'unknown',
|
|
203
230
|
sdkVersion: SDK_VERSION,
|
|
204
231
|
events: eventsToSend
|
|
205
232
|
};
|
|
@@ -226,9 +253,10 @@ export class TelemetryService {
|
|
|
226
253
|
|
|
227
254
|
/** Save queued events to AsyncStorage for crash/restart recovery */
|
|
228
255
|
async persistQueue() {
|
|
229
|
-
|
|
256
|
+
const storage = loadAsyncStorage();
|
|
257
|
+
if (!storage) return;
|
|
230
258
|
try {
|
|
231
|
-
await
|
|
259
|
+
await storage.setItem(STORAGE_KEY, JSON.stringify(this.queue));
|
|
232
260
|
} catch {
|
|
233
261
|
// AsyncStorage may not be available in all environments
|
|
234
262
|
}
|
|
@@ -236,13 +264,14 @@ export class TelemetryService {
|
|
|
236
264
|
|
|
237
265
|
/** Restore queued events from previous session */
|
|
238
266
|
async restoreQueue() {
|
|
239
|
-
|
|
267
|
+
const storage = loadAsyncStorage();
|
|
268
|
+
if (!storage) return;
|
|
240
269
|
try {
|
|
241
|
-
const stored = await
|
|
270
|
+
const stored = await storage.getItem(STORAGE_KEY);
|
|
242
271
|
if (stored) {
|
|
243
272
|
const events = JSON.parse(stored);
|
|
244
273
|
this.queue = [...events, ...this.queue];
|
|
245
|
-
await
|
|
274
|
+
await storage.removeItem(STORAGE_KEY);
|
|
246
275
|
logger.info(LOG_TAG, `Restored ${events.length} events from previous session`);
|
|
247
276
|
}
|
|
248
277
|
} catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AppState","Platform","logger","scrubPII","FlagService","
|
|
1
|
+
{"version":3,"names":["AppState","Platform","logger","ENDPOINTS","scrubPII","FlagService","_asyncStorage","_asyncStorageLoaded","loadAsyncStorage","origError","console","error","args","msg","includes","apply","mod","require","default","getItem","CLOUD_API_URL","telemetryIngest","STORAGE_KEY","DEFAULT_FLUSH_INTERVAL_MS","DEFAULT_MAX_BATCH_SIZE","SDK_VERSION","LOG_TAG","generateSessionId","Date","now","Math","random","toString","slice","getDeviceId","TelemetryService","queue","currentScreen","screenFlow","flushTimer","isFlushing","appStateSubscription","screen","getScreenFlow","isAgentActing","setAgentActing","active","constructor","config","sessionId","baseUrl","URL","escalation","origin","analyticsProxyUrl","flags","start","isEnabled","debug","restoreQueue","analyticsKey","fetch","catch","e","warn","message","interval","flushIntervalMs","setInterval","flush","addEventListener","state","track","device","OS","os","String","Version","sdk_version","info","stop","events_count","length","clearInterval","remove","type","data","sanitizedData","Object","fromEntries","entries","map","k","v","$flags","getAllFlags","event","timestamp","toISOString","push","maxSize","maxBatchSize","setScreen","screenName","prevScreen","prev_screen","eventsToSend","url","headers","analyticsProxyHeaders","batch","appId","deviceId","sdkVersion","events","response","method","body","JSON","stringify","ok","Error","status","persistQueue","storage","setItem","stored","parse","removeItem"],"sourceRoot":"../../../../src","sources":["services/telemetry/TelemetryService.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,19 +1,89 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Persistent device ID — a UUID generated on first launch and stored in AsyncStorage.
|
|
5
|
+
* Unique per app install, survives across sessions.
|
|
6
|
+
*
|
|
7
|
+
* AsyncStorage is an optional peer dependency — if not installed, the ID
|
|
8
|
+
* persists only in memory for the current session.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const STORAGE_KEY = '@mobileai:device_id';
|
|
12
|
+
let _cachedId = null;
|
|
13
|
+
let _storageLoaded = false;
|
|
14
|
+
let _storage = null;
|
|
15
|
+
function loadStorage() {
|
|
16
|
+
if (_storageLoaded) return _storage;
|
|
17
|
+
_storageLoaded = true;
|
|
18
|
+
try {
|
|
19
|
+
// Suppress the RN red box that AsyncStorage triggers when its native module
|
|
20
|
+
// isn't linked ("NativeModule: AsyncStorage is null").
|
|
21
|
+
const origError = console.error;
|
|
22
|
+
console.error = (...args) => {
|
|
23
|
+
const msg = args[0];
|
|
24
|
+
if (typeof msg === 'string' && msg.includes('AsyncStorage')) return;
|
|
25
|
+
origError.apply(console, args);
|
|
26
|
+
};
|
|
27
|
+
try {
|
|
28
|
+
const mod = require('@react-native-async-storage/async-storage');
|
|
29
|
+
const candidate = mod.default ?? mod;
|
|
30
|
+
if (candidate && typeof candidate.getItem === 'function') {
|
|
31
|
+
_storage = candidate;
|
|
32
|
+
}
|
|
33
|
+
} finally {
|
|
34
|
+
console.error = origError;
|
|
35
|
+
}
|
|
36
|
+
} catch {
|
|
37
|
+
// Not installed — device ID won't persist across restarts
|
|
38
|
+
}
|
|
39
|
+
return _storage;
|
|
40
|
+
}
|
|
41
|
+
function generateUUID() {
|
|
42
|
+
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
|
|
43
|
+
return crypto.randomUUID();
|
|
44
|
+
}
|
|
45
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
|
|
46
|
+
const r = Math.random() * 16 | 0;
|
|
47
|
+
const v = c === 'x' ? r : r & 0x3 | 0x8;
|
|
48
|
+
return v.toString(16);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
4
51
|
|
|
5
52
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* without collecting PII hardware identifiers.
|
|
53
|
+
* Returns the persistent device ID synchronously (from cache).
|
|
54
|
+
* Returns null if not yet initialized.
|
|
9
55
|
*/
|
|
10
56
|
export function getDeviceId() {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
57
|
+
return _cachedId;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Initializes or retrieves the persistent device ID.
|
|
62
|
+
* Call once on app startup. Subsequent getDeviceId() calls are synchronous.
|
|
63
|
+
*/
|
|
64
|
+
export async function initDeviceId() {
|
|
65
|
+
if (_cachedId) return _cachedId;
|
|
66
|
+
const storage = loadStorage();
|
|
67
|
+
if (storage) {
|
|
68
|
+
try {
|
|
69
|
+
const stored = await storage.getItem(STORAGE_KEY);
|
|
70
|
+
if (stored) {
|
|
71
|
+
_cachedId = stored;
|
|
72
|
+
return stored;
|
|
73
|
+
}
|
|
74
|
+
} catch {
|
|
75
|
+
// Storage read failed — continue with new ID
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const newId = generateUUID();
|
|
79
|
+
_cachedId = newId;
|
|
80
|
+
if (storage) {
|
|
81
|
+
try {
|
|
82
|
+
await storage.setItem(STORAGE_KEY, newId);
|
|
83
|
+
} catch {
|
|
84
|
+
// Storage write failed — ID works for this session only
|
|
85
|
+
}
|
|
16
86
|
}
|
|
17
|
-
return
|
|
87
|
+
return newId;
|
|
18
88
|
}
|
|
19
89
|
//# sourceMappingURL=device.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["STORAGE_KEY","_cachedId","_storageLoaded","_storage","loadStorage","origError","console","error","args","msg","includes","apply","mod","require","candidate","default","getItem","generateUUID","crypto","randomUUID","replace","c","r","Math","random","v","toString","getDeviceId","initDeviceId","storage","stored","newId","setItem"],"sourceRoot":"../../../../src","sources":["services/telemetry/device.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,WAAW,GAAG,qBAAqB;AAEzC,IAAIC,SAAwB,GAAG,IAAI;AACnC,IAAIC,cAAc,GAAG,KAAK;AAC1B,IAAIC,QAAa,GAAG,IAAI;AAExB,SAASC,WAAWA,CAAA,EAAQ;EAC1B,IAAIF,cAAc,EAAE,OAAOC,QAAQ;EACnCD,cAAc,GAAG,IAAI;EACrB,IAAI;IACF;IACA;IACA,MAAMG,SAAS,GAAGC,OAAO,CAACC,KAAK;IAC/BD,OAAO,CAACC,KAAK,GAAG,CAAC,GAAGC,IAAe,KAAK;MACtC,MAAMC,GAAG,GAAGD,IAAI,CAAC,CAAC,CAAC;MACnB,IAAI,OAAOC,GAAG,KAAK,QAAQ,IAAIA,GAAG,CAACC,QAAQ,CAAC,cAAc,CAAC,EAAE;MAC7DL,SAAS,CAACM,KAAK,CAACL,OAAO,EAAEE,IAAI,CAAC;IAChC,CAAC;IACD,IAAI;MACF,MAAMI,GAAG,GAAGC,OAAO,CAAC,2CAA2C,CAAC;MAChE,MAAMC,SAAS,GAAGF,GAAG,CAACG,OAAO,IAAIH,GAAG;MACpC,IAAIE,SAAS,IAAI,OAAOA,SAAS,CAACE,OAAO,KAAK,UAAU,EAAE;QACxDb,QAAQ,GAAGW,SAAS;MACtB;IACF,CAAC,SAAS;MACRR,OAAO,CAACC,KAAK,GAAGF,SAAS;IAC3B;EACF,CAAC,CAAC,MAAM;IACN;EAAA;EAEF,OAAOF,QAAQ;AACjB;AAEA,SAASc,YAAYA,CAAA,EAAW;EAC9B,IAAI,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACC,UAAU,EAAE;IACtD,OAAOD,MAAM,CAACC,UAAU,CAAC,CAAC;EAC5B;EACA,OAAO,sCAAsC,CAACC,OAAO,CAAC,OAAO,EAAGC,CAAC,IAAK;IACpE,MAAMC,CAAC,GAAIC,IAAI,CAACC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAI,CAAC;IAClC,MAAMC,CAAC,GAAGJ,CAAC,KAAK,GAAG,GAAGC,CAAC,GAAIA,CAAC,GAAG,GAAG,GAAI,GAAG;IACzC,OAAOG,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC;EACvB,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAAA,EAAkB;EAC3C,OAAO1B,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAe2B,YAAYA,CAAA,EAAoB;EACpD,IAAI3B,SAAS,EAAE,OAAOA,SAAS;EAE/B,MAAM4B,OAAO,GAAGzB,WAAW,CAAC,CAAC;EAC7B,IAAIyB,OAAO,EAAE;IACX,IAAI;MACF,MAAMC,MAAqB,GAAG,MAAMD,OAAO,CAACb,OAAO,CAAChB,WAAW,CAAC;MAChE,IAAI8B,MAAM,EAAE;QACV7B,SAAS,GAAG6B,MAAM;QAClB,OAAOA,MAAM;MACf;IACF,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;EAEA,MAAMC,KAAK,GAAGd,YAAY,CAAC,CAAC;EAC5BhB,SAAS,GAAG8B,KAAK;EAEjB,IAAIF,OAAO,EAAE;IACX,IAAI;MACF,MAAMA,OAAO,CAACG,OAAO,CAAChC,WAAW,EAAE+B,KAAK,CAAC;IAC3C,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;EAEA,OAAOA,KAAK;AACd","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Platform } from 'react-native';
|
|
4
|
+
export function getDeviceMetadata() {
|
|
5
|
+
return {
|
|
6
|
+
platform: Platform.OS === 'ios' ? 'iOS' : Platform.OS === 'android' ? 'Android' : Platform.OS,
|
|
7
|
+
osVersion: String(Platform.Version)
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=deviceMetadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Platform","getDeviceMetadata","platform","OS","osVersion","String","Version"],"sourceRoot":"../../../../src","sources":["services/telemetry/deviceMetadata.ts"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,cAAc;AAOvC,OAAO,SAASC,iBAAiBA,CAAA,EAAmB;EAClD,OAAO;IACLC,QAAQ,EAAEF,QAAQ,CAACG,EAAE,KAAK,KAAK,GAAG,KAAK,GAAGH,QAAQ,CAACG,EAAE,KAAK,SAAS,GAAG,SAAS,GAAGH,QAAQ,CAACG,EAAE;IAC7FC,SAAS,EAAEC,MAAM,CAACL,QAAQ,CAACM,OAAO;EACpC,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* EscalationEventSource — SSE client using fetch + ReadableStream.
|
|
5
|
+
*
|
|
6
|
+
* Uses only the fetch API (available in all React Native runtimes)
|
|
7
|
+
* to consume Server-Sent Events — no EventSource polyfill needed.
|
|
8
|
+
* Provides a reliable, auto-reconnecting channel for server-push
|
|
9
|
+
* events like `ticket_closed` that complements the bidirectional
|
|
10
|
+
* WebSocket used for chat.
|
|
11
|
+
*
|
|
12
|
+
* Lifecycle:
|
|
13
|
+
* 1. SDK calls connect() → fetch with streaming response
|
|
14
|
+
* 2. Server holds connection open, pushes `ticket_closed` when agent resolves
|
|
15
|
+
* 3. On disconnect, auto-reconnects with exponential backoff (max 5 attempts)
|
|
16
|
+
* 4. If ticket is already closed, server responds immediately with the event
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { logger } from "../utils/logger.js";
|
|
20
|
+
export class EscalationEventSource {
|
|
21
|
+
abortController = null;
|
|
22
|
+
intentionalClose = false;
|
|
23
|
+
reconnectAttempts = 0;
|
|
24
|
+
reconnectTimer = null;
|
|
25
|
+
maxReconnectAttempts = 5;
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.options = options;
|
|
28
|
+
}
|
|
29
|
+
connect() {
|
|
30
|
+
this.intentionalClose = false;
|
|
31
|
+
this.reconnectAttempts = 0;
|
|
32
|
+
this.openConnection();
|
|
33
|
+
}
|
|
34
|
+
disconnect() {
|
|
35
|
+
this.intentionalClose = true;
|
|
36
|
+
if (this.reconnectTimer) {
|
|
37
|
+
clearTimeout(this.reconnectTimer);
|
|
38
|
+
this.reconnectTimer = null;
|
|
39
|
+
}
|
|
40
|
+
if (this.abortController) {
|
|
41
|
+
this.abortController.abort();
|
|
42
|
+
this.abortController = null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async openConnection() {
|
|
46
|
+
if (this.intentionalClose) return;
|
|
47
|
+
this.abortController = new AbortController();
|
|
48
|
+
try {
|
|
49
|
+
const response = await fetch(this.options.url, {
|
|
50
|
+
signal: this.abortController.signal,
|
|
51
|
+
headers: {
|
|
52
|
+
Accept: 'text/event-stream'
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
if (!response.ok) {
|
|
56
|
+
logger.warn('EscalationSSE', 'Non-OK response:', response.status);
|
|
57
|
+
this.scheduleReconnect();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (!response.body) {
|
|
61
|
+
logger.warn('EscalationSSE', 'No readable body — falling back to reading full response');
|
|
62
|
+
await this.readFullResponse(response);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
this.reconnectAttempts = 0;
|
|
66
|
+
await this.readStream(response.body);
|
|
67
|
+
} catch (err) {
|
|
68
|
+
if (this.intentionalClose) return;
|
|
69
|
+
if (err.name === 'AbortError') return;
|
|
70
|
+
logger.warn('EscalationSSE', 'Connection error:', err.message);
|
|
71
|
+
this.options.onError?.(err);
|
|
72
|
+
this.scheduleReconnect();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async readStream(body) {
|
|
76
|
+
const reader = body.getReader();
|
|
77
|
+
const decoder = new TextDecoder();
|
|
78
|
+
let buffer = '';
|
|
79
|
+
try {
|
|
80
|
+
while (true) {
|
|
81
|
+
const {
|
|
82
|
+
done,
|
|
83
|
+
value
|
|
84
|
+
} = await reader.read();
|
|
85
|
+
if (done) break;
|
|
86
|
+
buffer += decoder.decode(value, {
|
|
87
|
+
stream: true
|
|
88
|
+
});
|
|
89
|
+
const lines = buffer.split('\n');
|
|
90
|
+
buffer = lines.pop();
|
|
91
|
+
let currentEvent = '';
|
|
92
|
+
let currentData = '';
|
|
93
|
+
for (const line of lines) {
|
|
94
|
+
if (line.startsWith('event: ')) {
|
|
95
|
+
currentEvent = line.slice(7).trim();
|
|
96
|
+
} else if (line.startsWith('data: ')) {
|
|
97
|
+
currentData = line.slice(6).trim();
|
|
98
|
+
} else if (line === '' && currentEvent && currentData) {
|
|
99
|
+
this.handleEvent(currentEvent, currentData);
|
|
100
|
+
currentEvent = '';
|
|
101
|
+
currentData = '';
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
} catch (err) {
|
|
106
|
+
if (this.intentionalClose) return;
|
|
107
|
+
if (err.name === 'AbortError') return;
|
|
108
|
+
logger.warn('EscalationSSE', 'Stream read error:', err.message);
|
|
109
|
+
}
|
|
110
|
+
if (!this.intentionalClose) {
|
|
111
|
+
this.scheduleReconnect();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async readFullResponse(response) {
|
|
115
|
+
try {
|
|
116
|
+
const text = await response.text();
|
|
117
|
+
let currentEvent = '';
|
|
118
|
+
let currentData = '';
|
|
119
|
+
for (const line of text.split('\n')) {
|
|
120
|
+
if (line.startsWith('event: ')) {
|
|
121
|
+
currentEvent = line.slice(7).trim();
|
|
122
|
+
} else if (line.startsWith('data: ')) {
|
|
123
|
+
currentData = line.slice(6).trim();
|
|
124
|
+
} else if (line === '' && currentEvent && currentData) {
|
|
125
|
+
this.handleEvent(currentEvent, currentData);
|
|
126
|
+
currentEvent = '';
|
|
127
|
+
currentData = '';
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
} catch (err) {
|
|
131
|
+
if (this.intentionalClose) return;
|
|
132
|
+
logger.warn('EscalationSSE', 'Full response read error:', err.message);
|
|
133
|
+
}
|
|
134
|
+
if (!this.intentionalClose) {
|
|
135
|
+
this.scheduleReconnect();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
handleEvent(event, data) {
|
|
139
|
+
try {
|
|
140
|
+
const parsed = JSON.parse(data);
|
|
141
|
+
if (event === 'connected') {
|
|
142
|
+
logger.info('EscalationSSE', 'Connected for ticket:', parsed.ticketId);
|
|
143
|
+
this.options.onConnected?.(parsed.ticketId);
|
|
144
|
+
} else if (event === 'ticket_closed') {
|
|
145
|
+
logger.info('EscalationSSE', 'Ticket closed event:', parsed.ticketId);
|
|
146
|
+
this.options.onTicketClosed?.(parsed.ticketId);
|
|
147
|
+
this.intentionalClose = true;
|
|
148
|
+
this.abortController?.abort();
|
|
149
|
+
}
|
|
150
|
+
} catch {
|
|
151
|
+
// ignore parse error
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
scheduleReconnect() {
|
|
155
|
+
if (this.intentionalClose) return;
|
|
156
|
+
if (this.reconnectAttempts >= this.maxReconnectAttempts) {
|
|
157
|
+
logger.warn('EscalationSSE', 'Max reconnect attempts reached — giving up');
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const delay = Math.min(1000 * 2 ** this.reconnectAttempts, 16_000);
|
|
161
|
+
this.reconnectAttempts++;
|
|
162
|
+
logger.info('EscalationSSE', `Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})`);
|
|
163
|
+
this.reconnectTimer = setTimeout(() => {
|
|
164
|
+
this.openConnection();
|
|
165
|
+
}, delay);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=EscalationEventSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["logger","EscalationEventSource","abortController","intentionalClose","reconnectAttempts","reconnectTimer","maxReconnectAttempts","constructor","options","connect","openConnection","disconnect","clearTimeout","abort","AbortController","response","fetch","url","signal","headers","Accept","ok","warn","status","scheduleReconnect","body","readFullResponse","readStream","err","name","message","onError","reader","getReader","decoder","TextDecoder","buffer","done","value","read","decode","stream","lines","split","pop","currentEvent","currentData","line","startsWith","slice","trim","handleEvent","text","event","data","parsed","JSON","parse","info","ticketId","onConnected","onTicketClosed","delay","Math","min","setTimeout"],"sourceRoot":"../../../src","sources":["support/EscalationEventSource.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -25,6 +25,8 @@ export class EscalationSocket {
|
|
|
25
25
|
constructor(options) {
|
|
26
26
|
this.onReply = options.onReply;
|
|
27
27
|
this.onError = options.onError;
|
|
28
|
+
this.onTypingChange = options.onTypingChange;
|
|
29
|
+
this.onTicketClosed = options.onTicketClosed;
|
|
28
30
|
this.maxReconnectAttempts = options.maxReconnectAttempts ?? 3;
|
|
29
31
|
}
|
|
30
32
|
connect(wsUrl) {
|
|
@@ -32,6 +34,26 @@ export class EscalationSocket {
|
|
|
32
34
|
this.intentionalClose = false;
|
|
33
35
|
this.openConnection();
|
|
34
36
|
}
|
|
37
|
+
sendText(text) {
|
|
38
|
+
if (this.ws?.readyState === 1) {
|
|
39
|
+
// WebSocket.OPEN
|
|
40
|
+
this.ws.send(JSON.stringify({
|
|
41
|
+
type: 'user_message',
|
|
42
|
+
content: text
|
|
43
|
+
}));
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
sendTypingStatus(isTyping) {
|
|
49
|
+
if (this.ws?.readyState === 1) {
|
|
50
|
+
this.ws.send(JSON.stringify({
|
|
51
|
+
type: isTyping ? 'typing_start' : 'typing_stop'
|
|
52
|
+
}));
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
35
57
|
disconnect() {
|
|
36
58
|
this.intentionalClose = true;
|
|
37
59
|
if (this.reconnectTimer) {
|
|
@@ -52,27 +74,44 @@ export class EscalationSocket {
|
|
|
52
74
|
return;
|
|
53
75
|
}
|
|
54
76
|
this.ws.onopen = () => {
|
|
55
|
-
console.log('[EscalationSocket] Connected:', this.wsUrl);
|
|
77
|
+
console.log('[EscalationSocket] ✅ Connected to:', this.wsUrl);
|
|
56
78
|
this.reconnectAttempts = 0;
|
|
57
79
|
};
|
|
58
80
|
this.ws.onmessage = event => {
|
|
59
81
|
try {
|
|
60
|
-
const
|
|
61
|
-
|
|
82
|
+
const rawData = String(event.data);
|
|
83
|
+
console.log('[EscalationSocket] Message received:', rawData);
|
|
84
|
+
const msg = JSON.parse(rawData);
|
|
85
|
+
if (msg.type === 'ping') {
|
|
86
|
+
console.log('[EscalationSocket] Heartbeat ping received');
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
62
89
|
if (msg.type === 'reply' && msg.reply) {
|
|
63
|
-
|
|
90
|
+
console.log('[EscalationSocket] Human reply received:', msg.reply);
|
|
91
|
+
this.onTypingChange?.(false);
|
|
92
|
+
this.onReply(msg.reply, msg.ticketId);
|
|
93
|
+
} else if (msg.type === 'typing_start') {
|
|
94
|
+
this.onTypingChange?.(true);
|
|
95
|
+
} else if (msg.type === 'typing_stop') {
|
|
96
|
+
this.onTypingChange?.(false);
|
|
97
|
+
} else if (msg.type === 'ticket_closed') {
|
|
98
|
+
console.log('[EscalationSocket] Ticket closed by agent');
|
|
99
|
+
this.onTypingChange?.(false);
|
|
100
|
+
this.onTicketClosed?.(msg.ticketId);
|
|
101
|
+
this.intentionalClose = true;
|
|
102
|
+
this.ws?.close();
|
|
64
103
|
}
|
|
65
104
|
} catch {
|
|
66
105
|
// Non-JSON message — ignore
|
|
67
106
|
}
|
|
68
107
|
};
|
|
69
108
|
this.ws.onerror = event => {
|
|
70
|
-
console.error('[EscalationSocket]
|
|
109
|
+
console.error('[EscalationSocket] ❌ WebSocket error. URL was:', this.wsUrl, event);
|
|
71
110
|
this.onError?.(event);
|
|
72
111
|
};
|
|
73
|
-
this.ws.onclose =
|
|
112
|
+
this.ws.onclose = event => {
|
|
113
|
+
console.warn(`[EscalationSocket] Connection closed. Code=${event.code} Reason="${event.reason}" Intentional=${this.intentionalClose}`);
|
|
74
114
|
if (this.intentionalClose) return;
|
|
75
|
-
console.warn('[EscalationSocket] Connection closed unexpectedly');
|
|
76
115
|
this.scheduleReconnect();
|
|
77
116
|
};
|
|
78
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EscalationSocket","ws","wsUrl","reconnectAttempts","reconnectTimer","intentionalClose","constructor","options","onReply","onError","maxReconnectAttempts","connect","openConnection","disconnect","clearTimeout","close","WebSocket","err","console","error","onopen","log","onmessage","event","
|
|
1
|
+
{"version":3,"names":["EscalationSocket","ws","wsUrl","reconnectAttempts","reconnectTimer","intentionalClose","constructor","options","onReply","onError","onTypingChange","onTicketClosed","maxReconnectAttempts","connect","openConnection","sendText","text","readyState","send","JSON","stringify","type","content","sendTypingStatus","isTyping","disconnect","clearTimeout","close","WebSocket","err","console","error","onopen","log","onmessage","event","rawData","String","data","msg","parse","reply","ticketId","onerror","onclose","warn","code","reason","scheduleReconnect","delay","Math","min","setTimeout"],"sourceRoot":"../../../src","sources":["support/EscalationSocket.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA,OAAO,MAAMA,gBAAgB,CAAC;EACpBC,EAAE,GAAqB,IAAI;EAC3BC,KAAK,GAAkB,IAAI;EAC3BC,iBAAiB,GAAG,CAAC;EACrBC,cAAc,GAAyC,IAAI;EAC3DC,gBAAgB,GAAG,KAAK;EAQhCC,WAAWA,CAACC,OAAgC,EAAE;IAC5C,IAAI,CAACC,OAAO,GAAGD,OAAO,CAACC,OAAO;IAC9B,IAAI,CAACC,OAAO,GAAGF,OAAO,CAACE,OAAO;IAC9B,IAAI,CAACC,cAAc,GAAGH,OAAO,CAACG,cAAc;IAC5C,IAAI,CAACC,cAAc,GAAGJ,OAAO,CAACI,cAAc;IAC5C,IAAI,CAACC,oBAAoB,GAAGL,OAAO,CAACK,oBAAoB,IAAI,CAAC;EAC/D;EAEAC,OAAOA,CAACX,KAAa,EAAQ;IAC3B,IAAI,CAACA,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACG,gBAAgB,GAAG,KAAK;IAC7B,IAAI,CAACS,cAAc,CAAC,CAAC;EACvB;EAEAC,QAAQA,CAACC,IAAY,EAAW;IAC9B,IAAI,IAAI,CAACf,EAAE,EAAEgB,UAAU,KAAK,CAAC,EAAE;MAAE;MAC/B,IAAI,CAAChB,EAAE,CAACiB,IAAI,CAACC,IAAI,CAACC,SAAS,CAAC;QAAEC,IAAI,EAAE,cAAc;QAAEC,OAAO,EAAEN;MAAK,CAAC,CAAC,CAAC;MACrE,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAO,gBAAgBA,CAACC,QAAiB,EAAW;IAC3C,IAAI,IAAI,CAACvB,EAAE,EAAEgB,UAAU,KAAK,CAAC,EAAE;MAC7B,IAAI,CAAChB,EAAE,CAACiB,IAAI,CAACC,IAAI,CAACC,SAAS,CAAC;QAAEC,IAAI,EAAEG,QAAQ,GAAG,cAAc,GAAG;MAAc,CAAC,CAAC,CAAC;MACjF,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;EAEAC,UAAUA,CAAA,EAAS;IACjB,IAAI,CAACpB,gBAAgB,GAAG,IAAI;IAC5B,IAAI,IAAI,CAACD,cAAc,EAAE;MACvBsB,YAAY,CAAC,IAAI,CAACtB,cAAc,CAAC;MACjC,IAAI,CAACA,cAAc,GAAG,IAAI;IAC5B;IACA,IAAI,IAAI,CAACH,EAAE,EAAE;MACX,IAAI,CAACA,EAAE,CAAC0B,KAAK,CAAC,CAAC;MACf,IAAI,CAAC1B,EAAE,GAAG,IAAI;IAChB;EACF;EAEQa,cAAcA,CAAA,EAAS;IAC7B,IAAI,CAAC,IAAI,CAACZ,KAAK,EAAE;IAEjB,IAAI;MACF,IAAI,CAACD,EAAE,GAAG,IAAI2B,SAAS,CAAC,IAAI,CAAC1B,KAAK,CAAC;IACrC,CAAC,CAAC,OAAO2B,GAAG,EAAE;MACZC,OAAO,CAACC,KAAK,CAAC,8CAA8C,EAAEF,GAAG,CAAC;MAClE;IACF;IAEA,IAAI,CAAC5B,EAAE,CAAC+B,MAAM,GAAG,MAAM;MACrBF,OAAO,CAACG,GAAG,CAAC,oCAAoC,EAAE,IAAI,CAAC/B,KAAK,CAAC;MAC7D,IAAI,CAACC,iBAAiB,GAAG,CAAC;IAC5B,CAAC;IAED,IAAI,CAACF,EAAE,CAACiC,SAAS,GAAIC,KAAK,IAAK;MAC7B,IAAI;QACF,MAAMC,OAAO,GAAGC,MAAM,CAACF,KAAK,CAACG,IAAI,CAAC;QAClCR,OAAO,CAACG,GAAG,CAAC,sCAAsC,EAAEG,OAAO,CAAC;QAC5D,MAAMG,GAAG,GAAGpB,IAAI,CAACqB,KAAK,CAACJ,OAAO,CAAC;QAC/B,IAAIG,GAAG,CAAClB,IAAI,KAAK,MAAM,EAAE;UACvBS,OAAO,CAACG,GAAG,CAAC,4CAA4C,CAAC;UACzD;QACF;QACA,IAAIM,GAAG,CAAClB,IAAI,KAAK,OAAO,IAAIkB,GAAG,CAACE,KAAK,EAAE;UACrCX,OAAO,CAACG,GAAG,CAAC,0CAA0C,EAAEM,GAAG,CAACE,KAAK,CAAC;UAClE,IAAI,CAAC/B,cAAc,GAAG,KAAK,CAAC;UAC5B,IAAI,CAACF,OAAO,CAAC+B,GAAG,CAACE,KAAK,EAAEF,GAAG,CAACG,QAAQ,CAAC;QACvC,CAAC,MAAM,IAAIH,GAAG,CAAClB,IAAI,KAAK,cAAc,EAAE;UACtC,IAAI,CAACX,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC,MAAM,IAAI6B,GAAG,CAAClB,IAAI,KAAK,aAAa,EAAE;UACrC,IAAI,CAACX,cAAc,GAAG,KAAK,CAAC;QAC9B,CAAC,MAAM,IAAI6B,GAAG,CAAClB,IAAI,KAAK,eAAe,EAAE;UACvCS,OAAO,CAACG,GAAG,CAAC,2CAA2C,CAAC;UACxD,IAAI,CAACvB,cAAc,GAAG,KAAK,CAAC;UAC5B,IAAI,CAACC,cAAc,GAAG4B,GAAG,CAACG,QAAQ,CAAC;UACnC,IAAI,CAACrC,gBAAgB,GAAG,IAAI;UAC5B,IAAI,CAACJ,EAAE,EAAE0B,KAAK,CAAC,CAAC;QAClB;MACF,CAAC,CAAC,MAAM;QACN;MAAA;IAEJ,CAAC;IAED,IAAI,CAAC1B,EAAE,CAAC0C,OAAO,GAAIR,KAAK,IAAK;MAC3BL,OAAO,CAACC,KAAK,CAAC,gDAAgD,EAAE,IAAI,CAAC7B,KAAK,EAAEiC,KAAK,CAAC;MAClF,IAAI,CAAC1B,OAAO,GAAG0B,KAAK,CAAC;IACvB,CAAC;IAED,IAAI,CAAClC,EAAE,CAAC2C,OAAO,GAAIT,KAAK,IAAK;MAC3BL,OAAO,CAACe,IAAI,CAAC,8CAA8CV,KAAK,CAACW,IAAI,YAAYX,KAAK,CAACY,MAAM,iBAAiB,IAAI,CAAC1C,gBAAgB,EAAE,CAAC;MACtI,IAAI,IAAI,CAACA,gBAAgB,EAAE;MAC3B,IAAI,CAAC2C,iBAAiB,CAAC,CAAC;IAC1B,CAAC;EACH;EAEQA,iBAAiBA,CAAA,EAAS;IAChC,IAAI,IAAI,CAAC7C,iBAAiB,IAAI,IAAI,CAACS,oBAAoB,EAAE;MACvDkB,OAAO,CAACe,IAAI,CAAC,+DAA+D,CAAC;MAC7E;IACF;IACA,MAAMI,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAChD,iBAAiB,EAAE,MAAM,CAAC;IAClE,IAAI,CAACA,iBAAiB,EAAE;IACxB2B,OAAO,CAACG,GAAG,CACT,sCAAsCgB,KAAK,eAAe,IAAI,CAAC9C,iBAAiB,IAAI,IAAI,CAACS,oBAAoB,GAC/G,CAAC;IACD,IAAI,CAACR,cAAc,GAAGgD,UAAU,CAAC,MAAM;MACrC,IAAI,CAACtC,cAAc,CAAC,CAAC;IACvB,CAAC,EAAEmC,KAAK,CAAC;EACX;AACF","ignoreList":[]}
|