@chat21/chat21-ionic 3.4.30-rc2 → 3.4.30
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 +4 -119
- package/angular.json +0 -1
- package/package.json +1 -1
- package/src/app/app.component.html +1 -3
- package/src/app/app.component.ts +16 -71
- package/src/app/chatlib/conversation-detail/message/image/image.component.html +0 -1
- package/src/app/chatlib/conversation-detail/message/image/image.component.ts +0 -19
- package/src/app/components/canned-response/canned-response.component.html +23 -26
- package/src/app/components/canned-response/canned-response.component.scss +2 -0
- package/src/app/components/canned-response/canned-response.component.ts +1 -3
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +1 -24
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +0 -30
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +9 -39
- package/src/app/components/conversation-info/info-content/info-content.component.ts +2 -2
- package/src/app/components/conversation-info/info-group/info-group.component.ts +21 -23
- package/src/app/components/conversations-list/header-conversations-list/header-conversations-list.component.html +1 -1
- package/src/app/components/conversations-list/header-conversations-list/header-conversations-list.component.ts +1 -5
- package/src/app/components/navbar/navbar.component.html +3 -3
- package/src/app/components/navbar/navbar.component.ts +38 -29
- package/src/app/components/project-item/project-item.component.ts +11 -11
- package/src/app/components/sidebar/sidebar.component.html +45 -65
- package/src/app/components/sidebar/sidebar.component.ts +117 -110
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +2 -2
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +7 -10
- package/src/app/modals/create-ticket/create-ticket.page.ts +2 -4
- package/src/app/pages/conversation-detail/conversation-detail.page.html +3 -7
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +7 -95
- package/src/app/pages/conversations-list/conversations-list.page.html +0 -2
- package/src/app/pages/conversations-list/conversations-list.page.ts +2 -40
- package/src/app/services/global-settings/global-settings.service.ts +3 -11
- package/src/app/services/nav-proxy.service.ts +1 -0
- package/src/app/services/tiledesk/tiledesk.service.ts +16 -0
- package/src/app/services/triggerEvents/triggerEvents.ts +0 -28
- package/src/app/services/websocket/websocket-js.ts +534 -59
- package/src/app/services/websocket/websocket.service.ts +10 -9
- package/src/app/shared/shared.module.ts +2 -11
- package/src/app/utils/globals.ts +0 -2
- package/src/app/utils/project-utils.ts +2 -2
- package/src/app/utils/utils.ts +1 -18
- package/src/assets/i18n/ar.json +1 -11
- package/src/assets/i18n/az.json +1 -11
- package/src/assets/i18n/de.json +1 -11
- package/src/assets/i18n/en.json +1 -11
- package/src/assets/i18n/es.json +1 -11
- package/src/assets/i18n/fr.json +1 -11
- package/src/assets/i18n/it.json +3 -13
- package/src/assets/i18n/kk.json +1 -11
- package/src/assets/i18n/pt.json +1 -11
- package/src/assets/i18n/ru.json +1 -11
- package/src/assets/i18n/sr.json +1 -11
- package/src/assets/i18n/sv.json +1 -11
- package/src/assets/i18n/tr.json +1 -11
- package/src/assets/i18n/uk.json +1 -11
- package/src/assets/i18n/uz.json +1 -12
- package/src/assets/js/chat21client.js +0 -36
- package/src/assets/test.html +2 -5
- package/src/chat-config-template.json +0 -1
- package/src/chat-config.json +0 -1
- package/src/chat21-core/providers/abstract/upload.service.ts +1 -5
- package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +1 -1
- package/src/chat21-core/providers/firebase/firebase-upload.service.ts +9 -136
- package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +1 -1
- package/src/chat21-core/providers/native/native-image-repo.ts +1 -1
- package/src/chat21-core/providers/native/native-upload-service.ts +45 -143
- package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +0 -3
- package/src/chat21-core/utils/utils.ts +2 -16
- package/src/app/services/project_users/project-users.service.spec.ts +0 -16
- package/src/app/services/project_users/project-users.service.ts +0 -63
- package/src/app/services/websocket/websocket-js_old.ts +0 -578
- package/src/app/services/websocket/websocket.worker.ts +0 -242
- package/src/app/utils/permissions.constants.ts +0 -138
- package/src/assets/img/no_data_found.png +0 -0
- package/src/assets/js/agentDesktop-sdk.js +0 -55
- package/src/assets/js/mqtt-keepalive-worker.js +0 -53
- package/src/chat21-core/models/projectUsers.ts +0 -19
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
/// websocket.worker.ts
|
|
2
|
-
|
|
3
|
-
interface WSMessage {
|
|
4
|
-
action?: string;
|
|
5
|
-
event?: { topic: string; method: string };
|
|
6
|
-
payload?: any;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
interface Subscription {
|
|
10
|
-
topic: string;
|
|
11
|
-
label?: string;
|
|
12
|
-
onCreate?: (msg: any) => void;
|
|
13
|
-
onUpdate?: (msg: any) => void;
|
|
14
|
-
onData?: (msg: any) => void;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
let ws: WebSocket | null = null;
|
|
18
|
-
let url = '';
|
|
19
|
-
let reconnectInterval = 5000;
|
|
20
|
-
let subscriptions: Subscription[] = [];
|
|
21
|
-
let pendingMessages: any[] = [];
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
let pingMsg = { action: "heartbeat", payload: { message: { text: "ping" } } }
|
|
25
|
-
let pongMsg = { action: "heartbeat", payload: { message: { text: "pong" } } }
|
|
26
|
-
const pongTimeout = 10000;
|
|
27
|
-
const pingTimeout = 15000;
|
|
28
|
-
let pingTimeoutId;
|
|
29
|
-
let pongTimeoutId;
|
|
30
|
-
|
|
31
|
-
let reconnectAttempts = 0;
|
|
32
|
-
const maxReconnectDelay = 30000;
|
|
33
|
-
let manuallyClosed = false;
|
|
34
|
-
let pageHidden = false;
|
|
35
|
-
|
|
36
|
-
onmessage = (e: MessageEvent) => {
|
|
37
|
-
const { action, data } = e.data;
|
|
38
|
-
|
|
39
|
-
switch (action) {
|
|
40
|
-
case 'init':
|
|
41
|
-
url = data.url;
|
|
42
|
-
connect();
|
|
43
|
-
break;
|
|
44
|
-
case 'subscribe':
|
|
45
|
-
const topic = data.topic || data.label;
|
|
46
|
-
subscriptions.push({ topic });
|
|
47
|
-
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
48
|
-
ws.send(JSON.stringify({
|
|
49
|
-
action: 'subscribe',
|
|
50
|
-
payload: {
|
|
51
|
-
topic: topic,
|
|
52
|
-
message: undefined,
|
|
53
|
-
method: undefined
|
|
54
|
-
}
|
|
55
|
-
}));
|
|
56
|
-
}
|
|
57
|
-
break;
|
|
58
|
-
case 'unsubscribe':
|
|
59
|
-
subscriptions = subscriptions.filter(s => s.topic !== data.topic);
|
|
60
|
-
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
61
|
-
// Unsubscribe
|
|
62
|
-
ws.send(JSON.stringify({
|
|
63
|
-
action: 'unsubscribe',
|
|
64
|
-
payload: {
|
|
65
|
-
topic: data.topic,
|
|
66
|
-
message: undefined,
|
|
67
|
-
method: undefined
|
|
68
|
-
}
|
|
69
|
-
}));
|
|
70
|
-
}
|
|
71
|
-
break;
|
|
72
|
-
case 'visibility': // ✅ Nuovo
|
|
73
|
-
pageHidden = data.hidden;
|
|
74
|
-
break;
|
|
75
|
-
case 'send':
|
|
76
|
-
sendMessage(data.message);
|
|
77
|
-
break;
|
|
78
|
-
case 'close': // ✅ Nuovo
|
|
79
|
-
closeConnection();
|
|
80
|
-
break;
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
function connect() {
|
|
85
|
-
ws = new WebSocket(url);
|
|
86
|
-
ws.onopen = () => {
|
|
87
|
-
console.log('[Worker] WebSocket connected',subscriptions);
|
|
88
|
-
// Risottiamo pending subscriptions
|
|
89
|
-
subscriptions.forEach(s => {
|
|
90
|
-
ws!.send(JSON.stringify({
|
|
91
|
-
action: 'subscribe',
|
|
92
|
-
payload: {
|
|
93
|
-
topic: s.topic,
|
|
94
|
-
message: undefined,
|
|
95
|
-
method: undefined
|
|
96
|
-
}
|
|
97
|
-
}));
|
|
98
|
-
}
|
|
99
|
-
);
|
|
100
|
-
// Invia messaggi in coda
|
|
101
|
-
pendingMessages.forEach(msg => ws!.send(JSON.stringify(msg)));
|
|
102
|
-
pendingMessages = [];
|
|
103
|
-
|
|
104
|
-
// Inizializza heartbeat
|
|
105
|
-
heartCheck();
|
|
106
|
-
reconnectAttempts = 0;
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
ws.onmessage = (event) => {
|
|
110
|
-
try {
|
|
111
|
-
const msg: WSMessage = JSON.parse(event.data);
|
|
112
|
-
handleMessage(msg);
|
|
113
|
-
} catch (err) {
|
|
114
|
-
console.error('[Worker] Invalid message', err);
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
ws.onclose = () => {
|
|
119
|
-
heartReset();
|
|
120
|
-
if(!manuallyClosed){
|
|
121
|
-
reconnectAttempts++;
|
|
122
|
-
const delay = Math.min(reconnectAttempts * 1000, maxReconnectDelay);
|
|
123
|
-
console.log('[Worker] WebSocket disconnected, retry in', delay, 'ms');
|
|
124
|
-
setTimeout(connect, delay);
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
ws.onerror = (err) => {
|
|
129
|
-
console.error('[Worker] WebSocket error', err);
|
|
130
|
-
ws?.close();
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
function handleMessage(msg: WSMessage) {
|
|
135
|
-
console.log('[Worker] Received message:', msg);
|
|
136
|
-
// --- GESTIONE PING/PONG ---
|
|
137
|
-
if (msg.action === 'heartbeat' && msg.payload?.message?.text === 'ping') {
|
|
138
|
-
console.log('[Worker] Received ping, sending pong');
|
|
139
|
-
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
140
|
-
ws.send(JSON.stringify(pongMsg));
|
|
141
|
-
}
|
|
142
|
-
return; // Non processare ulteriormente il ping
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// Solo formato "publish"
|
|
146
|
-
if (msg.action !== "publish") return;
|
|
147
|
-
|
|
148
|
-
const topic = msg.payload?.topic;
|
|
149
|
-
const method = msg.payload?.method;
|
|
150
|
-
const payload = msg.payload?.message;
|
|
151
|
-
|
|
152
|
-
if (!topic) return;
|
|
153
|
-
|
|
154
|
-
// --- GESTIONE ARRAY DI MESSAGGI ---
|
|
155
|
-
const messages = Array.isArray(msg.payload.message) ? msg.payload.message : [msg.payload.message];
|
|
156
|
-
// Notifica solo le subscription che matchano
|
|
157
|
-
subscriptions.forEach(sub => {
|
|
158
|
-
if (sub.topic === topic) {
|
|
159
|
-
messages.forEach(element => {
|
|
160
|
-
postMessage({
|
|
161
|
-
topic,
|
|
162
|
-
method,
|
|
163
|
-
payload: element, // singolo elemento
|
|
164
|
-
data: msg // payload completo per eventuali onData globali
|
|
165
|
-
}, undefined);
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
function sendMessage(message: any) {
|
|
173
|
-
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
174
|
-
ws.send(JSON.stringify(message));
|
|
175
|
-
} else {
|
|
176
|
-
pendingMessages.push(message);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
// -----------------------------------------------------------------------------------------------------
|
|
182
|
-
// @ HeartCheck
|
|
183
|
-
// -----------------------------------------------------------------------------------------------------
|
|
184
|
-
function heartCheck() {
|
|
185
|
-
heartReset();
|
|
186
|
-
heartStart();
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// -----------------------------------------------------------------------------------------------------
|
|
190
|
-
// @ HeartStart
|
|
191
|
-
// -----------------------------------------------------------------------------------------------------
|
|
192
|
-
function heartStart() {
|
|
193
|
-
// this.getRemainingTime();
|
|
194
|
-
|
|
195
|
-
// usa intervallo adattivo se tab è in background (Chrome throtla i timer)
|
|
196
|
-
const adaptivePing = pageHidden ? pingTimeout * 3 : pingTimeout;
|
|
197
|
-
|
|
198
|
-
// // pianifica invio ping
|
|
199
|
-
pingTimeoutId = setTimeout(() => {
|
|
200
|
-
if (!ws || ws.readyState !== WebSocket.OPEN) return;
|
|
201
|
-
console.log("[WEBSOCKET-JS] - HEART-START - SENDING PING ");
|
|
202
|
-
|
|
203
|
-
// Qui viene inviato un battito cardiaco. Dopo averlo ricevuto, viene restituito un messaggio di battito cardiaco.
|
|
204
|
-
// onmessage Ottieni il battito cardiaco restituito per indicare che la connessione è normale
|
|
205
|
-
ws.send(JSON.stringify(pingMsg));
|
|
206
|
-
|
|
207
|
-
// Se non viene ripristinato dopo un determinato periodo di tempo, il backend viene attivamente disconnesso
|
|
208
|
-
pongTimeoutId = setTimeout(() => {
|
|
209
|
-
console.log("[WEBSOCKET-JS] - HEART-START - PONG-TIMEOUT-ID - CLOSE WS ");
|
|
210
|
-
// se onclose Si esibirà reconnect,Eseguiamo ws.close() Bene, se lo esegui direttamente reconnect Si innescherà onclose Causa riconnessione due volte
|
|
211
|
-
ws.close();
|
|
212
|
-
}, pongTimeout) as unknown as number;
|
|
213
|
-
}, adaptivePing);
|
|
214
|
-
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// -----------------------------------------------------------------------------------------------------
|
|
218
|
-
// @ heartReset
|
|
219
|
-
// -----------------------------------------------------------------------------------------------------
|
|
220
|
-
function heartReset() {
|
|
221
|
-
if (pongTimeoutId !== undefined) {
|
|
222
|
-
clearTimeout(pongTimeoutId);
|
|
223
|
-
pongTimeoutId = undefined;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
if (pingTimeoutId !== undefined) {
|
|
227
|
-
clearTimeout(pingTimeoutId);
|
|
228
|
-
pingTimeoutId = undefined;
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
function closeConnection() {
|
|
233
|
-
if (ws) {
|
|
234
|
-
ws.close();
|
|
235
|
-
ws = null;
|
|
236
|
-
}
|
|
237
|
-
heartReset();
|
|
238
|
-
pendingMessages = [];
|
|
239
|
-
subscriptions = [];
|
|
240
|
-
manuallyClosed = true;
|
|
241
|
-
console.log('[Worker] WebSocket closed manually');
|
|
242
|
-
}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
export const PERMISSIONS = {
|
|
3
|
-
REQUEST_READ_ALL: 'request_read_all',
|
|
4
|
-
REQUEST_READ_GROUP: 'request_read_group',
|
|
5
|
-
REQUEST_READ_MY: 'request_read_my',
|
|
6
|
-
|
|
7
|
-
HOME_READ: 'home_read',
|
|
8
|
-
|
|
9
|
-
INBOX_READ: 'inbox_read',
|
|
10
|
-
REQUEST_UPDATE: 'request_update',
|
|
11
|
-
REQUEST_SEND: 'request_send',
|
|
12
|
-
REQUEST_CREATE_TICKET: 'request_create_ticket',
|
|
13
|
-
REQUEST_CLOSE: 'request_close',
|
|
14
|
-
REQUEST_JOIN: 'request_join',
|
|
15
|
-
REQUEST_REOPEN: 'request_reopen',
|
|
16
|
-
REQUEST_DELETE: 'request_delete',
|
|
17
|
-
REQUEST_UPDATE_STATUS: 'request_update_status',
|
|
18
|
-
REQUEST_UPDATE_PRIORITY: 'request_update_priority',
|
|
19
|
-
REQUEST_UPDATE_FOLLOWERS: 'request_update_followers',
|
|
20
|
-
REQUEST_UPDATE_SMART_ASSIGNMENT: 'request_update_smart_assignment',
|
|
21
|
-
REQUEST_UPDATE_TAGS: 'request_update_tags',
|
|
22
|
-
REQUEST_UPDATE_NOTES: 'request_update_notes',
|
|
23
|
-
REQUEST_REASSIGN:'request_reassign',
|
|
24
|
-
REQUEST_ADD:'request_add',
|
|
25
|
-
REQUEST_LEFT: 'request_left',
|
|
26
|
-
REQUEST_TRANSCRIPT_SEND: 'request_transcript_send',
|
|
27
|
-
|
|
28
|
-
HISTORY_READ: 'history_read',
|
|
29
|
-
|
|
30
|
-
RATING_READ:'rating_read',
|
|
31
|
-
|
|
32
|
-
AUTOMATIONSLOG_READ: "automationslog_read",
|
|
33
|
-
AUTOMATIONSLOG_CREATE: "automationslog_create",
|
|
34
|
-
|
|
35
|
-
KB_READ: 'kb_read',
|
|
36
|
-
KB_CONTENTS_ADD:'kb_contents_add',
|
|
37
|
-
KB_CONTENT_UPDATE: 'kb_content_update',
|
|
38
|
-
KB_CONTENT_REINDEX: 'kb_content_reindex',
|
|
39
|
-
KB_CONTENT_CHECK_STATUS: 'kb_content_check_status',
|
|
40
|
-
KB_NAMESPACE_ADD:'kb_namespace_add',
|
|
41
|
-
KB_SETTINGS_EDIT:'kb_settings_edit',
|
|
42
|
-
KB_DELETE: 'kb_delete',
|
|
43
|
-
KB_CONTENTS_EXPORT: 'kb_contents_export',
|
|
44
|
-
// KB_NAMESPACE_DELETE:'kb_namespace_delete',
|
|
45
|
-
// KB_CONTENTS_DELETE:'kb_contents_delete',
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
FLOWS_READ: 'flows_read',
|
|
50
|
-
FLOW_ADD: 'flow_add',
|
|
51
|
-
FLOW_EDIT: 'flow_edit',
|
|
52
|
-
FLOW_TEST: 'flow_test',
|
|
53
|
-
FLOW_DUPLICATE: 'flow_duplicate',
|
|
54
|
-
FLOW_DELETE: 'flow_delete',
|
|
55
|
-
FLOW_SHARE: 'flow_share',
|
|
56
|
-
FLOW_EXPORT: 'flow_export',
|
|
57
|
-
FLOW_WEBHOOK_COPY:"flow_webhook_copy",
|
|
58
|
-
FLOW_WEBHOOK_EDIT:"flow_webhook_edit",
|
|
59
|
-
FLOW_WEBHOOK_DELETE:"flow_webhook_delete",
|
|
60
|
-
// FLOW_VIEW_MESSAGE_GRAPH: 'flow_view_message_graph',
|
|
61
|
-
|
|
62
|
-
LEADS_READ: 'leads_read',
|
|
63
|
-
LEAD_UPDATE: 'lead_update',
|
|
64
|
-
LEAD_RESTORE: 'lead_restore',
|
|
65
|
-
LEAD_TRASH: 'lead_trash',
|
|
66
|
-
LEAD_DELETE: 'lead_delete',
|
|
67
|
-
LEADS_EXPORT: 'leads_export',
|
|
68
|
-
LEAD_BAN: 'lead_ban',
|
|
69
|
-
LEAD_UNBAN: 'lead_unban',
|
|
70
|
-
|
|
71
|
-
ANALYTICS_READ: 'analytics_read',
|
|
72
|
-
ACTIVITIES_READ: 'activities_read',
|
|
73
|
-
|
|
74
|
-
WIDGETSETUP_READ: 'widgetsetup_read',
|
|
75
|
-
INSTALLATION_READ: 'installation_read',
|
|
76
|
-
TRANSLATIONS_READ: 'translations_read',
|
|
77
|
-
WIDGETSETUP_UPDATE: 'widgetsetup_update',
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
DEPARTMENTS_LIST_READ: 'department_list_read',
|
|
82
|
-
DEPARTMENT_DETAIL_READ: 'department_detail_read',
|
|
83
|
-
DEPARTMENT_CREATE_READ: 'department_create_read',
|
|
84
|
-
|
|
85
|
-
TEAMMATES_READ: 'teammates_read',
|
|
86
|
-
TEAMMATE_UPDATE: 'teammate_update',
|
|
87
|
-
TEAMMATES_CREATE: 'teammates_create',
|
|
88
|
-
ROLES_READ: 'roles_read',
|
|
89
|
-
GROUPS_READ: 'groups_read',
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
EMAIL_TICKETING_READ:'email_ticketing_read',
|
|
94
|
-
EMAIL_TICKETING_UPDATE:'email_ticketing_update',
|
|
95
|
-
|
|
96
|
-
CANNED_RESPONSES_READ:'canned_responses_read',
|
|
97
|
-
CANNED_RESPONSES_UPDATE:'canned_responses_update',
|
|
98
|
-
CANNED_RESPONSES_CREATE:'canned_responses_create',
|
|
99
|
-
CANNED_RESPONSES_DELETE:'canned_responses_delete',
|
|
100
|
-
|
|
101
|
-
TAGS_READ:'tags_read',
|
|
102
|
-
TAG_CREATE:'tag_create',
|
|
103
|
-
TAG_DELETE:'tag_delete',
|
|
104
|
-
TAG_UPDATE:'tag_update',
|
|
105
|
-
|
|
106
|
-
HOURS_READ: 'hours_read',
|
|
107
|
-
HOURS_UPDATE: 'hours_update',
|
|
108
|
-
HOURS_DELETE: 'hours_delete',
|
|
109
|
-
HOURS_CREATE: 'hours_create',
|
|
110
|
-
|
|
111
|
-
INTEGRATIONS_READ: 'integrations_read',
|
|
112
|
-
INTEGRATIONS_UPDATE: 'integrations_update',
|
|
113
|
-
|
|
114
|
-
APPS_READ:'apps_read',
|
|
115
|
-
APPS_UPDATE:'apps_update',
|
|
116
|
-
|
|
117
|
-
SETTINGS_READ: 'settings_read',
|
|
118
|
-
PROJECTSETTINGS_GENERAL_READ: 'projectsettings_general_read',
|
|
119
|
-
PROJECTSETTINGS_GENERAL_UPDATE: 'projectsettings_general_update',
|
|
120
|
-
PROJECTSETTINGS_SUBSCRIPTION_READ: 'projectsettings_subscription_read',
|
|
121
|
-
PROJECTSETTINGS_DEVELOPER_READ: 'projectsettings_developer_read',
|
|
122
|
-
PROJECTSETTINGS_DEVELOPER_UPDATE: 'projectsettings_developer_update',
|
|
123
|
-
PROJECTSETTINGS_SMARTASSIGNMENT_READ: 'projectsettings_smartassignment_read',
|
|
124
|
-
PROJECTSETTINGS_SMARTASSIGNMENT_UPDATE: 'projectsettings_smartassignment_update',
|
|
125
|
-
PROJECTSETTINGS_NOTIFICATION_READ: 'projectsettings_notification_read',
|
|
126
|
-
PROJECTSETTINGS_SECURITY_READ: 'projectsettings_security_read',
|
|
127
|
-
PROJECTSETTINGS_BANNED_READ: 'projectsettings_banned_read',
|
|
128
|
-
PROJECTSETTINGS_ADVANCED_READ: 'projectsettings_advanced_read',
|
|
129
|
-
|
|
130
|
-
ACCESS_LISTS: 'accessLists',
|
|
131
|
-
PROFILE_PAGES: 'profilePages',
|
|
132
|
-
LEAD_DATA: 'leadData',
|
|
133
|
-
IMPORT_DATA: 'importData',
|
|
134
|
-
MANAGE_TAGS: 'manageTags',
|
|
135
|
-
|
|
136
|
-
CHANGE_PROJECT:'change_project',
|
|
137
|
-
SIMULATE_CONV:'simulate_conv',
|
|
138
|
-
};
|
|
Binary file
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
function loadAgentDesktopScript() {
|
|
2
|
-
if (document.getElementById('agentdesktop-sdk')) {
|
|
3
|
-
return;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
const script = document.createElement('script');
|
|
7
|
-
script.id = 'agentdesktop-sdk';
|
|
8
|
-
script.type = 'text/javascript';
|
|
9
|
-
script.src = 'https://devcti.aruba.it/AD/widget/agentdesktop_widget.js';
|
|
10
|
-
script.async = true;
|
|
11
|
-
|
|
12
|
-
script.onload = () => {
|
|
13
|
-
console.log('AgentDesktop SDK caricato');
|
|
14
|
-
window.agentDesktopLoaded = true;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
script.onerror = (error) => {
|
|
18
|
-
console.error('Errore nel caricamento AgentDesktop SDK', error);
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (document.body) {
|
|
27
|
-
document.body.appendChild(script);
|
|
28
|
-
} else {
|
|
29
|
-
window.addEventListener('DOMContentLoaded', function() {
|
|
30
|
-
document.body.appendChild(script);
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
function openTicketOnHDA(requestId){
|
|
37
|
-
console.log('openTicketOnHDA called with requestId:', requestId);
|
|
38
|
-
const message = { companyID: "1", sourceID: "CHAT", tiledeskID: requestId, target: "HDA", origin: "Tiledesk" }
|
|
39
|
-
if(window && window.parent){
|
|
40
|
-
window.parent.postMessage(message, 'https://devhda2bo.aruba.it/HDAPortal/');
|
|
41
|
-
window.postMessage(message, 'https://devhda2bo.aruba.it/HDAPortal/');
|
|
42
|
-
console.log('Message posted to parent window and current window');
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
if(window['AGENTDESKTOP']){
|
|
46
|
-
console.log('AGENTDESKTOP exist. Sending message . . .');
|
|
47
|
-
window['AGENTDESKTOP']['WIDGET'].sendDataToWidget('PAT', JSON.stringify(message)); // invia il messaggio ad HDA
|
|
48
|
-
AGENTDESKTOP.TAB.GoTo('PAT'); // dà il focus ad HDA
|
|
49
|
-
console.log('Message sent to AGENTDESKTOP widget');
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
loadAgentDesktopScript();
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
importScripts('https://unpkg.com/mqtt/dist/mqtt.min.js');
|
|
2
|
-
|
|
3
|
-
let client = null;
|
|
4
|
-
let user_id = null;
|
|
5
|
-
let pingIntervalId = null;
|
|
6
|
-
self.onmessage = function(event) {
|
|
7
|
-
const data = event.data;
|
|
8
|
-
|
|
9
|
-
// console.log('MQTT KEEPALIVE WORKER - received message ', data);
|
|
10
|
-
if (data.action === 'start') {
|
|
11
|
-
user_id = data.user_id;
|
|
12
|
-
const endpoint = data.endpoint;
|
|
13
|
-
const jwt = data.jwt;
|
|
14
|
-
|
|
15
|
-
const options = {
|
|
16
|
-
keepalive: 3, // basso keepalive
|
|
17
|
-
reconnectPeriod: 1000,
|
|
18
|
-
clientId: data.client_id,
|
|
19
|
-
username: 'JWT',
|
|
20
|
-
password: jwt,
|
|
21
|
-
rejectUnauthorized: false
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
client = mqtt.connect(endpoint, options);
|
|
25
|
-
|
|
26
|
-
client.on('connect', () => {
|
|
27
|
-
// start ping
|
|
28
|
-
pingIntervalId = setInterval(() => {
|
|
29
|
-
if (client && client.connected) {
|
|
30
|
-
// console.log('MQTT KEEPALIVE WORKER - sending keepalive ping for user ', user_id);
|
|
31
|
-
client.publish(`apps/tilechat/users/${user_id}/keepalive`,
|
|
32
|
-
JSON.stringify({ ts: new Date().getTime() }));
|
|
33
|
-
}
|
|
34
|
-
}, 3000);
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
client.on('close', () => {
|
|
38
|
-
clearInterval(pingIntervalId);
|
|
39
|
-
pingIntervalId = null;
|
|
40
|
-
});
|
|
41
|
-
}else if (data.action === 'ping') {
|
|
42
|
-
if (self.timer) return;
|
|
43
|
-
|
|
44
|
-
self.timer = setInterval(() => {
|
|
45
|
-
postMessage({ action: 'ping' });
|
|
46
|
-
}, 3000);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (data.action === 'stop') {
|
|
50
|
-
if (pingIntervalId) clearInterval(pingIntervalId);
|
|
51
|
-
if (client) client.end();
|
|
52
|
-
}
|
|
53
|
-
};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export interface ProjectUser {
|
|
2
|
-
_id?: string;
|
|
3
|
-
updatedAt?: any;
|
|
4
|
-
createdAt?: any;
|
|
5
|
-
id_project?: string;
|
|
6
|
-
user_available?: boolean;
|
|
7
|
-
role?: string;
|
|
8
|
-
createdBy?: string;
|
|
9
|
-
is_group_member?: boolean;
|
|
10
|
-
// id_user?: string;
|
|
11
|
-
isAuthenticated?: boolean;
|
|
12
|
-
isBusy?: boolean;
|
|
13
|
-
status?: string;
|
|
14
|
-
id_user?: any;
|
|
15
|
-
rolePermissions?: string[];
|
|
16
|
-
profileStatus?: string;
|
|
17
|
-
presence?: { [key: string]: string}
|
|
18
|
-
__v?: any;
|
|
19
|
-
}
|