@ion299/sdk-react-native 0.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/ChatPlatformSdk.podspec +20 -0
- package/README.md +315 -0
- package/android/build.gradle +54 -0
- package/android/src/main/AndroidManifest.xml +18 -0
- package/android/src/main/java/com/chatplatform/sdk/ChatSdkDownloaderModule.kt +240 -0
- package/android/src/main/java/com/chatplatform/sdk/ChatSdkFilePickerModule.kt +165 -0
- package/android/src/main/java/com/chatplatform/sdk/ChatSdkPackage.kt +15 -0
- package/android/src/main/res/xml/chat_sdk_file_paths.xml +7 -0
- package/ios/ChatSdkDownloader.m +10 -0
- package/ios/ChatSdkDownloader.swift +141 -0
- package/ios/ChatSdkFilePicker.m +9 -0
- package/ios/ChatSdkFilePicker.swift +161 -0
- package/lib/commonjs/ChatSDK.js +193 -0
- package/lib/commonjs/ChatSDK.js.map +1 -0
- package/lib/commonjs/api.js +195 -0
- package/lib/commonjs/api.js.map +1 -0
- package/lib/commonjs/attachmentUtils.js +39 -0
- package/lib/commonjs/attachmentUtils.js.map +1 -0
- package/lib/commonjs/components/AttachmentGallery.js +367 -0
- package/lib/commonjs/components/AttachmentGallery.js.map +1 -0
- package/lib/commonjs/components/ChatScreen.js +286 -0
- package/lib/commonjs/components/ChatScreen.js.map +1 -0
- package/lib/commonjs/components/MessageBubble.js +227 -0
- package/lib/commonjs/components/MessageBubble.js.map +1 -0
- package/lib/commonjs/components/MessageInput.js +273 -0
- package/lib/commonjs/components/MessageInput.js.map +1 -0
- package/lib/commonjs/components/SurveyOverlay.js +499 -0
- package/lib/commonjs/components/SurveyOverlay.js.map +1 -0
- package/lib/commonjs/downloaders/defaultAttachmentDownloader.js +28 -0
- package/lib/commonjs/downloaders/defaultAttachmentDownloader.js.map +1 -0
- package/lib/commonjs/filePicker.js +25 -0
- package/lib/commonjs/filePicker.js.map +1 -0
- package/lib/commonjs/index.js +27 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/native/NativeChatSdkDownloader.js +28 -0
- package/lib/commonjs/native/NativeChatSdkDownloader.js.map +1 -0
- package/lib/commonjs/native/NativeChatSdkFilePicker.js +17 -0
- package/lib/commonjs/native/NativeChatSdkFilePicker.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/realtime.js +242 -0
- package/lib/commonjs/realtime.js.map +1 -0
- package/lib/commonjs/safeArea.js +18 -0
- package/lib/commonjs/safeArea.js.map +1 -0
- package/lib/commonjs/session.js +159 -0
- package/lib/commonjs/session.js.map +1 -0
- package/lib/commonjs/surveyCache.js +30 -0
- package/lib/commonjs/surveyCache.js.map +1 -0
- package/lib/commonjs/theme.js +29 -0
- package/lib/commonjs/theme.js.map +1 -0
- package/lib/commonjs/types.js +2 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/useChat.js +145 -0
- package/lib/commonjs/useChat.js.map +1 -0
- package/lib/module/ChatSDK.js +189 -0
- package/lib/module/ChatSDK.js.map +1 -0
- package/lib/module/api.js +190 -0
- package/lib/module/api.js.map +1 -0
- package/lib/module/attachmentUtils.js +33 -0
- package/lib/module/attachmentUtils.js.map +1 -0
- package/lib/module/components/AttachmentGallery.js +362 -0
- package/lib/module/components/AttachmentGallery.js.map +1 -0
- package/lib/module/components/ChatScreen.js +281 -0
- package/lib/module/components/ChatScreen.js.map +1 -0
- package/lib/module/components/MessageBubble.js +222 -0
- package/lib/module/components/MessageBubble.js.map +1 -0
- package/lib/module/components/MessageInput.js +268 -0
- package/lib/module/components/MessageInput.js.map +1 -0
- package/lib/module/components/SurveyOverlay.js +494 -0
- package/lib/module/components/SurveyOverlay.js.map +1 -0
- package/lib/module/downloaders/defaultAttachmentDownloader.js +22 -0
- package/lib/module/downloaders/defaultAttachmentDownloader.js.map +1 -0
- package/lib/module/filePicker.js +20 -0
- package/lib/module/filePicker.js.map +1 -0
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/native/NativeChatSdkDownloader.js +23 -0
- package/lib/module/native/NativeChatSdkDownloader.js.map +1 -0
- package/lib/module/native/NativeChatSdkFilePicker.js +13 -0
- package/lib/module/native/NativeChatSdkFilePicker.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/realtime.js +236 -0
- package/lib/module/realtime.js.map +1 -0
- package/lib/module/safeArea.js +14 -0
- package/lib/module/safeArea.js.map +1 -0
- package/lib/module/session.js +154 -0
- package/lib/module/session.js.map +1 -0
- package/lib/module/surveyCache.js +23 -0
- package/lib/module/surveyCache.js.map +1 -0
- package/lib/module/theme.js +25 -0
- package/lib/module/theme.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/useChat.js +141 -0
- package/lib/module/useChat.js.map +1 -0
- package/lib/typescript/commonjs/ChatSDK.d.ts +49 -0
- package/lib/typescript/commonjs/ChatSDK.d.ts.map +1 -0
- package/lib/typescript/commonjs/api.d.ts +31 -0
- package/lib/typescript/commonjs/api.d.ts.map +1 -0
- package/lib/typescript/commonjs/attachmentUtils.d.ts +12 -0
- package/lib/typescript/commonjs/attachmentUtils.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/AttachmentGallery.d.ts +16 -0
- package/lib/typescript/commonjs/components/AttachmentGallery.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/ChatScreen.d.ts +16 -0
- package/lib/typescript/commonjs/components/ChatScreen.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/MessageBubble.d.ts +12 -0
- package/lib/typescript/commonjs/components/MessageBubble.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/MessageInput.d.ts +14 -0
- package/lib/typescript/commonjs/components/MessageInput.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/SurveyOverlay.d.ts +13 -0
- package/lib/typescript/commonjs/components/SurveyOverlay.d.ts.map +1 -0
- package/lib/typescript/commonjs/downloaders/defaultAttachmentDownloader.d.ts +3 -0
- package/lib/typescript/commonjs/downloaders/defaultAttachmentDownloader.d.ts.map +1 -0
- package/lib/typescript/commonjs/filePicker.d.ts +4 -0
- package/lib/typescript/commonjs/filePicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +7 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/native/NativeChatSdkDownloader.d.ts +24 -0
- package/lib/typescript/commonjs/native/NativeChatSdkDownloader.d.ts.map +1 -0
- package/lib/typescript/commonjs/native/NativeChatSdkFilePicker.d.ts +17 -0
- package/lib/typescript/commonjs/native/NativeChatSdkFilePicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/realtime.d.ts +42 -0
- package/lib/typescript/commonjs/realtime.d.ts.map +1 -0
- package/lib/typescript/commonjs/safeArea.d.ts +4 -0
- package/lib/typescript/commonjs/safeArea.d.ts.map +1 -0
- package/lib/typescript/commonjs/session.d.ts +45 -0
- package/lib/typescript/commonjs/session.d.ts.map +1 -0
- package/lib/typescript/commonjs/surveyCache.d.ts +5 -0
- package/lib/typescript/commonjs/surveyCache.d.ts.map +1 -0
- package/lib/typescript/commonjs/theme.d.ts +21 -0
- package/lib/typescript/commonjs/theme.d.ts.map +1 -0
- package/lib/typescript/commonjs/types.d.ts +156 -0
- package/lib/typescript/commonjs/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/useChat.d.ts +16 -0
- package/lib/typescript/commonjs/useChat.d.ts.map +1 -0
- package/lib/typescript/module/ChatSDK.d.ts +49 -0
- package/lib/typescript/module/ChatSDK.d.ts.map +1 -0
- package/lib/typescript/module/api.d.ts +31 -0
- package/lib/typescript/module/api.d.ts.map +1 -0
- package/lib/typescript/module/attachmentUtils.d.ts +12 -0
- package/lib/typescript/module/attachmentUtils.d.ts.map +1 -0
- package/lib/typescript/module/components/AttachmentGallery.d.ts +16 -0
- package/lib/typescript/module/components/AttachmentGallery.d.ts.map +1 -0
- package/lib/typescript/module/components/ChatScreen.d.ts +16 -0
- package/lib/typescript/module/components/ChatScreen.d.ts.map +1 -0
- package/lib/typescript/module/components/MessageBubble.d.ts +12 -0
- package/lib/typescript/module/components/MessageBubble.d.ts.map +1 -0
- package/lib/typescript/module/components/MessageInput.d.ts +14 -0
- package/lib/typescript/module/components/MessageInput.d.ts.map +1 -0
- package/lib/typescript/module/components/SurveyOverlay.d.ts +13 -0
- package/lib/typescript/module/components/SurveyOverlay.d.ts.map +1 -0
- package/lib/typescript/module/downloaders/defaultAttachmentDownloader.d.ts +3 -0
- package/lib/typescript/module/downloaders/defaultAttachmentDownloader.d.ts.map +1 -0
- package/lib/typescript/module/filePicker.d.ts +4 -0
- package/lib/typescript/module/filePicker.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +7 -0
- package/lib/typescript/module/index.d.ts.map +1 -0
- package/lib/typescript/module/native/NativeChatSdkDownloader.d.ts +24 -0
- package/lib/typescript/module/native/NativeChatSdkDownloader.d.ts.map +1 -0
- package/lib/typescript/module/native/NativeChatSdkFilePicker.d.ts +17 -0
- package/lib/typescript/module/native/NativeChatSdkFilePicker.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/realtime.d.ts +42 -0
- package/lib/typescript/module/realtime.d.ts.map +1 -0
- package/lib/typescript/module/safeArea.d.ts +4 -0
- package/lib/typescript/module/safeArea.d.ts.map +1 -0
- package/lib/typescript/module/session.d.ts +45 -0
- package/lib/typescript/module/session.d.ts.map +1 -0
- package/lib/typescript/module/surveyCache.d.ts +5 -0
- package/lib/typescript/module/surveyCache.d.ts.map +1 -0
- package/lib/typescript/module/theme.d.ts +21 -0
- package/lib/typescript/module/theme.d.ts.map +1 -0
- package/lib/typescript/module/types.d.ts +156 -0
- package/lib/typescript/module/types.d.ts.map +1 -0
- package/lib/typescript/module/useChat.d.ts +16 -0
- package/lib/typescript/module/useChat.d.ts.map +1 -0
- package/package.json +75 -0
- package/react-native.config.js +10 -0
- package/src/ChatSDK.ts +237 -0
- package/src/api.ts +228 -0
- package/src/attachmentUtils.ts +49 -0
- package/src/components/AttachmentGallery.tsx +363 -0
- package/src/components/ChatScreen.tsx +267 -0
- package/src/components/MessageBubble.tsx +208 -0
- package/src/components/MessageInput.tsx +280 -0
- package/src/components/SurveyOverlay.tsx +469 -0
- package/src/downloaders/defaultAttachmentDownloader.ts +27 -0
- package/src/filePicker.ts +22 -0
- package/src/index.ts +30 -0
- package/src/native/NativeChatSdkDownloader.ts +49 -0
- package/src/native/NativeChatSdkFilePicker.ts +30 -0
- package/src/realtime.ts +278 -0
- package/src/safeArea.ts +8 -0
- package/src/session.ts +196 -0
- package/src/surveyCache.ts +24 -0
- package/src/theme.ts +49 -0
- package/src/types.ts +199 -0
- package/src/useChat.ts +190 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
const MODULE_NAME = 'ChatSdkFilePicker';
|
|
9
|
+
function loadModule() {
|
|
10
|
+
try {
|
|
11
|
+
return _reactNative.TurboModuleRegistry.get(MODULE_NAME);
|
|
12
|
+
} catch {
|
|
13
|
+
return _reactNative.NativeModules[MODULE_NAME] ?? null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
var _default = exports.default = loadModule();
|
|
17
|
+
//# sourceMappingURL=NativeChatSdkFilePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","MODULE_NAME","loadModule","TurboModuleRegistry","get","NativeModules","_default","exports","default"],"sourceRoot":"..\\..\\..\\src","sources":["native/NativeChatSdkFilePicker.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAmBA,MAAMC,WAAW,GAAG,mBAAmB;AAEvC,SAASC,UAAUA,CAAA,EAAgB;EACjC,IAAI;IACF,OAAOC,gCAAmB,CAACC,GAAG,CAAOH,WAAW,CAAC;EACnD,CAAC,CAAC,MAAM;IACN,OAAQI,0BAAa,CAACJ,WAAW,CAAC,IAAyB,IAAI;EACjE;AACF;AAAC,IAAAK,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEcN,UAAU,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.RealtimeClient = void 0;
|
|
7
|
+
exports.resolveReverbConfig = resolveReverbConfig;
|
|
8
|
+
/**
|
|
9
|
+
* Минимальный Pusher-протокол поверх нативного WebSocket.
|
|
10
|
+
*
|
|
11
|
+
* Не требует pusher-js / @react-native-community/netinfo.
|
|
12
|
+
* Работает в Expo Go, bare RN, любом JS-окружении с WebSocket.
|
|
13
|
+
*
|
|
14
|
+
* Поддерживает:
|
|
15
|
+
* - presence-channels (подписка с auth)
|
|
16
|
+
* - WidgetMessagesUpdated
|
|
17
|
+
* - heartbeat (pong на pusher:ping)
|
|
18
|
+
* - exponential reconnect
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
const PUSHER_PROTOCOL = 7;
|
|
22
|
+
const RECONNECT_DELAYS = [1000, 2000, 4000, 8000, 16000];
|
|
23
|
+
const MESSAGE_UPDATE_EVENTS = new Set(['ChatSdkMessagesUpdated', '.ChatSdkMessagesUpdated', 'App\\Events\\ChatSdk\\ChatSdkMessagesUpdated']);
|
|
24
|
+
|
|
25
|
+
/** На эмуляторе API часто на 10.0.2.2, а Reverb host с сервера — localhost. */
|
|
26
|
+
function resolveReverbConfig(reverb, apiBaseUrl) {
|
|
27
|
+
const host = reverb.host?.trim() ?? '';
|
|
28
|
+
if (host === 'localhost' || host === '127.0.0.1') {
|
|
29
|
+
try {
|
|
30
|
+
const apiHost = new URL(apiBaseUrl).hostname;
|
|
31
|
+
if (apiHost && apiHost !== 'localhost' && apiHost !== '127.0.0.1') {
|
|
32
|
+
return {
|
|
33
|
+
...reverb,
|
|
34
|
+
host: apiHost
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
} catch {
|
|
38
|
+
// keep original host
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return reverb;
|
|
42
|
+
}
|
|
43
|
+
class RealtimeClient {
|
|
44
|
+
ws = null;
|
|
45
|
+
socketId = null;
|
|
46
|
+
channelName = null;
|
|
47
|
+
handlers = new Map();
|
|
48
|
+
reconnectAttempt = 0;
|
|
49
|
+
reconnectTimer = null;
|
|
50
|
+
destroyed = false;
|
|
51
|
+
authEndpoint = '';
|
|
52
|
+
authHeaders = {};
|
|
53
|
+
wsUrl = '';
|
|
54
|
+
|
|
55
|
+
// ─── Публичное API ─────────────────────────────────────────────────────────
|
|
56
|
+
|
|
57
|
+
connect(config, widgetToken, contactId, authEndpoint, authHeaders, apiBaseUrl) {
|
|
58
|
+
this.destroy();
|
|
59
|
+
this.destroyed = false;
|
|
60
|
+
const resolved = apiBaseUrl ? resolveReverbConfig(config, apiBaseUrl) : config;
|
|
61
|
+
const secure = resolved.scheme === 'https';
|
|
62
|
+
const wsScheme = secure ? 'wss' : 'ws';
|
|
63
|
+
this.wsUrl = `${wsScheme}://${resolved.host}:${resolved.port}/app/${resolved.key}?protocol=${PUSHER_PROTOCOL}&client=js&version=8.4.0`;
|
|
64
|
+
this.channelName = `presence-chat_sdk.${widgetToken}.contact.${contactId}`;
|
|
65
|
+
this.authEndpoint = authEndpoint;
|
|
66
|
+
this.authHeaders = authHeaders;
|
|
67
|
+
this.openSocket();
|
|
68
|
+
}
|
|
69
|
+
disconnect() {
|
|
70
|
+
this.destroy();
|
|
71
|
+
}
|
|
72
|
+
isConnected() {
|
|
73
|
+
return this.ws?.readyState === WebSocket.OPEN && !!this.socketId;
|
|
74
|
+
}
|
|
75
|
+
on(event, handler) {
|
|
76
|
+
if (!this.handlers.has(event)) {
|
|
77
|
+
this.handlers.set(event, new Set());
|
|
78
|
+
}
|
|
79
|
+
this.handlers.get(event).add(handler);
|
|
80
|
+
return () => this.handlers.get(event)?.delete(handler);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// ─── Внутренняя логика ─────────────────────────────────────────────────────
|
|
84
|
+
|
|
85
|
+
openSocket() {
|
|
86
|
+
try {
|
|
87
|
+
this.ws = new WebSocket(this.wsUrl);
|
|
88
|
+
} catch (e) {
|
|
89
|
+
this.scheduleReconnect();
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
this.ws.onopen = () => {
|
|
93
|
+
// Pusher пришлёт pusher:connection_established — ждём
|
|
94
|
+
};
|
|
95
|
+
this.ws.onmessage = event => {
|
|
96
|
+
this.handleMessage(String(event.data));
|
|
97
|
+
};
|
|
98
|
+
this.ws.onerror = () => {
|
|
99
|
+
// onclose вызовется следом
|
|
100
|
+
};
|
|
101
|
+
this.ws.onclose = () => {
|
|
102
|
+
this.socketId = null;
|
|
103
|
+
this.emit('disconnected');
|
|
104
|
+
if (!this.destroyed) {
|
|
105
|
+
this.scheduleReconnect();
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
handleMessage(raw) {
|
|
110
|
+
let msg;
|
|
111
|
+
try {
|
|
112
|
+
msg = JSON.parse(raw);
|
|
113
|
+
} catch {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const eventName = msg.event ?? '';
|
|
117
|
+
switch (eventName) {
|
|
118
|
+
case 'pusher:connection_established':
|
|
119
|
+
{
|
|
120
|
+
const data = typeof msg.data === 'string' ? JSON.parse(msg.data) : msg.data;
|
|
121
|
+
this.socketId = data.socket_id;
|
|
122
|
+
this.reconnectAttempt = 0;
|
|
123
|
+
void this.subscribe();
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
case 'pusher:ping':
|
|
127
|
+
this.send({
|
|
128
|
+
event: 'pusher:pong',
|
|
129
|
+
data: {}
|
|
130
|
+
});
|
|
131
|
+
break;
|
|
132
|
+
case 'pusher:error':
|
|
133
|
+
{
|
|
134
|
+
const errData = this.parseData(msg.data);
|
|
135
|
+
console.warn('ChatSDK realtime: pusher error', errData);
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
case 'pusher_internal:subscription_succeeded':
|
|
139
|
+
this.emit('connected');
|
|
140
|
+
break;
|
|
141
|
+
case 'pusher:subscription_error':
|
|
142
|
+
{
|
|
143
|
+
const errData = this.parseData(msg.data);
|
|
144
|
+
console.warn('ChatSDK realtime: subscription error', errData);
|
|
145
|
+
this.emit('disconnected');
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
default:
|
|
149
|
+
if (MESSAGE_UPDATE_EVENTS.has(eventName)) {
|
|
150
|
+
this.emit('messages_updated', this.parseData(msg.data));
|
|
151
|
+
}
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async subscribe() {
|
|
156
|
+
if (!this.channelName || !this.socketId) return;
|
|
157
|
+
let auth = '';
|
|
158
|
+
let channelData = '';
|
|
159
|
+
try {
|
|
160
|
+
const res = await fetch(this.authEndpoint, {
|
|
161
|
+
method: 'POST',
|
|
162
|
+
headers: {
|
|
163
|
+
'Content-Type': 'application/json',
|
|
164
|
+
Accept: 'application/json',
|
|
165
|
+
...this.authHeaders
|
|
166
|
+
},
|
|
167
|
+
body: JSON.stringify({
|
|
168
|
+
socket_id: this.socketId,
|
|
169
|
+
channel_name: this.channelName
|
|
170
|
+
})
|
|
171
|
+
});
|
|
172
|
+
if (res.ok) {
|
|
173
|
+
const body = await res.json();
|
|
174
|
+
auth = body.auth ?? '';
|
|
175
|
+
channelData = body.channel_data ?? '';
|
|
176
|
+
} else {
|
|
177
|
+
const body = await res.text().catch(() => '');
|
|
178
|
+
console.warn('ChatSDK realtime: auth HTTP', res.status, body);
|
|
179
|
+
}
|
|
180
|
+
} catch (e) {
|
|
181
|
+
console.warn('ChatSDK realtime: auth request failed', e);
|
|
182
|
+
}
|
|
183
|
+
if (!auth) return;
|
|
184
|
+
if (this.ws?.readyState !== WebSocket.OPEN) return;
|
|
185
|
+
const payload = {
|
|
186
|
+
channel: this.channelName,
|
|
187
|
+
auth
|
|
188
|
+
};
|
|
189
|
+
// Presence-канал требует channel_data — без него подписка не проходит
|
|
190
|
+
if (channelData) {
|
|
191
|
+
payload.channel_data = channelData;
|
|
192
|
+
}
|
|
193
|
+
this.send({
|
|
194
|
+
event: 'pusher:subscribe',
|
|
195
|
+
data: payload
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
send(payload) {
|
|
199
|
+
if (this.ws?.readyState === WebSocket.OPEN) {
|
|
200
|
+
this.ws.send(JSON.stringify(payload));
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
scheduleReconnect() {
|
|
204
|
+
if (this.destroyed) return;
|
|
205
|
+
const delay = RECONNECT_DELAYS[Math.min(this.reconnectAttempt, RECONNECT_DELAYS.length - 1)];
|
|
206
|
+
this.reconnectAttempt++;
|
|
207
|
+
this.reconnectTimer = setTimeout(() => {
|
|
208
|
+
if (!this.destroyed) this.openSocket();
|
|
209
|
+
}, delay);
|
|
210
|
+
}
|
|
211
|
+
destroy() {
|
|
212
|
+
this.destroyed = true;
|
|
213
|
+
if (this.reconnectTimer) {
|
|
214
|
+
clearTimeout(this.reconnectTimer);
|
|
215
|
+
this.reconnectTimer = null;
|
|
216
|
+
}
|
|
217
|
+
if (this.ws) {
|
|
218
|
+
this.ws.onopen = null;
|
|
219
|
+
this.ws.onmessage = null;
|
|
220
|
+
this.ws.onerror = null;
|
|
221
|
+
this.ws.onclose = null;
|
|
222
|
+
this.ws.close();
|
|
223
|
+
this.ws = null;
|
|
224
|
+
}
|
|
225
|
+
this.socketId = null;
|
|
226
|
+
}
|
|
227
|
+
parseData(data) {
|
|
228
|
+
if (typeof data === 'string') {
|
|
229
|
+
try {
|
|
230
|
+
return JSON.parse(data);
|
|
231
|
+
} catch {
|
|
232
|
+
return data;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return data;
|
|
236
|
+
}
|
|
237
|
+
emit(event, data) {
|
|
238
|
+
this.handlers.get(event)?.forEach(h => h(data));
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
exports.RealtimeClient = RealtimeClient;
|
|
242
|
+
//# sourceMappingURL=realtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PUSHER_PROTOCOL","RECONNECT_DELAYS","MESSAGE_UPDATE_EVENTS","Set","resolveReverbConfig","reverb","apiBaseUrl","host","trim","apiHost","URL","hostname","RealtimeClient","ws","socketId","channelName","handlers","Map","reconnectAttempt","reconnectTimer","destroyed","authEndpoint","authHeaders","wsUrl","connect","config","widgetToken","contactId","destroy","resolved","secure","scheme","wsScheme","port","key","openSocket","disconnect","isConnected","readyState","WebSocket","OPEN","on","event","handler","has","set","get","add","delete","e","scheduleReconnect","onopen","onmessage","handleMessage","String","data","onerror","onclose","emit","raw","msg","JSON","parse","eventName","socket_id","subscribe","send","errData","parseData","console","warn","auth","channelData","res","fetch","method","headers","Accept","body","stringify","channel_name","ok","json","channel_data","text","catch","status","payload","channel","delay","Math","min","length","setTimeout","clearTimeout","close","forEach","h","exports"],"sourceRoot":"..\\..\\src","sources":["realtime.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.INPUT_BOTTOM_PADDING = void 0;
|
|
7
|
+
exports.getAndroidStatusBarHeight = getAndroidStatusBarHeight;
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
/** Верхний отступ под status bar (Android). На iOS используйте SafeAreaView. */
|
|
10
|
+
function getAndroidStatusBarHeight() {
|
|
11
|
+
return _reactNative.StatusBar.currentHeight ?? 24;
|
|
12
|
+
}
|
|
13
|
+
const INPUT_BOTTOM_PADDING = exports.INPUT_BOTTOM_PADDING = _reactNative.Platform.select({
|
|
14
|
+
ios: 0,
|
|
15
|
+
android: 12,
|
|
16
|
+
default: 12
|
|
17
|
+
}) ?? 12;
|
|
18
|
+
//# sourceMappingURL=safeArea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","getAndroidStatusBarHeight","StatusBar","currentHeight","INPUT_BOTTOM_PADDING","exports","Platform","select","ios","android","default"],"sourceRoot":"..\\..\\src","sources":["safeArea.ts"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA;AACO,SAASC,yBAAyBA,CAAA,EAAW;EAClD,OAAOC,sBAAS,CAACC,aAAa,IAAI,EAAE;AACtC;AAEO,MAAMC,oBAAoB,GAAAC,OAAA,CAAAD,oBAAA,GAAGE,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,CAAC;EAAEC,OAAO,EAAE,EAAE;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,IAAI,EAAE","ignoreList":[]}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ChatSDKSession = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _realtime = require("./realtime.js");
|
|
9
|
+
const POLL_INTERVAL_MS = 5000;
|
|
10
|
+
/**
|
|
11
|
+
* Время жизни — от ChatSDK.login() до ChatSDK.logout().
|
|
12
|
+
* Один источник правды для realtime + polling + кэша сообщений/оператора.
|
|
13
|
+
* События проксируются в ChatSDK через emitters.
|
|
14
|
+
*/
|
|
15
|
+
class ChatSDKSession {
|
|
16
|
+
realtime = null;
|
|
17
|
+
pollTimer = null;
|
|
18
|
+
appStateSub = null;
|
|
19
|
+
destroyed = false;
|
|
20
|
+
refreshing = false;
|
|
21
|
+
messages = [];
|
|
22
|
+
operator = null;
|
|
23
|
+
knownMessageIds = new Set();
|
|
24
|
+
initialLoaded = false;
|
|
25
|
+
connected = false;
|
|
26
|
+
constructor(api, sdkConfig, widgetToken, baseUrl, emitters) {
|
|
27
|
+
this.api = api;
|
|
28
|
+
this.sdkConfig = sdkConfig;
|
|
29
|
+
this.widgetToken = widgetToken;
|
|
30
|
+
this.baseUrl = baseUrl;
|
|
31
|
+
this.emitters = emitters;
|
|
32
|
+
}
|
|
33
|
+
start() {
|
|
34
|
+
this.openRealtime();
|
|
35
|
+
this.appStateSub = _reactNative.AppState.addEventListener('change', this.handleAppStateChange);
|
|
36
|
+
void this.refreshMessages();
|
|
37
|
+
}
|
|
38
|
+
destroy() {
|
|
39
|
+
this.destroyed = true;
|
|
40
|
+
this.realtime?.disconnect();
|
|
41
|
+
this.realtime = null;
|
|
42
|
+
this.stopPolling();
|
|
43
|
+
this.appStateSub?.remove();
|
|
44
|
+
this.appStateSub = null;
|
|
45
|
+
this.messages = [];
|
|
46
|
+
this.operator = null;
|
|
47
|
+
this.knownMessageIds.clear();
|
|
48
|
+
this.initialLoaded = false;
|
|
49
|
+
if (this.connected) {
|
|
50
|
+
this.connected = false;
|
|
51
|
+
this.emitters.emitConnectedChange(false);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
getMessages() {
|
|
55
|
+
return this.messages;
|
|
56
|
+
}
|
|
57
|
+
getOperator() {
|
|
58
|
+
return this.operator;
|
|
59
|
+
}
|
|
60
|
+
isConnected() {
|
|
61
|
+
return this.connected;
|
|
62
|
+
}
|
|
63
|
+
async refreshMessages() {
|
|
64
|
+
if (this.destroyed || this.refreshing) return;
|
|
65
|
+
this.refreshing = true;
|
|
66
|
+
try {
|
|
67
|
+
const data = await this.api.getMessages();
|
|
68
|
+
if (this.destroyed) return;
|
|
69
|
+
const incoming = data.messages ?? [];
|
|
70
|
+
const nextOperator = data.operator ?? null;
|
|
71
|
+
if (this.initialLoaded) {
|
|
72
|
+
this.detectOperatorChange(nextOperator);
|
|
73
|
+
this.detectNewMessages(incoming, nextOperator);
|
|
74
|
+
}
|
|
75
|
+
this.messages = incoming;
|
|
76
|
+
this.operator = nextOperator;
|
|
77
|
+
this.knownMessageIds = new Set(incoming.map(m => m.id));
|
|
78
|
+
this.initialLoaded = true;
|
|
79
|
+
this.emitters.emitMessagesUpdated(incoming, nextOperator);
|
|
80
|
+
} catch (e) {
|
|
81
|
+
// Тихо — UI-слой (useChat) сам показывает ошибки своих явных действий.
|
|
82
|
+
// Фоновый refresh не должен ронять чат, если на короткое время пропала сеть.
|
|
83
|
+
if (this.initialLoaded) return;
|
|
84
|
+
throw e;
|
|
85
|
+
} finally {
|
|
86
|
+
this.refreshing = false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
detectOperatorChange(nextOperator) {
|
|
90
|
+
const prevId = this.operator?.id ?? null;
|
|
91
|
+
const nextId = nextOperator?.id ?? null;
|
|
92
|
+
if (prevId === nextId) return;
|
|
93
|
+
const contactId = this.api.getContactId();
|
|
94
|
+
if (!contactId) return;
|
|
95
|
+
this.emitters.emitOperatorChanged({
|
|
96
|
+
token: this.widgetToken,
|
|
97
|
+
contactId,
|
|
98
|
+
previousOperator: this.operator,
|
|
99
|
+
operator: nextOperator,
|
|
100
|
+
occurredAt: new Date().toISOString()
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
detectNewMessages(incoming, nextOperator) {
|
|
104
|
+
const contactId = this.api.getContactId();
|
|
105
|
+
if (!contactId) return;
|
|
106
|
+
for (const message of incoming) {
|
|
107
|
+
if (this.knownMessageIds.has(message.id)) continue;
|
|
108
|
+
if (message.type !== 'user') continue;
|
|
109
|
+
this.emitters.emitNewMessage({
|
|
110
|
+
token: this.widgetToken,
|
|
111
|
+
contactId,
|
|
112
|
+
message,
|
|
113
|
+
operator: nextOperator,
|
|
114
|
+
occurredAt: new Date().toISOString()
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
openRealtime() {
|
|
119
|
+
const contactId = this.api.getContactId();
|
|
120
|
+
if (!contactId) return;
|
|
121
|
+
const rt = new _realtime.RealtimeClient();
|
|
122
|
+
this.realtime = rt;
|
|
123
|
+
rt.on('connected', () => this.setConnected(true));
|
|
124
|
+
rt.on('disconnected', () => this.setConnected(false));
|
|
125
|
+
rt.on('messages_updated', () => void this.refreshMessages());
|
|
126
|
+
rt.connect(this.sdkConfig.reverb, this.widgetToken, contactId, this.api.getBroadcastAuthEndpoint(), this.api.getAuthHeaders(), this.baseUrl || this.sdkConfig.apiBaseUrl);
|
|
127
|
+
}
|
|
128
|
+
setConnected(value) {
|
|
129
|
+
if (this.connected === value) return;
|
|
130
|
+
this.connected = value;
|
|
131
|
+
this.emitters.emitConnectedChange(value);
|
|
132
|
+
if (value) {
|
|
133
|
+
this.stopPolling();
|
|
134
|
+
} else {
|
|
135
|
+
this.startPolling();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
startPolling() {
|
|
139
|
+
if (this.pollTimer || this.destroyed) return;
|
|
140
|
+
if (_reactNative.AppState.currentState !== 'active') return;
|
|
141
|
+
this.pollTimer = setInterval(() => void this.refreshMessages(), POLL_INTERVAL_MS);
|
|
142
|
+
}
|
|
143
|
+
stopPolling() {
|
|
144
|
+
if (!this.pollTimer) return;
|
|
145
|
+
clearInterval(this.pollTimer);
|
|
146
|
+
this.pollTimer = null;
|
|
147
|
+
}
|
|
148
|
+
handleAppStateChange = next => {
|
|
149
|
+
if (this.destroyed) return;
|
|
150
|
+
if (next === 'active') {
|
|
151
|
+
void this.refreshMessages();
|
|
152
|
+
if (!this.connected) this.startPolling();
|
|
153
|
+
} else {
|
|
154
|
+
this.stopPolling();
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
exports.ChatSDKSession = ChatSDKSession;
|
|
159
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_realtime","POLL_INTERVAL_MS","ChatSDKSession","realtime","pollTimer","appStateSub","destroyed","refreshing","messages","operator","knownMessageIds","Set","initialLoaded","connected","constructor","api","sdkConfig","widgetToken","baseUrl","emitters","start","openRealtime","AppState","addEventListener","handleAppStateChange","refreshMessages","destroy","disconnect","stopPolling","remove","clear","emitConnectedChange","getMessages","getOperator","isConnected","data","incoming","nextOperator","detectOperatorChange","detectNewMessages","map","m","id","emitMessagesUpdated","e","prevId","nextId","contactId","getContactId","emitOperatorChanged","token","previousOperator","occurredAt","Date","toISOString","message","has","type","emitNewMessage","rt","RealtimeClient","on","setConnected","connect","reverb","getBroadcastAuthEndpoint","getAuthHeaders","apiBaseUrl","value","startPolling","currentState","setInterval","clearInterval","next","exports"],"sourceRoot":"..\\..\\src","sources":["session.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.clearSurveyCache = clearSurveyCache;
|
|
7
|
+
exports.deleteSurveyEvent = deleteSurveyEvent;
|
|
8
|
+
exports.isSurveyEventSeen = isSurveyEventSeen;
|
|
9
|
+
exports.markSurveyEventSeen = markSurveyEventSeen;
|
|
10
|
+
const cache = new Map();
|
|
11
|
+
function isSurveyEventSeen(contactId, messageId) {
|
|
12
|
+
return cache.get(contactId)?.has(messageId) ?? false;
|
|
13
|
+
}
|
|
14
|
+
function markSurveyEventSeen(contactId, messageId) {
|
|
15
|
+
if (!cache.has(contactId)) {
|
|
16
|
+
cache.set(contactId, new Set());
|
|
17
|
+
}
|
|
18
|
+
cache.get(contactId).add(messageId);
|
|
19
|
+
}
|
|
20
|
+
function deleteSurveyEvent(contactId, messageId) {
|
|
21
|
+
cache.get(contactId)?.delete(messageId);
|
|
22
|
+
}
|
|
23
|
+
function clearSurveyCache(contactId) {
|
|
24
|
+
if (contactId) {
|
|
25
|
+
cache.delete(contactId);
|
|
26
|
+
} else {
|
|
27
|
+
cache.clear();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=surveyCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["cache","Map","isSurveyEventSeen","contactId","messageId","get","has","markSurveyEventSeen","set","Set","add","deleteSurveyEvent","delete","clearSurveyCache","clear"],"sourceRoot":"..\\..\\src","sources":["surveyCache.ts"],"mappings":";;;;;;;;;AAAA,MAAMA,KAAK,GAAG,IAAIC,GAAG,CAAsB,CAAC;AAErC,SAASC,iBAAiBA,CAACC,SAAiB,EAAEC,SAAiB,EAAW;EAC/E,OAAOJ,KAAK,CAACK,GAAG,CAACF,SAAS,CAAC,EAAEG,GAAG,CAACF,SAAS,CAAC,IAAI,KAAK;AACtD;AAEO,SAASG,mBAAmBA,CAACJ,SAAiB,EAAEC,SAAiB,EAAQ;EAC9E,IAAI,CAACJ,KAAK,CAACM,GAAG,CAACH,SAAS,CAAC,EAAE;IACzBH,KAAK,CAACQ,GAAG,CAACL,SAAS,EAAE,IAAIM,GAAG,CAAC,CAAC,CAAC;EACjC;EACAT,KAAK,CAACK,GAAG,CAACF,SAAS,CAAC,CAAEO,GAAG,CAACN,SAAS,CAAC;AACtC;AAEO,SAASO,iBAAiBA,CAACR,SAAiB,EAAEC,SAAiB,EAAQ;EAC5EJ,KAAK,CAACK,GAAG,CAACF,SAAS,CAAC,EAAES,MAAM,CAACR,SAAS,CAAC;AACzC;AAEO,SAASS,gBAAgBA,CAACV,SAAkB,EAAQ;EACzD,IAAIA,SAAS,EAAE;IACbH,KAAK,CAACY,MAAM,CAACT,SAAS,CAAC;EACzB,CAAC,MAAM;IACLH,KAAK,CAACc,KAAK,CAAC,CAAC;EACf;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.buildTheme = buildTheme;
|
|
7
|
+
function buildTheme(config) {
|
|
8
|
+
const primary = config?.themeColor ?? '#2d8ef0';
|
|
9
|
+
const isGradient = config?.colorType === 'gradient' && !!config?.colorStart && !!config?.colorEnd;
|
|
10
|
+
return {
|
|
11
|
+
primaryColor: primary,
|
|
12
|
+
primaryColorStart: config?.colorStart ?? null,
|
|
13
|
+
primaryColorEnd: config?.colorEnd ?? null,
|
|
14
|
+
isGradient,
|
|
15
|
+
outboundBg: primary,
|
|
16
|
+
inboundBg: '#f0f0f5',
|
|
17
|
+
outboundText: '#ffffff',
|
|
18
|
+
inboundText: '#1a1a1a',
|
|
19
|
+
background: '#ffffff',
|
|
20
|
+
inputBg: '#f7f7f9',
|
|
21
|
+
inputBorder: '#e0e0e8',
|
|
22
|
+
inputText: '#1a1a1a',
|
|
23
|
+
systemText: '#9999aa',
|
|
24
|
+
headerBg: primary,
|
|
25
|
+
headerText: '#ffffff',
|
|
26
|
+
sendButtonBg: primary
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["buildTheme","config","primary","themeColor","isGradient","colorType","colorStart","colorEnd","primaryColor","primaryColorStart","primaryColorEnd","outboundBg","inboundBg","outboundText","inboundText","background","inputBg","inputBorder","inputText","systemText","headerBg","headerText","sendButtonBg"],"sourceRoot":"..\\..\\src","sources":["theme.ts"],"mappings":";;;;;;AAuBO,SAASA,UAAUA,CAACC,MAA2B,EAAa;EACjE,MAAMC,OAAO,GAAGD,MAAM,EAAEE,UAAU,IAAI,SAAS;EAC/C,MAAMC,UAAU,GACdH,MAAM,EAAEI,SAAS,KAAK,UAAU,IAChC,CAAC,CAACJ,MAAM,EAAEK,UAAU,IACpB,CAAC,CAACL,MAAM,EAAEM,QAAQ;EAEpB,OAAO;IACLC,YAAY,EAAEN,OAAO;IACrBO,iBAAiB,EAAER,MAAM,EAAEK,UAAU,IAAI,IAAI;IAC7CI,eAAe,EAAET,MAAM,EAAEM,QAAQ,IAAI,IAAI;IACzCH,UAAU;IACVO,UAAU,EAAET,OAAO;IACnBU,SAAS,EAAE,SAAS;IACpBC,YAAY,EAAE,SAAS;IACvBC,WAAW,EAAE,SAAS;IACtBC,UAAU,EAAE,SAAS;IACrBC,OAAO,EAAE,SAAS;IAClBC,WAAW,EAAE,SAAS;IACtBC,SAAS,EAAE,SAAS;IACpBC,UAAU,EAAE,SAAS;IACrBC,QAAQ,EAAElB,OAAO;IACjBmB,UAAU,EAAE,SAAS;IACrBC,YAAY,EAAEpB;EAChB,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"..\\..\\src","sources":["types.ts"],"mappings":"","ignoreList":[]}
|