@mobileai/react-native 0.9.0 → 0.9.2
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 +121 -0
- package/lib/module/components/AIAgent.js +248 -53
- package/lib/module/components/AIAgent.js.map +1 -1
- package/lib/module/components/AIZone.js +140 -0
- package/lib/module/components/AIZone.js.map +1 -0
- package/lib/module/components/AgentErrorBoundary.js +9 -0
- package/lib/module/components/AgentErrorBoundary.js.map +1 -1
- package/lib/module/components/HighlightOverlay.js +138 -0
- package/lib/module/components/HighlightOverlay.js.map +1 -0
- package/lib/module/components/ProactiveHint.js +138 -0
- package/lib/module/components/ProactiveHint.js.map +1 -0
- package/lib/module/components/cards/InfoCard.js +65 -0
- package/lib/module/components/cards/InfoCard.js.map +1 -0
- package/lib/module/components/cards/ReviewSummary.js +74 -0
- package/lib/module/components/cards/ReviewSummary.js.map +1 -0
- package/lib/module/core/AgentRuntime.js +16 -3
- package/lib/module/core/AgentRuntime.js.map +1 -1
- package/lib/module/core/FiberTreeWalker.js +62 -85
- package/lib/module/core/FiberTreeWalker.js.map +1 -1
- package/lib/module/core/IdleDetector.js +51 -0
- package/lib/module/core/IdleDetector.js.map +1 -0
- package/lib/module/core/ZoneRegistry.js +47 -0
- package/lib/module/core/ZoneRegistry.js.map +1 -0
- package/lib/module/core/systemPrompt.js +2 -0
- package/lib/module/core/systemPrompt.js.map +1 -1
- package/lib/module/index.js +21 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/services/AudioOutputService.js +10 -0
- package/lib/module/services/AudioOutputService.js.map +1 -1
- package/lib/module/services/flags/FlagService.js +117 -0
- package/lib/module/services/flags/FlagService.js.map +1 -0
- package/lib/module/services/telemetry/MobileAI.js +66 -0
- package/lib/module/services/telemetry/MobileAI.js.map +1 -0
- package/lib/module/services/telemetry/PiiScrubber.js +17 -0
- package/lib/module/services/telemetry/PiiScrubber.js.map +1 -0
- package/lib/module/services/telemetry/TelemetryService.js +260 -0
- package/lib/module/services/telemetry/TelemetryService.js.map +1 -0
- package/lib/module/services/telemetry/TouchAutoCapture.js +159 -0
- package/lib/module/services/telemetry/TouchAutoCapture.js.map +1 -0
- package/lib/module/services/telemetry/device.js +19 -0
- package/lib/module/services/telemetry/device.js.map +1 -0
- package/lib/module/services/telemetry/index.js +9 -0
- package/lib/module/services/telemetry/index.js.map +1 -0
- package/lib/module/services/telemetry/types.js +2 -0
- package/lib/module/services/telemetry/types.js.map +1 -0
- package/lib/module/support/CSATSurvey.js +273 -0
- package/lib/module/support/CSATSurvey.js.map +1 -0
- package/lib/module/support/EscalationSocket.js +92 -0
- package/lib/module/support/EscalationSocket.js.map +1 -0
- package/lib/module/support/SupportGreeting.js +142 -0
- package/lib/module/support/SupportGreeting.js.map +1 -0
- package/lib/module/support/escalateTool.js +120 -0
- package/lib/module/support/escalateTool.js.map +1 -0
- package/lib/module/support/index.js +18 -0
- package/lib/module/support/index.js.map +1 -0
- package/lib/module/support/supportPrompt.js +47 -0
- package/lib/module/support/supportPrompt.js.map +1 -0
- package/lib/module/support/types.js +2 -0
- package/lib/module/support/types.js.map +1 -0
- package/lib/module/tools/guideTool.js +61 -0
- package/lib/module/tools/guideTool.js.map +1 -0
- package/lib/module/tools/index.js +3 -0
- package/lib/module/tools/index.js.map +1 -1
- package/lib/module/tools/restoreTool.js +31 -0
- package/lib/module/tools/restoreTool.js.map +1 -0
- package/lib/module/tools/simplifyTool.js +31 -0
- package/lib/module/tools/simplifyTool.js.map +1 -0
- package/lib/module/types/jsx.d.js +4 -0
- package/lib/module/types/jsx.d.js.map +1 -0
- package/lib/typescript/src/components/AIAgent.d.ts +21 -2
- package/lib/typescript/src/components/AIAgent.d.ts.map +1 -1
- package/lib/typescript/src/components/AIZone.d.ts +16 -0
- package/lib/typescript/src/components/AIZone.d.ts.map +1 -0
- package/lib/typescript/src/components/AgentErrorBoundary.d.ts +1 -0
- package/lib/typescript/src/components/AgentErrorBoundary.d.ts.map +1 -1
- package/lib/typescript/src/components/HighlightOverlay.d.ts +10 -0
- package/lib/typescript/src/components/HighlightOverlay.d.ts.map +1 -0
- package/lib/typescript/src/components/ProactiveHint.d.ts +10 -0
- package/lib/typescript/src/components/ProactiveHint.d.ts.map +1 -0
- package/lib/typescript/src/components/cards/InfoCard.d.ts +19 -0
- package/lib/typescript/src/components/cards/InfoCard.d.ts.map +1 -0
- package/lib/typescript/src/components/cards/ReviewSummary.d.ts +19 -0
- package/lib/typescript/src/components/cards/ReviewSummary.d.ts.map +1 -0
- package/lib/typescript/src/core/AgentRuntime.d.ts +1 -0
- package/lib/typescript/src/core/AgentRuntime.d.ts.map +1 -1
- package/lib/typescript/src/core/FiberTreeWalker.d.ts.map +1 -1
- package/lib/typescript/src/core/IdleDetector.d.ts +27 -0
- package/lib/typescript/src/core/IdleDetector.d.ts.map +1 -0
- package/lib/typescript/src/core/ZoneRegistry.d.ts +13 -0
- package/lib/typescript/src/core/ZoneRegistry.d.ts.map +1 -0
- package/lib/typescript/src/core/systemPrompt.d.ts.map +1 -1
- package/lib/typescript/src/core/types.d.ts +54 -0
- package/lib/typescript/src/core/types.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +5 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/services/AudioOutputService.d.ts.map +1 -1
- package/lib/typescript/src/services/flags/FlagService.d.ts +25 -0
- package/lib/typescript/src/services/flags/FlagService.d.ts.map +1 -0
- package/lib/typescript/src/services/telemetry/MobileAI.d.ts +38 -0
- package/lib/typescript/src/services/telemetry/MobileAI.d.ts.map +1 -0
- package/lib/typescript/src/services/telemetry/PiiScrubber.d.ts +6 -0
- package/lib/typescript/src/services/telemetry/PiiScrubber.d.ts.map +1 -0
- package/lib/typescript/src/services/telemetry/TelemetryService.d.ts +49 -0
- package/lib/typescript/src/services/telemetry/TelemetryService.d.ts.map +1 -0
- package/lib/typescript/src/services/telemetry/TouchAutoCapture.d.ts +28 -0
- package/lib/typescript/src/services/telemetry/TouchAutoCapture.d.ts.map +1 -0
- package/lib/typescript/src/services/telemetry/device.d.ts +7 -0
- package/lib/typescript/src/services/telemetry/device.d.ts.map +1 -0
- package/lib/typescript/src/services/telemetry/index.d.ts +7 -0
- package/lib/typescript/src/services/telemetry/index.d.ts.map +1 -0
- package/lib/typescript/src/services/telemetry/types.d.ts +50 -0
- package/lib/typescript/src/services/telemetry/types.d.ts.map +1 -0
- package/lib/typescript/src/support/CSATSurvey.d.ts +20 -0
- package/lib/typescript/src/support/CSATSurvey.d.ts.map +1 -0
- package/lib/typescript/src/support/EscalationSocket.d.ts +38 -0
- package/lib/typescript/src/support/EscalationSocket.d.ts.map +1 -0
- package/lib/typescript/src/support/SupportGreeting.d.ts +19 -0
- package/lib/typescript/src/support/SupportGreeting.d.ts.map +1 -0
- package/lib/typescript/src/support/escalateTool.d.ts +25 -0
- package/lib/typescript/src/support/escalateTool.d.ts.map +1 -0
- package/lib/typescript/src/support/index.d.ts +11 -0
- package/lib/typescript/src/support/index.d.ts.map +1 -0
- package/lib/typescript/src/support/supportPrompt.d.ts +12 -0
- package/lib/typescript/src/support/supportPrompt.d.ts.map +1 -0
- package/lib/typescript/src/support/types.d.ts +114 -0
- package/lib/typescript/src/support/types.d.ts.map +1 -0
- package/lib/typescript/src/tools/guideTool.d.ts +4 -0
- package/lib/typescript/src/tools/guideTool.d.ts.map +1 -0
- package/lib/typescript/src/tools/index.d.ts +3 -0
- package/lib/typescript/src/tools/index.d.ts.map +1 -1
- package/lib/typescript/src/tools/restoreTool.d.ts +3 -0
- package/lib/typescript/src/tools/restoreTool.d.ts.map +1 -0
- package/lib/typescript/src/tools/simplifyTool.d.ts +3 -0
- package/lib/typescript/src/tools/simplifyTool.d.ts.map +1 -0
- package/lib/typescript/src/tools/types.d.ts +2 -0
- package/lib/typescript/src/tools/types.d.ts.map +1 -1
- package/package.json +5 -1
- package/src/components/AIAgent.tsx +253 -15
- package/src/components/AIZone.tsx +147 -0
- package/src/components/AgentErrorBoundary.tsx +10 -0
- package/src/components/HighlightOverlay.tsx +136 -0
- package/src/components/ProactiveHint.tsx +145 -0
- package/src/components/cards/InfoCard.tsx +58 -0
- package/src/components/cards/ReviewSummary.tsx +76 -0
- package/src/core/AgentRuntime.ts +18 -0
- package/src/core/FiberTreeWalker.ts +71 -93
- package/src/core/IdleDetector.ts +72 -0
- package/src/core/ZoneRegistry.ts +44 -0
- package/src/core/systemPrompt.ts +2 -0
- package/src/core/types.ts +60 -0
- package/src/index.ts +31 -0
- package/src/services/AudioOutputService.ts +13 -0
- package/src/services/flags/FlagService.ts +137 -0
- package/src/services/telemetry/MobileAI.ts +66 -0
- package/src/services/telemetry/PiiScrubber.ts +17 -0
- package/src/services/telemetry/TelemetryService.ts +291 -0
- package/src/services/telemetry/TouchAutoCapture.ts +165 -0
- package/src/services/telemetry/device.ts +16 -0
- package/src/services/telemetry/index.ts +13 -0
- package/src/services/telemetry/types.ts +75 -0
- package/src/support/CSATSurvey.tsx +304 -0
- package/src/support/EscalationSocket.ts +113 -0
- package/src/support/SupportGreeting.tsx +161 -0
- package/src/support/escalateTool.ts +134 -0
- package/src/support/index.ts +27 -0
- package/src/support/supportPrompt.ts +55 -0
- package/src/support/types.ts +141 -0
- package/src/tools/guideTool.ts +67 -0
- package/src/tools/index.ts +3 -0
- package/src/tools/restoreTool.ts +33 -0
- package/src/tools/simplifyTool.ts +33 -0
- package/src/tools/types.ts +2 -0
- package/src/types/jsx.d.ts +20 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* CSAT Survey — Customer Satisfaction component.
|
|
5
|
+
*
|
|
6
|
+
* Shown after a support conversation ends (or after idle timeout).
|
|
7
|
+
* Supports three rating types: emoji, stars, thumbs.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { useState } from 'react';
|
|
11
|
+
import { View, Text, TouchableOpacity, TextInput, StyleSheet } from 'react-native';
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
const EMOJI_OPTIONS = [{
|
|
14
|
+
emoji: '😡',
|
|
15
|
+
label: 'Terrible',
|
|
16
|
+
score: 1
|
|
17
|
+
}, {
|
|
18
|
+
emoji: '😞',
|
|
19
|
+
label: 'Bad',
|
|
20
|
+
score: 2
|
|
21
|
+
}, {
|
|
22
|
+
emoji: '😐',
|
|
23
|
+
label: 'Okay',
|
|
24
|
+
score: 3
|
|
25
|
+
}, {
|
|
26
|
+
emoji: '😊',
|
|
27
|
+
label: 'Good',
|
|
28
|
+
score: 4
|
|
29
|
+
}, {
|
|
30
|
+
emoji: '🤩',
|
|
31
|
+
label: 'Amazing',
|
|
32
|
+
score: 5
|
|
33
|
+
}];
|
|
34
|
+
const STAR_COUNT = 5;
|
|
35
|
+
export function CSATSurvey({
|
|
36
|
+
config,
|
|
37
|
+
metadata,
|
|
38
|
+
onDismiss,
|
|
39
|
+
theme
|
|
40
|
+
}) {
|
|
41
|
+
const [selectedScore, setSelectedScore] = useState(null);
|
|
42
|
+
const [feedback, setFeedback] = useState('');
|
|
43
|
+
const [submitted, setSubmitted] = useState(false);
|
|
44
|
+
const primary = theme?.primaryColor ?? '#8b5cf6';
|
|
45
|
+
const textColor = theme?.textColor ?? '#ffffff';
|
|
46
|
+
const bgColor = theme?.backgroundColor ?? 'rgba(26, 26, 46, 0.98)';
|
|
47
|
+
const ratingType = config.ratingType ?? 'emoji';
|
|
48
|
+
const question = config.question ?? 'How was your experience?';
|
|
49
|
+
const handleSubmit = () => {
|
|
50
|
+
if (selectedScore === null) return;
|
|
51
|
+
const rating = {
|
|
52
|
+
score: selectedScore,
|
|
53
|
+
feedback: feedback.trim() || undefined,
|
|
54
|
+
metadata
|
|
55
|
+
};
|
|
56
|
+
config.onSubmit(rating);
|
|
57
|
+
setSubmitted(true);
|
|
58
|
+
|
|
59
|
+
// Auto-dismiss after 1.5s
|
|
60
|
+
setTimeout(onDismiss, 1500);
|
|
61
|
+
};
|
|
62
|
+
if (submitted) {
|
|
63
|
+
return /*#__PURE__*/_jsx(View, {
|
|
64
|
+
style: [styles.container, {
|
|
65
|
+
backgroundColor: bgColor
|
|
66
|
+
}],
|
|
67
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
68
|
+
style: [styles.thankYou, {
|
|
69
|
+
color: textColor
|
|
70
|
+
}],
|
|
71
|
+
children: "Thank you for your feedback! \uD83D\uDE4F"
|
|
72
|
+
})
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
76
|
+
style: [styles.container, {
|
|
77
|
+
backgroundColor: bgColor
|
|
78
|
+
}],
|
|
79
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
80
|
+
style: [styles.question, {
|
|
81
|
+
color: textColor
|
|
82
|
+
}],
|
|
83
|
+
children: question
|
|
84
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
85
|
+
style: styles.ratingContainer,
|
|
86
|
+
children: [ratingType === 'emoji' && /*#__PURE__*/_jsx(View, {
|
|
87
|
+
style: styles.emojiRow,
|
|
88
|
+
children: EMOJI_OPTIONS.map(opt => /*#__PURE__*/_jsxs(TouchableOpacity, {
|
|
89
|
+
onPress: () => setSelectedScore(opt.score),
|
|
90
|
+
style: [styles.emojiButton, selectedScore === opt.score && {
|
|
91
|
+
backgroundColor: `${primary}30`,
|
|
92
|
+
borderColor: primary
|
|
93
|
+
}],
|
|
94
|
+
activeOpacity: 0.7,
|
|
95
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
96
|
+
style: styles.emoji,
|
|
97
|
+
children: opt.emoji
|
|
98
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
99
|
+
style: [styles.emojiLabel, {
|
|
100
|
+
color: selectedScore === opt.score ? primary : '#71717a'
|
|
101
|
+
}],
|
|
102
|
+
children: opt.label
|
|
103
|
+
})]
|
|
104
|
+
}, opt.score))
|
|
105
|
+
}), ratingType === 'stars' && /*#__PURE__*/_jsx(View, {
|
|
106
|
+
style: styles.starsRow,
|
|
107
|
+
children: Array.from({
|
|
108
|
+
length: STAR_COUNT
|
|
109
|
+
}, (_, i) => i + 1).map(star => /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
110
|
+
onPress: () => setSelectedScore(star),
|
|
111
|
+
activeOpacity: 0.7,
|
|
112
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
113
|
+
style: [styles.star, {
|
|
114
|
+
color: selectedScore !== null && star <= selectedScore ? '#fbbf24' : '#52525b'
|
|
115
|
+
}],
|
|
116
|
+
children: "\u2605"
|
|
117
|
+
})
|
|
118
|
+
}, star))
|
|
119
|
+
}), ratingType === 'thumbs' && /*#__PURE__*/_jsxs(View, {
|
|
120
|
+
style: styles.thumbsRow,
|
|
121
|
+
children: [/*#__PURE__*/_jsx(TouchableOpacity, {
|
|
122
|
+
onPress: () => setSelectedScore(0),
|
|
123
|
+
style: [styles.thumbButton, selectedScore === 0 && {
|
|
124
|
+
backgroundColor: '#ef444430',
|
|
125
|
+
borderColor: '#ef4444'
|
|
126
|
+
}],
|
|
127
|
+
activeOpacity: 0.7,
|
|
128
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
129
|
+
style: styles.thumbEmoji,
|
|
130
|
+
children: "\uD83D\uDC4E"
|
|
131
|
+
})
|
|
132
|
+
}), /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
133
|
+
onPress: () => setSelectedScore(1),
|
|
134
|
+
style: [styles.thumbButton, selectedScore === 1 && {
|
|
135
|
+
backgroundColor: '#22c55e30',
|
|
136
|
+
borderColor: '#22c55e'
|
|
137
|
+
}],
|
|
138
|
+
activeOpacity: 0.7,
|
|
139
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
140
|
+
style: styles.thumbEmoji,
|
|
141
|
+
children: "\uD83D\uDC4D"
|
|
142
|
+
})
|
|
143
|
+
})]
|
|
144
|
+
})]
|
|
145
|
+
}), selectedScore !== null && /*#__PURE__*/_jsx(TextInput, {
|
|
146
|
+
style: [styles.feedbackInput, {
|
|
147
|
+
color: textColor
|
|
148
|
+
}],
|
|
149
|
+
placeholder: "Any additional feedback? (optional)",
|
|
150
|
+
placeholderTextColor: "#52525b",
|
|
151
|
+
value: feedback,
|
|
152
|
+
onChangeText: setFeedback,
|
|
153
|
+
multiline: true,
|
|
154
|
+
maxLength: 500
|
|
155
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
156
|
+
style: styles.actions,
|
|
157
|
+
children: [/*#__PURE__*/_jsx(TouchableOpacity, {
|
|
158
|
+
onPress: onDismiss,
|
|
159
|
+
activeOpacity: 0.7,
|
|
160
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
161
|
+
style: styles.dismissText,
|
|
162
|
+
children: "Skip"
|
|
163
|
+
})
|
|
164
|
+
}), selectedScore !== null && /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
165
|
+
style: [styles.submitButton, {
|
|
166
|
+
backgroundColor: primary
|
|
167
|
+
}],
|
|
168
|
+
onPress: handleSubmit,
|
|
169
|
+
activeOpacity: 0.7,
|
|
170
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
171
|
+
style: [styles.submitText, {
|
|
172
|
+
color: textColor
|
|
173
|
+
}],
|
|
174
|
+
children: "Submit"
|
|
175
|
+
})
|
|
176
|
+
})]
|
|
177
|
+
})]
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
const styles = StyleSheet.create({
|
|
181
|
+
container: {
|
|
182
|
+
borderRadius: 16,
|
|
183
|
+
padding: 20,
|
|
184
|
+
margin: 12
|
|
185
|
+
},
|
|
186
|
+
question: {
|
|
187
|
+
fontSize: 16,
|
|
188
|
+
fontWeight: '600',
|
|
189
|
+
textAlign: 'center',
|
|
190
|
+
marginBottom: 16
|
|
191
|
+
},
|
|
192
|
+
thankYou: {
|
|
193
|
+
fontSize: 16,
|
|
194
|
+
fontWeight: '500',
|
|
195
|
+
textAlign: 'center',
|
|
196
|
+
paddingVertical: 12
|
|
197
|
+
},
|
|
198
|
+
ratingContainer: {
|
|
199
|
+
marginBottom: 12
|
|
200
|
+
},
|
|
201
|
+
emojiRow: {
|
|
202
|
+
flexDirection: 'row',
|
|
203
|
+
justifyContent: 'center',
|
|
204
|
+
gap: 8
|
|
205
|
+
},
|
|
206
|
+
emojiButton: {
|
|
207
|
+
alignItems: 'center',
|
|
208
|
+
paddingHorizontal: 10,
|
|
209
|
+
paddingVertical: 8,
|
|
210
|
+
borderRadius: 12,
|
|
211
|
+
borderWidth: 1,
|
|
212
|
+
borderColor: 'transparent'
|
|
213
|
+
},
|
|
214
|
+
emoji: {
|
|
215
|
+
fontSize: 28
|
|
216
|
+
},
|
|
217
|
+
emojiLabel: {
|
|
218
|
+
fontSize: 10,
|
|
219
|
+
marginTop: 4,
|
|
220
|
+
fontWeight: '500'
|
|
221
|
+
},
|
|
222
|
+
starsRow: {
|
|
223
|
+
flexDirection: 'row',
|
|
224
|
+
justifyContent: 'center',
|
|
225
|
+
gap: 8
|
|
226
|
+
},
|
|
227
|
+
star: {
|
|
228
|
+
fontSize: 36
|
|
229
|
+
},
|
|
230
|
+
thumbsRow: {
|
|
231
|
+
flexDirection: 'row',
|
|
232
|
+
justifyContent: 'center',
|
|
233
|
+
gap: 20
|
|
234
|
+
},
|
|
235
|
+
thumbButton: {
|
|
236
|
+
padding: 12,
|
|
237
|
+
borderRadius: 16,
|
|
238
|
+
borderWidth: 1,
|
|
239
|
+
borderColor: 'transparent'
|
|
240
|
+
},
|
|
241
|
+
thumbEmoji: {
|
|
242
|
+
fontSize: 36
|
|
243
|
+
},
|
|
244
|
+
feedbackInput: {
|
|
245
|
+
borderWidth: 1,
|
|
246
|
+
borderColor: '#3f3f46',
|
|
247
|
+
borderRadius: 12,
|
|
248
|
+
padding: 12,
|
|
249
|
+
fontSize: 14,
|
|
250
|
+
minHeight: 60,
|
|
251
|
+
textAlignVertical: 'top',
|
|
252
|
+
marginBottom: 12
|
|
253
|
+
},
|
|
254
|
+
actions: {
|
|
255
|
+
flexDirection: 'row',
|
|
256
|
+
justifyContent: 'space-between',
|
|
257
|
+
alignItems: 'center'
|
|
258
|
+
},
|
|
259
|
+
dismissText: {
|
|
260
|
+
color: '#71717a',
|
|
261
|
+
fontSize: 14
|
|
262
|
+
},
|
|
263
|
+
submitButton: {
|
|
264
|
+
paddingHorizontal: 20,
|
|
265
|
+
paddingVertical: 10,
|
|
266
|
+
borderRadius: 10
|
|
267
|
+
},
|
|
268
|
+
submitText: {
|
|
269
|
+
fontSize: 14,
|
|
270
|
+
fontWeight: '600'
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
//# sourceMappingURL=CSATSurvey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","View","Text","TouchableOpacity","TextInput","StyleSheet","jsx","_jsx","jsxs","_jsxs","EMOJI_OPTIONS","emoji","label","score","STAR_COUNT","CSATSurvey","config","metadata","onDismiss","theme","selectedScore","setSelectedScore","feedback","setFeedback","submitted","setSubmitted","primary","primaryColor","textColor","bgColor","backgroundColor","ratingType","question","handleSubmit","rating","trim","undefined","onSubmit","setTimeout","style","styles","container","children","thankYou","color","ratingContainer","emojiRow","map","opt","onPress","emojiButton","borderColor","activeOpacity","emojiLabel","starsRow","Array","from","length","_","i","star","thumbsRow","thumbButton","thumbEmoji","feedbackInput","placeholder","placeholderTextColor","value","onChangeText","multiline","maxLength","actions","dismissText","submitButton","submitText","create","borderRadius","padding","margin","fontSize","fontWeight","textAlign","marginBottom","paddingVertical","flexDirection","justifyContent","gap","alignItems","paddingHorizontal","borderWidth","marginTop","minHeight","textAlignVertical"],"sourceRoot":"../../../src","sources":["support/CSATSurvey.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* EscalationSocket — manages a WebSocket connection to the MobileAI platform
|
|
5
|
+
* for receiving real-time replies from human support agents.
|
|
6
|
+
*
|
|
7
|
+
* Lifecycle:
|
|
8
|
+
* 1. SDK calls escalate_to_human → POST /api/v1/escalations → gets { ticketId, wsUrl }
|
|
9
|
+
* 2. EscalationSocket.connect(wsUrl) opens a WS connection
|
|
10
|
+
* 3. Platform pushes { type: 'reply', ticketId, reply } when agent responds
|
|
11
|
+
* 4. onReply callback fires → shown in chat UI as "👤 Human Agent: <reply>"
|
|
12
|
+
* 5. disconnect() on chat close / unmount
|
|
13
|
+
*
|
|
14
|
+
* Handles:
|
|
15
|
+
* - Server heartbeat pings (type: 'ping') — acknowledged silently
|
|
16
|
+
* - Auto-reconnect on unexpected close (max 3 attempts, exponential backoff)
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
export class EscalationSocket {
|
|
20
|
+
ws = null;
|
|
21
|
+
wsUrl = null;
|
|
22
|
+
reconnectAttempts = 0;
|
|
23
|
+
reconnectTimer = null;
|
|
24
|
+
intentionalClose = false;
|
|
25
|
+
constructor(options) {
|
|
26
|
+
this.onReply = options.onReply;
|
|
27
|
+
this.onError = options.onError;
|
|
28
|
+
this.maxReconnectAttempts = options.maxReconnectAttempts ?? 3;
|
|
29
|
+
}
|
|
30
|
+
connect(wsUrl) {
|
|
31
|
+
this.wsUrl = wsUrl;
|
|
32
|
+
this.intentionalClose = false;
|
|
33
|
+
this.openConnection();
|
|
34
|
+
}
|
|
35
|
+
disconnect() {
|
|
36
|
+
this.intentionalClose = true;
|
|
37
|
+
if (this.reconnectTimer) {
|
|
38
|
+
clearTimeout(this.reconnectTimer);
|
|
39
|
+
this.reconnectTimer = null;
|
|
40
|
+
}
|
|
41
|
+
if (this.ws) {
|
|
42
|
+
this.ws.close();
|
|
43
|
+
this.ws = null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
openConnection() {
|
|
47
|
+
if (!this.wsUrl) return;
|
|
48
|
+
try {
|
|
49
|
+
this.ws = new WebSocket(this.wsUrl);
|
|
50
|
+
} catch (err) {
|
|
51
|
+
console.error('[EscalationSocket] Failed to open WebSocket:', err);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
this.ws.onopen = () => {
|
|
55
|
+
console.log('[EscalationSocket] Connected:', this.wsUrl);
|
|
56
|
+
this.reconnectAttempts = 0;
|
|
57
|
+
};
|
|
58
|
+
this.ws.onmessage = event => {
|
|
59
|
+
try {
|
|
60
|
+
const msg = JSON.parse(String(event.data));
|
|
61
|
+
if (msg.type === 'ping') return; // heartbeat — ignore
|
|
62
|
+
if (msg.type === 'reply' && msg.reply) {
|
|
63
|
+
this.onReply(msg.reply);
|
|
64
|
+
}
|
|
65
|
+
} catch {
|
|
66
|
+
// Non-JSON message — ignore
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
this.ws.onerror = event => {
|
|
70
|
+
console.error('[EscalationSocket] Error:', event);
|
|
71
|
+
this.onError?.(event);
|
|
72
|
+
};
|
|
73
|
+
this.ws.onclose = () => {
|
|
74
|
+
if (this.intentionalClose) return;
|
|
75
|
+
console.warn('[EscalationSocket] Connection closed unexpectedly');
|
|
76
|
+
this.scheduleReconnect();
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
scheduleReconnect() {
|
|
80
|
+
if (this.reconnectAttempts >= this.maxReconnectAttempts) {
|
|
81
|
+
console.warn('[EscalationSocket] Max reconnect attempts reached — giving up');
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const delay = Math.min(1000 * 2 ** this.reconnectAttempts, 16_000);
|
|
85
|
+
this.reconnectAttempts++;
|
|
86
|
+
console.log(`[EscalationSocket] Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})`);
|
|
87
|
+
this.reconnectTimer = setTimeout(() => {
|
|
88
|
+
this.openConnection();
|
|
89
|
+
}, delay);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=EscalationSocket.js.map
|
|
@@ -0,0 +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","msg","JSON","parse","String","data","type","reply","onerror","onclose","warn","scheduleReconnect","delay","Math","min","setTimeout"],"sourceRoot":"../../../src","sources":["support/EscalationSocket.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Support Greeting & Quick Replies — shown when chat opens in support mode.
|
|
5
|
+
*
|
|
6
|
+
* Renders a welcome message with an avatar and quick reply buttons
|
|
7
|
+
* that pre-fill the user's first message.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { View, Text, TouchableOpacity, Image, StyleSheet, ScrollView } from 'react-native';
|
|
11
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
export function SupportGreeting({
|
|
13
|
+
config,
|
|
14
|
+
onQuickReply,
|
|
15
|
+
theme
|
|
16
|
+
}) {
|
|
17
|
+
const greeting = config.greeting;
|
|
18
|
+
const quickReplies = config.quickReplies ?? [];
|
|
19
|
+
if (!greeting) return null;
|
|
20
|
+
const primary = theme?.primaryColor ?? '#8b5cf6';
|
|
21
|
+
const textColor = theme?.textColor ?? '#ffffff';
|
|
22
|
+
const bgColor = theme?.backgroundColor ?? 'rgba(26, 26, 46, 0.95)';
|
|
23
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
24
|
+
style: styles.container,
|
|
25
|
+
children: [/*#__PURE__*/_jsxs(View, {
|
|
26
|
+
style: styles.header,
|
|
27
|
+
children: [greeting.avatarUrl ? /*#__PURE__*/_jsx(Image, {
|
|
28
|
+
source: {
|
|
29
|
+
uri: greeting.avatarUrl
|
|
30
|
+
},
|
|
31
|
+
style: styles.avatar
|
|
32
|
+
}) : /*#__PURE__*/_jsx(View, {
|
|
33
|
+
style: [styles.avatarPlaceholder, {
|
|
34
|
+
backgroundColor: primary
|
|
35
|
+
}],
|
|
36
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
37
|
+
style: styles.avatarEmoji,
|
|
38
|
+
children: "\uD83E\uDD16"
|
|
39
|
+
})
|
|
40
|
+
}), greeting.agentName && /*#__PURE__*/_jsx(Text, {
|
|
41
|
+
style: [styles.agentName, {
|
|
42
|
+
color: textColor
|
|
43
|
+
}],
|
|
44
|
+
children: greeting.agentName
|
|
45
|
+
})]
|
|
46
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
47
|
+
style: [styles.messageBubble, {
|
|
48
|
+
backgroundColor: bgColor
|
|
49
|
+
}],
|
|
50
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
51
|
+
style: [styles.messageText, {
|
|
52
|
+
color: textColor
|
|
53
|
+
}],
|
|
54
|
+
children: greeting.message
|
|
55
|
+
})
|
|
56
|
+
}), quickReplies.length > 0 && /*#__PURE__*/_jsx(ScrollView, {
|
|
57
|
+
horizontal: true,
|
|
58
|
+
showsHorizontalScrollIndicator: false,
|
|
59
|
+
contentContainerStyle: styles.quickRepliesContainer,
|
|
60
|
+
children: quickReplies.map((reply, index) => /*#__PURE__*/_jsxs(TouchableOpacity, {
|
|
61
|
+
style: [styles.quickReplyButton, {
|
|
62
|
+
borderColor: primary
|
|
63
|
+
}],
|
|
64
|
+
onPress: () => onQuickReply(reply.message ?? reply.label),
|
|
65
|
+
activeOpacity: 0.7,
|
|
66
|
+
children: [reply.icon && /*#__PURE__*/_jsx(Text, {
|
|
67
|
+
style: styles.quickReplyIcon,
|
|
68
|
+
children: reply.icon
|
|
69
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
70
|
+
style: [styles.quickReplyText, {
|
|
71
|
+
color: primary
|
|
72
|
+
}],
|
|
73
|
+
children: reply.label
|
|
74
|
+
})]
|
|
75
|
+
}, `qr-${index}`))
|
|
76
|
+
})]
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
const styles = StyleSheet.create({
|
|
80
|
+
container: {
|
|
81
|
+
paddingHorizontal: 16,
|
|
82
|
+
paddingVertical: 12
|
|
83
|
+
},
|
|
84
|
+
header: {
|
|
85
|
+
flexDirection: 'row',
|
|
86
|
+
alignItems: 'center',
|
|
87
|
+
gap: 10,
|
|
88
|
+
marginBottom: 12
|
|
89
|
+
},
|
|
90
|
+
avatar: {
|
|
91
|
+
width: 36,
|
|
92
|
+
height: 36,
|
|
93
|
+
borderRadius: 18
|
|
94
|
+
},
|
|
95
|
+
avatarPlaceholder: {
|
|
96
|
+
width: 36,
|
|
97
|
+
height: 36,
|
|
98
|
+
borderRadius: 18,
|
|
99
|
+
alignItems: 'center',
|
|
100
|
+
justifyContent: 'center'
|
|
101
|
+
},
|
|
102
|
+
avatarEmoji: {
|
|
103
|
+
fontSize: 18
|
|
104
|
+
},
|
|
105
|
+
agentName: {
|
|
106
|
+
fontSize: 14,
|
|
107
|
+
fontWeight: '600'
|
|
108
|
+
},
|
|
109
|
+
messageBubble: {
|
|
110
|
+
borderRadius: 16,
|
|
111
|
+
borderTopLeftRadius: 4,
|
|
112
|
+
paddingHorizontal: 14,
|
|
113
|
+
paddingVertical: 10,
|
|
114
|
+
marginBottom: 12,
|
|
115
|
+
maxWidth: '85%'
|
|
116
|
+
},
|
|
117
|
+
messageText: {
|
|
118
|
+
fontSize: 14,
|
|
119
|
+
lineHeight: 20
|
|
120
|
+
},
|
|
121
|
+
quickRepliesContainer: {
|
|
122
|
+
gap: 8,
|
|
123
|
+
paddingVertical: 4
|
|
124
|
+
},
|
|
125
|
+
quickReplyButton: {
|
|
126
|
+
flexDirection: 'row',
|
|
127
|
+
alignItems: 'center',
|
|
128
|
+
gap: 6,
|
|
129
|
+
paddingHorizontal: 14,
|
|
130
|
+
paddingVertical: 8,
|
|
131
|
+
borderRadius: 20,
|
|
132
|
+
borderWidth: 1
|
|
133
|
+
},
|
|
134
|
+
quickReplyIcon: {
|
|
135
|
+
fontSize: 14
|
|
136
|
+
},
|
|
137
|
+
quickReplyText: {
|
|
138
|
+
fontSize: 13,
|
|
139
|
+
fontWeight: '500'
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
//# sourceMappingURL=SupportGreeting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["View","Text","TouchableOpacity","Image","StyleSheet","ScrollView","jsx","_jsx","jsxs","_jsxs","SupportGreeting","config","onQuickReply","theme","greeting","quickReplies","primary","primaryColor","textColor","bgColor","backgroundColor","style","styles","container","children","header","avatarUrl","source","uri","avatar","avatarPlaceholder","avatarEmoji","agentName","color","messageBubble","messageText","message","length","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","quickRepliesContainer","map","reply","index","quickReplyButton","borderColor","onPress","label","activeOpacity","icon","quickReplyIcon","quickReplyText","create","paddingHorizontal","paddingVertical","flexDirection","alignItems","gap","marginBottom","width","height","borderRadius","justifyContent","fontSize","fontWeight","borderTopLeftRadius","maxWidth","lineHeight","borderWidth"],"sourceRoot":"../../../src","sources":["support/SupportGreeting.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Escalate tool — hands off the conversation to a human agent.
|
|
5
|
+
*
|
|
6
|
+
* Providers:
|
|
7
|
+
* - 'mobileai' (default when analyticsKey present):
|
|
8
|
+
* POSTs to MobileAI /api/v1/escalations → gets ticketId + wsUrl
|
|
9
|
+
* Opens WebSocket via EscalationSocket → agent reply pushed in real time
|
|
10
|
+
* - 'custom': fires the consumer's onEscalate callback (backward compatible)
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { EscalationSocket } from "./EscalationSocket.js";
|
|
14
|
+
const MOBILEAI_HOST = 'https://api.mobileai.dev';
|
|
15
|
+
|
|
16
|
+
/** @deprecated Use createEscalateTool({ config, analyticsKey, getContext, getHistory }) */
|
|
17
|
+
|
|
18
|
+
export function createEscalateTool(depsOrConfig, legacyGetContext) {
|
|
19
|
+
// Normalise both call signatures
|
|
20
|
+
let deps;
|
|
21
|
+
if (legacyGetContext) {
|
|
22
|
+
deps = {
|
|
23
|
+
config: depsOrConfig,
|
|
24
|
+
getContext: legacyGetContext,
|
|
25
|
+
getHistory: () => []
|
|
26
|
+
};
|
|
27
|
+
} else {
|
|
28
|
+
deps = depsOrConfig;
|
|
29
|
+
}
|
|
30
|
+
const {
|
|
31
|
+
config,
|
|
32
|
+
analyticsKey,
|
|
33
|
+
getContext,
|
|
34
|
+
getHistory,
|
|
35
|
+
onHumanReply
|
|
36
|
+
} = deps;
|
|
37
|
+
|
|
38
|
+
// Determine effective provider
|
|
39
|
+
const provider = config.provider ?? (analyticsKey ? 'mobileai' : 'custom');
|
|
40
|
+
|
|
41
|
+
// Socket instance kept here — one per tool instance
|
|
42
|
+
let socket = null;
|
|
43
|
+
return {
|
|
44
|
+
name: 'escalate_to_human',
|
|
45
|
+
description: 'Hand off the conversation to a human support agent. ' + 'Use this when: (1) the user explicitly asks for a human, ' + '(2) you cannot resolve the issue after multiple attempts, or ' + '(3) the topic requires human judgment (billing disputes, account issues).',
|
|
46
|
+
parameters: {
|
|
47
|
+
reason: {
|
|
48
|
+
type: 'string',
|
|
49
|
+
description: 'Brief summary of why escalation is needed and what has been tried',
|
|
50
|
+
required: true
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
execute: async args => {
|
|
54
|
+
const reason = String(args.reason ?? 'User requested human support');
|
|
55
|
+
const context = getContext();
|
|
56
|
+
if (provider === 'mobileai') {
|
|
57
|
+
if (!analyticsKey) {
|
|
58
|
+
console.warn('[Escalation] provider=mobileai but no analyticsKey — falling back to custom');
|
|
59
|
+
} else {
|
|
60
|
+
try {
|
|
61
|
+
const history = getHistory().slice(-20); // last 20 messages for context
|
|
62
|
+
const res = await fetch(`${MOBILEAI_HOST}/api/v1/escalations`, {
|
|
63
|
+
method: 'POST',
|
|
64
|
+
headers: {
|
|
65
|
+
'Content-Type': 'application/json'
|
|
66
|
+
},
|
|
67
|
+
body: JSON.stringify({
|
|
68
|
+
analyticsKey,
|
|
69
|
+
reason,
|
|
70
|
+
screen: context.currentScreen,
|
|
71
|
+
history,
|
|
72
|
+
stepsBeforeEscalation: context.stepsBeforeEscalation
|
|
73
|
+
})
|
|
74
|
+
});
|
|
75
|
+
if (res.ok) {
|
|
76
|
+
const {
|
|
77
|
+
ticketId,
|
|
78
|
+
wsUrl
|
|
79
|
+
} = await res.json();
|
|
80
|
+
console.log(`[Escalation] Ticket created: ${ticketId}`);
|
|
81
|
+
|
|
82
|
+
// Connect WebSocket for real-time reply
|
|
83
|
+
socket?.disconnect();
|
|
84
|
+
socket = new EscalationSocket({
|
|
85
|
+
onReply: reply => {
|
|
86
|
+
console.log(`[Escalation] Human reply received for ticket ${ticketId}`);
|
|
87
|
+
onHumanReply?.(reply);
|
|
88
|
+
socket?.disconnect();
|
|
89
|
+
socket = null;
|
|
90
|
+
},
|
|
91
|
+
onError: err => {
|
|
92
|
+
console.error('[Escalation] WebSocket error:', err);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
socket.connect(wsUrl);
|
|
96
|
+
} else {
|
|
97
|
+
console.error('[Escalation] Failed to create ticket:', res.status);
|
|
98
|
+
}
|
|
99
|
+
} catch (err) {
|
|
100
|
+
console.error('[Escalation] Network error:', err.message);
|
|
101
|
+
}
|
|
102
|
+
const message = config.escalationMessage ?? 'Connecting you to a human agent...';
|
|
103
|
+
return `ESCALATED: ${message}`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// 'custom' provider — fire callback
|
|
108
|
+
const escalationContext = {
|
|
109
|
+
conversationSummary: reason,
|
|
110
|
+
currentScreen: context.currentScreen,
|
|
111
|
+
originalQuery: context.originalQuery,
|
|
112
|
+
stepsBeforeEscalation: context.stepsBeforeEscalation
|
|
113
|
+
};
|
|
114
|
+
config.onEscalate?.(escalationContext);
|
|
115
|
+
const message = config.escalationMessage ?? 'Connecting you to a human agent...';
|
|
116
|
+
return `ESCALATED: ${message}`;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=escalateTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["EscalationSocket","MOBILEAI_HOST","createEscalateTool","depsOrConfig","legacyGetContext","deps","config","getContext","getHistory","analyticsKey","onHumanReply","provider","socket","name","description","parameters","reason","type","required","execute","args","String","context","console","warn","history","slice","res","fetch","method","headers","body","JSON","stringify","screen","currentScreen","stepsBeforeEscalation","ok","ticketId","wsUrl","json","log","disconnect","onReply","reply","onError","err","error","connect","status","message","escalationMessage","escalationContext","conversationSummary","originalQuery","onEscalate"],"sourceRoot":"../../../src","sources":["support/escalateTool.ts"],"mappings":"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","ignoreList":[]}
|